From 86cd440472cd683157240ab9e4f2d69394b276fa Mon Sep 17 00:00:00 2001 From: Gonen Radai Date: Mon, 6 Oct 2014 15:08:22 +0300 Subject: [PATCH 001/326] first commit - Kaltura Moodle plugin v4.0.00 --- filter/kaltura/filter.php | 233 + filter/kaltura/filtersettings.php | 30 + filter/kaltura/lang/en/filter_kaltura.php | 29 + filter/kaltura/lti_launch.php | 81 + filter/kaltura/version.php | 33 + .../lang/en/tinymce_kalturamedia.php | 28 + .../tinymce/plugins/kalturamedia/lib.php | 64 + .../plugins/kalturamedia/lti_launch.php | 77 + .../tinymce/plugins/kalturamedia/pix/icon.png | Bin 0 -> 1912 bytes .../kalturamedia/tinymce/editor_plugin.js | 75 + .../plugins/kalturamedia/tinymce/img/icon.gif | Bin 0 -> 575 bytes .../kalturamedia/tinymce/js/ltipopuplib.js | 53 + .../kalturamedia/tinymce/ltibrowse.php | 69 + .../plugins/kalturamedia/tinymce/renderer.php | 84 + .../kalturamedia/tinymce_kalturamedia.php | 28 + .../tinymce/plugins/kalturamedia/version.php | 33 + local/kaltura/API/KalturaClient.php | 8347 ++++++++ local/kaltura/API/KalturaClientBase.php | 1228 ++ local/kaltura/API/KalturaEnums.php | 3213 +++ ...nersWatermarkAccessControlClientPlugin.php | 84 + .../KalturaAdCuePointClientPlugin.php | 253 + .../KalturaAnnotationClientPlugin.php | 450 + .../KalturaAsperaClientPlugin.php | 113 + .../KalturaAttachmentClientPlugin.php | 435 + .../KalturaAuditClientPlugin.php | 893 + .../KalturaBulkUploadClientPlugin.php | 187 + .../KalturaBulkUploadCsvClientPlugin.php | 113 + .../KalturaBulkUploadFilterClientPlugin.php | 101 + .../KalturaBulkUploadXmlClientPlugin.php | 85 + .../KalturaCaptionClientPlugin.php | 771 + .../KalturaCaptionSearchClientPlugin.php | 325 + .../KalturaCodeCuePointClientPlugin.php | 237 + ...KalturaContentDistributionClientPlugin.php | 3454 ++++ .../KalturaCuePointClientPlugin.php | 640 + .../KalturaDocumentClientPlugin.php | 944 + .../KalturaPlugins/KalturaDrmClientPlugin.php | 434 + .../KalturaDropFolderClientPlugin.php | 1777 ++ ...uraDropFolderXmlBulkUploadClientPlugin.php | 86 + .../KalturaEmailNotificationClientPlugin.php | 630 + .../KalturaEventNotificationClientPlugin.php | 790 + .../KalturaExternalMediaClientPlugin.php | 363 + .../KalturaFileSyncClientPlugin.php | 338 + .../KalturaHttpNotificationClientPlugin.php | 624 + .../KalturaKontikiClientPlugin.php | 177 + .../KalturaLikeClientPlugin.php | 153 + .../KalturaMetadataClientPlugin.php | 1566 ++ .../KalturaMultiCentersClientPlugin.php | 119 + .../KalturaShortLinkClientPlugin.php | 476 + .../KalturaTagSearchClientPlugin.php | 320 + .../KalturaVarConsoleClientPlugin.php | 398 + .../KalturaVelocixClientPlugin.php | 105 + .../KalturaVirusScanClientPlugin.php | 545 + .../KalturaWebexDropFolderClientPlugin.php | 292 + .../KalturaWidevineClientPlugin.php | 396 + local/kaltura/API/KalturaTypes.php | 16367 ++++++++++++++++ local/kaltura/API/TestCode/DemoVideo.flv | Bin 0 -> 512919 bytes .../API/TestCode/KalturaTestConfiguration.php | 36 + local/kaltura/API/TestCode/TestMain.php | 137 + local/kaltura/API/agpl.txt | 674 + local/kaltura/db/access.php | 39 + local/kaltura/db/install.php | 595 + local/kaltura/db/install.xml | 25 + local/kaltura/db/upgrade.php | 67 + local/kaltura/download_log.php | 103 + local/kaltura/download_log_form.php | 46 + local/kaltura/lang/en/local_kaltura.php | 64 + local/kaltura/lib.php | 24 + local/kaltura/locallib.php | 715 + local/kaltura/migration.php | 114 + local/kaltura/migration_form.php | 77 + local/kaltura/migrationlib.php | 1067 + local/kaltura/pix/icon.png | Bin 0 -> 1912 bytes local/kaltura/pix/kavatar.png | Bin 0 -> 2998 bytes local/kaltura/pix/vidThumb.png | Bin 0 -> 2404 bytes local/kaltura/renderer.php | 118 + local/kaltura/service.php | 101 + local/kaltura/settings.php | 95 + local/kaltura/styles.css | 10 + local/kaltura/tests/locallib_test.php | 1293 ++ local/kaltura/tests/migrationlib_test.php | 194 + local/kaltura/version.php | 32 + ...moodle-local_kaltura-lticontainer-debug.js | 167 + .../moodle-local_kaltura-lticontainer-min.js | 1 + .../moodle-local_kaltura-lticontainer.js | 167 + .../moodle-local_kaltura-ltipanel-debug.js | 471 + .../moodle-local_kaltura-ltipanel-min.js | 1 + .../moodle-local_kaltura-ltipanel.js | 471 + .../moodle-local_kaltura-ltiservice-debug.js | 119 + .../moodle-local_kaltura-ltiservice-min.js | 1 + .../moodle-local_kaltura-ltiservice.js | 119 + ...dle-local_kaltura-ltitinymcepanel-debug.js | 141 + ...oodle-local_kaltura-ltitinymcepanel-min.js | 1 + .../moodle-local_kaltura-ltitinymcepanel.js | 141 + .../moodle-local_kaltura-ltiservice-debug.js | 58 + .../moodle-local_kaltura-ltiservice-min.js | 1 + .../moodle-local_kaltura-ltiservice.js | 58 + local/kaltura/yui/src/lticontainer/build.json | 10 + .../yui/src/lticontainer/js/lticontainer.js | 162 + .../src/lticontainer/meta/lticontainer.json | 8 + local/kaltura/yui/src/ltipanel/build.json | 10 + local/kaltura/yui/src/ltipanel/js/ltipanel.js | 467 + .../yui/src/ltipanel/meta/ltipanel.json | 10 + local/kaltura/yui/src/ltiservice/build.json | 10 + .../yui/src/ltiservice/js/ltiservice.js | 115 + .../yui/src/ltiservice/meta/ltiservice.json | 9 + .../yui/src/ltitinymcepanel/build.json | 10 + .../src/ltitinymcepanel/js/ltitinymcepanel.js | 136 + .../ltitinymcepanel/meta/ltitinymcepanel.json | 10 + local/kalturamediagallery/db/access.php | 37 + local/kalturamediagallery/index.php | 78 + .../lang/en/local_kalturamediagallery.php | 31 + local/kalturamediagallery/lib.php | 72 + local/kalturamediagallery/lti_launch.php | 53 + local/kalturamediagallery/version.php | 36 + local/mymedia/db/access.php | 34 + local/mymedia/lang/en/local_mymedia.php | 30 + local/mymedia/lib.php | 56 + local/mymedia/lti_launch.php | 51 + local/mymedia/mymedia.php | 71 + local/mymedia/version.php | 35 + ...ackup_kalvidassign_activity_task.class.php | 67 + .../backup_kalvidassign_settingslib.php | 26 + .../moodle2/backup_kalvidassign_stepslib.php | 99 + ...store_kalvidassign_activity_task.class.php | 109 + .../moodle2/restore_kalvidassign_stepslib.php | 82 + mod/kalvidassign/db/access.php | 55 + mod/kalvidassign/db/install.xml | 60 + mod/kalvidassign/db/log.php | 32 + mod/kalvidassign/db/messages.php | 26 + mod/kalvidassign/db/upgrade.php | 89 + mod/kalvidassign/grade_preferences_form.php | 124 + mod/kalvidassign/grade_submissions.php | 208 + mod/kalvidassign/index.php | 48 + mod/kalvidassign/lang/en/kalvidassign.php | 115 + mod/kalvidassign/lib.php | 395 + mod/kalvidassign/locallib.php | 356 + mod/kalvidassign/lti_launch.php | 67 + mod/kalvidassign/mod_form.php | 78 + mod/kalvidassign/pix/icon.gif | Bin 0 -> 128 bytes mod/kalvidassign/renderable.php | 69 + mod/kalvidassign/renderer.php | 1124 ++ mod/kalvidassign/single_submission.php | 222 + mod/kalvidassign/single_submission_form.php | 209 + mod/kalvidassign/styles.css | 53 + mod/kalvidassign/submission.php | 147 + mod/kalvidassign/version.php | 36 + mod/kalvidassign/view.php | 138 + .../backup_kalvidpres_activity_task.class.php | 67 + .../moodle2/backup_kalvidpres_settingslib.php | 26 + .../moodle2/backup_kalvidpres_stepslib.php | 47 + .../backup_kalvidres_activity_task.class.php | 66 + .../moodle2/backup_kalvidres_settingslib.php | 26 + .../moodle2/backup_kalvidres_stepslib.php | 46 + ...restore_kalvidpres_activity_task.class.php | 107 + .../moodle2/restore_kalvidpres_stepslib.php | 62 + .../restore_kalvidres_activity_task.class.php | 107 + .../moodle2/restore_kalvidres_stepslib.php | 62 + mod/kalvidpres/db/access.php | 36 + mod/kalvidpres/db/install.xml | 36 + mod/kalvidpres/db/log.php | 31 + mod/kalvidpres/db/upgrade.php | 96 + mod/kalvidpres/lang/en/kalvidpres.php | 36 + mod/kalvidpres/lang/en/kalvidres.php | 36 + mod/kalvidpres/lib.php | 199 + mod/kalvidpres/lti_launch.php | 74 + mod/kalvidpres/mod_form.php | 261 + mod/kalvidpres/pix/icon.gif | Bin 0 -> 128 bytes mod/kalvidpres/renderer.php | 61 + mod/kalvidpres/styles.css | 38 + mod/kalvidpres/version.php | 36 + mod/kalvidpres/view.php | 89 + .../backup_kalvidres_activity_task.class.php | 66 + .../moodle2/backup_kalvidres_settingslib.php | 26 + .../moodle2/backup_kalvidres_stepslib.php | 46 + .../restore_kalvidres_activity_task.class.php | 107 + .../moodle2/restore_kalvidres_stepslib.php | 62 + mod/kalvidres/db/access.php | 35 + mod/kalvidres/db/install.xml | 30 + mod/kalvidres/db/log.php | 28 + mod/kalvidres/db/upgrade.php | 71 + mod/kalvidres/lang/en/kalvidres.php | 36 + mod/kalvidres/lib.php | 199 + mod/kalvidres/lti_launch.php | 73 + mod/kalvidres/mod_form.php | 251 + mod/kalvidres/pix/icon.gif | Bin 0 -> 128 bytes mod/kalvidres/renderer.php | 78 + mod/kalvidres/styles.css | 34 + mod/kalvidres/version.php | 36 + mod/kalvidres/view.php | 86 + 189 files changed, 64773 insertions(+) create mode 100644 filter/kaltura/filter.php create mode 100644 filter/kaltura/filtersettings.php create mode 100644 filter/kaltura/lang/en/filter_kaltura.php create mode 100644 filter/kaltura/lti_launch.php create mode 100644 filter/kaltura/version.php create mode 100644 lib/editor/tinymce/plugins/kalturamedia/lang/en/tinymce_kalturamedia.php create mode 100644 lib/editor/tinymce/plugins/kalturamedia/lib.php create mode 100644 lib/editor/tinymce/plugins/kalturamedia/lti_launch.php create mode 100644 lib/editor/tinymce/plugins/kalturamedia/pix/icon.png create mode 100644 lib/editor/tinymce/plugins/kalturamedia/tinymce/editor_plugin.js create mode 100644 lib/editor/tinymce/plugins/kalturamedia/tinymce/img/icon.gif create mode 100644 lib/editor/tinymce/plugins/kalturamedia/tinymce/js/ltipopuplib.js create mode 100644 lib/editor/tinymce/plugins/kalturamedia/tinymce/ltibrowse.php create mode 100644 lib/editor/tinymce/plugins/kalturamedia/tinymce/renderer.php create mode 100644 lib/editor/tinymce/plugins/kalturamedia/tinymce_kalturamedia.php create mode 100644 lib/editor/tinymce/plugins/kalturamedia/version.php create mode 100644 local/kaltura/API/KalturaClient.php create mode 100644 local/kaltura/API/KalturaClientBase.php create mode 100644 local/kaltura/API/KalturaEnums.php create mode 100644 local/kaltura/API/KalturaPlugins/KalturaAbcScreenersWatermarkAccessControlClientPlugin.php create mode 100644 local/kaltura/API/KalturaPlugins/KalturaAdCuePointClientPlugin.php create mode 100644 local/kaltura/API/KalturaPlugins/KalturaAnnotationClientPlugin.php create mode 100644 local/kaltura/API/KalturaPlugins/KalturaAsperaClientPlugin.php create mode 100644 local/kaltura/API/KalturaPlugins/KalturaAttachmentClientPlugin.php create mode 100644 local/kaltura/API/KalturaPlugins/KalturaAuditClientPlugin.php create mode 100644 local/kaltura/API/KalturaPlugins/KalturaBulkUploadClientPlugin.php create mode 100644 local/kaltura/API/KalturaPlugins/KalturaBulkUploadCsvClientPlugin.php create mode 100644 local/kaltura/API/KalturaPlugins/KalturaBulkUploadFilterClientPlugin.php create mode 100644 local/kaltura/API/KalturaPlugins/KalturaBulkUploadXmlClientPlugin.php create mode 100644 local/kaltura/API/KalturaPlugins/KalturaCaptionClientPlugin.php create mode 100644 local/kaltura/API/KalturaPlugins/KalturaCaptionSearchClientPlugin.php create mode 100644 local/kaltura/API/KalturaPlugins/KalturaCodeCuePointClientPlugin.php create mode 100644 local/kaltura/API/KalturaPlugins/KalturaContentDistributionClientPlugin.php create mode 100644 local/kaltura/API/KalturaPlugins/KalturaCuePointClientPlugin.php create mode 100644 local/kaltura/API/KalturaPlugins/KalturaDocumentClientPlugin.php create mode 100644 local/kaltura/API/KalturaPlugins/KalturaDrmClientPlugin.php create mode 100644 local/kaltura/API/KalturaPlugins/KalturaDropFolderClientPlugin.php create mode 100644 local/kaltura/API/KalturaPlugins/KalturaDropFolderXmlBulkUploadClientPlugin.php create mode 100644 local/kaltura/API/KalturaPlugins/KalturaEmailNotificationClientPlugin.php create mode 100644 local/kaltura/API/KalturaPlugins/KalturaEventNotificationClientPlugin.php create mode 100644 local/kaltura/API/KalturaPlugins/KalturaExternalMediaClientPlugin.php create mode 100644 local/kaltura/API/KalturaPlugins/KalturaFileSyncClientPlugin.php create mode 100644 local/kaltura/API/KalturaPlugins/KalturaHttpNotificationClientPlugin.php create mode 100644 local/kaltura/API/KalturaPlugins/KalturaKontikiClientPlugin.php create mode 100644 local/kaltura/API/KalturaPlugins/KalturaLikeClientPlugin.php create mode 100644 local/kaltura/API/KalturaPlugins/KalturaMetadataClientPlugin.php create mode 100644 local/kaltura/API/KalturaPlugins/KalturaMultiCentersClientPlugin.php create mode 100644 local/kaltura/API/KalturaPlugins/KalturaShortLinkClientPlugin.php create mode 100644 local/kaltura/API/KalturaPlugins/KalturaTagSearchClientPlugin.php create mode 100644 local/kaltura/API/KalturaPlugins/KalturaVarConsoleClientPlugin.php create mode 100644 local/kaltura/API/KalturaPlugins/KalturaVelocixClientPlugin.php create mode 100644 local/kaltura/API/KalturaPlugins/KalturaVirusScanClientPlugin.php create mode 100644 local/kaltura/API/KalturaPlugins/KalturaWebexDropFolderClientPlugin.php create mode 100644 local/kaltura/API/KalturaPlugins/KalturaWidevineClientPlugin.php create mode 100644 local/kaltura/API/KalturaTypes.php create mode 100644 local/kaltura/API/TestCode/DemoVideo.flv create mode 100644 local/kaltura/API/TestCode/KalturaTestConfiguration.php create mode 100644 local/kaltura/API/TestCode/TestMain.php create mode 100644 local/kaltura/API/agpl.txt create mode 100644 local/kaltura/db/access.php create mode 100644 local/kaltura/db/install.php create mode 100755 local/kaltura/db/install.xml create mode 100644 local/kaltura/db/upgrade.php create mode 100644 local/kaltura/download_log.php create mode 100644 local/kaltura/download_log_form.php create mode 100644 local/kaltura/lang/en/local_kaltura.php create mode 100644 local/kaltura/lib.php create mode 100644 local/kaltura/locallib.php create mode 100644 local/kaltura/migration.php create mode 100644 local/kaltura/migration_form.php create mode 100644 local/kaltura/migrationlib.php create mode 100644 local/kaltura/pix/icon.png create mode 100644 local/kaltura/pix/kavatar.png create mode 100644 local/kaltura/pix/vidThumb.png create mode 100644 local/kaltura/renderer.php create mode 100644 local/kaltura/service.php create mode 100644 local/kaltura/settings.php create mode 100644 local/kaltura/styles.css create mode 100644 local/kaltura/tests/locallib_test.php create mode 100644 local/kaltura/tests/migrationlib_test.php create mode 100644 local/kaltura/version.php create mode 100644 local/kaltura/yui/build/moodle-local_kaltura-lticontainer/moodle-local_kaltura-lticontainer-debug.js create mode 100644 local/kaltura/yui/build/moodle-local_kaltura-lticontainer/moodle-local_kaltura-lticontainer-min.js create mode 100644 local/kaltura/yui/build/moodle-local_kaltura-lticontainer/moodle-local_kaltura-lticontainer.js create mode 100644 local/kaltura/yui/build/moodle-local_kaltura-ltipanel/moodle-local_kaltura-ltipanel-debug.js create mode 100644 local/kaltura/yui/build/moodle-local_kaltura-ltipanel/moodle-local_kaltura-ltipanel-min.js create mode 100644 local/kaltura/yui/build/moodle-local_kaltura-ltipanel/moodle-local_kaltura-ltipanel.js create mode 100644 local/kaltura/yui/build/moodle-local_kaltura-ltiservice/moodle-local_kaltura-ltiservice-debug.js create mode 100644 local/kaltura/yui/build/moodle-local_kaltura-ltiservice/moodle-local_kaltura-ltiservice-min.js create mode 100644 local/kaltura/yui/build/moodle-local_kaltura-ltiservice/moodle-local_kaltura-ltiservice.js create mode 100644 local/kaltura/yui/build/moodle-local_kaltura-ltitinymcepanel/moodle-local_kaltura-ltitinymcepanel-debug.js create mode 100644 local/kaltura/yui/build/moodle-local_kaltura-ltitinymcepanel/moodle-local_kaltura-ltitinymcepanel-min.js create mode 100644 local/kaltura/yui/build/moodle-local_kaltura-ltitinymcepanel/moodle-local_kaltura-ltitinymcepanel.js create mode 100644 local/kaltura/yui/src/build/moodle-local_kaltura-ltiservice/moodle-local_kaltura-ltiservice-debug.js create mode 100644 local/kaltura/yui/src/build/moodle-local_kaltura-ltiservice/moodle-local_kaltura-ltiservice-min.js create mode 100644 local/kaltura/yui/src/build/moodle-local_kaltura-ltiservice/moodle-local_kaltura-ltiservice.js create mode 100644 local/kaltura/yui/src/lticontainer/build.json create mode 100644 local/kaltura/yui/src/lticontainer/js/lticontainer.js create mode 100644 local/kaltura/yui/src/lticontainer/meta/lticontainer.json create mode 100644 local/kaltura/yui/src/ltipanel/build.json create mode 100644 local/kaltura/yui/src/ltipanel/js/ltipanel.js create mode 100644 local/kaltura/yui/src/ltipanel/meta/ltipanel.json create mode 100644 local/kaltura/yui/src/ltiservice/build.json create mode 100644 local/kaltura/yui/src/ltiservice/js/ltiservice.js create mode 100644 local/kaltura/yui/src/ltiservice/meta/ltiservice.json create mode 100644 local/kaltura/yui/src/ltitinymcepanel/build.json create mode 100644 local/kaltura/yui/src/ltitinymcepanel/js/ltitinymcepanel.js create mode 100644 local/kaltura/yui/src/ltitinymcepanel/meta/ltitinymcepanel.json create mode 100644 local/kalturamediagallery/db/access.php create mode 100644 local/kalturamediagallery/index.php create mode 100644 local/kalturamediagallery/lang/en/local_kalturamediagallery.php create mode 100644 local/kalturamediagallery/lib.php create mode 100644 local/kalturamediagallery/lti_launch.php create mode 100644 local/kalturamediagallery/version.php create mode 100644 local/mymedia/db/access.php create mode 100644 local/mymedia/lang/en/local_mymedia.php create mode 100644 local/mymedia/lib.php create mode 100644 local/mymedia/lti_launch.php create mode 100644 local/mymedia/mymedia.php create mode 100644 local/mymedia/version.php create mode 100644 mod/kalvidassign/backup/moodle2/backup_kalvidassign_activity_task.class.php create mode 100644 mod/kalvidassign/backup/moodle2/backup_kalvidassign_settingslib.php create mode 100644 mod/kalvidassign/backup/moodle2/backup_kalvidassign_stepslib.php create mode 100644 mod/kalvidassign/backup/moodle2/restore_kalvidassign_activity_task.class.php create mode 100644 mod/kalvidassign/backup/moodle2/restore_kalvidassign_stepslib.php create mode 100644 mod/kalvidassign/db/access.php create mode 100755 mod/kalvidassign/db/install.xml create mode 100644 mod/kalvidassign/db/log.php create mode 100644 mod/kalvidassign/db/messages.php create mode 100644 mod/kalvidassign/db/upgrade.php create mode 100644 mod/kalvidassign/grade_preferences_form.php create mode 100644 mod/kalvidassign/grade_submissions.php create mode 100644 mod/kalvidassign/index.php create mode 100644 mod/kalvidassign/lang/en/kalvidassign.php create mode 100644 mod/kalvidassign/lib.php create mode 100644 mod/kalvidassign/locallib.php create mode 100644 mod/kalvidassign/lti_launch.php create mode 100644 mod/kalvidassign/mod_form.php create mode 100644 mod/kalvidassign/pix/icon.gif create mode 100644 mod/kalvidassign/renderable.php create mode 100644 mod/kalvidassign/renderer.php create mode 100644 mod/kalvidassign/single_submission.php create mode 100644 mod/kalvidassign/single_submission_form.php create mode 100644 mod/kalvidassign/styles.css create mode 100644 mod/kalvidassign/submission.php create mode 100644 mod/kalvidassign/version.php create mode 100644 mod/kalvidassign/view.php create mode 100644 mod/kalvidpres/backup/moodle2/backup_kalvidpres_activity_task.class.php create mode 100644 mod/kalvidpres/backup/moodle2/backup_kalvidpres_settingslib.php create mode 100644 mod/kalvidpres/backup/moodle2/backup_kalvidpres_stepslib.php create mode 100644 mod/kalvidpres/backup/moodle2/backup_kalvidres_activity_task.class.php create mode 100644 mod/kalvidpres/backup/moodle2/backup_kalvidres_settingslib.php create mode 100644 mod/kalvidpres/backup/moodle2/backup_kalvidres_stepslib.php create mode 100644 mod/kalvidpres/backup/moodle2/restore_kalvidpres_activity_task.class.php create mode 100644 mod/kalvidpres/backup/moodle2/restore_kalvidpres_stepslib.php create mode 100644 mod/kalvidpres/backup/moodle2/restore_kalvidres_activity_task.class.php create mode 100644 mod/kalvidpres/backup/moodle2/restore_kalvidres_stepslib.php create mode 100644 mod/kalvidpres/db/access.php create mode 100644 mod/kalvidpres/db/install.xml create mode 100644 mod/kalvidpres/db/log.php create mode 100644 mod/kalvidpres/db/upgrade.php create mode 100644 mod/kalvidpres/lang/en/kalvidpres.php create mode 100644 mod/kalvidpres/lang/en/kalvidres.php create mode 100644 mod/kalvidpres/lib.php create mode 100644 mod/kalvidpres/lti_launch.php create mode 100644 mod/kalvidpres/mod_form.php create mode 100644 mod/kalvidpres/pix/icon.gif create mode 100644 mod/kalvidpres/renderer.php create mode 100644 mod/kalvidpres/styles.css create mode 100644 mod/kalvidpres/version.php create mode 100644 mod/kalvidpres/view.php create mode 100644 mod/kalvidres/backup/moodle2/backup_kalvidres_activity_task.class.php create mode 100644 mod/kalvidres/backup/moodle2/backup_kalvidres_settingslib.php create mode 100644 mod/kalvidres/backup/moodle2/backup_kalvidres_stepslib.php create mode 100644 mod/kalvidres/backup/moodle2/restore_kalvidres_activity_task.class.php create mode 100644 mod/kalvidres/backup/moodle2/restore_kalvidres_stepslib.php create mode 100644 mod/kalvidres/db/access.php create mode 100644 mod/kalvidres/db/install.xml create mode 100644 mod/kalvidres/db/log.php create mode 100644 mod/kalvidres/db/upgrade.php create mode 100644 mod/kalvidres/lang/en/kalvidres.php create mode 100644 mod/kalvidres/lib.php create mode 100644 mod/kalvidres/lti_launch.php create mode 100644 mod/kalvidres/mod_form.php create mode 100644 mod/kalvidres/pix/icon.gif create mode 100644 mod/kalvidres/renderer.php create mode 100644 mod/kalvidres/styles.css create mode 100644 mod/kalvidres/version.php create mode 100644 mod/kalvidres/view.php diff --git a/filter/kaltura/filter.php b/filter/kaltura/filter.php new file mode 100644 index 0000000000000..99db0494d09b9 --- /dev/null +++ b/filter/kaltura/filter.php @@ -0,0 +1,233 @@ +. + +/** + * Kaltura filter script. + * + * @package filter_kaltura + * @author Remote-Learner.net Inc + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + * @copyright (C) 2014 Remote-Learner.net Inc (http://www.remote-learner.net) + */ + +class filter_kaltura extends moodle_text_filter { + /** @var object $context The current page context. */ + public static $pagecontext = null; + + /** @var string $kafuri The KAF URI. */ + public static $kafuri = null; + + /** @var string $apiurl The URI used by the previous version (v3) of the plug-ins when embedding anchor tags. */ + public static $apiurl = null; + + /** @var string $module The module used to render part of the final URL. */ + public static $module = null; + + /** @var string $defaultheight The default height for the video. */ + public static $defaultheight = 280; + + /** @var string $defaultwidth The default width for the video. */ + public static $defaultwidth = 400; + + /** + * This function runs once during a single page request and initialzies + * some data. + * @param object $page Moodle page object. + * @param object $context Page context object. + */ + public function setup($page, $context) { + global $CFG; + require_once($CFG->dirroot.'/local/kaltura/locallib.php'); + $configsettings = local_kaltura_get_config(); + + self::$pagecontext = $this->get_course_context($context); + + $newuri = ''; + + self::$kafuri = $configsettings->kaf_uri; + + if (!empty($configsettings->uri)) { + self::$apiurl = $configsettings->uri; + } + + self::$module = local_kaltura_get_endpoint(KAF_BROWSE_EMBED_MODULE); + } + + /** + * This function returns the course context where possible. + * @param object $context A context object. + * @return object A Moodle context object. + */ + protected function get_course_context($context) { + $coursecontext = null; + + if ($context instanceof context_course) { + $coursecontext = $context; + } else if ($context instanceof context_module) { + $coursecontext = $context->get_course_context(); + } else { + $coursecontext = context_system::instance(); + } + + return $coursecontext; + } + + /** + * This function does the work of converting text that matches a regular expression into + * Kaltura video markup, so that links to Kaltura videos are displayed in the Kaltura + * video player. + * @param string $text Text that is to be displayed on the page. + * @param array $options An array of additional options. + * @return string The same text or modified text is returned. + */ + public function filter($text, array $options = array()) { + global $CFG; + + // Check if the the filter plug-in is enabled. + if (empty($CFG->filter_kaltura_enable)) { + return $text; + } + + // Check either if the KAF URI or API URI has been set. If neither has been set then return the text with no changes. + if (is_null(self::$kafuri) && is_null(self::$apiurl)) { + return $text; + } + + // Performance shortcut. All regexes bellow end with the tag, if not present nothing can match. + if (false === stripos($text, '')) { + return $text; + } + + // We need to return the original value if regex fails! + $newtext = $text; + + // Search for v3 Kaltura embedded anchor tag format. + $uri = self::$apiurl; + $uri = rtrim($uri, '/'); + $uri = str_replace(array('.', '/', 'https'), array('\.', '\/', 'https?'), $uri); + + $oldsearch = '/]*href="('.$uri.')\/index\.php\/kwidget\/wid\/_([0-9]+)\/uiconf_id\/([0-9]+)\/entry_id\/([\d]+_([a-z0-9]+))\/v\/flash"[^>]*>([^>]*)<\/a>/is'; + $newtext = preg_replace_callback($oldsearch, 'filter_kaltura_callback', $newtext); + + // Search for newer versoin of Kaltura embedded anchor tag format. + $uri = self::$kafuri; + $uri = rtrim($uri, '/'); + $uri = str_replace(array('http://', 'https://', '.', '/'), array('https?://', 'https?://', '\.', '\/'), $uri); + + $search = '/]*href="(https?:\/\/'.KALTURA_URI_TOKEN.')\/browseandembed\/index\/media\/entryid\/([\d]+_([a-z0-9]+))\/showDescription\/(true|false)\/showTitle\/(true|false)\/'; + $search .= 'showTags\/(true|false)\/showDuration\/(true|false)\/showOwner\/(true|false)\/showUploadDate\/(true|false)\/playerSize\/([0-9]+)x([0-9]+)\/playerSkin\/([0-9]+)\/"[^>]*>([^>]*)<\/a>/is'; + $newtext = preg_replace_callback($search, 'filter_kaltura_callback', $newtext); + + if (empty($newtext) || $newtext === $text) { + // Error or not filtered. + unset($newtext); + return $text; + } + + return $newtext; + } +} + +/** + * Change links to Kaltura into embedded Kaltura videos. + * @param array $link An array of elements matching the regular expression from class filter_kaltura - filter(). + * @return string Kaltura embed video markup. + */ +function filter_kaltura_callback($link) { + global $CFG; + $newtext = $link[0]; + + $newurl = $link[1]; + if (!empty($newurl)) { + // Check to see if token is being used in url and replace with kaf_uri. + $parts = parse_url($link[1]); + if (!empty($parts['host']) && KALTURA_URI_TOKEN == $parts['host']) { + $newurl = filter_kaltura::$kafuri; + } + } + + $newurl = preg_replace('#https?://#','',$newurl); + $kafuri = preg_replace('#https?://#', '', filter_kaltura::$kafuri); + // Convert KAF URI anchor tags into iframe markup. + if (14 == count($link) && $newurl == $kafuri) { + // Get the height and width of the iframe. + $properties = explode('||', $link[13]); + + if (4 != count($properties)) { + return $link[0]; + } + + $source = filter_kaltura::$kafuri.'/browseandembed/index/media/entryid/'.$link[2].'/showDescription/'.$link[4].'/showTitle/'.$link[5]; + $source .= '/showTags/'.$link[6].'/showDuration/'.$link[7].'/showOwner/'.$link[8].'/showUploadDate/'.$link[9]; + $source .= '/playerSize/'.$properties[3].'x'.$properties[2].'/playerSkin/'.$link[12]; + + // Iniitate an LTI launch. + $params = array( + 'courseid' => filter_kaltura::$pagecontext->instanceid, + 'height' => $properties[2], + 'width' => $properties[3], + 'withblocks' => 0, + 'source' => $source + ); + $url = new moodle_url('/filter/kaltura/lti_launch.php', $params); + + $attr = array( + 'id' => 'contentframe', + 'height' => $properties[2], + 'width' => $properties[3], + 'allowfullscreen' => 'true', + 'webkitallowfullscreen' => 'true', + 'mozallowfullscreen' => 'true', + 'src' => $url->out(false), + 'frameborder' => '0' + ); + + $newtext = html_writer::tag('iframe', '', $attr); + } + + // Convert v3 anchor tags into iframe markup. + if (7 == count($link) && $link[1] == filter_kaltura::$apiurl) { + $source = filter_kaltura::$kafuri.'/browseandembed/index/media/entryid/'.$link[4].'/playerSize/'; + $source .= filter_kaltura::$defaultwidth.'x'.filter_kaltura::$defaultheight.'/playerSkin/'.$link[3]; + + // Iniitate an LTI launch. + $params = array( + 'courseid' => filter_kaltura::$pagecontext->instanceid, + 'height' => filter_kaltura::$defaultheight, + 'width' => filter_kaltura::$defaultwidth, + 'withblocks' => 0, + 'source' => $source + ); + + $url = new moodle_url('/filter/kaltura/lti_launch.php', $params); + + $attr = array( + 'id' => 'contentframe', + 'height' => filter_kaltura::$defaultheight, + 'width' => filter_kaltura::$defaultwidth, + 'allowfullscreen' => 'true', + 'webkitallowfullscreen' => 'true', + 'mozallowfullscreen' => 'true', + 'src' => $url->out(false), + 'frameborder' => '0' + ); + + $newtext = html_writer::tag('iframe', '', $attr); + + } + + return $newtext; +} diff --git a/filter/kaltura/filtersettings.php b/filter/kaltura/filtersettings.php new file mode 100644 index 0000000000000..7e8dc74a9e979 --- /dev/null +++ b/filter/kaltura/filtersettings.php @@ -0,0 +1,30 @@ +. + +/** + * Kaltura filter settings script. + * + * @package filter_kaltura + * @author Remote-Learner.net Inc + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + * @copyright (C) 2014 Remote-Learner.net Inc (http://www.remote-learner.net) + */ + +defined('MOODLE_INTERNAL') || die; + +if ($ADMIN->fulltree) { + $settings->add(new admin_setting_configcheckbox('filter_kaltura_enable', get_string('enable', 'filter_kaltura'), get_string('enable_help', 'filter_kaltura'), 1)); +} \ No newline at end of file diff --git a/filter/kaltura/lang/en/filter_kaltura.php b/filter/kaltura/lang/en/filter_kaltura.php new file mode 100644 index 0000000000000..e3e1fa37574f9 --- /dev/null +++ b/filter/kaltura/lang/en/filter_kaltura.php @@ -0,0 +1,29 @@ +. + +/** + * Kaltura filter language file. + * + * @package filter_kaltura + * @author Remote-Learner.net Inc + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + * @copyright (C) 2014 Remote-Learner.net Inc (http://www.remote-learner.net) + */ + +$string['filtername'] = 'Kaltura Media'; +$string['enable'] = 'Embed Kaltura Video Links'; +$string['enable_help'] = 'Convert Kaltura video links to embed code'; +$string['unable'] = 'Unable to convert video at this time'; \ No newline at end of file diff --git a/filter/kaltura/lti_launch.php b/filter/kaltura/lti_launch.php new file mode 100644 index 0000000000000..9df539c9a54ea --- /dev/null +++ b/filter/kaltura/lti_launch.php @@ -0,0 +1,81 @@ +. + +/** + * Kaltura filter plug-in LTI launch page. + * + * @package filter_kaltura + * @author Remote-Learner.net Inc + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + * @copyright (C) 2014 Remote Learner.net Inc http://www.remote-learner.net + */ + +require_once(dirname(dirname(dirname(__FILE__))).'/config.php'); +require_once(dirname(dirname(dirname(__FILE__))).'/local/kaltura/locallib.php'); + +global $SITE; + +require_login(); + +$courseid = required_param('courseid', PARAM_INT); +$height = required_param('height', PARAM_INT); +$width = required_param('width', PARAM_INT); +$withblocks = optional_param('withblocks', 0, PARAM_INT); +$source = optional_param('source', '', PARAM_URL); + +// If a course id of zero is passed, then we must be in the system context. +if (0 != $courseid) { + $context = context_course::instance($courseid); +} else { + $context = context_system::instance(); +} + +// Check if we're in a course context. +if ($context instanceof context_course) { + $course = get_course($courseid); + + // Check if the user has the capability to view comments in Moodle. + if (!has_capability('moodle/comment:view', $context)) { + echo get_string('nocapabilitytousethisservice', 'error'); + die(); + } +} else { + $course = $SITE; +} + +$launch = array(); +$launch['id'] = 1; +$launch['cmid'] = 0; +$launch['title'] = 'Kaltura video resource'; +$launch['module'] = KAF_BROWSE_EMBED_MODULE; +$launch['course'] = $course; +$launch['width'] = $width; +$launch['height'] = $height; +$launch['custom_publishdata'] = ''; + +if (false === local_kaltura_url_contains_configured_hostname($source) && !empty($source)) { + echo get_string('invalid_source_parameter', 'mod_kalvidres'); + die; +} else { + $launch['source'] = urldecode($source); +} + +if (local_kaltura_validate_browseembed_required_params($launch)) { + $content = local_kaltura_request_lti_launch($launch, $withblocks); + echo $content; +} else { + echo get_string('invalid_launch_parameters', 'mod_kalvidres'); +} \ No newline at end of file diff --git a/filter/kaltura/version.php b/filter/kaltura/version.php new file mode 100644 index 0000000000000..b9f7ed5a795ef --- /dev/null +++ b/filter/kaltura/version.php @@ -0,0 +1,33 @@ +. + +/** + * Kaltura version script. + * + * @package filter_kaltura + * @author Remote-Learner.net Inc + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + * @copyright (C) 2014 Remote-Learner.net Inc (http://www.remote-learner.net) + */ +defined('MOODLE_INTERNAL') || die(); + +$plugin->version = 2014013000; +$plugin->release = 'Kaltura release 4.0.00 (RL: TBD)'; +$plugin->requires = 2013051400; +$plugin->maturity = MATURITY_STABLE; +$plugin->dependencies = array( + 'local_kaltura' => 2014013000 +); \ No newline at end of file diff --git a/lib/editor/tinymce/plugins/kalturamedia/lang/en/tinymce_kalturamedia.php b/lib/editor/tinymce/plugins/kalturamedia/lang/en/tinymce_kalturamedia.php new file mode 100644 index 0000000000000..b2f2b7d51943f --- /dev/null +++ b/lib/editor/tinymce/plugins/kalturamedia/lang/en/tinymce_kalturamedia.php @@ -0,0 +1,28 @@ +. + +/** + * Kaltura media language file. + * + * @package tinymce_kalturamedia + * @author Remote-Learner.net Inc + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + * @copyright (C) 2014 Remote Learner.net Inc http://www.remote-learner.net + */ + +$string['pluginname'] = 'Kaltura media'; +/* All lang strings used from TinyMCE JavaScript code must be named 'pluginname:stringname', no need to create langs/en_dlg.js */ +$string['kalturamedia:desc'] = 'Embed Kaltura Media'; +$string['kalturamedia:insertbtn'] = 'Insert media'; +$string['kalturamedia:cancelbtn'] = 'Cancel'; diff --git a/lib/editor/tinymce/plugins/kalturamedia/lib.php b/lib/editor/tinymce/plugins/kalturamedia/lib.php new file mode 100644 index 0000000000000..7014e5de4e091 --- /dev/null +++ b/lib/editor/tinymce/plugins/kalturamedia/lib.php @@ -0,0 +1,64 @@ +. + +/** + * Kaltura media library file. + * + * @package tinymce_kalturamedia + * @author Remote-Learner.net Inc + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + * @copyright (C) 2014 Remote Learner.net Inc http://www.remote-learner.net + */ + +if (!defined('MOODLE_INTERNAL')) { + die('Direct access to this script is forbidden.'); +} + +require_once(dirname(dirname(dirname(dirname(dirname(dirname(__FILE__)))))).'/local/kaltura/locallib.php'); + +class tinymce_kalturamedia extends editor_tinymce_plugin { + /** @var array list of buttons defined by this plugin */ + protected $buttons = array('kalturamedia'); + + /** + * Adjusts TinyMCE init parameters for this plugin. + * + * Subclasses must implement this function in order to carry out changes + * to the TinyMCE settings. + * + * @param array $params TinyMCE init parameters array + * @param context $context Context where editor is being shown + * @param array $options Options for this editor + */ + protected function update_init_params(array &$params, context $context, array $options = null) { + $params['lti_launch_context_id'] = $context->id; + + // Add button after 'unlink' in Moodlemedia + $this->add_button_after($params, 3, 'kalturamedia', 'moodlemedia', true); + // Add JS file, which uses default name. + $this->add_js_plugin($params); + } + + /** + * Gets the order in which to run this plugin. Order usually only matters if + * (a) the place you add your button might depend on another plugin, or + * (b) you want to make some changes to layout etc. that should happen last. + * The default order is 100; within that, plugins are sorted alphabetically. + * Return a lower number if you want this plugin to run earlier, or a higher + * number if you want it to run later. + */ + protected function get_sort_order() { + return 111; + } +} \ No newline at end of file diff --git a/lib/editor/tinymce/plugins/kalturamedia/lti_launch.php b/lib/editor/tinymce/plugins/kalturamedia/lti_launch.php new file mode 100644 index 0000000000000..1c4ea2631073d --- /dev/null +++ b/lib/editor/tinymce/plugins/kalturamedia/lti_launch.php @@ -0,0 +1,77 @@ +. + +/** + * Kaltura media LTI launch page. + * + * @package tinymce_kalturamedia + * @author Remote-Learner.net Inc + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + * @copyright (C) 2014 Remote Learner.net Inc http://www.remote-learner.net + */ + +require_once(dirname(dirname(dirname(dirname(dirname(dirname(__FILE__)))))).'/config.php'); +require_once(dirname(dirname(dirname(dirname(dirname(dirname(__FILE__)))))).'/local/kaltura/locallib.php'); + +global $USER; + +require_login(); + +$contextid = required_param('contextid', PARAM_INT); +$height = required_param('height', PARAM_INT); +$width = required_param('width', PARAM_INT); +$withblocks = optional_param('withblocks', 0, PARAM_INT); + +$context = context::instance_by_id($contextid); + +$launch = array(); +$course = 0; + +if ($context instanceof context_course) { + $course = get_course($context->instanceid); + +} else if ($context instanceof context_system || $context instanceof context_coursecat) { + $course = get_course(1); +} else { + // Find parent context + $parentcontexts = $context->get_parent_contexts(false); + + foreach ($parentcontexts as $ctx) { + if ($ctx instanceof context_course) { + $course = get_course($ctx->instanceid); + break; + } else if ($ctx instanceof context_system || $ctx instanceof context_coursecat) { + $course = get_course(1); + break; + } + } +} + +$launch['id'] = 1; +$launch['cmid'] = 0; +$launch['title'] = 'Kaltura media'; +$launch['module'] = KAF_BROWSE_EMBED_MODULE; +$launch['course'] = $course; +$launch['width'] = $width; +$launch['height'] = $height; +$launch['custom_publishdata'] = ''; + +if (local_kaltura_validate_browseembed_required_params($launch)) { + $content = local_kaltura_request_lti_launch($launch, $withblocks); + echo $content; +} else { + echo get_string('invalid_launch_parameters', 'mod_kalvidres'); +} diff --git a/lib/editor/tinymce/plugins/kalturamedia/pix/icon.png b/lib/editor/tinymce/plugins/kalturamedia/pix/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..615c31d68e7c309bb63b6098a4bfbcad17a0bd27 GIT binary patch literal 1912 zcmaJ?X;c$u6b)e!Lqt5r4Hw2yt5C8NvXr2K5P}krB?WO~NCt=|nK&6t5U{wRsDPp( zR?%wJiY!$?i@2c(3R)M`atMkdM+;Q}i;AF#zjX4L3#Hi6(Z+o*#S%V7+Nf#XzKA=r8LA_%CILNJ0OW5{&A zaJ)*o3WdW~1%)eCEm!cB;B0Te%P7DFG%yAMMvYpl7Z`=$fUW>vTaM`Zc7Vh+(|~Rp~Gl zq6I99Pz;iQ2|+y5PbFw{Uu3oV&)0-s7~Kfz=u8^JQqmw$Ci{P=M)L)&$3o$+`TnP{ zK0Hwe(?elBl7K4k#>GyvgwhFoQ5eDyG#o+HgSR+89>EZOJfZ`9!#F^MN~=T+`T?{| zCJ4~#F-WU`1H?iQ=hIXwrGUfr3A}9OI!cd z=D{P}JC@}a)8d;iwuiO2*HPTmCMRbA|5iEz#G-JcX?mDLU|1Z*+iZT+^mgoASKDP{ z4l2mxwi?gzn_07RPgV;LjT%l)AJ6uWeXvDXGAwrDsBv*)IWOR}p!MoYnwt}nPqbhD zYdmWsxINRvngY9>r;s!V(s|xYYYGTLv*}CGn>~3W@4w#Z+oz)}N#PRQH{Cw#X}uWs%&oK3G&W zrd@jC-qCJ!P76VPyX17^qFsk~<`>#T%ZbFwLMh~yQTc0DdpJ1<+OR+Q>EEt5BvrrI z`u&i_jXC3D|L%u9!RDX8+qT#-s`tc_?0~zqR&5UrR^#`8IqCH|nR(0xBfEKl-lost zDzZAZ)!b{^yX;2PZbnyXh1&n_;v}NZ^znO_iyzMhCmroJ?`Qfm-?C#f4tIgAP?fH& z-Y$;{2R4@XC$|;F1e+g+&@Og%Uplq6W>OAaQtEx9$2eQ7>fCFLzwxMope`v~GZ%X% z@jf#ddb->y<@Cs0MOyspuCy#^)AM;-c1QwW(M90}wvH*;Rf!!R{xH2MTW!}&&Xw-I z<@kFui4uM9jdLh(#rgDIQB{KZ11*7Nh;}g&5G}>lvZx>Nh);W@7U@3=*b0-$I%r@>AimMyQx{zYnmtb zfgdD)K8UEj-1eiB;RuPtJNny!1P5DxdC1JL@|HTa7Rx-BEF2cUt+D1LapjCCuI6~7 zZ%r$^IdRR)wx+s-mld5vx2axH&5DMnMSyjF>E`^pVCqC`bl;P)tYY>oiCxk3Ddo_~ zOQV~bvwE(6<5DUuUi>EQW+4CYf&CF4tvwY->WLf6-Y*+|X2IMn^ZHcp)=clMRvQS4 zxoeK+uX_1P&^2*%1Q^1w8v?6y21*Xh)|. + +/** + * Kaltura media javascript file. + * + * @package tinymce_kalturamedia + * @author Remote-Learner.net Inc + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + * @copyright (C) 2014 Remote Learner.net Inc http://www.remote-learner.net + */ + +(function() { + tinymce.create('tinymce.plugins.kalturamediaPlugin', { + /** + * Initializes the plugin, this will be executed after the plugin has been created. + * This call is done before the editor instance has finished it's initialization so use the onInit event + * of the editor instance to intercept that event. + * + * @param {tinymce.Editor} ed Editor instance that the plugin is initialized in. + * @param {string} url Absolute URL to where the plugin is located. + */ + init : function(ed, url) { + lang = tinyMCE.activeEditor.getParam('language'); + + // Register the command to open a popup window + ed.addCommand('mcekalturamedia', function() { + ed.windowManager.open({ + file : ed.getParam("moodle_plugin_base")+'kalturamedia/tinymce/ltibrowse.php?lang=' + lang, + width : 1128 + parseInt(ed.getLang('media.delta_width', 0)), + height : 583 + parseInt(ed.getLang('media.delta_height', 0)), + inline : 1 + }, { + plugin_url : url + }); + }); + + // Register kalturaMedia button + ed.addButton('kalturamedia', { + title : 'kalturamedia.desc', + cmd : 'mcekalturamedia', + image : url+'/img/icon.gif' + }); + }, + + /** + * Returns information about the plugin as a name/value array. + * The current keys are longname, author, authorurl, infourl and version. + * + * @return {Object} Name/value array containing information about the plugin. + */ + getInfo : function() { + return { + longname : 'Kaltura media plugin', + author : 'Remote-Learner.net Inc', + authorurl : 'http://remote-learner.net', + infourl : 'http://docs.moodle.org/en/TinyMCE', + version : "1.0" + }; + } + }); + + // Register plugin. + tinymce.PluginManager.add('kalturamedia', tinymce.plugins.kalturamediaPlugin); +})(); diff --git a/lib/editor/tinymce/plugins/kalturamedia/tinymce/img/icon.gif b/lib/editor/tinymce/plugins/kalturamedia/tinymce/img/icon.gif new file mode 100644 index 0000000000000000000000000000000000000000..b32189b87d2ce8ab896659db755c9773d521696f GIT binary patch literal 575 zcmZ?wbhEHb6krfwIOfXmk4^hGr{NoZ^Zz`Wzj=+n@*95;H2Ep0^FhSqkD&g0F_WJn zIv>T1zl!U9me6}EW%6H5mmzC5L-rhoytxed(;4z-GUU%QAI|6;!XD@FdV;{CguYttpu^_MMnTs2v9)AHC2 z?Hvyd{$FGGf1Tm~O@?oG82;R0{C}U}{}YD)Lk%eY6Lc<0O)N=GQ7F$W$xv|j^bKH8 z{K>+|#Zb?n!vF-Jh+<%GZ>Vo-mThipZ&qru>uBcTZj!5aXi{m@ZDQf8SDsw2)}f. + +/** + * Kaltura media ltippopup javascript file. This code is based off of the word done for the Moodle media plug-in. + * @see editor/tinymce/plugins/moodlemedia. + * + * @package tinymce_kalturamedia + * @author Remote-Learner.net Inc + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + * @copyright (C) 2014 Remote Learner.net Inc http://www.remote-learner.net + */ + +var ed, url; + +if (url = tinyMCEPopup.getParam("media_external_list_url")) { + document.write(''); +} + +/** + * Initialization function to set a global to the current tinyMCE popup editor instance; and to set the editor context hidden element. + */ +function init() { + ed = tinyMCEPopup.editor; + var contextid = ed.getParam('lti_launch_context_id'); + document.getElementById('lti_launch_context_id').value = contextid; +} + +/** + * Insert the selected media into the editor. + */ +function insertMedia() { + var form = document.forms[0]; + var token = form.token.value; + var url = ''; + var parser = document.createElement('a'); + parser.href = form.source.value; + url = token + parser.pathname + parser.search; + var content = 'tinymce-kalturamedia-embed||'+form.video_title.value+'||'+form.width.value+'||'+form.height.value+''; + ed.execCommand('mceInsertContent', false, content); + tinyMCEPopup.close(); +} +tinyMCEPopup.onInit.add(init); diff --git a/lib/editor/tinymce/plugins/kalturamedia/tinymce/ltibrowse.php b/lib/editor/tinymce/plugins/kalturamedia/tinymce/ltibrowse.php new file mode 100644 index 0000000000000..0ab8ff96df99b --- /dev/null +++ b/lib/editor/tinymce/plugins/kalturamedia/tinymce/ltibrowse.php @@ -0,0 +1,69 @@ +. + +/** + * Kaltura media LTI launch page. + * + * @package tinymce_kalturamedia + * @author Remote-Learner.net Inc + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + * @copyright (C) 2014 Remote Learner.net Inc http://www.remote-learner.net + */ + +require_once(dirname(dirname(dirname(dirname(dirname(dirname(dirname(__FILE__))))))).'/config.php'); +require_once($CFG->dirroot.'/local/kaltura/locallib.php'); +require_once('renderer.php'); + +global $PAGE; + +require_login(); + +$PAGE->set_pagelayout('popup'); +$PAGE->set_url('/editor/tinymce/plugins/kalturamedia/tinymce/ltilaunch.php'); +$PAGE->set_context(context_system::instance()); + +echo $OUTPUT->header(); + +$editor = get_texteditor('tinymce'); +$tinymcebaseurl = $editor->get_tinymce_base_url(); + +echo html_writer::script('', $tinymcebaseurl.'tiny_mce_popup.js'); +echo html_writer::script('', $tinymcebaseurl.'utils/validate.js'); +echo html_writer::script('', $tinymcebaseurl.'utils/form_utils.js'); +echo html_writer::script('', $tinymcebaseurl.'utils/editable_selects.js'); +echo html_writer::script('', 'js/ltipopuplib.js'); + +echo tinymce_kalturamedia_preview_embed_form(); + +$urlparams = array( + 'withblocks' => 0, + 'width' => KALTURA_PANEL_WIDTH, + 'height' => KALTURA_PANEL_HEIGHT +); + +$url = new moodle_url('/lib/editor/tinymce/plugins/kalturamedia/lti_launch.php', $urlparams); + +$params = array( + 'insertbtnid' => TINMCE_KALTURAMEDIA_INSERT_BUTTON_ID, + 'ltilaunchurl' => $url->out(), + 'objecttagheight' => TINMCE_KALTURAMEDIA_OBJECT_TAG_HEIGHT, + 'objecttagid' => TINMCE_KALTURAMEDIA_OBJECT_TAG_ID, + 'previewiframeid' => TINMCE_KALTURAMEDIA_PREVIEW_IFRAME_TAG_ID +); + +$PAGE->requires->yui_module('moodle-local_kaltura-ltitinymcepanel', 'M.local_kaltura.init', array($params), null, true); + +echo $OUTPUT->footer(); diff --git a/lib/editor/tinymce/plugins/kalturamedia/tinymce/renderer.php b/lib/editor/tinymce/plugins/kalturamedia/tinymce/renderer.php new file mode 100644 index 0000000000000..79d03f0d6692d --- /dev/null +++ b/lib/editor/tinymce/plugins/kalturamedia/tinymce/renderer.php @@ -0,0 +1,84 @@ +. + +/** + * LTI preview and selection renderer library. + * + * @package tinymce_kalturamedia + * @author Remote-Learner.net Inc + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + * @copyright (C) 2014 Remote Learner.net Inc http://www.remote-learner.net + */ + +define('TINMCE_KALTURAMEDIA_INSERT_BUTTON_ID', 'insert'); +define('TINMCE_KALTURAMEDIA_OBJECT_TAG_ID', 'objecttagcontainer'); +define('TINMCE_KALTURAMEDIA_PREVIEW_IFRAME_TAG_ID', 'video_preview_frame'); +define('TINMCE_KALTURAMEDIA_OBJECT_TAG_HEIGHT', '500'); + +/** + * Returns HTML markup for a form used to preview and insert the video markup into the page. + * @return string HTML markup. + */ +function tinymce_kalturamedia_preview_embed_form() { + // Create hidden elements. + $hiddenelements = html_writer::empty_tag('input', array('type' => 'hidden', 'id' => 'entry_id', 'value' => '')); + $hiddenelements .= html_writer::empty_tag('input', array('type' => 'hidden', 'id' => 'source', 'value' => '')); + $hiddenelements .= html_writer::empty_tag('input', array('type' => 'hidden', 'id' => 'token', 'value' => KALTURA_URI_TOKEN)); + $hiddenelements .= html_writer::empty_tag('input', array('type' => 'hidden', 'id' => 'video_title', 'value' => '')); + $hiddenelements .= html_writer::empty_tag('input', array('type' => 'hidden', 'id' => 'uiconf_id', 'value' => '')); + $hiddenelements .= html_writer::empty_tag('input', array('type' => 'hidden', 'id' => 'widescreen', 'value' => '')); + $hiddenelements .= html_writer::empty_tag('input', array('type' => 'hidden', 'id' => 'height', 'value' => '')); + $hiddenelements .= html_writer::empty_tag('input', array('type' => 'hidden', 'id' => 'width', 'value' => '')); + $hiddenelements .= html_writer::empty_tag('input', array('type' => 'hidden', 'id' => 'lti_launch_context_id', 'value' => '')); + + // Create LTI launch and preview container divs + $ltilaunchcontainer = html_writer::tag('div', '', array('id' => TINMCE_KALTURAMEDIA_OBJECT_TAG_ID)); + $previewcontainer = html_writer::tag('div', '', array('id' => TINMCE_KALTURAMEDIA_PREVIEW_IFRAME_TAG_ID)); + + // Create insert button. + $params = array( + 'type' => 'submit', + 'id' => TINMCE_KALTURAMEDIA_INSERT_BUTTON_ID, + 'name' => TINMCE_KALTURAMEDIA_INSERT_BUTTON_ID, + // Using the language string from the local plug-in. + 'value' => get_string('insertbtn', 'local_kaltura'), + 'class' => 'updateButton', + 'style' => 'display: none' + ); + $insertbutton = html_writer::empty_tag('input', $params); + $insertbuttondiv = html_writer::tag('div', $insertbutton, array('style' => 'float: left')); + + // Create cancel button. + $param = array( + 'type' => 'submit', + 'id' => 'cancel', + 'name' => 'cancel', + // Using the language string from the local plug-in. TODO: figure out how to access the TinyMCE language strings. + 'value' => get_string('cancelbtn', 'local_kaltura'), + 'onclick' => 'tinyMCEPopup.close();' + ); + $cancelbutton = html_writer::empty_tag('input', $param); + $cancelbuttondiv = html_writer::tag('div', $cancelbutton, array('style' => 'float: right')); + + $buttonscontainer = html_writer::tag('div', $insertbuttondiv.$cancelbuttondiv, array('class' => 'mceActionPanel')); + + // This element is used so that the ltiservice.js can simulate a 'click' event. This tells the plug-in that the user has choosen a video to embed on the page + // and it will enable the insert button. + $simulateclickdiv = html_writer::tag('input', '', array('id' => 'closeltipanel', 'type' => 'hidden', 'value' => '')); + + $content = $simulateclickdiv.$ltilaunchcontainer.$previewcontainer.$hiddenelements.$buttonscontainer; + return html_writer::tag('form', $content, array('onsubmit' => 'insertMedia();return false', 'action' => '#')); +} diff --git a/lib/editor/tinymce/plugins/kalturamedia/tinymce_kalturamedia.php b/lib/editor/tinymce/plugins/kalturamedia/tinymce_kalturamedia.php new file mode 100644 index 0000000000000..8c54889da8eaf --- /dev/null +++ b/lib/editor/tinymce/plugins/kalturamedia/tinymce_kalturamedia.php @@ -0,0 +1,28 @@ +. + +/** + * Kaltura media language file. + * + * @package tinymce_kalturamedia + * @author Remote-Learner.net Inc + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + * @copyright (C) 2014 Remote Learner.net Inc http://www.remote-learner.net + */ + +$string['pluginname'] = 'Kaltura media'; +/* All lang strings used from TinyMCE JavaScript code must be named 'pluginname:stringname', no need to create langs/en_dlg.js */ +$string['kalturamedia:desc'] = 'Embed Kaltura Media'; +$string['insertbtn'] = 'Insert media'; +$string['cancelbtn'] = 'Cancel'; diff --git a/lib/editor/tinymce/plugins/kalturamedia/version.php b/lib/editor/tinymce/plugins/kalturamedia/version.php new file mode 100644 index 0000000000000..c3ab160dc73a8 --- /dev/null +++ b/lib/editor/tinymce/plugins/kalturamedia/version.php @@ -0,0 +1,33 @@ +. + +/** + * Kaltura media version file. + * + * @package tinymce_kalturamedia + * @author Remote-Learner.net Inc + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + * @copyright (C) 2014 Remote Learner.net Inc http://www.remote-learner.net + */ + +defined('MOODLE_INTERNAL') || die(); + +$plugin->version = 2014013000; +// Required Moodle version. +$plugin->requires = 2013051400; +// Full name of the plugin (used for diagnostics). +$plugin->component = 'tinymce_kalturamedia'; +$plugin->dependencies = array( + 'local_kaltura' => 2014013000 +); \ No newline at end of file diff --git a/local/kaltura/API/KalturaClient.php b/local/kaltura/API/KalturaClient.php new file mode 100644 index 0000000000000..45294c8ad090a --- /dev/null +++ b/local/kaltura/API/KalturaClient.php @@ -0,0 +1,8347 @@ +. +// +// @ignore +// =================================================================================================== + +/** + * @package Kaltura + * @subpackage Client + */ +require_once(dirname(__FILE__) . "/KalturaClientBase.php"); +require_once(dirname(__FILE__) . "/KalturaEnums.php"); +require_once(dirname(__FILE__) . "/KalturaTypes.php"); + + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaAccessControlProfileService extends KalturaServiceBase +{ + function __construct(KalturaClient $client = null) + { + parent::__construct($client); + } + + /** + * Add new access control profile + * + * @param KalturaAccessControlProfile $accessControlProfile + * @return KalturaAccessControlProfile + */ + function add(KalturaAccessControlProfile $accessControlProfile) + { + $kparams = array(); + $this->client->addParam($kparams, "accessControlProfile", $accessControlProfile->toParams()); + $this->client->queueServiceActionCall("accesscontrolprofile", "add", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaAccessControlProfile"); + return $resultObject; + } + + /** + * Get access control profile by id + * + * @param int $id + * @return KalturaAccessControlProfile + */ + function get($id) + { + $kparams = array(); + $this->client->addParam($kparams, "id", $id); + $this->client->queueServiceActionCall("accesscontrolprofile", "get", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaAccessControlProfile"); + return $resultObject; + } + + /** + * Update access control profile by id + * + * @param int $id + * @param KalturaAccessControlProfile $accessControlProfile + * @return KalturaAccessControlProfile + */ + function update($id, KalturaAccessControlProfile $accessControlProfile) + { + $kparams = array(); + $this->client->addParam($kparams, "id", $id); + $this->client->addParam($kparams, "accessControlProfile", $accessControlProfile->toParams()); + $this->client->queueServiceActionCall("accesscontrolprofile", "update", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaAccessControlProfile"); + return $resultObject; + } + + /** + * Delete access control profile by id + * + * @param int $id + * @return + */ + function delete($id) + { + $kparams = array(); + $this->client->addParam($kparams, "id", $id); + $this->client->queueServiceActionCall("accesscontrolprofile", "delete", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "null"); + return $resultObject; + } + + /** + * List access control profiles by filter and pager + * + * @param KalturaAccessControlProfileFilter $filter + * @param KalturaFilterPager $pager + * @return KalturaAccessControlProfileListResponse + */ + function listAction(KalturaAccessControlProfileFilter $filter = null, KalturaFilterPager $pager = null) + { + $kparams = array(); + if ($filter !== null) + $this->client->addParam($kparams, "filter", $filter->toParams()); + if ($pager !== null) + $this->client->addParam($kparams, "pager", $pager->toParams()); + $this->client->queueServiceActionCall("accesscontrolprofile", "list", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaAccessControlProfileListResponse"); + return $resultObject; + } +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaAccessControlService extends KalturaServiceBase +{ + function __construct(KalturaClient $client = null) + { + parent::__construct($client); + } + + /** + * Add new Access Control Profile + * + * @param KalturaAccessControl $accessControl + * @return KalturaAccessControl + */ + function add(KalturaAccessControl $accessControl) + { + $kparams = array(); + $this->client->addParam($kparams, "accessControl", $accessControl->toParams()); + $this->client->queueServiceActionCall("accesscontrol", "add", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaAccessControl"); + return $resultObject; + } + + /** + * Get Access Control Profile by id + * + * @param int $id + * @return KalturaAccessControl + */ + function get($id) + { + $kparams = array(); + $this->client->addParam($kparams, "id", $id); + $this->client->queueServiceActionCall("accesscontrol", "get", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaAccessControl"); + return $resultObject; + } + + /** + * Update Access Control Profile by id + * + * @param int $id + * @param KalturaAccessControl $accessControl + * @return KalturaAccessControl + */ + function update($id, KalturaAccessControl $accessControl) + { + $kparams = array(); + $this->client->addParam($kparams, "id", $id); + $this->client->addParam($kparams, "accessControl", $accessControl->toParams()); + $this->client->queueServiceActionCall("accesscontrol", "update", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaAccessControl"); + return $resultObject; + } + + /** + * Delete Access Control Profile by id + * + * @param int $id + * @return + */ + function delete($id) + { + $kparams = array(); + $this->client->addParam($kparams, "id", $id); + $this->client->queueServiceActionCall("accesscontrol", "delete", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "null"); + return $resultObject; + } + + /** + * List Access Control Profiles by filter and pager + * + * @param KalturaAccessControlFilter $filter + * @param KalturaFilterPager $pager + * @return KalturaAccessControlListResponse + */ + function listAction(KalturaAccessControlFilter $filter = null, KalturaFilterPager $pager = null) + { + $kparams = array(); + if ($filter !== null) + $this->client->addParam($kparams, "filter", $filter->toParams()); + if ($pager !== null) + $this->client->addParam($kparams, "pager", $pager->toParams()); + $this->client->queueServiceActionCall("accesscontrol", "list", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaAccessControlListResponse"); + return $resultObject; + } +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaAdminUserService extends KalturaServiceBase +{ + function __construct(KalturaClient $client = null) + { + parent::__construct($client); + } + + /** + * Update admin user password and email + * + * @param string $email + * @param string $password + * @param string $newEmail Optional, provide only when you want to update the email + * @param string $newPassword + * @return KalturaAdminUser + */ + function updatePassword($email, $password, $newEmail = "", $newPassword = "") + { + $kparams = array(); + $this->client->addParam($kparams, "email", $email); + $this->client->addParam($kparams, "password", $password); + $this->client->addParam($kparams, "newEmail", $newEmail); + $this->client->addParam($kparams, "newPassword", $newPassword); + $this->client->queueServiceActionCall("adminuser", "updatePassword", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaAdminUser"); + return $resultObject; + } + + /** + * Reset admin user password and send it to the users email address + * + * @param string $email + * @return + */ + function resetPassword($email) + { + $kparams = array(); + $this->client->addParam($kparams, "email", $email); + $this->client->queueServiceActionCall("adminuser", "resetPassword", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "null"); + return $resultObject; + } + + /** + * Get an admin session using admin email and password (Used for login to the KMC application) + * + * @param string $email + * @param string $password + * @param int $partnerId + * @return string + */ + function login($email, $password, $partnerId = null) + { + $kparams = array(); + $this->client->addParam($kparams, "email", $email); + $this->client->addParam($kparams, "password", $password); + $this->client->addParam($kparams, "partnerId", $partnerId); + $this->client->queueServiceActionCall("adminuser", "login", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "string"); + return $resultObject; + } + + /** + * Set initial users password + * + * @param string $hashKey + * @param string $newPassword New password to set + * @return + */ + function setInitialPassword($hashKey, $newPassword) + { + $kparams = array(); + $this->client->addParam($kparams, "hashKey", $hashKey); + $this->client->addParam($kparams, "newPassword", $newPassword); + $this->client->queueServiceActionCall("adminuser", "setInitialPassword", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "null"); + return $resultObject; + } +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaBaseEntryService extends KalturaServiceBase +{ + function __construct(KalturaClient $client = null) + { + parent::__construct($client); + } + + /** + * Generic add entry, should be used when the uploaded entry type is not known. + * + * @param KalturaBaseEntry $entry + * @param string $type + * @return KalturaBaseEntry + */ + function add(KalturaBaseEntry $entry, $type = null) + { + $kparams = array(); + $this->client->addParam($kparams, "entry", $entry->toParams()); + $this->client->addParam($kparams, "type", $type); + $this->client->queueServiceActionCall("baseentry", "add", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaBaseEntry"); + return $resultObject; + } + + /** + * Attach content resource to entry in status NO_MEDIA + * + * @param string $entryId + * @param KalturaResource $resource + * @return KalturaBaseEntry + */ + function addContent($entryId, KalturaResource $resource) + { + $kparams = array(); + $this->client->addParam($kparams, "entryId", $entryId); + $this->client->addParam($kparams, "resource", $resource->toParams()); + $this->client->queueServiceActionCall("baseentry", "addContent", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaBaseEntry"); + return $resultObject; + } + + /** + * Generic add entry using an uploaded file, should be used when the uploaded entry type is not known. + * + * @param KalturaBaseEntry $entry + * @param string $uploadTokenId + * @param string $type + * @return KalturaBaseEntry + */ + function addFromUploadedFile(KalturaBaseEntry $entry, $uploadTokenId, $type = null) + { + $kparams = array(); + $this->client->addParam($kparams, "entry", $entry->toParams()); + $this->client->addParam($kparams, "uploadTokenId", $uploadTokenId); + $this->client->addParam($kparams, "type", $type); + $this->client->queueServiceActionCall("baseentry", "addFromUploadedFile", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaBaseEntry"); + return $resultObject; + } + + /** + * Get base entry by ID. + * + * @param string $entryId Entry id + * @param int $version Desired version of the data + * @return KalturaBaseEntry + */ + function get($entryId, $version = -1) + { + $kparams = array(); + $this->client->addParam($kparams, "entryId", $entryId); + $this->client->addParam($kparams, "version", $version); + $this->client->queueServiceActionCall("baseentry", "get", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaBaseEntry"); + return $resultObject; + } + + /** + * Get remote storage existing paths for the asset. + * + * @param string $entryId + * @return KalturaRemotePathListResponse + */ + function getRemotePaths($entryId) + { + $kparams = array(); + $this->client->addParam($kparams, "entryId", $entryId); + $this->client->queueServiceActionCall("baseentry", "getRemotePaths", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaRemotePathListResponse"); + return $resultObject; + } + + /** + * Update base entry. Only the properties that were set will be updated. + * + * @param string $entryId Entry id to update + * @param KalturaBaseEntry $baseEntry Base entry metadata to update + * @return KalturaBaseEntry + */ + function update($entryId, KalturaBaseEntry $baseEntry) + { + $kparams = array(); + $this->client->addParam($kparams, "entryId", $entryId); + $this->client->addParam($kparams, "baseEntry", $baseEntry->toParams()); + $this->client->queueServiceActionCall("baseentry", "update", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaBaseEntry"); + return $resultObject; + } + + /** + * Update the content resource associated with the entry. + * + * @param string $entryId Entry id to update + * @param KalturaResource $resource Resource to be used to replace entry content + * @param int $conversionProfileId The conversion profile id to be used on the entry + * @return KalturaBaseEntry + */ + function updateContent($entryId, KalturaResource $resource, $conversionProfileId = null) + { + $kparams = array(); + $this->client->addParam($kparams, "entryId", $entryId); + $this->client->addParam($kparams, "resource", $resource->toParams()); + $this->client->addParam($kparams, "conversionProfileId", $conversionProfileId); + $this->client->queueServiceActionCall("baseentry", "updateContent", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaBaseEntry"); + return $resultObject; + } + + /** + * Get an array of KalturaBaseEntry objects by a comma-separated list of ids. + * + * @param string $entryIds Comma separated string of entry ids + * @return array + */ + function getByIds($entryIds) + { + $kparams = array(); + $this->client->addParam($kparams, "entryIds", $entryIds); + $this->client->queueServiceActionCall("baseentry", "getByIds", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "array"); + return $resultObject; + } + + /** + * Delete an entry. + * + * @param string $entryId Entry id to delete + * @return + */ + function delete($entryId) + { + $kparams = array(); + $this->client->addParam($kparams, "entryId", $entryId); + $this->client->queueServiceActionCall("baseentry", "delete", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "null"); + return $resultObject; + } + + /** + * List base entries by filter with paging support. + * + * @param KalturaBaseEntryFilter $filter Entry filter + * @param KalturaFilterPager $pager Pager + * @return KalturaBaseEntryListResponse + */ + function listAction(KalturaBaseEntryFilter $filter = null, KalturaFilterPager $pager = null) + { + $kparams = array(); + if ($filter !== null) + $this->client->addParam($kparams, "filter", $filter->toParams()); + if ($pager !== null) + $this->client->addParam($kparams, "pager", $pager->toParams()); + $this->client->queueServiceActionCall("baseentry", "list", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaBaseEntryListResponse"); + return $resultObject; + } + + /** + * List base entries by filter according to reference id + * + * @param string $refId Entry Reference ID + * @param KalturaFilterPager $pager Pager + * @return KalturaBaseEntryListResponse + */ + function listByReferenceId($refId, KalturaFilterPager $pager = null) + { + $kparams = array(); + $this->client->addParam($kparams, "refId", $refId); + if ($pager !== null) + $this->client->addParam($kparams, "pager", $pager->toParams()); + $this->client->queueServiceActionCall("baseentry", "listByReferenceId", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaBaseEntryListResponse"); + return $resultObject; + } + + /** + * Count base entries by filter. + * + * @param KalturaBaseEntryFilter $filter Entry filter + * @return int + */ + function count(KalturaBaseEntryFilter $filter = null) + { + $kparams = array(); + if ($filter !== null) + $this->client->addParam($kparams, "filter", $filter->toParams()); + $this->client->queueServiceActionCall("baseentry", "count", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "integer"); + return $resultObject; + } + + /** + * Upload a file to Kaltura, that can be used to create an entry. + * + * @param file $fileData The file data + * @return string + */ + function upload($fileData) + { + $kparams = array(); + $kfiles = array(); + $this->client->addParam($kfiles, "fileData", $fileData); + $this->client->queueServiceActionCall("baseentry", "upload", $kparams, $kfiles); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "string"); + return $resultObject; + } + + /** + * Update entry thumbnail using a raw jpeg file. + * + * @param string $entryId Media entry id + * @param file $fileData Jpeg file data + * @return KalturaBaseEntry + */ + function updateThumbnailJpeg($entryId, $fileData) + { + $kparams = array(); + $this->client->addParam($kparams, "entryId", $entryId); + $kfiles = array(); + $this->client->addParam($kfiles, "fileData", $fileData); + $this->client->queueServiceActionCall("baseentry", "updateThumbnailJpeg", $kparams, $kfiles); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaBaseEntry"); + return $resultObject; + } + + /** + * Update entry thumbnail using url. + * + * @param string $entryId Media entry id + * @param string $url File url + * @return KalturaBaseEntry + */ + function updateThumbnailFromUrl($entryId, $url) + { + $kparams = array(); + $this->client->addParam($kparams, "entryId", $entryId); + $this->client->addParam($kparams, "url", $url); + $this->client->queueServiceActionCall("baseentry", "updateThumbnailFromUrl", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaBaseEntry"); + return $resultObject; + } + + /** + * Update entry thumbnail from a different entry by a specified time offset (in seconds). + * + * @param string $entryId Media entry id + * @param string $sourceEntryId Media entry id + * @param int $timeOffset Time offset (in seconds) + * @return KalturaBaseEntry + */ + function updateThumbnailFromSourceEntry($entryId, $sourceEntryId, $timeOffset) + { + $kparams = array(); + $this->client->addParam($kparams, "entryId", $entryId); + $this->client->addParam($kparams, "sourceEntryId", $sourceEntryId); + $this->client->addParam($kparams, "timeOffset", $timeOffset); + $this->client->queueServiceActionCall("baseentry", "updateThumbnailFromSourceEntry", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaBaseEntry"); + return $resultObject; + } + + /** + * Flag inappropriate entry for moderation. + * + * @param KalturaModerationFlag $moderationFlag + * @return + */ + function flag(KalturaModerationFlag $moderationFlag) + { + $kparams = array(); + $this->client->addParam($kparams, "moderationFlag", $moderationFlag->toParams()); + $this->client->queueServiceActionCall("baseentry", "flag", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "null"); + return $resultObject; + } + + /** + * Reject the entry and mark the pending flags (if any) as moderated (this will make the entry non-playable). + * + * @param string $entryId + * @return + */ + function reject($entryId) + { + $kparams = array(); + $this->client->addParam($kparams, "entryId", $entryId); + $this->client->queueServiceActionCall("baseentry", "reject", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "null"); + return $resultObject; + } + + /** + * Approve the entry and mark the pending flags (if any) as moderated (this will make the entry playable). + * + * @param string $entryId + * @return + */ + function approve($entryId) + { + $kparams = array(); + $this->client->addParam($kparams, "entryId", $entryId); + $this->client->queueServiceActionCall("baseentry", "approve", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "null"); + return $resultObject; + } + + /** + * List all pending flags for the entry. + * + * @param string $entryId + * @param KalturaFilterPager $pager + * @return KalturaModerationFlagListResponse + */ + function listFlags($entryId, KalturaFilterPager $pager = null) + { + $kparams = array(); + $this->client->addParam($kparams, "entryId", $entryId); + if ($pager !== null) + $this->client->addParam($kparams, "pager", $pager->toParams()); + $this->client->queueServiceActionCall("baseentry", "listFlags", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaModerationFlagListResponse"); + return $resultObject; + } + + /** + * Anonymously rank an entry, no validation is done on duplicate rankings. + * + * @param string $entryId + * @param int $rank + * @return + */ + function anonymousRank($entryId, $rank) + { + $kparams = array(); + $this->client->addParam($kparams, "entryId", $entryId); + $this->client->addParam($kparams, "rank", $rank); + $this->client->queueServiceActionCall("baseentry", "anonymousRank", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "null"); + return $resultObject; + } + + /** + * This action delivers entry-related data, based on the user's context: access control, restriction, playback format and storage information. + * + * @param string $entryId + * @param KalturaEntryContextDataParams $contextDataParams + * @return KalturaEntryContextDataResult + */ + function getContextData($entryId, KalturaEntryContextDataParams $contextDataParams) + { + $kparams = array(); + $this->client->addParam($kparams, "entryId", $entryId); + $this->client->addParam($kparams, "contextDataParams", $contextDataParams->toParams()); + $this->client->queueServiceActionCall("baseentry", "getContextData", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaEntryContextDataResult"); + return $resultObject; + } + + /** + * + * + * @param string $entryId + * @param int $storageProfileId + * @return KalturaBaseEntry + */ + function export($entryId, $storageProfileId) + { + $kparams = array(); + $this->client->addParam($kparams, "entryId", $entryId); + $this->client->addParam($kparams, "storageProfileId", $storageProfileId); + $this->client->queueServiceActionCall("baseentry", "export", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaBaseEntry"); + return $resultObject; + } + + /** + * Index an entry by id. + * + * @param string $id + * @param bool $shouldUpdate + * @return int + */ + function index($id, $shouldUpdate = true) + { + $kparams = array(); + $this->client->addParam($kparams, "id", $id); + $this->client->addParam($kparams, "shouldUpdate", $shouldUpdate); + $this->client->queueServiceActionCall("baseentry", "index", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "integer"); + return $resultObject; + } + + /** + * Clone an entry with optional attributes to apply to the clone + * + * @param string $entryId Id of entry to clone + * @return KalturaBaseEntry + */ + function cloneAction($entryId) + { + $kparams = array(); + $this->client->addParam($kparams, "entryId", $entryId); + $this->client->queueServiceActionCall("baseentry", "clone", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaBaseEntry"); + return $resultObject; + } +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaBulkUploadService extends KalturaServiceBase +{ + function __construct(KalturaClient $client = null) + { + parent::__construct($client); + } + + /** + * Add new bulk upload batch job + Conversion profile id can be specified in the API or in the CSV file, the one in the CSV file will be stronger. + If no conversion profile was specified, partner's default will be used + * + * @param int $conversionProfileId Convertion profile id to use for converting the current bulk (-1 to use partner's default) + * @param file $csvFileData Bulk upload file + * @param string $bulkUploadType + * @param string $uploadedBy + * @param string $fileName Friendly name of the file, used to be recognized later in the logs. + * @return KalturaBulkUpload + */ + function add($conversionProfileId, $csvFileData, $bulkUploadType = null, $uploadedBy = null, $fileName = null) + { + $kparams = array(); + $this->client->addParam($kparams, "conversionProfileId", $conversionProfileId); + $kfiles = array(); + $this->client->addParam($kfiles, "csvFileData", $csvFileData); + $this->client->addParam($kparams, "bulkUploadType", $bulkUploadType); + $this->client->addParam($kparams, "uploadedBy", $uploadedBy); + $this->client->addParam($kparams, "fileName", $fileName); + $this->client->queueServiceActionCall("bulkupload", "add", $kparams, $kfiles); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaBulkUpload"); + return $resultObject; + } + + /** + * Get bulk upload batch job by id + * + * @param bigint $id + * @return KalturaBulkUpload + */ + function get($id) + { + $kparams = array(); + $this->client->addParam($kparams, "id", $id); + $this->client->queueServiceActionCall("bulkupload", "get", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaBulkUpload"); + return $resultObject; + } + + /** + * List bulk upload batch jobs + * + * @param KalturaFilterPager $pager + * @return KalturaBulkUploadListResponse + */ + function listAction(KalturaFilterPager $pager = null) + { + $kparams = array(); + if ($pager !== null) + $this->client->addParam($kparams, "pager", $pager->toParams()); + $this->client->queueServiceActionCall("bulkupload", "list", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaBulkUploadListResponse"); + return $resultObject; + } + + /** + * Serve action returan the original file. + * + * @param bigint $id Job id + * @return file + */ + function serve($id) + { + $kparams = array(); + $this->client->addParam($kparams, "id", $id); + $this->client->queueServiceActionCall("bulkupload", "serve", $kparams); + if(!$this->client->getDestinationPath() && !$this->client->getReturnServedResult()) + return $this->client->getServeUrl(); + return $this->client->doQueue(); + } + + /** + * ServeLog action returan the original file. + * + * @param bigint $id Job id + * @return file + */ + function serveLog($id) + { + $kparams = array(); + $this->client->addParam($kparams, "id", $id); + $this->client->queueServiceActionCall("bulkupload", "serveLog", $kparams); + if(!$this->client->getDestinationPath() && !$this->client->getReturnServedResult()) + return $this->client->getServeUrl(); + return $this->client->doQueue(); + } + + /** + * Aborts the bulk upload and all its child jobs + * + * @param bigint $id Job id + * @return KalturaBulkUpload + */ + function abort($id) + { + $kparams = array(); + $this->client->addParam($kparams, "id", $id); + $this->client->queueServiceActionCall("bulkupload", "abort", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaBulkUpload"); + return $resultObject; + } +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaCategoryEntryService extends KalturaServiceBase +{ + function __construct(KalturaClient $client = null) + { + parent::__construct($client); + } + + /** + * Add new CategoryEntry + * + * @param KalturaCategoryEntry $categoryEntry + * @return KalturaCategoryEntry + */ + function add(KalturaCategoryEntry $categoryEntry) + { + $kparams = array(); + $this->client->addParam($kparams, "categoryEntry", $categoryEntry->toParams()); + $this->client->queueServiceActionCall("categoryentry", "add", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaCategoryEntry"); + return $resultObject; + } + + /** + * Delete CategoryEntry + * + * @param string $entryId + * @param int $categoryId + * @return + */ + function delete($entryId, $categoryId) + { + $kparams = array(); + $this->client->addParam($kparams, "entryId", $entryId); + $this->client->addParam($kparams, "categoryId", $categoryId); + $this->client->queueServiceActionCall("categoryentry", "delete", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "null"); + return $resultObject; + } + + /** + * List all categoryEntry + * + * @param KalturaCategoryEntryFilter $filter + * @param KalturaFilterPager $pager + * @return KalturaCategoryEntryListResponse + */ + function listAction(KalturaCategoryEntryFilter $filter = null, KalturaFilterPager $pager = null) + { + $kparams = array(); + if ($filter !== null) + $this->client->addParam($kparams, "filter", $filter->toParams()); + if ($pager !== null) + $this->client->addParam($kparams, "pager", $pager->toParams()); + $this->client->queueServiceActionCall("categoryentry", "list", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaCategoryEntryListResponse"); + return $resultObject; + } + + /** + * Index CategoryEntry by Id + * + * @param string $entryId + * @param int $categoryId + * @param bool $shouldUpdate + * @return int + */ + function index($entryId, $categoryId, $shouldUpdate = true) + { + $kparams = array(); + $this->client->addParam($kparams, "entryId", $entryId); + $this->client->addParam($kparams, "categoryId", $categoryId); + $this->client->addParam($kparams, "shouldUpdate", $shouldUpdate); + $this->client->queueServiceActionCall("categoryentry", "index", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "integer"); + return $resultObject; + } + + /** + * Activate CategoryEntry when it is pending moderation + * + * @param string $entryId + * @param int $categoryId + * @return + */ + function activate($entryId, $categoryId) + { + $kparams = array(); + $this->client->addParam($kparams, "entryId", $entryId); + $this->client->addParam($kparams, "categoryId", $categoryId); + $this->client->queueServiceActionCall("categoryentry", "activate", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "null"); + return $resultObject; + } + + /** + * Activate CategoryEntry when it is pending moderation + * + * @param string $entryId + * @param int $categoryId + * @return + */ + function reject($entryId, $categoryId) + { + $kparams = array(); + $this->client->addParam($kparams, "entryId", $entryId); + $this->client->addParam($kparams, "categoryId", $categoryId); + $this->client->queueServiceActionCall("categoryentry", "reject", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "null"); + return $resultObject; + } +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaCategoryService extends KalturaServiceBase +{ + function __construct(KalturaClient $client = null) + { + parent::__construct($client); + } + + /** + * Add new Category + * + * @param KalturaCategory $category + * @return KalturaCategory + */ + function add(KalturaCategory $category) + { + $kparams = array(); + $this->client->addParam($kparams, "category", $category->toParams()); + $this->client->queueServiceActionCall("category", "add", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaCategory"); + return $resultObject; + } + + /** + * Get Category by id + * + * @param int $id + * @return KalturaCategory + */ + function get($id) + { + $kparams = array(); + $this->client->addParam($kparams, "id", $id); + $this->client->queueServiceActionCall("category", "get", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaCategory"); + return $resultObject; + } + + /** + * Update Category + * + * @param int $id + * @param KalturaCategory $category + * @return KalturaCategory + */ + function update($id, KalturaCategory $category) + { + $kparams = array(); + $this->client->addParam($kparams, "id", $id); + $this->client->addParam($kparams, "category", $category->toParams()); + $this->client->queueServiceActionCall("category", "update", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaCategory"); + return $resultObject; + } + + /** + * Delete a Category + * + * @param int $id + * @param int $moveEntriesToParentCategory + * @return + */ + function delete($id, $moveEntriesToParentCategory = 1) + { + $kparams = array(); + $this->client->addParam($kparams, "id", $id); + $this->client->addParam($kparams, "moveEntriesToParentCategory", $moveEntriesToParentCategory); + $this->client->queueServiceActionCall("category", "delete", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "null"); + return $resultObject; + } + + /** + * List all categories + * + * @param KalturaCategoryFilter $filter + * @param KalturaFilterPager $pager + * @return KalturaCategoryListResponse + */ + function listAction(KalturaCategoryFilter $filter = null, KalturaFilterPager $pager = null) + { + $kparams = array(); + if ($filter !== null) + $this->client->addParam($kparams, "filter", $filter->toParams()); + if ($pager !== null) + $this->client->addParam($kparams, "pager", $pager->toParams()); + $this->client->queueServiceActionCall("category", "list", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaCategoryListResponse"); + return $resultObject; + } + + /** + * Index Category by id + * + * @param int $id + * @param bool $shouldUpdate + * @return int + */ + function index($id, $shouldUpdate = true) + { + $kparams = array(); + $this->client->addParam($kparams, "id", $id); + $this->client->addParam($kparams, "shouldUpdate", $shouldUpdate); + $this->client->queueServiceActionCall("category", "index", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "integer"); + return $resultObject; + } + + /** + * Move categories that belong to the same parent category to a target categroy - enabled only for ks with disable entitlement + * + * @param string $categoryIds + * @param int $targetCategoryParentId + * @return KalturaCategoryListResponse + */ + function move($categoryIds, $targetCategoryParentId) + { + $kparams = array(); + $this->client->addParam($kparams, "categoryIds", $categoryIds); + $this->client->addParam($kparams, "targetCategoryParentId", $targetCategoryParentId); + $this->client->queueServiceActionCall("category", "move", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaCategoryListResponse"); + return $resultObject; + } + + /** + * Unlock categories + * + * @return + */ + function unlockCategories() + { + $kparams = array(); + $this->client->queueServiceActionCall("category", "unlockCategories", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "null"); + return $resultObject; + } + + /** + * + * + * @param file $fileData + * @param KalturaBulkUploadJobData $bulkUploadData + * @param KalturaBulkUploadCategoryData $bulkUploadCategoryData + * @return KalturaBulkUpload + */ + function addFromBulkUpload($fileData, KalturaBulkUploadJobData $bulkUploadData = null, KalturaBulkUploadCategoryData $bulkUploadCategoryData = null) + { + $kparams = array(); + $kfiles = array(); + $this->client->addParam($kfiles, "fileData", $fileData); + if ($bulkUploadData !== null) + $this->client->addParam($kparams, "bulkUploadData", $bulkUploadData->toParams()); + if ($bulkUploadCategoryData !== null) + $this->client->addParam($kparams, "bulkUploadCategoryData", $bulkUploadCategoryData->toParams()); + $this->client->queueServiceActionCall("category", "addFromBulkUpload", $kparams, $kfiles); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaBulkUpload"); + return $resultObject; + } +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaCategoryUserService extends KalturaServiceBase +{ + function __construct(KalturaClient $client = null) + { + parent::__construct($client); + } + + /** + * Add new CategoryUser + * + * @param KalturaCategoryUser $categoryUser + * @return KalturaCategoryUser + */ + function add(KalturaCategoryUser $categoryUser) + { + $kparams = array(); + $this->client->addParam($kparams, "categoryUser", $categoryUser->toParams()); + $this->client->queueServiceActionCall("categoryuser", "add", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaCategoryUser"); + return $resultObject; + } + + /** + * Get CategoryUser by id + * + * @param int $categoryId + * @param string $userId + * @return KalturaCategoryUser + */ + function get($categoryId, $userId) + { + $kparams = array(); + $this->client->addParam($kparams, "categoryId", $categoryId); + $this->client->addParam($kparams, "userId", $userId); + $this->client->queueServiceActionCall("categoryuser", "get", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaCategoryUser"); + return $resultObject; + } + + /** + * Update CategoryUser by id + * + * @param int $categoryId + * @param string $userId + * @param KalturaCategoryUser $categoryUser + * @param bool $override - to override manual changes + * @return KalturaCategoryUser + */ + function update($categoryId, $userId, KalturaCategoryUser $categoryUser, $override = false) + { + $kparams = array(); + $this->client->addParam($kparams, "categoryId", $categoryId); + $this->client->addParam($kparams, "userId", $userId); + $this->client->addParam($kparams, "categoryUser", $categoryUser->toParams()); + $this->client->addParam($kparams, "override", $override); + $this->client->queueServiceActionCall("categoryuser", "update", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaCategoryUser"); + return $resultObject; + } + + /** + * Delete a CategoryUser + * + * @param int $categoryId + * @param string $userId + * @return + */ + function delete($categoryId, $userId) + { + $kparams = array(); + $this->client->addParam($kparams, "categoryId", $categoryId); + $this->client->addParam($kparams, "userId", $userId); + $this->client->queueServiceActionCall("categoryuser", "delete", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "null"); + return $resultObject; + } + + /** + * Activate CategoryUser + * + * @param int $categoryId + * @param string $userId + * @return KalturaCategoryUser + */ + function activate($categoryId, $userId) + { + $kparams = array(); + $this->client->addParam($kparams, "categoryId", $categoryId); + $this->client->addParam($kparams, "userId", $userId); + $this->client->queueServiceActionCall("categoryuser", "activate", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaCategoryUser"); + return $resultObject; + } + + /** + * Reject CategoryUser + * + * @param int $categoryId + * @param string $userId + * @return KalturaCategoryUser + */ + function deactivate($categoryId, $userId) + { + $kparams = array(); + $this->client->addParam($kparams, "categoryId", $categoryId); + $this->client->addParam($kparams, "userId", $userId); + $this->client->queueServiceActionCall("categoryuser", "deactivate", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaCategoryUser"); + return $resultObject; + } + + /** + * List all categories + * + * @param KalturaCategoryUserFilter $filter + * @param KalturaFilterPager $pager + * @return KalturaCategoryUserListResponse + */ + function listAction(KalturaCategoryUserFilter $filter = null, KalturaFilterPager $pager = null) + { + $kparams = array(); + if ($filter !== null) + $this->client->addParam($kparams, "filter", $filter->toParams()); + if ($pager !== null) + $this->client->addParam($kparams, "pager", $pager->toParams()); + $this->client->queueServiceActionCall("categoryuser", "list", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaCategoryUserListResponse"); + return $resultObject; + } + + /** + * Copy all memeber from parent category + * + * @param int $categoryId + * @return + */ + function copyFromCategory($categoryId) + { + $kparams = array(); + $this->client->addParam($kparams, "categoryId", $categoryId); + $this->client->queueServiceActionCall("categoryuser", "copyFromCategory", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "null"); + return $resultObject; + } + + /** + * Index CategoryUser by userid and category id + * + * @param string $userId + * @param int $categoryId + * @param bool $shouldUpdate + * @return int + */ + function index($userId, $categoryId, $shouldUpdate = true) + { + $kparams = array(); + $this->client->addParam($kparams, "userId", $userId); + $this->client->addParam($kparams, "categoryId", $categoryId); + $this->client->addParam($kparams, "shouldUpdate", $shouldUpdate); + $this->client->queueServiceActionCall("categoryuser", "index", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "integer"); + return $resultObject; + } + + /** + * + * + * @param file $fileData + * @param KalturaBulkUploadJobData $bulkUploadData + * @param KalturaBulkUploadCategoryUserData $bulkUploadCategoryUserData + * @return KalturaBulkUpload + */ + function addFromBulkUpload($fileData, KalturaBulkUploadJobData $bulkUploadData = null, KalturaBulkUploadCategoryUserData $bulkUploadCategoryUserData = null) + { + $kparams = array(); + $kfiles = array(); + $this->client->addParam($kfiles, "fileData", $fileData); + if ($bulkUploadData !== null) + $this->client->addParam($kparams, "bulkUploadData", $bulkUploadData->toParams()); + if ($bulkUploadCategoryUserData !== null) + $this->client->addParam($kparams, "bulkUploadCategoryUserData", $bulkUploadCategoryUserData->toParams()); + $this->client->queueServiceActionCall("categoryuser", "addFromBulkUpload", $kparams, $kfiles); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaBulkUpload"); + return $resultObject; + } +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaConversionProfileAssetParamsService extends KalturaServiceBase +{ + function __construct(KalturaClient $client = null) + { + parent::__construct($client); + } + + /** + * Lists asset parmas of conversion profile by ID + * + * @param KalturaConversionProfileAssetParamsFilter $filter + * @param KalturaFilterPager $pager + * @return KalturaConversionProfileAssetParamsListResponse + */ + function listAction(KalturaConversionProfileAssetParamsFilter $filter = null, KalturaFilterPager $pager = null) + { + $kparams = array(); + if ($filter !== null) + $this->client->addParam($kparams, "filter", $filter->toParams()); + if ($pager !== null) + $this->client->addParam($kparams, "pager", $pager->toParams()); + $this->client->queueServiceActionCall("conversionprofileassetparams", "list", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaConversionProfileAssetParamsListResponse"); + return $resultObject; + } + + /** + * Update asset parmas of conversion profile by ID + * + * @param int $conversionProfileId + * @param int $assetParamsId + * @param KalturaConversionProfileAssetParams $conversionProfileAssetParams + * @return KalturaConversionProfileAssetParams + */ + function update($conversionProfileId, $assetParamsId, KalturaConversionProfileAssetParams $conversionProfileAssetParams) + { + $kparams = array(); + $this->client->addParam($kparams, "conversionProfileId", $conversionProfileId); + $this->client->addParam($kparams, "assetParamsId", $assetParamsId); + $this->client->addParam($kparams, "conversionProfileAssetParams", $conversionProfileAssetParams->toParams()); + $this->client->queueServiceActionCall("conversionprofileassetparams", "update", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaConversionProfileAssetParams"); + return $resultObject; + } +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaConversionProfileService extends KalturaServiceBase +{ + function __construct(KalturaClient $client = null) + { + parent::__construct($client); + } + + /** + * Set Conversion Profile to be the partner default + * + * @param int $id + * @return KalturaConversionProfile + */ + function setAsDefault($id) + { + $kparams = array(); + $this->client->addParam($kparams, "id", $id); + $this->client->queueServiceActionCall("conversionprofile", "setAsDefault", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaConversionProfile"); + return $resultObject; + } + + /** + * Get the partner's default conversion profile + * + * @param string $type + * @return KalturaConversionProfile + */ + function getDefault($type = null) + { + $kparams = array(); + $this->client->addParam($kparams, "type", $type); + $this->client->queueServiceActionCall("conversionprofile", "getDefault", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaConversionProfile"); + return $resultObject; + } + + /** + * Add new Conversion Profile + * + * @param KalturaConversionProfile $conversionProfile + * @return KalturaConversionProfile + */ + function add(KalturaConversionProfile $conversionProfile) + { + $kparams = array(); + $this->client->addParam($kparams, "conversionProfile", $conversionProfile->toParams()); + $this->client->queueServiceActionCall("conversionprofile", "add", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaConversionProfile"); + return $resultObject; + } + + /** + * Get Conversion Profile by ID + * + * @param int $id + * @return KalturaConversionProfile + */ + function get($id) + { + $kparams = array(); + $this->client->addParam($kparams, "id", $id); + $this->client->queueServiceActionCall("conversionprofile", "get", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaConversionProfile"); + return $resultObject; + } + + /** + * Update Conversion Profile by ID + * + * @param int $id + * @param KalturaConversionProfile $conversionProfile + * @return KalturaConversionProfile + */ + function update($id, KalturaConversionProfile $conversionProfile) + { + $kparams = array(); + $this->client->addParam($kparams, "id", $id); + $this->client->addParam($kparams, "conversionProfile", $conversionProfile->toParams()); + $this->client->queueServiceActionCall("conversionprofile", "update", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaConversionProfile"); + return $resultObject; + } + + /** + * Delete Conversion Profile by ID + * + * @param int $id + * @return + */ + function delete($id) + { + $kparams = array(); + $this->client->addParam($kparams, "id", $id); + $this->client->queueServiceActionCall("conversionprofile", "delete", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "null"); + return $resultObject; + } + + /** + * List Conversion Profiles by filter with paging support + * + * @param KalturaConversionProfileFilter $filter + * @param KalturaFilterPager $pager + * @return KalturaConversionProfileListResponse + */ + function listAction(KalturaConversionProfileFilter $filter = null, KalturaFilterPager $pager = null) + { + $kparams = array(); + if ($filter !== null) + $this->client->addParam($kparams, "filter", $filter->toParams()); + if ($pager !== null) + $this->client->addParam($kparams, "pager", $pager->toParams()); + $this->client->queueServiceActionCall("conversionprofile", "list", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaConversionProfileListResponse"); + return $resultObject; + } +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaDataService extends KalturaServiceBase +{ + function __construct(KalturaClient $client = null) + { + parent::__construct($client); + } + + /** + * Adds a new data entry + * + * @param KalturaDataEntry $dataEntry Data entry + * @return KalturaDataEntry + */ + function add(KalturaDataEntry $dataEntry) + { + $kparams = array(); + $this->client->addParam($kparams, "dataEntry", $dataEntry->toParams()); + $this->client->queueServiceActionCall("data", "add", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaDataEntry"); + return $resultObject; + } + + /** + * Get data entry by ID. + * + * @param string $entryId Data entry id + * @param int $version Desired version of the data + * @return KalturaDataEntry + */ + function get($entryId, $version = -1) + { + $kparams = array(); + $this->client->addParam($kparams, "entryId", $entryId); + $this->client->addParam($kparams, "version", $version); + $this->client->queueServiceActionCall("data", "get", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaDataEntry"); + return $resultObject; + } + + /** + * Update data entry. Only the properties that were set will be updated. + * + * @param string $entryId Data entry id to update + * @param KalturaDataEntry $documentEntry Data entry metadata to update + * @return KalturaDataEntry + */ + function update($entryId, KalturaDataEntry $documentEntry) + { + $kparams = array(); + $this->client->addParam($kparams, "entryId", $entryId); + $this->client->addParam($kparams, "documentEntry", $documentEntry->toParams()); + $this->client->queueServiceActionCall("data", "update", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaDataEntry"); + return $resultObject; + } + + /** + * Delete a data entry. + * + * @param string $entryId Data entry id to delete + * @return + */ + function delete($entryId) + { + $kparams = array(); + $this->client->addParam($kparams, "entryId", $entryId); + $this->client->queueServiceActionCall("data", "delete", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "null"); + return $resultObject; + } + + /** + * List data entries by filter with paging support. + * + * @param KalturaDataEntryFilter $filter Document entry filter + * @param KalturaFilterPager $pager Pager + * @return KalturaDataListResponse + */ + function listAction(KalturaDataEntryFilter $filter = null, KalturaFilterPager $pager = null) + { + $kparams = array(); + if ($filter !== null) + $this->client->addParam($kparams, "filter", $filter->toParams()); + if ($pager !== null) + $this->client->addParam($kparams, "pager", $pager->toParams()); + $this->client->queueServiceActionCall("data", "list", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaDataListResponse"); + return $resultObject; + } + + /** + * Serve action returan the file from dataContent field. + * + * @param string $entryId Data entry id + * @param int $version Desired version of the data + * @param bool $forceProxy Force to get the content without redirect + * @return file + */ + function serve($entryId, $version = -1, $forceProxy = false) + { + $kparams = array(); + $this->client->addParam($kparams, "entryId", $entryId); + $this->client->addParam($kparams, "version", $version); + $this->client->addParam($kparams, "forceProxy", $forceProxy); + $this->client->queueServiceActionCall("data", "serve", $kparams); + if(!$this->client->getDestinationPath() && !$this->client->getReturnServedResult()) + return $this->client->getServeUrl(); + return $this->client->doQueue(); + } +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaDocumentService extends KalturaServiceBase +{ + function __construct(KalturaClient $client = null) + { + parent::__construct($client); + } + + /** + * Add new document entry after the specific document file was uploaded and the upload token id exists + * + * @param KalturaDocumentEntry $documentEntry Document entry metadata + * @param string $uploadTokenId Upload token id + * @return KalturaDocumentEntry + */ + function addFromUploadedFile(KalturaDocumentEntry $documentEntry, $uploadTokenId) + { + $kparams = array(); + $this->client->addParam($kparams, "documentEntry", $documentEntry->toParams()); + $this->client->addParam($kparams, "uploadTokenId", $uploadTokenId); + $this->client->queueServiceActionCall("document", "addFromUploadedFile", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaDocumentEntry"); + return $resultObject; + } + + /** + * Copy entry into new entry + * + * @param string $sourceEntryId Document entry id to copy from + * @param KalturaDocumentEntry $documentEntry Document entry metadata + * @param int $sourceFlavorParamsId The flavor to be used as the new entry source, source flavor will be used if not specified + * @return KalturaDocumentEntry + */ + function addFromEntry($sourceEntryId, KalturaDocumentEntry $documentEntry = null, $sourceFlavorParamsId = null) + { + $kparams = array(); + $this->client->addParam($kparams, "sourceEntryId", $sourceEntryId); + if ($documentEntry !== null) + $this->client->addParam($kparams, "documentEntry", $documentEntry->toParams()); + $this->client->addParam($kparams, "sourceFlavorParamsId", $sourceFlavorParamsId); + $this->client->queueServiceActionCall("document", "addFromEntry", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaDocumentEntry"); + return $resultObject; + } + + /** + * Copy flavor asset into new entry + * + * @param string $sourceFlavorAssetId Flavor asset id to be used as the new entry source + * @param KalturaDocumentEntry $documentEntry Document entry metadata + * @return KalturaDocumentEntry + */ + function addFromFlavorAsset($sourceFlavorAssetId, KalturaDocumentEntry $documentEntry = null) + { + $kparams = array(); + $this->client->addParam($kparams, "sourceFlavorAssetId", $sourceFlavorAssetId); + if ($documentEntry !== null) + $this->client->addParam($kparams, "documentEntry", $documentEntry->toParams()); + $this->client->queueServiceActionCall("document", "addFromFlavorAsset", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaDocumentEntry"); + return $resultObject; + } + + /** + * Convert entry + * + * @param string $entryId Document entry id + * @param int $conversionProfileId + * @param array $dynamicConversionAttributes + * @return int + */ + function convert($entryId, $conversionProfileId = null, array $dynamicConversionAttributes = null) + { + $kparams = array(); + $this->client->addParam($kparams, "entryId", $entryId); + $this->client->addParam($kparams, "conversionProfileId", $conversionProfileId); + if ($dynamicConversionAttributes !== null) + foreach($dynamicConversionAttributes as $index => $obj) + { + $this->client->addParam($kparams, "dynamicConversionAttributes:$index", $obj->toParams()); + } + $this->client->queueServiceActionCall("document", "convert", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "integer"); + return $resultObject; + } + + /** + * Get document entry by ID. + * + * @param string $entryId Document entry id + * @param int $version Desired version of the data + * @return KalturaDocumentEntry + */ + function get($entryId, $version = -1) + { + $kparams = array(); + $this->client->addParam($kparams, "entryId", $entryId); + $this->client->addParam($kparams, "version", $version); + $this->client->queueServiceActionCall("document", "get", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaDocumentEntry"); + return $resultObject; + } + + /** + * Update document entry. Only the properties that were set will be updated. + * + * @param string $entryId Document entry id to update + * @param KalturaDocumentEntry $documentEntry Document entry metadata to update + * @return KalturaDocumentEntry + */ + function update($entryId, KalturaDocumentEntry $documentEntry) + { + $kparams = array(); + $this->client->addParam($kparams, "entryId", $entryId); + $this->client->addParam($kparams, "documentEntry", $documentEntry->toParams()); + $this->client->queueServiceActionCall("document", "update", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaDocumentEntry"); + return $resultObject; + } + + /** + * Delete a document entry. + * + * @param string $entryId Document entry id to delete + * @return + */ + function delete($entryId) + { + $kparams = array(); + $this->client->addParam($kparams, "entryId", $entryId); + $this->client->queueServiceActionCall("document", "delete", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "null"); + return $resultObject; + } + + /** + * List document entries by filter with paging support. + * + * @param KalturaDocumentEntryFilter $filter Document entry filter + * @param KalturaFilterPager $pager Pager + * @return KalturaDocumentListResponse + */ + function listAction(KalturaDocumentEntryFilter $filter = null, KalturaFilterPager $pager = null) + { + $kparams = array(); + if ($filter !== null) + $this->client->addParam($kparams, "filter", $filter->toParams()); + if ($pager !== null) + $this->client->addParam($kparams, "pager", $pager->toParams()); + $this->client->queueServiceActionCall("document", "list", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaDocumentListResponse"); + return $resultObject; + } + + /** + * Upload a document file to Kaltura, then the file can be used to create a document entry. + * + * @param file $fileData The file data + * @return string + */ + function upload($fileData) + { + $kparams = array(); + $kfiles = array(); + $this->client->addParam($kfiles, "fileData", $fileData); + $this->client->queueServiceActionCall("document", "upload", $kparams, $kfiles); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "string"); + return $resultObject; + } + + /** + * This will queue a batch job for converting the document file to swf + Returns the URL where the new swf will be available + * + * @param string $entryId + * @return string + */ + function convertPptToSwf($entryId) + { + $kparams = array(); + $this->client->addParam($kparams, "entryId", $entryId); + $this->client->queueServiceActionCall("document", "convertPptToSwf", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "string"); + return $resultObject; + } + + /** + * Serves the file content + * + * @param string $entryId Document entry id + * @param string $flavorAssetId Flavor asset id + * @param bool $forceProxy Force to get the content without redirect + * @return file + */ + function serve($entryId, $flavorAssetId = null, $forceProxy = false) + { + $kparams = array(); + $this->client->addParam($kparams, "entryId", $entryId); + $this->client->addParam($kparams, "flavorAssetId", $flavorAssetId); + $this->client->addParam($kparams, "forceProxy", $forceProxy); + $this->client->queueServiceActionCall("document", "serve", $kparams); + if(!$this->client->getDestinationPath() && !$this->client->getReturnServedResult()) + return $this->client->getServeUrl(); + return $this->client->doQueue(); + } + + /** + * Serves the file content + * + * @param string $entryId Document entry id + * @param string $flavorParamsId Flavor params id + * @param bool $forceProxy Force to get the content without redirect + * @return file + */ + function serveByFlavorParamsId($entryId, $flavorParamsId = null, $forceProxy = false) + { + $kparams = array(); + $this->client->addParam($kparams, "entryId", $entryId); + $this->client->addParam($kparams, "flavorParamsId", $flavorParamsId); + $this->client->addParam($kparams, "forceProxy", $forceProxy); + $this->client->queueServiceActionCall("document", "serveByFlavorParamsId", $kparams); + if(!$this->client->getDestinationPath() && !$this->client->getReturnServedResult()) + return $this->client->getServeUrl(); + return $this->client->doQueue(); + } + + /** + * Replace content associated with the given document entry. + * + * @param string $entryId Document entry id to update + * @param KalturaResource $resource Resource to be used to replace entry doc content + * @param int $conversionProfileId The conversion profile id to be used on the entry + * @return KalturaDocumentEntry + */ + function updateContent($entryId, KalturaResource $resource, $conversionProfileId = null) + { + $kparams = array(); + $this->client->addParam($kparams, "entryId", $entryId); + $this->client->addParam($kparams, "resource", $resource->toParams()); + $this->client->addParam($kparams, "conversionProfileId", $conversionProfileId); + $this->client->queueServiceActionCall("document", "updateContent", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaDocumentEntry"); + return $resultObject; + } + + /** + * Approves document replacement + * + * @param string $entryId Document entry id to replace + * @return KalturaDocumentEntry + */ + function approveReplace($entryId) + { + $kparams = array(); + $this->client->addParam($kparams, "entryId", $entryId); + $this->client->queueServiceActionCall("document", "approveReplace", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaDocumentEntry"); + return $resultObject; + } + + /** + * Cancels document replacement + * + * @param string $entryId Document entry id to cancel + * @return KalturaDocumentEntry + */ + function cancelReplace($entryId) + { + $kparams = array(); + $this->client->addParam($kparams, "entryId", $entryId); + $this->client->queueServiceActionCall("document", "cancelReplace", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaDocumentEntry"); + return $resultObject; + } +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaEmailIngestionProfileService extends KalturaServiceBase +{ + function __construct(KalturaClient $client = null) + { + parent::__construct($client); + } + + /** + * EmailIngestionProfile Add action allows you to add a EmailIngestionProfile to Kaltura DB + * + * @param KalturaEmailIngestionProfile $EmailIP Mandatory input parameter of type KalturaEmailIngestionProfile + * @return KalturaEmailIngestionProfile + */ + function add(KalturaEmailIngestionProfile $EmailIP) + { + $kparams = array(); + $this->client->addParam($kparams, "EmailIP", $EmailIP->toParams()); + $this->client->queueServiceActionCall("emailingestionprofile", "add", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaEmailIngestionProfile"); + return $resultObject; + } + + /** + * Retrieve a EmailIngestionProfile by email address + * + * @param string $emailAddress + * @return KalturaEmailIngestionProfile + */ + function getByEmailAddress($emailAddress) + { + $kparams = array(); + $this->client->addParam($kparams, "emailAddress", $emailAddress); + $this->client->queueServiceActionCall("emailingestionprofile", "getByEmailAddress", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaEmailIngestionProfile"); + return $resultObject; + } + + /** + * Retrieve a EmailIngestionProfile by id + * + * @param int $id + * @return KalturaEmailIngestionProfile + */ + function get($id) + { + $kparams = array(); + $this->client->addParam($kparams, "id", $id); + $this->client->queueServiceActionCall("emailingestionprofile", "get", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaEmailIngestionProfile"); + return $resultObject; + } + + /** + * Update an existing EmailIngestionProfile + * + * @param int $id + * @param KalturaEmailIngestionProfile $EmailIP + * @return KalturaEmailIngestionProfile + */ + function update($id, KalturaEmailIngestionProfile $EmailIP) + { + $kparams = array(); + $this->client->addParam($kparams, "id", $id); + $this->client->addParam($kparams, "EmailIP", $EmailIP->toParams()); + $this->client->queueServiceActionCall("emailingestionprofile", "update", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaEmailIngestionProfile"); + return $resultObject; + } + + /** + * Delete an existing EmailIngestionProfile + * + * @param int $id + * @return + */ + function delete($id) + { + $kparams = array(); + $this->client->addParam($kparams, "id", $id); + $this->client->queueServiceActionCall("emailingestionprofile", "delete", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "null"); + return $resultObject; + } + + /** + * Add KalturaMediaEntry from email ingestion + * + * @param KalturaMediaEntry $mediaEntry Media entry metadata + * @param string $uploadTokenId Upload token id + * @param int $emailProfId + * @param string $fromAddress + * @param string $emailMsgId + * @return KalturaMediaEntry + */ + function addMediaEntry(KalturaMediaEntry $mediaEntry, $uploadTokenId, $emailProfId, $fromAddress, $emailMsgId) + { + $kparams = array(); + $this->client->addParam($kparams, "mediaEntry", $mediaEntry->toParams()); + $this->client->addParam($kparams, "uploadTokenId", $uploadTokenId); + $this->client->addParam($kparams, "emailProfId", $emailProfId); + $this->client->addParam($kparams, "fromAddress", $fromAddress); + $this->client->addParam($kparams, "emailMsgId", $emailMsgId); + $this->client->queueServiceActionCall("emailingestionprofile", "addMediaEntry", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaMediaEntry"); + return $resultObject; + } +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaFileAssetService extends KalturaServiceBase +{ + function __construct(KalturaClient $client = null) + { + parent::__construct($client); + } + + /** + * Add new file asset + * + * @param KalturaFileAsset $fileAsset + * @return KalturaFileAsset + */ + function add(KalturaFileAsset $fileAsset) + { + $kparams = array(); + $this->client->addParam($kparams, "fileAsset", $fileAsset->toParams()); + $this->client->queueServiceActionCall("fileasset", "add", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaFileAsset"); + return $resultObject; + } + + /** + * Get file asset by id + * + * @param int $id + * @return KalturaFileAsset + */ + function get($id) + { + $kparams = array(); + $this->client->addParam($kparams, "id", $id); + $this->client->queueServiceActionCall("fileasset", "get", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaFileAsset"); + return $resultObject; + } + + /** + * Update file asset by id + * + * @param int $id + * @param KalturaFileAsset $fileAsset + * @return KalturaFileAsset + */ + function update($id, KalturaFileAsset $fileAsset) + { + $kparams = array(); + $this->client->addParam($kparams, "id", $id); + $this->client->addParam($kparams, "fileAsset", $fileAsset->toParams()); + $this->client->queueServiceActionCall("fileasset", "update", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaFileAsset"); + return $resultObject; + } + + /** + * Delete file asset by id + * + * @param int $id + * @return + */ + function delete($id) + { + $kparams = array(); + $this->client->addParam($kparams, "id", $id); + $this->client->queueServiceActionCall("fileasset", "delete", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "null"); + return $resultObject; + } + + /** + * Serve file asset by id + * + * @param int $id + * @return file + */ + function serve($id) + { + $kparams = array(); + $this->client->addParam($kparams, "id", $id); + $this->client->queueServiceActionCall("fileasset", "serve", $kparams); + if(!$this->client->getDestinationPath() && !$this->client->getReturnServedResult()) + return $this->client->getServeUrl(); + return $this->client->doQueue(); + } + + /** + * Set content of file asset + * + * @param string $id + * @param KalturaContentResource $contentResource + * @return KalturaFileAsset + */ + function setContent($id, KalturaContentResource $contentResource) + { + $kparams = array(); + $this->client->addParam($kparams, "id", $id); + $this->client->addParam($kparams, "contentResource", $contentResource->toParams()); + $this->client->queueServiceActionCall("fileasset", "setContent", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaFileAsset"); + return $resultObject; + } + + /** + * List file assets by filter and pager + * + * @param KalturaFileAssetFilter $filter + * @param KalturaFilterPager $pager + * @return KalturaFileAssetListResponse + */ + function listAction(KalturaFileAssetFilter $filter, KalturaFilterPager $pager = null) + { + $kparams = array(); + $this->client->addParam($kparams, "filter", $filter->toParams()); + if ($pager !== null) + $this->client->addParam($kparams, "pager", $pager->toParams()); + $this->client->queueServiceActionCall("fileasset", "list", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaFileAssetListResponse"); + return $resultObject; + } +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaFlavorAssetService extends KalturaServiceBase +{ + function __construct(KalturaClient $client = null) + { + parent::__construct($client); + } + + /** + * Add flavor asset + * + * @param string $entryId + * @param KalturaFlavorAsset $flavorAsset + * @return KalturaFlavorAsset + */ + function add($entryId, KalturaFlavorAsset $flavorAsset) + { + $kparams = array(); + $this->client->addParam($kparams, "entryId", $entryId); + $this->client->addParam($kparams, "flavorAsset", $flavorAsset->toParams()); + $this->client->queueServiceActionCall("flavorasset", "add", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaFlavorAsset"); + return $resultObject; + } + + /** + * Update flavor asset + * + * @param string $id + * @param KalturaFlavorAsset $flavorAsset + * @return KalturaFlavorAsset + */ + function update($id, KalturaFlavorAsset $flavorAsset) + { + $kparams = array(); + $this->client->addParam($kparams, "id", $id); + $this->client->addParam($kparams, "flavorAsset", $flavorAsset->toParams()); + $this->client->queueServiceActionCall("flavorasset", "update", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaFlavorAsset"); + return $resultObject; + } + + /** + * Update content of flavor asset + * + * @param string $id + * @param KalturaContentResource $contentResource + * @return KalturaFlavorAsset + */ + function setContent($id, KalturaContentResource $contentResource) + { + $kparams = array(); + $this->client->addParam($kparams, "id", $id); + $this->client->addParam($kparams, "contentResource", $contentResource->toParams()); + $this->client->queueServiceActionCall("flavorasset", "setContent", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaFlavorAsset"); + return $resultObject; + } + + /** + * Get Flavor Asset by ID + * + * @param string $id + * @return KalturaFlavorAsset + */ + function get($id) + { + $kparams = array(); + $this->client->addParam($kparams, "id", $id); + $this->client->queueServiceActionCall("flavorasset", "get", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaFlavorAsset"); + return $resultObject; + } + + /** + * Get Flavor Assets for Entry + * + * @param string $entryId + * @return array + */ + function getByEntryId($entryId) + { + $kparams = array(); + $this->client->addParam($kparams, "entryId", $entryId); + $this->client->queueServiceActionCall("flavorasset", "getByEntryId", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "array"); + return $resultObject; + } + + /** + * List Flavor Assets by filter and pager + * + * @param KalturaAssetFilter $filter + * @param KalturaFilterPager $pager + * @return KalturaFlavorAssetListResponse + */ + function listAction(KalturaAssetFilter $filter = null, KalturaFilterPager $pager = null) + { + $kparams = array(); + if ($filter !== null) + $this->client->addParam($kparams, "filter", $filter->toParams()); + if ($pager !== null) + $this->client->addParam($kparams, "pager", $pager->toParams()); + $this->client->queueServiceActionCall("flavorasset", "list", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaFlavorAssetListResponse"); + return $resultObject; + } + + /** + * Get web playable Flavor Assets for Entry + * + * @param string $entryId + * @return array + */ + function getWebPlayableByEntryId($entryId) + { + $kparams = array(); + $this->client->addParam($kparams, "entryId", $entryId); + $this->client->queueServiceActionCall("flavorasset", "getWebPlayableByEntryId", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "array"); + return $resultObject; + } + + /** + * Add and convert new Flavor Asset for Entry with specific Flavor Params + * + * @param string $entryId + * @param int $flavorParamsId + * @param int $priority + * @return + */ + function convert($entryId, $flavorParamsId, $priority = 0) + { + $kparams = array(); + $this->client->addParam($kparams, "entryId", $entryId); + $this->client->addParam($kparams, "flavorParamsId", $flavorParamsId); + $this->client->addParam($kparams, "priority", $priority); + $this->client->queueServiceActionCall("flavorasset", "convert", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "null"); + return $resultObject; + } + + /** + * Reconvert Flavor Asset by ID + * + * @param string $id Flavor Asset ID + * @return + */ + function reconvert($id) + { + $kparams = array(); + $this->client->addParam($kparams, "id", $id); + $this->client->queueServiceActionCall("flavorasset", "reconvert", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "null"); + return $resultObject; + } + + /** + * Delete Flavor Asset by ID + * + * @param string $id + * @return + */ + function delete($id) + { + $kparams = array(); + $this->client->addParam($kparams, "id", $id); + $this->client->queueServiceActionCall("flavorasset", "delete", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "null"); + return $resultObject; + } + + /** + * Get download URL for the asset + * + * @param string $id + * @param int $storageId + * @param bool $forceProxy + * @return string + */ + function getUrl($id, $storageId = null, $forceProxy = false) + { + $kparams = array(); + $this->client->addParam($kparams, "id", $id); + $this->client->addParam($kparams, "storageId", $storageId); + $this->client->addParam($kparams, "forceProxy", $forceProxy); + $this->client->queueServiceActionCall("flavorasset", "getUrl", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "string"); + return $resultObject; + } + + /** + * Get remote storage existing paths for the asset + * + * @param string $id + * @return KalturaRemotePathListResponse + */ + function getRemotePaths($id) + { + $kparams = array(); + $this->client->addParam($kparams, "id", $id); + $this->client->queueServiceActionCall("flavorasset", "getRemotePaths", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaRemotePathListResponse"); + return $resultObject; + } + + /** + * Get download URL for the Flavor Asset + * + * @param string $id + * @param bool $useCdn + * @return string + */ + function getDownloadUrl($id, $useCdn = false) + { + $kparams = array(); + $this->client->addParam($kparams, "id", $id); + $this->client->addParam($kparams, "useCdn", $useCdn); + $this->client->queueServiceActionCall("flavorasset", "getDownloadUrl", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "string"); + return $resultObject; + } + + /** + * Get Flavor Asset with the relevant Flavor Params (Flavor Params can exist without Flavor Asset & vice versa) + * + * @param string $entryId + * @return array + */ + function getFlavorAssetsWithParams($entryId) + { + $kparams = array(); + $this->client->addParam($kparams, "entryId", $entryId); + $this->client->queueServiceActionCall("flavorasset", "getFlavorAssetsWithParams", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "array"); + return $resultObject; + } + + /** + * Manually export an asset + * + * @param string $assetId + * @param int $storageProfileId + * @return KalturaFlavorAsset + */ + function export($assetId, $storageProfileId) + { + $kparams = array(); + $this->client->addParam($kparams, "assetId", $assetId); + $this->client->addParam($kparams, "storageProfileId", $storageProfileId); + $this->client->queueServiceActionCall("flavorasset", "export", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaFlavorAsset"); + return $resultObject; + } + + /** + * Set a given flavor as the original flavor + * + * @param string $assetId + * @return + */ + function setAsSource($assetId) + { + $kparams = array(); + $this->client->addParam($kparams, "assetId", $assetId); + $this->client->queueServiceActionCall("flavorasset", "setAsSource", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "null"); + return $resultObject; + } +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaFlavorParamsOutputService extends KalturaServiceBase +{ + function __construct(KalturaClient $client = null) + { + parent::__construct($client); + } + + /** + * Get flavor params output object by ID + * + * @param int $id + * @return KalturaFlavorParamsOutput + */ + function get($id) + { + $kparams = array(); + $this->client->addParam($kparams, "id", $id); + $this->client->queueServiceActionCall("flavorparamsoutput", "get", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaFlavorParamsOutput"); + return $resultObject; + } + + /** + * List flavor params output objects by filter and pager + * + * @param KalturaFlavorParamsOutputFilter $filter + * @param KalturaFilterPager $pager + * @return KalturaFlavorParamsOutputListResponse + */ + function listAction(KalturaFlavorParamsOutputFilter $filter = null, KalturaFilterPager $pager = null) + { + $kparams = array(); + if ($filter !== null) + $this->client->addParam($kparams, "filter", $filter->toParams()); + if ($pager !== null) + $this->client->addParam($kparams, "pager", $pager->toParams()); + $this->client->queueServiceActionCall("flavorparamsoutput", "list", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaFlavorParamsOutputListResponse"); + return $resultObject; + } +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaFlavorParamsService extends KalturaServiceBase +{ + function __construct(KalturaClient $client = null) + { + parent::__construct($client); + } + + /** + * Add new Flavor Params + * + * @param KalturaFlavorParams $flavorParams + * @return KalturaFlavorParams + */ + function add(KalturaFlavorParams $flavorParams) + { + $kparams = array(); + $this->client->addParam($kparams, "flavorParams", $flavorParams->toParams()); + $this->client->queueServiceActionCall("flavorparams", "add", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaFlavorParams"); + return $resultObject; + } + + /** + * Get Flavor Params by ID + * + * @param int $id + * @return KalturaFlavorParams + */ + function get($id) + { + $kparams = array(); + $this->client->addParam($kparams, "id", $id); + $this->client->queueServiceActionCall("flavorparams", "get", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaFlavorParams"); + return $resultObject; + } + + /** + * Update Flavor Params by ID + * + * @param int $id + * @param KalturaFlavorParams $flavorParams + * @return KalturaFlavorParams + */ + function update($id, KalturaFlavorParams $flavorParams) + { + $kparams = array(); + $this->client->addParam($kparams, "id", $id); + $this->client->addParam($kparams, "flavorParams", $flavorParams->toParams()); + $this->client->queueServiceActionCall("flavorparams", "update", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaFlavorParams"); + return $resultObject; + } + + /** + * Delete Flavor Params by ID + * + * @param int $id + * @return + */ + function delete($id) + { + $kparams = array(); + $this->client->addParam($kparams, "id", $id); + $this->client->queueServiceActionCall("flavorparams", "delete", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "null"); + return $resultObject; + } + + /** + * List Flavor Params by filter with paging support (By default - all system default params will be listed too) + * + * @param KalturaFlavorParamsFilter $filter + * @param KalturaFilterPager $pager + * @return KalturaFlavorParamsListResponse + */ + function listAction(KalturaFlavorParamsFilter $filter = null, KalturaFilterPager $pager = null) + { + $kparams = array(); + if ($filter !== null) + $this->client->addParam($kparams, "filter", $filter->toParams()); + if ($pager !== null) + $this->client->addParam($kparams, "pager", $pager->toParams()); + $this->client->queueServiceActionCall("flavorparams", "list", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaFlavorParamsListResponse"); + return $resultObject; + } + + /** + * Get Flavor Params by Conversion Profile ID + * + * @param int $conversionProfileId + * @return array + */ + function getByConversionProfileId($conversionProfileId) + { + $kparams = array(); + $this->client->addParam($kparams, "conversionProfileId", $conversionProfileId); + $this->client->queueServiceActionCall("flavorparams", "getByConversionProfileId", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "array"); + return $resultObject; + } +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaLiveChannelSegmentService extends KalturaServiceBase +{ + function __construct(KalturaClient $client = null) + { + parent::__construct($client); + } + + /** + * Add new live channel segment + * + * @param KalturaLiveChannelSegment $liveChannelSegment + * @return KalturaLiveChannelSegment + */ + function add(KalturaLiveChannelSegment $liveChannelSegment) + { + $kparams = array(); + $this->client->addParam($kparams, "liveChannelSegment", $liveChannelSegment->toParams()); + $this->client->queueServiceActionCall("livechannelsegment", "add", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaLiveChannelSegment"); + return $resultObject; + } + + /** + * Get live channel segment by id + * + * @param int $id + * @return KalturaLiveChannelSegment + */ + function get($id) + { + $kparams = array(); + $this->client->addParam($kparams, "id", $id); + $this->client->queueServiceActionCall("livechannelsegment", "get", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaLiveChannelSegment"); + return $resultObject; + } + + /** + * Update live channel segment by id + * + * @param int $id + * @param KalturaLiveChannelSegment $liveChannelSegment + * @return KalturaLiveChannelSegment + */ + function update($id, KalturaLiveChannelSegment $liveChannelSegment) + { + $kparams = array(); + $this->client->addParam($kparams, "id", $id); + $this->client->addParam($kparams, "liveChannelSegment", $liveChannelSegment->toParams()); + $this->client->queueServiceActionCall("livechannelsegment", "update", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaLiveChannelSegment"); + return $resultObject; + } + + /** + * Delete live channel segment by id + * + * @param int $id + * @return + */ + function delete($id) + { + $kparams = array(); + $this->client->addParam($kparams, "id", $id); + $this->client->queueServiceActionCall("livechannelsegment", "delete", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "null"); + return $resultObject; + } + + /** + * List live channel segments by filter and pager + * + * @param KalturaLiveChannelSegmentFilter $filter + * @param KalturaFilterPager $pager + * @return KalturaLiveChannelSegmentListResponse + */ + function listAction(KalturaLiveChannelSegmentFilter $filter = null, KalturaFilterPager $pager = null) + { + $kparams = array(); + if ($filter !== null) + $this->client->addParam($kparams, "filter", $filter->toParams()); + if ($pager !== null) + $this->client->addParam($kparams, "pager", $pager->toParams()); + $this->client->queueServiceActionCall("livechannelsegment", "list", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaLiveChannelSegmentListResponse"); + return $resultObject; + } +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaLiveChannelService extends KalturaServiceBase +{ + function __construct(KalturaClient $client = null) + { + parent::__construct($client); + } + + /** + * Adds new live channel. + * + * @param KalturaLiveChannel $liveChannel Live channel metadata + * @return KalturaLiveChannel + */ + function add(KalturaLiveChannel $liveChannel) + { + $kparams = array(); + $this->client->addParam($kparams, "liveChannel", $liveChannel->toParams()); + $this->client->queueServiceActionCall("livechannel", "add", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaLiveChannel"); + return $resultObject; + } + + /** + * Get live channel by ID. + * + * @param string $id Live channel id + * @return KalturaLiveChannel + */ + function get($id) + { + $kparams = array(); + $this->client->addParam($kparams, "id", $id); + $this->client->queueServiceActionCall("livechannel", "get", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaLiveChannel"); + return $resultObject; + } + + /** + * Update live channel. Only the properties that were set will be updated. + * + * @param string $id Live channel id to update + * @param KalturaLiveChannel $liveChannel Live channel metadata to update + * @return KalturaLiveChannel + */ + function update($id, KalturaLiveChannel $liveChannel) + { + $kparams = array(); + $this->client->addParam($kparams, "id", $id); + $this->client->addParam($kparams, "liveChannel", $liveChannel->toParams()); + $this->client->queueServiceActionCall("livechannel", "update", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaLiveChannel"); + return $resultObject; + } + + /** + * Delete a live channel. + * + * @param string $id Live channel id to delete + * @return + */ + function delete($id) + { + $kparams = array(); + $this->client->addParam($kparams, "id", $id); + $this->client->queueServiceActionCall("livechannel", "delete", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "null"); + return $resultObject; + } + + /** + * List live channels by filter with paging support. + * + * @param KalturaLiveChannelFilter $filter Live channel filter + * @param KalturaFilterPager $pager Pager + * @return KalturaLiveChannelListResponse + */ + function listAction(KalturaLiveChannelFilter $filter = null, KalturaFilterPager $pager = null) + { + $kparams = array(); + if ($filter !== null) + $this->client->addParam($kparams, "filter", $filter->toParams()); + if ($pager !== null) + $this->client->addParam($kparams, "pager", $pager->toParams()); + $this->client->queueServiceActionCall("livechannel", "list", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaLiveChannelListResponse"); + return $resultObject; + } + + /** + * Delivering the status of a live channel (on-air/offline) + * + * @param string $id ID of the live channel + * @return bool + */ + function isLive($id) + { + $kparams = array(); + $this->client->addParam($kparams, "id", $id); + $this->client->queueServiceActionCall("livechannel", "isLive", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $resultObject = (bool) $resultObject; + return $resultObject; + } + + /** + * Append recorded video to live entry + * + * @param string $entryId Live entry id + * @param int $mediaServerIndex + * @param KalturaServerFileResource $resource + * @param float $duration + * @return + */ + function appendRecording($entryId, $mediaServerIndex, KalturaServerFileResource $resource, $duration) + { + $kparams = array(); + $this->client->addParam($kparams, "entryId", $entryId); + $this->client->addParam($kparams, "mediaServerIndex", $mediaServerIndex); + $this->client->addParam($kparams, "resource", $resource->toParams()); + $this->client->addParam($kparams, "duration", $duration); + $this->client->queueServiceActionCall("livechannel", "appendRecording", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "null"); + return $resultObject; + } + + /** + * Register media server to live entry + * + * @param string $entryId Live entry id + * @param string $hostname Media server host name + * @param int $mediaServerIndex Media server index primary / secondary + * @return KalturaLiveEntry + */ + function registerMediaServer($entryId, $hostname, $mediaServerIndex) + { + $kparams = array(); + $this->client->addParam($kparams, "entryId", $entryId); + $this->client->addParam($kparams, "hostname", $hostname); + $this->client->addParam($kparams, "mediaServerIndex", $mediaServerIndex); + $this->client->queueServiceActionCall("livechannel", "registerMediaServer", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaLiveEntry"); + return $resultObject; + } + + /** + * Unregister media server from live entry + * + * @param string $entryId Live entry id + * @param string $hostname Media server host name + * @param int $mediaServerIndex Media server index primary / secondary + * @return KalturaLiveEntry + */ + function unregisterMediaServer($entryId, $hostname, $mediaServerIndex) + { + $kparams = array(); + $this->client->addParam($kparams, "entryId", $entryId); + $this->client->addParam($kparams, "hostname", $hostname); + $this->client->addParam($kparams, "mediaServerIndex", $mediaServerIndex); + $this->client->queueServiceActionCall("livechannel", "unregisterMediaServer", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaLiveEntry"); + return $resultObject; + } + + /** + * Validates all registered media servers + * + * @param string $entryId Live entry id + * @return + */ + function validateRegisteredMediaServers($entryId) + { + $kparams = array(); + $this->client->addParam($kparams, "entryId", $entryId); + $this->client->queueServiceActionCall("livechannel", "validateRegisteredMediaServers", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "null"); + return $resultObject; + } +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaLiveStreamService extends KalturaServiceBase +{ + function __construct(KalturaClient $client = null) + { + parent::__construct($client); + } + + /** + * Adds new live stream entry. + The entry will be queued for provision. + * + * @param KalturaLiveStreamEntry $liveStreamEntry Live stream entry metadata + * @param string $sourceType Live stream source type + * @return KalturaLiveStreamEntry + */ + function add(KalturaLiveStreamEntry $liveStreamEntry, $sourceType = null) + { + $kparams = array(); + $this->client->addParam($kparams, "liveStreamEntry", $liveStreamEntry->toParams()); + $this->client->addParam($kparams, "sourceType", $sourceType); + $this->client->queueServiceActionCall("livestream", "add", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaLiveStreamEntry"); + return $resultObject; + } + + /** + * Get live stream entry by ID. + * + * @param string $entryId Live stream entry id + * @param int $version Desired version of the data + * @return KalturaLiveStreamEntry + */ + function get($entryId, $version = -1) + { + $kparams = array(); + $this->client->addParam($kparams, "entryId", $entryId); + $this->client->addParam($kparams, "version", $version); + $this->client->queueServiceActionCall("livestream", "get", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaLiveStreamEntry"); + return $resultObject; + } + + /** + * Authenticate live-stream entry against stream token and partner limitations + * + * @param string $entryId Live stream entry id + * @param string $token Live stream broadcasting token + * @return KalturaLiveStreamEntry + */ + function authenticate($entryId, $token) + { + $kparams = array(); + $this->client->addParam($kparams, "entryId", $entryId); + $this->client->addParam($kparams, "token", $token); + $this->client->queueServiceActionCall("livestream", "authenticate", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaLiveStreamEntry"); + return $resultObject; + } + + /** + * Update live stream entry. Only the properties that were set will be updated. + * + * @param string $entryId Live stream entry id to update + * @param KalturaLiveStreamEntry $liveStreamEntry Live stream entry metadata to update + * @return KalturaLiveStreamEntry + */ + function update($entryId, KalturaLiveStreamEntry $liveStreamEntry) + { + $kparams = array(); + $this->client->addParam($kparams, "entryId", $entryId); + $this->client->addParam($kparams, "liveStreamEntry", $liveStreamEntry->toParams()); + $this->client->queueServiceActionCall("livestream", "update", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaLiveStreamEntry"); + return $resultObject; + } + + /** + * Delete a live stream entry. + * + * @param string $entryId Live stream entry id to delete + * @return + */ + function delete($entryId) + { + $kparams = array(); + $this->client->addParam($kparams, "entryId", $entryId); + $this->client->queueServiceActionCall("livestream", "delete", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "null"); + return $resultObject; + } + + /** + * List live stream entries by filter with paging support. + * + * @param KalturaLiveStreamEntryFilter $filter Live stream entry filter + * @param KalturaFilterPager $pager Pager + * @return KalturaLiveStreamListResponse + */ + function listAction(KalturaLiveStreamEntryFilter $filter = null, KalturaFilterPager $pager = null) + { + $kparams = array(); + if ($filter !== null) + $this->client->addParam($kparams, "filter", $filter->toParams()); + if ($pager !== null) + $this->client->addParam($kparams, "pager", $pager->toParams()); + $this->client->queueServiceActionCall("livestream", "list", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaLiveStreamListResponse"); + return $resultObject; + } + + /** + * Update live stream entry thumbnail using a raw jpeg file + * + * @param string $entryId Live stream entry id + * @param file $fileData Jpeg file data + * @return KalturaLiveStreamEntry + */ + function updateOfflineThumbnailJpeg($entryId, $fileData) + { + $kparams = array(); + $this->client->addParam($kparams, "entryId", $entryId); + $kfiles = array(); + $this->client->addParam($kfiles, "fileData", $fileData); + $this->client->queueServiceActionCall("livestream", "updateOfflineThumbnailJpeg", $kparams, $kfiles); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaLiveStreamEntry"); + return $resultObject; + } + + /** + * Update entry thumbnail using url + * + * @param string $entryId Live stream entry id + * @param string $url File url + * @return KalturaLiveStreamEntry + */ + function updateOfflineThumbnailFromUrl($entryId, $url) + { + $kparams = array(); + $this->client->addParam($kparams, "entryId", $entryId); + $this->client->addParam($kparams, "url", $url); + $this->client->queueServiceActionCall("livestream", "updateOfflineThumbnailFromUrl", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaLiveStreamEntry"); + return $resultObject; + } + + /** + * Delivering the status of a live stream (on-air/offline) if it is possible + * + * @param string $id ID of the live stream + * @param string $protocol Protocol of the stream to test. + * @return bool + */ + function isLive($id, $protocol) + { + $kparams = array(); + $this->client->addParam($kparams, "id", $id); + $this->client->addParam($kparams, "protocol", $protocol); + $this->client->queueServiceActionCall("livestream", "isLive", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $resultObject = (bool) $resultObject; + return $resultObject; + } + + /** + * Append recorded video to live entry + * + * @param string $entryId Live entry id + * @param int $mediaServerIndex + * @param KalturaServerFileResource $resource + * @param float $duration + * @return + */ + function appendRecording($entryId, $mediaServerIndex, KalturaServerFileResource $resource, $duration) + { + $kparams = array(); + $this->client->addParam($kparams, "entryId", $entryId); + $this->client->addParam($kparams, "mediaServerIndex", $mediaServerIndex); + $this->client->addParam($kparams, "resource", $resource->toParams()); + $this->client->addParam($kparams, "duration", $duration); + $this->client->queueServiceActionCall("livestream", "appendRecording", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "null"); + return $resultObject; + } + + /** + * Register media server to live entry + * + * @param string $entryId Live entry id + * @param string $hostname Media server host name + * @param int $mediaServerIndex Media server index primary / secondary + * @return KalturaLiveEntry + */ + function registerMediaServer($entryId, $hostname, $mediaServerIndex) + { + $kparams = array(); + $this->client->addParam($kparams, "entryId", $entryId); + $this->client->addParam($kparams, "hostname", $hostname); + $this->client->addParam($kparams, "mediaServerIndex", $mediaServerIndex); + $this->client->queueServiceActionCall("livestream", "registerMediaServer", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaLiveEntry"); + return $resultObject; + } + + /** + * Unregister media server from live entry + * + * @param string $entryId Live entry id + * @param string $hostname Media server host name + * @param int $mediaServerIndex Media server index primary / secondary + * @return KalturaLiveEntry + */ + function unregisterMediaServer($entryId, $hostname, $mediaServerIndex) + { + $kparams = array(); + $this->client->addParam($kparams, "entryId", $entryId); + $this->client->addParam($kparams, "hostname", $hostname); + $this->client->addParam($kparams, "mediaServerIndex", $mediaServerIndex); + $this->client->queueServiceActionCall("livestream", "unregisterMediaServer", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaLiveEntry"); + return $resultObject; + } + + /** + * Validates all registered media servers + * + * @param string $entryId Live entry id + * @return + */ + function validateRegisteredMediaServers($entryId) + { + $kparams = array(); + $this->client->addParam($kparams, "entryId", $entryId); + $this->client->queueServiceActionCall("livestream", "validateRegisteredMediaServers", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "null"); + return $resultObject; + } +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaMediaInfoService extends KalturaServiceBase +{ + function __construct(KalturaClient $client = null) + { + parent::__construct($client); + } + + /** + * List media info objects by filter and pager + * + * @param KalturaMediaInfoFilter $filter + * @param KalturaFilterPager $pager + * @return KalturaMediaInfoListResponse + */ + function listAction(KalturaMediaInfoFilter $filter = null, KalturaFilterPager $pager = null) + { + $kparams = array(); + if ($filter !== null) + $this->client->addParam($kparams, "filter", $filter->toParams()); + if ($pager !== null) + $this->client->addParam($kparams, "pager", $pager->toParams()); + $this->client->queueServiceActionCall("mediainfo", "list", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaMediaInfoListResponse"); + return $resultObject; + } +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaMediaServerService extends KalturaServiceBase +{ + function __construct(KalturaClient $client = null) + { + parent::__construct($client); + } + + /** + * Get media server by hostname + * + * @param string $hostname + * @return KalturaMediaServer + */ + function get($hostname) + { + $kparams = array(); + $this->client->addParam($kparams, "hostname", $hostname); + $this->client->queueServiceActionCall("mediaserver", "get", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaMediaServer"); + return $resultObject; + } + + /** + * Update media server status + * + * @param string $hostname + * @param KalturaMediaServerStatus $mediaServerStatus + * @return KalturaMediaServer + */ + function reportStatus($hostname, KalturaMediaServerStatus $mediaServerStatus) + { + $kparams = array(); + $this->client->addParam($kparams, "hostname", $hostname); + $this->client->addParam($kparams, "mediaServerStatus", $mediaServerStatus->toParams()); + $this->client->queueServiceActionCall("mediaserver", "reportStatus", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaMediaServer"); + return $resultObject; + } +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaMediaService extends KalturaServiceBase +{ + function __construct(KalturaClient $client = null) + { + parent::__construct($client); + } + + /** + * Add entry + * + * @param KalturaMediaEntry $entry + * @return KalturaMediaEntry + */ + function add(KalturaMediaEntry $entry) + { + $kparams = array(); + $this->client->addParam($kparams, "entry", $entry->toParams()); + $this->client->queueServiceActionCall("media", "add", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaMediaEntry"); + return $resultObject; + } + + /** + * Add content to media entry which is not yet associated with content (therefore is in status NO_CONTENT). + If the requirement is to replace the entry's associated content, use action updateContent. + * + * @param string $entryId + * @param KalturaResource $resource + * @return KalturaMediaEntry + */ + function addContent($entryId, KalturaResource $resource = null) + { + $kparams = array(); + $this->client->addParam($kparams, "entryId", $entryId); + if ($resource !== null) + $this->client->addParam($kparams, "resource", $resource->toParams()); + $this->client->queueServiceActionCall("media", "addContent", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaMediaEntry"); + return $resultObject; + } + + /** + * Adds new media entry by importing an HTTP or FTP URL. + The entry will be queued for import and then for conversion. + * + * @param KalturaMediaEntry $mediaEntry Media entry metadata + * @param string $url An HTTP or FTP URL + * @return KalturaMediaEntry + */ + function addFromUrl(KalturaMediaEntry $mediaEntry, $url) + { + $kparams = array(); + $this->client->addParam($kparams, "mediaEntry", $mediaEntry->toParams()); + $this->client->addParam($kparams, "url", $url); + $this->client->queueServiceActionCall("media", "addFromUrl", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaMediaEntry"); + return $resultObject; + } + + /** + * Adds new media entry by importing the media file from a search provider. + This action should be used with the search service result. + * + * @param KalturaMediaEntry $mediaEntry Media entry metadata + * @param KalturaSearchResult $searchResult Result object from search service + * @return KalturaMediaEntry + */ + function addFromSearchResult(KalturaMediaEntry $mediaEntry = null, KalturaSearchResult $searchResult = null) + { + $kparams = array(); + if ($mediaEntry !== null) + $this->client->addParam($kparams, "mediaEntry", $mediaEntry->toParams()); + if ($searchResult !== null) + $this->client->addParam($kparams, "searchResult", $searchResult->toParams()); + $this->client->queueServiceActionCall("media", "addFromSearchResult", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaMediaEntry"); + return $resultObject; + } + + /** + * Add new entry after the specific media file was uploaded and the upload token id exists + * + * @param KalturaMediaEntry $mediaEntry Media entry metadata + * @param string $uploadTokenId Upload token id + * @return KalturaMediaEntry + */ + function addFromUploadedFile(KalturaMediaEntry $mediaEntry, $uploadTokenId) + { + $kparams = array(); + $this->client->addParam($kparams, "mediaEntry", $mediaEntry->toParams()); + $this->client->addParam($kparams, "uploadTokenId", $uploadTokenId); + $this->client->queueServiceActionCall("media", "addFromUploadedFile", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaMediaEntry"); + return $resultObject; + } + + /** + * Add new entry after the file was recored on the server and the token id exists + * + * @param KalturaMediaEntry $mediaEntry Media entry metadata + * @param string $webcamTokenId Token id for the recored webcam file + * @return KalturaMediaEntry + */ + function addFromRecordedWebcam(KalturaMediaEntry $mediaEntry, $webcamTokenId) + { + $kparams = array(); + $this->client->addParam($kparams, "mediaEntry", $mediaEntry->toParams()); + $this->client->addParam($kparams, "webcamTokenId", $webcamTokenId); + $this->client->queueServiceActionCall("media", "addFromRecordedWebcam", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaMediaEntry"); + return $resultObject; + } + + /** + * Copy entry into new entry + * + * @param string $sourceEntryId Media entry id to copy from + * @param KalturaMediaEntry $mediaEntry Media entry metadata + * @param int $sourceFlavorParamsId The flavor to be used as the new entry source, source flavor will be used if not specified + * @return KalturaMediaEntry + */ + function addFromEntry($sourceEntryId, KalturaMediaEntry $mediaEntry = null, $sourceFlavorParamsId = null) + { + $kparams = array(); + $this->client->addParam($kparams, "sourceEntryId", $sourceEntryId); + if ($mediaEntry !== null) + $this->client->addParam($kparams, "mediaEntry", $mediaEntry->toParams()); + $this->client->addParam($kparams, "sourceFlavorParamsId", $sourceFlavorParamsId); + $this->client->queueServiceActionCall("media", "addFromEntry", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaMediaEntry"); + return $resultObject; + } + + /** + * Copy flavor asset into new entry + * + * @param string $sourceFlavorAssetId Flavor asset id to be used as the new entry source + * @param KalturaMediaEntry $mediaEntry Media entry metadata + * @return KalturaMediaEntry + */ + function addFromFlavorAsset($sourceFlavorAssetId, KalturaMediaEntry $mediaEntry = null) + { + $kparams = array(); + $this->client->addParam($kparams, "sourceFlavorAssetId", $sourceFlavorAssetId); + if ($mediaEntry !== null) + $this->client->addParam($kparams, "mediaEntry", $mediaEntry->toParams()); + $this->client->queueServiceActionCall("media", "addFromFlavorAsset", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaMediaEntry"); + return $resultObject; + } + + /** + * Convert entry + * + * @param string $entryId Media entry id + * @param int $conversionProfileId + * @param array $dynamicConversionAttributes + * @return int + */ + function convert($entryId, $conversionProfileId = null, array $dynamicConversionAttributes = null) + { + $kparams = array(); + $this->client->addParam($kparams, "entryId", $entryId); + $this->client->addParam($kparams, "conversionProfileId", $conversionProfileId); + if ($dynamicConversionAttributes !== null) + foreach($dynamicConversionAttributes as $index => $obj) + { + $this->client->addParam($kparams, "dynamicConversionAttributes:$index", $obj->toParams()); + } + $this->client->queueServiceActionCall("media", "convert", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "integer"); + return $resultObject; + } + + /** + * Get media entry by ID. + * + * @param string $entryId Media entry id + * @param int $version Desired version of the data + * @return KalturaMediaEntry + */ + function get($entryId, $version = -1) + { + $kparams = array(); + $this->client->addParam($kparams, "entryId", $entryId); + $this->client->addParam($kparams, "version", $version); + $this->client->queueServiceActionCall("media", "get", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaMediaEntry"); + return $resultObject; + } + + /** + * Get MRSS by entry id + XML will return as an escaped string + * + * @param string $entryId Entry id + * @param array $extendingItemsArray + * @return string + */ + function getMrss($entryId, array $extendingItemsArray = null) + { + $kparams = array(); + $this->client->addParam($kparams, "entryId", $entryId); + if ($extendingItemsArray !== null) + foreach($extendingItemsArray as $index => $obj) + { + $this->client->addParam($kparams, "extendingItemsArray:$index", $obj->toParams()); + } + $this->client->queueServiceActionCall("media", "getMrss", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "string"); + return $resultObject; + } + + /** + * Update media entry. Only the properties that were set will be updated. + * + * @param string $entryId Media entry id to update + * @param KalturaMediaEntry $mediaEntry Media entry metadata to update + * @return KalturaMediaEntry + */ + function update($entryId, KalturaMediaEntry $mediaEntry) + { + $kparams = array(); + $this->client->addParam($kparams, "entryId", $entryId); + $this->client->addParam($kparams, "mediaEntry", $mediaEntry->toParams()); + $this->client->queueServiceActionCall("media", "update", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaMediaEntry"); + return $resultObject; + } + + /** + * Replace content associated with the media entry. + * + * @param string $entryId Media entry id to update + * @param KalturaResource $resource Resource to be used to replace entry media content + * @param int $conversionProfileId The conversion profile id to be used on the entry + * @return KalturaMediaEntry + */ + function updateContent($entryId, KalturaResource $resource, $conversionProfileId = null) + { + $kparams = array(); + $this->client->addParam($kparams, "entryId", $entryId); + $this->client->addParam($kparams, "resource", $resource->toParams()); + $this->client->addParam($kparams, "conversionProfileId", $conversionProfileId); + $this->client->queueServiceActionCall("media", "updateContent", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaMediaEntry"); + return $resultObject; + } + + /** + * Delete a media entry. + * + * @param string $entryId Media entry id to delete + * @return + */ + function delete($entryId) + { + $kparams = array(); + $this->client->addParam($kparams, "entryId", $entryId); + $this->client->queueServiceActionCall("media", "delete", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "null"); + return $resultObject; + } + + /** + * Approves media replacement + * + * @param string $entryId Media entry id to replace + * @return KalturaMediaEntry + */ + function approveReplace($entryId) + { + $kparams = array(); + $this->client->addParam($kparams, "entryId", $entryId); + $this->client->queueServiceActionCall("media", "approveReplace", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaMediaEntry"); + return $resultObject; + } + + /** + * Cancels media replacement + * + * @param string $entryId Media entry id to cancel + * @return KalturaMediaEntry + */ + function cancelReplace($entryId) + { + $kparams = array(); + $this->client->addParam($kparams, "entryId", $entryId); + $this->client->queueServiceActionCall("media", "cancelReplace", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaMediaEntry"); + return $resultObject; + } + + /** + * List media entries by filter with paging support. + * + * @param KalturaMediaEntryFilter $filter Media entry filter + * @param KalturaFilterPager $pager Pager + * @return KalturaMediaListResponse + */ + function listAction(KalturaMediaEntryFilter $filter = null, KalturaFilterPager $pager = null) + { + $kparams = array(); + if ($filter !== null) + $this->client->addParam($kparams, "filter", $filter->toParams()); + if ($pager !== null) + $this->client->addParam($kparams, "pager", $pager->toParams()); + $this->client->queueServiceActionCall("media", "list", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaMediaListResponse"); + return $resultObject; + } + + /** + * Count media entries by filter. + * + * @param KalturaMediaEntryFilter $filter Media entry filter + * @return int + */ + function count(KalturaMediaEntryFilter $filter = null) + { + $kparams = array(); + if ($filter !== null) + $this->client->addParam($kparams, "filter", $filter->toParams()); + $this->client->queueServiceActionCall("media", "count", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "integer"); + return $resultObject; + } + + /** + * Upload a media file to Kaltura, then the file can be used to create a media entry. + * + * @param file $fileData The file data + * @return string + */ + function upload($fileData) + { + $kparams = array(); + $kfiles = array(); + $this->client->addParam($kfiles, "fileData", $fileData); + $this->client->queueServiceActionCall("media", "upload", $kparams, $kfiles); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "string"); + return $resultObject; + } + + /** + * Update media entry thumbnail by a specified time offset (In seconds) + If flavor params id not specified, source flavor will be used by default + * + * @param string $entryId Media entry id + * @param int $timeOffset Time offset (in seconds) + * @param int $flavorParamsId The flavor params id to be used + * @return KalturaMediaEntry + */ + function updateThumbnail($entryId, $timeOffset, $flavorParamsId = null) + { + $kparams = array(); + $this->client->addParam($kparams, "entryId", $entryId); + $this->client->addParam($kparams, "timeOffset", $timeOffset); + $this->client->addParam($kparams, "flavorParamsId", $flavorParamsId); + $this->client->queueServiceActionCall("media", "updateThumbnail", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaMediaEntry"); + return $resultObject; + } + + /** + * Update media entry thumbnail from a different entry by a specified time offset (In seconds) + If flavor params id not specified, source flavor will be used by default + * + * @param string $entryId Media entry id + * @param string $sourceEntryId Media entry id + * @param int $timeOffset Time offset (in seconds) + * @param int $flavorParamsId The flavor params id to be used + * @return KalturaMediaEntry + */ + function updateThumbnailFromSourceEntry($entryId, $sourceEntryId, $timeOffset, $flavorParamsId = null) + { + $kparams = array(); + $this->client->addParam($kparams, "entryId", $entryId); + $this->client->addParam($kparams, "sourceEntryId", $sourceEntryId); + $this->client->addParam($kparams, "timeOffset", $timeOffset); + $this->client->addParam($kparams, "flavorParamsId", $flavorParamsId); + $this->client->queueServiceActionCall("media", "updateThumbnailFromSourceEntry", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaMediaEntry"); + return $resultObject; + } + + /** + * Update media entry thumbnail using a raw jpeg file + * + * @param string $entryId Media entry id + * @param file $fileData Jpeg file data + * @return KalturaMediaEntry + */ + function updateThumbnailJpeg($entryId, $fileData) + { + $kparams = array(); + $this->client->addParam($kparams, "entryId", $entryId); + $kfiles = array(); + $this->client->addParam($kfiles, "fileData", $fileData); + $this->client->queueServiceActionCall("media", "updateThumbnailJpeg", $kparams, $kfiles); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaMediaEntry"); + return $resultObject; + } + + /** + * Update entry thumbnail using url + * + * @param string $entryId Media entry id + * @param string $url File url + * @return KalturaBaseEntry + */ + function updateThumbnailFromUrl($entryId, $url) + { + $kparams = array(); + $this->client->addParam($kparams, "entryId", $entryId); + $this->client->addParam($kparams, "url", $url); + $this->client->queueServiceActionCall("media", "updateThumbnailFromUrl", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaBaseEntry"); + return $resultObject; + } + + /** + * Request a new conversion job, this can be used to convert the media entry to a different format + * + * @param string $entryId Media entry id + * @param string $fileFormat Format to convert + * @return int + */ + function requestConversion($entryId, $fileFormat) + { + $kparams = array(); + $this->client->addParam($kparams, "entryId", $entryId); + $this->client->addParam($kparams, "fileFormat", $fileFormat); + $this->client->queueServiceActionCall("media", "requestConversion", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "integer"); + return $resultObject; + } + + /** + * Flag inappropriate media entry for moderation + * + * @param KalturaModerationFlag $moderationFlag + * @return + */ + function flag(KalturaModerationFlag $moderationFlag) + { + $kparams = array(); + $this->client->addParam($kparams, "moderationFlag", $moderationFlag->toParams()); + $this->client->queueServiceActionCall("media", "flag", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "null"); + return $resultObject; + } + + /** + * Reject the media entry and mark the pending flags (if any) as moderated (this will make the entry non playable) + * + * @param string $entryId + * @return + */ + function reject($entryId) + { + $kparams = array(); + $this->client->addParam($kparams, "entryId", $entryId); + $this->client->queueServiceActionCall("media", "reject", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "null"); + return $resultObject; + } + + /** + * Approve the media entry and mark the pending flags (if any) as moderated (this will make the entry playable) + * + * @param string $entryId + * @return + */ + function approve($entryId) + { + $kparams = array(); + $this->client->addParam($kparams, "entryId", $entryId); + $this->client->queueServiceActionCall("media", "approve", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "null"); + return $resultObject; + } + + /** + * List all pending flags for the media entry + * + * @param string $entryId + * @param KalturaFilterPager $pager + * @return KalturaModerationFlagListResponse + */ + function listFlags($entryId, KalturaFilterPager $pager = null) + { + $kparams = array(); + $this->client->addParam($kparams, "entryId", $entryId); + if ($pager !== null) + $this->client->addParam($kparams, "pager", $pager->toParams()); + $this->client->queueServiceActionCall("media", "listFlags", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaModerationFlagListResponse"); + return $resultObject; + } + + /** + * Anonymously rank a media entry, no validation is done on duplicate rankings + * + * @param string $entryId + * @param int $rank + * @return + */ + function anonymousRank($entryId, $rank) + { + $kparams = array(); + $this->client->addParam($kparams, "entryId", $entryId); + $this->client->addParam($kparams, "rank", $rank); + $this->client->queueServiceActionCall("media", "anonymousRank", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "null"); + return $resultObject; + } + + /** + * Add new bulk upload batch job + Conversion profile id can be specified in the API or in the CSV file, the one in the CSV file will be stronger. + If no conversion profile was specified, partner's default will be used + * + * @param file $fileData + * @param KalturaBulkUploadJobData $bulkUploadData + * @param KalturaBulkUploadEntryData $bulkUploadEntryData + * @return KalturaBulkUpload + */ + function bulkUploadAdd($fileData, KalturaBulkUploadJobData $bulkUploadData = null, KalturaBulkUploadEntryData $bulkUploadEntryData = null) + { + $kparams = array(); + $kfiles = array(); + $this->client->addParam($kfiles, "fileData", $fileData); + if ($bulkUploadData !== null) + $this->client->addParam($kparams, "bulkUploadData", $bulkUploadData->toParams()); + if ($bulkUploadEntryData !== null) + $this->client->addParam($kparams, "bulkUploadEntryData", $bulkUploadEntryData->toParams()); + $this->client->queueServiceActionCall("media", "bulkUploadAdd", $kparams, $kfiles); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaBulkUpload"); + return $resultObject; + } +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaMixingService extends KalturaServiceBase +{ + function __construct(KalturaClient $client = null) + { + parent::__construct($client); + } + + /** + * Adds a new mix. + If the dataContent is null, a default timeline will be created. + * + * @param KalturaMixEntry $mixEntry Mix entry metadata + * @return KalturaMixEntry + */ + function add(KalturaMixEntry $mixEntry) + { + $kparams = array(); + $this->client->addParam($kparams, "mixEntry", $mixEntry->toParams()); + $this->client->queueServiceActionCall("mixing", "add", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaMixEntry"); + return $resultObject; + } + + /** + * Get mix entry by id. + * + * @param string $entryId Mix entry id + * @param int $version Desired version of the data + * @return KalturaMixEntry + */ + function get($entryId, $version = -1) + { + $kparams = array(); + $this->client->addParam($kparams, "entryId", $entryId); + $this->client->addParam($kparams, "version", $version); + $this->client->queueServiceActionCall("mixing", "get", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaMixEntry"); + return $resultObject; + } + + /** + * Update mix entry. Only the properties that were set will be updated. + * + * @param string $entryId Mix entry id to update + * @param KalturaMixEntry $mixEntry Mix entry metadata to update + * @return KalturaMixEntry + */ + function update($entryId, KalturaMixEntry $mixEntry) + { + $kparams = array(); + $this->client->addParam($kparams, "entryId", $entryId); + $this->client->addParam($kparams, "mixEntry", $mixEntry->toParams()); + $this->client->queueServiceActionCall("mixing", "update", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaMixEntry"); + return $resultObject; + } + + /** + * Delete a mix entry. + * + * @param string $entryId Mix entry id to delete + * @return + */ + function delete($entryId) + { + $kparams = array(); + $this->client->addParam($kparams, "entryId", $entryId); + $this->client->queueServiceActionCall("mixing", "delete", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "null"); + return $resultObject; + } + + /** + * List entries by filter with paging support. + Return parameter is an array of mix entries. + * + * @param KalturaMixEntryFilter $filter Mix entry filter + * @param KalturaFilterPager $pager Pager + * @return KalturaMixListResponse + */ + function listAction(KalturaMixEntryFilter $filter = null, KalturaFilterPager $pager = null) + { + $kparams = array(); + if ($filter !== null) + $this->client->addParam($kparams, "filter", $filter->toParams()); + if ($pager !== null) + $this->client->addParam($kparams, "pager", $pager->toParams()); + $this->client->queueServiceActionCall("mixing", "list", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaMixListResponse"); + return $resultObject; + } + + /** + * Count mix entries by filter. + * + * @param KalturaMediaEntryFilter $filter Media entry filter + * @return int + */ + function count(KalturaMediaEntryFilter $filter = null) + { + $kparams = array(); + if ($filter !== null) + $this->client->addParam($kparams, "filter", $filter->toParams()); + $this->client->queueServiceActionCall("mixing", "count", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "integer"); + return $resultObject; + } + + /** + * Clones an existing mix. + * + * @param string $entryId Mix entry id to clone + * @return KalturaMixEntry + */ + function cloneAction($entryId) + { + $kparams = array(); + $this->client->addParam($kparams, "entryId", $entryId); + $this->client->queueServiceActionCall("mixing", "clone", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaMixEntry"); + return $resultObject; + } + + /** + * Appends a media entry to a the end of the mix timeline, this will save the mix timeline as a new version. + * + * @param string $mixEntryId Mix entry to append to its timeline + * @param string $mediaEntryId Media entry to append to the timeline + * @return KalturaMixEntry + */ + function appendMediaEntry($mixEntryId, $mediaEntryId) + { + $kparams = array(); + $this->client->addParam($kparams, "mixEntryId", $mixEntryId); + $this->client->addParam($kparams, "mediaEntryId", $mediaEntryId); + $this->client->queueServiceActionCall("mixing", "appendMediaEntry", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaMixEntry"); + return $resultObject; + } + + /** + * Get the mixes in which the media entry is included + * + * @param string $mediaEntryId + * @return array + */ + function getMixesByMediaId($mediaEntryId) + { + $kparams = array(); + $this->client->addParam($kparams, "mediaEntryId", $mediaEntryId); + $this->client->queueServiceActionCall("mixing", "getMixesByMediaId", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "array"); + return $resultObject; + } + + /** + * Get all ready media entries that exist in the given mix id + * + * @param string $mixId + * @param int $version Desired version to get the data from + * @return array + */ + function getReadyMediaEntries($mixId, $version = -1) + { + $kparams = array(); + $this->client->addParam($kparams, "mixId", $mixId); + $this->client->addParam($kparams, "version", $version); + $this->client->queueServiceActionCall("mixing", "getReadyMediaEntries", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "array"); + return $resultObject; + } + + /** + * Anonymously rank a mix entry, no validation is done on duplicate rankings + * + * @param string $entryId + * @param int $rank + * @return + */ + function anonymousRank($entryId, $rank) + { + $kparams = array(); + $this->client->addParam($kparams, "entryId", $entryId); + $this->client->addParam($kparams, "rank", $rank); + $this->client->queueServiceActionCall("mixing", "anonymousRank", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "null"); + return $resultObject; + } +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaNotificationService extends KalturaServiceBase +{ + function __construct(KalturaClient $client = null) + { + parent::__construct($client); + } + + /** + * Return the notifications for a specific entry id and type + * + * @param string $entryId + * @param int $type + * @return KalturaClientNotification + */ + function getClientNotification($entryId, $type) + { + $kparams = array(); + $this->client->addParam($kparams, "entryId", $entryId); + $this->client->addParam($kparams, "type", $type); + $this->client->queueServiceActionCall("notification", "getClientNotification", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaClientNotification"); + return $resultObject; + } +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaPartnerService extends KalturaServiceBase +{ + function __construct(KalturaClient $client = null) + { + parent::__construct($client); + } + + /** + * Create a new Partner object + * + * @param KalturaPartner $partner + * @param string $cmsPassword + * @param int $templatePartnerId + * @param bool $silent + * @return KalturaPartner + */ + function register(KalturaPartner $partner, $cmsPassword = "", $templatePartnerId = null, $silent = false) + { + $kparams = array(); + $this->client->addParam($kparams, "partner", $partner->toParams()); + $this->client->addParam($kparams, "cmsPassword", $cmsPassword); + $this->client->addParam($kparams, "templatePartnerId", $templatePartnerId); + $this->client->addParam($kparams, "silent", $silent); + $this->client->queueServiceActionCall("partner", "register", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaPartner"); + return $resultObject; + } + + /** + * Update details and settings of an existing partner + * + * @param KalturaPartner $partner + * @param bool $allowEmpty + * @return KalturaPartner + */ + function update(KalturaPartner $partner, $allowEmpty = false) + { + $kparams = array(); + $this->client->addParam($kparams, "partner", $partner->toParams()); + $this->client->addParam($kparams, "allowEmpty", $allowEmpty); + $this->client->queueServiceActionCall("partner", "update", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaPartner"); + return $resultObject; + } + + /** + * Retrieve partner object by Id + * + * @param int $id + * @return KalturaPartner + */ + function get($id = null) + { + $kparams = array(); + $this->client->addParam($kparams, "id", $id); + $this->client->queueServiceActionCall("partner", "get", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaPartner"); + return $resultObject; + } + + /** + * Retrieve partner secret and admin secret + * + * @param int $partnerId + * @param string $adminEmail + * @param string $cmsPassword + * @return KalturaPartner + */ + function getSecrets($partnerId, $adminEmail, $cmsPassword) + { + $kparams = array(); + $this->client->addParam($kparams, "partnerId", $partnerId); + $this->client->addParam($kparams, "adminEmail", $adminEmail); + $this->client->addParam($kparams, "cmsPassword", $cmsPassword); + $this->client->queueServiceActionCall("partner", "getSecrets", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaPartner"); + return $resultObject; + } + + /** + * Retrieve all info attributed to the partner + This action expects no parameters. It returns information for the current KS partnerId. + * + * @return KalturaPartner + */ + function getInfo() + { + $kparams = array(); + $this->client->queueServiceActionCall("partner", "getInfo", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaPartner"); + return $resultObject; + } + + /** + * Get usage statistics for a partner + Calculation is done according to partner's package + Additional data returned is a graph points of streaming usage in a timeframe + The resolution can be "days" or "months" + * + * @param int $year + * @param int $month + * @param string $resolution + * @return KalturaPartnerUsage + */ + function getUsage($year = "", $month = 1, $resolution = null) + { + $kparams = array(); + $this->client->addParam($kparams, "year", $year); + $this->client->addParam($kparams, "month", $month); + $this->client->addParam($kparams, "resolution", $resolution); + $this->client->queueServiceActionCall("partner", "getUsage", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaPartnerUsage"); + return $resultObject; + } + + /** + * Get usage statistics for a partner + Calculation is done according to partner's package + * + * @return KalturaPartnerStatistics + */ + function getStatistics() + { + $kparams = array(); + $this->client->queueServiceActionCall("partner", "getStatistics", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaPartnerStatistics"); + return $resultObject; + } + + /** + * Retrieve a list of partner objects which the current user is allowed to access. + * + * @param KalturaPartnerFilter $partnerFilter + * @param KalturaFilterPager $pager + * @return KalturaPartnerListResponse + */ + function listPartnersForUser(KalturaPartnerFilter $partnerFilter = null, KalturaFilterPager $pager = null) + { + $kparams = array(); + if ($partnerFilter !== null) + $this->client->addParam($kparams, "partnerFilter", $partnerFilter->toParams()); + if ($pager !== null) + $this->client->addParam($kparams, "pager", $pager->toParams()); + $this->client->queueServiceActionCall("partner", "listPartnersForUser", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaPartnerListResponse"); + return $resultObject; + } + + /** + * List partners by filter with paging support + Current implementation will only list the sub partners of the partner initiating the api call (using the current KS). + This action is only partially implemented to support listing sub partners of a VAR partner. + * + * @param KalturaPartnerFilter $filter + * @param KalturaFilterPager $pager + * @return KalturaPartnerListResponse + */ + function listAction(KalturaPartnerFilter $filter = null, KalturaFilterPager $pager = null) + { + $kparams = array(); + if ($filter !== null) + $this->client->addParam($kparams, "filter", $filter->toParams()); + if ($pager !== null) + $this->client->addParam($kparams, "pager", $pager->toParams()); + $this->client->queueServiceActionCall("partner", "list", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaPartnerListResponse"); + return $resultObject; + } + + /** + * List partner's current processes' statuses + * + * @return KalturaFeatureStatusListResponse + */ + function listFeatureStatus() + { + $kparams = array(); + $this->client->queueServiceActionCall("partner", "listFeatureStatus", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaFeatureStatusListResponse"); + return $resultObject; + } + + /** + * Count partner's existing sub-publishers (count includes the partner itself). + * + * @param KalturaPartnerFilter $filter + * @return int + */ + function count(KalturaPartnerFilter $filter = null) + { + $kparams = array(); + if ($filter !== null) + $this->client->addParam($kparams, "filter", $filter->toParams()); + $this->client->queueServiceActionCall("partner", "count", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "integer"); + return $resultObject; + } +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaPermissionItemService extends KalturaServiceBase +{ + function __construct(KalturaClient $client = null) + { + parent::__construct($client); + } + + /** + * Adds a new permission item object to the account. + This action is available only to Kaltura system administrators. + * + * @param KalturaPermissionItem $permissionItem The new permission item + * @return KalturaPermissionItem + */ + function add(KalturaPermissionItem $permissionItem) + { + $kparams = array(); + $this->client->addParam($kparams, "permissionItem", $permissionItem->toParams()); + $this->client->queueServiceActionCall("permissionitem", "add", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaPermissionItem"); + return $resultObject; + } + + /** + * Retrieves a permission item object using its ID. + * + * @param int $permissionItemId The permission item's unique identifier + * @return KalturaPermissionItem + */ + function get($permissionItemId) + { + $kparams = array(); + $this->client->addParam($kparams, "permissionItemId", $permissionItemId); + $this->client->queueServiceActionCall("permissionitem", "get", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaPermissionItem"); + return $resultObject; + } + + /** + * Updates an existing permission item object. + This action is available only to Kaltura system administrators. + * + * @param int $permissionItemId The permission item's unique identifier + * @param KalturaPermissionItem $permissionItem Id The permission item's unique identifier + * @return KalturaPermissionItem + */ + function update($permissionItemId, KalturaPermissionItem $permissionItem) + { + $kparams = array(); + $this->client->addParam($kparams, "permissionItemId", $permissionItemId); + $this->client->addParam($kparams, "permissionItem", $permissionItem->toParams()); + $this->client->queueServiceActionCall("permissionitem", "update", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaPermissionItem"); + return $resultObject; + } + + /** + * Deletes an existing permission item object. + This action is available only to Kaltura system administrators. + * + * @param int $permissionItemId The permission item's unique identifier + * @return KalturaPermissionItem + */ + function delete($permissionItemId) + { + $kparams = array(); + $this->client->addParam($kparams, "permissionItemId", $permissionItemId); + $this->client->queueServiceActionCall("permissionitem", "delete", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaPermissionItem"); + return $resultObject; + } + + /** + * Lists permission item objects that are associated with an account. + * + * @param KalturaPermissionItemFilter $filter A filter used to exclude specific types of permission items + * @param KalturaFilterPager $pager A limit for the number of records to display on a page + * @return KalturaPermissionItemListResponse + */ + function listAction(KalturaPermissionItemFilter $filter = null, KalturaFilterPager $pager = null) + { + $kparams = array(); + if ($filter !== null) + $this->client->addParam($kparams, "filter", $filter->toParams()); + if ($pager !== null) + $this->client->addParam($kparams, "pager", $pager->toParams()); + $this->client->queueServiceActionCall("permissionitem", "list", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaPermissionItemListResponse"); + return $resultObject; + } +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaPermissionService extends KalturaServiceBase +{ + function __construct(KalturaClient $client = null) + { + parent::__construct($client); + } + + /** + * Adds a new permission object to the account. + * + * @param KalturaPermission $permission The new permission + * @return KalturaPermission + */ + function add(KalturaPermission $permission) + { + $kparams = array(); + $this->client->addParam($kparams, "permission", $permission->toParams()); + $this->client->queueServiceActionCall("permission", "add", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaPermission"); + return $resultObject; + } + + /** + * Retrieves a permission object using its ID. + * + * @param string $permissionName The name assigned to the permission + * @return KalturaPermission + */ + function get($permissionName) + { + $kparams = array(); + $this->client->addParam($kparams, "permissionName", $permissionName); + $this->client->queueServiceActionCall("permission", "get", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaPermission"); + return $resultObject; + } + + /** + * Updates an existing permission object. + * + * @param string $permissionName The name assigned to the permission + * @param KalturaPermission $permission Name The name assigned to the permission + * @return KalturaPermission + */ + function update($permissionName, KalturaPermission $permission) + { + $kparams = array(); + $this->client->addParam($kparams, "permissionName", $permissionName); + $this->client->addParam($kparams, "permission", $permission->toParams()); + $this->client->queueServiceActionCall("permission", "update", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaPermission"); + return $resultObject; + } + + /** + * Deletes an existing permission object. + * + * @param string $permissionName The name assigned to the permission + * @return KalturaPermission + */ + function delete($permissionName) + { + $kparams = array(); + $this->client->addParam($kparams, "permissionName", $permissionName); + $this->client->queueServiceActionCall("permission", "delete", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaPermission"); + return $resultObject; + } + + /** + * Lists permission objects that are associated with an account. + Blocked permissions are listed unless you use a filter to exclude them. + Blocked permissions are listed unless you use a filter to exclude them. + * + * @param KalturaPermissionFilter $filter A filter used to exclude specific types of permissions + * @param KalturaFilterPager $pager A limit for the number of records to display on a page + * @return KalturaPermissionListResponse + */ + function listAction(KalturaPermissionFilter $filter = null, KalturaFilterPager $pager = null) + { + $kparams = array(); + if ($filter !== null) + $this->client->addParam($kparams, "filter", $filter->toParams()); + if ($pager !== null) + $this->client->addParam($kparams, "pager", $pager->toParams()); + $this->client->queueServiceActionCall("permission", "list", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaPermissionListResponse"); + return $resultObject; + } + + /** + * Retrieves a list of permissions that apply to the current KS. + * + * @return string + */ + function getCurrentPermissions() + { + $kparams = array(); + $this->client->queueServiceActionCall("permission", "getCurrentPermissions", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "string"); + return $resultObject; + } +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaPlaylistService extends KalturaServiceBase +{ + function __construct(KalturaClient $client = null) + { + parent::__construct($client); + } + + /** + * Add new playlist + Note that all entries used in a playlist will become public and may appear in KalturaNetwork + * + * @param KalturaPlaylist $playlist + * @param bool $updateStats Indicates that the playlist statistics attributes should be updated synchronously now + * @return KalturaPlaylist + */ + function add(KalturaPlaylist $playlist, $updateStats = false) + { + $kparams = array(); + $this->client->addParam($kparams, "playlist", $playlist->toParams()); + $this->client->addParam($kparams, "updateStats", $updateStats); + $this->client->queueServiceActionCall("playlist", "add", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaPlaylist"); + return $resultObject; + } + + /** + * Retrieve a playlist + * + * @param string $id + * @param int $version Desired version of the data + * @return KalturaPlaylist + */ + function get($id, $version = -1) + { + $kparams = array(); + $this->client->addParam($kparams, "id", $id); + $this->client->addParam($kparams, "version", $version); + $this->client->queueServiceActionCall("playlist", "get", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaPlaylist"); + return $resultObject; + } + + /** + * Update existing playlist + Note - you cannot change playlist type. updated playlist must be of the same type. + * + * @param string $id + * @param KalturaPlaylist $playlist + * @param bool $updateStats + * @return KalturaPlaylist + */ + function update($id, KalturaPlaylist $playlist, $updateStats = false) + { + $kparams = array(); + $this->client->addParam($kparams, "id", $id); + $this->client->addParam($kparams, "playlist", $playlist->toParams()); + $this->client->addParam($kparams, "updateStats", $updateStats); + $this->client->queueServiceActionCall("playlist", "update", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaPlaylist"); + return $resultObject; + } + + /** + * Delete existing playlist + * + * @param string $id + * @return + */ + function delete($id) + { + $kparams = array(); + $this->client->addParam($kparams, "id", $id); + $this->client->queueServiceActionCall("playlist", "delete", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "null"); + return $resultObject; + } + + /** + * Clone an existing playlist + * + * @param string $id Id of the playlist to clone + * @param KalturaPlaylist $newPlaylist Parameters defined here will override the ones in the cloned playlist + * @return KalturaPlaylist + */ + function cloneAction($id, KalturaPlaylist $newPlaylist = null) + { + $kparams = array(); + $this->client->addParam($kparams, "id", $id); + if ($newPlaylist !== null) + $this->client->addParam($kparams, "newPlaylist", $newPlaylist->toParams()); + $this->client->queueServiceActionCall("playlist", "clone", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaPlaylist"); + return $resultObject; + } + + /** + * List available playlists + * + * @param KalturaPlaylistFilter $filter + * @param KalturaFilterPager $pager + * @return KalturaPlaylistListResponse + */ + function listAction(KalturaPlaylistFilter $filter = null, KalturaFilterPager $pager = null) + { + $kparams = array(); + if ($filter !== null) + $this->client->addParam($kparams, "filter", $filter->toParams()); + if ($pager !== null) + $this->client->addParam($kparams, "pager", $pager->toParams()); + $this->client->queueServiceActionCall("playlist", "list", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaPlaylistListResponse"); + return $resultObject; + } + + /** + * Retrieve playlist for playing purpose + * + * @param string $id + * @param string $detailed + * @param KalturaContext $playlistContext + * @param KalturaMediaEntryFilterForPlaylist $filter + * @return array + */ + function execute($id, $detailed = "", KalturaContext $playlistContext = null, KalturaMediaEntryFilterForPlaylist $filter = null) + { + $kparams = array(); + $this->client->addParam($kparams, "id", $id); + $this->client->addParam($kparams, "detailed", $detailed); + if ($playlistContext !== null) + $this->client->addParam($kparams, "playlistContext", $playlistContext->toParams()); + if ($filter !== null) + $this->client->addParam($kparams, "filter", $filter->toParams()); + $this->client->queueServiceActionCall("playlist", "execute", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "array"); + return $resultObject; + } + + /** + * Retrieve playlist for playing purpose, based on content + * + * @param int $playlistType + * @param string $playlistContent + * @param string $detailed + * @return array + */ + function executeFromContent($playlistType, $playlistContent, $detailed = "") + { + $kparams = array(); + $this->client->addParam($kparams, "playlistType", $playlistType); + $this->client->addParam($kparams, "playlistContent", $playlistContent); + $this->client->addParam($kparams, "detailed", $detailed); + $this->client->queueServiceActionCall("playlist", "executeFromContent", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "array"); + return $resultObject; + } + + /** + * Revrieve playlist for playing purpose, based on media entry filters + * + * @param array $filters + * @param int $totalResults + * @param string $detailed + * @return array + */ + function executeFromFilters(array $filters, $totalResults, $detailed = "") + { + $kparams = array(); + foreach($filters as $index => $obj) + { + $this->client->addParam($kparams, "filters:$index", $obj->toParams()); + } + $this->client->addParam($kparams, "totalResults", $totalResults); + $this->client->addParam($kparams, "detailed", $detailed); + $this->client->queueServiceActionCall("playlist", "executeFromFilters", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "array"); + return $resultObject; + } + + /** + * Retrieve playlist statistics + * + * @param int $playlistType + * @param string $playlistContent + * @return KalturaPlaylist + */ + function getStatsFromContent($playlistType, $playlistContent) + { + $kparams = array(); + $this->client->addParam($kparams, "playlistType", $playlistType); + $this->client->addParam($kparams, "playlistContent", $playlistContent); + $this->client->queueServiceActionCall("playlist", "getStatsFromContent", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaPlaylist"); + return $resultObject; + } +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaReportService extends KalturaServiceBase +{ + function __construct(KalturaClient $client = null) + { + parent::__construct($client); + } + + /** + * Report getGraphs action allows to get a graph data for a specific report. + * + * @param int $reportType + * @param KalturaReportInputFilter $reportInputFilter + * @param string $dimension + * @param string $objectIds - one ID or more (separated by ',') of specific objects to query + * @return array + */ + function getGraphs($reportType, KalturaReportInputFilter $reportInputFilter, $dimension = null, $objectIds = null) + { + $kparams = array(); + $this->client->addParam($kparams, "reportType", $reportType); + $this->client->addParam($kparams, "reportInputFilter", $reportInputFilter->toParams()); + $this->client->addParam($kparams, "dimension", $dimension); + $this->client->addParam($kparams, "objectIds", $objectIds); + $this->client->queueServiceActionCall("report", "getGraphs", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "array"); + return $resultObject; + } + + /** + * Report getTotal action allows to get a graph data for a specific report. + * + * @param int $reportType + * @param KalturaReportInputFilter $reportInputFilter + * @param string $objectIds - one ID or more (separated by ',') of specific objects to query + * @return KalturaReportTotal + */ + function getTotal($reportType, KalturaReportInputFilter $reportInputFilter, $objectIds = null) + { + $kparams = array(); + $this->client->addParam($kparams, "reportType", $reportType); + $this->client->addParam($kparams, "reportInputFilter", $reportInputFilter->toParams()); + $this->client->addParam($kparams, "objectIds", $objectIds); + $this->client->queueServiceActionCall("report", "getTotal", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaReportTotal"); + return $resultObject; + } + + /** + * Report getBaseTotal action allows to get a the total base for storage reports + * + * @param int $reportType + * @param KalturaReportInputFilter $reportInputFilter + * @param string $objectIds - one ID or more (separated by ',') of specific objects to query + * @return array + */ + function getBaseTotal($reportType, KalturaReportInputFilter $reportInputFilter, $objectIds = null) + { + $kparams = array(); + $this->client->addParam($kparams, "reportType", $reportType); + $this->client->addParam($kparams, "reportInputFilter", $reportInputFilter->toParams()); + $this->client->addParam($kparams, "objectIds", $objectIds); + $this->client->queueServiceActionCall("report", "getBaseTotal", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "array"); + return $resultObject; + } + + /** + * Report getTable action allows to get a graph data for a specific report. + * + * @param int $reportType + * @param KalturaReportInputFilter $reportInputFilter + * @param KalturaFilterPager $pager + * @param string $order + * @param string $objectIds - one ID or more (separated by ',') of specific objects to query + * @return KalturaReportTable + */ + function getTable($reportType, KalturaReportInputFilter $reportInputFilter, KalturaFilterPager $pager, $order = null, $objectIds = null) + { + $kparams = array(); + $this->client->addParam($kparams, "reportType", $reportType); + $this->client->addParam($kparams, "reportInputFilter", $reportInputFilter->toParams()); + $this->client->addParam($kparams, "pager", $pager->toParams()); + $this->client->addParam($kparams, "order", $order); + $this->client->addParam($kparams, "objectIds", $objectIds); + $this->client->queueServiceActionCall("report", "getTable", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaReportTable"); + return $resultObject; + } + + /** + * Will create a Csv file for the given report and return the URL to access it + * + * @param string $reportTitle The title of the report to display at top of CSV + * @param string $reportText The text of the filter of the report + * @param string $headers The headers of the columns - a map between the enumerations on the server side and the their display text + * @param int $reportType + * @param KalturaReportInputFilter $reportInputFilter + * @param string $dimension + * @param KalturaFilterPager $pager + * @param string $order + * @param string $objectIds - one ID or more (separated by ',') of specific objects to query + * @return string + */ + function getUrlForReportAsCsv($reportTitle, $reportText, $headers, $reportType, KalturaReportInputFilter $reportInputFilter, $dimension = null, KalturaFilterPager $pager = null, $order = null, $objectIds = null) + { + $kparams = array(); + $this->client->addParam($kparams, "reportTitle", $reportTitle); + $this->client->addParam($kparams, "reportText", $reportText); + $this->client->addParam($kparams, "headers", $headers); + $this->client->addParam($kparams, "reportType", $reportType); + $this->client->addParam($kparams, "reportInputFilter", $reportInputFilter->toParams()); + $this->client->addParam($kparams, "dimension", $dimension); + if ($pager !== null) + $this->client->addParam($kparams, "pager", $pager->toParams()); + $this->client->addParam($kparams, "order", $order); + $this->client->addParam($kparams, "objectIds", $objectIds); + $this->client->queueServiceActionCall("report", "getUrlForReportAsCsv", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "string"); + return $resultObject; + } + + /** + * + * + * @param int $id + * @param array $params + * @return KalturaReportResponse + */ + function execute($id, array $params = null) + { + $kparams = array(); + $this->client->addParam($kparams, "id", $id); + if ($params !== null) + foreach($params as $index => $obj) + { + $this->client->addParam($kparams, "params:$index", $obj->toParams()); + } + $this->client->queueServiceActionCall("report", "execute", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaReportResponse"); + return $resultObject; + } + + /** + * + * + * @param int $id + * @param array $params + * @return file + */ + function getCsv($id, array $params = null) + { + $kparams = array(); + $this->client->addParam($kparams, "id", $id); + if ($params !== null) + foreach($params as $index => $obj) + { + $this->client->addParam($kparams, "params:$index", $obj->toParams()); + } + $this->client->queueServiceActionCall("report", "getCsv", $kparams); + if(!$this->client->getDestinationPath() && !$this->client->getReturnServedResult()) + return $this->client->getServeUrl(); + return $this->client->doQueue(); + } + + /** + * Returns report CSV file executed by string params with the following convention: param1=value1;param2=value2 + * + * @param int $id + * @param string $params + * @return file + */ + function getCsvFromStringParams($id, $params = null) + { + $kparams = array(); + $this->client->addParam($kparams, "id", $id); + $this->client->addParam($kparams, "params", $params); + $this->client->queueServiceActionCall("report", "getCsvFromStringParams", $kparams); + if(!$this->client->getDestinationPath() && !$this->client->getReturnServedResult()) + return $this->client->getServeUrl(); + return $this->client->doQueue(); + } +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaSchemaService extends KalturaServiceBase +{ + function __construct(KalturaClient $client = null) + { + parent::__construct($client); + } + + /** + * Serves the requested XSD according to the type and name. + * + * @param string $type + * @return file + */ + function serve($type) + { + $kparams = array(); + $this->client->addParam($kparams, "type", $type); + $this->client->queueServiceActionCall("schema", "serve", $kparams); + if(!$this->client->getDestinationPath() && !$this->client->getReturnServedResult()) + return $this->client->getServeUrl(); + return $this->client->doQueue(); + } +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaSearchService extends KalturaServiceBase +{ + function __construct(KalturaClient $client = null) + { + parent::__construct($client); + } + + /** + * Search for media in one of the supported media providers + * + * @param KalturaSearch $search A KalturaSearch object contains the search keywords, media provider and media type + * @param KalturaFilterPager $pager + * @return KalturaSearchResultResponse + */ + function search(KalturaSearch $search, KalturaFilterPager $pager = null) + { + $kparams = array(); + $this->client->addParam($kparams, "search", $search->toParams()); + if ($pager !== null) + $this->client->addParam($kparams, "pager", $pager->toParams()); + $this->client->queueServiceActionCall("search", "search", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaSearchResultResponse"); + return $resultObject; + } + + /** + * Retrieve extra information about media found in search action + Some providers return only part of the fields needed to create entry from, use this action to get the rest of the fields. + * + * @param KalturaSearchResult $searchResult KalturaSearchResult object extends KalturaSearch and has all fields required for media:add + * @return KalturaSearchResult + */ + function getMediaInfo(KalturaSearchResult $searchResult) + { + $kparams = array(); + $this->client->addParam($kparams, "searchResult", $searchResult->toParams()); + $this->client->queueServiceActionCall("search", "getMediaInfo", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaSearchResult"); + return $resultObject; + } + + /** + * Search for media given a specific URL + Kaltura supports a searchURL action on some of the media providers. + This action will return a KalturaSearchResult object based on a given URL (assuming the media provider is supported) + * + * @param int $mediaType + * @param string $url + * @return KalturaSearchResult + */ + function searchUrl($mediaType, $url) + { + $kparams = array(); + $this->client->addParam($kparams, "mediaType", $mediaType); + $this->client->addParam($kparams, "url", $url); + $this->client->queueServiceActionCall("search", "searchUrl", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaSearchResult"); + return $resultObject; + } + + /** + * + * + * @param int $searchSource + * @param string $userName + * @param string $password + * @return KalturaSearchAuthData + */ + function externalLogin($searchSource, $userName, $password) + { + $kparams = array(); + $this->client->addParam($kparams, "searchSource", $searchSource); + $this->client->addParam($kparams, "userName", $userName); + $this->client->addParam($kparams, "password", $password); + $this->client->queueServiceActionCall("search", "externalLogin", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaSearchAuthData"); + return $resultObject; + } +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaSessionService extends KalturaServiceBase +{ + function __construct(KalturaClient $client = null) + { + parent::__construct($client); + } + + /** + * Start a session with Kaltura's server. + The result KS is the session key that you should pass to all services that requires a ticket. + * + * @param string $secret Remember to provide the correct secret according to the sessionType you want + * @param string $userId + * @param int $type Regular session or Admin session + * @param int $partnerId + * @param int $expiry KS expiry time in seconds + * @param string $privileges + * @return string + */ + function start($secret, $userId = "", $type = 0, $partnerId = null, $expiry = 86400, $privileges = null) + { + $kparams = array(); + $this->client->addParam($kparams, "secret", $secret); + $this->client->addParam($kparams, "userId", $userId); + $this->client->addParam($kparams, "type", $type); + $this->client->addParam($kparams, "partnerId", $partnerId); + $this->client->addParam($kparams, "expiry", $expiry); + $this->client->addParam($kparams, "privileges", $privileges); + $this->client->queueServiceActionCall("session", "start", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "string"); + return $resultObject; + } + + /** + * End a session with the Kaltura server, making the current KS invalid. + * + * @return + */ + function end() + { + $kparams = array(); + $this->client->queueServiceActionCall("session", "end", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "null"); + return $resultObject; + } + + /** + * Start an impersonated session with Kaltura's server. + The result KS is the session key that you should pass to all services that requires a ticket. + * + * @param string $secret - should be the secret (admin or user) of the original partnerId (not impersonatedPartnerId). + * @param int $impersonatedPartnerId + * @param string $userId - impersonated userId + * @param int $type + * @param int $partnerId + * @param int $expiry KS expiry time in seconds + * @param string $privileges + * @return string + */ + function impersonate($secret, $impersonatedPartnerId, $userId = "", $type = 0, $partnerId = null, $expiry = 86400, $privileges = null) + { + $kparams = array(); + $this->client->addParam($kparams, "secret", $secret); + $this->client->addParam($kparams, "impersonatedPartnerId", $impersonatedPartnerId); + $this->client->addParam($kparams, "userId", $userId); + $this->client->addParam($kparams, "type", $type); + $this->client->addParam($kparams, "partnerId", $partnerId); + $this->client->addParam($kparams, "expiry", $expiry); + $this->client->addParam($kparams, "privileges", $privileges); + $this->client->queueServiceActionCall("session", "impersonate", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "string"); + return $resultObject; + } + + /** + * Start an impersonated session with Kaltura's server. + The result KS info contains the session key that you should pass to all services that requires a ticket. + Type, expiry and privileges won't be changed if they're not set + * + * @param string $session The old KS of the impersonated partner + * @param int $type Type of the new KS + * @param int $expiry Expiry time in seconds of the new KS + * @param string $privileges Privileges of the new KS + * @return KalturaSessionInfo + */ + function impersonateByKs($session, $type = null, $expiry = null, $privileges = null) + { + $kparams = array(); + $this->client->addParam($kparams, "session", $session); + $this->client->addParam($kparams, "type", $type); + $this->client->addParam($kparams, "expiry", $expiry); + $this->client->addParam($kparams, "privileges", $privileges); + $this->client->queueServiceActionCall("session", "impersonateByKs", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaSessionInfo"); + return $resultObject; + } + + /** + * Parse session key and return its info + * + * @param string $session The KS to be parsed, keep it empty to use current session. + * @return KalturaSessionInfo + */ + function get($session = null) + { + $kparams = array(); + $this->client->addParam($kparams, "session", $session); + $this->client->queueServiceActionCall("session", "get", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaSessionInfo"); + return $resultObject; + } + + /** + * Start a session for Kaltura's flash widgets + * + * @param string $widgetId + * @param int $expiry + * @return KalturaStartWidgetSessionResponse + */ + function startWidgetSession($widgetId, $expiry = 86400) + { + $kparams = array(); + $this->client->addParam($kparams, "widgetId", $widgetId); + $this->client->addParam($kparams, "expiry", $expiry); + $this->client->queueServiceActionCall("session", "startWidgetSession", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaStartWidgetSessionResponse"); + return $resultObject; + } +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaStatsService extends KalturaServiceBase +{ + function __construct(KalturaClient $client = null) + { + parent::__construct($client); + } + + /** + * Will write to the event log a single line representing the event + client version - will help interprete the line structure. different client versions might have slightly different data/data formats in the line +event_id - number is the row number in yuval's excel +datetime - same format as MySql's datetime - can change and should reflect the time zone +session id - can be some big random number or guid +partner id +entry id +unique viewer +widget id +ui_conf id +uid - the puser id as set by the ppartner +current point - in milliseconds +duration - milliseconds +user ip +process duration - in milliseconds +control id +seek +new point +referrer + + + KalturaStatsEvent $event + * + * @param KalturaStatsEvent $event + * @return bool + */ + function collect(KalturaStatsEvent $event) + { + $kparams = array(); + $this->client->addParam($kparams, "event", $event->toParams()); + $this->client->queueServiceActionCall("stats", "collect", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $resultObject = (bool) $resultObject; + return $resultObject; + } + + /** + * Will collect the kmcEvent sent form the KMC client + // this will actually be an empty function because all events will be sent using GET and will anyway be logged in the apache log + * + * @param KalturaStatsKmcEvent $kmcEvent + * @return + */ + function kmcCollect(KalturaStatsKmcEvent $kmcEvent) + { + $kparams = array(); + $this->client->addParam($kparams, "kmcEvent", $kmcEvent->toParams()); + $this->client->queueServiceActionCall("stats", "kmcCollect", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "null"); + return $resultObject; + } + + /** + * + * + * @param KalturaCEError $kalturaCEError + * @return KalturaCEError + */ + function reportKceError(KalturaCEError $kalturaCEError) + { + $kparams = array(); + $this->client->addParam($kparams, "kalturaCEError", $kalturaCEError->toParams()); + $this->client->queueServiceActionCall("stats", "reportKceError", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaCEError"); + return $resultObject; + } + + /** + * Use this action to report errors to the kaltura server. + * + * @param string $errorCode + * @param string $errorMessage + * @return + */ + function reportError($errorCode, $errorMessage) + { + $kparams = array(); + $this->client->addParam($kparams, "errorCode", $errorCode); + $this->client->addParam($kparams, "errorMessage", $errorMessage); + $this->client->queueServiceActionCall("stats", "reportError", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "null"); + return $resultObject; + } +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaStorageProfileService extends KalturaServiceBase +{ + function __construct(KalturaClient $client = null) + { + parent::__construct($client); + } + + /** + * Adds a storage profile to the Kaltura DB. + * + * @param KalturaStorageProfile $storageProfile + * @return KalturaStorageProfile + */ + function add(KalturaStorageProfile $storageProfile) + { + $kparams = array(); + $this->client->addParam($kparams, "storageProfile", $storageProfile->toParams()); + $this->client->queueServiceActionCall("storageprofile", "add", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaStorageProfile"); + return $resultObject; + } + + /** + * + * + * @param int $storageId + * @param int $status + * @return + */ + function updateStatus($storageId, $status) + { + $kparams = array(); + $this->client->addParam($kparams, "storageId", $storageId); + $this->client->addParam($kparams, "status", $status); + $this->client->queueServiceActionCall("storageprofile", "updateStatus", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "null"); + return $resultObject; + } + + /** + * Get storage profile by id + * + * @param int $storageProfileId + * @return KalturaStorageProfile + */ + function get($storageProfileId) + { + $kparams = array(); + $this->client->addParam($kparams, "storageProfileId", $storageProfileId); + $this->client->queueServiceActionCall("storageprofile", "get", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaStorageProfile"); + return $resultObject; + } + + /** + * Update storage profile by id + * + * @param int $storageProfileId + * @param KalturaStorageProfile $storageProfile Id + * @return KalturaStorageProfile + */ + function update($storageProfileId, KalturaStorageProfile $storageProfile) + { + $kparams = array(); + $this->client->addParam($kparams, "storageProfileId", $storageProfileId); + $this->client->addParam($kparams, "storageProfile", $storageProfile->toParams()); + $this->client->queueServiceActionCall("storageprofile", "update", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaStorageProfile"); + return $resultObject; + } + + /** + * + * + * @param KalturaStorageProfileFilter $filter + * @param KalturaFilterPager $pager + * @return KalturaStorageProfileListResponse + */ + function listAction(KalturaStorageProfileFilter $filter = null, KalturaFilterPager $pager = null) + { + $kparams = array(); + if ($filter !== null) + $this->client->addParam($kparams, "filter", $filter->toParams()); + if ($pager !== null) + $this->client->addParam($kparams, "pager", $pager->toParams()); + $this->client->queueServiceActionCall("storageprofile", "list", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaStorageProfileListResponse"); + return $resultObject; + } +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaSyndicationFeedService extends KalturaServiceBase +{ + function __construct(KalturaClient $client = null) + { + parent::__construct($client); + } + + /** + * Add new Syndication Feed + * + * @param KalturaBaseSyndicationFeed $syndicationFeed + * @return KalturaBaseSyndicationFeed + */ + function add(KalturaBaseSyndicationFeed $syndicationFeed) + { + $kparams = array(); + $this->client->addParam($kparams, "syndicationFeed", $syndicationFeed->toParams()); + $this->client->queueServiceActionCall("syndicationfeed", "add", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaBaseSyndicationFeed"); + return $resultObject; + } + + /** + * Get Syndication Feed by ID + * + * @param string $id + * @return KalturaBaseSyndicationFeed + */ + function get($id) + { + $kparams = array(); + $this->client->addParam($kparams, "id", $id); + $this->client->queueServiceActionCall("syndicationfeed", "get", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaBaseSyndicationFeed"); + return $resultObject; + } + + /** + * Update Syndication Feed by ID + * + * @param string $id + * @param KalturaBaseSyndicationFeed $syndicationFeed + * @return KalturaBaseSyndicationFeed + */ + function update($id, KalturaBaseSyndicationFeed $syndicationFeed) + { + $kparams = array(); + $this->client->addParam($kparams, "id", $id); + $this->client->addParam($kparams, "syndicationFeed", $syndicationFeed->toParams()); + $this->client->queueServiceActionCall("syndicationfeed", "update", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaBaseSyndicationFeed"); + return $resultObject; + } + + /** + * Delete Syndication Feed by ID + * + * @param string $id + * @return + */ + function delete($id) + { + $kparams = array(); + $this->client->addParam($kparams, "id", $id); + $this->client->queueServiceActionCall("syndicationfeed", "delete", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "null"); + return $resultObject; + } + + /** + * List Syndication Feeds by filter with paging support + * + * @param KalturaBaseSyndicationFeedFilter $filter + * @param KalturaFilterPager $pager + * @return KalturaBaseSyndicationFeedListResponse + */ + function listAction(KalturaBaseSyndicationFeedFilter $filter = null, KalturaFilterPager $pager = null) + { + $kparams = array(); + if ($filter !== null) + $this->client->addParam($kparams, "filter", $filter->toParams()); + if ($pager !== null) + $this->client->addParam($kparams, "pager", $pager->toParams()); + $this->client->queueServiceActionCall("syndicationfeed", "list", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaBaseSyndicationFeedListResponse"); + return $resultObject; + } + + /** + * Get entry count for a syndication feed + * + * @param string $feedId + * @return KalturaSyndicationFeedEntryCount + */ + function getEntryCount($feedId) + { + $kparams = array(); + $this->client->addParam($kparams, "feedId", $feedId); + $this->client->queueServiceActionCall("syndicationfeed", "getEntryCount", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaSyndicationFeedEntryCount"); + return $resultObject; + } + + /** + * Request conversion for all entries that doesnt have the required flavor param + returns a comma-separated ids of conversion jobs + * + * @param string $feedId + * @return string + */ + function requestConversion($feedId) + { + $kparams = array(); + $this->client->addParam($kparams, "feedId", $feedId); + $this->client->queueServiceActionCall("syndicationfeed", "requestConversion", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "string"); + return $resultObject; + } +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaSystemService extends KalturaServiceBase +{ + function __construct(KalturaClient $client = null) + { + parent::__construct($client); + } + + /** + * + * + * @return bool + */ + function ping() + { + $kparams = array(); + $this->client->queueServiceActionCall("system", "ping", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $resultObject = (bool) $resultObject; + return $resultObject; + } + + /** + * + * + * @return bool + */ + function pingDatabase() + { + $kparams = array(); + $this->client->queueServiceActionCall("system", "pingDatabase", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $resultObject = (bool) $resultObject; + return $resultObject; + } + + /** + * + * + * @return int + */ + function getTime() + { + $kparams = array(); + $this->client->queueServiceActionCall("system", "getTime", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "integer"); + return $resultObject; + } +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaThumbAssetService extends KalturaServiceBase +{ + function __construct(KalturaClient $client = null) + { + parent::__construct($client); + } + + /** + * Add thumbnail asset + * + * @param string $entryId + * @param KalturaThumbAsset $thumbAsset + * @return KalturaThumbAsset + */ + function add($entryId, KalturaThumbAsset $thumbAsset) + { + $kparams = array(); + $this->client->addParam($kparams, "entryId", $entryId); + $this->client->addParam($kparams, "thumbAsset", $thumbAsset->toParams()); + $this->client->queueServiceActionCall("thumbasset", "add", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaThumbAsset"); + return $resultObject; + } + + /** + * Update content of thumbnail asset + * + * @param string $id + * @param KalturaContentResource $contentResource + * @return KalturaThumbAsset + */ + function setContent($id, KalturaContentResource $contentResource) + { + $kparams = array(); + $this->client->addParam($kparams, "id", $id); + $this->client->addParam($kparams, "contentResource", $contentResource->toParams()); + $this->client->queueServiceActionCall("thumbasset", "setContent", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaThumbAsset"); + return $resultObject; + } + + /** + * Update thumbnail asset + * + * @param string $id + * @param KalturaThumbAsset $thumbAsset + * @return KalturaThumbAsset + */ + function update($id, KalturaThumbAsset $thumbAsset) + { + $kparams = array(); + $this->client->addParam($kparams, "id", $id); + $this->client->addParam($kparams, "thumbAsset", $thumbAsset->toParams()); + $this->client->queueServiceActionCall("thumbasset", "update", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaThumbAsset"); + return $resultObject; + } + + /** + * Serves thumbnail by entry id and thumnail params id + * + * @param string $entryId + * @param int $thumbParamId If not set, default thumbnail will be used. + * @return file + */ + function serveByEntryId($entryId, $thumbParamId = null) + { + $kparams = array(); + $this->client->addParam($kparams, "entryId", $entryId); + $this->client->addParam($kparams, "thumbParamId", $thumbParamId); + $this->client->queueServiceActionCall("thumbasset", "serveByEntryId", $kparams); + if(!$this->client->getDestinationPath() && !$this->client->getReturnServedResult()) + return $this->client->getServeUrl(); + return $this->client->doQueue(); + } + + /** + * Serves thumbnail by its id + * + * @param string $thumbAssetId + * @param int $version + * @param KalturaThumbParams $thumbParams + * @param KalturaThumbnailServeOptions $options + * @return file + */ + function serve($thumbAssetId, $version = null, KalturaThumbParams $thumbParams = null, KalturaThumbnailServeOptions $options = null) + { + $kparams = array(); + $this->client->addParam($kparams, "thumbAssetId", $thumbAssetId); + $this->client->addParam($kparams, "version", $version); + if ($thumbParams !== null) + $this->client->addParam($kparams, "thumbParams", $thumbParams->toParams()); + if ($options !== null) + $this->client->addParam($kparams, "options", $options->toParams()); + $this->client->queueServiceActionCall("thumbasset", "serve", $kparams); + if(!$this->client->getDestinationPath() && !$this->client->getReturnServedResult()) + return $this->client->getServeUrl(); + return $this->client->doQueue(); + } + + /** + * Tags the thumbnail as DEFAULT_THUMB and removes that tag from all other thumbnail assets of the entry. + Create a new file sync link on the entry thumbnail that points to the thumbnail asset file sync. + * + * @param string $thumbAssetId + * @return + */ + function setAsDefault($thumbAssetId) + { + $kparams = array(); + $this->client->addParam($kparams, "thumbAssetId", $thumbAssetId); + $this->client->queueServiceActionCall("thumbasset", "setAsDefault", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "null"); + return $resultObject; + } + + /** + * + * + * @param string $entryId + * @param int $destThumbParamsId Indicate the id of the ThumbParams to be generate this thumbnail by + * @return KalturaThumbAsset + */ + function generateByEntryId($entryId, $destThumbParamsId) + { + $kparams = array(); + $this->client->addParam($kparams, "entryId", $entryId); + $this->client->addParam($kparams, "destThumbParamsId", $destThumbParamsId); + $this->client->queueServiceActionCall("thumbasset", "generateByEntryId", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaThumbAsset"); + return $resultObject; + } + + /** + * + * + * @param string $entryId + * @param KalturaThumbParams $thumbParams + * @param string $sourceAssetId Id of the source asset (flavor or thumbnail) to be used as source for the thumbnail generation + * @return KalturaThumbAsset + */ + function generate($entryId, KalturaThumbParams $thumbParams, $sourceAssetId = null) + { + $kparams = array(); + $this->client->addParam($kparams, "entryId", $entryId); + $this->client->addParam($kparams, "thumbParams", $thumbParams->toParams()); + $this->client->addParam($kparams, "sourceAssetId", $sourceAssetId); + $this->client->queueServiceActionCall("thumbasset", "generate", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaThumbAsset"); + return $resultObject; + } + + /** + * + * + * @param string $thumbAssetId + * @return KalturaThumbAsset + */ + function regenerate($thumbAssetId) + { + $kparams = array(); + $this->client->addParam($kparams, "thumbAssetId", $thumbAssetId); + $this->client->queueServiceActionCall("thumbasset", "regenerate", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaThumbAsset"); + return $resultObject; + } + + /** + * + * + * @param string $thumbAssetId + * @return KalturaThumbAsset + */ + function get($thumbAssetId) + { + $kparams = array(); + $this->client->addParam($kparams, "thumbAssetId", $thumbAssetId); + $this->client->queueServiceActionCall("thumbasset", "get", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaThumbAsset"); + return $resultObject; + } + + /** + * + * + * @param string $entryId + * @return array + */ + function getByEntryId($entryId) + { + $kparams = array(); + $this->client->addParam($kparams, "entryId", $entryId); + $this->client->queueServiceActionCall("thumbasset", "getByEntryId", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "array"); + return $resultObject; + } + + /** + * List Thumbnail Assets by filter and pager + * + * @param KalturaAssetFilter $filter + * @param KalturaFilterPager $pager + * @return KalturaThumbAssetListResponse + */ + function listAction(KalturaAssetFilter $filter = null, KalturaFilterPager $pager = null) + { + $kparams = array(); + if ($filter !== null) + $this->client->addParam($kparams, "filter", $filter->toParams()); + if ($pager !== null) + $this->client->addParam($kparams, "pager", $pager->toParams()); + $this->client->queueServiceActionCall("thumbasset", "list", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaThumbAssetListResponse"); + return $resultObject; + } + + /** + * + * + * @param string $entryId + * @param string $url + * @return KalturaThumbAsset + */ + function addFromUrl($entryId, $url) + { + $kparams = array(); + $this->client->addParam($kparams, "entryId", $entryId); + $this->client->addParam($kparams, "url", $url); + $this->client->queueServiceActionCall("thumbasset", "addFromUrl", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaThumbAsset"); + return $resultObject; + } + + /** + * + * + * @param string $entryId + * @param file $fileData + * @return KalturaThumbAsset + */ + function addFromImage($entryId, $fileData) + { + $kparams = array(); + $this->client->addParam($kparams, "entryId", $entryId); + $kfiles = array(); + $this->client->addParam($kfiles, "fileData", $fileData); + $this->client->queueServiceActionCall("thumbasset", "addFromImage", $kparams, $kfiles); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaThumbAsset"); + return $resultObject; + } + + /** + * + * + * @param string $thumbAssetId + * @return + */ + function delete($thumbAssetId) + { + $kparams = array(); + $this->client->addParam($kparams, "thumbAssetId", $thumbAssetId); + $this->client->queueServiceActionCall("thumbasset", "delete", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "null"); + return $resultObject; + } + + /** + * Get download URL for the asset + * + * @param string $id + * @param int $storageId + * @param KalturaThumbParams $thumbParams + * @return string + */ + function getUrl($id, $storageId = null, KalturaThumbParams $thumbParams = null) + { + $kparams = array(); + $this->client->addParam($kparams, "id", $id); + $this->client->addParam($kparams, "storageId", $storageId); + if ($thumbParams !== null) + $this->client->addParam($kparams, "thumbParams", $thumbParams->toParams()); + $this->client->queueServiceActionCall("thumbasset", "getUrl", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "string"); + return $resultObject; + } + + /** + * Get remote storage existing paths for the asset + * + * @param string $id + * @return KalturaRemotePathListResponse + */ + function getRemotePaths($id) + { + $kparams = array(); + $this->client->addParam($kparams, "id", $id); + $this->client->queueServiceActionCall("thumbasset", "getRemotePaths", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaRemotePathListResponse"); + return $resultObject; + } +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaThumbParamsOutputService extends KalturaServiceBase +{ + function __construct(KalturaClient $client = null) + { + parent::__construct($client); + } + + /** + * Get thumb params output object by ID + * + * @param int $id + * @return KalturaThumbParamsOutput + */ + function get($id) + { + $kparams = array(); + $this->client->addParam($kparams, "id", $id); + $this->client->queueServiceActionCall("thumbparamsoutput", "get", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaThumbParamsOutput"); + return $resultObject; + } + + /** + * List thumb params output objects by filter and pager + * + * @param KalturaThumbParamsOutputFilter $filter + * @param KalturaFilterPager $pager + * @return KalturaThumbParamsOutputListResponse + */ + function listAction(KalturaThumbParamsOutputFilter $filter = null, KalturaFilterPager $pager = null) + { + $kparams = array(); + if ($filter !== null) + $this->client->addParam($kparams, "filter", $filter->toParams()); + if ($pager !== null) + $this->client->addParam($kparams, "pager", $pager->toParams()); + $this->client->queueServiceActionCall("thumbparamsoutput", "list", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaThumbParamsOutputListResponse"); + return $resultObject; + } +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaThumbParamsService extends KalturaServiceBase +{ + function __construct(KalturaClient $client = null) + { + parent::__construct($client); + } + + /** + * Add new Thumb Params + * + * @param KalturaThumbParams $thumbParams + * @return KalturaThumbParams + */ + function add(KalturaThumbParams $thumbParams) + { + $kparams = array(); + $this->client->addParam($kparams, "thumbParams", $thumbParams->toParams()); + $this->client->queueServiceActionCall("thumbparams", "add", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaThumbParams"); + return $resultObject; + } + + /** + * Get Thumb Params by ID + * + * @param int $id + * @return KalturaThumbParams + */ + function get($id) + { + $kparams = array(); + $this->client->addParam($kparams, "id", $id); + $this->client->queueServiceActionCall("thumbparams", "get", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaThumbParams"); + return $resultObject; + } + + /** + * Update Thumb Params by ID + * + * @param int $id + * @param KalturaThumbParams $thumbParams + * @return KalturaThumbParams + */ + function update($id, KalturaThumbParams $thumbParams) + { + $kparams = array(); + $this->client->addParam($kparams, "id", $id); + $this->client->addParam($kparams, "thumbParams", $thumbParams->toParams()); + $this->client->queueServiceActionCall("thumbparams", "update", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaThumbParams"); + return $resultObject; + } + + /** + * Delete Thumb Params by ID + * + * @param int $id + * @return + */ + function delete($id) + { + $kparams = array(); + $this->client->addParam($kparams, "id", $id); + $this->client->queueServiceActionCall("thumbparams", "delete", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "null"); + return $resultObject; + } + + /** + * List Thumb Params by filter with paging support (By default - all system default params will be listed too) + * + * @param KalturaThumbParamsFilter $filter + * @param KalturaFilterPager $pager + * @return KalturaThumbParamsListResponse + */ + function listAction(KalturaThumbParamsFilter $filter = null, KalturaFilterPager $pager = null) + { + $kparams = array(); + if ($filter !== null) + $this->client->addParam($kparams, "filter", $filter->toParams()); + if ($pager !== null) + $this->client->addParam($kparams, "pager", $pager->toParams()); + $this->client->queueServiceActionCall("thumbparams", "list", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaThumbParamsListResponse"); + return $resultObject; + } + + /** + * Get Thumb Params by Conversion Profile ID + * + * @param int $conversionProfileId + * @return array + */ + function getByConversionProfileId($conversionProfileId) + { + $kparams = array(); + $this->client->addParam($kparams, "conversionProfileId", $conversionProfileId); + $this->client->queueServiceActionCall("thumbparams", "getByConversionProfileId", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "array"); + return $resultObject; + } +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaUiConfService extends KalturaServiceBase +{ + function __construct(KalturaClient $client = null) + { + parent::__construct($client); + } + + /** + * UIConf Add action allows you to add a UIConf to Kaltura DB + * + * @param KalturaUiConf $uiConf Mandatory input parameter of type KalturaUiConf + * @return KalturaUiConf + */ + function add(KalturaUiConf $uiConf) + { + $kparams = array(); + $this->client->addParam($kparams, "uiConf", $uiConf->toParams()); + $this->client->queueServiceActionCall("uiconf", "add", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaUiConf"); + return $resultObject; + } + + /** + * Update an existing UIConf + * + * @param int $id + * @param KalturaUiConf $uiConf + * @return KalturaUiConf + */ + function update($id, KalturaUiConf $uiConf) + { + $kparams = array(); + $this->client->addParam($kparams, "id", $id); + $this->client->addParam($kparams, "uiConf", $uiConf->toParams()); + $this->client->queueServiceActionCall("uiconf", "update", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaUiConf"); + return $resultObject; + } + + /** + * Retrieve a UIConf by id + * + * @param int $id + * @return KalturaUiConf + */ + function get($id) + { + $kparams = array(); + $this->client->addParam($kparams, "id", $id); + $this->client->queueServiceActionCall("uiconf", "get", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaUiConf"); + return $resultObject; + } + + /** + * Delete an existing UIConf + * + * @param int $id + * @return + */ + function delete($id) + { + $kparams = array(); + $this->client->addParam($kparams, "id", $id); + $this->client->queueServiceActionCall("uiconf", "delete", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "null"); + return $resultObject; + } + + /** + * Clone an existing UIConf + * + * @param int $id + * @return KalturaUiConf + */ + function cloneAction($id) + { + $kparams = array(); + $this->client->addParam($kparams, "id", $id); + $this->client->queueServiceActionCall("uiconf", "clone", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaUiConf"); + return $resultObject; + } + + /** + * Retrieve a list of available template UIConfs + * + * @param KalturaUiConfFilter $filter + * @param KalturaFilterPager $pager + * @return KalturaUiConfListResponse + */ + function listTemplates(KalturaUiConfFilter $filter = null, KalturaFilterPager $pager = null) + { + $kparams = array(); + if ($filter !== null) + $this->client->addParam($kparams, "filter", $filter->toParams()); + if ($pager !== null) + $this->client->addParam($kparams, "pager", $pager->toParams()); + $this->client->queueServiceActionCall("uiconf", "listTemplates", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaUiConfListResponse"); + return $resultObject; + } + + /** + * Retrieve a list of available UIConfs + * + * @param KalturaUiConfFilter $filter + * @param KalturaFilterPager $pager + * @return KalturaUiConfListResponse + */ + function listAction(KalturaUiConfFilter $filter = null, KalturaFilterPager $pager = null) + { + $kparams = array(); + if ($filter !== null) + $this->client->addParam($kparams, "filter", $filter->toParams()); + if ($pager !== null) + $this->client->addParam($kparams, "pager", $pager->toParams()); + $this->client->queueServiceActionCall("uiconf", "list", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaUiConfListResponse"); + return $resultObject; + } + + /** + * Retrieve a list of all available versions by object type + * + * @return array + */ + function getAvailableTypes() + { + $kparams = array(); + $this->client->queueServiceActionCall("uiconf", "getAvailableTypes", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "array"); + return $resultObject; + } +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaUploadService extends KalturaServiceBase +{ + function __construct(KalturaClient $client = null) + { + parent::__construct($client); + } + + /** + * + * + * @param file $fileData The file data + * @return string + */ + function upload($fileData) + { + $kparams = array(); + $kfiles = array(); + $this->client->addParam($kfiles, "fileData", $fileData); + $this->client->queueServiceActionCall("upload", "upload", $kparams, $kfiles); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "string"); + return $resultObject; + } + + /** + * + * + * @param string $fileName + * @return KalturaUploadResponse + */ + function getUploadedFileTokenByFileName($fileName) + { + $kparams = array(); + $this->client->addParam($kparams, "fileName", $fileName); + $this->client->queueServiceActionCall("upload", "getUploadedFileTokenByFileName", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaUploadResponse"); + return $resultObject; + } +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaUploadTokenService extends KalturaServiceBase +{ + function __construct(KalturaClient $client = null) + { + parent::__construct($client); + } + + /** + * Adds new upload token to upload a file + * + * @param KalturaUploadToken $uploadToken + * @return KalturaUploadToken + */ + function add(KalturaUploadToken $uploadToken = null) + { + $kparams = array(); + if ($uploadToken !== null) + $this->client->addParam($kparams, "uploadToken", $uploadToken->toParams()); + $this->client->queueServiceActionCall("uploadtoken", "add", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaUploadToken"); + return $resultObject; + } + + /** + * Get upload token by id + * + * @param string $uploadTokenId + * @return KalturaUploadToken + */ + function get($uploadTokenId) + { + $kparams = array(); + $this->client->addParam($kparams, "uploadTokenId", $uploadTokenId); + $this->client->queueServiceActionCall("uploadtoken", "get", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaUploadToken"); + return $resultObject; + } + + /** + * Upload a file using the upload token id, returns an error on failure (an exception will be thrown when using one of the Kaltura clients) + * + * @param string $uploadTokenId + * @param file $fileData + * @param bool $resume + * @param bool $finalChunk + * @param float $resumeAt + * @return KalturaUploadToken + */ + function upload($uploadTokenId, $fileData, $resume = false, $finalChunk = true, $resumeAt = -1) + { + $kparams = array(); + $this->client->addParam($kparams, "uploadTokenId", $uploadTokenId); + $kfiles = array(); + $this->client->addParam($kfiles, "fileData", $fileData); + $this->client->addParam($kparams, "resume", $resume); + $this->client->addParam($kparams, "finalChunk", $finalChunk); + $this->client->addParam($kparams, "resumeAt", $resumeAt); + $this->client->queueServiceActionCall("uploadtoken", "upload", $kparams, $kfiles); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaUploadToken"); + return $resultObject; + } + + /** + * Deletes the upload token by upload token id + * + * @param string $uploadTokenId + * @return + */ + function delete($uploadTokenId) + { + $kparams = array(); + $this->client->addParam($kparams, "uploadTokenId", $uploadTokenId); + $this->client->queueServiceActionCall("uploadtoken", "delete", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "null"); + return $resultObject; + } + + /** + * List upload token by filter with pager support. + When using a user session the service will be restricted to users objects only. + * + * @param KalturaUploadTokenFilter $filter + * @param KalturaFilterPager $pager + * @return KalturaUploadTokenListResponse + */ + function listAction(KalturaUploadTokenFilter $filter = null, KalturaFilterPager $pager = null) + { + $kparams = array(); + if ($filter !== null) + $this->client->addParam($kparams, "filter", $filter->toParams()); + if ($pager !== null) + $this->client->addParam($kparams, "pager", $pager->toParams()); + $this->client->queueServiceActionCall("uploadtoken", "list", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaUploadTokenListResponse"); + return $resultObject; + } +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaUserRoleService extends KalturaServiceBase +{ + function __construct(KalturaClient $client = null) + { + parent::__construct($client); + } + + /** + * Adds a new user role object to the account. + * + * @param KalturaUserRole $userRole A new role + * @return KalturaUserRole + */ + function add(KalturaUserRole $userRole) + { + $kparams = array(); + $this->client->addParam($kparams, "userRole", $userRole->toParams()); + $this->client->queueServiceActionCall("userrole", "add", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaUserRole"); + return $resultObject; + } + + /** + * Retrieves a user role object using its ID. + * + * @param int $userRoleId The user role's unique identifier + * @return KalturaUserRole + */ + function get($userRoleId) + { + $kparams = array(); + $this->client->addParam($kparams, "userRoleId", $userRoleId); + $this->client->queueServiceActionCall("userrole", "get", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaUserRole"); + return $resultObject; + } + + /** + * Updates an existing user role object. + * + * @param int $userRoleId The user role's unique identifier + * @param KalturaUserRole $userRole Id The user role's unique identifier + * @return KalturaUserRole + */ + function update($userRoleId, KalturaUserRole $userRole) + { + $kparams = array(); + $this->client->addParam($kparams, "userRoleId", $userRoleId); + $this->client->addParam($kparams, "userRole", $userRole->toParams()); + $this->client->queueServiceActionCall("userrole", "update", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaUserRole"); + return $resultObject; + } + + /** + * Deletes an existing user role object. + * + * @param int $userRoleId The user role's unique identifier + * @return KalturaUserRole + */ + function delete($userRoleId) + { + $kparams = array(); + $this->client->addParam($kparams, "userRoleId", $userRoleId); + $this->client->queueServiceActionCall("userrole", "delete", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaUserRole"); + return $resultObject; + } + + /** + * Lists user role objects that are associated with an account. + Blocked user roles are listed unless you use a filter to exclude them. + Deleted user roles are not listed unless you use a filter to include them. + * + * @param KalturaUserRoleFilter $filter A filter used to exclude specific types of user roles + * @param KalturaFilterPager $pager A limit for the number of records to display on a page + * @return KalturaUserRoleListResponse + */ + function listAction(KalturaUserRoleFilter $filter = null, KalturaFilterPager $pager = null) + { + $kparams = array(); + if ($filter !== null) + $this->client->addParam($kparams, "filter", $filter->toParams()); + if ($pager !== null) + $this->client->addParam($kparams, "pager", $pager->toParams()); + $this->client->queueServiceActionCall("userrole", "list", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaUserRoleListResponse"); + return $resultObject; + } + + /** + * Creates a new user role object that is a duplicate of an existing role. + * + * @param int $userRoleId The user role's unique identifier + * @return KalturaUserRole + */ + function cloneAction($userRoleId) + { + $kparams = array(); + $this->client->addParam($kparams, "userRoleId", $userRoleId); + $this->client->queueServiceActionCall("userrole", "clone", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaUserRole"); + return $resultObject; + } +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaUserService extends KalturaServiceBase +{ + function __construct(KalturaClient $client = null) + { + parent::__construct($client); + } + + /** + * Adds a new user to an existing account in the Kaltura database. + Input param $id is the unique identifier in the partner's system. + * + * @param KalturaUser $user The new user + * @return KalturaUser + */ + function add(KalturaUser $user) + { + $kparams = array(); + $this->client->addParam($kparams, "user", $user->toParams()); + $this->client->queueServiceActionCall("user", "add", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaUser"); + return $resultObject; + } + + /** + * Updates an existing user object. + You can also use this action to update the userId. + * + * @param string $userId The user's unique identifier in the partner's system + * @param KalturaUser $user Id The user's unique identifier in the partner's system + * @return KalturaUser + */ + function update($userId, KalturaUser $user) + { + $kparams = array(); + $this->client->addParam($kparams, "userId", $userId); + $this->client->addParam($kparams, "user", $user->toParams()); + $this->client->queueServiceActionCall("user", "update", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaUser"); + return $resultObject; + } + + /** + * Retrieves a user object for a specified user ID. + * + * @param string $userId The user's unique identifier in the partner's system + * @return KalturaUser + */ + function get($userId = null) + { + $kparams = array(); + $this->client->addParam($kparams, "userId", $userId); + $this->client->queueServiceActionCall("user", "get", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaUser"); + return $resultObject; + } + + /** + * Retrieves a user object for a user's login ID and partner ID. + A login ID is the email address used by a user to log into the system. + * + * @param string $loginId The user's email address that identifies the user for login + * @return KalturaUser + */ + function getByLoginId($loginId) + { + $kparams = array(); + $this->client->addParam($kparams, "loginId", $loginId); + $this->client->queueServiceActionCall("user", "getByLoginId", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaUser"); + return $resultObject; + } + + /** + * Deletes a user from a partner account. + * + * @param string $userId The user's unique identifier in the partner's system + * @return KalturaUser + */ + function delete($userId) + { + $kparams = array(); + $this->client->addParam($kparams, "userId", $userId); + $this->client->queueServiceActionCall("user", "delete", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaUser"); + return $resultObject; + } + + /** + * Lists user objects that are associated with an account. + Blocked users are listed unless you use a filter to exclude them. + Deleted users are not listed unless you use a filter to include them. + * + * @param KalturaUserFilter $filter A filter used to exclude specific types of users + * @param KalturaFilterPager $pager A limit for the number of records to display on a page + * @return KalturaUserListResponse + */ + function listAction(KalturaUserFilter $filter = null, KalturaFilterPager $pager = null) + { + $kparams = array(); + if ($filter !== null) + $this->client->addParam($kparams, "filter", $filter->toParams()); + if ($pager !== null) + $this->client->addParam($kparams, "pager", $pager->toParams()); + $this->client->queueServiceActionCall("user", "list", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaUserListResponse"); + return $resultObject; + } + + /** + * Notifies that a user is banned from an account. + * + * @param string $userId The user's unique identifier in the partner's system + * @return + */ + function notifyBan($userId) + { + $kparams = array(); + $this->client->addParam($kparams, "userId", $userId); + $this->client->queueServiceActionCall("user", "notifyBan", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "null"); + return $resultObject; + } + + /** + * Logs a user into a partner account with a partner ID, a partner user ID (puser), and a user password. + * + * @param int $partnerId The identifier of the partner account + * @param string $userId The user's unique identifier in the partner's system + * @param string $password The user's password + * @param int $expiry The requested time (in seconds) before the generated KS expires (By default, a KS expires after 24 hours). + * @param string $privileges Special privileges + * @return string + */ + function login($partnerId, $userId, $password, $expiry = 86400, $privileges = "*") + { + $kparams = array(); + $this->client->addParam($kparams, "partnerId", $partnerId); + $this->client->addParam($kparams, "userId", $userId); + $this->client->addParam($kparams, "password", $password); + $this->client->addParam($kparams, "expiry", $expiry); + $this->client->addParam($kparams, "privileges", $privileges); + $this->client->queueServiceActionCall("user", "login", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "string"); + return $resultObject; + } + + /** + * Logs a user into a partner account with a user login ID and a user password. + * + * @param string $loginId The user's email address that identifies the user for login + * @param string $password The user's password + * @param int $partnerId The identifier of the partner account + * @param int $expiry The requested time (in seconds) before the generated KS expires (By default, a KS expires after 24 hours). + * @param string $privileges Special privileges + * @return string + */ + function loginByLoginId($loginId, $password, $partnerId = null, $expiry = 86400, $privileges = "*") + { + $kparams = array(); + $this->client->addParam($kparams, "loginId", $loginId); + $this->client->addParam($kparams, "password", $password); + $this->client->addParam($kparams, "partnerId", $partnerId); + $this->client->addParam($kparams, "expiry", $expiry); + $this->client->addParam($kparams, "privileges", $privileges); + $this->client->queueServiceActionCall("user", "loginByLoginId", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "string"); + return $resultObject; + } + + /** + * Updates a user's login data: email, password, name. + * + * @param string $oldLoginId The user's current email address that identified the user for login + * @param string $password The user's current email address that identified the user for login + * @param string $newLoginId Optional, The user's email address that will identify the user for login + * @param string $newPassword Optional, The user's new password + * @param string $newFirstName Optional, The user's new first name + * @param string $newLastName Optional, The user's new last name + * @return + */ + function updateLoginData($oldLoginId, $password, $newLoginId = "", $newPassword = "", $newFirstName = null, $newLastName = null) + { + $kparams = array(); + $this->client->addParam($kparams, "oldLoginId", $oldLoginId); + $this->client->addParam($kparams, "password", $password); + $this->client->addParam($kparams, "newLoginId", $newLoginId); + $this->client->addParam($kparams, "newPassword", $newPassword); + $this->client->addParam($kparams, "newFirstName", $newFirstName); + $this->client->addParam($kparams, "newLastName", $newLastName); + $this->client->queueServiceActionCall("user", "updateLoginData", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "null"); + return $resultObject; + } + + /** + * Reset user's password and send the user an email to generate a new one. + * + * @param string $email The user's email address (login email) + * @return + */ + function resetPassword($email) + { + $kparams = array(); + $this->client->addParam($kparams, "email", $email); + $this->client->queueServiceActionCall("user", "resetPassword", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "null"); + return $resultObject; + } + + /** + * Set initial users password + * + * @param string $hashKey The hash key used to identify the user (retrieved by email) + * @param string $newPassword The new password to set for the user + * @return + */ + function setInitialPassword($hashKey, $newPassword) + { + $kparams = array(); + $this->client->addParam($kparams, "hashKey", $hashKey); + $this->client->addParam($kparams, "newPassword", $newPassword); + $this->client->queueServiceActionCall("user", "setInitialPassword", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "null"); + return $resultObject; + } + + /** + * Enables a user to log into a partner account using an email address and a password + * + * @param string $userId The user's unique identifier in the partner's system + * @param string $loginId The user's email address that identifies the user for login + * @param string $password The user's password + * @return KalturaUser + */ + function enableLogin($userId, $loginId, $password = null) + { + $kparams = array(); + $this->client->addParam($kparams, "userId", $userId); + $this->client->addParam($kparams, "loginId", $loginId); + $this->client->addParam($kparams, "password", $password); + $this->client->queueServiceActionCall("user", "enableLogin", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaUser"); + return $resultObject; + } + + /** + * Disables a user's ability to log into a partner account using an email address and a password. + You may use either a userId or a loginId parameter for this action. + * + * @param string $userId The user's unique identifier in the partner's system + * @param string $loginId The user's email address that identifies the user for login + * @return KalturaUser + */ + function disableLogin($userId = null, $loginId = null) + { + $kparams = array(); + $this->client->addParam($kparams, "userId", $userId); + $this->client->addParam($kparams, "loginId", $loginId); + $this->client->queueServiceActionCall("user", "disableLogin", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaUser"); + return $resultObject; + } + + /** + * Index an entry by id. + * + * @param string $id + * @param bool $shouldUpdate + * @return string + */ + function index($id, $shouldUpdate = true) + { + $kparams = array(); + $this->client->addParam($kparams, "id", $id); + $this->client->addParam($kparams, "shouldUpdate", $shouldUpdate); + $this->client->queueServiceActionCall("user", "index", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "string"); + return $resultObject; + } + + /** + * + * + * @param file $fileData + * @param KalturaBulkUploadJobData $bulkUploadData + * @param KalturaBulkUploadUserData $bulkUploadUserData + * @return KalturaBulkUpload + */ + function addFromBulkUpload($fileData, KalturaBulkUploadJobData $bulkUploadData = null, KalturaBulkUploadUserData $bulkUploadUserData = null) + { + $kparams = array(); + $kfiles = array(); + $this->client->addParam($kfiles, "fileData", $fileData); + if ($bulkUploadData !== null) + $this->client->addParam($kparams, "bulkUploadData", $bulkUploadData->toParams()); + if ($bulkUploadUserData !== null) + $this->client->addParam($kparams, "bulkUploadUserData", $bulkUploadUserData->toParams()); + $this->client->queueServiceActionCall("user", "addFromBulkUpload", $kparams, $kfiles); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaBulkUpload"); + return $resultObject; + } + + /** + * Action which checks whther user login + * + * @param KalturaUserLoginDataFilter $filter + * @return bool + */ + function checkLoginDataExists(KalturaUserLoginDataFilter $filter) + { + $kparams = array(); + $this->client->addParam($kparams, "filter", $filter->toParams()); + $this->client->queueServiceActionCall("user", "checkLoginDataExists", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $resultObject = (bool) $resultObject; + return $resultObject; + } +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaWidgetService extends KalturaServiceBase +{ + function __construct(KalturaClient $client = null) + { + parent::__construct($client); + } + + /** + * Add new widget, can be attached to entry or kshow + SourceWidget is ignored. + * + * @param KalturaWidget $widget + * @return KalturaWidget + */ + function add(KalturaWidget $widget) + { + $kparams = array(); + $this->client->addParam($kparams, "widget", $widget->toParams()); + $this->client->queueServiceActionCall("widget", "add", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaWidget"); + return $resultObject; + } + + /** + * Update exisiting widget + * + * @param string $id + * @param KalturaWidget $widget + * @return KalturaWidget + */ + function update($id, KalturaWidget $widget) + { + $kparams = array(); + $this->client->addParam($kparams, "id", $id); + $this->client->addParam($kparams, "widget", $widget->toParams()); + $this->client->queueServiceActionCall("widget", "update", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaWidget"); + return $resultObject; + } + + /** + * Get widget by id + * + * @param string $id + * @return KalturaWidget + */ + function get($id) + { + $kparams = array(); + $this->client->addParam($kparams, "id", $id); + $this->client->queueServiceActionCall("widget", "get", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaWidget"); + return $resultObject; + } + + /** + * Add widget based on existing widget. + Must provide valid sourceWidgetId + * + * @param KalturaWidget $widget + * @return KalturaWidget + */ + function cloneAction(KalturaWidget $widget) + { + $kparams = array(); + $this->client->addParam($kparams, "widget", $widget->toParams()); + $this->client->queueServiceActionCall("widget", "clone", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaWidget"); + return $resultObject; + } + + /** + * Retrieve a list of available widget depends on the filter given + * + * @param KalturaWidgetFilter $filter + * @param KalturaFilterPager $pager + * @return KalturaWidgetListResponse + */ + function listAction(KalturaWidgetFilter $filter = null, KalturaFilterPager $pager = null) + { + $kparams = array(); + if ($filter !== null) + $this->client->addParam($kparams, "filter", $filter->toParams()); + if ($pager !== null) + $this->client->addParam($kparams, "pager", $pager->toParams()); + $this->client->queueServiceActionCall("widget", "list", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaWidgetListResponse"); + return $resultObject; + } +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaXInternalService extends KalturaServiceBase +{ + function __construct(KalturaClient $client = null) + { + parent::__construct($client); + } + + /** + * Creates new download job for multiple entry ids (comma separated), an email will be sent when the job is done + This sevice support the following entries: + - MediaEntry + - Video will be converted using the flavor params id + - Audio will be downloaded as MP3 + - Image will be downloaded as Jpeg + - MixEntry will be flattened using the flavor params id + - Other entry types are not supported + Returns the admin email that the email message will be sent to + * + * @param string $entryIds Comma separated list of entry ids + * @param string $flavorParamsId + * @return string + */ + function xAddBulkDownload($entryIds, $flavorParamsId = "") + { + $kparams = array(); + $this->client->addParam($kparams, "entryIds", $entryIds); + $this->client->addParam($kparams, "flavorParamsId", $flavorParamsId); + $this->client->queueServiceActionCall("xinternal", "xAddBulkDownload", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "string"); + return $resultObject; + } +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaClient extends KalturaClientBase +{ + /** + * @var string + */ + protected $apiVersion = '3.1.6'; + + /** + * Manage access control profiles + * @var KalturaAccessControlProfileService + */ + public $accessControlProfile = null; + + /** + * Add & Manage Access Controls + * @var KalturaAccessControlService + */ + public $accessControl = null; + + /** + * Manage details for the administrative user + * @var KalturaAdminUserService + */ + public $adminUser = null; + + /** + * Base Entry Service + * @var KalturaBaseEntryService + */ + public $baseEntry = null; + + /** + * Bulk upload service is used to upload & manage bulk uploads using CSV files. + * This service manages only entry bulk uploads. + * @var KalturaBulkUploadService + */ + public $bulkUpload = null; + + /** + * Add & Manage CategoryEntry - assign entry to category + * @var KalturaCategoryEntryService + */ + public $categoryEntry = null; + + /** + * Add & Manage Categories + * @var KalturaCategoryService + */ + public $category = null; + + /** + * Add & Manage CategoryUser - membership of a user in a category + * @var KalturaCategoryUserService + */ + public $categoryUser = null; + + /** + * Manage the connection between Conversion Profiles and Asset Params + * @var KalturaConversionProfileAssetParamsService + */ + public $conversionProfileAssetParams = null; + + /** + * Add & Manage Conversion Profiles + * @var KalturaConversionProfileService + */ + public $conversionProfile = null; + + /** + * Data service lets you manage data content (textual content) + * @var KalturaDataService + */ + public $data = null; + + /** + * Document service + * @var KalturaDocumentService + */ + public $document = null; + + /** + * EmailIngestionProfile service lets you manage email ingestion profile records + * @var KalturaEmailIngestionProfileService + */ + public $EmailIngestionProfile = null; + + /** + * Manage file assets + * @var KalturaFileAssetService + */ + public $fileAsset = null; + + /** + * Retrieve information and invoke actions on Flavor Asset + * @var KalturaFlavorAssetService + */ + public $flavorAsset = null; + + /** + * Flavor Params Output service + * @var KalturaFlavorParamsOutputService + */ + public $flavorParamsOutput = null; + + /** + * Add & Manage Flavor Params + * @var KalturaFlavorParamsService + */ + public $flavorParams = null; + + /** + * Manage live channel segments + * @var KalturaLiveChannelSegmentService + */ + public $liveChannelSegment = null; + + /** + * Live Channel service lets you manage live channels + * @var KalturaLiveChannelService + */ + public $liveChannel = null; + + /** + * Live Stream service lets you manage live stream entries + * @var KalturaLiveStreamService + */ + public $liveStream = null; + + /** + * Media Info service + * @var KalturaMediaInfoService + */ + public $mediaInfo = null; + + /** + * Manage media servers + * @var KalturaMediaServerService + */ + public $mediaServer = null; + + /** + * Media service lets you upload and manage media files (images / videos & audio) + * @var KalturaMediaService + */ + public $media = null; + + /** + * A Mix is an XML unique format invented by Kaltura, it allows the user to create a mix of videos and images, in and out points, transitions, text overlays, soundtrack, effects and much more... + * Mixing service lets you create a new mix, manage its metadata and make basic manipulations. + * @var KalturaMixingService + */ + public $mixing = null; + + /** + * Notification Service + * @var KalturaNotificationService + */ + public $notification = null; + + /** + * Partner service allows you to change/manage your partner personal details and settings as well + * @var KalturaPartnerService + */ + public $partner = null; + + /** + * PermissionItem service lets you create and manage permission items + * @var KalturaPermissionItemService + */ + public $permissionItem = null; + + /** + * Permission service lets you create and manage user permissions + * @var KalturaPermissionService + */ + public $permission = null; + + /** + * Playlist service lets you create,manage and play your playlists + * Playlists could be static (containing a fixed list of entries) or dynamic (baseed on a filter) + * @var KalturaPlaylistService + */ + public $playlist = null; + + /** + * Api for getting reports data by the report type and some inputFilter + * @var KalturaReportService + */ + public $report = null; + + /** + * Expose the schema definitions for syndication MRSS, bulk upload XML and other schema types. + * @var KalturaSchemaService + */ + public $schema = null; + + /** + * Search service allows you to search for media in various media providers + * This service is being used mostly by the CW component + * @var KalturaSearchService + */ + public $search = null; + + /** + * Session service + * @var KalturaSessionService + */ + public $session = null; + + /** + * Stats Service + * @var KalturaStatsService + */ + public $stats = null; + + /** + * Storage Profiles service + * @var KalturaStorageProfileService + */ + public $storageProfile = null; + + /** + * Add & Manage Syndication Feeds + * @var KalturaSyndicationFeedService + */ + public $syndicationFeed = null; + + /** + * System service is used for internal system helpers & to retrieve system level information + * @var KalturaSystemService + */ + public $system = null; + + /** + * Retrieve information and invoke actions on Thumb Asset + * @var KalturaThumbAssetService + */ + public $thumbAsset = null; + + /** + * Thumbnail Params Output service + * @var KalturaThumbParamsOutputService + */ + public $thumbParamsOutput = null; + + /** + * Add & Manage Thumb Params + * @var KalturaThumbParamsService + */ + public $thumbParams = null; + + /** + * UiConf service lets you create and manage your UIConfs for the various flash components + * This service is used by the KMC-ApplicationStudio + * @var KalturaUiConfService + */ + public $uiConf = null; + + /** + * + * @var KalturaUploadService + */ + public $upload = null; + + /** + * + * @var KalturaUploadTokenService + */ + public $uploadToken = null; + + /** + * UserRole service lets you create and manage user roles + * @var KalturaUserRoleService + */ + public $userRole = null; + + /** + * Manage partner users on Kaltura's side + * The userId in kaltura is the unique Id in the partner's system, and the [partnerId,Id] couple are unique key in kaltura's DB + * @var KalturaUserService + */ + public $user = null; + + /** + * Widget service for full widget management + * @var KalturaWidgetService + */ + public $widget = null; + + /** + * Internal Service is used for actions that are used internally in Kaltura applications and might be changed in the future without any notice. + * @var KalturaXInternalService + */ + public $xInternal = null; + + /** + * Kaltura client constructor + * + * @param KalturaConfiguration $config + */ + public function __construct(KalturaConfiguration $config) + { + parent::__construct($config); + + $this->accessControlProfile = new KalturaAccessControlProfileService($this); + $this->accessControl = new KalturaAccessControlService($this); + $this->adminUser = new KalturaAdminUserService($this); + $this->baseEntry = new KalturaBaseEntryService($this); + $this->bulkUpload = new KalturaBulkUploadService($this); + $this->categoryEntry = new KalturaCategoryEntryService($this); + $this->category = new KalturaCategoryService($this); + $this->categoryUser = new KalturaCategoryUserService($this); + $this->conversionProfileAssetParams = new KalturaConversionProfileAssetParamsService($this); + $this->conversionProfile = new KalturaConversionProfileService($this); + $this->data = new KalturaDataService($this); + $this->document = new KalturaDocumentService($this); + $this->EmailIngestionProfile = new KalturaEmailIngestionProfileService($this); + $this->fileAsset = new KalturaFileAssetService($this); + $this->flavorAsset = new KalturaFlavorAssetService($this); + $this->flavorParamsOutput = new KalturaFlavorParamsOutputService($this); + $this->flavorParams = new KalturaFlavorParamsService($this); + $this->liveChannelSegment = new KalturaLiveChannelSegmentService($this); + $this->liveChannel = new KalturaLiveChannelService($this); + $this->liveStream = new KalturaLiveStreamService($this); + $this->mediaInfo = new KalturaMediaInfoService($this); + $this->mediaServer = new KalturaMediaServerService($this); + $this->media = new KalturaMediaService($this); + $this->mixing = new KalturaMixingService($this); + $this->notification = new KalturaNotificationService($this); + $this->partner = new KalturaPartnerService($this); + $this->permissionItem = new KalturaPermissionItemService($this); + $this->permission = new KalturaPermissionService($this); + $this->playlist = new KalturaPlaylistService($this); + $this->report = new KalturaReportService($this); + $this->schema = new KalturaSchemaService($this); + $this->search = new KalturaSearchService($this); + $this->session = new KalturaSessionService($this); + $this->stats = new KalturaStatsService($this); + $this->storageProfile = new KalturaStorageProfileService($this); + $this->syndicationFeed = new KalturaSyndicationFeedService($this); + $this->system = new KalturaSystemService($this); + $this->thumbAsset = new KalturaThumbAssetService($this); + $this->thumbParamsOutput = new KalturaThumbParamsOutputService($this); + $this->thumbParams = new KalturaThumbParamsService($this); + $this->uiConf = new KalturaUiConfService($this); + $this->upload = new KalturaUploadService($this); + $this->uploadToken = new KalturaUploadTokenService($this); + $this->userRole = new KalturaUserRoleService($this); + $this->user = new KalturaUserService($this); + $this->widget = new KalturaWidgetService($this); + $this->xInternal = new KalturaXInternalService($this); + } + +} + diff --git a/local/kaltura/API/KalturaClientBase.php b/local/kaltura/API/KalturaClientBase.php new file mode 100644 index 0000000000000..aff941328d669 --- /dev/null +++ b/local/kaltura/API/KalturaClientBase.php @@ -0,0 +1,1228 @@ +. +// +// @ignore +// =================================================================================================== + +/** + * @package Kaltura + * @subpackage Client + */ +class MultiRequestSubResult implements ArrayAccess +{ + function __construct($value) + { + $this->value = $value; + } + + function __toString() + { + return '{' . $this->value . '}'; + } + + function __get($name) + { + return new MultiRequestSubResult($this->value . ':' . $name); + } + + public function offsetExists($offset) + { + return true; + } + + public function offsetGet($offset) + { + return new MultiRequestSubResult($this->value . ':' . $offset); + } + + public function offsetSet($offset, $value) + { + } + + public function offsetUnset($offset) + { + } +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaNull +{ + private static $instance; + + private function __construct() + { + + } + + public static function getInstance() + { + if (!isset(self::$instance)) { + $c = __CLASS__; + self::$instance = new $c(); + } + return self::$instance; + } + + function __toString() + { + return ''; + } + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaClientBase +{ + const KALTURA_SERVICE_FORMAT_JSON = 1; + const KALTURA_SERVICE_FORMAT_XML = 2; + const KALTURA_SERVICE_FORMAT_PHP = 3; + + // KS V2 constants + const RANDOM_SIZE = 16; + + const FIELD_EXPIRY = '_e'; + const FIELD_TYPE = '_t'; + const FIELD_USER = '_u'; + + const METHOD_POST = 'POST'; + const METHOD_GET = 'GET'; + + /** + * @var string + */ + protected $apiVersion = null; + + /** + * @var KalturaConfiguration + */ + protected $config; + + /** + * @var string + */ + private $ks; + + /** + * @var boolean + */ + private $shouldLog = false; + + /** + * @var bool + */ + private $isMultiRequest = false; + + /** + * @var unknown_type + */ + private $callsQueue = array(); + + /** + * Array of all plugin services + * + * @var array + */ + protected $pluginServices = array(); + + /** + * @var Array of response headers + */ + private $responseHeaders = array(); + + /** + * path to save served results + * @var string + */ + protected $destinationPath = null; + + /** + * return served results without unserializing them + * @var boolean + */ + protected $returnServedResult = null; + + public function __get($serviceName) + { + if(isset($this->pluginServices[$serviceName])) + return $this->pluginServices[$serviceName]; + + return null; + } + + /** + * Kaltura client constructor + * + * @param KalturaConfiguration $config + */ + public function __construct(KalturaConfiguration $config) + { + $this->config = $config; + + $logger = $this->config->getLogger(); + if ($logger) + { + $this->shouldLog = true; + } + + // load all plugins + $pluginsFolder = realpath(dirname(__FILE__)) . '/KalturaPlugins'; + if(is_dir($pluginsFolder)) + { + $dir = dir($pluginsFolder); + while (false !== $fileName = $dir->read()) + { + $matches = null; + if(preg_match('/^([^.]+).php$/', $fileName, $matches)) + { + require_once("$pluginsFolder/$fileName"); + + $pluginClass = $matches[1]; + if(!class_exists($pluginClass) || !in_array('IKalturaClientPlugin', class_implements($pluginClass))) + continue; + + $plugin = call_user_func(array($pluginClass, 'get'), $this); + if(!($plugin instanceof IKalturaClientPlugin)) + continue; + + $pluginName = $plugin->getName(); + $services = $plugin->getServices(); + foreach($services as $serviceName => $service) + { + $service->setClient($this); + $this->pluginServices[$serviceName] = $service; + } + } + } + } + } + + /* Store response headers into array */ + public function readHeader($ch, $string) + { + array_push($this->responseHeaders, $string); + return strlen($string); + } + + /* Retrive response headers */ + public function getResponseHeaders() + { + return $this->responseHeaders; + } + + public function getServeUrl() + { + if (count($this->callsQueue) != 1) + return null; + + $params = array(); + $files = array(); + $this->log("service url: [" . $this->config->serviceUrl . "]"); + + // append the basic params + $this->addParam($params, "apiVersion", $this->apiVersion); + $this->addParam($params, "format", $this->config->format); + $this->addParam($params, "clientTag", $this->config->clientTag); + + $call = $this->callsQueue[0]; + $this->resetRequest(); + + $params = array_merge($params, $call->params); + $signature = $this->signature($params); + $this->addParam($params, "kalsig", $signature); + + $url = $this->config->serviceUrl . "/api_v3/index.php?service={$call->service}&action={$call->action}"; + $url .= '&' . http_build_query($params); + $this->log("Returned url [$url]"); + return $url; + } + + public function queueServiceActionCall($service, $action, $params = array(), $files = array()) + { + // in start session partner id is optional (default -1). if partner id was not set, use the one in the config + if ((!isset($params["partnerId"]) || $params["partnerId"] === -1) && !is_null($this->config->partnerId)) + $params["partnerId"] = $this->config->partnerId; + + $this->addParam($params, "ks", $this->ks); + + $call = new KalturaServiceActionCall($service, $action, $params, $files); + $this->callsQueue[] = $call; + } + + protected function resetRequest() + { + $this->destinationPath = null; + $this->returnServedResult = false; + $this->isMultiRequest = false; + $this->callsQueue = array(); + } + + /** + * Call all API service that are in queue + * + * @return unknown + */ + public function doQueue() + { + if($this->isMultiRequest && ($this->destinationPath || $this->returnServedResult)) + { + $this->resetRequest(); + throw new KalturaClientException("Downloading files is not supported as part of multi-request.", KalturaClientException::ERROR_DOWNLOAD_IN_MULTIREQUEST); + } + + if (count($this->callsQueue) == 0) + { + $this->resetRequest(); + return null; + } + + $startTime = microtime(true); + + $params = array(); + $files = array(); + $this->log("service url: [" . $this->config->serviceUrl . "]"); + + // append the basic params + $this->addParam($params, "apiVersion", $this->apiVersion); + $this->addParam($params, "format", $this->config->format); + $this->addParam($params, "clientTag", $this->config->clientTag); + $this->addParam($params, "ignoreNull", true); + + $url = $this->config->serviceUrl."/api_v3/index.php?service="; + if ($this->isMultiRequest) + { + $url .= "multirequest"; + $i = 1; + foreach ($this->callsQueue as $call) + { + $callParams = $call->getParamsForMultiRequest($i); + $callFiles = $call->getFilesForMultiRequest($i); + $params = array_merge($params, $callParams); + $files = array_merge($files, $callFiles); + $i++; + } + } + else + { + $call = $this->callsQueue[0]; + $url .= $call->service."&action=".$call->action; + $params = array_merge($params, $call->params); + $files = $call->files; + } + + $signature = $this->signature($params); + $this->addParam($params, "kalsig", $signature); + + try + { + list($postResult, $error) = $this->doHttpRequest($url, $params, $files); + } + catch(Exception $e) + { + $this->resetRequest(); + throw $e; + } + + if ($error) + { + $this->resetRequest(); + throw new KalturaClientException($error, KalturaClientException::ERROR_GENERIC); + } + else + { + // print server debug info to log + $serverName = null; + $serverSession = null; + foreach ($this->responseHeaders as $curHeader) + { + $splittedHeader = explode(':', $curHeader, 2); + if ($splittedHeader[0] == 'X-Me') + $serverName = trim($splittedHeader[1]); + else if ($splittedHeader[0] == 'X-Kaltura-Session') + $serverSession = trim($splittedHeader[1]); + } + if (!is_null($serverName) || !is_null($serverSession)) + $this->log("server: [{$serverName}], session: [{$serverSession}]"); + + $this->log("result (serialized): " . $postResult); + + if($this->returnServedResult) + { + $result = $postResult; + } + elseif($this->destinationPath) + { + if(!$postResult) + { + $this->resetRequest(); + throw new KalturaClientException("failed to download file", KalturaClientException::ERROR_READ_FAILED); + } + } + elseif ($this->config->format == self::KALTURA_SERVICE_FORMAT_PHP) + { + $result = @unserialize($postResult); + + if ($result === false && serialize(false) !== $postResult) + { + $this->resetRequest(); + throw new KalturaClientException("failed to unserialize server result\n$postResult", KalturaClientException::ERROR_UNSERIALIZE_FAILED); + } + $dump = print_r($result, true); + $this->log("result (object dump): " . $dump); + } + else + { + $this->resetRequest(); + throw new KalturaClientException("unsupported format: $postResult", KalturaClientException::ERROR_FORMAT_NOT_SUPPORTED); + } + } + $this->resetRequest(); + + $endTime = microtime (true); + + $this->log("execution time for [".$url."]: [" . ($endTime - $startTime) . "]"); + + return $result; + } + + /** + * Sign array of parameters + * + * @param array $params + * @return string + */ + private function signature($params) + { + ksort($params); + $str = ""; + foreach ($params as $k => $v) + { + $str .= $k.$v; + } + return md5($str); + } + + /** + * Send http request by using curl (if available) or php stream_context + * + * @param string $url + * @param parameters $params + * @return array of result and error + */ + protected function doHttpRequest($url, $params = array(), $files = array()) + { + if (function_exists('curl_init')) + return $this->doCurl($url, $params, $files); + + if($this->destinationPath || $this->returnServedResult) + throw new KalturaClientException("Downloading files is not supported with stream context http request, please use curl.", KalturaClientException::ERROR_DOWNLOAD_NOT_SUPPORTED); + + return $this->doPostRequest($url, $params, $files); + } + + /** + * Curl HTTP POST Request + * + * @param string $url + * @param array $params + * @param array $files + * @return array of result and error + */ + private function doCurl($url, $params = array(), $files = array()) + { + $opt = http_build_query($params, null, "&"); + // Force POST in case we have files + if(count($files) > 0) { + $this->config->method = self::METHOD_POST; + } + // Check for GET and append params to url + if( $this->config->method == self::METHOD_GET ) { + $url = $url . '&' . $opt; + } + $this->responseHeaders = array(); + $cookies = array(); + $ch = curl_init(); + curl_setopt($ch, CURLOPT_URL, $url); + if( $this->config->method == self::METHOD_POST ) { + curl_setopt($ch, CURLOPT_POST, 1); + if (count($files) > 0) + { + foreach($files as &$file) + $file = "@".$file; // let curl know its a file + curl_setopt($ch, CURLOPT_POSTFIELDS, array_merge($params, $files)); + } + else + { + $this->log("curl: $url&$opt"); + curl_setopt($ch, CURLOPT_POSTFIELDS, $opt); + } + } + curl_setopt($ch, CURLOPT_ENCODING, 'gzip,deflate'); + curl_setopt($ch, CURLOPT_USERAGENT, $this->config->userAgent); + if (count($files) > 0) + curl_setopt($ch, CURLOPT_TIMEOUT, 0); + else + curl_setopt($ch, CURLOPT_TIMEOUT, $this->config->curlTimeout); + + if ($this->config->startZendDebuggerSession === true) + { + $zendDebuggerParams = $this->getZendDebuggerParams($url); + $cookies = array_merge($cookies, $zendDebuggerParams); + } + + if (count($cookies) > 0) + { + $cookiesStr = http_build_query($cookies, null, '; '); + curl_setopt($ch, CURLOPT_COOKIE, $cookiesStr); + } + + if (isset($this->config->proxyHost)) { + curl_setopt($ch, CURLOPT_HTTPPROXYTUNNEL, true); + curl_setopt($ch, CURLOPT_PROXY, $this->config->proxyHost); + if (isset($this->config->proxyPort)) { + curl_setopt($ch, CURLOPT_PROXYPORT, $this->config->proxyPort); + } + if (isset($this->config->proxyUser)) { + curl_setopt($ch, CURLOPT_PROXYUSERPWD, $this->config->proxyUser.':'.$this->config->proxyPassword); + } + if (isset($this->config->proxyType) && $this->config->proxyType === 'SOCKS5') { + curl_setopt($ch, CURLOPT_PROXYTYPE, CURLPROXY_SOCKS5); + } + } + + // Set SSL verification + if(!$this->getConfig()->verifySSL) + { + curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); + curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 2); + } + elseif($this->getConfig()->sslCertificatePath) + { + curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, true); + curl_setopt($ch, CURLOPT_CAINFO, $this->getConfig()->sslCertificatePath); + } + + // Set custom headers + curl_setopt($ch, CURLOPT_HTTPHEADER, $this->config->requestHeaders ); + + // Save response headers + curl_setopt($ch, CURLOPT_HEADERFUNCTION, array($this, 'readHeader') ); + + $destinationResource = null; + if($this->destinationPath) + { + $destinationResource = fopen($this->destinationPath, "wb"); + curl_setopt($ch, CURLOPT_FILE, $destinationResource); + } + else + { + curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); + } + + $result = curl_exec($ch); + + if($destinationResource) + fclose($destinationResource); + + $curlError = curl_error($ch); + curl_close($ch); + return array($result, $curlError); + } + + /** + * HTTP stream context request + * + * @param string $url + * @param array $params + * @return array of result and error + */ + private function doPostRequest($url, $params = array(), $files = array()) + { + if (count($files) > 0) + throw new KalturaClientException("Uploading files is not supported with stream context http request, please use curl.", KalturaClientException::ERROR_UPLOAD_NOT_SUPPORTED); + + $formattedData = http_build_query($params , "", "&"); + $this->log("post: $url&$formattedData"); + + $params = array('http' => array( + "method" => "POST", + "User-Agent: " . $this->config->userAgent . "\r\n". + "Accept-language: en\r\n". + "Content-type: application/x-www-form-urlencoded\r\n", + "content" => $formattedData + )); + + if (isset($this->config->proxyType) && $this->config->proxyType === 'SOCKS5') { + throw new KalturaClientException("Cannot use SOCKS5 without curl installed.", KalturaClientException::ERROR_CONNECTION_FAILED); + } + if (isset($this->config->proxyHost)) { + $proxyhost = 'tcp://' . $this->config->proxyHost; + if (isset($this->config->proxyPort)) { + $proxyhost = $proxyhost . ":" . $this->config->proxyPort; + } + $params['http']['proxy'] = $proxyhost; + $params['http']['request_fulluri'] = true; + if (isset($this->config->proxyUser)) { + $auth = base64_encode($this->config->proxyUser.':'.$this->config->proxyPassword); + $params['http']['header'] = 'Proxy-Authorization: Basic ' . $auth; + } + } + + $ctx = stream_context_create($params); + $fp = @fopen($url, 'rb', false, $ctx); + if (!$fp) { + $phpErrorMsg = ""; + throw new KalturaClientException("Problem with $url, $phpErrorMsg", KalturaClientException::ERROR_CONNECTION_FAILED); + } + $response = @stream_get_contents($fp); + if ($response === false) { + throw new KalturaClientException("Problem reading data from $url, $phpErrorMsg", KalturaClientException::ERROR_READ_FAILED); + } + return array($response, ''); + } + + /** + * @return string + */ + public function getKs() + { + return $this->ks; + } + + /** + * @param string $ks + */ + public function setKs($ks) + { + $this->ks = $ks; + } + + /** + * @param boolean $returnServedResult + */ + public function setReturnServedResult($returnServedResult) + { + $this->returnServedResult = $returnServedResult; + } + + /** + * @return boolean + */ + public function getReturnServedResult() + { + return $this->returnServedResult; + } + + /** + * @param string $destinationPath + */ + public function setDestinationPath($destinationPath) + { + $this->destinationPath = $destinationPath; + } + + /** + * @return string + */ + public function getDestinationPath() + { + return $this->destinationPath; + } + + /** + * @return KalturaConfiguration + */ + public function getConfig() + { + return $this->config; + } + + /** + * @param KalturaConfiguration $config + */ + public function setConfig(KalturaConfiguration $config) + { + $this->config = $config; + + $logger = $this->config->getLogger(); + if ($logger instanceof IKalturaLogger) + { + $this->shouldLog = true; + } + } + + /** + * Add parameter to array of parameters that is passed by reference + * + * @param arrat $params + * @param string $paramName + * @param string $paramValue + */ + public function addParam(&$params, $paramName, $paramValue) + { + if ($paramValue === null) + return; + + if ($paramValue instanceof KalturaNull) { + $params[$paramName . '__null'] = ''; + return; + } + + if(is_object($paramValue) && $paramValue instanceof KalturaObjectBase) + { + $this->addParam($params, "$paramName:objectType", get_class($paramValue)); + foreach($paramValue as $prop => $val) + $this->addParam($params, "$paramName:$prop", $val); + + return; + } + + if(!is_array($paramValue)) + { + $params[$paramName] = (string)$paramValue; + return; + } + + if ($paramValue) + { + foreach($paramValue as $subParamName => $subParamValue) + $this->addParam($params, "$paramName:$subParamName", $subParamValue); + } + else + { + $this->addParam($params, "$paramName:-", ""); + } + } + + /** + * Validate the result object and throw exception if its an error + * + * @param object $resultObject + */ + public function throwExceptionIfError($resultObject) + { + if ($this->isError($resultObject)) + { + throw new KalturaException($resultObject["message"], $resultObject["code"]); + } + } + + /** + * Checks whether the result object is an error + * + * @param object $resultObject + */ + public function isError($resultObject) + { + return (is_array($resultObject) && isset($resultObject["message"]) && isset($resultObject["code"])); + } + + /** + * Validate that the passed object type is of the expected type + * + * @param any $resultObject + * @param string $objectType + */ + public function validateObjectType($resultObject, $objectType) + { + if (is_object($resultObject)) + { + if (!($resultObject instanceof $objectType)) + throw new KalturaClientException("Invalid object type", KalturaClientException::ERROR_INVALID_OBJECT_TYPE); + } + else if (gettype($resultObject) !== "NULL" && gettype($resultObject) !== $objectType) + { + throw new KalturaClientException("Invalid object type", KalturaClientException::ERROR_INVALID_OBJECT_TYPE); + } + } + + public function startMultiRequest() + { + $this->isMultiRequest = true; + } + + public function doMultiRequest() + { + return $this->doQueue(); + } + + public function isMultiRequest() + { + return $this->isMultiRequest; + } + + public function getMultiRequestQueueSize() + { + return count($this->callsQueue); + } + + public function getMultiRequestResult() + { + return new MultiRequestSubResult($this->getMultiRequestQueueSize() . ':result'); + } + + /** + * @param string $msg + */ + protected function log($msg) + { + if ($this->shouldLog) + $this->config->getLogger()->log($msg); + } + + /** + * Return a list of parameter used to a new start debug on the destination server api + * @link http://kb.zend.com/index.php?View=entry&EntryID=434 + * @param $url + */ + protected function getZendDebuggerParams($url) + { + $params = array(); + $passThruParams = array('debug_host', + 'debug_fastfile', + 'debug_port', + 'start_debug', + 'send_debug_header', + 'send_sess_end', + 'debug_jit', + 'debug_stop', + 'use_remote'); + + foreach($passThruParams as $param) + { + if (isset($_COOKIE[$param])) + $params[$param] = $_COOKIE[$param]; + } + + $params['original_url'] = $url; + $params['debug_session_id'] = microtime(true); // to create a new debug session + + return $params; + } + + public function generateSession($adminSecretForSigning, $userId, $type, $partnerId, $expiry = 86400, $privileges = '') + { + $rand = rand(0, 32000); + $expiry = time()+$expiry; + $fields = array ( + $partnerId , + $partnerId , + $expiry , + $type, + $rand , + $userId , + $privileges + ); + $info = implode ( ";" , $fields ); + + $signature = $this->hash ( $adminSecretForSigning , $info ); + $strToHash = $signature . "|" . $info ; + $encoded_str = base64_encode( $strToHash ); + + return $encoded_str; + } + + public static function generateSessionV2($adminSecretForSigning, $userId, $type, $partnerId, $expiry, $privileges) + { + // build fields array + $fields = array(); + foreach (explode(',', $privileges) as $privilege) + { + $privilege = trim($privilege); + if (!$privilege) + continue; + if ($privilege == '*') + $privilege = 'all:*'; + $splittedPrivilege = explode(':', $privilege, 2); + if (count($splittedPrivilege) > 1) + $fields[$splittedPrivilege[0]] = $splittedPrivilege[1]; + else + $fields[$splittedPrivilege[0]] = ''; + } + $fields[self::FIELD_EXPIRY] = time() + $expiry; + $fields[self::FIELD_TYPE] = $type; + $fields[self::FIELD_USER] = $userId; + + // build fields string + $fieldsStr = http_build_query($fields, '', '&'); + $rand = ''; + for ($i = 0; $i < self::RANDOM_SIZE; $i++) + $rand .= chr(rand(0, 0xff)); + $fieldsStr = $rand . $fieldsStr; + $fieldsStr = sha1($fieldsStr, true) . $fieldsStr; + + // encrypt and encode + $encryptedFields = self::aesEncrypt($adminSecretForSigning, $fieldsStr); + $decodedKs = "v2|{$partnerId}|" . $encryptedFields; + return str_replace(array('+', '/'), array('-', '_'), base64_encode($decodedKs)); + } + + protected static function aesEncrypt($key, $message) + { + return mcrypt_encrypt( + MCRYPT_RIJNDAEL_128, + substr(sha1($key, true), 0, 16), + $message, + MCRYPT_MODE_CBC, + str_repeat("\0", 16) // no need for an IV since we add a random string to the message anyway + ); + } + + private function hash ( $salt , $str ) + { + return sha1($salt.$str); + } + + /** + * @return KalturaNull + */ + public static function getKalturaNullValue() + { + + return KalturaNull::getInstance(); + } + +} + +/** + * @package Kaltura + * @subpackage Client + */ +interface IKalturaClientPlugin +{ + /** + * @return KalturaClientPlugin + */ + public static function get(KalturaClient $client); + + /** + * @return array + */ + public function getServices(); + + /** + * @return string + */ + public function getName(); +} + +/** + * @package Kaltura + * @subpackage Client + */ +abstract class KalturaClientPlugin implements IKalturaClientPlugin +{ + protected function __construct(KalturaClient $client) + { + + } +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaServiceActionCall +{ + /** + * @var string + */ + public $service; + + /** + * @var string + */ + public $action; + + + /** + * @var array + */ + public $params; + + /** + * @var array + */ + public $files; + + /** + * Contruct new Kaltura service action call, if params array contain sub arrays (for objects), it will be flattened + * + * @param string $service + * @param string $action + * @param array $params + * @param array $files + */ + public function __construct($service, $action, $params = array(), $files = array()) + { + $this->service = $service; + $this->action = $action; + $this->params = $this->parseParams($params); + $this->files = $files; + } + + /** + * Parse params array and sub arrays (for objects) + * + * @param array $params + */ + public function parseParams(array $params) + { + $newParams = array(); + foreach($params as $key => $val) + { + if (is_array($val)) + { + $newParams[$key] = $this->parseParams($val); + } + else + { + $newParams[$key] = $val; + } + } + return $newParams; + } + + /** + * Return the parameters for a multi request + * + * @param int $multiRequestIndex + */ + public function getParamsForMultiRequest($multiRequestIndex) + { + $multiRequestParams = array(); + $multiRequestParams[$multiRequestIndex.":service"] = $this->service; + $multiRequestParams[$multiRequestIndex.":action"] = $this->action; + foreach($this->params as $key => $val) + { + $multiRequestParams[$multiRequestIndex.":".$key] = $val; + } + return $multiRequestParams; + } + + /** + * Return the parameters for a multi request + * + * @param int $multiRequestIndex + */ + public function getFilesForMultiRequest($multiRequestIndex) + { + $multiRequestParams = array(); + foreach($this->files as $key => $val) + { + $multiRequestParams[$multiRequestIndex.":".$key] = $val; + } + return $multiRequestParams; + } +} + +/** + * Abstract base class for all client services + * + * @package Kaltura + * @subpackage Client + */ +abstract class KalturaServiceBase +{ + /** + * @var KalturaClient + */ + protected $client; + + /** + * Initialize the service keeping reference to the KalturaClient + * + * @param KalturaClient $client + */ + public function __construct(KalturaClient $client = null) + { + $this->client = $client; + } + + /** + * @param KalturaClient $client + */ + public function setClient(KalturaClient $client) + { + $this->client = $client; + } +} + +/** + * Abstract base class for all client objects + * + * @package Kaltura + * @subpackage Client + */ +abstract class KalturaObjectBase +{ + public function __construct($params = array()) + { + foreach ($params as $key => $value) + { + if (!property_exists($this, $key)) + throw new KalturaClientException("property [{$key}] does not exist on object [".get_class($this)."]", KalturaClientException::ERROR_INVALID_OBJECT_FIELD); + $this->$key = $value; + } + } + + protected function addIfNotNull(&$params, $paramName, $paramValue) + { + if ($paramValue !== null) + { + if($paramValue instanceof KalturaObjectBase) + { + $params[$paramName] = $paramValue->toParams(); + } + else + { + $params[$paramName] = $paramValue; + } + } + } + + public function toParams() + { + $params = array(); + $params["objectType"] = get_class($this); + foreach($this as $prop => $val) + { + $this->addIfNotNull($params, $prop, $val); + } + return $params; + } +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaException extends Exception +{ + public function __construct($message, $code) + { + $this->code = $code; + parent::__construct($message); + } +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaClientException extends Exception +{ + const ERROR_GENERIC = -1; + const ERROR_UNSERIALIZE_FAILED = -2; + const ERROR_FORMAT_NOT_SUPPORTED = -3; + const ERROR_UPLOAD_NOT_SUPPORTED = -4; + const ERROR_CONNECTION_FAILED = -5; + const ERROR_READ_FAILED = -6; + const ERROR_INVALID_PARTNER_ID = -7; + const ERROR_INVALID_OBJECT_TYPE = -8; + const ERROR_INVALID_OBJECT_FIELD = -9; + const ERROR_DOWNLOAD_NOT_SUPPORTED = -10; + const ERROR_DOWNLOAD_IN_MULTIREQUEST = -11; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaConfiguration +{ + private $logger; + + public $serviceUrl = "http://www.kaltura.com/"; + public $partnerId = null; + public $format = 3; + public $clientTag = "php5:14-01-16"; + public $curlTimeout = 120; + public $userAgent = ''; + public $startZendDebuggerSession = false; + public $proxyHost = null; + public $proxyPort = null; + public $proxyType = 'HTTP'; + public $proxyUser = null; + public $proxyPassword = ''; + public $verifySSL = true; + public $sslCertificatePath = null; + public $requestHeaders = array(); + public $method = KalturaClientBase::METHOD_POST; + + + + + /** + * Constructs new Kaltura configuration object + * + */ + public function __construct($partnerId = -1) + { + if (!is_null($partnerId) && !is_numeric($partnerId)) + throw new KalturaClientException("Invalid partner id", KalturaClientException::ERROR_INVALID_PARTNER_ID); + + $this->partnerId = $partnerId; + } + + /** + * Set logger to get kaltura client debug logs + * + * @param IKalturaLogger $log + */ + public function setLogger(IKalturaLogger $log) + { + $this->logger = $log; + } + + /** + * Gets the logger (Internal client use) + * + * @return IKalturaLogger + */ + public function getLogger() + { + return $this->logger; + } +} + +/** + * Implement to get Kaltura Client logs + * + * @package Kaltura + * @subpackage Client + */ +interface IKalturaLogger +{ + function log($msg); +} + + diff --git a/local/kaltura/API/KalturaEnums.php b/local/kaltura/API/KalturaEnums.php new file mode 100644 index 0000000000000..cefdffdc8e79e --- /dev/null +++ b/local/kaltura/API/KalturaEnums.php @@ -0,0 +1,3213 @@ +. +// +// @ignore +// =================================================================================================== + +/** + * @package Kaltura + * @subpackage Client + */ +require_once(dirname(__FILE__) . "/KalturaClientBase.php"); + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaAppearInListType +{ + const PARTNER_ONLY = 1; + const CATEGORY_MEMBERS_ONLY = 3; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaAssetParamsDeletePolicy +{ + const KEEP = 0; + const DELETE = 1; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaAssetParamsOrigin +{ + const CONVERT = 0; + const INGEST = 1; + const CONVERT_WHEN_MISSING = 2; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaAssetStatus +{ + const ERROR = -1; + const QUEUED = 0; + const READY = 2; + const DELETED = 3; + const IMPORTING = 7; + const EXPORTING = 9; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaBatchJobErrorTypes +{ + const APP = 0; + const RUNTIME = 1; + const HTTP = 2; + const CURL = 3; + const KALTURA_API = 4; + const KALTURA_CLIENT = 5; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaBatchJobStatus +{ + const PENDING = 0; + const QUEUED = 1; + const PROCESSING = 2; + const PROCESSED = 3; + const MOVEFILE = 4; + const FINISHED = 5; + const FAILED = 6; + const ABORTED = 7; + const ALMOST_DONE = 8; + const RETRY = 9; + const FATAL = 10; + const DONT_PROCESS = 11; + const FINISHED_PARTIALLY = 12; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaBitRateMode +{ + const CBR = 1; + const VBR = 2; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaCategoryEntryStatus +{ + const PENDING = 1; + const ACTIVE = 2; + const DELETED = 3; + const REJECTED = 4; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaCategoryStatus +{ + const UPDATING = 1; + const ACTIVE = 2; + const DELETED = 3; + const PURGED = 4; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaCategoryUserPermissionLevel +{ + const MANAGER = 0; + const MODERATOR = 1; + const CONTRIBUTOR = 2; + const MEMBER = 3; + const NONE = 4; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaCategoryUserStatus +{ + const ACTIVE = 1; + const PENDING = 2; + const NOT_ACTIVE = 3; + const DELETED = 4; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaCommercialUseType +{ + const NON_COMMERCIAL_USE = 0; + const COMMERCIAL_USE = 1; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaContributionPolicyType +{ + const ALL = 1; + const MEMBERS_WITH_CONTRIBUTION_PERMISSION = 2; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaControlPanelCommandStatus +{ + const PENDING = 1; + const HANDLED = 2; + const DONE = 3; + const FAILED = 4; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaControlPanelCommandTargetType +{ + const DATA_CENTER = 1; + const SCHEDULER = 2; + const JOB_TYPE = 3; + const JOB = 4; + const BATCH = 5; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaControlPanelCommandType +{ + const KILL = 4; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaCountryRestrictionType +{ + const RESTRICT_COUNTRY_LIST = 0; + const ALLOW_COUNTRY_LIST = 1; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaDVRStatus +{ + const DISABLED = 0; + const ENABLED = 1; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaDirectoryRestrictionType +{ + const DONT_DISPLAY = 0; + const DISPLAY_WITH_LINK = 1; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaEditorType +{ + const SIMPLE = 1; + const ADVANCED = 2; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaEmailIngestionProfileStatus +{ + const INACTIVE = 0; + const ACTIVE = 1; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaEntryModerationStatus +{ + const PENDING_MODERATION = 1; + const APPROVED = 2; + const REJECTED = 3; + const FLAGGED_FOR_REVIEW = 5; + const AUTO_APPROVED = 6; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaFeatureStatusType +{ + const LOCK_CATEGORY = 1; + const CATEGORY = 2; + const CATEGORY_ENTRY = 3; + const ENTRY = 4; + const CATEGORY_USER = 5; + const USER = 6; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaFlavorAssetStatus +{ + const ERROR = -1; + const QUEUED = 0; + const CONVERTING = 1; + const READY = 2; + const DELETED = 3; + const NOT_APPLICABLE = 4; + const TEMP = 5; + const WAIT_FOR_CONVERT = 6; + const IMPORTING = 7; + const VALIDATING = 8; + const EXPORTING = 9; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaFlavorReadyBehaviorType +{ + const NO_IMPACT = 0; + const INHERIT_FLAVOR_PARAMS = 0; + const REQUIRED = 1; + const OPTIONAL = 2; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaGender +{ + const UNKNOWN = 0; + const MALE = 1; + const FEMALE = 2; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaInheritanceType +{ + const INHERIT = 1; + const MANUAL = 2; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaIpAddressRestrictionType +{ + const RESTRICT_LIST = 0; + const ALLOW_LIST = 1; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaLicenseType +{ + const UNKNOWN = -1; + const NONE = 0; + const COPYRIGHTED = 1; + const PUBLIC_DOMAIN = 2; + const CREATIVECOMMONS_ATTRIBUTION = 3; + const CREATIVECOMMONS_ATTRIBUTION_SHARE_ALIKE = 4; + const CREATIVECOMMONS_ATTRIBUTION_NO_DERIVATIVES = 5; + const CREATIVECOMMONS_ATTRIBUTION_NON_COMMERCIAL = 6; + const CREATIVECOMMONS_ATTRIBUTION_NON_COMMERCIAL_SHARE_ALIKE = 7; + const CREATIVECOMMONS_ATTRIBUTION_NON_COMMERCIAL_NO_DERIVATIVES = 8; + const GFDL = 9; + const GPL = 10; + const AFFERO_GPL = 11; + const LGPL = 12; + const BSD = 13; + const APACHE = 14; + const MOZILLA = 15; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaLimitFlavorsRestrictionType +{ + const RESTRICT_LIST = 0; + const ALLOW_LIST = 1; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaMailJobStatus +{ + const PENDING = 1; + const SENT = 2; + const ERROR = 3; + const QUEUED = 4; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaMediaServerIndex +{ + const PRIMARY = 0; + const SECONDARY = 1; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaMediaType +{ + const VIDEO = 1; + const IMAGE = 2; + const AUDIO = 5; + const LIVE_STREAM_FLASH = 201; + const LIVE_STREAM_WINDOWS_MEDIA = 202; + const LIVE_STREAM_REAL_MEDIA = 203; + const LIVE_STREAM_QUICKTIME = 204; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaModerationFlagType +{ + const SEXUAL_CONTENT = 1; + const VIOLENT_REPULSIVE = 2; + const HARMFUL_DANGEROUS = 3; + const SPAM_COMMERCIALS = 4; + const COPYRIGHT = 5; + const TERMS_OF_USE_VIOLATION = 6; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaMrssExtensionMode +{ + const APPEND = 1; + const REPLACE = 2; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaNotificationObjectType +{ + const ENTRY = 1; + const KSHOW = 2; + const USER = 3; + const BATCH_JOB = 4; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaNotificationStatus +{ + const PENDING = 1; + const SENT = 2; + const ERROR = 3; + const SHOULD_RESEND = 4; + const ERROR_RESENDING = 5; + const SENT_SYNCH = 6; + const QUEUED = 7; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaNotificationType +{ + const ENTRY_ADD = 1; + const ENTR_UPDATE_PERMISSIONS = 2; + const ENTRY_DELETE = 3; + const ENTRY_BLOCK = 4; + const ENTRY_UPDATE = 5; + const ENTRY_UPDATE_THUMBNAIL = 6; + const ENTRY_UPDATE_MODERATION = 7; + const USER_ADD = 21; + const USER_BANNED = 26; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaNullableBoolean +{ + const NULL_VALUE = -1; + const FALSE_VALUE = 0; + const TRUE_VALUE = 1; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaPartnerGroupType +{ + const PUBLISHER = 1; + const VAR_GROUP = 2; + const GROUP = 3; + const TEMPLATE = 4; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaPartnerStatus +{ + const ACTIVE = 1; + const BLOCKED = 2; + const FULL_BLOCK = 3; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaPartnerType +{ + const KMC = 1; + const WIKI = 100; + const WORDPRESS = 101; + const DRUPAL = 102; + const DEKIWIKI = 103; + const MOODLE = 104; + const COMMUNITY_EDITION = 105; + const JOOMLA = 106; + const BLACKBOARD = 107; + const SAKAI = 108; + const ADMIN_CONSOLE = 109; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaPermissionStatus +{ + const ACTIVE = 1; + const BLOCKED = 2; + const DELETED = 3; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaPermissionType +{ + const NORMAL = 1; + const SPECIAL_FEATURE = 2; + const PLUGIN = 3; + const PARTNER_GROUP = 4; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaPlaylistType +{ + const STATIC_LIST = 3; + const DYNAMIC = 10; + const EXTERNAL = 101; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaPrivacyType +{ + const ALL = 1; + const AUTHENTICATED_USERS = 2; + const MEMBERS_ONLY = 3; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaRecordStatus +{ + const DISABLED = 0; + const ENABLED = 1; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaReportType +{ + const TOP_CONTENT = 1; + const CONTENT_DROPOFF = 2; + const CONTENT_INTERACTIONS = 3; + const MAP_OVERLAY = 4; + const TOP_CONTRIBUTORS = 5; + const TOP_SYNDICATION = 6; + const CONTENT_CONTRIBUTIONS = 7; + const USER_ENGAGEMENT = 11; + const SPEFICIC_USER_ENGAGEMENT = 12; + const USER_TOP_CONTENT = 13; + const USER_CONTENT_DROPOFF = 14; + const USER_CONTENT_INTERACTIONS = 15; + const APPLICATIONS = 16; + const USER_USAGE = 17; + const SPECIFIC_USER_USAGE = 18; + const VAR_USAGE = 19; + const TOP_CREATORS = 20; + const PLATFORMS = 21; + const OPERATION_SYSTEM = 22; + const BROWSERS = 23; + const PARTNER_USAGE = 201; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaResponseType +{ + const RESPONSE_TYPE_JSON = 1; + const RESPONSE_TYPE_XML = 2; + const RESPONSE_TYPE_PHP = 3; + const RESPONSE_TYPE_PHP_ARRAY = 4; + const RESPONSE_TYPE_HTML = 7; + const RESPONSE_TYPE_MRSS = 8; + const RESPONSE_TYPE_JSONP = 9; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaSearchOperatorType +{ + const SEARCH_AND = 1; + const SEARCH_OR = 2; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaSearchProviderType +{ + const FLICKR = 3; + const YOUTUBE = 4; + const MYSPACE = 7; + const PHOTOBUCKET = 8; + const JAMENDO = 9; + const CCMIXTER = 10; + const NYPL = 11; + const CURRENT = 12; + const MEDIA_COMMONS = 13; + const KALTURA = 20; + const KALTURA_USER_CLIPS = 21; + const ARCHIVE_ORG = 22; + const KALTURA_PARTNER = 23; + const METACAFE = 24; + const SEARCH_PROXY = 28; + const PARTNER_SPECIFIC = 100; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaSessionType +{ + const USER = 0; + const ADMIN = 2; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaSiteRestrictionType +{ + const RESTRICT_SITE_LIST = 0; + const ALLOW_SITE_LIST = 1; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaStatsEventType +{ + const WIDGET_LOADED = 1; + const MEDIA_LOADED = 2; + const PLAY = 3; + const PLAY_REACHED_25 = 4; + const PLAY_REACHED_50 = 5; + const PLAY_REACHED_75 = 6; + const PLAY_REACHED_100 = 7; + const OPEN_EDIT = 8; + const OPEN_VIRAL = 9; + const OPEN_DOWNLOAD = 10; + const OPEN_REPORT = 11; + const BUFFER_START = 12; + const BUFFER_END = 13; + const OPEN_FULL_SCREEN = 14; + const CLOSE_FULL_SCREEN = 15; + const REPLAY = 16; + const SEEK = 17; + const OPEN_UPLOAD = 18; + const SAVE_PUBLISH = 19; + const CLOSE_EDITOR = 20; + const PRE_BUMPER_PLAYED = 21; + const POST_BUMPER_PLAYED = 22; + const BUMPER_CLICKED = 23; + const PREROLL_STARTED = 24; + const MIDROLL_STARTED = 25; + const POSTROLL_STARTED = 26; + const OVERLAY_STARTED = 27; + const PREROLL_CLICKED = 28; + const MIDROLL_CLICKED = 29; + const POSTROLL_CLICKED = 30; + const OVERLAY_CLICKED = 31; + const PREROLL_25 = 32; + const PREROLL_50 = 33; + const PREROLL_75 = 34; + const MIDROLL_25 = 35; + const MIDROLL_50 = 36; + const MIDROLL_75 = 37; + const POSTROLL_25 = 38; + const POSTROLL_50 = 39; + const POSTROLL_75 = 40; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaStatsFeatureType +{ + const NONE = 0; + const RELATED = 1; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaStatsKmcEventType +{ + const CONTENT_PAGE_VIEW = 1001; + const CONTENT_ADD_PLAYLIST = 1010; + const CONTENT_EDIT_PLAYLIST = 1011; + const CONTENT_DELETE_PLAYLIST = 1012; + const CONTENT_EDIT_ENTRY = 1013; + const CONTENT_CHANGE_THUMBNAIL = 1014; + const CONTENT_ADD_TAGS = 1015; + const CONTENT_REMOVE_TAGS = 1016; + const CONTENT_ADD_ADMIN_TAGS = 1017; + const CONTENT_REMOVE_ADMIN_TAGS = 1018; + const CONTENT_DOWNLOAD = 1019; + const CONTENT_APPROVE_MODERATION = 1020; + const CONTENT_REJECT_MODERATION = 1021; + const CONTENT_BULK_UPLOAD = 1022; + const CONTENT_ADMIN_KCW_UPLOAD = 1023; + const ACCOUNT_CHANGE_PARTNER_INFO = 1030; + const ACCOUNT_CHANGE_LOGIN_INFO = 1031; + const ACCOUNT_CONTACT_US_USAGE = 1032; + const ACCOUNT_UPDATE_SERVER_SETTINGS = 1033; + const ACCOUNT_ACCOUNT_OVERVIEW = 1034; + const ACCOUNT_ACCESS_CONTROL = 1035; + const ACCOUNT_TRANSCODING_SETTINGS = 1036; + const ACCOUNT_ACCOUNT_UPGRADE = 1037; + const ACCOUNT_SAVE_SERVER_SETTINGS = 1038; + const ACCOUNT_ACCESS_CONTROL_DELETE = 1039; + const ACCOUNT_SAVE_TRANSCODING_SETTINGS = 1040; + const LOGIN = 1041; + const DASHBOARD_IMPORT_CONTENT = 1042; + const DASHBOARD_UPDATE_CONTENT = 1043; + const DASHBOARD_ACCOUNT_CONTACT_US = 1044; + const DASHBOARD_VIEW_REPORTS = 1045; + const DASHBOARD_EMBED_PLAYER = 1046; + const DASHBOARD_EMBED_PLAYLIST = 1047; + const DASHBOARD_CUSTOMIZE_PLAYERS = 1048; + const APP_STUDIO_NEW_PLAYER_SINGLE_VIDEO = 1050; + const APP_STUDIO_NEW_PLAYER_PLAYLIST = 1051; + const APP_STUDIO_NEW_PLAYER_MULTI_TAB_PLAYLIST = 1052; + const APP_STUDIO_EDIT_PLAYER_SINGLE_VIDEO = 1053; + const APP_STUDIO_EDIT_PLAYER_PLAYLIST = 1054; + const APP_STUDIO_EDIT_PLAYER_MULTI_TAB_PLAYLIST = 1055; + const APP_STUDIO_DUPLICATE_PLAYER = 1056; + const CONTENT_CONTENT_GO_TO_PAGE = 1057; + const CONTENT_DELETE_ITEM = 1058; + const CONTENT_DELETE_MIX = 1059; + const REPORTS_AND_ANALYTICS_BANDWIDTH_USAGE_TAB = 1070; + const REPORTS_AND_ANALYTICS_CONTENT_REPORTS_TAB = 1071; + const REPORTS_AND_ANALYTICS_USERS_AND_COMMUNITY_REPORTS_TAB = 1072; + const REPORTS_AND_ANALYTICS_TOP_CONTRIBUTORS = 1073; + const REPORTS_AND_ANALYTICS_MAP_OVERLAYS = 1074; + const REPORTS_AND_ANALYTICS_TOP_SYNDICATIONS = 1075; + const REPORTS_AND_ANALYTICS_TOP_CONTENT = 1076; + const REPORTS_AND_ANALYTICS_CONTENT_DROPOFF = 1077; + const REPORTS_AND_ANALYTICS_CONTENT_INTERACTIONS = 1078; + const REPORTS_AND_ANALYTICS_CONTENT_CONTRIBUTIONS = 1079; + const REPORTS_AND_ANALYTICS_VIDEO_DRILL_DOWN = 1080; + const REPORTS_AND_ANALYTICS_CONTENT_DRILL_DOWN_INTERACTION = 1081; + const REPORTS_AND_ANALYTICS_CONTENT_CONTRIBUTIONS_DRILLDOWN = 1082; + const REPORTS_AND_ANALYTICS_VIDEO_DRILL_DOWN_DROPOFF = 1083; + const REPORTS_AND_ANALYTICS_MAP_OVERLAYS_DRILLDOWN = 1084; + const REPORTS_AND_ANALYTICS_TOP_SYNDICATIONS_DRILL_DOWN = 1085; + const REPORTS_AND_ANALYTICS_BANDWIDTH_USAGE_VIEW_MONTHLY = 1086; + const REPORTS_AND_ANALYTICS_BANDWIDTH_USAGE_VIEW_YEARLY = 1087; + const CONTENT_ENTRY_DRILLDOWN = 1088; + const CONTENT_OPEN_PREVIEW_AND_EMBED = 1089; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaStorageProfileDeliveryStatus +{ + const ACTIVE = 1; + const BLOCKED = 2; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaStorageProfileReadyBehavior +{ + const NO_IMPACT = 0; + const REQUIRED = 1; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaStorageProfileStatus +{ + const DISABLED = 1; + const AUTOMATIC = 2; + const MANUAL = 3; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaSyndicationFeedStatus +{ + const DELETED = -1; + const ACTIVE = 1; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaSyndicationFeedType +{ + const GOOGLE_VIDEO = 1; + const YAHOO = 2; + const ITUNES = 3; + const TUBE_MOGUL = 4; + const KALTURA = 5; + const KALTURA_XSLT = 6; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaThumbAssetStatus +{ + const ERROR = -1; + const QUEUED = 0; + const CAPTURING = 1; + const READY = 2; + const DELETED = 3; + const IMPORTING = 7; + const EXPORTING = 9; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaThumbCropType +{ + const RESIZE = 1; + const RESIZE_WITH_PADDING = 2; + const CROP = 3; + const CROP_FROM_TOP = 4; + const RESIZE_WITH_FORCE = 5; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaUiConfCreationMode +{ + const WIZARD = 2; + const ADVANCED = 3; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaUiConfObjType +{ + const PLAYER = 1; + const CONTRIBUTION_WIZARD = 2; + const SIMPLE_EDITOR = 3; + const ADVANCED_EDITOR = 4; + const PLAYLIST = 5; + const APP_STUDIO = 6; + const KRECORD = 7; + const PLAYER_V3 = 8; + const KMC_ACCOUNT = 9; + const KMC_ANALYTICS = 10; + const KMC_CONTENT = 11; + const KMC_DASHBOARD = 12; + const KMC_LOGIN = 13; + const PLAYER_SL = 14; + const CLIENTSIDE_ENCODER = 15; + const KMC_GENERAL = 16; + const KMC_ROLES_AND_PERMISSIONS = 17; + const CLIPPER = 18; + const KSR = 19; + const KUPLOAD = 20; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaUpdateMethodType +{ + const MANUAL = 0; + const AUTOMATIC = 1; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaUploadErrorCode +{ + const NO_ERROR = 0; + const GENERAL_ERROR = 1; + const PARTIAL_UPLOAD = 2; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaUploadTokenStatus +{ + const PENDING = 0; + const PARTIAL_UPLOAD = 1; + const FULL_UPLOAD = 2; + const CLOSED = 3; + const TIMED_OUT = 4; + const DELETED = 5; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaUserAgentRestrictionType +{ + const RESTRICT_LIST = 0; + const ALLOW_LIST = 1; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaUserJoinPolicyType +{ + const AUTO_JOIN = 1; + const REQUEST_TO_JOIN = 2; + const NOT_ALLOWED = 3; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaUserRoleStatus +{ + const ACTIVE = 1; + const BLOCKED = 2; + const DELETED = 3; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaUserStatus +{ + const BLOCKED = 0; + const ACTIVE = 1; + const DELETED = 2; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaWidgetSecurityType +{ + const NONE = 1; + const TIMEHASH = 2; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaAccessControlOrderBy +{ + const CREATED_AT_ASC = "+createdAt"; + const CREATED_AT_DESC = "-createdAt"; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaAccessControlProfileOrderBy +{ + const CREATED_AT_ASC = "+createdAt"; + const UPDATED_AT_ASC = "+updatedAt"; + const CREATED_AT_DESC = "-createdAt"; + const UPDATED_AT_DESC = "-updatedAt"; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaAdminUserOrderBy +{ + const CREATED_AT_ASC = "+createdAt"; + const ID_ASC = "+id"; + const CREATED_AT_DESC = "-createdAt"; + const ID_DESC = "-id"; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaAkamaiUniversalStreamType +{ + const HD_IPHONE_IPAD_LIVE = "HD iPhone/iPad Live"; + const UNIVERSAL_STREAMING_LIVE = "Universal Streaming Live"; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaAmazonS3StorageProfileFilesPermissionLevel +{ + const ACL_AUTHENTICATED_READ = "authenticated-read"; + const ACL_PRIVATE = "private"; + const ACL_PUBLIC_READ = "public-read"; + const ACL_PUBLIC_READ_WRITE = "public-read-write"; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaAmazonS3StorageProfileOrderBy +{ + const CREATED_AT_ASC = "+createdAt"; + const UPDATED_AT_ASC = "+updatedAt"; + const CREATED_AT_DESC = "-createdAt"; + const UPDATED_AT_DESC = "-updatedAt"; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaApiActionPermissionItemOrderBy +{ + const CREATED_AT_ASC = "+createdAt"; + const ID_ASC = "+id"; + const UPDATED_AT_ASC = "+updatedAt"; + const CREATED_AT_DESC = "-createdAt"; + const ID_DESC = "-id"; + const UPDATED_AT_DESC = "-updatedAt"; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaApiParameterPermissionItemAction +{ + const USAGE = "all"; + const INSERT = "insert"; + const READ = "read"; + const UPDATE = "update"; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaApiParameterPermissionItemOrderBy +{ + const CREATED_AT_ASC = "+createdAt"; + const ID_ASC = "+id"; + const UPDATED_AT_ASC = "+updatedAt"; + const CREATED_AT_DESC = "-createdAt"; + const ID_DESC = "-id"; + const UPDATED_AT_DESC = "-updatedAt"; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaAssetOrderBy +{ + const CREATED_AT_ASC = "+createdAt"; + const DELETED_AT_ASC = "+deletedAt"; + const SIZE_ASC = "+size"; + const UPDATED_AT_ASC = "+updatedAt"; + const CREATED_AT_DESC = "-createdAt"; + const DELETED_AT_DESC = "-deletedAt"; + const SIZE_DESC = "-size"; + const UPDATED_AT_DESC = "-updatedAt"; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaAssetParamsOrderBy +{ +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaAssetParamsOutputOrderBy +{ +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaAssetType +{ + const ATTACHMENT = "attachment.Attachment"; + const CAPTION = "caption.Caption"; + const DOCUMENT = "document.Document"; + const IMAGE = "document.Image"; + const PDF = "document.PDF"; + const SWF = "document.SWF"; + const WIDEVINE_FLAVOR = "widevine.WidevineFlavor"; + const FLAVOR = "1"; + const THUMBNAIL = "2"; + const LIVE = "3"; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaAudioCodec +{ + const NONE = ""; + const AAC = "aac"; + const AACHE = "aache"; + const AC3 = "ac3"; + const AMRNB = "amrnb"; + const COPY = "copy"; + const MP3 = "mp3"; + const MPEG2 = "mpeg2"; + const PCM = "pcm"; + const VORBIS = "vorbis"; + const WMA = "wma"; + const WMAPRO = "wmapro"; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaBaseEntryOrderBy +{ + const CREATED_AT_ASC = "+createdAt"; + const END_DATE_ASC = "+endDate"; + const MODERATION_COUNT_ASC = "+moderationCount"; + const NAME_ASC = "+name"; + const PARTNER_SORT_VALUE_ASC = "+partnerSortValue"; + const RANK_ASC = "+rank"; + const RECENT_ASC = "+recent"; + const START_DATE_ASC = "+startDate"; + const TOTAL_RANK_ASC = "+totalRank"; + const UPDATED_AT_ASC = "+updatedAt"; + const WEIGHT_ASC = "+weight"; + const CREATED_AT_DESC = "-createdAt"; + const END_DATE_DESC = "-endDate"; + const MODERATION_COUNT_DESC = "-moderationCount"; + const NAME_DESC = "-name"; + const PARTNER_SORT_VALUE_DESC = "-partnerSortValue"; + const RANK_DESC = "-rank"; + const RECENT_DESC = "-recent"; + const START_DATE_DESC = "-startDate"; + const TOTAL_RANK_DESC = "-totalRank"; + const UPDATED_AT_DESC = "-updatedAt"; + const WEIGHT_DESC = "-weight"; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaBaseSyndicationFeedOrderBy +{ + const CREATED_AT_ASC = "+createdAt"; + const NAME_ASC = "+name"; + const PLAYLIST_ID_ASC = "+playlistId"; + const TYPE_ASC = "+type"; + const UPDATED_AT_ASC = "+updatedAt"; + const CREATED_AT_DESC = "-createdAt"; + const NAME_DESC = "-name"; + const PLAYLIST_ID_DESC = "-playlistId"; + const TYPE_DESC = "-type"; + const UPDATED_AT_DESC = "-updatedAt"; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaBatchJobOrderBy +{ + const CREATED_AT_ASC = "+createdAt"; + const ESTIMATED_EFFORT_ASC = "+estimatedEffort"; + const EXECUTION_ATTEMPTS_ASC = "+executionAttempts"; + const FINISH_TIME_ASC = "+finishTime"; + const LOCK_VERSION_ASC = "+lockVersion"; + const PRIORITY_ASC = "+priority"; + const QUEUE_TIME_ASC = "+queueTime"; + const STATUS_ASC = "+status"; + const UPDATED_AT_ASC = "+updatedAt"; + const CREATED_AT_DESC = "-createdAt"; + const ESTIMATED_EFFORT_DESC = "-estimatedEffort"; + const EXECUTION_ATTEMPTS_DESC = "-executionAttempts"; + const FINISH_TIME_DESC = "-finishTime"; + const LOCK_VERSION_DESC = "-lockVersion"; + const PRIORITY_DESC = "-priority"; + const QUEUE_TIME_DESC = "-queueTime"; + const STATUS_DESC = "-status"; + const UPDATED_AT_DESC = "-updatedAt"; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaBatchJobType +{ + const PARSE_CAPTION_ASSET = "captionSearch.parseCaptionAsset"; + const DISTRIBUTION_DELETE = "contentDistribution.DistributionDelete"; + const DISTRIBUTION_DISABLE = "contentDistribution.DistributionDisable"; + const DISTRIBUTION_ENABLE = "contentDistribution.DistributionEnable"; + const DISTRIBUTION_FETCH_REPORT = "contentDistribution.DistributionFetchReport"; + const DISTRIBUTION_SUBMIT = "contentDistribution.DistributionSubmit"; + const DISTRIBUTION_SYNC = "contentDistribution.DistributionSync"; + const DISTRIBUTION_UPDATE = "contentDistribution.DistributionUpdate"; + const CONVERT = "0"; + const DROP_FOLDER_CONTENT_PROCESSOR = "dropFolder.DropFolderContentProcessor"; + const DROP_FOLDER_WATCHER = "dropFolder.DropFolderWatcher"; + const EVENT_NOTIFICATION_HANDLER = "eventNotification.EventNotificationHandler"; + const INDEX_TAGS = "tagSearch.IndexTagsByPrivacyContext"; + const TAG_RESOLVE = "tagSearch.TagResolve"; + const VIRUS_SCAN = "virusScan.VirusScan"; + const WIDEVINE_REPOSITORY_SYNC = "widevine.WidevineRepositorySync"; + const IMPORT = "1"; + const DELETE = "2"; + const FLATTEN = "3"; + const BULKUPLOAD = "4"; + const DVDCREATOR = "5"; + const DOWNLOAD = "6"; + const OOCONVERT = "7"; + const CONVERT_PROFILE = "10"; + const POSTCONVERT = "11"; + const EXTRACT_MEDIA = "14"; + const MAIL = "15"; + const NOTIFICATION = "16"; + const CLEANUP = "17"; + const SCHEDULER_HELPER = "18"; + const BULKDOWNLOAD = "19"; + const DB_CLEANUP = "20"; + const PROVISION_PROVIDE = "21"; + const CONVERT_COLLECTION = "22"; + const STORAGE_EXPORT = "23"; + const PROVISION_DELETE = "24"; + const STORAGE_DELETE = "25"; + const EMAIL_INGESTION = "26"; + const METADATA_IMPORT = "27"; + const METADATA_TRANSFORM = "28"; + const FILESYNC_IMPORT = "29"; + const CAPTURE_THUMB = "30"; + const DELETE_FILE = "31"; + const INDEX = "32"; + const MOVE_CATEGORY_ENTRIES = "33"; + const COPY = "34"; + const CONCAT = "35"; + const CONVERT_LIVE_SEGMENT = "36"; + const COPY_PARTNER = "37"; + const VALIDATE_LIVE_MEDIA_SERVERS = "38"; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaBulkUploadAction +{ + const ADD = "1"; + const UPDATE = "2"; + const DELETE = "3"; + const REPLACE = "4"; + const TRANSFORM_XSLT = "5"; + const ADD_OR_UPDATE = "6"; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaBulkUploadObjectType +{ + const ENTRY = "1"; + const CATEGORY = "2"; + const USER = "3"; + const CATEGORY_USER = "4"; + const CATEGORY_ENTRY = "5"; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaBulkUploadOrderBy +{ +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaBulkUploadResultObjectType +{ + const ENTRY = "1"; + const CATEGORY = "2"; + const USER = "3"; + const CATEGORY_USER = "4"; + const CATEGORY_ENTRY = "5"; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaBulkUploadResultStatus +{ + const ERROR = "1"; + const OK = "2"; + const IN_PROGRESS = "3"; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaBulkUploadType +{ + const CSV = "bulkUploadCsv.CSV"; + const FILTER = "bulkUploadFilter.FILTER"; + const XML = "bulkUploadXml.XML"; + const DROP_FOLDER_XML = "dropFolderXmlBulkUpload.DROP_FOLDER_XML"; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaCategoryEntryOrderBy +{ + const CREATED_AT_ASC = "+createdAt"; + const CREATED_AT_DESC = "-createdAt"; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaCategoryIdentifierField +{ + const FULL_NAME = "fullName"; + const ID = "id"; + const REFERENCE_ID = "referenceId"; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaCategoryOrderBy +{ + const CREATED_AT_ASC = "+createdAt"; + const DEPTH_ASC = "+depth"; + const DIRECT_ENTRIES_COUNT_ASC = "+directEntriesCount"; + const DIRECT_SUB_CATEGORIES_COUNT_ASC = "+directSubCategoriesCount"; + const ENTRIES_COUNT_ASC = "+entriesCount"; + const FULL_NAME_ASC = "+fullName"; + const MEMBERS_COUNT_ASC = "+membersCount"; + const NAME_ASC = "+name"; + const PARTNER_SORT_VALUE_ASC = "+partnerSortValue"; + const UPDATED_AT_ASC = "+updatedAt"; + const CREATED_AT_DESC = "-createdAt"; + const DEPTH_DESC = "-depth"; + const DIRECT_ENTRIES_COUNT_DESC = "-directEntriesCount"; + const DIRECT_SUB_CATEGORIES_COUNT_DESC = "-directSubCategoriesCount"; + const ENTRIES_COUNT_DESC = "-entriesCount"; + const FULL_NAME_DESC = "-fullName"; + const MEMBERS_COUNT_DESC = "-membersCount"; + const NAME_DESC = "-name"; + const PARTNER_SORT_VALUE_DESC = "-partnerSortValue"; + const UPDATED_AT_DESC = "-updatedAt"; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaCategoryUserOrderBy +{ + const CREATED_AT_ASC = "+createdAt"; + const UPDATED_AT_ASC = "+updatedAt"; + const CREATED_AT_DESC = "-createdAt"; + const UPDATED_AT_DESC = "-updatedAt"; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaConditionType +{ + const ABC_WATERMARK = "abcScreenersWatermarkAccessControl.abcWatermark"; + const EVENT_NOTIFICATION_FIELD = "eventNotification.BooleanField"; + const EVENT_NOTIFICATION_OBJECT_CHANGED = "eventNotification.ObjectChanged"; + const METADATA_FIELD_CHANGED = "metadata.FieldChanged"; + const METADATA_FIELD_COMPARE = "metadata.FieldCompare"; + const METADATA_FIELD_MATCH = "metadata.FieldMatch"; + const AUTHENTICATED = "1"; + const COUNTRY = "2"; + const IP_ADDRESS = "3"; + const SITE = "4"; + const USER_AGENT = "5"; + const FIELD_MATCH = "6"; + const FIELD_COMPARE = "7"; + const ASSET_PROPERTIES_COMPARE = "8"; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaContainerFormat +{ + const _3GP = "3gp"; + const APPLEHTTP = "applehttp"; + const AVI = "avi"; + const BMP = "bmp"; + const COPY = "copy"; + const FLV = "flv"; + const ISMV = "ismv"; + const JPG = "jpg"; + const MKV = "mkv"; + const MOV = "mov"; + const MP3 = "mp3"; + const MP4 = "mp4"; + const MPEG = "mpeg"; + const MPEGTS = "mpegts"; + const OGG = "ogg"; + const OGV = "ogv"; + const PDF = "pdf"; + const PNG = "png"; + const SWF = "swf"; + const WAV = "wav"; + const WEBM = "webm"; + const WMA = "wma"; + const WMV = "wmv"; + const WVM = "wvm"; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaContextType +{ + const PLAY = "1"; + const DOWNLOAD = "2"; + const THUMBNAIL = "3"; + const METADATA = "4"; + const EXPORT = "5"; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaControlPanelCommandOrderBy +{ + const CREATED_AT_ASC = "+createdAt"; + const UPDATED_AT_ASC = "+updatedAt"; + const CREATED_AT_DESC = "-createdAt"; + const UPDATED_AT_DESC = "-updatedAt"; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaConversionProfileAssetParamsOrderBy +{ +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaConversionProfileOrderBy +{ + const CREATED_AT_ASC = "+createdAt"; + const CREATED_AT_DESC = "-createdAt"; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaConversionProfileStatus +{ + const DISABLED = "1"; + const ENABLED = "2"; + const DELETED = "3"; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaConversionProfileType +{ + const MEDIA = "1"; + const LIVE_STREAM = "2"; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaDataEntryOrderBy +{ + const CREATED_AT_ASC = "+createdAt"; + const END_DATE_ASC = "+endDate"; + const MODERATION_COUNT_ASC = "+moderationCount"; + const NAME_ASC = "+name"; + const PARTNER_SORT_VALUE_ASC = "+partnerSortValue"; + const RANK_ASC = "+rank"; + const RECENT_ASC = "+recent"; + const START_DATE_ASC = "+startDate"; + const TOTAL_RANK_ASC = "+totalRank"; + const UPDATED_AT_ASC = "+updatedAt"; + const WEIGHT_ASC = "+weight"; + const CREATED_AT_DESC = "-createdAt"; + const END_DATE_DESC = "-endDate"; + const MODERATION_COUNT_DESC = "-moderationCount"; + const NAME_DESC = "-name"; + const PARTNER_SORT_VALUE_DESC = "-partnerSortValue"; + const RANK_DESC = "-rank"; + const RECENT_DESC = "-recent"; + const START_DATE_DESC = "-startDate"; + const TOTAL_RANK_DESC = "-totalRank"; + const UPDATED_AT_DESC = "-updatedAt"; + const WEIGHT_DESC = "-weight"; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaDurationType +{ + const LONG = "long"; + const MEDIUM = "medium"; + const NOT_AVAILABLE = "notavailable"; + const SHORT = "short"; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaDynamicEnum +{ +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaEntryIdentifierField +{ + const ID = "id"; + const REFERENCE_ID = "referenceId"; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaEntryReplacementStatus +{ + const NONE = "0"; + const APPROVED_BUT_NOT_READY = "1"; + const READY_BUT_NOT_APPROVED = "2"; + const NOT_READY_AND_NOT_APPROVED = "3"; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaEntryStatus +{ + const ERROR_IMPORTING = "-2"; + const ERROR_CONVERTING = "-1"; + const SCAN_FAILURE = "virusScan.ScanFailure"; + const IMPORT = "0"; + const INFECTED = "virusScan.Infected"; + const PRECONVERT = "1"; + const READY = "2"; + const DELETED = "3"; + const PENDING = "4"; + const MODERATE = "5"; + const BLOCKED = "6"; + const NO_CONTENT = "7"; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaEntryType +{ + const AUTOMATIC = "-1"; + const EXTERNAL_MEDIA = "externalMedia.externalMedia"; + const MEDIA_CLIP = "1"; + const MIX = "2"; + const PLAYLIST = "5"; + const DATA = "6"; + const LIVE_STREAM = "7"; + const LIVE_CHANNEL = "8"; + const DOCUMENT = "10"; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaFileAssetObjectType +{ + const UI_CONF = "2"; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaFileAssetOrderBy +{ + const CREATED_AT_ASC = "+createdAt"; + const UPDATED_AT_ASC = "+updatedAt"; + const CREATED_AT_DESC = "-createdAt"; + const UPDATED_AT_DESC = "-updatedAt"; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaFileAssetStatus +{ + const PENDING = "0"; + const UPLOADING = "1"; + const READY = "2"; + const DELETED = "3"; + const ERROR = "4"; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaFileSyncObjectType +{ + const DISTRIBUTION_PROFILE = "contentDistribution.DistributionProfile"; + const ENTRY_DISTRIBUTION = "contentDistribution.EntryDistribution"; + const GENERIC_DISTRIBUTION_ACTION = "contentDistribution.GenericDistributionAction"; + const EMAIL_NOTIFICATION_TEMPLATE = "emailNotification.EmailNotificationTemplate"; + const HTTP_NOTIFICATION_TEMPLATE = "httpNotification.HttpNotificationTemplate"; + const ENTRY = "1"; + const UICONF = "2"; + const BATCHJOB = "3"; + const ASSET = "4"; + const FLAVOR_ASSET = "4"; + const METADATA = "5"; + const METADATA_PROFILE = "6"; + const SYNDICATION_FEED = "7"; + const CONVERSION_PROFILE = "8"; + const FILE_ASSET = "9"; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaFlavorAssetOrderBy +{ + const CREATED_AT_ASC = "+createdAt"; + const DELETED_AT_ASC = "+deletedAt"; + const SIZE_ASC = "+size"; + const UPDATED_AT_ASC = "+updatedAt"; + const CREATED_AT_DESC = "-createdAt"; + const DELETED_AT_DESC = "-deletedAt"; + const SIZE_DESC = "-size"; + const UPDATED_AT_DESC = "-updatedAt"; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaFlavorParamsOrderBy +{ +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaFlavorParamsOutputOrderBy +{ +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaGenericSyndicationFeedOrderBy +{ + const CREATED_AT_ASC = "+createdAt"; + const NAME_ASC = "+name"; + const PLAYLIST_ID_ASC = "+playlistId"; + const TYPE_ASC = "+type"; + const UPDATED_AT_ASC = "+updatedAt"; + const CREATED_AT_DESC = "-createdAt"; + const NAME_DESC = "-name"; + const PLAYLIST_ID_DESC = "-playlistId"; + const TYPE_DESC = "-type"; + const UPDATED_AT_DESC = "-updatedAt"; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaGenericXsltSyndicationFeedOrderBy +{ + const CREATED_AT_ASC = "+createdAt"; + const NAME_ASC = "+name"; + const PLAYLIST_ID_ASC = "+playlistId"; + const TYPE_ASC = "+type"; + const UPDATED_AT_ASC = "+updatedAt"; + const CREATED_AT_DESC = "-createdAt"; + const NAME_DESC = "-name"; + const PLAYLIST_ID_DESC = "-playlistId"; + const TYPE_DESC = "-type"; + const UPDATED_AT_DESC = "-updatedAt"; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaGeoCoderType +{ + const KALTURA = "1"; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaGoogleSyndicationFeedAdultValues +{ + const NO = "No"; + const YES = "Yes"; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaGoogleVideoSyndicationFeedOrderBy +{ + const CREATED_AT_ASC = "+createdAt"; + const NAME_ASC = "+name"; + const PLAYLIST_ID_ASC = "+playlistId"; + const TYPE_ASC = "+type"; + const UPDATED_AT_ASC = "+updatedAt"; + const CREATED_AT_DESC = "-createdAt"; + const NAME_DESC = "-name"; + const PLAYLIST_ID_DESC = "-playlistId"; + const TYPE_DESC = "-type"; + const UPDATED_AT_DESC = "-updatedAt"; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaITunesSyndicationFeedAdultValues +{ + const CLEAN = "clean"; + const NO = "no"; + const YES = "yes"; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaITunesSyndicationFeedCategories +{ + const ARTS = "Arts"; + const ARTS_DESIGN = "Arts/Design"; + const ARTS_FASHION_BEAUTY = "Arts/Fashion & Beauty"; + const ARTS_FOOD = "Arts/Food"; + const ARTS_LITERATURE = "Arts/Literature"; + const ARTS_PERFORMING_ARTS = "Arts/Performing Arts"; + const ARTS_VISUAL_ARTS = "Arts/Visual Arts"; + const BUSINESS = "Business"; + const BUSINESS_BUSINESS_NEWS = "Business/Business News"; + const BUSINESS_CAREERS = "Business/Careers"; + const BUSINESS_INVESTING = "Business/Investing"; + const BUSINESS_MANAGEMENT_MARKETING = "Business/Management & Marketing"; + const BUSINESS_SHOPPING = "Business/Shopping"; + const COMEDY = "Comedy"; + const EDUCATION = "Education"; + const EDUCATION_TECHNOLOGY = "Education/Education Technology"; + const EDUCATION_HIGHER_EDUCATION = "Education/Higher Education"; + const EDUCATION_K_12 = "Education/K-12"; + const EDUCATION_LANGUAGE_COURSES = "Education/Language Courses"; + const EDUCATION_TRAINING = "Education/Training"; + const GAMES_HOBBIES = "Games & Hobbies"; + const GAMES_HOBBIES_AUTOMOTIVE = "Games & Hobbies/Automotive"; + const GAMES_HOBBIES_AVIATION = "Games & Hobbies/Aviation"; + const GAMES_HOBBIES_HOBBIES = "Games & Hobbies/Hobbies"; + const GAMES_HOBBIES_OTHER_GAMES = "Games & Hobbies/Other Games"; + const GAMES_HOBBIES_VIDEO_GAMES = "Games & Hobbies/Video Games"; + const GOVERNMENT_ORGANIZATIONS = "Government & Organizations"; + const GOVERNMENT_ORGANIZATIONS_LOCAL = "Government & Organizations/Local"; + const GOVERNMENT_ORGANIZATIONS_NATIONAL = "Government & Organizations/National"; + const GOVERNMENT_ORGANIZATIONS_NON_PROFIT = "Government & Organizations/Non-Profit"; + const GOVERNMENT_ORGANIZATIONS_REGIONAL = "Government & Organizations/Regional"; + const HEALTH = "Health"; + const HEALTH_ALTERNATIVE_HEALTH = "Health/Alternative Health"; + const HEALTH_FITNESS_NUTRITION = "Health/Fitness & Nutrition"; + const HEALTH_SELF_HELP = "Health/Self-Help"; + const HEALTH_SEXUALITY = "Health/Sexuality"; + const KIDS_FAMILY = "Kids & Family"; + const MUSIC = "Music"; + const NEWS_POLITICS = "News & Politics"; + const RELIGION_SPIRITUALITY = "Religion & Spirituality"; + const RELIGION_SPIRITUALITY_BUDDHISM = "Religion & Spirituality/Buddhism"; + const RELIGION_SPIRITUALITY_CHRISTIANITY = "Religion & Spirituality/Christianity"; + const RELIGION_SPIRITUALITY_HINDUISM = "Religion & Spirituality/Hinduism"; + const RELIGION_SPIRITUALITY_ISLAM = "Religion & Spirituality/Islam"; + const RELIGION_SPIRITUALITY_JUDAISM = "Religion & Spirituality/Judaism"; + const RELIGION_SPIRITUALITY_OTHER = "Religion & Spirituality/Other"; + const RELIGION_SPIRITUALITY_SPIRITUALITY = "Religion & Spirituality/Spirituality"; + const SCIENCE_MEDICINE = "Science & Medicine"; + const SCIENCE_MEDICINE_MEDICINE = "Science & Medicine/Medicine"; + const SCIENCE_MEDICINE_NATURAL_SCIENCES = "Science & Medicine/Natural Sciences"; + const SCIENCE_MEDICINE_SOCIAL_SCIENCES = "Science & Medicine/Social Sciences"; + const SOCIETY_CULTURE = "Society & Culture"; + const SOCIETY_CULTURE_HISTORY = "Society & Culture/History"; + const SOCIETY_CULTURE_PERSONAL_JOURNALS = "Society & Culture/Personal Journals"; + const SOCIETY_CULTURE_PHILOSOPHY = "Society & Culture/Philosophy"; + const SOCIETY_CULTURE_PLACES_TRAVEL = "Society & Culture/Places & Travel"; + const SPORTS_RECREATION = "Sports & Recreation"; + const SPORTS_RECREATION_AMATEUR = "Sports & Recreation/Amateur"; + const SPORTS_RECREATION_COLLEGE_HIGH_SCHOOL = "Sports & Recreation/College & High School"; + const SPORTS_RECREATION_OUTDOOR = "Sports & Recreation/Outdoor"; + const SPORTS_RECREATION_PROFESSIONAL = "Sports & Recreation/Professional"; + const TV_FILM = "TV & Film"; + const TECHNOLOGY = "Technology"; + const TECHNOLOGY_GADGETS = "Technology/Gadgets"; + const TECHNOLOGY_PODCASTING = "Technology/Podcasting"; + const TECHNOLOGY_SOFTWARE_HOW_TO = "Technology/Software How-To"; + const TECHNOLOGY_TECH_NEWS = "Technology/Tech News"; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaITunesSyndicationFeedOrderBy +{ + const CREATED_AT_ASC = "+createdAt"; + const NAME_ASC = "+name"; + const PLAYLIST_ID_ASC = "+playlistId"; + const TYPE_ASC = "+type"; + const UPDATED_AT_ASC = "+updatedAt"; + const CREATED_AT_DESC = "-createdAt"; + const NAME_DESC = "-name"; + const PLAYLIST_ID_DESC = "-playlistId"; + const TYPE_DESC = "-type"; + const UPDATED_AT_DESC = "-updatedAt"; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaLanguage +{ + const AB = "Abkhazian"; + const AA = "Afar"; + const AF = "Afrikaans"; + const SQ = "Albanian"; + const AM = "Amharic"; + const AR = "Arabic"; + const HY = "Armenian"; + const AS_ = "Assamese"; + const AY = "Aymara"; + const AZ = "Azerbaijani"; + const BA = "Bashkir"; + const EU = "Basque"; + const BN = "Bengali (Bangla)"; + const DZ = "Bhutani"; + const BH = "Bihari"; + const BI = "Bislama"; + const BR = "Breton"; + const BG = "Bulgarian"; + const MY = "Burmese"; + const BE = "Byelorussian (Belarusian)"; + const KM = "Cambodian"; + const CA = "Catalan"; + const ZH = "Chinese"; + const CO = "Corsican"; + const HR = "Croatian"; + const CS = "Czech"; + const DA = "Danish"; + const NL = "Dutch"; + const EN = "English"; + const EO = "Esperanto"; + const ET = "Estonian"; + const FO = "Faeroese"; + const FA = "Farsi"; + const FJ = "Fiji"; + const FI = "Finnish"; + const FR = "French"; + const FY = "Frisian"; + const GV = "Gaelic (Manx)"; + const GD = "Gaelic (Scottish)"; + const GL = "Galician"; + const KA = "Georgian"; + const DE = "German"; + const EL = "Greek"; + const KL = "Greenlandic"; + const GN = "Guarani"; + const GU = "Gujarati"; + const HA = "Hausa"; + const IW = "Hebrew"; + const HE = "Hebrew"; + const HI = "Hindi"; + const HU = "Hungarian"; + const IS = "Icelandic"; + const IN = "Indonesian"; + const ID = "Indonesian"; + const IA = "Interlingua"; + const IE = "Interlingue"; + const IU = "Inuktitut"; + const IK = "Inupiak"; + const GA = "Irish"; + const IT = "Italian"; + const JA = "Japanese"; + const JV = "Javanese"; + const KN = "Kannada"; + const KS = "Kashmiri"; + const KK = "Kazakh"; + const RW = "Kinyarwanda (Ruanda)"; + const KY = "Kirghiz"; + const RN = "Kirundi (Rundi)"; + const KO = "Korean"; + const KU = "Kurdish"; + const LO = "Laothian"; + const LA = "Latin"; + const LV = "Latvian (Lettish)"; + const LI = "Limburgish ( Limburger)"; + const LN = "Lingala"; + const LT = "Lithuanian"; + const MK = "Macedonian"; + const MG = "Malagasy"; + const MS = "Malay"; + const ML = "Malayalam"; + const MT = "Maltese"; + const MI = "Maori"; + const MR = "Marathi"; + const MO = "Moldavian"; + const MN = "Mongolian"; + const NA = "Nauru"; + const NE = "Nepali"; + const NO = "Norwegian"; + const OC = "Occitan"; + const OR_ = "Oriya"; + const OM = "Oromo (Afan, Galla)"; + const PS = "Pashto (Pushto)"; + const PL = "Polish"; + const PT = "Portuguese"; + const PA = "Punjabi"; + const QU = "Quechua"; + const RM = "Rhaeto-Romance"; + const RO = "Romanian"; + const RU = "Russian"; + const SM = "Samoan"; + const SG = "Sangro"; + const SA = "Sanskrit"; + const SR = "Serbian"; + const SH = "Serbo-Croatian"; + const ST = "Sesotho"; + const TN = "Setswana"; + const SN = "Shona"; + const SD = "Sindhi"; + const SI = "Sinhalese"; + const SS = "Siswati"; + const SK = "Slovak"; + const SL = "Slovenian"; + const SO = "Somali"; + const ES = "Spanish"; + const SU = "Sundanese"; + const SW = "Swahili (Kiswahili)"; + const SV = "Swedish"; + const TL = "Tagalog"; + const TG = "Tajik"; + const TA = "Tamil"; + const TT = "Tatar"; + const TE = "Telugu"; + const TH = "Thai"; + const BO = "Tibetan"; + const TI = "Tigrinya"; + const TO = "Tonga"; + const TS = "Tsonga"; + const TR = "Turkish"; + const TK = "Turkmen"; + const TW = "Twi"; + const UG = "Uighur"; + const UK = "Ukrainian"; + const UR = "Urdu"; + const UZ = "Uzbek"; + const VI = "Vietnamese"; + const VO = "Volapuk"; + const CY = "Welsh"; + const WO = "Wolof"; + const XH = "Xhosa"; + const YI = "Yiddish"; + const JI = "Yiddish"; + const YO = "Yoruba"; + const ZU = "Zulu"; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaLanguageCode +{ + const AA = "aa"; + const AB = "ab"; + const AF = "af"; + const AM = "am"; + const AR = "ar"; + const AS_ = "as"; + const AY = "ay"; + const AZ = "az"; + const BA = "ba"; + const BE = "be"; + const BG = "bg"; + const BH = "bh"; + const BI = "bi"; + const BN = "bn"; + const BO = "bo"; + const BR = "br"; + const CA = "ca"; + const CO = "co"; + const CS = "cs"; + const CY = "cy"; + const DA = "da"; + const DE = "de"; + const DZ = "dz"; + const EL = "el"; + const EN = "en"; + const EO = "eo"; + const ES = "es"; + const ET = "et"; + const EU = "eu"; + const FA = "fa"; + const FI = "fi"; + const FJ = "fj"; + const FO = "fo"; + const FR = "fr"; + const FY = "fy"; + const GA = "ga"; + const GD = "gd"; + const GL = "gl"; + const GN = "gn"; + const GU = "gu"; + const GV = "gv"; + const HA = "ha"; + const HE = "he"; + const HI = "hi"; + const HR = "hr"; + const HU = "hu"; + const HY = "hy"; + const IA = "ia"; + const ID = "id"; + const IE = "ie"; + const IK = "ik"; + const IN = "in"; + const IS = "is"; + const IT = "it"; + const IU = "iu"; + const IW = "iw"; + const JA = "ja"; + const JI = "ji"; + const JV = "jv"; + const KA = "ka"; + const KK = "kk"; + const KL = "kl"; + const KM = "km"; + const KN = "kn"; + const KO = "ko"; + const KS = "ks"; + const KU = "ku"; + const KY = "ky"; + const LA = "la"; + const LI = "li"; + const LN = "ln"; + const LO = "lo"; + const LT = "lt"; + const LV = "lv"; + const MG = "mg"; + const MI = "mi"; + const MK = "mk"; + const ML = "ml"; + const MN = "mn"; + const MO = "mo"; + const MR = "mr"; + const MS = "ms"; + const MT = "mt"; + const MY = "my"; + const NA = "na"; + const NE = "ne"; + const NL = "nl"; + const NO = "no"; + const OC = "oc"; + const OM = "om"; + const OR_ = "or"; + const PA = "pa"; + const PL = "pl"; + const PS = "ps"; + const PT = "pt"; + const QU = "qu"; + const RM = "rm"; + const RN = "rn"; + const RO = "ro"; + const RU = "ru"; + const RW = "rw"; + const SA = "sa"; + const SD = "sd"; + const SG = "sg"; + const SH = "sh"; + const SI = "si"; + const SK = "sk"; + const SL = "sl"; + const SM = "sm"; + const SN = "sn"; + const SO = "so"; + const SQ = "sq"; + const SR = "sr"; + const SS = "ss"; + const ST = "st"; + const SU = "su"; + const SV = "sv"; + const SW = "sw"; + const TA = "ta"; + const TE = "te"; + const TG = "tg"; + const TH = "th"; + const TI = "ti"; + const TK = "tk"; + const TL = "tl"; + const TN = "tn"; + const TO = "to"; + const TR = "tr"; + const TS = "ts"; + const TT = "tt"; + const TW = "tw"; + const UG = "ug"; + const UK = "uk"; + const UR = "ur"; + const UZ = "uz"; + const VI = "vi"; + const VO = "vo"; + const WO = "wo"; + const XH = "xh"; + const YI = "yi"; + const YO = "yo"; + const ZH = "zh"; + const ZU = "zu"; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaLiveAssetOrderBy +{ + const CREATED_AT_ASC = "+createdAt"; + const DELETED_AT_ASC = "+deletedAt"; + const SIZE_ASC = "+size"; + const UPDATED_AT_ASC = "+updatedAt"; + const CREATED_AT_DESC = "-createdAt"; + const DELETED_AT_DESC = "-deletedAt"; + const SIZE_DESC = "-size"; + const UPDATED_AT_DESC = "-updatedAt"; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaLiveChannelOrderBy +{ + const CREATED_AT_ASC = "+createdAt"; + const DURATION_ASC = "+duration"; + const END_DATE_ASC = "+endDate"; + const LAST_PLAYED_AT_ASC = "+lastPlayedAt"; + const MEDIA_TYPE_ASC = "+mediaType"; + const MODERATION_COUNT_ASC = "+moderationCount"; + const NAME_ASC = "+name"; + const PARTNER_SORT_VALUE_ASC = "+partnerSortValue"; + const PLAYS_ASC = "+plays"; + const RANK_ASC = "+rank"; + const RECENT_ASC = "+recent"; + const START_DATE_ASC = "+startDate"; + const TOTAL_RANK_ASC = "+totalRank"; + const UPDATED_AT_ASC = "+updatedAt"; + const VIEWS_ASC = "+views"; + const WEIGHT_ASC = "+weight"; + const CREATED_AT_DESC = "-createdAt"; + const DURATION_DESC = "-duration"; + const END_DATE_DESC = "-endDate"; + const LAST_PLAYED_AT_DESC = "-lastPlayedAt"; + const MEDIA_TYPE_DESC = "-mediaType"; + const MODERATION_COUNT_DESC = "-moderationCount"; + const NAME_DESC = "-name"; + const PARTNER_SORT_VALUE_DESC = "-partnerSortValue"; + const PLAYS_DESC = "-plays"; + const RANK_DESC = "-rank"; + const RECENT_DESC = "-recent"; + const START_DATE_DESC = "-startDate"; + const TOTAL_RANK_DESC = "-totalRank"; + const UPDATED_AT_DESC = "-updatedAt"; + const VIEWS_DESC = "-views"; + const WEIGHT_DESC = "-weight"; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaLiveChannelSegmentOrderBy +{ + const CREATED_AT_ASC = "+createdAt"; + const START_TIME_ASC = "+startTime"; + const UPDATED_AT_ASC = "+updatedAt"; + const CREATED_AT_DESC = "-createdAt"; + const START_TIME_DESC = "-startTime"; + const UPDATED_AT_DESC = "-updatedAt"; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaLiveChannelSegmentStatus +{ + const ACTIVE = "2"; + const DELETED = "3"; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaLiveChannelSegmentTriggerType +{ + const CHANNEL_RELATIVE = "1"; + const ABSOLUTE_TIME = "2"; + const SEGMENT_START_RELATIVE = "3"; + const SEGMENT_END_RELATIVE = "4"; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaLiveChannelSegmentType +{ + const VIDEO_AND_AUDIO = "1"; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaLiveEntryOrderBy +{ + const CREATED_AT_ASC = "+createdAt"; + const DURATION_ASC = "+duration"; + const END_DATE_ASC = "+endDate"; + const LAST_PLAYED_AT_ASC = "+lastPlayedAt"; + const MEDIA_TYPE_ASC = "+mediaType"; + const MODERATION_COUNT_ASC = "+moderationCount"; + const NAME_ASC = "+name"; + const PARTNER_SORT_VALUE_ASC = "+partnerSortValue"; + const PLAYS_ASC = "+plays"; + const RANK_ASC = "+rank"; + const RECENT_ASC = "+recent"; + const START_DATE_ASC = "+startDate"; + const TOTAL_RANK_ASC = "+totalRank"; + const UPDATED_AT_ASC = "+updatedAt"; + const VIEWS_ASC = "+views"; + const WEIGHT_ASC = "+weight"; + const CREATED_AT_DESC = "-createdAt"; + const DURATION_DESC = "-duration"; + const END_DATE_DESC = "-endDate"; + const LAST_PLAYED_AT_DESC = "-lastPlayedAt"; + const MEDIA_TYPE_DESC = "-mediaType"; + const MODERATION_COUNT_DESC = "-moderationCount"; + const NAME_DESC = "-name"; + const PARTNER_SORT_VALUE_DESC = "-partnerSortValue"; + const PLAYS_DESC = "-plays"; + const RANK_DESC = "-rank"; + const RECENT_DESC = "-recent"; + const START_DATE_DESC = "-startDate"; + const TOTAL_RANK_DESC = "-totalRank"; + const UPDATED_AT_DESC = "-updatedAt"; + const VIEWS_DESC = "-views"; + const WEIGHT_DESC = "-weight"; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaLiveParamsOrderBy +{ +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaLiveStreamAdminEntryOrderBy +{ + const CREATED_AT_ASC = "+createdAt"; + const DURATION_ASC = "+duration"; + const END_DATE_ASC = "+endDate"; + const LAST_PLAYED_AT_ASC = "+lastPlayedAt"; + const MEDIA_TYPE_ASC = "+mediaType"; + const MODERATION_COUNT_ASC = "+moderationCount"; + const NAME_ASC = "+name"; + const PARTNER_SORT_VALUE_ASC = "+partnerSortValue"; + const PLAYS_ASC = "+plays"; + const RANK_ASC = "+rank"; + const RECENT_ASC = "+recent"; + const START_DATE_ASC = "+startDate"; + const TOTAL_RANK_ASC = "+totalRank"; + const UPDATED_AT_ASC = "+updatedAt"; + const VIEWS_ASC = "+views"; + const WEIGHT_ASC = "+weight"; + const CREATED_AT_DESC = "-createdAt"; + const DURATION_DESC = "-duration"; + const END_DATE_DESC = "-endDate"; + const LAST_PLAYED_AT_DESC = "-lastPlayedAt"; + const MEDIA_TYPE_DESC = "-mediaType"; + const MODERATION_COUNT_DESC = "-moderationCount"; + const NAME_DESC = "-name"; + const PARTNER_SORT_VALUE_DESC = "-partnerSortValue"; + const PLAYS_DESC = "-plays"; + const RANK_DESC = "-rank"; + const RECENT_DESC = "-recent"; + const START_DATE_DESC = "-startDate"; + const TOTAL_RANK_DESC = "-totalRank"; + const UPDATED_AT_DESC = "-updatedAt"; + const VIEWS_DESC = "-views"; + const WEIGHT_DESC = "-weight"; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaLiveStreamEntryOrderBy +{ + const CREATED_AT_ASC = "+createdAt"; + const DURATION_ASC = "+duration"; + const END_DATE_ASC = "+endDate"; + const LAST_PLAYED_AT_ASC = "+lastPlayedAt"; + const MEDIA_TYPE_ASC = "+mediaType"; + const MODERATION_COUNT_ASC = "+moderationCount"; + const NAME_ASC = "+name"; + const PARTNER_SORT_VALUE_ASC = "+partnerSortValue"; + const PLAYS_ASC = "+plays"; + const RANK_ASC = "+rank"; + const RECENT_ASC = "+recent"; + const START_DATE_ASC = "+startDate"; + const TOTAL_RANK_ASC = "+totalRank"; + const UPDATED_AT_ASC = "+updatedAt"; + const VIEWS_ASC = "+views"; + const WEIGHT_ASC = "+weight"; + const CREATED_AT_DESC = "-createdAt"; + const DURATION_DESC = "-duration"; + const END_DATE_DESC = "-endDate"; + const LAST_PLAYED_AT_DESC = "-lastPlayedAt"; + const MEDIA_TYPE_DESC = "-mediaType"; + const MODERATION_COUNT_DESC = "-moderationCount"; + const NAME_DESC = "-name"; + const PARTNER_SORT_VALUE_DESC = "-partnerSortValue"; + const PLAYS_DESC = "-plays"; + const RANK_DESC = "-rank"; + const RECENT_DESC = "-recent"; + const START_DATE_DESC = "-startDate"; + const TOTAL_RANK_DESC = "-totalRank"; + const UPDATED_AT_DESC = "-updatedAt"; + const VIEWS_DESC = "-views"; + const WEIGHT_DESC = "-weight"; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaMailType +{ + const MAIL_TYPE_KALTURA_NEWSLETTER = "10"; + const MAIL_TYPE_ADDED_TO_FAVORITES = "11"; + const MAIL_TYPE_ADDED_TO_CLIP_FAVORITES = "12"; + const MAIL_TYPE_NEW_COMMENT_IN_PROFILE = "13"; + const MAIL_TYPE_CLIP_ADDED_YOUR_KALTURA = "20"; + const MAIL_TYPE_VIDEO_ADDED = "21"; + const MAIL_TYPE_ROUGHCUT_CREATED = "22"; + const MAIL_TYPE_ADDED_KALTURA_TO_YOUR_FAVORITES = "23"; + const MAIL_TYPE_NEW_COMMENT_IN_KALTURA = "24"; + const MAIL_TYPE_CLIP_ADDED = "30"; + const MAIL_TYPE_VIDEO_CREATED = "31"; + const MAIL_TYPE_ADDED_KALTURA_TO_HIS_FAVORITES = "32"; + const MAIL_TYPE_NEW_COMMENT_IN_KALTURA_YOU_CONTRIBUTED = "33"; + const MAIL_TYPE_CLIP_CONTRIBUTED = "40"; + const MAIL_TYPE_ROUGHCUT_CREATED_SUBSCRIBED = "41"; + const MAIL_TYPE_ADDED_KALTURA_TO_HIS_FAVORITES_SUBSCRIBED = "42"; + const MAIL_TYPE_NEW_COMMENT_IN_KALTURA_YOU_SUBSCRIBED = "43"; + const MAIL_TYPE_REGISTER_CONFIRM = "50"; + const MAIL_TYPE_PASSWORD_RESET = "51"; + const MAIL_TYPE_LOGIN_MAIL_RESET = "52"; + const MAIL_TYPE_REGISTER_CONFIRM_VIDEO_SERVICE = "54"; + const MAIL_TYPE_VIDEO_READY = "60"; + const MAIL_TYPE_VIDEO_IS_READY = "62"; + const MAIL_TYPE_BULK_DOWNLOAD_READY = "63"; + const MAIL_TYPE_BULKUPLOAD_FINISHED = "64"; + const MAIL_TYPE_BULKUPLOAD_FAILED = "65"; + const MAIL_TYPE_BULKUPLOAD_ABORTED = "66"; + const MAIL_TYPE_NOTIFY_ERR = "70"; + const MAIL_TYPE_ACCOUNT_UPGRADE_CONFIRM = "80"; + const MAIL_TYPE_VIDEO_SERVICE_NOTICE = "81"; + const MAIL_TYPE_VIDEO_SERVICE_NOTICE_LIMIT_REACHED = "82"; + const MAIL_TYPE_VIDEO_SERVICE_NOTICE_ACCOUNT_LOCKED = "83"; + const MAIL_TYPE_VIDEO_SERVICE_NOTICE_ACCOUNT_DELETED = "84"; + const MAIL_TYPE_VIDEO_SERVICE_NOTICE_UPGRADE_OFFER = "85"; + const MAIL_TYPE_ACCOUNT_REACTIVE_CONFIRM = "86"; + const MAIL_TYPE_SYSTEM_USER_RESET_PASSWORD = "110"; + const MAIL_TYPE_SYSTEM_USER_RESET_PASSWORD_SUCCESS = "111"; + const MAIL_TYPE_SYSTEM_USER_NEW_PASSWORD = "112"; + const MAIL_TYPE_SYSTEM_USER_CREDENTIALS_SAVED = "113"; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaMediaEntryOrderBy +{ + const CREATED_AT_ASC = "+createdAt"; + const DURATION_ASC = "+duration"; + const END_DATE_ASC = "+endDate"; + const LAST_PLAYED_AT_ASC = "+lastPlayedAt"; + const MEDIA_TYPE_ASC = "+mediaType"; + const MODERATION_COUNT_ASC = "+moderationCount"; + const NAME_ASC = "+name"; + const PARTNER_SORT_VALUE_ASC = "+partnerSortValue"; + const PLAYS_ASC = "+plays"; + const RANK_ASC = "+rank"; + const RECENT_ASC = "+recent"; + const START_DATE_ASC = "+startDate"; + const TOTAL_RANK_ASC = "+totalRank"; + const UPDATED_AT_ASC = "+updatedAt"; + const VIEWS_ASC = "+views"; + const WEIGHT_ASC = "+weight"; + const CREATED_AT_DESC = "-createdAt"; + const DURATION_DESC = "-duration"; + const END_DATE_DESC = "-endDate"; + const LAST_PLAYED_AT_DESC = "-lastPlayedAt"; + const MEDIA_TYPE_DESC = "-mediaType"; + const MODERATION_COUNT_DESC = "-moderationCount"; + const NAME_DESC = "-name"; + const PARTNER_SORT_VALUE_DESC = "-partnerSortValue"; + const PLAYS_DESC = "-plays"; + const RANK_DESC = "-rank"; + const RECENT_DESC = "-recent"; + const START_DATE_DESC = "-startDate"; + const TOTAL_RANK_DESC = "-totalRank"; + const UPDATED_AT_DESC = "-updatedAt"; + const VIEWS_DESC = "-views"; + const WEIGHT_DESC = "-weight"; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaMediaFlavorParamsOrderBy +{ +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaMediaFlavorParamsOutputOrderBy +{ +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaMediaInfoOrderBy +{ +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaMediaParserType +{ + const MEDIAINFO = "0"; + const REMOTE_MEDIAINFO = "remoteMediaInfo.RemoteMediaInfo"; + const FFMPEG = "1"; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaMediaServerOrderBy +{ + const CREATED_AT_ASC = "+createdAt"; + const UPDATED_AT_ASC = "+updatedAt"; + const CREATED_AT_DESC = "-createdAt"; + const UPDATED_AT_DESC = "-updatedAt"; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaMixEntryOrderBy +{ + const CREATED_AT_ASC = "+createdAt"; + const DURATION_ASC = "+duration"; + const END_DATE_ASC = "+endDate"; + const LAST_PLAYED_AT_ASC = "+lastPlayedAt"; + const MODERATION_COUNT_ASC = "+moderationCount"; + const NAME_ASC = "+name"; + const PARTNER_SORT_VALUE_ASC = "+partnerSortValue"; + const PLAYS_ASC = "+plays"; + const RANK_ASC = "+rank"; + const RECENT_ASC = "+recent"; + const START_DATE_ASC = "+startDate"; + const TOTAL_RANK_ASC = "+totalRank"; + const UPDATED_AT_ASC = "+updatedAt"; + const VIEWS_ASC = "+views"; + const WEIGHT_ASC = "+weight"; + const CREATED_AT_DESC = "-createdAt"; + const DURATION_DESC = "-duration"; + const END_DATE_DESC = "-endDate"; + const LAST_PLAYED_AT_DESC = "-lastPlayedAt"; + const MODERATION_COUNT_DESC = "-moderationCount"; + const NAME_DESC = "-name"; + const PARTNER_SORT_VALUE_DESC = "-partnerSortValue"; + const PLAYS_DESC = "-plays"; + const RANK_DESC = "-rank"; + const RECENT_DESC = "-recent"; + const START_DATE_DESC = "-startDate"; + const TOTAL_RANK_DESC = "-totalRank"; + const UPDATED_AT_DESC = "-updatedAt"; + const VIEWS_DESC = "-views"; + const WEIGHT_DESC = "-weight"; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaModerationFlagStatus +{ + const PENDING = "1"; + const MODERATED = "2"; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaModerationObjectType +{ + const ENTRY = "2"; + const USER = "3"; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaPartnerOrderBy +{ + const ADMIN_EMAIL_ASC = "+adminEmail"; + const ADMIN_NAME_ASC = "+adminName"; + const CREATED_AT_ASC = "+createdAt"; + const ID_ASC = "+id"; + const NAME_ASC = "+name"; + const STATUS_ASC = "+status"; + const WEBSITE_ASC = "+website"; + const ADMIN_EMAIL_DESC = "-adminEmail"; + const ADMIN_NAME_DESC = "-adminName"; + const CREATED_AT_DESC = "-createdAt"; + const ID_DESC = "-id"; + const NAME_DESC = "-name"; + const STATUS_DESC = "-status"; + const WEBSITE_DESC = "-website"; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaPermissionItemOrderBy +{ + const CREATED_AT_ASC = "+createdAt"; + const ID_ASC = "+id"; + const UPDATED_AT_ASC = "+updatedAt"; + const CREATED_AT_DESC = "-createdAt"; + const ID_DESC = "-id"; + const UPDATED_AT_DESC = "-updatedAt"; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaPermissionItemType +{ + const API_ACTION_ITEM = "kApiActionPermissionItem"; + const API_PARAMETER_ITEM = "kApiParameterPermissionItem"; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaPermissionOrderBy +{ + const CREATED_AT_ASC = "+createdAt"; + const ID_ASC = "+id"; + const NAME_ASC = "+name"; + const UPDATED_AT_ASC = "+updatedAt"; + const CREATED_AT_DESC = "-createdAt"; + const ID_DESC = "-id"; + const NAME_DESC = "-name"; + const UPDATED_AT_DESC = "-updatedAt"; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaPlayableEntryOrderBy +{ + const CREATED_AT_ASC = "+createdAt"; + const DURATION_ASC = "+duration"; + const END_DATE_ASC = "+endDate"; + const LAST_PLAYED_AT_ASC = "+lastPlayedAt"; + const MODERATION_COUNT_ASC = "+moderationCount"; + const NAME_ASC = "+name"; + const PARTNER_SORT_VALUE_ASC = "+partnerSortValue"; + const PLAYS_ASC = "+plays"; + const RANK_ASC = "+rank"; + const RECENT_ASC = "+recent"; + const START_DATE_ASC = "+startDate"; + const TOTAL_RANK_ASC = "+totalRank"; + const UPDATED_AT_ASC = "+updatedAt"; + const VIEWS_ASC = "+views"; + const WEIGHT_ASC = "+weight"; + const CREATED_AT_DESC = "-createdAt"; + const DURATION_DESC = "-duration"; + const END_DATE_DESC = "-endDate"; + const LAST_PLAYED_AT_DESC = "-lastPlayedAt"; + const MODERATION_COUNT_DESC = "-moderationCount"; + const NAME_DESC = "-name"; + const PARTNER_SORT_VALUE_DESC = "-partnerSortValue"; + const PLAYS_DESC = "-plays"; + const RANK_DESC = "-rank"; + const RECENT_DESC = "-recent"; + const START_DATE_DESC = "-startDate"; + const TOTAL_RANK_DESC = "-totalRank"; + const UPDATED_AT_DESC = "-updatedAt"; + const VIEWS_DESC = "-views"; + const WEIGHT_DESC = "-weight"; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaPlaybackProtocol +{ + const APPLE_HTTP = "applehttp"; + const AUTO = "auto"; + const AKAMAI_HD = "hdnetwork"; + const AKAMAI_HDS = "hdnetworkmanifest"; + const HDS = "hds"; + const HLS = "hls"; + const HTTP = "http"; + const MPEG_DASH = "mpegdash"; + const RTMP = "rtmp"; + const RTSP = "rtsp"; + const SILVER_LIGHT = "sl"; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaPlaylistOrderBy +{ + const CREATED_AT_ASC = "+createdAt"; + const END_DATE_ASC = "+endDate"; + const MODERATION_COUNT_ASC = "+moderationCount"; + const NAME_ASC = "+name"; + const PARTNER_SORT_VALUE_ASC = "+partnerSortValue"; + const RANK_ASC = "+rank"; + const RECENT_ASC = "+recent"; + const START_DATE_ASC = "+startDate"; + const TOTAL_RANK_ASC = "+totalRank"; + const UPDATED_AT_ASC = "+updatedAt"; + const WEIGHT_ASC = "+weight"; + const CREATED_AT_DESC = "-createdAt"; + const END_DATE_DESC = "-endDate"; + const MODERATION_COUNT_DESC = "-moderationCount"; + const NAME_DESC = "-name"; + const PARTNER_SORT_VALUE_DESC = "-partnerSortValue"; + const RANK_DESC = "-rank"; + const RECENT_DESC = "-recent"; + const START_DATE_DESC = "-startDate"; + const TOTAL_RANK_DESC = "-totalRank"; + const UPDATED_AT_DESC = "-updatedAt"; + const WEIGHT_DESC = "-weight"; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaReportInterval +{ + const DAYS = "days"; + const MONTHS = "months"; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaReportOrderBy +{ + const CREATED_AT_ASC = "+createdAt"; + const CREATED_AT_DESC = "-createdAt"; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaRuleActionType +{ + const BLOCK = "1"; + const PREVIEW = "2"; + const LIMIT_FLAVORS = "3"; + const ADD_TO_STORAGE = "4"; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaSchemaType +{ + const BULK_UPLOAD_RESULT_XML = "bulkUploadXml.bulkUploadResultXML"; + const BULK_UPLOAD_XML = "bulkUploadXml.bulkUploadXML"; + const INGEST_API = "cuePoint.ingestAPI"; + const SERVE_API = "cuePoint.serveAPI"; + const DROP_FOLDER_XML = "dropFolderXmlBulkUpload.dropFolderXml"; + const SYNDICATION = "syndication"; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaSearchConditionComparison +{ + const EQUAL = "1"; + const GREATER_THAN = "2"; + const GREATER_THAN_OR_EQUAL = "3"; + const LESS_THAN = "4"; + const LESS_THAN_OR_EQUAL = "5"; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaSourceType +{ + const LIMELIGHT_LIVE = "limeLight.LIVE_STREAM"; + const VELOCIX_LIVE = "velocix.VELOCIX_LIVE"; + const FILE = "1"; + const WEBCAM = "2"; + const URL = "5"; + const SEARCH_PROVIDER = "6"; + const AKAMAI_LIVE = "29"; + const MANUAL_LIVE_STREAM = "30"; + const AKAMAI_UNIVERSAL_LIVE = "31"; + const LIVE_STREAM = "32"; + const LIVE_CHANNEL = "33"; + const RECORDED_LIVE = "34"; + const CLIP = "35"; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaStorageProfileOrderBy +{ + const CREATED_AT_ASC = "+createdAt"; + const UPDATED_AT_ASC = "+updatedAt"; + const CREATED_AT_DESC = "-createdAt"; + const UPDATED_AT_DESC = "-updatedAt"; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaStorageProfileProtocol +{ + const KONTIKI = "kontiki.KONTIKI"; + const KALTURA_DC = "0"; + const FTP = "1"; + const SCP = "2"; + const SFTP = "3"; + const S3 = "6"; + const LOCAL = "7"; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaSyndicationFeedEntriesOrderBy +{ + const CREATED_AT_DESC = "-createdAt"; + const RECENT = "recent"; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaTaggedObjectType +{ + const ENTRY = "1"; + const CATEGORY = "2"; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaThumbAssetOrderBy +{ + const CREATED_AT_ASC = "+createdAt"; + const DELETED_AT_ASC = "+deletedAt"; + const SIZE_ASC = "+size"; + const UPDATED_AT_ASC = "+updatedAt"; + const CREATED_AT_DESC = "-createdAt"; + const DELETED_AT_DESC = "-deletedAt"; + const SIZE_DESC = "-size"; + const UPDATED_AT_DESC = "-updatedAt"; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaThumbParamsOrderBy +{ +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaThumbParamsOutputOrderBy +{ +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaTubeMogulSyndicationFeedCategories +{ + const ANIMALS_AND_PETS = "Animals & Pets"; + const ARTS_AND_ANIMATION = "Arts & Animation"; + const AUTOS = "Autos"; + const COMEDY = "Comedy"; + const COMMERCIALS_PROMOTIONAL = "Commercials/Promotional"; + const ENTERTAINMENT = "Entertainment"; + const FAMILY_AND_KIDS = "Family & Kids"; + const HOW_TO_INSTRUCTIONAL_DIY = "How To/Instructional/DIY"; + const MUSIC = "Music"; + const NEWS_AND_BLOGS = "News & Blogs"; + const SCIENCE_AND_TECHNOLOGY = "Science & Technology"; + const SPORTS = "Sports"; + const TRAVEL_AND_PLACES = "Travel & Places"; + const VIDEO_GAMES = "Video Games"; + const VLOGS_PEOPLE = "Vlogs & People"; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaTubeMogulSyndicationFeedOrderBy +{ + const CREATED_AT_ASC = "+createdAt"; + const NAME_ASC = "+name"; + const PLAYLIST_ID_ASC = "+playlistId"; + const TYPE_ASC = "+type"; + const UPDATED_AT_ASC = "+updatedAt"; + const CREATED_AT_DESC = "-createdAt"; + const NAME_DESC = "-name"; + const PLAYLIST_ID_DESC = "-playlistId"; + const TYPE_DESC = "-type"; + const UPDATED_AT_DESC = "-updatedAt"; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaUiConfOrderBy +{ + const CREATED_AT_ASC = "+createdAt"; + const UPDATED_AT_ASC = "+updatedAt"; + const CREATED_AT_DESC = "-createdAt"; + const UPDATED_AT_DESC = "-updatedAt"; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaUploadTokenOrderBy +{ + const CREATED_AT_ASC = "+createdAt"; + const CREATED_AT_DESC = "-createdAt"; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaUserLoginDataOrderBy +{ +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaUserOrderBy +{ + const CREATED_AT_ASC = "+createdAt"; + const ID_ASC = "+id"; + const CREATED_AT_DESC = "-createdAt"; + const ID_DESC = "-id"; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaUserRoleOrderBy +{ + const CREATED_AT_ASC = "+createdAt"; + const ID_ASC = "+id"; + const NAME_ASC = "+name"; + const UPDATED_AT_ASC = "+updatedAt"; + const CREATED_AT_DESC = "-createdAt"; + const ID_DESC = "-id"; + const NAME_DESC = "-name"; + const UPDATED_AT_DESC = "-updatedAt"; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaVideoCodec +{ + const NONE = ""; + const APCH = "apch"; + const APCN = "apcn"; + const APCO = "apco"; + const APCS = "apcs"; + const COPY = "copy"; + const DNXHD = "dnxhd"; + const DV = "dv"; + const FLV = "flv"; + const H263 = "h263"; + const H264 = "h264"; + const H264B = "h264b"; + const H264H = "h264h"; + const H264M = "h264m"; + const MPEG2 = "mpeg2"; + const MPEG4 = "mpeg4"; + const THEORA = "theora"; + const VP6 = "vp6"; + const VP8 = "vp8"; + const WMV2 = "wmv2"; + const WMV3 = "wmv3"; + const WVC1A = "wvc1a"; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaWidgetOrderBy +{ + const CREATED_AT_ASC = "+createdAt"; + const CREATED_AT_DESC = "-createdAt"; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaYahooSyndicationFeedAdultValues +{ + const ADULT = "adult"; + const NON_ADULT = "nonadult"; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaYahooSyndicationFeedCategories +{ + const ACTION = "Action"; + const ANIMALS = "Animals"; + const ART_AND_ANIMATION = "Art & Animation"; + const COMMERCIALS = "Commercials"; + const ENTERTAINMENT_AND_TV = "Entertainment & TV"; + const FAMILY = "Family"; + const FOOD = "Food"; + const FUNNY_VIDEOS = "Funny Videos"; + const GAMES = "Games"; + const HEALTH_AND_BEAUTY = "Health & Beauty"; + const HOW_TO = "How-To"; + const MOVIES_AND_SHORTS = "Movies & Shorts"; + const MUSIC = "Music"; + const NEWS_AND_POLITICS = "News & Politics"; + const PEOPLE_AND_VLOGS = "People & Vlogs"; + const PRODUCTS_AND_TECH = "Products & Tech."; + const SCIENCE_AND_ENVIRONMENT = "Science & Environment"; + const SPORTS = "Sports"; + const TRANSPORTATION = "Transportation"; + const TRAVEL = "Travel"; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaYahooSyndicationFeedOrderBy +{ + const CREATED_AT_ASC = "+createdAt"; + const NAME_ASC = "+name"; + const PLAYLIST_ID_ASC = "+playlistId"; + const TYPE_ASC = "+type"; + const UPDATED_AT_ASC = "+updatedAt"; + const CREATED_AT_DESC = "-createdAt"; + const NAME_DESC = "-name"; + const PLAYLIST_ID_DESC = "-playlistId"; + const TYPE_DESC = "-type"; + const UPDATED_AT_DESC = "-updatedAt"; +} + diff --git a/local/kaltura/API/KalturaPlugins/KalturaAbcScreenersWatermarkAccessControlClientPlugin.php b/local/kaltura/API/KalturaPlugins/KalturaAbcScreenersWatermarkAccessControlClientPlugin.php new file mode 100644 index 0000000000000..6f68c5fa37a5d --- /dev/null +++ b/local/kaltura/API/KalturaPlugins/KalturaAbcScreenersWatermarkAccessControlClientPlugin.php @@ -0,0 +1,84 @@ +. +// +// @ignore +// =================================================================================================== + +/** + * @package Kaltura + * @subpackage Client + */ +require_once(dirname(__FILE__) . "/../KalturaClientBase.php"); +require_once(dirname(__FILE__) . "/../KalturaEnums.php"); +require_once(dirname(__FILE__) . "/../KalturaTypes.php"); + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaABCScreenersWatermarkCondition extends KalturaCondition +{ + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaAbcScreenersWatermarkAccessControlClientPlugin extends KalturaClientPlugin +{ + protected function __construct(KalturaClient $client) + { + parent::__construct($client); + } + + /** + * @return KalturaAbcScreenersWatermarkAccessControlClientPlugin + */ + public static function get(KalturaClient $client) + { + return new KalturaAbcScreenersWatermarkAccessControlClientPlugin($client); + } + + /** + * @return array + */ + public function getServices() + { + $services = array( + ); + return $services; + } + + /** + * @return string + */ + public function getName() + { + return 'abcScreenersWatermarkAccessControl'; + } +} + diff --git a/local/kaltura/API/KalturaPlugins/KalturaAdCuePointClientPlugin.php b/local/kaltura/API/KalturaPlugins/KalturaAdCuePointClientPlugin.php new file mode 100644 index 0000000000000..7cd819707c3be --- /dev/null +++ b/local/kaltura/API/KalturaPlugins/KalturaAdCuePointClientPlugin.php @@ -0,0 +1,253 @@ +. +// +// @ignore +// =================================================================================================== + +/** + * @package Kaltura + * @subpackage Client + */ +require_once(dirname(__FILE__) . "/../KalturaClientBase.php"); +require_once(dirname(__FILE__) . "/../KalturaEnums.php"); +require_once(dirname(__FILE__) . "/../KalturaTypes.php"); +require_once(dirname(__FILE__) . "/KalturaCuePointClientPlugin.php"); + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaAdCuePointOrderBy +{ + const CREATED_AT_ASC = "+createdAt"; + const DURATION_ASC = "+duration"; + const END_TIME_ASC = "+endTime"; + const PARTNER_SORT_VALUE_ASC = "+partnerSortValue"; + const START_TIME_ASC = "+startTime"; + const UPDATED_AT_ASC = "+updatedAt"; + const CREATED_AT_DESC = "-createdAt"; + const DURATION_DESC = "-duration"; + const END_TIME_DESC = "-endTime"; + const PARTNER_SORT_VALUE_DESC = "-partnerSortValue"; + const START_TIME_DESC = "-startTime"; + const UPDATED_AT_DESC = "-updatedAt"; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaAdProtocolType +{ + const CUSTOM = "0"; + const VAST = "1"; + const VAST_2_0 = "2"; + const VPAID = "3"; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaAdType +{ + const VIDEO = "1"; + const OVERLAY = "2"; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaAdCuePoint extends KalturaCuePoint +{ + /** + * + * + * @var KalturaAdProtocolType + * @insertonly + */ + public $protocolType = null; + + /** + * + * + * @var string + */ + public $sourceUrl = null; + + /** + * + * + * @var KalturaAdType + */ + public $adType = null; + + /** + * + * + * @var string + */ + public $title = null; + + /** + * + * + * @var int + */ + public $endTime = null; + + /** + * Duration in milliseconds + * + * + * @var int + * @readonly + */ + public $duration = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +abstract class KalturaAdCuePointBaseFilter extends KalturaCuePointFilter +{ + /** + * + * + * @var KalturaAdProtocolType + */ + public $protocolTypeEqual = null; + + /** + * + * + * @var string + */ + public $protocolTypeIn = null; + + /** + * + * + * @var string + */ + public $titleLike = null; + + /** + * + * + * @var string + */ + public $titleMultiLikeOr = null; + + /** + * + * + * @var string + */ + public $titleMultiLikeAnd = null; + + /** + * + * + * @var int + */ + public $endTimeGreaterThanOrEqual = null; + + /** + * + * + * @var int + */ + public $endTimeLessThanOrEqual = null; + + /** + * + * + * @var int + */ + public $durationGreaterThanOrEqual = null; + + /** + * + * + * @var int + */ + public $durationLessThanOrEqual = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaAdCuePointFilter extends KalturaAdCuePointBaseFilter +{ + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaAdCuePointClientPlugin extends KalturaClientPlugin +{ + protected function __construct(KalturaClient $client) + { + parent::__construct($client); + } + + /** + * @return KalturaAdCuePointClientPlugin + */ + public static function get(KalturaClient $client) + { + return new KalturaAdCuePointClientPlugin($client); + } + + /** + * @return array + */ + public function getServices() + { + $services = array( + ); + return $services; + } + + /** + * @return string + */ + public function getName() + { + return 'adCuePoint'; + } +} + diff --git a/local/kaltura/API/KalturaPlugins/KalturaAnnotationClientPlugin.php b/local/kaltura/API/KalturaPlugins/KalturaAnnotationClientPlugin.php new file mode 100644 index 0000000000000..d2fd7a9629d54 --- /dev/null +++ b/local/kaltura/API/KalturaPlugins/KalturaAnnotationClientPlugin.php @@ -0,0 +1,450 @@ +. +// +// @ignore +// =================================================================================================== + +/** + * @package Kaltura + * @subpackage Client + */ +require_once(dirname(__FILE__) . "/../KalturaClientBase.php"); +require_once(dirname(__FILE__) . "/../KalturaEnums.php"); +require_once(dirname(__FILE__) . "/../KalturaTypes.php"); +require_once(dirname(__FILE__) . "/KalturaCuePointClientPlugin.php"); + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaAnnotationOrderBy +{ + const CREATED_AT_ASC = "+createdAt"; + const DURATION_ASC = "+duration"; + const END_TIME_ASC = "+endTime"; + const PARTNER_SORT_VALUE_ASC = "+partnerSortValue"; + const START_TIME_ASC = "+startTime"; + const UPDATED_AT_ASC = "+updatedAt"; + const CREATED_AT_DESC = "-createdAt"; + const DURATION_DESC = "-duration"; + const END_TIME_DESC = "-endTime"; + const PARTNER_SORT_VALUE_DESC = "-partnerSortValue"; + const START_TIME_DESC = "-startTime"; + const UPDATED_AT_DESC = "-updatedAt"; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaAnnotation extends KalturaCuePoint +{ + /** + * + * + * @var string + * @insertonly + */ + public $parentId = null; + + /** + * + * + * @var string + */ + public $text = null; + + /** + * End time in milliseconds + * + * + * @var int + */ + public $endTime = null; + + /** + * Duration in milliseconds + * + * + * @var int + * @readonly + */ + public $duration = null; + + /** + * Depth in the tree + * + * + * @var int + * @readonly + */ + public $depth = null; + + /** + * Number of all descendants + * + * + * @var int + * @readonly + */ + public $childrenCount = null; + + /** + * Number of children, first generation only. + * + * + * @var int + * @readonly + */ + public $directChildrenCount = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaAnnotationListResponse extends KalturaObjectBase +{ + /** + * + * + * @var array of KalturaAnnotation + * @readonly + */ + public $objects; + + /** + * + * + * @var int + * @readonly + */ + public $totalCount = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +abstract class KalturaAnnotationBaseFilter extends KalturaCuePointFilter +{ + /** + * + * + * @var string + */ + public $parentIdEqual = null; + + /** + * + * + * @var string + */ + public $parentIdIn = null; + + /** + * + * + * @var string + */ + public $textLike = null; + + /** + * + * + * @var string + */ + public $textMultiLikeOr = null; + + /** + * + * + * @var string + */ + public $textMultiLikeAnd = null; + + /** + * + * + * @var int + */ + public $endTimeGreaterThanOrEqual = null; + + /** + * + * + * @var int + */ + public $endTimeLessThanOrEqual = null; + + /** + * + * + * @var int + */ + public $durationGreaterThanOrEqual = null; + + /** + * + * + * @var int + */ + public $durationLessThanOrEqual = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaAnnotationFilter extends KalturaAnnotationBaseFilter +{ + +} + + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaAnnotationService extends KalturaServiceBase +{ + function __construct(KalturaClient $client = null) + { + parent::__construct($client); + } + + /** + * Allows you to add an annotation object associated with an entry + * + * @param KalturaCuePoint $annotation + * @return KalturaAnnotation + */ + function add(KalturaCuePoint $annotation) + { + $kparams = array(); + $this->client->addParam($kparams, "annotation", $annotation->toParams()); + $this->client->queueServiceActionCall("annotation_annotation", "add", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaAnnotation"); + return $resultObject; + } + + /** + * Update annotation by id + * + * @param string $id + * @param KalturaCuePoint $annotation + * @return KalturaAnnotation + */ + function update($id, KalturaCuePoint $annotation) + { + $kparams = array(); + $this->client->addParam($kparams, "id", $id); + $this->client->addParam($kparams, "annotation", $annotation->toParams()); + $this->client->queueServiceActionCall("annotation_annotation", "update", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaAnnotation"); + return $resultObject; + } + + /** + * List annotation objects by filter and pager + * + * @param KalturaCuePointFilter $filter + * @param KalturaFilterPager $pager + * @return KalturaAnnotationListResponse + */ + function listAction(KalturaCuePointFilter $filter = null, KalturaFilterPager $pager = null) + { + $kparams = array(); + if ($filter !== null) + $this->client->addParam($kparams, "filter", $filter->toParams()); + if ($pager !== null) + $this->client->addParam($kparams, "pager", $pager->toParams()); + $this->client->queueServiceActionCall("annotation_annotation", "list", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaAnnotationListResponse"); + return $resultObject; + } + + /** + * Allows you to add multiple cue points objects by uploading XML that contains multiple cue point definitions + * + * @param file $fileData + * @return KalturaCuePointListResponse + */ + function addFromBulk($fileData) + { + $kparams = array(); + $kfiles = array(); + $this->client->addParam($kfiles, "fileData", $fileData); + $this->client->queueServiceActionCall("annotation_annotation", "addFromBulk", $kparams, $kfiles); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaCuePointListResponse"); + return $resultObject; + } + + /** + * Download multiple cue points objects as XML definitions + * + * @param KalturaCuePointFilter $filter + * @param KalturaFilterPager $pager + * @return file + */ + function serveBulk(KalturaCuePointFilter $filter = null, KalturaFilterPager $pager = null) + { + $kparams = array(); + if ($filter !== null) + $this->client->addParam($kparams, "filter", $filter->toParams()); + if ($pager !== null) + $this->client->addParam($kparams, "pager", $pager->toParams()); + $this->client->queueServiceActionCall("annotation_annotation", "serveBulk", $kparams); + if(!$this->client->getDestinationPath() && !$this->client->getReturnServedResult()) + return $this->client->getServeUrl(); + return $this->client->doQueue(); + } + + /** + * Retrieve an CuePoint object by id + * + * @param string $id + * @return KalturaCuePoint + */ + function get($id) + { + $kparams = array(); + $this->client->addParam($kparams, "id", $id); + $this->client->queueServiceActionCall("annotation_annotation", "get", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaCuePoint"); + return $resultObject; + } + + /** + * Count cue point objects by filter + * + * @param KalturaCuePointFilter $filter + * @return int + */ + function count(KalturaCuePointFilter $filter = null) + { + $kparams = array(); + if ($filter !== null) + $this->client->addParam($kparams, "filter", $filter->toParams()); + $this->client->queueServiceActionCall("annotation_annotation", "count", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "integer"); + return $resultObject; + } + + /** + * Delete cue point by id, and delete all children cue points + * + * @param string $id + * @return + */ + function delete($id) + { + $kparams = array(); + $this->client->addParam($kparams, "id", $id); + $this->client->queueServiceActionCall("annotation_annotation", "delete", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "null"); + return $resultObject; + } +} +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaAnnotationClientPlugin extends KalturaClientPlugin +{ + /** + * @var KalturaAnnotationService + */ + public $annotation = null; + + protected function __construct(KalturaClient $client) + { + parent::__construct($client); + $this->annotation = new KalturaAnnotationService($client); + } + + /** + * @return KalturaAnnotationClientPlugin + */ + public static function get(KalturaClient $client) + { + return new KalturaAnnotationClientPlugin($client); + } + + /** + * @return array + */ + public function getServices() + { + $services = array( + 'annotation' => $this->annotation, + ); + return $services; + } + + /** + * @return string + */ + public function getName() + { + return 'annotation'; + } +} + diff --git a/local/kaltura/API/KalturaPlugins/KalturaAsperaClientPlugin.php b/local/kaltura/API/KalturaPlugins/KalturaAsperaClientPlugin.php new file mode 100644 index 0000000000000..b3044303955ae --- /dev/null +++ b/local/kaltura/API/KalturaPlugins/KalturaAsperaClientPlugin.php @@ -0,0 +1,113 @@ +. +// +// @ignore +// =================================================================================================== + +/** + * @package Kaltura + * @subpackage Client + */ +require_once(dirname(__FILE__) . "/../KalturaClientBase.php"); +require_once(dirname(__FILE__) . "/../KalturaEnums.php"); +require_once(dirname(__FILE__) . "/../KalturaTypes.php"); + + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaAsperaService extends KalturaServiceBase +{ + function __construct(KalturaClient $client = null) + { + parent::__construct($client); + } + + /** + * + * + * @param string $flavorAssetId + * @return string + */ + function getFaspUrl($flavorAssetId) + { + $kparams = array(); + $this->client->addParam($kparams, "flavorAssetId", $flavorAssetId); + $this->client->queueServiceActionCall("aspera_aspera", "getFaspUrl", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "string"); + return $resultObject; + } +} +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaAsperaClientPlugin extends KalturaClientPlugin +{ + /** + * @var KalturaAsperaService + */ + public $aspera = null; + + protected function __construct(KalturaClient $client) + { + parent::__construct($client); + $this->aspera = new KalturaAsperaService($client); + } + + /** + * @return KalturaAsperaClientPlugin + */ + public static function get(KalturaClient $client) + { + return new KalturaAsperaClientPlugin($client); + } + + /** + * @return array + */ + public function getServices() + { + $services = array( + 'aspera' => $this->aspera, + ); + return $services; + } + + /** + * @return string + */ + public function getName() + { + return 'aspera'; + } +} + diff --git a/local/kaltura/API/KalturaPlugins/KalturaAttachmentClientPlugin.php b/local/kaltura/API/KalturaPlugins/KalturaAttachmentClientPlugin.php new file mode 100644 index 0000000000000..61fecf3fff1d5 --- /dev/null +++ b/local/kaltura/API/KalturaPlugins/KalturaAttachmentClientPlugin.php @@ -0,0 +1,435 @@ +. +// +// @ignore +// =================================================================================================== + +/** + * @package Kaltura + * @subpackage Client + */ +require_once(dirname(__FILE__) . "/../KalturaClientBase.php"); +require_once(dirname(__FILE__) . "/../KalturaEnums.php"); +require_once(dirname(__FILE__) . "/../KalturaTypes.php"); + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaAttachmentAssetStatus +{ + const ERROR = -1; + const QUEUED = 0; + const READY = 2; + const DELETED = 3; + const IMPORTING = 7; + const EXPORTING = 9; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaAttachmentAssetOrderBy +{ + const CREATED_AT_ASC = "+createdAt"; + const DELETED_AT_ASC = "+deletedAt"; + const SIZE_ASC = "+size"; + const UPDATED_AT_ASC = "+updatedAt"; + const CREATED_AT_DESC = "-createdAt"; + const DELETED_AT_DESC = "-deletedAt"; + const SIZE_DESC = "-size"; + const UPDATED_AT_DESC = "-updatedAt"; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaAttachmentType +{ + const TEXT = "1"; + const MEDIA = "2"; + const DOCUMENT = "3"; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaAttachmentAsset extends KalturaAsset +{ + /** + * The filename of the attachment asset content + * + * + * @var string + */ + public $filename = null; + + /** + * Attachment asset title + * + * + * @var string + */ + public $title = null; + + /** + * The attachment format + * + * + * @var KalturaAttachmentType + */ + public $format = null; + + /** + * The status of the asset + * + * + * @var KalturaAttachmentAssetStatus + * @readonly + */ + public $status = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaAttachmentAssetListResponse extends KalturaObjectBase +{ + /** + * + * + * @var array of KalturaAttachmentAsset + * @readonly + */ + public $objects; + + /** + * + * + * @var int + * @readonly + */ + public $totalCount = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +abstract class KalturaAttachmentAssetBaseFilter extends KalturaAssetFilter +{ + /** + * + * + * @var KalturaAttachmentType + */ + public $formatEqual = null; + + /** + * + * + * @var string + */ + public $formatIn = null; + + /** + * + * + * @var KalturaAttachmentAssetStatus + */ + public $statusEqual = null; + + /** + * + * + * @var string + */ + public $statusIn = null; + + /** + * + * + * @var string + */ + public $statusNotIn = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaAttachmentAssetFilter extends KalturaAttachmentAssetBaseFilter +{ + +} + + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaAttachmentAssetService extends KalturaServiceBase +{ + function __construct(KalturaClient $client = null) + { + parent::__construct($client); + } + + /** + * Add attachment asset + * + * @param string $entryId + * @param KalturaAttachmentAsset $attachmentAsset + * @return KalturaAttachmentAsset + */ + function add($entryId, KalturaAttachmentAsset $attachmentAsset) + { + $kparams = array(); + $this->client->addParam($kparams, "entryId", $entryId); + $this->client->addParam($kparams, "attachmentAsset", $attachmentAsset->toParams()); + $this->client->queueServiceActionCall("attachment_attachmentasset", "add", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaAttachmentAsset"); + return $resultObject; + } + + /** + * Update content of attachment asset + * + * @param string $id + * @param KalturaContentResource $contentResource + * @return KalturaAttachmentAsset + */ + function setContent($id, KalturaContentResource $contentResource) + { + $kparams = array(); + $this->client->addParam($kparams, "id", $id); + $this->client->addParam($kparams, "contentResource", $contentResource->toParams()); + $this->client->queueServiceActionCall("attachment_attachmentasset", "setContent", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaAttachmentAsset"); + return $resultObject; + } + + /** + * Update attachment asset + * + * @param string $id + * @param KalturaAttachmentAsset $attachmentAsset + * @return KalturaAttachmentAsset + */ + function update($id, KalturaAttachmentAsset $attachmentAsset) + { + $kparams = array(); + $this->client->addParam($kparams, "id", $id); + $this->client->addParam($kparams, "attachmentAsset", $attachmentAsset->toParams()); + $this->client->queueServiceActionCall("attachment_attachmentasset", "update", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaAttachmentAsset"); + return $resultObject; + } + + /** + * Get download URL for the asset + * + * @param string $id + * @param int $storageId + * @return string + */ + function getUrl($id, $storageId = null) + { + $kparams = array(); + $this->client->addParam($kparams, "id", $id); + $this->client->addParam($kparams, "storageId", $storageId); + $this->client->queueServiceActionCall("attachment_attachmentasset", "getUrl", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "string"); + return $resultObject; + } + + /** + * Get remote storage existing paths for the asset + * + * @param string $id + * @return KalturaRemotePathListResponse + */ + function getRemotePaths($id) + { + $kparams = array(); + $this->client->addParam($kparams, "id", $id); + $this->client->queueServiceActionCall("attachment_attachmentasset", "getRemotePaths", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaRemotePathListResponse"); + return $resultObject; + } + + /** + * Serves attachment by its id + * + * @param string $attachmentAssetId + * @return file + */ + function serve($attachmentAssetId) + { + $kparams = array(); + $this->client->addParam($kparams, "attachmentAssetId", $attachmentAssetId); + $this->client->queueServiceActionCall("attachment_attachmentasset", "serve", $kparams); + if(!$this->client->getDestinationPath() && !$this->client->getReturnServedResult()) + return $this->client->getServeUrl(); + return $this->client->doQueue(); + } + + /** + * + * + * @param string $attachmentAssetId + * @return KalturaAttachmentAsset + */ + function get($attachmentAssetId) + { + $kparams = array(); + $this->client->addParam($kparams, "attachmentAssetId", $attachmentAssetId); + $this->client->queueServiceActionCall("attachment_attachmentasset", "get", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaAttachmentAsset"); + return $resultObject; + } + + /** + * List attachment Assets by filter and pager + * + * @param KalturaAssetFilter $filter + * @param KalturaFilterPager $pager + * @return KalturaAttachmentAssetListResponse + */ + function listAction(KalturaAssetFilter $filter = null, KalturaFilterPager $pager = null) + { + $kparams = array(); + if ($filter !== null) + $this->client->addParam($kparams, "filter", $filter->toParams()); + if ($pager !== null) + $this->client->addParam($kparams, "pager", $pager->toParams()); + $this->client->queueServiceActionCall("attachment_attachmentasset", "list", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaAttachmentAssetListResponse"); + return $resultObject; + } + + /** + * + * + * @param string $attachmentAssetId + * @return + */ + function delete($attachmentAssetId) + { + $kparams = array(); + $this->client->addParam($kparams, "attachmentAssetId", $attachmentAssetId); + $this->client->queueServiceActionCall("attachment_attachmentasset", "delete", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "null"); + return $resultObject; + } +} +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaAttachmentClientPlugin extends KalturaClientPlugin +{ + /** + * @var KalturaAttachmentAssetService + */ + public $attachmentAsset = null; + + protected function __construct(KalturaClient $client) + { + parent::__construct($client); + $this->attachmentAsset = new KalturaAttachmentAssetService($client); + } + + /** + * @return KalturaAttachmentClientPlugin + */ + public static function get(KalturaClient $client) + { + return new KalturaAttachmentClientPlugin($client); + } + + /** + * @return array + */ + public function getServices() + { + $services = array( + 'attachmentAsset' => $this->attachmentAsset, + ); + return $services; + } + + /** + * @return string + */ + public function getName() + { + return 'attachment'; + } +} + diff --git a/local/kaltura/API/KalturaPlugins/KalturaAuditClientPlugin.php b/local/kaltura/API/KalturaPlugins/KalturaAuditClientPlugin.php new file mode 100644 index 0000000000000..a925d7a9467a8 --- /dev/null +++ b/local/kaltura/API/KalturaPlugins/KalturaAuditClientPlugin.php @@ -0,0 +1,893 @@ +. +// +// @ignore +// =================================================================================================== + +/** + * @package Kaltura + * @subpackage Client + */ +require_once(dirname(__FILE__) . "/../KalturaClientBase.php"); +require_once(dirname(__FILE__) . "/../KalturaEnums.php"); +require_once(dirname(__FILE__) . "/../KalturaTypes.php"); + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaAuditTrailChangeXmlNodeType +{ + const CHANGED = 1; + const ADDED = 2; + const REMOVED = 3; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaAuditTrailContext +{ + const CLIENT = -1; + const SCRIPT = 0; + const PS2 = 1; + const API_V3 = 2; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaAuditTrailFileSyncType +{ + const FILE = 1; + const LINK = 2; + const URL = 3; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaAuditTrailStatus +{ + const PENDING = 1; + const READY = 2; + const FAILED = 3; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaAuditTrailAction +{ + const CHANGED = "CHANGED"; + const CONTENT_VIEWED = "CONTENT_VIEWED"; + const COPIED = "COPIED"; + const CREATED = "CREATED"; + const DELETED = "DELETED"; + const FILE_SYNC_CREATED = "FILE_SYNC_CREATED"; + const RELATION_ADDED = "RELATION_ADDED"; + const RELATION_REMOVED = "RELATION_REMOVED"; + const VIEWED = "VIEWED"; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaAuditTrailObjectType +{ + const BATCH_JOB = "BatchJob"; + const EMAIL_INGESTION_PROFILE = "EmailIngestionProfile"; + const FILE_SYNC = "FileSync"; + const KSHOW_KUSER = "KshowKuser"; + const METADATA = "Metadata"; + const METADATA_PROFILE = "MetadataProfile"; + const PARTNER = "Partner"; + const PERMISSION = "Permission"; + const UPLOAD_TOKEN = "UploadToken"; + const USER_LOGIN_DATA = "UserLoginData"; + const USER_ROLE = "UserRole"; + const ACCESS_CONTROL = "accessControl"; + const CATEGORY = "category"; + const CONVERSION_PROFILE_2 = "conversionProfile2"; + const ENTRY = "entry"; + const FLAVOR_ASSET = "flavorAsset"; + const FLAVOR_PARAMS = "flavorParams"; + const FLAVOR_PARAMS_CONVERSION_PROFILE = "flavorParamsConversionProfile"; + const FLAVOR_PARAMS_OUTPUT = "flavorParamsOutput"; + const KSHOW = "kshow"; + const KUSER = "kuser"; + const MEDIA_INFO = "mediaInfo"; + const MODERATION = "moderation"; + const ROUGHCUT = "roughcutEntry"; + const SYNDICATION = "syndicationFeed"; + const THUMBNAIL_ASSET = "thumbAsset"; + const THUMBNAIL_PARAMS = "thumbParams"; + const THUMBNAIL_PARAMS_OUTPUT = "thumbParamsOutput"; + const UI_CONF = "uiConf"; + const WIDGET = "widget"; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaAuditTrailOrderBy +{ + const CREATED_AT_ASC = "+createdAt"; + const PARSED_AT_ASC = "+parsedAt"; + const CREATED_AT_DESC = "-createdAt"; + const PARSED_AT_DESC = "-parsedAt"; +} + +/** + * @package Kaltura + * @subpackage Client + */ +abstract class KalturaAuditTrailInfo extends KalturaObjectBase +{ + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaAuditTrail extends KalturaObjectBase +{ + /** + * + * + * @var int + * @readonly + */ + public $id = null; + + /** + * + * + * @var int + * @readonly + */ + public $createdAt = null; + + /** + * Indicates when the data was parsed + * + * + * @var int + * @readonly + */ + public $parsedAt = null; + + /** + * + * + * @var KalturaAuditTrailStatus + * @readonly + */ + public $status = null; + + /** + * + * + * @var KalturaAuditTrailObjectType + */ + public $auditObjectType = null; + + /** + * + * + * @var string + */ + public $objectId = null; + + /** + * + * + * @var string + */ + public $relatedObjectId = null; + + /** + * + * + * @var KalturaAuditTrailObjectType + */ + public $relatedObjectType = null; + + /** + * + * + * @var string + */ + public $entryId = null; + + /** + * + * + * @var int + * @readonly + */ + public $masterPartnerId = null; + + /** + * + * + * @var int + * @readonly + */ + public $partnerId = null; + + /** + * + * + * @var string + * @readonly + */ + public $requestId = null; + + /** + * + * + * @var string + */ + public $userId = null; + + /** + * + * + * @var KalturaAuditTrailAction + */ + public $action = null; + + /** + * + * + * @var KalturaAuditTrailInfo + */ + public $data; + + /** + * + * + * @var string + * @readonly + */ + public $ks = null; + + /** + * + * + * @var KalturaAuditTrailContext + * @readonly + */ + public $context = null; + + /** + * The API service and action that called and caused this audit + * + * + * @var string + * @readonly + */ + public $entryPoint = null; + + /** + * + * + * @var string + * @readonly + */ + public $serverName = null; + + /** + * + * + * @var string + * @readonly + */ + public $ipAddress = null; + + /** + * + * + * @var string + * @readonly + */ + public $userAgent = null; + + /** + * + * + * @var string + */ + public $clientTag = null; + + /** + * + * + * @var string + */ + public $description = null; + + /** + * + * + * @var string + * @readonly + */ + public $errorDescription = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaAuditTrailChangeItem extends KalturaObjectBase +{ + /** + * + * + * @var string + */ + public $descriptor = null; + + /** + * + * + * @var string + */ + public $oldValue = null; + + /** + * + * + * @var string + */ + public $newValue = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaAuditTrailListResponse extends KalturaObjectBase +{ + /** + * + * + * @var array of KalturaAuditTrail + * @readonly + */ + public $objects; + + /** + * + * + * @var int + * @readonly + */ + public $totalCount = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +abstract class KalturaAuditTrailBaseFilter extends KalturaFilter +{ + /** + * + * + * @var int + */ + public $idEqual = null; + + /** + * + * + * @var int + */ + public $createdAtGreaterThanOrEqual = null; + + /** + * + * + * @var int + */ + public $createdAtLessThanOrEqual = null; + + /** + * + * + * @var int + */ + public $parsedAtGreaterThanOrEqual = null; + + /** + * + * + * @var int + */ + public $parsedAtLessThanOrEqual = null; + + /** + * + * + * @var KalturaAuditTrailStatus + */ + public $statusEqual = null; + + /** + * + * + * @var string + */ + public $statusIn = null; + + /** + * + * + * @var KalturaAuditTrailObjectType + */ + public $auditObjectTypeEqual = null; + + /** + * + * + * @var string + */ + public $auditObjectTypeIn = null; + + /** + * + * + * @var string + */ + public $objectIdEqual = null; + + /** + * + * + * @var string + */ + public $objectIdIn = null; + + /** + * + * + * @var string + */ + public $relatedObjectIdEqual = null; + + /** + * + * + * @var string + */ + public $relatedObjectIdIn = null; + + /** + * + * + * @var KalturaAuditTrailObjectType + */ + public $relatedObjectTypeEqual = null; + + /** + * + * + * @var string + */ + public $relatedObjectTypeIn = null; + + /** + * + * + * @var string + */ + public $entryIdEqual = null; + + /** + * + * + * @var string + */ + public $entryIdIn = null; + + /** + * + * + * @var int + */ + public $masterPartnerIdEqual = null; + + /** + * + * + * @var string + */ + public $masterPartnerIdIn = null; + + /** + * + * + * @var int + */ + public $partnerIdEqual = null; + + /** + * + * + * @var string + */ + public $partnerIdIn = null; + + /** + * + * + * @var string + */ + public $requestIdEqual = null; + + /** + * + * + * @var string + */ + public $requestIdIn = null; + + /** + * + * + * @var string + */ + public $userIdEqual = null; + + /** + * + * + * @var string + */ + public $userIdIn = null; + + /** + * + * + * @var KalturaAuditTrailAction + */ + public $actionEqual = null; + + /** + * + * + * @var string + */ + public $actionIn = null; + + /** + * + * + * @var string + */ + public $ksEqual = null; + + /** + * + * + * @var KalturaAuditTrailContext + */ + public $contextEqual = null; + + /** + * + * + * @var string + */ + public $contextIn = null; + + /** + * + * + * @var string + */ + public $entryPointEqual = null; + + /** + * + * + * @var string + */ + public $entryPointIn = null; + + /** + * + * + * @var string + */ + public $serverNameEqual = null; + + /** + * + * + * @var string + */ + public $serverNameIn = null; + + /** + * + * + * @var string + */ + public $ipAddressEqual = null; + + /** + * + * + * @var string + */ + public $ipAddressIn = null; + + /** + * + * + * @var string + */ + public $clientTagEqual = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaAuditTrailChangeInfo extends KalturaAuditTrailInfo +{ + /** + * + * + * @var array of KalturaAuditTrailChangeItem + */ + public $changedItems; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaAuditTrailChangeXmlNode extends KalturaAuditTrailChangeItem +{ + /** + * + * + * @var KalturaAuditTrailChangeXmlNodeType + */ + public $type = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaAuditTrailFileSyncCreateInfo extends KalturaAuditTrailInfo +{ + /** + * + * + * @var string + */ + public $version = null; + + /** + * + * + * @var int + */ + public $objectSubType = null; + + /** + * + * + * @var int + */ + public $dc = null; + + /** + * + * + * @var bool + */ + public $original = null; + + /** + * + * + * @var KalturaAuditTrailFileSyncType + */ + public $fileType = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaAuditTrailTextInfo extends KalturaAuditTrailInfo +{ + /** + * + * + * @var string + */ + public $info = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaAuditTrailFilter extends KalturaAuditTrailBaseFilter +{ + +} + + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaAuditTrailService extends KalturaServiceBase +{ + function __construct(KalturaClient $client = null) + { + parent::__construct($client); + } + + /** + * Allows you to add an audit trail object and audit trail content associated with Kaltura object + * + * @param KalturaAuditTrail $auditTrail + * @return KalturaAuditTrail + */ + function add(KalturaAuditTrail $auditTrail) + { + $kparams = array(); + $this->client->addParam($kparams, "auditTrail", $auditTrail->toParams()); + $this->client->queueServiceActionCall("audit_audittrail", "add", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaAuditTrail"); + return $resultObject; + } + + /** + * Retrieve an audit trail object by id + * + * @param int $id + * @return KalturaAuditTrail + */ + function get($id) + { + $kparams = array(); + $this->client->addParam($kparams, "id", $id); + $this->client->queueServiceActionCall("audit_audittrail", "get", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaAuditTrail"); + return $resultObject; + } + + /** + * List audit trail objects by filter and pager + * + * @param KalturaAuditTrailFilter $filter + * @param KalturaFilterPager $pager + * @return KalturaAuditTrailListResponse + */ + function listAction(KalturaAuditTrailFilter $filter = null, KalturaFilterPager $pager = null) + { + $kparams = array(); + if ($filter !== null) + $this->client->addParam($kparams, "filter", $filter->toParams()); + if ($pager !== null) + $this->client->addParam($kparams, "pager", $pager->toParams()); + $this->client->queueServiceActionCall("audit_audittrail", "list", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaAuditTrailListResponse"); + return $resultObject; + } +} +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaAuditClientPlugin extends KalturaClientPlugin +{ + /** + * @var KalturaAuditTrailService + */ + public $auditTrail = null; + + protected function __construct(KalturaClient $client) + { + parent::__construct($client); + $this->auditTrail = new KalturaAuditTrailService($client); + } + + /** + * @return KalturaAuditClientPlugin + */ + public static function get(KalturaClient $client) + { + return new KalturaAuditClientPlugin($client); + } + + /** + * @return array + */ + public function getServices() + { + $services = array( + 'auditTrail' => $this->auditTrail, + ); + return $services; + } + + /** + * @return string + */ + public function getName() + { + return 'audit'; + } +} + diff --git a/local/kaltura/API/KalturaPlugins/KalturaBulkUploadClientPlugin.php b/local/kaltura/API/KalturaPlugins/KalturaBulkUploadClientPlugin.php new file mode 100644 index 0000000000000..7d844b642730c --- /dev/null +++ b/local/kaltura/API/KalturaPlugins/KalturaBulkUploadClientPlugin.php @@ -0,0 +1,187 @@ +. +// +// @ignore +// =================================================================================================== + +/** + * @package Kaltura + * @subpackage Client + */ +require_once(dirname(__FILE__) . "/../KalturaClientBase.php"); +require_once(dirname(__FILE__) . "/../KalturaEnums.php"); +require_once(dirname(__FILE__) . "/../KalturaTypes.php"); + + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaBulkService extends KalturaServiceBase +{ + function __construct(KalturaClient $client = null) + { + parent::__construct($client); + } + + /** + * Get bulk upload batch job by id + * + * @param int $id + * @return KalturaBulkUpload + */ + function get($id) + { + $kparams = array(); + $this->client->addParam($kparams, "id", $id); + $this->client->queueServiceActionCall("bulkupload_bulk", "get", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaBulkUpload"); + return $resultObject; + } + + /** + * List bulk upload batch jobs + * + * @param KalturaBulkUploadFilter $bulkUploadFilter + * @param KalturaFilterPager $pager + * @return KalturaBulkUploadListResponse + */ + function listAction(KalturaBulkUploadFilter $bulkUploadFilter = null, KalturaFilterPager $pager = null) + { + $kparams = array(); + if ($bulkUploadFilter !== null) + $this->client->addParam($kparams, "bulkUploadFilter", $bulkUploadFilter->toParams()); + if ($pager !== null) + $this->client->addParam($kparams, "pager", $pager->toParams()); + $this->client->queueServiceActionCall("bulkupload_bulk", "list", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaBulkUploadListResponse"); + return $resultObject; + } + + /** + * Serve action returns the original file. + * + * @param int $id Job id + * @return file + */ + function serve($id) + { + $kparams = array(); + $this->client->addParam($kparams, "id", $id); + $this->client->queueServiceActionCall("bulkupload_bulk", "serve", $kparams); + if(!$this->client->getDestinationPath() && !$this->client->getReturnServedResult()) + return $this->client->getServeUrl(); + return $this->client->doQueue(); + } + + /** + * ServeLog action returns the log file for the bulk-upload job. + * + * @param int $id Job id + * @return file + */ + function serveLog($id) + { + $kparams = array(); + $this->client->addParam($kparams, "id", $id); + $this->client->queueServiceActionCall("bulkupload_bulk", "serveLog", $kparams); + if(!$this->client->getDestinationPath() && !$this->client->getReturnServedResult()) + return $this->client->getServeUrl(); + return $this->client->doQueue(); + } + + /** + * Aborts the bulk upload and all its child jobs + * + * @param int $id Job id + * @return KalturaBulkUpload + */ + function abort($id) + { + $kparams = array(); + $this->client->addParam($kparams, "id", $id); + $this->client->queueServiceActionCall("bulkupload_bulk", "abort", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaBulkUpload"); + return $resultObject; + } +} +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaBulkUploadClientPlugin extends KalturaClientPlugin +{ + /** + * @var KalturaBulkService + */ + public $bulk = null; + + protected function __construct(KalturaClient $client) + { + parent::__construct($client); + $this->bulk = new KalturaBulkService($client); + } + + /** + * @return KalturaBulkUploadClientPlugin + */ + public static function get(KalturaClient $client) + { + return new KalturaBulkUploadClientPlugin($client); + } + + /** + * @return array + */ + public function getServices() + { + $services = array( + 'bulk' => $this->bulk, + ); + return $services; + } + + /** + * @return string + */ + public function getName() + { + return 'bulkUpload'; + } +} + diff --git a/local/kaltura/API/KalturaPlugins/KalturaBulkUploadCsvClientPlugin.php b/local/kaltura/API/KalturaPlugins/KalturaBulkUploadCsvClientPlugin.php new file mode 100644 index 0000000000000..9f58ceae18d3f --- /dev/null +++ b/local/kaltura/API/KalturaPlugins/KalturaBulkUploadCsvClientPlugin.php @@ -0,0 +1,113 @@ +. +// +// @ignore +// =================================================================================================== + +/** + * @package Kaltura + * @subpackage Client + */ +require_once(dirname(__FILE__) . "/../KalturaClientBase.php"); +require_once(dirname(__FILE__) . "/../KalturaEnums.php"); +require_once(dirname(__FILE__) . "/../KalturaTypes.php"); +require_once(dirname(__FILE__) . "/KalturaBulkUploadClientPlugin.php"); + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaBulkUploadCsvVersion +{ + const V1 = 1; + const V2 = 2; + const V3 = 3; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaBulkUploadCsvJobData extends KalturaBulkUploadJobData +{ + /** + * The version of the csv file + * + * + * @var KalturaBulkUploadCsvVersion + * @readonly + */ + public $csvVersion = null; + + /** + * Array containing CSV headers + * + * + * @var array of KalturaString + */ + public $columns; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaBulkUploadCsvClientPlugin extends KalturaClientPlugin +{ + protected function __construct(KalturaClient $client) + { + parent::__construct($client); + } + + /** + * @return KalturaBulkUploadCsvClientPlugin + */ + public static function get(KalturaClient $client) + { + return new KalturaBulkUploadCsvClientPlugin($client); + } + + /** + * @return array + */ + public function getServices() + { + $services = array( + ); + return $services; + } + + /** + * @return string + */ + public function getName() + { + return 'bulkUploadCsv'; + } +} + diff --git a/local/kaltura/API/KalturaPlugins/KalturaBulkUploadFilterClientPlugin.php b/local/kaltura/API/KalturaPlugins/KalturaBulkUploadFilterClientPlugin.php new file mode 100644 index 0000000000000..b77ca422630a2 --- /dev/null +++ b/local/kaltura/API/KalturaPlugins/KalturaBulkUploadFilterClientPlugin.php @@ -0,0 +1,101 @@ +. +// +// @ignore +// =================================================================================================== + +/** + * @package Kaltura + * @subpackage Client + */ +require_once(dirname(__FILE__) . "/../KalturaClientBase.php"); +require_once(dirname(__FILE__) . "/../KalturaEnums.php"); +require_once(dirname(__FILE__) . "/../KalturaTypes.php"); +require_once(dirname(__FILE__) . "/KalturaBulkUploadClientPlugin.php"); + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaBulkUploadFilterJobData extends KalturaBulkUploadJobData +{ + /** + * Filter for extracting the objects list to upload + * + * + * @var KalturaFilter + */ + public $filter; + + /** + * Template object for new object creation + * + * + * @var KalturaObjectBase + */ + public $templateObject; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaBulkUploadFilterClientPlugin extends KalturaClientPlugin +{ + protected function __construct(KalturaClient $client) + { + parent::__construct($client); + } + + /** + * @return KalturaBulkUploadFilterClientPlugin + */ + public static function get(KalturaClient $client) + { + return new KalturaBulkUploadFilterClientPlugin($client); + } + + /** + * @return array + */ + public function getServices() + { + $services = array( + ); + return $services; + } + + /** + * @return string + */ + public function getName() + { + return 'bulkUploadFilter'; + } +} + diff --git a/local/kaltura/API/KalturaPlugins/KalturaBulkUploadXmlClientPlugin.php b/local/kaltura/API/KalturaPlugins/KalturaBulkUploadXmlClientPlugin.php new file mode 100644 index 0000000000000..1fc677c98f93b --- /dev/null +++ b/local/kaltura/API/KalturaPlugins/KalturaBulkUploadXmlClientPlugin.php @@ -0,0 +1,85 @@ +. +// +// @ignore +// =================================================================================================== + +/** + * @package Kaltura + * @subpackage Client + */ +require_once(dirname(__FILE__) . "/../KalturaClientBase.php"); +require_once(dirname(__FILE__) . "/../KalturaEnums.php"); +require_once(dirname(__FILE__) . "/../KalturaTypes.php"); +require_once(dirname(__FILE__) . "/KalturaBulkUploadClientPlugin.php"); + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaBulkUploadXmlJobData extends KalturaBulkUploadJobData +{ + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaBulkUploadXmlClientPlugin extends KalturaClientPlugin +{ + protected function __construct(KalturaClient $client) + { + parent::__construct($client); + } + + /** + * @return KalturaBulkUploadXmlClientPlugin + */ + public static function get(KalturaClient $client) + { + return new KalturaBulkUploadXmlClientPlugin($client); + } + + /** + * @return array + */ + public function getServices() + { + $services = array( + ); + return $services; + } + + /** + * @return string + */ + public function getName() + { + return 'bulkUploadXml'; + } +} + diff --git a/local/kaltura/API/KalturaPlugins/KalturaCaptionClientPlugin.php b/local/kaltura/API/KalturaPlugins/KalturaCaptionClientPlugin.php new file mode 100644 index 0000000000000..1217d2414b12e --- /dev/null +++ b/local/kaltura/API/KalturaPlugins/KalturaCaptionClientPlugin.php @@ -0,0 +1,771 @@ +. +// +// @ignore +// =================================================================================================== + +/** + * @package Kaltura + * @subpackage Client + */ +require_once(dirname(__FILE__) . "/../KalturaClientBase.php"); +require_once(dirname(__FILE__) . "/../KalturaEnums.php"); +require_once(dirname(__FILE__) . "/../KalturaTypes.php"); + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaCaptionAssetStatus +{ + const ERROR = -1; + const QUEUED = 0; + const READY = 2; + const DELETED = 3; + const IMPORTING = 7; + const EXPORTING = 9; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaCaptionAssetOrderBy +{ + const CREATED_AT_ASC = "+createdAt"; + const DELETED_AT_ASC = "+deletedAt"; + const SIZE_ASC = "+size"; + const UPDATED_AT_ASC = "+updatedAt"; + const CREATED_AT_DESC = "-createdAt"; + const DELETED_AT_DESC = "-deletedAt"; + const SIZE_DESC = "-size"; + const UPDATED_AT_DESC = "-updatedAt"; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaCaptionParamsOrderBy +{ +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaCaptionType +{ + const SRT = "1"; + const DFXP = "2"; + const WEBVTT = "3"; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaCaptionAsset extends KalturaAsset +{ + /** + * The Caption Params used to create this Caption Asset + * + * + * @var int + * @insertonly + */ + public $captionParamsId = null; + + /** + * The language of the caption asset content + * + * + * @var KalturaLanguage + */ + public $language = null; + + /** + * The language of the caption asset content + * + * + * @var KalturaLanguageCode + * @readonly + */ + public $languageCode = null; + + /** + * Is default caption asset of the entry + * + * + * @var KalturaNullableBoolean + */ + public $isDefault = null; + + /** + * Friendly label + * + * + * @var string + */ + public $label = null; + + /** + * The caption format + * + * + * @var KalturaCaptionType + * @insertonly + */ + public $format = null; + + /** + * The status of the asset + * + * + * @var KalturaCaptionAssetStatus + * @readonly + */ + public $status = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaCaptionAssetListResponse extends KalturaObjectBase +{ + /** + * + * + * @var array of KalturaCaptionAsset + * @readonly + */ + public $objects; + + /** + * + * + * @var int + * @readonly + */ + public $totalCount = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaCaptionParams extends KalturaAssetParams +{ + /** + * The language of the caption content + * + * + * @var KalturaLanguage + * @insertonly + */ + public $language = null; + + /** + * Is default caption asset of the entry + * + * + * @var KalturaNullableBoolean + */ + public $isDefault = null; + + /** + * Friendly label + * + * + * @var string + */ + public $label = null; + + /** + * The caption format + * + * + * @var KalturaCaptionType + * @insertonly + */ + public $format = null; + + /** + * Id of the caption params or the flavor params to be used as source for the caption creation + * + * + * @var int + */ + public $sourceParamsId = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaCaptionParamsListResponse extends KalturaObjectBase +{ + /** + * + * + * @var array of KalturaCaptionParams + * @readonly + */ + public $objects; + + /** + * + * + * @var int + * @readonly + */ + public $totalCount = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +abstract class KalturaCaptionAssetBaseFilter extends KalturaAssetFilter +{ + /** + * + * + * @var int + */ + public $captionParamsIdEqual = null; + + /** + * + * + * @var string + */ + public $captionParamsIdIn = null; + + /** + * + * + * @var KalturaCaptionType + */ + public $formatEqual = null; + + /** + * + * + * @var string + */ + public $formatIn = null; + + /** + * + * + * @var KalturaCaptionAssetStatus + */ + public $statusEqual = null; + + /** + * + * + * @var string + */ + public $statusIn = null; + + /** + * + * + * @var string + */ + public $statusNotIn = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +abstract class KalturaCaptionParamsBaseFilter extends KalturaAssetParamsFilter +{ + /** + * + * + * @var KalturaCaptionType + */ + public $formatEqual = null; + + /** + * + * + * @var string + */ + public $formatIn = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaCaptionAssetFilter extends KalturaCaptionAssetBaseFilter +{ + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaCaptionParamsFilter extends KalturaCaptionParamsBaseFilter +{ + +} + + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaCaptionAssetService extends KalturaServiceBase +{ + function __construct(KalturaClient $client = null) + { + parent::__construct($client); + } + + /** + * Add caption asset + * + * @param string $entryId + * @param KalturaCaptionAsset $captionAsset + * @return KalturaCaptionAsset + */ + function add($entryId, KalturaCaptionAsset $captionAsset) + { + $kparams = array(); + $this->client->addParam($kparams, "entryId", $entryId); + $this->client->addParam($kparams, "captionAsset", $captionAsset->toParams()); + $this->client->queueServiceActionCall("caption_captionasset", "add", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaCaptionAsset"); + return $resultObject; + } + + /** + * Update content of caption asset + * + * @param string $id + * @param KalturaContentResource $contentResource + * @return KalturaCaptionAsset + */ + function setContent($id, KalturaContentResource $contentResource) + { + $kparams = array(); + $this->client->addParam($kparams, "id", $id); + $this->client->addParam($kparams, "contentResource", $contentResource->toParams()); + $this->client->queueServiceActionCall("caption_captionasset", "setContent", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaCaptionAsset"); + return $resultObject; + } + + /** + * Update caption asset + * + * @param string $id + * @param KalturaCaptionAsset $captionAsset + * @return KalturaCaptionAsset + */ + function update($id, KalturaCaptionAsset $captionAsset) + { + $kparams = array(); + $this->client->addParam($kparams, "id", $id); + $this->client->addParam($kparams, "captionAsset", $captionAsset->toParams()); + $this->client->queueServiceActionCall("caption_captionasset", "update", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaCaptionAsset"); + return $resultObject; + } + + /** + * Serves caption by entry id and thumnail params id + * + * @param string $entryId + * @param int $captionParamId If not set, default caption will be used. + * @return file + */ + function serveByEntryId($entryId, $captionParamId = null) + { + $kparams = array(); + $this->client->addParam($kparams, "entryId", $entryId); + $this->client->addParam($kparams, "captionParamId", $captionParamId); + $this->client->queueServiceActionCall("caption_captionasset", "serveByEntryId", $kparams); + if(!$this->client->getDestinationPath() && !$this->client->getReturnServedResult()) + return $this->client->getServeUrl(); + return $this->client->doQueue(); + } + + /** + * Get download URL for the asset + * + * @param string $id + * @param int $storageId + * @return string + */ + function getUrl($id, $storageId = null) + { + $kparams = array(); + $this->client->addParam($kparams, "id", $id); + $this->client->addParam($kparams, "storageId", $storageId); + $this->client->queueServiceActionCall("caption_captionasset", "getUrl", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "string"); + return $resultObject; + } + + /** + * Get remote storage existing paths for the asset + * + * @param string $id + * @return KalturaRemotePathListResponse + */ + function getRemotePaths($id) + { + $kparams = array(); + $this->client->addParam($kparams, "id", $id); + $this->client->queueServiceActionCall("caption_captionasset", "getRemotePaths", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaRemotePathListResponse"); + return $resultObject; + } + + /** + * Serves caption by its id + * + * @param string $captionAssetId + * @return file + */ + function serve($captionAssetId) + { + $kparams = array(); + $this->client->addParam($kparams, "captionAssetId", $captionAssetId); + $this->client->queueServiceActionCall("caption_captionasset", "serve", $kparams); + if(!$this->client->getDestinationPath() && !$this->client->getReturnServedResult()) + return $this->client->getServeUrl(); + return $this->client->doQueue(); + } + + /** + * Serves caption by its id converting it to segmented WebVTT + * + * @param string $captionAssetId + * @param int $segmentDuration + * @param int $segmentIndex + * @param int $localTimestamp + * @return file + */ + function serveWebVTT($captionAssetId, $segmentDuration = 30, $segmentIndex = null, $localTimestamp = 10000) + { + $kparams = array(); + $this->client->addParam($kparams, "captionAssetId", $captionAssetId); + $this->client->addParam($kparams, "segmentDuration", $segmentDuration); + $this->client->addParam($kparams, "segmentIndex", $segmentIndex); + $this->client->addParam($kparams, "localTimestamp", $localTimestamp); + $this->client->queueServiceActionCall("caption_captionasset", "serveWebVTT", $kparams); + if(!$this->client->getDestinationPath() && !$this->client->getReturnServedResult()) + return $this->client->getServeUrl(); + return $this->client->doQueue(); + } + + /** + * Markss the caption as default and removes that mark from all other caption assets of the entry. + * + * @param string $captionAssetId + * @return + */ + function setAsDefault($captionAssetId) + { + $kparams = array(); + $this->client->addParam($kparams, "captionAssetId", $captionAssetId); + $this->client->queueServiceActionCall("caption_captionasset", "setAsDefault", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "null"); + return $resultObject; + } + + /** + * + * + * @param string $captionAssetId + * @return KalturaCaptionAsset + */ + function get($captionAssetId) + { + $kparams = array(); + $this->client->addParam($kparams, "captionAssetId", $captionAssetId); + $this->client->queueServiceActionCall("caption_captionasset", "get", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaCaptionAsset"); + return $resultObject; + } + + /** + * List caption Assets by filter and pager + * + * @param KalturaAssetFilter $filter + * @param KalturaFilterPager $pager + * @return KalturaCaptionAssetListResponse + */ + function listAction(KalturaAssetFilter $filter = null, KalturaFilterPager $pager = null) + { + $kparams = array(); + if ($filter !== null) + $this->client->addParam($kparams, "filter", $filter->toParams()); + if ($pager !== null) + $this->client->addParam($kparams, "pager", $pager->toParams()); + $this->client->queueServiceActionCall("caption_captionasset", "list", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaCaptionAssetListResponse"); + return $resultObject; + } + + /** + * + * + * @param string $captionAssetId + * @return + */ + function delete($captionAssetId) + { + $kparams = array(); + $this->client->addParam($kparams, "captionAssetId", $captionAssetId); + $this->client->queueServiceActionCall("caption_captionasset", "delete", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "null"); + return $resultObject; + } +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaCaptionParamsService extends KalturaServiceBase +{ + function __construct(KalturaClient $client = null) + { + parent::__construct($client); + } + + /** + * Add new Caption Params + * + * @param KalturaCaptionParams $captionParams + * @return KalturaCaptionParams + */ + function add(KalturaCaptionParams $captionParams) + { + $kparams = array(); + $this->client->addParam($kparams, "captionParams", $captionParams->toParams()); + $this->client->queueServiceActionCall("caption_captionparams", "add", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaCaptionParams"); + return $resultObject; + } + + /** + * Get Caption Params by ID + * + * @param int $id + * @return KalturaCaptionParams + */ + function get($id) + { + $kparams = array(); + $this->client->addParam($kparams, "id", $id); + $this->client->queueServiceActionCall("caption_captionparams", "get", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaCaptionParams"); + return $resultObject; + } + + /** + * Update Caption Params by ID + * + * @param int $id + * @param KalturaCaptionParams $captionParams + * @return KalturaCaptionParams + */ + function update($id, KalturaCaptionParams $captionParams) + { + $kparams = array(); + $this->client->addParam($kparams, "id", $id); + $this->client->addParam($kparams, "captionParams", $captionParams->toParams()); + $this->client->queueServiceActionCall("caption_captionparams", "update", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaCaptionParams"); + return $resultObject; + } + + /** + * Delete Caption Params by ID + * + * @param int $id + * @return + */ + function delete($id) + { + $kparams = array(); + $this->client->addParam($kparams, "id", $id); + $this->client->queueServiceActionCall("caption_captionparams", "delete", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "null"); + return $resultObject; + } + + /** + * List Caption Params by filter with paging support (By default - all system default params will be listed too) + * + * @param KalturaCaptionParamsFilter $filter + * @param KalturaFilterPager $pager + * @return KalturaCaptionParamsListResponse + */ + function listAction(KalturaCaptionParamsFilter $filter = null, KalturaFilterPager $pager = null) + { + $kparams = array(); + if ($filter !== null) + $this->client->addParam($kparams, "filter", $filter->toParams()); + if ($pager !== null) + $this->client->addParam($kparams, "pager", $pager->toParams()); + $this->client->queueServiceActionCall("caption_captionparams", "list", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaCaptionParamsListResponse"); + return $resultObject; + } +} +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaCaptionClientPlugin extends KalturaClientPlugin +{ + /** + * @var KalturaCaptionAssetService + */ + public $captionAsset = null; + + /** + * @var KalturaCaptionParamsService + */ + public $captionParams = null; + + protected function __construct(KalturaClient $client) + { + parent::__construct($client); + $this->captionAsset = new KalturaCaptionAssetService($client); + $this->captionParams = new KalturaCaptionParamsService($client); + } + + /** + * @return KalturaCaptionClientPlugin + */ + public static function get(KalturaClient $client) + { + return new KalturaCaptionClientPlugin($client); + } + + /** + * @return array + */ + public function getServices() + { + $services = array( + 'captionAsset' => $this->captionAsset, + 'captionParams' => $this->captionParams, + ); + return $services; + } + + /** + * @return string + */ + public function getName() + { + return 'caption'; + } +} + diff --git a/local/kaltura/API/KalturaPlugins/KalturaCaptionSearchClientPlugin.php b/local/kaltura/API/KalturaPlugins/KalturaCaptionSearchClientPlugin.php new file mode 100644 index 0000000000000..0962e15fdab99 --- /dev/null +++ b/local/kaltura/API/KalturaPlugins/KalturaCaptionSearchClientPlugin.php @@ -0,0 +1,325 @@ +. +// +// @ignore +// =================================================================================================== + +/** + * @package Kaltura + * @subpackage Client + */ +require_once(dirname(__FILE__) . "/../KalturaClientBase.php"); +require_once(dirname(__FILE__) . "/../KalturaEnums.php"); +require_once(dirname(__FILE__) . "/../KalturaTypes.php"); +require_once(dirname(__FILE__) . "/KalturaCaptionClientPlugin.php"); + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaCaptionAssetItem extends KalturaObjectBase +{ + /** + * The Caption Asset object + * + * + * @var KalturaCaptionAsset + */ + public $asset; + + /** + * The entry object + * + * + * @var KalturaBaseEntry + */ + public $entry; + + /** + * + * + * @var int + */ + public $startTime = null; + + /** + * + * + * @var int + */ + public $endTime = null; + + /** + * + * + * @var string + */ + public $content = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaCaptionAssetItemListResponse extends KalturaObjectBase +{ + /** + * + * + * @var array of KalturaCaptionAssetItem + * @readonly + */ + public $objects; + + /** + * + * + * @var int + * @readonly + */ + public $totalCount = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaCaptionAssetItemFilter extends KalturaCaptionAssetFilter +{ + /** + * + * + * @var string + */ + public $contentLike = null; + + /** + * + * + * @var string + */ + public $contentMultiLikeOr = null; + + /** + * + * + * @var string + */ + public $contentMultiLikeAnd = null; + + /** + * + * + * @var string + */ + public $partnerDescriptionLike = null; + + /** + * + * + * @var string + */ + public $partnerDescriptionMultiLikeOr = null; + + /** + * + * + * @var string + */ + public $partnerDescriptionMultiLikeAnd = null; + + /** + * + * + * @var KalturaLanguage + */ + public $languageEqual = null; + + /** + * + * + * @var string + */ + public $languageIn = null; + + /** + * + * + * @var string + */ + public $labelEqual = null; + + /** + * + * + * @var string + */ + public $labelIn = null; + + /** + * + * + * @var int + */ + public $startTimeGreaterThanOrEqual = null; + + /** + * + * + * @var int + */ + public $startTimeLessThanOrEqual = null; + + /** + * + * + * @var int + */ + public $endTimeGreaterThanOrEqual = null; + + /** + * + * + * @var int + */ + public $endTimeLessThanOrEqual = null; + + +} + + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaCaptionAssetItemService extends KalturaServiceBase +{ + function __construct(KalturaClient $client = null) + { + parent::__construct($client); + } + + /** + * Search caption asset items by filter, pager and free text + * + * @param KalturaBaseEntryFilter $entryFilter + * @param KalturaCaptionAssetItemFilter $captionAssetItemFilter + * @param KalturaFilterPager $captionAssetItemPager + * @return KalturaCaptionAssetItemListResponse + */ + function search(KalturaBaseEntryFilter $entryFilter = null, KalturaCaptionAssetItemFilter $captionAssetItemFilter = null, KalturaFilterPager $captionAssetItemPager = null) + { + $kparams = array(); + if ($entryFilter !== null) + $this->client->addParam($kparams, "entryFilter", $entryFilter->toParams()); + if ($captionAssetItemFilter !== null) + $this->client->addParam($kparams, "captionAssetItemFilter", $captionAssetItemFilter->toParams()); + if ($captionAssetItemPager !== null) + $this->client->addParam($kparams, "captionAssetItemPager", $captionAssetItemPager->toParams()); + $this->client->queueServiceActionCall("captionsearch_captionassetitem", "search", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaCaptionAssetItemListResponse"); + return $resultObject; + } + + /** + * Search caption asset items by filter, pager and free text + * + * @param KalturaBaseEntryFilter $entryFilter + * @param KalturaCaptionAssetItemFilter $captionAssetItemFilter + * @param KalturaFilterPager $captionAssetItemPager + * @return KalturaBaseEntryListResponse + */ + function searchEntries(KalturaBaseEntryFilter $entryFilter = null, KalturaCaptionAssetItemFilter $captionAssetItemFilter = null, KalturaFilterPager $captionAssetItemPager = null) + { + $kparams = array(); + if ($entryFilter !== null) + $this->client->addParam($kparams, "entryFilter", $entryFilter->toParams()); + if ($captionAssetItemFilter !== null) + $this->client->addParam($kparams, "captionAssetItemFilter", $captionAssetItemFilter->toParams()); + if ($captionAssetItemPager !== null) + $this->client->addParam($kparams, "captionAssetItemPager", $captionAssetItemPager->toParams()); + $this->client->queueServiceActionCall("captionsearch_captionassetitem", "searchEntries", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaBaseEntryListResponse"); + return $resultObject; + } +} +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaCaptionSearchClientPlugin extends KalturaClientPlugin +{ + /** + * @var KalturaCaptionAssetItemService + */ + public $captionAssetItem = null; + + protected function __construct(KalturaClient $client) + { + parent::__construct($client); + $this->captionAssetItem = new KalturaCaptionAssetItemService($client); + } + + /** + * @return KalturaCaptionSearchClientPlugin + */ + public static function get(KalturaClient $client) + { + return new KalturaCaptionSearchClientPlugin($client); + } + + /** + * @return array + */ + public function getServices() + { + $services = array( + 'captionAssetItem' => $this->captionAssetItem, + ); + return $services; + } + + /** + * @return string + */ + public function getName() + { + return 'captionSearch'; + } +} + diff --git a/local/kaltura/API/KalturaPlugins/KalturaCodeCuePointClientPlugin.php b/local/kaltura/API/KalturaPlugins/KalturaCodeCuePointClientPlugin.php new file mode 100644 index 0000000000000..b598d86d7866a --- /dev/null +++ b/local/kaltura/API/KalturaPlugins/KalturaCodeCuePointClientPlugin.php @@ -0,0 +1,237 @@ +. +// +// @ignore +// =================================================================================================== + +/** + * @package Kaltura + * @subpackage Client + */ +require_once(dirname(__FILE__) . "/../KalturaClientBase.php"); +require_once(dirname(__FILE__) . "/../KalturaEnums.php"); +require_once(dirname(__FILE__) . "/../KalturaTypes.php"); +require_once(dirname(__FILE__) . "/KalturaCuePointClientPlugin.php"); + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaCodeCuePointOrderBy +{ + const CREATED_AT_ASC = "+createdAt"; + const DURATION_ASC = "+duration"; + const END_TIME_ASC = "+endTime"; + const PARTNER_SORT_VALUE_ASC = "+partnerSortValue"; + const START_TIME_ASC = "+startTime"; + const UPDATED_AT_ASC = "+updatedAt"; + const CREATED_AT_DESC = "-createdAt"; + const DURATION_DESC = "-duration"; + const END_TIME_DESC = "-endTime"; + const PARTNER_SORT_VALUE_DESC = "-partnerSortValue"; + const START_TIME_DESC = "-startTime"; + const UPDATED_AT_DESC = "-updatedAt"; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaCodeCuePoint extends KalturaCuePoint +{ + /** + * + * + * @var string + */ + public $code = null; + + /** + * + * + * @var string + */ + public $description = null; + + /** + * + * + * @var int + */ + public $endTime = null; + + /** + * Duration in milliseconds + * + * + * @var int + * @readonly + */ + public $duration = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +abstract class KalturaCodeCuePointBaseFilter extends KalturaCuePointFilter +{ + /** + * + * + * @var string + */ + public $codeLike = null; + + /** + * + * + * @var string + */ + public $codeMultiLikeOr = null; + + /** + * + * + * @var string + */ + public $codeMultiLikeAnd = null; + + /** + * + * + * @var string + */ + public $codeEqual = null; + + /** + * + * + * @var string + */ + public $codeIn = null; + + /** + * + * + * @var string + */ + public $descriptionLike = null; + + /** + * + * + * @var string + */ + public $descriptionMultiLikeOr = null; + + /** + * + * + * @var string + */ + public $descriptionMultiLikeAnd = null; + + /** + * + * + * @var int + */ + public $endTimeGreaterThanOrEqual = null; + + /** + * + * + * @var int + */ + public $endTimeLessThanOrEqual = null; + + /** + * + * + * @var int + */ + public $durationGreaterThanOrEqual = null; + + /** + * + * + * @var int + */ + public $durationLessThanOrEqual = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaCodeCuePointFilter extends KalturaCodeCuePointBaseFilter +{ + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaCodeCuePointClientPlugin extends KalturaClientPlugin +{ + protected function __construct(KalturaClient $client) + { + parent::__construct($client); + } + + /** + * @return KalturaCodeCuePointClientPlugin + */ + public static function get(KalturaClient $client) + { + return new KalturaCodeCuePointClientPlugin($client); + } + + /** + * @return array + */ + public function getServices() + { + $services = array( + ); + return $services; + } + + /** + * @return string + */ + public function getName() + { + return 'codeCuePoint'; + } +} + diff --git a/local/kaltura/API/KalturaPlugins/KalturaContentDistributionClientPlugin.php b/local/kaltura/API/KalturaPlugins/KalturaContentDistributionClientPlugin.php new file mode 100644 index 0000000000000..16c38cffc2447 --- /dev/null +++ b/local/kaltura/API/KalturaPlugins/KalturaContentDistributionClientPlugin.php @@ -0,0 +1,3454 @@ +. +// +// @ignore +// =================================================================================================== + +/** + * @package Kaltura + * @subpackage Client + */ +require_once(dirname(__FILE__) . "/../KalturaClientBase.php"); +require_once(dirname(__FILE__) . "/../KalturaEnums.php"); +require_once(dirname(__FILE__) . "/../KalturaTypes.php"); +require_once(dirname(__FILE__) . "/KalturaMetadataClientPlugin.php"); + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaDistributionAction +{ + const SUBMIT = 1; + const UPDATE = 2; + const DELETE = 3; + const FETCH_REPORT = 4; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaDistributionErrorType +{ + const MISSING_FLAVOR = 1; + const MISSING_THUMBNAIL = 2; + const MISSING_METADATA = 3; + const INVALID_DATA = 4; + const MISSING_ASSET = 5; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaDistributionFieldRequiredStatus +{ + const NOT_REQUIRED = 0; + const REQUIRED_BY_PROVIDER = 1; + const REQUIRED_BY_PARTNER = 2; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaDistributionProfileActionStatus +{ + const DISABLED = 1; + const AUTOMATIC = 2; + const MANUAL = 3; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaDistributionProfileStatus +{ + const DISABLED = 1; + const ENABLED = 2; + const DELETED = 3; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaDistributionProtocol +{ + const FTP = 1; + const SCP = 2; + const SFTP = 3; + const HTTP = 4; + const HTTPS = 5; + const ASPERA = 10; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaDistributionValidationErrorType +{ + const CUSTOM_ERROR = 0; + const STRING_EMPTY = 1; + const STRING_TOO_LONG = 2; + const STRING_TOO_SHORT = 3; + const INVALID_FORMAT = 4; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaEntryDistributionFlag +{ + const NONE = 0; + const SUBMIT_REQUIRED = 1; + const DELETE_REQUIRED = 2; + const UPDATE_REQUIRED = 3; + const ENABLE_REQUIRED = 4; + const DISABLE_REQUIRED = 5; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaEntryDistributionStatus +{ + const PENDING = 0; + const QUEUED = 1; + const READY = 2; + const DELETED = 3; + const SUBMITTING = 4; + const UPDATING = 5; + const DELETING = 6; + const ERROR_SUBMITTING = 7; + const ERROR_UPDATING = 8; + const ERROR_DELETING = 9; + const REMOVED = 10; + const IMPORT_SUBMITTING = 11; + const IMPORT_UPDATING = 12; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaEntryDistributionSunStatus +{ + const BEFORE_SUNRISE = 1; + const AFTER_SUNRISE = 2; + const AFTER_SUNSET = 3; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaGenericDistributionProviderParser +{ + const XSL = 1; + const XPATH = 2; + const REGEX = 3; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaGenericDistributionProviderStatus +{ + const ACTIVE = 2; + const DELETED = 3; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaConfigurableDistributionProfileOrderBy +{ + const CREATED_AT_ASC = "+createdAt"; + const UPDATED_AT_ASC = "+updatedAt"; + const CREATED_AT_DESC = "-createdAt"; + const UPDATED_AT_DESC = "-updatedAt"; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaDistributionProfileOrderBy +{ + const CREATED_AT_ASC = "+createdAt"; + const UPDATED_AT_ASC = "+updatedAt"; + const CREATED_AT_DESC = "-createdAt"; + const UPDATED_AT_DESC = "-updatedAt"; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaDistributionProviderOrderBy +{ +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaDistributionProviderType +{ + const ATT_UVERSE = "attUverseDistribution.ATT_UVERSE"; + const AVN = "avnDistribution.AVN"; + const COMCAST_MRSS = "comcastMrssDistribution.COMCAST_MRSS"; + const CROSS_KALTURA = "crossKalturaDistribution.CROSS_KALTURA"; + const DAILYMOTION = "dailymotionDistribution.DAILYMOTION"; + const DOUBLECLICK = "doubleClickDistribution.DOUBLECLICK"; + const FREEWHEEL = "freewheelDistribution.FREEWHEEL"; + const FREEWHEEL_GENERIC = "freewheelGenericDistribution.FREEWHEEL_GENERIC"; + const FTP = "ftpDistribution.FTP"; + const FTP_SCHEDULED = "ftpDistribution.FTP_SCHEDULED"; + const HULU = "huluDistribution.HULU"; + const IDETIC = "ideticDistribution.IDETIC"; + const METRO_PCS = "metroPcsDistribution.METRO_PCS"; + const MSN = "msnDistribution.MSN"; + const NDN = "ndnDistribution.NDN"; + const PODCAST = "podcastDistribution.PODCAST"; + const QUICKPLAY = "quickPlayDistribution.QUICKPLAY"; + const SYNACOR_HBO = "synacorHboDistribution.SYNACOR_HBO"; + const TIME_WARNER = "timeWarnerDistribution.TIME_WARNER"; + const TVCOM = "tvComDistribution.TVCOM"; + const UVERSE_CLICK_TO_ORDER = "uverseClickToOrderDistribution.UVERSE_CLICK_TO_ORDER"; + const UVERSE = "uverseDistribution.UVERSE"; + const VERIZON_VCAST = "verizonVcastDistribution.VERIZON_VCAST"; + const YAHOO = "yahooDistribution.YAHOO"; + const YOUTUBE = "youTubeDistribution.YOUTUBE"; + const YOUTUBE_API = "youtubeApiDistribution.YOUTUBE_API"; + const GENERIC = "1"; + const SYNDICATION = "2"; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaEntryDistributionOrderBy +{ + const CREATED_AT_ASC = "+createdAt"; + const SUBMITTED_AT_ASC = "+submittedAt"; + const SUNRISE_ASC = "+sunrise"; + const SUNSET_ASC = "+sunset"; + const UPDATED_AT_ASC = "+updatedAt"; + const CREATED_AT_DESC = "-createdAt"; + const SUBMITTED_AT_DESC = "-submittedAt"; + const SUNRISE_DESC = "-sunrise"; + const SUNSET_DESC = "-sunset"; + const UPDATED_AT_DESC = "-updatedAt"; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaGenericDistributionProfileOrderBy +{ + const CREATED_AT_ASC = "+createdAt"; + const UPDATED_AT_ASC = "+updatedAt"; + const CREATED_AT_DESC = "-createdAt"; + const UPDATED_AT_DESC = "-updatedAt"; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaGenericDistributionProviderActionOrderBy +{ + const CREATED_AT_ASC = "+createdAt"; + const UPDATED_AT_ASC = "+updatedAt"; + const CREATED_AT_DESC = "-createdAt"; + const UPDATED_AT_DESC = "-updatedAt"; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaGenericDistributionProviderOrderBy +{ + const CREATED_AT_ASC = "+createdAt"; + const UPDATED_AT_ASC = "+updatedAt"; + const CREATED_AT_DESC = "-createdAt"; + const UPDATED_AT_DESC = "-updatedAt"; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaSyndicationDistributionProfileOrderBy +{ + const CREATED_AT_ASC = "+createdAt"; + const UPDATED_AT_ASC = "+updatedAt"; + const CREATED_AT_DESC = "-createdAt"; + const UPDATED_AT_DESC = "-updatedAt"; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaSyndicationDistributionProviderOrderBy +{ +} + +/** + * @package Kaltura + * @subpackage Client + */ +abstract class KalturaAssetDistributionCondition extends KalturaObjectBase +{ + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaAssetDistributionRule extends KalturaObjectBase +{ + /** + * The validation error description that will be set on the "data" property on KalturaDistributionValidationErrorMissingAsset if rule was not fulfilled + * + * + * @var string + */ + public $validationError = null; + + /** + * An array of asset distribution conditions + * + * + * @var array of KalturaAssetDistributionCondition + */ + public $assetDistributionConditions; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaDistributionFieldConfig extends KalturaObjectBase +{ + /** + * A value taken from a connector field enum which associates the current configuration to that connector field + * Field enum class should be returned by the provider's getFieldEnumClass function. + * + * + * @var string + */ + public $fieldName = null; + + /** + * A string that will be shown to the user as the field name in error messages related to the current field + * + * + * @var string + */ + public $userFriendlyFieldName = null; + + /** + * An XSLT string that extracts the right value from the Kaltura entry MRSS XML. + * The value of the current connector field will be the one that is returned from transforming the Kaltura entry MRSS XML using this XSLT string. + * + * + * @var string + */ + public $entryMrssXslt = null; + + /** + * Is the field required to have a value for submission ? + * + * + * @var KalturaDistributionFieldRequiredStatus + */ + public $isRequired = null; + + /** + * Trigger distribution update when this field changes or not ? + * + * + * @var bool + */ + public $updateOnChange = null; + + /** + * Entry column or metadata xpath that should trigger an update + * + * + * @var array of KalturaString + */ + public $updateParams; + + /** + * Is this field config is the default for the distribution provider? + * + * + * @var bool + * @readonly + */ + public $isDefault = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +abstract class KalturaDistributionJobProviderData extends KalturaObjectBase +{ + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaDistributionThumbDimensions extends KalturaObjectBase +{ + /** + * + * + * @var int + */ + public $width = null; + + /** + * + * + * @var int + */ + public $height = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +abstract class KalturaDistributionProfile extends KalturaObjectBase +{ + /** + * Auto generated unique id + * + * + * @var int + * @readonly + */ + public $id = null; + + /** + * Profile creation date as Unix timestamp (In seconds) + * + * + * @var int + * @readonly + */ + public $createdAt = null; + + /** + * Profile last update date as Unix timestamp (In seconds) + * + * + * @var int + * @readonly + */ + public $updatedAt = null; + + /** + * + * + * @var int + * @readonly + */ + public $partnerId = null; + + /** + * + * + * @var KalturaDistributionProviderType + * @insertonly + */ + public $providerType = null; + + /** + * + * + * @var string + */ + public $name = null; + + /** + * + * + * @var KalturaDistributionProfileStatus + */ + public $status = null; + + /** + * + * + * @var KalturaDistributionProfileActionStatus + */ + public $submitEnabled = null; + + /** + * + * + * @var KalturaDistributionProfileActionStatus + */ + public $updateEnabled = null; + + /** + * + * + * @var KalturaDistributionProfileActionStatus + */ + public $deleteEnabled = null; + + /** + * + * + * @var KalturaDistributionProfileActionStatus + */ + public $reportEnabled = null; + + /** + * Comma separated flavor params ids that should be auto converted + * + * + * @var string + */ + public $autoCreateFlavors = null; + + /** + * Comma separated thumbnail params ids that should be auto generated + * + * + * @var string + */ + public $autoCreateThumb = null; + + /** + * Comma separated flavor params ids that should be submitted if ready + * + * + * @var string + */ + public $optionalFlavorParamsIds = null; + + /** + * Comma separated flavor params ids that required to be ready before submission + * + * + * @var string + */ + public $requiredFlavorParamsIds = null; + + /** + * Thumbnail dimensions that should be submitted if ready + * + * + * @var array of KalturaDistributionThumbDimensions + */ + public $optionalThumbDimensions; + + /** + * Thumbnail dimensions that required to be readt before submission + * + * + * @var array of KalturaDistributionThumbDimensions + */ + public $requiredThumbDimensions; + + /** + * Asset Distribution Rules for assets that should be submitted if ready + * + * + * @var array of KalturaAssetDistributionRule + */ + public $optionalAssetDistributionRules; + + /** + * Assets Asset Distribution Rules for assets that are required to be ready before submission + * + * + * @var array of KalturaAssetDistributionRule + */ + public $requiredAssetDistributionRules; + + /** + * If entry distribution sunrise not specified that will be the default since entry creation time, in seconds + * + * + * @var int + */ + public $sunriseDefaultOffset = null; + + /** + * If entry distribution sunset not specified that will be the default since entry creation time, in seconds + * + * + * @var int + */ + public $sunsetDefaultOffset = null; + + /** + * The best external storage to be used to download the asset files from + * + * + * @var int + */ + public $recommendedStorageProfileForDownload = null; + + /** + * The best Kaltura data center to be used to download the asset files to + * + * + * @var int + */ + public $recommendedDcForDownload = null; + + /** + * The best Kaltura data center to be used to execute the distribution job + * + * + * @var int + */ + public $recommendedDcForExecute = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaDistributionProfileListResponse extends KalturaObjectBase +{ + /** + * + * + * @var array of KalturaDistributionProfile + * @readonly + */ + public $objects; + + /** + * + * + * @var int + * @readonly + */ + public $totalCount = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +abstract class KalturaDistributionProvider extends KalturaObjectBase +{ + /** + * + * + * @var KalturaDistributionProviderType + * @readonly + */ + public $type = null; + + /** + * + * + * @var string + */ + public $name = null; + + /** + * + * + * @var bool + */ + public $scheduleUpdateEnabled = null; + + /** + * + * + * @var bool + */ + public $availabilityUpdateEnabled = null; + + /** + * + * + * @var bool + */ + public $deleteInsteadUpdate = null; + + /** + * + * + * @var int + */ + public $intervalBeforeSunrise = null; + + /** + * + * + * @var int + */ + public $intervalBeforeSunset = null; + + /** + * + * + * @var string + */ + public $updateRequiredEntryFields = null; + + /** + * + * + * @var string + */ + public $updateRequiredMetadataXPaths = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaDistributionProviderListResponse extends KalturaObjectBase +{ + /** + * + * + * @var array of KalturaDistributionProvider + * @readonly + */ + public $objects; + + /** + * + * + * @var int + * @readonly + */ + public $totalCount = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaDistributionRemoteMediaFile extends KalturaObjectBase +{ + /** + * + * + * @var string + */ + public $version = null; + + /** + * + * + * @var string + */ + public $assetId = null; + + /** + * + * + * @var string + */ + public $remoteId = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +abstract class KalturaDistributionValidationError extends KalturaObjectBase +{ + /** + * + * + * @var KalturaDistributionAction + */ + public $action = null; + + /** + * + * + * @var KalturaDistributionErrorType + */ + public $errorType = null; + + /** + * + * + * @var string + */ + public $description = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaEntryDistribution extends KalturaObjectBase +{ + /** + * Auto generated unique id + * + * + * @var int + * @readonly + */ + public $id = null; + + /** + * Entry distribution creation date as Unix timestamp (In seconds) + * + * + * @var int + * @readonly + */ + public $createdAt = null; + + /** + * Entry distribution last update date as Unix timestamp (In seconds) + * + * + * @var int + * @readonly + */ + public $updatedAt = null; + + /** + * Entry distribution submission date as Unix timestamp (In seconds) + * + * + * @var int + * @readonly + */ + public $submittedAt = null; + + /** + * + * + * @var string + * @insertonly + */ + public $entryId = null; + + /** + * + * + * @var int + * @readonly + */ + public $partnerId = null; + + /** + * + * + * @var int + * @insertonly + */ + public $distributionProfileId = null; + + /** + * + * + * @var KalturaEntryDistributionStatus + * @readonly + */ + public $status = null; + + /** + * + * + * @var KalturaEntryDistributionSunStatus + * @readonly + */ + public $sunStatus = null; + + /** + * + * + * @var KalturaEntryDistributionFlag + * @readonly + */ + public $dirtyStatus = null; + + /** + * Comma separated thumbnail asset ids + * + * + * @var string + */ + public $thumbAssetIds = null; + + /** + * Comma separated flavor asset ids + * + * + * @var string + */ + public $flavorAssetIds = null; + + /** + * Comma separated asset ids + * + * + * @var string + */ + public $assetIds = null; + + /** + * Entry distribution publish time as Unix timestamp (In seconds) + * + * + * @var int + */ + public $sunrise = null; + + /** + * Entry distribution un-publish time as Unix timestamp (In seconds) + * + * + * @var int + */ + public $sunset = null; + + /** + * The id as returned from the distributed destination + * + * + * @var string + * @readonly + */ + public $remoteId = null; + + /** + * The plays as retrieved from the remote destination reports + * + * + * @var int + * @readonly + */ + public $plays = null; + + /** + * The views as retrieved from the remote destination reports + * + * + * @var int + * @readonly + */ + public $views = null; + + /** + * + * + * @var array of KalturaDistributionValidationError + */ + public $validationErrors; + + /** + * + * + * @var KalturaBatchJobErrorTypes + * @readonly + */ + public $errorType = null; + + /** + * + * + * @var int + * @readonly + */ + public $errorNumber = null; + + /** + * + * + * @var string + * @readonly + */ + public $errorDescription = null; + + /** + * + * + * @var KalturaNullableBoolean + * @readonly + */ + public $hasSubmitResultsLog = null; + + /** + * + * + * @var KalturaNullableBoolean + * @readonly + */ + public $hasSubmitSentDataLog = null; + + /** + * + * + * @var KalturaNullableBoolean + * @readonly + */ + public $hasUpdateResultsLog = null; + + /** + * + * + * @var KalturaNullableBoolean + * @readonly + */ + public $hasUpdateSentDataLog = null; + + /** + * + * + * @var KalturaNullableBoolean + * @readonly + */ + public $hasDeleteResultsLog = null; + + /** + * + * + * @var KalturaNullableBoolean + * @readonly + */ + public $hasDeleteSentDataLog = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaEntryDistributionListResponse extends KalturaObjectBase +{ + /** + * + * + * @var array of KalturaEntryDistribution + * @readonly + */ + public $objects; + + /** + * + * + * @var int + * @readonly + */ + public $totalCount = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaGenericDistributionProfileAction extends KalturaObjectBase +{ + /** + * + * + * @var KalturaDistributionProtocol + */ + public $protocol = null; + + /** + * + * + * @var string + */ + public $serverUrl = null; + + /** + * + * + * @var string + */ + public $serverPath = null; + + /** + * + * + * @var string + */ + public $username = null; + + /** + * + * + * @var string + */ + public $password = null; + + /** + * + * + * @var bool + */ + public $ftpPassiveMode = null; + + /** + * + * + * @var string + */ + public $httpFieldName = null; + + /** + * + * + * @var string + */ + public $httpFileName = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaGenericDistributionProviderAction extends KalturaObjectBase +{ + /** + * Auto generated + * + * + * @var int + * @readonly + */ + public $id = null; + + /** + * Generic distribution provider action creation date as Unix timestamp (In seconds) + * + * + * @var int + * @readonly + */ + public $createdAt = null; + + /** + * Generic distribution provider action last update date as Unix timestamp (In seconds) + * + * + * @var int + * @readonly + */ + public $updatedAt = null; + + /** + * + * + * @var int + * @insertonly + */ + public $genericDistributionProviderId = null; + + /** + * + * + * @var KalturaDistributionAction + * @insertonly + */ + public $action = null; + + /** + * + * + * @var KalturaGenericDistributionProviderStatus + * @readonly + */ + public $status = null; + + /** + * + * + * @var KalturaGenericDistributionProviderParser + */ + public $resultsParser = null; + + /** + * + * + * @var KalturaDistributionProtocol + */ + public $protocol = null; + + /** + * + * + * @var string + */ + public $serverAddress = null; + + /** + * + * + * @var string + */ + public $remotePath = null; + + /** + * + * + * @var string + */ + public $remoteUsername = null; + + /** + * + * + * @var string + */ + public $remotePassword = null; + + /** + * + * + * @var string + */ + public $editableFields = null; + + /** + * + * + * @var string + */ + public $mandatoryFields = null; + + /** + * + * + * @var string + * @readonly + */ + public $mrssTransformer = null; + + /** + * + * + * @var string + * @readonly + */ + public $mrssValidator = null; + + /** + * + * + * @var string + * @readonly + */ + public $resultsTransformer = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaGenericDistributionProviderActionListResponse extends KalturaObjectBase +{ + /** + * + * + * @var array of KalturaGenericDistributionProviderAction + * @readonly + */ + public $objects; + + /** + * + * + * @var int + * @readonly + */ + public $totalCount = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaGenericDistributionProvider extends KalturaDistributionProvider +{ + /** + * Auto generated + * + * + * @var int + * @readonly + */ + public $id = null; + + /** + * Generic distribution provider creation date as Unix timestamp (In seconds) + * + * + * @var int + * @readonly + */ + public $createdAt = null; + + /** + * Generic distribution provider last update date as Unix timestamp (In seconds) + * + * + * @var int + * @readonly + */ + public $updatedAt = null; + + /** + * + * + * @var int + * @readonly + */ + public $partnerId = null; + + /** + * + * + * @var bool + */ + public $isDefault = null; + + /** + * + * + * @var KalturaGenericDistributionProviderStatus + * @readonly + */ + public $status = null; + + /** + * + * + * @var string + */ + public $optionalFlavorParamsIds = null; + + /** + * + * + * @var string + */ + public $requiredFlavorParamsIds = null; + + /** + * + * + * @var array of KalturaDistributionThumbDimensions + */ + public $optionalThumbDimensions; + + /** + * + * + * @var array of KalturaDistributionThumbDimensions + */ + public $requiredThumbDimensions; + + /** + * + * + * @var string + */ + public $editableFields = null; + + /** + * + * + * @var string + */ + public $mandatoryFields = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaGenericDistributionProviderListResponse extends KalturaObjectBase +{ + /** + * + * + * @var array of KalturaGenericDistributionProvider + * @readonly + */ + public $objects; + + /** + * + * + * @var int + * @readonly + */ + public $totalCount = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaAssetDistributionPropertyCondition extends KalturaAssetDistributionCondition +{ + /** + * The property name to look for, this will match to a getter on the asset object. + * Should be camelCase naming convention (defining "myPropertyName" will look for getMyPropertyName()) + * + * + * @var string + */ + public $propertyName = null; + + /** + * The value to compare + * + * + * @var string + */ + public $propertyValue = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +abstract class KalturaConfigurableDistributionJobProviderData extends KalturaDistributionJobProviderData +{ + /** + * + * + * @var string + */ + public $fieldValues = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +abstract class KalturaConfigurableDistributionProfile extends KalturaDistributionProfile +{ + /** + * + * + * @var array of KalturaDistributionFieldConfig + */ + public $fieldConfigArray; + + /** + * + * + * @var array of KalturaExtendingItemMrssParameter + */ + public $itemXpathsToExtend; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaContentDistributionSearchItem extends KalturaSearchItem +{ + /** + * + * + * @var bool + */ + public $noDistributionProfiles = null; + + /** + * + * + * @var int + */ + public $distributionProfileId = null; + + /** + * + * + * @var KalturaEntryDistributionSunStatus + */ + public $distributionSunStatus = null; + + /** + * + * + * @var KalturaEntryDistributionFlag + */ + public $entryDistributionFlag = null; + + /** + * + * + * @var KalturaEntryDistributionStatus + */ + public $entryDistributionStatus = null; + + /** + * + * + * @var bool + */ + public $hasEntryDistributionValidationErrors = null; + + /** + * Comma seperated validation error types + * + * + * @var string + */ + public $entryDistributionValidationErrors = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaDistributionJobData extends KalturaJobData +{ + /** + * + * + * @var int + */ + public $distributionProfileId = null; + + /** + * + * + * @var KalturaDistributionProfile + */ + public $distributionProfile; + + /** + * + * + * @var int + */ + public $entryDistributionId = null; + + /** + * + * + * @var KalturaEntryDistribution + */ + public $entryDistribution; + + /** + * Id of the media in the remote system + * + * + * @var string + */ + public $remoteId = null; + + /** + * + * + * @var KalturaDistributionProviderType + */ + public $providerType = null; + + /** + * Additional data that relevant for the provider only + * + * + * @var KalturaDistributionJobProviderData + */ + public $providerData; + + /** + * The results as returned from the remote destination + * + * + * @var string + */ + public $results = null; + + /** + * The data as sent to the remote destination + * + * + * @var string + */ + public $sentData = null; + + /** + * Stores array of media files that submitted to the destination site + * Could be used later for media update + * + * + * @var array of KalturaDistributionRemoteMediaFile + */ + public $mediaFiles; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +abstract class KalturaDistributionProfileBaseFilter extends KalturaFilter +{ + /** + * + * + * @var int + */ + public $idEqual = null; + + /** + * + * + * @var string + */ + public $idIn = null; + + /** + * + * + * @var int + */ + public $createdAtGreaterThanOrEqual = null; + + /** + * + * + * @var int + */ + public $createdAtLessThanOrEqual = null; + + /** + * + * + * @var int + */ + public $updatedAtGreaterThanOrEqual = null; + + /** + * + * + * @var int + */ + public $updatedAtLessThanOrEqual = null; + + /** + * + * + * @var KalturaDistributionProfileStatus + */ + public $statusEqual = null; + + /** + * + * + * @var string + */ + public $statusIn = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +abstract class KalturaDistributionProviderBaseFilter extends KalturaFilter +{ + /** + * + * + * @var KalturaDistributionProviderType + */ + public $typeEqual = null; + + /** + * + * + * @var string + */ + public $typeIn = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaDistributionValidationErrorInvalidData extends KalturaDistributionValidationError +{ + /** + * + * + * @var string + */ + public $fieldName = null; + + /** + * + * + * @var KalturaDistributionValidationErrorType + */ + public $validationErrorType = null; + + /** + * Parameter of the validation error + * For example, minimum value for KalturaDistributionValidationErrorType::STRING_TOO_SHORT validation error + * + * + * @var string + */ + public $validationErrorParam = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaDistributionValidationErrorMissingAsset extends KalturaDistributionValidationError +{ + /** + * + * + * @var string + */ + public $data = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaDistributionValidationErrorMissingFlavor extends KalturaDistributionValidationError +{ + /** + * + * + * @var string + */ + public $flavorParamsId = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaDistributionValidationErrorMissingMetadata extends KalturaDistributionValidationError +{ + /** + * + * + * @var string + */ + public $fieldName = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaDistributionValidationErrorMissingThumbnail extends KalturaDistributionValidationError +{ + /** + * + * + * @var KalturaDistributionThumbDimensions + */ + public $dimensions; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +abstract class KalturaEntryDistributionBaseFilter extends KalturaFilter +{ + /** + * + * + * @var int + */ + public $idEqual = null; + + /** + * + * + * @var string + */ + public $idIn = null; + + /** + * + * + * @var int + */ + public $createdAtGreaterThanOrEqual = null; + + /** + * + * + * @var int + */ + public $createdAtLessThanOrEqual = null; + + /** + * + * + * @var int + */ + public $updatedAtGreaterThanOrEqual = null; + + /** + * + * + * @var int + */ + public $updatedAtLessThanOrEqual = null; + + /** + * + * + * @var int + */ + public $submittedAtGreaterThanOrEqual = null; + + /** + * + * + * @var int + */ + public $submittedAtLessThanOrEqual = null; + + /** + * + * + * @var string + */ + public $entryIdEqual = null; + + /** + * + * + * @var string + */ + public $entryIdIn = null; + + /** + * + * + * @var int + */ + public $distributionProfileIdEqual = null; + + /** + * + * + * @var string + */ + public $distributionProfileIdIn = null; + + /** + * + * + * @var KalturaEntryDistributionStatus + */ + public $statusEqual = null; + + /** + * + * + * @var string + */ + public $statusIn = null; + + /** + * + * + * @var KalturaEntryDistributionFlag + */ + public $dirtyStatusEqual = null; + + /** + * + * + * @var string + */ + public $dirtyStatusIn = null; + + /** + * + * + * @var int + */ + public $sunriseGreaterThanOrEqual = null; + + /** + * + * + * @var int + */ + public $sunriseLessThanOrEqual = null; + + /** + * + * + * @var int + */ + public $sunsetGreaterThanOrEqual = null; + + /** + * + * + * @var int + */ + public $sunsetLessThanOrEqual = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaGenericDistributionJobProviderData extends KalturaDistributionJobProviderData +{ + /** + * + * + * @var string + */ + public $xml = null; + + /** + * + * + * @var string + */ + public $resultParseData = null; + + /** + * + * + * @var KalturaGenericDistributionProviderParser + */ + public $resultParserType = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaGenericDistributionProfile extends KalturaDistributionProfile +{ + /** + * + * + * @var int + * @insertonly + */ + public $genericProviderId = null; + + /** + * + * + * @var KalturaGenericDistributionProfileAction + */ + public $submitAction; + + /** + * + * + * @var KalturaGenericDistributionProfileAction + */ + public $updateAction; + + /** + * + * + * @var KalturaGenericDistributionProfileAction + */ + public $deleteAction; + + /** + * + * + * @var KalturaGenericDistributionProfileAction + */ + public $fetchReportAction; + + /** + * + * + * @var string + */ + public $updateRequiredEntryFields = null; + + /** + * + * + * @var string + */ + public $updateRequiredMetadataXPaths = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +abstract class KalturaGenericDistributionProviderActionBaseFilter extends KalturaFilter +{ + /** + * + * + * @var int + */ + public $idEqual = null; + + /** + * + * + * @var string + */ + public $idIn = null; + + /** + * + * + * @var int + */ + public $createdAtGreaterThanOrEqual = null; + + /** + * + * + * @var int + */ + public $createdAtLessThanOrEqual = null; + + /** + * + * + * @var int + */ + public $updatedAtGreaterThanOrEqual = null; + + /** + * + * + * @var int + */ + public $updatedAtLessThanOrEqual = null; + + /** + * + * + * @var int + */ + public $genericDistributionProviderIdEqual = null; + + /** + * + * + * @var string + */ + public $genericDistributionProviderIdIn = null; + + /** + * + * + * @var KalturaDistributionAction + */ + public $actionEqual = null; + + /** + * + * + * @var string + */ + public $actionIn = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaSyndicationDistributionProfile extends KalturaDistributionProfile +{ + /** + * + * + * @var string + */ + public $xsl = null; + + /** + * + * + * @var string + * @readonly + */ + public $feedId = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaSyndicationDistributionProvider extends KalturaDistributionProvider +{ + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaDistributionDeleteJobData extends KalturaDistributionJobData +{ + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaDistributionFetchReportJobData extends KalturaDistributionJobData +{ + /** + * + * + * @var int + */ + public $plays = null; + + /** + * + * + * @var int + */ + public $views = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaDistributionProfileFilter extends KalturaDistributionProfileBaseFilter +{ + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaDistributionProviderFilter extends KalturaDistributionProviderBaseFilter +{ + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaDistributionSubmitJobData extends KalturaDistributionJobData +{ + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaDistributionUpdateJobData extends KalturaDistributionJobData +{ + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaDistributionValidationErrorInvalidMetadata extends KalturaDistributionValidationErrorInvalidData +{ + /** + * + * + * @var int + */ + public $metadataProfileId = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaEntryDistributionFilter extends KalturaEntryDistributionBaseFilter +{ + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaGenericDistributionProviderActionFilter extends KalturaGenericDistributionProviderActionBaseFilter +{ + +} + +/** + * @package Kaltura + * @subpackage Client + */ +abstract class KalturaConfigurableDistributionProfileBaseFilter extends KalturaDistributionProfileFilter +{ + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaDistributionDisableJobData extends KalturaDistributionUpdateJobData +{ + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaDistributionEnableJobData extends KalturaDistributionUpdateJobData +{ + +} + +/** + * @package Kaltura + * @subpackage Client + */ +abstract class KalturaGenericDistributionProfileBaseFilter extends KalturaDistributionProfileFilter +{ + +} + +/** + * @package Kaltura + * @subpackage Client + */ +abstract class KalturaGenericDistributionProviderBaseFilter extends KalturaDistributionProviderFilter +{ + /** + * + * + * @var int + */ + public $idEqual = null; + + /** + * + * + * @var string + */ + public $idIn = null; + + /** + * + * + * @var int + */ + public $createdAtGreaterThanOrEqual = null; + + /** + * + * + * @var int + */ + public $createdAtLessThanOrEqual = null; + + /** + * + * + * @var int + */ + public $updatedAtGreaterThanOrEqual = null; + + /** + * + * + * @var int + */ + public $updatedAtLessThanOrEqual = null; + + /** + * + * + * @var int + */ + public $partnerIdEqual = null; + + /** + * + * + * @var string + */ + public $partnerIdIn = null; + + /** + * + * + * @var KalturaNullableBoolean + */ + public $isDefaultEqual = null; + + /** + * + * + * @var string + */ + public $isDefaultIn = null; + + /** + * + * + * @var KalturaGenericDistributionProviderStatus + */ + public $statusEqual = null; + + /** + * + * + * @var string + */ + public $statusIn = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +abstract class KalturaSyndicationDistributionProfileBaseFilter extends KalturaDistributionProfileFilter +{ + +} + +/** + * @package Kaltura + * @subpackage Client + */ +abstract class KalturaSyndicationDistributionProviderBaseFilter extends KalturaDistributionProviderFilter +{ + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaConfigurableDistributionProfileFilter extends KalturaConfigurableDistributionProfileBaseFilter +{ + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaGenericDistributionProfileFilter extends KalturaGenericDistributionProfileBaseFilter +{ + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaGenericDistributionProviderFilter extends KalturaGenericDistributionProviderBaseFilter +{ + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaSyndicationDistributionProfileFilter extends KalturaSyndicationDistributionProfileBaseFilter +{ + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaSyndicationDistributionProviderFilter extends KalturaSyndicationDistributionProviderBaseFilter +{ + +} + + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaDistributionProfileService extends KalturaServiceBase +{ + function __construct(KalturaClient $client = null) + { + parent::__construct($client); + } + + /** + * Add new Distribution Profile + * + * @param KalturaDistributionProfile $distributionProfile + * @return KalturaDistributionProfile + */ + function add(KalturaDistributionProfile $distributionProfile) + { + $kparams = array(); + $this->client->addParam($kparams, "distributionProfile", $distributionProfile->toParams()); + $this->client->queueServiceActionCall("contentdistribution_distributionprofile", "add", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaDistributionProfile"); + return $resultObject; + } + + /** + * Get Distribution Profile by id + * + * @param int $id + * @return KalturaDistributionProfile + */ + function get($id) + { + $kparams = array(); + $this->client->addParam($kparams, "id", $id); + $this->client->queueServiceActionCall("contentdistribution_distributionprofile", "get", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaDistributionProfile"); + return $resultObject; + } + + /** + * Update Distribution Profile by id + * + * @param int $id + * @param KalturaDistributionProfile $distributionProfile + * @return KalturaDistributionProfile + */ + function update($id, KalturaDistributionProfile $distributionProfile) + { + $kparams = array(); + $this->client->addParam($kparams, "id", $id); + $this->client->addParam($kparams, "distributionProfile", $distributionProfile->toParams()); + $this->client->queueServiceActionCall("contentdistribution_distributionprofile", "update", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaDistributionProfile"); + return $resultObject; + } + + /** + * Update Distribution Profile status by id + * + * @param int $id + * @param int $status + * @return KalturaDistributionProfile + */ + function updateStatus($id, $status) + { + $kparams = array(); + $this->client->addParam($kparams, "id", $id); + $this->client->addParam($kparams, "status", $status); + $this->client->queueServiceActionCall("contentdistribution_distributionprofile", "updateStatus", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaDistributionProfile"); + return $resultObject; + } + + /** + * Delete Distribution Profile by id + * + * @param int $id + * @return + */ + function delete($id) + { + $kparams = array(); + $this->client->addParam($kparams, "id", $id); + $this->client->queueServiceActionCall("contentdistribution_distributionprofile", "delete", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "null"); + return $resultObject; + } + + /** + * List all distribution providers + * + * @param KalturaDistributionProfileFilter $filter + * @param KalturaFilterPager $pager + * @return KalturaDistributionProfileListResponse + */ + function listAction(KalturaDistributionProfileFilter $filter = null, KalturaFilterPager $pager = null) + { + $kparams = array(); + if ($filter !== null) + $this->client->addParam($kparams, "filter", $filter->toParams()); + if ($pager !== null) + $this->client->addParam($kparams, "pager", $pager->toParams()); + $this->client->queueServiceActionCall("contentdistribution_distributionprofile", "list", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaDistributionProfileListResponse"); + return $resultObject; + } + + /** + * + * + * @param KalturaPartnerFilter $filter + * @param KalturaFilterPager $pager + * @return KalturaDistributionProfileListResponse + */ + function listByPartner(KalturaPartnerFilter $filter = null, KalturaFilterPager $pager = null) + { + $kparams = array(); + if ($filter !== null) + $this->client->addParam($kparams, "filter", $filter->toParams()); + if ($pager !== null) + $this->client->addParam($kparams, "pager", $pager->toParams()); + $this->client->queueServiceActionCall("contentdistribution_distributionprofile", "listByPartner", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaDistributionProfileListResponse"); + return $resultObject; + } +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaEntryDistributionService extends KalturaServiceBase +{ + function __construct(KalturaClient $client = null) + { + parent::__construct($client); + } + + /** + * Add new Entry Distribution + * + * @param KalturaEntryDistribution $entryDistribution + * @return KalturaEntryDistribution + */ + function add(KalturaEntryDistribution $entryDistribution) + { + $kparams = array(); + $this->client->addParam($kparams, "entryDistribution", $entryDistribution->toParams()); + $this->client->queueServiceActionCall("contentdistribution_entrydistribution", "add", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaEntryDistribution"); + return $resultObject; + } + + /** + * Get Entry Distribution by id + * + * @param int $id + * @return KalturaEntryDistribution + */ + function get($id) + { + $kparams = array(); + $this->client->addParam($kparams, "id", $id); + $this->client->queueServiceActionCall("contentdistribution_entrydistribution", "get", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaEntryDistribution"); + return $resultObject; + } + + /** + * Validates Entry Distribution by id for submission + * + * @param int $id + * @return KalturaEntryDistribution + */ + function validate($id) + { + $kparams = array(); + $this->client->addParam($kparams, "id", $id); + $this->client->queueServiceActionCall("contentdistribution_entrydistribution", "validate", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaEntryDistribution"); + return $resultObject; + } + + /** + * Update Entry Distribution by id + * + * @param int $id + * @param KalturaEntryDistribution $entryDistribution + * @return KalturaEntryDistribution + */ + function update($id, KalturaEntryDistribution $entryDistribution) + { + $kparams = array(); + $this->client->addParam($kparams, "id", $id); + $this->client->addParam($kparams, "entryDistribution", $entryDistribution->toParams()); + $this->client->queueServiceActionCall("contentdistribution_entrydistribution", "update", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaEntryDistribution"); + return $resultObject; + } + + /** + * Delete Entry Distribution by id + * + * @param int $id + * @return + */ + function delete($id) + { + $kparams = array(); + $this->client->addParam($kparams, "id", $id); + $this->client->queueServiceActionCall("contentdistribution_entrydistribution", "delete", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "null"); + return $resultObject; + } + + /** + * List all distribution providers + * + * @param KalturaEntryDistributionFilter $filter + * @param KalturaFilterPager $pager + * @return KalturaEntryDistributionListResponse + */ + function listAction(KalturaEntryDistributionFilter $filter = null, KalturaFilterPager $pager = null) + { + $kparams = array(); + if ($filter !== null) + $this->client->addParam($kparams, "filter", $filter->toParams()); + if ($pager !== null) + $this->client->addParam($kparams, "pager", $pager->toParams()); + $this->client->queueServiceActionCall("contentdistribution_entrydistribution", "list", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaEntryDistributionListResponse"); + return $resultObject; + } + + /** + * Submits Entry Distribution to the remote destination + * + * @param int $id + * @param bool $submitWhenReady + * @return KalturaEntryDistribution + */ + function submitAdd($id, $submitWhenReady = false) + { + $kparams = array(); + $this->client->addParam($kparams, "id", $id); + $this->client->addParam($kparams, "submitWhenReady", $submitWhenReady); + $this->client->queueServiceActionCall("contentdistribution_entrydistribution", "submitAdd", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaEntryDistribution"); + return $resultObject; + } + + /** + * Submits Entry Distribution changes to the remote destination + * + * @param int $id + * @return KalturaEntryDistribution + */ + function submitUpdate($id) + { + $kparams = array(); + $this->client->addParam($kparams, "id", $id); + $this->client->queueServiceActionCall("contentdistribution_entrydistribution", "submitUpdate", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaEntryDistribution"); + return $resultObject; + } + + /** + * Submits Entry Distribution report request + * + * @param int $id + * @return KalturaEntryDistribution + */ + function submitFetchReport($id) + { + $kparams = array(); + $this->client->addParam($kparams, "id", $id); + $this->client->queueServiceActionCall("contentdistribution_entrydistribution", "submitFetchReport", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaEntryDistribution"); + return $resultObject; + } + + /** + * Deletes Entry Distribution from the remote destination + * + * @param int $id + * @return KalturaEntryDistribution + */ + function submitDelete($id) + { + $kparams = array(); + $this->client->addParam($kparams, "id", $id); + $this->client->queueServiceActionCall("contentdistribution_entrydistribution", "submitDelete", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaEntryDistribution"); + return $resultObject; + } + + /** + * Retries last submit action + * + * @param int $id + * @return KalturaEntryDistribution + */ + function retrySubmit($id) + { + $kparams = array(); + $this->client->addParam($kparams, "id", $id); + $this->client->queueServiceActionCall("contentdistribution_entrydistribution", "retrySubmit", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaEntryDistribution"); + return $resultObject; + } + + /** + * Serves entry distribution sent data + * + * @param int $id + * @param int $actionType + * @return file + */ + function serveSentData($id, $actionType) + { + $kparams = array(); + $this->client->addParam($kparams, "id", $id); + $this->client->addParam($kparams, "actionType", $actionType); + $this->client->queueServiceActionCall("contentdistribution_entrydistribution", "serveSentData", $kparams); + if(!$this->client->getDestinationPath() && !$this->client->getReturnServedResult()) + return $this->client->getServeUrl(); + return $this->client->doQueue(); + } + + /** + * Serves entry distribution returned data + * + * @param int $id + * @param int $actionType + * @return file + */ + function serveReturnedData($id, $actionType) + { + $kparams = array(); + $this->client->addParam($kparams, "id", $id); + $this->client->addParam($kparams, "actionType", $actionType); + $this->client->queueServiceActionCall("contentdistribution_entrydistribution", "serveReturnedData", $kparams); + if(!$this->client->getDestinationPath() && !$this->client->getReturnServedResult()) + return $this->client->getServeUrl(); + return $this->client->doQueue(); + } +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaDistributionProviderService extends KalturaServiceBase +{ + function __construct(KalturaClient $client = null) + { + parent::__construct($client); + } + + /** + * List all distribution providers + * + * @param KalturaDistributionProviderFilter $filter + * @param KalturaFilterPager $pager + * @return KalturaDistributionProviderListResponse + */ + function listAction(KalturaDistributionProviderFilter $filter = null, KalturaFilterPager $pager = null) + { + $kparams = array(); + if ($filter !== null) + $this->client->addParam($kparams, "filter", $filter->toParams()); + if ($pager !== null) + $this->client->addParam($kparams, "pager", $pager->toParams()); + $this->client->queueServiceActionCall("contentdistribution_distributionprovider", "list", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaDistributionProviderListResponse"); + return $resultObject; + } +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaGenericDistributionProviderService extends KalturaServiceBase +{ + function __construct(KalturaClient $client = null) + { + parent::__construct($client); + } + + /** + * Add new Generic Distribution Provider + * + * @param KalturaGenericDistributionProvider $genericDistributionProvider + * @return KalturaGenericDistributionProvider + */ + function add(KalturaGenericDistributionProvider $genericDistributionProvider) + { + $kparams = array(); + $this->client->addParam($kparams, "genericDistributionProvider", $genericDistributionProvider->toParams()); + $this->client->queueServiceActionCall("contentdistribution_genericdistributionprovider", "add", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaGenericDistributionProvider"); + return $resultObject; + } + + /** + * Get Generic Distribution Provider by id + * + * @param int $id + * @return KalturaGenericDistributionProvider + */ + function get($id) + { + $kparams = array(); + $this->client->addParam($kparams, "id", $id); + $this->client->queueServiceActionCall("contentdistribution_genericdistributionprovider", "get", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaGenericDistributionProvider"); + return $resultObject; + } + + /** + * Update Generic Distribution Provider by id + * + * @param int $id + * @param KalturaGenericDistributionProvider $genericDistributionProvider + * @return KalturaGenericDistributionProvider + */ + function update($id, KalturaGenericDistributionProvider $genericDistributionProvider) + { + $kparams = array(); + $this->client->addParam($kparams, "id", $id); + $this->client->addParam($kparams, "genericDistributionProvider", $genericDistributionProvider->toParams()); + $this->client->queueServiceActionCall("contentdistribution_genericdistributionprovider", "update", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaGenericDistributionProvider"); + return $resultObject; + } + + /** + * Delete Generic Distribution Provider by id + * + * @param int $id + * @return + */ + function delete($id) + { + $kparams = array(); + $this->client->addParam($kparams, "id", $id); + $this->client->queueServiceActionCall("contentdistribution_genericdistributionprovider", "delete", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "null"); + return $resultObject; + } + + /** + * List all distribution providers + * + * @param KalturaGenericDistributionProviderFilter $filter + * @param KalturaFilterPager $pager + * @return KalturaGenericDistributionProviderListResponse + */ + function listAction(KalturaGenericDistributionProviderFilter $filter = null, KalturaFilterPager $pager = null) + { + $kparams = array(); + if ($filter !== null) + $this->client->addParam($kparams, "filter", $filter->toParams()); + if ($pager !== null) + $this->client->addParam($kparams, "pager", $pager->toParams()); + $this->client->queueServiceActionCall("contentdistribution_genericdistributionprovider", "list", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaGenericDistributionProviderListResponse"); + return $resultObject; + } +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaGenericDistributionProviderActionService extends KalturaServiceBase +{ + function __construct(KalturaClient $client = null) + { + parent::__construct($client); + } + + /** + * Add new Generic Distribution Provider Action + * + * @param KalturaGenericDistributionProviderAction $genericDistributionProviderAction + * @return KalturaGenericDistributionProviderAction + */ + function add(KalturaGenericDistributionProviderAction $genericDistributionProviderAction) + { + $kparams = array(); + $this->client->addParam($kparams, "genericDistributionProviderAction", $genericDistributionProviderAction->toParams()); + $this->client->queueServiceActionCall("contentdistribution_genericdistributionprovideraction", "add", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaGenericDistributionProviderAction"); + return $resultObject; + } + + /** + * Add MRSS transform file to generic distribution provider action + * + * @param int $id The id of the generic distribution provider action + * @param string $xslData XSL MRSS transformation data + * @return KalturaGenericDistributionProviderAction + */ + function addMrssTransform($id, $xslData) + { + $kparams = array(); + $this->client->addParam($kparams, "id", $id); + $this->client->addParam($kparams, "xslData", $xslData); + $this->client->queueServiceActionCall("contentdistribution_genericdistributionprovideraction", "addMrssTransform", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaGenericDistributionProviderAction"); + return $resultObject; + } + + /** + * Add MRSS transform file to generic distribution provider action + * + * @param int $id The id of the generic distribution provider action + * @param file $xslFile XSL MRSS transformation file + * @return KalturaGenericDistributionProviderAction + */ + function addMrssTransformFromFile($id, $xslFile) + { + $kparams = array(); + $this->client->addParam($kparams, "id", $id); + $kfiles = array(); + $this->client->addParam($kfiles, "xslFile", $xslFile); + $this->client->queueServiceActionCall("contentdistribution_genericdistributionprovideraction", "addMrssTransformFromFile", $kparams, $kfiles); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaGenericDistributionProviderAction"); + return $resultObject; + } + + /** + * Add MRSS validate file to generic distribution provider action + * + * @param int $id The id of the generic distribution provider action + * @param string $xsdData XSD MRSS validatation data + * @return KalturaGenericDistributionProviderAction + */ + function addMrssValidate($id, $xsdData) + { + $kparams = array(); + $this->client->addParam($kparams, "id", $id); + $this->client->addParam($kparams, "xsdData", $xsdData); + $this->client->queueServiceActionCall("contentdistribution_genericdistributionprovideraction", "addMrssValidate", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaGenericDistributionProviderAction"); + return $resultObject; + } + + /** + * Add MRSS validate file to generic distribution provider action + * + * @param int $id The id of the generic distribution provider action + * @param file $xsdFile XSD MRSS validatation file + * @return KalturaGenericDistributionProviderAction + */ + function addMrssValidateFromFile($id, $xsdFile) + { + $kparams = array(); + $this->client->addParam($kparams, "id", $id); + $kfiles = array(); + $this->client->addParam($kfiles, "xsdFile", $xsdFile); + $this->client->queueServiceActionCall("contentdistribution_genericdistributionprovideraction", "addMrssValidateFromFile", $kparams, $kfiles); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaGenericDistributionProviderAction"); + return $resultObject; + } + + /** + * Add results transform file to generic distribution provider action + * + * @param int $id The id of the generic distribution provider action + * @param string $transformData Transformation data xsl, xPath or regex + * @return KalturaGenericDistributionProviderAction + */ + function addResultsTransform($id, $transformData) + { + $kparams = array(); + $this->client->addParam($kparams, "id", $id); + $this->client->addParam($kparams, "transformData", $transformData); + $this->client->queueServiceActionCall("contentdistribution_genericdistributionprovideraction", "addResultsTransform", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaGenericDistributionProviderAction"); + return $resultObject; + } + + /** + * Add MRSS transform file to generic distribution provider action + * + * @param int $id The id of the generic distribution provider action + * @param file $transformFile Transformation file xsl, xPath or regex + * @return KalturaGenericDistributionProviderAction + */ + function addResultsTransformFromFile($id, $transformFile) + { + $kparams = array(); + $this->client->addParam($kparams, "id", $id); + $kfiles = array(); + $this->client->addParam($kfiles, "transformFile", $transformFile); + $this->client->queueServiceActionCall("contentdistribution_genericdistributionprovideraction", "addResultsTransformFromFile", $kparams, $kfiles); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaGenericDistributionProviderAction"); + return $resultObject; + } + + /** + * Get Generic Distribution Provider Action by id + * + * @param int $id + * @return KalturaGenericDistributionProviderAction + */ + function get($id) + { + $kparams = array(); + $this->client->addParam($kparams, "id", $id); + $this->client->queueServiceActionCall("contentdistribution_genericdistributionprovideraction", "get", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaGenericDistributionProviderAction"); + return $resultObject; + } + + /** + * Get Generic Distribution Provider Action by provider id + * + * @param int $genericDistributionProviderId + * @param int $actionType + * @return KalturaGenericDistributionProviderAction + */ + function getByProviderId($genericDistributionProviderId, $actionType) + { + $kparams = array(); + $this->client->addParam($kparams, "genericDistributionProviderId", $genericDistributionProviderId); + $this->client->addParam($kparams, "actionType", $actionType); + $this->client->queueServiceActionCall("contentdistribution_genericdistributionprovideraction", "getByProviderId", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaGenericDistributionProviderAction"); + return $resultObject; + } + + /** + * Update Generic Distribution Provider Action by provider id + * + * @param int $genericDistributionProviderId + * @param int $actionType + * @param KalturaGenericDistributionProviderAction $genericDistributionProviderAction + * @return KalturaGenericDistributionProviderAction + */ + function updateByProviderId($genericDistributionProviderId, $actionType, KalturaGenericDistributionProviderAction $genericDistributionProviderAction) + { + $kparams = array(); + $this->client->addParam($kparams, "genericDistributionProviderId", $genericDistributionProviderId); + $this->client->addParam($kparams, "actionType", $actionType); + $this->client->addParam($kparams, "genericDistributionProviderAction", $genericDistributionProviderAction->toParams()); + $this->client->queueServiceActionCall("contentdistribution_genericdistributionprovideraction", "updateByProviderId", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaGenericDistributionProviderAction"); + return $resultObject; + } + + /** + * Update Generic Distribution Provider Action by id + * + * @param int $id + * @param KalturaGenericDistributionProviderAction $genericDistributionProviderAction + * @return KalturaGenericDistributionProviderAction + */ + function update($id, KalturaGenericDistributionProviderAction $genericDistributionProviderAction) + { + $kparams = array(); + $this->client->addParam($kparams, "id", $id); + $this->client->addParam($kparams, "genericDistributionProviderAction", $genericDistributionProviderAction->toParams()); + $this->client->queueServiceActionCall("contentdistribution_genericdistributionprovideraction", "update", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaGenericDistributionProviderAction"); + return $resultObject; + } + + /** + * Delete Generic Distribution Provider Action by id + * + * @param int $id + * @return + */ + function delete($id) + { + $kparams = array(); + $this->client->addParam($kparams, "id", $id); + $this->client->queueServiceActionCall("contentdistribution_genericdistributionprovideraction", "delete", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "null"); + return $resultObject; + } + + /** + * Delete Generic Distribution Provider Action by provider id + * + * @param int $genericDistributionProviderId + * @param int $actionType + * @return + */ + function deleteByProviderId($genericDistributionProviderId, $actionType) + { + $kparams = array(); + $this->client->addParam($kparams, "genericDistributionProviderId", $genericDistributionProviderId); + $this->client->addParam($kparams, "actionType", $actionType); + $this->client->queueServiceActionCall("contentdistribution_genericdistributionprovideraction", "deleteByProviderId", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "null"); + return $resultObject; + } + + /** + * List all distribution providers + * + * @param KalturaGenericDistributionProviderActionFilter $filter + * @param KalturaFilterPager $pager + * @return KalturaGenericDistributionProviderActionListResponse + */ + function listAction(KalturaGenericDistributionProviderActionFilter $filter = null, KalturaFilterPager $pager = null) + { + $kparams = array(); + if ($filter !== null) + $this->client->addParam($kparams, "filter", $filter->toParams()); + if ($pager !== null) + $this->client->addParam($kparams, "pager", $pager->toParams()); + $this->client->queueServiceActionCall("contentdistribution_genericdistributionprovideraction", "list", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaGenericDistributionProviderActionListResponse"); + return $resultObject; + } +} +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaContentDistributionClientPlugin extends KalturaClientPlugin +{ + /** + * @var KalturaDistributionProfileService + */ + public $distributionProfile = null; + + /** + * @var KalturaEntryDistributionService + */ + public $entryDistribution = null; + + /** + * @var KalturaDistributionProviderService + */ + public $distributionProvider = null; + + /** + * @var KalturaGenericDistributionProviderService + */ + public $genericDistributionProvider = null; + + /** + * @var KalturaGenericDistributionProviderActionService + */ + public $genericDistributionProviderAction = null; + + protected function __construct(KalturaClient $client) + { + parent::__construct($client); + $this->distributionProfile = new KalturaDistributionProfileService($client); + $this->entryDistribution = new KalturaEntryDistributionService($client); + $this->distributionProvider = new KalturaDistributionProviderService($client); + $this->genericDistributionProvider = new KalturaGenericDistributionProviderService($client); + $this->genericDistributionProviderAction = new KalturaGenericDistributionProviderActionService($client); + } + + /** + * @return KalturaContentDistributionClientPlugin + */ + public static function get(KalturaClient $client) + { + return new KalturaContentDistributionClientPlugin($client); + } + + /** + * @return array + */ + public function getServices() + { + $services = array( + 'distributionProfile' => $this->distributionProfile, + 'entryDistribution' => $this->entryDistribution, + 'distributionProvider' => $this->distributionProvider, + 'genericDistributionProvider' => $this->genericDistributionProvider, + 'genericDistributionProviderAction' => $this->genericDistributionProviderAction, + ); + return $services; + } + + /** + * @return string + */ + public function getName() + { + return 'contentDistribution'; + } +} + diff --git a/local/kaltura/API/KalturaPlugins/KalturaCuePointClientPlugin.php b/local/kaltura/API/KalturaPlugins/KalturaCuePointClientPlugin.php new file mode 100644 index 0000000000000..03a5c937e8cd1 --- /dev/null +++ b/local/kaltura/API/KalturaPlugins/KalturaCuePointClientPlugin.php @@ -0,0 +1,640 @@ +. +// +// @ignore +// =================================================================================================== + +/** + * @package Kaltura + * @subpackage Client + */ +require_once(dirname(__FILE__) . "/../KalturaClientBase.php"); +require_once(dirname(__FILE__) . "/../KalturaEnums.php"); +require_once(dirname(__FILE__) . "/../KalturaTypes.php"); + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaCuePointStatus +{ + const READY = 1; + const DELETED = 2; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaCuePointOrderBy +{ + const CREATED_AT_ASC = "+createdAt"; + const PARTNER_SORT_VALUE_ASC = "+partnerSortValue"; + const START_TIME_ASC = "+startTime"; + const UPDATED_AT_ASC = "+updatedAt"; + const CREATED_AT_DESC = "-createdAt"; + const PARTNER_SORT_VALUE_DESC = "-partnerSortValue"; + const START_TIME_DESC = "-startTime"; + const UPDATED_AT_DESC = "-updatedAt"; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaCuePointType +{ + const AD = "adCuePoint.Ad"; + const ANNOTATION = "annotation.Annotation"; + const CODE = "codeCuePoint.Code"; +} + +/** + * @package Kaltura + * @subpackage Client + */ +abstract class KalturaCuePoint extends KalturaObjectBase +{ + /** + * + * + * @var string + * @readonly + */ + public $id = null; + + /** + * + * + * @var KalturaCuePointType + * @readonly + */ + public $cuePointType = null; + + /** + * + * + * @var KalturaCuePointStatus + * @readonly + */ + public $status = null; + + /** + * + * + * @var string + * @insertonly + */ + public $entryId = null; + + /** + * + * + * @var int + * @readonly + */ + public $partnerId = null; + + /** + * + * + * @var int + * @readonly + */ + public $createdAt = null; + + /** + * + * + * @var int + * @readonly + */ + public $updatedAt = null; + + /** + * + * + * @var string + */ + public $tags = null; + + /** + * Start time in milliseconds + * + * + * @var int + */ + public $startTime = null; + + /** + * + * + * @var string + * @readonly + */ + public $userId = null; + + /** + * + * + * @var string + */ + public $partnerData = null; + + /** + * + * + * @var int + */ + public $partnerSortValue = null; + + /** + * + * + * @var KalturaNullableBoolean + */ + public $forceStop = null; + + /** + * + * + * @var int + */ + public $thumbOffset = null; + + /** + * + * + * @var string + */ + public $systemName = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaCuePointListResponse extends KalturaObjectBase +{ + /** + * + * + * @var array of KalturaCuePoint + * @readonly + */ + public $objects; + + /** + * + * + * @var int + * @readonly + */ + public $totalCount = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +abstract class KalturaCuePointBaseFilter extends KalturaFilter +{ + /** + * + * + * @var string + */ + public $idEqual = null; + + /** + * + * + * @var string + */ + public $idIn = null; + + /** + * + * + * @var KalturaCuePointType + */ + public $cuePointTypeEqual = null; + + /** + * + * + * @var string + */ + public $cuePointTypeIn = null; + + /** + * + * + * @var KalturaCuePointStatus + */ + public $statusEqual = null; + + /** + * + * + * @var string + */ + public $statusIn = null; + + /** + * + * + * @var string + */ + public $entryIdEqual = null; + + /** + * + * + * @var string + */ + public $entryIdIn = null; + + /** + * + * + * @var int + */ + public $createdAtGreaterThanOrEqual = null; + + /** + * + * + * @var int + */ + public $createdAtLessThanOrEqual = null; + + /** + * + * + * @var int + */ + public $updatedAtGreaterThanOrEqual = null; + + /** + * + * + * @var int + */ + public $updatedAtLessThanOrEqual = null; + + /** + * + * + * @var string + */ + public $tagsLike = null; + + /** + * + * + * @var string + */ + public $tagsMultiLikeOr = null; + + /** + * + * + * @var string + */ + public $tagsMultiLikeAnd = null; + + /** + * + * + * @var int + */ + public $startTimeGreaterThanOrEqual = null; + + /** + * + * + * @var int + */ + public $startTimeLessThanOrEqual = null; + + /** + * + * + * @var string + */ + public $userIdEqual = null; + + /** + * + * + * @var string + */ + public $userIdIn = null; + + /** + * + * + * @var int + */ + public $partnerSortValueEqual = null; + + /** + * + * + * @var string + */ + public $partnerSortValueIn = null; + + /** + * + * + * @var int + */ + public $partnerSortValueGreaterThanOrEqual = null; + + /** + * + * + * @var int + */ + public $partnerSortValueLessThanOrEqual = null; + + /** + * + * + * @var KalturaNullableBoolean + */ + public $forceStopEqual = null; + + /** + * + * + * @var string + */ + public $systemNameEqual = null; + + /** + * + * + * @var string + */ + public $systemNameIn = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaCuePointFilter extends KalturaCuePointBaseFilter +{ + +} + + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaCuePointService extends KalturaServiceBase +{ + function __construct(KalturaClient $client = null) + { + parent::__construct($client); + } + + /** + * Allows you to add an cue point object associated with an entry + * + * @param KalturaCuePoint $cuePoint + * @return KalturaCuePoint + */ + function add(KalturaCuePoint $cuePoint) + { + $kparams = array(); + $this->client->addParam($kparams, "cuePoint", $cuePoint->toParams()); + $this->client->queueServiceActionCall("cuepoint_cuepoint", "add", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaCuePoint"); + return $resultObject; + } + + /** + * Allows you to add multiple cue points objects by uploading XML that contains multiple cue point definitions + * + * @param file $fileData + * @return KalturaCuePointListResponse + */ + function addFromBulk($fileData) + { + $kparams = array(); + $kfiles = array(); + $this->client->addParam($kfiles, "fileData", $fileData); + $this->client->queueServiceActionCall("cuepoint_cuepoint", "addFromBulk", $kparams, $kfiles); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaCuePointListResponse"); + return $resultObject; + } + + /** + * Download multiple cue points objects as XML definitions + * + * @param KalturaCuePointFilter $filter + * @param KalturaFilterPager $pager + * @return file + */ + function serveBulk(KalturaCuePointFilter $filter = null, KalturaFilterPager $pager = null) + { + $kparams = array(); + if ($filter !== null) + $this->client->addParam($kparams, "filter", $filter->toParams()); + if ($pager !== null) + $this->client->addParam($kparams, "pager", $pager->toParams()); + $this->client->queueServiceActionCall("cuepoint_cuepoint", "serveBulk", $kparams); + if(!$this->client->getDestinationPath() && !$this->client->getReturnServedResult()) + return $this->client->getServeUrl(); + return $this->client->doQueue(); + } + + /** + * Retrieve an CuePoint object by id + * + * @param string $id + * @return KalturaCuePoint + */ + function get($id) + { + $kparams = array(); + $this->client->addParam($kparams, "id", $id); + $this->client->queueServiceActionCall("cuepoint_cuepoint", "get", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaCuePoint"); + return $resultObject; + } + + /** + * List cue point objects by filter and pager + * + * @param KalturaCuePointFilter $filter + * @param KalturaFilterPager $pager + * @return KalturaCuePointListResponse + */ + function listAction(KalturaCuePointFilter $filter = null, KalturaFilterPager $pager = null) + { + $kparams = array(); + if ($filter !== null) + $this->client->addParam($kparams, "filter", $filter->toParams()); + if ($pager !== null) + $this->client->addParam($kparams, "pager", $pager->toParams()); + $this->client->queueServiceActionCall("cuepoint_cuepoint", "list", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaCuePointListResponse"); + return $resultObject; + } + + /** + * Count cue point objects by filter + * + * @param KalturaCuePointFilter $filter + * @return int + */ + function count(KalturaCuePointFilter $filter = null) + { + $kparams = array(); + if ($filter !== null) + $this->client->addParam($kparams, "filter", $filter->toParams()); + $this->client->queueServiceActionCall("cuepoint_cuepoint", "count", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "integer"); + return $resultObject; + } + + /** + * Update cue point by id + * + * @param string $id + * @param KalturaCuePoint $cuePoint + * @return KalturaCuePoint + */ + function update($id, KalturaCuePoint $cuePoint) + { + $kparams = array(); + $this->client->addParam($kparams, "id", $id); + $this->client->addParam($kparams, "cuePoint", $cuePoint->toParams()); + $this->client->queueServiceActionCall("cuepoint_cuepoint", "update", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaCuePoint"); + return $resultObject; + } + + /** + * Delete cue point by id, and delete all children cue points + * + * @param string $id + * @return + */ + function delete($id) + { + $kparams = array(); + $this->client->addParam($kparams, "id", $id); + $this->client->queueServiceActionCall("cuepoint_cuepoint", "delete", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "null"); + return $resultObject; + } +} +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaCuePointClientPlugin extends KalturaClientPlugin +{ + /** + * @var KalturaCuePointService + */ + public $cuePoint = null; + + protected function __construct(KalturaClient $client) + { + parent::__construct($client); + $this->cuePoint = new KalturaCuePointService($client); + } + + /** + * @return KalturaCuePointClientPlugin + */ + public static function get(KalturaClient $client) + { + return new KalturaCuePointClientPlugin($client); + } + + /** + * @return array + */ + public function getServices() + { + $services = array( + 'cuePoint' => $this->cuePoint, + ); + return $services; + } + + /** + * @return string + */ + public function getName() + { + return 'cuePoint'; + } +} + diff --git a/local/kaltura/API/KalturaPlugins/KalturaDocumentClientPlugin.php b/local/kaltura/API/KalturaPlugins/KalturaDocumentClientPlugin.php new file mode 100644 index 0000000000000..b4ef635d2a2fc --- /dev/null +++ b/local/kaltura/API/KalturaPlugins/KalturaDocumentClientPlugin.php @@ -0,0 +1,944 @@ +. +// +// @ignore +// =================================================================================================== + +/** + * @package Kaltura + * @subpackage Client + */ +require_once(dirname(__FILE__) . "/../KalturaClientBase.php"); +require_once(dirname(__FILE__) . "/../KalturaEnums.php"); +require_once(dirname(__FILE__) . "/../KalturaTypes.php"); + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaDocumentType +{ + const DOCUMENT = 11; + const SWF = 12; + const PDF = 13; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaDocumentEntryOrderBy +{ + const CREATED_AT_ASC = "+createdAt"; + const END_DATE_ASC = "+endDate"; + const MODERATION_COUNT_ASC = "+moderationCount"; + const NAME_ASC = "+name"; + const PARTNER_SORT_VALUE_ASC = "+partnerSortValue"; + const RANK_ASC = "+rank"; + const RECENT_ASC = "+recent"; + const START_DATE_ASC = "+startDate"; + const TOTAL_RANK_ASC = "+totalRank"; + const UPDATED_AT_ASC = "+updatedAt"; + const WEIGHT_ASC = "+weight"; + const CREATED_AT_DESC = "-createdAt"; + const END_DATE_DESC = "-endDate"; + const MODERATION_COUNT_DESC = "-moderationCount"; + const NAME_DESC = "-name"; + const PARTNER_SORT_VALUE_DESC = "-partnerSortValue"; + const RANK_DESC = "-rank"; + const RECENT_DESC = "-recent"; + const START_DATE_DESC = "-startDate"; + const TOTAL_RANK_DESC = "-totalRank"; + const UPDATED_AT_DESC = "-updatedAt"; + const WEIGHT_DESC = "-weight"; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaDocumentFlavorParamsOrderBy +{ +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaDocumentFlavorParamsOutputOrderBy +{ +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaImageFlavorParamsOrderBy +{ +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaImageFlavorParamsOutputOrderBy +{ +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaPdfFlavorParamsOrderBy +{ +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaPdfFlavorParamsOutputOrderBy +{ +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaSwfFlavorParamsOrderBy +{ +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaSwfFlavorParamsOutputOrderBy +{ +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaDocumentEntry extends KalturaBaseEntry +{ + /** + * The type of the document + * + * + * @var KalturaDocumentType + * @insertonly + */ + public $documentType = null; + + /** + * Comma separated asset params ids that exists for this media entry + * + * + * @var string + * @readonly + */ + public $assetParamsIds = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaDocumentListResponse extends KalturaObjectBase +{ + /** + * + * + * @var array of KalturaDocumentEntry + * @readonly + */ + public $objects; + + /** + * + * + * @var int + * @readonly + */ + public $totalCount = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaDocumentFlavorParams extends KalturaFlavorParams +{ + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaImageFlavorParams extends KalturaFlavorParams +{ + /** + * + * + * @var int + */ + public $densityWidth = null; + + /** + * + * + * @var int + */ + public $densityHeight = null; + + /** + * + * + * @var int + */ + public $sizeWidth = null; + + /** + * + * + * @var int + */ + public $sizeHeight = null; + + /** + * + * + * @var int + */ + public $depth = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaPdfFlavorParams extends KalturaFlavorParams +{ + /** + * + * + * @var bool + */ + public $readonly = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaSwfFlavorParams extends KalturaFlavorParams +{ + /** + * + * + * @var int + */ + public $flashVersion = null; + + /** + * + * + * @var bool + */ + public $poly2Bitmap = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +abstract class KalturaDocumentEntryBaseFilter extends KalturaBaseEntryFilter +{ + /** + * + * + * @var KalturaDocumentType + */ + public $documentTypeEqual = null; + + /** + * + * + * @var string + */ + public $documentTypeIn = null; + + /** + * + * + * @var string + */ + public $assetParamsIdsMatchOr = null; + + /** + * + * + * @var string + */ + public $assetParamsIdsMatchAnd = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaDocumentFlavorParamsOutput extends KalturaFlavorParamsOutput +{ + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaImageFlavorParamsOutput extends KalturaFlavorParamsOutput +{ + /** + * + * + * @var int + */ + public $densityWidth = null; + + /** + * + * + * @var int + */ + public $densityHeight = null; + + /** + * + * + * @var int + */ + public $sizeWidth = null; + + /** + * + * + * @var int + */ + public $sizeHeight = null; + + /** + * + * + * @var int + */ + public $depth = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaPdfFlavorParamsOutput extends KalturaFlavorParamsOutput +{ + /** + * + * + * @var bool + */ + public $readonly = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaSwfFlavorParamsOutput extends KalturaFlavorParamsOutput +{ + /** + * + * + * @var int + */ + public $flashVersion = null; + + /** + * + * + * @var bool + */ + public $poly2Bitmap = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaDocumentEntryFilter extends KalturaDocumentEntryBaseFilter +{ + +} + +/** + * @package Kaltura + * @subpackage Client + */ +abstract class KalturaDocumentFlavorParamsBaseFilter extends KalturaFlavorParamsFilter +{ + +} + +/** + * @package Kaltura + * @subpackage Client + */ +abstract class KalturaImageFlavorParamsBaseFilter extends KalturaFlavorParamsFilter +{ + +} + +/** + * @package Kaltura + * @subpackage Client + */ +abstract class KalturaPdfFlavorParamsBaseFilter extends KalturaFlavorParamsFilter +{ + +} + +/** + * @package Kaltura + * @subpackage Client + */ +abstract class KalturaSwfFlavorParamsBaseFilter extends KalturaFlavorParamsFilter +{ + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaDocumentFlavorParamsFilter extends KalturaDocumentFlavorParamsBaseFilter +{ + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaImageFlavorParamsFilter extends KalturaImageFlavorParamsBaseFilter +{ + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaPdfFlavorParamsFilter extends KalturaPdfFlavorParamsBaseFilter +{ + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaSwfFlavorParamsFilter extends KalturaSwfFlavorParamsBaseFilter +{ + +} + +/** + * @package Kaltura + * @subpackage Client + */ +abstract class KalturaDocumentFlavorParamsOutputBaseFilter extends KalturaFlavorParamsOutputFilter +{ + +} + +/** + * @package Kaltura + * @subpackage Client + */ +abstract class KalturaImageFlavorParamsOutputBaseFilter extends KalturaFlavorParamsOutputFilter +{ + +} + +/** + * @package Kaltura + * @subpackage Client + */ +abstract class KalturaPdfFlavorParamsOutputBaseFilter extends KalturaFlavorParamsOutputFilter +{ + +} + +/** + * @package Kaltura + * @subpackage Client + */ +abstract class KalturaSwfFlavorParamsOutputBaseFilter extends KalturaFlavorParamsOutputFilter +{ + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaDocumentFlavorParamsOutputFilter extends KalturaDocumentFlavorParamsOutputBaseFilter +{ + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaImageFlavorParamsOutputFilter extends KalturaImageFlavorParamsOutputBaseFilter +{ + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaPdfFlavorParamsOutputFilter extends KalturaPdfFlavorParamsOutputBaseFilter +{ + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaSwfFlavorParamsOutputFilter extends KalturaSwfFlavorParamsOutputBaseFilter +{ + +} + + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaDocumentsService extends KalturaServiceBase +{ + function __construct(KalturaClient $client = null) + { + parent::__construct($client); + } + + /** + * Add new document entry after the specific document file was uploaded and the upload token id exists + * + * @param KalturaDocumentEntry $documentEntry Document entry metadata + * @param string $uploadTokenId Upload token id + * @return KalturaDocumentEntry + */ + function addFromUploadedFile(KalturaDocumentEntry $documentEntry, $uploadTokenId) + { + $kparams = array(); + $this->client->addParam($kparams, "documentEntry", $documentEntry->toParams()); + $this->client->addParam($kparams, "uploadTokenId", $uploadTokenId); + $this->client->queueServiceActionCall("document_documents", "addFromUploadedFile", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaDocumentEntry"); + return $resultObject; + } + + /** + * Copy entry into new entry + * + * @param string $sourceEntryId Document entry id to copy from + * @param KalturaDocumentEntry $documentEntry Document entry metadata + * @param int $sourceFlavorParamsId The flavor to be used as the new entry source, source flavor will be used if not specified + * @return KalturaDocumentEntry + */ + function addFromEntry($sourceEntryId, KalturaDocumentEntry $documentEntry = null, $sourceFlavorParamsId = null) + { + $kparams = array(); + $this->client->addParam($kparams, "sourceEntryId", $sourceEntryId); + if ($documentEntry !== null) + $this->client->addParam($kparams, "documentEntry", $documentEntry->toParams()); + $this->client->addParam($kparams, "sourceFlavorParamsId", $sourceFlavorParamsId); + $this->client->queueServiceActionCall("document_documents", "addFromEntry", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaDocumentEntry"); + return $resultObject; + } + + /** + * Copy flavor asset into new entry + * + * @param string $sourceFlavorAssetId Flavor asset id to be used as the new entry source + * @param KalturaDocumentEntry $documentEntry Document entry metadata + * @return KalturaDocumentEntry + */ + function addFromFlavorAsset($sourceFlavorAssetId, KalturaDocumentEntry $documentEntry = null) + { + $kparams = array(); + $this->client->addParam($kparams, "sourceFlavorAssetId", $sourceFlavorAssetId); + if ($documentEntry !== null) + $this->client->addParam($kparams, "documentEntry", $documentEntry->toParams()); + $this->client->queueServiceActionCall("document_documents", "addFromFlavorAsset", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaDocumentEntry"); + return $resultObject; + } + + /** + * Convert entry + * + * @param string $entryId Document entry id + * @param int $conversionProfileId + * @param array $dynamicConversionAttributes + * @return int + */ + function convert($entryId, $conversionProfileId = null, array $dynamicConversionAttributes = null) + { + $kparams = array(); + $this->client->addParam($kparams, "entryId", $entryId); + $this->client->addParam($kparams, "conversionProfileId", $conversionProfileId); + if ($dynamicConversionAttributes !== null) + foreach($dynamicConversionAttributes as $index => $obj) + { + $this->client->addParam($kparams, "dynamicConversionAttributes:$index", $obj->toParams()); + } + $this->client->queueServiceActionCall("document_documents", "convert", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "integer"); + return $resultObject; + } + + /** + * Get document entry by ID. + * + * @param string $entryId Document entry id + * @param int $version Desired version of the data + * @return KalturaDocumentEntry + */ + function get($entryId, $version = -1) + { + $kparams = array(); + $this->client->addParam($kparams, "entryId", $entryId); + $this->client->addParam($kparams, "version", $version); + $this->client->queueServiceActionCall("document_documents", "get", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaDocumentEntry"); + return $resultObject; + } + + /** + * Update document entry. Only the properties that were set will be updated. + * + * @param string $entryId Document entry id to update + * @param KalturaDocumentEntry $documentEntry Document entry metadata to update + * @return KalturaDocumentEntry + */ + function update($entryId, KalturaDocumentEntry $documentEntry) + { + $kparams = array(); + $this->client->addParam($kparams, "entryId", $entryId); + $this->client->addParam($kparams, "documentEntry", $documentEntry->toParams()); + $this->client->queueServiceActionCall("document_documents", "update", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaDocumentEntry"); + return $resultObject; + } + + /** + * Delete a document entry. + * + * @param string $entryId Document entry id to delete + * @return + */ + function delete($entryId) + { + $kparams = array(); + $this->client->addParam($kparams, "entryId", $entryId); + $this->client->queueServiceActionCall("document_documents", "delete", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "null"); + return $resultObject; + } + + /** + * List document entries by filter with paging support. + * + * @param KalturaDocumentEntryFilter $filter Document entry filter + * @param KalturaFilterPager $pager Pager + * @return KalturaDocumentListResponse + */ + function listAction(KalturaDocumentEntryFilter $filter = null, KalturaFilterPager $pager = null) + { + $kparams = array(); + if ($filter !== null) + $this->client->addParam($kparams, "filter", $filter->toParams()); + if ($pager !== null) + $this->client->addParam($kparams, "pager", $pager->toParams()); + $this->client->queueServiceActionCall("document_documents", "list", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaDocumentListResponse"); + return $resultObject; + } + + /** + * Upload a document file to Kaltura, then the file can be used to create a document entry. + * + * @param file $fileData The file data + * @return string + */ + function upload($fileData) + { + $kparams = array(); + $kfiles = array(); + $this->client->addParam($kfiles, "fileData", $fileData); + $this->client->queueServiceActionCall("document_documents", "upload", $kparams, $kfiles); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "string"); + return $resultObject; + } + + /** + * This will queue a batch job for converting the document file to swf + Returns the URL where the new swf will be available + * + * @param string $entryId + * @return string + */ + function convertPptToSwf($entryId) + { + $kparams = array(); + $this->client->addParam($kparams, "entryId", $entryId); + $this->client->queueServiceActionCall("document_documents", "convertPptToSwf", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "string"); + return $resultObject; + } + + /** + * Serves the file content + * + * @param string $entryId Document entry id + * @param string $flavorAssetId Flavor asset id + * @param bool $forceProxy Force to get the content without redirect + * @return file + */ + function serve($entryId, $flavorAssetId = null, $forceProxy = false) + { + $kparams = array(); + $this->client->addParam($kparams, "entryId", $entryId); + $this->client->addParam($kparams, "flavorAssetId", $flavorAssetId); + $this->client->addParam($kparams, "forceProxy", $forceProxy); + $this->client->queueServiceActionCall("document_documents", "serve", $kparams); + if(!$this->client->getDestinationPath() && !$this->client->getReturnServedResult()) + return $this->client->getServeUrl(); + return $this->client->doQueue(); + } + + /** + * Serves the file content + * + * @param string $entryId Document entry id + * @param string $flavorParamsId Flavor params id + * @param bool $forceProxy Force to get the content without redirect + * @return file + */ + function serveByFlavorParamsId($entryId, $flavorParamsId = null, $forceProxy = false) + { + $kparams = array(); + $this->client->addParam($kparams, "entryId", $entryId); + $this->client->addParam($kparams, "flavorParamsId", $flavorParamsId); + $this->client->addParam($kparams, "forceProxy", $forceProxy); + $this->client->queueServiceActionCall("document_documents", "serveByFlavorParamsId", $kparams); + if(!$this->client->getDestinationPath() && !$this->client->getReturnServedResult()) + return $this->client->getServeUrl(); + return $this->client->doQueue(); + } + + /** + * Replace content associated with the given document entry. + * + * @param string $entryId Document entry id to update + * @param KalturaResource $resource Resource to be used to replace entry doc content + * @param int $conversionProfileId The conversion profile id to be used on the entry + * @return KalturaDocumentEntry + */ + function updateContent($entryId, KalturaResource $resource, $conversionProfileId = null) + { + $kparams = array(); + $this->client->addParam($kparams, "entryId", $entryId); + $this->client->addParam($kparams, "resource", $resource->toParams()); + $this->client->addParam($kparams, "conversionProfileId", $conversionProfileId); + $this->client->queueServiceActionCall("document_documents", "updateContent", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaDocumentEntry"); + return $resultObject; + } + + /** + * Approves document replacement + * + * @param string $entryId Document entry id to replace + * @return KalturaDocumentEntry + */ + function approveReplace($entryId) + { + $kparams = array(); + $this->client->addParam($kparams, "entryId", $entryId); + $this->client->queueServiceActionCall("document_documents", "approveReplace", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaDocumentEntry"); + return $resultObject; + } + + /** + * Cancels document replacement + * + * @param string $entryId Document entry id to cancel + * @return KalturaDocumentEntry + */ + function cancelReplace($entryId) + { + $kparams = array(); + $this->client->addParam($kparams, "entryId", $entryId); + $this->client->queueServiceActionCall("document_documents", "cancelReplace", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaDocumentEntry"); + return $resultObject; + } +} +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaDocumentClientPlugin extends KalturaClientPlugin +{ + /** + * @var KalturaDocumentsService + */ + public $documents = null; + + protected function __construct(KalturaClient $client) + { + parent::__construct($client); + $this->documents = new KalturaDocumentsService($client); + } + + /** + * @return KalturaDocumentClientPlugin + */ + public static function get(KalturaClient $client) + { + return new KalturaDocumentClientPlugin($client); + } + + /** + * @return array + */ + public function getServices() + { + $services = array( + 'documents' => $this->documents, + ); + return $services; + } + + /** + * @return string + */ + public function getName() + { + return 'document'; + } +} + diff --git a/local/kaltura/API/KalturaPlugins/KalturaDrmClientPlugin.php b/local/kaltura/API/KalturaPlugins/KalturaDrmClientPlugin.php new file mode 100644 index 0000000000000..f4ed99398a7af --- /dev/null +++ b/local/kaltura/API/KalturaPlugins/KalturaDrmClientPlugin.php @@ -0,0 +1,434 @@ +. +// +// @ignore +// =================================================================================================== + +/** + * @package Kaltura + * @subpackage Client + */ +require_once(dirname(__FILE__) . "/../KalturaClientBase.php"); +require_once(dirname(__FILE__) . "/../KalturaEnums.php"); +require_once(dirname(__FILE__) . "/../KalturaTypes.php"); + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaDrmProfileStatus +{ + const ACTIVE = 1; + const DELETED = 2; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaDrmProfileOrderBy +{ + const ID_ASC = "+id"; + const NAME_ASC = "+name"; + const ID_DESC = "-id"; + const NAME_DESC = "-name"; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaDrmProviderType +{ + const WIDEVINE = "widevine.WIDEVINE"; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaDrmProfile extends KalturaObjectBase +{ + /** + * + * + * @var int + * @readonly + */ + public $id = null; + + /** + * + * + * @var int + * @insertonly + */ + public $partnerId = null; + + /** + * + * + * @var string + */ + public $name = null; + + /** + * + * + * @var string + */ + public $description = null; + + /** + * + * + * @var KalturaDrmProviderType + */ + public $provider = null; + + /** + * + * + * @var KalturaDrmProfileStatus + */ + public $status = null; + + /** + * + * + * @var string + */ + public $licenseServerUrl = null; + + /** + * + * + * @var string + */ + public $defaultPolicy = null; + + /** + * + * + * @var int + * @readonly + */ + public $createdAt = null; + + /** + * + * + * @var int + * @readonly + */ + public $updatedAt = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaDrmProfileListResponse extends KalturaObjectBase +{ + /** + * + * + * @var array of KalturaDrmProfile + * @readonly + */ + public $objects; + + /** + * + * + * @var int + * @readonly + */ + public $totalCount = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +abstract class KalturaDrmProfileBaseFilter extends KalturaFilter +{ + /** + * + * + * @var int + */ + public $idEqual = null; + + /** + * + * + * @var string + */ + public $idIn = null; + + /** + * + * + * @var int + */ + public $partnerIdEqual = null; + + /** + * + * + * @var string + */ + public $partnerIdIn = null; + + /** + * + * + * @var string + */ + public $nameLike = null; + + /** + * + * + * @var KalturaDrmProviderType + */ + public $providerEqual = null; + + /** + * + * + * @var string + */ + public $providerIn = null; + + /** + * + * + * @var KalturaDrmProfileStatus + */ + public $statusEqual = null; + + /** + * + * + * @var string + */ + public $statusIn = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaDrmProfileFilter extends KalturaDrmProfileBaseFilter +{ + +} + + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaDrmProfileService extends KalturaServiceBase +{ + function __construct(KalturaClient $client = null) + { + parent::__construct($client); + } + + /** + * Allows you to add a new DrmProfile object + * + * @param KalturaDrmProfile $drmProfile + * @return KalturaDrmProfile + */ + function add(KalturaDrmProfile $drmProfile) + { + $kparams = array(); + $this->client->addParam($kparams, "drmProfile", $drmProfile->toParams()); + $this->client->queueServiceActionCall("drm_drmprofile", "add", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaDrmProfile"); + return $resultObject; + } + + /** + * Retrieve a KalturaDrmProfile object by ID + * + * @param int $drmProfileId + * @return KalturaDrmProfile + */ + function get($drmProfileId) + { + $kparams = array(); + $this->client->addParam($kparams, "drmProfileId", $drmProfileId); + $this->client->queueServiceActionCall("drm_drmprofile", "get", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaDrmProfile"); + return $resultObject; + } + + /** + * Update an existing KalturaDrmProfile object + * + * @param int $drmProfileId + * @param KalturaDrmProfile $drmProfile Id + * @return KalturaDrmProfile + */ + function update($drmProfileId, KalturaDrmProfile $drmProfile) + { + $kparams = array(); + $this->client->addParam($kparams, "drmProfileId", $drmProfileId); + $this->client->addParam($kparams, "drmProfile", $drmProfile->toParams()); + $this->client->queueServiceActionCall("drm_drmprofile", "update", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaDrmProfile"); + return $resultObject; + } + + /** + * Mark the KalturaDrmProfile object as deleted + * + * @param int $drmProfileId + * @return KalturaDrmProfile + */ + function delete($drmProfileId) + { + $kparams = array(); + $this->client->addParam($kparams, "drmProfileId", $drmProfileId); + $this->client->queueServiceActionCall("drm_drmprofile", "delete", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaDrmProfile"); + return $resultObject; + } + + /** + * List KalturaDrmProfile objects + * + * @param KalturaDrmProfileFilter $filter + * @param KalturaFilterPager $pager + * @return KalturaDrmProfileListResponse + */ + function listAction(KalturaDrmProfileFilter $filter = null, KalturaFilterPager $pager = null) + { + $kparams = array(); + if ($filter !== null) + $this->client->addParam($kparams, "filter", $filter->toParams()); + if ($pager !== null) + $this->client->addParam($kparams, "pager", $pager->toParams()); + $this->client->queueServiceActionCall("drm_drmprofile", "list", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaDrmProfileListResponse"); + return $resultObject; + } + + /** + * Retrieve a KalturaDrmProfile object by provider, if no specific profile defined return default profile + * + * @param string $provider + * @return KalturaDrmProfile + */ + function getByProvider($provider) + { + $kparams = array(); + $this->client->addParam($kparams, "provider", $provider); + $this->client->queueServiceActionCall("drm_drmprofile", "getByProvider", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaDrmProfile"); + return $resultObject; + } +} +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaDrmClientPlugin extends KalturaClientPlugin +{ + /** + * @var KalturaDrmProfileService + */ + public $drmProfile = null; + + protected function __construct(KalturaClient $client) + { + parent::__construct($client); + $this->drmProfile = new KalturaDrmProfileService($client); + } + + /** + * @return KalturaDrmClientPlugin + */ + public static function get(KalturaClient $client) + { + return new KalturaDrmClientPlugin($client); + } + + /** + * @return array + */ + public function getServices() + { + $services = array( + 'drmProfile' => $this->drmProfile, + ); + return $services; + } + + /** + * @return string + */ + public function getName() + { + return 'drm'; + } +} + diff --git a/local/kaltura/API/KalturaPlugins/KalturaDropFolderClientPlugin.php b/local/kaltura/API/KalturaPlugins/KalturaDropFolderClientPlugin.php new file mode 100644 index 0000000000000..9abc8fc3db924 --- /dev/null +++ b/local/kaltura/API/KalturaPlugins/KalturaDropFolderClientPlugin.php @@ -0,0 +1,1777 @@ +. +// +// @ignore +// =================================================================================================== + +/** + * @package Kaltura + * @subpackage Client + */ +require_once(dirname(__FILE__) . "/../KalturaClientBase.php"); +require_once(dirname(__FILE__) . "/../KalturaEnums.php"); +require_once(dirname(__FILE__) . "/../KalturaTypes.php"); + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaDropFolderContentFileHandlerMatchPolicy +{ + const ADD_AS_NEW = 1; + const MATCH_EXISTING_OR_ADD_AS_NEW = 2; + const MATCH_EXISTING_OR_KEEP_IN_FOLDER = 3; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaDropFolderFileDeletePolicy +{ + const MANUAL_DELETE = 1; + const AUTO_DELETE = 2; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaDropFolderFileStatus +{ + const UPLOADING = 1; + const PENDING = 2; + const WAITING = 3; + const HANDLED = 4; + const IGNORE = 5; + const DELETED = 6; + const PURGED = 7; + const NO_MATCH = 8; + const ERROR_HANDLING = 9; + const ERROR_DELETING = 10; + const DOWNLOADING = 11; + const ERROR_DOWNLOADING = 12; + const PROCESSING = 13; + const PARSED = 14; + const DETECTED = 15; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaDropFolderStatus +{ + const DISABLED = 0; + const ENABLED = 1; + const DELETED = 2; + const ERROR = 3; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaDropFolderErrorCode +{ + const ERROR_CONNECT = "1"; + const ERROR_AUTENTICATE = "2"; + const ERROR_GET_PHISICAL_FILE_LIST = "3"; + const ERROR_GET_DB_FILE_LIST = "4"; + const DROP_FOLDER_APP_ERROR = "5"; + const CONTENT_MATCH_POLICY_UNDEFINED = "6"; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaDropFolderFileErrorCode +{ + const ERROR_ADDING_BULK_UPLOAD = "dropFolderXmlBulkUpload.ERROR_ADDING_BULK_UPLOAD"; + const ERROR_ADD_CONTENT_RESOURCE = "dropFolderXmlBulkUpload.ERROR_ADD_CONTENT_RESOURCE"; + const ERROR_IN_BULK_UPLOAD = "dropFolderXmlBulkUpload.ERROR_IN_BULK_UPLOAD"; + const ERROR_WRITING_TEMP_FILE = "dropFolderXmlBulkUpload.ERROR_WRITING_TEMP_FILE"; + const LOCAL_FILE_WRONG_CHECKSUM = "dropFolderXmlBulkUpload.LOCAL_FILE_WRONG_CHECKSUM"; + const LOCAL_FILE_WRONG_SIZE = "dropFolderXmlBulkUpload.LOCAL_FILE_WRONG_SIZE"; + const MALFORMED_XML_FILE = "dropFolderXmlBulkUpload.MALFORMED_XML_FILE"; + const XML_FILE_SIZE_EXCEED_LIMIT = "dropFolderXmlBulkUpload.XML_FILE_SIZE_EXCEED_LIMIT"; + const ERROR_UPDATE_ENTRY = "1"; + const ERROR_ADD_ENTRY = "2"; + const FLAVOR_NOT_FOUND = "3"; + const FLAVOR_MISSING_IN_FILE_NAME = "4"; + const SLUG_REGEX_NO_MATCH = "5"; + const ERROR_READING_FILE = "6"; + const ERROR_DOWNLOADING_FILE = "7"; + const ERROR_UPDATE_FILE = "8"; + const ERROR_ADDING_CONTENT_PROCESSOR = "10"; + const ERROR_IN_CONTENT_PROCESSOR = "11"; + const ERROR_DELETING_FILE = "12"; + const FILE_NO_MATCH = "13"; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaDropFolderFileHandlerType +{ + const XML = "dropFolderXmlBulkUpload.XML"; + const CONTENT = "1"; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaDropFolderFileOrderBy +{ + const CREATED_AT_ASC = "+createdAt"; + const FILE_NAME_ASC = "+fileName"; + const FILE_SIZE_ASC = "+fileSize"; + const FILE_SIZE_LAST_SET_AT_ASC = "+fileSizeLastSetAt"; + const ID_ASC = "+id"; + const PARSED_FLAVOR_ASC = "+parsedFlavor"; + const PARSED_SLUG_ASC = "+parsedSlug"; + const UPDATED_AT_ASC = "+updatedAt"; + const CREATED_AT_DESC = "-createdAt"; + const FILE_NAME_DESC = "-fileName"; + const FILE_SIZE_DESC = "-fileSize"; + const FILE_SIZE_LAST_SET_AT_DESC = "-fileSizeLastSetAt"; + const ID_DESC = "-id"; + const PARSED_FLAVOR_DESC = "-parsedFlavor"; + const PARSED_SLUG_DESC = "-parsedSlug"; + const UPDATED_AT_DESC = "-updatedAt"; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaDropFolderOrderBy +{ + const CREATED_AT_ASC = "+createdAt"; + const ID_ASC = "+id"; + const NAME_ASC = "+name"; + const UPDATED_AT_ASC = "+updatedAt"; + const CREATED_AT_DESC = "-createdAt"; + const ID_DESC = "-id"; + const NAME_DESC = "-name"; + const UPDATED_AT_DESC = "-updatedAt"; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaDropFolderType +{ + const WEBEX = "WebexDropFolder.WEBEX"; + const LOCAL = "1"; + const FTP = "2"; + const SCP = "3"; + const SFTP = "4"; + const S3 = "6"; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaFtpDropFolderOrderBy +{ + const CREATED_AT_ASC = "+createdAt"; + const ID_ASC = "+id"; + const NAME_ASC = "+name"; + const UPDATED_AT_ASC = "+updatedAt"; + const CREATED_AT_DESC = "-createdAt"; + const ID_DESC = "-id"; + const NAME_DESC = "-name"; + const UPDATED_AT_DESC = "-updatedAt"; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaRemoteDropFolderOrderBy +{ + const CREATED_AT_ASC = "+createdAt"; + const ID_ASC = "+id"; + const NAME_ASC = "+name"; + const UPDATED_AT_ASC = "+updatedAt"; + const CREATED_AT_DESC = "-createdAt"; + const ID_DESC = "-id"; + const NAME_DESC = "-name"; + const UPDATED_AT_DESC = "-updatedAt"; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaScpDropFolderOrderBy +{ + const CREATED_AT_ASC = "+createdAt"; + const ID_ASC = "+id"; + const NAME_ASC = "+name"; + const UPDATED_AT_ASC = "+updatedAt"; + const CREATED_AT_DESC = "-createdAt"; + const ID_DESC = "-id"; + const NAME_DESC = "-name"; + const UPDATED_AT_DESC = "-updatedAt"; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaSftpDropFolderOrderBy +{ + const CREATED_AT_ASC = "+createdAt"; + const ID_ASC = "+id"; + const NAME_ASC = "+name"; + const UPDATED_AT_ASC = "+updatedAt"; + const CREATED_AT_DESC = "-createdAt"; + const ID_DESC = "-id"; + const NAME_DESC = "-name"; + const UPDATED_AT_DESC = "-updatedAt"; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaSshDropFolderOrderBy +{ + const CREATED_AT_ASC = "+createdAt"; + const ID_ASC = "+id"; + const NAME_ASC = "+name"; + const UPDATED_AT_ASC = "+updatedAt"; + const CREATED_AT_DESC = "-createdAt"; + const ID_DESC = "-id"; + const NAME_DESC = "-name"; + const UPDATED_AT_DESC = "-updatedAt"; +} + +/** + * @package Kaltura + * @subpackage Client + */ +abstract class KalturaDropFolderFileHandlerConfig extends KalturaObjectBase +{ + /** + * + * + * @var KalturaDropFolderFileHandlerType + * @readonly + */ + public $handlerType = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaDropFolder extends KalturaObjectBase +{ + /** + * + * + * @var int + * @readonly + */ + public $id = null; + + /** + * + * + * @var int + * @insertonly + */ + public $partnerId = null; + + /** + * + * + * @var string + */ + public $name = null; + + /** + * + * + * @var string + */ + public $description = null; + + /** + * + * + * @var KalturaDropFolderType + */ + public $type = null; + + /** + * + * + * @var KalturaDropFolderStatus + */ + public $status = null; + + /** + * + * + * @var int + */ + public $conversionProfileId = null; + + /** + * + * + * @var int + */ + public $dc = null; + + /** + * + * + * @var string + */ + public $path = null; + + /** + * The ammount of time, in seconds, that should pass so that a file with no change in size we'll be treated as "finished uploading to folder" + * + * + * @var int + */ + public $fileSizeCheckInterval = null; + + /** + * + * + * @var KalturaDropFolderFileDeletePolicy + */ + public $fileDeletePolicy = null; + + /** + * + * + * @var int + */ + public $autoFileDeleteDays = null; + + /** + * + * + * @var KalturaDropFolderFileHandlerType + */ + public $fileHandlerType = null; + + /** + * + * + * @var string + */ + public $fileNamePatterns = null; + + /** + * + * + * @var KalturaDropFolderFileHandlerConfig + */ + public $fileHandlerConfig; + + /** + * + * + * @var string + */ + public $tags = null; + + /** + * + * + * @var KalturaDropFolderErrorCode + */ + public $errorCode = null; + + /** + * + * + * @var string + */ + public $errorDescription = null; + + /** + * + * + * @var string + */ + public $ignoreFileNamePatterns = null; + + /** + * + * + * @var int + * @readonly + */ + public $createdAt = null; + + /** + * + * + * @var int + * @readonly + */ + public $updatedAt = null; + + /** + * + * + * @var int + */ + public $lastAccessedAt = null; + + /** + * + * + * @var bool + */ + public $incremental = null; + + /** + * + * + * @var int + */ + public $lastFileTimestamp = null; + + /** + * + * + * @var int + */ + public $metadataProfileId = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaDropFolderFile extends KalturaObjectBase +{ + /** + * + * + * @var int + * @readonly + */ + public $id = null; + + /** + * + * + * @var int + * @readonly + */ + public $partnerId = null; + + /** + * + * + * @var int + * @insertonly + */ + public $dropFolderId = null; + + /** + * + * + * @var string + * @insertonly + */ + public $fileName = null; + + /** + * + * + * @var float + */ + public $fileSize = null; + + /** + * + * + * @var int + * @readonly + */ + public $fileSizeLastSetAt = null; + + /** + * + * + * @var KalturaDropFolderFileStatus + * @readonly + */ + public $status = null; + + /** + * + * + * @var KalturaDropFolderType + * @readonly + */ + public $type = null; + + /** + * + * + * @var string + */ + public $parsedSlug = null; + + /** + * + * + * @var string + */ + public $parsedFlavor = null; + + /** + * + * + * @var int + */ + public $leadDropFolderFileId = null; + + /** + * + * + * @var int + */ + public $deletedDropFolderFileId = null; + + /** + * + * + * @var string + */ + public $entryId = null; + + /** + * + * + * @var KalturaDropFolderFileErrorCode + */ + public $errorCode = null; + + /** + * + * + * @var string + */ + public $errorDescription = null; + + /** + * + * + * @var string + */ + public $lastModificationTime = null; + + /** + * + * + * @var int + * @readonly + */ + public $createdAt = null; + + /** + * + * + * @var int + * @readonly + */ + public $updatedAt = null; + + /** + * + * + * @var int + */ + public $uploadStartDetectedAt = null; + + /** + * + * + * @var int + */ + public $uploadEndDetectedAt = null; + + /** + * + * + * @var int + */ + public $importStartedAt = null; + + /** + * + * + * @var int + */ + public $importEndedAt = null; + + /** + * + * + * @var int + * @readonly + */ + public $batchJobId = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaDropFolderFileListResponse extends KalturaObjectBase +{ + /** + * + * + * @var array of KalturaDropFolderFile + * @readonly + */ + public $objects; + + /** + * + * + * @var int + * @readonly + */ + public $totalCount = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaDropFolderListResponse extends KalturaObjectBase +{ + /** + * + * + * @var array of KalturaDropFolder + * @readonly + */ + public $objects; + + /** + * + * + * @var int + * @readonly + */ + public $totalCount = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +abstract class KalturaDropFolderBaseFilter extends KalturaFilter +{ + /** + * + * + * @var int + */ + public $idEqual = null; + + /** + * + * + * @var string + */ + public $idIn = null; + + /** + * + * + * @var int + */ + public $partnerIdEqual = null; + + /** + * + * + * @var string + */ + public $partnerIdIn = null; + + /** + * + * + * @var string + */ + public $nameLike = null; + + /** + * + * + * @var KalturaDropFolderType + */ + public $typeEqual = null; + + /** + * + * + * @var string + */ + public $typeIn = null; + + /** + * + * + * @var KalturaDropFolderStatus + */ + public $statusEqual = null; + + /** + * + * + * @var string + */ + public $statusIn = null; + + /** + * + * + * @var int + */ + public $conversionProfileIdEqual = null; + + /** + * + * + * @var string + */ + public $conversionProfileIdIn = null; + + /** + * + * + * @var int + */ + public $dcEqual = null; + + /** + * + * + * @var string + */ + public $dcIn = null; + + /** + * + * + * @var string + */ + public $pathEqual = null; + + /** + * + * + * @var string + */ + public $pathLike = null; + + /** + * + * + * @var KalturaDropFolderFileHandlerType + */ + public $fileHandlerTypeEqual = null; + + /** + * + * + * @var string + */ + public $fileHandlerTypeIn = null; + + /** + * + * + * @var string + */ + public $fileNamePatternsLike = null; + + /** + * + * + * @var string + */ + public $fileNamePatternsMultiLikeOr = null; + + /** + * + * + * @var string + */ + public $fileNamePatternsMultiLikeAnd = null; + + /** + * + * + * @var string + */ + public $tagsLike = null; + + /** + * + * + * @var string + */ + public $tagsMultiLikeOr = null; + + /** + * + * + * @var string + */ + public $tagsMultiLikeAnd = null; + + /** + * + * + * @var KalturaDropFolderErrorCode + */ + public $errorCodeEqual = null; + + /** + * + * + * @var string + */ + public $errorCodeIn = null; + + /** + * + * + * @var int + */ + public $createdAtGreaterThanOrEqual = null; + + /** + * + * + * @var int + */ + public $createdAtLessThanOrEqual = null; + + /** + * + * + * @var int + */ + public $updatedAtGreaterThanOrEqual = null; + + /** + * + * + * @var int + */ + public $updatedAtLessThanOrEqual = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaDropFolderContentFileHandlerConfig extends KalturaDropFolderFileHandlerConfig +{ + /** + * + * + * @var KalturaDropFolderContentFileHandlerMatchPolicy + */ + public $contentMatchPolicy = null; + + /** + * Regular expression that defines valid file names to be handled. + * The following might be extracted from the file name and used if defined: + * - (?P\w+) - will be used as the drop folder file's parsed slug. + * - (?P\w+) - will be used as the drop folder file's parsed flavor. + * + * + * @var string + */ + public $slugRegex = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaDropFolderContentProcessorJobData extends KalturaJobData +{ + /** + * + * + * @var string + */ + public $dropFolderFileIds = null; + + /** + * + * + * @var string + */ + public $parsedSlug = null; + + /** + * + * + * @var KalturaDropFolderContentFileHandlerMatchPolicy + */ + public $contentMatchPolicy = null; + + /** + * + * + * @var int + */ + public $conversionProfileId = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +abstract class KalturaDropFolderFileBaseFilter extends KalturaFilter +{ + /** + * + * + * @var int + */ + public $idEqual = null; + + /** + * + * + * @var string + */ + public $idIn = null; + + /** + * + * + * @var int + */ + public $partnerIdEqual = null; + + /** + * + * + * @var string + */ + public $partnerIdIn = null; + + /** + * + * + * @var int + */ + public $dropFolderIdEqual = null; + + /** + * + * + * @var string + */ + public $dropFolderIdIn = null; + + /** + * + * + * @var string + */ + public $fileNameEqual = null; + + /** + * + * + * @var string + */ + public $fileNameIn = null; + + /** + * + * + * @var string + */ + public $fileNameLike = null; + + /** + * + * + * @var KalturaDropFolderFileStatus + */ + public $statusEqual = null; + + /** + * + * + * @var string + */ + public $statusIn = null; + + /** + * + * + * @var string + */ + public $statusNotIn = null; + + /** + * + * + * @var string + */ + public $parsedSlugEqual = null; + + /** + * + * + * @var string + */ + public $parsedSlugIn = null; + + /** + * + * + * @var string + */ + public $parsedSlugLike = null; + + /** + * + * + * @var string + */ + public $parsedFlavorEqual = null; + + /** + * + * + * @var string + */ + public $parsedFlavorIn = null; + + /** + * + * + * @var string + */ + public $parsedFlavorLike = null; + + /** + * + * + * @var int + */ + public $leadDropFolderFileIdEqual = null; + + /** + * + * + * @var int + */ + public $deletedDropFolderFileIdEqual = null; + + /** + * + * + * @var string + */ + public $entryIdEqual = null; + + /** + * + * + * @var KalturaDropFolderFileErrorCode + */ + public $errorCodeEqual = null; + + /** + * + * + * @var string + */ + public $errorCodeIn = null; + + /** + * + * + * @var int + */ + public $createdAtGreaterThanOrEqual = null; + + /** + * + * + * @var int + */ + public $createdAtLessThanOrEqual = null; + + /** + * + * + * @var int + */ + public $updatedAtGreaterThanOrEqual = null; + + /** + * + * + * @var int + */ + public $updatedAtLessThanOrEqual = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +abstract class KalturaRemoteDropFolder extends KalturaDropFolder +{ + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaDropFolderFileFilter extends KalturaDropFolderFileBaseFilter +{ + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaDropFolderFilter extends KalturaDropFolderBaseFilter +{ + /** + * + * + * @var KalturaNullableBoolean + */ + public $currentDc = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaFtpDropFolder extends KalturaRemoteDropFolder +{ + /** + * + * + * @var string + */ + public $host = null; + + /** + * + * + * @var int + */ + public $port = null; + + /** + * + * + * @var string + */ + public $username = null; + + /** + * + * + * @var string + */ + public $password = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +abstract class KalturaSshDropFolder extends KalturaRemoteDropFolder +{ + /** + * + * + * @var string + */ + public $host = null; + + /** + * + * + * @var int + */ + public $port = null; + + /** + * + * + * @var string + */ + public $username = null; + + /** + * + * + * @var string + */ + public $password = null; + + /** + * + * + * @var string + */ + public $privateKey = null; + + /** + * + * + * @var string + */ + public $publicKey = null; + + /** + * + * + * @var string + */ + public $passPhrase = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaDropFolderFileResource extends KalturaDataCenterContentResource +{ + /** + * Id of the drop folder file object + * + * + * @var int + */ + public $dropFolderFileId = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaDropFolderImportJobData extends KalturaSshImportJobData +{ + /** + * + * + * @var int + */ + public $dropFolderFileId = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +abstract class KalturaRemoteDropFolderBaseFilter extends KalturaDropFolderFilter +{ + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaScpDropFolder extends KalturaSshDropFolder +{ + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaSftpDropFolder extends KalturaSshDropFolder +{ + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaRemoteDropFolderFilter extends KalturaRemoteDropFolderBaseFilter +{ + +} + +/** + * @package Kaltura + * @subpackage Client + */ +abstract class KalturaFtpDropFolderBaseFilter extends KalturaRemoteDropFolderFilter +{ + +} + +/** + * @package Kaltura + * @subpackage Client + */ +abstract class KalturaSshDropFolderBaseFilter extends KalturaRemoteDropFolderFilter +{ + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaFtpDropFolderFilter extends KalturaFtpDropFolderBaseFilter +{ + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaSshDropFolderFilter extends KalturaSshDropFolderBaseFilter +{ + +} + +/** + * @package Kaltura + * @subpackage Client + */ +abstract class KalturaScpDropFolderBaseFilter extends KalturaSshDropFolderFilter +{ + +} + +/** + * @package Kaltura + * @subpackage Client + */ +abstract class KalturaSftpDropFolderBaseFilter extends KalturaSshDropFolderFilter +{ + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaScpDropFolderFilter extends KalturaScpDropFolderBaseFilter +{ + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaSftpDropFolderFilter extends KalturaSftpDropFolderBaseFilter +{ + +} + + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaDropFolderService extends KalturaServiceBase +{ + function __construct(KalturaClient $client = null) + { + parent::__construct($client); + } + + /** + * Allows you to add a new KalturaDropFolder object + * + * @param KalturaDropFolder $dropFolder + * @return KalturaDropFolder + */ + function add(KalturaDropFolder $dropFolder) + { + $kparams = array(); + $this->client->addParam($kparams, "dropFolder", $dropFolder->toParams()); + $this->client->queueServiceActionCall("dropfolder_dropfolder", "add", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaDropFolder"); + return $resultObject; + } + + /** + * Retrieve a KalturaDropFolder object by ID + * + * @param int $dropFolderId + * @return KalturaDropFolder + */ + function get($dropFolderId) + { + $kparams = array(); + $this->client->addParam($kparams, "dropFolderId", $dropFolderId); + $this->client->queueServiceActionCall("dropfolder_dropfolder", "get", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaDropFolder"); + return $resultObject; + } + + /** + * Update an existing KalturaDropFolder object + * + * @param int $dropFolderId + * @param KalturaDropFolder $dropFolder Id + * @return KalturaDropFolder + */ + function update($dropFolderId, KalturaDropFolder $dropFolder) + { + $kparams = array(); + $this->client->addParam($kparams, "dropFolderId", $dropFolderId); + $this->client->addParam($kparams, "dropFolder", $dropFolder->toParams()); + $this->client->queueServiceActionCall("dropfolder_dropfolder", "update", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaDropFolder"); + return $resultObject; + } + + /** + * Mark the KalturaDropFolder object as deleted + * + * @param int $dropFolderId + * @return KalturaDropFolder + */ + function delete($dropFolderId) + { + $kparams = array(); + $this->client->addParam($kparams, "dropFolderId", $dropFolderId); + $this->client->queueServiceActionCall("dropfolder_dropfolder", "delete", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaDropFolder"); + return $resultObject; + } + + /** + * List KalturaDropFolder objects + * + * @param KalturaDropFolderFilter $filter + * @param KalturaFilterPager $pager + * @return KalturaDropFolderListResponse + */ + function listAction(KalturaDropFolderFilter $filter = null, KalturaFilterPager $pager = null) + { + $kparams = array(); + if ($filter !== null) + $this->client->addParam($kparams, "filter", $filter->toParams()); + if ($pager !== null) + $this->client->addParam($kparams, "pager", $pager->toParams()); + $this->client->queueServiceActionCall("dropfolder_dropfolder", "list", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaDropFolderListResponse"); + return $resultObject; + } +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaDropFolderFileService extends KalturaServiceBase +{ + function __construct(KalturaClient $client = null) + { + parent::__construct($client); + } + + /** + * Allows you to add a new KalturaDropFolderFile object + * + * @param KalturaDropFolderFile $dropFolderFile + * @return KalturaDropFolderFile + */ + function add(KalturaDropFolderFile $dropFolderFile) + { + $kparams = array(); + $this->client->addParam($kparams, "dropFolderFile", $dropFolderFile->toParams()); + $this->client->queueServiceActionCall("dropfolder_dropfolderfile", "add", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaDropFolderFile"); + return $resultObject; + } + + /** + * Retrieve a KalturaDropFolderFile object by ID + * + * @param int $dropFolderFileId + * @return KalturaDropFolderFile + */ + function get($dropFolderFileId) + { + $kparams = array(); + $this->client->addParam($kparams, "dropFolderFileId", $dropFolderFileId); + $this->client->queueServiceActionCall("dropfolder_dropfolderfile", "get", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaDropFolderFile"); + return $resultObject; + } + + /** + * Update an existing KalturaDropFolderFile object + * + * @param int $dropFolderFileId + * @param KalturaDropFolderFile $dropFolderFile Id + * @return KalturaDropFolderFile + */ + function update($dropFolderFileId, KalturaDropFolderFile $dropFolderFile) + { + $kparams = array(); + $this->client->addParam($kparams, "dropFolderFileId", $dropFolderFileId); + $this->client->addParam($kparams, "dropFolderFile", $dropFolderFile->toParams()); + $this->client->queueServiceActionCall("dropfolder_dropfolderfile", "update", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaDropFolderFile"); + return $resultObject; + } + + /** + * Update status of KalturaDropFolderFile + * + * @param int $dropFolderFileId + * @param int $status + * @return KalturaDropFolderFile + */ + function updateStatus($dropFolderFileId, $status) + { + $kparams = array(); + $this->client->addParam($kparams, "dropFolderFileId", $dropFolderFileId); + $this->client->addParam($kparams, "status", $status); + $this->client->queueServiceActionCall("dropfolder_dropfolderfile", "updateStatus", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaDropFolderFile"); + return $resultObject; + } + + /** + * Mark the KalturaDropFolderFile object as deleted + * + * @param int $dropFolderFileId + * @return KalturaDropFolderFile + */ + function delete($dropFolderFileId) + { + $kparams = array(); + $this->client->addParam($kparams, "dropFolderFileId", $dropFolderFileId); + $this->client->queueServiceActionCall("dropfolder_dropfolderfile", "delete", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaDropFolderFile"); + return $resultObject; + } + + /** + * List KalturaDropFolderFile objects + * + * @param KalturaDropFolderFileFilter $filter + * @param KalturaFilterPager $pager + * @return KalturaDropFolderFileListResponse + */ + function listAction(KalturaDropFolderFileFilter $filter = null, KalturaFilterPager $pager = null) + { + $kparams = array(); + if ($filter !== null) + $this->client->addParam($kparams, "filter", $filter->toParams()); + if ($pager !== null) + $this->client->addParam($kparams, "pager", $pager->toParams()); + $this->client->queueServiceActionCall("dropfolder_dropfolderfile", "list", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaDropFolderFileListResponse"); + return $resultObject; + } + + /** + * Set the KalturaDropFolderFile status to ignore (KalturaDropFolderFileStatus::IGNORE) + * + * @param int $dropFolderFileId + * @return KalturaDropFolderFile + */ + function ignore($dropFolderFileId) + { + $kparams = array(); + $this->client->addParam($kparams, "dropFolderFileId", $dropFolderFileId); + $this->client->queueServiceActionCall("dropfolder_dropfolderfile", "ignore", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaDropFolderFile"); + return $resultObject; + } +} +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaDropFolderClientPlugin extends KalturaClientPlugin +{ + /** + * @var KalturaDropFolderService + */ + public $dropFolder = null; + + /** + * @var KalturaDropFolderFileService + */ + public $dropFolderFile = null; + + protected function __construct(KalturaClient $client) + { + parent::__construct($client); + $this->dropFolder = new KalturaDropFolderService($client); + $this->dropFolderFile = new KalturaDropFolderFileService($client); + } + + /** + * @return KalturaDropFolderClientPlugin + */ + public static function get(KalturaClient $client) + { + return new KalturaDropFolderClientPlugin($client); + } + + /** + * @return array + */ + public function getServices() + { + $services = array( + 'dropFolder' => $this->dropFolder, + 'dropFolderFile' => $this->dropFolderFile, + ); + return $services; + } + + /** + * @return string + */ + public function getName() + { + return 'dropFolder'; + } +} + diff --git a/local/kaltura/API/KalturaPlugins/KalturaDropFolderXmlBulkUploadClientPlugin.php b/local/kaltura/API/KalturaPlugins/KalturaDropFolderXmlBulkUploadClientPlugin.php new file mode 100644 index 0000000000000..9388b3cbb7a11 --- /dev/null +++ b/local/kaltura/API/KalturaPlugins/KalturaDropFolderXmlBulkUploadClientPlugin.php @@ -0,0 +1,86 @@ +. +// +// @ignore +// =================================================================================================== + +/** + * @package Kaltura + * @subpackage Client + */ +require_once(dirname(__FILE__) . "/../KalturaClientBase.php"); +require_once(dirname(__FILE__) . "/../KalturaEnums.php"); +require_once(dirname(__FILE__) . "/../KalturaTypes.php"); +require_once(dirname(__FILE__) . "/KalturaBulkUploadXmlClientPlugin.php"); +require_once(dirname(__FILE__) . "/KalturaDropFolderClientPlugin.php"); + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaDropFolderXmlBulkUploadFileHandlerConfig extends KalturaDropFolderFileHandlerConfig +{ + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaDropFolderXmlBulkUploadClientPlugin extends KalturaClientPlugin +{ + protected function __construct(KalturaClient $client) + { + parent::__construct($client); + } + + /** + * @return KalturaDropFolderXmlBulkUploadClientPlugin + */ + public static function get(KalturaClient $client) + { + return new KalturaDropFolderXmlBulkUploadClientPlugin($client); + } + + /** + * @return array + */ + public function getServices() + { + $services = array( + ); + return $services; + } + + /** + * @return string + */ + public function getName() + { + return 'dropFolderXmlBulkUpload'; + } +} + diff --git a/local/kaltura/API/KalturaPlugins/KalturaEmailNotificationClientPlugin.php b/local/kaltura/API/KalturaPlugins/KalturaEmailNotificationClientPlugin.php new file mode 100644 index 0000000000000..657a3fd4643c4 --- /dev/null +++ b/local/kaltura/API/KalturaPlugins/KalturaEmailNotificationClientPlugin.php @@ -0,0 +1,630 @@ +. +// +// @ignore +// =================================================================================================== + +/** + * @package Kaltura + * @subpackage Client + */ +require_once(dirname(__FILE__) . "/../KalturaClientBase.php"); +require_once(dirname(__FILE__) . "/../KalturaEnums.php"); +require_once(dirname(__FILE__) . "/../KalturaTypes.php"); +require_once(dirname(__FILE__) . "/KalturaEventNotificationClientPlugin.php"); + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaEmailNotificationTemplatePriority +{ + const HIGH = 1; + const NORMAL = 3; + const LOW = 5; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaEmailNotificationFormat +{ + const HTML = "1"; + const TEXT = "2"; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaEmailNotificationRecipientProviderType +{ + const STATIC_LIST = "1"; + const CATEGORY = "2"; + const USER = "3"; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaEmailNotificationTemplateOrderBy +{ + const CREATED_AT_ASC = "+createdAt"; + const ID_ASC = "+id"; + const UPDATED_AT_ASC = "+updatedAt"; + const CREATED_AT_DESC = "-createdAt"; + const ID_DESC = "-id"; + const UPDATED_AT_DESC = "-updatedAt"; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaEmailNotificationRecipient extends KalturaObjectBase +{ + /** + * Recipient e-mail address + * + * + * @var KalturaStringValue + */ + public $email; + + /** + * Recipient name + * + * + * @var KalturaStringValue + */ + public $name; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +abstract class KalturaEmailNotificationRecipientJobData extends KalturaObjectBase +{ + /** + * Provider type of the job data. + * + * + * @var KalturaEmailNotificationRecipientProviderType + * @readonly + */ + public $providerType = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +abstract class KalturaEmailNotificationRecipientProvider extends KalturaObjectBase +{ + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaCategoryUserProviderFilter extends KalturaFilter +{ + /** + * + * + * @var string + */ + public $userIdEqual = null; + + /** + * + * + * @var string + */ + public $userIdIn = null; + + /** + * + * + * @var KalturaCategoryUserStatus + */ + public $statusEqual = null; + + /** + * + * + * @var string + */ + public $statusIn = null; + + /** + * + * + * @var int + */ + public $createdAtGreaterThanOrEqual = null; + + /** + * + * + * @var int + */ + public $createdAtLessThanOrEqual = null; + + /** + * + * + * @var int + */ + public $updatedAtGreaterThanOrEqual = null; + + /** + * + * + * @var int + */ + public $updatedAtLessThanOrEqual = null; + + /** + * + * + * @var KalturaUpdateMethodType + */ + public $updateMethodEqual = null; + + /** + * + * + * @var string + */ + public $updateMethodIn = null; + + /** + * + * + * @var string + */ + public $permissionNamesMatchAnd = null; + + /** + * + * + * @var string + */ + public $permissionNamesMatchOr = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaEmailNotificationCategoryRecipientJobData extends KalturaEmailNotificationRecipientJobData +{ + /** + * + * + * @var KalturaCategoryUserFilter + */ + public $categoryUserFilter; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaEmailNotificationCategoryRecipientProvider extends KalturaEmailNotificationRecipientProvider +{ + /** + * The ID of the category whose subscribers should receive the email notification. + * + * + * @var KalturaStringValue + */ + public $categoryId; + + /** + * + * + * @var KalturaCategoryUserProviderFilter + */ + public $categoryUserFilter; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaEmailNotificationParameter extends KalturaEventNotificationParameter +{ + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaEmailNotificationStaticRecipientJobData extends KalturaEmailNotificationRecipientJobData +{ + /** + * Email to emails and names + * + * + * @var array of KalturaKeyValue + */ + public $emailRecipients; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaEmailNotificationStaticRecipientProvider extends KalturaEmailNotificationRecipientProvider +{ + /** + * Email to emails and names + * + * + * @var array of KalturaEmailNotificationRecipient + */ + public $emailRecipients; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaEmailNotificationTemplate extends KalturaEventNotificationTemplate +{ + /** + * Define the email body format + * + * + * @var KalturaEmailNotificationFormat + */ + public $format = null; + + /** + * Define the email subject + * + * + * @var string + */ + public $subject = null; + + /** + * Define the email body content + * + * + * @var string + */ + public $body = null; + + /** + * Define the email sender email + * + * + * @var string + */ + public $fromEmail = null; + + /** + * Define the email sender name + * + * + * @var string + */ + public $fromName = null; + + /** + * Email recipient emails and names + * + * + * @var KalturaEmailNotificationRecipientProvider + */ + public $to; + + /** + * Email recipient emails and names + * + * + * @var KalturaEmailNotificationRecipientProvider + */ + public $cc; + + /** + * Email recipient emails and names + * + * + * @var KalturaEmailNotificationRecipientProvider + */ + public $bcc; + + /** + * Default email addresses to whom the reply should be sent. + * + * + * @var KalturaEmailNotificationRecipientProvider + */ + public $replyTo; + + /** + * Define the email priority + * + * + * @var KalturaEmailNotificationTemplatePriority + */ + public $priority = null; + + /** + * Email address that a reading confirmation will be sent + * + * + * @var string + */ + public $confirmReadingTo = null; + + /** + * Hostname to use in Message-Id and Received headers and as default HELLO string. + * If empty, the value returned by SERVER_NAME is used or 'localhost.localdomain'. + * + * + * @var string + */ + public $hostname = null; + + /** + * Sets the message ID to be used in the Message-Id header. + * If empty, a unique id will be generated. + * + * + * @var string + */ + public $messageID = null; + + /** + * Adds a e-mail custom header + * + * + * @var array of KalturaKeyValue + */ + public $customHeaders; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaEmailNotificationUserRecipientJobData extends KalturaEmailNotificationRecipientJobData +{ + /** + * + * + * @var KalturaUserFilter + */ + public $filter; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaEmailNotificationUserRecipientProvider extends KalturaEmailNotificationRecipientProvider +{ + /** + * + * + * @var KalturaUserFilter + */ + public $filter; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaEmailNotificationDispatchJobData extends KalturaEventNotificationDispatchJobData +{ + /** + * Define the email sender email + * + * + * @var string + */ + public $fromEmail = null; + + /** + * Define the email sender name + * + * + * @var string + */ + public $fromName = null; + + /** + * Email recipient emails and names, key is mail address and value is the name + * + * + * @var KalturaEmailNotificationRecipientJobData + */ + public $to; + + /** + * Email cc emails and names, key is mail address and value is the name + * + * + * @var KalturaEmailNotificationRecipientJobData + */ + public $cc; + + /** + * Email bcc emails and names, key is mail address and value is the name + * + * + * @var KalturaEmailNotificationRecipientJobData + */ + public $bcc; + + /** + * Email addresses that a replies should be sent to, key is mail address and value is the name + * + * + * @var KalturaEmailNotificationRecipientJobData + */ + public $replyTo; + + /** + * Define the email priority + * + * + * @var KalturaEmailNotificationTemplatePriority + */ + public $priority = null; + + /** + * Email address that a reading confirmation will be sent to + * + * + * @var string + */ + public $confirmReadingTo = null; + + /** + * Hostname to use in Message-Id and Received headers and as default HELO string. + * If empty, the value returned by SERVER_NAME is used or 'localhost.localdomain'. + * + * + * @var string + */ + public $hostname = null; + + /** + * Sets the message ID to be used in the Message-Id header. + * If empty, a unique id will be generated. + * + * + * @var string + */ + public $messageID = null; + + /** + * Adds a e-mail custom header + * + * + * @var array of KalturaKeyValue + */ + public $customHeaders; + + /** + * Define the content dynamic parameters + * + * + * @var array of KalturaKeyValue + */ + public $contentParameters; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +abstract class KalturaEmailNotificationTemplateBaseFilter extends KalturaEventNotificationTemplateFilter +{ + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaEmailNotificationTemplateFilter extends KalturaEmailNotificationTemplateBaseFilter +{ + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaEmailNotificationClientPlugin extends KalturaClientPlugin +{ + protected function __construct(KalturaClient $client) + { + parent::__construct($client); + } + + /** + * @return KalturaEmailNotificationClientPlugin + */ + public static function get(KalturaClient $client) + { + return new KalturaEmailNotificationClientPlugin($client); + } + + /** + * @return array + */ + public function getServices() + { + $services = array( + ); + return $services; + } + + /** + * @return string + */ + public function getName() + { + return 'emailNotification'; + } +} + diff --git a/local/kaltura/API/KalturaPlugins/KalturaEventNotificationClientPlugin.php b/local/kaltura/API/KalturaPlugins/KalturaEventNotificationClientPlugin.php new file mode 100644 index 0000000000000..87ebdd44cb3b0 --- /dev/null +++ b/local/kaltura/API/KalturaPlugins/KalturaEventNotificationClientPlugin.php @@ -0,0 +1,790 @@ +. +// +// @ignore +// =================================================================================================== + +/** + * @package Kaltura + * @subpackage Client + */ +require_once(dirname(__FILE__) . "/../KalturaClientBase.php"); +require_once(dirname(__FILE__) . "/../KalturaEnums.php"); +require_once(dirname(__FILE__) . "/../KalturaTypes.php"); + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaEventNotificationTemplateStatus +{ + const DISABLED = 1; + const ACTIVE = 2; + const DELETED = 3; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaEventNotificationEventObjectType +{ + const AD_CUE_POINT = "adCuePointEventNotifications.AdCuePoint"; + const ANNOTATION = "annotationEventNotifications.Annotation"; + const CAPTION_ASSET = "captionAssetEventNotifications.CaptionAsset"; + const CODE_CUE_POINT = "codeCuePointEventNotifications.CodeCuePoint"; + const DISTRIBUTION_PROFILE = "contentDistributionEventNotifications.DistributionProfile"; + const ENTRY_DISTRIBUTION = "contentDistributionEventNotifications.EntryDistribution"; + const CUE_POINT = "cuePointEventNotifications.CuePoint"; + const METADATA = "metadataEventNotifications.Metadata"; + const ENTRY = "1"; + const CATEGORY = "2"; + const ASSET = "3"; + const FLAVORASSET = "4"; + const THUMBASSET = "5"; + const KUSER = "8"; + const ACCESSCONTROL = "9"; + const BATCHJOB = "10"; + const BULKUPLOADRESULT = "11"; + const CATEGORYKUSER = "12"; + const CONVERSIONPROFILE2 = "14"; + const FLAVORPARAMS = "15"; + const FLAVORPARAMSCONVERSIONPROFILE = "16"; + const FLAVORPARAMSOUTPUT = "17"; + const GENERICSYNDICATIONFEED = "18"; + const KUSERTOUSERROLE = "19"; + const PARTNER = "20"; + const PERMISSION = "21"; + const PERMISSIONITEM = "22"; + const PERMISSIONTOPERMISSIONITEM = "23"; + const SCHEDULER = "24"; + const SCHEDULERCONFIG = "25"; + const SCHEDULERSTATUS = "26"; + const SCHEDULERWORKER = "27"; + const STORAGEPROFILE = "28"; + const SYNDICATIONFEED = "29"; + const THUMBPARAMS = "31"; + const THUMBPARAMSOUTPUT = "32"; + const UPLOADTOKEN = "33"; + const USERLOGINDATA = "34"; + const USERROLE = "35"; + const WIDGET = "36"; + const CATEGORYENTRY = "37"; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaEventNotificationEventType +{ + const BATCH_JOB_STATUS = "1"; + const OBJECT_ADDED = "2"; + const OBJECT_CHANGED = "3"; + const OBJECT_COPIED = "4"; + const OBJECT_CREATED = "5"; + const OBJECT_DATA_CHANGED = "6"; + const OBJECT_DELETED = "7"; + const OBJECT_ERASED = "8"; + const OBJECT_READY_FOR_REPLACMENT = "9"; + const OBJECT_SAVED = "10"; + const OBJECT_UPDATED = "11"; + const OBJECT_REPLACED = "12"; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaEventNotificationTemplateOrderBy +{ + const CREATED_AT_ASC = "+createdAt"; + const ID_ASC = "+id"; + const UPDATED_AT_ASC = "+updatedAt"; + const CREATED_AT_DESC = "-createdAt"; + const ID_DESC = "-id"; + const UPDATED_AT_DESC = "-updatedAt"; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaEventNotificationTemplateType +{ + const EMAIL = "emailNotification.Email"; + const HTTP = "httpNotification.Http"; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaEventNotificationParameter extends KalturaObjectBase +{ + /** + * The key in the subject and body to be replaced with the dynamic value + * + * + * @var string + */ + public $key = null; + + /** + * + * + * @var string + */ + public $description = null; + + /** + * The dynamic value to be placed in the final output + * + * + * @var KalturaStringValue + */ + public $value; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaEventNotificationTemplate extends KalturaObjectBase +{ + /** + * + * + * @var int + * @readonly + */ + public $id = null; + + /** + * + * + * @var int + * @readonly + */ + public $partnerId = null; + + /** + * + * + * @var string + */ + public $name = null; + + /** + * + * + * @var string + */ + public $systemName = null; + + /** + * + * + * @var string + */ + public $description = null; + + /** + * + * + * @var KalturaEventNotificationTemplateType + * @insertonly + */ + public $type = null; + + /** + * + * + * @var KalturaEventNotificationTemplateStatus + * @readonly + */ + public $status = null; + + /** + * + * + * @var int + * @readonly + */ + public $createdAt = null; + + /** + * + * + * @var int + * @readonly + */ + public $updatedAt = null; + + /** + * Define that the template could be dispatched manually from the API + * + * + * @var bool + */ + public $manualDispatchEnabled = null; + + /** + * Define that the template could be dispatched automatically by the system + * + * + * @var bool + */ + public $automaticDispatchEnabled = null; + + /** + * Define the event that should trigger this notification + * + * + * @var KalturaEventNotificationEventType + */ + public $eventType = null; + + /** + * Define the object that raied the event that should trigger this notification + * + * + * @var KalturaEventNotificationEventObjectType + */ + public $eventObjectType = null; + + /** + * Define the conditions that cause this notification to be triggered + * + * + * @var array of KalturaCondition + */ + public $eventConditions; + + /** + * Define the content dynamic parameters + * + * + * @var array of KalturaEventNotificationParameter + */ + public $contentParameters; + + /** + * Define the content dynamic parameters + * + * + * @var array of KalturaEventNotificationParameter + */ + public $userParameters; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaEventNotificationTemplateListResponse extends KalturaObjectBase +{ + /** + * + * + * @var array of KalturaEventNotificationTemplate + * @readonly + */ + public $objects; + + /** + * + * + * @var int + * @readonly + */ + public $totalCount = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaEventFieldCondition extends KalturaCondition +{ + /** + * The field to be evaluated at runtime + * + * + * @var KalturaBooleanField + */ + public $field; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaEventNotificationArrayParameter extends KalturaEventNotificationParameter +{ + /** + * + * + * @var array of KalturaString + */ + public $values; + + /** + * Used to restrict the values to close list + * + * + * @var array of KalturaStringValue + */ + public $allowedValues; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaEventNotificationDispatchJobData extends KalturaJobData +{ + /** + * + * + * @var int + */ + public $templateId = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +abstract class KalturaEventNotificationTemplateBaseFilter extends KalturaFilter +{ + /** + * + * + * @var int + */ + public $idEqual = null; + + /** + * + * + * @var string + */ + public $idIn = null; + + /** + * + * + * @var int + */ + public $partnerIdEqual = null; + + /** + * + * + * @var string + */ + public $partnerIdIn = null; + + /** + * + * + * @var string + */ + public $systemNameEqual = null; + + /** + * + * + * @var string + */ + public $systemNameIn = null; + + /** + * + * + * @var KalturaEventNotificationTemplateType + */ + public $typeEqual = null; + + /** + * + * + * @var string + */ + public $typeIn = null; + + /** + * + * + * @var KalturaEventNotificationTemplateStatus + */ + public $statusEqual = null; + + /** + * + * + * @var string + */ + public $statusIn = null; + + /** + * + * + * @var int + */ + public $createdAtGreaterThanOrEqual = null; + + /** + * + * + * @var int + */ + public $createdAtLessThanOrEqual = null; + + /** + * + * + * @var int + */ + public $updatedAtGreaterThanOrEqual = null; + + /** + * + * + * @var int + */ + public $updatedAtLessThanOrEqual = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaEventObjectChangedCondition extends KalturaCondition +{ + /** + * Comma seperated column names to be tested + * + * + * @var string + */ + public $modifiedColumns = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaEventNotificationTemplateFilter extends KalturaEventNotificationTemplateBaseFilter +{ + +} + + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaEventNotificationTemplateService extends KalturaServiceBase +{ + function __construct(KalturaClient $client = null) + { + parent::__construct($client); + } + + /** + * Allows you to add a new event notification template object + * + * @param KalturaEventNotificationTemplate $eventNotificationTemplate + * @return KalturaEventNotificationTemplate + */ + function add(KalturaEventNotificationTemplate $eventNotificationTemplate) + { + $kparams = array(); + $this->client->addParam($kparams, "eventNotificationTemplate", $eventNotificationTemplate->toParams()); + $this->client->queueServiceActionCall("eventnotification_eventnotificationtemplate", "add", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaEventNotificationTemplate"); + return $resultObject; + } + + /** + * Allows you to clone exiting event notification template object and create a new one with similar configuration + * + * @param int $id Source template to clone + * @param KalturaEventNotificationTemplate $eventNotificationTemplate Overwrite configuration object + * @return KalturaEventNotificationTemplate + */ + function cloneAction($id, KalturaEventNotificationTemplate $eventNotificationTemplate = null) + { + $kparams = array(); + $this->client->addParam($kparams, "id", $id); + if ($eventNotificationTemplate !== null) + $this->client->addParam($kparams, "eventNotificationTemplate", $eventNotificationTemplate->toParams()); + $this->client->queueServiceActionCall("eventnotification_eventnotificationtemplate", "clone", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaEventNotificationTemplate"); + return $resultObject; + } + + /** + * Retrieve an event notification template object by id + * + * @param int $id + * @return KalturaEventNotificationTemplate + */ + function get($id) + { + $kparams = array(); + $this->client->addParam($kparams, "id", $id); + $this->client->queueServiceActionCall("eventnotification_eventnotificationtemplate", "get", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaEventNotificationTemplate"); + return $resultObject; + } + + /** + * Update an existing event notification template object + * + * @param int $id + * @param KalturaEventNotificationTemplate $eventNotificationTemplate + * @return KalturaEventNotificationTemplate + */ + function update($id, KalturaEventNotificationTemplate $eventNotificationTemplate) + { + $kparams = array(); + $this->client->addParam($kparams, "id", $id); + $this->client->addParam($kparams, "eventNotificationTemplate", $eventNotificationTemplate->toParams()); + $this->client->queueServiceActionCall("eventnotification_eventnotificationtemplate", "update", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaEventNotificationTemplate"); + return $resultObject; + } + + /** + * Update event notification template status by id + * + * @param int $id + * @param int $status + * @return KalturaEventNotificationTemplate + */ + function updateStatus($id, $status) + { + $kparams = array(); + $this->client->addParam($kparams, "id", $id); + $this->client->addParam($kparams, "status", $status); + $this->client->queueServiceActionCall("eventnotification_eventnotificationtemplate", "updateStatus", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaEventNotificationTemplate"); + return $resultObject; + } + + /** + * Delete an event notification template object + * + * @param int $id + * @return + */ + function delete($id) + { + $kparams = array(); + $this->client->addParam($kparams, "id", $id); + $this->client->queueServiceActionCall("eventnotification_eventnotificationtemplate", "delete", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "null"); + return $resultObject; + } + + /** + * List event notification template objects + * + * @param KalturaEventNotificationTemplateFilter $filter + * @param KalturaFilterPager $pager + * @return KalturaEventNotificationTemplateListResponse + */ + function listAction(KalturaEventNotificationTemplateFilter $filter = null, KalturaFilterPager $pager = null) + { + $kparams = array(); + if ($filter !== null) + $this->client->addParam($kparams, "filter", $filter->toParams()); + if ($pager !== null) + $this->client->addParam($kparams, "pager", $pager->toParams()); + $this->client->queueServiceActionCall("eventnotification_eventnotificationtemplate", "list", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaEventNotificationTemplateListResponse"); + return $resultObject; + } + + /** + * + * + * @param KalturaPartnerFilter $filter + * @param KalturaFilterPager $pager + * @return KalturaEventNotificationTemplateListResponse + */ + function listByPartner(KalturaPartnerFilter $filter = null, KalturaFilterPager $pager = null) + { + $kparams = array(); + if ($filter !== null) + $this->client->addParam($kparams, "filter", $filter->toParams()); + if ($pager !== null) + $this->client->addParam($kparams, "pager", $pager->toParams()); + $this->client->queueServiceActionCall("eventnotification_eventnotificationtemplate", "listByPartner", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaEventNotificationTemplateListResponse"); + return $resultObject; + } + + /** + * Dispatch event notification object by id + * + * @param int $id + * @param KalturaEventNotificationDispatchJobData $data + * @return int + */ + function dispatch($id, KalturaEventNotificationDispatchJobData $data) + { + $kparams = array(); + $this->client->addParam($kparams, "id", $id); + $this->client->addParam($kparams, "data", $data->toParams()); + $this->client->queueServiceActionCall("eventnotification_eventnotificationtemplate", "dispatch", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "integer"); + return $resultObject; + } + + /** + * Action lists the template partner event notification templates. + * + * @param KalturaEventNotificationTemplateFilter $filter + * @param KalturaFilterPager $pager + * @return KalturaEventNotificationTemplateListResponse + */ + function listTemplates(KalturaEventNotificationTemplateFilter $filter = null, KalturaFilterPager $pager = null) + { + $kparams = array(); + if ($filter !== null) + $this->client->addParam($kparams, "filter", $filter->toParams()); + if ($pager !== null) + $this->client->addParam($kparams, "pager", $pager->toParams()); + $this->client->queueServiceActionCall("eventnotification_eventnotificationtemplate", "listTemplates", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaEventNotificationTemplateListResponse"); + return $resultObject; + } +} +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaEventNotificationClientPlugin extends KalturaClientPlugin +{ + /** + * @var KalturaEventNotificationTemplateService + */ + public $eventNotificationTemplate = null; + + protected function __construct(KalturaClient $client) + { + parent::__construct($client); + $this->eventNotificationTemplate = new KalturaEventNotificationTemplateService($client); + } + + /** + * @return KalturaEventNotificationClientPlugin + */ + public static function get(KalturaClient $client) + { + return new KalturaEventNotificationClientPlugin($client); + } + + /** + * @return array + */ + public function getServices() + { + $services = array( + 'eventNotificationTemplate' => $this->eventNotificationTemplate, + ); + return $services; + } + + /** + * @return string + */ + public function getName() + { + return 'eventNotification'; + } +} + diff --git a/local/kaltura/API/KalturaPlugins/KalturaExternalMediaClientPlugin.php b/local/kaltura/API/KalturaPlugins/KalturaExternalMediaClientPlugin.php new file mode 100644 index 0000000000000..275d567fe6e93 --- /dev/null +++ b/local/kaltura/API/KalturaPlugins/KalturaExternalMediaClientPlugin.php @@ -0,0 +1,363 @@ +. +// +// @ignore +// =================================================================================================== + +/** + * @package Kaltura + * @subpackage Client + */ +require_once(dirname(__FILE__) . "/../KalturaClientBase.php"); +require_once(dirname(__FILE__) . "/../KalturaEnums.php"); +require_once(dirname(__FILE__) . "/../KalturaTypes.php"); + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaExternalMediaEntryOrderBy +{ + const CREATED_AT_ASC = "+createdAt"; + const DURATION_ASC = "+duration"; + const END_DATE_ASC = "+endDate"; + const LAST_PLAYED_AT_ASC = "+lastPlayedAt"; + const MEDIA_TYPE_ASC = "+mediaType"; + const MODERATION_COUNT_ASC = "+moderationCount"; + const NAME_ASC = "+name"; + const PARTNER_SORT_VALUE_ASC = "+partnerSortValue"; + const PLAYS_ASC = "+plays"; + const RANK_ASC = "+rank"; + const RECENT_ASC = "+recent"; + const START_DATE_ASC = "+startDate"; + const TOTAL_RANK_ASC = "+totalRank"; + const UPDATED_AT_ASC = "+updatedAt"; + const VIEWS_ASC = "+views"; + const WEIGHT_ASC = "+weight"; + const CREATED_AT_DESC = "-createdAt"; + const DURATION_DESC = "-duration"; + const END_DATE_DESC = "-endDate"; + const LAST_PLAYED_AT_DESC = "-lastPlayedAt"; + const MEDIA_TYPE_DESC = "-mediaType"; + const MODERATION_COUNT_DESC = "-moderationCount"; + const NAME_DESC = "-name"; + const PARTNER_SORT_VALUE_DESC = "-partnerSortValue"; + const PLAYS_DESC = "-plays"; + const RANK_DESC = "-rank"; + const RECENT_DESC = "-recent"; + const START_DATE_DESC = "-startDate"; + const TOTAL_RANK_DESC = "-totalRank"; + const UPDATED_AT_DESC = "-updatedAt"; + const VIEWS_DESC = "-views"; + const WEIGHT_DESC = "-weight"; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaExternalMediaSourceType +{ + const INTERCALL = "InterCall"; + const YOUTUBE = "YouTube"; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaExternalMediaEntry extends KalturaMediaEntry +{ + /** + * The source type of the external media + * + * + * @var KalturaExternalMediaSourceType + * @insertonly + */ + public $externalSourceType = null; + + /** + * Comma separated asset params ids that exists for this external media entry + * + * + * @var string + * @readonly + */ + public $assetParamsIds = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaExternalMediaEntryListResponse extends KalturaObjectBase +{ + /** + * + * + * @var array of KalturaExternalMediaEntry + * @readonly + */ + public $objects; + + /** + * + * + * @var int + * @readonly + */ + public $totalCount = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +abstract class KalturaExternalMediaEntryBaseFilter extends KalturaMediaEntryFilter +{ + /** + * + * + * @var KalturaExternalMediaSourceType + */ + public $externalSourceTypeEqual = null; + + /** + * + * + * @var string + */ + public $externalSourceTypeIn = null; + + /** + * + * + * @var string + */ + public $assetParamsIdsMatchOr = null; + + /** + * + * + * @var string + */ + public $assetParamsIdsMatchAnd = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaExternalMediaEntryFilter extends KalturaExternalMediaEntryBaseFilter +{ + +} + + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaExternalMediaService extends KalturaServiceBase +{ + function __construct(KalturaClient $client = null) + { + parent::__construct($client); + } + + /** + * Add external media entry + * + * @param KalturaExternalMediaEntry $entry + * @return KalturaExternalMediaEntry + */ + function add(KalturaExternalMediaEntry $entry) + { + $kparams = array(); + $this->client->addParam($kparams, "entry", $entry->toParams()); + $this->client->queueServiceActionCall("externalmedia_externalmedia", "add", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaExternalMediaEntry"); + return $resultObject; + } + + /** + * Get external media entry by ID. + * + * @param string $id External media entry id + * @return KalturaExternalMediaEntry + */ + function get($id) + { + $kparams = array(); + $this->client->addParam($kparams, "id", $id); + $this->client->queueServiceActionCall("externalmedia_externalmedia", "get", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaExternalMediaEntry"); + return $resultObject; + } + + /** + * Update external media entry. Only the properties that were set will be updated. + * + * @param string $id External media entry id to update + * @param KalturaExternalMediaEntry $entry External media entry object to update + * @return KalturaExternalMediaEntry + */ + function update($id, KalturaExternalMediaEntry $entry) + { + $kparams = array(); + $this->client->addParam($kparams, "id", $id); + $this->client->addParam($kparams, "entry", $entry->toParams()); + $this->client->queueServiceActionCall("externalmedia_externalmedia", "update", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaExternalMediaEntry"); + return $resultObject; + } + + /** + * Delete a external media entry. + * + * @param string $id External media entry id to delete + * @return + */ + function delete($id) + { + $kparams = array(); + $this->client->addParam($kparams, "id", $id); + $this->client->queueServiceActionCall("externalmedia_externalmedia", "delete", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "null"); + return $resultObject; + } + + /** + * List media entries by filter with paging support. + * + * @param KalturaExternalMediaEntryFilter $filter External media entry filter + * @param KalturaFilterPager $pager Pager + * @return KalturaExternalMediaEntryListResponse + */ + function listAction(KalturaExternalMediaEntryFilter $filter = null, KalturaFilterPager $pager = null) + { + $kparams = array(); + if ($filter !== null) + $this->client->addParam($kparams, "filter", $filter->toParams()); + if ($pager !== null) + $this->client->addParam($kparams, "pager", $pager->toParams()); + $this->client->queueServiceActionCall("externalmedia_externalmedia", "list", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaExternalMediaEntryListResponse"); + return $resultObject; + } + + /** + * Count media entries by filter. + * + * @param KalturaExternalMediaEntryFilter $filter External media entry filter + * @return int + */ + function count(KalturaExternalMediaEntryFilter $filter = null) + { + $kparams = array(); + if ($filter !== null) + $this->client->addParam($kparams, "filter", $filter->toParams()); + $this->client->queueServiceActionCall("externalmedia_externalmedia", "count", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "integer"); + return $resultObject; + } +} +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaExternalMediaClientPlugin extends KalturaClientPlugin +{ + /** + * @var KalturaExternalMediaService + */ + public $externalMedia = null; + + protected function __construct(KalturaClient $client) + { + parent::__construct($client); + $this->externalMedia = new KalturaExternalMediaService($client); + } + + /** + * @return KalturaExternalMediaClientPlugin + */ + public static function get(KalturaClient $client) + { + return new KalturaExternalMediaClientPlugin($client); + } + + /** + * @return array + */ + public function getServices() + { + $services = array( + 'externalMedia' => $this->externalMedia, + ); + return $services; + } + + /** + * @return string + */ + public function getName() + { + return 'externalMedia'; + } +} + diff --git a/local/kaltura/API/KalturaPlugins/KalturaFileSyncClientPlugin.php b/local/kaltura/API/KalturaPlugins/KalturaFileSyncClientPlugin.php new file mode 100644 index 0000000000000..17d61c39db871 --- /dev/null +++ b/local/kaltura/API/KalturaPlugins/KalturaFileSyncClientPlugin.php @@ -0,0 +1,338 @@ +. +// +// @ignore +// =================================================================================================== + +/** + * @package Kaltura + * @subpackage Client + */ +require_once(dirname(__FILE__) . "/../KalturaClientBase.php"); +require_once(dirname(__FILE__) . "/../KalturaEnums.php"); +require_once(dirname(__FILE__) . "/../KalturaTypes.php"); + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaFileSyncStatus +{ + const ERROR = -1; + const PENDING = 1; + const READY = 2; + const DELETED = 3; + const PURGED = 4; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaFileSyncType +{ + const FILE = 1; + const LINK = 2; + const URL = 3; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaFileSyncOrderBy +{ + const CREATED_AT_ASC = "+createdAt"; + const FILE_SIZE_ASC = "+fileSize"; + const READY_AT_ASC = "+readyAt"; + const SYNC_TIME_ASC = "+syncTime"; + const UPDATED_AT_ASC = "+updatedAt"; + const CREATED_AT_DESC = "-createdAt"; + const FILE_SIZE_DESC = "-fileSize"; + const READY_AT_DESC = "-readyAt"; + const SYNC_TIME_DESC = "-syncTime"; + const UPDATED_AT_DESC = "-updatedAt"; +} + +/** + * @package Kaltura + * @subpackage Client + */ +abstract class KalturaFileSyncBaseFilter extends KalturaFilter +{ + /** + * + * + * @var int + */ + public $partnerIdEqual = null; + + /** + * + * + * @var KalturaFileSyncObjectType + */ + public $fileObjectTypeEqual = null; + + /** + * + * + * @var string + */ + public $fileObjectTypeIn = null; + + /** + * + * + * @var string + */ + public $objectIdEqual = null; + + /** + * + * + * @var string + */ + public $objectIdIn = null; + + /** + * + * + * @var string + */ + public $versionEqual = null; + + /** + * + * + * @var string + */ + public $versionIn = null; + + /** + * + * + * @var int + */ + public $objectSubTypeEqual = null; + + /** + * + * + * @var string + */ + public $objectSubTypeIn = null; + + /** + * + * + * @var string + */ + public $dcEqual = null; + + /** + * + * + * @var string + */ + public $dcIn = null; + + /** + * + * + * @var int + */ + public $originalEqual = null; + + /** + * + * + * @var int + */ + public $createdAtGreaterThanOrEqual = null; + + /** + * + * + * @var int + */ + public $createdAtLessThanOrEqual = null; + + /** + * + * + * @var int + */ + public $updatedAtGreaterThanOrEqual = null; + + /** + * + * + * @var int + */ + public $updatedAtLessThanOrEqual = null; + + /** + * + * + * @var int + */ + public $readyAtGreaterThanOrEqual = null; + + /** + * + * + * @var int + */ + public $readyAtLessThanOrEqual = null; + + /** + * + * + * @var int + */ + public $syncTimeGreaterThanOrEqual = null; + + /** + * + * + * @var int + */ + public $syncTimeLessThanOrEqual = null; + + /** + * + * + * @var KalturaFileSyncStatus + */ + public $statusEqual = null; + + /** + * + * + * @var string + */ + public $statusIn = null; + + /** + * + * + * @var KalturaFileSyncType + */ + public $fileTypeEqual = null; + + /** + * + * + * @var string + */ + public $fileTypeIn = null; + + /** + * + * + * @var int + */ + public $linkedIdEqual = null; + + /** + * + * + * @var int + */ + public $linkCountGreaterThanOrEqual = null; + + /** + * + * + * @var int + */ + public $linkCountLessThanOrEqual = null; + + /** + * + * + * @var float + */ + public $fileSizeGreaterThanOrEqual = null; + + /** + * + * + * @var float + */ + public $fileSizeLessThanOrEqual = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaFileSyncFilter extends KalturaFileSyncBaseFilter +{ + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaFileSyncClientPlugin extends KalturaClientPlugin +{ + protected function __construct(KalturaClient $client) + { + parent::__construct($client); + } + + /** + * @return KalturaFileSyncClientPlugin + */ + public static function get(KalturaClient $client) + { + return new KalturaFileSyncClientPlugin($client); + } + + /** + * @return array + */ + public function getServices() + { + $services = array( + ); + return $services; + } + + /** + * @return string + */ + public function getName() + { + return 'fileSync'; + } +} + diff --git a/local/kaltura/API/KalturaPlugins/KalturaHttpNotificationClientPlugin.php b/local/kaltura/API/KalturaPlugins/KalturaHttpNotificationClientPlugin.php new file mode 100644 index 0000000000000..5d7bc27ba0efa --- /dev/null +++ b/local/kaltura/API/KalturaPlugins/KalturaHttpNotificationClientPlugin.php @@ -0,0 +1,624 @@ +. +// +// @ignore +// =================================================================================================== + +/** + * @package Kaltura + * @subpackage Client + */ +require_once(dirname(__FILE__) . "/../KalturaClientBase.php"); +require_once(dirname(__FILE__) . "/../KalturaEnums.php"); +require_once(dirname(__FILE__) . "/../KalturaTypes.php"); +require_once(dirname(__FILE__) . "/KalturaEventNotificationClientPlugin.php"); + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaHttpNotificationAuthenticationMethod +{ + const ANYSAFE = -18; + const ANY = -17; + const BASIC = 1; + const DIGEST = 2; + const GSSNEGOTIATE = 4; + const NTLM = 8; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaHttpNotificationMethod +{ + const GET = 1; + const POST = 2; + const PUT = 3; + const DELETE = 4; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaHttpNotificationSslVersion +{ + const V2 = 2; + const V3 = 3; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaHttpNotificationCertificateType +{ + const DER = "DER"; + const ENG = "ENG"; + const PEM = "PEM"; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaHttpNotificationSslKeyType +{ + const DER = "DER"; + const ENG = "ENG"; + const PEM = "PEM"; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaHttpNotificationTemplateOrderBy +{ + const CREATED_AT_ASC = "+createdAt"; + const ID_ASC = "+id"; + const UPDATED_AT_ASC = "+updatedAt"; + const CREATED_AT_DESC = "-createdAt"; + const ID_DESC = "-id"; + const UPDATED_AT_DESC = "-updatedAt"; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaHttpNotification extends KalturaObjectBase +{ + /** + * Object that triggered the notification + * + * + * @var KalturaObjectBase + */ + public $object; + + /** + * Object type that triggered the notification + * + * + * @var KalturaEventNotificationEventObjectType + */ + public $eventObjectType = null; + + /** + * ID of the batch job that execute the notification + * + * + * @var int + */ + public $eventNotificationJobId = null; + + /** + * ID of the template that triggered the notification + * + * + * @var int + */ + public $templateId = null; + + /** + * Name of the template that triggered the notification + * + * + * @var string + */ + public $templateName = null; + + /** + * System name of the template that triggered the notification + * + * + * @var string + */ + public $templateSystemName = null; + + /** + * Ecent type that triggered the notification + * + * + * @var KalturaEventNotificationEventType + */ + public $eventType = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +abstract class KalturaHttpNotificationData extends KalturaObjectBase +{ + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaHttpNotificationDataFields extends KalturaHttpNotificationData +{ + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaHttpNotificationDataText extends KalturaHttpNotificationData +{ + /** + * + * + * @var KalturaStringValue + */ + public $content; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaHttpNotificationObjectData extends KalturaHttpNotificationData +{ + /** + * Kaltura API object type + * + * + * @var string + */ + public $apiObjectType = null; + + /** + * Data format + * + * + * @var KalturaResponseType + */ + public $format = null; + + /** + * Ignore null attributes during serialization + * + * + * @var bool + */ + public $ignoreNull = null; + + /** + * PHP code + * + * + * @var string + */ + public $code = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaHttpNotificationTemplate extends KalturaEventNotificationTemplate +{ + /** + * Remote server URL + * + * + * @var string + */ + public $url = null; + + /** + * Request method. + * + * + * @var KalturaHttpNotificationMethod + */ + public $method = null; + + /** + * Data to send. + * + * + * @var KalturaHttpNotificationData + */ + public $data; + + /** + * The maximum number of seconds to allow cURL functions to execute. + * + * + * @var int + */ + public $timeout = null; + + /** + * The number of seconds to wait while trying to connect. + * Must be larger than zero. + * + * + * @var int + */ + public $connectTimeout = null; + + /** + * A username to use for the connection. + * + * + * @var string + */ + public $username = null; + + /** + * A password to use for the connection. + * + * + * @var string + */ + public $password = null; + + /** + * The HTTP authentication method to use. + * + * + * @var KalturaHttpNotificationAuthenticationMethod + */ + public $authenticationMethod = null; + + /** + * The SSL version (2 or 3) to use. + * By default PHP will try to determine this itself, although in some cases this must be set manually. + * + * + * @var KalturaHttpNotificationSslVersion + */ + public $sslVersion = null; + + /** + * SSL certificate to verify the peer with. + * + * + * @var string + */ + public $sslCertificate = null; + + /** + * The format of the certificate. + * + * + * @var KalturaHttpNotificationCertificateType + */ + public $sslCertificateType = null; + + /** + * The password required to use the certificate. + * + * + * @var string + */ + public $sslCertificatePassword = null; + + /** + * The identifier for the crypto engine of the private SSL key specified in ssl key. + * + * + * @var string + */ + public $sslEngine = null; + + /** + * The identifier for the crypto engine used for asymmetric crypto operations. + * + * + * @var string + */ + public $sslEngineDefault = null; + + /** + * The key type of the private SSL key specified in ssl key - PEM / DER / ENG. + * + * + * @var KalturaHttpNotificationSslKeyType + */ + public $sslKeyType = null; + + /** + * Private SSL key. + * + * + * @var string + */ + public $sslKey = null; + + /** + * The secret password needed to use the private SSL key specified in ssl key. + * + * + * @var string + */ + public $sslKeyPassword = null; + + /** + * Adds a e-mail custom header + * + * + * @var array of KalturaKeyValue + */ + public $customHeaders; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaHttpNotificationDispatchJobData extends KalturaEventNotificationDispatchJobData +{ + /** + * Remote server URL + * + * + * @var string + */ + public $url = null; + + /** + * Request method. + * + * + * @var KalturaHttpNotificationMethod + */ + public $method = null; + + /** + * Data to send. + * + * + * @var string + */ + public $data = null; + + /** + * The maximum number of seconds to allow cURL functions to execute. + * + * + * @var int + */ + public $timeout = null; + + /** + * The number of seconds to wait while trying to connect. + * Must be larger than zero. + * + * + * @var int + */ + public $connectTimeout = null; + + /** + * A username to use for the connection. + * + * + * @var string + */ + public $username = null; + + /** + * A password to use for the connection. + * + * + * @var string + */ + public $password = null; + + /** + * The HTTP authentication method to use. + * + * + * @var KalturaHttpNotificationAuthenticationMethod + */ + public $authenticationMethod = null; + + /** + * The SSL version (2 or 3) to use. + * By default PHP will try to determine this itself, although in some cases this must be set manually. + * + * + * @var KalturaHttpNotificationSslVersion + */ + public $sslVersion = null; + + /** + * SSL certificate to verify the peer with. + * + * + * @var string + */ + public $sslCertificate = null; + + /** + * The format of the certificate. + * + * + * @var KalturaHttpNotificationCertificateType + */ + public $sslCertificateType = null; + + /** + * The password required to use the certificate. + * + * + * @var string + */ + public $sslCertificatePassword = null; + + /** + * The identifier for the crypto engine of the private SSL key specified in ssl key. + * + * + * @var string + */ + public $sslEngine = null; + + /** + * The identifier for the crypto engine used for asymmetric crypto operations. + * + * + * @var string + */ + public $sslEngineDefault = null; + + /** + * The key type of the private SSL key specified in ssl key - PEM / DER / ENG. + * + * + * @var KalturaHttpNotificationSslKeyType + */ + public $sslKeyType = null; + + /** + * Private SSL key. + * + * + * @var string + */ + public $sslKey = null; + + /** + * The secret password needed to use the private SSL key specified in ssl key. + * + * + * @var string + */ + public $sslKeyPassword = null; + + /** + * Adds a e-mail custom header + * + * + * @var array of KalturaKeyValue + */ + public $customHeaders; + + /** + * Define the content dynamic parameters + * + * + * @var array of KalturaKeyValue + */ + public $contentParameters; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +abstract class KalturaHttpNotificationTemplateBaseFilter extends KalturaEventNotificationTemplateFilter +{ + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaHttpNotificationTemplateFilter extends KalturaHttpNotificationTemplateBaseFilter +{ + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaHttpNotificationClientPlugin extends KalturaClientPlugin +{ + protected function __construct(KalturaClient $client) + { + parent::__construct($client); + } + + /** + * @return KalturaHttpNotificationClientPlugin + */ + public static function get(KalturaClient $client) + { + return new KalturaHttpNotificationClientPlugin($client); + } + + /** + * @return array + */ + public function getServices() + { + $services = array( + ); + return $services; + } + + /** + * @return string + */ + public function getName() + { + return 'httpNotification'; + } +} + diff --git a/local/kaltura/API/KalturaPlugins/KalturaKontikiClientPlugin.php b/local/kaltura/API/KalturaPlugins/KalturaKontikiClientPlugin.php new file mode 100644 index 0000000000000..e1120181283c8 --- /dev/null +++ b/local/kaltura/API/KalturaPlugins/KalturaKontikiClientPlugin.php @@ -0,0 +1,177 @@ +. +// +// @ignore +// =================================================================================================== + +/** + * @package Kaltura + * @subpackage Client + */ +require_once(dirname(__FILE__) . "/../KalturaClientBase.php"); +require_once(dirname(__FILE__) . "/../KalturaEnums.php"); +require_once(dirname(__FILE__) . "/../KalturaTypes.php"); + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaKontikiStorageProfileOrderBy +{ + const CREATED_AT_ASC = "+createdAt"; + const UPDATED_AT_ASC = "+updatedAt"; + const CREATED_AT_DESC = "-createdAt"; + const UPDATED_AT_DESC = "-updatedAt"; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaKontikiStorageProfile extends KalturaStorageProfile +{ + /** + * + * + * @var string + */ + public $serviceToken = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaKontikiStorageDeleteJobData extends KalturaStorageDeleteJobData +{ + /** + * Unique Kontiki MOID for the content uploaded to Kontiki + * + * + * @var string + */ + public $contentMoid = null; + + /** + * + * + * @var string + */ + public $serviceToken = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaKontikiStorageExportJobData extends KalturaStorageExportJobData +{ + /** + * Holds the id of the exported asset + * + * + * @var string + */ + public $flavorAssetId = null; + + /** + * Unique Kontiki MOID for the content uploaded to Kontiki + * + * + * @var string + */ + public $contentMoid = null; + + /** + * + * + * @var string + */ + public $serviceToken = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +abstract class KalturaKontikiStorageProfileBaseFilter extends KalturaStorageProfileFilter +{ + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaKontikiStorageProfileFilter extends KalturaKontikiStorageProfileBaseFilter +{ + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaKontikiClientPlugin extends KalturaClientPlugin +{ + protected function __construct(KalturaClient $client) + { + parent::__construct($client); + } + + /** + * @return KalturaKontikiClientPlugin + */ + public static function get(KalturaClient $client) + { + return new KalturaKontikiClientPlugin($client); + } + + /** + * @return array + */ + public function getServices() + { + $services = array( + ); + return $services; + } + + /** + * @return string + */ + public function getName() + { + return 'kontiki'; + } +} + diff --git a/local/kaltura/API/KalturaPlugins/KalturaLikeClientPlugin.php b/local/kaltura/API/KalturaPlugins/KalturaLikeClientPlugin.php new file mode 100644 index 0000000000000..433c28cec56f6 --- /dev/null +++ b/local/kaltura/API/KalturaPlugins/KalturaLikeClientPlugin.php @@ -0,0 +1,153 @@ +. +// +// @ignore +// =================================================================================================== + +/** + * @package Kaltura + * @subpackage Client + */ +require_once(dirname(__FILE__) . "/../KalturaClientBase.php"); +require_once(dirname(__FILE__) . "/../KalturaEnums.php"); +require_once(dirname(__FILE__) . "/../KalturaTypes.php"); + + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaLikeService extends KalturaServiceBase +{ + function __construct(KalturaClient $client = null) + { + parent::__construct($client); + } + + /** + * + * + * @param string $entryId + * @return bool + */ + function like($entryId) + { + $kparams = array(); + $this->client->addParam($kparams, "entryId", $entryId); + $this->client->queueServiceActionCall("like_like", "like", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $resultObject = (bool) $resultObject; + return $resultObject; + } + + /** + * + * + * @param string $entryId + * @return bool + */ + function unlike($entryId) + { + $kparams = array(); + $this->client->addParam($kparams, "entryId", $entryId); + $this->client->queueServiceActionCall("like_like", "unlike", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $resultObject = (bool) $resultObject; + return $resultObject; + } + + /** + * + * + * @param string $entryId + * @param string $userId + * @return bool + */ + function checkLikeExists($entryId, $userId = null) + { + $kparams = array(); + $this->client->addParam($kparams, "entryId", $entryId); + $this->client->addParam($kparams, "userId", $userId); + $this->client->queueServiceActionCall("like_like", "checkLikeExists", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $resultObject = (bool) $resultObject; + return $resultObject; + } +} +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaLikeClientPlugin extends KalturaClientPlugin +{ + /** + * @var KalturaLikeService + */ + public $like = null; + + protected function __construct(KalturaClient $client) + { + parent::__construct($client); + $this->like = new KalturaLikeService($client); + } + + /** + * @return KalturaLikeClientPlugin + */ + public static function get(KalturaClient $client) + { + return new KalturaLikeClientPlugin($client); + } + + /** + * @return array + */ + public function getServices() + { + $services = array( + 'like' => $this->like, + ); + return $services; + } + + /** + * @return string + */ + public function getName() + { + return 'like'; + } +} + diff --git a/local/kaltura/API/KalturaPlugins/KalturaMetadataClientPlugin.php b/local/kaltura/API/KalturaPlugins/KalturaMetadataClientPlugin.php new file mode 100644 index 0000000000000..7919b7fc491b2 --- /dev/null +++ b/local/kaltura/API/KalturaPlugins/KalturaMetadataClientPlugin.php @@ -0,0 +1,1566 @@ +. +// +// @ignore +// =================================================================================================== + +/** + * @package Kaltura + * @subpackage Client + */ +require_once(dirname(__FILE__) . "/../KalturaClientBase.php"); +require_once(dirname(__FILE__) . "/../KalturaEnums.php"); +require_once(dirname(__FILE__) . "/../KalturaTypes.php"); + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaMetadataProfileCreateMode +{ + const API = 1; + const KMC = 2; + const APP = 3; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaMetadataProfileStatus +{ + const ACTIVE = 1; + const DEPRECATED = 2; + const TRANSFORMING = 3; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaMetadataStatus +{ + const VALID = 1; + const INVALID = 2; + const DELETED = 3; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaMetadataObjectType +{ + const AD_CUE_POINT = "adCuePointMetadata.AdCuePoint"; + const ANNOTATION = "annotationMetadata.Annotation"; + const CODE_CUE_POINT = "codeCuePointMetadata.CodeCuePoint"; + const ENTRY = "1"; + const CATEGORY = "2"; + const USER = "3"; + const PARTNER = "4"; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaMetadataOrderBy +{ + const CREATED_AT_ASC = "+createdAt"; + const METADATA_PROFILE_VERSION_ASC = "+metadataProfileVersion"; + const UPDATED_AT_ASC = "+updatedAt"; + const VERSION_ASC = "+version"; + const CREATED_AT_DESC = "-createdAt"; + const METADATA_PROFILE_VERSION_DESC = "-metadataProfileVersion"; + const UPDATED_AT_DESC = "-updatedAt"; + const VERSION_DESC = "-version"; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaMetadataProfileOrderBy +{ + const CREATED_AT_ASC = "+createdAt"; + const UPDATED_AT_ASC = "+updatedAt"; + const CREATED_AT_DESC = "-createdAt"; + const UPDATED_AT_DESC = "-updatedAt"; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaMetadata extends KalturaObjectBase +{ + /** + * + * + * @var int + * @readonly + */ + public $id = null; + + /** + * + * + * @var int + * @readonly + */ + public $partnerId = null; + + /** + * + * + * @var int + * @readonly + */ + public $metadataProfileId = null; + + /** + * + * + * @var int + * @readonly + */ + public $metadataProfileVersion = null; + + /** + * + * + * @var KalturaMetadataObjectType + * @readonly + */ + public $metadataObjectType = null; + + /** + * + * + * @var string + * @readonly + */ + public $objectId = null; + + /** + * + * + * @var int + * @readonly + */ + public $version = null; + + /** + * + * + * @var int + * @readonly + */ + public $createdAt = null; + + /** + * + * + * @var int + * @readonly + */ + public $updatedAt = null; + + /** + * + * + * @var KalturaMetadataStatus + * @readonly + */ + public $status = null; + + /** + * + * + * @var string + * @readonly + */ + public $xml = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaMetadataListResponse extends KalturaObjectBase +{ + /** + * + * + * @var array of KalturaMetadata + * @readonly + */ + public $objects; + + /** + * + * + * @var int + * @readonly + */ + public $totalCount = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaMetadataProfile extends KalturaObjectBase +{ + /** + * + * + * @var int + * @readonly + */ + public $id = null; + + /** + * + * + * @var int + * @readonly + */ + public $partnerId = null; + + /** + * + * + * @var KalturaMetadataObjectType + */ + public $metadataObjectType = null; + + /** + * + * + * @var int + * @readonly + */ + public $version = null; + + /** + * + * + * @var string + */ + public $name = null; + + /** + * + * + * @var string + */ + public $systemName = null; + + /** + * + * + * @var string + */ + public $description = null; + + /** + * + * + * @var int + * @readonly + */ + public $createdAt = null; + + /** + * + * + * @var int + * @readonly + */ + public $updatedAt = null; + + /** + * + * + * @var KalturaMetadataProfileStatus + * @readonly + */ + public $status = null; + + /** + * + * + * @var string + * @readonly + */ + public $xsd = null; + + /** + * + * + * @var string + * @readonly + */ + public $views = null; + + /** + * + * + * @var string + * @readonly + */ + public $xslt = null; + + /** + * + * + * @var KalturaMetadataProfileCreateMode + */ + public $createMode = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaMetadataProfileField extends KalturaObjectBase +{ + /** + * + * + * @var int + * @readonly + */ + public $id = null; + + /** + * + * + * @var string + * @readonly + */ + public $xPath = null; + + /** + * + * + * @var string + * @readonly + */ + public $key = null; + + /** + * + * + * @var string + * @readonly + */ + public $label = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaMetadataProfileFieldListResponse extends KalturaObjectBase +{ + /** + * + * + * @var array of KalturaMetadataProfileField + * @readonly + */ + public $objects; + + /** + * + * + * @var int + * @readonly + */ + public $totalCount = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaMetadataProfileListResponse extends KalturaObjectBase +{ + /** + * + * + * @var array of KalturaMetadataProfile + * @readonly + */ + public $objects; + + /** + * + * + * @var int + * @readonly + */ + public $totalCount = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaImportMetadataJobData extends KalturaJobData +{ + /** + * + * + * @var string + */ + public $srcFileUrl = null; + + /** + * + * + * @var string + */ + public $destFileLocalPath = null; + + /** + * + * + * @var int + */ + public $metadataId = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +abstract class KalturaMetadataBaseFilter extends KalturaFilter +{ + /** + * + * + * @var int + */ + public $partnerIdEqual = null; + + /** + * + * + * @var int + */ + public $metadataProfileIdEqual = null; + + /** + * + * + * @var int + */ + public $metadataProfileVersionEqual = null; + + /** + * + * + * @var int + */ + public $metadataProfileVersionGreaterThanOrEqual = null; + + /** + * + * + * @var int + */ + public $metadataProfileVersionLessThanOrEqual = null; + + /** + * + * + * @var KalturaMetadataObjectType + */ + public $metadataObjectTypeEqual = null; + + /** + * + * + * @var string + */ + public $objectIdEqual = null; + + /** + * + * + * @var string + */ + public $objectIdIn = null; + + /** + * + * + * @var int + */ + public $versionEqual = null; + + /** + * + * + * @var int + */ + public $versionGreaterThanOrEqual = null; + + /** + * + * + * @var int + */ + public $versionLessThanOrEqual = null; + + /** + * + * + * @var int + */ + public $createdAtGreaterThanOrEqual = null; + + /** + * + * + * @var int + */ + public $createdAtLessThanOrEqual = null; + + /** + * + * + * @var int + */ + public $updatedAtGreaterThanOrEqual = null; + + /** + * + * + * @var int + */ + public $updatedAtLessThanOrEqual = null; + + /** + * + * + * @var KalturaMetadataStatus + */ + public $statusEqual = null; + + /** + * + * + * @var string + */ + public $statusIn = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +abstract class KalturaMetadataProfileBaseFilter extends KalturaFilter +{ + /** + * + * + * @var int + */ + public $idEqual = null; + + /** + * + * + * @var int + */ + public $partnerIdEqual = null; + + /** + * + * + * @var KalturaMetadataObjectType + */ + public $metadataObjectTypeEqual = null; + + /** + * + * + * @var string + */ + public $metadataObjectTypeIn = null; + + /** + * + * + * @var int + */ + public $versionEqual = null; + + /** + * + * + * @var string + */ + public $nameEqual = null; + + /** + * + * + * @var string + */ + public $systemNameEqual = null; + + /** + * + * + * @var string + */ + public $systemNameIn = null; + + /** + * + * + * @var int + */ + public $createdAtGreaterThanOrEqual = null; + + /** + * + * + * @var int + */ + public $createdAtLessThanOrEqual = null; + + /** + * + * + * @var int + */ + public $updatedAtGreaterThanOrEqual = null; + + /** + * + * + * @var int + */ + public $updatedAtLessThanOrEqual = null; + + /** + * + * + * @var KalturaMetadataProfileStatus + */ + public $statusEqual = null; + + /** + * + * + * @var string + */ + public $statusIn = null; + + /** + * + * + * @var KalturaMetadataProfileCreateMode + */ + public $createModeEqual = null; + + /** + * + * + * @var KalturaMetadataProfileCreateMode + */ + public $createModeNotEqual = null; + + /** + * + * + * @var string + */ + public $createModeIn = null; + + /** + * + * + * @var string + */ + public $createModeNotIn = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaTransformMetadataJobData extends KalturaJobData +{ + /** + * + * + * @var string + */ + public $srcXslPath = null; + + /** + * + * + * @var int + */ + public $srcVersion = null; + + /** + * + * + * @var int + */ + public $destVersion = null; + + /** + * + * + * @var string + */ + public $destXsdPath = null; + + /** + * + * + * @var int + */ + public $metadataProfileId = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaCompareMetadataCondition extends KalturaCompareCondition +{ + /** + * May contain the full xpath to the field in three formats + * 1. Slashed xPath, e.g. /metadata/myElementName + * 2. Using local-name function, e.g. /[local-name()='metadata']/[local-name()='myElementName'] + * 3. Using only the field name, e.g. myElementName, it will be searched as //myElementName + * + * + * @var string + */ + public $xPath = null; + + /** + * Metadata profile id + * + * + * @var int + */ + public $profileId = null; + + /** + * Metadata profile system name + * + * + * @var string + */ + public $profileSystemName = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaFileAssetFilter extends KalturaFileAssetBaseFilter +{ + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaMatchMetadataCondition extends KalturaMatchCondition +{ + /** + * May contain the full xpath to the field in three formats + * 1. Slashed xPath, e.g. /metadata/myElementName + * 2. Using local-name function, e.g. /[local-name()='metadata']/[local-name()='myElementName'] + * 3. Using only the field name, e.g. myElementName, it will be searched as //myElementName + * + * + * @var string + */ + public $xPath = null; + + /** + * Metadata profile id + * + * + * @var int + */ + public $profileId = null; + + /** + * Metadata profile system name + * + * + * @var string + */ + public $profileSystemName = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaMetadataFieldChangedCondition extends KalturaMatchCondition +{ + /** + * May contain the full xpath to the field in three formats + * 1. Slashed xPath, e.g. /metadata/myElementName + * 2. Using local-name function, e.g. /[local-name()='metadata']/[local-name()='myElementName'] + * 3. Using only the field name, e.g. myElementName, it will be searched as //myElementName + * + * + * @var string + */ + public $xPath = null; + + /** + * Metadata profile id + * + * + * @var int + */ + public $profileId = null; + + /** + * Metadata profile system name + * + * + * @var string + */ + public $profileSystemName = null; + + /** + * + * + * @var string + */ + public $versionA = null; + + /** + * + * + * @var string + */ + public $versionB = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaMetadataFilter extends KalturaMetadataBaseFilter +{ + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaMetadataProfileFilter extends KalturaMetadataProfileBaseFilter +{ + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaMetadataSearchItem extends KalturaSearchOperator +{ + /** + * + * + * @var int + */ + public $metadataProfileId = null; + + /** + * + * + * @var string + */ + public $orderBy = null; + + +} + + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaMetadataService extends KalturaServiceBase +{ + function __construct(KalturaClient $client = null) + { + parent::__construct($client); + } + + /** + * Allows you to add a metadata object and metadata content associated with Kaltura object + * + * @param int $metadataProfileId + * @param string $objectType + * @param string $objectId + * @param string $xmlData XML metadata + * @return KalturaMetadata + */ + function add($metadataProfileId, $objectType, $objectId, $xmlData) + { + $kparams = array(); + $this->client->addParam($kparams, "metadataProfileId", $metadataProfileId); + $this->client->addParam($kparams, "objectType", $objectType); + $this->client->addParam($kparams, "objectId", $objectId); + $this->client->addParam($kparams, "xmlData", $xmlData); + $this->client->queueServiceActionCall("metadata_metadata", "add", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaMetadata"); + return $resultObject; + } + + /** + * Allows you to add a metadata object and metadata file associated with Kaltura object + * + * @param int $metadataProfileId + * @param string $objectType + * @param string $objectId + * @param file $xmlFile XML metadata + * @return KalturaMetadata + */ + function addFromFile($metadataProfileId, $objectType, $objectId, $xmlFile) + { + $kparams = array(); + $this->client->addParam($kparams, "metadataProfileId", $metadataProfileId); + $this->client->addParam($kparams, "objectType", $objectType); + $this->client->addParam($kparams, "objectId", $objectId); + $kfiles = array(); + $this->client->addParam($kfiles, "xmlFile", $xmlFile); + $this->client->queueServiceActionCall("metadata_metadata", "addFromFile", $kparams, $kfiles); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaMetadata"); + return $resultObject; + } + + /** + * Allows you to add a metadata xml data from remote URL + * + * @param int $metadataProfileId + * @param string $objectType + * @param string $objectId + * @param string $url XML metadata remote url + * @return KalturaMetadata + */ + function addFromUrl($metadataProfileId, $objectType, $objectId, $url) + { + $kparams = array(); + $this->client->addParam($kparams, "metadataProfileId", $metadataProfileId); + $this->client->addParam($kparams, "objectType", $objectType); + $this->client->addParam($kparams, "objectId", $objectId); + $this->client->addParam($kparams, "url", $url); + $this->client->queueServiceActionCall("metadata_metadata", "addFromUrl", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaMetadata"); + return $resultObject; + } + + /** + * Allows you to add a metadata xml data from remote URL. + Enables different permissions than addFromUrl action. + * + * @param int $metadataProfileId + * @param string $objectType + * @param string $objectId + * @param string $url XML metadata remote url + * @return KalturaMetadata + */ + function addFromBulk($metadataProfileId, $objectType, $objectId, $url) + { + $kparams = array(); + $this->client->addParam($kparams, "metadataProfileId", $metadataProfileId); + $this->client->addParam($kparams, "objectType", $objectType); + $this->client->addParam($kparams, "objectId", $objectId); + $this->client->addParam($kparams, "url", $url); + $this->client->queueServiceActionCall("metadata_metadata", "addFromBulk", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaMetadata"); + return $resultObject; + } + + /** + * Retrieve a metadata object by id + * + * @param int $id + * @return KalturaMetadata + */ + function get($id) + { + $kparams = array(); + $this->client->addParam($kparams, "id", $id); + $this->client->queueServiceActionCall("metadata_metadata", "get", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaMetadata"); + return $resultObject; + } + + /** + * Update an existing metadata object with new XML content + * + * @param int $id + * @param string $xmlData XML metadata + * @param int $version Enable update only if the metadata object version did not change by other process + * @return KalturaMetadata + */ + function update($id, $xmlData = null, $version = null) + { + $kparams = array(); + $this->client->addParam($kparams, "id", $id); + $this->client->addParam($kparams, "xmlData", $xmlData); + $this->client->addParam($kparams, "version", $version); + $this->client->queueServiceActionCall("metadata_metadata", "update", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaMetadata"); + return $resultObject; + } + + /** + * Update an existing metadata object with new XML file + * + * @param int $id + * @param file $xmlFile XML metadata + * @return KalturaMetadata + */ + function updateFromFile($id, $xmlFile = null) + { + $kparams = array(); + $this->client->addParam($kparams, "id", $id); + $kfiles = array(); + $this->client->addParam($kfiles, "xmlFile", $xmlFile); + $this->client->queueServiceActionCall("metadata_metadata", "updateFromFile", $kparams, $kfiles); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaMetadata"); + return $resultObject; + } + + /** + * List metadata objects by filter and pager + * + * @param KalturaMetadataFilter $filter + * @param KalturaFilterPager $pager + * @return KalturaMetadataListResponse + */ + function listAction(KalturaMetadataFilter $filter = null, KalturaFilterPager $pager = null) + { + $kparams = array(); + if ($filter !== null) + $this->client->addParam($kparams, "filter", $filter->toParams()); + if ($pager !== null) + $this->client->addParam($kparams, "pager", $pager->toParams()); + $this->client->queueServiceActionCall("metadata_metadata", "list", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaMetadataListResponse"); + return $resultObject; + } + + /** + * Delete an existing metadata + * + * @param int $id + * @return + */ + function delete($id) + { + $kparams = array(); + $this->client->addParam($kparams, "id", $id); + $this->client->queueServiceActionCall("metadata_metadata", "delete", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "null"); + return $resultObject; + } + + /** + * Mark existing metadata as invalid + Used by batch metadata transform + * + * @param int $id + * @param int $version Enable update only if the metadata object version did not change by other process + * @return + */ + function invalidate($id, $version = null) + { + $kparams = array(); + $this->client->addParam($kparams, "id", $id); + $this->client->addParam($kparams, "version", $version); + $this->client->queueServiceActionCall("metadata_metadata", "invalidate", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "null"); + return $resultObject; + } + + /** + * Serves metadata XML file + * + * @param int $id + * @return file + */ + function serve($id) + { + $kparams = array(); + $this->client->addParam($kparams, "id", $id); + $this->client->queueServiceActionCall("metadata_metadata", "serve", $kparams); + if(!$this->client->getDestinationPath() && !$this->client->getReturnServedResult()) + return $this->client->getServeUrl(); + return $this->client->doQueue(); + } + + /** + * Action transforms current metadata object XML using a provided XSL. + * + * @param int $id + * @param file $xslFile + * @return KalturaMetadata + */ + function updateFromXSL($id, $xslFile) + { + $kparams = array(); + $this->client->addParam($kparams, "id", $id); + $kfiles = array(); + $this->client->addParam($kfiles, "xslFile", $xslFile); + $this->client->queueServiceActionCall("metadata_metadata", "updateFromXSL", $kparams, $kfiles); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaMetadata"); + return $resultObject; + } +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaMetadataProfileService extends KalturaServiceBase +{ + function __construct(KalturaClient $client = null) + { + parent::__construct($client); + } + + /** + * Allows you to add a metadata profile object and metadata profile content associated with Kaltura object type + * + * @param KalturaMetadataProfile $metadataProfile + * @param string $xsdData XSD metadata definition + * @param string $viewsData UI views definition + * @return KalturaMetadataProfile + */ + function add(KalturaMetadataProfile $metadataProfile, $xsdData, $viewsData = null) + { + $kparams = array(); + $this->client->addParam($kparams, "metadataProfile", $metadataProfile->toParams()); + $this->client->addParam($kparams, "xsdData", $xsdData); + $this->client->addParam($kparams, "viewsData", $viewsData); + $this->client->queueServiceActionCall("metadata_metadataprofile", "add", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaMetadataProfile"); + return $resultObject; + } + + /** + * Allows you to add a metadata profile object and metadata profile file associated with Kaltura object type + * + * @param KalturaMetadataProfile $metadataProfile + * @param file $xsdFile XSD metadata definition + * @param file $viewsFile UI views definition + * @return KalturaMetadataProfile + */ + function addFromFile(KalturaMetadataProfile $metadataProfile, $xsdFile, $viewsFile = null) + { + $kparams = array(); + $this->client->addParam($kparams, "metadataProfile", $metadataProfile->toParams()); + $kfiles = array(); + $this->client->addParam($kfiles, "xsdFile", $xsdFile); + $this->client->addParam($kfiles, "viewsFile", $viewsFile); + $this->client->queueServiceActionCall("metadata_metadataprofile", "addFromFile", $kparams, $kfiles); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaMetadataProfile"); + return $resultObject; + } + + /** + * Retrieve a metadata profile object by id + * + * @param int $id + * @return KalturaMetadataProfile + */ + function get($id) + { + $kparams = array(); + $this->client->addParam($kparams, "id", $id); + $this->client->queueServiceActionCall("metadata_metadataprofile", "get", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaMetadataProfile"); + return $resultObject; + } + + /** + * Update an existing metadata object + * + * @param int $id + * @param KalturaMetadataProfile $metadataProfile + * @param string $xsdData XSD metadata definition + * @param string $viewsData UI views definition + * @return KalturaMetadataProfile + */ + function update($id, KalturaMetadataProfile $metadataProfile, $xsdData = null, $viewsData = null) + { + $kparams = array(); + $this->client->addParam($kparams, "id", $id); + $this->client->addParam($kparams, "metadataProfile", $metadataProfile->toParams()); + $this->client->addParam($kparams, "xsdData", $xsdData); + $this->client->addParam($kparams, "viewsData", $viewsData); + $this->client->queueServiceActionCall("metadata_metadataprofile", "update", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaMetadataProfile"); + return $resultObject; + } + + /** + * List metadata profile objects by filter and pager + * + * @param KalturaMetadataProfileFilter $filter + * @param KalturaFilterPager $pager + * @return KalturaMetadataProfileListResponse + */ + function listAction(KalturaMetadataProfileFilter $filter = null, KalturaFilterPager $pager = null) + { + $kparams = array(); + if ($filter !== null) + $this->client->addParam($kparams, "filter", $filter->toParams()); + if ($pager !== null) + $this->client->addParam($kparams, "pager", $pager->toParams()); + $this->client->queueServiceActionCall("metadata_metadataprofile", "list", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaMetadataProfileListResponse"); + return $resultObject; + } + + /** + * List metadata profile fields by metadata profile id + * + * @param int $metadataProfileId + * @return KalturaMetadataProfileFieldListResponse + */ + function listFields($metadataProfileId) + { + $kparams = array(); + $this->client->addParam($kparams, "metadataProfileId", $metadataProfileId); + $this->client->queueServiceActionCall("metadata_metadataprofile", "listFields", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaMetadataProfileFieldListResponse"); + return $resultObject; + } + + /** + * Delete an existing metadata profile + * + * @param int $id + * @return + */ + function delete($id) + { + $kparams = array(); + $this->client->addParam($kparams, "id", $id); + $this->client->queueServiceActionCall("metadata_metadataprofile", "delete", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "null"); + return $resultObject; + } + + /** + * Update an existing metadata object definition file + * + * @param int $id + * @param int $toVersion + * @return KalturaMetadataProfile + */ + function revert($id, $toVersion) + { + $kparams = array(); + $this->client->addParam($kparams, "id", $id); + $this->client->addParam($kparams, "toVersion", $toVersion); + $this->client->queueServiceActionCall("metadata_metadataprofile", "revert", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaMetadataProfile"); + return $resultObject; + } + + /** + * Update an existing metadata object definition file + * + * @param int $id + * @param file $xsdFile XSD metadata definition + * @return KalturaMetadataProfile + */ + function updateDefinitionFromFile($id, $xsdFile) + { + $kparams = array(); + $this->client->addParam($kparams, "id", $id); + $kfiles = array(); + $this->client->addParam($kfiles, "xsdFile", $xsdFile); + $this->client->queueServiceActionCall("metadata_metadataprofile", "updateDefinitionFromFile", $kparams, $kfiles); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaMetadataProfile"); + return $resultObject; + } + + /** + * Update an existing metadata object views file + * + * @param int $id + * @param file $viewsFile UI views file + * @return KalturaMetadataProfile + */ + function updateViewsFromFile($id, $viewsFile) + { + $kparams = array(); + $this->client->addParam($kparams, "id", $id); + $kfiles = array(); + $this->client->addParam($kfiles, "viewsFile", $viewsFile); + $this->client->queueServiceActionCall("metadata_metadataprofile", "updateViewsFromFile", $kparams, $kfiles); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaMetadataProfile"); + return $resultObject; + } + + /** + * Update an existing metadata object xslt file + * + * @param int $id + * @param file $xsltFile XSLT file, will be executed on every metadata add/update + * @return KalturaMetadataProfile + */ + function updateTransformationFromFile($id, $xsltFile) + { + $kparams = array(); + $this->client->addParam($kparams, "id", $id); + $kfiles = array(); + $this->client->addParam($kfiles, "xsltFile", $xsltFile); + $this->client->queueServiceActionCall("metadata_metadataprofile", "updateTransformationFromFile", $kparams, $kfiles); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaMetadataProfile"); + return $resultObject; + } + + /** + * Serves metadata profile XSD file + * + * @param int $id + * @return file + */ + function serve($id) + { + $kparams = array(); + $this->client->addParam($kparams, "id", $id); + $this->client->queueServiceActionCall("metadata_metadataprofile", "serve", $kparams); + if(!$this->client->getDestinationPath() && !$this->client->getReturnServedResult()) + return $this->client->getServeUrl(); + return $this->client->doQueue(); + } + + /** + * Serves metadata profile view file + * + * @param int $id + * @return file + */ + function serveView($id) + { + $kparams = array(); + $this->client->addParam($kparams, "id", $id); + $this->client->queueServiceActionCall("metadata_metadataprofile", "serveView", $kparams); + if(!$this->client->getDestinationPath() && !$this->client->getReturnServedResult()) + return $this->client->getServeUrl(); + return $this->client->doQueue(); + } +} +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaMetadataClientPlugin extends KalturaClientPlugin +{ + /** + * @var KalturaMetadataService + */ + public $metadata = null; + + /** + * @var KalturaMetadataProfileService + */ + public $metadataProfile = null; + + protected function __construct(KalturaClient $client) + { + parent::__construct($client); + $this->metadata = new KalturaMetadataService($client); + $this->metadataProfile = new KalturaMetadataProfileService($client); + } + + /** + * @return KalturaMetadataClientPlugin + */ + public static function get(KalturaClient $client) + { + return new KalturaMetadataClientPlugin($client); + } + + /** + * @return array + */ + public function getServices() + { + $services = array( + 'metadata' => $this->metadata, + 'metadataProfile' => $this->metadataProfile, + ); + return $services; + } + + /** + * @return string + */ + public function getName() + { + return 'metadata'; + } +} + diff --git a/local/kaltura/API/KalturaPlugins/KalturaMultiCentersClientPlugin.php b/local/kaltura/API/KalturaPlugins/KalturaMultiCentersClientPlugin.php new file mode 100644 index 0000000000000..c3b2aff0a11b4 --- /dev/null +++ b/local/kaltura/API/KalturaPlugins/KalturaMultiCentersClientPlugin.php @@ -0,0 +1,119 @@ +. +// +// @ignore +// =================================================================================================== + +/** + * @package Kaltura + * @subpackage Client + */ +require_once(dirname(__FILE__) . "/../KalturaClientBase.php"); +require_once(dirname(__FILE__) . "/../KalturaEnums.php"); +require_once(dirname(__FILE__) . "/../KalturaTypes.php"); + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaFileSyncImportJobData extends KalturaJobData +{ + /** + * + * + * @var string + */ + public $sourceUrl = null; + + /** + * + * + * @var string + */ + public $filesyncId = null; + + /** + * + * + * @var string + */ + public $tmpFilePath = null; + + /** + * + * + * @var string + */ + public $destFilePath = null; + + /** + * + * + * @var int + */ + public $fileSize = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaMultiCentersClientPlugin extends KalturaClientPlugin +{ + protected function __construct(KalturaClient $client) + { + parent::__construct($client); + } + + /** + * @return KalturaMultiCentersClientPlugin + */ + public static function get(KalturaClient $client) + { + return new KalturaMultiCentersClientPlugin($client); + } + + /** + * @return array + */ + public function getServices() + { + $services = array( + ); + return $services; + } + + /** + * @return string + */ + public function getName() + { + return 'multiCenters'; + } +} + diff --git a/local/kaltura/API/KalturaPlugins/KalturaShortLinkClientPlugin.php b/local/kaltura/API/KalturaPlugins/KalturaShortLinkClientPlugin.php new file mode 100644 index 0000000000000..5da843b5e3be2 --- /dev/null +++ b/local/kaltura/API/KalturaPlugins/KalturaShortLinkClientPlugin.php @@ -0,0 +1,476 @@ +. +// +// @ignore +// =================================================================================================== + +/** + * @package Kaltura + * @subpackage Client + */ +require_once(dirname(__FILE__) . "/../KalturaClientBase.php"); +require_once(dirname(__FILE__) . "/../KalturaEnums.php"); +require_once(dirname(__FILE__) . "/../KalturaTypes.php"); + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaShortLinkStatus +{ + const DISABLED = 1; + const ENABLED = 2; + const DELETED = 3; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaShortLinkOrderBy +{ + const CREATED_AT_ASC = "+createdAt"; + const EXPIRES_AT_ASC = "+expiresAt"; + const UPDATED_AT_ASC = "+updatedAt"; + const CREATED_AT_DESC = "-createdAt"; + const EXPIRES_AT_DESC = "-expiresAt"; + const UPDATED_AT_DESC = "-updatedAt"; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaShortLink extends KalturaObjectBase +{ + /** + * + * + * @var int + * @readonly + */ + public $id = null; + + /** + * + * + * @var int + * @readonly + */ + public $createdAt = null; + + /** + * + * + * @var int + * @readonly + */ + public $updatedAt = null; + + /** + * + * + * @var int + */ + public $expiresAt = null; + + /** + * + * + * @var int + * @readonly + */ + public $partnerId = null; + + /** + * + * + * @var string + */ + public $userId = null; + + /** + * + * + * @var string + */ + public $name = null; + + /** + * + * + * @var string + */ + public $systemName = null; + + /** + * + * + * @var string + */ + public $fullUrl = null; + + /** + * + * + * @var KalturaShortLinkStatus + */ + public $status = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaShortLinkListResponse extends KalturaObjectBase +{ + /** + * + * + * @var array of KalturaShortLink + * @readonly + */ + public $objects; + + /** + * + * + * @var int + * @readonly + */ + public $totalCount = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +abstract class KalturaShortLinkBaseFilter extends KalturaFilter +{ + /** + * + * + * @var int + */ + public $idEqual = null; + + /** + * + * + * @var string + */ + public $idIn = null; + + /** + * + * + * @var int + */ + public $createdAtGreaterThanOrEqual = null; + + /** + * + * + * @var int + */ + public $createdAtLessThanOrEqual = null; + + /** + * + * + * @var int + */ + public $updatedAtGreaterThanOrEqual = null; + + /** + * + * + * @var int + */ + public $updatedAtLessThanOrEqual = null; + + /** + * + * + * @var int + */ + public $expiresAtGreaterThanOrEqual = null; + + /** + * + * + * @var int + */ + public $expiresAtLessThanOrEqual = null; + + /** + * + * + * @var int + */ + public $partnerIdEqual = null; + + /** + * + * + * @var string + */ + public $partnerIdIn = null; + + /** + * + * + * @var string + */ + public $userIdEqual = null; + + /** + * + * + * @var string + */ + public $userIdIn = null; + + /** + * + * + * @var string + */ + public $systemNameEqual = null; + + /** + * + * + * @var string + */ + public $systemNameIn = null; + + /** + * + * + * @var KalturaShortLinkStatus + */ + public $statusEqual = null; + + /** + * + * + * @var string + */ + public $statusIn = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaShortLinkFilter extends KalturaShortLinkBaseFilter +{ + +} + + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaShortLinkService extends KalturaServiceBase +{ + function __construct(KalturaClient $client = null) + { + parent::__construct($client); + } + + /** + * List short link objects by filter and pager + * + * @param KalturaShortLinkFilter $filter + * @param KalturaFilterPager $pager + * @return KalturaShortLinkListResponse + */ + function listAction(KalturaShortLinkFilter $filter = null, KalturaFilterPager $pager = null) + { + $kparams = array(); + if ($filter !== null) + $this->client->addParam($kparams, "filter", $filter->toParams()); + if ($pager !== null) + $this->client->addParam($kparams, "pager", $pager->toParams()); + $this->client->queueServiceActionCall("shortlink_shortlink", "list", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaShortLinkListResponse"); + return $resultObject; + } + + /** + * Allows you to add a short link object + * + * @param KalturaShortLink $shortLink + * @return KalturaShortLink + */ + function add(KalturaShortLink $shortLink) + { + $kparams = array(); + $this->client->addParam($kparams, "shortLink", $shortLink->toParams()); + $this->client->queueServiceActionCall("shortlink_shortlink", "add", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaShortLink"); + return $resultObject; + } + + /** + * Retrieve an short link object by id + * + * @param string $id + * @return KalturaShortLink + */ + function get($id) + { + $kparams = array(); + $this->client->addParam($kparams, "id", $id); + $this->client->queueServiceActionCall("shortlink_shortlink", "get", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaShortLink"); + return $resultObject; + } + + /** + * Update exisitng short link + * + * @param string $id + * @param KalturaShortLink $shortLink + * @return KalturaShortLink + */ + function update($id, KalturaShortLink $shortLink) + { + $kparams = array(); + $this->client->addParam($kparams, "id", $id); + $this->client->addParam($kparams, "shortLink", $shortLink->toParams()); + $this->client->queueServiceActionCall("shortlink_shortlink", "update", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaShortLink"); + return $resultObject; + } + + /** + * Mark the short link as deleted + * + * @param string $id + * @return KalturaShortLink + */ + function delete($id) + { + $kparams = array(); + $this->client->addParam($kparams, "id", $id); + $this->client->queueServiceActionCall("shortlink_shortlink", "delete", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaShortLink"); + return $resultObject; + } + + /** + * Serves short link + * + * @param string $id + * @param bool $proxy Proxy the response instead of redirect + * @return file + */ + function gotoAction($id, $proxy = false) + { + $kparams = array(); + $this->client->addParam($kparams, "id", $id); + $this->client->addParam($kparams, "proxy", $proxy); + $this->client->queueServiceActionCall("shortlink_shortlink", "goto", $kparams); + if(!$this->client->getDestinationPath() && !$this->client->getReturnServedResult()) + return $this->client->getServeUrl(); + return $this->client->doQueue(); + } +} +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaShortLinkClientPlugin extends KalturaClientPlugin +{ + /** + * @var KalturaShortLinkService + */ + public $shortLink = null; + + protected function __construct(KalturaClient $client) + { + parent::__construct($client); + $this->shortLink = new KalturaShortLinkService($client); + } + + /** + * @return KalturaShortLinkClientPlugin + */ + public static function get(KalturaClient $client) + { + return new KalturaShortLinkClientPlugin($client); + } + + /** + * @return array + */ + public function getServices() + { + $services = array( + 'shortLink' => $this->shortLink, + ); + return $services; + } + + /** + * @return string + */ + public function getName() + { + return 'shortLink'; + } +} + diff --git a/local/kaltura/API/KalturaPlugins/KalturaTagSearchClientPlugin.php b/local/kaltura/API/KalturaPlugins/KalturaTagSearchClientPlugin.php new file mode 100644 index 0000000000000..9c3080e1d0b09 --- /dev/null +++ b/local/kaltura/API/KalturaPlugins/KalturaTagSearchClientPlugin.php @@ -0,0 +1,320 @@ +. +// +// @ignore +// =================================================================================================== + +/** + * @package Kaltura + * @subpackage Client + */ +require_once(dirname(__FILE__) . "/../KalturaClientBase.php"); +require_once(dirname(__FILE__) . "/../KalturaEnums.php"); +require_once(dirname(__FILE__) . "/../KalturaTypes.php"); + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaTag extends KalturaObjectBase +{ + /** + * + * + * @var int + * @readonly + */ + public $id = null; + + /** + * + * + * @var string + * @readonly + */ + public $tag = null; + + /** + * + * + * @var KalturaTaggedObjectType + * @readonly + */ + public $taggedObjectType = null; + + /** + * + * + * @var int + * @readonly + */ + public $partnerId = null; + + /** + * + * + * @var int + * @readonly + */ + public $instanceCount = null; + + /** + * + * + * @var int + * @readonly + */ + public $createdAt = null; + + /** + * + * + * @var int + * @readonly + */ + public $updatedAt = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaTagListResponse extends KalturaObjectBase +{ + /** + * + * + * @var array of KalturaTag + * @readonly + */ + public $objects; + + /** + * + * + * @var int + * @readonly + */ + public $totalCount = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaIndexTagsByPrivacyContextJobData extends KalturaJobData +{ + /** + * + * + * @var int + */ + public $changedCategoryId = null; + + /** + * + * + * @var string + */ + public $deletedPrivacyContexts = null; + + /** + * + * + * @var string + */ + public $addedPrivacyContexts = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaTagFilter extends KalturaFilter +{ + /** + * + * + * @var KalturaTaggedObjectType + */ + public $objectTypeEqual = null; + + /** + * + * + * @var string + */ + public $tagEqual = null; + + /** + * + * + * @var string + */ + public $tagStartsWith = null; + + /** + * + * + * @var int + */ + public $instanceCountEqual = null; + + /** + * + * + * @var int + */ + public $instanceCountIn = null; + + +} + + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaTagService extends KalturaServiceBase +{ + function __construct(KalturaClient $client = null) + { + parent::__construct($client); + } + + /** + * + * + * @param KalturaTagFilter $tagFilter + * @param KalturaFilterPager $pager + * @return KalturaTagListResponse + */ + function search(KalturaTagFilter $tagFilter, KalturaFilterPager $pager = null) + { + $kparams = array(); + $this->client->addParam($kparams, "tagFilter", $tagFilter->toParams()); + if ($pager !== null) + $this->client->addParam($kparams, "pager", $pager->toParams()); + $this->client->queueServiceActionCall("tagsearch_tag", "search", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaTagListResponse"); + return $resultObject; + } + + /** + * Action goes over all tags with instanceCount==0 and checks whether they need to be removed from the DB. Returns number of removed tags. + * + * @return int + */ + function deletePending() + { + $kparams = array(); + $this->client->queueServiceActionCall("tagsearch_tag", "deletePending", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "integer"); + return $resultObject; + } + + /** + * + * + * @param int $categoryId + * @param string $pcToDecrement + * @param string $pcToIncrement + * @return + */ + function indexCategoryEntryTags($categoryId, $pcToDecrement, $pcToIncrement) + { + $kparams = array(); + $this->client->addParam($kparams, "categoryId", $categoryId); + $this->client->addParam($kparams, "pcToDecrement", $pcToDecrement); + $this->client->addParam($kparams, "pcToIncrement", $pcToIncrement); + $this->client->queueServiceActionCall("tagsearch_tag", "indexCategoryEntryTags", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "null"); + return $resultObject; + } +} +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaTagSearchClientPlugin extends KalturaClientPlugin +{ + /** + * @var KalturaTagService + */ + public $tag = null; + + protected function __construct(KalturaClient $client) + { + parent::__construct($client); + $this->tag = new KalturaTagService($client); + } + + /** + * @return KalturaTagSearchClientPlugin + */ + public static function get(KalturaClient $client) + { + return new KalturaTagSearchClientPlugin($client); + } + + /** + * @return array + */ + public function getServices() + { + $services = array( + 'tag' => $this->tag, + ); + return $services; + } + + /** + * @return string + */ + public function getName() + { + return 'tagSearch'; + } +} + diff --git a/local/kaltura/API/KalturaPlugins/KalturaVarConsoleClientPlugin.php b/local/kaltura/API/KalturaPlugins/KalturaVarConsoleClientPlugin.php new file mode 100644 index 0000000000000..83e347358b4a7 --- /dev/null +++ b/local/kaltura/API/KalturaPlugins/KalturaVarConsoleClientPlugin.php @@ -0,0 +1,398 @@ +. +// +// @ignore +// =================================================================================================== + +/** + * @package Kaltura + * @subpackage Client + */ +require_once(dirname(__FILE__) . "/../KalturaClientBase.php"); +require_once(dirname(__FILE__) . "/../KalturaEnums.php"); +require_once(dirname(__FILE__) . "/../KalturaTypes.php"); + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaVarPartnerUsageItem extends KalturaObjectBase +{ + /** + * Partner ID + * + * + * @var int + */ + public $partnerId = null; + + /** + * Partner name + * + * + * @var string + */ + public $partnerName = null; + + /** + * Partner status + * + * + * @var KalturaPartnerStatus + */ + public $partnerStatus = null; + + /** + * Partner package + * + * + * @var int + */ + public $partnerPackage = null; + + /** + * Partner creation date (Unix timestamp) + * + * + * @var int + */ + public $partnerCreatedAt = null; + + /** + * Number of player loads in the specific date range + * + * + * @var int + */ + public $views = null; + + /** + * Number of plays in the specific date range + * + * + * @var int + */ + public $plays = null; + + /** + * Number of new entries created during specific date range + * + * + * @var int + */ + public $entriesCount = null; + + /** + * Total number of entries + * + * + * @var int + */ + public $totalEntriesCount = null; + + /** + * Number of new video entries created during specific date range + * + * + * @var int + */ + public $videoEntriesCount = null; + + /** + * Number of new image entries created during specific date range + * + * + * @var int + */ + public $imageEntriesCount = null; + + /** + * Number of new audio entries created during specific date range + * + * + * @var int + */ + public $audioEntriesCount = null; + + /** + * Number of new mix entries created during specific date range + * + * + * @var int + */ + public $mixEntriesCount = null; + + /** + * The total bandwidth usage during the given date range (in MB) + * + * + * @var float + */ + public $bandwidth = null; + + /** + * The total storage consumption (in MB) + * + * + * @var float + */ + public $totalStorage = null; + + /** + * The added storage consumption (new uploads) during the given date range (in MB) + * + * + * @var float + */ + public $storage = null; + + /** + * The deleted storage consumption (new uploads) during the given date range (in MB) + * + * + * @var float + */ + public $deletedStorage = null; + + /** + * The peak amount of storage consumption during the given date range for the specific publisher + * + * + * @var float + */ + public $peakStorage = null; + + /** + * The average amount of storage consumption during the given date range for the specific publisher + * + * + * @var float + */ + public $avgStorage = null; + + /** + * The combined amount of bandwidth and storage consumed during the given date range for the specific publisher + * + * + * @var float + */ + public $combinedStorageBandwidth = null; + + /** + * Amount of transcoding usage in MB + * + * + * @var float + */ + public $transcodingUsage = null; + + /** + * TGhe date at which the report was taken - Unix Timestamp + * + * + * @var string + */ + public $dateId = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaPartnerUsageListResponse extends KalturaObjectBase +{ + /** + * + * + * @var KalturaVarPartnerUsageItem + */ + public $total; + + /** + * + * + * @var array of KalturaVarPartnerUsageItem + */ + public $objects; + + /** + * + * + * @var int + */ + public $totalCount = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaVarPartnerUsageTotalItem extends KalturaVarPartnerUsageItem +{ + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaVarConsolePartnerFilter extends KalturaPartnerFilter +{ + /** + * Eq filter for the partner's group type + * + * + * @var KalturaPartnerGroupType + */ + public $groupTypeEq = null; + + /** + * In filter for the partner's group type + * + * + * @var string + */ + public $groupTypeIn = null; + + /** + * Filter for partner permissions- filter contains comma-separated string of permission names which the returned partners should have. + * + * + * @var string + */ + public $partnerPermissionsExist = null; + + +} + + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaVarConsoleService extends KalturaServiceBase +{ + function __construct(KalturaClient $client = null) + { + parent::__construct($client); + } + + /** + * Function which calulates partner usage of a group of a VAR's sub-publishers + * + * @param KalturaPartnerFilter $partnerFilter + * @param KalturaReportInputFilter $usageFilter + * @param KalturaFilterPager $pager + * @return KalturaPartnerUsageListResponse + */ + function getPartnerUsage(KalturaPartnerFilter $partnerFilter = null, KalturaReportInputFilter $usageFilter = null, KalturaFilterPager $pager = null) + { + $kparams = array(); + if ($partnerFilter !== null) + $this->client->addParam($kparams, "partnerFilter", $partnerFilter->toParams()); + if ($usageFilter !== null) + $this->client->addParam($kparams, "usageFilter", $usageFilter->toParams()); + if ($pager !== null) + $this->client->addParam($kparams, "pager", $pager->toParams()); + $this->client->queueServiceActionCall("varconsole_varconsole", "getPartnerUsage", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaPartnerUsageListResponse"); + return $resultObject; + } + + /** + * Function to change a sub-publisher's status + * + * @param int $id + * @param int $status + * @return + */ + function updateStatus($id, $status) + { + $kparams = array(); + $this->client->addParam($kparams, "id", $id); + $this->client->addParam($kparams, "status", $status); + $this->client->queueServiceActionCall("varconsole_varconsole", "updateStatus", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "null"); + return $resultObject; + } +} +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaVarConsoleClientPlugin extends KalturaClientPlugin +{ + /** + * @var KalturaVarConsoleService + */ + public $varConsole = null; + + protected function __construct(KalturaClient $client) + { + parent::__construct($client); + $this->varConsole = new KalturaVarConsoleService($client); + } + + /** + * @return KalturaVarConsoleClientPlugin + */ + public static function get(KalturaClient $client) + { + return new KalturaVarConsoleClientPlugin($client); + } + + /** + * @return array + */ + public function getServices() + { + $services = array( + 'varConsole' => $this->varConsole, + ); + return $services; + } + + /** + * @return string + */ + public function getName() + { + return 'varConsole'; + } +} + diff --git a/local/kaltura/API/KalturaPlugins/KalturaVelocixClientPlugin.php b/local/kaltura/API/KalturaPlugins/KalturaVelocixClientPlugin.php new file mode 100644 index 0000000000000..5c4ff95bcb4f0 --- /dev/null +++ b/local/kaltura/API/KalturaPlugins/KalturaVelocixClientPlugin.php @@ -0,0 +1,105 @@ +. +// +// @ignore +// =================================================================================================== + +/** + * @package Kaltura + * @subpackage Client + */ +require_once(dirname(__FILE__) . "/../KalturaClientBase.php"); +require_once(dirname(__FILE__) . "/../KalturaEnums.php"); +require_once(dirname(__FILE__) . "/../KalturaTypes.php"); + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaVelocixProvisionJobData extends KalturaProvisionJobData +{ + /** + * + * + * @var array of KalturaKeyValue + */ + public $provisioningParams; + + /** + * + * + * @var string + */ + public $userName = null; + + /** + * + * + * @var string + */ + public $password = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaVelocixClientPlugin extends KalturaClientPlugin +{ + protected function __construct(KalturaClient $client) + { + parent::__construct($client); + } + + /** + * @return KalturaVelocixClientPlugin + */ + public static function get(KalturaClient $client) + { + return new KalturaVelocixClientPlugin($client); + } + + /** + * @return array + */ + public function getServices() + { + $services = array( + ); + return $services; + } + + /** + * @return string + */ + public function getName() + { + return 'velocix'; + } +} + diff --git a/local/kaltura/API/KalturaPlugins/KalturaVirusScanClientPlugin.php b/local/kaltura/API/KalturaPlugins/KalturaVirusScanClientPlugin.php new file mode 100644 index 0000000000000..77aacf1295b49 --- /dev/null +++ b/local/kaltura/API/KalturaPlugins/KalturaVirusScanClientPlugin.php @@ -0,0 +1,545 @@ +. +// +// @ignore +// =================================================================================================== + +/** + * @package Kaltura + * @subpackage Client + */ +require_once(dirname(__FILE__) . "/../KalturaClientBase.php"); +require_once(dirname(__FILE__) . "/../KalturaEnums.php"); +require_once(dirname(__FILE__) . "/../KalturaTypes.php"); + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaVirusFoundAction +{ + const NONE = 0; + const DELETE = 1; + const CLEAN_NONE = 2; + const CLEAN_DELETE = 3; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaVirusScanJobResult +{ + const SCAN_ERROR = 1; + const FILE_IS_CLEAN = 2; + const FILE_WAS_CLEANED = 3; + const FILE_INFECTED = 4; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaVirusScanProfileStatus +{ + const DISABLED = 1; + const ENABLED = 2; + const DELETED = 3; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaVirusScanEngineType +{ + const CLAMAV_SCAN_ENGINE = "clamAVScanEngine.ClamAV"; + const SYMANTEC_SCAN_DIRECT_ENGINE = "symantecScanEngine.SymantecScanDirectEngine"; + const SYMANTEC_SCAN_ENGINE = "symantecScanEngine.SymantecScanEngine"; + const SYMANTEC_SCAN_JAVA_ENGINE = "symantecScanEngine.SymantecScanJavaEngine"; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaVirusScanProfileOrderBy +{ + const CREATED_AT_ASC = "+createdAt"; + const UPDATED_AT_ASC = "+updatedAt"; + const CREATED_AT_DESC = "-createdAt"; + const UPDATED_AT_DESC = "-updatedAt"; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaVirusScanProfile extends KalturaObjectBase +{ + /** + * + * + * @var int + * @readonly + */ + public $id = null; + + /** + * + * + * @var int + * @readonly + */ + public $createdAt = null; + + /** + * + * + * @var int + * @readonly + */ + public $updatedAt = null; + + /** + * + * + * @var int + * @readonly + */ + public $partnerId = null; + + /** + * + * + * @var string + */ + public $name = null; + + /** + * + * + * @var KalturaVirusScanProfileStatus + */ + public $status = null; + + /** + * + * + * @var KalturaVirusScanEngineType + */ + public $engineType = null; + + /** + * + * + * @var KalturaBaseEntryFilter + */ + public $entryFilter; + + /** + * + * + * @var KalturaVirusFoundAction + */ + public $actionIfInfected = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaVirusScanProfileListResponse extends KalturaObjectBase +{ + /** + * + * + * @var array of KalturaVirusScanProfile + * @readonly + */ + public $objects; + + /** + * + * + * @var int + * @readonly + */ + public $totalCount = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaParseCaptionAssetJobData extends KalturaJobData +{ + /** + * + * + * @var string + */ + public $captionAssetId = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaVirusScanJobData extends KalturaJobData +{ + /** + * + * + * @var string + */ + public $srcFilePath = null; + + /** + * + * + * @var string + */ + public $flavorAssetId = null; + + /** + * + * + * @var KalturaVirusScanJobResult + */ + public $scanResult = null; + + /** + * + * + * @var KalturaVirusFoundAction + */ + public $virusFoundAction = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +abstract class KalturaVirusScanProfileBaseFilter extends KalturaFilter +{ + /** + * + * + * @var int + */ + public $idEqual = null; + + /** + * + * + * @var string + */ + public $idIn = null; + + /** + * + * + * @var int + */ + public $createdAtGreaterThanOrEqual = null; + + /** + * + * + * @var int + */ + public $createdAtLessThanOrEqual = null; + + /** + * + * + * @var int + */ + public $updatedAtGreaterThanOrEqual = null; + + /** + * + * + * @var int + */ + public $updatedAtLessThanOrEqual = null; + + /** + * + * + * @var int + */ + public $partnerIdEqual = null; + + /** + * + * + * @var string + */ + public $partnerIdIn = null; + + /** + * + * + * @var string + */ + public $nameEqual = null; + + /** + * + * + * @var string + */ + public $nameLike = null; + + /** + * + * + * @var KalturaVirusScanProfileStatus + */ + public $statusEqual = null; + + /** + * + * + * @var string + */ + public $statusIn = null; + + /** + * + * + * @var KalturaVirusScanEngineType + */ + public $engineTypeEqual = null; + + /** + * + * + * @var string + */ + public $engineTypeIn = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaVirusScanProfileFilter extends KalturaVirusScanProfileBaseFilter +{ + +} + + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaVirusScanProfileService extends KalturaServiceBase +{ + function __construct(KalturaClient $client = null) + { + parent::__construct($client); + } + + /** + * List virus scan profile objects by filter and pager + * + * @param KalturaVirusScanProfileFilter $filter + * @param KalturaFilterPager $pager + * @return KalturaVirusScanProfileListResponse + */ + function listAction(KalturaVirusScanProfileFilter $filter = null, KalturaFilterPager $pager = null) + { + $kparams = array(); + if ($filter !== null) + $this->client->addParam($kparams, "filter", $filter->toParams()); + if ($pager !== null) + $this->client->addParam($kparams, "pager", $pager->toParams()); + $this->client->queueServiceActionCall("virusscan_virusscanprofile", "list", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaVirusScanProfileListResponse"); + return $resultObject; + } + + /** + * Allows you to add an virus scan profile object and virus scan profile content associated with Kaltura object + * + * @param KalturaVirusScanProfile $virusScanProfile + * @return KalturaVirusScanProfile + */ + function add(KalturaVirusScanProfile $virusScanProfile) + { + $kparams = array(); + $this->client->addParam($kparams, "virusScanProfile", $virusScanProfile->toParams()); + $this->client->queueServiceActionCall("virusscan_virusscanprofile", "add", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaVirusScanProfile"); + return $resultObject; + } + + /** + * Retrieve an virus scan profile object by id + * + * @param int $virusScanProfileId + * @return KalturaVirusScanProfile + */ + function get($virusScanProfileId) + { + $kparams = array(); + $this->client->addParam($kparams, "virusScanProfileId", $virusScanProfileId); + $this->client->queueServiceActionCall("virusscan_virusscanprofile", "get", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaVirusScanProfile"); + return $resultObject; + } + + /** + * Update exisitng virus scan profile, it is possible to update the virus scan profile id too + * + * @param int $virusScanProfileId + * @param KalturaVirusScanProfile $virusScanProfile Id + * @return KalturaVirusScanProfile + */ + function update($virusScanProfileId, KalturaVirusScanProfile $virusScanProfile) + { + $kparams = array(); + $this->client->addParam($kparams, "virusScanProfileId", $virusScanProfileId); + $this->client->addParam($kparams, "virusScanProfile", $virusScanProfile->toParams()); + $this->client->queueServiceActionCall("virusscan_virusscanprofile", "update", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaVirusScanProfile"); + return $resultObject; + } + + /** + * Mark the virus scan profile as deleted + * + * @param int $virusScanProfileId + * @return KalturaVirusScanProfile + */ + function delete($virusScanProfileId) + { + $kparams = array(); + $this->client->addParam($kparams, "virusScanProfileId", $virusScanProfileId); + $this->client->queueServiceActionCall("virusscan_virusscanprofile", "delete", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaVirusScanProfile"); + return $resultObject; + } + + /** + * Scan flavor asset according to virus scan profile + * + * @param string $flavorAssetId + * @param int $virusScanProfileId + * @return int + */ + function scan($flavorAssetId, $virusScanProfileId = null) + { + $kparams = array(); + $this->client->addParam($kparams, "flavorAssetId", $flavorAssetId); + $this->client->addParam($kparams, "virusScanProfileId", $virusScanProfileId); + $this->client->queueServiceActionCall("virusscan_virusscanprofile", "scan", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "integer"); + return $resultObject; + } +} +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaVirusScanClientPlugin extends KalturaClientPlugin +{ + /** + * @var KalturaVirusScanProfileService + */ + public $virusScanProfile = null; + + protected function __construct(KalturaClient $client) + { + parent::__construct($client); + $this->virusScanProfile = new KalturaVirusScanProfileService($client); + } + + /** + * @return KalturaVirusScanClientPlugin + */ + public static function get(KalturaClient $client) + { + return new KalturaVirusScanClientPlugin($client); + } + + /** + * @return array + */ + public function getServices() + { + $services = array( + 'virusScanProfile' => $this->virusScanProfile, + ); + return $services; + } + + /** + * @return string + */ + public function getName() + { + return 'virusScan'; + } +} + diff --git a/local/kaltura/API/KalturaPlugins/KalturaWebexDropFolderClientPlugin.php b/local/kaltura/API/KalturaPlugins/KalturaWebexDropFolderClientPlugin.php new file mode 100644 index 0000000000000..b25e7eaec3a03 --- /dev/null +++ b/local/kaltura/API/KalturaPlugins/KalturaWebexDropFolderClientPlugin.php @@ -0,0 +1,292 @@ +. +// +// @ignore +// =================================================================================================== + +/** + * @package Kaltura + * @subpackage Client + */ +require_once(dirname(__FILE__) . "/../KalturaClientBase.php"); +require_once(dirname(__FILE__) . "/../KalturaEnums.php"); +require_once(dirname(__FILE__) . "/../KalturaTypes.php"); +require_once(dirname(__FILE__) . "/KalturaDropFolderClientPlugin.php"); +require_once(dirname(__FILE__) . "/KalturaMetadataClientPlugin.php"); + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaWebexDropFolderFileOrderBy +{ + const CREATED_AT_ASC = "+createdAt"; + const FILE_NAME_ASC = "+fileName"; + const FILE_SIZE_ASC = "+fileSize"; + const FILE_SIZE_LAST_SET_AT_ASC = "+fileSizeLastSetAt"; + const ID_ASC = "+id"; + const PARSED_FLAVOR_ASC = "+parsedFlavor"; + const PARSED_SLUG_ASC = "+parsedSlug"; + const UPDATED_AT_ASC = "+updatedAt"; + const CREATED_AT_DESC = "-createdAt"; + const FILE_NAME_DESC = "-fileName"; + const FILE_SIZE_DESC = "-fileSize"; + const FILE_SIZE_LAST_SET_AT_DESC = "-fileSizeLastSetAt"; + const ID_DESC = "-id"; + const PARSED_FLAVOR_DESC = "-parsedFlavor"; + const PARSED_SLUG_DESC = "-parsedSlug"; + const UPDATED_AT_DESC = "-updatedAt"; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaWebexDropFolderOrderBy +{ + const CREATED_AT_ASC = "+createdAt"; + const ID_ASC = "+id"; + const NAME_ASC = "+name"; + const UPDATED_AT_ASC = "+updatedAt"; + const CREATED_AT_DESC = "-createdAt"; + const ID_DESC = "-id"; + const NAME_DESC = "-name"; + const UPDATED_AT_DESC = "-updatedAt"; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaWebexDropFolder extends KalturaDropFolder +{ + /** + * + * + * @var string + */ + public $webexUserId = null; + + /** + * + * + * @var string + */ + public $webexPassword = null; + + /** + * + * + * @var int + */ + public $webexSiteId = null; + + /** + * + * + * @var string + */ + public $webexPartnerId = null; + + /** + * + * + * @var string + */ + public $webexServiceUrl = null; + + /** + * + * + * @var string + */ + public $webexHostIdMetadataFieldName = null; + + /** + * + * + * @var string + */ + public $categoriesMetadataFieldName = null; + + /** + * + * + * @var bool + */ + public $enforceEntitlement = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaWebexDropFolderFile extends KalturaDropFolderFile +{ + /** + * + * + * @var int + */ + public $recordingId = null; + + /** + * + * + * @var string + */ + public $webexHostId = null; + + /** + * + * + * @var string + */ + public $description = null; + + /** + * + * + * @var string + */ + public $confId = null; + + /** + * + * + * @var string + */ + public $contentUrl = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaWebexDropFolderContentProcessorJobData extends KalturaDropFolderContentProcessorJobData +{ + /** + * + * + * @var string + */ + public $description = null; + + /** + * + * + * @var string + */ + public $webexHostId = null; + + /** + * + * + * @var int + */ + public $dropFolderId = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +abstract class KalturaWebexDropFolderBaseFilter extends KalturaDropFolderFilter +{ + +} + +/** + * @package Kaltura + * @subpackage Client + */ +abstract class KalturaWebexDropFolderFileBaseFilter extends KalturaDropFolderFileFilter +{ + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaWebexDropFolderFileFilter extends KalturaWebexDropFolderFileBaseFilter +{ + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaWebexDropFolderFilter extends KalturaWebexDropFolderBaseFilter +{ + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaWebexDropFolderClientPlugin extends KalturaClientPlugin +{ + protected function __construct(KalturaClient $client) + { + parent::__construct($client); + } + + /** + * @return KalturaWebexDropFolderClientPlugin + */ + public static function get(KalturaClient $client) + { + return new KalturaWebexDropFolderClientPlugin($client); + } + + /** + * @return array + */ + public function getServices() + { + $services = array( + ); + return $services; + } + + /** + * @return string + */ + public function getName() + { + return 'WebexDropFolder'; + } +} + diff --git a/local/kaltura/API/KalturaPlugins/KalturaWidevineClientPlugin.php b/local/kaltura/API/KalturaPlugins/KalturaWidevineClientPlugin.php new file mode 100644 index 0000000000000..c674c6bf508bb --- /dev/null +++ b/local/kaltura/API/KalturaPlugins/KalturaWidevineClientPlugin.php @@ -0,0 +1,396 @@ +. +// +// @ignore +// =================================================================================================== + +/** + * @package Kaltura + * @subpackage Client + */ +require_once(dirname(__FILE__) . "/../KalturaClientBase.php"); +require_once(dirname(__FILE__) . "/../KalturaEnums.php"); +require_once(dirname(__FILE__) . "/../KalturaTypes.php"); +require_once(dirname(__FILE__) . "/KalturaDrmClientPlugin.php"); + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaWidevineRepositorySyncMode +{ + const MODIFY = 0; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaWidevineFlavorAssetOrderBy +{ + const CREATED_AT_ASC = "+createdAt"; + const DELETED_AT_ASC = "+deletedAt"; + const SIZE_ASC = "+size"; + const UPDATED_AT_ASC = "+updatedAt"; + const CREATED_AT_DESC = "-createdAt"; + const DELETED_AT_DESC = "-deletedAt"; + const SIZE_DESC = "-size"; + const UPDATED_AT_DESC = "-updatedAt"; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaWidevineFlavorParamsOrderBy +{ +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaWidevineFlavorParamsOutputOrderBy +{ +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaWidevineProfileOrderBy +{ + const ID_ASC = "+id"; + const NAME_ASC = "+name"; + const ID_DESC = "-id"; + const NAME_DESC = "-name"; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaWidevineProfile extends KalturaDrmProfile +{ + /** + * + * + * @var string + */ + public $key = null; + + /** + * + * + * @var string + */ + public $iv = null; + + /** + * + * + * @var string + */ + public $owner = null; + + /** + * + * + * @var string + */ + public $portal = null; + + /** + * + * + * @var int + */ + public $maxGop = null; + + /** + * + * + * @var string + */ + public $regServerHost = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaWidevineRepositorySyncJobData extends KalturaJobData +{ + /** + * + * + * @var KalturaWidevineRepositorySyncMode + */ + public $syncMode = null; + + /** + * + * + * @var string + */ + public $wvAssetIds = null; + + /** + * + * + * @var string + */ + public $modifiedAttributes = null; + + /** + * + * + * @var int + */ + public $monitorSyncCompletion = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaWidevineFlavorAsset extends KalturaFlavorAsset +{ + /** + * License distribution window start date + * + * + * @var int + */ + public $widevineDistributionStartDate = null; + + /** + * License distribution window end date + * + * + * @var int + */ + public $widevineDistributionEndDate = null; + + /** + * Widevine unique asset id + * + * + * @var int + */ + public $widevineAssetId = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaWidevineFlavorParams extends KalturaFlavorParams +{ + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaWidevineFlavorParamsOutput extends KalturaFlavorParamsOutput +{ + /** + * License distribution window start date + * + * + * @var int + */ + public $widevineDistributionStartDate = null; + + /** + * License distribution window end date + * + * + * @var int + */ + public $widevineDistributionEndDate = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +abstract class KalturaWidevineProfileBaseFilter extends KalturaDrmProfileFilter +{ + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaWidevineProfileFilter extends KalturaWidevineProfileBaseFilter +{ + +} + +/** + * @package Kaltura + * @subpackage Client + */ +abstract class KalturaWidevineFlavorAssetBaseFilter extends KalturaFlavorAssetFilter +{ + +} + +/** + * @package Kaltura + * @subpackage Client + */ +abstract class KalturaWidevineFlavorParamsBaseFilter extends KalturaFlavorParamsFilter +{ + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaWidevineFlavorAssetFilter extends KalturaWidevineFlavorAssetBaseFilter +{ + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaWidevineFlavorParamsFilter extends KalturaWidevineFlavorParamsBaseFilter +{ + +} + +/** + * @package Kaltura + * @subpackage Client + */ +abstract class KalturaWidevineFlavorParamsOutputBaseFilter extends KalturaFlavorParamsOutputFilter +{ + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaWidevineFlavorParamsOutputFilter extends KalturaWidevineFlavorParamsOutputBaseFilter +{ + +} + + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaWidevineDrmService extends KalturaServiceBase +{ + function __construct(KalturaClient $client = null) + { + parent::__construct($client); + } + + /** + * Get license for encrypted content playback + * + * @param string $flavorAssetId + * @param string $referrer 64base encoded + * @return string + */ + function getLicense($flavorAssetId, $referrer = null) + { + $kparams = array(); + $this->client->addParam($kparams, "flavorAssetId", $flavorAssetId); + $this->client->addParam($kparams, "referrer", $referrer); + $this->client->queueServiceActionCall("widevine_widevinedrm", "getLicense", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "string"); + return $resultObject; + } +} +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaWidevineClientPlugin extends KalturaClientPlugin +{ + /** + * @var KalturaWidevineDrmService + */ + public $widevineDrm = null; + + protected function __construct(KalturaClient $client) + { + parent::__construct($client); + $this->widevineDrm = new KalturaWidevineDrmService($client); + } + + /** + * @return KalturaWidevineClientPlugin + */ + public static function get(KalturaClient $client) + { + return new KalturaWidevineClientPlugin($client); + } + + /** + * @return array + */ + public function getServices() + { + $services = array( + 'widevineDrm' => $this->widevineDrm, + ); + return $services; + } + + /** + * @return string + */ + public function getName() + { + return 'widevine'; + } +} + diff --git a/local/kaltura/API/KalturaTypes.php b/local/kaltura/API/KalturaTypes.php new file mode 100644 index 0000000000000..0cde7474bf5f7 --- /dev/null +++ b/local/kaltura/API/KalturaTypes.php @@ -0,0 +1,16367 @@ +. +// +// @ignore +// =================================================================================================== + +/** + * @package Kaltura + * @subpackage Client + */ +require_once(dirname(__FILE__) . "/KalturaClientBase.php"); + +/** + * @package Kaltura + * @subpackage Client + */ +abstract class KalturaBaseRestriction extends KalturaObjectBase +{ + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaAccessControl extends KalturaObjectBase +{ + /** + * The id of the Access Control Profile + * + * + * @var int + * @readonly + */ + public $id = null; + + /** + * + * + * @var int + * @readonly + */ + public $partnerId = null; + + /** + * The name of the Access Control Profile + * + * + * @var string + */ + public $name = null; + + /** + * System name of the Access Control Profile + * + * + * @var string + */ + public $systemName = null; + + /** + * The description of the Access Control Profile + * + * + * @var string + */ + public $description = null; + + /** + * Creation date as Unix timestamp (In seconds) + * + * + * @var int + * @readonly + */ + public $createdAt = null; + + /** + * True if this Conversion Profile is the default + * + * + * @var KalturaNullableBoolean + */ + public $isDefault = null; + + /** + * Array of Access Control Restrictions + * + * + * @var array of KalturaBaseRestriction + */ + public $restrictions; + + /** + * Indicates that the access control profile is new and should be handled using KalturaAccessControlProfile object and accessControlProfile service + * + * + * @var bool + * @readonly + */ + public $containsUnsuportedRestrictions = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaContextTypeHolder extends KalturaObjectBase +{ + /** + * The type of the condition context + * + * + * @var KalturaContextType + */ + public $type = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaAccessControlContextTypeHolder extends KalturaContextTypeHolder +{ + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaAccessControlListResponse extends KalturaObjectBase +{ + /** + * + * + * @var array of KalturaAccessControl + * @readonly + */ + public $objects; + + /** + * + * + * @var int + * @readonly + */ + public $totalCount = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +abstract class KalturaRuleAction extends KalturaObjectBase +{ + /** + * The type of the action + * + * + * @var KalturaRuleActionType + * @readonly + */ + public $type = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +abstract class KalturaCondition extends KalturaObjectBase +{ + /** + * The type of the access control condition + * + * + * @var KalturaConditionType + * @readonly + */ + public $type = null; + + /** + * + * + * @var string + */ + public $description = null; + + /** + * + * + * @var bool + */ + public $not = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaRule extends KalturaObjectBase +{ + /** + * Message to be thrown to the player in case the rule is fulfilled + * + * + * @var string + */ + public $message = null; + + /** + * Actions to be performed by the player in case the rule is fulfilled + * + * + * @var array of KalturaRuleAction + */ + public $actions; + + /** + * Conditions to validate the rule + * + * + * @var array of KalturaCondition + */ + public $conditions; + + /** + * Indicates what contexts should be tested by this rule + * + * + * @var array of KalturaContextTypeHolder + */ + public $contexts; + + /** + * Indicates that this rule is enough and no need to continue checking the rest of the rules + * + * + * @var bool + */ + public $stopProcessing = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaAccessControlProfile extends KalturaObjectBase +{ + /** + * The id of the Access Control Profile + * + * + * @var int + * @readonly + */ + public $id = null; + + /** + * + * + * @var int + * @readonly + */ + public $partnerId = null; + + /** + * The name of the Access Control Profile + * + * + * @var string + */ + public $name = null; + + /** + * System name of the Access Control Profile + * + * + * @var string + */ + public $systemName = null; + + /** + * The description of the Access Control Profile + * + * + * @var string + */ + public $description = null; + + /** + * Creation time as Unix timestamp (In seconds) + * + * + * @var int + * @readonly + */ + public $createdAt = null; + + /** + * Update time as Unix timestamp (In seconds) + * + * + * @var int + * @readonly + */ + public $updatedAt = null; + + /** + * True if this access control profile is the partner default + * + * + * @var KalturaNullableBoolean + */ + public $isDefault = null; + + /** + * Array of access control rules + * + * + * @var array of KalturaRule + */ + public $rules; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaAccessControlProfileListResponse extends KalturaObjectBase +{ + /** + * + * + * @var array of KalturaAccessControlProfile + * @readonly + */ + public $objects; + + /** + * + * + * @var int + * @readonly + */ + public $totalCount = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaKeyValue extends KalturaObjectBase +{ + /** + * + * + * @var string + */ + public $key = null; + + /** + * + * + * @var string + */ + public $value = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaAccessControlScope extends KalturaObjectBase +{ + /** + * URL to be used to test domain conditions. + * + * + * @var string + */ + public $referrer = null; + + /** + * IP to be used to test geographic location conditions. + * + * + * @var string + */ + public $ip = null; + + /** + * Kaltura session to be used to test session and user conditions. + * + * + * @var string + */ + public $ks = null; + + /** + * Browser or client application to be used to test agent conditions. + * + * + * @var string + */ + public $userAgent = null; + + /** + * Unix timestamp (In seconds) to be used to test entry scheduling, keep null to use now. + * + * + * @var int + */ + public $time = null; + + /** + * Indicates what contexts should be tested. No contexts means any context. + * + * + * @var array of KalturaAccessControlContextTypeHolder + */ + public $contexts; + + /** + * Array of hashes to pass to the access control profile scope + * + * + * @var array of KalturaKeyValue + */ + public $hashes; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaAsset extends KalturaObjectBase +{ + /** + * The ID of the Flavor Asset + * + * + * @var string + * @readonly + */ + public $id = null; + + /** + * The entry ID of the Flavor Asset + * + * + * @var string + * @readonly + */ + public $entryId = null; + + /** + * + * + * @var int + * @readonly + */ + public $partnerId = null; + + /** + * The version of the Flavor Asset + * + * + * @var int + * @readonly + */ + public $version = null; + + /** + * The size (in KBytes) of the Flavor Asset + * + * + * @var int + * @readonly + */ + public $size = null; + + /** + * Tags used to identify the Flavor Asset in various scenarios + * + * + * @var string + */ + public $tags = null; + + /** + * The file extension + * + * + * @var string + * @insertonly + */ + public $fileExt = null; + + /** + * + * + * @var int + * @readonly + */ + public $createdAt = null; + + /** + * + * + * @var int + * @readonly + */ + public $updatedAt = null; + + /** + * + * + * @var int + * @readonly + */ + public $deletedAt = null; + + /** + * System description, error message, warnings and failure cause. + * + * + * @var string + * @readonly + */ + public $description = null; + + /** + * Partner private data + * + * + * @var string + */ + public $partnerData = null; + + /** + * Partner friendly description + * + * + * @var string + */ + public $partnerDescription = null; + + /** + * Comma separated list of source flavor params ids + * + * + * @var string + */ + public $actualSourceAssetParamsIds = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaString extends KalturaObjectBase +{ + /** + * + * + * @var string + */ + public $value = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaAssetParams extends KalturaObjectBase +{ + /** + * The id of the Flavor Params + * + * + * @var int + * @readonly + */ + public $id = null; + + /** + * + * + * @var int + * @readonly + */ + public $partnerId = null; + + /** + * The name of the Flavor Params + * + * + * @var string + */ + public $name = null; + + /** + * System name of the Flavor Params + * + * + * @var string + */ + public $systemName = null; + + /** + * The description of the Flavor Params + * + * + * @var string + */ + public $description = null; + + /** + * Creation date as Unix timestamp (In seconds) + * + * + * @var int + * @readonly + */ + public $createdAt = null; + + /** + * True if those Flavor Params are part of system defaults + * + * + * @var KalturaNullableBoolean + * @readonly + */ + public $isSystemDefault = null; + + /** + * The Flavor Params tags are used to identify the flavor for different usage (e.g. web, hd, mobile) + * + * + * @var string + */ + public $tags = null; + + /** + * Array of partner permisison names that required for using this asset params + * + * + * @var array of KalturaString + */ + public $requiredPermissions; + + /** + * Id of remote storage profile that used to get the source, zero indicates Kaltura data center + * + * + * @var int + */ + public $sourceRemoteStorageProfileId = null; + + /** + * Comma seperated ids of remote storage profiles that the flavor distributed to, the distribution done by the conversion engine + * + * + * @var int + */ + public $remoteStorageProfileIds = null; + + /** + * Media parser type to be used for post-conversion validation + * + * + * @var KalturaMediaParserType + */ + public $mediaParserType = null; + + /** + * Comma seperated ids of source flavor params this flavor is created from + * + * + * @var string + */ + public $sourceAssetParamsIds = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +abstract class KalturaResource extends KalturaObjectBase +{ + +} + +/** + * @package Kaltura + * @subpackage Client + */ +abstract class KalturaContentResource extends KalturaResource +{ + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaAssetParamsResourceContainer extends KalturaResource +{ + /** + * The content resource to associate with asset params + * + * + * @var KalturaContentResource + */ + public $resource; + + /** + * The asset params to associate with the reaource + * + * + * @var int + */ + public $assetParamsId = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +abstract class KalturaOperationAttributes extends KalturaObjectBase +{ + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaBaseEntry extends KalturaObjectBase +{ + /** + * Auto generated 10 characters alphanumeric string + * + * + * @var string + * @readonly + */ + public $id = null; + + /** + * Entry name (Min 1 chars) + * + * + * @var string + */ + public $name = null; + + /** + * Entry description + * + * + * @var string + */ + public $description = null; + + /** + * + * + * @var int + * @readonly + */ + public $partnerId = null; + + /** + * The ID of the user who is the owner of this entry + * + * + * @var string + */ + public $userId = null; + + /** + * The ID of the user who created this entry + * + * + * @var string + * @insertonly + */ + public $creatorId = null; + + /** + * Entry tags + * + * + * @var string + */ + public $tags = null; + + /** + * Entry admin tags can be updated only by administrators + * + * + * @var string + */ + public $adminTags = null; + + /** + * Categories with no entitlement that this entry belongs to. + * + * + * @var string + */ + public $categories = null; + + /** + * Categories Ids of categories with no entitlement that this entry belongs to + * + * + * @var string + */ + public $categoriesIds = null; + + /** + * + * + * @var KalturaEntryStatus + * @readonly + */ + public $status = null; + + /** + * Entry moderation status + * + * + * @var KalturaEntryModerationStatus + * @readonly + */ + public $moderationStatus = null; + + /** + * Number of moderation requests waiting for this entry + * + * + * @var int + * @readonly + */ + public $moderationCount = null; + + /** + * The type of the entry, this is auto filled by the derived entry object + * + * + * @var KalturaEntryType + */ + public $type = null; + + /** + * Entry creation date as Unix timestamp (In seconds) + * + * + * @var int + * @readonly + */ + public $createdAt = null; + + /** + * Entry update date as Unix timestamp (In seconds) + * + * + * @var int + * @readonly + */ + public $updatedAt = null; + + /** + * The calculated average rank. rank = totalRank / votes + * + * + * @var float + * @readonly + */ + public $rank = null; + + /** + * The sum of all rank values submitted to the baseEntry.anonymousRank action + * + * + * @var int + * @readonly + */ + public $totalRank = null; + + /** + * A count of all requests made to the baseEntry.anonymousRank action + * + * + * @var int + * @readonly + */ + public $votes = null; + + /** + * + * + * @var int + */ + public $groupId = null; + + /** + * Can be used to store various partner related data as a string + * + * + * @var string + */ + public $partnerData = null; + + /** + * Download URL for the entry + * + * + * @var string + * @readonly + */ + public $downloadUrl = null; + + /** + * Indexed search text for full text search + * + * + * @var string + * @readonly + */ + public $searchText = null; + + /** + * License type used for this entry + * + * + * @var KalturaLicenseType + */ + public $licenseType = null; + + /** + * Version of the entry data + * + * + * @var int + * @readonly + */ + public $version = null; + + /** + * Thumbnail URL + * + * + * @var string + * @insertonly + */ + public $thumbnailUrl = null; + + /** + * The Access Control ID assigned to this entry (null when not set, send -1 to remove) + * + * + * @var int + */ + public $accessControlId = null; + + /** + * Entry scheduling start date (null when not set, send -1 to remove) + * + * + * @var int + */ + public $startDate = null; + + /** + * Entry scheduling end date (null when not set, send -1 to remove) + * + * + * @var int + */ + public $endDate = null; + + /** + * Entry external reference id + * + * + * @var string + */ + public $referenceId = null; + + /** + * ID of temporary entry that will replace this entry when it's approved and ready for replacement + * + * + * @var string + * @readonly + */ + public $replacingEntryId = null; + + /** + * ID of the entry that will be replaced when the replacement approved and this entry is ready + * + * + * @var string + * @readonly + */ + public $replacedEntryId = null; + + /** + * Status of the replacement readiness and approval + * + * + * @var KalturaEntryReplacementStatus + * @readonly + */ + public $replacementStatus = null; + + /** + * Can be used to store various partner related data as a numeric value + * + * + * @var int + */ + public $partnerSortValue = null; + + /** + * Override the default ingestion profile + * + * + * @var int + */ + public $conversionProfileId = null; + + /** + * IF not empty, points to an entry ID the should replace this current entry's id. + * + * + * @var string + */ + public $redirectEntryId = null; + + /** + * ID of source root entry, used for clipped, skipped and cropped entries that created from another entry + * + * + * @var string + * @readonly + */ + public $rootEntryId = null; + + /** + * clipping, skipping and cropping attributes that used to create this entry + * + * + * @var array of KalturaOperationAttributes + */ + public $operationAttributes; + + /** + * list of user ids that are entitled to edit the entry (no server enforcement) The difference between entitledUsersEdit and entitledUsersPublish is applicative only + * + * + * @var string + */ + public $entitledUsersEdit = null; + + /** + * list of user ids that are entitled to publish the entry (no server enforcement) The difference between entitledUsersEdit and entitledUsersPublish is applicative only + * + * + * @var string + */ + public $entitledUsersPublish = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaBaseEntryListResponse extends KalturaObjectBase +{ + /** + * + * + * @var array of KalturaBaseEntry + * @readonly + */ + public $objects; + + /** + * + * + * @var int + * @readonly + */ + public $totalCount = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +abstract class KalturaBaseSyndicationFeed extends KalturaObjectBase +{ + /** + * + * + * @var string + * @readonly + */ + public $id = null; + + /** + * + * + * @var string + * @readonly + */ + public $feedUrl = null; + + /** + * + * + * @var int + * @readonly + */ + public $partnerId = null; + + /** + * link a playlist that will set what content the feed will include + * if empty, all content will be included in feed + * + * + * @var string + */ + public $playlistId = null; + + /** + * feed name + * + * + * @var string + */ + public $name = null; + + /** + * feed status + * + * + * @var KalturaSyndicationFeedStatus + * @readonly + */ + public $status = null; + + /** + * feed type + * + * + * @var KalturaSyndicationFeedType + * @insertonly + */ + public $type = null; + + /** + * Base URL for each video, on the partners site + * This is required by all syndication types. + * + * + * @var string + */ + public $landingPage = null; + + /** + * Creation date as Unix timestamp (In seconds) + * + * + * @var int + * @readonly + */ + public $createdAt = null; + + /** + * allow_embed tells google OR yahoo weather to allow embedding the video on google OR yahoo video results + * or just to provide a link to the landing page. + * it is applied on the video-player_loc property in the XML (google) + * and addes media-player tag (yahoo) + * + * + * @var bool + */ + public $allowEmbed = null; + + /** + * Select a uiconf ID as player skin to include in the kwidget url + * + * + * @var int + */ + public $playerUiconfId = null; + + /** + * + * + * @var int + */ + public $flavorParamId = null; + + /** + * + * + * @var bool + */ + public $transcodeExistingContent = null; + + /** + * + * + * @var bool + */ + public $addToDefaultConversionProfile = null; + + /** + * + * + * @var string + */ + public $categories = null; + + /** + * + * + * @var int + */ + public $storageId = null; + + /** + * + * + * @var KalturaSyndicationFeedEntriesOrderBy + */ + public $entriesOrderBy = null; + + /** + * Should enforce entitlement on feed entries + * + * + * @var bool + */ + public $enforceEntitlement = null; + + /** + * Set privacy context for search entries that assiged to private and public categories within a category privacy context. + * + * + * @var string + */ + public $privacyContext = null; + + /** + * Update date as Unix timestamp (In seconds) + * + * + * @var int + * @readonly + */ + public $updatedAt = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaBaseSyndicationFeedListResponse extends KalturaObjectBase +{ + /** + * + * + * @var array of KalturaBaseSyndicationFeed + * @readonly + */ + public $objects; + + /** + * + * + * @var int + * @readonly + */ + public $totalCount = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaBulkUploadPluginData extends KalturaObjectBase +{ + /** + * + * + * @var string + */ + public $field = null; + + /** + * + * + * @var string + */ + public $value = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaBulkUploadResult extends KalturaObjectBase +{ + /** + * The id of the result + * + * + * @var int + * @readonly + */ + public $id = null; + + /** + * The id of the parent job + * + * + * @var int + */ + public $bulkUploadJobId = null; + + /** + * The index of the line in the CSV + * + * + * @var int + */ + public $lineIndex = null; + + /** + * + * + * @var int + */ + public $partnerId = null; + + /** + * + * + * @var KalturaBulkUploadResultStatus + */ + public $status = null; + + /** + * + * + * @var KalturaBulkUploadAction + */ + public $action = null; + + /** + * + * + * @var string + */ + public $objectId = null; + + /** + * + * + * @var int + */ + public $objectStatus = null; + + /** + * + * + * @var KalturaBulkUploadResultObjectType + */ + public $bulkUploadResultObjectType = null; + + /** + * The data as recieved in the csv + * + * + * @var string + */ + public $rowData = null; + + /** + * + * + * @var string + */ + public $partnerData = null; + + /** + * + * + * @var string + */ + public $objectErrorDescription = null; + + /** + * + * + * @var array of KalturaBulkUploadPluginData + */ + public $pluginsData; + + /** + * + * + * @var string + */ + public $errorDescription = null; + + /** + * + * + * @var string + */ + public $errorCode = null; + + /** + * + * + * @var int + */ + public $errorType = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaBulkUpload extends KalturaObjectBase +{ + /** + * + * + * @var int + */ + public $id = null; + + /** + * + * + * @var string + */ + public $uploadedBy = null; + + /** + * + * + * @var string + */ + public $uploadedByUserId = null; + + /** + * + * + * @var int + */ + public $uploadedOn = null; + + /** + * + * + * @var int + */ + public $numOfEntries = null; + + /** + * + * + * @var KalturaBatchJobStatus + */ + public $status = null; + + /** + * + * + * @var string + */ + public $logFileUrl = null; + + /** + * + * + * @var string + */ + public $csvFileUrl = null; + + /** + * + * + * @var string + */ + public $bulkFileUrl = null; + + /** + * + * + * @var KalturaBulkUploadType + */ + public $bulkUploadType = null; + + /** + * + * + * @var array of KalturaBulkUploadResult + */ + public $results; + + /** + * + * + * @var string + */ + public $error = null; + + /** + * + * + * @var KalturaBatchJobErrorTypes + */ + public $errorType = null; + + /** + * + * + * @var int + */ + public $errorNumber = null; + + /** + * + * + * @var string + */ + public $fileName = null; + + /** + * + * + * @var string + */ + public $description = null; + + /** + * + * + * @var int + */ + public $numOfObjects = null; + + /** + * + * + * @var KalturaBulkUploadObjectType + */ + public $bulkUploadObjectType = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaBulkUploadListResponse extends KalturaObjectBase +{ + /** + * + * + * @var array of KalturaBulkUpload + * @readonly + */ + public $objects; + + /** + * + * + * @var int + * @readonly + */ + public $totalCount = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +abstract class KalturaBulkUploadObjectData extends KalturaObjectBase +{ + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaCEError extends KalturaObjectBase +{ + /** + * + * + * @var string + * @readonly + */ + public $id = null; + + /** + * + * + * @var int + */ + public $partnerId = null; + + /** + * + * + * @var string + */ + public $browser = null; + + /** + * + * + * @var string + */ + public $serverIp = null; + + /** + * + * + * @var string + */ + public $serverOs = null; + + /** + * + * + * @var string + */ + public $phpVersion = null; + + /** + * + * + * @var string + */ + public $ceAdminEmail = null; + + /** + * + * + * @var string + */ + public $type = null; + + /** + * + * + * @var string + */ + public $description = null; + + /** + * + * + * @var string + */ + public $data = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaCategory extends KalturaObjectBase +{ + /** + * The id of the Category + * + * + * @var int + * @readonly + */ + public $id = null; + + /** + * + * + * @var int + */ + public $parentId = null; + + /** + * + * + * @var int + * @readonly + */ + public $depth = null; + + /** + * + * + * @var int + * @readonly + */ + public $partnerId = null; + + /** + * The name of the Category. + * The following characters are not allowed: '<', '>', ',' + * + * + * @var string + */ + public $name = null; + + /** + * The full name of the Category + * + * + * @var string + * @readonly + */ + public $fullName = null; + + /** + * The full ids of the Category + * + * + * @var string + * @readonly + */ + public $fullIds = null; + + /** + * Number of entries in this Category (including child categories) + * + * + * @var int + * @readonly + */ + public $entriesCount = null; + + /** + * Creation date as Unix timestamp (In seconds) + * + * + * @var int + * @readonly + */ + public $createdAt = null; + + /** + * Update date as Unix timestamp (In seconds) + * + * + * @var int + * @readonly + */ + public $updatedAt = null; + + /** + * Category description + * + * + * @var string + */ + public $description = null; + + /** + * Category tags + * + * + * @var string + */ + public $tags = null; + + /** + * If category will be returned for list action. + * + * + * @var KalturaAppearInListType + */ + public $appearInList = null; + + /** + * defines the privacy of the entries that assigned to this category + * + * + * @var KalturaPrivacyType + */ + public $privacy = null; + + /** + * If Category members are inherited from parent category or set manualy. + * + * + * @var KalturaInheritanceType + */ + public $inheritanceType = null; + + /** + * Who can ask to join this category + * + * + * @var KalturaUserJoinPolicyType + * @readonly + */ + public $userJoinPolicy = null; + + /** + * Default permissionLevel for new users + * + * + * @var KalturaCategoryUserPermissionLevel + */ + public $defaultPermissionLevel = null; + + /** + * Category Owner (User id) + * + * + * @var string + */ + public $owner = null; + + /** + * Number of entries that belong to this category directly + * + * + * @var int + * @readonly + */ + public $directEntriesCount = null; + + /** + * Category external id, controlled and managed by the partner. + * + * + * @var string + */ + public $referenceId = null; + + /** + * who can assign entries to this category + * + * + * @var KalturaContributionPolicyType + */ + public $contributionPolicy = null; + + /** + * Number of active members for this category + * + * + * @var int + * @readonly + */ + public $membersCount = null; + + /** + * Number of pending members for this category + * + * + * @var int + * @readonly + */ + public $pendingMembersCount = null; + + /** + * Set privacy context for search entries that assiged to private and public categories. the entries will be private if the search context is set with those categories. + * + * + * @var string + */ + public $privacyContext = null; + + /** + * comma separated parents that defines a privacyContext for search + * + * + * @var string + * @readonly + */ + public $privacyContexts = null; + + /** + * Status + * + * + * @var KalturaCategoryStatus + * @readonly + */ + public $status = null; + + /** + * The category id that this category inherit its members and members permission (for contribution and join) + * + * + * @var int + * @readonly + */ + public $inheritedParentId = null; + + /** + * Can be used to store various partner related data as a numeric value + * + * + * @var int + */ + public $partnerSortValue = null; + + /** + * Can be used to store various partner related data as a string + * + * + * @var string + */ + public $partnerData = null; + + /** + * Enable client side applications to define how to sort the category child categories + * + * + * @var KalturaCategoryOrderBy + */ + public $defaultOrderBy = null; + + /** + * Number of direct children categories + * + * + * @var int + * @readonly + */ + public $directSubCategoriesCount = null; + + /** + * Moderation to add entries to this category by users that are not of permission level Manager or Moderator. + * + * + * @var KalturaNullableBoolean + */ + public $moderation = null; + + /** + * Nunber of pending moderation entries + * + * + * @var int + * @readonly + */ + public $pendingEntriesCount = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaCategoryEntry extends KalturaObjectBase +{ + /** + * + * + * @var int + */ + public $categoryId = null; + + /** + * entry id + * + * + * @var string + */ + public $entryId = null; + + /** + * Creation date as Unix timestamp (In seconds) + * + * + * @var int + * @readonly + */ + public $createdAt = null; + + /** + * The full ids of the Category + * + * + * @var string + * @readonly + */ + public $categoryFullIds = null; + + /** + * CategroyEntry status + * + * + * @var KalturaCategoryEntryStatus + * @readonly + */ + public $status = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaCategoryEntryListResponse extends KalturaObjectBase +{ + /** + * + * + * @var array of KalturaCategoryEntry + * @readonly + */ + public $objects; + + /** + * + * + * @var int + * @readonly + */ + public $totalCount = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaCategoryListResponse extends KalturaObjectBase +{ + /** + * + * + * @var array of KalturaCategory + * @readonly + */ + public $objects; + + /** + * + * + * @var int + * @readonly + */ + public $totalCount = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaCategoryUser extends KalturaObjectBase +{ + /** + * + * + * @var int + * @insertonly + */ + public $categoryId = null; + + /** + * User id + * + * + * @var string + * @insertonly + */ + public $userId = null; + + /** + * Partner id + * + * + * @var int + * @readonly + */ + public $partnerId = null; + + /** + * Permission level + * + * + * @var KalturaCategoryUserPermissionLevel + */ + public $permissionLevel = null; + + /** + * Status + * + * + * @var KalturaCategoryUserStatus + * @readonly + */ + public $status = null; + + /** + * CategoryUser creation date as Unix timestamp (In seconds) + * + * + * @var int + * @readonly + */ + public $createdAt = null; + + /** + * CategoryUser update date as Unix timestamp (In seconds) + * + * + * @var int + * @readonly + */ + public $updatedAt = null; + + /** + * Update method can be either manual or automatic to distinguish between manual operations (for example in KMC) on automatic - using bulk upload + * + * + * @var KalturaUpdateMethodType + */ + public $updateMethod = null; + + /** + * The full ids of the Category + * + * + * @var string + * @readonly + */ + public $categoryFullIds = null; + + /** + * Set of category-related permissions for the current category user. + * + * + * @var string + */ + public $permissionNames = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaCategoryUserListResponse extends KalturaObjectBase +{ + /** + * + * + * @var array of KalturaCategoryUser + * @readonly + */ + public $objects; + + /** + * + * + * @var int + * @readonly + */ + public $totalCount = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaClientNotification extends KalturaObjectBase +{ + /** + * The URL where the notification should be sent to + * + * + * @var string + */ + public $url = null; + + /** + * The serialized notification data to send + * + * + * @var string + */ + public $data = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +abstract class KalturaContext extends KalturaObjectBase +{ + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaContextDataResult extends KalturaObjectBase +{ + /** + * Array of messages as received from the rules that invalidated + * + * + * @var array of KalturaString + */ + public $messages; + + /** + * Array of actions as received from the rules that invalidated + * + * + * @var array of KalturaRuleAction + */ + public $actions; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaConversionAttribute extends KalturaObjectBase +{ + /** + * The id of the flavor params, set to null for source flavor + * + * + * @var int + */ + public $flavorParamsId = null; + + /** + * Attribute name + * + * + * @var string + */ + public $name = null; + + /** + * Attribute value + * + * + * @var string + */ + public $value = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaCropDimensions extends KalturaObjectBase +{ + /** + * Crop left point + * + * + * @var int + */ + public $left = null; + + /** + * Crop top point + * + * + * @var int + */ + public $top = null; + + /** + * Crop width + * + * + * @var int + */ + public $width = null; + + /** + * Crop height + * + * + * @var int + */ + public $height = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaConversionProfile extends KalturaObjectBase +{ + /** + * The id of the Conversion Profile + * + * + * @var int + * @readonly + */ + public $id = null; + + /** + * + * + * @var int + * @readonly + */ + public $partnerId = null; + + /** + * + * + * @var KalturaConversionProfileStatus + */ + public $status = null; + + /** + * + * + * @var KalturaConversionProfileType + * @insertonly + */ + public $type = null; + + /** + * The name of the Conversion Profile + * + * + * @var string + */ + public $name = null; + + /** + * System name of the Conversion Profile + * + * + * @var string + */ + public $systemName = null; + + /** + * Comma separated tags + * + * + * @var string + */ + public $tags = null; + + /** + * The description of the Conversion Profile + * + * + * @var string + */ + public $description = null; + + /** + * ID of the default entry to be used for template data + * + * + * @var string + */ + public $defaultEntryId = null; + + /** + * Creation date as Unix timestamp (In seconds) + * + * + * @var int + * @readonly + */ + public $createdAt = null; + + /** + * List of included flavor ids (comma separated) + * + * + * @var string + */ + public $flavorParamsIds = null; + + /** + * Indicates that this conversion profile is system default + * + * + * @var KalturaNullableBoolean + */ + public $isDefault = null; + + /** + * Indicates that this conversion profile is partner default + * + * + * @var bool + * @readonly + */ + public $isPartnerDefault = null; + + /** + * Cropping dimensions + * + * + * @var KalturaCropDimensions + */ + public $cropDimensions; + + /** + * Clipping start position (in miliseconds) + * + * + * @var int + */ + public $clipStart = null; + + /** + * Clipping duration (in miliseconds) + * + * + * @var int + */ + public $clipDuration = null; + + /** + * XSL to transform ingestion MRSS XML + * + * + * @var string + */ + public $xslTransformation = null; + + /** + * ID of default storage profile to be used for linked net-storage file syncs + * + * + * @var int + */ + public $storageProfileId = null; + + /** + * Media parser type to be used for extract media + * + * + * @var KalturaMediaParserType + */ + public $mediaParserType = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaConversionProfileAssetParams extends KalturaObjectBase +{ + /** + * The id of the conversion profile + * + * + * @var int + * @readonly + */ + public $conversionProfileId = null; + + /** + * The id of the asset params + * + * + * @var int + * @readonly + */ + public $assetParamsId = null; + + /** + * The ingestion origin of the asset params + * + * + * @var KalturaFlavorReadyBehaviorType + */ + public $readyBehavior = null; + + /** + * The ingestion origin of the asset params + * + * + * @var KalturaAssetParamsOrigin + */ + public $origin = null; + + /** + * Asset params system name + * + * + * @var string + */ + public $systemName = null; + + /** + * Starts conversion even if the decision layer reduced the configuration to comply with the source + * + * + * @var KalturaNullableBoolean + */ + public $forceNoneComplied = null; + + /** + * Specifies how to treat the flavor after conversion is finished + * + * + * @var KalturaAssetParamsDeletePolicy + */ + public $deletePolicy = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaConversionProfileAssetParamsListResponse extends KalturaObjectBase +{ + /** + * + * + * @var array of KalturaConversionProfileAssetParams + * @readonly + */ + public $objects; + + /** + * + * + * @var int + * @readonly + */ + public $totalCount = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaConversionProfileListResponse extends KalturaObjectBase +{ + /** + * + * + * @var array of KalturaConversionProfile + * @readonly + */ + public $objects; + + /** + * + * + * @var int + * @readonly + */ + public $totalCount = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaConvertCollectionFlavorData extends KalturaObjectBase +{ + /** + * + * + * @var string + */ + public $flavorAssetId = null; + + /** + * + * + * @var int + */ + public $flavorParamsOutputId = null; + + /** + * + * + * @var int + */ + public $readyBehavior = null; + + /** + * + * + * @var int + */ + public $videoBitrate = null; + + /** + * + * + * @var int + */ + public $audioBitrate = null; + + /** + * + * + * @var string + */ + public $destFileSyncLocalPath = null; + + /** + * + * + * @var string + */ + public $destFileSyncRemoteUrl = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaDataEntry extends KalturaBaseEntry +{ + /** + * The data of the entry + * + * + * @var string + */ + public $dataContent = null; + + /** + * indicator whether to return the object for get action with the dataContent field. + * + * + * @var bool + * @insertonly + */ + public $retrieveDataContentByGet = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaDataListResponse extends KalturaObjectBase +{ + /** + * + * + * @var array of KalturaDataEntry + * @readonly + */ + public $objects; + + /** + * + * + * @var int + * @readonly + */ + public $totalCount = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaEmailIngestionProfile extends KalturaObjectBase +{ + /** + * + * + * @var int + * @readonly + */ + public $id = null; + + /** + * + * + * @var string + */ + public $name = null; + + /** + * + * + * @var string + */ + public $description = null; + + /** + * + * + * @var string + */ + public $emailAddress = null; + + /** + * + * + * @var string + */ + public $mailboxId = null; + + /** + * + * + * @var int + * @readonly + */ + public $partnerId = null; + + /** + * + * + * @var int + */ + public $conversionProfile2Id = null; + + /** + * + * + * @var KalturaEntryModerationStatus + */ + public $moderationStatus = null; + + /** + * + * + * @var KalturaEmailIngestionProfileStatus + * @readonly + */ + public $status = null; + + /** + * + * + * @var string + * @readonly + */ + public $createdAt = null; + + /** + * + * + * @var string + */ + public $defaultCategory = null; + + /** + * + * + * @var string + */ + public $defaultUserId = null; + + /** + * + * + * @var string + */ + public $defaultTags = null; + + /** + * + * + * @var string + */ + public $defaultAdminTags = null; + + /** + * + * + * @var int + */ + public $maxAttachmentSizeKbytes = null; + + /** + * + * + * @var int + */ + public $maxAttachmentsPerMail = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +abstract class KalturaValue extends KalturaObjectBase +{ + /** + * + * + * @var string + */ + public $description = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaStringValue extends KalturaValue +{ + /** + * + * + * @var string + */ + public $value = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +abstract class KalturaObjectIdentifier extends KalturaObjectBase +{ + /** + * Comma separated string of enum values denoting which features of the item need to be included in the MRSS + * + * + * @var string + */ + public $extendedFeatures = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaExtendingItemMrssParameter extends KalturaObjectBase +{ + /** + * XPath for the extending item + * + * + * @var string + */ + public $xpath = null; + + /** + * Object identifier + * + * + * @var KalturaObjectIdentifier + */ + public $identifier; + + /** + * Mode of extension - append to MRSS or replace the xpath content. + * + * + * @var KalturaMrssExtensionMode + */ + public $extensionMode = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaPlayableEntry extends KalturaBaseEntry +{ + /** + * Number of plays + * + * + * @var int + * @readonly + */ + public $plays = null; + + /** + * Number of views + * + * + * @var int + * @readonly + */ + public $views = null; + + /** + * The last time the entry was played + * + * + * @var int + * @readonly + */ + public $lastPlayedAt = null; + + /** + * The width in pixels + * + * + * @var int + * @readonly + */ + public $width = null; + + /** + * The height in pixels + * + * + * @var int + * @readonly + */ + public $height = null; + + /** + * The duration in seconds + * + * + * @var int + * @readonly + */ + public $duration = null; + + /** + * The duration in miliseconds + * + * + * @var int + */ + public $msDuration = null; + + /** + * The duration type (short for 0-4 mins, medium for 4-20 mins, long for 20+ mins) + * + * + * @var KalturaDurationType + * @readonly + */ + public $durationType = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaMediaEntry extends KalturaPlayableEntry +{ + /** + * The media type of the entry + * + * + * @var KalturaMediaType + * @insertonly + */ + public $mediaType = null; + + /** + * Override the default conversion quality + * + * + * @var string + * @insertonly + */ + public $conversionQuality = null; + + /** + * The source type of the entry + * + * + * @var KalturaSourceType + * @insertonly + */ + public $sourceType = null; + + /** + * The search provider type used to import this entry + * + * + * @var KalturaSearchProviderType + * @insertonly + */ + public $searchProviderType = null; + + /** + * The ID of the media in the importing site + * + * + * @var string + * @insertonly + */ + public $searchProviderId = null; + + /** + * The user name used for credits + * + * + * @var string + */ + public $creditUserName = null; + + /** + * The URL for credits + * + * + * @var string + */ + public $creditUrl = null; + + /** + * The media date extracted from EXIF data (For images) as Unix timestamp (In seconds) + * + * + * @var int + * @readonly + */ + public $mediaDate = null; + + /** + * The URL used for playback. This is not the download URL. + * + * + * @var string + * @readonly + */ + public $dataUrl = null; + + /** + * Comma separated flavor params ids that exists for this media entry + * + * + * @var string + * @readonly + */ + public $flavorParamsIds = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaFeatureStatus extends KalturaObjectBase +{ + /** + * + * + * @var KalturaFeatureStatusType + */ + public $type = null; + + /** + * + * + * @var int + */ + public $value = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaFeatureStatusListResponse extends KalturaObjectBase +{ + /** + * + * + * @var array of KalturaFeatureStatus + * @readonly + */ + public $objects; + + /** + * + * + * @var int + * @readonly + */ + public $totalCount = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaFileAsset extends KalturaObjectBase +{ + /** + * + * + * @var int + * @readonly + */ + public $id = null; + + /** + * + * + * @var int + * @readonly + */ + public $partnerId = null; + + /** + * + * + * @var KalturaFileAssetObjectType + * @insertonly + */ + public $fileAssetObjectType = null; + + /** + * + * + * @var string + * @insertonly + */ + public $objectId = null; + + /** + * + * + * @var string + */ + public $name = null; + + /** + * + * + * @var string + */ + public $systemName = null; + + /** + * + * + * @var string + */ + public $fileExt = null; + + /** + * + * + * @var int + * @readonly + */ + public $version = null; + + /** + * + * + * @var int + * @readonly + */ + public $createdAt = null; + + /** + * + * + * @var int + * @readonly + */ + public $updatedAt = null; + + /** + * + * + * @var KalturaFileAssetStatus + * @readonly + */ + public $status = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaFileAssetListResponse extends KalturaObjectBase +{ + /** + * + * + * @var array of KalturaFileAsset + * @readonly + */ + public $objects; + + /** + * + * + * @var int + * @readonly + */ + public $totalCount = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +abstract class KalturaSearchItem extends KalturaObjectBase +{ + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaFilter extends KalturaObjectBase +{ + /** + * + * + * @var string + */ + public $orderBy = null; + + /** + * + * + * @var KalturaSearchItem + */ + public $advancedSearch; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaFilterPager extends KalturaObjectBase +{ + /** + * The number of objects to retrieve. (Default is 30, maximum page size is 500). + * + * + * @var int + */ + public $pageSize = null; + + /** + * The page number for which {pageSize} of objects should be retrieved (Default is 1). + * + * + * @var int + */ + public $pageIndex = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaFlavorAsset extends KalturaAsset +{ + /** + * The Flavor Params used to create this Flavor Asset + * + * + * @var int + * @insertonly + */ + public $flavorParamsId = null; + + /** + * The width of the Flavor Asset + * + * + * @var int + * @readonly + */ + public $width = null; + + /** + * The height of the Flavor Asset + * + * + * @var int + * @readonly + */ + public $height = null; + + /** + * The overall bitrate (in KBits) of the Flavor Asset + * + * + * @var int + * @readonly + */ + public $bitrate = null; + + /** + * The frame rate (in FPS) of the Flavor Asset + * + * + * @var float + * @readonly + */ + public $frameRate = null; + + /** + * True if this Flavor Asset is the original source + * + * + * @var bool + * @readonly + */ + public $isOriginal = null; + + /** + * True if this Flavor Asset is playable in KDP + * + * + * @var bool + * @readonly + */ + public $isWeb = null; + + /** + * The container format + * + * + * @var string + * @readonly + */ + public $containerFormat = null; + + /** + * The video codec + * + * + * @var string + * @readonly + */ + public $videoCodecId = null; + + /** + * The status of the Flavor Asset + * + * + * @var KalturaFlavorAssetStatus + * @readonly + */ + public $status = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaFlavorAssetListResponse extends KalturaObjectBase +{ + /** + * + * + * @var array of KalturaFlavorAsset + * @readonly + */ + public $objects; + + /** + * + * + * @var int + * @readonly + */ + public $totalCount = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaFlavorParams extends KalturaAssetParams +{ + /** + * The video codec of the Flavor Params + * + * + * @var KalturaVideoCodec + */ + public $videoCodec = null; + + /** + * The video bitrate (in KBits) of the Flavor Params + * + * + * @var int + */ + public $videoBitrate = null; + + /** + * The audio codec of the Flavor Params + * + * + * @var KalturaAudioCodec + */ + public $audioCodec = null; + + /** + * The audio bitrate (in KBits) of the Flavor Params + * + * + * @var int + */ + public $audioBitrate = null; + + /** + * The number of audio channels for "downmixing" + * + * + * @var int + */ + public $audioChannels = null; + + /** + * The audio sample rate of the Flavor Params + * + * + * @var int + */ + public $audioSampleRate = null; + + /** + * The desired width of the Flavor Params + * + * + * @var int + */ + public $width = null; + + /** + * The desired height of the Flavor Params + * + * + * @var int + */ + public $height = null; + + /** + * The frame rate of the Flavor Params + * + * + * @var int + */ + public $frameRate = null; + + /** + * The gop size of the Flavor Params + * + * + * @var int + */ + public $gopSize = null; + + /** + * The list of conversion engines (comma separated) + * + * + * @var string + */ + public $conversionEngines = null; + + /** + * The list of conversion engines extra params (separated with "|") + * + * + * @var string + */ + public $conversionEnginesExtraParams = null; + + /** + * + * + * @var bool + */ + public $twoPass = null; + + /** + * + * + * @var int + */ + public $deinterlice = null; + + /** + * + * + * @var int + */ + public $rotate = null; + + /** + * + * + * @var string + */ + public $operators = null; + + /** + * + * + * @var int + */ + public $engineVersion = null; + + /** + * The container format of the Flavor Params + * + * + * @var KalturaContainerFormat + */ + public $format = null; + + /** + * + * + * @var int + */ + public $aspectRatioProcessingMode = null; + + /** + * + * + * @var int + */ + public $forceFrameToMultiplication16 = null; + + /** + * + * + * @var int + */ + public $isGopInSec = null; + + /** + * + * + * @var int + */ + public $isAvoidVideoShrinkFramesizeToSource = null; + + /** + * + * + * @var int + */ + public $isAvoidVideoShrinkBitrateToSource = null; + + /** + * + * + * @var int + */ + public $isVideoFrameRateForLowBrAppleHls = null; + + /** + * + * + * @var float + */ + public $anamorphicPixels = null; + + /** + * + * + * @var int + */ + public $isAvoidForcedKeyFrames = null; + + /** + * + * + * @var int + */ + public $maxFrameRate = null; + + /** + * + * + * @var int + */ + public $videoConstantBitrate = null; + + /** + * + * + * @var int + */ + public $videoBitrateTolerance = null; + + /** + * + * + * @var int + */ + public $clipOffset = null; + + /** + * + * + * @var int + */ + public $clipDuration = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaFlavorAssetWithParams extends KalturaObjectBase +{ + /** + * The Flavor Asset (Can be null when there are params without asset) + * + * + * @var KalturaFlavorAsset + */ + public $flavorAsset; + + /** + * The Flavor Params + * + * + * @var KalturaFlavorParams + */ + public $flavorParams; + + /** + * The entry id + * + * + * @var string + */ + public $entryId = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaFlavorParamsListResponse extends KalturaObjectBase +{ + /** + * + * + * @var array of KalturaFlavorParams + * @readonly + */ + public $objects; + + /** + * + * + * @var int + * @readonly + */ + public $totalCount = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaFlavorParamsOutput extends KalturaFlavorParams +{ + /** + * + * + * @var int + */ + public $flavorParamsId = null; + + /** + * + * + * @var string + */ + public $commandLinesStr = null; + + /** + * + * + * @var string + */ + public $flavorParamsVersion = null; + + /** + * + * + * @var string + */ + public $flavorAssetId = null; + + /** + * + * + * @var string + */ + public $flavorAssetVersion = null; + + /** + * + * + * @var int + */ + public $readyBehavior = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaFlavorParamsOutputListResponse extends KalturaObjectBase +{ + /** + * + * + * @var array of KalturaFlavorParamsOutput + * @readonly + */ + public $objects; + + /** + * + * + * @var int + * @readonly + */ + public $totalCount = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +abstract class KalturaObject extends KalturaObjectBase +{ + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaJobData extends KalturaObjectBase +{ + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaLiveStreamConfiguration extends KalturaObjectBase +{ + /** + * + * + * @var KalturaPlaybackProtocol + */ + public $protocol = null; + + /** + * + * + * @var string + */ + public $url = null; + + /** + * + * + * @var string + */ + public $publishUrl = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +abstract class KalturaLiveEntry extends KalturaMediaEntry +{ + /** + * The message to be presented when the stream is offline + * + * + * @var string + */ + public $offlineMessage = null; + + /** + * Recording Status Enabled/Disabled + * + * + * @var KalturaRecordStatus + * @insertonly + */ + public $recordStatus = null; + + /** + * DVR Status Enabled/Disabled + * + * + * @var KalturaDVRStatus + * @insertonly + */ + public $dvrStatus = null; + + /** + * Window of time which the DVR allows for backwards scrubbing (in minutes) + * + * + * @var int + * @insertonly + */ + public $dvrWindow = null; + + /** + * Array of key value protocol->live stream url objects + * + * + * @var array of KalturaLiveStreamConfiguration + */ + public $liveStreamConfigurations; + + /** + * Recorded entry id + * + * + * @var string + */ + public $recordedEntryId = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaLiveChannel extends KalturaLiveEntry +{ + /** + * Playlist id to be played + * + * + * @var string + */ + public $playlistId = null; + + /** + * Indicates that the segments should be repeated for ever + * + * + * @var KalturaNullableBoolean + */ + public $repeat = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaLiveChannelListResponse extends KalturaObjectBase +{ + /** + * + * + * @var array of KalturaLiveChannel + * @readonly + */ + public $objects; + + /** + * + * + * @var int + * @readonly + */ + public $totalCount = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaLiveChannelSegment extends KalturaObjectBase +{ + /** + * Unique identifier + * + * + * @var string + * @readonly + */ + public $id = null; + + /** + * + * + * @var int + * @readonly + */ + public $partnerId = null; + + /** + * Segment creation date as Unix timestamp (In seconds) + * + * + * @var int + * @readonly + */ + public $createdAt = null; + + /** + * Segment update date as Unix timestamp (In seconds) + * + * + * @var int + * @readonly + */ + public $updatedAt = null; + + /** + * Segment name + * + * + * @var string + */ + public $name = null; + + /** + * Segment description + * + * + * @var string + */ + public $description = null; + + /** + * Segment tags + * + * + * @var string + */ + public $tags = null; + + /** + * Segment could be associated with the main stream, as additional stream or as overlay + * + * + * @var KalturaLiveChannelSegmentType + */ + public $type = null; + + /** + * + * + * @var KalturaLiveChannelSegmentStatus + * @readonly + */ + public $status = null; + + /** + * Live channel id + * + * + * @var string + */ + public $channelId = null; + + /** + * Entry id to be played + * + * + * @var string + */ + public $entryId = null; + + /** + * Segment start time trigger type + * + * + * @var KalturaLiveChannelSegmentTriggerType + */ + public $triggerType = null; + + /** + * Live channel segment that the trigger relates to + * + * + * @var string + */ + public $triggerSegmentId = null; + + /** + * Segment play start time, in mili-seconds, according to trigger type + * + * + * @var float + */ + public $startTime = null; + + /** + * Segment play duration time, in mili-seconds + * + * + * @var float + */ + public $duration = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaLiveChannelSegmentListResponse extends KalturaObjectBase +{ + /** + * + * + * @var array of KalturaLiveChannelSegment + * @readonly + */ + public $objects; + + /** + * + * + * @var int + * @readonly + */ + public $totalCount = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaLiveStreamBitrate extends KalturaObjectBase +{ + /** + * + * + * @var int + */ + public $bitrate = null; + + /** + * + * + * @var int + */ + public $width = null; + + /** + * + * + * @var int + */ + public $height = null; + + /** + * + * + * @var string + */ + public $tags = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaLiveStreamEntry extends KalturaLiveEntry +{ + /** + * The stream id as provided by the provider + * + * + * @var string + * @readonly + */ + public $streamRemoteId = null; + + /** + * The backup stream id as provided by the provider + * + * + * @var string + * @readonly + */ + public $streamRemoteBackupId = null; + + /** + * Array of supported bitrates + * + * + * @var array of KalturaLiveStreamBitrate + */ + public $bitrates; + + /** + * + * + * @var string + */ + public $primaryBroadcastingUrl = null; + + /** + * + * + * @var string + */ + public $secondaryBroadcastingUrl = null; + + /** + * + * + * @var string + */ + public $streamName = null; + + /** + * The stream url + * + * + * @var string + */ + public $streamUrl = null; + + /** + * HLS URL - URL for live stream playback on mobile device + * + * + * @var string + */ + public $hlsStreamUrl = null; + + /** + * URL Manager to handle the live stream URL (for instance, add token) + * + * + * @var string + */ + public $urlManager = null; + + /** + * The broadcast primary ip + * + * + * @var string + */ + public $encodingIP1 = null; + + /** + * The broadcast secondary ip + * + * + * @var string + */ + public $encodingIP2 = null; + + /** + * The broadcast password + * + * + * @var string + */ + public $streamPassword = null; + + /** + * The broadcast username + * + * + * @var string + * @readonly + */ + public $streamUsername = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaLiveStreamListResponse extends KalturaObjectBase +{ + /** + * + * + * @var array of KalturaLiveStreamEntry + * @readonly + */ + public $objects; + + /** + * + * + * @var int + * @readonly + */ + public $totalCount = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +abstract class KalturaBaseEntryBaseFilter extends KalturaFilter +{ + /** + * This filter should be in use for retrieving only a specific entry (identified by its entryId). + * + * + * @var string + */ + public $idEqual = null; + + /** + * This filter should be in use for retrieving few specific entries (string should include comma separated list of entryId strings). + * + * + * @var string + */ + public $idIn = null; + + /** + * + * + * @var string + */ + public $idNotIn = null; + + /** + * This filter should be in use for retrieving specific entries. It should include only one string to search for in entry names (no wildcards, spaces are treated as part of the string). + * + * + * @var string + */ + public $nameLike = null; + + /** + * This filter should be in use for retrieving specific entries. It could include few (comma separated) strings for searching in entry names, while applying an OR logic to retrieve entries that contain at least one input string (no wildcards, spaces are treated as part of the string). + * + * + * @var string + */ + public $nameMultiLikeOr = null; + + /** + * This filter should be in use for retrieving specific entries. It could include few (comma separated) strings for searching in entry names, while applying an AND logic to retrieve entries that contain all input strings (no wildcards, spaces are treated as part of the string). + * + * + * @var string + */ + public $nameMultiLikeAnd = null; + + /** + * This filter should be in use for retrieving entries with a specific name. + * + * + * @var string + */ + public $nameEqual = null; + + /** + * This filter should be in use for retrieving only entries which were uploaded by/assigned to users of a specific Kaltura Partner (identified by Partner ID). + * + * + * @var int + */ + public $partnerIdEqual = null; + + /** + * This filter should be in use for retrieving only entries within Kaltura network which were uploaded by/assigned to users of few Kaltura Partners (string should include comma separated list of PartnerIDs) + * + * + * @var string + */ + public $partnerIdIn = null; + + /** + * This filter parameter should be in use for retrieving only entries, uploaded by/assigned to a specific user (identified by user Id). + * + * + * @var string + */ + public $userIdEqual = null; + + /** + * + * + * @var string + */ + public $creatorIdEqual = null; + + /** + * This filter should be in use for retrieving specific entries. It should include only one string to search for in entry tags (no wildcards, spaces are treated as part of the string). + * + * + * @var string + */ + public $tagsLike = null; + + /** + * This filter should be in use for retrieving specific entries. It could include few (comma separated) strings for searching in entry tags, while applying an OR logic to retrieve entries that contain at least one input string (no wildcards, spaces are treated as part of the string). + * + * + * @var string + */ + public $tagsMultiLikeOr = null; + + /** + * This filter should be in use for retrieving specific entries. It could include few (comma separated) strings for searching in entry tags, while applying an AND logic to retrieve entries that contain all input strings (no wildcards, spaces are treated as part of the string). + * + * + * @var string + */ + public $tagsMultiLikeAnd = null; + + /** + * This filter should be in use for retrieving specific entries. It should include only one string to search for in entry tags set by an ADMIN user (no wildcards, spaces are treated as part of the string). + * + * + * @var string + */ + public $adminTagsLike = null; + + /** + * This filter should be in use for retrieving specific entries. It could include few (comma separated) strings for searching in entry tags, set by an ADMIN user, while applying an OR logic to retrieve entries that contain at least one input string (no wildcards, spaces are treated as part of the string). + * + * + * @var string + */ + public $adminTagsMultiLikeOr = null; + + /** + * This filter should be in use for retrieving specific entries. It could include few (comma separated) strings for searching in entry tags, set by an ADMIN user, while applying an AND logic to retrieve entries that contain all input strings (no wildcards, spaces are treated as part of the string). + * + * + * @var string + */ + public $adminTagsMultiLikeAnd = null; + + /** + * + * + * @var string + */ + public $categoriesMatchAnd = null; + + /** + * All entries within these categories or their child categories. + * + * + * @var string + */ + public $categoriesMatchOr = null; + + /** + * + * + * @var string + */ + public $categoriesNotContains = null; + + /** + * + * + * @var string + */ + public $categoriesIdsMatchAnd = null; + + /** + * All entries of the categories, excluding their child categories. + * To include entries of the child categories, use categoryAncestorIdIn, or categoriesMatchOr. + * + * + * @var string + */ + public $categoriesIdsMatchOr = null; + + /** + * + * + * @var string + */ + public $categoriesIdsNotContains = null; + + /** + * + * + * @var KalturaNullableBoolean + */ + public $categoriesIdsEmpty = null; + + /** + * This filter should be in use for retrieving only entries, at a specific { + * + * @var KalturaEntryStatus + */ + public $statusEqual = null; + + /** + * This filter should be in use for retrieving only entries, not at a specific { + * + * @var KalturaEntryStatus + */ + public $statusNotEqual = null; + + /** + * This filter should be in use for retrieving only entries, at few specific { + * + * @var string + */ + public $statusIn = null; + + /** + * This filter should be in use for retrieving only entries, not at few specific { + * + * @var string + */ + public $statusNotIn = null; + + /** + * + * + * @var KalturaEntryModerationStatus + */ + public $moderationStatusEqual = null; + + /** + * + * + * @var KalturaEntryModerationStatus + */ + public $moderationStatusNotEqual = null; + + /** + * + * + * @var string + */ + public $moderationStatusIn = null; + + /** + * + * + * @var string + */ + public $moderationStatusNotIn = null; + + /** + * + * + * @var KalturaEntryType + */ + public $typeEqual = null; + + /** + * This filter should be in use for retrieving entries of few { + * + * @var string + */ + public $typeIn = null; + + /** + * This filter parameter should be in use for retrieving only entries which were created at Kaltura system after a specific time/date (standard timestamp format). + * + * + * @var int + */ + public $createdAtGreaterThanOrEqual = null; + + /** + * This filter parameter should be in use for retrieving only entries which were created at Kaltura system before a specific time/date (standard timestamp format). + * + * + * @var int + */ + public $createdAtLessThanOrEqual = null; + + /** + * + * + * @var int + */ + public $updatedAtGreaterThanOrEqual = null; + + /** + * + * + * @var int + */ + public $updatedAtLessThanOrEqual = null; + + /** + * + * + * @var int + */ + public $totalRankLessThanOrEqual = null; + + /** + * + * + * @var int + */ + public $totalRankGreaterThanOrEqual = null; + + /** + * + * + * @var int + */ + public $groupIdEqual = null; + + /** + * This filter should be in use for retrieving specific entries while search match the input string within all of the following metadata attributes: name, description, tags, adminTags. + * + * + * @var string + */ + public $searchTextMatchAnd = null; + + /** + * This filter should be in use for retrieving specific entries while search match the input string within at least one of the following metadata attributes: name, description, tags, adminTags. + * + * + * @var string + */ + public $searchTextMatchOr = null; + + /** + * + * + * @var int + */ + public $accessControlIdEqual = null; + + /** + * + * + * @var string + */ + public $accessControlIdIn = null; + + /** + * + * + * @var int + */ + public $startDateGreaterThanOrEqual = null; + + /** + * + * + * @var int + */ + public $startDateLessThanOrEqual = null; + + /** + * + * + * @var int + */ + public $startDateGreaterThanOrEqualOrNull = null; + + /** + * + * + * @var int + */ + public $startDateLessThanOrEqualOrNull = null; + + /** + * + * + * @var int + */ + public $endDateGreaterThanOrEqual = null; + + /** + * + * + * @var int + */ + public $endDateLessThanOrEqual = null; + + /** + * + * + * @var int + */ + public $endDateGreaterThanOrEqualOrNull = null; + + /** + * + * + * @var int + */ + public $endDateLessThanOrEqualOrNull = null; + + /** + * + * + * @var string + */ + public $referenceIdEqual = null; + + /** + * + * + * @var string + */ + public $referenceIdIn = null; + + /** + * + * + * @var string + */ + public $replacingEntryIdEqual = null; + + /** + * + * + * @var string + */ + public $replacingEntryIdIn = null; + + /** + * + * + * @var string + */ + public $replacedEntryIdEqual = null; + + /** + * + * + * @var string + */ + public $replacedEntryIdIn = null; + + /** + * + * + * @var KalturaEntryReplacementStatus + */ + public $replacementStatusEqual = null; + + /** + * + * + * @var string + */ + public $replacementStatusIn = null; + + /** + * + * + * @var int + */ + public $partnerSortValueGreaterThanOrEqual = null; + + /** + * + * + * @var int + */ + public $partnerSortValueLessThanOrEqual = null; + + /** + * + * + * @var string + */ + public $redirectEntryIdEqual = null; + + /** + * + * + * @var string + */ + public $rootEntryIdEqual = null; + + /** + * + * + * @var string + */ + public $rootEntryIdIn = null; + + /** + * + * + * @var string + */ + public $tagsNameMultiLikeOr = null; + + /** + * + * + * @var string + */ + public $tagsAdminTagsMultiLikeOr = null; + + /** + * + * + * @var string + */ + public $tagsAdminTagsNameMultiLikeOr = null; + + /** + * + * + * @var string + */ + public $tagsNameMultiLikeAnd = null; + + /** + * + * + * @var string + */ + public $tagsAdminTagsMultiLikeAnd = null; + + /** + * + * + * @var string + */ + public $tagsAdminTagsNameMultiLikeAnd = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaBaseEntryFilter extends KalturaBaseEntryBaseFilter +{ + /** + * + * + * @var string + */ + public $freeText = null; + + /** + * + * + * @var KalturaNullableBoolean + */ + public $isRoot = null; + + /** + * + * + * @var string + */ + public $categoriesFullNameIn = null; + + /** + * All entries within this categoy or in child categories + * + * + * @var string + */ + public $categoryAncestorIdIn = null; + + /** + * The id of the original entry + * + * + * @var string + */ + public $redirectFromEntryId = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +abstract class KalturaPlayableEntryBaseFilter extends KalturaBaseEntryFilter +{ + /** + * + * + * @var int + */ + public $lastPlayedAtGreaterThanOrEqual = null; + + /** + * + * + * @var int + */ + public $lastPlayedAtLessThanOrEqual = null; + + /** + * + * + * @var int + */ + public $durationLessThan = null; + + /** + * + * + * @var int + */ + public $durationGreaterThan = null; + + /** + * + * + * @var int + */ + public $durationLessThanOrEqual = null; + + /** + * + * + * @var int + */ + public $durationGreaterThanOrEqual = null; + + /** + * + * + * @var string + */ + public $durationTypeMatchOr = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaPlayableEntryFilter extends KalturaPlayableEntryBaseFilter +{ + +} + +/** + * @package Kaltura + * @subpackage Client + */ +abstract class KalturaMediaEntryBaseFilter extends KalturaPlayableEntryFilter +{ + /** + * + * + * @var KalturaMediaType + */ + public $mediaTypeEqual = null; + + /** + * + * + * @var string + */ + public $mediaTypeIn = null; + + /** + * + * + * @var int + */ + public $mediaDateGreaterThanOrEqual = null; + + /** + * + * + * @var int + */ + public $mediaDateLessThanOrEqual = null; + + /** + * + * + * @var string + */ + public $flavorParamsIdsMatchOr = null; + + /** + * + * + * @var string + */ + public $flavorParamsIdsMatchAnd = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaMediaEntryFilter extends KalturaMediaEntryBaseFilter +{ + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaMediaEntryFilterForPlaylist extends KalturaMediaEntryFilter +{ + /** + * + * + * @var int + */ + public $limit = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaMediaInfo extends KalturaObjectBase +{ + /** + * The id of the media info + * + * + * @var int + * @readonly + */ + public $id = null; + + /** + * The id of the related flavor asset + * + * + * @var string + */ + public $flavorAssetId = null; + + /** + * The file size + * + * + * @var int + */ + public $fileSize = null; + + /** + * The container format + * + * + * @var string + */ + public $containerFormat = null; + + /** + * The container id + * + * + * @var string + */ + public $containerId = null; + + /** + * The container profile + * + * + * @var string + */ + public $containerProfile = null; + + /** + * The container duration + * + * + * @var int + */ + public $containerDuration = null; + + /** + * The container bit rate + * + * + * @var int + */ + public $containerBitRate = null; + + /** + * The video format + * + * + * @var string + */ + public $videoFormat = null; + + /** + * The video codec id + * + * + * @var string + */ + public $videoCodecId = null; + + /** + * The video duration + * + * + * @var int + */ + public $videoDuration = null; + + /** + * The video bit rate + * + * + * @var int + */ + public $videoBitRate = null; + + /** + * The video bit rate mode + * + * + * @var KalturaBitRateMode + */ + public $videoBitRateMode = null; + + /** + * The video width + * + * + * @var int + */ + public $videoWidth = null; + + /** + * The video height + * + * + * @var int + */ + public $videoHeight = null; + + /** + * The video frame rate + * + * + * @var float + */ + public $videoFrameRate = null; + + /** + * The video display aspect ratio (dar) + * + * + * @var float + */ + public $videoDar = null; + + /** + * + * + * @var int + */ + public $videoRotation = null; + + /** + * The audio format + * + * + * @var string + */ + public $audioFormat = null; + + /** + * The audio codec id + * + * + * @var string + */ + public $audioCodecId = null; + + /** + * The audio duration + * + * + * @var int + */ + public $audioDuration = null; + + /** + * The audio bit rate + * + * + * @var int + */ + public $audioBitRate = null; + + /** + * The audio bit rate mode + * + * + * @var KalturaBitRateMode + */ + public $audioBitRateMode = null; + + /** + * The number of audio channels + * + * + * @var int + */ + public $audioChannels = null; + + /** + * The audio sampling rate + * + * + * @var int + */ + public $audioSamplingRate = null; + + /** + * The audio resolution + * + * + * @var int + */ + public $audioResolution = null; + + /** + * The writing library + * + * + * @var string + */ + public $writingLib = null; + + /** + * The data as returned by the mediainfo command line + * + * + * @var string + */ + public $rawData = null; + + /** + * + * + * @var string + */ + public $multiStreamInfo = null; + + /** + * + * + * @var int + */ + public $scanType = null; + + /** + * + * + * @var string + */ + public $multiStream = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaMediaInfoListResponse extends KalturaObjectBase +{ + /** + * + * + * @var array of KalturaMediaInfo + * @readonly + */ + public $objects; + + /** + * + * + * @var int + * @readonly + */ + public $totalCount = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaMediaListResponse extends KalturaObjectBase +{ + /** + * + * + * @var array of KalturaMediaEntry + * @readonly + */ + public $objects; + + /** + * + * + * @var int + * @readonly + */ + public $totalCount = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaMediaServer extends KalturaObjectBase +{ + /** + * Unique identifier + * + * + * @var int + * @readonly + */ + public $id = null; + + /** + * Server data center id + * + * + * @var int + * @readonly + */ + public $dc = null; + + /** + * Server host name + * + * + * @var string + * @readonly + */ + public $hostname = null; + + /** + * Server first registration date as Unix timestamp (In seconds) + * + * + * @var int + * @readonly + */ + public $createdAt = null; + + /** + * Server last update date as Unix timestamp (In seconds) + * + * + * @var int + * @readonly + */ + public $updatedAt = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaMediaServerStatus extends KalturaObjectBase +{ + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaMixEntry extends KalturaPlayableEntry +{ + /** + * Indicates whether the user has submited a real thumbnail to the mix (Not the one that was generated automaticaly) + * + * + * @var bool + * @readonly + */ + public $hasRealThumbnail = null; + + /** + * The editor type used to edit the metadata + * + * + * @var KalturaEditorType + */ + public $editorType = null; + + /** + * The xml data of the mix + * + * + * @var string + */ + public $dataContent = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaMixListResponse extends KalturaObjectBase +{ + /** + * + * + * @var array of KalturaMixEntry + * @readonly + */ + public $objects; + + /** + * + * + * @var int + * @readonly + */ + public $totalCount = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaModerationFlag extends KalturaObjectBase +{ + /** + * Moderation flag id + * + * + * @var int + * @readonly + */ + public $id = null; + + /** + * + * + * @var int + * @readonly + */ + public $partnerId = null; + + /** + * The user id that added the moderation flag + * + * + * @var string + * @readonly + */ + public $userId = null; + + /** + * The type of the moderation flag (entry or user) + * + * + * @var KalturaModerationObjectType + * @readonly + */ + public $moderationObjectType = null; + + /** + * If moderation flag is set for entry, this is the flagged entry id + * + * + * @var string + */ + public $flaggedEntryId = null; + + /** + * If moderation flag is set for user, this is the flagged user id + * + * + * @var string + */ + public $flaggedUserId = null; + + /** + * The moderation flag status + * + * + * @var KalturaModerationFlagStatus + * @readonly + */ + public $status = null; + + /** + * The comment that was added to the flag + * + * + * @var string + */ + public $comments = null; + + /** + * + * + * @var KalturaModerationFlagType + */ + public $flagType = null; + + /** + * + * + * @var int + * @readonly + */ + public $createdAt = null; + + /** + * + * + * @var int + * @readonly + */ + public $updatedAt = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaModerationFlagListResponse extends KalturaObjectBase +{ + /** + * + * + * @var array of KalturaModerationFlag + * @readonly + */ + public $objects; + + /** + * + * + * @var int + * @readonly + */ + public $totalCount = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaPlayerDeliveryType extends KalturaObjectBase +{ + /** + * + * + * @var string + */ + public $id = null; + + /** + * + * + * @var string + */ + public $label = null; + + /** + * + * + * @var array of KalturaKeyValue + */ + public $flashvars; + + /** + * + * + * @var string + */ + public $minVersion = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaPlayerEmbedCodeType extends KalturaObjectBase +{ + /** + * + * + * @var string + */ + public $id = null; + + /** + * + * + * @var string + */ + public $label = null; + + /** + * + * + * @var bool + */ + public $entryOnly = null; + + /** + * + * + * @var string + */ + public $minVersion = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaPartner extends KalturaObjectBase +{ + /** + * + * + * @var int + * @readonly + */ + public $id = null; + + /** + * + * + * @var string + */ + public $name = null; + + /** + * + * + * @var string + */ + public $website = null; + + /** + * + * + * @var string + */ + public $notificationUrl = null; + + /** + * + * + * @var int + */ + public $appearInSearch = null; + + /** + * + * + * @var int + * @readonly + */ + public $createdAt = null; + + /** + * deprecated - lastName and firstName replaces this field + * + * + * @var string + */ + public $adminName = null; + + /** + * + * + * @var string + */ + public $adminEmail = null; + + /** + * + * + * @var string + */ + public $description = null; + + /** + * + * + * @var KalturaCommercialUseType + */ + public $commercialUse = null; + + /** + * + * + * @var string + */ + public $landingPage = null; + + /** + * + * + * @var string + */ + public $userLandingPage = null; + + /** + * + * + * @var string + */ + public $contentCategories = null; + + /** + * + * + * @var KalturaPartnerType + */ + public $type = null; + + /** + * + * + * @var string + */ + public $phone = null; + + /** + * + * + * @var string + */ + public $describeYourself = null; + + /** + * + * + * @var bool + */ + public $adultContent = null; + + /** + * + * + * @var string + */ + public $defConversionProfileType = null; + + /** + * + * + * @var int + */ + public $notify = null; + + /** + * + * + * @var KalturaPartnerStatus + * @readonly + */ + public $status = null; + + /** + * + * + * @var int + */ + public $allowQuickEdit = null; + + /** + * + * + * @var int + */ + public $mergeEntryLists = null; + + /** + * + * + * @var string + */ + public $notificationsConfig = null; + + /** + * + * + * @var int + */ + public $maxUploadSize = null; + + /** + * + * + * @var int + * @readonly + */ + public $partnerPackage = null; + + /** + * + * + * @var string + * @readonly + */ + public $secret = null; + + /** + * + * + * @var string + * @readonly + */ + public $adminSecret = null; + + /** + * + * + * @var string + * @readonly + */ + public $cmsPassword = null; + + /** + * + * + * @var int + */ + public $allowMultiNotification = null; + + /** + * + * + * @var int + * @readonly + */ + public $adminLoginUsersQuota = null; + + /** + * + * + * @var string + */ + public $adminUserId = null; + + /** + * firstName and lastName replace the old (deprecated) adminName + * + * + * @var string + */ + public $firstName = null; + + /** + * lastName and firstName replace the old (deprecated) adminName + * + * + * @var string + */ + public $lastName = null; + + /** + * country code (2char) - this field is optional + * + * + * @var string + */ + public $country = null; + + /** + * state code (2char) - this field is optional + * + * + * @var string + */ + public $state = null; + + /** + * + * + * @var array of KalturaKeyValue + * @insertonly + */ + public $additionalParams; + + /** + * + * + * @var int + * @readonly + */ + public $publishersQuota = null; + + /** + * + * + * @var KalturaPartnerGroupType + * @readonly + */ + public $partnerGroupType = null; + + /** + * + * + * @var bool + * @readonly + */ + public $defaultEntitlementEnforcement = null; + + /** + * + * + * @var string + * @readonly + */ + public $defaultDeliveryType = null; + + /** + * + * + * @var string + * @readonly + */ + public $defaultEmbedCodeType = null; + + /** + * + * + * @var array of KalturaPlayerDeliveryType + * @readonly + */ + public $deliveryTypes; + + /** + * + * + * @var array of KalturaPlayerEmbedCodeType + * @readonly + */ + public $embedCodeTypes; + + /** + * + * + * @var int + * @readonly + */ + public $templatePartnerId = null; + + /** + * + * + * @var bool + * @readonly + */ + public $ignoreSeoLinks = null; + + /** + * + * + * @var string + * @readonly + */ + public $host = null; + + /** + * + * + * @var string + * @readonly + */ + public $cdnHost = null; + + /** + * + * + * @var string + * @readonly + */ + public $rtmpUrl = null; + + /** + * + * + * @var bool + * @readonly + */ + public $isFirstLogin = null; + + /** + * + * + * @var string + * @readonly + */ + public $logoutUrl = null; + + /** + * + * + * @var int + * @readonly + */ + public $partnerParentId = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaPartnerListResponse extends KalturaObjectBase +{ + /** + * + * + * @var array of KalturaPartner + * @readonly + */ + public $objects; + + /** + * + * + * @var int + * @readonly + */ + public $totalCount = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaPartnerStatistics extends KalturaObjectBase +{ + /** + * Package total allowed bandwidth and storage + * + * + * @var int + * @readonly + */ + public $packageBandwidthAndStorage = null; + + /** + * Partner total hosting in GB on the disk + * + * + * @var float + * @readonly + */ + public $hosting = null; + + /** + * Partner total bandwidth in GB + * + * + * @var float + * @readonly + */ + public $bandwidth = null; + + /** + * total usage in GB - including bandwidth and storage + * + * + * @var int + * @readonly + */ + public $usage = null; + + /** + * Percent of usage out of partner's package. if usage is 5GB and package is 10GB, this value will be 50 + * + * + * @var float + * @readonly + */ + public $usagePercent = null; + + /** + * date when partner reached the limit of his package (timestamp) + * + * + * @var int + * @readonly + */ + public $reachedLimitDate = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaPartnerUsage extends KalturaObjectBase +{ + /** + * Partner total hosting in GB on the disk + * + * + * @var float + * @readonly + */ + public $hostingGB = null; + + /** + * percent of usage out of partner's package. if usageGB is 5 and package is 10GB, this value will be 50 + * + * + * @var float + * @readonly + */ + public $Percent = null; + + /** + * package total BW - actually this is usage, which represents BW+storage + * + * + * @var int + * @readonly + */ + public $packageBW = null; + + /** + * total usage in GB - including bandwidth and storage + * + * + * @var float + * @readonly + */ + public $usageGB = null; + + /** + * date when partner reached the limit of his package (timestamp) + * + * + * @var int + * @readonly + */ + public $reachedLimitDate = null; + + /** + * a semi-colon separated list of comma-separated key-values to represent a usage graph. + * keys could be 1-12 for a year view (1,1.2;2,1.1;3,0.9;...;12,1.4;) + * keys could be 1-[28,29,30,31] depending on the requested month, for a daily view in a given month (1,0.4;2,0.2;...;31,0.1;) + * + * + * @var string + * @readonly + */ + public $usageGraph = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaPermission extends KalturaObjectBase +{ + /** + * + * + * @var int + * @readonly + */ + public $id = null; + + /** + * + * + * @var KalturaPermissionType + * @readonly + */ + public $type = null; + + /** + * + * + * @var string + */ + public $name = null; + + /** + * + * + * @var string + */ + public $friendlyName = null; + + /** + * + * + * @var string + */ + public $description = null; + + /** + * + * + * @var KalturaPermissionStatus + */ + public $status = null; + + /** + * + * + * @var int + * @readonly + */ + public $partnerId = null; + + /** + * + * + * @var string + */ + public $dependsOnPermissionNames = null; + + /** + * + * + * @var string + */ + public $tags = null; + + /** + * + * + * @var string + */ + public $permissionItemsIds = null; + + /** + * + * + * @var int + * @readonly + */ + public $createdAt = null; + + /** + * + * + * @var int + * @readonly + */ + public $updatedAt = null; + + /** + * + * + * @var string + */ + public $partnerGroup = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +abstract class KalturaPermissionItem extends KalturaObjectBase +{ + /** + * + * + * @var int + * @readonly + */ + public $id = null; + + /** + * + * + * @var KalturaPermissionItemType + * @readonly + */ + public $type = null; + + /** + * + * + * @var int + * @readonly + */ + public $partnerId = null; + + /** + * + * + * @var string + */ + public $tags = null; + + /** + * + * + * @var int + * @readonly + */ + public $createdAt = null; + + /** + * + * + * @var int + * @readonly + */ + public $updatedAt = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaPermissionItemListResponse extends KalturaObjectBase +{ + /** + * + * + * @var array of KalturaPermissionItem + * @readonly + */ + public $objects; + + /** + * + * + * @var int + * @readonly + */ + public $totalCount = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaPermissionListResponse extends KalturaObjectBase +{ + /** + * + * + * @var array of KalturaPermission + * @readonly + */ + public $objects; + + /** + * + * + * @var int + * @readonly + */ + public $totalCount = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaPlaylist extends KalturaBaseEntry +{ + /** + * Content of the playlist - + * XML if the playlistType is dynamic + * text if the playlistType is static + * url if the playlistType is mRss + * + * + * @var string + */ + public $playlistContent = null; + + /** + * + * + * @var array of KalturaMediaEntryFilterForPlaylist + */ + public $filters; + + /** + * Maximum count of results to be returned in playlist execution + * + * + * @var int + */ + public $totalResults = null; + + /** + * Type of playlist + * + * + * @var KalturaPlaylistType + */ + public $playlistType = null; + + /** + * Number of plays + * + * + * @var int + * @readonly + */ + public $plays = null; + + /** + * Number of views + * + * + * @var int + * @readonly + */ + public $views = null; + + /** + * The duration in seconds + * + * + * @var int + * @readonly + */ + public $duration = null; + + /** + * The url for this playlist + * + * + * @var string + * @readonly + */ + public $executeUrl = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaPlaylistListResponse extends KalturaObjectBase +{ + /** + * + * + * @var array of KalturaPlaylist + * @readonly + */ + public $objects; + + /** + * + * + * @var int + * @readonly + */ + public $totalCount = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaRemotePath extends KalturaObjectBase +{ + /** + * + * + * @var int + * @readonly + */ + public $storageProfileId = null; + + /** + * + * + * @var string + * @readonly + */ + public $uri = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaRemotePathListResponse extends KalturaObjectBase +{ + /** + * + * + * @var array of KalturaRemotePath + * @readonly + */ + public $objects; + + /** + * + * + * @var int + * @readonly + */ + public $totalCount = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaUrlResource extends KalturaContentResource +{ + /** + * Remote URL, FTP, HTTP or HTTPS + * + * + * @var string + */ + public $url = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaRemoteStorageResource extends KalturaUrlResource +{ + /** + * ID of storage profile to be associated with the created file sync, used for file serving URL composing. + * + * + * @var int + */ + public $storageProfileId = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaReportBaseTotal extends KalturaObjectBase +{ + /** + * + * + * @var string + */ + public $id = null; + + /** + * + * + * @var string + */ + public $data = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaReportGraph extends KalturaObjectBase +{ + /** + * + * + * @var string + */ + public $id = null; + + /** + * + * + * @var string + */ + public $data = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaReportInputBaseFilter extends KalturaObjectBase +{ + /** + * Start date as Unix timestamp (In seconds) + * + * + * @var int + */ + public $fromDate = null; + + /** + * End date as Unix timestamp (In seconds) + * + * + * @var int + */ + public $toDate = null; + + /** + * Start day as string (YYYYMMDD) + * + * + * @var string + */ + public $fromDay = null; + + /** + * End date as string (YYYYMMDD) + * + * + * @var string + */ + public $toDay = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaReportResponse extends KalturaObjectBase +{ + /** + * + * + * @var string + */ + public $columns = null; + + /** + * + * + * @var array of KalturaString + */ + public $results; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaReportTable extends KalturaObjectBase +{ + /** + * + * + * @var string + * @readonly + */ + public $header = null; + + /** + * + * + * @var string + * @readonly + */ + public $data = null; + + /** + * + * + * @var int + * @readonly + */ + public $totalCount = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaReportTotal extends KalturaObjectBase +{ + /** + * + * + * @var string + */ + public $header = null; + + /** + * + * + * @var string + */ + public $data = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaSearch extends KalturaObjectBase +{ + /** + * + * + * @var string + */ + public $keyWords = null; + + /** + * + * + * @var KalturaSearchProviderType + */ + public $searchSource = null; + + /** + * + * + * @var KalturaMediaType + */ + public $mediaType = null; + + /** + * Use this field to pass dynamic data for searching + * For example - if you set this field to "mymovies_$partner_id" + * The $partner_id will be automatically replcaed with your real partner Id + * + * + * @var string + */ + public $extraData = null; + + /** + * + * + * @var string + */ + public $authData = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaSearchAuthData extends KalturaObjectBase +{ + /** + * The authentication data that further should be used for search + * + * + * @var string + */ + public $authData = null; + + /** + * Login URL when user need to sign-in and authorize the search + * + * + * @var string + */ + public $loginUrl = null; + + /** + * Information when there was an error + * + * + * @var string + */ + public $message = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaSearchResult extends KalturaSearch +{ + /** + * + * + * @var string + */ + public $id = null; + + /** + * + * + * @var string + */ + public $title = null; + + /** + * + * + * @var string + */ + public $thumbUrl = null; + + /** + * + * + * @var string + */ + public $description = null; + + /** + * + * + * @var string + */ + public $tags = null; + + /** + * + * + * @var string + */ + public $url = null; + + /** + * + * + * @var string + */ + public $sourceLink = null; + + /** + * + * + * @var string + */ + public $credit = null; + + /** + * + * + * @var KalturaLicenseType + */ + public $licenseType = null; + + /** + * + * + * @var string + */ + public $flashPlaybackType = null; + + /** + * + * + * @var string + */ + public $fileExt = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaSearchResultResponse extends KalturaObjectBase +{ + /** + * + * + * @var array of KalturaSearchResult + * @readonly + */ + public $objects; + + /** + * + * + * @var bool + * @readonly + */ + public $needMediaInfo = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaSessionInfo extends KalturaObjectBase +{ + /** + * + * + * @var string + * @readonly + */ + public $ks = null; + + /** + * + * + * @var KalturaSessionType + * @readonly + */ + public $sessionType = null; + + /** + * + * + * @var int + * @readonly + */ + public $partnerId = null; + + /** + * + * + * @var string + * @readonly + */ + public $userId = null; + + /** + * + * + * @var int + * @readonly + */ + public $expiry = null; + + /** + * + * + * @var string + * @readonly + */ + public $privileges = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaSourceFileSyncDescriptor extends KalturaObjectBase +{ + /** + * + * + * @var string + */ + public $fileSyncLocalPath = null; + + /** + * The translated path as used by the scheduler + * + * + * @var string + */ + public $actualFileSyncLocalPath = null; + + /** + * + * + * @var string + */ + public $fileSyncRemoteUrl = null; + + /** + * + * + * @var string + */ + public $assetId = null; + + /** + * + * + * @var int + */ + public $assetParamsId = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaStartWidgetSessionResponse extends KalturaObjectBase +{ + /** + * + * + * @var int + * @readonly + */ + public $partnerId = null; + + /** + * + * + * @var string + * @readonly + */ + public $ks = null; + + /** + * + * + * @var string + * @readonly + */ + public $userId = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaStatsEvent extends KalturaObjectBase +{ + /** + * + * + * @var string + */ + public $clientVer = null; + + /** + * + * + * @var KalturaStatsEventType + */ + public $eventType = null; + + /** + * the client's timestamp of this event + * + * + * @var float + */ + public $eventTimestamp = null; + + /** + * a unique string generated by the client that will represent the client-side session: the primary component will pass it on to other components that sprout from it + * + * + * @var string + */ + public $sessionId = null; + + /** + * + * + * @var int + */ + public $partnerId = null; + + /** + * + * + * @var string + */ + public $entryId = null; + + /** + * the UV cookie - creates in the operational system and should be passed on ofr every event + * + * + * @var string + */ + public $uniqueViewer = null; + + /** + * + * + * @var string + */ + public $widgetId = null; + + /** + * + * + * @var int + */ + public $uiconfId = null; + + /** + * the partner's user id + * + * + * @var string + */ + public $userId = null; + + /** + * the timestamp along the video when the event happend + * + * + * @var int + */ + public $currentPoint = null; + + /** + * the duration of the video in milliseconds - will make it much faster than quering the db for each entry + * + * + * @var int + */ + public $duration = null; + + /** + * will be retrieved from the request of the user + * + * + * @var string + * @readonly + */ + public $userIp = null; + + /** + * the time in milliseconds the event took + * + * + * @var int + */ + public $processDuration = null; + + /** + * the id of the GUI control - will be used in the future to better understand what the user clicked + * + * + * @var string + */ + public $controlId = null; + + /** + * true if the user ever used seek in this session + * + * + * @var bool + */ + public $seek = null; + + /** + * timestamp of the new point on the timeline of the video after the user seeks + * + * + * @var int + */ + public $newPoint = null; + + /** + * the referrer of the client + * + * + * @var string + */ + public $referrer = null; + + /** + * will indicate if the event is thrown for the first video in the session + * + * + * @var bool + */ + public $isFirstInSession = null; + + /** + * kaltura application name + * + * + * @var string + */ + public $applicationId = null; + + /** + * + * + * @var int + */ + public $contextId = null; + + /** + * + * + * @var KalturaStatsFeatureType + */ + public $featureType = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaStatsKmcEvent extends KalturaObjectBase +{ + /** + * + * + * @var string + */ + public $clientVer = null; + + /** + * + * + * @var string + */ + public $kmcEventActionPath = null; + + /** + * + * + * @var KalturaStatsKmcEventType + */ + public $kmcEventType = null; + + /** + * the client's timestamp of this event + * + * + * @var float + */ + public $eventTimestamp = null; + + /** + * a unique string generated by the client that will represent the client-side session: the primary component will pass it on to other components that sprout from it + * + * + * @var string + */ + public $sessionId = null; + + /** + * + * + * @var int + */ + public $partnerId = null; + + /** + * + * + * @var string + */ + public $entryId = null; + + /** + * + * + * @var string + */ + public $widgetId = null; + + /** + * + * + * @var int + */ + public $uiconfId = null; + + /** + * the partner's user id + * + * + * @var string + */ + public $userId = null; + + /** + * will be retrieved from the request of the user + * + * + * @var string + * @readonly + */ + public $userIp = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaStorageProfile extends KalturaObjectBase +{ + /** + * + * + * @var int + * @readonly + */ + public $id = null; + + /** + * + * + * @var int + * @readonly + */ + public $createdAt = null; + + /** + * + * + * @var int + * @readonly + */ + public $updatedAt = null; + + /** + * + * + * @var int + * @readonly + */ + public $partnerId = null; + + /** + * + * + * @var string + */ + public $name = null; + + /** + * + * + * @var string + */ + public $systemName = null; + + /** + * + * + * @var string + */ + public $desciption = null; + + /** + * + * + * @var KalturaStorageProfileStatus + */ + public $status = null; + + /** + * + * + * @var KalturaStorageProfileProtocol + */ + public $protocol = null; + + /** + * + * + * @var string + */ + public $storageUrl = null; + + /** + * + * + * @var string + */ + public $storageBaseDir = null; + + /** + * + * + * @var string + */ + public $storageUsername = null; + + /** + * + * + * @var string + */ + public $storagePassword = null; + + /** + * + * + * @var bool + */ + public $storageFtpPassiveMode = null; + + /** + * + * + * @var string + */ + public $deliveryHttpBaseUrl = null; + + /** + * + * + * @var string + */ + public $deliveryHttpsBaseUrl = null; + + /** + * + * + * @var string + */ + public $deliveryRmpBaseUrl = null; + + /** + * + * + * @var string + */ + public $deliveryIisBaseUrl = null; + + /** + * + * + * @var int + */ + public $minFileSize = null; + + /** + * + * + * @var int + */ + public $maxFileSize = null; + + /** + * + * + * @var string + */ + public $flavorParamsIds = null; + + /** + * + * + * @var int + */ + public $maxConcurrentConnections = null; + + /** + * + * + * @var string + */ + public $pathManagerClass = null; + + /** + * + * + * @var array of KalturaKeyValue + */ + public $pathManagerParams; + + /** + * + * + * @var string + */ + public $urlManagerClass = null; + + /** + * + * + * @var array of KalturaKeyValue + */ + public $urlManagerParams; + + /** + * No need to create enum for temp field + * + * + * @var int + */ + public $trigger = null; + + /** + * Delivery Priority + * + * + * @var int + */ + public $deliveryPriority = null; + + /** + * + * + * @var KalturaStorageProfileDeliveryStatus + */ + public $deliveryStatus = null; + + /** + * + * + * @var string + */ + public $rtmpPrefix = null; + + /** + * + * + * @var KalturaStorageProfileReadyBehavior + */ + public $readyBehavior = null; + + /** + * Flag sugnifying that the storage exported content should be deleted when soure entry is deleted + * + * + * @var int + */ + public $allowAutoDelete = null; + + /** + * Indicates to the local file transfer manager to create a link to the file instead of copying it + * + * + * @var bool + */ + public $createFileLink = null; + + /** + * Holds storage profile export rules + * + * + * @var array of KalturaRule + */ + public $rules; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaStorageProfileListResponse extends KalturaObjectBase +{ + /** + * + * + * @var array of KalturaStorageProfile + * @readonly + */ + public $objects; + + /** + * + * + * @var int + * @readonly + */ + public $totalCount = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaSyndicationFeedEntryCount extends KalturaObjectBase +{ + /** + * the total count of entries that should appear in the feed without flavor filtering + * + * + * @var int + */ + public $totalEntryCount = null; + + /** + * count of entries that will appear in the feed (including all relevant filters) + * + * + * @var int + */ + public $actualEntryCount = null; + + /** + * count of entries that requires transcoding in order to be included in feed + * + * + * @var int + */ + public $requireTranscodingCount = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaThumbAsset extends KalturaAsset +{ + /** + * The Flavor Params used to create this Flavor Asset + * + * + * @var int + * @insertonly + */ + public $thumbParamsId = null; + + /** + * The width of the Flavor Asset + * + * + * @var int + * @readonly + */ + public $width = null; + + /** + * The height of the Flavor Asset + * + * + * @var int + * @readonly + */ + public $height = null; + + /** + * The status of the asset + * + * + * @var KalturaThumbAssetStatus + * @readonly + */ + public $status = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaThumbAssetListResponse extends KalturaObjectBase +{ + /** + * + * + * @var array of KalturaThumbAsset + * @readonly + */ + public $objects; + + /** + * + * + * @var int + * @readonly + */ + public $totalCount = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaThumbParams extends KalturaAssetParams +{ + /** + * + * + * @var KalturaThumbCropType + */ + public $cropType = null; + + /** + * + * + * @var int + */ + public $quality = null; + + /** + * + * + * @var int + */ + public $cropX = null; + + /** + * + * + * @var int + */ + public $cropY = null; + + /** + * + * + * @var int + */ + public $cropWidth = null; + + /** + * + * + * @var int + */ + public $cropHeight = null; + + /** + * + * + * @var float + */ + public $videoOffset = null; + + /** + * + * + * @var int + */ + public $width = null; + + /** + * + * + * @var int + */ + public $height = null; + + /** + * + * + * @var float + */ + public $scaleWidth = null; + + /** + * + * + * @var float + */ + public $scaleHeight = null; + + /** + * Hexadecimal value + * + * + * @var string + */ + public $backgroundColor = null; + + /** + * Id of the flavor params or the thumbnail params to be used as source for the thumbnail creation + * + * + * @var int + */ + public $sourceParamsId = null; + + /** + * The container format of the Flavor Params + * + * + * @var KalturaContainerFormat + */ + public $format = null; + + /** + * The image density (dpi) for example: 72 or 96 + * + * + * @var int + */ + public $density = null; + + /** + * Strip profiles and comments + * + * + * @var bool + */ + public $stripProfiles = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaThumbParamsListResponse extends KalturaObjectBase +{ + /** + * + * + * @var array of KalturaThumbParams + * @readonly + */ + public $objects; + + /** + * + * + * @var int + * @readonly + */ + public $totalCount = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaThumbParamsOutput extends KalturaThumbParams +{ + /** + * + * + * @var int + */ + public $thumbParamsId = null; + + /** + * + * + * @var string + */ + public $thumbParamsVersion = null; + + /** + * + * + * @var string + */ + public $thumbAssetId = null; + + /** + * + * + * @var string + */ + public $thumbAssetVersion = null; + + /** + * + * + * @var int + */ + public $rotate = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaThumbParamsOutputListResponse extends KalturaObjectBase +{ + /** + * + * + * @var array of KalturaThumbParamsOutput + * @readonly + */ + public $objects; + + /** + * + * + * @var int + * @readonly + */ + public $totalCount = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaThumbnailServeOptions extends KalturaObjectBase +{ + /** + * + * + * @var bool + */ + public $download = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaUiConf extends KalturaObjectBase +{ + /** + * + * + * @var int + * @readonly + */ + public $id = null; + + /** + * Name of the uiConf, this is not a primary key + * + * + * @var string + */ + public $name = null; + + /** + * + * + * @var string + */ + public $description = null; + + /** + * + * + * @var int + * @readonly + */ + public $partnerId = null; + + /** + * + * + * @var KalturaUiConfObjType + */ + public $objType = null; + + /** + * + * + * @var string + * @readonly + */ + public $objTypeAsString = null; + + /** + * + * + * @var int + */ + public $width = null; + + /** + * + * + * @var int + */ + public $height = null; + + /** + * + * + * @var string + */ + public $htmlParams = null; + + /** + * + * + * @var string + */ + public $swfUrl = null; + + /** + * + * + * @var string + * @readonly + */ + public $confFilePath = null; + + /** + * + * + * @var string + */ + public $confFile = null; + + /** + * + * + * @var string + */ + public $confFileFeatures = null; + + /** + * + * + * @var string + */ + public $config = null; + + /** + * + * + * @var string + */ + public $confVars = null; + + /** + * + * + * @var bool + */ + public $useCdn = null; + + /** + * + * + * @var string + */ + public $tags = null; + + /** + * + * + * @var string + */ + public $swfUrlVersion = null; + + /** + * Entry creation date as Unix timestamp (In seconds) + * + * + * @var int + * @readonly + */ + public $createdAt = null; + + /** + * Entry creation date as Unix timestamp (In seconds) + * + * + * @var int + * @readonly + */ + public $updatedAt = null; + + /** + * + * + * @var KalturaUiConfCreationMode + */ + public $creationMode = null; + + /** + * + * + * @var string + */ + public $html5Url = null; + + /** + * UiConf version + * + * + * @var string + * @readonly + */ + public $version = null; + + /** + * + * + * @var string + */ + public $partnerTags = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaUiConfListResponse extends KalturaObjectBase +{ + /** + * + * + * @var array of KalturaUiConf + * @readonly + */ + public $objects; + + /** + * + * + * @var int + * @readonly + */ + public $totalCount = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaUiConfTypeInfo extends KalturaObjectBase +{ + /** + * UiConf Type + * + * + * @var KalturaUiConfObjType + */ + public $type = null; + + /** + * Available versions + * + * + * @var array of KalturaString + */ + public $versions; + + /** + * The direcotry this type is saved at + * + * + * @var string + */ + public $directory = null; + + /** + * Filename for this UiConf type + * + * + * @var string + */ + public $filename = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaUploadResponse extends KalturaObjectBase +{ + /** + * + * + * @var string + */ + public $uploadTokenId = null; + + /** + * + * + * @var int + */ + public $fileSize = null; + + /** + * + * + * @var KalturaUploadErrorCode + */ + public $errorCode = null; + + /** + * + * + * @var string + */ + public $errorDescription = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaUploadToken extends KalturaObjectBase +{ + /** + * Upload token unique ID + * + * + * @var string + * @readonly + */ + public $id = null; + + /** + * Partner ID of the upload token + * + * + * @var int + * @readonly + */ + public $partnerId = null; + + /** + * User id for the upload token + * + * + * @var string + * @readonly + */ + public $userId = null; + + /** + * Status of the upload token + * + * + * @var KalturaUploadTokenStatus + * @readonly + */ + public $status = null; + + /** + * Name of the file for the upload token, can be empty when the upload token is created and will be updated internally after the file is uploaded + * + * + * @var string + * @insertonly + */ + public $fileName = null; + + /** + * File size in bytes, can be empty when the upload token is created and will be updated internally after the file is uploaded + * + * + * @var float + * @insertonly + */ + public $fileSize = null; + + /** + * Uploaded file size in bytes, can be used to identify how many bytes were uploaded before resuming + * + * + * @var float + * @readonly + */ + public $uploadedFileSize = null; + + /** + * Creation date as Unix timestamp (In seconds) + * + * + * @var int + * @readonly + */ + public $createdAt = null; + + /** + * Last update date as Unix timestamp (In seconds) + * + * + * @var int + * @readonly + */ + public $updatedAt = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaUploadTokenListResponse extends KalturaObjectBase +{ + /** + * + * + * @var array of KalturaUploadToken + * @readonly + */ + public $objects; + + /** + * + * + * @var int + * @readonly + */ + public $totalCount = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaUser extends KalturaObjectBase +{ + /** + * + * + * @var string + */ + public $id = null; + + /** + * + * + * @var int + * @readonly + */ + public $partnerId = null; + + /** + * + * + * @var string + */ + public $screenName = null; + + /** + * + * + * @var string + */ + public $fullName = null; + + /** + * + * + * @var string + */ + public $email = null; + + /** + * + * + * @var int + */ + public $dateOfBirth = null; + + /** + * + * + * @var string + */ + public $country = null; + + /** + * + * + * @var string + */ + public $state = null; + + /** + * + * + * @var string + */ + public $city = null; + + /** + * + * + * @var string + */ + public $zip = null; + + /** + * + * + * @var string + */ + public $thumbnailUrl = null; + + /** + * + * + * @var string + */ + public $description = null; + + /** + * + * + * @var string + */ + public $tags = null; + + /** + * Admin tags can be updated only by using an admin session + * + * + * @var string + */ + public $adminTags = null; + + /** + * + * + * @var KalturaGender + */ + public $gender = null; + + /** + * + * + * @var KalturaUserStatus + */ + public $status = null; + + /** + * Creation date as Unix timestamp (In seconds) + * + * + * @var int + * @readonly + */ + public $createdAt = null; + + /** + * Last update date as Unix timestamp (In seconds) + * + * + * @var int + * @readonly + */ + public $updatedAt = null; + + /** + * Can be used to store various partner related data as a string + * + * + * @var string + */ + public $partnerData = null; + + /** + * + * + * @var int + */ + public $indexedPartnerDataInt = null; + + /** + * + * + * @var string + */ + public $indexedPartnerDataString = null; + + /** + * + * + * @var int + * @readonly + */ + public $storageSize = null; + + /** + * + * + * @var string + * @insertonly + */ + public $password = null; + + /** + * + * + * @var string + */ + public $firstName = null; + + /** + * + * + * @var string + */ + public $lastName = null; + + /** + * + * + * @var bool + */ + public $isAdmin = null; + + /** + * + * + * @var KalturaLanguageCode + */ + public $language = null; + + /** + * + * + * @var int + * @readonly + */ + public $lastLoginTime = null; + + /** + * + * + * @var int + * @readonly + */ + public $statusUpdatedAt = null; + + /** + * + * + * @var int + * @readonly + */ + public $deletedAt = null; + + /** + * + * + * @var bool + * @readonly + */ + public $loginEnabled = null; + + /** + * + * + * @var string + */ + public $roleIds = null; + + /** + * + * + * @var string + * @readonly + */ + public $roleNames = null; + + /** + * + * + * @var bool + * @readonly + */ + public $isAccountOwner = null; + + /** + * + * + * @var string + */ + public $allowedPartnerIds = null; + + /** + * + * + * @var string + */ + public $allowedPartnerPackages = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaUserListResponse extends KalturaObjectBase +{ + /** + * + * + * @var array of KalturaUser + * @readonly + */ + public $objects; + + /** + * + * + * @var int + * @readonly + */ + public $totalCount = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaUserRole extends KalturaObjectBase +{ + /** + * + * + * @var int + * @readonly + */ + public $id = null; + + /** + * + * + * @var string + */ + public $name = null; + + /** + * + * + * @var string + */ + public $systemName = null; + + /** + * + * + * @var string + */ + public $description = null; + + /** + * + * + * @var KalturaUserRoleStatus + */ + public $status = null; + + /** + * + * + * @var int + * @readonly + */ + public $partnerId = null; + + /** + * + * + * @var string + */ + public $permissionNames = null; + + /** + * + * + * @var string + */ + public $tags = null; + + /** + * + * + * @var int + * @readonly + */ + public $createdAt = null; + + /** + * + * + * @var int + * @readonly + */ + public $updatedAt = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaUserRoleListResponse extends KalturaObjectBase +{ + /** + * + * + * @var array of KalturaUserRole + * @readonly + */ + public $objects; + + /** + * + * + * @var int + * @readonly + */ + public $totalCount = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaWidget extends KalturaObjectBase +{ + /** + * + * + * @var string + * @readonly + */ + public $id = null; + + /** + * + * + * @var string + */ + public $sourceWidgetId = null; + + /** + * + * + * @var string + * @readonly + */ + public $rootWidgetId = null; + + /** + * + * + * @var int + * @readonly + */ + public $partnerId = null; + + /** + * + * + * @var string + */ + public $entryId = null; + + /** + * + * + * @var int + */ + public $uiConfId = null; + + /** + * + * + * @var KalturaWidgetSecurityType + */ + public $securityType = null; + + /** + * + * + * @var int + */ + public $securityPolicy = null; + + /** + * + * + * @var int + * @readonly + */ + public $createdAt = null; + + /** + * + * + * @var int + * @readonly + */ + public $updatedAt = null; + + /** + * Can be used to store various partner related data as a string + * + * + * @var string + */ + public $partnerData = null; + + /** + * + * + * @var string + * @readonly + */ + public $widgetHTML = null; + + /** + * Should enforce entitlement on feed entries + * + * + * @var bool + */ + public $enforceEntitlement = null; + + /** + * Set privacy context for search entries that assiged to private and public categories within a category privacy context. + * + * + * @var string + */ + public $privacyContext = null; + + /** + * Addes the HTML5 script line to the widget's embed code + * + * + * @var bool + */ + public $addEmbedHtml5Support = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaWidgetListResponse extends KalturaObjectBase +{ + /** + * + * + * @var array of KalturaWidget + * @readonly + */ + public $objects; + + /** + * + * + * @var int + * @readonly + */ + public $totalCount = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +abstract class KalturaAccessControlBaseFilter extends KalturaFilter +{ + /** + * + * + * @var int + */ + public $idEqual = null; + + /** + * + * + * @var string + */ + public $idIn = null; + + /** + * + * + * @var string + */ + public $systemNameEqual = null; + + /** + * + * + * @var string + */ + public $systemNameIn = null; + + /** + * + * + * @var int + */ + public $createdAtGreaterThanOrEqual = null; + + /** + * + * + * @var int + */ + public $createdAtLessThanOrEqual = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaAccessControlBlockAction extends KalturaRuleAction +{ + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaAccessControlLimitFlavorsAction extends KalturaRuleAction +{ + /** + * Comma separated list of flavor ids + * + * + * @var string + */ + public $flavorParamsIds = null; + + /** + * + * + * @var bool + */ + public $isBlockedList = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaAccessControlPreviewAction extends KalturaRuleAction +{ + /** + * + * + * @var int + */ + public $limit = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +abstract class KalturaAccessControlProfileBaseFilter extends KalturaFilter +{ + /** + * + * + * @var int + */ + public $idEqual = null; + + /** + * + * + * @var string + */ + public $idIn = null; + + /** + * + * + * @var string + */ + public $systemNameEqual = null; + + /** + * + * + * @var string + */ + public $systemNameIn = null; + + /** + * + * + * @var int + */ + public $createdAtGreaterThanOrEqual = null; + + /** + * + * + * @var int + */ + public $createdAtLessThanOrEqual = null; + + /** + * + * + * @var int + */ + public $updatedAtGreaterThanOrEqual = null; + + /** + * + * + * @var int + */ + public $updatedAtLessThanOrEqual = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaAdminUser extends KalturaUser +{ + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaAmazonS3StorageProfile extends KalturaStorageProfile +{ + /** + * + * + * @var KalturaAmazonS3StorageProfileFilesPermissionLevel + */ + public $filesPermissionInS3 = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaApiActionPermissionItem extends KalturaPermissionItem +{ + /** + * + * + * @var string + */ + public $service = null; + + /** + * + * + * @var string + */ + public $action = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaApiParameterPermissionItem extends KalturaPermissionItem +{ + /** + * + * + * @var string + */ + public $object = null; + + /** + * + * + * @var string + */ + public $parameter = null; + + /** + * + * + * @var KalturaApiParameterPermissionItemAction + */ + public $action = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +abstract class KalturaAssetBaseFilter extends KalturaFilter +{ + /** + * + * + * @var string + */ + public $idEqual = null; + + /** + * + * + * @var string + */ + public $idIn = null; + + /** + * + * + * @var string + */ + public $entryIdEqual = null; + + /** + * + * + * @var string + */ + public $entryIdIn = null; + + /** + * + * + * @var int + */ + public $partnerIdEqual = null; + + /** + * + * + * @var string + */ + public $partnerIdIn = null; + + /** + * + * + * @var int + */ + public $sizeGreaterThanOrEqual = null; + + /** + * + * + * @var int + */ + public $sizeLessThanOrEqual = null; + + /** + * + * + * @var string + */ + public $tagsLike = null; + + /** + * + * + * @var string + */ + public $tagsMultiLikeOr = null; + + /** + * + * + * @var string + */ + public $tagsMultiLikeAnd = null; + + /** + * + * + * @var int + */ + public $createdAtGreaterThanOrEqual = null; + + /** + * + * + * @var int + */ + public $createdAtLessThanOrEqual = null; + + /** + * + * + * @var int + */ + public $updatedAtGreaterThanOrEqual = null; + + /** + * + * + * @var int + */ + public $updatedAtLessThanOrEqual = null; + + /** + * + * + * @var int + */ + public $deletedAtGreaterThanOrEqual = null; + + /** + * + * + * @var int + */ + public $deletedAtLessThanOrEqual = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +abstract class KalturaAssetParamsBaseFilter extends KalturaFilter +{ + /** + * + * + * @var string + */ + public $systemNameEqual = null; + + /** + * + * + * @var string + */ + public $systemNameIn = null; + + /** + * + * + * @var KalturaNullableBoolean + */ + public $isSystemDefaultEqual = null; + + /** + * + * + * @var string + */ + public $tagsEqual = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaAssetParamsOutput extends KalturaAssetParams +{ + /** + * + * + * @var int + */ + public $assetParamsId = null; + + /** + * + * + * @var string + */ + public $assetParamsVersion = null; + + /** + * + * + * @var string + */ + public $assetId = null; + + /** + * + * + * @var string + */ + public $assetVersion = null; + + /** + * + * + * @var int + */ + public $readyBehavior = null; + + /** + * The container format of the Flavor Params + * + * + * @var KalturaContainerFormat + */ + public $format = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaAssetPropertiesCompareCondition extends KalturaCondition +{ + /** + * Array of key/value objects that holds the property and the value to find and compare on an asset object + * + * + * @var array of KalturaKeyValue + */ + public $properties; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaAssetsParamsResourceContainers extends KalturaResource +{ + /** + * Array of resources associated with asset params ids + * + * + * @var array of KalturaAssetParamsResourceContainer + */ + public $resources; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaAuthenticatedCondition extends KalturaCondition +{ + /** + * The privelege needed to remove the restriction + * + * + * @var array of KalturaStringValue + */ + public $privileges; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +abstract class KalturaBaseSyndicationFeedBaseFilter extends KalturaFilter +{ + +} + +/** + * @package Kaltura + * @subpackage Client + */ +abstract class KalturaBatchJobBaseFilter extends KalturaFilter +{ + /** + * + * + * @var int + */ + public $idEqual = null; + + /** + * + * + * @var int + */ + public $idGreaterThanOrEqual = null; + + /** + * + * + * @var int + */ + public $partnerIdEqual = null; + + /** + * + * + * @var string + */ + public $partnerIdIn = null; + + /** + * + * + * @var string + */ + public $partnerIdNotIn = null; + + /** + * + * + * @var int + */ + public $createdAtGreaterThanOrEqual = null; + + /** + * + * + * @var int + */ + public $createdAtLessThanOrEqual = null; + + /** + * + * + * @var int + */ + public $updatedAtGreaterThanOrEqual = null; + + /** + * + * + * @var int + */ + public $updatedAtLessThanOrEqual = null; + + /** + * + * + * @var int + */ + public $executionAttemptsGreaterThanOrEqual = null; + + /** + * + * + * @var int + */ + public $executionAttemptsLessThanOrEqual = null; + + /** + * + * + * @var int + */ + public $lockVersionGreaterThanOrEqual = null; + + /** + * + * + * @var int + */ + public $lockVersionLessThanOrEqual = null; + + /** + * + * + * @var string + */ + public $entryIdEqual = null; + + /** + * + * + * @var KalturaBatchJobType + */ + public $jobTypeEqual = null; + + /** + * + * + * @var string + */ + public $jobTypeIn = null; + + /** + * + * + * @var string + */ + public $jobTypeNotIn = null; + + /** + * + * + * @var int + */ + public $jobSubTypeEqual = null; + + /** + * + * + * @var string + */ + public $jobSubTypeIn = null; + + /** + * + * + * @var string + */ + public $jobSubTypeNotIn = null; + + /** + * + * + * @var KalturaBatchJobStatus + */ + public $statusEqual = null; + + /** + * + * + * @var string + */ + public $statusIn = null; + + /** + * + * + * @var string + */ + public $statusNotIn = null; + + /** + * + * + * @var int + */ + public $priorityGreaterThanOrEqual = null; + + /** + * + * + * @var int + */ + public $priorityLessThanOrEqual = null; + + /** + * + * + * @var int + */ + public $priorityEqual = null; + + /** + * + * + * @var string + */ + public $priorityIn = null; + + /** + * + * + * @var string + */ + public $priorityNotIn = null; + + /** + * + * + * @var int + */ + public $batchVersionGreaterThanOrEqual = null; + + /** + * + * + * @var int + */ + public $batchVersionLessThanOrEqual = null; + + /** + * + * + * @var int + */ + public $batchVersionEqual = null; + + /** + * + * + * @var int + */ + public $queueTimeGreaterThanOrEqual = null; + + /** + * + * + * @var int + */ + public $queueTimeLessThanOrEqual = null; + + /** + * + * + * @var int + */ + public $finishTimeGreaterThanOrEqual = null; + + /** + * + * + * @var int + */ + public $finishTimeLessThanOrEqual = null; + + /** + * + * + * @var KalturaBatchJobErrorTypes + */ + public $errTypeEqual = null; + + /** + * + * + * @var string + */ + public $errTypeIn = null; + + /** + * + * + * @var string + */ + public $errTypeNotIn = null; + + /** + * + * + * @var int + */ + public $errNumberEqual = null; + + /** + * + * + * @var string + */ + public $errNumberIn = null; + + /** + * + * + * @var string + */ + public $errNumberNotIn = null; + + /** + * + * + * @var int + */ + public $estimatedEffortLessThan = null; + + /** + * + * + * @var int + */ + public $estimatedEffortGreaterThan = null; + + /** + * + * + * @var int + */ + public $urgencyLessThanOrEqual = null; + + /** + * + * + * @var int + */ + public $urgencyGreaterThanOrEqual = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaBooleanValue extends KalturaValue +{ + /** + * + * + * @var bool + */ + public $value = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaBulkDownloadJobData extends KalturaJobData +{ + /** + * Comma separated list of entry ids + * + * + * @var string + */ + public $entryIds = null; + + /** + * Flavor params id to use for conversion + * + * + * @var int + */ + public $flavorParamsId = null; + + /** + * The id of the requesting user + * + * + * @var string + */ + public $puserId = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +abstract class KalturaBulkUploadBaseFilter extends KalturaFilter +{ + /** + * + * + * @var int + */ + public $uploadedOnGreaterThanOrEqual = null; + + /** + * + * + * @var int + */ + public $uploadedOnLessThanOrEqual = null; + + /** + * + * + * @var int + */ + public $uploadedOnEqual = null; + + /** + * + * + * @var string + */ + public $statusIn = null; + + /** + * + * + * @var KalturaBatchJobStatus + */ + public $statusEqual = null; + + /** + * + * + * @var KalturaBulkUploadObjectType + */ + public $bulkUploadObjectTypeEqual = null; + + /** + * + * + * @var string + */ + public $bulkUploadObjectTypeIn = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaBulkUploadCategoryData extends KalturaBulkUploadObjectData +{ + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaBulkUploadCategoryEntryData extends KalturaBulkUploadObjectData +{ + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaBulkUploadCategoryUserData extends KalturaBulkUploadObjectData +{ + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaBulkUploadEntryData extends KalturaBulkUploadObjectData +{ + /** + * Selected profile id for all bulk entries + * + * + * @var int + */ + public $conversionProfileId = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaBulkUploadJobData extends KalturaJobData +{ + /** + * + * + * @var string + * @readonly + */ + public $userId = null; + + /** + * The screen name of the user + * + * + * @var string + * @readonly + */ + public $uploadedBy = null; + + /** + * Selected profile id for all bulk entries + * + * + * @var int + * @readonly + */ + public $conversionProfileId = null; + + /** + * Created by the API + * + * + * @var string + * @readonly + */ + public $resultsFileLocalPath = null; + + /** + * Created by the API + * + * + * @var string + * @readonly + */ + public $resultsFileUrl = null; + + /** + * Number of created entries + * + * + * @var int + * @readonly + */ + public $numOfEntries = null; + + /** + * Number of created objects + * + * + * @var int + * @readonly + */ + public $numOfObjects = null; + + /** + * The bulk upload file path + * + * + * @var string + * @readonly + */ + public $filePath = null; + + /** + * Type of object for bulk upload + * + * + * @var KalturaBulkUploadObjectType + * @readonly + */ + public $bulkUploadObjectType = null; + + /** + * Friendly name of the file, used to be recognized later in the logs. + * + * + * @var string + */ + public $fileName = null; + + /** + * Data pertaining to the objects being uploaded + * + * + * @var KalturaBulkUploadObjectData + * @readonly + */ + public $objectData; + + /** + * Type of bulk upload + * + * + * @var KalturaBulkUploadType + * @readonly + */ + public $type = null; + + /** + * Recipients of the email for bulk upload success/failure + * + * + * @var string + */ + public $emailRecipients = null; + + /** + * Number of objects that finished on error status + * + * + * @var int + */ + public $numOfErrorObjects = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaBulkUploadResultCategory extends KalturaBulkUploadResult +{ + /** + * + * + * @var string + */ + public $relativePath = null; + + /** + * + * + * @var string + */ + public $name = null; + + /** + * + * + * @var string + */ + public $referenceId = null; + + /** + * + * + * @var string + */ + public $description = null; + + /** + * + * + * @var string + */ + public $tags = null; + + /** + * + * + * @var int + */ + public $appearInList = null; + + /** + * + * + * @var int + */ + public $privacy = null; + + /** + * + * + * @var int + */ + public $inheritanceType = null; + + /** + * + * + * @var int + */ + public $userJoinPolicy = null; + + /** + * + * + * @var int + */ + public $defaultPermissionLevel = null; + + /** + * + * + * @var string + */ + public $owner = null; + + /** + * + * + * @var int + */ + public $contributionPolicy = null; + + /** + * + * + * @var int + */ + public $partnerSortValue = null; + + /** + * + * + * @var bool + */ + public $moderation = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaBulkUploadResultCategoryEntry extends KalturaBulkUploadResult +{ + /** + * + * + * @var int + */ + public $categoryId = null; + + /** + * + * + * @var string + */ + public $entryId = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaBulkUploadResultCategoryUser extends KalturaBulkUploadResult +{ + /** + * + * + * @var int + */ + public $categoryId = null; + + /** + * + * + * @var string + */ + public $categoryReferenceId = null; + + /** + * + * + * @var string + */ + public $userId = null; + + /** + * + * + * @var int + */ + public $permissionLevel = null; + + /** + * + * + * @var int + */ + public $updateMethod = null; + + /** + * + * + * @var int + */ + public $requiredObjectStatus = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaBulkUploadResultEntry extends KalturaBulkUploadResult +{ + /** + * + * + * @var string + */ + public $entryId = null; + + /** + * + * + * @var string + */ + public $title = null; + + /** + * + * + * @var string + */ + public $description = null; + + /** + * + * + * @var string + */ + public $tags = null; + + /** + * + * + * @var string + */ + public $url = null; + + /** + * + * + * @var string + */ + public $contentType = null; + + /** + * + * + * @var int + */ + public $conversionProfileId = null; + + /** + * + * + * @var int + */ + public $accessControlProfileId = null; + + /** + * + * + * @var string + */ + public $category = null; + + /** + * + * + * @var int + */ + public $scheduleStartDate = null; + + /** + * + * + * @var int + */ + public $scheduleEndDate = null; + + /** + * + * + * @var int + */ + public $entryStatus = null; + + /** + * + * + * @var string + */ + public $thumbnailUrl = null; + + /** + * + * + * @var bool + */ + public $thumbnailSaved = null; + + /** + * + * + * @var string + */ + public $sshPrivateKey = null; + + /** + * + * + * @var string + */ + public $sshPublicKey = null; + + /** + * + * + * @var string + */ + public $sshKeyPassphrase = null; + + /** + * + * + * @var string + */ + public $creatorId = null; + + /** + * + * + * @var string + */ + public $entitledUsersEdit = null; + + /** + * + * + * @var string + */ + public $entitledUsersPublish = null; + + /** + * + * + * @var string + */ + public $ownerId = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaBulkUploadResultUser extends KalturaBulkUploadResult +{ + /** + * + * + * @var string + */ + public $userId = null; + + /** + * + * + * @var string + */ + public $screenName = null; + + /** + * + * + * @var string + */ + public $email = null; + + /** + * + * + * @var string + */ + public $description = null; + + /** + * + * + * @var string + */ + public $tags = null; + + /** + * + * + * @var int + */ + public $dateOfBirth = null; + + /** + * + * + * @var string + */ + public $country = null; + + /** + * + * + * @var string + */ + public $state = null; + + /** + * + * + * @var string + */ + public $city = null; + + /** + * + * + * @var string + */ + public $zip = null; + + /** + * + * + * @var int + */ + public $gender = null; + + /** + * + * + * @var string + */ + public $firstName = null; + + /** + * + * + * @var string + */ + public $lastName = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaBulkUploadUserData extends KalturaBulkUploadObjectData +{ + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaCaptureThumbJobData extends KalturaJobData +{ + /** + * + * + * @var string + */ + public $srcFileSyncLocalPath = null; + + /** + * The translated path as used by the scheduler + * + * + * @var string + */ + public $actualSrcFileSyncLocalPath = null; + + /** + * + * + * @var string + */ + public $srcFileSyncRemoteUrl = null; + + /** + * + * + * @var int + */ + public $thumbParamsOutputId = null; + + /** + * + * + * @var string + */ + public $thumbAssetId = null; + + /** + * + * + * @var string + */ + public $srcAssetId = null; + + /** + * + * + * @var KalturaAssetType + */ + public $srcAssetType = null; + + /** + * + * + * @var string + */ + public $thumbPath = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +abstract class KalturaCategoryBaseFilter extends KalturaFilter +{ + /** + * + * + * @var int + */ + public $idEqual = null; + + /** + * + * + * @var string + */ + public $idIn = null; + + /** + * + * + * @var int + */ + public $parentIdEqual = null; + + /** + * + * + * @var string + */ + public $parentIdIn = null; + + /** + * + * + * @var int + */ + public $depthEqual = null; + + /** + * + * + * @var string + */ + public $fullNameEqual = null; + + /** + * + * + * @var string + */ + public $fullNameStartsWith = null; + + /** + * + * + * @var string + */ + public $fullNameIn = null; + + /** + * + * + * @var string + */ + public $fullIdsEqual = null; + + /** + * + * + * @var string + */ + public $fullIdsStartsWith = null; + + /** + * + * + * @var string + */ + public $fullIdsMatchOr = null; + + /** + * + * + * @var int + */ + public $createdAtGreaterThanOrEqual = null; + + /** + * + * + * @var int + */ + public $createdAtLessThanOrEqual = null; + + /** + * + * + * @var int + */ + public $updatedAtGreaterThanOrEqual = null; + + /** + * + * + * @var int + */ + public $updatedAtLessThanOrEqual = null; + + /** + * + * + * @var string + */ + public $tagsLike = null; + + /** + * + * + * @var string + */ + public $tagsMultiLikeOr = null; + + /** + * + * + * @var string + */ + public $tagsMultiLikeAnd = null; + + /** + * + * + * @var KalturaAppearInListType + */ + public $appearInListEqual = null; + + /** + * + * + * @var KalturaPrivacyType + */ + public $privacyEqual = null; + + /** + * + * + * @var string + */ + public $privacyIn = null; + + /** + * + * + * @var KalturaInheritanceType + */ + public $inheritanceTypeEqual = null; + + /** + * + * + * @var string + */ + public $inheritanceTypeIn = null; + + /** + * + * + * @var string + */ + public $referenceIdEqual = null; + + /** + * + * + * @var KalturaNullableBoolean + */ + public $referenceIdEmpty = null; + + /** + * + * + * @var KalturaContributionPolicyType + */ + public $contributionPolicyEqual = null; + + /** + * + * + * @var int + */ + public $membersCountGreaterThanOrEqual = null; + + /** + * + * + * @var int + */ + public $membersCountLessThanOrEqual = null; + + /** + * + * + * @var int + */ + public $pendingMembersCountGreaterThanOrEqual = null; + + /** + * + * + * @var int + */ + public $pendingMembersCountLessThanOrEqual = null; + + /** + * + * + * @var string + */ + public $privacyContextEqual = null; + + /** + * + * + * @var KalturaCategoryStatus + */ + public $statusEqual = null; + + /** + * + * + * @var string + */ + public $statusIn = null; + + /** + * + * + * @var int + */ + public $inheritedParentIdEqual = null; + + /** + * + * + * @var string + */ + public $inheritedParentIdIn = null; + + /** + * + * + * @var int + */ + public $partnerSortValueGreaterThanOrEqual = null; + + /** + * + * + * @var int + */ + public $partnerSortValueLessThanOrEqual = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaCategoryEntryAdvancedFilter extends KalturaSearchItem +{ + /** + * + * + * @var string + */ + public $categoriesMatchOr = null; + + /** + * + * + * @var string + */ + public $categoryEntryStatusIn = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +abstract class KalturaCategoryEntryBaseFilter extends KalturaFilter +{ + /** + * + * + * @var int + */ + public $categoryIdEqual = null; + + /** + * + * + * @var string + */ + public $categoryIdIn = null; + + /** + * + * + * @var string + */ + public $entryIdEqual = null; + + /** + * + * + * @var string + */ + public $entryIdIn = null; + + /** + * + * + * @var int + */ + public $createdAtGreaterThanOrEqual = null; + + /** + * + * + * @var int + */ + public $createdAtLessThanOrEqual = null; + + /** + * + * + * @var string + */ + public $categoryFullIdsStartsWith = null; + + /** + * + * + * @var KalturaCategoryEntryStatus + */ + public $statusEqual = null; + + /** + * + * + * @var string + */ + public $statusIn = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaCategoryIdentifier extends KalturaObjectIdentifier +{ + /** + * Identifier of the object + * + * + * @var KalturaCategoryIdentifierField + */ + public $identifier = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaCategoryUserAdvancedFilter extends KalturaSearchItem +{ + /** + * + * + * @var string + */ + public $memberIdEq = null; + + /** + * + * + * @var string + */ + public $memberIdIn = null; + + /** + * + * + * @var string + */ + public $memberPermissionsMatchOr = null; + + /** + * + * + * @var string + */ + public $memberPermissionsMatchAnd = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +abstract class KalturaCategoryUserBaseFilter extends KalturaFilter +{ + /** + * + * + * @var int + */ + public $categoryIdEqual = null; + + /** + * + * + * @var string + */ + public $categoryIdIn = null; + + /** + * + * + * @var string + */ + public $userIdEqual = null; + + /** + * + * + * @var string + */ + public $userIdIn = null; + + /** + * + * + * @var KalturaCategoryUserPermissionLevel + */ + public $permissionLevelEqual = null; + + /** + * + * + * @var string + */ + public $permissionLevelIn = null; + + /** + * + * + * @var KalturaCategoryUserStatus + */ + public $statusEqual = null; + + /** + * + * + * @var string + */ + public $statusIn = null; + + /** + * + * + * @var int + */ + public $createdAtGreaterThanOrEqual = null; + + /** + * + * + * @var int + */ + public $createdAtLessThanOrEqual = null; + + /** + * + * + * @var int + */ + public $updatedAtGreaterThanOrEqual = null; + + /** + * + * + * @var int + */ + public $updatedAtLessThanOrEqual = null; + + /** + * + * + * @var KalturaUpdateMethodType + */ + public $updateMethodEqual = null; + + /** + * + * + * @var string + */ + public $updateMethodIn = null; + + /** + * + * + * @var string + */ + public $categoryFullIdsStartsWith = null; + + /** + * + * + * @var string + */ + public $categoryFullIdsEqual = null; + + /** + * + * + * @var string + */ + public $permissionNamesMatchAnd = null; + + /** + * + * + * @var string + */ + public $permissionNamesMatchOr = null; + + /** + * + * + * @var string + */ + public $permissionNamesNotContains = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaClipAttributes extends KalturaOperationAttributes +{ + /** + * Offset in milliseconds + * + * + * @var int + */ + public $offset = null; + + /** + * Duration in milliseconds + * + * + * @var int + */ + public $duration = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaIntegerValue extends KalturaValue +{ + /** + * + * + * @var int + */ + public $value = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +abstract class KalturaCompareCondition extends KalturaCondition +{ + /** + * Value to evaluate against the field and operator + * + * + * @var KalturaIntegerValue + */ + public $value; + + /** + * Comparing operator + * + * + * @var KalturaSearchConditionComparison + */ + public $comparison = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +abstract class KalturaDataCenterContentResource extends KalturaContentResource +{ + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaConcatAttributes extends KalturaOperationAttributes +{ + /** + * The resource to be concatenated + * + * + * @var KalturaDataCenterContentResource + */ + public $resource; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaConcatJobData extends KalturaJobData +{ + /** + * Source files to be concatenated + * + * + * @var array of KalturaString + */ + public $srcFiles; + + /** + * Output file + * + * + * @var string + */ + public $destFilePath = null; + + /** + * Flavor asset to be ingested with the output + * + * + * @var string + */ + public $flavorAssetId = null; + + /** + * Clipping offset in seconds + * + * + * @var float + */ + public $offset = null; + + /** + * Clipping duration in seconds + * + * + * @var float + */ + public $duration = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +abstract class KalturaControlPanelCommandBaseFilter extends KalturaFilter +{ + /** + * + * + * @var int + */ + public $idEqual = null; + + /** + * + * + * @var string + */ + public $idIn = null; + + /** + * + * + * @var int + */ + public $createdAtGreaterThanOrEqual = null; + + /** + * + * + * @var int + */ + public $createdAtLessThanOrEqual = null; + + /** + * + * + * @var int + */ + public $createdByIdEqual = null; + + /** + * + * + * @var KalturaControlPanelCommandType + */ + public $typeEqual = null; + + /** + * + * + * @var string + */ + public $typeIn = null; + + /** + * + * + * @var KalturaControlPanelCommandTargetType + */ + public $targetTypeEqual = null; + + /** + * + * + * @var string + */ + public $targetTypeIn = null; + + /** + * + * + * @var KalturaControlPanelCommandStatus + */ + public $statusEqual = null; + + /** + * + * + * @var string + */ + public $statusIn = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaConvartableJobData extends KalturaJobData +{ + /** + * + * + * @var string + */ + public $srcFileSyncLocalPath = null; + + /** + * The translated path as used by the scheduler + * + * + * @var string + */ + public $actualSrcFileSyncLocalPath = null; + + /** + * + * + * @var string + */ + public $srcFileSyncRemoteUrl = null; + + /** + * + * + * @var array of KalturaSourceFileSyncDescriptor + */ + public $srcFileSyncs; + + /** + * + * + * @var int + */ + public $engineVersion = null; + + /** + * + * + * @var int + */ + public $flavorParamsOutputId = null; + + /** + * + * + * @var KalturaFlavorParamsOutput + */ + public $flavorParamsOutput; + + /** + * + * + * @var int + */ + public $mediaInfoId = null; + + /** + * + * + * @var int + */ + public $currentOperationSet = null; + + /** + * + * + * @var int + */ + public $currentOperationIndex = null; + + /** + * + * + * @var array of KalturaKeyValue + */ + public $pluginData; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +abstract class KalturaConversionProfileAssetParamsBaseFilter extends KalturaFilter +{ + /** + * + * + * @var int + */ + public $conversionProfileIdEqual = null; + + /** + * + * + * @var string + */ + public $conversionProfileIdIn = null; + + /** + * + * + * @var int + */ + public $assetParamsIdEqual = null; + + /** + * + * + * @var string + */ + public $assetParamsIdIn = null; + + /** + * + * + * @var KalturaFlavorReadyBehaviorType + */ + public $readyBehaviorEqual = null; + + /** + * + * + * @var string + */ + public $readyBehaviorIn = null; + + /** + * + * + * @var KalturaAssetParamsOrigin + */ + public $originEqual = null; + + /** + * + * + * @var string + */ + public $originIn = null; + + /** + * + * + * @var string + */ + public $systemNameEqual = null; + + /** + * + * + * @var string + */ + public $systemNameIn = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +abstract class KalturaConversionProfileBaseFilter extends KalturaFilter +{ + /** + * + * + * @var int + */ + public $idEqual = null; + + /** + * + * + * @var string + */ + public $idIn = null; + + /** + * + * + * @var KalturaConversionProfileStatus + */ + public $statusEqual = null; + + /** + * + * + * @var string + */ + public $statusIn = null; + + /** + * + * + * @var KalturaConversionProfileType + */ + public $typeEqual = null; + + /** + * + * + * @var string + */ + public $typeIn = null; + + /** + * + * + * @var string + */ + public $nameEqual = null; + + /** + * + * + * @var string + */ + public $systemNameEqual = null; + + /** + * + * + * @var string + */ + public $systemNameIn = null; + + /** + * + * + * @var string + */ + public $tagsMultiLikeOr = null; + + /** + * + * + * @var string + */ + public $tagsMultiLikeAnd = null; + + /** + * + * + * @var string + */ + public $defaultEntryIdEqual = null; + + /** + * + * + * @var string + */ + public $defaultEntryIdIn = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaConvertLiveSegmentJobData extends KalturaJobData +{ + /** + * Live stream entry id + * + * + * @var string + */ + public $entryId = null; + + /** + * Primary or secondary media server + * + * + * @var KalturaMediaServerIndex + */ + public $mediaServerIndex = null; + + /** + * The index of the file within the entry + * + * + * @var int + */ + public $fileIndex = null; + + /** + * The recorded live media + * + * + * @var string + */ + public $srcFilePath = null; + + /** + * The output file + * + * + * @var string + */ + public $destFilePath = null; + + /** + * Duration of the live entry including all recorded segments including the current + * + * + * @var float + */ + public $endTime = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaConvertProfileJobData extends KalturaJobData +{ + /** + * + * + * @var string + */ + public $inputFileSyncLocalPath = null; + + /** + * The height of last created thumbnail, will be used to comapare if this thumbnail is the best we can have + * + * + * @var int + */ + public $thumbHeight = null; + + /** + * The bit rate of last created thumbnail, will be used to comapare if this thumbnail is the best we can have + * + * + * @var int + */ + public $thumbBitrate = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaCopyPartnerJobData extends KalturaJobData +{ + /** + * Id of the partner to copy from + * + * + * @var int + */ + public $fromPartnerId = null; + + /** + * Id of the partner to copy to + * + * + * @var int + */ + public $toPartnerId = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaCountryRestriction extends KalturaBaseRestriction +{ + /** + * Country restriction type (Allow or deny) + * + * + * @var KalturaCountryRestrictionType + */ + public $countryRestrictionType = null; + + /** + * Comma separated list of country codes to allow to deny + * + * + * @var string + */ + public $countryList = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaDeleteFileJobData extends KalturaJobData +{ + /** + * + * + * @var string + */ + public $localFileSyncPath = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaDeleteJobData extends KalturaJobData +{ + /** + * The filter should return the list of objects that need to be deleted. + * + * + * @var KalturaFilter + */ + public $filter; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaDirectoryRestriction extends KalturaBaseRestriction +{ + /** + * Kaltura directory restriction type + * + * + * @var KalturaDirectoryRestrictionType + */ + public $directoryRestrictionType = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaCategoryUserFilter extends KalturaCategoryUserBaseFilter +{ + /** + * Return the list of categoryUser that are not inherited from parent category - only the direct categoryUsers. + * + * + * @var bool + */ + public $categoryDirectMembers = null; + + /** + * Free text search on user id or screen name + * + * + * @var string + */ + public $freeText = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +abstract class KalturaUserBaseFilter extends KalturaFilter +{ + /** + * + * + * @var int + */ + public $partnerIdEqual = null; + + /** + * + * + * @var string + */ + public $screenNameLike = null; + + /** + * + * + * @var string + */ + public $screenNameStartsWith = null; + + /** + * + * + * @var string + */ + public $emailLike = null; + + /** + * + * + * @var string + */ + public $emailStartsWith = null; + + /** + * + * + * @var string + */ + public $tagsMultiLikeOr = null; + + /** + * + * + * @var string + */ + public $tagsMultiLikeAnd = null; + + /** + * + * + * @var KalturaUserStatus + */ + public $statusEqual = null; + + /** + * + * + * @var string + */ + public $statusIn = null; + + /** + * + * + * @var int + */ + public $createdAtGreaterThanOrEqual = null; + + /** + * + * + * @var int + */ + public $createdAtLessThanOrEqual = null; + + /** + * + * + * @var string + */ + public $firstNameStartsWith = null; + + /** + * + * + * @var string + */ + public $lastNameStartsWith = null; + + /** + * + * + * @var KalturaNullableBoolean + */ + public $isAdminEqual = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaUserFilter extends KalturaUserBaseFilter +{ + /** + * + * + * @var string + */ + public $idOrScreenNameStartsWith = null; + + /** + * + * + * @var string + */ + public $idEqual = null; + + /** + * + * + * @var string + */ + public $idIn = null; + + /** + * + * + * @var KalturaNullableBoolean + */ + public $loginEnabledEqual = null; + + /** + * + * + * @var string + */ + public $roleIdEqual = null; + + /** + * + * + * @var string + */ + public $roleIdsEqual = null; + + /** + * + * + * @var string + */ + public $roleIdsIn = null; + + /** + * + * + * @var string + */ + public $firstNameOrLastNameStartsWith = null; + + /** + * Permission names filter expression + * + * + * @var string + */ + public $permissionNamesMultiLikeOr = null; + + /** + * Permission names filter expression + * + * + * @var string + */ + public $permissionNamesMultiLikeAnd = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaEntryContext extends KalturaContext +{ + /** + * The entry ID in the context of which the playlist should be built + * + * + * @var string + */ + public $entryId = null; + + /** + * Is this a redirected entry followup? + * + * + * @var KalturaNullableBoolean + */ + public $followEntryRedirect = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaEntryContextDataParams extends KalturaAccessControlScope +{ + /** + * Id of the current flavor. + * + * + * @var string + */ + public $flavorAssetId = null; + + /** + * The tags of the flavors that should be used for playback. + * + * + * @var string + */ + public $flavorTags = null; + + /** + * Playback streamer type: RTMP, HTTP, appleHttps, rtsp, sl. + * + * + * @var string + */ + public $streamerType = null; + + /** + * Protocol of the specific media object. + * + * + * @var string + */ + public $mediaProtocol = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaEntryContextDataResult extends KalturaContextDataResult +{ + /** + * + * + * @var bool + */ + public $isSiteRestricted = null; + + /** + * + * + * @var bool + */ + public $isCountryRestricted = null; + + /** + * + * + * @var bool + */ + public $isSessionRestricted = null; + + /** + * + * + * @var bool + */ + public $isIpAddressRestricted = null; + + /** + * + * + * @var bool + */ + public $isUserAgentRestricted = null; + + /** + * + * + * @var int + */ + public $previewLength = null; + + /** + * + * + * @var bool + */ + public $isScheduledNow = null; + + /** + * + * + * @var bool + */ + public $isAdmin = null; + + /** + * http/rtmp/hdnetwork + * + * + * @var string + */ + public $streamerType = null; + + /** + * http/https, rtmp/rtmpe + * + * + * @var string + */ + public $mediaProtocol = null; + + /** + * + * + * @var string + */ + public $storageProfilesXML = null; + + /** + * Array of messages as received from the access control rules that invalidated + * + * + * @var array of KalturaString + */ + public $accessControlMessages; + + /** + * Array of actions as received from the access control rules that invalidated + * + * + * @var array of KalturaRuleAction + */ + public $accessControlActions; + + /** + * Array of allowed flavor assets according to access control limitations and requested tags + * + * + * @var array of KalturaFlavorAsset + */ + public $flavorAssets; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaEntryIdentifier extends KalturaObjectIdentifier +{ + /** + * Identifier of the object + * + * + * @var KalturaEntryIdentifierField + */ + public $identifier = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +abstract class KalturaBooleanField extends KalturaBooleanValue +{ + +} + +/** + * @package Kaltura + * @subpackage Client + */ +abstract class KalturaFileAssetBaseFilter extends KalturaFilter +{ + /** + * + * + * @var int + */ + public $idEqual = null; + + /** + * + * + * @var string + */ + public $idIn = null; + + /** + * + * + * @var int + */ + public $partnerIdEqual = null; + + /** + * + * + * @var KalturaFileAssetObjectType + */ + public $fileAssetObjectTypeEqual = null; + + /** + * + * + * @var string + */ + public $objectIdEqual = null; + + /** + * + * + * @var string + */ + public $objectIdIn = null; + + /** + * + * + * @var int + */ + public $createdAtGreaterThanOrEqual = null; + + /** + * + * + * @var int + */ + public $createdAtLessThanOrEqual = null; + + /** + * + * + * @var int + */ + public $updatedAtGreaterThanOrEqual = null; + + /** + * + * + * @var int + */ + public $updatedAtLessThanOrEqual = null; + + /** + * + * + * @var KalturaFileAssetStatus + */ + public $statusEqual = null; + + /** + * + * + * @var string + */ + public $statusIn = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaFlattenJobData extends KalturaJobData +{ + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaGenericSyndicationFeed extends KalturaBaseSyndicationFeed +{ + /** + * feed description + * + * + * @var string + */ + public $feedDescription = null; + + /** + * feed landing page (i.e publisher website) + * + * + * @var string + */ + public $feedLandingPage = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaGoogleVideoSyndicationFeed extends KalturaBaseSyndicationFeed +{ + /** + * + * + * @var KalturaGoogleSyndicationFeedAdultValues + */ + public $adultContent = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaITunesSyndicationFeed extends KalturaBaseSyndicationFeed +{ + /** + * feed description + * + * + * @var string + */ + public $feedDescription = null; + + /** + * feed language + * + * + * @var string + */ + public $language = null; + + /** + * feed landing page (i.e publisher website) + * + * + * @var string + */ + public $feedLandingPage = null; + + /** + * author/publisher name + * + * + * @var string + */ + public $ownerName = null; + + /** + * publisher email + * + * + * @var string + */ + public $ownerEmail = null; + + /** + * podcast thumbnail + * + * + * @var string + */ + public $feedImageUrl = null; + + /** + * + * + * @var KalturaITunesSyndicationFeedCategories + * @readonly + */ + public $category = null; + + /** + * + * + * @var KalturaITunesSyndicationFeedAdultValues + */ + public $adultContent = null; + + /** + * + * + * @var string + */ + public $feedAuthor = null; + + /** + * true in case you want to enfore the palylist order on the + * + * + * @var KalturaNullableBoolean + */ + public $enforceOrder = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaImportJobData extends KalturaJobData +{ + /** + * + * + * @var string + */ + public $srcFileUrl = null; + + /** + * + * + * @var string + */ + public $destFileLocalPath = null; + + /** + * + * + * @var string + */ + public $flavorAssetId = null; + + /** + * + * + * @var int + */ + public $fileSize = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaIndexAdvancedFilter extends KalturaSearchItem +{ + /** + * + * + * @var int + */ + public $indexIdGreaterThan = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaIndexJobData extends KalturaJobData +{ + /** + * The filter should return the list of objects that need to be reindexed. + * + * + * @var KalturaFilter + */ + public $filter; + + /** + * Indicates the last id that reindexed, used when the batch crached, to re-run from the last crash point. + * + * + * @var int + */ + public $lastIndexId = null; + + /** + * Indicates that the object columns and attributes values should be recalculated before reindexed. + * + * + * @var bool + */ + public $shouldUpdate = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaIpAddressRestriction extends KalturaBaseRestriction +{ + /** + * Ip address restriction type (Allow or deny) + * + * + * @var KalturaIpAddressRestrictionType + */ + public $ipAddressRestrictionType = null; + + /** + * Comma separated list of ip address to allow to deny + * + * + * @var string + */ + public $ipAddressList = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaLimitFlavorsRestriction extends KalturaBaseRestriction +{ + /** + * Limit flavors restriction type (Allow or deny) + * + * + * @var KalturaLimitFlavorsRestrictionType + */ + public $limitFlavorsRestrictionType = null; + + /** + * Comma separated list of flavor params ids to allow to deny + * + * + * @var string + */ + public $flavorParamsIds = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +abstract class KalturaLiveChannelSegmentBaseFilter extends KalturaFilter +{ + /** + * + * + * @var int + */ + public $createdAtGreaterThanOrEqual = null; + + /** + * + * + * @var int + */ + public $createdAtLessThanOrEqual = null; + + /** + * + * + * @var int + */ + public $updatedAtGreaterThanOrEqual = null; + + /** + * + * + * @var int + */ + public $updatedAtLessThanOrEqual = null; + + /** + * + * + * @var KalturaLiveChannelSegmentStatus + */ + public $statusEqual = null; + + /** + * + * + * @var string + */ + public $statusIn = null; + + /** + * + * + * @var string + */ + public $channelIdEqual = null; + + /** + * + * + * @var string + */ + public $channelIdIn = null; + + /** + * + * + * @var float + */ + public $startTimeGreaterThanOrEqual = null; + + /** + * + * + * @var float + */ + public $startTimeLessThanOrEqual = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaMailJobData extends KalturaJobData +{ + /** + * + * + * @var KalturaMailType + */ + public $mailType = null; + + /** + * + * + * @var int + */ + public $mailPriority = null; + + /** + * + * + * @var KalturaMailJobStatus + */ + public $status = null; + + /** + * + * + * @var string + */ + public $recipientName = null; + + /** + * + * + * @var string + */ + public $recipientEmail = null; + + /** + * kuserId + * + * + * @var int + */ + public $recipientId = null; + + /** + * + * + * @var string + */ + public $fromName = null; + + /** + * + * + * @var string + */ + public $fromEmail = null; + + /** + * + * + * @var string + */ + public $bodyParams = null; + + /** + * + * + * @var string + */ + public $subjectParams = null; + + /** + * + * + * @var string + */ + public $templatePath = null; + + /** + * + * + * @var KalturaLanguageCode + */ + public $language = null; + + /** + * + * + * @var int + */ + public $campaignId = null; + + /** + * + * + * @var int + */ + public $minSendDate = null; + + /** + * + * + * @var bool + */ + public $isHtml = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +abstract class KalturaMatchCondition extends KalturaCondition +{ + /** + * + * + * @var array of KalturaStringValue + */ + public $values; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +abstract class KalturaMediaInfoBaseFilter extends KalturaFilter +{ + /** + * + * + * @var string + */ + public $flavorAssetIdEqual = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +abstract class KalturaMediaServerBaseFilter extends KalturaFilter +{ + /** + * + * + * @var int + */ + public $createdAtGreaterThanOrEqual = null; + + /** + * + * + * @var int + */ + public $createdAtLessThanOrEqual = null; + + /** + * + * + * @var int + */ + public $updatedAtGreaterThanOrEqual = null; + + /** + * + * + * @var int + */ + public $updatedAtLessThanOrEqual = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaMoveCategoryEntriesJobData extends KalturaJobData +{ + /** + * Source category id + * + * + * @var int + */ + public $srcCategoryId = null; + + /** + * Destination category id + * + * + * @var int + */ + public $destCategoryId = null; + + /** + * Saves the last category id that its entries moved completely + * In case of crash the batch will restart from that point + * + * + * @var int + */ + public $lastMovedCategoryId = null; + + /** + * Saves the last page index of the child categories filter pager + * In case of crash the batch will restart from that point + * + * + * @var int + */ + public $lastMovedCategoryPageIndex = null; + + /** + * Saves the last page index of the category entries filter pager + * In case of crash the batch will restart from that point + * + * + * @var int + */ + public $lastMovedCategoryEntryPageIndex = null; + + /** + * All entries from all child categories will be moved as well + * + * + * @var bool + */ + public $moveFromChildren = null; + + /** + * Entries won't be deleted from the source entry + * + * + * @var bool + */ + public $copyOnly = null; + + /** + * Destination categories fallback ids + * + * + * @var string + */ + public $destCategoryFullIds = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaNotificationJobData extends KalturaJobData +{ + /** + * + * + * @var string + */ + public $userId = null; + + /** + * + * + * @var KalturaNotificationType + */ + public $type = null; + + /** + * + * + * @var string + */ + public $typeAsString = null; + + /** + * + * + * @var string + */ + public $objectId = null; + + /** + * + * + * @var KalturaNotificationStatus + */ + public $status = null; + + /** + * + * + * @var string + */ + public $data = null; + + /** + * + * + * @var int + */ + public $numberOfAttempts = null; + + /** + * + * + * @var string + */ + public $notificationResult = null; + + /** + * + * + * @var KalturaNotificationObjectType + */ + public $objType = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +abstract class KalturaPartnerBaseFilter extends KalturaFilter +{ + /** + * + * + * @var int + */ + public $idEqual = null; + + /** + * + * + * @var string + */ + public $idIn = null; + + /** + * + * + * @var string + */ + public $idNotIn = null; + + /** + * + * + * @var string + */ + public $nameLike = null; + + /** + * + * + * @var string + */ + public $nameMultiLikeOr = null; + + /** + * + * + * @var string + */ + public $nameMultiLikeAnd = null; + + /** + * + * + * @var string + */ + public $nameEqual = null; + + /** + * + * + * @var KalturaPartnerStatus + */ + public $statusEqual = null; + + /** + * + * + * @var string + */ + public $statusIn = null; + + /** + * + * + * @var int + */ + public $partnerPackageEqual = null; + + /** + * + * + * @var int + */ + public $partnerPackageGreaterThanOrEqual = null; + + /** + * + * + * @var int + */ + public $partnerPackageLessThanOrEqual = null; + + /** + * + * + * @var KalturaPartnerGroupType + */ + public $partnerGroupTypeEqual = null; + + /** + * + * + * @var string + */ + public $partnerNameDescriptionWebsiteAdminNameAdminEmailLike = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +abstract class KalturaPermissionBaseFilter extends KalturaFilter +{ + /** + * + * + * @var int + */ + public $idEqual = null; + + /** + * + * + * @var string + */ + public $idIn = null; + + /** + * + * + * @var KalturaPermissionType + */ + public $typeEqual = null; + + /** + * + * + * @var string + */ + public $typeIn = null; + + /** + * + * + * @var string + */ + public $nameEqual = null; + + /** + * + * + * @var string + */ + public $nameIn = null; + + /** + * + * + * @var string + */ + public $friendlyNameLike = null; + + /** + * + * + * @var string + */ + public $descriptionLike = null; + + /** + * + * + * @var KalturaPermissionStatus + */ + public $statusEqual = null; + + /** + * + * + * @var string + */ + public $statusIn = null; + + /** + * + * + * @var int + */ + public $partnerIdEqual = null; + + /** + * + * + * @var string + */ + public $partnerIdIn = null; + + /** + * + * + * @var string + */ + public $dependsOnPermissionNamesMultiLikeOr = null; + + /** + * + * + * @var string + */ + public $dependsOnPermissionNamesMultiLikeAnd = null; + + /** + * + * + * @var string + */ + public $tagsMultiLikeOr = null; + + /** + * + * + * @var string + */ + public $tagsMultiLikeAnd = null; + + /** + * + * + * @var int + */ + public $createdAtGreaterThanOrEqual = null; + + /** + * + * + * @var int + */ + public $createdAtLessThanOrEqual = null; + + /** + * + * + * @var int + */ + public $updatedAtGreaterThanOrEqual = null; + + /** + * + * + * @var int + */ + public $updatedAtLessThanOrEqual = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +abstract class KalturaPermissionItemBaseFilter extends KalturaFilter +{ + /** + * + * + * @var int + */ + public $idEqual = null; + + /** + * + * + * @var string + */ + public $idIn = null; + + /** + * + * + * @var KalturaPermissionItemType + */ + public $typeEqual = null; + + /** + * + * + * @var string + */ + public $typeIn = null; + + /** + * + * + * @var int + */ + public $partnerIdEqual = null; + + /** + * + * + * @var string + */ + public $partnerIdIn = null; + + /** + * + * + * @var string + */ + public $tagsMultiLikeOr = null; + + /** + * + * + * @var string + */ + public $tagsMultiLikeAnd = null; + + /** + * + * + * @var int + */ + public $createdAtGreaterThanOrEqual = null; + + /** + * + * + * @var int + */ + public $createdAtLessThanOrEqual = null; + + /** + * + * + * @var int + */ + public $updatedAtGreaterThanOrEqual = null; + + /** + * + * + * @var int + */ + public $updatedAtLessThanOrEqual = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaProvisionJobData extends KalturaJobData +{ + /** + * + * + * @var string + */ + public $streamID = null; + + /** + * + * + * @var string + */ + public $backupStreamID = null; + + /** + * + * + * @var string + */ + public $rtmp = null; + + /** + * + * + * @var string + */ + public $encoderIP = null; + + /** + * + * + * @var string + */ + public $backupEncoderIP = null; + + /** + * + * + * @var string + */ + public $encoderPassword = null; + + /** + * + * + * @var string + */ + public $encoderUsername = null; + + /** + * + * + * @var int + */ + public $endDate = null; + + /** + * + * + * @var string + */ + public $returnVal = null; + + /** + * + * + * @var int + */ + public $mediaType = null; + + /** + * + * + * @var string + */ + public $primaryBroadcastingUrl = null; + + /** + * + * + * @var string + */ + public $secondaryBroadcastingUrl = null; + + /** + * + * + * @var string + */ + public $streamName = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +abstract class KalturaReportBaseFilter extends KalturaFilter +{ + /** + * + * + * @var int + */ + public $idEqual = null; + + /** + * + * + * @var string + */ + public $idIn = null; + + /** + * + * + * @var int + */ + public $partnerIdEqual = null; + + /** + * + * + * @var string + */ + public $partnerIdIn = null; + + /** + * + * + * @var string + */ + public $systemNameEqual = null; + + /** + * + * + * @var string + */ + public $systemNameIn = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaReportInputFilter extends KalturaReportInputBaseFilter +{ + /** + * Search keywords to filter objects + * + * + * @var string + */ + public $keywords = null; + + /** + * Search keywords in onjects tags + * + * + * @var bool + */ + public $searchInTags = null; + + /** + * Search keywords in onjects admin tags + * + * + * @var bool + */ + public $searchInAdminTags = null; + + /** + * Search onjects in specified categories + * + * + * @var string + */ + public $categories = null; + + /** + * Time zone offset in minutes + * + * + * @var int + */ + public $timeZoneOffset = null; + + /** + * Aggregated results according to interval + * + * + * @var KalturaReportInterval + */ + public $interval = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaSearchCondition extends KalturaSearchItem +{ + /** + * + * + * @var string + */ + public $field = null; + + /** + * + * + * @var string + */ + public $value = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaSearchOperator extends KalturaSearchItem +{ + /** + * + * + * @var KalturaSearchOperatorType + */ + public $type = null; + + /** + * + * + * @var array of KalturaSearchItem + */ + public $items; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaSessionRestriction extends KalturaBaseRestriction +{ + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaSiteRestriction extends KalturaBaseRestriction +{ + /** + * The site restriction type (allow or deny) + * + * + * @var KalturaSiteRestrictionType + */ + public $siteRestrictionType = null; + + /** + * Comma separated list of sites (domains) to allow or deny + * + * + * @var string + */ + public $siteList = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaStorageAddAction extends KalturaRuleAction +{ + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaStorageJobData extends KalturaJobData +{ + /** + * + * + * @var string + */ + public $serverUrl = null; + + /** + * + * + * @var string + */ + public $serverUsername = null; + + /** + * + * + * @var string + */ + public $serverPassword = null; + + /** + * + * + * @var bool + */ + public $ftpPassiveMode = null; + + /** + * + * + * @var string + */ + public $srcFileSyncLocalPath = null; + + /** + * + * + * @var string + */ + public $srcFileSyncId = null; + + /** + * + * + * @var string + */ + public $destFileSyncStoredPath = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +abstract class KalturaStorageProfileBaseFilter extends KalturaFilter +{ + /** + * + * + * @var int + */ + public $idEqual = null; + + /** + * + * + * @var string + */ + public $idIn = null; + + /** + * + * + * @var int + */ + public $createdAtGreaterThanOrEqual = null; + + /** + * + * + * @var int + */ + public $createdAtLessThanOrEqual = null; + + /** + * + * + * @var int + */ + public $updatedAtGreaterThanOrEqual = null; + + /** + * + * + * @var int + */ + public $updatedAtLessThanOrEqual = null; + + /** + * + * + * @var int + */ + public $partnerIdEqual = null; + + /** + * + * + * @var string + */ + public $partnerIdIn = null; + + /** + * + * + * @var string + */ + public $systemNameEqual = null; + + /** + * + * + * @var string + */ + public $systemNameIn = null; + + /** + * + * + * @var KalturaStorageProfileStatus + */ + public $statusEqual = null; + + /** + * + * + * @var string + */ + public $statusIn = null; + + /** + * + * + * @var KalturaStorageProfileProtocol + */ + public $protocolEqual = null; + + /** + * + * + * @var string + */ + public $protocolIn = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaTubeMogulSyndicationFeed extends KalturaBaseSyndicationFeed +{ + /** + * + * + * @var KalturaTubeMogulSyndicationFeedCategories + * @readonly + */ + public $category = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +abstract class KalturaUiConfBaseFilter extends KalturaFilter +{ + /** + * + * + * @var int + */ + public $idEqual = null; + + /** + * + * + * @var string + */ + public $idIn = null; + + /** + * + * + * @var string + */ + public $nameLike = null; + + /** + * + * + * @var int + */ + public $partnerIdEqual = null; + + /** + * + * + * @var string + */ + public $partnerIdIn = null; + + /** + * + * + * @var KalturaUiConfObjType + */ + public $objTypeEqual = null; + + /** + * + * + * @var string + */ + public $objTypeIn = null; + + /** + * + * + * @var string + */ + public $tagsMultiLikeOr = null; + + /** + * + * + * @var string + */ + public $tagsMultiLikeAnd = null; + + /** + * + * + * @var int + */ + public $createdAtGreaterThanOrEqual = null; + + /** + * + * + * @var int + */ + public $createdAtLessThanOrEqual = null; + + /** + * + * + * @var int + */ + public $updatedAtGreaterThanOrEqual = null; + + /** + * + * + * @var int + */ + public $updatedAtLessThanOrEqual = null; + + /** + * + * + * @var KalturaUiConfCreationMode + */ + public $creationModeEqual = null; + + /** + * + * + * @var string + */ + public $creationModeIn = null; + + /** + * + * + * @var string + */ + public $versionEqual = null; + + /** + * + * + * @var string + */ + public $versionMultiLikeOr = null; + + /** + * + * + * @var string + */ + public $versionMultiLikeAnd = null; + + /** + * + * + * @var string + */ + public $partnerTagsMultiLikeOr = null; + + /** + * + * + * @var string + */ + public $partnerTagsMultiLikeAnd = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +abstract class KalturaUploadTokenBaseFilter extends KalturaFilter +{ + /** + * + * + * @var string + */ + public $idEqual = null; + + /** + * + * + * @var string + */ + public $idIn = null; + + /** + * + * + * @var string + */ + public $userIdEqual = null; + + /** + * + * + * @var KalturaUploadTokenStatus + */ + public $statusEqual = null; + + /** + * + * + * @var string + */ + public $statusIn = null; + + /** + * + * + * @var string + */ + public $fileNameEqual = null; + + /** + * + * + * @var float + */ + public $fileSizeEqual = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaUserAgentRestriction extends KalturaBaseRestriction +{ + /** + * User agent restriction type (Allow or deny) + * + * + * @var KalturaUserAgentRestrictionType + */ + public $userAgentRestrictionType = null; + + /** + * A comma seperated list of user agent regular expressions + * + * + * @var string + */ + public $userAgentRegexList = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +abstract class KalturaUserLoginDataBaseFilter extends KalturaFilter +{ + /** + * + * + * @var string + */ + public $loginEmailEqual = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +abstract class KalturaUserRoleBaseFilter extends KalturaFilter +{ + /** + * + * + * @var int + */ + public $idEqual = null; + + /** + * + * + * @var string + */ + public $idIn = null; + + /** + * + * + * @var string + */ + public $nameEqual = null; + + /** + * + * + * @var string + */ + public $nameIn = null; + + /** + * + * + * @var string + */ + public $systemNameEqual = null; + + /** + * + * + * @var string + */ + public $systemNameIn = null; + + /** + * + * + * @var string + */ + public $descriptionLike = null; + + /** + * + * + * @var KalturaUserRoleStatus + */ + public $statusEqual = null; + + /** + * + * + * @var string + */ + public $statusIn = null; + + /** + * + * + * @var int + */ + public $partnerIdEqual = null; + + /** + * + * + * @var string + */ + public $partnerIdIn = null; + + /** + * + * + * @var string + */ + public $tagsMultiLikeOr = null; + + /** + * + * + * @var string + */ + public $tagsMultiLikeAnd = null; + + /** + * + * + * @var int + */ + public $createdAtGreaterThanOrEqual = null; + + /** + * + * + * @var int + */ + public $createdAtLessThanOrEqual = null; + + /** + * + * + * @var int + */ + public $updatedAtGreaterThanOrEqual = null; + + /** + * + * + * @var int + */ + public $updatedAtLessThanOrEqual = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +abstract class KalturaWidgetBaseFilter extends KalturaFilter +{ + /** + * + * + * @var string + */ + public $idEqual = null; + + /** + * + * + * @var string + */ + public $idIn = null; + + /** + * + * + * @var string + */ + public $sourceWidgetIdEqual = null; + + /** + * + * + * @var string + */ + public $rootWidgetIdEqual = null; + + /** + * + * + * @var int + */ + public $partnerIdEqual = null; + + /** + * + * + * @var string + */ + public $entryIdEqual = null; + + /** + * + * + * @var int + */ + public $uiConfIdEqual = null; + + /** + * + * + * @var int + */ + public $createdAtGreaterThanOrEqual = null; + + /** + * + * + * @var int + */ + public $createdAtLessThanOrEqual = null; + + /** + * + * + * @var int + */ + public $updatedAtGreaterThanOrEqual = null; + + /** + * + * + * @var int + */ + public $updatedAtLessThanOrEqual = null; + + /** + * + * + * @var string + */ + public $partnerDataLike = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaYahooSyndicationFeed extends KalturaBaseSyndicationFeed +{ + /** + * + * + * @var KalturaYahooSyndicationFeedCategories + * @readonly + */ + public $category = null; + + /** + * + * + * @var KalturaYahooSyndicationFeedAdultValues + */ + public $adultContent = null; + + /** + * feed description + * + * + * @var string + */ + public $feedDescription = null; + + /** + * feed landing page (i.e publisher website) + * + * + * @var string + */ + public $feedLandingPage = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaAccessControlFilter extends KalturaAccessControlBaseFilter +{ + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaAccessControlProfileFilter extends KalturaAccessControlProfileBaseFilter +{ + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaAkamaiProvisionJobData extends KalturaProvisionJobData +{ + /** + * + * + * @var string + */ + public $wsdlUsername = null; + + /** + * + * + * @var string + */ + public $wsdlPassword = null; + + /** + * + * + * @var string + */ + public $cpcode = null; + + /** + * + * + * @var string + */ + public $emailId = null; + + /** + * + * + * @var string + */ + public $primaryContact = null; + + /** + * + * + * @var string + */ + public $secondaryContact = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaAkamaiUniversalProvisionJobData extends KalturaProvisionJobData +{ + /** + * + * + * @var int + */ + public $streamId = null; + + /** + * + * + * @var string + */ + public $systemUserName = null; + + /** + * + * + * @var string + */ + public $systemPassword = null; + + /** + * + * + * @var string + */ + public $domainName = null; + + /** + * + * + * @var KalturaDVRStatus + */ + public $dvrEnabled = null; + + /** + * + * + * @var int + */ + public $dvrWindow = null; + + /** + * + * + * @var string + */ + public $primaryContact = null; + + /** + * + * + * @var string + */ + public $secondaryContact = null; + + /** + * + * + * @var KalturaAkamaiUniversalStreamType + */ + public $streamType = null; + + /** + * + * + * @var string + */ + public $notificationEmail = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaAssetFilter extends KalturaAssetBaseFilter +{ + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaAssetParamsFilter extends KalturaAssetParamsBaseFilter +{ + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaAssetResource extends KalturaContentResource +{ + /** + * ID of the source asset + * + * + * @var string + */ + public $assetId = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaBaseSyndicationFeedFilter extends KalturaBaseSyndicationFeedBaseFilter +{ + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaBatchJobFilter extends KalturaBatchJobBaseFilter +{ + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaBulkUploadFilter extends KalturaBulkUploadBaseFilter +{ + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaCategoryEntryFilter extends KalturaCategoryEntryBaseFilter +{ + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaCategoryFilter extends KalturaCategoryBaseFilter +{ + /** + * + * + * @var string + */ + public $freeText = null; + + /** + * + * + * @var string + */ + public $membersIn = null; + + /** + * + * + * @var string + */ + public $nameOrReferenceIdStartsWith = null; + + /** + * + * + * @var string + */ + public $managerEqual = null; + + /** + * + * + * @var string + */ + public $memberEqual = null; + + /** + * + * + * @var string + */ + public $fullNameStartsWithIn = null; + + /** + * not includes the category itself (only sub categories) + * + * + * @var string + */ + public $ancestorIdIn = null; + + /** + * + * + * @var string + */ + public $idOrInheritedParentIdIn = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaControlPanelCommandFilter extends KalturaControlPanelCommandBaseFilter +{ + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaConversionProfileFilter extends KalturaConversionProfileBaseFilter +{ + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaConversionProfileAssetParamsFilter extends KalturaConversionProfileAssetParamsBaseFilter +{ + /** + * + * + * @var KalturaConversionProfileFilter + */ + public $conversionProfileIdFilter; + + /** + * + * + * @var KalturaAssetParamsFilter + */ + public $assetParamsIdFilter; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaConvertCollectionJobData extends KalturaConvartableJobData +{ + /** + * + * + * @var string + */ + public $destDirLocalPath = null; + + /** + * + * + * @var string + */ + public $destDirRemoteUrl = null; + + /** + * + * + * @var string + */ + public $destFileName = null; + + /** + * + * + * @var string + */ + public $inputXmlLocalPath = null; + + /** + * + * + * @var string + */ + public $inputXmlRemoteUrl = null; + + /** + * + * + * @var string + */ + public $commandLinesStr = null; + + /** + * + * + * @var array of KalturaConvertCollectionFlavorData + */ + public $flavors; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaConvertJobData extends KalturaConvartableJobData +{ + /** + * + * + * @var string + */ + public $destFileSyncLocalPath = null; + + /** + * + * + * @var string + */ + public $destFileSyncRemoteUrl = null; + + /** + * + * + * @var string + */ + public $logFileSyncLocalPath = null; + + /** + * + * + * @var string + */ + public $logFileSyncRemoteUrl = null; + + /** + * + * + * @var string + */ + public $flavorAssetId = null; + + /** + * + * + * @var string + */ + public $remoteMediaId = null; + + /** + * + * + * @var string + */ + public $customData = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaCountryCondition extends KalturaMatchCondition +{ + /** + * The ip geo coder engine to be used + * + * + * @var KalturaGeoCoderType + */ + public $geoCoderType = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaEndUserReportInputFilter extends KalturaReportInputFilter +{ + /** + * + * + * @var string + */ + public $application = null; + + /** + * + * + * @var string + */ + public $userIds = null; + + /** + * + * + * @var string + */ + public $playbackContext = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaEntryResource extends KalturaContentResource +{ + /** + * ID of the source entry + * + * + * @var string + */ + public $entryId = null; + + /** + * ID of the source flavor params, set to null to use the source flavor + * + * + * @var int + */ + public $flavorParamsId = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaExtractMediaJobData extends KalturaConvartableJobData +{ + /** + * + * + * @var string + */ + public $flavorAssetId = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +abstract class KalturaIntegerField extends KalturaIntegerValue +{ + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaFieldCompareCondition extends KalturaCompareCondition +{ + /** + * Field to evaluate + * + * + * @var KalturaIntegerField + */ + public $field; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +abstract class KalturaStringField extends KalturaStringValue +{ + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaFieldMatchCondition extends KalturaMatchCondition +{ + /** + * Field to evaluate + * + * + * @var KalturaStringField + */ + public $field; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaFileSyncResource extends KalturaContentResource +{ + /** + * The object type of the file sync object + * + * + * @var int + */ + public $fileSyncObjectType = null; + + /** + * The object sub-type of the file sync object + * + * + * @var int + */ + public $objectSubType = null; + + /** + * The object id of the file sync object + * + * + * @var string + */ + public $objectId = null; + + /** + * The version of the file sync object + * + * + * @var string + */ + public $version = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaGenericXsltSyndicationFeed extends KalturaGenericSyndicationFeed +{ + /** + * + * + * @var string + */ + public $xslt = null; + + /** + * + * + * @var array of KalturaExtendingItemMrssParameter + */ + public $itemXpathsToExtend; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaIpAddressCondition extends KalturaMatchCondition +{ + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaLiveAsset extends KalturaFlavorAsset +{ + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaLiveChannelSegmentFilter extends KalturaLiveChannelSegmentBaseFilter +{ + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaLiveParams extends KalturaFlavorParams +{ + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaMediaFlavorParams extends KalturaFlavorParams +{ + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaMediaInfoFilter extends KalturaMediaInfoBaseFilter +{ + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaMediaServerFilter extends KalturaMediaServerBaseFilter +{ + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaOperationResource extends KalturaContentResource +{ + /** + * Only KalturaEntryResource and KalturaAssetResource are supported + * + * + * @var KalturaContentResource + */ + public $resource; + + /** + * + * + * @var array of KalturaOperationAttributes + */ + public $operationAttributes; + + /** + * ID of alternative asset params to be used instead of the system default flavor params + * + * + * @var int + */ + public $assetParamsId = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaPartnerFilter extends KalturaPartnerBaseFilter +{ + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaPermissionFilter extends KalturaPermissionBaseFilter +{ + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaPermissionItemFilter extends KalturaPermissionItemBaseFilter +{ + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaPostConvertJobData extends KalturaConvartableJobData +{ + /** + * + * + * @var string + */ + public $flavorAssetId = null; + + /** + * Indicates if a thumbnail should be created + * + * + * @var bool + */ + public $createThumb = null; + + /** + * The path of the created thumbnail + * + * + * @var string + */ + public $thumbPath = null; + + /** + * The position of the thumbnail in the media file + * + * + * @var int + */ + public $thumbOffset = null; + + /** + * The height of the movie, will be used to comapare if this thumbnail is the best we can have + * + * + * @var int + */ + public $thumbHeight = null; + + /** + * The bit rate of the movie, will be used to comapare if this thumbnail is the best we can have + * + * + * @var int + */ + public $thumbBitrate = null; + + /** + * + * + * @var string + */ + public $customData = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaPreviewRestriction extends KalturaSessionRestriction +{ + /** + * The preview restriction length + * + * + * @var int + */ + public $previewLength = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +abstract class KalturaRegexCondition extends KalturaMatchCondition +{ + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaRemoteStorageResources extends KalturaContentResource +{ + /** + * Array of remote stoage resources + * + * + * @var array of KalturaRemoteStorageResource + */ + public $resources; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaReportFilter extends KalturaReportBaseFilter +{ + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaSearchComparableCondition extends KalturaSearchCondition +{ + /** + * + * + * @var KalturaSearchConditionComparison + */ + public $comparison = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaSiteCondition extends KalturaMatchCondition +{ + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaSshImportJobData extends KalturaImportJobData +{ + /** + * + * + * @var string + */ + public $privateKey = null; + + /** + * + * + * @var string + */ + public $publicKey = null; + + /** + * + * + * @var string + */ + public $passPhrase = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaStorageDeleteJobData extends KalturaStorageJobData +{ + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaStorageExportJobData extends KalturaStorageJobData +{ + /** + * + * + * @var bool + */ + public $force = null; + + /** + * + * + * @var bool + */ + public $createLink = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaStorageProfileFilter extends KalturaStorageProfileBaseFilter +{ + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaStringResource extends KalturaContentResource +{ + /** + * Textual content + * + * + * @var string + */ + public $content = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaUiConfFilter extends KalturaUiConfBaseFilter +{ + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaUploadTokenFilter extends KalturaUploadTokenBaseFilter +{ + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaUserLoginDataFilter extends KalturaUserLoginDataBaseFilter +{ + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaUserRoleFilter extends KalturaUserRoleBaseFilter +{ + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaWidgetFilter extends KalturaWidgetBaseFilter +{ + +} + +/** + * @package Kaltura + * @subpackage Client + */ +abstract class KalturaAdminUserBaseFilter extends KalturaUserFilter +{ + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaAmazonS3StorageExportJobData extends KalturaStorageExportJobData +{ + /** + * + * + * @var KalturaAmazonS3StorageProfileFilesPermissionLevel + */ + public $filesPermissionInS3 = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +abstract class KalturaAmazonS3StorageProfileBaseFilter extends KalturaStorageProfileFilter +{ + +} + +/** + * @package Kaltura + * @subpackage Client + */ +abstract class KalturaApiActionPermissionItemBaseFilter extends KalturaPermissionItemFilter +{ + +} + +/** + * @package Kaltura + * @subpackage Client + */ +abstract class KalturaApiParameterPermissionItemBaseFilter extends KalturaPermissionItemFilter +{ + +} + +/** + * @package Kaltura + * @subpackage Client + */ +abstract class KalturaAssetParamsOutputBaseFilter extends KalturaAssetParamsFilter +{ + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaBatchJobFilterExt extends KalturaBatchJobFilter +{ + /** + * + * + * @var string + */ + public $jobTypeAndSubTypeIn = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaCountryContextField extends KalturaStringField +{ + /** + * The ip geo coder engine to be used + * + * + * @var KalturaGeoCoderType + */ + public $geoCoderType = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +abstract class KalturaDataEntryBaseFilter extends KalturaBaseEntryFilter +{ + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaEvalBooleanField extends KalturaBooleanField +{ + /** + * PHP code + * + * + * @var string + */ + public $code = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaEvalStringField extends KalturaStringField +{ + /** + * PHP code + * + * + * @var string + */ + public $code = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +abstract class KalturaFlavorAssetBaseFilter extends KalturaAssetFilter +{ + /** + * + * + * @var int + */ + public $flavorParamsIdEqual = null; + + /** + * + * + * @var string + */ + public $flavorParamsIdIn = null; + + /** + * + * + * @var KalturaFlavorAssetStatus + */ + public $statusEqual = null; + + /** + * + * + * @var string + */ + public $statusIn = null; + + /** + * + * + * @var string + */ + public $statusNotIn = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +abstract class KalturaFlavorParamsBaseFilter extends KalturaAssetParamsFilter +{ + /** + * + * + * @var KalturaContainerFormat + */ + public $formatEqual = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +abstract class KalturaGenericSyndicationFeedBaseFilter extends KalturaBaseSyndicationFeedFilter +{ + +} + +/** + * @package Kaltura + * @subpackage Client + */ +abstract class KalturaGoogleVideoSyndicationFeedBaseFilter extends KalturaBaseSyndicationFeedFilter +{ + +} + +/** + * @package Kaltura + * @subpackage Client + */ +abstract class KalturaITunesSyndicationFeedBaseFilter extends KalturaBaseSyndicationFeedFilter +{ + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaIpAddressContextField extends KalturaStringField +{ + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaMediaFlavorParamsOutput extends KalturaFlavorParamsOutput +{ + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaObjectIdField extends KalturaStringField +{ + +} + +/** + * @package Kaltura + * @subpackage Client + */ +abstract class KalturaPlaylistBaseFilter extends KalturaBaseEntryFilter +{ + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaServerFileResource extends KalturaDataCenterContentResource +{ + /** + * Full path to the local file + * + * + * @var string + */ + public $localFilePath = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaSshUrlResource extends KalturaUrlResource +{ + /** + * SSH private key + * + * + * @var string + */ + public $privateKey = null; + + /** + * SSH public key + * + * + * @var string + */ + public $publicKey = null; + + /** + * Passphrase for SSH keys + * + * + * @var string + */ + public $keyPassphrase = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +abstract class KalturaThumbAssetBaseFilter extends KalturaAssetFilter +{ + /** + * + * + * @var int + */ + public $thumbParamsIdEqual = null; + + /** + * + * + * @var string + */ + public $thumbParamsIdIn = null; + + /** + * + * + * @var KalturaThumbAssetStatus + */ + public $statusEqual = null; + + /** + * + * + * @var string + */ + public $statusIn = null; + + /** + * + * + * @var string + */ + public $statusNotIn = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +abstract class KalturaThumbParamsBaseFilter extends KalturaAssetParamsFilter +{ + /** + * + * + * @var KalturaContainerFormat + */ + public $formatEqual = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaTimeContextField extends KalturaIntegerField +{ + /** + * Time offset in seconds since current time + * + * + * @var int + */ + public $offset = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +abstract class KalturaTubeMogulSyndicationFeedBaseFilter extends KalturaBaseSyndicationFeedFilter +{ + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaUploadedFileTokenResource extends KalturaDataCenterContentResource +{ + /** + * Token that returned from upload.upload action or uploadToken.add action. + * + * + * @var string + */ + public $token = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaUserAgentCondition extends KalturaRegexCondition +{ + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaUserAgentContextField extends KalturaStringField +{ + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaUserEmailContextField extends KalturaStringField +{ + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaWebcamTokenResource extends KalturaDataCenterContentResource +{ + /** + * Token that returned from media server such as FMS or red5. + * + * + * @var string + */ + public $token = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +abstract class KalturaYahooSyndicationFeedBaseFilter extends KalturaBaseSyndicationFeedFilter +{ + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaAdminUserFilter extends KalturaAdminUserBaseFilter +{ + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaAmazonS3StorageProfileFilter extends KalturaAmazonS3StorageProfileBaseFilter +{ + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaApiActionPermissionItemFilter extends KalturaApiActionPermissionItemBaseFilter +{ + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaApiParameterPermissionItemFilter extends KalturaApiParameterPermissionItemBaseFilter +{ + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaAssetParamsOutputFilter extends KalturaAssetParamsOutputBaseFilter +{ + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaDataEntryFilter extends KalturaDataEntryBaseFilter +{ + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaFlavorAssetFilter extends KalturaFlavorAssetBaseFilter +{ + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaFlavorParamsFilter extends KalturaFlavorParamsBaseFilter +{ + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaGenericSyndicationFeedFilter extends KalturaGenericSyndicationFeedBaseFilter +{ + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaGoogleVideoSyndicationFeedFilter extends KalturaGoogleVideoSyndicationFeedBaseFilter +{ + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaITunesSyndicationFeedFilter extends KalturaITunesSyndicationFeedBaseFilter +{ + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaPlaylistFilter extends KalturaPlaylistBaseFilter +{ + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaThumbAssetFilter extends KalturaThumbAssetBaseFilter +{ + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaThumbParamsFilter extends KalturaThumbParamsBaseFilter +{ + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaTubeMogulSyndicationFeedFilter extends KalturaTubeMogulSyndicationFeedBaseFilter +{ + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaYahooSyndicationFeedFilter extends KalturaYahooSyndicationFeedBaseFilter +{ + +} + +/** + * @package Kaltura + * @subpackage Client + */ +abstract class KalturaFlavorParamsOutputBaseFilter extends KalturaFlavorParamsFilter +{ + /** + * + * + * @var int + */ + public $flavorParamsIdEqual = null; + + /** + * + * + * @var string + */ + public $flavorParamsVersionEqual = null; + + /** + * + * + * @var string + */ + public $flavorAssetIdEqual = null; + + /** + * + * + * @var string + */ + public $flavorAssetVersionEqual = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +abstract class KalturaGenericXsltSyndicationFeedBaseFilter extends KalturaGenericSyndicationFeedFilter +{ + +} + +/** + * @package Kaltura + * @subpackage Client + */ +abstract class KalturaLiveAssetBaseFilter extends KalturaFlavorAssetFilter +{ + +} + +/** + * @package Kaltura + * @subpackage Client + */ +abstract class KalturaLiveParamsBaseFilter extends KalturaFlavorParamsFilter +{ + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaLiveStreamAdminEntry extends KalturaLiveStreamEntry +{ + +} + +/** + * @package Kaltura + * @subpackage Client + */ +abstract class KalturaMediaFlavorParamsBaseFilter extends KalturaFlavorParamsFilter +{ + +} + +/** + * @package Kaltura + * @subpackage Client + */ +abstract class KalturaMixEntryBaseFilter extends KalturaPlayableEntryFilter +{ + +} + +/** + * @package Kaltura + * @subpackage Client + */ +abstract class KalturaThumbParamsOutputBaseFilter extends KalturaThumbParamsFilter +{ + /** + * + * + * @var int + */ + public $thumbParamsIdEqual = null; + + /** + * + * + * @var string + */ + public $thumbParamsVersionEqual = null; + + /** + * + * + * @var string + */ + public $thumbAssetIdEqual = null; + + /** + * + * + * @var string + */ + public $thumbAssetVersionEqual = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaFlavorParamsOutputFilter extends KalturaFlavorParamsOutputBaseFilter +{ + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaGenericXsltSyndicationFeedFilter extends KalturaGenericXsltSyndicationFeedBaseFilter +{ + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaLiveAssetFilter extends KalturaLiveAssetBaseFilter +{ + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaLiveParamsFilter extends KalturaLiveParamsBaseFilter +{ + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaMediaFlavorParamsFilter extends KalturaMediaFlavorParamsBaseFilter +{ + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaMixEntryFilter extends KalturaMixEntryBaseFilter +{ + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaThumbParamsOutputFilter extends KalturaThumbParamsOutputBaseFilter +{ + +} + +/** + * @package Kaltura + * @subpackage Client + */ +abstract class KalturaLiveEntryBaseFilter extends KalturaMediaEntryFilter +{ + +} + +/** + * @package Kaltura + * @subpackage Client + */ +abstract class KalturaMediaFlavorParamsOutputBaseFilter extends KalturaFlavorParamsOutputFilter +{ + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaLiveEntryFilter extends KalturaLiveEntryBaseFilter +{ + /** + * + * + * @var KalturaNullableBoolean + */ + public $isLive = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaMediaFlavorParamsOutputFilter extends KalturaMediaFlavorParamsOutputBaseFilter +{ + +} + +/** + * @package Kaltura + * @subpackage Client + */ +abstract class KalturaLiveChannelBaseFilter extends KalturaLiveEntryFilter +{ + +} + +/** + * @package Kaltura + * @subpackage Client + */ +abstract class KalturaLiveStreamEntryBaseFilter extends KalturaLiveEntryFilter +{ + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaLiveChannelFilter extends KalturaLiveChannelBaseFilter +{ + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaLiveStreamEntryFilter extends KalturaLiveStreamEntryBaseFilter +{ + +} + +/** + * @package Kaltura + * @subpackage Client + */ +abstract class KalturaLiveStreamAdminEntryBaseFilter extends KalturaLiveStreamEntryFilter +{ + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaLiveStreamAdminEntryFilter extends KalturaLiveStreamAdminEntryBaseFilter +{ + +} + diff --git a/local/kaltura/API/TestCode/DemoVideo.flv b/local/kaltura/API/TestCode/DemoVideo.flv new file mode 100644 index 0000000000000000000000000000000000000000..5e0c8341d21b2ef6bdf406eb4cf7c0d330baf2c0 GIT binary patch literal 512919 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

  • +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 |nwL4y0Tg5I#1)KOdi#El&Kkk| zp?YOO+PBlrl{&gz0XM0!E=5L?Qp_VQzA5-JZm)l3bZOt72#P7SP|~;nj%ixci(mB! z>|1w!1D3fM6aiKe0>X>*?%(7{HWn<8?$A1G;VQX{ZF8zmH}!2gH&=}Pxn5J7=MzCw zPj;4?8}>TQsfVCM6j6i!G(G>zA&7QAuJi1;p^`a*Ft#+9n;#}o(X1o$Hxm;(G_*&d?TTMp#Trd3W-GEjU>7VKe>2Jrj@<|h^rNwrHnU%;`Gizje$m|VK z!HnT?p=8Hwb-`-Av-nO@8{C>5^zvtn7@Aury+^gvDmOhGaIg6;C7!X!2J$Uocd-R> z2uO%<-y#RzRrXi+s-nJ2g5euk>H%u<=Ha=iSwS$Xr#pE~1C$MFofMPzV$Jaz?-L@q zQ7kmbe_4sZ6m)tvP(*Y%qoPm5R3#`G4pAkwQ$bb}2BDaCP-~|v?R4*es14R%yX1AD zIt0Iw4^&|5>PPl62}W~h zNDA6L`}EUsL3R%?Qs^0IOn2v}fv(g`;arr3Ier4&{ z0MnWJd>=C1RJTK-l-V5-U-v_9UNGqsP@aaynY>~J?6Bs0U?K+`m9zCHa<-eu^{m&d zvVRJ=X?c3_%o`ACzW4F2O;!1*5s51WBS{fR#cWrCy02w6zxV#Hit~$&_A#2O^#f z{G+xN$4c>fo!g`$SJWsFuKN?X7xyVe&v}mTzZJ~wyXJDAyBTw(vu91_*51+#ob}as zL#PCJEGrxQTn5jZnN~X`Q#|uye2M`@?ocJX=4Z5Mycd2O#qew?!YLFe9YbpZXOarW zCI|#5NN-lzVD-Sj;fqt{OY2Z+&vjTCDN159N|-|B@%xYUWeD<1AZ2Uj=^+2`%g}Ki z=n|7ui&1a)>fSQACRBYu_=teaYUmV&U??0TqJfEZ%$b*w$Zr&I%QG}-0#Eq?EUazM zGv9>j*kY|-WW!z5b8}9Wh|6zUrzFDGXPQ*Z>aQ&lENFTI51HT^J7Ad21?w4tfsha_ z=TlXl>N%w$fD*|N2#&&_PV4EInD}Cs^K)HVKm`Yrgo)nwddtW)AJ14tgG2VhFX7r| zjcI7v{QA2>G)Lz;6I}oB!k#*AD?;{CEcw1l-T>;dB~xQU^o5rB><(k6I1Wf?YG1E;QM!2~AFUjjw(IC>K!BC`T3=C?_}-H-^g)NqKZzCeu0Dv#m3zCG-t}WMh7uMa^g3E!(<=&y@8a~IpU3En>8co@r5V|Z4V1Y z(mc|fVWIii7>sVw*(?K#j(&p1wFwV3-@*#B%ccWK-FypW0&oO=>5ngvebTWRbP(dq z=B01Vs9|3&vhzdAP3x$-xPqc8)3{E{1jEK#?ri%cKz+IzUD;kB2lHK*r@U`RO7)~B zG!2-Dc$Bk6!{&CcHz@Ziv@QGs;Ljf&djGx=DkI`9PR3#}O`$+LY9*vU`UHKXtHlbF zm$*~4>iCuU5Ntzw=Vv96M3+$!`&iFP~{gm>|JaOu~f1xK0PVO zk7+aLf@*V6@F7X4Nq0ym z`LMZbeWy90r>ZwqBXh#ytnJ>UD2=)R9KE$}dE+^DIrk2y1dpyXgbZq1WNh38i;JZ` ztwim9R^HUVCYk>z;=v&}q7AlFYM^CZ9cx9ak+9;{cy<`;AcuKUcdYdY)extYI>cv? zb+m^25IbN}!R)A+g!(fWS98E=qe%;T=ZfH9?xBKG0Wdc3USHUhQN8x$IKORc=W;U% zatJEm9`Ae`by0s}DJZy46gYvK9bh^${HT}d6rYO9jXuyQn>~+P*sD~@!+=2RCYpw5 zbztKlYAnuvK@Lt+xRjy9Byu`6)8qV-|M)OrXJpckhiTQ<1wmNBhx5=t%~0G**z6{x z44FuKQ_XOxG
    + +
    '; + + return $html; + } + + /** + * Generate the HTML for the course search textbox + * + * @return string The HTML for the coruse search textbox + */ + public function render_course_search() { + global $PAGE; + + $jsmodule = array( + 'name' => 'local_kaltura', + 'fullpath' => '/local/kaltura/js/kaltura.js' + ); + + $PAGE->requires->js_init_call('M.local_kaltura.search_course', array(), true, $jsmodule); + + $html = '
    + + + + +
    '; + + return $html; + } + + /** + * Render the Moodle courses + * + * @param array $courses An array of courses + * @param string $query The course being searched for + * @param string $action The action being performed: search or recent course listing + * @return mixed The HTML generated courses on success; false, otherwise + */ + public function render_courses($courses, $query = null, $action) { + $html = ''; + $report_url = get_config(KALTURA_PLUGIN_NAME, 'report_uri'); + + if (!is_array($courses)) { + return $html; + } + + if (count($courses) == 0 && $action == 'search') { + return get_string('no_course_result', 'local_kaltura', $query); + } + + if (count($courses) == 0 && $action == 'recent_courses') { + return get_string('no_recent_course', 'local_kaltura'); + } + + if ($action == 'search') { + $html .= '

    '.get_string('found_course', 'local_kaltura', count($courses)).'

    '; + } + + if ($action == 'recent_courses') { + $html .= '

    '.get_string('recent_course_view', 'local_kaltura').'

    '; + } + + foreach ($courses as $course) { + $session = local_kaltura_generate_weak_kaltura_session($course->id, $course->fullname); + if (empty($session)) { + return false; + } + if (empty($course->shortname)) { + $html .= "".$course->fullname."
    "; + } else { + $html .= "".$course->fullname."".' ('.$course->shortname.')'."
    "; + } + } + + return $html; + } + +} diff --git a/local/kaltura/service.php b/local/kaltura/service.php new file mode 100644 index 0000000000000..e5afcdfd684c9 --- /dev/null +++ b/local/kaltura/service.php @@ -0,0 +1,101 @@ +. + +/** + * Kaltura LTI service script used receive data sent from the Kaltura content provider. + * + * @package local_kaltura + * @author Remote-Learner.net Inc + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + * @copyright (C) 2014 Remote Learner.net Inc http://www.remote-learner.net + */ + +require_once(dirname(__FILE__).'/../../config.php'); +require_once($CFG->dirroot.'/local/kaltura/locallib.php'); + +require_login(); + +global $PAGE; + +$url = required_param('url', PARAM_URL); +$width = required_param('width', PARAM_INT); +$height = required_param('height', PARAM_INT); +$entryid = required_param('entry_id', PARAM_TEXT); +$title = required_param('title', PARAM_TEXT); +$thumbnailurl = optional_param('thumbnailUrl', '', PARAM_URL); +$duration = optional_param('duration', '', PARAM_TEXT); +$description = optional_param('description', '', PARAM_TEXT); +$createdat = optional_param('createdAt', '', PARAM_TEXT); +$owner = optional_param('owner', '', PARAM_TEXT); +$tags = optional_param('tags', '', PARAM_TEXT); +$showtitle = optional_param('showTitle', '', PARAM_TEXT); +$showdescription = optional_param('showDescription', '', PARAM_TEXT); +$showtags = optional_param('showTags', '', PARAM_TEXT); +$showdescription = optional_param('showDuration', '', PARAM_TEXT); +$showowner = optional_param('showOwner', '', PARAM_TEXT); +$player = optional_param('player', '', PARAM_TEXT); +$size = optional_param('size', '', PARAM_TEXT); + +$serviceurl = new moodle_url('/local/kaltura/service.php'); + +// Log the request. +$enablelogging = get_config(KALTURA_PLUGIN_NAME, 'enable_logging'); +if (!empty($enablelogging)) { + $param = array( + 'url' => $url, + 'width' => $width, + 'height' => $height, + 'entryid' => $entryid, + '$title' => $title + ); + local_kaltura_log_data(KAF_BROWSE_EMBED_MODULE, $serviceurl->out(), $param, false); +} + +// Create a metadata object and serialize it. +$metadata = new stdClass(); +$metadata->url = $url; +$metadata->width = $width; +$metadata->height = $height; +$metadata->entryid = $entryid; +$metadata->title = $title; +$metadata->thumbnailurl = $thumbnailurl; +$metadata->duration = $duration; +$metadata->description = $description; +$metadata->createdat = $createdat; +$metadata->owner = $owner; +$metadata->tags = $tags; +$metadata->showtitle = $showtitle; +$metadata->showdescription = $showdescription; +$metadata->showowner = $showowner; +$metadata->player = $player; +$metadata->size = $size; + +$metadata = local_kaltura_encode_object_for_storage($metadata); + +$PAGE->set_url($serviceurl); +$PAGE->set_context(context_system::instance()); +$params = array( + 'iframeurl' => urlencode($url), + 'width' => $width, + 'height' => $height, + 'entryid' => $entryid, + 'title' => $title, + 'metadata' => $metadata, +); +$PAGE->requires->yui_module('moodle-local_kaltura-ltiservice', 'M.local_kaltura.init', array($params)); + +echo $OUTPUT->header(); +echo $OUTPUT->footer(); \ No newline at end of file diff --git a/local/kaltura/settings.php b/local/kaltura/settings.php new file mode 100644 index 0000000000000..3928930838cc2 --- /dev/null +++ b/local/kaltura/settings.php @@ -0,0 +1,95 @@ +. + +/** + * Kaltura config settings script. + * + * @package local_kaltura + * @author Remote-Learner.net Inc + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + * @copyright (C) 2014 Remote Learner.net Inc http://www.remote-learner.net + */ + +// It must be included from a Moodle page. +if (!defined('MOODLE_INTERNAL')) { + die('Direct access to this script is forbidden.'); +} + +require_once($CFG->dirroot.'/local/kaltura/locallib.php'); + +if ($hassiteconfig) { + + // Add local plug-in configuration settings link to the navigation block. + $settings = new admin_settingpage('local_kaltura', get_string('pluginname', 'local_kaltura')); + $ADMIN->add('localplugins', $settings); + + $configsettings = get_config(KALTURA_PLUGIN_NAME); + $missinginfo = get_string('missing_required_info', 'local_kaltura'); + $message = ''; + + if (isset($configsettings->kaf_uri) && !empty($configsettings->kaf_uri)) { + $url = local_kaltura_add_protocol_to_url($configsettings->kaf_uri); + if (empty($url)) { + $message = get_string('invalid_url', 'local_kaltura'); + } else { + $message = $url.'/admin'; + $message = html_writer::tag('a', $message, array('href' => $message)); + $message = html_writer::tag('center', $message); + } + } + + if (empty($configsettings->partner_id) || empty($configsettings->adminsecret)) { + $message .= html_writer::empty_tag('br'); + $message .= html_writer::tag('center', $missinginfo); + } + + // Pull the Kaltura repository settings (if exists). + $kalrepoconfig = get_config(KALTURA_REPO_NAME); + $repoprofileid = (!empty($kalrepoconfig) && !empty($kalrepoconfig->metadata_profile_id)) ? $kalrepoconfig->metadata_profile_id : ''; + + $adminsetting = new admin_setting_heading('kaf_url_heading', get_string('kaf_configuration_hdr', 'local_kaltura'), $message); + $adminsetting->plugin = KALTURA_PLUGIN_NAME; + $settings->add($adminsetting); + + $adminsetting = new admin_setting_configtext('kaf_uri', get_string('kaf_uri', 'local_kaltura'), get_string('kaf_uri_desc', 'local_kaltura'), '', PARAM_URL); + $adminsetting->plugin = KALTURA_PLUGIN_NAME; + $settings->add($adminsetting); + + $adminsetting = new admin_setting_configtext('uri', get_string('server_uri', 'local_kaltura'), get_string('server_uri_desc', 'local_kaltura'), KALTURA_DEFAULT_URI, PARAM_URL); + $adminsetting->plugin = KALTURA_PLUGIN_NAME; + $settings->add($adminsetting); + + $adminsetting = new admin_setting_configtext('partner_id', get_string('partner_id', 'local_kaltura'), get_string('partner_id_desc', 'local_kaltura'), '', PARAM_INT); + $adminsetting->plugin = KALTURA_PLUGIN_NAME; + $settings->add($adminsetting); + + $adminsetting = new admin_setting_configtext('adminsecret', get_string('admin_secret', 'local_kaltura'), get_string('admin_secret_desc', 'local_kaltura'), '', PARAM_ALPHANUM); + $adminsetting->plugin = KALTURA_PLUGIN_NAME; + $settings->add($adminsetting); + + $url = new moodle_url('/local/kaltura/download_log.php'); + $adminsetting = new admin_setting_configcheckbox('enable_logging', get_string('trace_log', 'local_kaltura'), get_string('trace_log_desc', 'local_kaltura', $url->out()), 0); + $adminsetting->plugin = KALTURA_PLUGIN_NAME; + $settings->add($adminsetting); + + if (isset($configsettings->migration_yes) && $configsettings->migration_yes == 1) { + $url = new moodle_url('/local/kaltura/migration.php'); + + $adminsetting = new admin_setting_heading('migration_url_heading', get_string('migration_notice', 'local_kaltura', $url->out()), ''); + $adminsetting->plugin = KALTURA_PLUGIN_NAME; + $settings->add($adminsetting); + } +} diff --git a/local/kaltura/styles.css b/local/kaltura/styles.css new file mode 100644 index 0000000000000..588bf360a6ddb --- /dev/null +++ b/local/kaltura/styles.css @@ -0,0 +1,10 @@ +iframe#contentframe { + border-style: none; +} + +#panelcontentframecontainer { + overflow: scroll; + -webkit-overflow-scrolling: touch; + height: 100%; + width: 100%; +} diff --git a/local/kaltura/tests/locallib_test.php b/local/kaltura/tests/locallib_test.php new file mode 100644 index 0000000000000..d2bfaa04a79e9 --- /dev/null +++ b/local/kaltura/tests/locallib_test.php @@ -0,0 +1,1293 @@ +. + +/** + * Kaltura local library phpunit tests. + * + * @package local_kaltura + * @author Remote-Learner.net Inc + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + * @copyright (C) 2014 Remote Learner.net Inc http://www.remote-learner.net + */ + +defined('MOODLE_INTERNAL') || die(); + +global $CFG; +require_once($CFG->dirroot.'/local/kaltura/locallib.php'); +require_once($CFG->dirroot.'/local/kaltura/API/KalturaTypes.php'); + +/** + * @group local_kaltura + */ +class local_kaltura_locallib_testcase extends advanced_testcase { + /** + * A Dataprovider method, providing invalid data. + */ + public function mymedia_test_required_param_fail() { + $data = array( + array( + array( + // 'id' => 1, + 'title' => 'title', + 'width' => 100, + 'height' => 100, + 'module' => KAF_MYMEDIA_MODULE, + 'course' => new stdClass(), + 'cmid' => 0, + 'custom_publishdata' => '', + ) + ), + array( + array( + 'id' => 1, + // 'title' => 'title', + 'width' => 100, + 'height' => 100, + 'module' => KAF_MYMEDIA_MODULE, + 'course' => new stdClass(), + 'cmid' => 0, + 'custom_publishdata' => '', + ) + ), + array( + array( + 'id' => 1, + 'title' => 'title', + // 'width' => 100, + 'height' => 100, + 'module' => KAF_MYMEDIA_MODULE, + 'course' => new stdClass(), + 'cmid' => 0, + 'custom_publishdata' => '', + ), + ), + array( + array( + 'id' => 1, + 'title' => 'title', + 'width' => 100, + // 'height' => 100, + 'module' => KAF_MYMEDIA_MODULE, + 'course' => new stdClass(), + 'cmid' => 0, + 'custom_publishdata' => '', + ) + ), + array( + array( + 'id' => 1, + 'title' => 'title', + 'width' => 100, + 'height' => 100, + // 'module' => '', + 'course' => new stdClass(), + 'cmid' => 0, + 'custom_publishdata' => '', + ) + ), + array( + array( + 'id' => 1, + 'title' => 'title', + 'width' => 100, + 'height' => 100, + 'module' => KAF_MYMEDIA_MODULE, + // 'course' => new stdClass(), + 'cmid' => 0, + 'custom_publishdata' => '', + ) + ), + array( + array( + 'id' => 1, + 'title' => 'title', + 'width' => 100, + 'height' => 100, + 'module' => KAF_MYMEDIA_MODULE, + 'course' => new stdClass(), + // 'cmid' => 0, + 'custom_publishdata' => '', + ) + ), + array( + array( + 'id' => 1, + 'title' => 'title', + 'width' => 100, + 'height' => 100, + 'module' => KAF_MYMEDIA_MODULE, + 'course' => new stdClass(), + 'cmid' => 0, + // 'custom_publishdata' => '', + ) + ), + array( + array( + // Non-numeric. + 'id' => 'string', + 'title' => 'title', + 'width' => 100, + 'height' => 100, + 'module' => KAF_MYMEDIA_MODULE, + 'course' => new stdClass(), + 'cmid' => 0, + 'custom_publishdata' => '', + ) + ), + array( + array( + 'id' => 1, + 'title' => 'title', + // Non-numeric. + 'width' => 'string', + 'height' => 100, + 'module' => KAF_MYMEDIA_MODULE, + 'course' => new stdClass(), + 'cmid' => 0, + 'custom_publishdata' => '', + ) + ), + array( + array( + 'id' => 1, + 'title' => 'title', + 'width' => 100, + // Non-numeric. + 'height' => 'string', + 'module' => KAF_MYMEDIA_MODULE, + 'course' => new stdClass(), + 'cmid' => 0, + 'custom_publishdata' => '', + ) + ), + array( + array( + 'id' => 1, + 'title' => 'title', + 'width' => 100, + 'height' => 100, + 'module' => KAF_MYMEDIA_MODULE, + // Not an object. + 'course' => 'string', + 'cmid' => 0, + 'custom_publishdata' => '', + ) + ), + array( + array( + 'id' => 1, + 'title' => 'title', + 'width' => 100, + 'height' => 100, + 'module' => KAF_MYMEDIA_MODULE, + 'course' => new stdClass(), + // Non-numeric. + 'cmid' => 'string', + 'custom_publishdata' => '', + ) + ), + ); + return $data; + } + + /** + * This function tests whether the parameters contain all required fields. + * @param array $data An array of parameters that are invalid. + * @dataProvider mymedia_test_required_param_fail + */ + public function test_local_kaltura_validate_mymedia_required_params_fail($data) { + $this->resetAfterTest(true); + $result = local_kaltura_validate_mymedia_required_params($data); + $this->assertFalse($result); + } + + /** + * A Dataprovider method, providing invalid data. + */ + public function mediagallery_test_required_param_fail() { + $data = array( + array( + array( + // 'id' => 1, + 'title' => 'title', + 'width' => 100, + 'height' => 100, + 'module' => KAF_MEDIAGALLERY_MODULE, + 'course' => new stdClass(), + 'cmid' => 0, + 'custom_publishdata' => '', + ) + ), + array( + array( + 'id' => 1, + // 'title' => 'title', + 'width' => 100, + 'height' => 100, + 'module' => KAF_MEDIAGALLERY_MODULE, + 'course' => new stdClass(), + 'cmid' => 0, + 'custom_publishdata' => '', + ) + ), + array( + array( + 'id' => 1, + 'title' => 'title', + // 'width' => 100, + 'height' => 100, + 'module' => KAF_MEDIAGALLERY_MODULE, + 'course' => new stdClass(), + 'cmid' => 0, + 'custom_publishdata' => '', + ), + ), + array( + array( + 'id' => 1, + 'title' => 'title', + 'width' => 100, + // 'height' => 100, + 'module' => KAF_MEDIAGALLERY_MODULE, + 'course' => new stdClass(), + 'cmid' => 0, + 'custom_publishdata' => '', + ) + ), + array( + array( + 'id' => 1, + 'title' => 'title', + 'width' => 100, + 'height' => 100, + // 'module' => '', + 'course' => new stdClass(), + 'cmid' => 0, + 'custom_publishdata' => '', + ) + ), + array( + array( + 'id' => 1, + 'title' => 'title', + 'width' => 100, + 'height' => 100, + 'module' => KAF_MEDIAGALLERY_MODULE, + // 'course' => new stdClass(), + 'cmid' => 0, + 'custom_publishdata' => '', + ) + ), + array( + array( + 'id' => 1, + 'title' => 'title', + 'width' => 100, + 'height' => 100, + 'module' => KAF_MEDIAGALLERY_MODULE, + 'course' => new stdClass(), + // 'cmid' => 0, + 'custom_publishdata' => '', + ) + ), + array( + array( + 'id' => 1, + 'title' => 'title', + 'width' => 100, + 'height' => 100, + 'module' => KAF_MEDIAGALLERY_MODULE, + 'course' => new stdClass(), + 'cmid' => 0, + // 'custom_publishdata' => '', + ) + ), + array( + array( + // Non-numeric. + 'id' => 'string', + 'title' => 'title', + 'width' => 100, + 'height' => 100, + 'module' => KAF_MEDIAGALLERY_MODULE, + 'course' => new stdClass(), + 'cmid' => 0, + 'custom_publishdata' => '', + ) + ), + array( + array( + 'id' => 1, + 'title' => 'title', + // Non-numeric. + 'width' => 'string', + 'height' => 100, + 'module' => KAF_MEDIAGALLERY_MODULE, + 'course' => new stdClass(), + 'cmid' => 0, + 'custom_publishdata' => '', + ) + ), + array( + array( + 'id' => 1, + 'title' => 'title', + 'width' => 100, + // Non-numeric. + 'height' => 'string', + 'module' => KAF_MEDIAGALLERY_MODULE, + 'course' => new stdClass(), + 'cmid' => 0, + 'custom_publishdata' => '', + ) + ), + array( + array( + 'id' => 1, + 'title' => 'title', + 'width' => 100, + 'height' => 100, + 'module' => KAF_MEDIAGALLERY_MODULE, + // Not an object. + 'course' => 'string', + 'cmid' => 0, + 'custom_publishdata' => '', + ) + ), + array( + array( + 'id' => 1, + 'title' => 'title', + 'width' => 100, + 'height' => 100, + 'module' => KAF_MEDIAGALLERY_MODULE, + 'course' => new stdClass(), + // Non-numeric. + 'cmid' => 'string', + 'custom_publishdata' => '', + ) + ), + ); + return $data; + } + + /** + * This function tests whether the parameters contain all required fields. + * @param array $data An array of parameters that are invalid. + * @dataProvider mediagallery_test_required_param_fail + */ + public function test_local_kaltura_validate_coursegallery_required_params_fail($data) { + $this->resetAfterTest(true); + $result = local_kaltura_validate_mediagallery_required_params($data); + $this->assertFalse($result); + } + + /** + * This function tests whether the parameters contain all required fields. + */ + public function test_local_kaltura_validate_coursegallery_required_params() { + $this->resetAfterTest(true); + $data = array( + 'id' => 1, + 'title' => 'title', + 'width' => 100, + 'height' => 100, + 'module' => KAF_MEDIAGALLERY_MODULE, + 'course' => new stdClass(), + 'cmid' => 0, + 'custom_publishdata' => '' + ); + + $result = local_kaltura_validate_mediagallery_required_params($data); + $this->assertTrue($result); + } + + /** + * A Dataprovider method, providing invalid data. + */ + public function browseembed_test_required_param_fail() { + $data = array( + array( + array( + // 'id' => 1, + 'title' => 'title', + 'width' => 100, + 'height' => 100, + 'module' => KAF_BROWSE_EMBED_MODULE, + 'course' => new stdClass(), + 'cmid' => 0, + 'custom_publishdata' => '', + ) + ), + array( + array( + 'id' => 1, + // 'title' => 'title', + 'width' => 100, + 'height' => 100, + 'module' => KAF_BROWSE_EMBED_MODULE, + 'course' => new stdClass(), + 'cmid' => 0, + 'custom_publishdata' => '', + ) + ), + array( + array( + 'id' => 1, + 'title' => 'title', + // 'width' => 100, + 'height' => 100, + 'module' => KAF_BROWSE_EMBED_MODULE, + 'course' => new stdClass(), + 'cmid' => 0, + 'custom_publishdata' => '', + ), + ), + array( + array( + 'id' => 1, + 'title' => 'title', + 'width' => 100, + // 'height' => 100, + 'module' => KAF_BROWSE_EMBED_MODULE, + 'course' => new stdClass(), + 'cmid' => 0, + 'custom_publishdata' => '', + ) + ), + array( + array( + 'id' => 1, + 'title' => 'title', + 'width' => 100, + 'height' => 100, + // 'module' => '', + 'course' => new stdClass(), + 'cmid' => 0, + 'custom_publishdata' => '', + ) + ), + array( + array( + 'id' => 1, + 'title' => 'title', + 'width' => 100, + 'height' => 100, + 'module' => KAF_BROWSE_EMBED_MODULE, + // 'course' => new stdClass(), + 'cmid' => 0, + 'custom_publishdata' => '', + ) + ), + array( + array( + 'id' => 1, + 'title' => 'title', + 'width' => 100, + 'height' => 100, + 'module' => KAF_BROWSE_EMBED_MODULE, + 'course' => new stdClass(), + // 'cmid' => 0, + 'custom_publishdata' => '', + ) + ), + array( + array( + 'id' => 1, + 'title' => 'title', + 'width' => 100, + 'height' => 100, + 'module' => KAF_BROWSE_EMBED_MODULE, + 'course' => new stdClass(), + 'cmid' => 0, + // 'custom_publishdata' => '', + ) + ), + array( + array( + // Non-numeric. + 'id' => 'string', + 'title' => 'title', + 'width' => 100, + 'height' => 100, + 'module' => KAF_BROWSE_EMBED_MODULE, + 'course' => new stdClass(), + 'cmid' => 0, + 'custom_publishdata' => '', + ) + ), + array( + array( + 'id' => 1, + 'title' => 'title', + // Non-numeric. + 'width' => 'string', + 'height' => 100, + 'module' => KAF_BROWSE_EMBED_MODULE, + 'course' => new stdClass(), + 'cmid' => 0, + 'custom_publishdata' => '', + ) + ), + array( + array( + 'id' => 1, + 'title' => 'title', + 'width' => 100, + // Non-numeric. + 'height' => 'string', + 'module' => KAF_BROWSE_EMBED_MODULE, + 'course' => new stdClass(), + 'cmid' => 0, + 'custom_publishdata' => '', + ) + ), + array( + array( + 'id' => 1, + 'title' => 'title', + 'width' => 100, + 'height' => 100, + 'module' => KAF_BROWSE_EMBED_MODULE, + // Not an object. + 'course' => 'string', + 'cmid' => 0, + 'custom_publishdata' => '', + ) + ), + array( + array( + 'id' => 1, + 'title' => 'title', + 'width' => 100, + 'height' => 100, + 'module' => KAF_BROWSE_EMBED_MODULE, + 'course' => new stdClass(), + // Non-numeric. + 'cmid' => 'string', + 'custom_publishdata' => '', + ) + ), + ); + return $data; + } + + /** + * This function tests whether the parameters contain all required fields. + * @param array $data An array of parameters that are invalid. + * @dataProvider browseembed_test_required_param_fail + */ + public function test_local_kaltura_validate_browseembed_required_params_fail($data) { + $result = local_kaltura_validate_browseembed_required_params($data); + $this->assertFalse($result); + } + + /** + * This function tests whether the parameters contain all required fields. + */ + public function test_local_kaltura_validate_browseembed_required_params() { + $data = array( + 'id' => 1, + 'title' => 'title', + 'width' => 100, + 'height' => 100, + 'module' => KAF_BROWSE_EMBED_MODULE, + 'course' => new stdClass(), + 'cmid' => 0, + 'custom_publishdata' => '' + ); + + $result = local_kaltura_validate_browseembed_required_params($data); + $this->assertTrue($result); + } + + /** + * This function tests the return values for @see local_kaltura_get_lti_launch_container(). + */ + public function test_local_kaltura_get_lti_launch_container() { + global $CFG; + + $this->resetAfterTest(true); + $result = local_kaltura_get_lti_launch_container(true); + $this->assertEquals(LTI_LAUNCH_CONTAINER_EMBED, $result); + + $result = local_kaltura_get_lti_launch_container(false); + $this->assertEquals(LTI_LAUNCH_CONTAINER_EMBED_NO_BLOCKS, $result); + } + + /** + * Data provider for different KAF service names. + */ + public function module_name_test_fail() { + $data = array( + array('nothing'), + array(''), + array(1234) + ); + return $data; + } + + /** + * Test validating available KAF services. + * @param array $data An array of parameters that are invalid. + * @dataProvider module_name_test_fail + */ + public function test_local_kaltura_validate_kaf_module_request_fail($data) { + $this->resetAfterTest(true); + $result = local_kaltura_validate_kaf_module_request($data); + $this->assertFalse($result); + } + + /** + * Data provider for different KAF service names. + */ + public function module_name_test() { + $data = array( + array('mymedia'), + array('coursegallery'), + ); + return $data; + } + + /** + * Test validating available KAF services. + * @param array $data An array of parameters that is valid. + * @dataProvider module_name_test + */ + public function test_local_kaltura_validate_kaf_module_request($data) { + $this->resetAfterTest(true); + $result = local_kaltura_validate_kaf_module_request($data); + $this->assertTrue($result); + } + + /** + * Test that the correct end point is returned. + */ + public function test_local_kaltura_get_endpoint() { + $this->resetAfterTest(true); + $result = local_kaltura_get_endpoint(KAF_MYMEDIA_MODULE); + $this->assertEquals(KAF_MYMEDIA_ENDPOINT, $result); + $result = local_kaltura_get_endpoint(KAF_MEDIAGALLERY_MODULE); + $this->assertEquals(KAF_MEDIAGALLERY_ENDPOINT, $result); + $result = local_kaltura_get_endpoint(KAF_BROWSE_EMBED_MODULE); + $this->assertEquals(KAF_BROWSE_EMBED_ENDPOINT, $result); + } + + /** + * This functions tests properties of the mod_lti object returned by local_kaltura_format_lti_instance_object(). + */ + public function test_local_kaltura_format_lti_instance_object() { + $this->resetAfterTest(true); + + set_config('partner_id', 12345, 'local_kaltura'); + set_config('adminsecret', 54321, 'local_kaltura'); + set_config('kaf_uri', 'http://phpunit.tests/local_kaltura/tests/', 'local_kaltura'); + $expecteduri = 'phpunit.tests/local_kaltura/tests'; + + $configsettings = get_config('local_kaltura'); + + $course = new stdClass(); + $course->id = 1; + $param = array( + 'id' => 1, + 'module' => 'mymedia', + 'course' => $course, + 'title' => 'phpunit test', + 'width' => 100, + 'height' => 100, + 'cmid' => 0, + 'intro' => 'phpunitintro', + ); + + $expected = new stdClass(); + + $result = local_kaltura_format_lti_instance_object($param); + + $this->assertObjectHasAttribute('course', $result); + $this->assertObjectHasAttribute('id', $result); + $this->assertObjectHasAttribute('name', $result); + $this->assertObjectHasAttribute('intro', $result); + $this->assertObjectHasAttribute('instructorchoicesendname', $result); + $this->assertObjectHasAttribute('instructorchoicesendemailaddr', $result); + $this->assertObjectHasAttribute('instructorcustomparameters', $result); + $this->assertObjectHasAttribute('instructorchoiceacceptgrades', $result); + $this->assertObjectHasAttribute('instructorchoiceallowroster', $result); + $this->assertObjectHasAttribute('resourcekey', $result); + $this->assertObjectHasAttribute('password', $result); + $this->assertObjectHasAttribute('toolurl', $result); + $this->assertObjectHasAttribute('securetool', $result); + $this->assertObjectHasAttribute('forcessl', $result); + $this->assertObjectHasAttribute('cmid', $result); + + $this->assertEquals(1, $result->course); + $this->assertEquals(1, $result->id); + $this->assertEquals('phpunit test', $result->name); + $this->assertEquals('phpunitintro', $result->intro); + $this->assertEquals(LTI_SETTING_ALWAYS, $result->instructorchoicesendname); + $this->assertEquals(LTI_SETTING_ALWAYS, $result->instructorchoicesendemailaddr); + $this->assertEquals('', $result->instructorcustomparameters); + $this->assertEquals(LTI_SETTING_NEVER, $result->instructorchoiceacceptgrades); + $this->assertEquals(LTI_SETTING_NEVER, $result->instructorchoiceallowroster); + $this->assertEquals($configsettings->partner_id, $result->resourcekey); + $this->assertEquals($configsettings->adminsecret, $result->password); + $this->assertEquals('http://phpunit.tests/local_kaltura/tests/'.KAF_MYMEDIA_ENDPOINT, $result->toolurl); + $this->assertEquals('https://phpunit.tests/local_kaltura/tests/'.KAF_MYMEDIA_ENDPOINT, $result->securetool); + $this->assertEquals(0, $result->cmid); + } + + /** + * Test the formatting of an array to be used by mod_lti. + */ + public function test_local_kaltura_format_typeconfig() { + $this->resetAfterTest(true); + + $param = new stdClass(); + $param->instructorchoicesendname = 0; + $param->instructorchoicesendemailaddr = 'a@a.com'; + $param->instructorcustomparameters = ''; + $param->instructorchoiceacceptgrades = 0; + $param->instructorchoiceallowroster = 3; + + $expected = array( + 'sendname' => 0, + 'sendemailaddr' => 'a@a.com', + 'customparameters' => '', + 'acceptgrades' => 0, + 'allowroster' => 3, + 'launchcontainer' => 2, + ); + + $result = local_kaltura_format_typeconfig($param); + + ksort($result); + ksort($expected); + $this->assertEquals($expected, $result); + + // call function specifying no blocks to be displayed + $expected['launchcontainer'] = 3; + $result = local_kaltura_format_typeconfig($param, false); + $this->assertEquals($expected, $result); + } + + /** + * Data provider for different KAF service names. + */ + public function invalid_logging_data() { + $data = array( + array( + 'string' + ), + array( + 1 + ), + array( + new stdClass() + ) + ); + return $data; + } + + /** + * Test logging. + * @param array $data Sample data from data provider method. + * @dataProvider module_name_test + */ + public function test_local_kaltura_log_data_invalid_logging_data($data) { + $this->resetAfterTest(true); + + $result = local_kaltura_log_data('mymedia', 'http://localhost', $data, true); + $this->assertFalse($result); + } + + /** + * Test logging. + */ + public function test_local_kaltura_log_data_invalid_module() { + $this->resetAfterTest(true); + + $json = '{"courses":[{"courseId":123,"courseName":"something","roles":"ltirole1,ltirole2"},{"courseId":456,"courseName":"else","roles":"ltirole3,ltirole4"}]'; + $data = array(); + $data['test1'] = 'test2'; + $data['test3'] = 'test4'; + $data['json'] = $json; + + $result = local_kaltura_log_data('invalidmodule', 'http://localhost', $data, true); + $this->assertFalse($result); + } + + /** + * Test logging. + */ + public function test_local_kaltura_log_data_logging_request_data() { + global $DB; + + $this->resetAfterTest(true); + + $json = '{"courses":[{"courseId":123,"courseName":"something","roles":"ltirole1,ltirole2"},{"courseId":456,"courseName":"else","roles":"ltirole3,ltirole4"}]'; + $data = array(); + $data['test1'] = 'test2'; + $data['test3'] = 'test4'; + $data['json'] = $json; + + $result = local_kaltura_log_data(KAF_MYMEDIA_MODULE, 'http://localhost', $data, true); + $this->assertTrue($result); + $record = $DB->get_record('local_kaltura_log', array('module'=> 'mymedia')); + + $this->assertObjectHasAttribute('id', $record); + + $this->assertObjectHasAttribute('module', $record); + $this->assertEquals(KAF_MYMEDIA_MODULE, $record->module); + + $this->assertObjectHasAttribute('type', $record); + $this->assertEquals(KALTURA_LOG_REQUEST, $record->type); + + $this->assertObjectHasAttribute('endpoint', $record); + $this->assertEquals('http://localhost', $record->endpoint); + + $this->assertObjectHasAttribute('data', $record); + $this->assertEquals(serialize($data), $record->data); + + $this->assertObjectHasAttribute('timecreated', $record); + $this->assertNotEquals(0, $record); + + $result = local_kaltura_log_data(KAF_MEDIAGALLERY_MODULE, 'http://localhost', $data, true); + $this->assertTrue($result); + + $record = $DB->get_record('local_kaltura_log', array('module'=> 'coursegallery')); + + $this->assertObjectHasAttribute('id', $record); + + $this->assertObjectHasAttribute('module', $record); + $this->assertEquals(KAF_MEDIAGALLERY_MODULE, $record->module); + + $this->assertObjectHasAttribute('type', $record); + $this->assertEquals(KALTURA_LOG_REQUEST, $record->type); + + $this->assertObjectHasAttribute('endpoint', $record); + $this->assertEquals('http://localhost', $record->endpoint); + + $this->assertObjectHasAttribute('data', $record); + $this->assertEquals(serialize($data), $record->data); + + $this->assertObjectHasAttribute('timecreated', $record); + $this->assertNotEquals(0, $record); + } + + /** + * Test logging. + */ + public function test_local_kaltura_log_data_logging_response_data() { + global $DB; + + $this->resetAfterTest(true); + + $json = '{"courses":[{"courseId":123,"courseName":"something","roles":"ltirole1,ltirole2"},{"courseId":456,"courseName":"else","roles":"ltirole3,ltirole4"}]'; + $data = array(); + $data['test1'] = 'test2'; + $data['test3'] = 'test4'; + $data['json'] = $json; + + $result = local_kaltura_log_data('phpunit response', 'http://localhost', $data, false); + $this->assertTrue($result); + + $record = $DB->get_record('local_kaltura_log', array('module'=> 'phpunit response')); + + $this->assertObjectHasAttribute('id', $record); + + $this->assertObjectHasAttribute('module', $record); + $this->assertEquals('phpunit response', $record->module); + + $this->assertObjectHasAttribute('type', $record); + $this->assertEquals(KALTURA_LOG_RESPONSE, $record->type); + + $this->assertObjectHasAttribute('endpoint', $record); + $this->assertEquals('http://localhost', $record->endpoint); + + $this->assertObjectHasAttribute('data', $record); + $this->assertEquals(serialize($data), $record->data); + + $this->assertObjectHasAttribute('timecreated', $record); + $this->assertNotEquals(0, $record); + } + + /** + * Data provider for test_local_kaltura_format_uri(). + */ + public function uri_format_test() { + return array( + array('http://phpunit.tests/local_kaltura/tests'), + array('http://phpunit.tests/local_kaltura/tests/'), + array('https://phpunit.tests/local_kaltura/tests'), + array('https://phpunit.tests/local_kaltura/tests/'), + array('https://www.phpunit.tests/local_kaltura/tests/'), + ); + } + + /** + * Test local_kaltura_format_uri(). + * @param string $url differnt URI formats. + * @dataProvider uri_format_test + */ + public function test_local_kaltura_format_uri($uri) { + $result = local_kaltura_format_uri($uri); + $this->assertEquals('phpunit.tests/local_kaltura/tests', $result); + } + + /** + * Test local_kaltura_get_kaf_publishing_data(). This test creates 4 coures. Enrolls the user as an editing teacher in coures 1 and 4, + * then enrolls the user as a student in course 2. + */ + public function test_local_kaltura_get_kaf_publishing_data_for_non_admin() { + global $DB; + + $this->resetAfterTest(true); + + // Get the roles. + $sql = "SELECT shortname,id + FROM {role}"; + $role = (array) $DB->get_records_sql($sql); + // Create a test user. + $user = $this->getDataGenerator()->create_user(); + + // Create test courses and assign the user roles. + $coursedata = array( + 'fullname' => 'Test 1', + 'shortname' => 'T1' + ); + $courseone = $this->getDataGenerator()->create_course($coursedata); + + $this->getDataGenerator()->enrol_user($user->id, $courseone->id, $role['editingteacher']->id, 'manual'); + + $coursedata = array( + 'fullname' => 'Test 2', + 'shortname' => 'T2' + ); + $coursetwo = $this->getDataGenerator()->create_course($coursedata); + + $this->getDataGenerator()->enrol_user($user->id, $coursetwo->id, $role['student']->id, 'manual'); + + $coursedata = array( + 'fullname' => 'Test 3', + 'shortname' => 'T3' + ); + $coursethree = $this->getDataGenerator()->create_course($coursedata); + + $coursedata = array( + 'fullname' => 'Test 4', + 'shortname' => 'T4' + ); + $coursefour = $this->getDataGenerator()->create_course($coursedata); + + $this->getDataGenerator()->enrol_user($user->id, $coursefour->id, $role['editingteacher']->id, 'manual'); + + // Set the current user to the test user. + advanced_testcase::setuser($user->id); + + $result = local_kaltura_get_kaf_publishing_data(); + + $json = '{"courses":[{"courseId":"'.$courseone->id.'","courseName":"'.$courseone->fullname.'","roles":"Instructor"}'; + $json .= ',{"courseId":"'.$coursetwo->id.'","courseName":"'.$coursetwo->fullname.'","roles":"Learner"}'; + $json .= ',{"courseId":"'.$coursefour->id.'","courseName":"'.$coursefour->fullname.'","roles":"Instructor"}]}'; + + $this->assertEquals($json, $result); + } + + /** + * Test local_kaltura_get_kaf_publishing_data(). This test creates 4 coures. Enrolls the user as an editing teacher in coures 1 and 4, + * then enrolls the user as a student in course 2. + */ + public function test_local_kaltura_get_kaf_publishing_data_for_admin() { + $this->resetAfterTest(true); + + // Create test courses and assign the user roles. + $coursedata = array( + 'fullname' => 'Test 1', + 'shortname' => 'T1' + ); + $courseone = $this->getDataGenerator()->create_course($coursedata); + + $coursedata = array( + 'fullname' => 'Test 2', + 'shortname' => 'T2' + ); + $coursetwo = $this->getDataGenerator()->create_course($coursedata); + + $coursedata = array( + 'fullname' => 'Test 3', + 'shortname' => 'T3' + ); + $coursethree = $this->getDataGenerator()->create_course($coursedata); + + $coursedata = array( + 'fullname' => 'Test 4', + 'shortname' => 'T4' + ); + $coursefour = $this->getDataGenerator()->create_course($coursedata); + + advanced_testcase::setAdminUser(); + + $result = local_kaltura_get_kaf_publishing_data(); + + $json = '{"courses":[{"courseId":"'.$courseone->id.'","courseName":"'.$courseone->fullname.'","roles":"urn:lti:sysrole:ims\/lis\/Administrator"}'; + $json .= ',{"courseId":"'.$coursetwo->id.'","courseName":"'.$coursetwo->fullname.'","roles":"urn:lti:sysrole:ims\/lis\/Administrator"}'; + $json .= ',{"courseId":"'.$coursethree->id.'","courseName":"'.$coursethree->fullname.'","roles":"urn:lti:sysrole:ims\/lis\/Administrator"}'; + $json .= ',{"courseId":"'.$coursefour->id.'","courseName":"'.$coursefour->fullname.'","roles":"urn:lti:sysrole:ims\/lis\/Administrator"}]}'; + + $this->assertEquals($json, $result); + } + + /** + * Data provider for test_local_kaltura_url_contains_configured_hostname_fail(). + */ + public function uri_hostname_tests_invalid() { + return array( + array('http://phpunit1.tests/local_kaltura/tests'), + array('http://phpunit.2tests/local_kaltura/tests/'), + array('http://tests.phpunit/local_kaltura/tests/'), + ); + } + + /** + * Test test_local_kaltura_url_contains_configured_hostname_fail(). + * @param string $url differnt URI formats. + * @dataProvider uri_hostname_tests_invalid + */ + public function test_local_kaltura_url_contains_configured_hostname_fail($url) { + $this->resetAfterTest(true); + + set_config('kaf_uri', 'phpunit.tests', 'local_kaltura'); + + $result = local_kaltura_url_contains_configured_hostname($url); + $this->assertFalse($result); + } + + /** + * Data provider for test_local_kaltura_url_contains_configured_hostname(). + */ + public function uri_hostname_tests_valid() { + return array( + array('http://phpunit.tests/local_kaltura/'), + array('https://phpunit.tests/local_kaltura/tests/'), + ); + } + + /** + * Test test_local_kaltura_url_contains_configured_hostname(). + * @param string $url differnt URI formats. + * @dataProvider uri_hostname_tests_valid + */ + public function test_local_kaltura_url_contains_configured_hostname($url) { + $this->resetAfterTest(true); + + set_config('kaf_uri', 'phpunit.tests', 'local_kaltura'); + + $result = local_kaltura_url_contains_configured_hostname($url); + $this->assertTrue($result); + } + + /** + * Test local_kaltura_add_protocol_to_url(). + */ + public function test_local_kaltura_add_protocol_to_url() { + $expected = 'http://example.com'; + $url = local_kaltura_add_protocol_to_url($expected); + $this->assertEquals($expected, $url); + + $expected = 'https://example.com'; + $url = local_kaltura_add_protocol_to_url($expected); + $this->assertEquals($expected, $url); + + $expected = 'http://example.com'; + $url = local_kaltura_add_protocol_to_url('example.com'); + $this->assertEquals($expected, $url); + + $url = local_kaltura_add_protocol_to_url('htdddtp://example.com'); + $this->assertEmpty($url); + } + + /** + * Test local_kaltura_add_kaf_uri_token(). + */ + public function test_local_kaltura_add_kaf_uri_token() { + $this->resetAfterTest(true); + + // Set KAF URI to HTTP. + $url = 'http://this-is-a-test-with-phpunit.com'; + set_config('kaf_uri', $url, 'local_kaltura'); + + $path = '/phpunit/testing/test1/'; + $expected = $url.$path; + + // Test HTTP returns with the confgirued URL in HTTP. + $actual = 'http://'.KALTURA_URI_TOKEN.$path; + $result = local_kaltura_add_kaf_uri_token($actual); + + $this->assertEquals($expected, $result); + + // Test HTTPS returns with the configured URL in HTTP. + $actual = 'https://'.KALTURA_URI_TOKEN.$path; + $result = local_kaltura_add_kaf_uri_token($actual); + + $this->assertEquals($expected, $result); + + // Set KAF URI to HTTPS. + $url = 'https://this-is-a-test-with-phpunit.com'; + set_config('kaf_uri', $url, 'local_kaltura'); + $expected = $url.$path; + + // Test HTTP returns with the confgirued URL in HTTPS. + $actual = 'http://'.KALTURA_URI_TOKEN.$path; + $result = local_kaltura_add_kaf_uri_token($actual); + + $this->assertEquals($expected, $result); + + // Test HTTPS returns with the confgirued URL in HTTPS. + $actual = 'https://'.KALTURA_URI_TOKEN.$path; + $result = local_kaltura_add_kaf_uri_token($actual); + + $this->assertEquals($expected, $result); + } + + /** + * Test local_kaltura_encode_object_for_storage() + */ + public function test_local_kaltura_encode_object_for_storage() { + $data = array(); + $result = local_kaltura_encode_object_for_storage($data); + $this->assertEquals('', $result); + + $data = new stdClass(); + $result = local_kaltura_encode_object_for_storage($data); + $this->assertEquals('', $result); + + $data = 'hello'; + $result = local_kaltura_encode_object_for_storage($data); + $this->assertEquals('', $result); + + $data = ''; + $result = local_kaltura_encode_object_for_storage($data); + $this->assertEquals('', $result); + + $data = new stdClass(); + $data->one = 'abc'; + $data->two = 'def'; + $result = local_kaltura_encode_object_for_storage($data); + $expected = base64_encode(serialize($data)); + $this->assertEquals($expected, $result); + + $data = array('one' => 'abc', 'two' => 'def'); + $result = local_kaltura_encode_object_for_storage($data); + $expected = base64_encode(serialize($data)); + $this->assertEquals($expected, $result); + } + + /** + * Test local_kaltura_decode_object_for_storage() + */ + public function test_local_kaltura_decode_object_for_storage() { + $result = local_kaltura_decode_object_for_storage(''); + $this->assertEquals('', $result); + + $expected = new stdClass(); + $expected->one = 'abc'; + $expected->two = 'def'; + $data = base64_encode(serialize($expected)); + $result = local_kaltura_decode_object_for_storage($data); + $this->assertEquals($expected, $result); + + $expected = array('one' => 'abc', 'two' => 'def'); + $data = base64_encode(serialize($expected)); + $result = local_kaltura_decode_object_for_storage($data); + $this->assertEquals($expected, $result); + } + + /** + * Test local_kaltura_convert_kaltura_base_entry_object() + */ + public function test_local_kaltura_convert_kaltura_base_entry_object() { + $result = local_kaltura_convert_kaltura_base_entry_object(new stdclass()); + $this->assertFalse($result); + + // Test converting a video entry. + $time = time(); + $base = new KalturaMediaEntry(); + $base->dataUrl = 'http:/phpunittest.com'; + $base->width = 100; + $base->height = 200; + $base->id = 'phpunit'; + $base->name = 'phpunit title'; + $base->thumbnailUrl = 'http://phpunittest.com/thumb'; + $base->duration = 300; + $base->description = 'phpunit description'; + $base->createdAt = $time; + $base->creatorId = 'phpunit user'; + $base->tags = ''; + + $expected = new stdClass(); + $expected->url = ''; + $expected->dataurl = 'http:/phpunittest.com'; + $expected->width = 100; + $expected->height = 200; + $expected->entryid = 'phpunit'; + $expected->title = 'phpunit title'; + $expected->thumbnailurl = 'http://phpunittest.com/thumb'; + $expected->duration = 300; + $expected->description = 'phpunit description'; + $expected->createdat = $time; + $expected->owner = 'phpunit user'; + $expected->tags = ''; + $expected->showtitle = 'on'; + $expected->showdescription = 'on'; + $expected->showowner = 'on'; + $expected->player = ''; + $expected->size = ''; + + $result = local_kaltura_convert_kaltura_base_entry_object($base); + $this->assertEquals($expected, $result); + + // Test converting a video presentation entry. + $base = new KalturaDataEntry(); + $base->id = 'phpunit'; + $base->name = 'phpunit title'; + $base->description = 'phpunit description'; + $base->creatorId = 'phpunit creator'; + $base->tags = 'phpunit tags'; + $base->createdAt = $time; + $base->thumbnailUrl = 'http://phpunittest.com/thumb'; + + $expected = new stdClass(); + $expected->url = ''; + $expected->dataurl = ''; + $expected->width = 0; + $expected->height = 0; + $expected->entryid = 'phpunit'; + $expected->title = 'phpunit title'; + $expected->thumbnailurl = 'http://phpunittest.com/thumb'; + $expected->duration = 0; + $expected->description = 'phpunit description'; + $expected->createdat = $time; + $expected->owner = 'phpunit creator'; + $expected->tags = 'phpunit tags'; + $expected->showtitle = 'on'; + $expected->showdescription = 'on'; + $expected->showowner = 'on'; + $expected->player = ''; + $expected->size = ''; + + $result = local_kaltura_convert_kaltura_base_entry_object($base); + $this->assertEquals($expected, $result); + } +} diff --git a/local/kaltura/tests/migrationlib_test.php b/local/kaltura/tests/migrationlib_test.php new file mode 100644 index 0000000000000..787db66afa10a --- /dev/null +++ b/local/kaltura/tests/migrationlib_test.php @@ -0,0 +1,194 @@ +. + +/** + * Kaltura local_kaltura_migration_progress class phpunit tests. + * + * @package local_kaltura + * @author Remote-Learner.net Inc + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + * @copyright (C) 2014 Remote Learner.net Inc http://www.remote-learner.net + */ + +defined('MOODLE_INTERNAL') || die(); + +global $CFG; +require_once($CFG->dirroot.'/local/kaltura/locallib.php'); +require_once($CFG->dirroot.'/local/kaltura/migrationlib.php'); + +/** + * @group local_kaltura + */ +class local_kaltura_migrationlib_testcase extends advanced_testcase { + /** + * Test initialization of config values. + */ + public function test_initialization_of_config_values() { + $this->resetAfterTest(true); + + $result = new local_kaltura_migration_progress(); + $result = null; + + $configsettings = get_config(KALTURA_PLUGIN_NAME); + + $this->assertObjectHasAttribute('migrationstarted', $configsettings); + $this->assertObjectHasAttribute('existingcategoryrun', $configsettings); + $this->assertObjectHasAttribute('sharedcategoryrun', $configsettings); + $this->assertObjectHasAttribute('categoriescreated', $configsettings); + $this->assertObjectHasAttribute('entriesmigrated', $configsettings); + $this->assertObjectHasAttribute('kafcategoryrootid', $configsettings); + $this->assertEquals(0, $configsettings->migrationstarted); + $this->assertEquals(0, $configsettings->existingcategoryrun); + $this->assertEquals(0, $configsettings->sharedcategoryrun); + $this->assertEquals(0, $configsettings->categoriescreated); + $this->assertEquals(0, $configsettings->entriesmigrated); + $this->assertEquals(0, $configsettings->kafcategoryrootid); + } + + /** + * Test existingcategory accessor functions. + */ + public function test_existingcategoryrun() { + $this->resetAfterTest(true); + + $result = new local_kaltura_migration_progress(); + local_kaltura_migration_progress::set_existingcategoryrun(11); + $value = local_kaltura_migration_progress::get_existingcategoryrun(); + + $this->assertEquals(11, $value); + + $result = null; + $value = get_config(KALTURA_PLUGIN_NAME, 'existingcategoryrun'); + + $this->assertEquals(11, $value); + } + + /** + * Test sharedcategoryrun accessor functions. + */ + public function test_sharedcategoryrun() { + $this->resetAfterTest(true); + + $result = new local_kaltura_migration_progress(); + local_kaltura_migration_progress::set_sharedcategoryrun(11); + $value = local_kaltura_migration_progress::get_sharedcategoryrun(); + + $this->assertEquals(11, $value); + + $result = null; + $value = get_config(KALTURA_PLUGIN_NAME, 'sharedcategoryrun'); + + $this->assertEquals(11, $value); + } + + /** + * Test kafcategoryrootid functions. + */ + public function test_kafcategoryrootid() { + $this->resetAfterTest(true); + + $result = new local_kaltura_migration_progress(); + local_kaltura_migration_progress::set_kafcategoryrootid(11); + $value = local_kaltura_migration_progress::get_kafcategoryrootid(); + + $this->assertEquals(11, $value); + + $result = null; + $value = get_config(KALTURA_PLUGIN_NAME, 'kafcategoryrootid'); + + $this->assertEquals(11, $value); + } + + /** + * Test categoriescreated functions. + */ + public function test_categoriescreated() { + $this->resetAfterTest(true); + + $result = new local_kaltura_migration_progress(); + local_kaltura_migration_progress::increment_categoriescreated(); + $value = local_kaltura_migration_progress::get_categoriescreated(); + + $this->assertEquals(1, $value); + + $result = null; + $value = get_config(KALTURA_PLUGIN_NAME, 'categoriescreated'); + + $this->assertEquals(1, $value); + } + + /** + * Test entriesmigrated functions. + */ + public function test_entriesmigrated() { + $this->resetAfterTest(true); + + $result = new local_kaltura_migration_progress(); + local_kaltura_migration_progress::increment_entriesmigrated(); + $value = local_kaltura_migration_progress::get_entriesmigrated(); + + $this->assertEquals(1, $value); + + $result = null; + $value = get_config(KALTURA_PLUGIN_NAME, 'entriesmigrated'); + + $this->assertEquals(1, $value); + } + + /** + * Test migrationstarted functions. + */ + public function test_migrationstarted() { + $this->resetAfterTest(true); + + $result = new local_kaltura_migration_progress(); + local_kaltura_migration_progress::init_migrationstarted(); + $value = local_kaltura_migration_progress::get_migrationstarted(); + + $this->assertNotEquals(0, $value); + + $result = null; + $value = get_config(KALTURA_PLUGIN_NAME, 'migrationstarted'); + + $this->assertNotEquals(0, $value); + } + + /** + * Test resetting all migration progress properties functions. + */ + public function test_resetall() { + $this->resetAfterTest(true); + + $result = new local_kaltura_migration_progress(); + local_kaltura_migration_progress::set_existingcategoryrun(11); + local_kaltura_migration_progress::set_sharedcategoryrun(11); + local_kaltura_migration_progress::increment_categoriescreated(); + local_kaltura_migration_progress::increment_entriesmigrated(); + local_kaltura_migration_progress::init_migrationstarted(); + local_kaltura_migration_progress::set_kafcategoryrootid(11); + local_kaltura_migration_progress::reset_all(); + + $result = null; + + $configsettings = get_config(KALTURA_PLUGIN_NAME); + $this->assertEquals(0, $configsettings->migrationstarted); + $this->assertEquals(0, $configsettings->existingcategoryrun); + $this->assertEquals(0, $configsettings->sharedcategoryrun); + $this->assertEquals(0, $configsettings->categoriescreated); + $this->assertEquals(0, $configsettings->entriesmigrated); + $this->assertEquals(0, $configsettings->kafcategoryrootid); + } +} \ No newline at end of file diff --git a/local/kaltura/version.php b/local/kaltura/version.php new file mode 100644 index 0000000000000..15717660f91a0 --- /dev/null +++ b/local/kaltura/version.php @@ -0,0 +1,32 @@ +. + +/** + * Kaltura version file. + * + * @package local_kaltura + * @author Remote-Learner.net Inc + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL + * @copyright (C) 2014 Remote Learner.net Inc http://www.remote-learner.net + */ + +if (!defined('MOODLE_INTERNAL')) { + die('Direct access to this script is forbidden.'); +} + +$plugin->version = 2014013000.01; +$plugin->component = 'local_kaltura'; +$plugin->release = 'Kaltura release 4.0.00 (RL: TBD)'; +$plugin->requires = 2013051400; +$plugin->maturity = MATURITY_STABLE; diff --git a/local/kaltura/yui/build/moodle-local_kaltura-lticontainer/moodle-local_kaltura-lticontainer-debug.js b/local/kaltura/yui/build/moodle-local_kaltura-lticontainer/moodle-local_kaltura-lticontainer-debug.js new file mode 100644 index 0000000000000..14660e707a1bf --- /dev/null +++ b/local/kaltura/yui/build/moodle-local_kaltura-lticontainer/moodle-local_kaltura-lticontainer-debug.js @@ -0,0 +1,167 @@ +YUI.add('moodle-local_kaltura-lticontainer', function (Y, NAME) { + +// This file is part of Moodle - http://moodle.org/ +// +// Moodle is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// Moodle is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with Moodle. If not, see . + +/** + * YUI module used to resize the LTI launch container. + * + * @package local_kaltura + * @author Remote-Learner.net Inc + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + * @copyright (C) 2014 Remote Learner.net Inc http://www.remote-learner.net + */ + +/** + * This method calls the base class constructor + * @method LTICONTAINER + */ +var LTICONTAINER = function() { + LTICONTAINER.superclass.constructor.apply(this, arguments); +}; + +Y.extend(LTICONTAINER, Y.Base, { + /** + * The last known height of the element. + * @property lastheight + * @type {Integer} + * @default null + */ + lastheight: null, + + /** + * Add padding to make the bottom of the iframe visible. The iframe wasn't visible on some themes. Probably because of border widths, etc. + * @property padding + * @type {Integer} + * @default 15 + */ + padding: 15, + + /** + * Height of window. + * @property viewportheight + * @type {Integer} + * @default 15 + */ + viewportheight: null, + + /** + * Height of the entire document. + * @property documentheight + * @type {Integer} + * @default null + */ + documentheight: null, + + /** + * Height of the body element. + * @property documentheight + * @type {Integer} + * @default null + */ + clientheight: null, + + /** + * User video width size selection. + * @property kalvidwidth + * @type {Integer} + * @default null + */ + kalvidwidth: null, + + /** + * The YUI node object for the iframe container. + * @property ltiframe + * @type {Object} + * @default null + */ + ltiframe: null, + + /** + * Init function for the checkboxselection module + * @property params + * @type {Object} + */ + init : function(params) { + var bodynode = Y.one('body[class~='+params.bodyclass+']'); + + this.lastheight = params.lastheight; + this.padding = params.padding; + this.viewportheight = bodynode.get('winHeight'); + this.documentheight = bodynode.get('docHeight'); + this.clientheight = bodynode.getDOMNode.clientHeight; + this.ltiframe = Y.one('#contentframe'); + this.kalvidwidth = params.kalvidwidth; + + this.resize(); + this.timer = Y.later(250, this, this.resize); + }, + + /** + * This function resizes the iframe height and width. + */ + resize : function() { + if (this.lastheight !== Math.min(this.documentheight, this.viewportheight)) { + var newheight = this.viewportheight - this.ltiframe.getY() - this.padding+"px"; + this.ltiframe.setStyle('height', newheight); + this.lastheight = Math.min(this.documentheight, this.viewportheight); + } + + var kalvidcontent = Y.one('#kalvid_content'); + if (kalvidcontent !== null) { + var maxwidth = kalvidcontent.get('offsetWidth'); + var allowedsize = maxwidth - this.padding; + + if (this.kalvidwidth !== null) { + // Double current user's video width selection as requested by Kaltura. + var newsize = this.kalvidwidth * 2; + + // If "newsize" if over allowed size then set it to the maximum allowed. + if (newsize > allowedsize) { + this.ltiframe.setStyle('width', allowedsize+'px'); + } else { + this.ltiframe.setStyle('width', newsize+'px'); + } + } + } + } +}, +{ + NAME : 'moodle-local_kaltura-lticontainer', + ATTRS : { + bodyclass : { + value : null + }, + lastheight : { + value : null + }, + padding: { + value : 15 + } + } +}); +M.local_kaltura = M.local_kaltura || {}; + +/** + * Entry point for lticontainer module + * @param string params additional parameters. + * @return object the lticontainer object + */ +M.local_kaltura.init = function(params) { + return new LTICONTAINER(params); +}; + + +}, '@VERSION@', {"requires": ["base", "node"]}); diff --git a/local/kaltura/yui/build/moodle-local_kaltura-lticontainer/moodle-local_kaltura-lticontainer-min.js b/local/kaltura/yui/build/moodle-local_kaltura-lticontainer/moodle-local_kaltura-lticontainer-min.js new file mode 100644 index 0000000000000..fbfe81e6b25f3 --- /dev/null +++ b/local/kaltura/yui/build/moodle-local_kaltura-lticontainer/moodle-local_kaltura-lticontainer-min.js @@ -0,0 +1 @@ +YUI.add("moodle-local_kaltura-lticontainer",function(e,t){var n=function(){n.superclass.constructor.apply(this,arguments)};e.extend(n,e.Base,{lastheight:null,padding:15,viewportheight:null,documentheight:null,clientheight:null,kalvidwidth:null,ltiframe:null,init:function(t){var n=e.one("body[class~="+t.bodyclass+"]");this.lastheight=t.lastheight,this.padding=t.padding,this.viewportheight=n.get("winHeight"),this.documentheight=n.get("docHeight"),this.clientheight=n.getDOMNode.clientHeight,this.ltiframe=e.one("#contentframe"),this.kalvidwidth=t.kalvidwidth,this.resize(),this.timer=e.later(250,this,this.resize)},resize:function(){if(this.lastheight!==Math.min(this.documentheight,this.viewportheight)){var t=this.viewportheight-this.ltiframe.getY()-this.padding+"px";this.ltiframe.setStyle("height",t),this.lastheight=Math.min(this.documentheight,this.viewportheight)}var n=e.one("#kalvid_content");if(n!==null){var r=n.get("offsetWidth"),i=r-this.padding;if(this.kalvidwidth!==null){var s=this.kalvidwidth*2;s>i?this.ltiframe.setStyle("width",i+"px"):this.ltiframe.setStyle("width",s+"px")}}}},{NAME:"moodle-local_kaltura-lticontainer",ATTRS:{bodyclass:{value:null},lastheight:{value:null},padding:{value:15}}}),M.local_kaltura=M.local_kaltura||{},M.local_kaltura.init=function(e){return new n(e)}},"@VERSION@",{requires:["base","node"]}); diff --git a/local/kaltura/yui/build/moodle-local_kaltura-lticontainer/moodle-local_kaltura-lticontainer.js b/local/kaltura/yui/build/moodle-local_kaltura-lticontainer/moodle-local_kaltura-lticontainer.js new file mode 100644 index 0000000000000..14660e707a1bf --- /dev/null +++ b/local/kaltura/yui/build/moodle-local_kaltura-lticontainer/moodle-local_kaltura-lticontainer.js @@ -0,0 +1,167 @@ +YUI.add('moodle-local_kaltura-lticontainer', function (Y, NAME) { + +// This file is part of Moodle - http://moodle.org/ +// +// Moodle is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// Moodle is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with Moodle. If not, see . + +/** + * YUI module used to resize the LTI launch container. + * + * @package local_kaltura + * @author Remote-Learner.net Inc + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + * @copyright (C) 2014 Remote Learner.net Inc http://www.remote-learner.net + */ + +/** + * This method calls the base class constructor + * @method LTICONTAINER + */ +var LTICONTAINER = function() { + LTICONTAINER.superclass.constructor.apply(this, arguments); +}; + +Y.extend(LTICONTAINER, Y.Base, { + /** + * The last known height of the element. + * @property lastheight + * @type {Integer} + * @default null + */ + lastheight: null, + + /** + * Add padding to make the bottom of the iframe visible. The iframe wasn't visible on some themes. Probably because of border widths, etc. + * @property padding + * @type {Integer} + * @default 15 + */ + padding: 15, + + /** + * Height of window. + * @property viewportheight + * @type {Integer} + * @default 15 + */ + viewportheight: null, + + /** + * Height of the entire document. + * @property documentheight + * @type {Integer} + * @default null + */ + documentheight: null, + + /** + * Height of the body element. + * @property documentheight + * @type {Integer} + * @default null + */ + clientheight: null, + + /** + * User video width size selection. + * @property kalvidwidth + * @type {Integer} + * @default null + */ + kalvidwidth: null, + + /** + * The YUI node object for the iframe container. + * @property ltiframe + * @type {Object} + * @default null + */ + ltiframe: null, + + /** + * Init function for the checkboxselection module + * @property params + * @type {Object} + */ + init : function(params) { + var bodynode = Y.one('body[class~='+params.bodyclass+']'); + + this.lastheight = params.lastheight; + this.padding = params.padding; + this.viewportheight = bodynode.get('winHeight'); + this.documentheight = bodynode.get('docHeight'); + this.clientheight = bodynode.getDOMNode.clientHeight; + this.ltiframe = Y.one('#contentframe'); + this.kalvidwidth = params.kalvidwidth; + + this.resize(); + this.timer = Y.later(250, this, this.resize); + }, + + /** + * This function resizes the iframe height and width. + */ + resize : function() { + if (this.lastheight !== Math.min(this.documentheight, this.viewportheight)) { + var newheight = this.viewportheight - this.ltiframe.getY() - this.padding+"px"; + this.ltiframe.setStyle('height', newheight); + this.lastheight = Math.min(this.documentheight, this.viewportheight); + } + + var kalvidcontent = Y.one('#kalvid_content'); + if (kalvidcontent !== null) { + var maxwidth = kalvidcontent.get('offsetWidth'); + var allowedsize = maxwidth - this.padding; + + if (this.kalvidwidth !== null) { + // Double current user's video width selection as requested by Kaltura. + var newsize = this.kalvidwidth * 2; + + // If "newsize" if over allowed size then set it to the maximum allowed. + if (newsize > allowedsize) { + this.ltiframe.setStyle('width', allowedsize+'px'); + } else { + this.ltiframe.setStyle('width', newsize+'px'); + } + } + } + } +}, +{ + NAME : 'moodle-local_kaltura-lticontainer', + ATTRS : { + bodyclass : { + value : null + }, + lastheight : { + value : null + }, + padding: { + value : 15 + } + } +}); +M.local_kaltura = M.local_kaltura || {}; + +/** + * Entry point for lticontainer module + * @param string params additional parameters. + * @return object the lticontainer object + */ +M.local_kaltura.init = function(params) { + return new LTICONTAINER(params); +}; + + +}, '@VERSION@', {"requires": ["base", "node"]}); diff --git a/local/kaltura/yui/build/moodle-local_kaltura-ltipanel/moodle-local_kaltura-ltipanel-debug.js b/local/kaltura/yui/build/moodle-local_kaltura-ltipanel/moodle-local_kaltura-ltipanel-debug.js new file mode 100644 index 0000000000000..0d388ad0d3c8d --- /dev/null +++ b/local/kaltura/yui/build/moodle-local_kaltura-ltipanel/moodle-local_kaltura-ltipanel-debug.js @@ -0,0 +1,471 @@ +YUI.add('moodle-local_kaltura-ltipanel', function (Y, NAME) { + +// This file is part of Moodle - http://moodle.org/ +// +// Moodle is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// Moodle is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with Moodle. If not, see . + +/** + * YUI module for displaying an LTI launch within a YUI panel. + * + * @package local_kaltura + * @author Remote-Learner.net Inc + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + * @copyright (C) 2014 Remote Learner.net Inc http://www.remote-learner.net + */ + + /** + * This method calls the base class constructor + * @method LTIPANEL + */ +var LTIPANEL = function() { + LTIPANEL.superclass.constructor.apply(this, arguments); +}; + +Y.extend(LTIPANEL, Y.Base, { + /** + * Contains the object tag needed to launch an LTI session. + * @property panelbodycontent + * @type {String} + * @default null + */ + panelbodycontent: null, + + /** + * Set to true if panel is visible, otherwise false. + * @property panelvisible + * @type {Boolean} + * @default null + */ + panelvisible: false, + + /** + * The panel object + * @property panel + * @type {Object} + * @default null + */ + panel: null, + + /** + * The name of the initiating module. + * @property modulename + * @type {String} + * @default null + */ + modulename: null, + + /** + * The id value of the add media button. + * @property addvidbtnid + * @type {String} + * @default null + */ + addvidbtnid: null, + + /** + * Init function for the checkboxselection module + * @property params + * @type {Object} + */ + init : function(params) { + // Check to make sure parameters are initialized + if ('0' === params.addvidbtnid || '0' === params.ltilaunchurl || 0 === params.courseid || 0 === params.height || 0 === params.width) { + alert('Some parameters were not initialized.'); + return; + } + + this.modulename = params.modulename; + this.addvidbtnid = params.addvidbtnid; + + var addvideobtn = Y.one('#'+params.addvidbtnid); + addvideobtn.on('click', this.open_panel_callback, this, params.ltilaunchurl, params.height, params.width); + }, + + /** + * Event handler callback for when the add video button is clicked. This function creates the a panel element. + * @property e + * @type {Object} + */ + open_panel_callback : function(e, url, height, width) { + var panelheight = parseInt(height, 10) + 45; + var panelwidth = parseInt(width, 10) + 23 + 'px'; + + width = width+'px'; + // Apply special width for mobile devices as requested by Kaltura. + if (Y.UA.ipod !== 0 || Y.UA.ipad !== 0 || Y.UA.iphone !== 0 || Y.UA.android !== 0 || Y.UA.mobile !== null) { + panelwidth = '80%'; + width = '100%'; + } + + var iframe = ""; + this.panelbodycontent = iframe; + if (Y.UA.ipod !== 0 || Y.UA.ipad !== 0 || Y.UA.iphone !== 0) { + // This outer div will constrain the iframe from overlapping over its content region on iOS devices. + this.panelbodycontent = "
    "+iframe+"
    "; + } + + // If the panel has not yet been initialized. + if (null === this.panel) { + this.panel = new Y.Panel({ + srcNode : Y.Node.create('
    '), + headerContent : '', + bodyContent : this.panelbodycontent, + width : panelwidth, + height : panelheight+"px", + zIndex : 6, + centered : true, + modal : true, + visible : false, + render : true, + hideOn : [ + { + node : Y.one('input[id=closeltipanel]'), + eventName : 'click' + } + ] + }); + + this.panel.show(); + + // Listen to simulated click event send from local/kaltura/service.php + Y.one('input[id=closeltipanel]').on('click', this.lti_hide_panel_callback, this); + + // // Listen to when the panel is made visible or hidden + this.panel.after('visibleChange', this.lti_panel_visible_change_callback, this); + } else { + this.panel.show(); + } + }, + + /** + * Event handler callback for when a simulated click event is triggered on a specifc element. + */ + lti_hide_panel_callback : function() { + // hide the thumbnail image. + var imagenode = Y.one('img[id=video_thumbnail]'); + imagenode.setStyle('display', 'none'); + // Update the iframe element attributes + var iframenode = Y.one('iframe[id=contentframe]'); + iframenode.setAttribute('width', Y.one('input[id=width]').getAttribute('value')); + iframenode.setAttribute('height', Y.one('input[id=height]').getAttribute('value')); + iframenode.setStyle('display', 'inline'); + + // If the page is a Video presentation or resource execute a function to change the button caption KALDEV-579 + var element = Y.one('input[name=modulename]'); + + if (undefined !== element && ('kalvidres' === this.modulename || 'kalvidpres' === this.modulename)) { + this.lti_panel_change_add_media_button_caption(); + } + }, + + lti_panel_change_add_media_button_caption : function() { + // Need to find a better way of doing this. Change was made for KALDEV-579. + var buttoncaption = M.util.get_string('replace_video', this.modulename); + if (buttoncaption !== Y.one('#'+this.addvidbtnid).getAttribute('value')) { + Y.one('#'+this.addvidbtnid).setAttribute('value', buttoncaption); + } + }, + + /** + * Event handler callback for when the panel is made hidden or visible. + */ + lti_panel_visible_change_callback : function() { + this.panelvisible = this.panel.get('visible'); + + // If panel is visible, re-launch the LIT request so that the user sees the main page. Instead of the last page they visited. If the panel is not visible then + // set the content to an empty string; this prevents videos from the iframe from continuing to play after the panel was closed. + if (true === this.panelvisible) { + this.panel.set('bodyContent', this.panelbodycontent); + } else { + this.panel.set('bodyContent', ''); + } + } +}, +{ + NAME : 'moodle-local_kaltura-ltipanel', + ATTRS : { + addvidbtnid : { + value: '0' + }, + ltilaunchurl : { + value: '0' + }, + height : { + value: 0 + }, + width : { + value: 0 + }, + modulename : { + value: '' + } + } +}); + +/** + * This method calls the base class constructor. The primary difference between LTIPANELMEDIAASSIGNMENT and LTIPANEL is that + * LTIPANELMEDIAASSIGNMENT creates a node and appends it to the body tag of the page. The reason for this is due to an issue with the Moodle + * navbar covering up part of the YUI panel, if the panel markup is appended to a child element within the body tag. + * @method LTIPANELMEDIAASSIGNMENT + */ +var LTIPANELMEDIAASSIGNMENT = function() { + LTIPANELMEDIAASSIGNMENT.superclass.constructor.apply(this, arguments); +}; + +Y.extend(LTIPANELMEDIAASSIGNMENT, Y.Base, { + /** + * Contains the object tag needed to launch an LTI session. + * @property panelbodycontent + * @type {String} + * @default null + */ + panelbodycontent: null, + + /** + * Set to true if panel is visible, otherwise false. + * @property panelvisible + * @type {Boolean} + * @default null + */ + panelvisible: false, + + /** + * The panel object + * @property panel + * @type {Object} + * @default null + */ + panel: null, + + /** + * The panel height. + * @property panelheight + * @type {Integer} + * @default 0 + */ + panelheight: 0, + + /** + * The panel width. + * @property panelwidth + * @type {Integer} + * @default 0 + */ + panelwidth: 0, + + /** + * Init function for the checkboxselection module + * @property params + * @type {Object} + */ + init : function(params) { + // Check to make sure parameters are initialized + if ('0' === params.addvidbtnid || '0' === params.ltilaunchurl || 0 === params.courseid || 0 === params.height || 0 === params.width) { + return; + } + + var addvideobtn = Y.one('#'+params.addvidbtnid); + addvideobtn.on('click', this.open_panel_callback, this, params.ltilaunchurl, params.height, params.width); + }, + + /** + * Event handler callback for when the add video button is clicked. This function creates the a panel element. + * @property e + * @type {Object} + */ + open_panel_callback : function(e, url, height, width) { + this.panelheight = parseInt(height, 10) + 45; + this.panelwidth = parseInt(width, 10) + 23; + + this.panelbodycontent = ""; + + // If the panel has not yet been initialized. + if (null === this.panel) { + this.panel = new Y.Panel({ + srcNode : Y.Node.create('
    '), + headerContent : '', + bodyContent : this.panelbodycontent, + width : this.panelwidth+"px", + height : this.panelheight+"px", + zIndex : 6, + centered : true, + modal : true, + visible : false, + render : true, + hideOn : [ + { + node : Y.one('input[id=closeltipanel]'), + eventName : 'click' + } + ] + }); + + this.panel.show(); + + // Listen to simulated click event send from local/kaltura/service.php + Y.one('input[id=closeltipanel]').on('click', this.lti_hide_panel_callback, this); + + // Listen to when the panel is made visible or hidden + this.panel.after('visibleChange', this.lti_panel_visible_change_callback, this); + } else { + this.panel.show(); + } + }, + + /** + * Event handler callback for when a simulated click event is triggered on a specifc element. + */ + lti_hide_panel_callback : function() { + // Enable submit button + Y.one('input[id=submit_video]').removeAttribute('disabled'); + // hide the thumbnail image. + var imagenode = Y.one('img[id=video_thumbnail]'); + imagenode.setStyle('display', 'none'); + // Update the iframe element attributes + var iframenode = Y.one('iframe[id=contentframe]'); + iframenode.setAttribute('width', Y.one('input[id=width]').getAttribute('value')); + iframenode.setAttribute('height', Y.one('input[id=height]').getAttribute('value')); + iframenode.setStyle('display', 'inline'); + Y.one('#id_add_video').set('value', M.util.get_string('replacevideo', 'kalvidassign')); + }, + + /** + * Event handler callback for when the panel is made hidden or visible. + */ + lti_panel_visible_change_callback : function() { + this.panelvisible = this.panel.get('visible'); + + // If panel is visible, re-launch the LIT request so that the user sees the main page. Instead of the last page they visited. If the panel is not visible then + // set the content to an empty string; this prevents videos from the iframe from continuing to play after the panel was closed. + if (true === this.panelvisible) { + this.panel.set('bodyContent', this.panelbodycontent); + this.panel.set('height', this.panelheight); + this.panel.set('width', this.panelwidth); + this.panel.set('centered', true); + } else { + this.panel.set('bodyContent', ''); + } + } +}, +{ + NAME : 'moodle-local_kaltura-ltipanel', + ATTRS : { + addvidbtnid : { + value: '0' + }, + ltilaunchurl : { + value: '0' + }, + height : { + value: 0 + }, + width : { + value: 0 + } + } +}); + +/** + * This method calls the base class constructor. This module renders a Panel for viewing media from multiple sources. + * @method LTISUBMISSIONREVIEW + */ +var LTISUBMISSIONREVIEW = function() { + LTISUBMISSIONREVIEW.superclass.constructor.apply(this, arguments); +}; + +Y.extend(LTISUBMISSIONREVIEW, Y.Base, { + /** + * An instance of the ltimediaassignment class. + * @property ltimediaassignment + * @type {Object} + * @default null + */ + ltimediaassignment: null, + + + /** + * Init function for the checkboxselection module + * @property params + * @type {Object} + */ + init : function(ltimediaassignment) { + this.ltimediaassignment = ltimediaassignment; + Y.one('form[id=fastgrade]').delegate('click', this.review_submission, 'a[name=submission_source]', this); + }, + + /** + * Callback function for when a user clicks on the review submission link. + * @property e + * @type {Object} + */ + review_submission : function(e) { + e.preventDefault(); + var source, height, width; + // Test if the target is an anchor tag or img tag. + if (e.target.test('a')) { + source = e.target.getAttribute('href'); + height = e.target.ancestor('div[name=media_submission]').get('childNodes').filter('input[name=height]').get('value'); + width = e.target.ancestor('div[name=media_submission]').get('childNodes').filter('input[name=width]').get('value'); + } else { + source = e.target.ancestor('a[name=submission_source]').getAttribute('href'); + height = e.target.ancestor('div[name=media_submission]').get('childNodes').filter('input[name=height]').get('value'); + width = e.target.ancestor('div[name=media_submission]').get('childNodes').filter('input[name=width]').get('value'); + } + + this.ltimediaassignment.open_panel_callback(null, source, height, width); + } +}, +{ + NAME : 'moodle-local_kaltura-ltipanel' +}); + +M.local_kaltura = M.local_kaltura || {}; + +/** + * Entry point for ltipanel module + * @param string params additional parameters. + * @return object the ltipanel object + */ +M.local_kaltura.init = function(params) { + return new LTIPANEL(params); +}; + +/** + * Entry point for ltipanelmediaassignment module + * @param string params additional parameters. + * @return object the ltipanel object + */ +M.local_kaltura.initmediaassignment = function(params) { + return new LTIPANELMEDIAASSIGNMENT(params); +}; + +/** + * Entry point for ltipanelmediaassignment module + * @param string params additional parameters. + * @return object the ltipanel object + */ +M.local_kaltura.initreviewsubmission = function() { + var args = { + addvidbtnid: '0', + ltilaunchurl: '0', + courseid: 0, + height: 0, + width: 0 + }; + var mediaassignment = new LTIPANELMEDIAASSIGNMENT(args); + return new LTISUBMISSIONREVIEW(mediaassignment); +}; + +}, '@VERSION@', {"requires": ["base", "node", "panel", "node-event-simulate"]}); diff --git a/local/kaltura/yui/build/moodle-local_kaltura-ltipanel/moodle-local_kaltura-ltipanel-min.js b/local/kaltura/yui/build/moodle-local_kaltura-ltipanel/moodle-local_kaltura-ltipanel-min.js new file mode 100644 index 0000000000000..45f15e6526442 --- /dev/null +++ b/local/kaltura/yui/build/moodle-local_kaltura-ltipanel/moodle-local_kaltura-ltipanel-min.js @@ -0,0 +1 @@ +YUI.add("moodle-local_kaltura-ltipanel",function(e,t){var n=function(){n.superclass.constructor.apply(this,arguments)};e.extend(n,e.Base,{panelbodycontent:null,panelvisible:!1,panel:null,modulename:null,addvidbtnid:null,init:function(t){if("0"===t.addvidbtnid||"0"===t.ltilaunchurl||0===t.courseid||0===t.height||0===t.width){alert("Some parameters were not initialized.");return}this.modulename=t.modulename,this.addvidbtnid=t.addvidbtnid;var n=e.one("#"+t.addvidbtnid);n.on("click",this.open_panel_callback,this,t.ltilaunchurl,t.height,t.width)},open_panel_callback:function(t,n,r,i){var s=parseInt(r,10)+45,o=parseInt(i,10)+23+"px";i+="px";if(e.UA.ipod!==0||e.UA.ipad!==0||e.UA.iphone!==0||e.UA.android!==0||e.UA.mobile!==null)o="80%",i="100%";var u="";this.panelbodycontent=u;if(e.UA.ipod!==0||e.UA.ipad!==0||e.UA.iphone!==0)this.panelbodycontent="
    "+u+"
    ";null===this.panel?(this.panel=new e.Panel({srcNode:e.Node.create('
    '),headerContent:"",bodyContent:this.panelbodycontent,width:o,height:s+"px",zIndex:6,centered:!0,modal:!0,visible:!1,render:!0,hideOn:[{node:e.one("input[id=closeltipanel]"),eventName:"click"}]}),this.panel.show(),e.one("input[id=closeltipanel]").on("click",this.lti_hide_panel_callback,this),this.panel.after("visibleChange",this.lti_panel_visible_change_callback,this)):this.panel.show()},lti_hide_panel_callback:function(){var t=e.one("img[id=video_thumbnail]");t.setStyle("display","none");var n=e.one("iframe[id=contentframe]");n.setAttribute("width",e.one("input[id=width]").getAttribute("value")),n.setAttribute("height",e.one("input[id=height]").getAttribute("value")),n.setStyle("display","inline");var r=e.one("input[name=modulename]");undefined!==r&&("kalvidres"===this.modulename||"kalvidpres"===this.modulename)&&this.lti_panel_change_add_media_button_caption()},lti_panel_change_add_media_button_caption:function(){var t=M.util.get_string("replace_video",this.modulename);t!==e.one("#"+this.addvidbtnid).getAttribute("value")&&e.one("#"+this.addvidbtnid).setAttribute("value",t)},lti_panel_visible_change_callback:function(){this.panelvisible=this.panel.get("visible"),!0===this.panelvisible?this.panel.set("bodyContent",this.panelbodycontent):this.panel.set("bodyContent","")}},{NAME:"moodle-local_kaltura-ltipanel",ATTRS:{addvidbtnid:{value:"0"},ltilaunchurl:{value:"0"},height:{value:0},width:{value:0},modulename:{value:""}}});var r=function(){r.superclass.constructor.apply(this,arguments)};e.extend(r,e.Base,{panelbodycontent:null,panelvisible:!1,panel:null,panelheight:0,panelwidth:0,init:function(t){if("0"===t.addvidbtnid||"0"===t.ltilaunchurl||0===t.courseid||0===t.height||0===t.width)return;var n=e.one("#"+t.addvidbtnid);n.on("click",this.open_panel_callback,this,t.ltilaunchurl,t.height,t.width)},open_panel_callback:function(t,n,r,i){this.panelheight=parseInt(r,10)+45,this.panelwidth=parseInt(i,10)+23,this.panelbodycontent="",null===this.panel?(this.panel=new e.Panel({srcNode:e.Node.create('
    '),headerContent:"",bodyContent:this.panelbodycontent,width:this.panelwidth+"px",height:this.panelheight+"px",zIndex:6,centered:!0,modal:!0,visible:!1,render:!0,hideOn:[{node:e.one("input[id=closeltipanel]"),eventName:"click"}]}),this.panel.show(),e.one("input[id=closeltipanel]").on("click",this.lti_hide_panel_callback,this),this.panel.after("visibleChange",this.lti_panel_visible_change_callback,this)):this.panel.show()},lti_hide_panel_callback:function(){e.one("input[id=submit_video]").removeAttribute("disabled");var t=e.one("img[id=video_thumbnail]");t.setStyle("display","none");var n=e.one("iframe[id=contentframe]");n.setAttribute("width",e.one("input[id=width]").getAttribute("value")),n.setAttribute("height",e.one("input[id=height]").getAttribute("value")),n.setStyle("display","inline"),e.one("#id_add_video").set("value",M.util.get_string("replacevideo","kalvidassign"))},lti_panel_visible_change_callback:function(){this.panelvisible=this.panel.get("visible"),!0===this.panelvisible?(this.panel.set("bodyContent",this.panelbodycontent),this.panel.set("height",this.panelheight),this.panel.set("width",this.panelwidth),this.panel.set("centered",!0)):this.panel.set("bodyContent","")}},{NAME:"moodle-local_kaltura-ltipanel",ATTRS:{addvidbtnid:{value:"0"},ltilaunchurl:{value:"0"},height:{value:0},width:{value:0}}});var i=function(){i.superclass.constructor.apply(this,arguments)};e.extend(i,e.Base,{ltimediaassignment:null,init:function(t){this.ltimediaassignment=t,e.one("form[id=fastgrade]").delegate("click",this.review_submission,"a[name=submission_source]",this)},review_submission:function(e){e.preventDefault();var t,n,r;e.target.test("a")?(t=e.target.getAttribute("href"),n=e.target.ancestor("div[name=media_submission]").get("childNodes").filter("input[name=height]").get("value"),r=e.target.ancestor("div[name=media_submission]").get("childNodes").filter("input[name=width]").get("value")):(t=e.target.ancestor("a[name=submission_source]").getAttribute("href"),n=e.target.ancestor("div[name=media_submission]").get("childNodes").filter("input[name=height]").get("value"),r=e.target.ancestor("div[name=media_submission]").get("childNodes").filter("input[name=width]").get("value")),this.ltimediaassignment.open_panel_callback(null,t,n,r)}},{NAME:"moodle-local_kaltura-ltipanel"}),M.local_kaltura=M.local_kaltura||{},M.local_kaltura.init=function(e){return new n(e)},M.local_kaltura.initmediaassignment=function(e){return new r(e)},M.local_kaltura.initreviewsubmission=function(){var e={addvidbtnid:"0",ltilaunchurl:"0",courseid:0,height:0,width:0},t=new r(e);return new i(t)}},"@VERSION@",{requires:["base","node","panel","node-event-simulate"]}); diff --git a/local/kaltura/yui/build/moodle-local_kaltura-ltipanel/moodle-local_kaltura-ltipanel.js b/local/kaltura/yui/build/moodle-local_kaltura-ltipanel/moodle-local_kaltura-ltipanel.js new file mode 100644 index 0000000000000..0d388ad0d3c8d --- /dev/null +++ b/local/kaltura/yui/build/moodle-local_kaltura-ltipanel/moodle-local_kaltura-ltipanel.js @@ -0,0 +1,471 @@ +YUI.add('moodle-local_kaltura-ltipanel', function (Y, NAME) { + +// This file is part of Moodle - http://moodle.org/ +// +// Moodle is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// Moodle is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with Moodle. If not, see . + +/** + * YUI module for displaying an LTI launch within a YUI panel. + * + * @package local_kaltura + * @author Remote-Learner.net Inc + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + * @copyright (C) 2014 Remote Learner.net Inc http://www.remote-learner.net + */ + + /** + * This method calls the base class constructor + * @method LTIPANEL + */ +var LTIPANEL = function() { + LTIPANEL.superclass.constructor.apply(this, arguments); +}; + +Y.extend(LTIPANEL, Y.Base, { + /** + * Contains the object tag needed to launch an LTI session. + * @property panelbodycontent + * @type {String} + * @default null + */ + panelbodycontent: null, + + /** + * Set to true if panel is visible, otherwise false. + * @property panelvisible + * @type {Boolean} + * @default null + */ + panelvisible: false, + + /** + * The panel object + * @property panel + * @type {Object} + * @default null + */ + panel: null, + + /** + * The name of the initiating module. + * @property modulename + * @type {String} + * @default null + */ + modulename: null, + + /** + * The id value of the add media button. + * @property addvidbtnid + * @type {String} + * @default null + */ + addvidbtnid: null, + + /** + * Init function for the checkboxselection module + * @property params + * @type {Object} + */ + init : function(params) { + // Check to make sure parameters are initialized + if ('0' === params.addvidbtnid || '0' === params.ltilaunchurl || 0 === params.courseid || 0 === params.height || 0 === params.width) { + alert('Some parameters were not initialized.'); + return; + } + + this.modulename = params.modulename; + this.addvidbtnid = params.addvidbtnid; + + var addvideobtn = Y.one('#'+params.addvidbtnid); + addvideobtn.on('click', this.open_panel_callback, this, params.ltilaunchurl, params.height, params.width); + }, + + /** + * Event handler callback for when the add video button is clicked. This function creates the a panel element. + * @property e + * @type {Object} + */ + open_panel_callback : function(e, url, height, width) { + var panelheight = parseInt(height, 10) + 45; + var panelwidth = parseInt(width, 10) + 23 + 'px'; + + width = width+'px'; + // Apply special width for mobile devices as requested by Kaltura. + if (Y.UA.ipod !== 0 || Y.UA.ipad !== 0 || Y.UA.iphone !== 0 || Y.UA.android !== 0 || Y.UA.mobile !== null) { + panelwidth = '80%'; + width = '100%'; + } + + var iframe = ""; + this.panelbodycontent = iframe; + if (Y.UA.ipod !== 0 || Y.UA.ipad !== 0 || Y.UA.iphone !== 0) { + // This outer div will constrain the iframe from overlapping over its content region on iOS devices. + this.panelbodycontent = "
    "+iframe+"
    "; + } + + // If the panel has not yet been initialized. + if (null === this.panel) { + this.panel = new Y.Panel({ + srcNode : Y.Node.create('
    '), + headerContent : '', + bodyContent : this.panelbodycontent, + width : panelwidth, + height : panelheight+"px", + zIndex : 6, + centered : true, + modal : true, + visible : false, + render : true, + hideOn : [ + { + node : Y.one('input[id=closeltipanel]'), + eventName : 'click' + } + ] + }); + + this.panel.show(); + + // Listen to simulated click event send from local/kaltura/service.php + Y.one('input[id=closeltipanel]').on('click', this.lti_hide_panel_callback, this); + + // // Listen to when the panel is made visible or hidden + this.panel.after('visibleChange', this.lti_panel_visible_change_callback, this); + } else { + this.panel.show(); + } + }, + + /** + * Event handler callback for when a simulated click event is triggered on a specifc element. + */ + lti_hide_panel_callback : function() { + // hide the thumbnail image. + var imagenode = Y.one('img[id=video_thumbnail]'); + imagenode.setStyle('display', 'none'); + // Update the iframe element attributes + var iframenode = Y.one('iframe[id=contentframe]'); + iframenode.setAttribute('width', Y.one('input[id=width]').getAttribute('value')); + iframenode.setAttribute('height', Y.one('input[id=height]').getAttribute('value')); + iframenode.setStyle('display', 'inline'); + + // If the page is a Video presentation or resource execute a function to change the button caption KALDEV-579 + var element = Y.one('input[name=modulename]'); + + if (undefined !== element && ('kalvidres' === this.modulename || 'kalvidpres' === this.modulename)) { + this.lti_panel_change_add_media_button_caption(); + } + }, + + lti_panel_change_add_media_button_caption : function() { + // Need to find a better way of doing this. Change was made for KALDEV-579. + var buttoncaption = M.util.get_string('replace_video', this.modulename); + if (buttoncaption !== Y.one('#'+this.addvidbtnid).getAttribute('value')) { + Y.one('#'+this.addvidbtnid).setAttribute('value', buttoncaption); + } + }, + + /** + * Event handler callback for when the panel is made hidden or visible. + */ + lti_panel_visible_change_callback : function() { + this.panelvisible = this.panel.get('visible'); + + // If panel is visible, re-launch the LIT request so that the user sees the main page. Instead of the last page they visited. If the panel is not visible then + // set the content to an empty string; this prevents videos from the iframe from continuing to play after the panel was closed. + if (true === this.panelvisible) { + this.panel.set('bodyContent', this.panelbodycontent); + } else { + this.panel.set('bodyContent', ''); + } + } +}, +{ + NAME : 'moodle-local_kaltura-ltipanel', + ATTRS : { + addvidbtnid : { + value: '0' + }, + ltilaunchurl : { + value: '0' + }, + height : { + value: 0 + }, + width : { + value: 0 + }, + modulename : { + value: '' + } + } +}); + +/** + * This method calls the base class constructor. The primary difference between LTIPANELMEDIAASSIGNMENT and LTIPANEL is that + * LTIPANELMEDIAASSIGNMENT creates a node and appends it to the body tag of the page. The reason for this is due to an issue with the Moodle + * navbar covering up part of the YUI panel, if the panel markup is appended to a child element within the body tag. + * @method LTIPANELMEDIAASSIGNMENT + */ +var LTIPANELMEDIAASSIGNMENT = function() { + LTIPANELMEDIAASSIGNMENT.superclass.constructor.apply(this, arguments); +}; + +Y.extend(LTIPANELMEDIAASSIGNMENT, Y.Base, { + /** + * Contains the object tag needed to launch an LTI session. + * @property panelbodycontent + * @type {String} + * @default null + */ + panelbodycontent: null, + + /** + * Set to true if panel is visible, otherwise false. + * @property panelvisible + * @type {Boolean} + * @default null + */ + panelvisible: false, + + /** + * The panel object + * @property panel + * @type {Object} + * @default null + */ + panel: null, + + /** + * The panel height. + * @property panelheight + * @type {Integer} + * @default 0 + */ + panelheight: 0, + + /** + * The panel width. + * @property panelwidth + * @type {Integer} + * @default 0 + */ + panelwidth: 0, + + /** + * Init function for the checkboxselection module + * @property params + * @type {Object} + */ + init : function(params) { + // Check to make sure parameters are initialized + if ('0' === params.addvidbtnid || '0' === params.ltilaunchurl || 0 === params.courseid || 0 === params.height || 0 === params.width) { + return; + } + + var addvideobtn = Y.one('#'+params.addvidbtnid); + addvideobtn.on('click', this.open_panel_callback, this, params.ltilaunchurl, params.height, params.width); + }, + + /** + * Event handler callback for when the add video button is clicked. This function creates the a panel element. + * @property e + * @type {Object} + */ + open_panel_callback : function(e, url, height, width) { + this.panelheight = parseInt(height, 10) + 45; + this.panelwidth = parseInt(width, 10) + 23; + + this.panelbodycontent = ""; + + // If the panel has not yet been initialized. + if (null === this.panel) { + this.panel = new Y.Panel({ + srcNode : Y.Node.create('
    '), + headerContent : '', + bodyContent : this.panelbodycontent, + width : this.panelwidth+"px", + height : this.panelheight+"px", + zIndex : 6, + centered : true, + modal : true, + visible : false, + render : true, + hideOn : [ + { + node : Y.one('input[id=closeltipanel]'), + eventName : 'click' + } + ] + }); + + this.panel.show(); + + // Listen to simulated click event send from local/kaltura/service.php + Y.one('input[id=closeltipanel]').on('click', this.lti_hide_panel_callback, this); + + // Listen to when the panel is made visible or hidden + this.panel.after('visibleChange', this.lti_panel_visible_change_callback, this); + } else { + this.panel.show(); + } + }, + + /** + * Event handler callback for when a simulated click event is triggered on a specifc element. + */ + lti_hide_panel_callback : function() { + // Enable submit button + Y.one('input[id=submit_video]').removeAttribute('disabled'); + // hide the thumbnail image. + var imagenode = Y.one('img[id=video_thumbnail]'); + imagenode.setStyle('display', 'none'); + // Update the iframe element attributes + var iframenode = Y.one('iframe[id=contentframe]'); + iframenode.setAttribute('width', Y.one('input[id=width]').getAttribute('value')); + iframenode.setAttribute('height', Y.one('input[id=height]').getAttribute('value')); + iframenode.setStyle('display', 'inline'); + Y.one('#id_add_video').set('value', M.util.get_string('replacevideo', 'kalvidassign')); + }, + + /** + * Event handler callback for when the panel is made hidden or visible. + */ + lti_panel_visible_change_callback : function() { + this.panelvisible = this.panel.get('visible'); + + // If panel is visible, re-launch the LIT request so that the user sees the main page. Instead of the last page they visited. If the panel is not visible then + // set the content to an empty string; this prevents videos from the iframe from continuing to play after the panel was closed. + if (true === this.panelvisible) { + this.panel.set('bodyContent', this.panelbodycontent); + this.panel.set('height', this.panelheight); + this.panel.set('width', this.panelwidth); + this.panel.set('centered', true); + } else { + this.panel.set('bodyContent', ''); + } + } +}, +{ + NAME : 'moodle-local_kaltura-ltipanel', + ATTRS : { + addvidbtnid : { + value: '0' + }, + ltilaunchurl : { + value: '0' + }, + height : { + value: 0 + }, + width : { + value: 0 + } + } +}); + +/** + * This method calls the base class constructor. This module renders a Panel for viewing media from multiple sources. + * @method LTISUBMISSIONREVIEW + */ +var LTISUBMISSIONREVIEW = function() { + LTISUBMISSIONREVIEW.superclass.constructor.apply(this, arguments); +}; + +Y.extend(LTISUBMISSIONREVIEW, Y.Base, { + /** + * An instance of the ltimediaassignment class. + * @property ltimediaassignment + * @type {Object} + * @default null + */ + ltimediaassignment: null, + + + /** + * Init function for the checkboxselection module + * @property params + * @type {Object} + */ + init : function(ltimediaassignment) { + this.ltimediaassignment = ltimediaassignment; + Y.one('form[id=fastgrade]').delegate('click', this.review_submission, 'a[name=submission_source]', this); + }, + + /** + * Callback function for when a user clicks on the review submission link. + * @property e + * @type {Object} + */ + review_submission : function(e) { + e.preventDefault(); + var source, height, width; + // Test if the target is an anchor tag or img tag. + if (e.target.test('a')) { + source = e.target.getAttribute('href'); + height = e.target.ancestor('div[name=media_submission]').get('childNodes').filter('input[name=height]').get('value'); + width = e.target.ancestor('div[name=media_submission]').get('childNodes').filter('input[name=width]').get('value'); + } else { + source = e.target.ancestor('a[name=submission_source]').getAttribute('href'); + height = e.target.ancestor('div[name=media_submission]').get('childNodes').filter('input[name=height]').get('value'); + width = e.target.ancestor('div[name=media_submission]').get('childNodes').filter('input[name=width]').get('value'); + } + + this.ltimediaassignment.open_panel_callback(null, source, height, width); + } +}, +{ + NAME : 'moodle-local_kaltura-ltipanel' +}); + +M.local_kaltura = M.local_kaltura || {}; + +/** + * Entry point for ltipanel module + * @param string params additional parameters. + * @return object the ltipanel object + */ +M.local_kaltura.init = function(params) { + return new LTIPANEL(params); +}; + +/** + * Entry point for ltipanelmediaassignment module + * @param string params additional parameters. + * @return object the ltipanel object + */ +M.local_kaltura.initmediaassignment = function(params) { + return new LTIPANELMEDIAASSIGNMENT(params); +}; + +/** + * Entry point for ltipanelmediaassignment module + * @param string params additional parameters. + * @return object the ltipanel object + */ +M.local_kaltura.initreviewsubmission = function() { + var args = { + addvidbtnid: '0', + ltilaunchurl: '0', + courseid: 0, + height: 0, + width: 0 + }; + var mediaassignment = new LTIPANELMEDIAASSIGNMENT(args); + return new LTISUBMISSIONREVIEW(mediaassignment); +}; + +}, '@VERSION@', {"requires": ["base", "node", "panel", "node-event-simulate"]}); diff --git a/local/kaltura/yui/build/moodle-local_kaltura-ltiservice/moodle-local_kaltura-ltiservice-debug.js b/local/kaltura/yui/build/moodle-local_kaltura-ltiservice/moodle-local_kaltura-ltiservice-debug.js new file mode 100644 index 0000000000000..284a256d68afa --- /dev/null +++ b/local/kaltura/yui/build/moodle-local_kaltura-ltiservice/moodle-local_kaltura-ltiservice-debug.js @@ -0,0 +1,119 @@ +YUI.add('moodle-local_kaltura-ltiservice', function (Y, NAME) { + +// This file is part of Moodle - http://moodle.org/ +// +// Moodle is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// Moodle is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with Moodle. If not, see . + +/** + * YUI module for displaying an LTI launch within a YUI panel. + * + * @package local_kaltura + * @author Remote-Learner.net Inc + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + * @copyright (C) 2014 Remote Learner.net Inc http://www.remote-learner.net + */ + + /** + * This method calls the base class constructor + * @method LTISERVICE + */ +var LTISERVICE = function() { + LTISERVICE.superclass.constructor.apply(this, arguments); +}; + +Y.extend(LTISERVICE, Y.Base, { + /** + * Init function for triggering a custom event and setting attributes. Also checks whether optional elements exist in the parent window. + * @property params + * @type {Object} + */ + init : function(params) { + if (window.parent.document.getElementById('video_title')) { + Y.one(window.parent.document.getElementById('video_title')).setAttribute('value', params.title); + } + + if (window.parent.document.getElementById('entry_id')) { + Y.one(window.parent.document.getElementById('entry_id')).setAttribute('value', params.entryid); + } + + if (window.parent.document.getElementById('height')) { + Y.one(window.parent.document.getElementById('height')).setAttribute('value', params.height); + } + + if (window.parent.document.getElementById('width')) { + Y.one(window.parent.document.getElementById('width')).setAttribute('value', params.width); + } + + if (window.parent.document.getElementById('uiconf_id')) { + Y.one(window.parent.document.getElementById('uiconf_id')).setAttribute('value', '1'); + } + + if (window.parent.document.getElementById('widescreen')) { + Y.one(window.parent.document.getElementById('widescreen')).setAttribute('value', '1'); + } + + if (window.parent.document.getElementById('video_preview_frame')) { + Y.one(window.parent.document.getElementById('video_preview_frame')).setAttribute('src', decodeURIComponent(params.iframeurl)); + } else if (window.parent.document.getElementById('contentframe')) { + Y.one(window.parent.document.getElementById('contentframe')).setAttribute('src', decodeURIComponent(params.iframeurl)); + } + + // This element must exist. + Y.one(window.parent.document.getElementById('source')).setAttribute('value', decodeURIComponent(params.iframeurl)); + + if (window.parent.document.getElementById('metadata')) { + Y.one(window.parent.document.getElementById('metadata')).setAttribute('value', params.metadata); + } + + if (window.parent.document.getElementById('closeltipanel')) { + Y.one(window.parent.document.getElementById('closeltipanel')).simulate('click'); + } + } +}, +{ + NAME : 'moodle-local_kaltura-ltiservice', + ATTRS : { + iframeurl : { + value: '' + }, + width : { + value: '' + }, + height : { + value: '' + }, + entryid : { + value: '' + }, + title : { + value: '' + }, + metadata : { + value: '' + } + } + +}); +M.local_kaltura = M.local_kaltura || {}; + +/** + * Entry point for ltiservice module + * @param string params additional parameters. + * @return object the ltiservice object + */ +M.local_kaltura.init = function(params) { + return new LTISERVICE(params); +}; + +}, '@VERSION@', {"requires": ["base", "node", "node-event-simulate"]}); diff --git a/local/kaltura/yui/build/moodle-local_kaltura-ltiservice/moodle-local_kaltura-ltiservice-min.js b/local/kaltura/yui/build/moodle-local_kaltura-ltiservice/moodle-local_kaltura-ltiservice-min.js new file mode 100644 index 0000000000000..f27d292082325 --- /dev/null +++ b/local/kaltura/yui/build/moodle-local_kaltura-ltiservice/moodle-local_kaltura-ltiservice-min.js @@ -0,0 +1 @@ +YUI.add("moodle-local_kaltura-ltiservice",function(e,t){var n=function(){n.superclass.constructor.apply(this,arguments)};e.extend(n,e.Base,{init:function(t){window.parent.document.getElementById("video_title")&&e.one(window.parent.document.getElementById("video_title")).setAttribute("value",t.title),window.parent.document.getElementById("entry_id")&&e.one(window.parent.document.getElementById("entry_id")).setAttribute("value",t.entryid),window.parent.document.getElementById("height")&&e.one(window.parent.document.getElementById("height")).setAttribute("value",t.height),window.parent.document.getElementById("width")&&e.one(window.parent.document.getElementById("width")).setAttribute("value",t.width),window.parent.document.getElementById("uiconf_id")&&e.one(window.parent.document.getElementById("uiconf_id")).setAttribute("value","1"),window.parent.document.getElementById("widescreen")&&e.one(window.parent.document.getElementById("widescreen")).setAttribute("value","1"),window.parent.document.getElementById("video_preview_frame")?e.one(window.parent.document.getElementById("video_preview_frame")).setAttribute("src",decodeURIComponent(t.iframeurl)):window.parent.document.getElementById("contentframe")&&e.one(window.parent.document.getElementById("contentframe")).setAttribute("src",decodeURIComponent(t.iframeurl)),e.one(window.parent.document.getElementById("source")).setAttribute("value",decodeURIComponent(t.iframeurl)),window.parent.document.getElementById("metadata")&&e.one(window.parent.document.getElementById("metadata")).setAttribute("value",t.metadata),window.parent.document.getElementById("closeltipanel")&&e.one(window.parent.document.getElementById("closeltipanel")).simulate("click")}},{NAME:"moodle-local_kaltura-ltiservice",ATTRS:{iframeurl:{value:""},width:{value:""},height:{value:""},entryid:{value:""},title:{value:""},metadata:{value:""}}}),M.local_kaltura=M.local_kaltura||{},M.local_kaltura.init=function(e){return new n(e)}},"@VERSION@",{requires:["base","node","node-event-simulate"]}); diff --git a/local/kaltura/yui/build/moodle-local_kaltura-ltiservice/moodle-local_kaltura-ltiservice.js b/local/kaltura/yui/build/moodle-local_kaltura-ltiservice/moodle-local_kaltura-ltiservice.js new file mode 100644 index 0000000000000..284a256d68afa --- /dev/null +++ b/local/kaltura/yui/build/moodle-local_kaltura-ltiservice/moodle-local_kaltura-ltiservice.js @@ -0,0 +1,119 @@ +YUI.add('moodle-local_kaltura-ltiservice', function (Y, NAME) { + +// This file is part of Moodle - http://moodle.org/ +// +// Moodle is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// Moodle is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with Moodle. If not, see . + +/** + * YUI module for displaying an LTI launch within a YUI panel. + * + * @package local_kaltura + * @author Remote-Learner.net Inc + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + * @copyright (C) 2014 Remote Learner.net Inc http://www.remote-learner.net + */ + + /** + * This method calls the base class constructor + * @method LTISERVICE + */ +var LTISERVICE = function() { + LTISERVICE.superclass.constructor.apply(this, arguments); +}; + +Y.extend(LTISERVICE, Y.Base, { + /** + * Init function for triggering a custom event and setting attributes. Also checks whether optional elements exist in the parent window. + * @property params + * @type {Object} + */ + init : function(params) { + if (window.parent.document.getElementById('video_title')) { + Y.one(window.parent.document.getElementById('video_title')).setAttribute('value', params.title); + } + + if (window.parent.document.getElementById('entry_id')) { + Y.one(window.parent.document.getElementById('entry_id')).setAttribute('value', params.entryid); + } + + if (window.parent.document.getElementById('height')) { + Y.one(window.parent.document.getElementById('height')).setAttribute('value', params.height); + } + + if (window.parent.document.getElementById('width')) { + Y.one(window.parent.document.getElementById('width')).setAttribute('value', params.width); + } + + if (window.parent.document.getElementById('uiconf_id')) { + Y.one(window.parent.document.getElementById('uiconf_id')).setAttribute('value', '1'); + } + + if (window.parent.document.getElementById('widescreen')) { + Y.one(window.parent.document.getElementById('widescreen')).setAttribute('value', '1'); + } + + if (window.parent.document.getElementById('video_preview_frame')) { + Y.one(window.parent.document.getElementById('video_preview_frame')).setAttribute('src', decodeURIComponent(params.iframeurl)); + } else if (window.parent.document.getElementById('contentframe')) { + Y.one(window.parent.document.getElementById('contentframe')).setAttribute('src', decodeURIComponent(params.iframeurl)); + } + + // This element must exist. + Y.one(window.parent.document.getElementById('source')).setAttribute('value', decodeURIComponent(params.iframeurl)); + + if (window.parent.document.getElementById('metadata')) { + Y.one(window.parent.document.getElementById('metadata')).setAttribute('value', params.metadata); + } + + if (window.parent.document.getElementById('closeltipanel')) { + Y.one(window.parent.document.getElementById('closeltipanel')).simulate('click'); + } + } +}, +{ + NAME : 'moodle-local_kaltura-ltiservice', + ATTRS : { + iframeurl : { + value: '' + }, + width : { + value: '' + }, + height : { + value: '' + }, + entryid : { + value: '' + }, + title : { + value: '' + }, + metadata : { + value: '' + } + } + +}); +M.local_kaltura = M.local_kaltura || {}; + +/** + * Entry point for ltiservice module + * @param string params additional parameters. + * @return object the ltiservice object + */ +M.local_kaltura.init = function(params) { + return new LTISERVICE(params); +}; + +}, '@VERSION@', {"requires": ["base", "node", "node-event-simulate"]}); diff --git a/local/kaltura/yui/build/moodle-local_kaltura-ltitinymcepanel/moodle-local_kaltura-ltitinymcepanel-debug.js b/local/kaltura/yui/build/moodle-local_kaltura-ltitinymcepanel/moodle-local_kaltura-ltitinymcepanel-debug.js new file mode 100644 index 0000000000000..23a1c5c8ac664 --- /dev/null +++ b/local/kaltura/yui/build/moodle-local_kaltura-ltitinymcepanel/moodle-local_kaltura-ltitinymcepanel-debug.js @@ -0,0 +1,141 @@ +YUI.add('moodle-local_kaltura-ltitinymcepanel', function (Y, NAME) { + +// This file is part of Moodle - http://moodle.org/ +// +// Moodle is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// Moodle is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with Moodle. If not, see . + +/** + * YUI module for displaying an LTI launch within a YUI panel. + * + * @package local_kaltura + * @author Remote-Learner.net Inc + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + * @copyright (C) 2014 Remote Learner.net Inc http://www.remote-learner.net + */ + + /** + * This method calls the base class constructor + * @method LTITINYMCEPANEL + */ +var LTITINYMCEPANEL = function() { + LTITINYMCEPANEL.superclass.constructor.apply(this, arguments); +}; + +Y.extend(LTITINYMCEPANEL, Y.Base, { + /** + * The context id the editor was launched in. + * @property contextid + * @type {Integer} + * @default null + */ + contextid: 0, + + /** + * Init function for the checkboxselection module + * @property {Object} params Data to help initialize the YUI module. + */ + init : function(params) { + // Check to make sure parameters are initialized. + if ('' === params.insertbtnid || '' === params.ltilaunchurl || '' === params.objecttagheight || '' === params.objecttagid || '' === params.previewiframeid) { + alert('Some parameters were not initialized.'); + return; + } + + // Initialize the the browse when the window is initially rendered. + this.load_lti_content(params.ltilaunchurl, params.objecttagid, params.objecttagheight); + + // Disable the insert button since nothing has been selected yet. + Y.one('#'+params.insertbtnid).set('disabled', true); + + // Listen to simulated click event send from local/kaltura/service.php + Y.one('#closeltipanel').on('click', this.user_selected_video_callback, this, params.insertbtnid, params.objecttagid, params.previewiframeid, params.objecttagheight); + + if (null !== Y.one('#page-footer')) { + Y.one('#page-footer').setStyle('display', 'none'); + } + }, + + /** + * A funciton to load the LTI content. This is called when the YUI module is first initialized. + * @property {String} url LTI launch URL. + * @property {String} iframeid iframe tag id. + * @property {String} iframeheight iframe tag height. + */ + load_lti_content : function(url, iframeid, iframeheight) { + if (0 === this.contextid) { + this.contextid = Y.one('#lti_launch_context_id').get('value'); + } + + var content = ''; + Y.one('#'+iframeid).setContent(content); + }, + + /** + * This function serves as a call back method for when the closeltipanel div has been clicked. It means that the user has + * selected a video for embedding into the TinyMCE edotor. Enabling the insert button, removing the contents LTI launch element and + * adding content to the media preview element. + * @property {Object} e Event object. + * @property {String} insertbtnid Insert button id. + * @property {String} objecttagid Object tag id. + * @property {String} previewiframeid Preview iframe tag id. + * @property {String} height Height of the iframe. + */ + user_selected_video_callback : function(e, insertbtnid, objecttagid, previewiframeid, height) { + Y.one('#'+insertbtnid).setStyle('display', 'inline'); + Y.one('#'+insertbtnid).set('disabled', false); + Y.one('#'+objecttagid).setContent(''); + + var center = Y.Node.create('
    '); + var iframe = Y.Node.create(''); + iframe.setAttribute('width', Y.one('#width').get('value')+'px'); + iframe.setAttribute('height', height+'px'); + iframe.setAttribute('src', Y.one('#source').get('value')); + + center.append(iframe); + Y.one('#'+previewiframeid).append(center); + } +}, +{ + NAME : 'moodle-local_kaltura-ltitinymcepanel', + ATTRS : { + insertbtnid : { + value : '' + }, + ltilaunchurl : { + value : '' + }, + objecttagheight : { + value : '' + }, + objecttagid : { + value : '' + }, + previewiframeid : { + value : '' + } + } +}); +M.local_kaltura = M.local_kaltura || {}; + +/** + * Entry point for ltipanel module + * @param {Object} params Additional parameters. + * @return {Object} the ltipanel object + */ +M.local_kaltura.init = function(params) { + return new LTITINYMCEPANEL(params); +}; + + +}, '@VERSION@', {"requires": ["base", "node", "panel", "node-event-simulate"]}); diff --git a/local/kaltura/yui/build/moodle-local_kaltura-ltitinymcepanel/moodle-local_kaltura-ltitinymcepanel-min.js b/local/kaltura/yui/build/moodle-local_kaltura-ltitinymcepanel/moodle-local_kaltura-ltitinymcepanel-min.js new file mode 100644 index 0000000000000..24eaf342ca72c --- /dev/null +++ b/local/kaltura/yui/build/moodle-local_kaltura-ltitinymcepanel/moodle-local_kaltura-ltitinymcepanel-min.js @@ -0,0 +1 @@ +YUI.add("moodle-local_kaltura-ltitinymcepanel",function(e,t){var n=function(){n.superclass.constructor.apply(this,arguments)};e.extend(n,e.Base,{contextid:0,init:function(t){if(""===t.insertbtnid||""===t.ltilaunchurl||""===t.objecttagheight||""===t.objecttagid||""===t.previewiframeid){alert("Some parameters were not initialized.");return}this.load_lti_content(t.ltilaunchurl,t.objecttagid,t.objecttagheight),e.one("#"+t.insertbtnid).set("disabled",!0),e.one("#closeltipanel").on("click",this.user_selected_video_callback,this,t.insertbtnid,t.objecttagid,t.previewiframeid,t.objecttagheight),null!==e.one("#page-footer")&&e.one("#page-footer").setStyle("display","none")},load_lti_content:function(t,n,r){0===this.contextid&&(this.contextid=e.one("#lti_launch_context_id").get("value"));var i='';e.one("#"+n).setContent(i)},user_selected_video_callback:function(t,n,r,i,s){e.one("#"+n).setStyle("display","inline"),e.one("#"+n).set("disabled",!1),e.one("#"+r).setContent("");var o=e.Node.create("
    "),u=e.Node.create("");u.setAttribute("width",e.one("#width").get("value")+"px"),u.setAttribute("height",s+"px"),u.setAttribute("src",e.one("#source").get("value")),o.append(u),e.one("#"+i).append(o)}},{NAME:"moodle-local_kaltura-ltitinymcepanel",ATTRS:{insertbtnid:{value:""},ltilaunchurl:{value:""},objecttagheight:{value:""},objecttagid:{value:""},previewiframeid:{value:""}}}),M.local_kaltura=M.local_kaltura||{},M.local_kaltura.init=function(e){return new n(e)}},"@VERSION@",{requires:["base","node","panel","node-event-simulate"]}); diff --git a/local/kaltura/yui/build/moodle-local_kaltura-ltitinymcepanel/moodle-local_kaltura-ltitinymcepanel.js b/local/kaltura/yui/build/moodle-local_kaltura-ltitinymcepanel/moodle-local_kaltura-ltitinymcepanel.js new file mode 100644 index 0000000000000..23a1c5c8ac664 --- /dev/null +++ b/local/kaltura/yui/build/moodle-local_kaltura-ltitinymcepanel/moodle-local_kaltura-ltitinymcepanel.js @@ -0,0 +1,141 @@ +YUI.add('moodle-local_kaltura-ltitinymcepanel', function (Y, NAME) { + +// This file is part of Moodle - http://moodle.org/ +// +// Moodle is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// Moodle is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with Moodle. If not, see . + +/** + * YUI module for displaying an LTI launch within a YUI panel. + * + * @package local_kaltura + * @author Remote-Learner.net Inc + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + * @copyright (C) 2014 Remote Learner.net Inc http://www.remote-learner.net + */ + + /** + * This method calls the base class constructor + * @method LTITINYMCEPANEL + */ +var LTITINYMCEPANEL = function() { + LTITINYMCEPANEL.superclass.constructor.apply(this, arguments); +}; + +Y.extend(LTITINYMCEPANEL, Y.Base, { + /** + * The context id the editor was launched in. + * @property contextid + * @type {Integer} + * @default null + */ + contextid: 0, + + /** + * Init function for the checkboxselection module + * @property {Object} params Data to help initialize the YUI module. + */ + init : function(params) { + // Check to make sure parameters are initialized. + if ('' === params.insertbtnid || '' === params.ltilaunchurl || '' === params.objecttagheight || '' === params.objecttagid || '' === params.previewiframeid) { + alert('Some parameters were not initialized.'); + return; + } + + // Initialize the the browse when the window is initially rendered. + this.load_lti_content(params.ltilaunchurl, params.objecttagid, params.objecttagheight); + + // Disable the insert button since nothing has been selected yet. + Y.one('#'+params.insertbtnid).set('disabled', true); + + // Listen to simulated click event send from local/kaltura/service.php + Y.one('#closeltipanel').on('click', this.user_selected_video_callback, this, params.insertbtnid, params.objecttagid, params.previewiframeid, params.objecttagheight); + + if (null !== Y.one('#page-footer')) { + Y.one('#page-footer').setStyle('display', 'none'); + } + }, + + /** + * A funciton to load the LTI content. This is called when the YUI module is first initialized. + * @property {String} url LTI launch URL. + * @property {String} iframeid iframe tag id. + * @property {String} iframeheight iframe tag height. + */ + load_lti_content : function(url, iframeid, iframeheight) { + if (0 === this.contextid) { + this.contextid = Y.one('#lti_launch_context_id').get('value'); + } + + var content = ''; + Y.one('#'+iframeid).setContent(content); + }, + + /** + * This function serves as a call back method for when the closeltipanel div has been clicked. It means that the user has + * selected a video for embedding into the TinyMCE edotor. Enabling the insert button, removing the contents LTI launch element and + * adding content to the media preview element. + * @property {Object} e Event object. + * @property {String} insertbtnid Insert button id. + * @property {String} objecttagid Object tag id. + * @property {String} previewiframeid Preview iframe tag id. + * @property {String} height Height of the iframe. + */ + user_selected_video_callback : function(e, insertbtnid, objecttagid, previewiframeid, height) { + Y.one('#'+insertbtnid).setStyle('display', 'inline'); + Y.one('#'+insertbtnid).set('disabled', false); + Y.one('#'+objecttagid).setContent(''); + + var center = Y.Node.create('
    '); + var iframe = Y.Node.create(''); + iframe.setAttribute('width', Y.one('#width').get('value')+'px'); + iframe.setAttribute('height', height+'px'); + iframe.setAttribute('src', Y.one('#source').get('value')); + + center.append(iframe); + Y.one('#'+previewiframeid).append(center); + } +}, +{ + NAME : 'moodle-local_kaltura-ltitinymcepanel', + ATTRS : { + insertbtnid : { + value : '' + }, + ltilaunchurl : { + value : '' + }, + objecttagheight : { + value : '' + }, + objecttagid : { + value : '' + }, + previewiframeid : { + value : '' + } + } +}); +M.local_kaltura = M.local_kaltura || {}; + +/** + * Entry point for ltipanel module + * @param {Object} params Additional parameters. + * @return {Object} the ltipanel object + */ +M.local_kaltura.init = function(params) { + return new LTITINYMCEPANEL(params); +}; + + +}, '@VERSION@', {"requires": ["base", "node", "panel", "node-event-simulate"]}); diff --git a/local/kaltura/yui/src/build/moodle-local_kaltura-ltiservice/moodle-local_kaltura-ltiservice-debug.js b/local/kaltura/yui/src/build/moodle-local_kaltura-ltiservice/moodle-local_kaltura-ltiservice-debug.js new file mode 100644 index 0000000000000..3e316429bff2b --- /dev/null +++ b/local/kaltura/yui/src/build/moodle-local_kaltura-ltiservice/moodle-local_kaltura-ltiservice-debug.js @@ -0,0 +1,58 @@ +YUI.add('moodle-local_kaltura-ltiservice', function (Y, NAME) { + +// This file is part of Moodle - http://moodle.org/ +// +// Moodle is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// Moodle is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with Moodle. If not, see . + +/** + * YUI module for displaying an LTI launch within a YUI panel. + * + * @package local_kaltura + * @author Remote-Learner.net Inc + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + * @copyright (C) 2014 Remote Learner.net Inc http://www.remote-learner.net + */ + + /** + * This method calls the base class constructor + * @method LTISERVICE + */ +var LTISERVICE = function() { + LTISERVICE.superclass.constructor.apply(this, arguments); +}; + +Y.extend(LTISERVICE, Y.Base, { + /** + * Init function for the checkboxselection module + */ + init : function() { + alert('ltiservice'); + + } +}, +{ + NAME : 'moodle-local_kaltura-ltiservice' +}); +M.local_kaltura = M.local_kaltura || {}; + +/** + * Entry point for ltiservice module + * @param string params additional parameters. + * @return object the ltiservice object + */ +M.local_kaltura.init = function(params) { + return new LTISERVICE(params); +}; + +}, '@VERSION@', {"requires": ["base", "node"]}); diff --git a/local/kaltura/yui/src/build/moodle-local_kaltura-ltiservice/moodle-local_kaltura-ltiservice-min.js b/local/kaltura/yui/src/build/moodle-local_kaltura-ltiservice/moodle-local_kaltura-ltiservice-min.js new file mode 100644 index 0000000000000..aeb426ce7fab1 --- /dev/null +++ b/local/kaltura/yui/src/build/moodle-local_kaltura-ltiservice/moodle-local_kaltura-ltiservice-min.js @@ -0,0 +1 @@ +YUI.add("moodle-local_kaltura-ltiservice",function(e,t){var n=function(){n.superclass.constructor.apply(this,arguments)};e.extend(n,e.Base,{init:function(){alert("ltiservice")}},{NAME:"moodle-local_kaltura-ltiservice"}),M.local_kaltura=M.local_kaltura||{},M.local_kaltura.init=function(e){return new n(e)}},"@VERSION@",{requires:["base","node"]}); diff --git a/local/kaltura/yui/src/build/moodle-local_kaltura-ltiservice/moodle-local_kaltura-ltiservice.js b/local/kaltura/yui/src/build/moodle-local_kaltura-ltiservice/moodle-local_kaltura-ltiservice.js new file mode 100644 index 0000000000000..3e316429bff2b --- /dev/null +++ b/local/kaltura/yui/src/build/moodle-local_kaltura-ltiservice/moodle-local_kaltura-ltiservice.js @@ -0,0 +1,58 @@ +YUI.add('moodle-local_kaltura-ltiservice', function (Y, NAME) { + +// This file is part of Moodle - http://moodle.org/ +// +// Moodle is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// Moodle is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with Moodle. If not, see . + +/** + * YUI module for displaying an LTI launch within a YUI panel. + * + * @package local_kaltura + * @author Remote-Learner.net Inc + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + * @copyright (C) 2014 Remote Learner.net Inc http://www.remote-learner.net + */ + + /** + * This method calls the base class constructor + * @method LTISERVICE + */ +var LTISERVICE = function() { + LTISERVICE.superclass.constructor.apply(this, arguments); +}; + +Y.extend(LTISERVICE, Y.Base, { + /** + * Init function for the checkboxselection module + */ + init : function() { + alert('ltiservice'); + + } +}, +{ + NAME : 'moodle-local_kaltura-ltiservice' +}); +M.local_kaltura = M.local_kaltura || {}; + +/** + * Entry point for ltiservice module + * @param string params additional parameters. + * @return object the ltiservice object + */ +M.local_kaltura.init = function(params) { + return new LTISERVICE(params); +}; + +}, '@VERSION@', {"requires": ["base", "node"]}); diff --git a/local/kaltura/yui/src/lticontainer/build.json b/local/kaltura/yui/src/lticontainer/build.json new file mode 100644 index 0000000000000..cc70a98cbce94 --- /dev/null +++ b/local/kaltura/yui/src/lticontainer/build.json @@ -0,0 +1,10 @@ +{ + "name": "moodle-local_kaltura-lticontainer", + "builds": { + "moodle-local_kaltura-lticontainer": { + "jsfiles": [ + "lticontainer.js" + ] + } + } +} \ No newline at end of file diff --git a/local/kaltura/yui/src/lticontainer/js/lticontainer.js b/local/kaltura/yui/src/lticontainer/js/lticontainer.js new file mode 100644 index 0000000000000..bd1df15a2fa86 --- /dev/null +++ b/local/kaltura/yui/src/lticontainer/js/lticontainer.js @@ -0,0 +1,162 @@ +// This file is part of Moodle - http://moodle.org/ +// +// Moodle is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// Moodle is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with Moodle. If not, see . + +/** + * YUI module used to resize the LTI launch container. + * + * @package local_kaltura + * @author Remote-Learner.net Inc + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + * @copyright (C) 2014 Remote Learner.net Inc http://www.remote-learner.net + */ + +/** + * This method calls the base class constructor + * @method LTICONTAINER + */ +var LTICONTAINER = function() { + LTICONTAINER.superclass.constructor.apply(this, arguments); +}; + +Y.extend(LTICONTAINER, Y.Base, { + /** + * The last known height of the element. + * @property lastheight + * @type {Integer} + * @default null + */ + lastheight: null, + + /** + * Add padding to make the bottom of the iframe visible. The iframe wasn't visible on some themes. Probably because of border widths, etc. + * @property padding + * @type {Integer} + * @default 15 + */ + padding: 15, + + /** + * Height of window. + * @property viewportheight + * @type {Integer} + * @default 15 + */ + viewportheight: null, + + /** + * Height of the entire document. + * @property documentheight + * @type {Integer} + * @default null + */ + documentheight: null, + + /** + * Height of the body element. + * @property documentheight + * @type {Integer} + * @default null + */ + clientheight: null, + + /** + * User video width size selection. + * @property kalvidwidth + * @type {Integer} + * @default null + */ + kalvidwidth: null, + + /** + * The YUI node object for the iframe container. + * @property ltiframe + * @type {Object} + * @default null + */ + ltiframe: null, + + /** + * Init function for the checkboxselection module + * @property params + * @type {Object} + */ + init : function(params) { + var bodynode = Y.one('body[class~='+params.bodyclass+']'); + + this.lastheight = params.lastheight; + this.padding = params.padding; + this.viewportheight = bodynode.get('winHeight'); + this.documentheight = bodynode.get('docHeight'); + this.clientheight = bodynode.getDOMNode.clientHeight; + this.ltiframe = Y.one('#contentframe'); + this.kalvidwidth = params.kalvidwidth; + + this.resize(); + this.timer = Y.later(250, this, this.resize); + }, + + /** + * This function resizes the iframe height and width. + */ + resize : function() { + if (this.lastheight !== Math.min(this.documentheight, this.viewportheight)) { + var newheight = this.viewportheight - this.ltiframe.getY() - this.padding+"px"; + this.ltiframe.setStyle('height', newheight); + this.lastheight = Math.min(this.documentheight, this.viewportheight); + } + + var kalvidcontent = Y.one('#kalvid_content'); + if (kalvidcontent !== null) { + var maxwidth = kalvidcontent.get('offsetWidth'); + var allowedsize = maxwidth - this.padding; + + if (this.kalvidwidth !== null) { + // Double current user's video width selection as requested by Kaltura. + var newsize = this.kalvidwidth * 2; + + // If "newsize" if over allowed size then set it to the maximum allowed. + if (newsize > allowedsize) { + this.ltiframe.setStyle('width', allowedsize+'px'); + } else { + this.ltiframe.setStyle('width', newsize+'px'); + } + } + } + } +}, +{ + NAME : 'moodle-local_kaltura-lticontainer', + ATTRS : { + bodyclass : { + value : null + }, + lastheight : { + value : null + }, + padding: { + value : 15 + } + } +}); +M.local_kaltura = M.local_kaltura || {}; + +/** + * Entry point for lticontainer module + * @param string params additional parameters. + * @return object the lticontainer object + */ +M.local_kaltura.init = function(params) { + return new LTICONTAINER(params); +}; diff --git a/local/kaltura/yui/src/lticontainer/meta/lticontainer.json b/local/kaltura/yui/src/lticontainer/meta/lticontainer.json new file mode 100644 index 0000000000000..f3a5d478c89f3 --- /dev/null +++ b/local/kaltura/yui/src/lticontainer/meta/lticontainer.json @@ -0,0 +1,8 @@ +{ + "moodle-local_kaltura-lticontainer": { + "requires": [ + "base", + "node" + ] + } +} \ No newline at end of file diff --git a/local/kaltura/yui/src/ltipanel/build.json b/local/kaltura/yui/src/ltipanel/build.json new file mode 100644 index 0000000000000..037cdbe58b803 --- /dev/null +++ b/local/kaltura/yui/src/ltipanel/build.json @@ -0,0 +1,10 @@ +{ + "name": "moodle-local_kaltura-ltipanel", + "builds": { + "moodle-local_kaltura-ltipanel": { + "jsfiles": [ + "ltipanel.js" + ] + } + } +} diff --git a/local/kaltura/yui/src/ltipanel/js/ltipanel.js b/local/kaltura/yui/src/ltipanel/js/ltipanel.js new file mode 100644 index 0000000000000..559635513c23a --- /dev/null +++ b/local/kaltura/yui/src/ltipanel/js/ltipanel.js @@ -0,0 +1,467 @@ +// This file is part of Moodle - http://moodle.org/ +// +// Moodle is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// Moodle is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with Moodle. If not, see . + +/** + * YUI module for displaying an LTI launch within a YUI panel. + * + * @package local_kaltura + * @author Remote-Learner.net Inc + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + * @copyright (C) 2014 Remote Learner.net Inc http://www.remote-learner.net + */ + + /** + * This method calls the base class constructor + * @method LTIPANEL + */ +var LTIPANEL = function() { + LTIPANEL.superclass.constructor.apply(this, arguments); +}; + +Y.extend(LTIPANEL, Y.Base, { + /** + * Contains the object tag needed to launch an LTI session. + * @property panelbodycontent + * @type {String} + * @default null + */ + panelbodycontent: null, + + /** + * Set to true if panel is visible, otherwise false. + * @property panelvisible + * @type {Boolean} + * @default null + */ + panelvisible: false, + + /** + * The panel object + * @property panel + * @type {Object} + * @default null + */ + panel: null, + + /** + * The name of the initiating module. + * @property modulename + * @type {String} + * @default null + */ + modulename: null, + + /** + * The id value of the add media button. + * @property addvidbtnid + * @type {String} + * @default null + */ + addvidbtnid: null, + + /** + * Init function for the checkboxselection module + * @property params + * @type {Object} + */ + init : function(params) { + // Check to make sure parameters are initialized + if ('0' === params.addvidbtnid || '0' === params.ltilaunchurl || 0 === params.courseid || 0 === params.height || 0 === params.width) { + alert('Some parameters were not initialized.'); + return; + } + + this.modulename = params.modulename; + this.addvidbtnid = params.addvidbtnid; + + var addvideobtn = Y.one('#'+params.addvidbtnid); + addvideobtn.on('click', this.open_panel_callback, this, params.ltilaunchurl, params.height, params.width); + }, + + /** + * Event handler callback for when the add video button is clicked. This function creates the a panel element. + * @property e + * @type {Object} + */ + open_panel_callback : function(e, url, height, width) { + var panelheight = parseInt(height, 10) + 45; + var panelwidth = parseInt(width, 10) + 23 + 'px'; + + width = width+'px'; + // Apply special width for mobile devices as requested by Kaltura. + if (Y.UA.ipod !== 0 || Y.UA.ipad !== 0 || Y.UA.iphone !== 0 || Y.UA.android !== 0 || Y.UA.mobile !== null) { + panelwidth = '80%'; + width = '100%'; + } + + var iframe = ""; + this.panelbodycontent = iframe; + if (Y.UA.ipod !== 0 || Y.UA.ipad !== 0 || Y.UA.iphone !== 0) { + // This outer div will constrain the iframe from overlapping over its content region on iOS devices. + this.panelbodycontent = "
    "+iframe+"
    "; + } + + // If the panel has not yet been initialized. + if (null === this.panel) { + this.panel = new Y.Panel({ + srcNode : Y.Node.create('
    '), + headerContent : '', + bodyContent : this.panelbodycontent, + width : panelwidth, + height : panelheight+"px", + zIndex : 6, + centered : true, + modal : true, + visible : false, + render : true, + hideOn : [ + { + node : Y.one('input[id=closeltipanel]'), + eventName : 'click' + } + ] + }); + + this.panel.show(); + + // Listen to simulated click event send from local/kaltura/service.php + Y.one('input[id=closeltipanel]').on('click', this.lti_hide_panel_callback, this); + + // // Listen to when the panel is made visible or hidden + this.panel.after('visibleChange', this.lti_panel_visible_change_callback, this); + } else { + this.panel.show(); + } + }, + + /** + * Event handler callback for when a simulated click event is triggered on a specifc element. + */ + lti_hide_panel_callback : function() { + // hide the thumbnail image. + var imagenode = Y.one('img[id=video_thumbnail]'); + imagenode.setStyle('display', 'none'); + // Update the iframe element attributes + var iframenode = Y.one('iframe[id=contentframe]'); + iframenode.setAttribute('width', Y.one('input[id=width]').getAttribute('value')); + iframenode.setAttribute('height', Y.one('input[id=height]').getAttribute('value')); + iframenode.setStyle('display', 'inline'); + + // If the page is a Video presentation or resource execute a function to change the button caption KALDEV-579 + var element = Y.one('input[name=modulename]'); + + if (undefined !== element && ('kalvidres' === this.modulename || 'kalvidpres' === this.modulename)) { + this.lti_panel_change_add_media_button_caption(); + } + }, + + lti_panel_change_add_media_button_caption : function() { + // Need to find a better way of doing this. Change was made for KALDEV-579. + var buttoncaption = M.util.get_string('replace_video', this.modulename); + if (buttoncaption !== Y.one('#'+this.addvidbtnid).getAttribute('value')) { + Y.one('#'+this.addvidbtnid).setAttribute('value', buttoncaption); + } + }, + + /** + * Event handler callback for when the panel is made hidden or visible. + */ + lti_panel_visible_change_callback : function() { + this.panelvisible = this.panel.get('visible'); + + // If panel is visible, re-launch the LIT request so that the user sees the main page. Instead of the last page they visited. If the panel is not visible then + // set the content to an empty string; this prevents videos from the iframe from continuing to play after the panel was closed. + if (true === this.panelvisible) { + this.panel.set('bodyContent', this.panelbodycontent); + } else { + this.panel.set('bodyContent', ''); + } + } +}, +{ + NAME : 'moodle-local_kaltura-ltipanel', + ATTRS : { + addvidbtnid : { + value: '0' + }, + ltilaunchurl : { + value: '0' + }, + height : { + value: 0 + }, + width : { + value: 0 + }, + modulename : { + value: '' + } + } +}); + +/** + * This method calls the base class constructor. The primary difference between LTIPANELMEDIAASSIGNMENT and LTIPANEL is that + * LTIPANELMEDIAASSIGNMENT creates a node and appends it to the body tag of the page. The reason for this is due to an issue with the Moodle + * navbar covering up part of the YUI panel, if the panel markup is appended to a child element within the body tag. + * @method LTIPANELMEDIAASSIGNMENT + */ +var LTIPANELMEDIAASSIGNMENT = function() { + LTIPANELMEDIAASSIGNMENT.superclass.constructor.apply(this, arguments); +}; + +Y.extend(LTIPANELMEDIAASSIGNMENT, Y.Base, { + /** + * Contains the object tag needed to launch an LTI session. + * @property panelbodycontent + * @type {String} + * @default null + */ + panelbodycontent: null, + + /** + * Set to true if panel is visible, otherwise false. + * @property panelvisible + * @type {Boolean} + * @default null + */ + panelvisible: false, + + /** + * The panel object + * @property panel + * @type {Object} + * @default null + */ + panel: null, + + /** + * The panel height. + * @property panelheight + * @type {Integer} + * @default 0 + */ + panelheight: 0, + + /** + * The panel width. + * @property panelwidth + * @type {Integer} + * @default 0 + */ + panelwidth: 0, + + /** + * Init function for the checkboxselection module + * @property params + * @type {Object} + */ + init : function(params) { + // Check to make sure parameters are initialized + if ('0' === params.addvidbtnid || '0' === params.ltilaunchurl || 0 === params.courseid || 0 === params.height || 0 === params.width) { + return; + } + + var addvideobtn = Y.one('#'+params.addvidbtnid); + addvideobtn.on('click', this.open_panel_callback, this, params.ltilaunchurl, params.height, params.width); + }, + + /** + * Event handler callback for when the add video button is clicked. This function creates the a panel element. + * @property e + * @type {Object} + */ + open_panel_callback : function(e, url, height, width) { + this.panelheight = parseInt(height, 10) + 45; + this.panelwidth = parseInt(width, 10) + 23; + + this.panelbodycontent = ""; + + // If the panel has not yet been initialized. + if (null === this.panel) { + this.panel = new Y.Panel({ + srcNode : Y.Node.create('
    '), + headerContent : '', + bodyContent : this.panelbodycontent, + width : this.panelwidth+"px", + height : this.panelheight+"px", + zIndex : 6, + centered : true, + modal : true, + visible : false, + render : true, + hideOn : [ + { + node : Y.one('input[id=closeltipanel]'), + eventName : 'click' + } + ] + }); + + this.panel.show(); + + // Listen to simulated click event send from local/kaltura/service.php + Y.one('input[id=closeltipanel]').on('click', this.lti_hide_panel_callback, this); + + // Listen to when the panel is made visible or hidden + this.panel.after('visibleChange', this.lti_panel_visible_change_callback, this); + } else { + this.panel.show(); + } + }, + + /** + * Event handler callback for when a simulated click event is triggered on a specifc element. + */ + lti_hide_panel_callback : function() { + // Enable submit button + Y.one('input[id=submit_video]').removeAttribute('disabled'); + // hide the thumbnail image. + var imagenode = Y.one('img[id=video_thumbnail]'); + imagenode.setStyle('display', 'none'); + // Update the iframe element attributes + var iframenode = Y.one('iframe[id=contentframe]'); + iframenode.setAttribute('width', Y.one('input[id=width]').getAttribute('value')); + iframenode.setAttribute('height', Y.one('input[id=height]').getAttribute('value')); + iframenode.setStyle('display', 'inline'); + Y.one('#id_add_video').set('value', M.util.get_string('replacevideo', 'kalvidassign')); + }, + + /** + * Event handler callback for when the panel is made hidden or visible. + */ + lti_panel_visible_change_callback : function() { + this.panelvisible = this.panel.get('visible'); + + // If panel is visible, re-launch the LIT request so that the user sees the main page. Instead of the last page they visited. If the panel is not visible then + // set the content to an empty string; this prevents videos from the iframe from continuing to play after the panel was closed. + if (true === this.panelvisible) { + this.panel.set('bodyContent', this.panelbodycontent); + this.panel.set('height', this.panelheight); + this.panel.set('width', this.panelwidth); + this.panel.set('centered', true); + } else { + this.panel.set('bodyContent', ''); + } + } +}, +{ + NAME : 'moodle-local_kaltura-ltipanel', + ATTRS : { + addvidbtnid : { + value: '0' + }, + ltilaunchurl : { + value: '0' + }, + height : { + value: 0 + }, + width : { + value: 0 + } + } +}); + +/** + * This method calls the base class constructor. This module renders a Panel for viewing media from multiple sources. + * @method LTISUBMISSIONREVIEW + */ +var LTISUBMISSIONREVIEW = function() { + LTISUBMISSIONREVIEW.superclass.constructor.apply(this, arguments); +}; + +Y.extend(LTISUBMISSIONREVIEW, Y.Base, { + /** + * An instance of the ltimediaassignment class. + * @property ltimediaassignment + * @type {Object} + * @default null + */ + ltimediaassignment: null, + + + /** + * Init function for the checkboxselection module + * @property params + * @type {Object} + */ + init : function(ltimediaassignment) { + this.ltimediaassignment = ltimediaassignment; + Y.one('form[id=fastgrade]').delegate('click', this.review_submission, 'a[name=submission_source]', this); + }, + + /** + * Callback function for when a user clicks on the review submission link. + * @property e + * @type {Object} + */ + review_submission : function(e) { + e.preventDefault(); + var source, height, width; + // Test if the target is an anchor tag or img tag. + if (e.target.test('a')) { + source = e.target.getAttribute('href'); + height = e.target.ancestor('div[name=media_submission]').get('childNodes').filter('input[name=height]').get('value'); + width = e.target.ancestor('div[name=media_submission]').get('childNodes').filter('input[name=width]').get('value'); + } else { + source = e.target.ancestor('a[name=submission_source]').getAttribute('href'); + height = e.target.ancestor('div[name=media_submission]').get('childNodes').filter('input[name=height]').get('value'); + width = e.target.ancestor('div[name=media_submission]').get('childNodes').filter('input[name=width]').get('value'); + } + + this.ltimediaassignment.open_panel_callback(null, source, height, width); + } +}, +{ + NAME : 'moodle-local_kaltura-ltipanel' +}); + +M.local_kaltura = M.local_kaltura || {}; + +/** + * Entry point for ltipanel module + * @param string params additional parameters. + * @return object the ltipanel object + */ +M.local_kaltura.init = function(params) { + return new LTIPANEL(params); +}; + +/** + * Entry point for ltipanelmediaassignment module + * @param string params additional parameters. + * @return object the ltipanel object + */ +M.local_kaltura.initmediaassignment = function(params) { + return new LTIPANELMEDIAASSIGNMENT(params); +}; + +/** + * Entry point for ltipanelmediaassignment module + * @param string params additional parameters. + * @return object the ltipanel object + */ +M.local_kaltura.initreviewsubmission = function() { + var args = { + addvidbtnid: '0', + ltilaunchurl: '0', + courseid: 0, + height: 0, + width: 0 + }; + var mediaassignment = new LTIPANELMEDIAASSIGNMENT(args); + return new LTISUBMISSIONREVIEW(mediaassignment); +}; \ No newline at end of file diff --git a/local/kaltura/yui/src/ltipanel/meta/ltipanel.json b/local/kaltura/yui/src/ltipanel/meta/ltipanel.json new file mode 100644 index 0000000000000..c6fd71178cfe7 --- /dev/null +++ b/local/kaltura/yui/src/ltipanel/meta/ltipanel.json @@ -0,0 +1,10 @@ +{ + "moodle-local_kaltura-ltipanel": { + "requires": [ + "base", + "node", + "panel", + "node-event-simulate" + ] + } +} diff --git a/local/kaltura/yui/src/ltiservice/build.json b/local/kaltura/yui/src/ltiservice/build.json new file mode 100644 index 0000000000000..a6512cc4eb485 --- /dev/null +++ b/local/kaltura/yui/src/ltiservice/build.json @@ -0,0 +1,10 @@ +{ + "name": "moodle-local_kaltura-ltiservice", + "builds": { + "moodle-local_kaltura-ltiservice": { + "jsfiles": [ + "ltiservice.js" + ] + } + } +} diff --git a/local/kaltura/yui/src/ltiservice/js/ltiservice.js b/local/kaltura/yui/src/ltiservice/js/ltiservice.js new file mode 100644 index 0000000000000..61ab4bc6204f3 --- /dev/null +++ b/local/kaltura/yui/src/ltiservice/js/ltiservice.js @@ -0,0 +1,115 @@ +// This file is part of Moodle - http://moodle.org/ +// +// Moodle is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// Moodle is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with Moodle. If not, see . + +/** + * YUI module for displaying an LTI launch within a YUI panel. + * + * @package local_kaltura + * @author Remote-Learner.net Inc + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + * @copyright (C) 2014 Remote Learner.net Inc http://www.remote-learner.net + */ + + /** + * This method calls the base class constructor + * @method LTISERVICE + */ +var LTISERVICE = function() { + LTISERVICE.superclass.constructor.apply(this, arguments); +}; + +Y.extend(LTISERVICE, Y.Base, { + /** + * Init function for triggering a custom event and setting attributes. Also checks whether optional elements exist in the parent window. + * @property params + * @type {Object} + */ + init : function(params) { + if (window.parent.document.getElementById('video_title')) { + Y.one(window.parent.document.getElementById('video_title')).setAttribute('value', params.title); + } + + if (window.parent.document.getElementById('entry_id')) { + Y.one(window.parent.document.getElementById('entry_id')).setAttribute('value', params.entryid); + } + + if (window.parent.document.getElementById('height')) { + Y.one(window.parent.document.getElementById('height')).setAttribute('value', params.height); + } + + if (window.parent.document.getElementById('width')) { + Y.one(window.parent.document.getElementById('width')).setAttribute('value', params.width); + } + + if (window.parent.document.getElementById('uiconf_id')) { + Y.one(window.parent.document.getElementById('uiconf_id')).setAttribute('value', '1'); + } + + if (window.parent.document.getElementById('widescreen')) { + Y.one(window.parent.document.getElementById('widescreen')).setAttribute('value', '1'); + } + + if (window.parent.document.getElementById('video_preview_frame')) { + Y.one(window.parent.document.getElementById('video_preview_frame')).setAttribute('src', decodeURIComponent(params.iframeurl)); + } else if (window.parent.document.getElementById('contentframe')) { + Y.one(window.parent.document.getElementById('contentframe')).setAttribute('src', decodeURIComponent(params.iframeurl)); + } + + // This element must exist. + Y.one(window.parent.document.getElementById('source')).setAttribute('value', decodeURIComponent(params.iframeurl)); + + if (window.parent.document.getElementById('metadata')) { + Y.one(window.parent.document.getElementById('metadata')).setAttribute('value', params.metadata); + } + + if (window.parent.document.getElementById('closeltipanel')) { + Y.one(window.parent.document.getElementById('closeltipanel')).simulate('click'); + } + } +}, +{ + NAME : 'moodle-local_kaltura-ltiservice', + ATTRS : { + iframeurl : { + value: '' + }, + width : { + value: '' + }, + height : { + value: '' + }, + entryid : { + value: '' + }, + title : { + value: '' + }, + metadata : { + value: '' + } + } + +}); +M.local_kaltura = M.local_kaltura || {}; + +/** + * Entry point for ltiservice module + * @param string params additional parameters. + * @return object the ltiservice object + */ +M.local_kaltura.init = function(params) { + return new LTISERVICE(params); +}; \ No newline at end of file diff --git a/local/kaltura/yui/src/ltiservice/meta/ltiservice.json b/local/kaltura/yui/src/ltiservice/meta/ltiservice.json new file mode 100644 index 0000000000000..0252ffd4bbf59 --- /dev/null +++ b/local/kaltura/yui/src/ltiservice/meta/ltiservice.json @@ -0,0 +1,9 @@ +{ + "moodle-local_kaltura-ltiservice": { + "requires": [ + "base", + "node", + "node-event-simulate" + ] + } +} \ No newline at end of file diff --git a/local/kaltura/yui/src/ltitinymcepanel/build.json b/local/kaltura/yui/src/ltitinymcepanel/build.json new file mode 100644 index 0000000000000..c74304ce7f21e --- /dev/null +++ b/local/kaltura/yui/src/ltitinymcepanel/build.json @@ -0,0 +1,10 @@ +{ + "name": "moodle-local_kaltura-ltitinymcepanel", + "builds": { + "moodle-local_kaltura-ltitinymcepanel": { + "jsfiles": [ + "ltitinymcepanel.js" + ] + } + } +} diff --git a/local/kaltura/yui/src/ltitinymcepanel/js/ltitinymcepanel.js b/local/kaltura/yui/src/ltitinymcepanel/js/ltitinymcepanel.js new file mode 100644 index 0000000000000..d3ce263a58c80 --- /dev/null +++ b/local/kaltura/yui/src/ltitinymcepanel/js/ltitinymcepanel.js @@ -0,0 +1,136 @@ +// This file is part of Moodle - http://moodle.org/ +// +// Moodle is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// Moodle is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with Moodle. If not, see . + +/** + * YUI module for displaying an LTI launch within a YUI panel. + * + * @package local_kaltura + * @author Remote-Learner.net Inc + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + * @copyright (C) 2014 Remote Learner.net Inc http://www.remote-learner.net + */ + + /** + * This method calls the base class constructor + * @method LTITINYMCEPANEL + */ +var LTITINYMCEPANEL = function() { + LTITINYMCEPANEL.superclass.constructor.apply(this, arguments); +}; + +Y.extend(LTITINYMCEPANEL, Y.Base, { + /** + * The context id the editor was launched in. + * @property contextid + * @type {Integer} + * @default null + */ + contextid: 0, + + /** + * Init function for the checkboxselection module + * @property {Object} params Data to help initialize the YUI module. + */ + init : function(params) { + // Check to make sure parameters are initialized. + if ('' === params.insertbtnid || '' === params.ltilaunchurl || '' === params.objecttagheight || '' === params.objecttagid || '' === params.previewiframeid) { + alert('Some parameters were not initialized.'); + return; + } + + // Initialize the the browse when the window is initially rendered. + this.load_lti_content(params.ltilaunchurl, params.objecttagid, params.objecttagheight); + + // Disable the insert button since nothing has been selected yet. + Y.one('#'+params.insertbtnid).set('disabled', true); + + // Listen to simulated click event send from local/kaltura/service.php + Y.one('#closeltipanel').on('click', this.user_selected_video_callback, this, params.insertbtnid, params.objecttagid, params.previewiframeid, params.objecttagheight); + + if (null !== Y.one('#page-footer')) { + Y.one('#page-footer').setStyle('display', 'none'); + } + }, + + /** + * A funciton to load the LTI content. This is called when the YUI module is first initialized. + * @property {String} url LTI launch URL. + * @property {String} iframeid iframe tag id. + * @property {String} iframeheight iframe tag height. + */ + load_lti_content : function(url, iframeid, iframeheight) { + if (0 === this.contextid) { + this.contextid = Y.one('#lti_launch_context_id').get('value'); + } + + var content = ''; + Y.one('#'+iframeid).setContent(content); + }, + + /** + * This function serves as a call back method for when the closeltipanel div has been clicked. It means that the user has + * selected a video for embedding into the TinyMCE edotor. Enabling the insert button, removing the contents LTI launch element and + * adding content to the media preview element. + * @property {Object} e Event object. + * @property {String} insertbtnid Insert button id. + * @property {String} objecttagid Object tag id. + * @property {String} previewiframeid Preview iframe tag id. + * @property {String} height Height of the iframe. + */ + user_selected_video_callback : function(e, insertbtnid, objecttagid, previewiframeid, height) { + Y.one('#'+insertbtnid).setStyle('display', 'inline'); + Y.one('#'+insertbtnid).set('disabled', false); + Y.one('#'+objecttagid).setContent(''); + + var center = Y.Node.create('
    '); + var iframe = Y.Node.create(''); + iframe.setAttribute('width', Y.one('#width').get('value')+'px'); + iframe.setAttribute('height', height+'px'); + iframe.setAttribute('src', Y.one('#source').get('value')); + + center.append(iframe); + Y.one('#'+previewiframeid).append(center); + } +}, +{ + NAME : 'moodle-local_kaltura-ltitinymcepanel', + ATTRS : { + insertbtnid : { + value : '' + }, + ltilaunchurl : { + value : '' + }, + objecttagheight : { + value : '' + }, + objecttagid : { + value : '' + }, + previewiframeid : { + value : '' + } + } +}); +M.local_kaltura = M.local_kaltura || {}; + +/** + * Entry point for ltipanel module + * @param {Object} params Additional parameters. + * @return {Object} the ltipanel object + */ +M.local_kaltura.init = function(params) { + return new LTITINYMCEPANEL(params); +}; diff --git a/local/kaltura/yui/src/ltitinymcepanel/meta/ltitinymcepanel.json b/local/kaltura/yui/src/ltitinymcepanel/meta/ltitinymcepanel.json new file mode 100644 index 0000000000000..4d0cc2d1ded4a --- /dev/null +++ b/local/kaltura/yui/src/ltitinymcepanel/meta/ltitinymcepanel.json @@ -0,0 +1,10 @@ +{ + "moodle-local_kaltura-ltitinymcepanel": { + "requires": [ + "base", + "node", + "panel", + "node-event-simulate" + ] + } +} diff --git a/local/kalturamediagallery/db/access.php b/local/kalturamediagallery/db/access.php new file mode 100644 index 0000000000000..50efff4815640 --- /dev/null +++ b/local/kalturamediagallery/db/access.php @@ -0,0 +1,37 @@ +. + +/** + * Kaltura media gallery capabilities. + * + * @package local_kalturamediagallery + * @author Remote-Learner.net Inc + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + * @copyright (C) 2014 Remote Learner.net Inc http://www.remote-learner.net + */ + +$capabilities = array( + 'local/kalturamediagallery:view' => array( + 'captype' => 'read', + 'contextlevel' => CONTEXT_COURSE, + 'archetypes' => array( + 'student' => CAP_ALLOW, + 'editingteacher' => CAP_ALLOW, + 'teacher' => CAP_ALLOW, + 'manager' => CAP_ALLOW + ) + ), +); \ No newline at end of file diff --git a/local/kalturamediagallery/index.php b/local/kalturamediagallery/index.php new file mode 100644 index 0000000000000..4771fb78168a0 --- /dev/null +++ b/local/kalturamediagallery/index.php @@ -0,0 +1,78 @@ +. + +/** + * Kaltura media gallery main viewing page. + * + * @package local_kalturamediagallery + * @author Remote-Learner.net Inc + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + * @copyright (C) 2014 Remote Learner.net Inc http://www.remote-learner.net + */ + +require_once(dirname(dirname(dirname(__FILE__))).'/config.php'); + +global $USER, $PAGE; + +require_login(); +$courseid = required_param('courseid', PARAM_INT); + +$context = context_course::instance($courseid); +require_capability('local/kalturamediagallery:view', $context); + +$mediagallery = get_string('heading_mediagallery', 'local_kalturamediagallery'); + +$course = get_course($courseid); + +$PAGE->set_context($context); +$PAGE->set_course($course); +$site = get_site(); +$header = format_string($site->shortname).": $mediagallery"; + +$PAGE->navbar->add(get_string('nav_mediagallery', 'local_kalturamediagallery')); + +$PAGE->set_url('/local/kalturamediagallery/index.php', array('courseid' => $courseid)); +$PAGE->set_pagetype('kalturamediagallery-index'); +$PAGE->set_pagelayout('standard'); +$PAGE->set_title($header); +$PAGE->set_heading($header); + +$pageclass = 'kaltura-mediagallery-body'; +$PAGE->add_body_class($pageclass); + +echo $OUTPUT->header(); + +// Request the launch content with an iframe tag. +$attr = array( + 'id' => 'contentframe', + 'height' => '600px', + 'width' => '100%', + 'allowfullscreen' => 'true', + 'webkitallowfullscreen' => 'true', + 'mozallowfullscreen' => 'true', + 'src' => 'lti_launch.php?courseid='.$courseid +); +echo html_writer::tag('iframe', '', $attr); + +// Require a YUI module to make the iframe tag be as large as possible. +$params = array( + 'bodyclass' => $pageclass, + 'lastheight' => null, + 'padding' => 15 +); +$PAGE->requires->yui_module('moodle-local_kaltura-lticontainer', 'M.local_kaltura.init', array($params), null, true); + +echo $OUTPUT->footer(); \ No newline at end of file diff --git a/local/kalturamediagallery/lang/en/local_kalturamediagallery.php b/local/kalturamediagallery/lang/en/local_kalturamediagallery.php new file mode 100644 index 0000000000000..f6a979f53fa31 --- /dev/null +++ b/local/kalturamediagallery/lang/en/local_kalturamediagallery.php @@ -0,0 +1,31 @@ +. + +/** + * Kaltura media gallery language file. + * + * @package local_kalturamediagallery + * @author Remote-Learner.net Inc + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + * @copyright (C) 2014 Remote Learner.net Inc http://www.remote-learner.net + */ + +$string['heading_mediagallery'] = 'Kaltura Media Gallery'; +$string['invalid_launch_parameters'] = 'Invalid launch parameters'; +$string['kalturamediagallery:view'] = 'View Kaltura Media Gallery'; +$string['nav_mediagallery'] = 'Kaltura Media Gallery'; +$string['nav_mediagallery_page'] = 'Kaltura Media Gallery'; +$string['pluginname'] = 'Kaltura Media Gallery'; \ No newline at end of file diff --git a/local/kalturamediagallery/lib.php b/local/kalturamediagallery/lib.php new file mode 100644 index 0000000000000..ad648814f0506 --- /dev/null +++ b/local/kalturamediagallery/lib.php @@ -0,0 +1,72 @@ +. + +/** + * Kaltura media gallery lib script. + * + * @package local_kalturamediagallery + * @author Remote-Learner.net Inc + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + * @copyright (C) 2014 Remote Learner.net Inc http://www.remote-learner.net + */ + +/** + * This function adds Kaltura media gallery link to the navigation block. The code ensures that the Kaltura media gallery link is only displayed in the 'Current courses' + * menu true. In addition it check if the current context is one that is below the course context. + * @param global_navigation $navigation a global_navigation object + * @return void + */ +function local_kalturamediagallery_extends_navigation($navigation) { + global $USER, $PAGE, $DB; + + if (empty($USER->id)) { + return; + } + + // When on the admin-index page, first check if the capability exists. + // This is to cover the edge case on the Plugins check page, where a check for the capability is performed before the capability has been added to the Moodle mdl_capabilities + // table. + if ('admin-index' === $PAGE->pagetype) { + $exists = $DB->record_exists('capabilities', array('name' => 'local/kalturamediagallery:view')); + + if (!$exists) { + return; + } + } + + // Check the current page context. If the context is not of a course or module then we are in another area of Moodle and return void. + $context = context::instance_by_id($PAGE->context->id); + $isvalidcontext = ($context instanceof context_course || $context instanceof context_module) ? true : false; + if (!$isvalidcontext) { + return; + } + + // If the context if a module then get the parent context. + $coursecontext = null; + if ($context instanceof context_module) { + $coursecontext = $context->get_course_context(); + } else { + $coursecontext = $context; + } + + $mycoursesnode = $navigation->find('currentcourse', $navigation::TYPE_ROOTNODE); + + if (empty($mycoursesnode) || !has_capability('local/kalturamediagallery:view', $coursecontext, $USER)) { + return; + } + + $name = get_string('nav_mediagallery', 'local_kalturamediagallery'); + $url = new moodle_url('/local/kalturamediagallery/index.php', array('courseid' => $coursecontext->instanceid)); + $kalmedgalnode = $mycoursesnode->add($name, $url, navigation_node::NODETYPE_LEAF, $name, 'kalcrsgal'); +} \ No newline at end of file diff --git a/local/kalturamediagallery/lti_launch.php b/local/kalturamediagallery/lti_launch.php new file mode 100644 index 0000000000000..ac873e5e48903 --- /dev/null +++ b/local/kalturamediagallery/lti_launch.php @@ -0,0 +1,53 @@ +. + +/** + * Kaltura media gallery LTI launch page. + * + * @package local_kalturamediagallery + * @author Remote-Learner.net Inc + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + * @copyright (C) 2014 Remote Learner.net Inc http://www.remote-learner.net + */ + +require_once(dirname(dirname(dirname(__FILE__))).'/config.php'); +require_once(dirname(dirname(dirname(__FILE__))).'/local/kaltura/locallib.php'); + +global $USER; + +require_login(); +$courseid = required_param('courseid', PARAM_INT); + +$context = context_course::instance($courseid); +require_capability('local/kalturamediagallery:view', $context); +$course = get_course($courseid); + +$launch = array(); +$launch['id'] = 1; +$launch['cmid'] = 0; +$launch['title'] = 'Kaltura media gallery'; +$launch['module'] = KAF_MEDIAGALLERY_MODULE; +$launch['course'] = $course; +$launch['width'] = '300'; +$launch['height'] = '300'; +$launch['custom_publishdata'] = ''; + +if (local_kaltura_validate_mediagallery_required_params($launch)) { + $content = local_kaltura_request_lti_launch($launch); + echo $content; +} else { + echo get_string('invalid_launch_parameters', 'local_kalturamediagallery'); +} \ No newline at end of file diff --git a/local/kalturamediagallery/version.php b/local/kalturamediagallery/version.php new file mode 100644 index 0000000000000..9c42ae7c8da6e --- /dev/null +++ b/local/kalturamediagallery/version.php @@ -0,0 +1,36 @@ +. + +/** + * Kaltura media gallery version file. + * + * @package local_kalturamediagallery + * @author Remote-Learner.net Inc + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + * @copyright (C) 2014 Remote Learner.net Inc http://www.remote-learner.net + */ + +if (!defined('MOODLE_INTERNAL')) { + die('Direct access to this script is forbidden.'); +} + +$plugin->version = 2014013000; +$plugin->component = 'local_kalturamediagallery'; +$plugin->release = 'Kaltura release 4.0.00 (RL: TBD)'; +$plugin->requires = 2013051400; +$plugin->maturity = MATURITY_STABLE; +$plugin->dependencies = array( + 'local_kaltura' => 2014013000 +); diff --git a/local/mymedia/db/access.php b/local/mymedia/db/access.php new file mode 100644 index 0000000000000..93392131941f4 --- /dev/null +++ b/local/mymedia/db/access.php @@ -0,0 +1,34 @@ +. + +/** + * My Media capabilities. + * + * @package local_mymedia + * @author Remote-Learner.net Inc + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + * @copyright (C) 2014 Remote Learner.net Inc http://www.remote-learner.net + */ + +$capabilities = array( + 'local/mymedia:view' => array( + 'captype' => 'read', + 'contextlevel' => CONTEXT_USER, + 'archetypes' => array( + 'user' => CAP_ALLOW + ) + ), +); \ No newline at end of file diff --git a/local/mymedia/lang/en/local_mymedia.php b/local/mymedia/lang/en/local_mymedia.php new file mode 100644 index 0000000000000..4920ca2654615 --- /dev/null +++ b/local/mymedia/lang/en/local_mymedia.php @@ -0,0 +1,30 @@ +. + +/** + * My Media language file. + * + * @package local_mymedia + * @author Remote-Learner.net Inc + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + * @copyright (C) 2014 Remote Learner.net Inc http://www.remote-learner.net + */ + +$string['heading_mymedia'] = 'My Media'; +$string['invalid_launch_parameters'] = 'Invalid launch parameters'; +$string['mymedia:view'] = 'View My Media page'; +$string['nav_mymedia'] = 'My Media'; +$string['pluginname'] = 'My Media'; \ No newline at end of file diff --git a/local/mymedia/lib.php b/local/mymedia/lib.php new file mode 100644 index 0000000000000..cc1e2c5e1eab3 --- /dev/null +++ b/local/mymedia/lib.php @@ -0,0 +1,56 @@ +. + +/** + * Kaltura my media library script + * + * @package local_mymedia + * @author Remote-Learner.net Inc + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + * @copyright (C) 2014 Remote Learner.net Inc http://www.remote-learner.net + */ + +/** + * This function adds my media links to the navigation block + * @param global_navigation $navigation a global_navigation object + * @return void + */ +function local_mymedia_extends_navigation($navigation) { + global $USER, $DB, $PAGE; + + if (empty($USER->id)) { + return; + } + + // When on the admin-index page, first check if the capability exists. + // This is to cover the edge case on the Plugins check page, where a check for the capability is performed before the capability has been added to the Moodle mdl_capabilities + // table. + if ('admin-index' === $PAGE->pagetype) { + $exists = $DB->record_exists('capabilities', array('name' => 'local/mymedia:view')); + + if (!$exists) { + return; + } + } + + $nodehome = $navigation->get('home'); + $context = context_user::instance($USER->id); + + if (empty($nodehome) || !has_capability('local/mymedia:view', $context, $USER)) { + return; + } + + $mymedia = get_string('nav_mymedia', 'local_mymedia'); + $nodemymedia = $nodehome->add($mymedia, new moodle_url('/local/mymedia/mymedia.php'), navigation_node::NODETYPE_LEAF, $mymedia, 'mymedia'); +} \ No newline at end of file diff --git a/local/mymedia/lti_launch.php b/local/mymedia/lti_launch.php new file mode 100644 index 0000000000000..2f8942319b5f9 --- /dev/null +++ b/local/mymedia/lti_launch.php @@ -0,0 +1,51 @@ +. + +/** + * My Media LTI launch page. + * + * @package local_mymedia + * @author Remote-Learner.net Inc + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + * @copyright (C) 2014 Remote Learner.net Inc http://www.remote-learner.net + */ + +require_once(dirname(dirname(dirname(__FILE__))).'/config.php'); +require_once(dirname(dirname(dirname(__FILE__))).'/local/kaltura/locallib.php'); + +global $USER; + +require_login(); + +$context = context_user::instance($USER->id); +require_capability('local/mymedia:view', $context); + +$launch = array(); +$launch['id'] = 1; +$launch['cmid'] = 0; +$launch['title'] = 'My Media'; +$launch['module'] = KAF_MYMEDIA_MODULE; +$launch['course'] = $PAGE->course; +$launch['width'] = '300'; +$launch['height'] = '300'; +$launch['custom_publishdata'] = ''; + +if (local_kaltura_validate_mymedia_required_params($launch)) { + $content = local_kaltura_request_lti_launch($launch); + echo $content; +} else { + echo get_string('invalid_launch_parameters', 'local_mymedia'); +} \ No newline at end of file diff --git a/local/mymedia/mymedia.php b/local/mymedia/mymedia.php new file mode 100644 index 0000000000000..4cf43fde8f437 --- /dev/null +++ b/local/mymedia/mymedia.php @@ -0,0 +1,71 @@ +. + +/** + * My Media main viewing page. + * + * @package local_mymedia + * @author Remote-Learner.net Inc + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + * @copyright (C) 2014 Remote Learner.net Inc http://www.remote-learner.net + */ + +require_once(dirname(dirname(dirname(__FILE__))).'/config.php'); + +global $USER; + +require_login(); + +$context = context_user::instance($USER->id); +require_capability('local/mymedia:view', $context); + +$mymedia = get_string('heading_mymedia', 'local_mymedia'); +$PAGE->set_context(context_system::instance()); +$site = get_site(); +$header = format_string($site->shortname).": $mymedia"; + +$PAGE->set_url('/local/mymedia/mymedia.php'); +$PAGE->set_pagetype('mymedia-index'); +$PAGE->set_pagelayout('standard'); +$PAGE->set_title($header); +$PAGE->set_heading($header); + +$pageclass = 'kaltura-mediagallery-body'; +$PAGE->add_body_class($pageclass); + +echo $OUTPUT->header(); + +// Request the launch content with an iframe tag. +$attr = array( + 'id' => 'contentframe', + 'height' => '600px', + 'width' => '100%', + 'allowfullscreen' => 'true', + 'webkitallowfullscreen' => 'true', + 'mozallowfullscreen' => 'true', + 'src' => 'lti_launch.php' +); +echo html_writer::tag('iframe', '', $attr); + +// Require a YUI module to make the iframe tag be as large as possible. +$params = array( + 'bodyclass' => $pageclass, + 'lastheight' => null, + 'padding' => 15 +); +$PAGE->requires->yui_module('moodle-local_kaltura-lticontainer', 'M.local_kaltura.init', array($params), null, true); + +echo $OUTPUT->footer(); diff --git a/local/mymedia/version.php b/local/mymedia/version.php new file mode 100644 index 0000000000000..0e5d2b2b3b481 --- /dev/null +++ b/local/mymedia/version.php @@ -0,0 +1,35 @@ +. + +/** + * My Media version file. + * + * @package local_mymedia + * @author Remote-Learner.net Inc + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + * @copyright (C) 2014 Remote Learner.net Inc http://www.remote-learner.net + */ + +if (!defined('MOODLE_INTERNAL')) { + die('Direct access to this script is forbidden.'); +} + +$plugin->version = 2014013000; +$plugin->component = 'local_mymedia'; +$plugin->release = 'Kaltura release 4.0.00 (RL: TBD)'; +$plugin->requires = 2013051400; +$plugin->maturity = MATURITY_STABLE; +$plugin->dependencies = array( + 'local_kaltura' => 2014013000 +); diff --git a/mod/kalvidassign/backup/moodle2/backup_kalvidassign_activity_task.class.php b/mod/kalvidassign/backup/moodle2/backup_kalvidassign_activity_task.class.php new file mode 100644 index 0000000000000..f2b8e7517b095 --- /dev/null +++ b/mod/kalvidassign/backup/moodle2/backup_kalvidassign_activity_task.class.php @@ -0,0 +1,67 @@ +. + +/** + * Kaltura video assignment backup activity task class. + * + * @package mod_kalvidassign + * @author Remote-Learner.net Inc + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + * @copyright (C) 2014 Remote Learner.net Inc http://www.remote-learner.net + */ + +require_once($CFG->dirroot.'/mod/kalvidassign/backup/moodle2/backup_kalvidassign_stepslib.php'); +require_once($CFG->dirroot.'/mod/kalvidassign/backup/moodle2/backup_kalvidassign_settingslib.php'); + +/** + * kalvidassign backup task that provides all the settings and steps to perform one + * complete backup of the activity + */ +class backup_kalvidassign_activity_task extends backup_activity_task { + + /** + * Define (add) particular settings this activity can have. + */ + protected function define_my_settings() { + // No particular settings for this activity. + } + + /** + * Define (add) particular steps this activity can have. + */ + protected function define_my_steps() { + // Choice only has one structure step. + $this->add_step(new backup_kalvidassign_activity_structure_step('kalvidassign_structure', 'kalvidassign.xml')); + } + + /** + * Code the transformations to perform in the activity in + * order to get transportable (encoded) links. + */ + static public function encode_content_links($content) { + global $CFG; + + $base = preg_quote($CFG->wwwroot, '/'); + + // Link to the list of kalvidassigns. + $search="/(".$base."\/mod\/kalvidassign\/index.php\?id\=)([0-9]+)/"; + $content= preg_replace($search, '$@KALVIDASSIGNINDEX*$2@$', $content); + + // Link to kalvidassign view by moduleid. + $search="/(".$base."\/mod\/kalvidassign\/view.php\?id\=)([0-9]+)/"; + $content= preg_replace($search, '$@KALVIDASSIGNVIEWBYID*$2@$', $content); + + return $content; + } +} \ No newline at end of file diff --git a/mod/kalvidassign/backup/moodle2/backup_kalvidassign_settingslib.php b/mod/kalvidassign/backup/moodle2/backup_kalvidassign_settingslib.php new file mode 100644 index 0000000000000..6bf1022679e88 --- /dev/null +++ b/mod/kalvidassign/backup/moodle2/backup_kalvidassign_settingslib.php @@ -0,0 +1,26 @@ +. + +/** + * Kaltura backup settingslib script. + * + * @package mod_kalvidassign + * @author Remote-Learner.net Inc + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + * @copyright (C) 2014 Remote Learner.net Inc http://www.remote-learner.net + */ + + // This activity has no particular settings but the inherited from the generic + // backup_activity_task so here there isn't any class definition, like the ones + // existing in /backup/moodle2/backup_settingslib.php (activities section) \ No newline at end of file diff --git a/mod/kalvidassign/backup/moodle2/backup_kalvidassign_stepslib.php b/mod/kalvidassign/backup/moodle2/backup_kalvidassign_stepslib.php new file mode 100644 index 0000000000000..91561e26a05c8 --- /dev/null +++ b/mod/kalvidassign/backup/moodle2/backup_kalvidassign_stepslib.php @@ -0,0 +1,99 @@ +. + +/** + * Kaltura video assignment backup stepslib script. + * + * @package mod_kalvidassign + * @author Remote-Learner.net Inc + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + * @copyright (C) 2014 Remote Learner.net Inc http://www.remote-learner.net + */ + +/** + * Define all the backup steps that will be used by the backup_kalvidassign_activity_task + */ + +/** + * Define the complete kalvidassign structure for backup, with file and id annotations + */ +class backup_kalvidassign_activity_structure_step extends backup_activity_structure_step { + + /** + * This function defines the structure used to backup the activity. + * @return backup_nested_element The $activitystructure wrapped by the common 'activity' element. + */ + protected function define_structure() { + + // To know if we are including userinfo. + $userinfo = $this->get_setting_value('userinfo'); + + // Define each element separated. + $columns = array( + 'course', + 'name', + 'intro', + 'introformat', + 'timeavailable', + 'timedue', + 'preventlate', + 'resubmit', + 'emailteachers', + 'grade', + 'timecreated', + 'timemodified' + ); + $kalvidassign = new backup_nested_element('kalvidassign', array('id'), $columns); + + $issues = new backup_nested_element('submissions'); + + $columns = array( + 'userid', + 'entry_id', + 'source', + 'width', + 'height', + 'grade', + 'submissioncomment', + 'format', + 'teacher', + 'mailed', + 'timemarked', + 'timecreated', + 'timemodified' + ); + $issue = new backup_nested_element('submission', array('id'), $columns); + + // Build the tree. + $kalvidassign->add_child($issues); + $issues->add_child($issue); + + // Define sources. + $kalvidassign->set_source_table('kalvidassign', array('id' => backup::VAR_ACTIVITYID)); + + // All the rest of elements only happen if we are including user info. + if ($userinfo) { + $issue->set_source_table('kalvidassign_submission', array('vidassignid' => backup::VAR_PARENTID)); + } + + // Annotate the user id's where required. + $issue->annotate_ids('user', 'userid'); + + // Annotate the file areas in use. + $issue->annotate_files('mod_kalvidassign', 'submission', 'id'); + + // Return the root element, wrapped into standard activity structure. + return $this->prepare_activity_structure($kalvidassign); + } +} \ No newline at end of file diff --git a/mod/kalvidassign/backup/moodle2/restore_kalvidassign_activity_task.class.php b/mod/kalvidassign/backup/moodle2/restore_kalvidassign_activity_task.class.php new file mode 100644 index 0000000000000..0ed52df4f50bb --- /dev/null +++ b/mod/kalvidassign/backup/moodle2/restore_kalvidassign_activity_task.class.php @@ -0,0 +1,109 @@ +. + +/** + * Kaltura video assignment restore activity task class script. + * + * @package mod_kalvidassign + * @author Remote-Learner.net Inc + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + * @copyright (C) 2014 Remote Learner.net Inc http://www.remote-learner.net + */ + +defined('MOODLE_INTERNAL') || die(); + +require_once($CFG->dirroot.'/mod/kalvidassign/backup/moodle2/restore_kalvidassign_stepslib.php'); + +/** + * kalvidassign restore task that provides all the settings and steps to perform one + * complete restore of the activity. + */ +class restore_kalvidassign_activity_task extends restore_activity_task { + + /** + * Define (add) particular settings this activity can have. + */ + protected function define_my_settings() { + // No particular settings for this activity. + } + + /** + * Define (add) particular steps this activity can have. + */ + protected function define_my_steps() { + // Certificate only has one structure step. + $this->add_step(new restore_kalvidassign_activity_structure_step('kalvidassign_structure', 'kalvidassign.xml')); + } + + /** + * Define the contents in the activity that must be + * processed by the link decoder. + */ + static public function define_decode_contents() { + $contents = array(); + + $contents[] = new restore_decode_content('kalvidassign', array('intro'), 'kalvidassign'); + + return $contents; + } + + /** + * Define the decoding rules for links belonging + * to the activity to be executed by the link decoder. + */ + static public function define_decode_rules() { + $rules = array(); + + $rules[] = new restore_decode_rule('KALVIDASSIGNVIEWBYID', '/mod/kalvidassign/view.php?id=$1', 'course_module'); + $rules[] = new restore_decode_rule('KALVIDASSIGNINDEX', '/mod/kalvidassign/index.php?id=$1', 'course'); + + return $rules; + + } + + /** + * Define the restore log rules that will be applied + * by the {@link restore_logs_processor} when restoring + * kalvidassign logs. It must return one array + * of {@link restore_log_rule} objects. + */ + static public function define_restore_log_rules() { + $rules = array(); + + $rules[] = new restore_log_rule('kalvidassign', 'add', 'view.php?id={course_module}', '{kalvidassign}'); + $rules[] = new restore_log_rule('kalvidassign', 'update', 'view.php?id={course_module}', '{kalvidassign}'); + $rules[] = new restore_log_rule('kalvidassign', 'view', 'view.php?id={course_module}', '{kalvidassign}'); + + return $rules; + } + + /** + * Define the restore log rules that will be applied + * by the {@link restore_logs_processor} when restoring + * course logs. It must return one array + * of {@link restore_log_rule} objects. + * + * Note this rules are applied when restoring course logs + * by the restore final task, but are defined here at + * activity level. All them are rules not linked to any module instance (cmid = 0). + */ + static public function define_restore_log_rules_for_course() { + $rules = array(); + + // Fix old wrong uses (missing extension) + $rules[] = new restore_log_rule('kalvidassign', 'view all', 'index.php?id={course}', null); + + return $rules; + } +} \ No newline at end of file diff --git a/mod/kalvidassign/backup/moodle2/restore_kalvidassign_stepslib.php b/mod/kalvidassign/backup/moodle2/restore_kalvidassign_stepslib.php new file mode 100644 index 0000000000000..a32272af6603e --- /dev/null +++ b/mod/kalvidassign/backup/moodle2/restore_kalvidassign_stepslib.php @@ -0,0 +1,82 @@ +. + +/** + * Kaltura video assignment restore stepslib script. + * + * @package mod_kalvidassign + * @author Remote-Learner.net Inc + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + * @copyright (C) 2014 Remote Learner.net Inc http://www.remote-learner.net + */ + +/** + * Define all the restore steps that will be used by the restore_kalvidassign_activity_task + */ + +/** + * Structure step to restore one kalvidassign activity. + */ +class restore_kalvidassign_activity_structure_step extends restore_activity_structure_step { + + protected function define_structure() { + + $paths = array(); + $userinfo = $this->get_setting_value('userinfo'); + + $paths[] = new restore_path_element('kalvidassign', '/activity/kalvidassign'); + + if ($userinfo) { + $paths[] = new restore_path_element('kalvidassign_submission', '/activity/kalvidassign/submissions/submission'); + } + + // Return the paths wrapped into standard activity structure. + return $this->prepare_activity_structure($paths); + } + + protected function process_kalvidassign($data) { + global $DB; + + $data = (object)$data; + $oldid = $data->id; + $data->course = $this->get_courseid(); + + $data->timemodified = $this->apply_date_offset($data->timemodified); + + // insert the kalvidassign record. + $newitemid = $DB->insert_record('kalvidassign', $data); + // immediately after inserting "activity" record, call this. + $this->apply_activity_instance($newitemid); + } + + protected function process_kalvidassign_submission($data) { + global $DB; + + $data = (object)$data; + $oldid = $data->id; + + $data->vidassignid = $this->get_new_parentid('kalvidassign'); + $data->userid = $this->get_mappingid('user', $data->userid); + $data->timecreated = $this->apply_date_offset($data->timecreated); + + $newitemid = $DB->insert_record('kalvidassign_submission', $data); + $this->set_mapping('kalvidassign_submission', $oldid, $newitemid); + } + + + protected function after_execute() { + // Add kalvidassign related files, no need to match by itemname (just internally handled context). + $this->add_related_files('mod_kalvidassign', 'submission', 'kalvidassign_submission'); + } +} diff --git a/mod/kalvidassign/db/access.php b/mod/kalvidassign/db/access.php new file mode 100644 index 0000000000000..2c849c6f7849b --- /dev/null +++ b/mod/kalvidassign/db/access.php @@ -0,0 +1,55 @@ +. + +/** + * Kaltura video assignment access script. + * + * @package mod_kalvidassign + * @author Remote-Learner.net Inc + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + * @copyright (C) 2014 Remote Learner.net Inc http://www.remote-learner.net + */ + +$capabilities = array( + + 'mod/kalvidassign:addinstance' => array( + 'riskbitmask' => RISK_XSS, + 'captype' => 'write', + 'contextlevel' => CONTEXT_COURSE, + 'archetypes' => array( + 'editingteacher' => CAP_ALLOW, + 'manager' => CAP_ALLOW + ), + 'clonepermissionsfrom' => 'moodle/course:manageactivities' + ), + + 'mod/kalvidassign:gradesubmission' => array( + 'captype' => 'write', + 'contextlevel' => CONTEXT_MODULE, + 'archetypes' => array( + 'teacher' => CAP_ALLOW, + 'editingteacher' => CAP_ALLOW, + 'manager' => CAP_ALLOW, + ) + ), + + 'mod/kalvidassign:submit' => array( + + 'captype' => 'write', + 'contextlevel' => CONTEXT_MODULE, + 'archetypes' => array( + 'student' => CAP_ALLOW + ) + ), +); \ No newline at end of file diff --git a/mod/kalvidassign/db/install.xml b/mod/kalvidassign/db/install.xml new file mode 100755 index 0000000000000..38705673b142f --- /dev/null +++ b/mod/kalvidassign/db/install.xml @@ -0,0 +1,60 @@ + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    +
    \ No newline at end of file diff --git a/mod/kalvidassign/db/log.php b/mod/kalvidassign/db/log.php new file mode 100644 index 0000000000000..4cbc9949e2b30 --- /dev/null +++ b/mod/kalvidassign/db/log.php @@ -0,0 +1,32 @@ +. + +/** + * Kaltura video assignment log script. + * + * @package mod_kalvidassign + * @author Remote-Learner.net Inc + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + * @copyright (C) 2014 Remote Learner.net Inc http://www.remote-learner.net + */ + + +defined('MOODLE_INTERNAL') || die(); + +$logs = array( + array('module' => 'kalvidassign', 'action' => 'add', 'mtable' => 'kalvidassign', 'field' => 'name'), + array('module' => 'kalvidassign', 'action' => 'update', 'mtable' => 'kalvidassign', 'field' =>' name'), + array('module' => 'kalvidassign', 'action' => 'view', 'mtable' => 'kalvidassign', 'field' => 'name'), + array('module' => 'kalvidassign', 'action' => 'delete', 'mtable' => 'kalvidassign', 'field' => 'name') +); \ No newline at end of file diff --git a/mod/kalvidassign/db/messages.php b/mod/kalvidassign/db/messages.php new file mode 100644 index 0000000000000..ceeb90aaefde9 --- /dev/null +++ b/mod/kalvidassign/db/messages.php @@ -0,0 +1,26 @@ +. + +/** + * Kaltura video assignment messages script. + * + * @package mod_kalvidassign + * @author Remote-Learner.net Inc + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + * @copyright (C) 2014 Remote Learner.net Inc http://www.remote-learner.net + */ + +$messageproviders = array( + 'kalvidassign_updates' => array() +); \ No newline at end of file diff --git a/mod/kalvidassign/db/upgrade.php b/mod/kalvidassign/db/upgrade.php new file mode 100644 index 0000000000000..a387ba44f9c3b --- /dev/null +++ b/mod/kalvidassign/db/upgrade.php @@ -0,0 +1,89 @@ +. + +/** + * Kaltura video assignment upgrade script. + * + * @package mod_kalvidassign + * @author Remote-Learner.net Inc + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + * @copyright (C) 2014 Remote Learner.net Inc http://www.remote-learner.net + */ + +function xmldb_kalvidassign_upgrade($oldversion) { + global $CFG, $DB; + + $dbman = $DB->get_manager(); + + if ($oldversion < 2011091301) { + + // Changing type of field intro on table kalvidassign to text + $table = new xmldb_table('kalvidassign'); + $field = new xmldb_field('intro', XMLDB_TYPE_TEXT, 'small', null, null, null, null, 'name'); + + // Launch change of type for field intro + $dbman->change_field_type($table, $field); + + // kalvidassign savepoint reached + upgrade_mod_savepoint(true, 2011091301, 'kalvidassign'); + } + + if ($oldversion < 2014013000) { + + // Define field source to be added to kalvidassign_submission. + $table = new xmldb_table('kalvidassign_submission'); + $field = new xmldb_field('source', XMLDB_TYPE_TEXT, null, null, null, null, null, 'entry_id'); + + // Conditionally launch add field source. + if (!$dbman->field_exists($table, $field)) { + $dbman->add_field($table, $field); + } + + // Define field width to be added to kalvidassign_submission. + $field = new xmldb_field('width', XMLDB_TYPE_INTEGER, '10', null, null, null, '0', 'source'); + + // Conditionally launch add field width. + if (!$dbman->field_exists($table, $field)) { + $dbman->add_field($table, $field); + } + + // Define field height to be added to kalvidassign_submission. + $field = new xmldb_field('height', XMLDB_TYPE_INTEGER, '10', null, null, null, '0', 'width'); + + // Conditionally launch add field height. + if (!$dbman->field_exists($table, $field)) { + $dbman->add_field($table, $field); + } + + // Kalvidassign savepoint reached. + upgrade_mod_savepoint(true, 2014013000, 'kalvidassign'); + } + + if ($oldversion < 2014013001) { + + // Define field metadata to be added to kalvidassign_submission. + $table = new xmldb_table('kalvidassign_submission'); + $field = new xmldb_field('metadata', XMLDB_TYPE_TEXT, null, null, null, null, null, 'timemarked'); + + // Conditionally launch add field metadata. + if (!$dbman->field_exists($table, $field)) { + $dbman->add_field($table, $field); + } + + // Kalvidassign savepoint reached. + upgrade_mod_savepoint(true, 2014013001, 'kalvidassign'); + } + + return true; +} diff --git a/mod/kalvidassign/grade_preferences_form.php b/mod/kalvidassign/grade_preferences_form.php new file mode 100644 index 0000000000000..85c3bad005f69 --- /dev/null +++ b/mod/kalvidassign/grade_preferences_form.php @@ -0,0 +1,124 @@ +. + +/** + * Kaltura grade preferences form. + * + * @package mod_kalvidassign + * @author Remote-Learner.net Inc + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + * @copyright (C) 2014 Remote Learner.net Inc http://www.remote-learner.net + */ + +if (!defined('MOODLE_INTERNAL')) { + die('Direct access to this script is forbidden.'); +} + +require_once(dirname(dirname(dirname(__FILE__))).'/course/moodleform_mod.php'); +require_once(dirname(__FILE__).'/locallib.php'); +require_once($CFG->libdir.'/formslib.php'); + +class kalvidassign_gradepreferences_form extends moodleform { + /** + * This function defines all of the elements displayed on the grade preferences form. + */ + public function definition() { + global $CFG, $COURSE, $USER; + + $mform =& $this->_form; + + $mform->addElement('hidden', 'cmid', $this->_customdata['cmid']); + $mform->setType('cmid', PARAM_INT); + + $mform->addElement('header', 'kal_vid_subm_hdr', get_string('optionalsettings', 'kalvidassign')); + + $context = context_module::instance($this->_customdata['cmid']); + + $group_opt = array(); + $groups = array(); + + // If the user doesn't have access to all group print the groups they have access to + if (!has_capability('moodle/site:accessallgroups', $context)) { + + // Determine the groups mode + switch($this->_customdata['groupmode']) { + case NOGROUPS: + // No groups, do nothing + break; + case SEPARATEGROUPS: + $groups = groups_get_all_groups($COURSE->id, $USER->id); + break; + case VISIBLEGROUPS: + $groups = groups_get_all_groups($COURSE->id); + break; + } + + $group_opt[0] = get_string('all', 'mod_kalvidassign'); + + foreach ($groups as $group_obj) { + $group_opt[$group_obj->id] = $group_obj->name; + } + + } else { + $groups = groups_get_all_groups($COURSE->id); + + $group_opt[0] = get_string('all', 'mod_kalvidassign'); + + foreach ($groups as $group_obj) { + $group_opt[$group_obj->id] = $group_obj->name; + } + + } + + $mform->addElement('select', 'group_filter', get_string('group_filter', 'mod_kalvidassign'), $group_opt); + + $filters = array( + KALASSIGN_ALL => get_string('all', 'kalvidassign'), + KALASSIGN_REQ_GRADING => get_string('reqgrading', 'kalvidassign'), + KALASSIGN_SUBMITTED => get_string('submitted', 'kalvidassign') + ); + + $mform->addElement('select', 'filter', get_string('show'), $filters); + $mform->addHelpButton('filter', 'show', 'kalvidassign'); + + $mform->addElement('text', 'perpage', get_string('pagesize', 'kalvidassign'), array('size' => 3, 'maxlength' => 3)); + $mform->setType('perpage', PARAM_INT); + $mform->addHelpButton('perpage', 'pagesize', 'kalvidassign'); + + $mform->addElement('checkbox', 'quickgrade', get_string('quickgrade', 'kalvidassign')); + $mform->setDefault('quickgrade', ''); + $mform->addHelpButton('quickgrade', 'quickgrade', 'kalvidassign'); + + $savepref = get_string('savepref', 'kalvidassign'); + + $mform->addElement('submit', 'savepref', $savepref); + } + + /** + * This funciton validates te submitted data. + * @param array $data array of ("fieldname"=>value) of submitted data + * @param array $files array of uploaded files "element_name"=>tmp_file_path + * @return array of "element_name"=>"error_description" if there are errors, + * or an empty array if everything is OK (true allowed for backwards compatibility too). + */ + public function validation($data, $files) { + $errors = parent::validation($data, $files); + + if (0 == (int) $data['perpage']) { + $errors['perpage'] = get_string('invalidperpage', 'kalvidassign'); + } + + return $errors; + } +} \ No newline at end of file diff --git a/mod/kalvidassign/grade_submissions.php b/mod/kalvidassign/grade_submissions.php new file mode 100644 index 0000000000000..1026bea5238f9 --- /dev/null +++ b/mod/kalvidassign/grade_submissions.php @@ -0,0 +1,208 @@ +. + +/** + * Kaltura grade submission script. + * + * @package mod_kalvidassign + * @author Remote-Learner.net Inc + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + * @copyright (C) 2014 Remote Learner.net Inc http://www.remote-learner.net + */ + +require_once(dirname(dirname(dirname(__FILE__))).'/config.php'); +require_once(dirname(__FILE__).'/lib.php'); +require_once(dirname(__FILE__).'/renderer.php'); +require_once(dirname(__FILE__).'/locallib.php'); +require_once(dirname(__FILE__).'/grade_preferences_form.php'); + +$id = required_param('cmid', PARAM_INT); // Course Module ID +$mode = optional_param('mode', 0, PARAM_TEXT); +$tifirst = optional_param('tifirst', '', PARAM_TEXT); +$tilast = optional_param('tilast', '', PARAM_TEXT); +$page = optional_param('page', 0, PARAM_INT); + +$url = new moodle_url('/mod/kalvidassign/grade_submissions.php'); +$url->param('cmid', $id); + +if (!empty($mode)) { + if (!confirm_sesskey()) { + print_error('confirmsesskeybad', 'error'); + } +} + +list($cm, $course, $kalvidassignobj) = kalvidassign_validate_cmid($id); + +require_login($course->id, false, $cm); + +global $PAGE, $OUTPUT, $USER; + +$currentcrumb = get_string('singlesubmissionheader', 'kalvidassign'); +$PAGE->set_url($url); +$PAGE->set_title(format_string($kalvidassignobj->name)); +$PAGE->set_heading($course->fullname); +$PAGE->navbar->add($currentcrumb); + +$renderer = $PAGE->get_renderer('mod_kalvidassign'); +$courseid = $PAGE->context->get_course_context(false); + +echo $OUTPUT->header(); + +require_capability('mod/kalvidassign:gradesubmission', context_module::instance($cm->id)); + +add_to_log($course->id, 'kalvidassign', 'view submissions page', 'grade_submissions.php?cmid='.$cm->id, $kalvidassignobj->id, $cm->id); + +$prefform = new kalvidassign_gradepreferences_form(null, array('cmid' => $cm->id, 'groupmode' => $cm->groupmode)); +$data = null; + +if ($data = $prefform->get_data()) { + set_user_preference('kalvidassign_group_filter', $data->group_filter); + + set_user_preference('kalvidassign_filter', $data->filter); + + if ($data->perpage > 0) { + set_user_preference('kalvidassign_perpage', $data->perpage); + } + + if (isset($data->quickgrade)) { + set_user_preference('kalvidassign_quickgrade', $data->quickgrade); + } else { + set_user_preference('kalvidassign_quickgrade', '0'); + } + +} + +if (empty($data)) { + $data = new stdClass(); +} + +$data->filter = get_user_preferences('kalvidassign_filter', 0); +$data->perpage = get_user_preferences('kalvidassign_perpage', 10); +$data->quickgrade = get_user_preferences('kalvidassign_quickgrade', 0); +$data->group_filter = get_user_preferences('kalvidassign_group_filter', 0); + +$gradedata = data_submitted(); + +// Check if fast grading was passed to the form and process the data +if (!empty($gradedata->mode)) { + + $usersubmission = array(); + $time = time(); + $updated = false; + + foreach ($gradedata->users as $userid => $val) { + + $param = array('vidassignid' => $kalvidassignobj->id, 'userid' => $userid); + + $usersubmissions = $DB->get_record('kalvidassign_submission', $param); + + if ($usersubmissions) { + + if (array_key_exists($userid, $gradedata->menu)) { + + // Update grade + if (($gradedata->menu[$userid] != $usersubmissions->grade)) { + + $usersubmissions->grade = $gradedata->menu[$userid]; + $usersubmissions->timemarked = $time; + $usersubmissions->teacher = $USER->id; + + $updated = true; + } + } + + if (array_key_exists($userid, $gradedata->submissioncomment)) { + + if (0 != strcmp($usersubmissions->submissioncomment, $gradedata->submissioncomment[$userid])) { + $usersubmissions->submissioncomment = $gradedata->submissioncomment[$userid]; + + $updated = true; + + } + } + + // trigger grade event + if ($DB->update_record('kalvidassign_submission', $usersubmissions)) { + + $grade = new stdClass(); + $grade->userid = $userid; + $grade = kalvidassign_get_submission_grade_object($kalvidassignobj->id, $userid); + + $kalvidassignobj->cmidnumber = $cm->idnumber; + + kalvidassign_grade_item_update($kalvidassignobj, $grade); + + // Add to log only if updating. + add_to_log($kalvidassignobj->course, 'kalvidassign', 'update grades', 'grade_submissions.php?cmid='.$cm->id, $cm->id); + + } + + } else { + // No user submission however the instructor has submitted grade data + $usersubmissions = new stdClass(); + $usersubmissions->vidassignid = $cm->instance; + $usersubmissions->userid = $userid; + $usersubmissions->entry_id = ''; + $usersubmissions->teacher = $USER->id; + $usersubmissions->timemarked = $time; + + // Need to prevent completely empty submissions from getting entered + // into the video submissions' table + // Check for unchanged grade value and an empty feedback value + $emptygrade = array_key_exists($userid, $gradedata->menu) && '-1' == $gradedata->menu[$userid]; + + $emptycomment = array_key_exists($userid, $gradedata->submissioncomment) && empty($gradedata->submissioncomment[$userid]); + + if ($emptygrade && $emptycomment ) { + continue; + } + + if (array_key_exists($userid, $gradedata->menu)) { + $usersubmissions->grade = $gradedata->menu[$userid]; + } + + if (array_key_exists($userid, $gradedata->submissioncomment)) { + $usersubmissions->submissioncomment = $gradedata->submissioncomment[$userid]; + } + + // trigger grade event + if ($DB->insert_record('kalvidassign_submission', $usersubmissions)) { + + $grade = new stdClass(); + $grade->userid = $userid; + $grade = kalvidassign_get_submission_grade_object($kalvidassignobj->id, $userid); + + $kalvidassignobj->cmidnumber = $cm->idnumber; + + kalvidassign_grade_item_update($kalvidassignobj, $grade); + + // Add to log only if updating + add_to_log($kalvidassignobj->course, 'kalvidassign', 'update grades', 'grade_submissions.php?cmid='.$cm->id, $cm->id); + + } + + } + + $updated = false; + } +} + +$renderer->display_submissions_table($cm, $data->group_filter, $data->filter, $data->perpage, $data->quickgrade, $tifirst, $tilast, $page); + +$prefform->set_data($data); +$prefform->display(); + +$PAGE->requires->yui_module('moodle-local_kaltura-ltipanel', 'M.local_kaltura.initreviewsubmission'); + +echo $OUTPUT->footer(); \ No newline at end of file diff --git a/mod/kalvidassign/index.php b/mod/kalvidassign/index.php new file mode 100644 index 0000000000000..440d715f2e5c4 --- /dev/null +++ b/mod/kalvidassign/index.php @@ -0,0 +1,48 @@ +. + +/** + * Kaltura index script. + * + * @package mod_kalvidassign + * @author Remote-Learner.net Inc + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + * @copyright (C) 2014 Remote Learner.net Inc http://www.remote-learner.net + */ + +require_once("../../config.php"); +require_once($CFG->dirroot.'/local/kaltura/locallib.php'); +require_once($CFG->dirroot.'/mod/kalvidassign/locallib.php'); + +$id = required_param('id', PARAM_INT); // Course ID. + +$course = $DB->get_record('course', array('id' => $id), '*', MUST_EXIST); + +require_login($course); + +global $SESSION, $CFG; + +$strplural = get_string("modulenameplural", "mod_kalvidassign"); +$PAGE->set_url('/mod/kalvidassign/index.php', array('id' => $id)); +$PAGE->set_pagelayout('incourse'); +$PAGE->navbar->add($strplural); +$PAGE->set_title($strplural); +$PAGE->set_heading($course->fullname); + +echo $OUTPUT->header(); + +$renderer = $PAGE->get_renderer('mod_kalvidassign'); +$renderer->display_kalvidassignments_table($course); + +echo $OUTPUT->footer(); diff --git a/mod/kalvidassign/lang/en/kalvidassign.php b/mod/kalvidassign/lang/en/kalvidassign.php new file mode 100644 index 0000000000000..9b2633fb116ac --- /dev/null +++ b/mod/kalvidassign/lang/en/kalvidassign.php @@ -0,0 +1,115 @@ +. + +/** + * Kaltura video assignment language file. + * + * @package mod_kalvidassign + * @author Remote-Learner.net Inc + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + * @copyright (C) 2014 Remote Learner.net Inc http://www.remote-learner.net + */ + +$string['activity_not_migrated'] = 'This activity has not yet been migrated to use the new Kaltura instance.'; +$string['modulenameplural'] = 'Kaltura Media Assignments'; +$string['modulename'] = 'Kaltura Media Assignment'; +$string['modulename_help'] = 'The Kaltura Media Assignment enables a teacher to create assignments that require students to upload and submit Kaltura videos. Teachers can grade student submissions and provide feedback.'; +$string['name'] = 'Name'; +$string['availabledate'] = 'Available from'; +$string['duedate'] = 'Due Date'; +$string['preventlate'] = 'Prevent late submissions'; +$string['allowdeleting'] = 'Allow resubmitting'; +$string['allowdeleting_help'] = 'If enabled, students may replace submitted videos. Whether it is possible to submit after the due date is controlled by the \'Prevent late submissions\' setting'; +$string['emailteachers'] = 'Email alerts to teachers'; +$string['emailteachers_help'] = 'If enabled, teachers receive email notification whenever students add or update an assignment submission. Only teachers who are able to grade the particular assignment are notified. So, for example, if the course uses separate groups, teachers restricted to particular groups won\'t receive notification about students in other groups.'; +$string['invalidid'] = 'Invalid ID'; +$string['invalid_launch_parameters'] = 'Invalid launch parameters'; +$string['pluginadministration'] = 'Kaltura Media Assignment'; +$string['addvideo'] = 'Add media submission'; +$string['submitvideo'] = 'Submit media'; +$string['replacevideo'] = 'Replace media'; +$string['previewvideo'] = 'Preview'; +$string['gradesubmission'] = 'Grade submissions'; +$string['numberofsubmissions'] = 'Number of submissions: {$a}'; +$string['assignmentexpired'] = 'Submission cancelled. The assignment due date has passed'; +$string['assignmentsubmitted'] = 'Success, your assignment has been submitted'; +$string['emptyentryid'] = 'Video assignment was not submitted correctly. Please try to resubmit.'; +$string['deleteallsubmissions'] = 'Delete all video submissions'; +$string['fullname'] = 'Name'; +$string['grade'] = 'Grade'; +$string['submissioncomment'] = 'Comment'; +$string['timemodified'] = 'Last modified (Submission)'; +$string['grademodified'] = 'Last modified (Grade)'; +$string['finalgrade'] = 'Final grade'; +$string['status'] = 'Status'; +$string['optionalsettings'] = 'Optional settings'; +$string['savepref'] = 'Save preferences'; +$string['all'] = 'All'; +$string['reqgrading'] = 'Require grading'; +$string['submitted'] = 'Submitted'; +$string['pagesize'] = 'Submissions shown per page'; +$string['pagesize_help'] = 'Set the number of assignment to display per page'; +$string['show'] = 'Show'; +$string['show_help'] = "If filter is set to 'All' then all student submissions will be displayed; even if the student didn't submit anything. If set to 'Require grading' only submissions that has not been graded or submissions that were updated by the student after it was graded will be shown. If set to 'Submitted' only students who submitted a video assignment."; +$string['quickgrade'] = 'Allow quick grade'; +$string['quickgrade_help'] = 'If enabled, multiple assignments can be graded on one page. Add grades and comments then click the "Save all my feedback" button to save all changes for that page.'; +$string['invalidperpage'] = 'Enter a number greater than zero'; +$string['savefeedback'] = 'Save feedback'; +$string['submission'] = 'Submission'; +$string['grades'] = 'Grades'; +$string['feedback'] = 'Feedback'; +$string['singlesubmissionheader'] = 'Grade submission'; +$string['singlegrade'] = 'Add help text'; +$string['singlegrade_help'] = 'Add help text'; +$string['late'] = '{$a} late'; +$string['early'] = '{$a} early'; +$string['lastgrade'] = 'Last grade'; +$string['savedchanges'] = 'Changed Saved'; +$string['save'] = 'Save Changes'; +$string['cancel'] = 'Close'; +$string['checkconversionstatus'] = 'Check video conversion status'; +$string['pluginname'] = 'Kaltura Media Assignment'; +$string['video_converting'] = 'The video is still converting. Please check the status of the video at a later time.'; +$string['emailteachermail'] = '{$a->username} has updated their assignment submission +for \'{$a->assignment}\' at {$a->timeupdated} + +It is available here: + + {$a->url}'; +$string['emailteachermailhtml'] = '{$a->username} has updated their assignment submission +for \'{$a->assignment}\' at {$a->timeupdated}

    +It is available on the web site.'; +$string['messageprovider:kalvidassign_updates'] = 'Kaltura Media assignment notifications'; +$string['video_preview_header'] = 'Submission preview'; +$string['kalvidassign:gradesubmission'] = 'Grade video submissions'; +$string['kalvidassign:addinstance'] = 'Add a Kaltura Media Assignment'; +$string['kalvidassign:submit'] = 'Submit videos'; +$string['grade_video_not_cache'] = 'This video may still be in the process of converting...'; +$string['noenrolledstudents'] = 'No students are enrolled in the course'; +$string['group_filter'] = 'Group Filter'; +$string['use_screen_recorder'] = 'Record screen'; +$string['use_kcw'] = 'Upload media or record from webcam'; +$string['scr_loading'] = 'Loading...'; +$string['reviewvideo'] = 'Review submission'; +$string['kalvidassign:screenrecorder'] = 'Screen recorder'; +$string['checkingforjava'] = 'Checking for Java'; +$string['javanotenabled'] = 'Failed to detect Java, please make sure you have the latest version of Java installed and enabled and then try again.'; +$string['cannotdisplaythumbnail'] = 'Unable to display thumbnail'; +$string['noassignments'] = 'No Kaltura video assignments found in the course'; +$string['submitted'] = 'Submitted'; +$string['nosubmission'] = 'No submission'; +$string['nosubmissions'] = 'No submissions'; +$string['viewsubmission'] = 'View submission'; +$string['failedtoinsertsubmission'] = 'Failed to insert submission record.'; +$string['video_thumbnail'] = 'Video thumbnail'; \ No newline at end of file diff --git a/mod/kalvidassign/lib.php b/mod/kalvidassign/lib.php new file mode 100644 index 0000000000000..b37a7365fd736 --- /dev/null +++ b/mod/kalvidassign/lib.php @@ -0,0 +1,395 @@ +. + +/** + * Kaltura video assignment main library script. + * + * @package mod_kalvidassign + * @author Remote-Learner.net Inc + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + * @copyright (C) 2014 Remote Learner.net Inc http://www.remote-learner.net + */ + +if (!defined('MOODLE_INTERNAL')) { + die('Direct access to this script is forbidden.'); +} + +/* Include eventslib.php */ +require_once($CFG->libdir.'/eventslib.php'); +/* Include calendar/lib.php */ +require_once($CFG->dirroot.'/calendar/lib.php'); + +/** + * Given an object containing all the necessary data, + * (defined by the form in mod_form.php) this function + * will create a new instance and return the id number + * of the new instance. + * + * @param object $kalvidassign An object from the form in mod_form.php + * @return int The id of the newly inserted kalvidassign record + */ +function kalvidassign_add_instance($kalvidassign) { + global $DB; + + $kalvidassign->timecreated = time(); + + $kalvidassign->id = $DB->insert_record('kalvidassign', $kalvidassign); + + if ($kalvidassign->timedue) { + $event = new stdClass(); + $event->name = $kalvidassign->name; + $event->description = format_module_intro('kalvidassign', $kalvidassign, $kalvidassign->coursemodule); + $event->courseid = $kalvidassign->course; + $event->groupid = 0; + $event->userid = 0; + $event->modulename = 'kalvidassign'; + $event->instance = $kalvidassign->id; + $event->eventtype = 'due'; + $event->timestart = $kalvidassign->timedue; + $event->timeduration = 0; + + calendar_event::create($event); + } + + kalvidassign_grade_item_update($kalvidassign); + + return $kalvidassign->id; +} + +/** + * Given an object containing all the necessary data, + * (defined by the form in mod_form.php) this function + * will update an existing instance with new data. + * + * @param object $kalvidassign An object from the form in mod_form.php + * @return bool Returns true on success, otherwise false. + */ +function kalvidassign_update_instance($kalvidassign) { + global $DB; + + $kalvidassign->timemodified = time(); + $kalvidassign->id = $kalvidassign->instance; + + $updated = $DB->update_record('kalvidassign', $kalvidassign); + + if ($kalvidassign->timedue) { + $event = new stdClass(); + + if ($event->id = $DB->get_field('event', 'id', array('modulename' => 'kalvidassign', 'instance' => $kalvidassign->id))) { + + $event->name = $kalvidassign->name; + $event->description = format_module_intro('kalvidassign', $kalvidassign, $kalvidassign->coursemodule); + $event->timestart = $kalvidassign->timedue; + + $calendarevent = calendar_event::load($event->id); + $calendarevent->update($event); + } else { + $event = new stdClass(); + $event->name = $kalvidassign->name; + $event->description = format_module_intro('kalvidassign', $kalvidassign, $kalvidassign->coursemodule); + $event->courseid = $kalvidassign->course; + $event->groupid = 0; + $event->userid = 0; + $event->modulename = 'kalvidassign'; + $event->instance = $kalvidassign->id; + $event->eventtype = 'due'; + $event->timestart = $kalvidassign->timedue; + $event->timeduration = 0; + + calendar_event::create($event); + } + } else { + $DB->delete_records('event', array('modulename' => 'kalvidassign', 'instance' => $kalvidassign->id)); + } + + if ($updated) { + kalvidassign_grade_item_update($kalvidassign); + } + + return $updated; +} + +/** + * Given an ID of an instance of this module, + * this function will permanently delete the instance + * and any data that depends on it. + * + * @param int $id Id of the module instance + * @return bool True on success, else false. + */ +function kalvidassign_delete_instance($id) { + global $DB; + + $result = true; + + if (! $kalvidassign = $DB->get_record('kalvidassign', array('id' => $id))) { + return false; + } + + if (! $DB->delete_records('kalvidassign_submission', array('vidassignid' => $kalvidassign->id))) { + $result = false; + } + + if (! $DB->delete_records('event', array('modulename' => 'kalvidassign', 'instance' => $kalvidassign->id))) { + $result = false; + } + + if (! $DB->delete_records('kalvidassign', array('id' => $kalvidassign->id))) { + $result = false; + } + + kalvidassign_grade_item_delete($kalvidassign); + + return $result; +} + +/** + * Return a small object with summary information about what a + * user has done with a given particular instance of this module + * Used for user activity reports. + * $return->time = the time they did it + * $return->info = a short text description + * + * @return object Returns time and info properties. + */ +function kalvidassign_user_outline($course, $user, $mod, $kalvidassign) { + $return = new stdClass; + $return->time = 0; + $return->info = ''; + return $return; +} + + +/** + * Print a detailed representation of what a user has done with + * a given particular instance of this module, for user activity reports. + * + * @return boolean always return true. + */ +function kalvidassign_user_complete($course, $user, $mod, $kalvidassign) { + return true; +} + +/** + * Given a course and a time, this module should find recent activity + * that has occurred in kalvidassign activities and print it out. + * Return true if there was output, or false is there was none. + * + * @return boolean Always returns false. + */ +function kalvidassign_print_recent_activity($course, $viewfullnames, $timestart) { + return false; +} + + +/** + * Must return an array of users who are participants for a given instance + * of kalvidassign. Must include every user involved in the instance, + * independient of his role (student, teacher, admin...). The returned objects + * must contain at least id property. See other modules as example. + * + * @param int $kalvidassign ID of an instance of this module + * @return bool Always returns false. + */ +function kalvidassign_get_participants($kalvidassignid) { + return false; +} + + +/** + * This function returns if a scale is being used by one kalvidassign + * if it has support for grading and scales. Commented code should be + * modified if necessary. See forum, glossary or journal modules + * as reference. + * + * @param int $kalvidassign id ID of an instance of this module + * @return bool Returns false as scales are not supportd by this module. + */ +function kalvidassign_scale_used($kalvidassignid, $scaleid) { + return false; +} + +/** + * Checks if scale is being used by any instance of kalvidassign. + * This function was added in 1.9 + * + * This is used to find out if scale used anywhere + * @param int $scaleid The scale id. + * @return bool True if the scale is used by any kalvidassign + */ +function kalvidassign_scale_used_anywhere($scaleid) { + global $DB; + + $param = array('grade' => -$scaleid); + if ($scaleid and $DB->record_exists('kalvidassign', $param)) { + return true; + } else { + return false; + } +} + +/** + * @param string $feature FEATURE_xx constant for requested feature + * @return mixed True if module supports feature, null if doesn't know + */ +function kalvidassign_supports($feature) { + switch($feature) { + case FEATURE_GROUPS: + return true; + break; + case FEATURE_GROUPINGS: + return true; + break; + case FEATURE_GROUPMEMBERSONLY: + return true; + break; + case FEATURE_MOD_INTRO: + return true; + break; + case FEATURE_COMPLETION_TRACKS_VIEWS: + return true; + break; + case FEATURE_GRADE_HAS_GRADE: + return true; + break; + case FEATURE_GRADE_OUTCOMES: + return true; + break; + case FEATURE_BACKUP_MOODLE2: + return true; + break; + default: + return null; + break; + } +} + +/** + * Create/update grade item for given kaltura video assignment + * + * @global object + * @param object kalvidassign object with extra cmidnumber + * @param mixed optional array/object of grade(s); 'reset' means reset grades in gradebook + * @return int, 0 if ok, error code otherwise + */ +function kalvidassign_grade_item_update($kalvidassign, $grades = null) { + require_once(dirname(dirname(dirname(__FILE__))).'/lib/gradelib.php'); + + $params = array('itemname' => $kalvidassign->name, 'idnumber' => $kalvidassign->cmidnumber); + + if ($kalvidassign->grade > 0) { + $params['gradetype'] = GRADE_TYPE_VALUE; + $params['grademax'] = $kalvidassign->grade; + $params['grademin'] = 0; + + } else if ($kalvidassign->grade < 0) { + $params['gradetype'] = GRADE_TYPE_SCALE; + $params['scaleid'] = -$kalvidassign->grade; + + } else { + $params['gradetype'] = GRADE_TYPE_TEXT; + } + + if ($grades === 'reset') { + $params['reset'] = true; + $grades = null; + } + + return grade_update('mod/kalvidassign', $kalvidassign->course, 'mod', 'kalvidassign', $kalvidassign->id, 0, $grades, $params); +} + +/** + * Removes all grades from gradebook + * + * @global object + * @param int $courseid + * @param string optional type + */ +function kalvidassign_reset_gradebook($courseid, $type = '') { + global $DB; + + $sql = "SELECT l.*, cm.idnumber as cmidnumber, l.course as courseid + FROM {kalvidassign} l, {course_modules} cm, {modules} m + WHERE m.name = 'kalvidassign' AND m.id = cm.module AND cm.instance = l.id AND l.course = :course"; + + $params = array ('course' => $courseid); + + if ($kalvisassigns = $DB->get_records_sql($sql, $params)) { + + foreach ($kalvisassigns as $kalvisassign) { + kalvidassign_grade_item_update($kalvisassign, 'reset'); + } + } +} + +/** + * Actual implementation of the reset course functionality, delete all the + * kaltura video submissions attempts for course $data->courseid. + * + * @global stdClass + * @global object + * @param object $data the data submitted from the reset course. + * @return array status array + */ +function kalvidassign_reset_userdata($data) { + global $DB; + + $componentstr = get_string('modulenameplural', 'kalvidassign'); + $status = array(); + + if (!empty($data->reset_kalvidassign)) { + $kalvidassignsql = "SELECT l.id + FROM {kalvidassign} l + WHERE l.course=:course"; + + $params = array ("course" => $data->courseid); + $DB->delete_records_select('kalvidassign_submission', "vidassignid IN ($kalvidassignsql)", $params); + + // remove all grades from gradebook + if (empty($data->reset_gradebook_grades)) { + kalvidassign_reset_gradebook($data->courseid); + } + + $status[] = array('component' => $componentstr, 'item' => get_string('deleteallsubmissions', 'kalvidassign'), 'error' => false); + } + + // updating dates - shift may be negative too + if ($data->timeshift) { + shift_course_mod_dates('kalvidassign', array('timedue', 'timeavailable'), $data->timeshift, $data->courseid); + $status[] = array('component' => $componentstr, 'item' => get_string('datechanged'), 'error' => false); + } + + return $status; +} + +/** + * This functions deletes a grade item. + * @param object $kalvidassign a Kaltura video assignment data object. + * @return int Returns GRADE_UPDATE_OK, GRADE_UPDATE_FAILED, GRADE_UPDATE_MULTIPLE or GRADE_UPDATE_ITEM_LOCKED. + */ +function kalvidassign_grade_item_delete($kalvidassign) { + global $CFG; + require_once($CFG->libdir.'/gradelib.php'); + return grade_update('mod/kalvidassign', $kalvidassign->course, 'mod', 'kalvidassign', $kalvidassign->id, 0, null, array('deleted' => 1)); +} + +/** + * Function to be run periodically according to the moodle cron + * + * Finds all assignment notifications that have yet to be mailed out, and mails them. + * @return bool Returns false as the this module doesn't support cron jobs + */ +function kalvidassign_cron () { + return false; +} \ No newline at end of file diff --git a/mod/kalvidassign/locallib.php b/mod/kalvidassign/locallib.php new file mode 100644 index 0000000000000..b003b070e1259 --- /dev/null +++ b/mod/kalvidassign/locallib.php @@ -0,0 +1,356 @@ +. + +/** + * Kaltura video assignment locallib script. + * + * @package mod_kalvidassign + * @author Remote-Learner.net Inc + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + * @copyright (C) 2014 Remote Learner.net Inc http://www.remote-learner.net + */ + +/** + * This function returns true if the assignment submission period is over + * + * @param kalvidassign obj + * + * @return bool - true if assignment submission period is over else false + */ + +define('KALASSIGN_ALL', 0); +define('KALASSIGN_REQ_GRADING', 1); +define('KALASSIGN_SUBMITTED', 2); + +require_once(dirname(dirname(dirname(__FILE__))).'/lib/gradelib.php'); +require_once($CFG->dirroot.'/mod/kalvidassign/renderable.php'); +require_once(dirname(dirname(dirname(__FILE__))).'/local/kaltura/locallib.php'); + +/** + * Check if the assignment submission end date has passed or if late submissions + * are prohibited + * + * @param object - Kaltura instance video assignment object + * @return bool - true if expired, otherwise false + */ +function kalvidassign_assignemnt_submission_expired($kalvidassign) { + $expired = false; + + if ($kalvidassign->preventlate) { + $expired = (0 != $kalvidassign->timedue) && (time() > $kalvidassign->timedue); + } + + return $expired; +} + +/** + * Retrieve a list of users who have submitted assignments + * + * @param int $kalvidassignid The assignment id. + * @param string $filter Filter results by assignments that have been submitted or + * assignment that need to be graded or no filter at all. + * @return mixed collection of users or false. + */ +function kalvidassign_get_submissions($kalvidassignid, $filter = '') { + global $DB; + + $where = ''; + switch ($filter) { + case KALASSIGN_SUBMITTED: + $where = ' timemodified > 0 AND '; + break; + case KALASSIGN_REQ_GRADING: + $where = ' timemarked < timemodified AND '; + break; + } + + $param = array('instanceid' => $kalvidassignid); + $where .= ' vidassignid = :instanceid'; + + // Reordering the fields returned to make it easier to use in the grade_get_grades function. + $columns = 'userid,vidassignid,entry_id,grade,submissioncomment,format,teacher,mailed,timemarked,timecreated,timemodified,source,width,height'; + $records = $DB->get_records_select('kalvidassign_submission', $where, $param, 'timemodified DESC', $columns); + + if (empty($records)) { + return false; + } + + return $records; +} + +/** + * This function retrives the user's submission record. + * @param int $kalvidassignid The activity instance id. + * @param int $userid The user id. + * @return object A data object consisting of the user's submission. + */ +function kalvidassign_get_submission($kalvidassignid, $userid) { + global $DB; + + $param = array('instanceid' => $kalvidassignid, 'userid' => $userid); + $where = ''; + $where .= ' vidassignid = :instanceid AND userid = :userid'; + + // Reordering the fields returned to make it easier to use in the grade_get_grades function. + $columns = 'userid,id,vidassignid,entry_id,grade,submissioncomment,format,teacher,mailed,timemarked,timecreated,timemodified,source,width,height'; + $record = $DB->get_record_select('kalvidassign_submission', $where, $param, '*'); + + if (empty($record)) { + return false; + } + + return $record; + +} + +/** + * This function retrieves the submission grade object. + * @param int $instanceid The activity instance id. + * @param int $userid The user id. + * @return object A data object consisting of the user's submission. + */ +function kalvidassign_get_submission_grade_object($instanceid, $userid) { + global $DB; + + $param = array('kvid' => $instanceid, 'userid' => $userid); + + $sql = "SELECT u.id, u.id AS userid, s.grade AS rawgrade, s.submissioncomment AS feedback, s.format AS feedbackformat, + s.teacher AS usermodified, s.timemarked AS dategraded, s.timemodified AS datesubmitted + FROM {user} u, {kalvidassign_submission} s + WHERE u.id = s.userid AND s.vidassignid = :kvid + AND u.id = :userid"; + + $data = $DB->get_record_sql($sql, $param); + + if (-1 == $data->rawgrade) { + $data->rawgrade = null; + } + + return $data; +} + +/** + * This function validates the course module id and returns the course module object, course object and activity instance object. + * @return array an array with the following values array(course module object, $course object, activity instance object). + */ +function kalvidassign_validate_cmid ($cmid) { + global $DB; + + if (!$cm = get_coursemodule_from_id('kalvidassign', $cmid)) { + print_error('invalidcoursemodule'); + } + + if (!$course = $DB->get_record('course', array('id' => $cm->course))) { + print_error('coursemisconf'); + } + + if (!$kalvidassignobj = $DB->get_record('kalvidassign', array('id' => $cm->instance))) { + print_error('invalidid', 'kalvidassign'); + } + + return array($cm, $course, $kalvidassignobj); +} + +/** + * This function returns HTML markup to signify a submission was late. + * @return string HTML markup + */ +function kalvidassign_display_lateness($timesubmitted, $timedue) { + if (!$timedue) { + return ''; + } + $time = $timedue - $timesubmitted; + if ($time < 0) { + $timetext = get_string('late', 'kalvidassign', format_time($time)); + return ' ('.$timetext.')'; + } else { + $timetext = get_string('early', 'kalvidassign', format_time($time)); + return ' ('.$timetext.')'; + } +} + +/** + * Alerts teachers by email of new or changed assignments that need grading + * + * First checks whether the option to email teachers is set for this assignment. + * Sends an email to ALL teachers in the course (or in the group if using separate groups). + * Uses the methods kalvidassign_email_teachers_text() and kalvidassign_email_teachers_html() to construct the content. + * + * @global object + * @global object + * @param object $cm Kaltura video assignment course module object. + * @param string $name Name of the video assignment instance. + * @param object $submission The submission that has changed. + * @param object $context The context object. + * @return void + */ +function kalvidassign_email_teachers($cm, $name, $submission, $context) { + global $CFG, $DB; + + $user = $DB->get_record('user', array('id'=>$submission->userid)); + + if ($teachers = kalvidassign_get_graders($cm, $user, $context)) { + + $strassignments = get_string('modulenameplural', 'kalvidassign'); + $strassignment = get_string('modulename', 'kalvidassign'); + $strsubmitted = get_string('submitted', 'kalvidassign'); + + foreach ($teachers as $teacher) { + $info = new stdClass(); + $info->username = fullname($user, true); + $info->assignment = format_string($name, true); + $info->url = $CFG->wwwroot.'/mod/kalvidassign/grade_submissions.php?cmid='.$cm->id; + $info->timeupdated = strftime('%c', $submission->timemodified); + $info->courseid = $cm->course; + $info->cmid = $cm->id; + + $postsubject = $strsubmitted.': '.$user->username.' -> '.$name; + $posttext = kalvidassign_email_teachers_text($info); + $posthtml = ($teacher->mailformat == 1) ? kalvidassign_email_teachers_html($info) : ''; + + $eventdata = new stdClass(); + $eventdata->modulename = 'kalvidassign'; + $eventdata->userfrom = $user; + $eventdata->userto = $teacher; + $eventdata->subject = $postsubject; + $eventdata->fullmessage = $posttext; + $eventdata->fullmessageformat = FORMAT_PLAIN; + $eventdata->fullmessagehtml = $posthtml; + $eventdata->smallmessage = $postsubject; + + $eventdata->name = 'kalvidassign_updates'; + $eventdata->component = 'mod_kalvidassign'; + $eventdata->notification = 1; + $eventdata->contexturl = $info->url; + $eventdata->contexturlname = $info->assignment; + + message_send($eventdata); + } + } +} + +/** + * Returns a list of teachers that should be grading given submission. + * + * @param object $cm Kaltura video assignment course module object. + * @param object $user The Moodle user object. + * @param object $context A context object. + * @return array An array of grading userids + */ +function kalvidassign_get_graders($cm, $user, $context) { + // Potential graders. + $potgraders = get_users_by_capability($context, 'mod/kalvidassign:gradesubmission', '', '', '', '', '', '', false, false); + + $graders = array(); + // Separate groups are being used. + if (groups_get_activity_groupmode($cm) == SEPARATEGROUPS) { + // Try to find all groups. + if ($groups = groups_get_all_groups($cm->course, $user->id)) { + foreach ($groups as $group) { + foreach ($potgraders as $t) { + if ($t->id == $user->id) { + continue; // do not send self + } + if (groups_is_member($group->id, $t->id)) { + $graders[$t->id] = $t; + } + } + } + } else { + // user not in group, try to find graders without group + foreach ($potgraders as $t) { + if ($t->id == $user->id) { + // do not send self. + continue; + } + // ugly hack. + if (!groups_get_all_groups($cm->course, $t->id)) { + $graders[$t->id] = $t; + } + } + } + } else { + foreach ($potgraders as $t) { + if ($t->id == $user->id) { + // do not send self. + continue; + } + $graders[$t->id] = $t; + } + } + return $graders; +} + +/** + * Creates the text content for emails to teachers + * + * @param $info object The info used by the 'emailteachermail' language string + * @return string + */ +function kalvidassign_email_teachers_text($info) { + global $DB; + + $param = array('id' => $info->courseid); + $course = $DB->get_record('course', $param); + $posttext = ''; + + if (!empty($course)) { + $posttext = format_string($course->shortname, true, $course->id).' -> '.get_string('modulenameplural', 'kalvidassign').' -> '; + $posttext .= format_string($info->assignment, true, $course->id)."\n"; + $posttext .= '---------------------------------------------------------------------'."\n"; + $posttext .= get_string("emailteachermail", "kalvidassign", $info)."\n"; + $posttext .= "\n---------------------------------------------------------------------\n"; + } + + return $posttext; +} + +/** + * Creates the html content for emails to teachers + * + * @param object $info The info used by the 'emailteachermailhtml' language string + * @return string + */ +function kalvidassign_email_teachers_html($info) { + global $CFG, $DB; + + $param = array('id' => $info->courseid); + $course = $DB->get_record('course', $param); + $posthtml = ''; + + if (!empty($course)) { + $posthtml .= html_writer::start_tag('p'); + $attr = array('href' => new moodle_url('/course/view.php', array('id' => $course->id))); + $posthtml .= html_writer::tag('a', format_string($course->shortname, true, $course->id), $attr); + $posthtml .= '->'; + $attr = array('href' => new moodle_url('/mod/kalvidassign/view.php', array('id' => $info->cmid))); + $posthtml .= html_writer::tag('a', format_string($info->assignment, true, $course->id), $attr); + $posthtml .= html_writer::end_tag('p'); + $posthtml .= html_writer::start_tag('hr'); + $posthtml .= html_writer::tag('p', get_string('emailteachermailhtml', 'kalvidassign', $info)); + $posthtml .= html_writer::end_tag('hr'); + } + return $posthtml; +} + +/** + * This function retrieves a list of enrolled users with the capability to submit to the activity. + * @return array An array of user objects. + */ +function kalvidassign_get_assignment_students($cm) { + $context = context_module::instance($cm->id); + $users = get_enrolled_users($context, 'mod/kalvidassign:submit', 0, 'u.id'); + + return $users; +} \ No newline at end of file diff --git a/mod/kalvidassign/lti_launch.php b/mod/kalvidassign/lti_launch.php new file mode 100644 index 0000000000000..d312fbbd2a617 --- /dev/null +++ b/mod/kalvidassign/lti_launch.php @@ -0,0 +1,67 @@ +. + +/** + * Kaltura video assignment LTI launch script. + * + * @package mod_kalvidassign + * @author Remote-Learner.net Inc + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + * @copyright (C) 2014 Remote Learner.net Inc http://www.remote-learner.net + */ + +require_once(dirname(dirname(dirname(__FILE__))).'/config.php'); +require_once(dirname(dirname(dirname(__FILE__))).'/local/kaltura/locallib.php'); + +global $USER; + +require_login(); +$courseid = required_param('courseid', PARAM_INT); +$cmid = required_param('cmid', PARAM_INT); +$height = required_param('height', PARAM_INT); +$width = required_param('width', PARAM_INT); +$withblocks = optional_param('withblocks', 0, PARAM_INT); +$source = optional_param('source', '', PARAM_URL); + +$context = context_course::instance($courseid); +require_capability('mod/kalvidassign:submit', $context); +$course = get_course($courseid); + +$launch = array(); +$launch['id'] = 1; +$launch['cmid'] = $cmid; +$launch['title'] = 'Kaltura video assignment'; +$launch['module'] = KAF_BROWSE_EMBED_MODULE; +$launch['course'] = $course; +$launch['width'] = $width; +$launch['height'] = $height; +$launch['custom_publishdata'] = ''; + +$source = $source = local_kaltura_add_kaf_uri_token($source); + +if (false === local_kaltura_url_contains_configured_hostname($source) && !empty($source)) { + echo get_string('invalid_source_parameter', 'mod_kalvidres'); + die; +} else { + $launch['source'] = urldecode($source); +} + +if (local_kaltura_validate_browseembed_required_params($launch)) { + $content = local_kaltura_request_lti_launch($launch, $withblocks); + echo $content; +} else { + echo get_string('invalid_launch_parameters', 'mod_kalvidassign'); +} \ No newline at end of file diff --git a/mod/kalvidassign/mod_form.php b/mod/kalvidassign/mod_form.php new file mode 100644 index 0000000000000..fd767cc1b1764 --- /dev/null +++ b/mod/kalvidassign/mod_form.php @@ -0,0 +1,78 @@ +. + +/** + * Kaltura video assignment mod_form script. + * + * @package mod_kalvidassign + * @author Remote-Learner.net Inc + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + * @copyright (C) 2014 Remote Learner.net Inc http://www.remote-learner.net + */ + +if (!defined('MOODLE_INTERNAL')) { + die('Direct access to this script is forbidden.'); +} + +require_once(dirname(dirname(dirname(__FILE__))).'/course/moodleform_mod.php'); + +class mod_kalvidassign_mod_form extends moodleform_mod { + /** + * Definition function for the form. + */ + public function definition() { + global $CFG, $COURSE; + + $mform =& $this->_form; + + $mform->addElement('hidden', 'course', $COURSE->id); + + $mform->addElement('header', 'general', get_string('general', 'form')); + + $mform->addElement('text', 'name', get_string('name', 'kalvidassign'), array('size' => '64')); + + if (!empty($CFG->formatstringstriptags)) { + $mform->setType('name', PARAM_TEXT); + } else { + $mform->setType('name', PARAM_CLEANHTML); + } + $mform->addRule('name', null, 'required', null, 'client'); + + $this->add_intro_editor(false); + + $mform->addElement('date_time_selector', 'timeavailable', get_string('availabledate', 'kalvidassign'), array('optional' => true)); + $mform->setDefault('timeavailable', time()); + $mform->addElement('date_time_selector', 'timedue', get_string('duedate', 'kalvidassign'), array('optional' => true)); + $mform->setDefault('timedue', time()+7*24*3600); + + $ynoptions = array( 0 => get_string('no'), 1 => get_string('yes')); + + $mform->addElement('select', 'preventlate', get_string('preventlate', 'kalvidassign'), $ynoptions); + $mform->setDefault('preventlate', 0); + + $mform->addElement('select', 'resubmit', get_string('allowdeleting', 'kalvidassign'), $ynoptions); + $mform->addHelpButton('resubmit', 'allowdeleting', 'kalvidassign'); + $mform->setDefault('resubmit', 0); + + $mform->addElement('select', 'emailteachers', get_string('emailteachers', 'kalvidassign'), $ynoptions); + $mform->addHelpButton('emailteachers', 'emailteachers', 'kalvidassign'); + $mform->setDefault('emailteachers', 0); + + $this->standard_grading_coursemodule_elements(); + + $this->standard_coursemodule_elements(); + + $this->add_action_buttons(); + } +} \ No newline at end of file diff --git a/mod/kalvidassign/pix/icon.gif b/mod/kalvidassign/pix/icon.gif new file mode 100644 index 0000000000000000000000000000000000000000..550df5db8c43d778c40a1290f1d3a724d0e88133 GIT binary patch literal 128 zcmZ?wbhEHb6krfwSoEKPf#I&Pahh>jn(@rE0|yTL|Np+Z^fq{iV2gnAh z6kuRrcJ. + +/** + * Kaltura video assignment renderable script. + * + * @package mod_kalvidassign + * @author Remote-Learner.net Inc + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + * @copyright (C) 2014 Remote Learner.net Inc http://www.remote-learner.net + */ + +defined('MOODLE_INTERNAL') || die(); + +/** + * Renderable course index summary + */ +class kalvidassign_course_index_summary implements renderable { + /** @var array assignments A list of course module info and submission counts or statuses */ + public $assignments = array(); + /** @var boolean usesections Does this course format support sections? */ + public $usesections = false; + /** @var string courseformat The current course format name */ + public $courseformatname = ''; + + /** + * constructor + * + * @param $usesections boolean True if this course format uses sections + * @param $courseformatname string The id of this course format + */ + public function __construct($usesections, $courseformatname) { + $this->usesections = $usesections; + $this->courseformatname = $courseformatname; + } + + /** + * Add a row of data to display on the course index page + * + * @param int $cmid The course module id for generating a link + * @param string $cmname The course module name for generating a link + * @param string $sectionname The name of the course section (only if $usesections is true) + * @param int $timedue The due date for the assignment - may be 0 if no duedate + * @param string $submissioninfo A string with either the number of submitted assignments, or the + * status of the current users submission depending on capabilities. + * @param string $gradeinfo The current users grade if they have been graded and it is not hidden. + */ + public function add_assign_info($cmid, $cmname, $sectionname, $timedue, $submissioninfo, $gradeinfo) { + $this->assignments[] = array( + 'cmid' => $cmid, + 'cmname' => $cmname, + 'sectionname' => $sectionname, + 'timedue' => $timedue, + 'submissioninfo' => $submissioninfo, + 'gradeinfo' => $gradeinfo + ); + } +} diff --git a/mod/kalvidassign/renderer.php b/mod/kalvidassign/renderer.php new file mode 100644 index 0000000000000..61d7a5812188b --- /dev/null +++ b/mod/kalvidassign/renderer.php @@ -0,0 +1,1124 @@ +. + +/** + * Kaltura video assignment renderer script. + * + * @package mod_kalvidassign + * @author Remote-Learner.net Inc + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + * @copyright (C) 2014 Remote Learner.net Inc http://www.remote-learner.net + */ + +if (!defined('MOODLE_INTERNAL')) { + die('Direct access to this script is forbidden.'); +} + +require_once(dirname(dirname(dirname(__FILE__))).'/lib/tablelib.php'); +require_once(dirname(dirname(dirname(__FILE__))).'/lib/moodlelib.php'); +require_once(dirname(dirname(dirname(__FILE__))).'/local/kaltura/locallib.php'); + +/** + * Table class for displaying video submissions for grading + */ +class submissions_table extends table_sql { + /* @var bool Set to true if a quick grade form needs to be rendered. */ + public $quickgrade; + /* @var object An object returned from @see grade_get_grades(). */ + public $gradinginfo; + /* @var int The course module instnace id. */ + public $cminstance; + /* @var int The maximum grade point set for the activity instance. */ + public $grademax; + /* @var int The number of columns of the quick grade textarea element. */ + public $cols = 20; + /* @var int The number of rows of the quick grade textarea element. */ + public $rows = 4; + /* @var string The first initial of the first name filter. */ + public $tifirst; + /* @var string The first initial of the last name filter. */ + public $tilast; + /* @var int The current page number. */ + public $page; + + /** + * Constructor function for the submissions table class. + * @param int $uniqueid Unique id. + * @param int $cm Course module id. + * @param object $gradinginfo An object returned from @see grade_get_grades(). + * @param bool $quickgrade Set to true if a quick grade form needs to be rendered. + * @param string $tifirst The first initial of the first name filter. + * @param string $tilast The first initial of the first name filter. + * @param int $page The current page number. + */ + public function __construct($uniqueid, $cm, $gradinginfo, $quickgrade = false, $tifirst = '', $tilast = '', $page = 0) { + global $DB; + + parent::__construct($uniqueid); + + $this->quickgrade = $quickgrade; + $this->gradinginfo = $gradinginfo; + + $instance = $DB->get_record('kalvidassign', array('id' => $cm->instance), 'id,grade'); + + $instance->cmid = $cm->id; + + $this->cminstance = $instance; + + $this->grademax = $this->gradinginfo->items[0]->grademax; + + $this->tifirst = $tifirst; + $this->tilast = $tilast; + $this->page = $page; + } + + /** + * The function renders the picture column. + * @param object $data information about the current row being rendered. + * @return string HTML markup. + */ + public function col_picture($data) { + global $OUTPUT; + + $user = new stdClass(); + $user->id = $data->id; + $user->picture = $data->picture; + $user->imagealt = $data->imagealt; + $user->firstname = $data->firstname; + $user->lastname = $data->lastname; + $user->email = $data->email; + + $output = $OUTPUT->user_picture($user); + + $attr = array('type' => 'hidden', 'name' => 'users['.$data->id.']', 'value' => $data->id); + $output .= html_writer::empty_tag('input', $attr); + + return $output; + } + + /** + * The function renders the select grade column. + * @param object $data information about the current row being rendered. + * @return string HTML markup. + */ + public function col_selectgrade($data) { + global $CFG; + + $output = ''; + $finalgrade = false; + + if (array_key_exists($data->id, $this->gradinginfo->items[0]->grades)) { + + $finalgrade = $this->gradinginfo->items[0]->grades[$data->id]; + + if ($CFG->enableoutcomes) { + + $finalgrade->formatted_grade = $this->gradinginfo->items[0]->grades[$data->id]->str_grade; + } else { + + // Equation taken from mod/assignment/lib.php display_submissions() + $finalgrade->formatted_grade = round($finalgrade->grade, 2).' / '.round($this->grademax, 2); + } + } + + if (!is_bool($finalgrade) && ($finalgrade->locked || $finalgrade->overridden) ) { + + $locked_overridden = 'locked'; + + if ($finalgrade->overridden) { + $locked_overridden = 'overridden'; + } + $attr = array('id' => 'g'.$data->id, 'class' => $locked_overridden); + + $output = html_writer::tag('div', $finalgrade->formatted_grade, $attr); + + } else if (!empty($this->quickgrade)) { + + $attributes = array(); + + $grades_menu = make_grades_menu($this->cminstance->grade); + + $default = array(-1 => get_string('nograde')); + + $grade = null; + + if (!empty($data->timemarked)) { + $grade = $data->grade; + } + + $output = html_writer::select($grades_menu, 'menu['.$data->id.']', $grade, $default, $attributes); + + } else { + + $output = get_string('nograde'); + + if (!empty($data->timemarked)) { + $output = $this->display_grade($data->grade); + } + } + + return $output; + } + + /** + * The function renders the submissions comment column. + * @param object $data information about the current row being rendered. + * @return string HTML markup. + */ + public function col_submissioncomment($data) { + global $OUTPUT; + + $output = ''; + $finalgrade = false; + + if (array_key_exists($data->id, $this->gradinginfo->items[0]->grades)) { + $finalgrade = $this->gradinginfo->items[0]->grades[$data->id]; + } + + if ( (!is_bool($finalgrade) && ($finalgrade->locked || $finalgrade->overridden)) ) { + + $output = shorten_text(strip_tags($data->submissioncomment), 15); + + } else if (!empty($this->quickgrade)) { + + $param = array( + 'id' => 'comments_'.$data->submitid, + 'rows' => $this->rows, + 'cols' => $this->cols, + 'name' => 'submissioncomment['.$data->id.']'); + + $output .= html_writer::start_tag('textarea', $param); + $output .= $data->submissioncomment; + $output .= html_writer::end_tag('textarea'); + + } else { + $output = shorten_text(strip_tags($data->submissioncomment), 15); + } + + return $output; + } + + /** + * The function renders the grade marked column. + * @param object $data information about the current row being rendered. + * @return string HTML markup. + */ + public function col_grademarked($data) { + + $output = ''; + + if (!empty($data->timemarked)) { + $output = userdate($data->timemarked); + } + + return $output; + } + + /** + * The function renders the time modified column. + * @param object $data information about the current row being rendered. + * @return string HTML markup. + */ + public function col_timemodified($data) { + + $data->source = local_kaltura_add_kaf_uri_token($data->source); + $attr = array('name' => 'media_submission'); + $output = html_writer::start_tag('div', $attr); + + $attr = array('id' => 'ts'.$data->id); + + $date_modified = $data->timemodified; + $date_modified = is_null($date_modified) || empty($data->timemodified) ? '' : userdate($date_modified); + + $output .= html_writer::tag('div', $date_modified, $attr); + + $output .= html_writer::empty_tag('br'); + + // If the metadata property is empty only display an anchor tag. Otherwise display a thumbnail image. + if (!empty($data->entry_id)) { + + // Decode the additional video metadata. + $metadata = local_kaltura_decode_object_for_storage($data->metadata); + + // Check if the metadata thumbnailurl property is empty. If not then display the thumbnail. Otherwise display a text link. + if (!empty($metadata->thumbnailurl) && !is_null($metadata->thumbnailurl)) { + + $output .= html_writer::start_tag('center'); + $metadata = local_kaltura_decode_object_for_storage($data->metadata); + + $attr = array('src' => $metadata->thumbnailurl, 'class' => 'kalsubthumb'); + $thumbnail = html_writer::empty_tag('img', $attr); + + $attr = array('name' => 'submission_source', 'href' => local_kaltura_add_kaf_uri_token($data->source), 'class' => 'kalsubthumbanchor'); + $output .= html_writer::tag('a', $thumbnail, $attr); + $output .= html_writer::end_tag('center'); + + } else { + + $output .= html_writer::start_tag('center'); + $attr = array('name' => 'submission_source', 'href' => local_kaltura_add_kaf_uri_token($data->source), 'class' => 'kalsubanchor'); + $output .= html_writer::tag('a', get_string('viewsubmission', 'kalvidassign'), $attr); + $output .= html_writer::end_tag('center'); + } + } + + // Display hidden elements. + if (!empty($data->entry_id)) { + $attr = array('type' => 'hidden', 'name' => 'width', 'value' => $data->width); + $output .= html_writer::empty_tag('input', $attr); + + $attr = array('type' => 'hidden', 'name' => 'height', 'value' => $data->height); + $output .= html_writer::empty_tag('input', $attr); + } + + $output .= html_writer::end_tag('div'); + return $output; + } + + /** + * The function renders the grade column. + * @param object $data information about the current row being rendered. + * @return string HTML markup. + */ + public function col_grade($data) { + $finalgrade = false; + + if (array_key_exists($data->id, $this->gradinginfo->items[0]->grades)) { + $finalgrade = $this->gradinginfo->items[0]->grades[$data->id]; + } + + $finalgrade = (!is_bool($finalgrade)) ? $finalgrade->str_grade : '-'; + + $attr = array('id' => 'finalgrade_'.$data->id); + $output = html_writer::tag('span', $finalgrade, $attr); + + return $output; + } + + /** + * The function renders the time marked column. + * @param object $data information about the current row being rendered. + * @return string HTML markup. + */ + public function col_timemarked($data) { + $output = '-'; + + if (0 < $data->timemarked) { + + $attr = array('id' => 'tt'.$data->id); + $output = html_writer::tag('div', userdate($data->timemarked), $attr); + + } else { + $otuput = '-'; + } + + return $output; + } + + /** + * The function renders the submission status column. + * @param object $data information about the current row being rendered. + * @return string HTML markup. + */ + public function col_status($data) { + global $OUTPUT, $CFG; + + require_once(dirname(dirname(dirname(__FILE__))).'/lib/weblib.php'); + + $url = new moodle_url('/mod/kalvidassign/single_submission.php', array('cmid' => $this->cminstance->cmid, 'userid' => $data->id, 'sesskey' => sesskey())); + + if (!empty($this->tifirst)) { + $url->param('tifirst', $this->tifirst); + } + + if (!empty($this->tilast)) { + $url->param('tilast', $this->tilast); + } + + if (!empty($this->page)) { + $url->param('page', $this->page); + } + + $buttontext = ''; + if ($data->timemarked > 0) { + $class = 's1'; + $buttontext = get_string('update'); + } else { + $class = 's0'; + $buttontext = get_string('grade'); + } + + $attr = array('id' => 'up'.$data->id, + 'class' => $class); + + $output = html_writer::link($url, $buttontext, $attr); + + return $output; + } + + /** + * Return a grade in user-friendly form, whether it's a scale or not + * + * @global object + * @param mixed $grade + * @return string User-friendly representation of grade + * + * TODO: Move this to locallib.php + */ + public function display_grade($grade) { + global $DB; + + // Cache scales for each assignment - they might have different scales!! + static $kalscalegrades = array(); + + // Normal number + if ($this->cminstance->grade >= 0) { + if ($grade == -1) { + return '-'; + } else { + return $grade.' / '.$this->cminstance->grade; + } + + } else { + // Scale + if (empty($kalscalegrades[$this->cminstance->id])) { + + if ($scale = $DB->get_record('scale', array('id'=>-($this->cminstance->grade)))) { + + $kalscalegrades[$this->cminstance->id] = make_menu_from_list($scale->scale); + } else { + + return '-'; + } + } + + if (isset($kalscalegrades[$this->cminstance->id][$grade])) { + return $kalscalegrades[$this->cminstance->id][$grade]; + } + return '-'; + } + } +} + +/** + * This class renders the submission pages. + */ +class mod_kalvidassign_renderer extends plugin_renderer_base { + /** + * The function displays information about the assignment settings. + * @param object $data information about the current row being rendered. + * @return string HTML markup. + */ + public function display_mod_info($kalvideoobj, $context) { + global $DB; + $html = ''; + + if (!empty($kalvideoobj->timeavailable)) { + $html .= html_writer::start_tag('p'); + $html .= html_writer::tag('b', get_string('availabledate', 'kalvidassign').': '); + $html .= userdate($kalvideoobj->timeavailable); + $html .= html_writer::end_tag('p'); + } + + if (!empty($kalvideoobj->timedue)) { + $html .= html_writer::start_tag('p'); + $html .= html_writer::tag('b', get_string('duedate', 'kalvidassign').': '); + $html .= userdate($kalvideoobj->timedue); + $html .= html_writer::end_tag('p'); + } + + // Display a count of the numuber of submissions + if (has_capability('mod/kalvidassign:gradesubmission', $context)) { + + $param = array('vidassignid' => $kalvideoobj->id, 'timecreated' => 0, 'timemodified' => 0); + + $csql = "SELECT COUNT(*) + FROM {kalvidassign_submission} + WHERE vidassignid = :vidassignid + AND (timecreated > :timecreated OR timemodified > :timemodified) "; + + $count = $DB->count_records_sql($csql, $param); + + if ($count) { + $html .= html_writer::start_tag('p'); + $html .= get_string('numberofsubmissions', 'kalvidassign', $count); + $html .= html_writer::end_tag('p'); + } + + } + + return $html; + } + + /** + * This function returns HTML markup to render a form and submission buttons. + * @param object $cm A course module object. + * @param int $userid The current user id. + * @param bool $disablesubmit Set to true to disable the submit button. + * @return string Returns HTML markup. + */ + public function display_student_submit_buttons($cm, $userid, $disablesubmit = false) { + $html = ''; + + $target = new moodle_url('/mod/kalvidassign/submission.php'); + + $attr = array('method' => 'POST', 'action' => $target); + + $html .= html_writer::start_tag('form', $attr); + + $attr = array( + 'type' => 'hidden', + 'name' => 'entry_id', + 'id' => 'entry_id', + 'value' => '' + ); + + $html .= html_writer::empty_tag('input', $attr); + + $attr = array( + 'type' => 'hidden', + 'name' => 'cmid', + 'value' => $cm->id + ); + $html .= html_writer::empty_tag('input', $attr); + + $attr = array( + 'type' => 'hidden', + 'name' => 'sesskey', + 'value' => sesskey() + ); + $html .= html_writer::empty_tag('input', $attr); + + $html .= html_writer::empty_tag('input', array('type' => 'hidden', 'id' => 'width', 'name' => 'width', 'value' => 0)); + $html .= html_writer::empty_tag('input', array('type' => 'hidden', 'id' => 'height', 'name' => 'height', 'value' => 0)); + $html .= html_writer::empty_tag('input', array('type' => 'hidden', 'id' => 'source', 'name' => 'source', 'value' => 0)); + $html .= html_writer::empty_tag('input', array('type' => 'hidden', 'id' => 'metadata', 'name' => 'metadata', 'value' => 0)); + + $html .= html_writer::start_tag('center'); + + $attr = array( + 'type' => 'button', + 'id' => 'id_add_video', + 'name' => 'add_video', + 'value' => get_string('addvideo', 'kalvidassign') + ); + + if ($disablesubmit) { + $attr['disabled'] = 'disabled'; + } + + $html .= html_writer::empty_tag('input', $attr); + + $html .= ' '; + + $attr = array( + 'type' => 'submit', + 'name' => 'submit_video', + 'id' => 'submit_video', + 'disabled' => 'disabled', + 'value' => get_string('submitvideo', 'kalvidassign')); + + $html .= html_writer::empty_tag('input', $attr); + + $html .= html_writer::end_tag('center'); + + $html .= html_writer::end_tag('form'); + + return $html; + } + + /** + * This function returns HTML markup to render a form and submission buttons. + * @param object $cm A course module object. + * @param int $userid The current user id. + * @param bool $disablesubmit Set to true to disable the submit button. + * @return string Returns HTML markup. + */ + public function display_student_resubmit_buttons($cm, $userid, $disablesubmit = false) { + global $DB; + + $param = array('vidassignid' => $cm->instance, 'userid' => $userid); + $submissionrec = $DB->get_record('kalvidassign_submission', $param); + + $html = ''; + + $target = new moodle_url('/mod/kalvidassign/submission.php'); + + $attr = array('method' => 'POST', 'action' => $target); + + $html .= html_writer::start_tag('form', $attr); + + $attr = array( + 'type' => 'hidden', + 'name' => 'cmid', + 'value' => $cm->id + ); + + $html .= html_writer::empty_tag('input', $attr); + + $attr = array( + 'type' => 'hidden', + 'name' => 'entry_id', + 'id' => 'entry_id', + 'value' => $submissionrec->entry_id + ); + + $html .= html_writer::empty_tag('input', $attr); + + $attr = array( + 'type' => 'hidden', + 'name' => 'sesskey', + 'value' => sesskey() + ); + + $html .= html_writer::empty_tag('input', $attr); + + $html .= html_writer::empty_tag('input', array('type' => 'hidden', 'id' => 'width', 'name' => 'width', 'value' => 0)); + $html .= html_writer::empty_tag('input', array('type' => 'hidden', 'id' => 'height', 'name' => 'height', 'value' => 0)); + $html .= html_writer::empty_tag('input', array('type' => 'hidden', 'id' => 'source', 'name' => 'source', 'value' => 0)); + $html .= html_writer::empty_tag('input', array('type' => 'hidden', 'id' => 'metadata', 'name' => 'metadata', 'value' => 0)); + + $html .= html_writer::start_tag('center'); + + // Add submit and review buttons. + $attr = array( + 'type' => 'button', + 'name' => 'add_video', + 'id' => 'id_add_video', + 'value' => get_string('replacevideo', 'kalvidassign') + ); + + if ($disablesubmit) { + $attr['disabled'] = 'disabled'; + } + + $html .= html_writer::empty_tag('input', $attr); + + $html .= '  '; + + $attr = array( + 'type' => 'submit', + 'id' => 'submit_video', + 'name' => 'submit_video', + 'disabled' => 'disabled', + 'value' => get_string('submitvideo', 'kalvidassign') + ); + + if ($disablesubmit) { + $attr['disabled'] = 'disabled'; + } + + $html .= html_writer::empty_tag('input', $attr); + + $html .= html_writer::end_tag('center'); + + $html .= html_writer::end_tag('form'); + + return $html; + } + + /** + * This function returns HTML markup to render a form and submission buttons. + * @param object $cm A course module object. + * @param int $userid The current user id. + * @param bool $disablesubmit Set to true to disable the submit button. + * @return string Returns HTML markup. + */ + public function display_instructor_buttons($cm, $userid) { + $html = ''; + + $target = new moodle_url('/mod/kalvidassign/grade_submissions.php'); + + $attr = array('method' => 'POST', 'action' => $target); + + $html .= html_writer::start_tag('form', $attr); + + $html .= html_writer::start_tag('center'); + + $attr = array('type' => 'hidden', + 'name' => 'sesskey', + 'value' => sesskey()); + $html .= html_writer::empty_tag('input', $attr); + + $attr = array('type' => 'hidden', + 'name' => 'cmid', + 'value' => $cm->id); + $html .= html_writer::empty_tag('input', $attr); + + $attr = array('type' => 'submit', + 'name' => 'grade_submissions', + 'value' => get_string('gradesubmission', 'kalvidassign')); + + $html .= html_writer::empty_tag('input', $attr); + + $html .= html_writer::end_tag('center'); + + $html .= html_writer::end_tag('form'); + + return $html; + } + + /** + * This function returns HTML markup to render a the submissions table + * @param object $cm A course module object. + * @param int $groupfilter The group id to filter against. + * @param string $filter Filter users who have submitted, submitted and graded or everyone. + * @param int $perpage The number of submissions to display on a page. + * @param bool $quickgrade True if the quick grade table needs to be rendered, otherwsie false. + * @param string $tifirst The first initial of the first name. + * @param string $tilast The first initial of the last name. + * @param int $page The current page to render. + * @return string Returns HTML markup. + */ + public function display_submissions_table($cm, $groupfilter = 0, $filter = 'all', $perpage, $quickgrade = false, $tifirst = '', $tilast = '', $page = 0) { + + global $DB, $OUTPUT, $COURSE, $USER; + + // Get a list of users who have submissions and retrieve grade data for those users. + $users = kalvidassign_get_submissions($cm->instance, $filter); + + $define_columns = array('picture', 'fullname', 'selectgrade', 'submissioncomment', 'timemodified', 'timemarked', 'status', 'grade'); + + if (empty($users)) { + $users = array(); + } + + $entryids = array(); + + foreach ($users as $usersubmission) { + $entryids[$usersubmission->entry_id] = $usersubmission->entry_id; + } + + // Compare student who have submitted to the assignment with students who are + // currently enrolled in the course + $students = kalvidassign_get_assignment_students($cm); + $users = array_intersect(array_keys($users), array_keys($students)); + + if (empty($users)) { + echo html_writer::tag('p', get_string('noenrolledstudents', 'kalvidassign')); + return; + } + + $gradinginfo = grade_get_grades($cm->course, 'mod', 'kalvidassign', $cm->instance, $users); + + $where = ''; + switch ($filter) { + case KALASSIGN_SUBMITTED: + $where = ' kvs.timemodified > 0 AND '; + break; + case KALASSIGN_REQ_GRADING: + $where = ' kvs.timemarked < kvs.timemodified AND '; + break; + } + + // Determine logic needed for groups mode + $param = array(); + $groupswhere = ''; + $groupscolumn = ''; + $groupsjoin = ''; + $groups = array(); + $groupids = ''; + $context = context_course::instance($COURSE->id); + + // Get all groups that the user belongs to, check if the user has capability to access all groups + if (!has_capability('moodle/site:accessallgroups', $context, $USER->id)) { + $groups = groups_get_all_groups($COURSE->id, $USER->id); + + if (empty($groups)) { + $message = get_string('nosubmissions', 'kalvidassign'); + echo html_writer::tag('center', $message); + return; + } + } else { + $groups = groups_get_all_groups($COURSE->id); + } + + // Create a comma separated list of group ids + foreach ($groups as $group) { + $groupids .= $group->id.','; + } + + $groupids = rtrim($groupids, ','); + + switch (groups_get_activity_groupmode($cm)) { + case NOGROUPS: + // No groups, do nothing + break; + case SEPARATEGROUPS: + // If separate groups, but displaying all users then we must display only users + // who are in the same group as the current user + if (0 == $groupfilter) { + $groupscolumn = ', gm.groupid '; + $groupsjoin = ' RIGHT JOIN {groups_members} gm ON gm.userid = u.id RIGHT JOIN {groups} g ON g.id = gm.groupid '; + + $param['courseid'] = $cm->course; + $groupswhere .= ' AND g.courseid = :courseid '; + + $param['groupid'] = $groupfilter; + $groupswhere .= ' AND g.id IN ('.$groupids.') '; + + } + + case VISIBLEGROUPS: + // if visible groups but displaying a specific group then we must display users within + // that group, if displaying all groups then display all users in the course + if (0 != $groupfilter) { + + $groupscolumn = ', gm.groupid '; + $groupsjoin = ' RIGHT JOIN {groups_members} gm ON gm.userid = u.id RIGHT JOIN {groups} g ON g.id = gm.groupid '; + + $param['courseid'] = $cm->course; + $groupswhere .= ' AND g.courseid = :courseid '; + + $param['groupid'] = $groupfilter; + $groupswhere .= ' AND gm.groupid = :groupid '; + + } + break; + } + + $table = new submissions_table('kal_vid_submit_table', $cm, $gradinginfo, $quickgrade, $tifirst, $tilast, $page); + + // In order for the sortable first and last names to work. User ID has to be the first column returned and must be + // returned as id. Otherwise the table will display links to user profiles that are incorrect or do not exist + $columns = user_picture::fields('u').', kvs.id AS submitid, '; + $columns .= ' kvs.grade, kvs.submissioncomment, kvs.timemodified, kvs.entry_id, kvs.source, kvs.width, kvs.height, kvs.timemarked, '; + $columns .= 'kvs.metadata, 1 AS status, 1 AS selectgrade'.$groupscolumn; + $where .= ' u.deleted = 0 AND u.id IN ('.implode(',', $users).') '.$groupswhere; + + $param['instanceid'] = $cm->instance; + $from = "{user} u LEFT JOIN {kalvidassign_submission} kvs ON kvs.userid = u.id AND kvs.vidassignid = :instanceid ".$groupsjoin; + + $baseurl = new moodle_url('/mod/kalvidassign/grade_submissions.php', array('cmid' => $cm->id)); + + $col1 = get_string('fullname', 'kalvidassign'); + $col2 = get_string('grade', 'kalvidassign'); + $col3 = get_string('submissioncomment', 'kalvidassign'); + $col4 = get_string('timemodified', 'kalvidassign'); + $col5 = get_string('grademodified', 'kalvidassign'); + $col6 = get_string('status', 'kalvidassign'); + $col7 = get_string('finalgrade', 'kalvidassign'); + + $table->set_sql($columns, $from, $where, $param); + $table->define_baseurl($baseurl); + $table->collapsible(true); + + $table->define_columns($define_columns); + $table->define_headers(array('', $col1, $col2, $col3, $col4, $col5, $col6, $col7)); + + echo html_writer::start_tag('center'); + + $attributes = array('action' => new moodle_url('grade_submissions.php'), 'id' => 'fastgrade', 'method' => 'post'); + echo html_writer::start_tag('form', $attributes); + + $attributes = array('type' => 'hidden', 'name' => 'cmid', 'value' => $cm->id); + echo html_writer::empty_tag('input', $attributes); + + $attributes['name'] = 'mode'; + $attributes['value'] = 'fastgrade'; + + echo html_writer::empty_tag('input', $attributes); + + $attributes['name'] = 'sesskey'; + $attributes['value'] = sesskey(); + + echo html_writer::empty_tag('input', $attributes); + + $table->out($perpage, true); + + if ($quickgrade) { + $attributes = array('type' => 'submit', 'name' => 'save_feedback', 'value' => get_string('savefeedback', 'kalvidassign')); + + echo html_writer::empty_tag('input', $attributes); + } + + echo html_writer::end_tag('form'); + + echo html_writer::end_tag('center'); + + echo html_writer::empty_tag('input', array('id' => 'closeltipanel', 'type' => 'hidden')); + } + + /** + * Displays the assignments listing table. + * + * @param object $course The course odject. + */ + public function display_kalvidassignments_table($course) { + global $CFG, $DB, $PAGE, $OUTPUT, $USER; + + echo html_writer::start_tag('center'); + + $strplural = get_string('modulenameplural', 'kalvidassign'); + + if (!$cms = get_coursemodules_in_course('kalvidassign', $course->id, 'm.timedue')) { + echo get_string('noassignments', 'mod_kalvidassign'); + echo $OUTPUT->continue_button($CFG->wwwroot.'/course/view.php?id='.$course->id); + } + + $strsectionname = get_string('sectionname', 'format_'.$course->format); + $usesections = course_format_uses_sections($course->format); + $modinfo = get_fast_modinfo($course); + + if ($usesections) { + $sections = $modinfo->get_section_info_all(); + } + $courseindexsummary = new kalvidassign_course_index_summary($usesections, $strsectionname); + + $timenow = time(); + $currentsection = ''; + $assignmentcount = 0; + + foreach ($modinfo->instances['kalvidassign'] as $cm) { + if (!$cm->uservisible) { + continue; + } + + $assignmentcount++; + $timedue = $cms[$cm->id]->timedue; + + $sectionname = ''; + if ($usesections && $cm->sectionnum) { + $sectionname = get_section_name($course, $sections[$cm->sectionnum]); + } + + $submitted = ''; + $context = context_module::instance($cm->id); + + if (has_capability('mod/kalvidassign:gradesubmission', $context)) { + $submitted = $DB->count_records('kalvidassign_submission', array('vidassignid' => $cm->instance)); + } else if (has_capability('mod/kalvidassign:submit', $context)) { + if ($DB->count_records('kalvidassign_submission', array('vidassignid' => $cm->instance, 'userid' => $USER->id)) > 0) { + $submitted = get_string('submitted', 'mod_kalvidassign'); + } else { + $submitted = get_string('nosubmission', 'mod_kalvidassign'); + } + } + + $gradinginfo = grade_get_grades($course->id, 'mod', 'kalvidassign', $cm->instance, $USER->id); + if (isset($gradinginfo->items[0]->grades[$USER->id]) && !$gradinginfo->items[0]->grades[$USER->id]->hidden ) { + $grade = $gradinginfo->items[0]->grades[$USER->id]->str_grade; + } else { + $grade = '-'; + } + + $courseindexsummary->add_assign_info($cm->id, $cm->name, $sectionname, $timedue, $submitted, $grade); + } + + if ($assignmentcount > 0) { + $pagerenderer = $PAGE->get_renderer('mod_kalvidassign'); + echo $pagerenderer->render($courseindexsummary); + } + + echo html_writer::end_tag('center'); + } + + /** + * This function displays HTML markup needed by the ltipanel YUI module to display a popup window containing the LTI launch. + * @param object $submission A Kaltura video assignment video submission table object. + * @param int $courseid The course id. + * @param int $cmid The ccourse module id. + * @return string HTML markup. + */ + public function display_video_container_markup($submission, $courseid, $cmid) { + $source = new moodle_url('/local/kaltura/pix/vidThumb.png'); + $alt = get_string('video_thumbnail', 'mod_kalvidassign'); + $title = get_string('video_thumbnail', 'mod_kalvidassign'); + $iframe = ''; + $url = null; + + $attr = array( + 'id' => 'video_thumbnail', + 'src' => $source->out(), + 'alt' => $alt, + 'title' => $title + ); + + // If the submission object contains a source URL then display the video as part of an LTI launch. + if (!empty($submission->source)) { + $attr['style'] = 'display:none'; + + $params = array( + 'courseid' => $courseid, + 'height' => $submission->height, + 'width' => $submission->width, + 'withblocks' => 0, + 'source' => local_kaltura_add_kaf_uri_token($submission->source), + 'cmid' => $cmid + ); + $url = new moodle_url('/mod/kalvidassign/lti_launch.php', $params); + } + + $output = html_writer::empty_tag('img', $attr); + + $params = array( + 'id' => 'contentframe', + 'src' => ($url instanceof moodle_url) ? $url->out(false) : '', + 'allowfullscreen' => "true", + 'webkitallowfullscreen' => "true", + 'mozallowfullscreen' => "true", + 'height' => '100%', + 'width' => !empty($submission->width) ? $submission->width : '' + ); + + if (empty($submission->source)) { + $params['style'] = 'display:none'; + } + + $iframe = html_writer::tag('iframe', '', $params); + + $output .= html_writer::tag('center', $iframe); + $output .= html_writer::empty_tag('input', array('type' => 'hidden', 'id' => 'closeltipanel', 'value' => 0)); + + return $output; + } + + /** + * Display the feedback to the student + * + * This default method prints the teacher picture and name, date when marked, + * grade and teacher submissioncomment. + * + * @global object + * @global object + * @global object + * @param object $submission The submission object or NULL in which case it will be loaded + * + * TODO: correct documentation for this function + */ + public function display_grade_feedback($kalvidassign, $context) { + global $USER, $CFG, $DB, $OUTPUT; + + require_once($CFG->libdir.'/gradelib.php'); + + // Check if the user is enrolled to the coruse and can submit to the assignment + if (!is_enrolled($context, $USER, 'mod/kalvidassign:submit')) { + // can not submit assignments -> no feedback + return; + } + + // Get the user's submission obj + $gradinginfo = grade_get_grades($kalvidassign->course, 'mod', 'kalvidassign', $kalvidassign->id, $USER->id); + + $item = $gradinginfo->items[0]; + $grade = $item->grades[$USER->id]; + + // Hidden or error. + if ($grade->hidden or $grade->grade === false) { + return; + } + + // Nothing to show yet. + if ($grade->grade === null and empty($grade->str_feedback)) { + return; + } + + $gradedate = $grade->dategraded; + $gradeby = $grade->usermodified; + + // We need the teacher info + if (!$teacher = $DB->get_record('user', array('id'=>$gradeby))) { + print_error('cannotfindteacher'); + } + + // Print the feedback + echo $OUTPUT->heading(get_string('feedbackfromteacher', 'assignment', fullname($teacher))); + + echo ''; + + echo ''; + echo ''; + echo ''; + echo ''; + + echo ''; + echo ''; + echo ''; + + echo ''; + } + + /** + * Render a course index summary. + * + * @param kalvidassign_course_index_summary $indexsummary Structure for index summary. + * @return string HTML for assignments summary table + */ + public function render_kalvidassign_course_index_summary(kalvidassign_course_index_summary $indexsummary) { + $strplural = get_string('modulenameplural', 'kalvidassign'); + $strsectionname = $indexsummary->courseformatname; + $strduedate = get_string('duedate', 'kalvidassign'); + $strsubmission = get_string('submission', 'kalvidassign'); + $strgrade = get_string('grade'); + + $table = new html_table(); + if ($indexsummary->usesections) { + $table->head = array ($strsectionname, $strplural, $strduedate, $strsubmission, $strgrade); + $table->align = array ('left', 'left', 'center', 'right', 'right'); + } else { + $table->head = array ($strplural, $strduedate, $strsubmission, $strgrade); + $table->align = array ('left', 'left', 'center', 'right'); + } + $table->data = array(); + + $currentsection = ''; + foreach ($indexsummary->assignments as $info) { + $params = array('id' => $info['cmid']); + $link = html_writer::link(new moodle_url('/mod/kalvidassign/view.php', $params), $info['cmname']); + $due = $info['timedue'] ? userdate($info['timedue']) : '-'; + + $printsection = ''; + if ($indexsummary->usesections) { + if ($info['sectionname'] !== $currentsection) { + if ($info['sectionname']) { + $printsection = $info['sectionname']; + } + if ($currentsection !== '') { + $table->data[] = 'hr'; + } + $currentsection = $info['sectionname']; + } + } + + if ($indexsummary->usesections) { + $row = array($printsection, $link, $due, $info['submissioninfo'], $info['gradeinfo']); + } else { + $row = array($link, $due, $info['submissioninfo'], $info['gradeinfo']); + } + $table->data[] = $row; + } + + return html_writer::table($table); + } +} diff --git a/mod/kalvidassign/single_submission.php b/mod/kalvidassign/single_submission.php new file mode 100644 index 0000000000000..8d23288ce9be8 --- /dev/null +++ b/mod/kalvidassign/single_submission.php @@ -0,0 +1,222 @@ +. + +/** + * Kaltura video assignment single submission script. + * + * @package mod_kalvidassign + * @author Remote-Learner.net Inc + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + * @copyright (C) 2014 Remote Learner.net Inc http://www.remote-learner.net + */ + +require_once(dirname(dirname(dirname(__FILE__))).'/config.php'); +require_once(dirname(__FILE__).'/lib.php'); +require_once(dirname(__FILE__).'/renderer.php'); +require_once(dirname(__FILE__).'/locallib.php'); +require_once(dirname(__FILE__).'/single_submission_form.php'); + +$id = required_param('cmid', PARAM_INT); +$userid = required_param('userid', PARAM_INT); +$tifirst = optional_param('tifirst', '', PARAM_TEXT); +$tilast = optional_param('tilast', '', PARAM_TEXT); +$page = optional_param('page', 0, PARAM_INT); + + +list($cm, $course, $kalvidassignobj) = kalvidassign_validate_cmid($id); + +require_login($course->id, false, $cm); + +if (!confirm_sesskey()) { + print_error('confirmsesskeybad', 'error'); +} + +global $CFG, $PAGE, $OUTPUT, $USER; + +$url = new moodle_url('/mod/kalvidassign/single_submission.php'); +$url->params(array('cmid' => $id, 'userid' => $userid)); + +$context = context_module::instance($cm->id); + +$PAGE->set_url($url); +$PAGE->set_title(format_string($kalvidassignobj->name)); +$PAGE->set_heading($course->fullname); +$PAGE->set_context($context); + +$previousurl = new moodle_url('/mod/kalvidassign/grade_submissions.php', array('cmid' => $cm->id, 'tifirst' => $tifirst, 'tilast' => $tilast, 'page' => $page)); +$prevousurlstring = get_string('singlesubmissionheader', 'kalvidassign'); +$PAGE->navbar->add($prevousurlstring, $previousurl); +$PAGE->requires->css('/local/kaltura/styles.css'); + +require_capability('mod/kalvidassign:gradesubmission', $context); + +add_to_log($course->id, 'kalvidassign', 'view submission page', 'single_submission.php?id='.$cm->id, $kalvidassignobj->id, $cm->id); + +// Get a single submission record +$submission = kalvidassign_get_submission($cm->instance, $userid); + +// Get the submission user and the time they submitted the video +$param = array('id' => $userid); +$user = $DB->get_record('user', $param); + +$submissionuserpic = $OUTPUT->user_picture($user); +$submissionmodified = ' - '; +$datestringlate = ' - '; +$datestring = ' - '; + +$submissionuserinfo = fullname($user); + +// Get grading information +$gradinginfo = grade_get_grades($cm->course, 'mod', 'kalvidassign', $cm->instance, array($userid)); +$gradingdisabled = $gradinginfo->items[0]->grades[$userid]->locked || $gradinginfo->items[0]->grades[$userid]->overridden; + +// Get marking teacher information and the time the submission was marked +$teacher = ''; +if (!empty($submission)) { + $datestringlate = kalvidassign_display_lateness($submission->timemodified, $kalvidassignobj->timedue); + $submissionmodified = userdate($submission->timemodified); + $datestring = userdate($submission->timemarked)."  (".format_time(time() - $submission->timemarked).")"; + + $submissionuserinfo .= '
    '.$submissionmodified.$datestringlate; + + $param = array('id' => $submission->teacher); + $teacher = $DB->get_record('user', $param); +} + +$markingteacherpic = ''; +$markingtreacherinfo = ''; + +if (!empty($teacher)) { + $markingteacherpic = $OUTPUT->user_picture($teacher); + $markingtreacherinfo = fullname($teacher).'
    '.$datestring; +} + +// Setup form data +$formdata = new stdClass(); +$formdata->submissionuserpic = $submissionuserpic; +$formdata->submissionuserinfo = $submissionuserinfo; +$formdata->markingteacherpic = $markingteacherpic; +$formdata->markingteacherinfo = $markingtreacherinfo; +$formdata->grading_info = $gradinginfo; +$formdata->gradingdisabled = $gradingdisabled; +$formdata->cm = $cm; +$formdata->context = $context; +$formdata->cminstance = $kalvidassignobj; +$formdata->submission = $submission; +$formdata->userid = $userid; +$formdata->enableoutcomes = $CFG->enableoutcomes; +$formdata->submissioncomment_editor = array('text' => $submission->submissioncomment, 'format' => FORMAT_HTML); +$formdata->tifirst = $tifirst; +$formdata->tilast = $tilast; +$formdata->page = $page; + +$submissionform = new kalvidassign_singlesubmission_form(null, $formdata); + +if ($submissionform->is_cancelled()) { + redirect($previousurl); +} else if ($submitted_data = $submissionform->get_data()) { + + if (!isset($submitted_data->cancel) && isset($submitted_data->xgrade) && isset($submitted_data->submissioncomment_editor)) { + + // Flag used when an instructor is about to grade a user who does not have + // a submittion (see KALDEV-126) + $updategrade = true; + + if ($submission) { + + $submissionchanged = strcmp($submission->submissioncomment, $submitted_data->submissioncomment_editor['text']); + if ($submission->grade == $submitted_data->xgrade && $submissionchanged) { + + $updategrade = false; + } else { + $submission->grade = $submitted_data->xgrade; + $submission->submissioncomment = $submitted_data->submissioncomment_editor['text']; + $submission->format = $submitted_data->submissioncomment_editor['format']; + $submission->timemarked = time(); + $submission->teacher = $USER->id; + $DB->update_record('kalvidassign_submission', $submission); + } + + } else { + + // Check for unchanged values + if ('-1' == $submitted_data->xgrade && empty($submitted_data->submissioncomment_editor['text'])) { + + $updategrade = false; + } else { + + $submission = new stdClass(); + $submission->vidassignid = $cm->instance; + $submission->userid = $userid; + $submission->grade = $submitted_data->xgrade; + $submission->submissioncomment = $submitted_data->submissioncomment_editor['text']; + $submission->format = $submitted_data->submissioncomment_editor['format']; + $submission->timemarked = time(); + $submission->teacher = $USER->id; + + $DB->insert_record('kalvidassign_submission', $submission); + } + } + + if ($updategrade) { + $kalvidassignobj->cmidnumber = $cm->idnumber; + + $gradeobj = kalvidassign_get_submission_grade_object($kalvidassignobj->id, $userid); + + kalvidassign_grade_item_update($kalvidassignobj, $gradeobj); + + // Add to log. + add_to_log($kalvidassignobj->course, 'kalvidassign', 'update grades', 'grade_submissions.php?cmid='.$cm->id, $cm->id); + + } + + // Handle outcome data + if (!empty($CFG->enableoutcomes)) { + require_once($CFG->libdir.'/gradelib.php'); + + $data = array(); + $gradinginfo = grade_get_grades($course->id, 'mod', 'kalvidassign', $kalvidassignobj->id, $userid); + + if (!empty($gradinginfo->outcomes)) { + foreach ($gradinginfo->outcomes as $n => $old) { + $name = 'outcome_'.$n; + if (isset($submitted_data->{$name}[$userid]) and + $old->grades[$userid]->grade != $submitted_data->{$name}[$userid]) { + + $data[$n] = $submitted_data->{$name}[$userid]; + } + } + } + + if (count($data) > 0) { + grade_update_outcomes('mod/kalvidassign', $course->id, 'mod', 'kalvidassign', $kalvidassignobj->id, $userid, $data); + } + } + + } + + redirect($previousurl); + +} + +$pageheading = get_string('gradesubmission', 'kalvidassign'); + +echo $OUTPUT->header(); +echo $OUTPUT->heading($pageheading.': '.fullname($user)); + +$submissionform->set_data($formdata); + +$submissionform->display(); + +echo $OUTPUT->footer(); \ No newline at end of file diff --git a/mod/kalvidassign/single_submission_form.php b/mod/kalvidassign/single_submission_form.php new file mode 100644 index 0000000000000..bd24bb35c7fb1 --- /dev/null +++ b/mod/kalvidassign/single_submission_form.php @@ -0,0 +1,209 @@ +. + +/** + * Kaltura video assignment single submission form. + * + * @package mod_kalvidassign + * @author Remote-Learner.net Inc + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + * @copyright (C) 2014 Remote Learner.net Inc http://www.remote-learner.net + */ + +if (!defined('MOODLE_INTERNAL')) { + die('Direct access to this script is forbidden.'); +} + +require_once(dirname(dirname(dirname(__FILE__))).'/course/moodleform_mod.php'); + +class kalvidassign_singlesubmission_form extends moodleform { + + /** + * This function defines the forums elments that are to be displayed + */ + public function definition() { + global $CFG, $PAGE; + + $mform =& $this->_form; + + $cm = $this->_customdata->cm; + $userid = $this->_customdata->userid; + + $mform->addElement('hidden', 'cmid', $cm->id); + $mform->setType('cmid', PARAM_INT); + $mform->addelement('hidden', 'userid', $userid); + $mform->setType('userid', PARAM_INT); + $mform->addElement('hidden', 'tifirst', $this->_customdata->tifirst); + $mform->setType('tifirst', PARAM_TEXT); + $mform->addElement('hidden', 'tilast', $this->_customdata->tilast); + $mform->setType('tilast', PARAM_TEXT); + $mform->addElement('hidden', 'page', $this->_customdata->page); + $mform->setType('page', PARAM_INT); + + /* Submission section */ + $mform->addElement('header', 'single_submission_1', get_string('submission', 'kalvidassign')); + + $mform->addelement('static', 'submittinguser', $this->_customdata->submissionuserpic, $this->_customdata->submissionuserinfo); + + /* Video preview */ + $mform->addElement('header', 'single_submission_2', get_string('previewvideo', 'kalvidassign')); + + $submission = $this->_customdata->submission; + $gradinginfo = $this->_customdata->grading_info; + $entryobject = ''; + $timemodified = ''; + + if (!empty($submission->entry_id) && !empty($submission->source)) { + $attr = array( + 'src' => local_kaltura_add_kaf_uri_token($submission->source), + 'height' => $submission->height, + 'width' => $submission->width, + 'allowfullscreen' => "true", + 'webkitallowfullscreen' => "true", + 'mozallowfullscreen' => "true" + ); + $mform->addElement('html', html_writer::tag('iframe', '', $attr)); + } + + /* Grades section */ + $mform->addElement('header', 'single_submission_3', get_string('grades', 'kalvidassign')); + + $attributes = array(); + + if ($this->_customdata->gradingdisabled || $this->_customdata->gradingdisabled) { + $attributes['disabled'] = 'disabled'; + } + + $grademenu = make_grades_menu($this->_customdata->cminstance->grade); + $grademenu['-1'] = get_string('nograde'); + + $mform->addElement('select', 'xgrade', get_string('grade').':', $grademenu, $attributes); + + if (isset($submission->grade)) { + $mform->setDefault('xgrade', $this->_customdata->submission->grade ); + } else { + $mform->setDefault('xgrade', '-1' ); + } + + $mform->setType('xgrade', PARAM_INT); + + if (!empty($this->_customdata->enableoutcomes) && !empty($gradinginfo)) { + + foreach ($gradinginfo->outcomes as $n => $outcome) { + + $options = make_grades_menu(-$outcome->scaleid); + + if (array_key_exists($this->_customdata->userid, $outcome->grades) && + $outcome->grades[$this->_customdata->userid]->locked) { + + $options[0] = get_string('nooutcome', 'grades'); + echo $options[$outcome->grades[$this->_customdata->userid]->grade]; + + } else { + + $options[''] = get_string('nooutcome', 'grades'); + $attributes = array('id' => 'menuoutcome_'.$n ); + $mform->addElement('select', 'outcome_'.$n.'['.$this->_customdata->userid.']', $outcome->name.':', $options, $attributes ); + $mform->setType('outcome_'.$n.'['.$this->_customdata->userid.']', PARAM_INT); + + if (array_key_exists($this->_customdata->userid, $outcome->grades)) { + $mform->setDefault('outcome_'.$n.'['.$this->_customdata->userid.']', $outcome->grades[$this->_customdata->userid]->grade ); + } + } + } + } + + if (has_capability('gradereport/grader:view', $this->_customdata->context) && has_capability('moodle/grade:viewall', $this->_customdata->context)) { + + if (empty($gradinginfo) || !array_key_exists($this->_customdata->userid, $gradinginfo->items[0]->grades)) { + + $grade = ' - '; + + } else if (0 != strcmp('-', $gradinginfo->items[0]->grades[$this->_customdata->userid]->str_grade)) { + + $grade = ''; + $grade .= $this->_customdata->grading_info->items[0]->grades[$this->_customdata->userid]->str_grade.''; + } else { + + $grade = $this->_customdata->grading_info->items[0]->grades[$this->_customdata->userid]->str_grade; + } + + } else { + + $grade = $this->_customdata->grading_info->items[0]->grades[$this->_customdata->userid]->str_grade; + + } + + $mform->addElement('static', 'finalgrade', get_string('currentgrade', 'assignment').':', $grade); + $mform->setType('finalgrade', PARAM_INT); + + /* Feedback section */ + $mform->addElement('header', 'single_submission_4', get_string('feedback', 'kalvidassign')); + + if (!empty($this->_customdata->gradingdisabled)) { + + if (array_key_exists($this->_customdata->userid, $gradinginfo->items[0]->grades)) { + $mform->addElement('static', 'disabledfeedback', ' ', $gradinginfo->items[0]->grades[$this->_customdata->userid]->str_feedback ); + } else { + $mform->addElement('static', 'disabledfeedback', ' ', '' ); + } + + } else { + + $mform->addElement('editor', 'submissioncomment_editor', get_string('feedback', 'kalvidassign').':', null, $this->get_editor_options() ); + $mform->setType('submissioncomment_editor', PARAM_RAW); + + } + + /* Marked section */ + $mform->addElement('header', 'single_submission_5', get_string('lastgrade', 'kalvidassign')); + + $mform->addElement('static', 'markingteacher', $this->_customdata->markingteacherpic, $this->_customdata->markingteacherinfo); + + $this->add_action_buttons(); + } + + /** + * This function sets the text editor format. + * @param object|array $data object or array of default values + * @return void + */ + public function set_data($data) { + + if (!isset($data->submission->format)) { + $data->textformat = FORMAT_HTML; + } else { + $data->textformat = $data->submission->format; + } + + $editoroptions = $this->get_editor_options(); + + return parent::set_data($data); + + } + + /** + * This function gets the editor options. + * @return array An array of editor options. + */ + protected function get_editor_options() { + $editoroptions = array(); + $editoroptions['component'] = 'mod_kalvidassign'; + $editoroptions['noclean'] = false; + $editoroptions['maxfiles'] = 0; + $editoroptions['context'] = $this->_customdata->context; + + return $editoroptions; + } +} diff --git a/mod/kalvidassign/styles.css b/mod/kalvidassign/styles.css new file mode 100644 index 0000000000000..5bf863558203d --- /dev/null +++ b/mod/kalvidassign/styles.css @@ -0,0 +1,53 @@ +#page-mod-kalvidassign-single_submission #page #page-header .navbar { + display:none; +} + + +#page-mod-kalvidassign-single_submission #page #page-content { + min-width: 500px; +} + + +#page-mod-kalvidassign-single_submission #page #page-content #region-main-box { + left:1px; + width:180%; +} + +#page-mod-kalvidassign-view .feedback { + border: 1px solid #DDDDDD; + margin:10px auto; +} + +#page-mod-kalvidassign-view .feedback .grade { + text-align: right; + font-weight: bold; +} + +#page-mod-kalvidassign-view .feedback .topic { + border-color: #DDDDDD; + border-style: solid; + border-width: 0 0 1px; + padding: 4px; +} + +#page-mod-kalvidassign-view .feedback .topic .fullname { + font-weight: bold; +} + +#slider_border { + width: 10%; + height: 18px; + border: 1px solid #000000; + overflow: hidden; +} + +#id_add_video { + float: none; +} + +#video_thumbnail { + display: block; + margin-left: auto; + margin-right: auto; + margin-bottom: 5px; +} \ No newline at end of file diff --git a/mod/kalvidassign/submission.php b/mod/kalvidassign/submission.php new file mode 100644 index 0000000000000..6166272c7c874 --- /dev/null +++ b/mod/kalvidassign/submission.php @@ -0,0 +1,147 @@ +. + +/** + * Kaltura video assignment submission script. + * + * @package mod_kalvidassign + * @author Remote-Learner.net Inc + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + * @copyright (C) 2014 Remote Learner.net Inc http://www.remote-learner.net + */ + +require_once(dirname(dirname(dirname(__FILE__))).'/config.php'); +require_once(dirname(__FILE__).'/locallib.php'); + +if (!confirm_sesskey()) { + print_error('confirmsesskeybad', 'error'); +} + +$entryid = required_param('entry_id', PARAM_TEXT); +$source = required_param('source', PARAM_URL); +$cmid = required_param('cmid', PARAM_INT); +$width = required_param('width', PARAM_TEXT); +$height = required_param('height', PARAM_TEXT); +$metadata = required_param('metadata', PARAM_TEXT); + +global $USER, $OUTPUT, $DB, $PAGE; + +$urlparts = parse_url($source); +if (!empty($urlparts['path'])) { + $source = 'http://'.KALTURA_URI_TOKEN.$urlparts['path']; +} + +if (! $cm = get_coursemodule_from_id('kalvidassign', $cmid)) { + print_error('invalidcoursemodule'); +} + +if (! $course = $DB->get_record('course', array('id' => $cm->course))) { + print_error('coursemisconf'); +} + +if (! $kalvidassignobj = $DB->get_record('kalvidassign', array('id' => $cm->instance))) { + print_error('invalidid', 'kalvidassign'); +} + +require_course_login($course->id, true, $cm); + +$PAGE->set_url('/mod/kalvidassign/view.php', array('id' => $course->id)); +$PAGE->set_title(format_string($kalvidassignobj->name)); +$PAGE->set_heading($course->fullname); + + +if (kalvidassign_assignemnt_submission_expired($kalvidassignobj)) { + print_error('assignmentexpired', 'kalvidassign', 'course/view.php?id='.$course->id); +} + +echo $OUTPUT->header(); + +if (empty($entryid)) { + print_error('emptyentryid', 'kalvidassign', new moodle_url('/mod/kalvidassign/view.php', array('id' => $cm->id))); +} + +$param = array('vidassignid' => $kalvidassignobj->id, 'userid' => $USER->id); +$submission = $DB->get_record('kalvidassign_submission', $param); + +$time = time(); +$url = new moodle_url('/mod/kalvidassign/view.php', array('id' => $cm->id)); + +if ($submission) { + $submission->entry_id = $entryid; + $submission->source = $source; + $submission->width = $width; + $submission->height = $height; + $submission->timemodified = $time; + $submission->metadata = $metadata; + + if (0 == $submission->timecreated) { + $submission->timecreated = $time; + } + + if ($DB->update_record('kalvidassign_submission', $submission)) { + + $message = get_string('assignmentsubmitted', 'kalvidassign'); + $continue = get_string('continue'); + + echo $OUTPUT->notification($message, 'notifysuccess'); + + echo html_writer::start_tag('center'); + + echo $OUTPUT->single_button($url, $continue, 'post'); + echo html_writer::end_tag('center'); + + add_to_log($course->id, 'kalvidassign', 'submit', 'view.php?id='.$cm->id, $kalvidassignobj->id, $cm->id); + } else { + notice(get_string('failedtoinsertsubmission', 'kalvidassign'), $url, $course); + } + +} else { + $submission = new stdClass(); + $submission->entry_id = $entryid; + $submission->userid = $USER->id; + $submission->vidassignid = $kalvidassignobj->id; + $submission->grade = -1; + $submission->source = $source; + $submission->width = $width; + $submission->height = $height; + $submission->metadata = $metadata; + $submission->timecreated = $time; + $submission->timemodified = $time; + + if ($DB->insert_record('kalvidassign_submission', $submission)) { + + $message = get_string('assignmentsubmitted', 'kalvidassign'); + $continue = get_string('continue'); + + echo $OUTPUT->notification($message, 'notifysuccess'); + + echo html_writer::start_tag('center'); + + echo $OUTPUT->single_button($url, $continue, 'post'); + echo html_writer::end_tag('center'); + + } else { + notice(get_string('failedtoinsertsubmission', 'kalvidassign'), $url, $course); + } + +} + +$context = $PAGE->context; + +// Email an alert to the teacher +if ($kalvidassignobj->emailteachers) { + kalvidassign_email_teachers($cm, $kalvidassignobj->name, $submission, $context); +} + +echo $OUTPUT->footer(); diff --git a/mod/kalvidassign/version.php b/mod/kalvidassign/version.php new file mode 100644 index 0000000000000..888c601ea51bf --- /dev/null +++ b/mod/kalvidassign/version.php @@ -0,0 +1,36 @@ +. + +/** + * Kaltura version script + * + * @package mod_kalvidassign + * @author Remote-Learner.net Inc + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + * @copyright (C) 2014 Remote Learner.net Inc http://www.remote-learner.net + */ + +if (!defined('MOODLE_INTERNAL')) { + die('Direct access to this script is forbidden.'); +} + +$module->version = 2014013001; +$module->component = 'mod_kalvidassign'; +$module->release = 'Kaltura release 4.0.00 (RL: TBD)'; +$module->requires = 2013051400; +$module->cron = 0; +$module->maturity = MATURITY_STABLE; +$module->dependencies = array( + 'local_kaltura' => 2014013000.01, +); diff --git a/mod/kalvidassign/view.php b/mod/kalvidassign/view.php new file mode 100644 index 0000000000000..6823bfa56679d --- /dev/null +++ b/mod/kalvidassign/view.php @@ -0,0 +1,138 @@ +. + +/** + * Kaltura video assignment view script. + * + * @package mod_kalvidassign + * @author Remote-Learner.net Inc + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + * @copyright (C) 2014 Remote Learner.net Inc http://www.remote-learner.net + */ + +require_once(dirname(dirname(dirname(__FILE__))).'/config.php'); +require_once(dirname(dirname(dirname(__FILE__))).'/local/kaltura/locallib.php'); +require_once(dirname(__FILE__).'/locallib.php'); + +$id = optional_param('id', 0, PARAM_INT); + +// Retrieve module instance. +if (empty($id)) { + print_error('invalidid', 'kalvidassign'); +} + +if (!empty($id)) { + list($cm, $course, $kalvidassign) = kalvidassign_validate_cmid($id); +} + +require_course_login($course->id, true, $cm); + +global $SESSION, $CFG; + +$PAGE->set_url('/mod/kalvidassign/view.php', array('id' => $id)); +$PAGE->set_title(format_string($kalvidassign->name)); +$PAGE->set_heading($course->fullname); +$pageclass = 'kaltura-kalvidassign-body'; +$PAGE->add_body_class($pageclass); + +$context = context_module::instance($cm->id); + +add_to_log($course->id, 'kalvidassign', 'view assignment details', 'view.php?id='.$cm->id, $kalvidassign->id, $cm->id); + +// Update 'viewed' state if required by completion system +$completion = new completion_info($course); +$completion->set_module_viewed($cm); + +$PAGE->requires->css('/mod/kalvidassign/styles.css'); +$PAGE->requires->css('/local/kaltura/styles.css'); +echo $OUTPUT->header(); + +$renderer = $PAGE->get_renderer('mod_kalvidassign'); + +echo $OUTPUT->box_start('generalbox'); + +echo $renderer->display_mod_info($kalvidassign, $context); + +echo format_module_intro('kalvidassign', $kalvidassign, $cm->id); +echo $OUTPUT->box_end(); + +$disabled = false; +$url = ''; +$width = 0; +$height = 0; + +if (!has_capability('mod/kalvidassign:gradesubmission', $context)) { + + $param = array('vidassignid' => $kalvidassign->id, 'userid' => $USER->id); + $submission = $DB->get_record('kalvidassign_submission', $param); + + // If the entry_id field is not empty but the source field is empty, then the data for this activity has not yet been migrated. + if (!empty($submission->entry_id) && empty($submission->source)) { + notice(get_string('activity_not_migrated', 'kalvidassign'), new moodle_url('/course/view.php', array('id' => $course->id))); + } + + echo $renderer->display_video_container_markup($submission, $course->id, $cm->id); + + if (kalvidassign_assignemnt_submission_expired($kalvidassign)) { + $disabled = true; + } + + if (empty($submission->entry_id) && empty($submission->timecreated)) { + + echo $renderer->display_student_submit_buttons($cm, $USER->id, $disabled); + + echo $renderer->display_grade_feedback($kalvidassign, $context); + } else { + + if ($disabled || !$kalvidassign->resubmit) { + $disabled = true; + } + + echo $renderer->display_student_resubmit_buttons($cm, $USER->id, $disabled); + + echo $renderer->display_grade_feedback($kalvidassign, $context); + } + + $params = array( + 'withblocks' => 0, + 'courseid' => $course->id, + 'width' => KALTURA_PANEL_WIDTH, + 'height' => KALTURA_PANEL_HEIGHT, + 'cmid' => $cm->id + ); + + $url = new moodle_url('/mod/kalvidassign/lti_launch.php', $params); + + $params = array( + 'addvidbtnid' => 'id_add_video', + 'ltilaunchurl' => $url->out(false), + 'height' => KALTURA_PANEL_HEIGHT, + 'width' => KALTURA_PANEL_WIDTH + ); + + $PAGE->requires->yui_module('moodle-local_kaltura-ltipanel', 'M.local_kaltura.initmediaassignment', array($params), null, true); + + // Require a YUI module to make the object tag be as large as possible. + $params = array( + 'bodyclass' => $pageclass, + 'lastheight' => null, + 'padding' => 15 + ); + $PAGE->requires->yui_module('moodle-local_kaltura-lticontainer', 'M.local_kaltura.init', array($params), null, true); + $PAGE->requires->string_for_js('replacevideo', 'kalvidassign'); +} else { + echo $renderer->display_instructor_buttons($cm, $USER->id); +} + +echo $OUTPUT->footer(); \ No newline at end of file diff --git a/mod/kalvidpres/backup/moodle2/backup_kalvidpres_activity_task.class.php b/mod/kalvidpres/backup/moodle2/backup_kalvidpres_activity_task.class.php new file mode 100644 index 0000000000000..7dd685bb2ad72 --- /dev/null +++ b/mod/kalvidpres/backup/moodle2/backup_kalvidpres_activity_task.class.php @@ -0,0 +1,67 @@ +. + +/** + * Kaltura video presentation activity task file. + * + * @package mod_kalvidpres + * @author Remote-Learner.net Inc + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + * @copyright (C) 2014 Remote Learner.net Inc http://www.remote-learner.net + */ + +require_once($CFG->dirroot.'/mod/kalvidpres/backup/moodle2/backup_kalvidpres_stepslib.php'); +require_once($CFG->dirroot.'/mod/kalvidpres/backup/moodle2/backup_kalvidpres_settingslib.php'); + +/** + * kalvidpres backup task that provides all the settings and steps to perform one + * complete backup of the activity + */ +class backup_kalvidpres_activity_task extends backup_activity_task { + + /** + * Define (add) particular settings this activity can have + */ + protected function define_my_settings() { + // No particular settings for this activity + } + + /** + * Define (add) particular steps this activity can have + */ + protected function define_my_steps() { + // Choice only has one structure step + $this->add_step(new backup_kalvidpres_activity_structure_step('kalvidpres_structure', 'kalvidpres.xml')); + } + + /** + * Code the transformations to perform in the activity in + * order to get transportable (encoded) links + */ + static public function encode_content_links($content) { + global $CFG; + + $base = preg_quote($CFG->wwwroot, "/"); + + // Link to the list of kalvidpress + $search="/(".$base."\/mod\/kalvidpres\/index.php\?id\=)([0-9]+)/"; + $content= preg_replace($search, '$@KALVIDPRESINDEX*$2@$', $content); + + // Link to kalvidpres view by moduleid + $search="/(".$base."\/mod\/kalvidpres\/view.php\?id\=)([0-9]+)/"; + $content= preg_replace($search, '$@KALVIDPRESVIEWBYID*$2@$', $content); + + return $content; + } +} diff --git a/mod/kalvidpres/backup/moodle2/backup_kalvidpres_settingslib.php b/mod/kalvidpres/backup/moodle2/backup_kalvidpres_settingslib.php new file mode 100644 index 0000000000000..b4c9768140a4a --- /dev/null +++ b/mod/kalvidpres/backup/moodle2/backup_kalvidpres_settingslib.php @@ -0,0 +1,26 @@ +. + +/** + * Kaltura video presentation settingslib file. + * + * @package mod_kalvidpres + * @author Remote-Learner.net Inc + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + * @copyright (C) 2014 Remote Learner.net Inc http://www.remote-learner.net + */ + + // This activity has no particular settings but the inherited from the generic + // backup_activity_task so here there isn't any class definition, like the ones + // existing in /backup/moodle2/backup_settingslib.php (activities section) \ No newline at end of file diff --git a/mod/kalvidpres/backup/moodle2/backup_kalvidpres_stepslib.php b/mod/kalvidpres/backup/moodle2/backup_kalvidpres_stepslib.php new file mode 100644 index 0000000000000..3f7935d090f17 --- /dev/null +++ b/mod/kalvidpres/backup/moodle2/backup_kalvidpres_stepslib.php @@ -0,0 +1,47 @@ +. + +/** + * Kaltura video presentation stepslib file. + * + * @package mod_kalvidpres + * @author Remote-Learner.net Inc + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + * @copyright (C) 2014 Remote Learner.net Inc http://www.remote-learner.net + */ + +/** + * Define all the backup steps that will be used by the backup_kalvidpres_activity_task + */ + +/** + * Define the complete kalvidpres structure for backup, with file and id annotations + */ +class backup_kalvidpres_activity_structure_step extends backup_activity_structure_step { + + protected function define_structure() { + + // Define each element separated + $kalvidpres = new backup_nested_element('kalvidpres', array('id'), array( + 'name', 'intro', 'introformat', 'entry_id', 'video_entry_id', 'doc_entry_id', + 'video_title', 'uiconf_id', 'widescreen', 'height', 'width', 'source', 'timemodified', + 'timecreated')); + + // Define sources + $kalvidpres->set_source_table('kalvidpres', array('id' => backup::VAR_ACTIVITYID)); + + // Return the root element, wrapped into standard activity structure + return $this->prepare_activity_structure($kalvidpres); + } +} diff --git a/mod/kalvidpres/backup/moodle2/backup_kalvidres_activity_task.class.php b/mod/kalvidpres/backup/moodle2/backup_kalvidres_activity_task.class.php new file mode 100644 index 0000000000000..a73ff6be762a0 --- /dev/null +++ b/mod/kalvidpres/backup/moodle2/backup_kalvidres_activity_task.class.php @@ -0,0 +1,66 @@ +. + +/** + * Kaltura video resource backup activity tasks script. + * + * @package mod_kalvidres + * @author Remote-Learner.net Inc + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + * @copyright (C) 2014 Remote Learner.net Inc http://www.remote-learner.net + */ + +require_once($CFG->dirroot.'/mod/kalvidres/backup/moodle2/backup_kalvidres_stepslib.php'); +require_once($CFG->dirroot.'/mod/kalvidres/backup/moodle2/backup_kalvidres_settingslib.php'); + +/** + * kalvidres backup task that provides all the settings and steps to perform one + * complete backup of the activity + */ +class backup_kalvidres_activity_task extends backup_activity_task { + /** + * Define (add) particular settings this activity can have + */ + protected function define_my_settings() { + // No particular settings for this activity + } + + /** + * Define (add) particular steps this activity can have + */ + protected function define_my_steps() { + // Choice only has one structure step + $this->add_step(new backup_kalvidres_activity_structure_step('kalvidres_structure', 'kalvidres.xml')); + } + + /** + * Code the transformations to perform in the activity in + * order to get transportable (encoded) links + */ + static public function encode_content_links($content) { + global $CFG; + + $base = preg_quote($CFG->wwwroot, "/"); + + // Link to the list of kalvidress + $search="/(".$base."\/mod\/kalvidres\/index.php\?id\=)([0-9]+)/"; + $content= preg_replace($search, '$@KALVIDRESINDEX*$2@$', $content); + + // Link to kalvidres view by moduleid + $search="/(".$base."\/mod\/kalvidres\/view.php\?id\=)([0-9]+)/"; + $content= preg_replace($search, '$@KALVIDRESVIEWBYID*$2@$', $content); + + return $content; + } +} diff --git a/mod/kalvidpres/backup/moodle2/backup_kalvidres_settingslib.php b/mod/kalvidpres/backup/moodle2/backup_kalvidres_settingslib.php new file mode 100644 index 0000000000000..4a0cd75a42b2a --- /dev/null +++ b/mod/kalvidpres/backup/moodle2/backup_kalvidres_settingslib.php @@ -0,0 +1,26 @@ +. + +/** + * Kaltura video resource backup settingslib script. + * + * @package mod_kalvidres + * @author Remote-Learner.net Inc + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + * @copyright (C) 2014 Remote Learner.net Inc http://www.remote-learner.net + */ + + // This activity has no particular settings but the inherited from the generic + // backup_activity_task so here there isn't any class definition, like the ones + // existing in /backup/moodle2/backup_settingslib.php (activities section) \ No newline at end of file diff --git a/mod/kalvidpres/backup/moodle2/backup_kalvidres_stepslib.php b/mod/kalvidpres/backup/moodle2/backup_kalvidres_stepslib.php new file mode 100644 index 0000000000000..ae532446cc14f --- /dev/null +++ b/mod/kalvidpres/backup/moodle2/backup_kalvidres_stepslib.php @@ -0,0 +1,46 @@ +. + +/** + * Kaltura video resource backup stepslib script. + * + * @package mod_kalvidres + * @author Remote-Learner.net Inc + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + * @copyright (C) 2014 Remote Learner.net Inc http://www.remote-learner.net + */ + +/** + * Define all the backup steps that will be used by the backup_kalvidres_activity_task + */ + +/** + * Define the complete kalvidres structure for backup, with file and id annotations + */ +class backup_kalvidres_activity_structure_step extends backup_activity_structure_step { + + protected function define_structure() { + + // Define each element separated + $kalvidres = new backup_nested_element('kalvidres', array('id'), array( + 'name', 'intro', 'introformat', 'entry_id', 'video_title', + 'uiconf_id', 'widescreen', 'height', 'width', 'source', 'timemodified', 'timecreated')); + + // Define sources + $kalvidres->set_source_table('kalvidres', array('id' => backup::VAR_ACTIVITYID)); + + // Return the root element, wrapped into standard activity structure + return $this->prepare_activity_structure($kalvidres); + } +} diff --git a/mod/kalvidpres/backup/moodle2/restore_kalvidpres_activity_task.class.php b/mod/kalvidpres/backup/moodle2/restore_kalvidpres_activity_task.class.php new file mode 100644 index 0000000000000..850da925d0bb1 --- /dev/null +++ b/mod/kalvidpres/backup/moodle2/restore_kalvidpres_activity_task.class.php @@ -0,0 +1,107 @@ +. + +/** + * Kaltura video presentation activity task file. + * + * @package mod_kalvidpres + * @author Remote-Learner.net Inc + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + * @copyright (C) 2014 Remote Learner.net Inc http://www.remote-learner.net + */ + +defined('MOODLE_INTERNAL') || die(); + +require_once($CFG->dirroot.'/mod/kalvidpres/backup/moodle2/restore_kalvidpres_stepslib.php'); + +/** + * kalvidpres restore task that provides all the settings and steps to perform one + * complete restore of the activity + */ +class restore_kalvidpres_activity_task extends restore_activity_task { + + /** + * Define (add) particular settings this activity can have + */ + protected function define_my_settings() { + // No particular settings for this activity + } + + /** + * Define (add) particular steps this activity can have + */ + protected function define_my_steps() { + // Certificate only has one structure step + $this->add_step(new restore_kalvidpres_activity_structure_step('kalvidpres_structure', 'kalvidpres.xml')); + } + + /** + * Define the contents in the activity that must be + * processed by the link decoder + */ + static public function define_decode_contents() { + $contents = array(); + + $contents[] = new restore_decode_content('kalvidpres', array('intro'), 'kalvidpres'); + + return $contents; + } + + /** + * Define the decoding rules for links belonging + * to the activity to be executed by the link decoder + */ + static public function define_decode_rules() { + $rules = array(); + + $rules[] = new restore_decode_rule('KALVIDPRESVIEWBYID', '/mod/kalvidpres/view.php?id=$1', 'course_module'); + $rules[] = new restore_decode_rule('KALVIDPRESINDEX', '/mod/kalvidpres/index.php?id=$1', 'course'); + + return $rules; + + } + + /** + * Define the restore log rules that will be applied + * by the {@link restore_logs_processor} when restoring + * kalvidpres logs. It must return one array + * of {@link restore_log_rule} objects + */ + static public function define_restore_log_rules() { + $rules = array(); + + $rules[] = new restore_log_rule('kalvidpres', 'view', 'view.php?id={course_module}', '{kalvidpres}'); + + return $rules; + } + + /** + * Define the restore log rules that will be applied + * by the {@link restore_logs_processor} when restoring + * course logs. It must return one array + * of {@link restore_log_rule} objects + * + * Note this rules are applied when restoring course logs + * by the restore final task, but are defined here at + * activity level. All them are rules not linked to any module instance (cmid = 0) + */ + static public function define_restore_log_rules_for_course() { + $rules = array(); + + // Fix old wrong uses (missing extension) + $rules[] = new restore_log_rule('kalvidpres', 'view all', 'index.php?id={course}', null); + + return $rules; + } +} diff --git a/mod/kalvidpres/backup/moodle2/restore_kalvidpres_stepslib.php b/mod/kalvidpres/backup/moodle2/restore_kalvidpres_stepslib.php new file mode 100644 index 0000000000000..a74cc417ea761 --- /dev/null +++ b/mod/kalvidpres/backup/moodle2/restore_kalvidpres_stepslib.php @@ -0,0 +1,62 @@ +. + +/** + * Kaltura video presentation stepslib file. + * + * @package mod_kalvidpres + * @author Remote-Learner.net Inc + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + * @copyright (C) 2014 Remote Learner.net Inc http://www.remote-learner.net + */ + +/** + * Define all the restore steps that will be used by the restore_kalvidpres_activity_task + */ + +/** + * Structure step to restore one kalvidpres activity + */ +class restore_kalvidpres_activity_structure_step extends restore_activity_structure_step { + + protected function define_structure() { + + $paths = array(); + + $paths[] = new restore_path_element('kalvidpres', '/activity/kalvidpres'); + + // Return the paths wrapped into standard activity structure + return $this->prepare_activity_structure($paths); + } + + protected function process_kalvidpres($data) { + global $DB; + + $data = (object)$data; + $oldid = $data->id; + $data->course = $this->get_courseid(); + + $data->timemodified = $this->apply_date_offset($data->timemodified); + + // insert the kalvidpres record + $newitemid = $DB->insert_record('kalvidpres', $data); + // immediately after inserting "activity" record, call this + $this->apply_activity_instance($newitemid); + } + + protected function after_execute() { + // Add kalvidpres related files, no need to match by itemname (just internally handled context) + $this->add_related_files('mod_kalvidpres', 'intro', null); + } +} diff --git a/mod/kalvidpres/backup/moodle2/restore_kalvidres_activity_task.class.php b/mod/kalvidpres/backup/moodle2/restore_kalvidres_activity_task.class.php new file mode 100644 index 0000000000000..fbd26b2b83f26 --- /dev/null +++ b/mod/kalvidpres/backup/moodle2/restore_kalvidres_activity_task.class.php @@ -0,0 +1,107 @@ +. + +/** + * Kaltura video resource restore activity tasks script. + * + * @package mod_kalvidres + * @author Remote-Learner.net Inc + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + * @copyright (C) 2014 Remote Learner.net Inc http://www.remote-learner.net + */ + +defined('MOODLE_INTERNAL') || die(); + +require_once($CFG->dirroot.'/mod/kalvidres/backup/moodle2/restore_kalvidres_stepslib.php'); + +/** + * kalvidres restore task that provides all the settings and steps to perform one + * complete restore of the activity + */ +class restore_kalvidres_activity_task extends restore_activity_task { + + /** + * Define (add) particular settings this activity can have + */ + protected function define_my_settings() { + // No particular settings for this activity + } + + /** + * Define (add) particular steps this activity can have + */ + protected function define_my_steps() { + // Certificate only has one structure step + $this->add_step(new restore_kalvidres_activity_structure_step('kalvidres_structure', 'kalvidres.xml')); + } + + /** + * Define the contents in the activity that must be + * processed by the link decoder + */ + static public function define_decode_contents() { + $contents = array(); + + $contents[] = new restore_decode_content('kalvidres', array('intro'), 'kalvidres'); + + return $contents; + } + + /** + * Define the decoding rules for links belonging + * to the activity to be executed by the link decoder + */ + static public function define_decode_rules() { + $rules = array(); + + $rules[] = new restore_decode_rule('KALVIDRESVIEWBYID', '/mod/kalvidres/view.php?id=$1', 'course_module'); + $rules[] = new restore_decode_rule('KALVIDRESINDEX', '/mod/kalvidres/index.php?id=$1', 'course'); + + return $rules; + + } + + /** + * Define the restore log rules that will be applied + * by the {@link restore_logs_processor} when restoring + * kalvidres logs. It must return one array + * of {@link restore_log_rule} objects + */ + static public function define_restore_log_rules() { + $rules = array(); + + $rules[] = new restore_log_rule('kalvidres', 'view', 'view.php?id={course_module}', '{kalvidres}'); + + return $rules; + } + + /** + * Define the restore log rules that will be applied + * by the {@link restore_logs_processor} when restoring + * course logs. It must return one array + * of {@link restore_log_rule} objects + * + * Note this rules are applied when restoring course logs + * by the restore final task, but are defined here at + * activity level. All them are rules not linked to any module instance (cmid = 0) + */ + static public function define_restore_log_rules_for_course() { + $rules = array(); + + // Fix old wrong uses (missing extension) + $rules[] = new restore_log_rule('kalvidres', 'view all', 'index.php?id={course}', null); + + return $rules; + } +} diff --git a/mod/kalvidpres/backup/moodle2/restore_kalvidres_stepslib.php b/mod/kalvidpres/backup/moodle2/restore_kalvidres_stepslib.php new file mode 100644 index 0000000000000..9aaac8a0bfbc5 --- /dev/null +++ b/mod/kalvidpres/backup/moodle2/restore_kalvidres_stepslib.php @@ -0,0 +1,62 @@ +. + +/** + * Kaltura video resource restore stepslib script. + * + * @package mod_kalvidres + * @author Remote-Learner.net Inc + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + * @copyright (C) 2014 Remote Learner.net Inc http://www.remote-learner.net + */ + +/** + * Define all the restore steps that will be used by the restore_kalvidres_activity_task + */ + +/** + * Structure step to restore one kalvidres activity + */ +class restore_kalvidres_activity_structure_step extends restore_activity_structure_step { + + protected function define_structure() { + + $paths = array(); + + $paths[] = new restore_path_element('kalvidres', '/activity/kalvidres'); + + // Return the paths wrapped into standard activity structure + return $this->prepare_activity_structure($paths); + } + + protected function process_kalvidres($data) { + global $DB; + + $data = (object)$data; + $oldid = $data->id; + $data->course = $this->get_courseid(); + + $data->timemodified = $this->apply_date_offset($data->timemodified); + + // insert the kalvidres record + $newitemid = $DB->insert_record('kalvidres', $data); + // immediately after inserting "activity" record, call this + $this->apply_activity_instance($newitemid); + } + + protected function after_execute() { + // Add kalvidres related files, no need to match by itemname (just internally handled context) + $this->add_related_files('mod_kalvidres', 'intro', null); + } +} diff --git a/mod/kalvidpres/db/access.php b/mod/kalvidpres/db/access.php new file mode 100644 index 0000000000000..71c0be5111e0e --- /dev/null +++ b/mod/kalvidpres/db/access.php @@ -0,0 +1,36 @@ +. + +/** + * Kaltura video presentation access file. + * + * @package mod_kalvidpres + * @author Remote-Learner.net Inc + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + * @copyright (C) 2014 Remote Learner.net Inc http://www.remote-learner.net + */ + +$capabilities = array( + + 'mod/kalvidpres:addinstance' => array( + 'riskbitmask' => RISK_XSS, + 'captype' => 'write', + 'contextlevel' => CONTEXT_COURSE, + 'archetypes' => array( + 'editingteacher' => CAP_ALLOW, + 'manager' => CAP_ALLOW + ), + 'clonepermissionsfrom' => 'moodle/course:manageactivities' + ), +); \ No newline at end of file diff --git a/mod/kalvidpres/db/install.xml b/mod/kalvidpres/db/install.xml new file mode 100644 index 0000000000000..3b038ac03a336 --- /dev/null +++ b/mod/kalvidpres/db/install.xml @@ -0,0 +1,36 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    +
    \ No newline at end of file diff --git a/mod/kalvidpres/db/log.php b/mod/kalvidpres/db/log.php new file mode 100644 index 0000000000000..e40a56b2a5788 --- /dev/null +++ b/mod/kalvidpres/db/log.php @@ -0,0 +1,31 @@ +. + +/** + * Kaltura video presentation log file. + * + * @package mod_kalvidpres + * @author Remote-Learner.net Inc + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + * @copyright (C) 2014 Remote Learner.net Inc http://www.remote-learner.net + */ + + +defined('MOODLE_INTERNAL') || die(); + +global $DB; + +$logs = array( + array('module' => 'kalvidpres', 'action' => 'view', 'mtable' => 'kalvidpres', 'field' => 'name'), +); \ No newline at end of file diff --git a/mod/kalvidpres/db/upgrade.php b/mod/kalvidpres/db/upgrade.php new file mode 100644 index 0000000000000..8c7b3d22ae915 --- /dev/null +++ b/mod/kalvidpres/db/upgrade.php @@ -0,0 +1,96 @@ +. + +/** + * Kaltura video presentation upgrade file. + * + * @package mod_kalvidpres + * @author Remote-Learner.net Inc + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + * @copyright (C) 2014 Remote Learner.net Inc http://www.remote-learner.net + */ + +function xmldb_kalvidpres_upgrade($oldversion) { + global $CFG, $DB; + + $dbman = $DB->get_manager(); + + if ($oldversion < 2011111112) { + + // Changing type of field intro on table kalvidpres to text + $table = new xmldb_table('kalvidpres'); + $field = new xmldb_field('intro', XMLDB_TYPE_TEXT, 'small', null, null, null, null, 'name'); + + // Launch change of type for field intro + $dbman->change_field_type($table, $field); + + // kalvidpres savepoint reached + upgrade_mod_savepoint(true, 2011111112, 'kalvidpres'); + } + + if ($oldversion < 2012010301) { + + // Define index doc_entry_id_idx (not unique) to be dropped form kalvidpres + $table = new xmldb_table('kalvidpres'); + $index = new xmldb_index('doc_entry_id_idx', XMLDB_INDEX_UNIQUE, array('doc_entry_id')); + + // Conditionally launch drop index doc_entry_id_idx + if ($dbman->index_exists($table, $index)) { + $dbman->drop_index($table, $index); + } + + // Define index doc_entry_id_idx (not unique) to be added to kalvidpres + $index = new xmldb_index('doc_entry_id_idx', XMLDB_INDEX_NOTUNIQUE, array('doc_entry_id')); + + // Conditionally launch add index doc_entry_id_idx + if (!$dbman->index_exists($table, $index)) { + $dbman->add_index($table, $index); + } + + // kalvidpres savepoint reached + upgrade_mod_savepoint(true, 2012010301, 'kalvidpres'); + } + + if ($oldversion < 2014013000) { + + // Define field source to be added to kalvidpres. + $table = new xmldb_table('kalvidpres'); + $field = new xmldb_field('source', XMLDB_TYPE_TEXT, null, null, null, null, null, 'width'); + + // Conditionally launch add field source. + if (!$dbman->field_exists($table, $field)) { + $dbman->add_field($table, $field); + } + + // Kalvidpres savepoint reached. + upgrade_mod_savepoint(true, 2014013000, 'kalvidpres'); + } + + if ($oldversion < 2014013001) { + + // Define field metadata to be added to kalvidpres. + $table = new xmldb_table('kalvidpres'); + $field = new xmldb_field('metadata', XMLDB_TYPE_TEXT, null, null, null, null, null, 'source'); + + // Conditionally launch add field metadata. + if (!$dbman->field_exists($table, $field)) { + $dbman->add_field($table, $field); + } + + // Kalvidassign savepoint reached. + upgrade_mod_savepoint(true, 2014013001, 'kalvidpres'); + } + + return true; +} diff --git a/mod/kalvidpres/lang/en/kalvidpres.php b/mod/kalvidpres/lang/en/kalvidpres.php new file mode 100644 index 0000000000000..da00347ea75cc --- /dev/null +++ b/mod/kalvidpres/lang/en/kalvidpres.php @@ -0,0 +1,36 @@ +. + +/** + * Kaltura video presentation language file. + * + * @package mod_kalvidpres + * @author Remote-Learner.net Inc + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + * @copyright (C) 2014 Remote Learner.net Inc http://www.remote-learner.net + */ + +$string['modulenameplural'] = 'Kaltura Video Presentation'; +$string['modulename'] = 'Kaltura Video Presentation'; +$string['modulename_help'] = 'The Kaltura Video Presentation enables a teacher to create a resource using a Kaltura video.'; +$string['pluginadministration'] = 'Kaltura Video Presentation'; +$string['pluginname'] = 'Kaltura Video Presentation'; +$string['name'] = 'Name'; +$string['novidsource'] = 'No media content found. You must add media content in order to save a video presentation.'; +$string['video_hdr'] = 'Video'; +$string['add_video'] = 'Add media'; +$string['invalidid'] = 'Invalid ID'; +$string['invalid_source_parameter'] = 'Invalid source parameter'; +$string['replace_video'] = 'Replace media'; +$string['kalvidpres:addinstance'] = 'Add a Kaltura Video Presentation'; diff --git a/mod/kalvidpres/lang/en/kalvidres.php b/mod/kalvidpres/lang/en/kalvidres.php new file mode 100644 index 0000000000000..8fcff45e8d121 --- /dev/null +++ b/mod/kalvidpres/lang/en/kalvidres.php @@ -0,0 +1,36 @@ +. + +/** + * Kaltura video resource language file. + * + * @package mod_kalvidres + * @author Remote-Learner.net Inc + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + * @copyright (C) 2014 Remote Learner.net Inc http://www.remote-learner.net + */ +$string['modulenameplural'] = 'Kaltura Video Resource'; +$string['modulename'] = 'Kaltura Video Resource'; +$string['modulename_help'] = 'The Kaltura Video Resource enables a teacher to create a resource using a Kaltura video.'; +$string['pluginadministration'] = 'Kaltura Video Resource'; +$string['pluginname'] = 'Kaltura Video Resource'; +$string['name'] = 'Name'; +$string['novidsource'] = 'No media content found. You must add media content in order to save a video resource.'; +$string['video_hdr'] = 'Video'; +$string['add_video'] = 'Add media'; +$string['invalidid'] = 'Invalid ID'; +$string['invalid_launch_parameters'] = 'Invalid launch parameters'; +$string['invalid_source_parameter'] = 'Invalid source parameter'; +$string['replace_video'] = 'Replace media'; +$string['kalvidres:addinstance'] = 'Add a Kaltura Video Resource'; diff --git a/mod/kalvidpres/lib.php b/mod/kalvidpres/lib.php new file mode 100644 index 0000000000000..02a16f008a7de --- /dev/null +++ b/mod/kalvidpres/lib.php @@ -0,0 +1,199 @@ +. + +/** + * Kaltura video presentation main library file. + * + * @package mod_kalvidpres + * @author Remote-Learner.net Inc + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + * @copyright (C) 2014 Remote Learner.net Inc http://www.remote-learner.net + */ + +if (!defined('MOODLE_INTERNAL')) { + die('Direct access to this script is forbidden.'); +} + +/** + * Given an object containing all the necessary data, + * (defined by the form in mod_form.php) this function + * will create a new instance and return the id number + * of the new instance. + * + * @param object $kalvidpres An object from the form in mod_form.php + * @return int The id of the newly inserted kalvidassign record + */ +function kalvidpres_add_instance($kalvidpres) { + global $DB, $CFG; + require_once($CFG->dirroot.'/local/kaltura/locallib.php'); + + $kalvidpres->timecreated = time(); + + $urlparts = parse_url($kalvidpres->source); + if (!empty($urlparts['path'])) { + $kalvidpres->source = 'http://'.KALTURA_URI_TOKEN.$urlparts['path']; + } + + $kalvidpres->id = $DB->insert_record('kalvidpres', $kalvidpres); + + return $kalvidpres->id; +} + +/** + * Given an object containing all the necessary data, + * (defined by the form in mod_form.php) this function + * will update an existing instance with new data. + * + * @param object $kalvidpres An object from the form in mod_form.php + * @return boolean Success/Fail + */ +function kalvidpres_update_instance($kalvidpres) { + global $DB, $CFG; + require_once($CFG->dirroot.'/local/kaltura/locallib.php'); + + $kalvidpres->timemodified = time(); + $kalvidpres->id = $kalvidpres->instance; + + $urlparts = parse_url($kalvidpres->source); + if (!empty($urlparts['path'])) { + $kalvidpres->source = 'http://'.KALTURA_URI_TOKEN.$urlparts['path']; + } + + $updated = $DB->update_record('kalvidpres', $kalvidpres); + + return $updated; +} + +/** + * Given an ID of an instance of this module, + * this function will permanently delete the instance + * and any data that depends on it. + * + * @param int $id Id of the module instance + * @return boolean Success/Failure + */ +function kalvidpres_delete_instance($id) { + global $DB; + + if (! $kalvidpres = $DB->get_record('kalvidpres', array('id' => $id))) { + return false; + } + + $DB->delete_records('kalvidpres', array('id' => $kalvidpres->id)); + + return true; +} + +/** + * Return a small object with summary information about what a + * user has done with a given particular instance of this module + * Used for user activity reports. + * $return->time = the time they did it + * $return->info = a short text description + * + * @return null + * @todo Finish documenting this function + */ +function kalvidpres_user_outline($course, $user, $mod, $kalvidpres) { + $return = new stdClass; + $return->time = 0; + $return->info = ''; + return $return; +} + +/** + * Print a detailed representation of what a user has done with + * a given particular instance of this module, for user activity reports. + * + * @return boolean + * @todo Finish documenting this function + */ +function kalvidpres_user_complete($course, $user, $mod, $kalvidpres) { + return true; +} + +/** + * Given a course and a time, this module should find recent activity + * that has occurred in kalvidpres activities and print it out. + * Return true if there was output, or false is there was none. + * + * @return boolean + * @todo Finish documenting this function + */ +function kalvidpres_print_recent_activity($course, $viewfullnames, $timestart) { + return false; +} + +/** + * Function to be run periodically according to the moodle cron + * This function searches for things that need to be done, such + * as sending out mail, toggling flags etc ... + * + * @return boolean + */ +function kalvidpres_cron () { + return false; +} + +/** + * Must return an array of users who are participants for a given instance + * of kalvidpres. Must include every user involved in the instance, independient + * of his role (student, teacher, admin...). The returned objects must contain + * at least id property. See other modules as example. + * + * @param int $kalvidpres ID of an instance of this module + * @return boolean|array false if no participants, array of objects otherwise + */ +function kalvidpres_get_participants($kalvidpresid) { + return false; +} + +/** + * @param string $feature FEATURE_xx constant for requested feature + * @return mixed True if module supports feature, null if doesn't know + */ +function kalvidpres_supports($feature) { + switch($feature) { + case FEATURE_MOD_ARCHETYPE: + return MOD_ARCHETYPE_RESOURCE; + break; + case FEATURE_GROUPS: + return true; + break; + case FEATURE_GROUPINGS: + return true; + break; + case FEATURE_GROUPMEMBERSONLY: + return true; + break; + case FEATURE_MOD_INTRO: + return true; + break; + case FEATURE_COMPLETION_TRACKS_VIEWS: + return false; + break; + case FEATURE_GRADE_HAS_GRADE: + return false; + break; + case FEATURE_GRADE_OUTCOMES: + return false; + break; + case FEATURE_BACKUP_MOODLE2: + return true; + break; + default: + return null; + break; + } +} diff --git a/mod/kalvidpres/lti_launch.php b/mod/kalvidpres/lti_launch.php new file mode 100644 index 0000000000000..f729eabc5ebba --- /dev/null +++ b/mod/kalvidpres/lti_launch.php @@ -0,0 +1,74 @@ +. + +/** + * Kaltura video presentation LTI launch page. + * + * @package mod_kalvidpres + * @author Remote-Learner.net Inc + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + * @copyright (C) 2014 Remote Learner.net Inc http://www.remote-learner.net + */ + +require_once(dirname(dirname(dirname(__FILE__))).'/config.php'); +require_once(dirname(dirname(dirname(__FILE__))).'/local/kaltura/locallib.php'); + +global $USER; + +require_login(); +$courseid = required_param('courseid', PARAM_INT); +$height = required_param('height', PARAM_INT); +$width = required_param('width', PARAM_INT); +$withblocks = optional_param('withblocks', 0, PARAM_INT); +$source = optional_param('source', '', PARAM_URL); + +$context = context_course::instance($courseid); + +// If the user isn't a teacher or they are not enrolled in the course context then return with an error. +if (!has_capability('mod/kalvidpres:addinstance', $context) && is_guest($context)) { + echo get_string('nocapabilitytousethisservice', 'error'); + die(); +} + +$course = get_course($courseid); + +$launch = array(); +$launch['id'] = 1; +$launch['cmid'] = 0; +$launch['title'] = 'Kaltura video presentation'; +$launch['module'] = KAF_BROWSE_EMBED_MODULE; +$launch['course'] = $course; +$launch['width'] = $width; +$launch['height'] = $height; +$launch['custom_publishdata'] = ''; +$launch['custom_disable_add_new'] = 'yes'; +$launch['custom_filter_type'] = 'VideoPresentations'; + +$source = local_kaltura_add_kaf_uri_token($source); + +if (false === local_kaltura_url_contains_configured_hostname($source) && !empty($source)) { + echo get_string('invalid_source_parameter', 'mod_kalvidpres'); + die; +} else { + $launch['source'] = urldecode($source); +} + +if (local_kaltura_validate_browseembed_required_params($launch)) { + $content = local_kaltura_request_lti_launch($launch, $withblocks); + echo $content; +} else { + echo get_string('invalid_launch_parameters', 'mod_kalvidpres'); +} diff --git a/mod/kalvidpres/mod_form.php b/mod/kalvidpres/mod_form.php new file mode 100644 index 0000000000000..54137b888935c --- /dev/null +++ b/mod/kalvidpres/mod_form.php @@ -0,0 +1,261 @@ +. + +/** + * Kaltura video presentation formslib class. + * + * @package mod_kalvidpres + * @author Remote-Learner.net Inc + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + * @copyright (C) 2014 Remote Learner.net Inc http://www.remote-learner.net + */ + +if (!defined('MOODLE_INTERNAL')) { + die('Direct access to this script is forbidden.'); +} + +require_once(dirname(dirname(dirname(__FILE__))).'/course/moodleform_mod.php'); +require_once(dirname(dirname(dirname(__FILE__))).'/local/kaltura/locallib.php'); + +class mod_kalvidpres_mod_form extends moodleform_mod { + /** @var string Part of the id for the add video button. */ + protected $addvideobutton = 'add_video'; + + /** + * Forms lib definition function + */ + public function definition() { + global $CFG, $COURSE, $PAGE; + + $PAGE->requires->css('/mod/kalvidpres/styles.css'); + $pageclass = 'kaltura-kalvidpres-body'; + $PAGE->add_body_class($pageclass); + + $params = array( + 'withblocks' => 0, + 'courseid' => $COURSE->id, + 'width' => KALTURA_PANEL_WIDTH, + 'height' => KALTURA_PANEL_HEIGHT + ); + + $url = new moodle_url('/mod/kalvidpres/lti_launch.php', $params); + + $params = array( + 'addvidbtnid' => 'id_'.$this->addvideobutton, + 'ltilaunchurl' => $url->out(), + 'height' => KALTURA_PANEL_HEIGHT, + 'width' => KALTURA_PANEL_WIDTH, + 'modulename' => 'kalvidpres' + ); + + $PAGE->requires->yui_module('moodle-local_kaltura-ltipanel', 'M.local_kaltura.init', array($params), null, true); + // Make replace media language string available to the YUI modules + $PAGE->requires->string_for_js('replace_video', 'kalvidpres'); + + // Require a YUI module to make the object tag be as large as possible. + $params = array( + 'bodyclass' => $pageclass, + 'lastheight' => null, + 'padding' => 15 + ); + $PAGE->requires->yui_module('moodle-local_kaltura-lticontainer', 'M.local_kaltura.init', array($params), null, true); + + $mform =& $this->_form; + + // This line is needed to avoid a PHP warning when the form is submitted. + // Because this value is set as the default for one of the formslib elements. + $uiconf_id = ''; + + /* Hidden fields */ + $attr = array('id' => 'entry_id'); + $mform->addElement('hidden', 'entry_id', '', $attr); + $mform->setType('entry_id', PARAM_NOTAGS); + + $attr = array('id' => 'source'); + $mform->addElement('hidden', 'source', '', $attr); + $mform->setType('source', PARAM_URL); + + $attr = array('id' => 'video_title'); + $mform->addElement('hidden', 'video_title', 'x', $attr); + $mform->setType('video_title', PARAM_TEXT); + + $attr = array('id' => 'uiconf_id'); + $mform->addElement('hidden', 'uiconf_id', '', $attr); + $mform->setDefault('uiconf_id', $uiconf_id); + $mform->setType('uiconf_id', PARAM_INT); + + $attr = array('id' => 'video_entry_id'); + $mform->addElement('hidden', 'video_entry_id', '', $attr); + $mform->setDefault('video_entry_id', 'x'); + $mform->setType('video_entry_id', PARAM_INT); + + $attr = array('id' => 'doc_entry_id'); + $mform->addElement('hidden', 'doc_entry_id', '', $attr); + $mform->setDefault('doc_entry_id', 'x'); + $mform->setType('doc_entry_id', PARAM_INT); + + $attr = array('id' => 'widescreen'); + $mform->addElement('hidden', 'widescreen', 'x', $attr); + $mform->setDefault('widescreen', 0); + $mform->setType('widescreen', PARAM_INT); + + $attr = array('id' => 'height'); + $mform->addElement('hidden', 'height', '', $attr); + $mform->setDefault('height', '365'); + $mform->setType('height', PARAM_TEXT); + + $attr = array('id' => 'width'); + $mform->addElement('hidden', 'width', '', $attr); + $mform->setDefault('width', '400'); + $mform->setType('width', PARAM_TEXT); + + $attr = array('id' => 'metadata'); + $mform->addElement('hidden', 'metadata', '', $attr); + $mform->setType('metadata', PARAM_TEXT); + + $mform->addElement('header', 'general', get_string('general', 'form')); + + $mform->addElement('text', 'name', get_string('name', 'kalvidpres'), array('size' => '64')); + + if (!empty($CFG->formatstringstriptags)) { + $mform->setType('name', PARAM_TEXT); + } else { + $mform->setType('name', PARAM_CLEANHTML); + } + + $mform->addRule('name', null, 'required', null, 'client'); + + $this->add_intro_editor(false); + + $mform->addElement('header', 'video', get_string('video_hdr', 'kalvidpres')); + $this->add_video_definition($mform); + + $this->standard_coursemodule_elements(); + + $this->add_action_buttons(); + + $mform->addElement('html', html_writer::empty_tag('input', array('type' => 'hidden', 'id' => 'closeltipanel', 'value' => 0))); + } + + /** + * This function adds the video thumbnail element and buttons to the form. + * @param MoodleQuickForm $mform An instance of MoodleQuickForm used to add elements to the form. + */ + private function add_video_definition($mform) { + $addinstance = empty($this->current->entry_id) ? true : false; + + $thumbnail = $this->get_thumbnail_markup(!$addinstance); + + $videopreview = $this->get_iframe_video_preview_markup($addinstance); + + $mform->addElement('static', 'add_video_thumb', ' ', $thumbnail); + $mform->addElement('static', 'add_video_preview', ' ', $videopreview); + + $videogroup = array(); + if ($addinstance) { + $videogroup[] =& $mform->createElement('button', $this->addvideobutton, get_string('add_video', 'kalvidpres')); + } else { + $videogroup[] =& $mform->createElement('button', $this->addvideobutton, get_string('replace_video', 'kalvidpres')); + } + + $mform->addGroup($videogroup, 'video_group', ' ', ' ', false); + } + + /** + * This functions returns the markup to display a thumbnail image. + * @param bool $hide Set to true to hide it, otherwise false. When set to hide the thumbnail markup is still rendered + * but the display style is set to none. The reason for this is that the YUI module uses the img tag to place the iframe just below it. + * As well as to hide the image tag when a new video is selected. + * @return string Returns an image element markup. + */ + private function get_thumbnail_markup($hide = false) { + $source = new moodle_url('/local/kaltura/pix/vidThumb.png'); + $alt = get_string('add_video', 'kalvidpres'); + $title = get_string('add_video', 'kalvidpres'); + + $attr = array( + 'id' => 'video_thumbnail', + 'src' => $source->out(), + 'alt' => $alt, + 'title' => $title + ); + + if ($hide) { + $attr['style'] = 'display:none'; + } + + $output = html_writer::empty_tag('img', $attr); + + return $output; + } + + /** + * This functions returns iframe markup for displaying the video preview interface. + * @param bool $hide True to hide the element, otherwise false. + * @return string Returns an iframe markup + */ + private function get_iframe_video_preview_markup($hide = true) { + $width = empty($this->current->width) ? '0px' : $this->current->width.'px'; + $height = empty($this->current->height) ? 'opx' : $this->current->height.'px'; + $source = empty($this->current->source) ? '' : $this->current->source; + + $params = array( + 'id' => 'contentframe', + 'src' => $source, + 'height' => $height, + 'width' => $width, + 'allowfullscreen' => 'true', + 'webkitallowfullscreen' => 'true', + 'mozallowfullscreen' => 'true' + ); + + if ($hide) { + $params['style'] = 'display:none'; + } + + // If the source attribute is not empty, initiate an LTI launch to avoid having ACL issues when another user with permissions edits the module. + // This also assists with full screen functionality on some mobile devices. + if (!empty($source)) { + $ltiparams = array( + 'courseid' => $this->current->course, + 'height' => $height, + 'width' => $width, + 'withblocks' => 0, + 'source' => $source + ); + + $url = new moodle_url('/mod/kalvidpres/lti_launch.php', $ltiparams); + $params['src'] = $url->out(false); + } + + return html_writer::tag('iframe', '', $params); + } + + /** + * This function validates the form on save. + * + * @param array $data Array of form values + * @param array $files Array of files + * @return array $errors Array of error messages + */ + public function validation($data, $files) { + $errors = array(); + + if (empty($data['source'])) { + $errors['add_video_thumb'] = get_string('novidsource', 'kalvidpres'); + } + + return $errors; + } +} diff --git a/mod/kalvidpres/pix/icon.gif b/mod/kalvidpres/pix/icon.gif new file mode 100644 index 0000000000000000000000000000000000000000..550df5db8c43d778c40a1290f1d3a724d0e88133 GIT binary patch literal 128 zcmZ?wbhEHb6krfwSoEKPf#I&Pahh>jn(@rE0|yTL|Np+Z^fq{iV2gnAh z6kuRrcJ. + +/** + * Kaltura video presentation renderer file. + * + * @package mod_kalvidpres + * @author Remote-Learner.net Inc + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + * @copyright (C) 2014 Remote Learner.net Inc http://www.remote-learner.net + */ + +if (!defined('MOODLE_INTERNAL')) { + die('Direct access to this script is forbidden.'); +} + +require_once(dirname(dirname(dirname(__FILE__))).'/local/kaltura/locallib.php'); + +class mod_kalvidpres_renderer extends plugin_renderer_base { + /** + * This function displays the iframe markup. + * @param object $kalvidpres A Kaltura video resrouce instance object. + * @param int $courseid A course id. + * @return string HTML markup. + */ + public function display_iframe($kalvidpres, $courseid) { + $params = array( + 'courseid' => $courseid, + 'height' => $kalvidpres->height, + 'width' => $kalvidpres->width, + 'withblocks' => 0, + 'source' => $kalvidpres->source + ); + $url = new moodle_url('/mod/kalvidpres/lti_launch.php', $params); + + $attr = array( + 'id' => 'contentframe', + 'height' => '100%', + 'width' => $kalvidpres->width, + 'src' => $url->out(false), + 'allowfullscreen' => 'true', + 'webkitallowfullscreen' => 'true', + 'mozallowfullscreen' => 'true' + ); + + $output = html_writer::tag('iframe', '', $attr); + $output = html_writer::tag('div', $output, array('id' => 'kalvid_content')); + return $output; + } +} diff --git a/mod/kalvidpres/styles.css b/mod/kalvidpres/styles.css new file mode 100644 index 0000000000000..7951a285376b4 --- /dev/null +++ b/mod/kalvidpres/styles.css @@ -0,0 +1,38 @@ +#id_add_video { + float: left; +} + +#id_video_preview { + float: left; + margin-left: 5px; +} + +#slider_border { + width: 100%; + height: 18px; + border: 1px solid #000000; + overflow: hidden; +} + +#progress_bar { + float: left; + height: 18px; + width: 0%; + /*border-right: 1px solid #000000;*/ + background: #00FF00; +} + +#loading_text { + position: relative; + top: -18px; + font-weight: bold; + left: 12px; +} + +#kalvid_content { + text-align: center; +} + +#id_video #video_thumbnail { + float: left; +} diff --git a/mod/kalvidpres/version.php b/mod/kalvidpres/version.php new file mode 100644 index 0000000000000..597bf0bfbe228 --- /dev/null +++ b/mod/kalvidpres/version.php @@ -0,0 +1,36 @@ +. + +/** + * Kaltura video presentation version file. + * + * @package mod_kalvidpres + * @author Remote-Learner.net Inc + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + * @copyright (C) 2014 Remote Learner.net Inc http://www.remote-learner.net + */ + +if (!defined('MOODLE_INTERNAL')) { + die('Direct access to this script is forbidden.'); +} + +$module->version = 2014013001; +$module->component = 'mod_kalvidpres'; +$module->release = 'Kaltura release 4.0.00 (RL: TBD)'; +$module->requires = 2013051400; +$module->cron = 0; +$module->maturity = MATURITY_STABLE; +$module->dependencies = array( + 'local_kaltura' => 2014013000.01 +); diff --git a/mod/kalvidpres/view.php b/mod/kalvidpres/view.php new file mode 100644 index 0000000000000..b38c6924270cf --- /dev/null +++ b/mod/kalvidpres/view.php @@ -0,0 +1,89 @@ +. + +/** + * Kaltura video presentation view page. + * + * @package mod_kalvidpres + * @author Remote-Learner.net Inc + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + * @copyright (C) 2014 Remote Learner.net Inc http://www.remote-learner.net + */ + +require_once(dirname(dirname(dirname(__FILE__))).'/config.php'); + +$id = optional_param('id', 0, PARAM_INT); + +// Retrieve module instance. +if (empty($id)) { + print_error('invalidid', 'kalvidpres'); +} + +if (!empty($id)) { + + if (!$cm = get_coursemodule_from_id('kalvidpres', $id)) { + print_error('invalidcoursemodule'); + } + + if (!$course = $DB->get_record('course', array('id' => $cm->course))) { + print_error('coursemisconf'); + } + + if (!$kalvidpres = $DB->get_record('kalvidpres', array("id" => $cm->instance))) { + print_error('invalidid', 'kalvidpres'); + } +} + +require_course_login($course->id, true, $cm); + +global $SESSION, $CFG; + +$PAGE->set_url('/mod/kalvidpres/view.php', array('id' => $id)); +$PAGE->set_title(format_string($kalvidpres->name)); +$PAGE->set_heading($course->fullname); +$pageclass = 'kaltura-kalvidpres-body'; +$PAGE->add_body_class($pageclass); + +$context = $PAGE->context; + +add_to_log($course->id, 'kalvidpres', 'view video resource', 'view.php?id='.$cm->id, $kalvidpres->id, $cm->id); + +$completion = new completion_info($course); +$completion->set_module_viewed($cm); + +echo $OUTPUT->header(); + +$renderer = $PAGE->get_renderer('mod_kalvidpres'); + +echo $OUTPUT->box_start('generalbox'); + +echo format_module_intro('kalvidpres', $kalvidpres, $cm->id); + +echo $OUTPUT->box_end(); + +// Require a YUI module to make the object tag be as large as possible. +$params = array( + 'bodyclass' => $pageclass, + 'lastheight' => null, + 'padding' => 15, + 'kalvidwidth' => $kalvidpres->width +); +$PAGE->requires->yui_module('moodle-local_kaltura-lticontainer', 'M.local_kaltura.init', array($params), null, true); + +// Set iframe width to fill the entire center region per KALDEV-562. +$kalvidpres->width = '100%'; + +echo $renderer->display_iframe($kalvidpres, $course->id); + +echo $OUTPUT->footer(); diff --git a/mod/kalvidres/backup/moodle2/backup_kalvidres_activity_task.class.php b/mod/kalvidres/backup/moodle2/backup_kalvidres_activity_task.class.php new file mode 100644 index 0000000000000..a73ff6be762a0 --- /dev/null +++ b/mod/kalvidres/backup/moodle2/backup_kalvidres_activity_task.class.php @@ -0,0 +1,66 @@ +. + +/** + * Kaltura video resource backup activity tasks script. + * + * @package mod_kalvidres + * @author Remote-Learner.net Inc + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + * @copyright (C) 2014 Remote Learner.net Inc http://www.remote-learner.net + */ + +require_once($CFG->dirroot.'/mod/kalvidres/backup/moodle2/backup_kalvidres_stepslib.php'); +require_once($CFG->dirroot.'/mod/kalvidres/backup/moodle2/backup_kalvidres_settingslib.php'); + +/** + * kalvidres backup task that provides all the settings and steps to perform one + * complete backup of the activity + */ +class backup_kalvidres_activity_task extends backup_activity_task { + /** + * Define (add) particular settings this activity can have + */ + protected function define_my_settings() { + // No particular settings for this activity + } + + /** + * Define (add) particular steps this activity can have + */ + protected function define_my_steps() { + // Choice only has one structure step + $this->add_step(new backup_kalvidres_activity_structure_step('kalvidres_structure', 'kalvidres.xml')); + } + + /** + * Code the transformations to perform in the activity in + * order to get transportable (encoded) links + */ + static public function encode_content_links($content) { + global $CFG; + + $base = preg_quote($CFG->wwwroot, "/"); + + // Link to the list of kalvidress + $search="/(".$base."\/mod\/kalvidres\/index.php\?id\=)([0-9]+)/"; + $content= preg_replace($search, '$@KALVIDRESINDEX*$2@$', $content); + + // Link to kalvidres view by moduleid + $search="/(".$base."\/mod\/kalvidres\/view.php\?id\=)([0-9]+)/"; + $content= preg_replace($search, '$@KALVIDRESVIEWBYID*$2@$', $content); + + return $content; + } +} diff --git a/mod/kalvidres/backup/moodle2/backup_kalvidres_settingslib.php b/mod/kalvidres/backup/moodle2/backup_kalvidres_settingslib.php new file mode 100644 index 0000000000000..4a0cd75a42b2a --- /dev/null +++ b/mod/kalvidres/backup/moodle2/backup_kalvidres_settingslib.php @@ -0,0 +1,26 @@ +. + +/** + * Kaltura video resource backup settingslib script. + * + * @package mod_kalvidres + * @author Remote-Learner.net Inc + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + * @copyright (C) 2014 Remote Learner.net Inc http://www.remote-learner.net + */ + + // This activity has no particular settings but the inherited from the generic + // backup_activity_task so here there isn't any class definition, like the ones + // existing in /backup/moodle2/backup_settingslib.php (activities section) \ No newline at end of file diff --git a/mod/kalvidres/backup/moodle2/backup_kalvidres_stepslib.php b/mod/kalvidres/backup/moodle2/backup_kalvidres_stepslib.php new file mode 100644 index 0000000000000..ae532446cc14f --- /dev/null +++ b/mod/kalvidres/backup/moodle2/backup_kalvidres_stepslib.php @@ -0,0 +1,46 @@ +. + +/** + * Kaltura video resource backup stepslib script. + * + * @package mod_kalvidres + * @author Remote-Learner.net Inc + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + * @copyright (C) 2014 Remote Learner.net Inc http://www.remote-learner.net + */ + +/** + * Define all the backup steps that will be used by the backup_kalvidres_activity_task + */ + +/** + * Define the complete kalvidres structure for backup, with file and id annotations + */ +class backup_kalvidres_activity_structure_step extends backup_activity_structure_step { + + protected function define_structure() { + + // Define each element separated + $kalvidres = new backup_nested_element('kalvidres', array('id'), array( + 'name', 'intro', 'introformat', 'entry_id', 'video_title', + 'uiconf_id', 'widescreen', 'height', 'width', 'source', 'timemodified', 'timecreated')); + + // Define sources + $kalvidres->set_source_table('kalvidres', array('id' => backup::VAR_ACTIVITYID)); + + // Return the root element, wrapped into standard activity structure + return $this->prepare_activity_structure($kalvidres); + } +} diff --git a/mod/kalvidres/backup/moodle2/restore_kalvidres_activity_task.class.php b/mod/kalvidres/backup/moodle2/restore_kalvidres_activity_task.class.php new file mode 100644 index 0000000000000..fbd26b2b83f26 --- /dev/null +++ b/mod/kalvidres/backup/moodle2/restore_kalvidres_activity_task.class.php @@ -0,0 +1,107 @@ +. + +/** + * Kaltura video resource restore activity tasks script. + * + * @package mod_kalvidres + * @author Remote-Learner.net Inc + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + * @copyright (C) 2014 Remote Learner.net Inc http://www.remote-learner.net + */ + +defined('MOODLE_INTERNAL') || die(); + +require_once($CFG->dirroot.'/mod/kalvidres/backup/moodle2/restore_kalvidres_stepslib.php'); + +/** + * kalvidres restore task that provides all the settings and steps to perform one + * complete restore of the activity + */ +class restore_kalvidres_activity_task extends restore_activity_task { + + /** + * Define (add) particular settings this activity can have + */ + protected function define_my_settings() { + // No particular settings for this activity + } + + /** + * Define (add) particular steps this activity can have + */ + protected function define_my_steps() { + // Certificate only has one structure step + $this->add_step(new restore_kalvidres_activity_structure_step('kalvidres_structure', 'kalvidres.xml')); + } + + /** + * Define the contents in the activity that must be + * processed by the link decoder + */ + static public function define_decode_contents() { + $contents = array(); + + $contents[] = new restore_decode_content('kalvidres', array('intro'), 'kalvidres'); + + return $contents; + } + + /** + * Define the decoding rules for links belonging + * to the activity to be executed by the link decoder + */ + static public function define_decode_rules() { + $rules = array(); + + $rules[] = new restore_decode_rule('KALVIDRESVIEWBYID', '/mod/kalvidres/view.php?id=$1', 'course_module'); + $rules[] = new restore_decode_rule('KALVIDRESINDEX', '/mod/kalvidres/index.php?id=$1', 'course'); + + return $rules; + + } + + /** + * Define the restore log rules that will be applied + * by the {@link restore_logs_processor} when restoring + * kalvidres logs. It must return one array + * of {@link restore_log_rule} objects + */ + static public function define_restore_log_rules() { + $rules = array(); + + $rules[] = new restore_log_rule('kalvidres', 'view', 'view.php?id={course_module}', '{kalvidres}'); + + return $rules; + } + + /** + * Define the restore log rules that will be applied + * by the {@link restore_logs_processor} when restoring + * course logs. It must return one array + * of {@link restore_log_rule} objects + * + * Note this rules are applied when restoring course logs + * by the restore final task, but are defined here at + * activity level. All them are rules not linked to any module instance (cmid = 0) + */ + static public function define_restore_log_rules_for_course() { + $rules = array(); + + // Fix old wrong uses (missing extension) + $rules[] = new restore_log_rule('kalvidres', 'view all', 'index.php?id={course}', null); + + return $rules; + } +} diff --git a/mod/kalvidres/backup/moodle2/restore_kalvidres_stepslib.php b/mod/kalvidres/backup/moodle2/restore_kalvidres_stepslib.php new file mode 100644 index 0000000000000..9aaac8a0bfbc5 --- /dev/null +++ b/mod/kalvidres/backup/moodle2/restore_kalvidres_stepslib.php @@ -0,0 +1,62 @@ +. + +/** + * Kaltura video resource restore stepslib script. + * + * @package mod_kalvidres + * @author Remote-Learner.net Inc + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + * @copyright (C) 2014 Remote Learner.net Inc http://www.remote-learner.net + */ + +/** + * Define all the restore steps that will be used by the restore_kalvidres_activity_task + */ + +/** + * Structure step to restore one kalvidres activity + */ +class restore_kalvidres_activity_structure_step extends restore_activity_structure_step { + + protected function define_structure() { + + $paths = array(); + + $paths[] = new restore_path_element('kalvidres', '/activity/kalvidres'); + + // Return the paths wrapped into standard activity structure + return $this->prepare_activity_structure($paths); + } + + protected function process_kalvidres($data) { + global $DB; + + $data = (object)$data; + $oldid = $data->id; + $data->course = $this->get_courseid(); + + $data->timemodified = $this->apply_date_offset($data->timemodified); + + // insert the kalvidres record + $newitemid = $DB->insert_record('kalvidres', $data); + // immediately after inserting "activity" record, call this + $this->apply_activity_instance($newitemid); + } + + protected function after_execute() { + // Add kalvidres related files, no need to match by itemname (just internally handled context) + $this->add_related_files('mod_kalvidres', 'intro', null); + } +} diff --git a/mod/kalvidres/db/access.php b/mod/kalvidres/db/access.php new file mode 100644 index 0000000000000..93d5f0e2e163a --- /dev/null +++ b/mod/kalvidres/db/access.php @@ -0,0 +1,35 @@ +. + +/** + * Kaltura video resource accesslib. + * + * @package mod_kalvidres + * @author Remote-Learner.net Inc + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + * @copyright (C) 2014 Remote Learner.net Inc http://www.remote-learner.net + */ + +$capabilities = array( + 'mod/kalvidres:addinstance' => array( + 'riskbitmask' => RISK_XSS, + 'captype' => 'write', + 'contextlevel' => CONTEXT_COURSE, + 'archetypes' => array( + 'editingteacher' => CAP_ALLOW, + 'manager' => CAP_ALLOW + ), + 'clonepermissionsfrom' => 'moodle/course:manageactivities' + ), + ); \ No newline at end of file diff --git a/mod/kalvidres/db/install.xml b/mod/kalvidres/db/install.xml new file mode 100644 index 0000000000000..4da7c9abe95c3 --- /dev/null +++ b/mod/kalvidres/db/install.xml @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    +
    \ No newline at end of file diff --git a/mod/kalvidres/db/log.php b/mod/kalvidres/db/log.php new file mode 100644 index 0000000000000..2006b3cb7e043 --- /dev/null +++ b/mod/kalvidres/db/log.php @@ -0,0 +1,28 @@ +. + +/** + * Kaltura video resource log file. + * + * @package mod_kalvidres + * @author Remote-Learner.net Inc + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + * @copyright (C) 2014 Remote Learner.net Inc http://www.remote-learner.net + */ + +defined('MOODLE_INTERNAL') || die(); + +$logs = array( + array('module' => 'kalvidres', 'action' => 'view', 'mtable' => 'kalvidres', 'field' => 'name'), +); diff --git a/mod/kalvidres/db/upgrade.php b/mod/kalvidres/db/upgrade.php new file mode 100644 index 0000000000000..4eaf7a251047c --- /dev/null +++ b/mod/kalvidres/db/upgrade.php @@ -0,0 +1,71 @@ +get_manager(); + + if ($oldversion < 2011110702) { + + // Changing type of field intro on table kalvidres to text. + $table = new xmldb_table('kalvidres'); + $field = new xmldb_field('intro', XMLDB_TYPE_TEXT, 'small', null, null, null, null, 'name'); + + // Launch change of type for field intro. + $dbman->change_field_type($table, $field); + + // Kalvidres savepoint reached. + upgrade_mod_savepoint(true, 2011110702, 'kalvidres'); + } + + if ($oldversion < 2014013000) { + + // Define field source to be added to kalvidres. + $table = new xmldb_table('kalvidres'); + $field = new xmldb_field('source', XMLDB_TYPE_TEXT, null, null, null, null, null, 'width'); + + // Conditionally launch add field source. + if (!$dbman->field_exists($table, $field)) { + $dbman->add_field($table, $field); + } + + // Kalvidres savepoint reached. + upgrade_mod_savepoint(true, 2014013000, 'kalvidres'); + } + + if ($oldversion < 2014013001) { + + // Define field metadata to be added to kalvidres. + $table = new xmldb_table('kalvidres'); + $field = new xmldb_field('metadata', XMLDB_TYPE_TEXT, null, null, null, null, null, 'source'); + + // Conditionally launch add field metadata. + if (!$dbman->field_exists($table, $field)) { + $dbman->add_field($table, $field); + } + + // Kalvidassign savepoint reached. + upgrade_mod_savepoint(true, 2014013001, 'kalvidres'); + } + + return true; +} diff --git a/mod/kalvidres/lang/en/kalvidres.php b/mod/kalvidres/lang/en/kalvidres.php new file mode 100644 index 0000000000000..8fcff45e8d121 --- /dev/null +++ b/mod/kalvidres/lang/en/kalvidres.php @@ -0,0 +1,36 @@ +. + +/** + * Kaltura video resource language file. + * + * @package mod_kalvidres + * @author Remote-Learner.net Inc + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + * @copyright (C) 2014 Remote Learner.net Inc http://www.remote-learner.net + */ +$string['modulenameplural'] = 'Kaltura Video Resource'; +$string['modulename'] = 'Kaltura Video Resource'; +$string['modulename_help'] = 'The Kaltura Video Resource enables a teacher to create a resource using a Kaltura video.'; +$string['pluginadministration'] = 'Kaltura Video Resource'; +$string['pluginname'] = 'Kaltura Video Resource'; +$string['name'] = 'Name'; +$string['novidsource'] = 'No media content found. You must add media content in order to save a video resource.'; +$string['video_hdr'] = 'Video'; +$string['add_video'] = 'Add media'; +$string['invalidid'] = 'Invalid ID'; +$string['invalid_launch_parameters'] = 'Invalid launch parameters'; +$string['invalid_source_parameter'] = 'Invalid source parameter'; +$string['replace_video'] = 'Replace media'; +$string['kalvidres:addinstance'] = 'Add a Kaltura Video Resource'; diff --git a/mod/kalvidres/lib.php b/mod/kalvidres/lib.php new file mode 100644 index 0000000000000..62b1f782c6f8b --- /dev/null +++ b/mod/kalvidres/lib.php @@ -0,0 +1,199 @@ +. + +/** + * Kaltura video resource library script. + * + * @package mod_kalvidres + * @author Remote-Learner.net Inc + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + * @copyright (C) 2014 Remote Learner.net Inc http://www.remote-learner.net + */ + +if (!defined('MOODLE_INTERNAL')) { + die('Direct access to this script is forbidden.'); +} + +/** + * Given an object containing all the necessary data, + * (defined by the form in mod_form.php) this function + * will create a new instance and return the id number + * of the new instance. + * + * @param object $kalvidres An object from the form in mod_form.php + * @return int The id of the newly inserted kalvidassign record + */ +function kalvidres_add_instance($kalvidres) { + global $DB, $CFG; + require_once($CFG->dirroot.'/local/kaltura/locallib.php'); + + $kalvidres->timecreated = time(); + + $urlparts = parse_url($kalvidres->source); + if (!empty($urlparts['path'])) { + $kalvidres->source = 'http://'.KALTURA_URI_TOKEN.$urlparts['path']; + } + $kalvidres->id = $DB->insert_record('kalvidres', $kalvidres); + + return $kalvidres->id; +} + +/** + * Given an object containing all the necessary data, + * (defined by the form in mod_form.php) this function + * will update an existing instance with new data. + * + * @param object $kalvidres An object from the form in mod_form.php + * @return boolean Success/Fail + */ +function kalvidres_update_instance($kalvidres) { + global $DB, $CFG; + require_once($CFG->dirroot.'/local/kaltura/locallib.php'); + + $kalvidres->timemodified = time(); + $kalvidres->id = $kalvidres->instance; + $urlparts = parse_url($kalvidres->source); + if (!empty($urlparts['path'])) { + $kalvidres->source = 'http://'.KALTURA_URI_TOKEN.$urlparts['path']; + } + + $updated = $DB->update_record('kalvidres', $kalvidres); + + return $updated; +} + +/** + * Given an ID of an instance of this module, + * this function will permanently delete the instance + * and any data that depends on it. + * + * @param int $id Id of the module instance + * @return boolean Success/Failure + */ +function kalvidres_delete_instance($id) { + global $DB; + + if (! $kalvidres = $DB->get_record('kalvidres', array('id' => $id))) { + return false; + } + + $DB->delete_records('kalvidres', array('id' => $kalvidres->id)); + + return true; +} + +/** + * Return a small object with summary information about what a + * user has done with a given particular instance of this module + * Used for user activity reports. + * $return->time = the time they did it + * $return->info = a short text description + * + * @return null + * @todo Finish documenting this function + */ +function kalvidres_user_outline($course, $user, $mod, $kalvidres) { + $return = new stdClass; + $return->time = 0; + $return->info = ''; + return $return; +} + +/** + * Print a detailed representation of what a user has done with + * a given particular instance of this module, for user activity reports. + * + * @return boolean + * @todo Finish documenting this function + */ +function kalvidres_user_complete($course, $user, $mod, $kalvidres) { + return true; +} + +/** + * Given a course and a time, this module should find recent activity + * that has occurred in kalvidres activities and print it out. + * Return true if there was output, or false is there was none. + * + * @return boolean + * @todo Finish documenting this function + */ +function kalvidres_print_recent_activity($course, $viewfullnames, $timestart) { + // TODO: finish this function + return false; // True if anything was printed, otherwise false +} + +/** + * Function to be run periodically according to the moodle cron + * This function searches for things that need to be done, such + * as sending out mail, toggling flags etc ... + * + * @return boolean + */ +function kalvidres_cron () { + return false; +} + +/** + * Must return an array of users who are participants for a given instance + * of kalvidres. Must include every user involved in the instance, independient + * of his role (student, teacher, admin...). The returned objects must contain + * at least id property. See other modules as example. + * + * @param int $kalvidres ID of an instance of this module + * @return boolean|array false if no participants, array of objects otherwise + */ +function kalvidres_get_participants($kalvidresid) { + // TODO: finish this function + return false; +} + +/** + * @param string $feature FEATURE_xx constant for requested feature + * @return mixed True if module supports feature, null if doesn't know + */ +function kalvidres_supports($feature) { + switch($feature) { + case FEATURE_MOD_ARCHETYPE: + return MOD_ARCHETYPE_RESOURCE; + break; + case FEATURE_GROUPS: + return true; + break; + case FEATURE_GROUPINGS: + return true; + break; + case FEATURE_GROUPMEMBERSONLY: + return true; + break; + case FEATURE_MOD_INTRO: + return true; + break; + case FEATURE_COMPLETION_TRACKS_VIEWS: + return false; + break; + case FEATURE_GRADE_HAS_GRADE: + return false; + break; + case FEATURE_GRADE_OUTCOMES: + return false; + break; + case FEATURE_BACKUP_MOODLE2: + return true; + break; + default: + return null; + break; + } +} diff --git a/mod/kalvidres/lti_launch.php b/mod/kalvidres/lti_launch.php new file mode 100644 index 0000000000000..7655931c53d36 --- /dev/null +++ b/mod/kalvidres/lti_launch.php @@ -0,0 +1,73 @@ +. + +/** + * Kaltura video resource LTI launch page. + * + * @package mod_kalvidres + * @author Remote-Learner.net Inc + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + * @copyright (C) 2014 Remote Learner.net Inc http://www.remote-learner.net + */ + +require_once(dirname(dirname(dirname(__FILE__))).'/config.php'); +require_once(dirname(dirname(dirname(__FILE__))).'/local/kaltura/locallib.php'); + +global $USER; + +require_login(); + +$courseid = required_param('courseid', PARAM_INT); +$height = required_param('height', PARAM_INT); +$width = required_param('width', PARAM_INT); +$withblocks = optional_param('withblocks', 0, PARAM_INT); +$source = optional_param('source', '', PARAM_URL); + +$context = context_course::instance($courseid); + +// If the user isn't a teacher or they are not enrolled in the course context then return with an error. +if (!has_capability('mod/kalvidres:addinstance', $context) && is_guest($context)) { + echo get_string('nocapabilitytousethisservice', 'error'); + die(); +} + +$course = get_course($courseid); + +$launch = array(); +$launch['id'] = 1; +$launch['cmid'] = 0; +$launch['title'] = 'Kaltura video resource'; +$launch['module'] = KAF_BROWSE_EMBED_MODULE; +$launch['course'] = $course; +$launch['width'] = $width; +$launch['height'] = $height; +$launch['custom_publishdata'] = ''; + +$source = local_kaltura_add_kaf_uri_token($source); + +if (false === local_kaltura_url_contains_configured_hostname($source) && !empty($source)) { + echo get_string('invalid_source_parameter', 'mod_kalvidres'); + die; +} else { + $launch['source'] = urldecode($source); +} + +if (local_kaltura_validate_browseembed_required_params($launch)) { + $content = local_kaltura_request_lti_launch($launch, $withblocks); + echo $content; +} else { + echo get_string('invalid_launch_parameters', 'mod_kalvidres'); +} diff --git a/mod/kalvidres/mod_form.php b/mod/kalvidres/mod_form.php new file mode 100644 index 0000000000000..c82a6e01b73bc --- /dev/null +++ b/mod/kalvidres/mod_form.php @@ -0,0 +1,251 @@ +. + +/** + * Kaltura video resource formslib class. + * + * @package mod_kalvidres + * @author Remote-Learner.net Inc + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + * @copyright (C) 2014 Remote Learner.net Inc http://www.remote-learner.net + */ + +if (!defined('MOODLE_INTERNAL')) { + die('Direct access to this script is forbidden.'); +} + +require_once(dirname(dirname(dirname(__FILE__))).'/course/moodleform_mod.php'); +require_once(dirname(dirname(dirname(__FILE__))).'/local/kaltura/locallib.php'); + +class mod_kalvidres_mod_form extends moodleform_mod { + /** @var string Part of the id for the add video button. */ + protected $addvideobutton = 'add_video'; + + /** + * Forms lib definition function + */ + public function definition() { + global $CFG, $COURSE, $PAGE; + + $PAGE->requires->css('/mod/kalvidres/styles.css'); + $pageclass = 'kaltura-kalvidres-body'; + $PAGE->add_body_class($pageclass); + + $params = array( + 'withblocks' => 0, + 'courseid' => $COURSE->id, + 'width' => KALTURA_PANEL_WIDTH, + 'height' => KALTURA_PANEL_HEIGHT + ); + + $url = new moodle_url('/mod/kalvidres/lti_launch.php', $params); + + $params = array( + 'addvidbtnid' => 'id_'.$this->addvideobutton, + 'ltilaunchurl' => $url->out(), + 'height' => KALTURA_PANEL_HEIGHT, + 'width' => KALTURA_PANEL_WIDTH, + 'modulename' => 'kalvidres' + ); + + $PAGE->requires->yui_module('moodle-local_kaltura-ltipanel', 'M.local_kaltura.init', array($params), null, true); + // Make replace media language string available to the YUI modules + $PAGE->requires->string_for_js('replace_video', 'kalvidres'); + + // Require a YUI module to make the object tag be as large as possible. + $params = array( + 'bodyclass' => $pageclass, + 'lastheight' => null, + 'padding' => 15 + ); + $PAGE->requires->yui_module('moodle-local_kaltura-lticontainer', 'M.local_kaltura.init', array($params), null, true); + + $mform =& $this->_form; + + // This line is needed to avoid a PHP warning when the form is submitted. + // Because this value is set as the default for one of the formslib elements. + $uiconf_id = ''; + + /* Hidden fields */ + $attr = array('id' => 'entry_id'); + $mform->addElement('hidden', 'entry_id', '', $attr); + $mform->setType('entry_id', PARAM_NOTAGS); + + $attr = array('id' => 'source'); + $mform->addElement('hidden', 'source', '', $attr); + $mform->setType('source', PARAM_URL); + + $attr = array('id' => 'video_title'); + $mform->addElement('hidden', 'video_title', 'x', $attr); + $mform->setType('video_title', PARAM_TEXT); + + $attr = array('id' => 'uiconf_id'); + $mform->addElement('hidden', 'uiconf_id', '', $attr); + $mform->setDefault('uiconf_id', $uiconf_id); + $mform->setType('uiconf_id', PARAM_INT); + + $attr = array('id' => 'widescreen'); + $mform->addElement('hidden', 'widescreen', 'x', $attr); + $mform->setDefault('widescreen', 0); + $mform->setType('widescreen', PARAM_INT); + + $attr = array('id' => 'height'); + $mform->addElement('hidden', 'height', '', $attr); + $mform->setDefault('height', '365'); + $mform->setType('height', PARAM_TEXT); + + $attr = array('id' => 'width'); + $mform->addElement('hidden', 'width', '', $attr); + $mform->setDefault('width', '400'); + $mform->setType('width', PARAM_TEXT); + + $attr = array('id' => 'metadata'); + $mform->addElement('hidden', 'metadata', '', $attr); + $mform->setType('metadata', PARAM_TEXT); + + $mform->addElement('header', 'general', get_string('general', 'form')); + + $mform->addElement('text', 'name', get_string('name', 'kalvidres'), array('size' => '64')); + + if (!empty($CFG->formatstringstriptags)) { + $mform->setType('name', PARAM_TEXT); + } else { + $mform->setType('name', PARAM_CLEANHTML); + } + + $mform->addRule('name', null, 'required', null, 'client'); + + $this->add_intro_editor(false); + + $mform->addElement('header', 'video', get_string('video_hdr', 'kalvidres')); + $this->add_video_definition($mform); + + $this->standard_coursemodule_elements(); + + $this->add_action_buttons(); + + $mform->addElement('html', html_writer::empty_tag('input', array('type' => 'hidden', 'id' => 'closeltipanel', 'value' => 0))); + } + + /** + * This function adds the video thumbnail element and buttons to the form. + * @param MoodleQuickForm $mform An instance of MoodleQuickForm used to add elements to the form. + */ + private function add_video_definition($mform) { + $addinstance = empty($this->current->entry_id) ? true : false; + + $thumbnail = $this->get_thumbnail_markup(!$addinstance); + + $videopreview = $this->get_iframe_video_preview_markup($addinstance); + + $mform->addElement('static', 'add_video_thumb', ' ', $thumbnail); + $mform->addElement('static', 'add_video_preview', ' ', $videopreview); + + $videogroup = array(); + if ($addinstance) { + $videogroup[] =& $mform->createElement('button', $this->addvideobutton, get_string('add_video', 'kalvidres')); + } else { + $videogroup[] =& $mform->createElement('button', $this->addvideobutton, get_string('replace_video', 'kalvidres')); + } + + $mform->addGroup($videogroup, 'video_group', ' ', ' ', false); + } + + /** + * This functions returns the markup to display a thumbnail image. + * @param bool $hide Set to true to hide it, otherwise false. When set to hide the thumbnail markup is still rendered + * but the display style is set to none. The reason for this is that the YUI module uses the img tag to place the iframe just below it. + * As well as to hide the image tag when a new video is selected. + * @return string Returns an image element markup. + */ + private function get_thumbnail_markup($hide = false) { + $source = new moodle_url('/local/kaltura/pix/vidThumb.png'); + $alt = get_string('add_video', 'kalvidres'); + $title = get_string('add_video', 'kalvidres'); + + $attr = array( + 'id' => 'video_thumbnail', + 'src' => $source->out(), + 'alt' => $alt, + 'title' => $title + ); + + if ($hide) { + $attr['style'] = 'display:none'; + } + + $output = html_writer::empty_tag('img', $attr); + + return $output; + } + + /** + * This functions returns iframe markup for displaying the video preview interface. + * @param bool $hide True to hide the element, otherwise false. + * @return string Returns an iframe markup + */ + private function get_iframe_video_preview_markup($hide = true) { + $width = empty($this->current->width) ? '0px' : $this->current->width.'px'; + $height = empty($this->current->height) ? 'opx' : $this->current->height.'px'; + $source = empty($this->current->source) ? '' : $this->current->source; + + $params = array( + 'id' => 'contentframe', + 'src' => $source, + 'height' => $height, + 'width' => $width, + 'allowfullscreen' => 'true', + 'webkitallowfullscreen' => 'true', + 'mozallowfullscreen' => 'true' + ); + + if ($hide) { + $params['style'] = 'display:none'; + } + + // If the source attribute is not empty, initiate an LTI launch to avoid having ACL issues when another user with permissions edits the module. + // This also assists with full screen functionality on some mobile devices. + if (!empty($source)) { + $ltiparams = array( + 'courseid' => $this->current->course, + 'height' => $height, + 'width' => $width, + 'withblocks' => 0, + 'source' => $source + ); + + $url = new moodle_url('/mod/kalvidres/lti_launch.php', $ltiparams); + $params['src'] = $url->out(false); + } + + return html_writer::tag('iframe', '', $params); + } + + /** + * This function validates the form on save. + * + * @param array $data Array of form values + * @param array $files Array of files + * @return array $errors Array of error messages + */ + public function validation($data, $files) { + $errors = array(); + + if (empty($data['source'])) { + $errors['add_video_thumb'] = get_string('novidsource', 'kalvidres'); + } + + return $errors; + } +} diff --git a/mod/kalvidres/pix/icon.gif b/mod/kalvidres/pix/icon.gif new file mode 100644 index 0000000000000000000000000000000000000000..550df5db8c43d778c40a1290f1d3a724d0e88133 GIT binary patch literal 128 zcmZ?wbhEHb6krfwSoEKPf#I&Pahh>jn(@rE0|yTL|Np+Z^fq{iV2gnAh z6kuRrcJ. + +/** + * Kaltura video resource renderer file. + * + * @package mod_kalvidres + * @author Remote-Learner.net Inc + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + * @copyright (C) 2014 Remote Learner.net Inc http://www.remote-learner.net + */ + +if (!defined('MOODLE_INTERNAL')) { + die('Direct access to this script is forbidden.'); +} + +require_once(dirname(dirname(dirname(__FILE__))).'/local/kaltura/locallib.php'); + +class mod_kalvidres_renderer extends plugin_renderer_base { + /** + * This function displays the title of the video in bold. + * @param string $title The title of the video. + * @return string HTML markup. + */ + public function display_mod_info($title) { + $output = ''; + + $attr = array('for' => 'video_name'); + $output .= html_writer::start_tag('b'); + $output .= html_writer::tag('div', $title); + $output .= html_writer::end_tag('b'); + $output .= html_writer::empty_tag('br'); + + return $output; + } + + /** + * This function displays the iframe markup. + * @param object $kalvidres A Kaltura video resrouce instance object. + * @param int $courseid A course id. + * @return string HTML markup. + */ + public function display_iframe($kalvidres, $courseid) { + $params = array( + 'courseid' => $courseid, + 'height' => $kalvidres->height, + 'width' => $kalvidres->width, + 'withblocks' => 0, + 'source' => $kalvidres->source + ); + $url = new moodle_url('/mod/kalvidres/lti_launch.php', $params); + + $attr = array( + 'id' => 'contentframe', + 'height' => '100%', + 'width' => $kalvidres->width, + 'src' => $url->out(false), + 'allowfullscreen' => 'true', + 'webkitallowfullscreen' => 'true', + 'mozallowfullscreen' => 'true' + ); + + $output = html_writer::tag('iframe', '', $attr); + $output = html_writer::tag('center', $output); + return $output; + } +} \ No newline at end of file diff --git a/mod/kalvidres/styles.css b/mod/kalvidres/styles.css new file mode 100644 index 0000000000000..129e37c40e949 --- /dev/null +++ b/mod/kalvidres/styles.css @@ -0,0 +1,34 @@ +#id_add_video { + float: left; +} + +#id_video_properties, #id_video_preview { + float: left; + margin-left: 5px; +} + +#slider_border { + width: 100%; + height: 18px; + border: 1px solid #000000; + overflow: hidden; +} + +#progress_bar { + float: left; + height: 18px; + width: 0%; + /*border-right: 1px solid #000000;*/ + background: #00FF00; +} + +#loading_text { + position: relative; + top: -18px; + font-weight: bold; + left: 12px; +} + +#id_video #video_thumbnail { + float: left; +} diff --git a/mod/kalvidres/version.php b/mod/kalvidres/version.php new file mode 100644 index 0000000000000..b48480e430679 --- /dev/null +++ b/mod/kalvidres/version.php @@ -0,0 +1,36 @@ +. + +/** + * Kaltura video resource version file. + * + * @package mod_kalvidres + * @author Remote-Learner.net Inc + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + * @copyright (C) 2014 Remote Learner.net Inc http://www.remote-learner.net + */ + +if (!defined('MOODLE_INTERNAL')) { + die('Direct access to this script is forbidden.'); +} + +$module->version = 2014013001; +$module->component = 'mod_kalvidres'; +$module->release = 'Kaltura release 4.0.00 (RL: TBD)'; +$module->requires = 2013051400; +$module->cron = 0; +$module->maturity = MATURITY_STABLE; +$module->dependencies = array( + 'local_kaltura' => 2014013000.01 +); diff --git a/mod/kalvidres/view.php b/mod/kalvidres/view.php new file mode 100644 index 0000000000000..bb09dfb86b244 --- /dev/null +++ b/mod/kalvidres/view.php @@ -0,0 +1,86 @@ +. + +/** + * Kaltura video resource view page. + * + * @package mod_kalvidres + * @author Remote-Learner.net Inc + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + * @copyright (C) 2014 Remote Learner.net Inc http://www.remote-learner.net + */ + +require_once(dirname(dirname(dirname(__FILE__))).'/config.php'); + +$id = optional_param('id', 0, PARAM_INT); + +// Retrieve module instance. +if (empty($id)) { + print_error('invalidid', 'kalvidres'); +} + +if (!empty($id)) { + + if (!$cm = get_coursemodule_from_id('kalvidres', $id)) { + print_error('invalidcoursemodule'); + } + + if (!$course = $DB->get_record('course', array('id' => $cm->course))) { + print_error('coursemisconf'); + } + + if (!$kalvidres = $DB->get_record('kalvidres', array("id" => $cm->instance))) { + print_error('invalidid', 'kalvidres'); + } +} + +require_course_login($course->id, true, $cm); + +global $SESSION, $CFG; + +$PAGE->set_url('/mod/kalvidres/view.php', array('id' => $id)); +$PAGE->set_title(format_string($kalvidres->name)); +$PAGE->set_heading($course->fullname); +$pageclass = 'kaltura-kalvidres-body'; +$PAGE->add_body_class($pageclass); + +$context = $PAGE->context; + +add_to_log($course->id, 'kalvidres', 'view video resource', 'view.php?id='.$cm->id, $kalvidres->id, $cm->id); + +$completion = new completion_info($course); +$completion->set_module_viewed($cm); + +echo $OUTPUT->header(); + +$description = format_module_intro('kalvidres', $kalvidres, $cm->id); +if (!empty($description)) { + echo $OUTPUT->box_start('generalbox'); + echo $description; + echo $OUTPUT->box_end(); +} + +$renderer = $PAGE->get_renderer('mod_kalvidres'); + +// Require a YUI module to make the object tag be as large as possible. +$params = array( + 'bodyclass' => $pageclass, + 'lastheight' => null, + 'padding' => 15 +); +$PAGE->requires->yui_module('moodle-local_kaltura-lticontainer', 'M.local_kaltura.init', array($params), null, true); + +echo $renderer->display_iframe($kalvidres, $course->id); + +echo $OUTPUT->footer(); From f79f0536ffa0367915c31816150ab39005649f53 Mon Sep 17 00:00:00 2001 From: Gonen Radai Date: Mon, 6 Oct 2014 15:10:19 +0300 Subject: [PATCH 002/326] filter --- .../lang/en/tinymce_kalturamedia.php | 28 - .../tinymce/plugins/kalturamedia/lib.php | 64 - .../plugins/kalturamedia/lti_launch.php | 77 - .../tinymce/plugins/kalturamedia/pix/icon.png | Bin 1912 -> 0 bytes .../kalturamedia/tinymce/editor_plugin.js | 75 - .../plugins/kalturamedia/tinymce/img/icon.gif | Bin 575 -> 0 bytes .../kalturamedia/tinymce/js/ltipopuplib.js | 53 - .../kalturamedia/tinymce/ltibrowse.php | 69 - .../plugins/kalturamedia/tinymce/renderer.php | 84 - .../kalturamedia/tinymce_kalturamedia.php | 28 - .../tinymce/plugins/kalturamedia/version.php | 33 - local/kaltura/API/KalturaClient.php | 8347 -------- local/kaltura/API/KalturaClientBase.php | 1228 -- local/kaltura/API/KalturaEnums.php | 3213 --- ...nersWatermarkAccessControlClientPlugin.php | 84 - .../KalturaAdCuePointClientPlugin.php | 253 - .../KalturaAnnotationClientPlugin.php | 450 - .../KalturaAsperaClientPlugin.php | 113 - .../KalturaAttachmentClientPlugin.php | 435 - .../KalturaAuditClientPlugin.php | 893 - .../KalturaBulkUploadClientPlugin.php | 187 - .../KalturaBulkUploadCsvClientPlugin.php | 113 - .../KalturaBulkUploadFilterClientPlugin.php | 101 - .../KalturaBulkUploadXmlClientPlugin.php | 85 - .../KalturaCaptionClientPlugin.php | 771 - .../KalturaCaptionSearchClientPlugin.php | 325 - .../KalturaCodeCuePointClientPlugin.php | 237 - ...KalturaContentDistributionClientPlugin.php | 3454 ---- .../KalturaCuePointClientPlugin.php | 640 - .../KalturaDocumentClientPlugin.php | 944 - .../KalturaPlugins/KalturaDrmClientPlugin.php | 434 - .../KalturaDropFolderClientPlugin.php | 1777 -- ...uraDropFolderXmlBulkUploadClientPlugin.php | 86 - .../KalturaEmailNotificationClientPlugin.php | 630 - .../KalturaEventNotificationClientPlugin.php | 790 - .../KalturaExternalMediaClientPlugin.php | 363 - .../KalturaFileSyncClientPlugin.php | 338 - .../KalturaHttpNotificationClientPlugin.php | 624 - .../KalturaKontikiClientPlugin.php | 177 - .../KalturaLikeClientPlugin.php | 153 - .../KalturaMetadataClientPlugin.php | 1566 -- .../KalturaMultiCentersClientPlugin.php | 119 - .../KalturaShortLinkClientPlugin.php | 476 - .../KalturaTagSearchClientPlugin.php | 320 - .../KalturaVarConsoleClientPlugin.php | 398 - .../KalturaVelocixClientPlugin.php | 105 - .../KalturaVirusScanClientPlugin.php | 545 - .../KalturaWebexDropFolderClientPlugin.php | 292 - .../KalturaWidevineClientPlugin.php | 396 - local/kaltura/API/KalturaTypes.php | 16367 ---------------- local/kaltura/API/TestCode/DemoVideo.flv | Bin 512919 -> 0 bytes .../API/TestCode/KalturaTestConfiguration.php | 36 - local/kaltura/API/TestCode/TestMain.php | 137 - local/kaltura/API/agpl.txt | 674 - local/kaltura/db/access.php | 39 - local/kaltura/db/install.php | 595 - local/kaltura/db/install.xml | 25 - local/kaltura/db/upgrade.php | 67 - local/kaltura/download_log.php | 103 - local/kaltura/download_log_form.php | 46 - local/kaltura/lang/en/local_kaltura.php | 64 - local/kaltura/lib.php | 24 - local/kaltura/locallib.php | 715 - local/kaltura/migration.php | 114 - local/kaltura/migration_form.php | 77 - local/kaltura/migrationlib.php | 1067 - local/kaltura/pix/icon.png | Bin 1912 -> 0 bytes local/kaltura/pix/kavatar.png | Bin 2998 -> 0 bytes local/kaltura/pix/vidThumb.png | Bin 2404 -> 0 bytes local/kaltura/renderer.php | 118 - local/kaltura/service.php | 101 - local/kaltura/settings.php | 95 - local/kaltura/styles.css | 10 - local/kaltura/tests/locallib_test.php | 1293 -- local/kaltura/tests/migrationlib_test.php | 194 - local/kaltura/version.php | 32 - ...moodle-local_kaltura-lticontainer-debug.js | 167 - .../moodle-local_kaltura-lticontainer-min.js | 1 - .../moodle-local_kaltura-lticontainer.js | 167 - .../moodle-local_kaltura-ltipanel-debug.js | 471 - .../moodle-local_kaltura-ltipanel-min.js | 1 - .../moodle-local_kaltura-ltipanel.js | 471 - .../moodle-local_kaltura-ltiservice-debug.js | 119 - .../moodle-local_kaltura-ltiservice-min.js | 1 - .../moodle-local_kaltura-ltiservice.js | 119 - ...dle-local_kaltura-ltitinymcepanel-debug.js | 141 - ...oodle-local_kaltura-ltitinymcepanel-min.js | 1 - .../moodle-local_kaltura-ltitinymcepanel.js | 141 - .../moodle-local_kaltura-ltiservice-debug.js | 58 - .../moodle-local_kaltura-ltiservice-min.js | 1 - .../moodle-local_kaltura-ltiservice.js | 58 - local/kaltura/yui/src/lticontainer/build.json | 10 - .../yui/src/lticontainer/js/lticontainer.js | 162 - .../src/lticontainer/meta/lticontainer.json | 8 - local/kaltura/yui/src/ltipanel/build.json | 10 - local/kaltura/yui/src/ltipanel/js/ltipanel.js | 467 - .../yui/src/ltipanel/meta/ltipanel.json | 10 - local/kaltura/yui/src/ltiservice/build.json | 10 - .../yui/src/ltiservice/js/ltiservice.js | 115 - .../yui/src/ltiservice/meta/ltiservice.json | 9 - .../yui/src/ltitinymcepanel/build.json | 10 - .../src/ltitinymcepanel/js/ltitinymcepanel.js | 136 - .../ltitinymcepanel/meta/ltitinymcepanel.json | 10 - local/kalturamediagallery/db/access.php | 37 - local/kalturamediagallery/index.php | 78 - .../lang/en/local_kalturamediagallery.php | 31 - local/kalturamediagallery/lib.php | 72 - local/kalturamediagallery/lti_launch.php | 53 - local/kalturamediagallery/version.php | 36 - local/mymedia/db/access.php | 34 - local/mymedia/lang/en/local_mymedia.php | 30 - local/mymedia/lib.php | 56 - local/mymedia/lti_launch.php | 51 - local/mymedia/mymedia.php | 71 - local/mymedia/version.php | 35 - ...ackup_kalvidassign_activity_task.class.php | 67 - .../backup_kalvidassign_settingslib.php | 26 - .../moodle2/backup_kalvidassign_stepslib.php | 99 - ...store_kalvidassign_activity_task.class.php | 109 - .../moodle2/restore_kalvidassign_stepslib.php | 82 - mod/kalvidassign/db/access.php | 55 - mod/kalvidassign/db/install.xml | 60 - mod/kalvidassign/db/log.php | 32 - mod/kalvidassign/db/messages.php | 26 - mod/kalvidassign/db/upgrade.php | 89 - mod/kalvidassign/grade_preferences_form.php | 124 - mod/kalvidassign/grade_submissions.php | 208 - mod/kalvidassign/index.php | 48 - mod/kalvidassign/lang/en/kalvidassign.php | 115 - mod/kalvidassign/lib.php | 395 - mod/kalvidassign/locallib.php | 356 - mod/kalvidassign/lti_launch.php | 67 - mod/kalvidassign/mod_form.php | 78 - mod/kalvidassign/pix/icon.gif | Bin 128 -> 0 bytes mod/kalvidassign/renderable.php | 69 - mod/kalvidassign/renderer.php | 1124 -- mod/kalvidassign/single_submission.php | 222 - mod/kalvidassign/single_submission_form.php | 209 - mod/kalvidassign/styles.css | 53 - mod/kalvidassign/submission.php | 147 - mod/kalvidassign/version.php | 36 - mod/kalvidassign/view.php | 138 - .../backup_kalvidpres_activity_task.class.php | 67 - .../moodle2/backup_kalvidpres_settingslib.php | 26 - .../moodle2/backup_kalvidpres_stepslib.php | 47 - .../backup_kalvidres_activity_task.class.php | 66 - .../moodle2/backup_kalvidres_settingslib.php | 26 - .../moodle2/backup_kalvidres_stepslib.php | 46 - ...restore_kalvidpres_activity_task.class.php | 107 - .../moodle2/restore_kalvidpres_stepslib.php | 62 - .../restore_kalvidres_activity_task.class.php | 107 - .../moodle2/restore_kalvidres_stepslib.php | 62 - mod/kalvidpres/db/access.php | 36 - mod/kalvidpres/db/install.xml | 36 - mod/kalvidpres/db/log.php | 31 - mod/kalvidpres/db/upgrade.php | 96 - mod/kalvidpres/lang/en/kalvidpres.php | 36 - mod/kalvidpres/lang/en/kalvidres.php | 36 - mod/kalvidpres/lib.php | 199 - mod/kalvidpres/lti_launch.php | 74 - mod/kalvidpres/mod_form.php | 261 - mod/kalvidpres/pix/icon.gif | Bin 128 -> 0 bytes mod/kalvidpres/renderer.php | 61 - mod/kalvidpres/styles.css | 38 - mod/kalvidpres/version.php | 36 - mod/kalvidpres/view.php | 89 - .../backup_kalvidres_activity_task.class.php | 66 - .../moodle2/backup_kalvidres_settingslib.php | 26 - .../moodle2/backup_kalvidres_stepslib.php | 46 - .../restore_kalvidres_activity_task.class.php | 107 - .../moodle2/restore_kalvidres_stepslib.php | 62 - mod/kalvidres/db/access.php | 35 - mod/kalvidres/db/install.xml | 30 - mod/kalvidres/db/log.php | 28 - mod/kalvidres/db/upgrade.php | 71 - mod/kalvidres/lang/en/kalvidres.php | 36 - mod/kalvidres/lib.php | 199 - mod/kalvidres/lti_launch.php | 73 - mod/kalvidres/mod_form.php | 251 - mod/kalvidres/pix/icon.gif | Bin 128 -> 0 bytes mod/kalvidres/renderer.php | 78 - mod/kalvidres/styles.css | 34 - mod/kalvidres/version.php | 36 - mod/kalvidres/view.php | 86 - 184 files changed, 64367 deletions(-) delete mode 100644 lib/editor/tinymce/plugins/kalturamedia/lang/en/tinymce_kalturamedia.php delete mode 100644 lib/editor/tinymce/plugins/kalturamedia/lib.php delete mode 100644 lib/editor/tinymce/plugins/kalturamedia/lti_launch.php delete mode 100644 lib/editor/tinymce/plugins/kalturamedia/pix/icon.png delete mode 100644 lib/editor/tinymce/plugins/kalturamedia/tinymce/editor_plugin.js delete mode 100644 lib/editor/tinymce/plugins/kalturamedia/tinymce/img/icon.gif delete mode 100644 lib/editor/tinymce/plugins/kalturamedia/tinymce/js/ltipopuplib.js delete mode 100644 lib/editor/tinymce/plugins/kalturamedia/tinymce/ltibrowse.php delete mode 100644 lib/editor/tinymce/plugins/kalturamedia/tinymce/renderer.php delete mode 100644 lib/editor/tinymce/plugins/kalturamedia/tinymce_kalturamedia.php delete mode 100644 lib/editor/tinymce/plugins/kalturamedia/version.php delete mode 100644 local/kaltura/API/KalturaClient.php delete mode 100644 local/kaltura/API/KalturaClientBase.php delete mode 100644 local/kaltura/API/KalturaEnums.php delete mode 100644 local/kaltura/API/KalturaPlugins/KalturaAbcScreenersWatermarkAccessControlClientPlugin.php delete mode 100644 local/kaltura/API/KalturaPlugins/KalturaAdCuePointClientPlugin.php delete mode 100644 local/kaltura/API/KalturaPlugins/KalturaAnnotationClientPlugin.php delete mode 100644 local/kaltura/API/KalturaPlugins/KalturaAsperaClientPlugin.php delete mode 100644 local/kaltura/API/KalturaPlugins/KalturaAttachmentClientPlugin.php delete mode 100644 local/kaltura/API/KalturaPlugins/KalturaAuditClientPlugin.php delete mode 100644 local/kaltura/API/KalturaPlugins/KalturaBulkUploadClientPlugin.php delete mode 100644 local/kaltura/API/KalturaPlugins/KalturaBulkUploadCsvClientPlugin.php delete mode 100644 local/kaltura/API/KalturaPlugins/KalturaBulkUploadFilterClientPlugin.php delete mode 100644 local/kaltura/API/KalturaPlugins/KalturaBulkUploadXmlClientPlugin.php delete mode 100644 local/kaltura/API/KalturaPlugins/KalturaCaptionClientPlugin.php delete mode 100644 local/kaltura/API/KalturaPlugins/KalturaCaptionSearchClientPlugin.php delete mode 100644 local/kaltura/API/KalturaPlugins/KalturaCodeCuePointClientPlugin.php delete mode 100644 local/kaltura/API/KalturaPlugins/KalturaContentDistributionClientPlugin.php delete mode 100644 local/kaltura/API/KalturaPlugins/KalturaCuePointClientPlugin.php delete mode 100644 local/kaltura/API/KalturaPlugins/KalturaDocumentClientPlugin.php delete mode 100644 local/kaltura/API/KalturaPlugins/KalturaDrmClientPlugin.php delete mode 100644 local/kaltura/API/KalturaPlugins/KalturaDropFolderClientPlugin.php delete mode 100644 local/kaltura/API/KalturaPlugins/KalturaDropFolderXmlBulkUploadClientPlugin.php delete mode 100644 local/kaltura/API/KalturaPlugins/KalturaEmailNotificationClientPlugin.php delete mode 100644 local/kaltura/API/KalturaPlugins/KalturaEventNotificationClientPlugin.php delete mode 100644 local/kaltura/API/KalturaPlugins/KalturaExternalMediaClientPlugin.php delete mode 100644 local/kaltura/API/KalturaPlugins/KalturaFileSyncClientPlugin.php delete mode 100644 local/kaltura/API/KalturaPlugins/KalturaHttpNotificationClientPlugin.php delete mode 100644 local/kaltura/API/KalturaPlugins/KalturaKontikiClientPlugin.php delete mode 100644 local/kaltura/API/KalturaPlugins/KalturaLikeClientPlugin.php delete mode 100644 local/kaltura/API/KalturaPlugins/KalturaMetadataClientPlugin.php delete mode 100644 local/kaltura/API/KalturaPlugins/KalturaMultiCentersClientPlugin.php delete mode 100644 local/kaltura/API/KalturaPlugins/KalturaShortLinkClientPlugin.php delete mode 100644 local/kaltura/API/KalturaPlugins/KalturaTagSearchClientPlugin.php delete mode 100644 local/kaltura/API/KalturaPlugins/KalturaVarConsoleClientPlugin.php delete mode 100644 local/kaltura/API/KalturaPlugins/KalturaVelocixClientPlugin.php delete mode 100644 local/kaltura/API/KalturaPlugins/KalturaVirusScanClientPlugin.php delete mode 100644 local/kaltura/API/KalturaPlugins/KalturaWebexDropFolderClientPlugin.php delete mode 100644 local/kaltura/API/KalturaPlugins/KalturaWidevineClientPlugin.php delete mode 100644 local/kaltura/API/KalturaTypes.php delete mode 100644 local/kaltura/API/TestCode/DemoVideo.flv delete mode 100644 local/kaltura/API/TestCode/KalturaTestConfiguration.php delete mode 100644 local/kaltura/API/TestCode/TestMain.php delete mode 100644 local/kaltura/API/agpl.txt delete mode 100644 local/kaltura/db/access.php delete mode 100644 local/kaltura/db/install.php delete mode 100755 local/kaltura/db/install.xml delete mode 100644 local/kaltura/db/upgrade.php delete mode 100644 local/kaltura/download_log.php delete mode 100644 local/kaltura/download_log_form.php delete mode 100644 local/kaltura/lang/en/local_kaltura.php delete mode 100644 local/kaltura/lib.php delete mode 100644 local/kaltura/locallib.php delete mode 100644 local/kaltura/migration.php delete mode 100644 local/kaltura/migration_form.php delete mode 100644 local/kaltura/migrationlib.php delete mode 100644 local/kaltura/pix/icon.png delete mode 100644 local/kaltura/pix/kavatar.png delete mode 100644 local/kaltura/pix/vidThumb.png delete mode 100644 local/kaltura/renderer.php delete mode 100644 local/kaltura/service.php delete mode 100644 local/kaltura/settings.php delete mode 100644 local/kaltura/styles.css delete mode 100644 local/kaltura/tests/locallib_test.php delete mode 100644 local/kaltura/tests/migrationlib_test.php delete mode 100644 local/kaltura/version.php delete mode 100644 local/kaltura/yui/build/moodle-local_kaltura-lticontainer/moodle-local_kaltura-lticontainer-debug.js delete mode 100644 local/kaltura/yui/build/moodle-local_kaltura-lticontainer/moodle-local_kaltura-lticontainer-min.js delete mode 100644 local/kaltura/yui/build/moodle-local_kaltura-lticontainer/moodle-local_kaltura-lticontainer.js delete mode 100644 local/kaltura/yui/build/moodle-local_kaltura-ltipanel/moodle-local_kaltura-ltipanel-debug.js delete mode 100644 local/kaltura/yui/build/moodle-local_kaltura-ltipanel/moodle-local_kaltura-ltipanel-min.js delete mode 100644 local/kaltura/yui/build/moodle-local_kaltura-ltipanel/moodle-local_kaltura-ltipanel.js delete mode 100644 local/kaltura/yui/build/moodle-local_kaltura-ltiservice/moodle-local_kaltura-ltiservice-debug.js delete mode 100644 local/kaltura/yui/build/moodle-local_kaltura-ltiservice/moodle-local_kaltura-ltiservice-min.js delete mode 100644 local/kaltura/yui/build/moodle-local_kaltura-ltiservice/moodle-local_kaltura-ltiservice.js delete mode 100644 local/kaltura/yui/build/moodle-local_kaltura-ltitinymcepanel/moodle-local_kaltura-ltitinymcepanel-debug.js delete mode 100644 local/kaltura/yui/build/moodle-local_kaltura-ltitinymcepanel/moodle-local_kaltura-ltitinymcepanel-min.js delete mode 100644 local/kaltura/yui/build/moodle-local_kaltura-ltitinymcepanel/moodle-local_kaltura-ltitinymcepanel.js delete mode 100644 local/kaltura/yui/src/build/moodle-local_kaltura-ltiservice/moodle-local_kaltura-ltiservice-debug.js delete mode 100644 local/kaltura/yui/src/build/moodle-local_kaltura-ltiservice/moodle-local_kaltura-ltiservice-min.js delete mode 100644 local/kaltura/yui/src/build/moodle-local_kaltura-ltiservice/moodle-local_kaltura-ltiservice.js delete mode 100644 local/kaltura/yui/src/lticontainer/build.json delete mode 100644 local/kaltura/yui/src/lticontainer/js/lticontainer.js delete mode 100644 local/kaltura/yui/src/lticontainer/meta/lticontainer.json delete mode 100644 local/kaltura/yui/src/ltipanel/build.json delete mode 100644 local/kaltura/yui/src/ltipanel/js/ltipanel.js delete mode 100644 local/kaltura/yui/src/ltipanel/meta/ltipanel.json delete mode 100644 local/kaltura/yui/src/ltiservice/build.json delete mode 100644 local/kaltura/yui/src/ltiservice/js/ltiservice.js delete mode 100644 local/kaltura/yui/src/ltiservice/meta/ltiservice.json delete mode 100644 local/kaltura/yui/src/ltitinymcepanel/build.json delete mode 100644 local/kaltura/yui/src/ltitinymcepanel/js/ltitinymcepanel.js delete mode 100644 local/kaltura/yui/src/ltitinymcepanel/meta/ltitinymcepanel.json delete mode 100644 local/kalturamediagallery/db/access.php delete mode 100644 local/kalturamediagallery/index.php delete mode 100644 local/kalturamediagallery/lang/en/local_kalturamediagallery.php delete mode 100644 local/kalturamediagallery/lib.php delete mode 100644 local/kalturamediagallery/lti_launch.php delete mode 100644 local/kalturamediagallery/version.php delete mode 100644 local/mymedia/db/access.php delete mode 100644 local/mymedia/lang/en/local_mymedia.php delete mode 100644 local/mymedia/lib.php delete mode 100644 local/mymedia/lti_launch.php delete mode 100644 local/mymedia/mymedia.php delete mode 100644 local/mymedia/version.php delete mode 100644 mod/kalvidassign/backup/moodle2/backup_kalvidassign_activity_task.class.php delete mode 100644 mod/kalvidassign/backup/moodle2/backup_kalvidassign_settingslib.php delete mode 100644 mod/kalvidassign/backup/moodle2/backup_kalvidassign_stepslib.php delete mode 100644 mod/kalvidassign/backup/moodle2/restore_kalvidassign_activity_task.class.php delete mode 100644 mod/kalvidassign/backup/moodle2/restore_kalvidassign_stepslib.php delete mode 100644 mod/kalvidassign/db/access.php delete mode 100755 mod/kalvidassign/db/install.xml delete mode 100644 mod/kalvidassign/db/log.php delete mode 100644 mod/kalvidassign/db/messages.php delete mode 100644 mod/kalvidassign/db/upgrade.php delete mode 100644 mod/kalvidassign/grade_preferences_form.php delete mode 100644 mod/kalvidassign/grade_submissions.php delete mode 100644 mod/kalvidassign/index.php delete mode 100644 mod/kalvidassign/lang/en/kalvidassign.php delete mode 100644 mod/kalvidassign/lib.php delete mode 100644 mod/kalvidassign/locallib.php delete mode 100644 mod/kalvidassign/lti_launch.php delete mode 100644 mod/kalvidassign/mod_form.php delete mode 100644 mod/kalvidassign/pix/icon.gif delete mode 100644 mod/kalvidassign/renderable.php delete mode 100644 mod/kalvidassign/renderer.php delete mode 100644 mod/kalvidassign/single_submission.php delete mode 100644 mod/kalvidassign/single_submission_form.php delete mode 100644 mod/kalvidassign/styles.css delete mode 100644 mod/kalvidassign/submission.php delete mode 100644 mod/kalvidassign/version.php delete mode 100644 mod/kalvidassign/view.php delete mode 100644 mod/kalvidpres/backup/moodle2/backup_kalvidpres_activity_task.class.php delete mode 100644 mod/kalvidpres/backup/moodle2/backup_kalvidpres_settingslib.php delete mode 100644 mod/kalvidpres/backup/moodle2/backup_kalvidpres_stepslib.php delete mode 100644 mod/kalvidpres/backup/moodle2/backup_kalvidres_activity_task.class.php delete mode 100644 mod/kalvidpres/backup/moodle2/backup_kalvidres_settingslib.php delete mode 100644 mod/kalvidpres/backup/moodle2/backup_kalvidres_stepslib.php delete mode 100644 mod/kalvidpres/backup/moodle2/restore_kalvidpres_activity_task.class.php delete mode 100644 mod/kalvidpres/backup/moodle2/restore_kalvidpres_stepslib.php delete mode 100644 mod/kalvidpres/backup/moodle2/restore_kalvidres_activity_task.class.php delete mode 100644 mod/kalvidpres/backup/moodle2/restore_kalvidres_stepslib.php delete mode 100644 mod/kalvidpres/db/access.php delete mode 100644 mod/kalvidpres/db/install.xml delete mode 100644 mod/kalvidpres/db/log.php delete mode 100644 mod/kalvidpres/db/upgrade.php delete mode 100644 mod/kalvidpres/lang/en/kalvidpres.php delete mode 100644 mod/kalvidpres/lang/en/kalvidres.php delete mode 100644 mod/kalvidpres/lib.php delete mode 100644 mod/kalvidpres/lti_launch.php delete mode 100644 mod/kalvidpres/mod_form.php delete mode 100644 mod/kalvidpres/pix/icon.gif delete mode 100644 mod/kalvidpres/renderer.php delete mode 100644 mod/kalvidpres/styles.css delete mode 100644 mod/kalvidpres/version.php delete mode 100644 mod/kalvidpres/view.php delete mode 100644 mod/kalvidres/backup/moodle2/backup_kalvidres_activity_task.class.php delete mode 100644 mod/kalvidres/backup/moodle2/backup_kalvidres_settingslib.php delete mode 100644 mod/kalvidres/backup/moodle2/backup_kalvidres_stepslib.php delete mode 100644 mod/kalvidres/backup/moodle2/restore_kalvidres_activity_task.class.php delete mode 100644 mod/kalvidres/backup/moodle2/restore_kalvidres_stepslib.php delete mode 100644 mod/kalvidres/db/access.php delete mode 100644 mod/kalvidres/db/install.xml delete mode 100644 mod/kalvidres/db/log.php delete mode 100644 mod/kalvidres/db/upgrade.php delete mode 100644 mod/kalvidres/lang/en/kalvidres.php delete mode 100644 mod/kalvidres/lib.php delete mode 100644 mod/kalvidres/lti_launch.php delete mode 100644 mod/kalvidres/mod_form.php delete mode 100644 mod/kalvidres/pix/icon.gif delete mode 100644 mod/kalvidres/renderer.php delete mode 100644 mod/kalvidres/styles.css delete mode 100644 mod/kalvidres/version.php delete mode 100644 mod/kalvidres/view.php diff --git a/lib/editor/tinymce/plugins/kalturamedia/lang/en/tinymce_kalturamedia.php b/lib/editor/tinymce/plugins/kalturamedia/lang/en/tinymce_kalturamedia.php deleted file mode 100644 index b2f2b7d51943f..0000000000000 --- a/lib/editor/tinymce/plugins/kalturamedia/lang/en/tinymce_kalturamedia.php +++ /dev/null @@ -1,28 +0,0 @@ -. - -/** - * Kaltura media language file. - * - * @package tinymce_kalturamedia - * @author Remote-Learner.net Inc - * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later - * @copyright (C) 2014 Remote Learner.net Inc http://www.remote-learner.net - */ - -$string['pluginname'] = 'Kaltura media'; -/* All lang strings used from TinyMCE JavaScript code must be named 'pluginname:stringname', no need to create langs/en_dlg.js */ -$string['kalturamedia:desc'] = 'Embed Kaltura Media'; -$string['kalturamedia:insertbtn'] = 'Insert media'; -$string['kalturamedia:cancelbtn'] = 'Cancel'; diff --git a/lib/editor/tinymce/plugins/kalturamedia/lib.php b/lib/editor/tinymce/plugins/kalturamedia/lib.php deleted file mode 100644 index 7014e5de4e091..0000000000000 --- a/lib/editor/tinymce/plugins/kalturamedia/lib.php +++ /dev/null @@ -1,64 +0,0 @@ -. - -/** - * Kaltura media library file. - * - * @package tinymce_kalturamedia - * @author Remote-Learner.net Inc - * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later - * @copyright (C) 2014 Remote Learner.net Inc http://www.remote-learner.net - */ - -if (!defined('MOODLE_INTERNAL')) { - die('Direct access to this script is forbidden.'); -} - -require_once(dirname(dirname(dirname(dirname(dirname(dirname(__FILE__)))))).'/local/kaltura/locallib.php'); - -class tinymce_kalturamedia extends editor_tinymce_plugin { - /** @var array list of buttons defined by this plugin */ - protected $buttons = array('kalturamedia'); - - /** - * Adjusts TinyMCE init parameters for this plugin. - * - * Subclasses must implement this function in order to carry out changes - * to the TinyMCE settings. - * - * @param array $params TinyMCE init parameters array - * @param context $context Context where editor is being shown - * @param array $options Options for this editor - */ - protected function update_init_params(array &$params, context $context, array $options = null) { - $params['lti_launch_context_id'] = $context->id; - - // Add button after 'unlink' in Moodlemedia - $this->add_button_after($params, 3, 'kalturamedia', 'moodlemedia', true); - // Add JS file, which uses default name. - $this->add_js_plugin($params); - } - - /** - * Gets the order in which to run this plugin. Order usually only matters if - * (a) the place you add your button might depend on another plugin, or - * (b) you want to make some changes to layout etc. that should happen last. - * The default order is 100; within that, plugins are sorted alphabetically. - * Return a lower number if you want this plugin to run earlier, or a higher - * number if you want it to run later. - */ - protected function get_sort_order() { - return 111; - } -} \ No newline at end of file diff --git a/lib/editor/tinymce/plugins/kalturamedia/lti_launch.php b/lib/editor/tinymce/plugins/kalturamedia/lti_launch.php deleted file mode 100644 index 1c4ea2631073d..0000000000000 --- a/lib/editor/tinymce/plugins/kalturamedia/lti_launch.php +++ /dev/null @@ -1,77 +0,0 @@ -. - -/** - * Kaltura media LTI launch page. - * - * @package tinymce_kalturamedia - * @author Remote-Learner.net Inc - * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later - * @copyright (C) 2014 Remote Learner.net Inc http://www.remote-learner.net - */ - -require_once(dirname(dirname(dirname(dirname(dirname(dirname(__FILE__)))))).'/config.php'); -require_once(dirname(dirname(dirname(dirname(dirname(dirname(__FILE__)))))).'/local/kaltura/locallib.php'); - -global $USER; - -require_login(); - -$contextid = required_param('contextid', PARAM_INT); -$height = required_param('height', PARAM_INT); -$width = required_param('width', PARAM_INT); -$withblocks = optional_param('withblocks', 0, PARAM_INT); - -$context = context::instance_by_id($contextid); - -$launch = array(); -$course = 0; - -if ($context instanceof context_course) { - $course = get_course($context->instanceid); - -} else if ($context instanceof context_system || $context instanceof context_coursecat) { - $course = get_course(1); -} else { - // Find parent context - $parentcontexts = $context->get_parent_contexts(false); - - foreach ($parentcontexts as $ctx) { - if ($ctx instanceof context_course) { - $course = get_course($ctx->instanceid); - break; - } else if ($ctx instanceof context_system || $ctx instanceof context_coursecat) { - $course = get_course(1); - break; - } - } -} - -$launch['id'] = 1; -$launch['cmid'] = 0; -$launch['title'] = 'Kaltura media'; -$launch['module'] = KAF_BROWSE_EMBED_MODULE; -$launch['course'] = $course; -$launch['width'] = $width; -$launch['height'] = $height; -$launch['custom_publishdata'] = ''; - -if (local_kaltura_validate_browseembed_required_params($launch)) { - $content = local_kaltura_request_lti_launch($launch, $withblocks); - echo $content; -} else { - echo get_string('invalid_launch_parameters', 'mod_kalvidres'); -} diff --git a/lib/editor/tinymce/plugins/kalturamedia/pix/icon.png b/lib/editor/tinymce/plugins/kalturamedia/pix/icon.png deleted file mode 100644 index 615c31d68e7c309bb63b6098a4bfbcad17a0bd27..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1912 zcmaJ?X;c$u6b)e!Lqt5r4Hw2yt5C8NvXr2K5P}krB?WO~NCt=|nK&6t5U{wRsDPp( zR?%wJiY!$?i@2c(3R)M`atMkdM+;Q}i;AF#zjX4L3#Hi6(Z+o*#S%V7+Nf#XzKA=r8LA_%CILNJ0OW5{&A zaJ)*o3WdW~1%)eCEm!cB;B0Te%P7DFG%yAMMvYpl7Z`=$fUW>vTaM`Zc7Vh+(|~Rp~Gl zq6I99Pz;iQ2|+y5PbFw{Uu3oV&)0-s7~Kfz=u8^JQqmw$Ci{P=M)L)&$3o$+`TnP{ zK0Hwe(?elBl7K4k#>GyvgwhFoQ5eDyG#o+HgSR+89>EZOJfZ`9!#F^MN~=T+`T?{| zCJ4~#F-WU`1H?iQ=hIXwrGUfr3A}9OI!cd z=D{P}JC@}a)8d;iwuiO2*HPTmCMRbA|5iEz#G-JcX?mDLU|1Z*+iZT+^mgoASKDP{ z4l2mxwi?gzn_07RPgV;LjT%l)AJ6uWeXvDXGAwrDsBv*)IWOR}p!MoYnwt}nPqbhD zYdmWsxINRvngY9>r;s!V(s|xYYYGTLv*}CGn>~3W@4w#Z+oz)}N#PRQH{Cw#X}uWs%&oK3G&W zrd@jC-qCJ!P76VPyX17^qFsk~<`>#T%ZbFwLMh~yQTc0DdpJ1<+OR+Q>EEt5BvrrI z`u&i_jXC3D|L%u9!RDX8+qT#-s`tc_?0~zqR&5UrR^#`8IqCH|nR(0xBfEKl-lost zDzZAZ)!b{^yX;2PZbnyXh1&n_;v}NZ^znO_iyzMhCmroJ?`Qfm-?C#f4tIgAP?fH& z-Y$;{2R4@XC$|;F1e+g+&@Og%Uplq6W>OAaQtEx9$2eQ7>fCFLzwxMope`v~GZ%X% z@jf#ddb->y<@Cs0MOyspuCy#^)AM;-c1QwW(M90}wvH*;Rf!!R{xH2MTW!}&&Xw-I z<@kFui4uM9jdLh(#rgDIQB{KZ11*7Nh;}g&5G}>lvZx>Nh);W@7U@3=*b0-$I%r@>AimMyQx{zYnmtb zfgdD)K8UEj-1eiB;RuPtJNny!1P5DxdC1JL@|HTa7Rx-BEF2cUt+D1LapjCCuI6~7 zZ%r$^IdRR)wx+s-mld5vx2axH&5DMnMSyjF>E`^pVCqC`bl;P)tYY>oiCxk3Ddo_~ zOQV~bvwE(6<5DUuUi>EQW+4CYf&CF4tvwY->WLf6-Y*+|X2IMn^ZHcp)=clMRvQS4 zxoeK+uX_1P&^2*%1Q^1w8v?6y21*Xh)|. - -/** - * Kaltura media javascript file. - * - * @package tinymce_kalturamedia - * @author Remote-Learner.net Inc - * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later - * @copyright (C) 2014 Remote Learner.net Inc http://www.remote-learner.net - */ - -(function() { - tinymce.create('tinymce.plugins.kalturamediaPlugin', { - /** - * Initializes the plugin, this will be executed after the plugin has been created. - * This call is done before the editor instance has finished it's initialization so use the onInit event - * of the editor instance to intercept that event. - * - * @param {tinymce.Editor} ed Editor instance that the plugin is initialized in. - * @param {string} url Absolute URL to where the plugin is located. - */ - init : function(ed, url) { - lang = tinyMCE.activeEditor.getParam('language'); - - // Register the command to open a popup window - ed.addCommand('mcekalturamedia', function() { - ed.windowManager.open({ - file : ed.getParam("moodle_plugin_base")+'kalturamedia/tinymce/ltibrowse.php?lang=' + lang, - width : 1128 + parseInt(ed.getLang('media.delta_width', 0)), - height : 583 + parseInt(ed.getLang('media.delta_height', 0)), - inline : 1 - }, { - plugin_url : url - }); - }); - - // Register kalturaMedia button - ed.addButton('kalturamedia', { - title : 'kalturamedia.desc', - cmd : 'mcekalturamedia', - image : url+'/img/icon.gif' - }); - }, - - /** - * Returns information about the plugin as a name/value array. - * The current keys are longname, author, authorurl, infourl and version. - * - * @return {Object} Name/value array containing information about the plugin. - */ - getInfo : function() { - return { - longname : 'Kaltura media plugin', - author : 'Remote-Learner.net Inc', - authorurl : 'http://remote-learner.net', - infourl : 'http://docs.moodle.org/en/TinyMCE', - version : "1.0" - }; - } - }); - - // Register plugin. - tinymce.PluginManager.add('kalturamedia', tinymce.plugins.kalturamediaPlugin); -})(); diff --git a/lib/editor/tinymce/plugins/kalturamedia/tinymce/img/icon.gif b/lib/editor/tinymce/plugins/kalturamedia/tinymce/img/icon.gif deleted file mode 100644 index b32189b87d2ce8ab896659db755c9773d521696f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 575 zcmZ?wbhEHb6krfwIOfXmk4^hGr{NoZ^Zz`Wzj=+n@*95;H2Ep0^FhSqkD&g0F_WJn zIv>T1zl!U9me6}EW%6H5mmzC5L-rhoytxed(;4z-GUU%QAI|6;!XD@FdV;{CguYttpu^_MMnTs2v9)AHC2 z?Hvyd{$FGGf1Tm~O@?oG82;R0{C}U}{}YD)Lk%eY6Lc<0O)N=GQ7F$W$xv|j^bKH8 z{K>+|#Zb?n!vF-Jh+<%GZ>Vo-mThipZ&qru>uBcTZj!5aXi{m@ZDQf8SDsw2)}f. - -/** - * Kaltura media ltippopup javascript file. This code is based off of the word done for the Moodle media plug-in. - * @see editor/tinymce/plugins/moodlemedia. - * - * @package tinymce_kalturamedia - * @author Remote-Learner.net Inc - * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later - * @copyright (C) 2014 Remote Learner.net Inc http://www.remote-learner.net - */ - -var ed, url; - -if (url = tinyMCEPopup.getParam("media_external_list_url")) { - document.write(''); -} - -/** - * Initialization function to set a global to the current tinyMCE popup editor instance; and to set the editor context hidden element. - */ -function init() { - ed = tinyMCEPopup.editor; - var contextid = ed.getParam('lti_launch_context_id'); - document.getElementById('lti_launch_context_id').value = contextid; -} - -/** - * Insert the selected media into the editor. - */ -function insertMedia() { - var form = document.forms[0]; - var token = form.token.value; - var url = ''; - var parser = document.createElement('a'); - parser.href = form.source.value; - url = token + parser.pathname + parser.search; - var content = 'tinymce-kalturamedia-embed||'+form.video_title.value+'||'+form.width.value+'||'+form.height.value+''; - ed.execCommand('mceInsertContent', false, content); - tinyMCEPopup.close(); -} -tinyMCEPopup.onInit.add(init); diff --git a/lib/editor/tinymce/plugins/kalturamedia/tinymce/ltibrowse.php b/lib/editor/tinymce/plugins/kalturamedia/tinymce/ltibrowse.php deleted file mode 100644 index 0ab8ff96df99b..0000000000000 --- a/lib/editor/tinymce/plugins/kalturamedia/tinymce/ltibrowse.php +++ /dev/null @@ -1,69 +0,0 @@ -. - -/** - * Kaltura media LTI launch page. - * - * @package tinymce_kalturamedia - * @author Remote-Learner.net Inc - * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later - * @copyright (C) 2014 Remote Learner.net Inc http://www.remote-learner.net - */ - -require_once(dirname(dirname(dirname(dirname(dirname(dirname(dirname(__FILE__))))))).'/config.php'); -require_once($CFG->dirroot.'/local/kaltura/locallib.php'); -require_once('renderer.php'); - -global $PAGE; - -require_login(); - -$PAGE->set_pagelayout('popup'); -$PAGE->set_url('/editor/tinymce/plugins/kalturamedia/tinymce/ltilaunch.php'); -$PAGE->set_context(context_system::instance()); - -echo $OUTPUT->header(); - -$editor = get_texteditor('tinymce'); -$tinymcebaseurl = $editor->get_tinymce_base_url(); - -echo html_writer::script('', $tinymcebaseurl.'tiny_mce_popup.js'); -echo html_writer::script('', $tinymcebaseurl.'utils/validate.js'); -echo html_writer::script('', $tinymcebaseurl.'utils/form_utils.js'); -echo html_writer::script('', $tinymcebaseurl.'utils/editable_selects.js'); -echo html_writer::script('', 'js/ltipopuplib.js'); - -echo tinymce_kalturamedia_preview_embed_form(); - -$urlparams = array( - 'withblocks' => 0, - 'width' => KALTURA_PANEL_WIDTH, - 'height' => KALTURA_PANEL_HEIGHT -); - -$url = new moodle_url('/lib/editor/tinymce/plugins/kalturamedia/lti_launch.php', $urlparams); - -$params = array( - 'insertbtnid' => TINMCE_KALTURAMEDIA_INSERT_BUTTON_ID, - 'ltilaunchurl' => $url->out(), - 'objecttagheight' => TINMCE_KALTURAMEDIA_OBJECT_TAG_HEIGHT, - 'objecttagid' => TINMCE_KALTURAMEDIA_OBJECT_TAG_ID, - 'previewiframeid' => TINMCE_KALTURAMEDIA_PREVIEW_IFRAME_TAG_ID -); - -$PAGE->requires->yui_module('moodle-local_kaltura-ltitinymcepanel', 'M.local_kaltura.init', array($params), null, true); - -echo $OUTPUT->footer(); diff --git a/lib/editor/tinymce/plugins/kalturamedia/tinymce/renderer.php b/lib/editor/tinymce/plugins/kalturamedia/tinymce/renderer.php deleted file mode 100644 index 79d03f0d6692d..0000000000000 --- a/lib/editor/tinymce/plugins/kalturamedia/tinymce/renderer.php +++ /dev/null @@ -1,84 +0,0 @@ -. - -/** - * LTI preview and selection renderer library. - * - * @package tinymce_kalturamedia - * @author Remote-Learner.net Inc - * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later - * @copyright (C) 2014 Remote Learner.net Inc http://www.remote-learner.net - */ - -define('TINMCE_KALTURAMEDIA_INSERT_BUTTON_ID', 'insert'); -define('TINMCE_KALTURAMEDIA_OBJECT_TAG_ID', 'objecttagcontainer'); -define('TINMCE_KALTURAMEDIA_PREVIEW_IFRAME_TAG_ID', 'video_preview_frame'); -define('TINMCE_KALTURAMEDIA_OBJECT_TAG_HEIGHT', '500'); - -/** - * Returns HTML markup for a form used to preview and insert the video markup into the page. - * @return string HTML markup. - */ -function tinymce_kalturamedia_preview_embed_form() { - // Create hidden elements. - $hiddenelements = html_writer::empty_tag('input', array('type' => 'hidden', 'id' => 'entry_id', 'value' => '')); - $hiddenelements .= html_writer::empty_tag('input', array('type' => 'hidden', 'id' => 'source', 'value' => '')); - $hiddenelements .= html_writer::empty_tag('input', array('type' => 'hidden', 'id' => 'token', 'value' => KALTURA_URI_TOKEN)); - $hiddenelements .= html_writer::empty_tag('input', array('type' => 'hidden', 'id' => 'video_title', 'value' => '')); - $hiddenelements .= html_writer::empty_tag('input', array('type' => 'hidden', 'id' => 'uiconf_id', 'value' => '')); - $hiddenelements .= html_writer::empty_tag('input', array('type' => 'hidden', 'id' => 'widescreen', 'value' => '')); - $hiddenelements .= html_writer::empty_tag('input', array('type' => 'hidden', 'id' => 'height', 'value' => '')); - $hiddenelements .= html_writer::empty_tag('input', array('type' => 'hidden', 'id' => 'width', 'value' => '')); - $hiddenelements .= html_writer::empty_tag('input', array('type' => 'hidden', 'id' => 'lti_launch_context_id', 'value' => '')); - - // Create LTI launch and preview container divs - $ltilaunchcontainer = html_writer::tag('div', '', array('id' => TINMCE_KALTURAMEDIA_OBJECT_TAG_ID)); - $previewcontainer = html_writer::tag('div', '', array('id' => TINMCE_KALTURAMEDIA_PREVIEW_IFRAME_TAG_ID)); - - // Create insert button. - $params = array( - 'type' => 'submit', - 'id' => TINMCE_KALTURAMEDIA_INSERT_BUTTON_ID, - 'name' => TINMCE_KALTURAMEDIA_INSERT_BUTTON_ID, - // Using the language string from the local plug-in. - 'value' => get_string('insertbtn', 'local_kaltura'), - 'class' => 'updateButton', - 'style' => 'display: none' - ); - $insertbutton = html_writer::empty_tag('input', $params); - $insertbuttondiv = html_writer::tag('div', $insertbutton, array('style' => 'float: left')); - - // Create cancel button. - $param = array( - 'type' => 'submit', - 'id' => 'cancel', - 'name' => 'cancel', - // Using the language string from the local plug-in. TODO: figure out how to access the TinyMCE language strings. - 'value' => get_string('cancelbtn', 'local_kaltura'), - 'onclick' => 'tinyMCEPopup.close();' - ); - $cancelbutton = html_writer::empty_tag('input', $param); - $cancelbuttondiv = html_writer::tag('div', $cancelbutton, array('style' => 'float: right')); - - $buttonscontainer = html_writer::tag('div', $insertbuttondiv.$cancelbuttondiv, array('class' => 'mceActionPanel')); - - // This element is used so that the ltiservice.js can simulate a 'click' event. This tells the plug-in that the user has choosen a video to embed on the page - // and it will enable the insert button. - $simulateclickdiv = html_writer::tag('input', '', array('id' => 'closeltipanel', 'type' => 'hidden', 'value' => '')); - - $content = $simulateclickdiv.$ltilaunchcontainer.$previewcontainer.$hiddenelements.$buttonscontainer; - return html_writer::tag('form', $content, array('onsubmit' => 'insertMedia();return false', 'action' => '#')); -} diff --git a/lib/editor/tinymce/plugins/kalturamedia/tinymce_kalturamedia.php b/lib/editor/tinymce/plugins/kalturamedia/tinymce_kalturamedia.php deleted file mode 100644 index 8c54889da8eaf..0000000000000 --- a/lib/editor/tinymce/plugins/kalturamedia/tinymce_kalturamedia.php +++ /dev/null @@ -1,28 +0,0 @@ -. - -/** - * Kaltura media language file. - * - * @package tinymce_kalturamedia - * @author Remote-Learner.net Inc - * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later - * @copyright (C) 2014 Remote Learner.net Inc http://www.remote-learner.net - */ - -$string['pluginname'] = 'Kaltura media'; -/* All lang strings used from TinyMCE JavaScript code must be named 'pluginname:stringname', no need to create langs/en_dlg.js */ -$string['kalturamedia:desc'] = 'Embed Kaltura Media'; -$string['insertbtn'] = 'Insert media'; -$string['cancelbtn'] = 'Cancel'; diff --git a/lib/editor/tinymce/plugins/kalturamedia/version.php b/lib/editor/tinymce/plugins/kalturamedia/version.php deleted file mode 100644 index c3ab160dc73a8..0000000000000 --- a/lib/editor/tinymce/plugins/kalturamedia/version.php +++ /dev/null @@ -1,33 +0,0 @@ -. - -/** - * Kaltura media version file. - * - * @package tinymce_kalturamedia - * @author Remote-Learner.net Inc - * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later - * @copyright (C) 2014 Remote Learner.net Inc http://www.remote-learner.net - */ - -defined('MOODLE_INTERNAL') || die(); - -$plugin->version = 2014013000; -// Required Moodle version. -$plugin->requires = 2013051400; -// Full name of the plugin (used for diagnostics). -$plugin->component = 'tinymce_kalturamedia'; -$plugin->dependencies = array( - 'local_kaltura' => 2014013000 -); \ No newline at end of file diff --git a/local/kaltura/API/KalturaClient.php b/local/kaltura/API/KalturaClient.php deleted file mode 100644 index 45294c8ad090a..0000000000000 --- a/local/kaltura/API/KalturaClient.php +++ /dev/null @@ -1,8347 +0,0 @@ -. -// -// @ignore -// =================================================================================================== - -/** - * @package Kaltura - * @subpackage Client - */ -require_once(dirname(__FILE__) . "/KalturaClientBase.php"); -require_once(dirname(__FILE__) . "/KalturaEnums.php"); -require_once(dirname(__FILE__) . "/KalturaTypes.php"); - - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaAccessControlProfileService extends KalturaServiceBase -{ - function __construct(KalturaClient $client = null) - { - parent::__construct($client); - } - - /** - * Add new access control profile - * - * @param KalturaAccessControlProfile $accessControlProfile - * @return KalturaAccessControlProfile - */ - function add(KalturaAccessControlProfile $accessControlProfile) - { - $kparams = array(); - $this->client->addParam($kparams, "accessControlProfile", $accessControlProfile->toParams()); - $this->client->queueServiceActionCall("accesscontrolprofile", "add", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaAccessControlProfile"); - return $resultObject; - } - - /** - * Get access control profile by id - * - * @param int $id - * @return KalturaAccessControlProfile - */ - function get($id) - { - $kparams = array(); - $this->client->addParam($kparams, "id", $id); - $this->client->queueServiceActionCall("accesscontrolprofile", "get", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaAccessControlProfile"); - return $resultObject; - } - - /** - * Update access control profile by id - * - * @param int $id - * @param KalturaAccessControlProfile $accessControlProfile - * @return KalturaAccessControlProfile - */ - function update($id, KalturaAccessControlProfile $accessControlProfile) - { - $kparams = array(); - $this->client->addParam($kparams, "id", $id); - $this->client->addParam($kparams, "accessControlProfile", $accessControlProfile->toParams()); - $this->client->queueServiceActionCall("accesscontrolprofile", "update", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaAccessControlProfile"); - return $resultObject; - } - - /** - * Delete access control profile by id - * - * @param int $id - * @return - */ - function delete($id) - { - $kparams = array(); - $this->client->addParam($kparams, "id", $id); - $this->client->queueServiceActionCall("accesscontrolprofile", "delete", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "null"); - return $resultObject; - } - - /** - * List access control profiles by filter and pager - * - * @param KalturaAccessControlProfileFilter $filter - * @param KalturaFilterPager $pager - * @return KalturaAccessControlProfileListResponse - */ - function listAction(KalturaAccessControlProfileFilter $filter = null, KalturaFilterPager $pager = null) - { - $kparams = array(); - if ($filter !== null) - $this->client->addParam($kparams, "filter", $filter->toParams()); - if ($pager !== null) - $this->client->addParam($kparams, "pager", $pager->toParams()); - $this->client->queueServiceActionCall("accesscontrolprofile", "list", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaAccessControlProfileListResponse"); - return $resultObject; - } -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaAccessControlService extends KalturaServiceBase -{ - function __construct(KalturaClient $client = null) - { - parent::__construct($client); - } - - /** - * Add new Access Control Profile - * - * @param KalturaAccessControl $accessControl - * @return KalturaAccessControl - */ - function add(KalturaAccessControl $accessControl) - { - $kparams = array(); - $this->client->addParam($kparams, "accessControl", $accessControl->toParams()); - $this->client->queueServiceActionCall("accesscontrol", "add", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaAccessControl"); - return $resultObject; - } - - /** - * Get Access Control Profile by id - * - * @param int $id - * @return KalturaAccessControl - */ - function get($id) - { - $kparams = array(); - $this->client->addParam($kparams, "id", $id); - $this->client->queueServiceActionCall("accesscontrol", "get", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaAccessControl"); - return $resultObject; - } - - /** - * Update Access Control Profile by id - * - * @param int $id - * @param KalturaAccessControl $accessControl - * @return KalturaAccessControl - */ - function update($id, KalturaAccessControl $accessControl) - { - $kparams = array(); - $this->client->addParam($kparams, "id", $id); - $this->client->addParam($kparams, "accessControl", $accessControl->toParams()); - $this->client->queueServiceActionCall("accesscontrol", "update", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaAccessControl"); - return $resultObject; - } - - /** - * Delete Access Control Profile by id - * - * @param int $id - * @return - */ - function delete($id) - { - $kparams = array(); - $this->client->addParam($kparams, "id", $id); - $this->client->queueServiceActionCall("accesscontrol", "delete", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "null"); - return $resultObject; - } - - /** - * List Access Control Profiles by filter and pager - * - * @param KalturaAccessControlFilter $filter - * @param KalturaFilterPager $pager - * @return KalturaAccessControlListResponse - */ - function listAction(KalturaAccessControlFilter $filter = null, KalturaFilterPager $pager = null) - { - $kparams = array(); - if ($filter !== null) - $this->client->addParam($kparams, "filter", $filter->toParams()); - if ($pager !== null) - $this->client->addParam($kparams, "pager", $pager->toParams()); - $this->client->queueServiceActionCall("accesscontrol", "list", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaAccessControlListResponse"); - return $resultObject; - } -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaAdminUserService extends KalturaServiceBase -{ - function __construct(KalturaClient $client = null) - { - parent::__construct($client); - } - - /** - * Update admin user password and email - * - * @param string $email - * @param string $password - * @param string $newEmail Optional, provide only when you want to update the email - * @param string $newPassword - * @return KalturaAdminUser - */ - function updatePassword($email, $password, $newEmail = "", $newPassword = "") - { - $kparams = array(); - $this->client->addParam($kparams, "email", $email); - $this->client->addParam($kparams, "password", $password); - $this->client->addParam($kparams, "newEmail", $newEmail); - $this->client->addParam($kparams, "newPassword", $newPassword); - $this->client->queueServiceActionCall("adminuser", "updatePassword", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaAdminUser"); - return $resultObject; - } - - /** - * Reset admin user password and send it to the users email address - * - * @param string $email - * @return - */ - function resetPassword($email) - { - $kparams = array(); - $this->client->addParam($kparams, "email", $email); - $this->client->queueServiceActionCall("adminuser", "resetPassword", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "null"); - return $resultObject; - } - - /** - * Get an admin session using admin email and password (Used for login to the KMC application) - * - * @param string $email - * @param string $password - * @param int $partnerId - * @return string - */ - function login($email, $password, $partnerId = null) - { - $kparams = array(); - $this->client->addParam($kparams, "email", $email); - $this->client->addParam($kparams, "password", $password); - $this->client->addParam($kparams, "partnerId", $partnerId); - $this->client->queueServiceActionCall("adminuser", "login", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "string"); - return $resultObject; - } - - /** - * Set initial users password - * - * @param string $hashKey - * @param string $newPassword New password to set - * @return - */ - function setInitialPassword($hashKey, $newPassword) - { - $kparams = array(); - $this->client->addParam($kparams, "hashKey", $hashKey); - $this->client->addParam($kparams, "newPassword", $newPassword); - $this->client->queueServiceActionCall("adminuser", "setInitialPassword", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "null"); - return $resultObject; - } -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaBaseEntryService extends KalturaServiceBase -{ - function __construct(KalturaClient $client = null) - { - parent::__construct($client); - } - - /** - * Generic add entry, should be used when the uploaded entry type is not known. - * - * @param KalturaBaseEntry $entry - * @param string $type - * @return KalturaBaseEntry - */ - function add(KalturaBaseEntry $entry, $type = null) - { - $kparams = array(); - $this->client->addParam($kparams, "entry", $entry->toParams()); - $this->client->addParam($kparams, "type", $type); - $this->client->queueServiceActionCall("baseentry", "add", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaBaseEntry"); - return $resultObject; - } - - /** - * Attach content resource to entry in status NO_MEDIA - * - * @param string $entryId - * @param KalturaResource $resource - * @return KalturaBaseEntry - */ - function addContent($entryId, KalturaResource $resource) - { - $kparams = array(); - $this->client->addParam($kparams, "entryId", $entryId); - $this->client->addParam($kparams, "resource", $resource->toParams()); - $this->client->queueServiceActionCall("baseentry", "addContent", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaBaseEntry"); - return $resultObject; - } - - /** - * Generic add entry using an uploaded file, should be used when the uploaded entry type is not known. - * - * @param KalturaBaseEntry $entry - * @param string $uploadTokenId - * @param string $type - * @return KalturaBaseEntry - */ - function addFromUploadedFile(KalturaBaseEntry $entry, $uploadTokenId, $type = null) - { - $kparams = array(); - $this->client->addParam($kparams, "entry", $entry->toParams()); - $this->client->addParam($kparams, "uploadTokenId", $uploadTokenId); - $this->client->addParam($kparams, "type", $type); - $this->client->queueServiceActionCall("baseentry", "addFromUploadedFile", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaBaseEntry"); - return $resultObject; - } - - /** - * Get base entry by ID. - * - * @param string $entryId Entry id - * @param int $version Desired version of the data - * @return KalturaBaseEntry - */ - function get($entryId, $version = -1) - { - $kparams = array(); - $this->client->addParam($kparams, "entryId", $entryId); - $this->client->addParam($kparams, "version", $version); - $this->client->queueServiceActionCall("baseentry", "get", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaBaseEntry"); - return $resultObject; - } - - /** - * Get remote storage existing paths for the asset. - * - * @param string $entryId - * @return KalturaRemotePathListResponse - */ - function getRemotePaths($entryId) - { - $kparams = array(); - $this->client->addParam($kparams, "entryId", $entryId); - $this->client->queueServiceActionCall("baseentry", "getRemotePaths", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaRemotePathListResponse"); - return $resultObject; - } - - /** - * Update base entry. Only the properties that were set will be updated. - * - * @param string $entryId Entry id to update - * @param KalturaBaseEntry $baseEntry Base entry metadata to update - * @return KalturaBaseEntry - */ - function update($entryId, KalturaBaseEntry $baseEntry) - { - $kparams = array(); - $this->client->addParam($kparams, "entryId", $entryId); - $this->client->addParam($kparams, "baseEntry", $baseEntry->toParams()); - $this->client->queueServiceActionCall("baseentry", "update", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaBaseEntry"); - return $resultObject; - } - - /** - * Update the content resource associated with the entry. - * - * @param string $entryId Entry id to update - * @param KalturaResource $resource Resource to be used to replace entry content - * @param int $conversionProfileId The conversion profile id to be used on the entry - * @return KalturaBaseEntry - */ - function updateContent($entryId, KalturaResource $resource, $conversionProfileId = null) - { - $kparams = array(); - $this->client->addParam($kparams, "entryId", $entryId); - $this->client->addParam($kparams, "resource", $resource->toParams()); - $this->client->addParam($kparams, "conversionProfileId", $conversionProfileId); - $this->client->queueServiceActionCall("baseentry", "updateContent", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaBaseEntry"); - return $resultObject; - } - - /** - * Get an array of KalturaBaseEntry objects by a comma-separated list of ids. - * - * @param string $entryIds Comma separated string of entry ids - * @return array - */ - function getByIds($entryIds) - { - $kparams = array(); - $this->client->addParam($kparams, "entryIds", $entryIds); - $this->client->queueServiceActionCall("baseentry", "getByIds", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "array"); - return $resultObject; - } - - /** - * Delete an entry. - * - * @param string $entryId Entry id to delete - * @return - */ - function delete($entryId) - { - $kparams = array(); - $this->client->addParam($kparams, "entryId", $entryId); - $this->client->queueServiceActionCall("baseentry", "delete", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "null"); - return $resultObject; - } - - /** - * List base entries by filter with paging support. - * - * @param KalturaBaseEntryFilter $filter Entry filter - * @param KalturaFilterPager $pager Pager - * @return KalturaBaseEntryListResponse - */ - function listAction(KalturaBaseEntryFilter $filter = null, KalturaFilterPager $pager = null) - { - $kparams = array(); - if ($filter !== null) - $this->client->addParam($kparams, "filter", $filter->toParams()); - if ($pager !== null) - $this->client->addParam($kparams, "pager", $pager->toParams()); - $this->client->queueServiceActionCall("baseentry", "list", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaBaseEntryListResponse"); - return $resultObject; - } - - /** - * List base entries by filter according to reference id - * - * @param string $refId Entry Reference ID - * @param KalturaFilterPager $pager Pager - * @return KalturaBaseEntryListResponse - */ - function listByReferenceId($refId, KalturaFilterPager $pager = null) - { - $kparams = array(); - $this->client->addParam($kparams, "refId", $refId); - if ($pager !== null) - $this->client->addParam($kparams, "pager", $pager->toParams()); - $this->client->queueServiceActionCall("baseentry", "listByReferenceId", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaBaseEntryListResponse"); - return $resultObject; - } - - /** - * Count base entries by filter. - * - * @param KalturaBaseEntryFilter $filter Entry filter - * @return int - */ - function count(KalturaBaseEntryFilter $filter = null) - { - $kparams = array(); - if ($filter !== null) - $this->client->addParam($kparams, "filter", $filter->toParams()); - $this->client->queueServiceActionCall("baseentry", "count", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "integer"); - return $resultObject; - } - - /** - * Upload a file to Kaltura, that can be used to create an entry. - * - * @param file $fileData The file data - * @return string - */ - function upload($fileData) - { - $kparams = array(); - $kfiles = array(); - $this->client->addParam($kfiles, "fileData", $fileData); - $this->client->queueServiceActionCall("baseentry", "upload", $kparams, $kfiles); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "string"); - return $resultObject; - } - - /** - * Update entry thumbnail using a raw jpeg file. - * - * @param string $entryId Media entry id - * @param file $fileData Jpeg file data - * @return KalturaBaseEntry - */ - function updateThumbnailJpeg($entryId, $fileData) - { - $kparams = array(); - $this->client->addParam($kparams, "entryId", $entryId); - $kfiles = array(); - $this->client->addParam($kfiles, "fileData", $fileData); - $this->client->queueServiceActionCall("baseentry", "updateThumbnailJpeg", $kparams, $kfiles); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaBaseEntry"); - return $resultObject; - } - - /** - * Update entry thumbnail using url. - * - * @param string $entryId Media entry id - * @param string $url File url - * @return KalturaBaseEntry - */ - function updateThumbnailFromUrl($entryId, $url) - { - $kparams = array(); - $this->client->addParam($kparams, "entryId", $entryId); - $this->client->addParam($kparams, "url", $url); - $this->client->queueServiceActionCall("baseentry", "updateThumbnailFromUrl", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaBaseEntry"); - return $resultObject; - } - - /** - * Update entry thumbnail from a different entry by a specified time offset (in seconds). - * - * @param string $entryId Media entry id - * @param string $sourceEntryId Media entry id - * @param int $timeOffset Time offset (in seconds) - * @return KalturaBaseEntry - */ - function updateThumbnailFromSourceEntry($entryId, $sourceEntryId, $timeOffset) - { - $kparams = array(); - $this->client->addParam($kparams, "entryId", $entryId); - $this->client->addParam($kparams, "sourceEntryId", $sourceEntryId); - $this->client->addParam($kparams, "timeOffset", $timeOffset); - $this->client->queueServiceActionCall("baseentry", "updateThumbnailFromSourceEntry", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaBaseEntry"); - return $resultObject; - } - - /** - * Flag inappropriate entry for moderation. - * - * @param KalturaModerationFlag $moderationFlag - * @return - */ - function flag(KalturaModerationFlag $moderationFlag) - { - $kparams = array(); - $this->client->addParam($kparams, "moderationFlag", $moderationFlag->toParams()); - $this->client->queueServiceActionCall("baseentry", "flag", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "null"); - return $resultObject; - } - - /** - * Reject the entry and mark the pending flags (if any) as moderated (this will make the entry non-playable). - * - * @param string $entryId - * @return - */ - function reject($entryId) - { - $kparams = array(); - $this->client->addParam($kparams, "entryId", $entryId); - $this->client->queueServiceActionCall("baseentry", "reject", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "null"); - return $resultObject; - } - - /** - * Approve the entry and mark the pending flags (if any) as moderated (this will make the entry playable). - * - * @param string $entryId - * @return - */ - function approve($entryId) - { - $kparams = array(); - $this->client->addParam($kparams, "entryId", $entryId); - $this->client->queueServiceActionCall("baseentry", "approve", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "null"); - return $resultObject; - } - - /** - * List all pending flags for the entry. - * - * @param string $entryId - * @param KalturaFilterPager $pager - * @return KalturaModerationFlagListResponse - */ - function listFlags($entryId, KalturaFilterPager $pager = null) - { - $kparams = array(); - $this->client->addParam($kparams, "entryId", $entryId); - if ($pager !== null) - $this->client->addParam($kparams, "pager", $pager->toParams()); - $this->client->queueServiceActionCall("baseentry", "listFlags", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaModerationFlagListResponse"); - return $resultObject; - } - - /** - * Anonymously rank an entry, no validation is done on duplicate rankings. - * - * @param string $entryId - * @param int $rank - * @return - */ - function anonymousRank($entryId, $rank) - { - $kparams = array(); - $this->client->addParam($kparams, "entryId", $entryId); - $this->client->addParam($kparams, "rank", $rank); - $this->client->queueServiceActionCall("baseentry", "anonymousRank", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "null"); - return $resultObject; - } - - /** - * This action delivers entry-related data, based on the user's context: access control, restriction, playback format and storage information. - * - * @param string $entryId - * @param KalturaEntryContextDataParams $contextDataParams - * @return KalturaEntryContextDataResult - */ - function getContextData($entryId, KalturaEntryContextDataParams $contextDataParams) - { - $kparams = array(); - $this->client->addParam($kparams, "entryId", $entryId); - $this->client->addParam($kparams, "contextDataParams", $contextDataParams->toParams()); - $this->client->queueServiceActionCall("baseentry", "getContextData", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaEntryContextDataResult"); - return $resultObject; - } - - /** - * - * - * @param string $entryId - * @param int $storageProfileId - * @return KalturaBaseEntry - */ - function export($entryId, $storageProfileId) - { - $kparams = array(); - $this->client->addParam($kparams, "entryId", $entryId); - $this->client->addParam($kparams, "storageProfileId", $storageProfileId); - $this->client->queueServiceActionCall("baseentry", "export", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaBaseEntry"); - return $resultObject; - } - - /** - * Index an entry by id. - * - * @param string $id - * @param bool $shouldUpdate - * @return int - */ - function index($id, $shouldUpdate = true) - { - $kparams = array(); - $this->client->addParam($kparams, "id", $id); - $this->client->addParam($kparams, "shouldUpdate", $shouldUpdate); - $this->client->queueServiceActionCall("baseentry", "index", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "integer"); - return $resultObject; - } - - /** - * Clone an entry with optional attributes to apply to the clone - * - * @param string $entryId Id of entry to clone - * @return KalturaBaseEntry - */ - function cloneAction($entryId) - { - $kparams = array(); - $this->client->addParam($kparams, "entryId", $entryId); - $this->client->queueServiceActionCall("baseentry", "clone", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaBaseEntry"); - return $resultObject; - } -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaBulkUploadService extends KalturaServiceBase -{ - function __construct(KalturaClient $client = null) - { - parent::__construct($client); - } - - /** - * Add new bulk upload batch job - Conversion profile id can be specified in the API or in the CSV file, the one in the CSV file will be stronger. - If no conversion profile was specified, partner's default will be used - * - * @param int $conversionProfileId Convertion profile id to use for converting the current bulk (-1 to use partner's default) - * @param file $csvFileData Bulk upload file - * @param string $bulkUploadType - * @param string $uploadedBy - * @param string $fileName Friendly name of the file, used to be recognized later in the logs. - * @return KalturaBulkUpload - */ - function add($conversionProfileId, $csvFileData, $bulkUploadType = null, $uploadedBy = null, $fileName = null) - { - $kparams = array(); - $this->client->addParam($kparams, "conversionProfileId", $conversionProfileId); - $kfiles = array(); - $this->client->addParam($kfiles, "csvFileData", $csvFileData); - $this->client->addParam($kparams, "bulkUploadType", $bulkUploadType); - $this->client->addParam($kparams, "uploadedBy", $uploadedBy); - $this->client->addParam($kparams, "fileName", $fileName); - $this->client->queueServiceActionCall("bulkupload", "add", $kparams, $kfiles); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaBulkUpload"); - return $resultObject; - } - - /** - * Get bulk upload batch job by id - * - * @param bigint $id - * @return KalturaBulkUpload - */ - function get($id) - { - $kparams = array(); - $this->client->addParam($kparams, "id", $id); - $this->client->queueServiceActionCall("bulkupload", "get", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaBulkUpload"); - return $resultObject; - } - - /** - * List bulk upload batch jobs - * - * @param KalturaFilterPager $pager - * @return KalturaBulkUploadListResponse - */ - function listAction(KalturaFilterPager $pager = null) - { - $kparams = array(); - if ($pager !== null) - $this->client->addParam($kparams, "pager", $pager->toParams()); - $this->client->queueServiceActionCall("bulkupload", "list", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaBulkUploadListResponse"); - return $resultObject; - } - - /** - * Serve action returan the original file. - * - * @param bigint $id Job id - * @return file - */ - function serve($id) - { - $kparams = array(); - $this->client->addParam($kparams, "id", $id); - $this->client->queueServiceActionCall("bulkupload", "serve", $kparams); - if(!$this->client->getDestinationPath() && !$this->client->getReturnServedResult()) - return $this->client->getServeUrl(); - return $this->client->doQueue(); - } - - /** - * ServeLog action returan the original file. - * - * @param bigint $id Job id - * @return file - */ - function serveLog($id) - { - $kparams = array(); - $this->client->addParam($kparams, "id", $id); - $this->client->queueServiceActionCall("bulkupload", "serveLog", $kparams); - if(!$this->client->getDestinationPath() && !$this->client->getReturnServedResult()) - return $this->client->getServeUrl(); - return $this->client->doQueue(); - } - - /** - * Aborts the bulk upload and all its child jobs - * - * @param bigint $id Job id - * @return KalturaBulkUpload - */ - function abort($id) - { - $kparams = array(); - $this->client->addParam($kparams, "id", $id); - $this->client->queueServiceActionCall("bulkupload", "abort", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaBulkUpload"); - return $resultObject; - } -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaCategoryEntryService extends KalturaServiceBase -{ - function __construct(KalturaClient $client = null) - { - parent::__construct($client); - } - - /** - * Add new CategoryEntry - * - * @param KalturaCategoryEntry $categoryEntry - * @return KalturaCategoryEntry - */ - function add(KalturaCategoryEntry $categoryEntry) - { - $kparams = array(); - $this->client->addParam($kparams, "categoryEntry", $categoryEntry->toParams()); - $this->client->queueServiceActionCall("categoryentry", "add", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaCategoryEntry"); - return $resultObject; - } - - /** - * Delete CategoryEntry - * - * @param string $entryId - * @param int $categoryId - * @return - */ - function delete($entryId, $categoryId) - { - $kparams = array(); - $this->client->addParam($kparams, "entryId", $entryId); - $this->client->addParam($kparams, "categoryId", $categoryId); - $this->client->queueServiceActionCall("categoryentry", "delete", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "null"); - return $resultObject; - } - - /** - * List all categoryEntry - * - * @param KalturaCategoryEntryFilter $filter - * @param KalturaFilterPager $pager - * @return KalturaCategoryEntryListResponse - */ - function listAction(KalturaCategoryEntryFilter $filter = null, KalturaFilterPager $pager = null) - { - $kparams = array(); - if ($filter !== null) - $this->client->addParam($kparams, "filter", $filter->toParams()); - if ($pager !== null) - $this->client->addParam($kparams, "pager", $pager->toParams()); - $this->client->queueServiceActionCall("categoryentry", "list", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaCategoryEntryListResponse"); - return $resultObject; - } - - /** - * Index CategoryEntry by Id - * - * @param string $entryId - * @param int $categoryId - * @param bool $shouldUpdate - * @return int - */ - function index($entryId, $categoryId, $shouldUpdate = true) - { - $kparams = array(); - $this->client->addParam($kparams, "entryId", $entryId); - $this->client->addParam($kparams, "categoryId", $categoryId); - $this->client->addParam($kparams, "shouldUpdate", $shouldUpdate); - $this->client->queueServiceActionCall("categoryentry", "index", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "integer"); - return $resultObject; - } - - /** - * Activate CategoryEntry when it is pending moderation - * - * @param string $entryId - * @param int $categoryId - * @return - */ - function activate($entryId, $categoryId) - { - $kparams = array(); - $this->client->addParam($kparams, "entryId", $entryId); - $this->client->addParam($kparams, "categoryId", $categoryId); - $this->client->queueServiceActionCall("categoryentry", "activate", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "null"); - return $resultObject; - } - - /** - * Activate CategoryEntry when it is pending moderation - * - * @param string $entryId - * @param int $categoryId - * @return - */ - function reject($entryId, $categoryId) - { - $kparams = array(); - $this->client->addParam($kparams, "entryId", $entryId); - $this->client->addParam($kparams, "categoryId", $categoryId); - $this->client->queueServiceActionCall("categoryentry", "reject", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "null"); - return $resultObject; - } -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaCategoryService extends KalturaServiceBase -{ - function __construct(KalturaClient $client = null) - { - parent::__construct($client); - } - - /** - * Add new Category - * - * @param KalturaCategory $category - * @return KalturaCategory - */ - function add(KalturaCategory $category) - { - $kparams = array(); - $this->client->addParam($kparams, "category", $category->toParams()); - $this->client->queueServiceActionCall("category", "add", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaCategory"); - return $resultObject; - } - - /** - * Get Category by id - * - * @param int $id - * @return KalturaCategory - */ - function get($id) - { - $kparams = array(); - $this->client->addParam($kparams, "id", $id); - $this->client->queueServiceActionCall("category", "get", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaCategory"); - return $resultObject; - } - - /** - * Update Category - * - * @param int $id - * @param KalturaCategory $category - * @return KalturaCategory - */ - function update($id, KalturaCategory $category) - { - $kparams = array(); - $this->client->addParam($kparams, "id", $id); - $this->client->addParam($kparams, "category", $category->toParams()); - $this->client->queueServiceActionCall("category", "update", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaCategory"); - return $resultObject; - } - - /** - * Delete a Category - * - * @param int $id - * @param int $moveEntriesToParentCategory - * @return - */ - function delete($id, $moveEntriesToParentCategory = 1) - { - $kparams = array(); - $this->client->addParam($kparams, "id", $id); - $this->client->addParam($kparams, "moveEntriesToParentCategory", $moveEntriesToParentCategory); - $this->client->queueServiceActionCall("category", "delete", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "null"); - return $resultObject; - } - - /** - * List all categories - * - * @param KalturaCategoryFilter $filter - * @param KalturaFilterPager $pager - * @return KalturaCategoryListResponse - */ - function listAction(KalturaCategoryFilter $filter = null, KalturaFilterPager $pager = null) - { - $kparams = array(); - if ($filter !== null) - $this->client->addParam($kparams, "filter", $filter->toParams()); - if ($pager !== null) - $this->client->addParam($kparams, "pager", $pager->toParams()); - $this->client->queueServiceActionCall("category", "list", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaCategoryListResponse"); - return $resultObject; - } - - /** - * Index Category by id - * - * @param int $id - * @param bool $shouldUpdate - * @return int - */ - function index($id, $shouldUpdate = true) - { - $kparams = array(); - $this->client->addParam($kparams, "id", $id); - $this->client->addParam($kparams, "shouldUpdate", $shouldUpdate); - $this->client->queueServiceActionCall("category", "index", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "integer"); - return $resultObject; - } - - /** - * Move categories that belong to the same parent category to a target categroy - enabled only for ks with disable entitlement - * - * @param string $categoryIds - * @param int $targetCategoryParentId - * @return KalturaCategoryListResponse - */ - function move($categoryIds, $targetCategoryParentId) - { - $kparams = array(); - $this->client->addParam($kparams, "categoryIds", $categoryIds); - $this->client->addParam($kparams, "targetCategoryParentId", $targetCategoryParentId); - $this->client->queueServiceActionCall("category", "move", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaCategoryListResponse"); - return $resultObject; - } - - /** - * Unlock categories - * - * @return - */ - function unlockCategories() - { - $kparams = array(); - $this->client->queueServiceActionCall("category", "unlockCategories", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "null"); - return $resultObject; - } - - /** - * - * - * @param file $fileData - * @param KalturaBulkUploadJobData $bulkUploadData - * @param KalturaBulkUploadCategoryData $bulkUploadCategoryData - * @return KalturaBulkUpload - */ - function addFromBulkUpload($fileData, KalturaBulkUploadJobData $bulkUploadData = null, KalturaBulkUploadCategoryData $bulkUploadCategoryData = null) - { - $kparams = array(); - $kfiles = array(); - $this->client->addParam($kfiles, "fileData", $fileData); - if ($bulkUploadData !== null) - $this->client->addParam($kparams, "bulkUploadData", $bulkUploadData->toParams()); - if ($bulkUploadCategoryData !== null) - $this->client->addParam($kparams, "bulkUploadCategoryData", $bulkUploadCategoryData->toParams()); - $this->client->queueServiceActionCall("category", "addFromBulkUpload", $kparams, $kfiles); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaBulkUpload"); - return $resultObject; - } -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaCategoryUserService extends KalturaServiceBase -{ - function __construct(KalturaClient $client = null) - { - parent::__construct($client); - } - - /** - * Add new CategoryUser - * - * @param KalturaCategoryUser $categoryUser - * @return KalturaCategoryUser - */ - function add(KalturaCategoryUser $categoryUser) - { - $kparams = array(); - $this->client->addParam($kparams, "categoryUser", $categoryUser->toParams()); - $this->client->queueServiceActionCall("categoryuser", "add", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaCategoryUser"); - return $resultObject; - } - - /** - * Get CategoryUser by id - * - * @param int $categoryId - * @param string $userId - * @return KalturaCategoryUser - */ - function get($categoryId, $userId) - { - $kparams = array(); - $this->client->addParam($kparams, "categoryId", $categoryId); - $this->client->addParam($kparams, "userId", $userId); - $this->client->queueServiceActionCall("categoryuser", "get", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaCategoryUser"); - return $resultObject; - } - - /** - * Update CategoryUser by id - * - * @param int $categoryId - * @param string $userId - * @param KalturaCategoryUser $categoryUser - * @param bool $override - to override manual changes - * @return KalturaCategoryUser - */ - function update($categoryId, $userId, KalturaCategoryUser $categoryUser, $override = false) - { - $kparams = array(); - $this->client->addParam($kparams, "categoryId", $categoryId); - $this->client->addParam($kparams, "userId", $userId); - $this->client->addParam($kparams, "categoryUser", $categoryUser->toParams()); - $this->client->addParam($kparams, "override", $override); - $this->client->queueServiceActionCall("categoryuser", "update", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaCategoryUser"); - return $resultObject; - } - - /** - * Delete a CategoryUser - * - * @param int $categoryId - * @param string $userId - * @return - */ - function delete($categoryId, $userId) - { - $kparams = array(); - $this->client->addParam($kparams, "categoryId", $categoryId); - $this->client->addParam($kparams, "userId", $userId); - $this->client->queueServiceActionCall("categoryuser", "delete", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "null"); - return $resultObject; - } - - /** - * Activate CategoryUser - * - * @param int $categoryId - * @param string $userId - * @return KalturaCategoryUser - */ - function activate($categoryId, $userId) - { - $kparams = array(); - $this->client->addParam($kparams, "categoryId", $categoryId); - $this->client->addParam($kparams, "userId", $userId); - $this->client->queueServiceActionCall("categoryuser", "activate", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaCategoryUser"); - return $resultObject; - } - - /** - * Reject CategoryUser - * - * @param int $categoryId - * @param string $userId - * @return KalturaCategoryUser - */ - function deactivate($categoryId, $userId) - { - $kparams = array(); - $this->client->addParam($kparams, "categoryId", $categoryId); - $this->client->addParam($kparams, "userId", $userId); - $this->client->queueServiceActionCall("categoryuser", "deactivate", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaCategoryUser"); - return $resultObject; - } - - /** - * List all categories - * - * @param KalturaCategoryUserFilter $filter - * @param KalturaFilterPager $pager - * @return KalturaCategoryUserListResponse - */ - function listAction(KalturaCategoryUserFilter $filter = null, KalturaFilterPager $pager = null) - { - $kparams = array(); - if ($filter !== null) - $this->client->addParam($kparams, "filter", $filter->toParams()); - if ($pager !== null) - $this->client->addParam($kparams, "pager", $pager->toParams()); - $this->client->queueServiceActionCall("categoryuser", "list", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaCategoryUserListResponse"); - return $resultObject; - } - - /** - * Copy all memeber from parent category - * - * @param int $categoryId - * @return - */ - function copyFromCategory($categoryId) - { - $kparams = array(); - $this->client->addParam($kparams, "categoryId", $categoryId); - $this->client->queueServiceActionCall("categoryuser", "copyFromCategory", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "null"); - return $resultObject; - } - - /** - * Index CategoryUser by userid and category id - * - * @param string $userId - * @param int $categoryId - * @param bool $shouldUpdate - * @return int - */ - function index($userId, $categoryId, $shouldUpdate = true) - { - $kparams = array(); - $this->client->addParam($kparams, "userId", $userId); - $this->client->addParam($kparams, "categoryId", $categoryId); - $this->client->addParam($kparams, "shouldUpdate", $shouldUpdate); - $this->client->queueServiceActionCall("categoryuser", "index", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "integer"); - return $resultObject; - } - - /** - * - * - * @param file $fileData - * @param KalturaBulkUploadJobData $bulkUploadData - * @param KalturaBulkUploadCategoryUserData $bulkUploadCategoryUserData - * @return KalturaBulkUpload - */ - function addFromBulkUpload($fileData, KalturaBulkUploadJobData $bulkUploadData = null, KalturaBulkUploadCategoryUserData $bulkUploadCategoryUserData = null) - { - $kparams = array(); - $kfiles = array(); - $this->client->addParam($kfiles, "fileData", $fileData); - if ($bulkUploadData !== null) - $this->client->addParam($kparams, "bulkUploadData", $bulkUploadData->toParams()); - if ($bulkUploadCategoryUserData !== null) - $this->client->addParam($kparams, "bulkUploadCategoryUserData", $bulkUploadCategoryUserData->toParams()); - $this->client->queueServiceActionCall("categoryuser", "addFromBulkUpload", $kparams, $kfiles); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaBulkUpload"); - return $resultObject; - } -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaConversionProfileAssetParamsService extends KalturaServiceBase -{ - function __construct(KalturaClient $client = null) - { - parent::__construct($client); - } - - /** - * Lists asset parmas of conversion profile by ID - * - * @param KalturaConversionProfileAssetParamsFilter $filter - * @param KalturaFilterPager $pager - * @return KalturaConversionProfileAssetParamsListResponse - */ - function listAction(KalturaConversionProfileAssetParamsFilter $filter = null, KalturaFilterPager $pager = null) - { - $kparams = array(); - if ($filter !== null) - $this->client->addParam($kparams, "filter", $filter->toParams()); - if ($pager !== null) - $this->client->addParam($kparams, "pager", $pager->toParams()); - $this->client->queueServiceActionCall("conversionprofileassetparams", "list", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaConversionProfileAssetParamsListResponse"); - return $resultObject; - } - - /** - * Update asset parmas of conversion profile by ID - * - * @param int $conversionProfileId - * @param int $assetParamsId - * @param KalturaConversionProfileAssetParams $conversionProfileAssetParams - * @return KalturaConversionProfileAssetParams - */ - function update($conversionProfileId, $assetParamsId, KalturaConversionProfileAssetParams $conversionProfileAssetParams) - { - $kparams = array(); - $this->client->addParam($kparams, "conversionProfileId", $conversionProfileId); - $this->client->addParam($kparams, "assetParamsId", $assetParamsId); - $this->client->addParam($kparams, "conversionProfileAssetParams", $conversionProfileAssetParams->toParams()); - $this->client->queueServiceActionCall("conversionprofileassetparams", "update", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaConversionProfileAssetParams"); - return $resultObject; - } -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaConversionProfileService extends KalturaServiceBase -{ - function __construct(KalturaClient $client = null) - { - parent::__construct($client); - } - - /** - * Set Conversion Profile to be the partner default - * - * @param int $id - * @return KalturaConversionProfile - */ - function setAsDefault($id) - { - $kparams = array(); - $this->client->addParam($kparams, "id", $id); - $this->client->queueServiceActionCall("conversionprofile", "setAsDefault", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaConversionProfile"); - return $resultObject; - } - - /** - * Get the partner's default conversion profile - * - * @param string $type - * @return KalturaConversionProfile - */ - function getDefault($type = null) - { - $kparams = array(); - $this->client->addParam($kparams, "type", $type); - $this->client->queueServiceActionCall("conversionprofile", "getDefault", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaConversionProfile"); - return $resultObject; - } - - /** - * Add new Conversion Profile - * - * @param KalturaConversionProfile $conversionProfile - * @return KalturaConversionProfile - */ - function add(KalturaConversionProfile $conversionProfile) - { - $kparams = array(); - $this->client->addParam($kparams, "conversionProfile", $conversionProfile->toParams()); - $this->client->queueServiceActionCall("conversionprofile", "add", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaConversionProfile"); - return $resultObject; - } - - /** - * Get Conversion Profile by ID - * - * @param int $id - * @return KalturaConversionProfile - */ - function get($id) - { - $kparams = array(); - $this->client->addParam($kparams, "id", $id); - $this->client->queueServiceActionCall("conversionprofile", "get", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaConversionProfile"); - return $resultObject; - } - - /** - * Update Conversion Profile by ID - * - * @param int $id - * @param KalturaConversionProfile $conversionProfile - * @return KalturaConversionProfile - */ - function update($id, KalturaConversionProfile $conversionProfile) - { - $kparams = array(); - $this->client->addParam($kparams, "id", $id); - $this->client->addParam($kparams, "conversionProfile", $conversionProfile->toParams()); - $this->client->queueServiceActionCall("conversionprofile", "update", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaConversionProfile"); - return $resultObject; - } - - /** - * Delete Conversion Profile by ID - * - * @param int $id - * @return - */ - function delete($id) - { - $kparams = array(); - $this->client->addParam($kparams, "id", $id); - $this->client->queueServiceActionCall("conversionprofile", "delete", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "null"); - return $resultObject; - } - - /** - * List Conversion Profiles by filter with paging support - * - * @param KalturaConversionProfileFilter $filter - * @param KalturaFilterPager $pager - * @return KalturaConversionProfileListResponse - */ - function listAction(KalturaConversionProfileFilter $filter = null, KalturaFilterPager $pager = null) - { - $kparams = array(); - if ($filter !== null) - $this->client->addParam($kparams, "filter", $filter->toParams()); - if ($pager !== null) - $this->client->addParam($kparams, "pager", $pager->toParams()); - $this->client->queueServiceActionCall("conversionprofile", "list", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaConversionProfileListResponse"); - return $resultObject; - } -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaDataService extends KalturaServiceBase -{ - function __construct(KalturaClient $client = null) - { - parent::__construct($client); - } - - /** - * Adds a new data entry - * - * @param KalturaDataEntry $dataEntry Data entry - * @return KalturaDataEntry - */ - function add(KalturaDataEntry $dataEntry) - { - $kparams = array(); - $this->client->addParam($kparams, "dataEntry", $dataEntry->toParams()); - $this->client->queueServiceActionCall("data", "add", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaDataEntry"); - return $resultObject; - } - - /** - * Get data entry by ID. - * - * @param string $entryId Data entry id - * @param int $version Desired version of the data - * @return KalturaDataEntry - */ - function get($entryId, $version = -1) - { - $kparams = array(); - $this->client->addParam($kparams, "entryId", $entryId); - $this->client->addParam($kparams, "version", $version); - $this->client->queueServiceActionCall("data", "get", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaDataEntry"); - return $resultObject; - } - - /** - * Update data entry. Only the properties that were set will be updated. - * - * @param string $entryId Data entry id to update - * @param KalturaDataEntry $documentEntry Data entry metadata to update - * @return KalturaDataEntry - */ - function update($entryId, KalturaDataEntry $documentEntry) - { - $kparams = array(); - $this->client->addParam($kparams, "entryId", $entryId); - $this->client->addParam($kparams, "documentEntry", $documentEntry->toParams()); - $this->client->queueServiceActionCall("data", "update", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaDataEntry"); - return $resultObject; - } - - /** - * Delete a data entry. - * - * @param string $entryId Data entry id to delete - * @return - */ - function delete($entryId) - { - $kparams = array(); - $this->client->addParam($kparams, "entryId", $entryId); - $this->client->queueServiceActionCall("data", "delete", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "null"); - return $resultObject; - } - - /** - * List data entries by filter with paging support. - * - * @param KalturaDataEntryFilter $filter Document entry filter - * @param KalturaFilterPager $pager Pager - * @return KalturaDataListResponse - */ - function listAction(KalturaDataEntryFilter $filter = null, KalturaFilterPager $pager = null) - { - $kparams = array(); - if ($filter !== null) - $this->client->addParam($kparams, "filter", $filter->toParams()); - if ($pager !== null) - $this->client->addParam($kparams, "pager", $pager->toParams()); - $this->client->queueServiceActionCall("data", "list", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaDataListResponse"); - return $resultObject; - } - - /** - * Serve action returan the file from dataContent field. - * - * @param string $entryId Data entry id - * @param int $version Desired version of the data - * @param bool $forceProxy Force to get the content without redirect - * @return file - */ - function serve($entryId, $version = -1, $forceProxy = false) - { - $kparams = array(); - $this->client->addParam($kparams, "entryId", $entryId); - $this->client->addParam($kparams, "version", $version); - $this->client->addParam($kparams, "forceProxy", $forceProxy); - $this->client->queueServiceActionCall("data", "serve", $kparams); - if(!$this->client->getDestinationPath() && !$this->client->getReturnServedResult()) - return $this->client->getServeUrl(); - return $this->client->doQueue(); - } -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaDocumentService extends KalturaServiceBase -{ - function __construct(KalturaClient $client = null) - { - parent::__construct($client); - } - - /** - * Add new document entry after the specific document file was uploaded and the upload token id exists - * - * @param KalturaDocumentEntry $documentEntry Document entry metadata - * @param string $uploadTokenId Upload token id - * @return KalturaDocumentEntry - */ - function addFromUploadedFile(KalturaDocumentEntry $documentEntry, $uploadTokenId) - { - $kparams = array(); - $this->client->addParam($kparams, "documentEntry", $documentEntry->toParams()); - $this->client->addParam($kparams, "uploadTokenId", $uploadTokenId); - $this->client->queueServiceActionCall("document", "addFromUploadedFile", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaDocumentEntry"); - return $resultObject; - } - - /** - * Copy entry into new entry - * - * @param string $sourceEntryId Document entry id to copy from - * @param KalturaDocumentEntry $documentEntry Document entry metadata - * @param int $sourceFlavorParamsId The flavor to be used as the new entry source, source flavor will be used if not specified - * @return KalturaDocumentEntry - */ - function addFromEntry($sourceEntryId, KalturaDocumentEntry $documentEntry = null, $sourceFlavorParamsId = null) - { - $kparams = array(); - $this->client->addParam($kparams, "sourceEntryId", $sourceEntryId); - if ($documentEntry !== null) - $this->client->addParam($kparams, "documentEntry", $documentEntry->toParams()); - $this->client->addParam($kparams, "sourceFlavorParamsId", $sourceFlavorParamsId); - $this->client->queueServiceActionCall("document", "addFromEntry", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaDocumentEntry"); - return $resultObject; - } - - /** - * Copy flavor asset into new entry - * - * @param string $sourceFlavorAssetId Flavor asset id to be used as the new entry source - * @param KalturaDocumentEntry $documentEntry Document entry metadata - * @return KalturaDocumentEntry - */ - function addFromFlavorAsset($sourceFlavorAssetId, KalturaDocumentEntry $documentEntry = null) - { - $kparams = array(); - $this->client->addParam($kparams, "sourceFlavorAssetId", $sourceFlavorAssetId); - if ($documentEntry !== null) - $this->client->addParam($kparams, "documentEntry", $documentEntry->toParams()); - $this->client->queueServiceActionCall("document", "addFromFlavorAsset", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaDocumentEntry"); - return $resultObject; - } - - /** - * Convert entry - * - * @param string $entryId Document entry id - * @param int $conversionProfileId - * @param array $dynamicConversionAttributes - * @return int - */ - function convert($entryId, $conversionProfileId = null, array $dynamicConversionAttributes = null) - { - $kparams = array(); - $this->client->addParam($kparams, "entryId", $entryId); - $this->client->addParam($kparams, "conversionProfileId", $conversionProfileId); - if ($dynamicConversionAttributes !== null) - foreach($dynamicConversionAttributes as $index => $obj) - { - $this->client->addParam($kparams, "dynamicConversionAttributes:$index", $obj->toParams()); - } - $this->client->queueServiceActionCall("document", "convert", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "integer"); - return $resultObject; - } - - /** - * Get document entry by ID. - * - * @param string $entryId Document entry id - * @param int $version Desired version of the data - * @return KalturaDocumentEntry - */ - function get($entryId, $version = -1) - { - $kparams = array(); - $this->client->addParam($kparams, "entryId", $entryId); - $this->client->addParam($kparams, "version", $version); - $this->client->queueServiceActionCall("document", "get", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaDocumentEntry"); - return $resultObject; - } - - /** - * Update document entry. Only the properties that were set will be updated. - * - * @param string $entryId Document entry id to update - * @param KalturaDocumentEntry $documentEntry Document entry metadata to update - * @return KalturaDocumentEntry - */ - function update($entryId, KalturaDocumentEntry $documentEntry) - { - $kparams = array(); - $this->client->addParam($kparams, "entryId", $entryId); - $this->client->addParam($kparams, "documentEntry", $documentEntry->toParams()); - $this->client->queueServiceActionCall("document", "update", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaDocumentEntry"); - return $resultObject; - } - - /** - * Delete a document entry. - * - * @param string $entryId Document entry id to delete - * @return - */ - function delete($entryId) - { - $kparams = array(); - $this->client->addParam($kparams, "entryId", $entryId); - $this->client->queueServiceActionCall("document", "delete", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "null"); - return $resultObject; - } - - /** - * List document entries by filter with paging support. - * - * @param KalturaDocumentEntryFilter $filter Document entry filter - * @param KalturaFilterPager $pager Pager - * @return KalturaDocumentListResponse - */ - function listAction(KalturaDocumentEntryFilter $filter = null, KalturaFilterPager $pager = null) - { - $kparams = array(); - if ($filter !== null) - $this->client->addParam($kparams, "filter", $filter->toParams()); - if ($pager !== null) - $this->client->addParam($kparams, "pager", $pager->toParams()); - $this->client->queueServiceActionCall("document", "list", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaDocumentListResponse"); - return $resultObject; - } - - /** - * Upload a document file to Kaltura, then the file can be used to create a document entry. - * - * @param file $fileData The file data - * @return string - */ - function upload($fileData) - { - $kparams = array(); - $kfiles = array(); - $this->client->addParam($kfiles, "fileData", $fileData); - $this->client->queueServiceActionCall("document", "upload", $kparams, $kfiles); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "string"); - return $resultObject; - } - - /** - * This will queue a batch job for converting the document file to swf - Returns the URL where the new swf will be available - * - * @param string $entryId - * @return string - */ - function convertPptToSwf($entryId) - { - $kparams = array(); - $this->client->addParam($kparams, "entryId", $entryId); - $this->client->queueServiceActionCall("document", "convertPptToSwf", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "string"); - return $resultObject; - } - - /** - * Serves the file content - * - * @param string $entryId Document entry id - * @param string $flavorAssetId Flavor asset id - * @param bool $forceProxy Force to get the content without redirect - * @return file - */ - function serve($entryId, $flavorAssetId = null, $forceProxy = false) - { - $kparams = array(); - $this->client->addParam($kparams, "entryId", $entryId); - $this->client->addParam($kparams, "flavorAssetId", $flavorAssetId); - $this->client->addParam($kparams, "forceProxy", $forceProxy); - $this->client->queueServiceActionCall("document", "serve", $kparams); - if(!$this->client->getDestinationPath() && !$this->client->getReturnServedResult()) - return $this->client->getServeUrl(); - return $this->client->doQueue(); - } - - /** - * Serves the file content - * - * @param string $entryId Document entry id - * @param string $flavorParamsId Flavor params id - * @param bool $forceProxy Force to get the content without redirect - * @return file - */ - function serveByFlavorParamsId($entryId, $flavorParamsId = null, $forceProxy = false) - { - $kparams = array(); - $this->client->addParam($kparams, "entryId", $entryId); - $this->client->addParam($kparams, "flavorParamsId", $flavorParamsId); - $this->client->addParam($kparams, "forceProxy", $forceProxy); - $this->client->queueServiceActionCall("document", "serveByFlavorParamsId", $kparams); - if(!$this->client->getDestinationPath() && !$this->client->getReturnServedResult()) - return $this->client->getServeUrl(); - return $this->client->doQueue(); - } - - /** - * Replace content associated with the given document entry. - * - * @param string $entryId Document entry id to update - * @param KalturaResource $resource Resource to be used to replace entry doc content - * @param int $conversionProfileId The conversion profile id to be used on the entry - * @return KalturaDocumentEntry - */ - function updateContent($entryId, KalturaResource $resource, $conversionProfileId = null) - { - $kparams = array(); - $this->client->addParam($kparams, "entryId", $entryId); - $this->client->addParam($kparams, "resource", $resource->toParams()); - $this->client->addParam($kparams, "conversionProfileId", $conversionProfileId); - $this->client->queueServiceActionCall("document", "updateContent", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaDocumentEntry"); - return $resultObject; - } - - /** - * Approves document replacement - * - * @param string $entryId Document entry id to replace - * @return KalturaDocumentEntry - */ - function approveReplace($entryId) - { - $kparams = array(); - $this->client->addParam($kparams, "entryId", $entryId); - $this->client->queueServiceActionCall("document", "approveReplace", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaDocumentEntry"); - return $resultObject; - } - - /** - * Cancels document replacement - * - * @param string $entryId Document entry id to cancel - * @return KalturaDocumentEntry - */ - function cancelReplace($entryId) - { - $kparams = array(); - $this->client->addParam($kparams, "entryId", $entryId); - $this->client->queueServiceActionCall("document", "cancelReplace", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaDocumentEntry"); - return $resultObject; - } -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaEmailIngestionProfileService extends KalturaServiceBase -{ - function __construct(KalturaClient $client = null) - { - parent::__construct($client); - } - - /** - * EmailIngestionProfile Add action allows you to add a EmailIngestionProfile to Kaltura DB - * - * @param KalturaEmailIngestionProfile $EmailIP Mandatory input parameter of type KalturaEmailIngestionProfile - * @return KalturaEmailIngestionProfile - */ - function add(KalturaEmailIngestionProfile $EmailIP) - { - $kparams = array(); - $this->client->addParam($kparams, "EmailIP", $EmailIP->toParams()); - $this->client->queueServiceActionCall("emailingestionprofile", "add", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaEmailIngestionProfile"); - return $resultObject; - } - - /** - * Retrieve a EmailIngestionProfile by email address - * - * @param string $emailAddress - * @return KalturaEmailIngestionProfile - */ - function getByEmailAddress($emailAddress) - { - $kparams = array(); - $this->client->addParam($kparams, "emailAddress", $emailAddress); - $this->client->queueServiceActionCall("emailingestionprofile", "getByEmailAddress", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaEmailIngestionProfile"); - return $resultObject; - } - - /** - * Retrieve a EmailIngestionProfile by id - * - * @param int $id - * @return KalturaEmailIngestionProfile - */ - function get($id) - { - $kparams = array(); - $this->client->addParam($kparams, "id", $id); - $this->client->queueServiceActionCall("emailingestionprofile", "get", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaEmailIngestionProfile"); - return $resultObject; - } - - /** - * Update an existing EmailIngestionProfile - * - * @param int $id - * @param KalturaEmailIngestionProfile $EmailIP - * @return KalturaEmailIngestionProfile - */ - function update($id, KalturaEmailIngestionProfile $EmailIP) - { - $kparams = array(); - $this->client->addParam($kparams, "id", $id); - $this->client->addParam($kparams, "EmailIP", $EmailIP->toParams()); - $this->client->queueServiceActionCall("emailingestionprofile", "update", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaEmailIngestionProfile"); - return $resultObject; - } - - /** - * Delete an existing EmailIngestionProfile - * - * @param int $id - * @return - */ - function delete($id) - { - $kparams = array(); - $this->client->addParam($kparams, "id", $id); - $this->client->queueServiceActionCall("emailingestionprofile", "delete", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "null"); - return $resultObject; - } - - /** - * Add KalturaMediaEntry from email ingestion - * - * @param KalturaMediaEntry $mediaEntry Media entry metadata - * @param string $uploadTokenId Upload token id - * @param int $emailProfId - * @param string $fromAddress - * @param string $emailMsgId - * @return KalturaMediaEntry - */ - function addMediaEntry(KalturaMediaEntry $mediaEntry, $uploadTokenId, $emailProfId, $fromAddress, $emailMsgId) - { - $kparams = array(); - $this->client->addParam($kparams, "mediaEntry", $mediaEntry->toParams()); - $this->client->addParam($kparams, "uploadTokenId", $uploadTokenId); - $this->client->addParam($kparams, "emailProfId", $emailProfId); - $this->client->addParam($kparams, "fromAddress", $fromAddress); - $this->client->addParam($kparams, "emailMsgId", $emailMsgId); - $this->client->queueServiceActionCall("emailingestionprofile", "addMediaEntry", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaMediaEntry"); - return $resultObject; - } -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaFileAssetService extends KalturaServiceBase -{ - function __construct(KalturaClient $client = null) - { - parent::__construct($client); - } - - /** - * Add new file asset - * - * @param KalturaFileAsset $fileAsset - * @return KalturaFileAsset - */ - function add(KalturaFileAsset $fileAsset) - { - $kparams = array(); - $this->client->addParam($kparams, "fileAsset", $fileAsset->toParams()); - $this->client->queueServiceActionCall("fileasset", "add", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaFileAsset"); - return $resultObject; - } - - /** - * Get file asset by id - * - * @param int $id - * @return KalturaFileAsset - */ - function get($id) - { - $kparams = array(); - $this->client->addParam($kparams, "id", $id); - $this->client->queueServiceActionCall("fileasset", "get", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaFileAsset"); - return $resultObject; - } - - /** - * Update file asset by id - * - * @param int $id - * @param KalturaFileAsset $fileAsset - * @return KalturaFileAsset - */ - function update($id, KalturaFileAsset $fileAsset) - { - $kparams = array(); - $this->client->addParam($kparams, "id", $id); - $this->client->addParam($kparams, "fileAsset", $fileAsset->toParams()); - $this->client->queueServiceActionCall("fileasset", "update", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaFileAsset"); - return $resultObject; - } - - /** - * Delete file asset by id - * - * @param int $id - * @return - */ - function delete($id) - { - $kparams = array(); - $this->client->addParam($kparams, "id", $id); - $this->client->queueServiceActionCall("fileasset", "delete", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "null"); - return $resultObject; - } - - /** - * Serve file asset by id - * - * @param int $id - * @return file - */ - function serve($id) - { - $kparams = array(); - $this->client->addParam($kparams, "id", $id); - $this->client->queueServiceActionCall("fileasset", "serve", $kparams); - if(!$this->client->getDestinationPath() && !$this->client->getReturnServedResult()) - return $this->client->getServeUrl(); - return $this->client->doQueue(); - } - - /** - * Set content of file asset - * - * @param string $id - * @param KalturaContentResource $contentResource - * @return KalturaFileAsset - */ - function setContent($id, KalturaContentResource $contentResource) - { - $kparams = array(); - $this->client->addParam($kparams, "id", $id); - $this->client->addParam($kparams, "contentResource", $contentResource->toParams()); - $this->client->queueServiceActionCall("fileasset", "setContent", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaFileAsset"); - return $resultObject; - } - - /** - * List file assets by filter and pager - * - * @param KalturaFileAssetFilter $filter - * @param KalturaFilterPager $pager - * @return KalturaFileAssetListResponse - */ - function listAction(KalturaFileAssetFilter $filter, KalturaFilterPager $pager = null) - { - $kparams = array(); - $this->client->addParam($kparams, "filter", $filter->toParams()); - if ($pager !== null) - $this->client->addParam($kparams, "pager", $pager->toParams()); - $this->client->queueServiceActionCall("fileasset", "list", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaFileAssetListResponse"); - return $resultObject; - } -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaFlavorAssetService extends KalturaServiceBase -{ - function __construct(KalturaClient $client = null) - { - parent::__construct($client); - } - - /** - * Add flavor asset - * - * @param string $entryId - * @param KalturaFlavorAsset $flavorAsset - * @return KalturaFlavorAsset - */ - function add($entryId, KalturaFlavorAsset $flavorAsset) - { - $kparams = array(); - $this->client->addParam($kparams, "entryId", $entryId); - $this->client->addParam($kparams, "flavorAsset", $flavorAsset->toParams()); - $this->client->queueServiceActionCall("flavorasset", "add", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaFlavorAsset"); - return $resultObject; - } - - /** - * Update flavor asset - * - * @param string $id - * @param KalturaFlavorAsset $flavorAsset - * @return KalturaFlavorAsset - */ - function update($id, KalturaFlavorAsset $flavorAsset) - { - $kparams = array(); - $this->client->addParam($kparams, "id", $id); - $this->client->addParam($kparams, "flavorAsset", $flavorAsset->toParams()); - $this->client->queueServiceActionCall("flavorasset", "update", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaFlavorAsset"); - return $resultObject; - } - - /** - * Update content of flavor asset - * - * @param string $id - * @param KalturaContentResource $contentResource - * @return KalturaFlavorAsset - */ - function setContent($id, KalturaContentResource $contentResource) - { - $kparams = array(); - $this->client->addParam($kparams, "id", $id); - $this->client->addParam($kparams, "contentResource", $contentResource->toParams()); - $this->client->queueServiceActionCall("flavorasset", "setContent", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaFlavorAsset"); - return $resultObject; - } - - /** - * Get Flavor Asset by ID - * - * @param string $id - * @return KalturaFlavorAsset - */ - function get($id) - { - $kparams = array(); - $this->client->addParam($kparams, "id", $id); - $this->client->queueServiceActionCall("flavorasset", "get", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaFlavorAsset"); - return $resultObject; - } - - /** - * Get Flavor Assets for Entry - * - * @param string $entryId - * @return array - */ - function getByEntryId($entryId) - { - $kparams = array(); - $this->client->addParam($kparams, "entryId", $entryId); - $this->client->queueServiceActionCall("flavorasset", "getByEntryId", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "array"); - return $resultObject; - } - - /** - * List Flavor Assets by filter and pager - * - * @param KalturaAssetFilter $filter - * @param KalturaFilterPager $pager - * @return KalturaFlavorAssetListResponse - */ - function listAction(KalturaAssetFilter $filter = null, KalturaFilterPager $pager = null) - { - $kparams = array(); - if ($filter !== null) - $this->client->addParam($kparams, "filter", $filter->toParams()); - if ($pager !== null) - $this->client->addParam($kparams, "pager", $pager->toParams()); - $this->client->queueServiceActionCall("flavorasset", "list", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaFlavorAssetListResponse"); - return $resultObject; - } - - /** - * Get web playable Flavor Assets for Entry - * - * @param string $entryId - * @return array - */ - function getWebPlayableByEntryId($entryId) - { - $kparams = array(); - $this->client->addParam($kparams, "entryId", $entryId); - $this->client->queueServiceActionCall("flavorasset", "getWebPlayableByEntryId", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "array"); - return $resultObject; - } - - /** - * Add and convert new Flavor Asset for Entry with specific Flavor Params - * - * @param string $entryId - * @param int $flavorParamsId - * @param int $priority - * @return - */ - function convert($entryId, $flavorParamsId, $priority = 0) - { - $kparams = array(); - $this->client->addParam($kparams, "entryId", $entryId); - $this->client->addParam($kparams, "flavorParamsId", $flavorParamsId); - $this->client->addParam($kparams, "priority", $priority); - $this->client->queueServiceActionCall("flavorasset", "convert", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "null"); - return $resultObject; - } - - /** - * Reconvert Flavor Asset by ID - * - * @param string $id Flavor Asset ID - * @return - */ - function reconvert($id) - { - $kparams = array(); - $this->client->addParam($kparams, "id", $id); - $this->client->queueServiceActionCall("flavorasset", "reconvert", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "null"); - return $resultObject; - } - - /** - * Delete Flavor Asset by ID - * - * @param string $id - * @return - */ - function delete($id) - { - $kparams = array(); - $this->client->addParam($kparams, "id", $id); - $this->client->queueServiceActionCall("flavorasset", "delete", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "null"); - return $resultObject; - } - - /** - * Get download URL for the asset - * - * @param string $id - * @param int $storageId - * @param bool $forceProxy - * @return string - */ - function getUrl($id, $storageId = null, $forceProxy = false) - { - $kparams = array(); - $this->client->addParam($kparams, "id", $id); - $this->client->addParam($kparams, "storageId", $storageId); - $this->client->addParam($kparams, "forceProxy", $forceProxy); - $this->client->queueServiceActionCall("flavorasset", "getUrl", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "string"); - return $resultObject; - } - - /** - * Get remote storage existing paths for the asset - * - * @param string $id - * @return KalturaRemotePathListResponse - */ - function getRemotePaths($id) - { - $kparams = array(); - $this->client->addParam($kparams, "id", $id); - $this->client->queueServiceActionCall("flavorasset", "getRemotePaths", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaRemotePathListResponse"); - return $resultObject; - } - - /** - * Get download URL for the Flavor Asset - * - * @param string $id - * @param bool $useCdn - * @return string - */ - function getDownloadUrl($id, $useCdn = false) - { - $kparams = array(); - $this->client->addParam($kparams, "id", $id); - $this->client->addParam($kparams, "useCdn", $useCdn); - $this->client->queueServiceActionCall("flavorasset", "getDownloadUrl", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "string"); - return $resultObject; - } - - /** - * Get Flavor Asset with the relevant Flavor Params (Flavor Params can exist without Flavor Asset & vice versa) - * - * @param string $entryId - * @return array - */ - function getFlavorAssetsWithParams($entryId) - { - $kparams = array(); - $this->client->addParam($kparams, "entryId", $entryId); - $this->client->queueServiceActionCall("flavorasset", "getFlavorAssetsWithParams", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "array"); - return $resultObject; - } - - /** - * Manually export an asset - * - * @param string $assetId - * @param int $storageProfileId - * @return KalturaFlavorAsset - */ - function export($assetId, $storageProfileId) - { - $kparams = array(); - $this->client->addParam($kparams, "assetId", $assetId); - $this->client->addParam($kparams, "storageProfileId", $storageProfileId); - $this->client->queueServiceActionCall("flavorasset", "export", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaFlavorAsset"); - return $resultObject; - } - - /** - * Set a given flavor as the original flavor - * - * @param string $assetId - * @return - */ - function setAsSource($assetId) - { - $kparams = array(); - $this->client->addParam($kparams, "assetId", $assetId); - $this->client->queueServiceActionCall("flavorasset", "setAsSource", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "null"); - return $resultObject; - } -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaFlavorParamsOutputService extends KalturaServiceBase -{ - function __construct(KalturaClient $client = null) - { - parent::__construct($client); - } - - /** - * Get flavor params output object by ID - * - * @param int $id - * @return KalturaFlavorParamsOutput - */ - function get($id) - { - $kparams = array(); - $this->client->addParam($kparams, "id", $id); - $this->client->queueServiceActionCall("flavorparamsoutput", "get", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaFlavorParamsOutput"); - return $resultObject; - } - - /** - * List flavor params output objects by filter and pager - * - * @param KalturaFlavorParamsOutputFilter $filter - * @param KalturaFilterPager $pager - * @return KalturaFlavorParamsOutputListResponse - */ - function listAction(KalturaFlavorParamsOutputFilter $filter = null, KalturaFilterPager $pager = null) - { - $kparams = array(); - if ($filter !== null) - $this->client->addParam($kparams, "filter", $filter->toParams()); - if ($pager !== null) - $this->client->addParam($kparams, "pager", $pager->toParams()); - $this->client->queueServiceActionCall("flavorparamsoutput", "list", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaFlavorParamsOutputListResponse"); - return $resultObject; - } -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaFlavorParamsService extends KalturaServiceBase -{ - function __construct(KalturaClient $client = null) - { - parent::__construct($client); - } - - /** - * Add new Flavor Params - * - * @param KalturaFlavorParams $flavorParams - * @return KalturaFlavorParams - */ - function add(KalturaFlavorParams $flavorParams) - { - $kparams = array(); - $this->client->addParam($kparams, "flavorParams", $flavorParams->toParams()); - $this->client->queueServiceActionCall("flavorparams", "add", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaFlavorParams"); - return $resultObject; - } - - /** - * Get Flavor Params by ID - * - * @param int $id - * @return KalturaFlavorParams - */ - function get($id) - { - $kparams = array(); - $this->client->addParam($kparams, "id", $id); - $this->client->queueServiceActionCall("flavorparams", "get", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaFlavorParams"); - return $resultObject; - } - - /** - * Update Flavor Params by ID - * - * @param int $id - * @param KalturaFlavorParams $flavorParams - * @return KalturaFlavorParams - */ - function update($id, KalturaFlavorParams $flavorParams) - { - $kparams = array(); - $this->client->addParam($kparams, "id", $id); - $this->client->addParam($kparams, "flavorParams", $flavorParams->toParams()); - $this->client->queueServiceActionCall("flavorparams", "update", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaFlavorParams"); - return $resultObject; - } - - /** - * Delete Flavor Params by ID - * - * @param int $id - * @return - */ - function delete($id) - { - $kparams = array(); - $this->client->addParam($kparams, "id", $id); - $this->client->queueServiceActionCall("flavorparams", "delete", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "null"); - return $resultObject; - } - - /** - * List Flavor Params by filter with paging support (By default - all system default params will be listed too) - * - * @param KalturaFlavorParamsFilter $filter - * @param KalturaFilterPager $pager - * @return KalturaFlavorParamsListResponse - */ - function listAction(KalturaFlavorParamsFilter $filter = null, KalturaFilterPager $pager = null) - { - $kparams = array(); - if ($filter !== null) - $this->client->addParam($kparams, "filter", $filter->toParams()); - if ($pager !== null) - $this->client->addParam($kparams, "pager", $pager->toParams()); - $this->client->queueServiceActionCall("flavorparams", "list", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaFlavorParamsListResponse"); - return $resultObject; - } - - /** - * Get Flavor Params by Conversion Profile ID - * - * @param int $conversionProfileId - * @return array - */ - function getByConversionProfileId($conversionProfileId) - { - $kparams = array(); - $this->client->addParam($kparams, "conversionProfileId", $conversionProfileId); - $this->client->queueServiceActionCall("flavorparams", "getByConversionProfileId", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "array"); - return $resultObject; - } -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaLiveChannelSegmentService extends KalturaServiceBase -{ - function __construct(KalturaClient $client = null) - { - parent::__construct($client); - } - - /** - * Add new live channel segment - * - * @param KalturaLiveChannelSegment $liveChannelSegment - * @return KalturaLiveChannelSegment - */ - function add(KalturaLiveChannelSegment $liveChannelSegment) - { - $kparams = array(); - $this->client->addParam($kparams, "liveChannelSegment", $liveChannelSegment->toParams()); - $this->client->queueServiceActionCall("livechannelsegment", "add", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaLiveChannelSegment"); - return $resultObject; - } - - /** - * Get live channel segment by id - * - * @param int $id - * @return KalturaLiveChannelSegment - */ - function get($id) - { - $kparams = array(); - $this->client->addParam($kparams, "id", $id); - $this->client->queueServiceActionCall("livechannelsegment", "get", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaLiveChannelSegment"); - return $resultObject; - } - - /** - * Update live channel segment by id - * - * @param int $id - * @param KalturaLiveChannelSegment $liveChannelSegment - * @return KalturaLiveChannelSegment - */ - function update($id, KalturaLiveChannelSegment $liveChannelSegment) - { - $kparams = array(); - $this->client->addParam($kparams, "id", $id); - $this->client->addParam($kparams, "liveChannelSegment", $liveChannelSegment->toParams()); - $this->client->queueServiceActionCall("livechannelsegment", "update", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaLiveChannelSegment"); - return $resultObject; - } - - /** - * Delete live channel segment by id - * - * @param int $id - * @return - */ - function delete($id) - { - $kparams = array(); - $this->client->addParam($kparams, "id", $id); - $this->client->queueServiceActionCall("livechannelsegment", "delete", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "null"); - return $resultObject; - } - - /** - * List live channel segments by filter and pager - * - * @param KalturaLiveChannelSegmentFilter $filter - * @param KalturaFilterPager $pager - * @return KalturaLiveChannelSegmentListResponse - */ - function listAction(KalturaLiveChannelSegmentFilter $filter = null, KalturaFilterPager $pager = null) - { - $kparams = array(); - if ($filter !== null) - $this->client->addParam($kparams, "filter", $filter->toParams()); - if ($pager !== null) - $this->client->addParam($kparams, "pager", $pager->toParams()); - $this->client->queueServiceActionCall("livechannelsegment", "list", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaLiveChannelSegmentListResponse"); - return $resultObject; - } -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaLiveChannelService extends KalturaServiceBase -{ - function __construct(KalturaClient $client = null) - { - parent::__construct($client); - } - - /** - * Adds new live channel. - * - * @param KalturaLiveChannel $liveChannel Live channel metadata - * @return KalturaLiveChannel - */ - function add(KalturaLiveChannel $liveChannel) - { - $kparams = array(); - $this->client->addParam($kparams, "liveChannel", $liveChannel->toParams()); - $this->client->queueServiceActionCall("livechannel", "add", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaLiveChannel"); - return $resultObject; - } - - /** - * Get live channel by ID. - * - * @param string $id Live channel id - * @return KalturaLiveChannel - */ - function get($id) - { - $kparams = array(); - $this->client->addParam($kparams, "id", $id); - $this->client->queueServiceActionCall("livechannel", "get", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaLiveChannel"); - return $resultObject; - } - - /** - * Update live channel. Only the properties that were set will be updated. - * - * @param string $id Live channel id to update - * @param KalturaLiveChannel $liveChannel Live channel metadata to update - * @return KalturaLiveChannel - */ - function update($id, KalturaLiveChannel $liveChannel) - { - $kparams = array(); - $this->client->addParam($kparams, "id", $id); - $this->client->addParam($kparams, "liveChannel", $liveChannel->toParams()); - $this->client->queueServiceActionCall("livechannel", "update", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaLiveChannel"); - return $resultObject; - } - - /** - * Delete a live channel. - * - * @param string $id Live channel id to delete - * @return - */ - function delete($id) - { - $kparams = array(); - $this->client->addParam($kparams, "id", $id); - $this->client->queueServiceActionCall("livechannel", "delete", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "null"); - return $resultObject; - } - - /** - * List live channels by filter with paging support. - * - * @param KalturaLiveChannelFilter $filter Live channel filter - * @param KalturaFilterPager $pager Pager - * @return KalturaLiveChannelListResponse - */ - function listAction(KalturaLiveChannelFilter $filter = null, KalturaFilterPager $pager = null) - { - $kparams = array(); - if ($filter !== null) - $this->client->addParam($kparams, "filter", $filter->toParams()); - if ($pager !== null) - $this->client->addParam($kparams, "pager", $pager->toParams()); - $this->client->queueServiceActionCall("livechannel", "list", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaLiveChannelListResponse"); - return $resultObject; - } - - /** - * Delivering the status of a live channel (on-air/offline) - * - * @param string $id ID of the live channel - * @return bool - */ - function isLive($id) - { - $kparams = array(); - $this->client->addParam($kparams, "id", $id); - $this->client->queueServiceActionCall("livechannel", "isLive", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $resultObject = (bool) $resultObject; - return $resultObject; - } - - /** - * Append recorded video to live entry - * - * @param string $entryId Live entry id - * @param int $mediaServerIndex - * @param KalturaServerFileResource $resource - * @param float $duration - * @return - */ - function appendRecording($entryId, $mediaServerIndex, KalturaServerFileResource $resource, $duration) - { - $kparams = array(); - $this->client->addParam($kparams, "entryId", $entryId); - $this->client->addParam($kparams, "mediaServerIndex", $mediaServerIndex); - $this->client->addParam($kparams, "resource", $resource->toParams()); - $this->client->addParam($kparams, "duration", $duration); - $this->client->queueServiceActionCall("livechannel", "appendRecording", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "null"); - return $resultObject; - } - - /** - * Register media server to live entry - * - * @param string $entryId Live entry id - * @param string $hostname Media server host name - * @param int $mediaServerIndex Media server index primary / secondary - * @return KalturaLiveEntry - */ - function registerMediaServer($entryId, $hostname, $mediaServerIndex) - { - $kparams = array(); - $this->client->addParam($kparams, "entryId", $entryId); - $this->client->addParam($kparams, "hostname", $hostname); - $this->client->addParam($kparams, "mediaServerIndex", $mediaServerIndex); - $this->client->queueServiceActionCall("livechannel", "registerMediaServer", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaLiveEntry"); - return $resultObject; - } - - /** - * Unregister media server from live entry - * - * @param string $entryId Live entry id - * @param string $hostname Media server host name - * @param int $mediaServerIndex Media server index primary / secondary - * @return KalturaLiveEntry - */ - function unregisterMediaServer($entryId, $hostname, $mediaServerIndex) - { - $kparams = array(); - $this->client->addParam($kparams, "entryId", $entryId); - $this->client->addParam($kparams, "hostname", $hostname); - $this->client->addParam($kparams, "mediaServerIndex", $mediaServerIndex); - $this->client->queueServiceActionCall("livechannel", "unregisterMediaServer", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaLiveEntry"); - return $resultObject; - } - - /** - * Validates all registered media servers - * - * @param string $entryId Live entry id - * @return - */ - function validateRegisteredMediaServers($entryId) - { - $kparams = array(); - $this->client->addParam($kparams, "entryId", $entryId); - $this->client->queueServiceActionCall("livechannel", "validateRegisteredMediaServers", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "null"); - return $resultObject; - } -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaLiveStreamService extends KalturaServiceBase -{ - function __construct(KalturaClient $client = null) - { - parent::__construct($client); - } - - /** - * Adds new live stream entry. - The entry will be queued for provision. - * - * @param KalturaLiveStreamEntry $liveStreamEntry Live stream entry metadata - * @param string $sourceType Live stream source type - * @return KalturaLiveStreamEntry - */ - function add(KalturaLiveStreamEntry $liveStreamEntry, $sourceType = null) - { - $kparams = array(); - $this->client->addParam($kparams, "liveStreamEntry", $liveStreamEntry->toParams()); - $this->client->addParam($kparams, "sourceType", $sourceType); - $this->client->queueServiceActionCall("livestream", "add", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaLiveStreamEntry"); - return $resultObject; - } - - /** - * Get live stream entry by ID. - * - * @param string $entryId Live stream entry id - * @param int $version Desired version of the data - * @return KalturaLiveStreamEntry - */ - function get($entryId, $version = -1) - { - $kparams = array(); - $this->client->addParam($kparams, "entryId", $entryId); - $this->client->addParam($kparams, "version", $version); - $this->client->queueServiceActionCall("livestream", "get", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaLiveStreamEntry"); - return $resultObject; - } - - /** - * Authenticate live-stream entry against stream token and partner limitations - * - * @param string $entryId Live stream entry id - * @param string $token Live stream broadcasting token - * @return KalturaLiveStreamEntry - */ - function authenticate($entryId, $token) - { - $kparams = array(); - $this->client->addParam($kparams, "entryId", $entryId); - $this->client->addParam($kparams, "token", $token); - $this->client->queueServiceActionCall("livestream", "authenticate", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaLiveStreamEntry"); - return $resultObject; - } - - /** - * Update live stream entry. Only the properties that were set will be updated. - * - * @param string $entryId Live stream entry id to update - * @param KalturaLiveStreamEntry $liveStreamEntry Live stream entry metadata to update - * @return KalturaLiveStreamEntry - */ - function update($entryId, KalturaLiveStreamEntry $liveStreamEntry) - { - $kparams = array(); - $this->client->addParam($kparams, "entryId", $entryId); - $this->client->addParam($kparams, "liveStreamEntry", $liveStreamEntry->toParams()); - $this->client->queueServiceActionCall("livestream", "update", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaLiveStreamEntry"); - return $resultObject; - } - - /** - * Delete a live stream entry. - * - * @param string $entryId Live stream entry id to delete - * @return - */ - function delete($entryId) - { - $kparams = array(); - $this->client->addParam($kparams, "entryId", $entryId); - $this->client->queueServiceActionCall("livestream", "delete", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "null"); - return $resultObject; - } - - /** - * List live stream entries by filter with paging support. - * - * @param KalturaLiveStreamEntryFilter $filter Live stream entry filter - * @param KalturaFilterPager $pager Pager - * @return KalturaLiveStreamListResponse - */ - function listAction(KalturaLiveStreamEntryFilter $filter = null, KalturaFilterPager $pager = null) - { - $kparams = array(); - if ($filter !== null) - $this->client->addParam($kparams, "filter", $filter->toParams()); - if ($pager !== null) - $this->client->addParam($kparams, "pager", $pager->toParams()); - $this->client->queueServiceActionCall("livestream", "list", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaLiveStreamListResponse"); - return $resultObject; - } - - /** - * Update live stream entry thumbnail using a raw jpeg file - * - * @param string $entryId Live stream entry id - * @param file $fileData Jpeg file data - * @return KalturaLiveStreamEntry - */ - function updateOfflineThumbnailJpeg($entryId, $fileData) - { - $kparams = array(); - $this->client->addParam($kparams, "entryId", $entryId); - $kfiles = array(); - $this->client->addParam($kfiles, "fileData", $fileData); - $this->client->queueServiceActionCall("livestream", "updateOfflineThumbnailJpeg", $kparams, $kfiles); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaLiveStreamEntry"); - return $resultObject; - } - - /** - * Update entry thumbnail using url - * - * @param string $entryId Live stream entry id - * @param string $url File url - * @return KalturaLiveStreamEntry - */ - function updateOfflineThumbnailFromUrl($entryId, $url) - { - $kparams = array(); - $this->client->addParam($kparams, "entryId", $entryId); - $this->client->addParam($kparams, "url", $url); - $this->client->queueServiceActionCall("livestream", "updateOfflineThumbnailFromUrl", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaLiveStreamEntry"); - return $resultObject; - } - - /** - * Delivering the status of a live stream (on-air/offline) if it is possible - * - * @param string $id ID of the live stream - * @param string $protocol Protocol of the stream to test. - * @return bool - */ - function isLive($id, $protocol) - { - $kparams = array(); - $this->client->addParam($kparams, "id", $id); - $this->client->addParam($kparams, "protocol", $protocol); - $this->client->queueServiceActionCall("livestream", "isLive", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $resultObject = (bool) $resultObject; - return $resultObject; - } - - /** - * Append recorded video to live entry - * - * @param string $entryId Live entry id - * @param int $mediaServerIndex - * @param KalturaServerFileResource $resource - * @param float $duration - * @return - */ - function appendRecording($entryId, $mediaServerIndex, KalturaServerFileResource $resource, $duration) - { - $kparams = array(); - $this->client->addParam($kparams, "entryId", $entryId); - $this->client->addParam($kparams, "mediaServerIndex", $mediaServerIndex); - $this->client->addParam($kparams, "resource", $resource->toParams()); - $this->client->addParam($kparams, "duration", $duration); - $this->client->queueServiceActionCall("livestream", "appendRecording", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "null"); - return $resultObject; - } - - /** - * Register media server to live entry - * - * @param string $entryId Live entry id - * @param string $hostname Media server host name - * @param int $mediaServerIndex Media server index primary / secondary - * @return KalturaLiveEntry - */ - function registerMediaServer($entryId, $hostname, $mediaServerIndex) - { - $kparams = array(); - $this->client->addParam($kparams, "entryId", $entryId); - $this->client->addParam($kparams, "hostname", $hostname); - $this->client->addParam($kparams, "mediaServerIndex", $mediaServerIndex); - $this->client->queueServiceActionCall("livestream", "registerMediaServer", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaLiveEntry"); - return $resultObject; - } - - /** - * Unregister media server from live entry - * - * @param string $entryId Live entry id - * @param string $hostname Media server host name - * @param int $mediaServerIndex Media server index primary / secondary - * @return KalturaLiveEntry - */ - function unregisterMediaServer($entryId, $hostname, $mediaServerIndex) - { - $kparams = array(); - $this->client->addParam($kparams, "entryId", $entryId); - $this->client->addParam($kparams, "hostname", $hostname); - $this->client->addParam($kparams, "mediaServerIndex", $mediaServerIndex); - $this->client->queueServiceActionCall("livestream", "unregisterMediaServer", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaLiveEntry"); - return $resultObject; - } - - /** - * Validates all registered media servers - * - * @param string $entryId Live entry id - * @return - */ - function validateRegisteredMediaServers($entryId) - { - $kparams = array(); - $this->client->addParam($kparams, "entryId", $entryId); - $this->client->queueServiceActionCall("livestream", "validateRegisteredMediaServers", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "null"); - return $resultObject; - } -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaMediaInfoService extends KalturaServiceBase -{ - function __construct(KalturaClient $client = null) - { - parent::__construct($client); - } - - /** - * List media info objects by filter and pager - * - * @param KalturaMediaInfoFilter $filter - * @param KalturaFilterPager $pager - * @return KalturaMediaInfoListResponse - */ - function listAction(KalturaMediaInfoFilter $filter = null, KalturaFilterPager $pager = null) - { - $kparams = array(); - if ($filter !== null) - $this->client->addParam($kparams, "filter", $filter->toParams()); - if ($pager !== null) - $this->client->addParam($kparams, "pager", $pager->toParams()); - $this->client->queueServiceActionCall("mediainfo", "list", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaMediaInfoListResponse"); - return $resultObject; - } -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaMediaServerService extends KalturaServiceBase -{ - function __construct(KalturaClient $client = null) - { - parent::__construct($client); - } - - /** - * Get media server by hostname - * - * @param string $hostname - * @return KalturaMediaServer - */ - function get($hostname) - { - $kparams = array(); - $this->client->addParam($kparams, "hostname", $hostname); - $this->client->queueServiceActionCall("mediaserver", "get", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaMediaServer"); - return $resultObject; - } - - /** - * Update media server status - * - * @param string $hostname - * @param KalturaMediaServerStatus $mediaServerStatus - * @return KalturaMediaServer - */ - function reportStatus($hostname, KalturaMediaServerStatus $mediaServerStatus) - { - $kparams = array(); - $this->client->addParam($kparams, "hostname", $hostname); - $this->client->addParam($kparams, "mediaServerStatus", $mediaServerStatus->toParams()); - $this->client->queueServiceActionCall("mediaserver", "reportStatus", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaMediaServer"); - return $resultObject; - } -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaMediaService extends KalturaServiceBase -{ - function __construct(KalturaClient $client = null) - { - parent::__construct($client); - } - - /** - * Add entry - * - * @param KalturaMediaEntry $entry - * @return KalturaMediaEntry - */ - function add(KalturaMediaEntry $entry) - { - $kparams = array(); - $this->client->addParam($kparams, "entry", $entry->toParams()); - $this->client->queueServiceActionCall("media", "add", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaMediaEntry"); - return $resultObject; - } - - /** - * Add content to media entry which is not yet associated with content (therefore is in status NO_CONTENT). - If the requirement is to replace the entry's associated content, use action updateContent. - * - * @param string $entryId - * @param KalturaResource $resource - * @return KalturaMediaEntry - */ - function addContent($entryId, KalturaResource $resource = null) - { - $kparams = array(); - $this->client->addParam($kparams, "entryId", $entryId); - if ($resource !== null) - $this->client->addParam($kparams, "resource", $resource->toParams()); - $this->client->queueServiceActionCall("media", "addContent", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaMediaEntry"); - return $resultObject; - } - - /** - * Adds new media entry by importing an HTTP or FTP URL. - The entry will be queued for import and then for conversion. - * - * @param KalturaMediaEntry $mediaEntry Media entry metadata - * @param string $url An HTTP or FTP URL - * @return KalturaMediaEntry - */ - function addFromUrl(KalturaMediaEntry $mediaEntry, $url) - { - $kparams = array(); - $this->client->addParam($kparams, "mediaEntry", $mediaEntry->toParams()); - $this->client->addParam($kparams, "url", $url); - $this->client->queueServiceActionCall("media", "addFromUrl", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaMediaEntry"); - return $resultObject; - } - - /** - * Adds new media entry by importing the media file from a search provider. - This action should be used with the search service result. - * - * @param KalturaMediaEntry $mediaEntry Media entry metadata - * @param KalturaSearchResult $searchResult Result object from search service - * @return KalturaMediaEntry - */ - function addFromSearchResult(KalturaMediaEntry $mediaEntry = null, KalturaSearchResult $searchResult = null) - { - $kparams = array(); - if ($mediaEntry !== null) - $this->client->addParam($kparams, "mediaEntry", $mediaEntry->toParams()); - if ($searchResult !== null) - $this->client->addParam($kparams, "searchResult", $searchResult->toParams()); - $this->client->queueServiceActionCall("media", "addFromSearchResult", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaMediaEntry"); - return $resultObject; - } - - /** - * Add new entry after the specific media file was uploaded and the upload token id exists - * - * @param KalturaMediaEntry $mediaEntry Media entry metadata - * @param string $uploadTokenId Upload token id - * @return KalturaMediaEntry - */ - function addFromUploadedFile(KalturaMediaEntry $mediaEntry, $uploadTokenId) - { - $kparams = array(); - $this->client->addParam($kparams, "mediaEntry", $mediaEntry->toParams()); - $this->client->addParam($kparams, "uploadTokenId", $uploadTokenId); - $this->client->queueServiceActionCall("media", "addFromUploadedFile", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaMediaEntry"); - return $resultObject; - } - - /** - * Add new entry after the file was recored on the server and the token id exists - * - * @param KalturaMediaEntry $mediaEntry Media entry metadata - * @param string $webcamTokenId Token id for the recored webcam file - * @return KalturaMediaEntry - */ - function addFromRecordedWebcam(KalturaMediaEntry $mediaEntry, $webcamTokenId) - { - $kparams = array(); - $this->client->addParam($kparams, "mediaEntry", $mediaEntry->toParams()); - $this->client->addParam($kparams, "webcamTokenId", $webcamTokenId); - $this->client->queueServiceActionCall("media", "addFromRecordedWebcam", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaMediaEntry"); - return $resultObject; - } - - /** - * Copy entry into new entry - * - * @param string $sourceEntryId Media entry id to copy from - * @param KalturaMediaEntry $mediaEntry Media entry metadata - * @param int $sourceFlavorParamsId The flavor to be used as the new entry source, source flavor will be used if not specified - * @return KalturaMediaEntry - */ - function addFromEntry($sourceEntryId, KalturaMediaEntry $mediaEntry = null, $sourceFlavorParamsId = null) - { - $kparams = array(); - $this->client->addParam($kparams, "sourceEntryId", $sourceEntryId); - if ($mediaEntry !== null) - $this->client->addParam($kparams, "mediaEntry", $mediaEntry->toParams()); - $this->client->addParam($kparams, "sourceFlavorParamsId", $sourceFlavorParamsId); - $this->client->queueServiceActionCall("media", "addFromEntry", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaMediaEntry"); - return $resultObject; - } - - /** - * Copy flavor asset into new entry - * - * @param string $sourceFlavorAssetId Flavor asset id to be used as the new entry source - * @param KalturaMediaEntry $mediaEntry Media entry metadata - * @return KalturaMediaEntry - */ - function addFromFlavorAsset($sourceFlavorAssetId, KalturaMediaEntry $mediaEntry = null) - { - $kparams = array(); - $this->client->addParam($kparams, "sourceFlavorAssetId", $sourceFlavorAssetId); - if ($mediaEntry !== null) - $this->client->addParam($kparams, "mediaEntry", $mediaEntry->toParams()); - $this->client->queueServiceActionCall("media", "addFromFlavorAsset", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaMediaEntry"); - return $resultObject; - } - - /** - * Convert entry - * - * @param string $entryId Media entry id - * @param int $conversionProfileId - * @param array $dynamicConversionAttributes - * @return int - */ - function convert($entryId, $conversionProfileId = null, array $dynamicConversionAttributes = null) - { - $kparams = array(); - $this->client->addParam($kparams, "entryId", $entryId); - $this->client->addParam($kparams, "conversionProfileId", $conversionProfileId); - if ($dynamicConversionAttributes !== null) - foreach($dynamicConversionAttributes as $index => $obj) - { - $this->client->addParam($kparams, "dynamicConversionAttributes:$index", $obj->toParams()); - } - $this->client->queueServiceActionCall("media", "convert", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "integer"); - return $resultObject; - } - - /** - * Get media entry by ID. - * - * @param string $entryId Media entry id - * @param int $version Desired version of the data - * @return KalturaMediaEntry - */ - function get($entryId, $version = -1) - { - $kparams = array(); - $this->client->addParam($kparams, "entryId", $entryId); - $this->client->addParam($kparams, "version", $version); - $this->client->queueServiceActionCall("media", "get", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaMediaEntry"); - return $resultObject; - } - - /** - * Get MRSS by entry id - XML will return as an escaped string - * - * @param string $entryId Entry id - * @param array $extendingItemsArray - * @return string - */ - function getMrss($entryId, array $extendingItemsArray = null) - { - $kparams = array(); - $this->client->addParam($kparams, "entryId", $entryId); - if ($extendingItemsArray !== null) - foreach($extendingItemsArray as $index => $obj) - { - $this->client->addParam($kparams, "extendingItemsArray:$index", $obj->toParams()); - } - $this->client->queueServiceActionCall("media", "getMrss", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "string"); - return $resultObject; - } - - /** - * Update media entry. Only the properties that were set will be updated. - * - * @param string $entryId Media entry id to update - * @param KalturaMediaEntry $mediaEntry Media entry metadata to update - * @return KalturaMediaEntry - */ - function update($entryId, KalturaMediaEntry $mediaEntry) - { - $kparams = array(); - $this->client->addParam($kparams, "entryId", $entryId); - $this->client->addParam($kparams, "mediaEntry", $mediaEntry->toParams()); - $this->client->queueServiceActionCall("media", "update", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaMediaEntry"); - return $resultObject; - } - - /** - * Replace content associated with the media entry. - * - * @param string $entryId Media entry id to update - * @param KalturaResource $resource Resource to be used to replace entry media content - * @param int $conversionProfileId The conversion profile id to be used on the entry - * @return KalturaMediaEntry - */ - function updateContent($entryId, KalturaResource $resource, $conversionProfileId = null) - { - $kparams = array(); - $this->client->addParam($kparams, "entryId", $entryId); - $this->client->addParam($kparams, "resource", $resource->toParams()); - $this->client->addParam($kparams, "conversionProfileId", $conversionProfileId); - $this->client->queueServiceActionCall("media", "updateContent", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaMediaEntry"); - return $resultObject; - } - - /** - * Delete a media entry. - * - * @param string $entryId Media entry id to delete - * @return - */ - function delete($entryId) - { - $kparams = array(); - $this->client->addParam($kparams, "entryId", $entryId); - $this->client->queueServiceActionCall("media", "delete", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "null"); - return $resultObject; - } - - /** - * Approves media replacement - * - * @param string $entryId Media entry id to replace - * @return KalturaMediaEntry - */ - function approveReplace($entryId) - { - $kparams = array(); - $this->client->addParam($kparams, "entryId", $entryId); - $this->client->queueServiceActionCall("media", "approveReplace", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaMediaEntry"); - return $resultObject; - } - - /** - * Cancels media replacement - * - * @param string $entryId Media entry id to cancel - * @return KalturaMediaEntry - */ - function cancelReplace($entryId) - { - $kparams = array(); - $this->client->addParam($kparams, "entryId", $entryId); - $this->client->queueServiceActionCall("media", "cancelReplace", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaMediaEntry"); - return $resultObject; - } - - /** - * List media entries by filter with paging support. - * - * @param KalturaMediaEntryFilter $filter Media entry filter - * @param KalturaFilterPager $pager Pager - * @return KalturaMediaListResponse - */ - function listAction(KalturaMediaEntryFilter $filter = null, KalturaFilterPager $pager = null) - { - $kparams = array(); - if ($filter !== null) - $this->client->addParam($kparams, "filter", $filter->toParams()); - if ($pager !== null) - $this->client->addParam($kparams, "pager", $pager->toParams()); - $this->client->queueServiceActionCall("media", "list", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaMediaListResponse"); - return $resultObject; - } - - /** - * Count media entries by filter. - * - * @param KalturaMediaEntryFilter $filter Media entry filter - * @return int - */ - function count(KalturaMediaEntryFilter $filter = null) - { - $kparams = array(); - if ($filter !== null) - $this->client->addParam($kparams, "filter", $filter->toParams()); - $this->client->queueServiceActionCall("media", "count", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "integer"); - return $resultObject; - } - - /** - * Upload a media file to Kaltura, then the file can be used to create a media entry. - * - * @param file $fileData The file data - * @return string - */ - function upload($fileData) - { - $kparams = array(); - $kfiles = array(); - $this->client->addParam($kfiles, "fileData", $fileData); - $this->client->queueServiceActionCall("media", "upload", $kparams, $kfiles); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "string"); - return $resultObject; - } - - /** - * Update media entry thumbnail by a specified time offset (In seconds) - If flavor params id not specified, source flavor will be used by default - * - * @param string $entryId Media entry id - * @param int $timeOffset Time offset (in seconds) - * @param int $flavorParamsId The flavor params id to be used - * @return KalturaMediaEntry - */ - function updateThumbnail($entryId, $timeOffset, $flavorParamsId = null) - { - $kparams = array(); - $this->client->addParam($kparams, "entryId", $entryId); - $this->client->addParam($kparams, "timeOffset", $timeOffset); - $this->client->addParam($kparams, "flavorParamsId", $flavorParamsId); - $this->client->queueServiceActionCall("media", "updateThumbnail", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaMediaEntry"); - return $resultObject; - } - - /** - * Update media entry thumbnail from a different entry by a specified time offset (In seconds) - If flavor params id not specified, source flavor will be used by default - * - * @param string $entryId Media entry id - * @param string $sourceEntryId Media entry id - * @param int $timeOffset Time offset (in seconds) - * @param int $flavorParamsId The flavor params id to be used - * @return KalturaMediaEntry - */ - function updateThumbnailFromSourceEntry($entryId, $sourceEntryId, $timeOffset, $flavorParamsId = null) - { - $kparams = array(); - $this->client->addParam($kparams, "entryId", $entryId); - $this->client->addParam($kparams, "sourceEntryId", $sourceEntryId); - $this->client->addParam($kparams, "timeOffset", $timeOffset); - $this->client->addParam($kparams, "flavorParamsId", $flavorParamsId); - $this->client->queueServiceActionCall("media", "updateThumbnailFromSourceEntry", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaMediaEntry"); - return $resultObject; - } - - /** - * Update media entry thumbnail using a raw jpeg file - * - * @param string $entryId Media entry id - * @param file $fileData Jpeg file data - * @return KalturaMediaEntry - */ - function updateThumbnailJpeg($entryId, $fileData) - { - $kparams = array(); - $this->client->addParam($kparams, "entryId", $entryId); - $kfiles = array(); - $this->client->addParam($kfiles, "fileData", $fileData); - $this->client->queueServiceActionCall("media", "updateThumbnailJpeg", $kparams, $kfiles); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaMediaEntry"); - return $resultObject; - } - - /** - * Update entry thumbnail using url - * - * @param string $entryId Media entry id - * @param string $url File url - * @return KalturaBaseEntry - */ - function updateThumbnailFromUrl($entryId, $url) - { - $kparams = array(); - $this->client->addParam($kparams, "entryId", $entryId); - $this->client->addParam($kparams, "url", $url); - $this->client->queueServiceActionCall("media", "updateThumbnailFromUrl", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaBaseEntry"); - return $resultObject; - } - - /** - * Request a new conversion job, this can be used to convert the media entry to a different format - * - * @param string $entryId Media entry id - * @param string $fileFormat Format to convert - * @return int - */ - function requestConversion($entryId, $fileFormat) - { - $kparams = array(); - $this->client->addParam($kparams, "entryId", $entryId); - $this->client->addParam($kparams, "fileFormat", $fileFormat); - $this->client->queueServiceActionCall("media", "requestConversion", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "integer"); - return $resultObject; - } - - /** - * Flag inappropriate media entry for moderation - * - * @param KalturaModerationFlag $moderationFlag - * @return - */ - function flag(KalturaModerationFlag $moderationFlag) - { - $kparams = array(); - $this->client->addParam($kparams, "moderationFlag", $moderationFlag->toParams()); - $this->client->queueServiceActionCall("media", "flag", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "null"); - return $resultObject; - } - - /** - * Reject the media entry and mark the pending flags (if any) as moderated (this will make the entry non playable) - * - * @param string $entryId - * @return - */ - function reject($entryId) - { - $kparams = array(); - $this->client->addParam($kparams, "entryId", $entryId); - $this->client->queueServiceActionCall("media", "reject", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "null"); - return $resultObject; - } - - /** - * Approve the media entry and mark the pending flags (if any) as moderated (this will make the entry playable) - * - * @param string $entryId - * @return - */ - function approve($entryId) - { - $kparams = array(); - $this->client->addParam($kparams, "entryId", $entryId); - $this->client->queueServiceActionCall("media", "approve", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "null"); - return $resultObject; - } - - /** - * List all pending flags for the media entry - * - * @param string $entryId - * @param KalturaFilterPager $pager - * @return KalturaModerationFlagListResponse - */ - function listFlags($entryId, KalturaFilterPager $pager = null) - { - $kparams = array(); - $this->client->addParam($kparams, "entryId", $entryId); - if ($pager !== null) - $this->client->addParam($kparams, "pager", $pager->toParams()); - $this->client->queueServiceActionCall("media", "listFlags", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaModerationFlagListResponse"); - return $resultObject; - } - - /** - * Anonymously rank a media entry, no validation is done on duplicate rankings - * - * @param string $entryId - * @param int $rank - * @return - */ - function anonymousRank($entryId, $rank) - { - $kparams = array(); - $this->client->addParam($kparams, "entryId", $entryId); - $this->client->addParam($kparams, "rank", $rank); - $this->client->queueServiceActionCall("media", "anonymousRank", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "null"); - return $resultObject; - } - - /** - * Add new bulk upload batch job - Conversion profile id can be specified in the API or in the CSV file, the one in the CSV file will be stronger. - If no conversion profile was specified, partner's default will be used - * - * @param file $fileData - * @param KalturaBulkUploadJobData $bulkUploadData - * @param KalturaBulkUploadEntryData $bulkUploadEntryData - * @return KalturaBulkUpload - */ - function bulkUploadAdd($fileData, KalturaBulkUploadJobData $bulkUploadData = null, KalturaBulkUploadEntryData $bulkUploadEntryData = null) - { - $kparams = array(); - $kfiles = array(); - $this->client->addParam($kfiles, "fileData", $fileData); - if ($bulkUploadData !== null) - $this->client->addParam($kparams, "bulkUploadData", $bulkUploadData->toParams()); - if ($bulkUploadEntryData !== null) - $this->client->addParam($kparams, "bulkUploadEntryData", $bulkUploadEntryData->toParams()); - $this->client->queueServiceActionCall("media", "bulkUploadAdd", $kparams, $kfiles); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaBulkUpload"); - return $resultObject; - } -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaMixingService extends KalturaServiceBase -{ - function __construct(KalturaClient $client = null) - { - parent::__construct($client); - } - - /** - * Adds a new mix. - If the dataContent is null, a default timeline will be created. - * - * @param KalturaMixEntry $mixEntry Mix entry metadata - * @return KalturaMixEntry - */ - function add(KalturaMixEntry $mixEntry) - { - $kparams = array(); - $this->client->addParam($kparams, "mixEntry", $mixEntry->toParams()); - $this->client->queueServiceActionCall("mixing", "add", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaMixEntry"); - return $resultObject; - } - - /** - * Get mix entry by id. - * - * @param string $entryId Mix entry id - * @param int $version Desired version of the data - * @return KalturaMixEntry - */ - function get($entryId, $version = -1) - { - $kparams = array(); - $this->client->addParam($kparams, "entryId", $entryId); - $this->client->addParam($kparams, "version", $version); - $this->client->queueServiceActionCall("mixing", "get", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaMixEntry"); - return $resultObject; - } - - /** - * Update mix entry. Only the properties that were set will be updated. - * - * @param string $entryId Mix entry id to update - * @param KalturaMixEntry $mixEntry Mix entry metadata to update - * @return KalturaMixEntry - */ - function update($entryId, KalturaMixEntry $mixEntry) - { - $kparams = array(); - $this->client->addParam($kparams, "entryId", $entryId); - $this->client->addParam($kparams, "mixEntry", $mixEntry->toParams()); - $this->client->queueServiceActionCall("mixing", "update", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaMixEntry"); - return $resultObject; - } - - /** - * Delete a mix entry. - * - * @param string $entryId Mix entry id to delete - * @return - */ - function delete($entryId) - { - $kparams = array(); - $this->client->addParam($kparams, "entryId", $entryId); - $this->client->queueServiceActionCall("mixing", "delete", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "null"); - return $resultObject; - } - - /** - * List entries by filter with paging support. - Return parameter is an array of mix entries. - * - * @param KalturaMixEntryFilter $filter Mix entry filter - * @param KalturaFilterPager $pager Pager - * @return KalturaMixListResponse - */ - function listAction(KalturaMixEntryFilter $filter = null, KalturaFilterPager $pager = null) - { - $kparams = array(); - if ($filter !== null) - $this->client->addParam($kparams, "filter", $filter->toParams()); - if ($pager !== null) - $this->client->addParam($kparams, "pager", $pager->toParams()); - $this->client->queueServiceActionCall("mixing", "list", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaMixListResponse"); - return $resultObject; - } - - /** - * Count mix entries by filter. - * - * @param KalturaMediaEntryFilter $filter Media entry filter - * @return int - */ - function count(KalturaMediaEntryFilter $filter = null) - { - $kparams = array(); - if ($filter !== null) - $this->client->addParam($kparams, "filter", $filter->toParams()); - $this->client->queueServiceActionCall("mixing", "count", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "integer"); - return $resultObject; - } - - /** - * Clones an existing mix. - * - * @param string $entryId Mix entry id to clone - * @return KalturaMixEntry - */ - function cloneAction($entryId) - { - $kparams = array(); - $this->client->addParam($kparams, "entryId", $entryId); - $this->client->queueServiceActionCall("mixing", "clone", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaMixEntry"); - return $resultObject; - } - - /** - * Appends a media entry to a the end of the mix timeline, this will save the mix timeline as a new version. - * - * @param string $mixEntryId Mix entry to append to its timeline - * @param string $mediaEntryId Media entry to append to the timeline - * @return KalturaMixEntry - */ - function appendMediaEntry($mixEntryId, $mediaEntryId) - { - $kparams = array(); - $this->client->addParam($kparams, "mixEntryId", $mixEntryId); - $this->client->addParam($kparams, "mediaEntryId", $mediaEntryId); - $this->client->queueServiceActionCall("mixing", "appendMediaEntry", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaMixEntry"); - return $resultObject; - } - - /** - * Get the mixes in which the media entry is included - * - * @param string $mediaEntryId - * @return array - */ - function getMixesByMediaId($mediaEntryId) - { - $kparams = array(); - $this->client->addParam($kparams, "mediaEntryId", $mediaEntryId); - $this->client->queueServiceActionCall("mixing", "getMixesByMediaId", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "array"); - return $resultObject; - } - - /** - * Get all ready media entries that exist in the given mix id - * - * @param string $mixId - * @param int $version Desired version to get the data from - * @return array - */ - function getReadyMediaEntries($mixId, $version = -1) - { - $kparams = array(); - $this->client->addParam($kparams, "mixId", $mixId); - $this->client->addParam($kparams, "version", $version); - $this->client->queueServiceActionCall("mixing", "getReadyMediaEntries", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "array"); - return $resultObject; - } - - /** - * Anonymously rank a mix entry, no validation is done on duplicate rankings - * - * @param string $entryId - * @param int $rank - * @return - */ - function anonymousRank($entryId, $rank) - { - $kparams = array(); - $this->client->addParam($kparams, "entryId", $entryId); - $this->client->addParam($kparams, "rank", $rank); - $this->client->queueServiceActionCall("mixing", "anonymousRank", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "null"); - return $resultObject; - } -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaNotificationService extends KalturaServiceBase -{ - function __construct(KalturaClient $client = null) - { - parent::__construct($client); - } - - /** - * Return the notifications for a specific entry id and type - * - * @param string $entryId - * @param int $type - * @return KalturaClientNotification - */ - function getClientNotification($entryId, $type) - { - $kparams = array(); - $this->client->addParam($kparams, "entryId", $entryId); - $this->client->addParam($kparams, "type", $type); - $this->client->queueServiceActionCall("notification", "getClientNotification", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaClientNotification"); - return $resultObject; - } -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaPartnerService extends KalturaServiceBase -{ - function __construct(KalturaClient $client = null) - { - parent::__construct($client); - } - - /** - * Create a new Partner object - * - * @param KalturaPartner $partner - * @param string $cmsPassword - * @param int $templatePartnerId - * @param bool $silent - * @return KalturaPartner - */ - function register(KalturaPartner $partner, $cmsPassword = "", $templatePartnerId = null, $silent = false) - { - $kparams = array(); - $this->client->addParam($kparams, "partner", $partner->toParams()); - $this->client->addParam($kparams, "cmsPassword", $cmsPassword); - $this->client->addParam($kparams, "templatePartnerId", $templatePartnerId); - $this->client->addParam($kparams, "silent", $silent); - $this->client->queueServiceActionCall("partner", "register", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaPartner"); - return $resultObject; - } - - /** - * Update details and settings of an existing partner - * - * @param KalturaPartner $partner - * @param bool $allowEmpty - * @return KalturaPartner - */ - function update(KalturaPartner $partner, $allowEmpty = false) - { - $kparams = array(); - $this->client->addParam($kparams, "partner", $partner->toParams()); - $this->client->addParam($kparams, "allowEmpty", $allowEmpty); - $this->client->queueServiceActionCall("partner", "update", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaPartner"); - return $resultObject; - } - - /** - * Retrieve partner object by Id - * - * @param int $id - * @return KalturaPartner - */ - function get($id = null) - { - $kparams = array(); - $this->client->addParam($kparams, "id", $id); - $this->client->queueServiceActionCall("partner", "get", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaPartner"); - return $resultObject; - } - - /** - * Retrieve partner secret and admin secret - * - * @param int $partnerId - * @param string $adminEmail - * @param string $cmsPassword - * @return KalturaPartner - */ - function getSecrets($partnerId, $adminEmail, $cmsPassword) - { - $kparams = array(); - $this->client->addParam($kparams, "partnerId", $partnerId); - $this->client->addParam($kparams, "adminEmail", $adminEmail); - $this->client->addParam($kparams, "cmsPassword", $cmsPassword); - $this->client->queueServiceActionCall("partner", "getSecrets", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaPartner"); - return $resultObject; - } - - /** - * Retrieve all info attributed to the partner - This action expects no parameters. It returns information for the current KS partnerId. - * - * @return KalturaPartner - */ - function getInfo() - { - $kparams = array(); - $this->client->queueServiceActionCall("partner", "getInfo", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaPartner"); - return $resultObject; - } - - /** - * Get usage statistics for a partner - Calculation is done according to partner's package - Additional data returned is a graph points of streaming usage in a timeframe - The resolution can be "days" or "months" - * - * @param int $year - * @param int $month - * @param string $resolution - * @return KalturaPartnerUsage - */ - function getUsage($year = "", $month = 1, $resolution = null) - { - $kparams = array(); - $this->client->addParam($kparams, "year", $year); - $this->client->addParam($kparams, "month", $month); - $this->client->addParam($kparams, "resolution", $resolution); - $this->client->queueServiceActionCall("partner", "getUsage", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaPartnerUsage"); - return $resultObject; - } - - /** - * Get usage statistics for a partner - Calculation is done according to partner's package - * - * @return KalturaPartnerStatistics - */ - function getStatistics() - { - $kparams = array(); - $this->client->queueServiceActionCall("partner", "getStatistics", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaPartnerStatistics"); - return $resultObject; - } - - /** - * Retrieve a list of partner objects which the current user is allowed to access. - * - * @param KalturaPartnerFilter $partnerFilter - * @param KalturaFilterPager $pager - * @return KalturaPartnerListResponse - */ - function listPartnersForUser(KalturaPartnerFilter $partnerFilter = null, KalturaFilterPager $pager = null) - { - $kparams = array(); - if ($partnerFilter !== null) - $this->client->addParam($kparams, "partnerFilter", $partnerFilter->toParams()); - if ($pager !== null) - $this->client->addParam($kparams, "pager", $pager->toParams()); - $this->client->queueServiceActionCall("partner", "listPartnersForUser", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaPartnerListResponse"); - return $resultObject; - } - - /** - * List partners by filter with paging support - Current implementation will only list the sub partners of the partner initiating the api call (using the current KS). - This action is only partially implemented to support listing sub partners of a VAR partner. - * - * @param KalturaPartnerFilter $filter - * @param KalturaFilterPager $pager - * @return KalturaPartnerListResponse - */ - function listAction(KalturaPartnerFilter $filter = null, KalturaFilterPager $pager = null) - { - $kparams = array(); - if ($filter !== null) - $this->client->addParam($kparams, "filter", $filter->toParams()); - if ($pager !== null) - $this->client->addParam($kparams, "pager", $pager->toParams()); - $this->client->queueServiceActionCall("partner", "list", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaPartnerListResponse"); - return $resultObject; - } - - /** - * List partner's current processes' statuses - * - * @return KalturaFeatureStatusListResponse - */ - function listFeatureStatus() - { - $kparams = array(); - $this->client->queueServiceActionCall("partner", "listFeatureStatus", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaFeatureStatusListResponse"); - return $resultObject; - } - - /** - * Count partner's existing sub-publishers (count includes the partner itself). - * - * @param KalturaPartnerFilter $filter - * @return int - */ - function count(KalturaPartnerFilter $filter = null) - { - $kparams = array(); - if ($filter !== null) - $this->client->addParam($kparams, "filter", $filter->toParams()); - $this->client->queueServiceActionCall("partner", "count", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "integer"); - return $resultObject; - } -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaPermissionItemService extends KalturaServiceBase -{ - function __construct(KalturaClient $client = null) - { - parent::__construct($client); - } - - /** - * Adds a new permission item object to the account. - This action is available only to Kaltura system administrators. - * - * @param KalturaPermissionItem $permissionItem The new permission item - * @return KalturaPermissionItem - */ - function add(KalturaPermissionItem $permissionItem) - { - $kparams = array(); - $this->client->addParam($kparams, "permissionItem", $permissionItem->toParams()); - $this->client->queueServiceActionCall("permissionitem", "add", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaPermissionItem"); - return $resultObject; - } - - /** - * Retrieves a permission item object using its ID. - * - * @param int $permissionItemId The permission item's unique identifier - * @return KalturaPermissionItem - */ - function get($permissionItemId) - { - $kparams = array(); - $this->client->addParam($kparams, "permissionItemId", $permissionItemId); - $this->client->queueServiceActionCall("permissionitem", "get", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaPermissionItem"); - return $resultObject; - } - - /** - * Updates an existing permission item object. - This action is available only to Kaltura system administrators. - * - * @param int $permissionItemId The permission item's unique identifier - * @param KalturaPermissionItem $permissionItem Id The permission item's unique identifier - * @return KalturaPermissionItem - */ - function update($permissionItemId, KalturaPermissionItem $permissionItem) - { - $kparams = array(); - $this->client->addParam($kparams, "permissionItemId", $permissionItemId); - $this->client->addParam($kparams, "permissionItem", $permissionItem->toParams()); - $this->client->queueServiceActionCall("permissionitem", "update", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaPermissionItem"); - return $resultObject; - } - - /** - * Deletes an existing permission item object. - This action is available only to Kaltura system administrators. - * - * @param int $permissionItemId The permission item's unique identifier - * @return KalturaPermissionItem - */ - function delete($permissionItemId) - { - $kparams = array(); - $this->client->addParam($kparams, "permissionItemId", $permissionItemId); - $this->client->queueServiceActionCall("permissionitem", "delete", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaPermissionItem"); - return $resultObject; - } - - /** - * Lists permission item objects that are associated with an account. - * - * @param KalturaPermissionItemFilter $filter A filter used to exclude specific types of permission items - * @param KalturaFilterPager $pager A limit for the number of records to display on a page - * @return KalturaPermissionItemListResponse - */ - function listAction(KalturaPermissionItemFilter $filter = null, KalturaFilterPager $pager = null) - { - $kparams = array(); - if ($filter !== null) - $this->client->addParam($kparams, "filter", $filter->toParams()); - if ($pager !== null) - $this->client->addParam($kparams, "pager", $pager->toParams()); - $this->client->queueServiceActionCall("permissionitem", "list", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaPermissionItemListResponse"); - return $resultObject; - } -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaPermissionService extends KalturaServiceBase -{ - function __construct(KalturaClient $client = null) - { - parent::__construct($client); - } - - /** - * Adds a new permission object to the account. - * - * @param KalturaPermission $permission The new permission - * @return KalturaPermission - */ - function add(KalturaPermission $permission) - { - $kparams = array(); - $this->client->addParam($kparams, "permission", $permission->toParams()); - $this->client->queueServiceActionCall("permission", "add", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaPermission"); - return $resultObject; - } - - /** - * Retrieves a permission object using its ID. - * - * @param string $permissionName The name assigned to the permission - * @return KalturaPermission - */ - function get($permissionName) - { - $kparams = array(); - $this->client->addParam($kparams, "permissionName", $permissionName); - $this->client->queueServiceActionCall("permission", "get", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaPermission"); - return $resultObject; - } - - /** - * Updates an existing permission object. - * - * @param string $permissionName The name assigned to the permission - * @param KalturaPermission $permission Name The name assigned to the permission - * @return KalturaPermission - */ - function update($permissionName, KalturaPermission $permission) - { - $kparams = array(); - $this->client->addParam($kparams, "permissionName", $permissionName); - $this->client->addParam($kparams, "permission", $permission->toParams()); - $this->client->queueServiceActionCall("permission", "update", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaPermission"); - return $resultObject; - } - - /** - * Deletes an existing permission object. - * - * @param string $permissionName The name assigned to the permission - * @return KalturaPermission - */ - function delete($permissionName) - { - $kparams = array(); - $this->client->addParam($kparams, "permissionName", $permissionName); - $this->client->queueServiceActionCall("permission", "delete", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaPermission"); - return $resultObject; - } - - /** - * Lists permission objects that are associated with an account. - Blocked permissions are listed unless you use a filter to exclude them. - Blocked permissions are listed unless you use a filter to exclude them. - * - * @param KalturaPermissionFilter $filter A filter used to exclude specific types of permissions - * @param KalturaFilterPager $pager A limit for the number of records to display on a page - * @return KalturaPermissionListResponse - */ - function listAction(KalturaPermissionFilter $filter = null, KalturaFilterPager $pager = null) - { - $kparams = array(); - if ($filter !== null) - $this->client->addParam($kparams, "filter", $filter->toParams()); - if ($pager !== null) - $this->client->addParam($kparams, "pager", $pager->toParams()); - $this->client->queueServiceActionCall("permission", "list", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaPermissionListResponse"); - return $resultObject; - } - - /** - * Retrieves a list of permissions that apply to the current KS. - * - * @return string - */ - function getCurrentPermissions() - { - $kparams = array(); - $this->client->queueServiceActionCall("permission", "getCurrentPermissions", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "string"); - return $resultObject; - } -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaPlaylistService extends KalturaServiceBase -{ - function __construct(KalturaClient $client = null) - { - parent::__construct($client); - } - - /** - * Add new playlist - Note that all entries used in a playlist will become public and may appear in KalturaNetwork - * - * @param KalturaPlaylist $playlist - * @param bool $updateStats Indicates that the playlist statistics attributes should be updated synchronously now - * @return KalturaPlaylist - */ - function add(KalturaPlaylist $playlist, $updateStats = false) - { - $kparams = array(); - $this->client->addParam($kparams, "playlist", $playlist->toParams()); - $this->client->addParam($kparams, "updateStats", $updateStats); - $this->client->queueServiceActionCall("playlist", "add", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaPlaylist"); - return $resultObject; - } - - /** - * Retrieve a playlist - * - * @param string $id - * @param int $version Desired version of the data - * @return KalturaPlaylist - */ - function get($id, $version = -1) - { - $kparams = array(); - $this->client->addParam($kparams, "id", $id); - $this->client->addParam($kparams, "version", $version); - $this->client->queueServiceActionCall("playlist", "get", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaPlaylist"); - return $resultObject; - } - - /** - * Update existing playlist - Note - you cannot change playlist type. updated playlist must be of the same type. - * - * @param string $id - * @param KalturaPlaylist $playlist - * @param bool $updateStats - * @return KalturaPlaylist - */ - function update($id, KalturaPlaylist $playlist, $updateStats = false) - { - $kparams = array(); - $this->client->addParam($kparams, "id", $id); - $this->client->addParam($kparams, "playlist", $playlist->toParams()); - $this->client->addParam($kparams, "updateStats", $updateStats); - $this->client->queueServiceActionCall("playlist", "update", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaPlaylist"); - return $resultObject; - } - - /** - * Delete existing playlist - * - * @param string $id - * @return - */ - function delete($id) - { - $kparams = array(); - $this->client->addParam($kparams, "id", $id); - $this->client->queueServiceActionCall("playlist", "delete", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "null"); - return $resultObject; - } - - /** - * Clone an existing playlist - * - * @param string $id Id of the playlist to clone - * @param KalturaPlaylist $newPlaylist Parameters defined here will override the ones in the cloned playlist - * @return KalturaPlaylist - */ - function cloneAction($id, KalturaPlaylist $newPlaylist = null) - { - $kparams = array(); - $this->client->addParam($kparams, "id", $id); - if ($newPlaylist !== null) - $this->client->addParam($kparams, "newPlaylist", $newPlaylist->toParams()); - $this->client->queueServiceActionCall("playlist", "clone", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaPlaylist"); - return $resultObject; - } - - /** - * List available playlists - * - * @param KalturaPlaylistFilter $filter - * @param KalturaFilterPager $pager - * @return KalturaPlaylistListResponse - */ - function listAction(KalturaPlaylistFilter $filter = null, KalturaFilterPager $pager = null) - { - $kparams = array(); - if ($filter !== null) - $this->client->addParam($kparams, "filter", $filter->toParams()); - if ($pager !== null) - $this->client->addParam($kparams, "pager", $pager->toParams()); - $this->client->queueServiceActionCall("playlist", "list", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaPlaylistListResponse"); - return $resultObject; - } - - /** - * Retrieve playlist for playing purpose - * - * @param string $id - * @param string $detailed - * @param KalturaContext $playlistContext - * @param KalturaMediaEntryFilterForPlaylist $filter - * @return array - */ - function execute($id, $detailed = "", KalturaContext $playlistContext = null, KalturaMediaEntryFilterForPlaylist $filter = null) - { - $kparams = array(); - $this->client->addParam($kparams, "id", $id); - $this->client->addParam($kparams, "detailed", $detailed); - if ($playlistContext !== null) - $this->client->addParam($kparams, "playlistContext", $playlistContext->toParams()); - if ($filter !== null) - $this->client->addParam($kparams, "filter", $filter->toParams()); - $this->client->queueServiceActionCall("playlist", "execute", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "array"); - return $resultObject; - } - - /** - * Retrieve playlist for playing purpose, based on content - * - * @param int $playlistType - * @param string $playlistContent - * @param string $detailed - * @return array - */ - function executeFromContent($playlistType, $playlistContent, $detailed = "") - { - $kparams = array(); - $this->client->addParam($kparams, "playlistType", $playlistType); - $this->client->addParam($kparams, "playlistContent", $playlistContent); - $this->client->addParam($kparams, "detailed", $detailed); - $this->client->queueServiceActionCall("playlist", "executeFromContent", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "array"); - return $resultObject; - } - - /** - * Revrieve playlist for playing purpose, based on media entry filters - * - * @param array $filters - * @param int $totalResults - * @param string $detailed - * @return array - */ - function executeFromFilters(array $filters, $totalResults, $detailed = "") - { - $kparams = array(); - foreach($filters as $index => $obj) - { - $this->client->addParam($kparams, "filters:$index", $obj->toParams()); - } - $this->client->addParam($kparams, "totalResults", $totalResults); - $this->client->addParam($kparams, "detailed", $detailed); - $this->client->queueServiceActionCall("playlist", "executeFromFilters", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "array"); - return $resultObject; - } - - /** - * Retrieve playlist statistics - * - * @param int $playlistType - * @param string $playlistContent - * @return KalturaPlaylist - */ - function getStatsFromContent($playlistType, $playlistContent) - { - $kparams = array(); - $this->client->addParam($kparams, "playlistType", $playlistType); - $this->client->addParam($kparams, "playlistContent", $playlistContent); - $this->client->queueServiceActionCall("playlist", "getStatsFromContent", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaPlaylist"); - return $resultObject; - } -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaReportService extends KalturaServiceBase -{ - function __construct(KalturaClient $client = null) - { - parent::__construct($client); - } - - /** - * Report getGraphs action allows to get a graph data for a specific report. - * - * @param int $reportType - * @param KalturaReportInputFilter $reportInputFilter - * @param string $dimension - * @param string $objectIds - one ID or more (separated by ',') of specific objects to query - * @return array - */ - function getGraphs($reportType, KalturaReportInputFilter $reportInputFilter, $dimension = null, $objectIds = null) - { - $kparams = array(); - $this->client->addParam($kparams, "reportType", $reportType); - $this->client->addParam($kparams, "reportInputFilter", $reportInputFilter->toParams()); - $this->client->addParam($kparams, "dimension", $dimension); - $this->client->addParam($kparams, "objectIds", $objectIds); - $this->client->queueServiceActionCall("report", "getGraphs", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "array"); - return $resultObject; - } - - /** - * Report getTotal action allows to get a graph data for a specific report. - * - * @param int $reportType - * @param KalturaReportInputFilter $reportInputFilter - * @param string $objectIds - one ID or more (separated by ',') of specific objects to query - * @return KalturaReportTotal - */ - function getTotal($reportType, KalturaReportInputFilter $reportInputFilter, $objectIds = null) - { - $kparams = array(); - $this->client->addParam($kparams, "reportType", $reportType); - $this->client->addParam($kparams, "reportInputFilter", $reportInputFilter->toParams()); - $this->client->addParam($kparams, "objectIds", $objectIds); - $this->client->queueServiceActionCall("report", "getTotal", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaReportTotal"); - return $resultObject; - } - - /** - * Report getBaseTotal action allows to get a the total base for storage reports - * - * @param int $reportType - * @param KalturaReportInputFilter $reportInputFilter - * @param string $objectIds - one ID or more (separated by ',') of specific objects to query - * @return array - */ - function getBaseTotal($reportType, KalturaReportInputFilter $reportInputFilter, $objectIds = null) - { - $kparams = array(); - $this->client->addParam($kparams, "reportType", $reportType); - $this->client->addParam($kparams, "reportInputFilter", $reportInputFilter->toParams()); - $this->client->addParam($kparams, "objectIds", $objectIds); - $this->client->queueServiceActionCall("report", "getBaseTotal", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "array"); - return $resultObject; - } - - /** - * Report getTable action allows to get a graph data for a specific report. - * - * @param int $reportType - * @param KalturaReportInputFilter $reportInputFilter - * @param KalturaFilterPager $pager - * @param string $order - * @param string $objectIds - one ID or more (separated by ',') of specific objects to query - * @return KalturaReportTable - */ - function getTable($reportType, KalturaReportInputFilter $reportInputFilter, KalturaFilterPager $pager, $order = null, $objectIds = null) - { - $kparams = array(); - $this->client->addParam($kparams, "reportType", $reportType); - $this->client->addParam($kparams, "reportInputFilter", $reportInputFilter->toParams()); - $this->client->addParam($kparams, "pager", $pager->toParams()); - $this->client->addParam($kparams, "order", $order); - $this->client->addParam($kparams, "objectIds", $objectIds); - $this->client->queueServiceActionCall("report", "getTable", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaReportTable"); - return $resultObject; - } - - /** - * Will create a Csv file for the given report and return the URL to access it - * - * @param string $reportTitle The title of the report to display at top of CSV - * @param string $reportText The text of the filter of the report - * @param string $headers The headers of the columns - a map between the enumerations on the server side and the their display text - * @param int $reportType - * @param KalturaReportInputFilter $reportInputFilter - * @param string $dimension - * @param KalturaFilterPager $pager - * @param string $order - * @param string $objectIds - one ID or more (separated by ',') of specific objects to query - * @return string - */ - function getUrlForReportAsCsv($reportTitle, $reportText, $headers, $reportType, KalturaReportInputFilter $reportInputFilter, $dimension = null, KalturaFilterPager $pager = null, $order = null, $objectIds = null) - { - $kparams = array(); - $this->client->addParam($kparams, "reportTitle", $reportTitle); - $this->client->addParam($kparams, "reportText", $reportText); - $this->client->addParam($kparams, "headers", $headers); - $this->client->addParam($kparams, "reportType", $reportType); - $this->client->addParam($kparams, "reportInputFilter", $reportInputFilter->toParams()); - $this->client->addParam($kparams, "dimension", $dimension); - if ($pager !== null) - $this->client->addParam($kparams, "pager", $pager->toParams()); - $this->client->addParam($kparams, "order", $order); - $this->client->addParam($kparams, "objectIds", $objectIds); - $this->client->queueServiceActionCall("report", "getUrlForReportAsCsv", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "string"); - return $resultObject; - } - - /** - * - * - * @param int $id - * @param array $params - * @return KalturaReportResponse - */ - function execute($id, array $params = null) - { - $kparams = array(); - $this->client->addParam($kparams, "id", $id); - if ($params !== null) - foreach($params as $index => $obj) - { - $this->client->addParam($kparams, "params:$index", $obj->toParams()); - } - $this->client->queueServiceActionCall("report", "execute", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaReportResponse"); - return $resultObject; - } - - /** - * - * - * @param int $id - * @param array $params - * @return file - */ - function getCsv($id, array $params = null) - { - $kparams = array(); - $this->client->addParam($kparams, "id", $id); - if ($params !== null) - foreach($params as $index => $obj) - { - $this->client->addParam($kparams, "params:$index", $obj->toParams()); - } - $this->client->queueServiceActionCall("report", "getCsv", $kparams); - if(!$this->client->getDestinationPath() && !$this->client->getReturnServedResult()) - return $this->client->getServeUrl(); - return $this->client->doQueue(); - } - - /** - * Returns report CSV file executed by string params with the following convention: param1=value1;param2=value2 - * - * @param int $id - * @param string $params - * @return file - */ - function getCsvFromStringParams($id, $params = null) - { - $kparams = array(); - $this->client->addParam($kparams, "id", $id); - $this->client->addParam($kparams, "params", $params); - $this->client->queueServiceActionCall("report", "getCsvFromStringParams", $kparams); - if(!$this->client->getDestinationPath() && !$this->client->getReturnServedResult()) - return $this->client->getServeUrl(); - return $this->client->doQueue(); - } -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaSchemaService extends KalturaServiceBase -{ - function __construct(KalturaClient $client = null) - { - parent::__construct($client); - } - - /** - * Serves the requested XSD according to the type and name. - * - * @param string $type - * @return file - */ - function serve($type) - { - $kparams = array(); - $this->client->addParam($kparams, "type", $type); - $this->client->queueServiceActionCall("schema", "serve", $kparams); - if(!$this->client->getDestinationPath() && !$this->client->getReturnServedResult()) - return $this->client->getServeUrl(); - return $this->client->doQueue(); - } -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaSearchService extends KalturaServiceBase -{ - function __construct(KalturaClient $client = null) - { - parent::__construct($client); - } - - /** - * Search for media in one of the supported media providers - * - * @param KalturaSearch $search A KalturaSearch object contains the search keywords, media provider and media type - * @param KalturaFilterPager $pager - * @return KalturaSearchResultResponse - */ - function search(KalturaSearch $search, KalturaFilterPager $pager = null) - { - $kparams = array(); - $this->client->addParam($kparams, "search", $search->toParams()); - if ($pager !== null) - $this->client->addParam($kparams, "pager", $pager->toParams()); - $this->client->queueServiceActionCall("search", "search", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaSearchResultResponse"); - return $resultObject; - } - - /** - * Retrieve extra information about media found in search action - Some providers return only part of the fields needed to create entry from, use this action to get the rest of the fields. - * - * @param KalturaSearchResult $searchResult KalturaSearchResult object extends KalturaSearch and has all fields required for media:add - * @return KalturaSearchResult - */ - function getMediaInfo(KalturaSearchResult $searchResult) - { - $kparams = array(); - $this->client->addParam($kparams, "searchResult", $searchResult->toParams()); - $this->client->queueServiceActionCall("search", "getMediaInfo", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaSearchResult"); - return $resultObject; - } - - /** - * Search for media given a specific URL - Kaltura supports a searchURL action on some of the media providers. - This action will return a KalturaSearchResult object based on a given URL (assuming the media provider is supported) - * - * @param int $mediaType - * @param string $url - * @return KalturaSearchResult - */ - function searchUrl($mediaType, $url) - { - $kparams = array(); - $this->client->addParam($kparams, "mediaType", $mediaType); - $this->client->addParam($kparams, "url", $url); - $this->client->queueServiceActionCall("search", "searchUrl", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaSearchResult"); - return $resultObject; - } - - /** - * - * - * @param int $searchSource - * @param string $userName - * @param string $password - * @return KalturaSearchAuthData - */ - function externalLogin($searchSource, $userName, $password) - { - $kparams = array(); - $this->client->addParam($kparams, "searchSource", $searchSource); - $this->client->addParam($kparams, "userName", $userName); - $this->client->addParam($kparams, "password", $password); - $this->client->queueServiceActionCall("search", "externalLogin", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaSearchAuthData"); - return $resultObject; - } -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaSessionService extends KalturaServiceBase -{ - function __construct(KalturaClient $client = null) - { - parent::__construct($client); - } - - /** - * Start a session with Kaltura's server. - The result KS is the session key that you should pass to all services that requires a ticket. - * - * @param string $secret Remember to provide the correct secret according to the sessionType you want - * @param string $userId - * @param int $type Regular session or Admin session - * @param int $partnerId - * @param int $expiry KS expiry time in seconds - * @param string $privileges - * @return string - */ - function start($secret, $userId = "", $type = 0, $partnerId = null, $expiry = 86400, $privileges = null) - { - $kparams = array(); - $this->client->addParam($kparams, "secret", $secret); - $this->client->addParam($kparams, "userId", $userId); - $this->client->addParam($kparams, "type", $type); - $this->client->addParam($kparams, "partnerId", $partnerId); - $this->client->addParam($kparams, "expiry", $expiry); - $this->client->addParam($kparams, "privileges", $privileges); - $this->client->queueServiceActionCall("session", "start", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "string"); - return $resultObject; - } - - /** - * End a session with the Kaltura server, making the current KS invalid. - * - * @return - */ - function end() - { - $kparams = array(); - $this->client->queueServiceActionCall("session", "end", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "null"); - return $resultObject; - } - - /** - * Start an impersonated session with Kaltura's server. - The result KS is the session key that you should pass to all services that requires a ticket. - * - * @param string $secret - should be the secret (admin or user) of the original partnerId (not impersonatedPartnerId). - * @param int $impersonatedPartnerId - * @param string $userId - impersonated userId - * @param int $type - * @param int $partnerId - * @param int $expiry KS expiry time in seconds - * @param string $privileges - * @return string - */ - function impersonate($secret, $impersonatedPartnerId, $userId = "", $type = 0, $partnerId = null, $expiry = 86400, $privileges = null) - { - $kparams = array(); - $this->client->addParam($kparams, "secret", $secret); - $this->client->addParam($kparams, "impersonatedPartnerId", $impersonatedPartnerId); - $this->client->addParam($kparams, "userId", $userId); - $this->client->addParam($kparams, "type", $type); - $this->client->addParam($kparams, "partnerId", $partnerId); - $this->client->addParam($kparams, "expiry", $expiry); - $this->client->addParam($kparams, "privileges", $privileges); - $this->client->queueServiceActionCall("session", "impersonate", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "string"); - return $resultObject; - } - - /** - * Start an impersonated session with Kaltura's server. - The result KS info contains the session key that you should pass to all services that requires a ticket. - Type, expiry and privileges won't be changed if they're not set - * - * @param string $session The old KS of the impersonated partner - * @param int $type Type of the new KS - * @param int $expiry Expiry time in seconds of the new KS - * @param string $privileges Privileges of the new KS - * @return KalturaSessionInfo - */ - function impersonateByKs($session, $type = null, $expiry = null, $privileges = null) - { - $kparams = array(); - $this->client->addParam($kparams, "session", $session); - $this->client->addParam($kparams, "type", $type); - $this->client->addParam($kparams, "expiry", $expiry); - $this->client->addParam($kparams, "privileges", $privileges); - $this->client->queueServiceActionCall("session", "impersonateByKs", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaSessionInfo"); - return $resultObject; - } - - /** - * Parse session key and return its info - * - * @param string $session The KS to be parsed, keep it empty to use current session. - * @return KalturaSessionInfo - */ - function get($session = null) - { - $kparams = array(); - $this->client->addParam($kparams, "session", $session); - $this->client->queueServiceActionCall("session", "get", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaSessionInfo"); - return $resultObject; - } - - /** - * Start a session for Kaltura's flash widgets - * - * @param string $widgetId - * @param int $expiry - * @return KalturaStartWidgetSessionResponse - */ - function startWidgetSession($widgetId, $expiry = 86400) - { - $kparams = array(); - $this->client->addParam($kparams, "widgetId", $widgetId); - $this->client->addParam($kparams, "expiry", $expiry); - $this->client->queueServiceActionCall("session", "startWidgetSession", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaStartWidgetSessionResponse"); - return $resultObject; - } -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaStatsService extends KalturaServiceBase -{ - function __construct(KalturaClient $client = null) - { - parent::__construct($client); - } - - /** - * Will write to the event log a single line representing the event - client version - will help interprete the line structure. different client versions might have slightly different data/data formats in the line -event_id - number is the row number in yuval's excel -datetime - same format as MySql's datetime - can change and should reflect the time zone -session id - can be some big random number or guid -partner id -entry id -unique viewer -widget id -ui_conf id -uid - the puser id as set by the ppartner -current point - in milliseconds -duration - milliseconds -user ip -process duration - in milliseconds -control id -seek -new point -referrer - - - KalturaStatsEvent $event - * - * @param KalturaStatsEvent $event - * @return bool - */ - function collect(KalturaStatsEvent $event) - { - $kparams = array(); - $this->client->addParam($kparams, "event", $event->toParams()); - $this->client->queueServiceActionCall("stats", "collect", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $resultObject = (bool) $resultObject; - return $resultObject; - } - - /** - * Will collect the kmcEvent sent form the KMC client - // this will actually be an empty function because all events will be sent using GET and will anyway be logged in the apache log - * - * @param KalturaStatsKmcEvent $kmcEvent - * @return - */ - function kmcCollect(KalturaStatsKmcEvent $kmcEvent) - { - $kparams = array(); - $this->client->addParam($kparams, "kmcEvent", $kmcEvent->toParams()); - $this->client->queueServiceActionCall("stats", "kmcCollect", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "null"); - return $resultObject; - } - - /** - * - * - * @param KalturaCEError $kalturaCEError - * @return KalturaCEError - */ - function reportKceError(KalturaCEError $kalturaCEError) - { - $kparams = array(); - $this->client->addParam($kparams, "kalturaCEError", $kalturaCEError->toParams()); - $this->client->queueServiceActionCall("stats", "reportKceError", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaCEError"); - return $resultObject; - } - - /** - * Use this action to report errors to the kaltura server. - * - * @param string $errorCode - * @param string $errorMessage - * @return - */ - function reportError($errorCode, $errorMessage) - { - $kparams = array(); - $this->client->addParam($kparams, "errorCode", $errorCode); - $this->client->addParam($kparams, "errorMessage", $errorMessage); - $this->client->queueServiceActionCall("stats", "reportError", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "null"); - return $resultObject; - } -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaStorageProfileService extends KalturaServiceBase -{ - function __construct(KalturaClient $client = null) - { - parent::__construct($client); - } - - /** - * Adds a storage profile to the Kaltura DB. - * - * @param KalturaStorageProfile $storageProfile - * @return KalturaStorageProfile - */ - function add(KalturaStorageProfile $storageProfile) - { - $kparams = array(); - $this->client->addParam($kparams, "storageProfile", $storageProfile->toParams()); - $this->client->queueServiceActionCall("storageprofile", "add", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaStorageProfile"); - return $resultObject; - } - - /** - * - * - * @param int $storageId - * @param int $status - * @return - */ - function updateStatus($storageId, $status) - { - $kparams = array(); - $this->client->addParam($kparams, "storageId", $storageId); - $this->client->addParam($kparams, "status", $status); - $this->client->queueServiceActionCall("storageprofile", "updateStatus", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "null"); - return $resultObject; - } - - /** - * Get storage profile by id - * - * @param int $storageProfileId - * @return KalturaStorageProfile - */ - function get($storageProfileId) - { - $kparams = array(); - $this->client->addParam($kparams, "storageProfileId", $storageProfileId); - $this->client->queueServiceActionCall("storageprofile", "get", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaStorageProfile"); - return $resultObject; - } - - /** - * Update storage profile by id - * - * @param int $storageProfileId - * @param KalturaStorageProfile $storageProfile Id - * @return KalturaStorageProfile - */ - function update($storageProfileId, KalturaStorageProfile $storageProfile) - { - $kparams = array(); - $this->client->addParam($kparams, "storageProfileId", $storageProfileId); - $this->client->addParam($kparams, "storageProfile", $storageProfile->toParams()); - $this->client->queueServiceActionCall("storageprofile", "update", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaStorageProfile"); - return $resultObject; - } - - /** - * - * - * @param KalturaStorageProfileFilter $filter - * @param KalturaFilterPager $pager - * @return KalturaStorageProfileListResponse - */ - function listAction(KalturaStorageProfileFilter $filter = null, KalturaFilterPager $pager = null) - { - $kparams = array(); - if ($filter !== null) - $this->client->addParam($kparams, "filter", $filter->toParams()); - if ($pager !== null) - $this->client->addParam($kparams, "pager", $pager->toParams()); - $this->client->queueServiceActionCall("storageprofile", "list", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaStorageProfileListResponse"); - return $resultObject; - } -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaSyndicationFeedService extends KalturaServiceBase -{ - function __construct(KalturaClient $client = null) - { - parent::__construct($client); - } - - /** - * Add new Syndication Feed - * - * @param KalturaBaseSyndicationFeed $syndicationFeed - * @return KalturaBaseSyndicationFeed - */ - function add(KalturaBaseSyndicationFeed $syndicationFeed) - { - $kparams = array(); - $this->client->addParam($kparams, "syndicationFeed", $syndicationFeed->toParams()); - $this->client->queueServiceActionCall("syndicationfeed", "add", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaBaseSyndicationFeed"); - return $resultObject; - } - - /** - * Get Syndication Feed by ID - * - * @param string $id - * @return KalturaBaseSyndicationFeed - */ - function get($id) - { - $kparams = array(); - $this->client->addParam($kparams, "id", $id); - $this->client->queueServiceActionCall("syndicationfeed", "get", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaBaseSyndicationFeed"); - return $resultObject; - } - - /** - * Update Syndication Feed by ID - * - * @param string $id - * @param KalturaBaseSyndicationFeed $syndicationFeed - * @return KalturaBaseSyndicationFeed - */ - function update($id, KalturaBaseSyndicationFeed $syndicationFeed) - { - $kparams = array(); - $this->client->addParam($kparams, "id", $id); - $this->client->addParam($kparams, "syndicationFeed", $syndicationFeed->toParams()); - $this->client->queueServiceActionCall("syndicationfeed", "update", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaBaseSyndicationFeed"); - return $resultObject; - } - - /** - * Delete Syndication Feed by ID - * - * @param string $id - * @return - */ - function delete($id) - { - $kparams = array(); - $this->client->addParam($kparams, "id", $id); - $this->client->queueServiceActionCall("syndicationfeed", "delete", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "null"); - return $resultObject; - } - - /** - * List Syndication Feeds by filter with paging support - * - * @param KalturaBaseSyndicationFeedFilter $filter - * @param KalturaFilterPager $pager - * @return KalturaBaseSyndicationFeedListResponse - */ - function listAction(KalturaBaseSyndicationFeedFilter $filter = null, KalturaFilterPager $pager = null) - { - $kparams = array(); - if ($filter !== null) - $this->client->addParam($kparams, "filter", $filter->toParams()); - if ($pager !== null) - $this->client->addParam($kparams, "pager", $pager->toParams()); - $this->client->queueServiceActionCall("syndicationfeed", "list", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaBaseSyndicationFeedListResponse"); - return $resultObject; - } - - /** - * Get entry count for a syndication feed - * - * @param string $feedId - * @return KalturaSyndicationFeedEntryCount - */ - function getEntryCount($feedId) - { - $kparams = array(); - $this->client->addParam($kparams, "feedId", $feedId); - $this->client->queueServiceActionCall("syndicationfeed", "getEntryCount", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaSyndicationFeedEntryCount"); - return $resultObject; - } - - /** - * Request conversion for all entries that doesnt have the required flavor param - returns a comma-separated ids of conversion jobs - * - * @param string $feedId - * @return string - */ - function requestConversion($feedId) - { - $kparams = array(); - $this->client->addParam($kparams, "feedId", $feedId); - $this->client->queueServiceActionCall("syndicationfeed", "requestConversion", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "string"); - return $resultObject; - } -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaSystemService extends KalturaServiceBase -{ - function __construct(KalturaClient $client = null) - { - parent::__construct($client); - } - - /** - * - * - * @return bool - */ - function ping() - { - $kparams = array(); - $this->client->queueServiceActionCall("system", "ping", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $resultObject = (bool) $resultObject; - return $resultObject; - } - - /** - * - * - * @return bool - */ - function pingDatabase() - { - $kparams = array(); - $this->client->queueServiceActionCall("system", "pingDatabase", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $resultObject = (bool) $resultObject; - return $resultObject; - } - - /** - * - * - * @return int - */ - function getTime() - { - $kparams = array(); - $this->client->queueServiceActionCall("system", "getTime", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "integer"); - return $resultObject; - } -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaThumbAssetService extends KalturaServiceBase -{ - function __construct(KalturaClient $client = null) - { - parent::__construct($client); - } - - /** - * Add thumbnail asset - * - * @param string $entryId - * @param KalturaThumbAsset $thumbAsset - * @return KalturaThumbAsset - */ - function add($entryId, KalturaThumbAsset $thumbAsset) - { - $kparams = array(); - $this->client->addParam($kparams, "entryId", $entryId); - $this->client->addParam($kparams, "thumbAsset", $thumbAsset->toParams()); - $this->client->queueServiceActionCall("thumbasset", "add", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaThumbAsset"); - return $resultObject; - } - - /** - * Update content of thumbnail asset - * - * @param string $id - * @param KalturaContentResource $contentResource - * @return KalturaThumbAsset - */ - function setContent($id, KalturaContentResource $contentResource) - { - $kparams = array(); - $this->client->addParam($kparams, "id", $id); - $this->client->addParam($kparams, "contentResource", $contentResource->toParams()); - $this->client->queueServiceActionCall("thumbasset", "setContent", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaThumbAsset"); - return $resultObject; - } - - /** - * Update thumbnail asset - * - * @param string $id - * @param KalturaThumbAsset $thumbAsset - * @return KalturaThumbAsset - */ - function update($id, KalturaThumbAsset $thumbAsset) - { - $kparams = array(); - $this->client->addParam($kparams, "id", $id); - $this->client->addParam($kparams, "thumbAsset", $thumbAsset->toParams()); - $this->client->queueServiceActionCall("thumbasset", "update", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaThumbAsset"); - return $resultObject; - } - - /** - * Serves thumbnail by entry id and thumnail params id - * - * @param string $entryId - * @param int $thumbParamId If not set, default thumbnail will be used. - * @return file - */ - function serveByEntryId($entryId, $thumbParamId = null) - { - $kparams = array(); - $this->client->addParam($kparams, "entryId", $entryId); - $this->client->addParam($kparams, "thumbParamId", $thumbParamId); - $this->client->queueServiceActionCall("thumbasset", "serveByEntryId", $kparams); - if(!$this->client->getDestinationPath() && !$this->client->getReturnServedResult()) - return $this->client->getServeUrl(); - return $this->client->doQueue(); - } - - /** - * Serves thumbnail by its id - * - * @param string $thumbAssetId - * @param int $version - * @param KalturaThumbParams $thumbParams - * @param KalturaThumbnailServeOptions $options - * @return file - */ - function serve($thumbAssetId, $version = null, KalturaThumbParams $thumbParams = null, KalturaThumbnailServeOptions $options = null) - { - $kparams = array(); - $this->client->addParam($kparams, "thumbAssetId", $thumbAssetId); - $this->client->addParam($kparams, "version", $version); - if ($thumbParams !== null) - $this->client->addParam($kparams, "thumbParams", $thumbParams->toParams()); - if ($options !== null) - $this->client->addParam($kparams, "options", $options->toParams()); - $this->client->queueServiceActionCall("thumbasset", "serve", $kparams); - if(!$this->client->getDestinationPath() && !$this->client->getReturnServedResult()) - return $this->client->getServeUrl(); - return $this->client->doQueue(); - } - - /** - * Tags the thumbnail as DEFAULT_THUMB and removes that tag from all other thumbnail assets of the entry. - Create a new file sync link on the entry thumbnail that points to the thumbnail asset file sync. - * - * @param string $thumbAssetId - * @return - */ - function setAsDefault($thumbAssetId) - { - $kparams = array(); - $this->client->addParam($kparams, "thumbAssetId", $thumbAssetId); - $this->client->queueServiceActionCall("thumbasset", "setAsDefault", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "null"); - return $resultObject; - } - - /** - * - * - * @param string $entryId - * @param int $destThumbParamsId Indicate the id of the ThumbParams to be generate this thumbnail by - * @return KalturaThumbAsset - */ - function generateByEntryId($entryId, $destThumbParamsId) - { - $kparams = array(); - $this->client->addParam($kparams, "entryId", $entryId); - $this->client->addParam($kparams, "destThumbParamsId", $destThumbParamsId); - $this->client->queueServiceActionCall("thumbasset", "generateByEntryId", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaThumbAsset"); - return $resultObject; - } - - /** - * - * - * @param string $entryId - * @param KalturaThumbParams $thumbParams - * @param string $sourceAssetId Id of the source asset (flavor or thumbnail) to be used as source for the thumbnail generation - * @return KalturaThumbAsset - */ - function generate($entryId, KalturaThumbParams $thumbParams, $sourceAssetId = null) - { - $kparams = array(); - $this->client->addParam($kparams, "entryId", $entryId); - $this->client->addParam($kparams, "thumbParams", $thumbParams->toParams()); - $this->client->addParam($kparams, "sourceAssetId", $sourceAssetId); - $this->client->queueServiceActionCall("thumbasset", "generate", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaThumbAsset"); - return $resultObject; - } - - /** - * - * - * @param string $thumbAssetId - * @return KalturaThumbAsset - */ - function regenerate($thumbAssetId) - { - $kparams = array(); - $this->client->addParam($kparams, "thumbAssetId", $thumbAssetId); - $this->client->queueServiceActionCall("thumbasset", "regenerate", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaThumbAsset"); - return $resultObject; - } - - /** - * - * - * @param string $thumbAssetId - * @return KalturaThumbAsset - */ - function get($thumbAssetId) - { - $kparams = array(); - $this->client->addParam($kparams, "thumbAssetId", $thumbAssetId); - $this->client->queueServiceActionCall("thumbasset", "get", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaThumbAsset"); - return $resultObject; - } - - /** - * - * - * @param string $entryId - * @return array - */ - function getByEntryId($entryId) - { - $kparams = array(); - $this->client->addParam($kparams, "entryId", $entryId); - $this->client->queueServiceActionCall("thumbasset", "getByEntryId", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "array"); - return $resultObject; - } - - /** - * List Thumbnail Assets by filter and pager - * - * @param KalturaAssetFilter $filter - * @param KalturaFilterPager $pager - * @return KalturaThumbAssetListResponse - */ - function listAction(KalturaAssetFilter $filter = null, KalturaFilterPager $pager = null) - { - $kparams = array(); - if ($filter !== null) - $this->client->addParam($kparams, "filter", $filter->toParams()); - if ($pager !== null) - $this->client->addParam($kparams, "pager", $pager->toParams()); - $this->client->queueServiceActionCall("thumbasset", "list", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaThumbAssetListResponse"); - return $resultObject; - } - - /** - * - * - * @param string $entryId - * @param string $url - * @return KalturaThumbAsset - */ - function addFromUrl($entryId, $url) - { - $kparams = array(); - $this->client->addParam($kparams, "entryId", $entryId); - $this->client->addParam($kparams, "url", $url); - $this->client->queueServiceActionCall("thumbasset", "addFromUrl", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaThumbAsset"); - return $resultObject; - } - - /** - * - * - * @param string $entryId - * @param file $fileData - * @return KalturaThumbAsset - */ - function addFromImage($entryId, $fileData) - { - $kparams = array(); - $this->client->addParam($kparams, "entryId", $entryId); - $kfiles = array(); - $this->client->addParam($kfiles, "fileData", $fileData); - $this->client->queueServiceActionCall("thumbasset", "addFromImage", $kparams, $kfiles); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaThumbAsset"); - return $resultObject; - } - - /** - * - * - * @param string $thumbAssetId - * @return - */ - function delete($thumbAssetId) - { - $kparams = array(); - $this->client->addParam($kparams, "thumbAssetId", $thumbAssetId); - $this->client->queueServiceActionCall("thumbasset", "delete", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "null"); - return $resultObject; - } - - /** - * Get download URL for the asset - * - * @param string $id - * @param int $storageId - * @param KalturaThumbParams $thumbParams - * @return string - */ - function getUrl($id, $storageId = null, KalturaThumbParams $thumbParams = null) - { - $kparams = array(); - $this->client->addParam($kparams, "id", $id); - $this->client->addParam($kparams, "storageId", $storageId); - if ($thumbParams !== null) - $this->client->addParam($kparams, "thumbParams", $thumbParams->toParams()); - $this->client->queueServiceActionCall("thumbasset", "getUrl", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "string"); - return $resultObject; - } - - /** - * Get remote storage existing paths for the asset - * - * @param string $id - * @return KalturaRemotePathListResponse - */ - function getRemotePaths($id) - { - $kparams = array(); - $this->client->addParam($kparams, "id", $id); - $this->client->queueServiceActionCall("thumbasset", "getRemotePaths", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaRemotePathListResponse"); - return $resultObject; - } -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaThumbParamsOutputService extends KalturaServiceBase -{ - function __construct(KalturaClient $client = null) - { - parent::__construct($client); - } - - /** - * Get thumb params output object by ID - * - * @param int $id - * @return KalturaThumbParamsOutput - */ - function get($id) - { - $kparams = array(); - $this->client->addParam($kparams, "id", $id); - $this->client->queueServiceActionCall("thumbparamsoutput", "get", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaThumbParamsOutput"); - return $resultObject; - } - - /** - * List thumb params output objects by filter and pager - * - * @param KalturaThumbParamsOutputFilter $filter - * @param KalturaFilterPager $pager - * @return KalturaThumbParamsOutputListResponse - */ - function listAction(KalturaThumbParamsOutputFilter $filter = null, KalturaFilterPager $pager = null) - { - $kparams = array(); - if ($filter !== null) - $this->client->addParam($kparams, "filter", $filter->toParams()); - if ($pager !== null) - $this->client->addParam($kparams, "pager", $pager->toParams()); - $this->client->queueServiceActionCall("thumbparamsoutput", "list", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaThumbParamsOutputListResponse"); - return $resultObject; - } -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaThumbParamsService extends KalturaServiceBase -{ - function __construct(KalturaClient $client = null) - { - parent::__construct($client); - } - - /** - * Add new Thumb Params - * - * @param KalturaThumbParams $thumbParams - * @return KalturaThumbParams - */ - function add(KalturaThumbParams $thumbParams) - { - $kparams = array(); - $this->client->addParam($kparams, "thumbParams", $thumbParams->toParams()); - $this->client->queueServiceActionCall("thumbparams", "add", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaThumbParams"); - return $resultObject; - } - - /** - * Get Thumb Params by ID - * - * @param int $id - * @return KalturaThumbParams - */ - function get($id) - { - $kparams = array(); - $this->client->addParam($kparams, "id", $id); - $this->client->queueServiceActionCall("thumbparams", "get", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaThumbParams"); - return $resultObject; - } - - /** - * Update Thumb Params by ID - * - * @param int $id - * @param KalturaThumbParams $thumbParams - * @return KalturaThumbParams - */ - function update($id, KalturaThumbParams $thumbParams) - { - $kparams = array(); - $this->client->addParam($kparams, "id", $id); - $this->client->addParam($kparams, "thumbParams", $thumbParams->toParams()); - $this->client->queueServiceActionCall("thumbparams", "update", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaThumbParams"); - return $resultObject; - } - - /** - * Delete Thumb Params by ID - * - * @param int $id - * @return - */ - function delete($id) - { - $kparams = array(); - $this->client->addParam($kparams, "id", $id); - $this->client->queueServiceActionCall("thumbparams", "delete", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "null"); - return $resultObject; - } - - /** - * List Thumb Params by filter with paging support (By default - all system default params will be listed too) - * - * @param KalturaThumbParamsFilter $filter - * @param KalturaFilterPager $pager - * @return KalturaThumbParamsListResponse - */ - function listAction(KalturaThumbParamsFilter $filter = null, KalturaFilterPager $pager = null) - { - $kparams = array(); - if ($filter !== null) - $this->client->addParam($kparams, "filter", $filter->toParams()); - if ($pager !== null) - $this->client->addParam($kparams, "pager", $pager->toParams()); - $this->client->queueServiceActionCall("thumbparams", "list", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaThumbParamsListResponse"); - return $resultObject; - } - - /** - * Get Thumb Params by Conversion Profile ID - * - * @param int $conversionProfileId - * @return array - */ - function getByConversionProfileId($conversionProfileId) - { - $kparams = array(); - $this->client->addParam($kparams, "conversionProfileId", $conversionProfileId); - $this->client->queueServiceActionCall("thumbparams", "getByConversionProfileId", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "array"); - return $resultObject; - } -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaUiConfService extends KalturaServiceBase -{ - function __construct(KalturaClient $client = null) - { - parent::__construct($client); - } - - /** - * UIConf Add action allows you to add a UIConf to Kaltura DB - * - * @param KalturaUiConf $uiConf Mandatory input parameter of type KalturaUiConf - * @return KalturaUiConf - */ - function add(KalturaUiConf $uiConf) - { - $kparams = array(); - $this->client->addParam($kparams, "uiConf", $uiConf->toParams()); - $this->client->queueServiceActionCall("uiconf", "add", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaUiConf"); - return $resultObject; - } - - /** - * Update an existing UIConf - * - * @param int $id - * @param KalturaUiConf $uiConf - * @return KalturaUiConf - */ - function update($id, KalturaUiConf $uiConf) - { - $kparams = array(); - $this->client->addParam($kparams, "id", $id); - $this->client->addParam($kparams, "uiConf", $uiConf->toParams()); - $this->client->queueServiceActionCall("uiconf", "update", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaUiConf"); - return $resultObject; - } - - /** - * Retrieve a UIConf by id - * - * @param int $id - * @return KalturaUiConf - */ - function get($id) - { - $kparams = array(); - $this->client->addParam($kparams, "id", $id); - $this->client->queueServiceActionCall("uiconf", "get", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaUiConf"); - return $resultObject; - } - - /** - * Delete an existing UIConf - * - * @param int $id - * @return - */ - function delete($id) - { - $kparams = array(); - $this->client->addParam($kparams, "id", $id); - $this->client->queueServiceActionCall("uiconf", "delete", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "null"); - return $resultObject; - } - - /** - * Clone an existing UIConf - * - * @param int $id - * @return KalturaUiConf - */ - function cloneAction($id) - { - $kparams = array(); - $this->client->addParam($kparams, "id", $id); - $this->client->queueServiceActionCall("uiconf", "clone", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaUiConf"); - return $resultObject; - } - - /** - * Retrieve a list of available template UIConfs - * - * @param KalturaUiConfFilter $filter - * @param KalturaFilterPager $pager - * @return KalturaUiConfListResponse - */ - function listTemplates(KalturaUiConfFilter $filter = null, KalturaFilterPager $pager = null) - { - $kparams = array(); - if ($filter !== null) - $this->client->addParam($kparams, "filter", $filter->toParams()); - if ($pager !== null) - $this->client->addParam($kparams, "pager", $pager->toParams()); - $this->client->queueServiceActionCall("uiconf", "listTemplates", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaUiConfListResponse"); - return $resultObject; - } - - /** - * Retrieve a list of available UIConfs - * - * @param KalturaUiConfFilter $filter - * @param KalturaFilterPager $pager - * @return KalturaUiConfListResponse - */ - function listAction(KalturaUiConfFilter $filter = null, KalturaFilterPager $pager = null) - { - $kparams = array(); - if ($filter !== null) - $this->client->addParam($kparams, "filter", $filter->toParams()); - if ($pager !== null) - $this->client->addParam($kparams, "pager", $pager->toParams()); - $this->client->queueServiceActionCall("uiconf", "list", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaUiConfListResponse"); - return $resultObject; - } - - /** - * Retrieve a list of all available versions by object type - * - * @return array - */ - function getAvailableTypes() - { - $kparams = array(); - $this->client->queueServiceActionCall("uiconf", "getAvailableTypes", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "array"); - return $resultObject; - } -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaUploadService extends KalturaServiceBase -{ - function __construct(KalturaClient $client = null) - { - parent::__construct($client); - } - - /** - * - * - * @param file $fileData The file data - * @return string - */ - function upload($fileData) - { - $kparams = array(); - $kfiles = array(); - $this->client->addParam($kfiles, "fileData", $fileData); - $this->client->queueServiceActionCall("upload", "upload", $kparams, $kfiles); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "string"); - return $resultObject; - } - - /** - * - * - * @param string $fileName - * @return KalturaUploadResponse - */ - function getUploadedFileTokenByFileName($fileName) - { - $kparams = array(); - $this->client->addParam($kparams, "fileName", $fileName); - $this->client->queueServiceActionCall("upload", "getUploadedFileTokenByFileName", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaUploadResponse"); - return $resultObject; - } -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaUploadTokenService extends KalturaServiceBase -{ - function __construct(KalturaClient $client = null) - { - parent::__construct($client); - } - - /** - * Adds new upload token to upload a file - * - * @param KalturaUploadToken $uploadToken - * @return KalturaUploadToken - */ - function add(KalturaUploadToken $uploadToken = null) - { - $kparams = array(); - if ($uploadToken !== null) - $this->client->addParam($kparams, "uploadToken", $uploadToken->toParams()); - $this->client->queueServiceActionCall("uploadtoken", "add", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaUploadToken"); - return $resultObject; - } - - /** - * Get upload token by id - * - * @param string $uploadTokenId - * @return KalturaUploadToken - */ - function get($uploadTokenId) - { - $kparams = array(); - $this->client->addParam($kparams, "uploadTokenId", $uploadTokenId); - $this->client->queueServiceActionCall("uploadtoken", "get", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaUploadToken"); - return $resultObject; - } - - /** - * Upload a file using the upload token id, returns an error on failure (an exception will be thrown when using one of the Kaltura clients) - * - * @param string $uploadTokenId - * @param file $fileData - * @param bool $resume - * @param bool $finalChunk - * @param float $resumeAt - * @return KalturaUploadToken - */ - function upload($uploadTokenId, $fileData, $resume = false, $finalChunk = true, $resumeAt = -1) - { - $kparams = array(); - $this->client->addParam($kparams, "uploadTokenId", $uploadTokenId); - $kfiles = array(); - $this->client->addParam($kfiles, "fileData", $fileData); - $this->client->addParam($kparams, "resume", $resume); - $this->client->addParam($kparams, "finalChunk", $finalChunk); - $this->client->addParam($kparams, "resumeAt", $resumeAt); - $this->client->queueServiceActionCall("uploadtoken", "upload", $kparams, $kfiles); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaUploadToken"); - return $resultObject; - } - - /** - * Deletes the upload token by upload token id - * - * @param string $uploadTokenId - * @return - */ - function delete($uploadTokenId) - { - $kparams = array(); - $this->client->addParam($kparams, "uploadTokenId", $uploadTokenId); - $this->client->queueServiceActionCall("uploadtoken", "delete", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "null"); - return $resultObject; - } - - /** - * List upload token by filter with pager support. - When using a user session the service will be restricted to users objects only. - * - * @param KalturaUploadTokenFilter $filter - * @param KalturaFilterPager $pager - * @return KalturaUploadTokenListResponse - */ - function listAction(KalturaUploadTokenFilter $filter = null, KalturaFilterPager $pager = null) - { - $kparams = array(); - if ($filter !== null) - $this->client->addParam($kparams, "filter", $filter->toParams()); - if ($pager !== null) - $this->client->addParam($kparams, "pager", $pager->toParams()); - $this->client->queueServiceActionCall("uploadtoken", "list", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaUploadTokenListResponse"); - return $resultObject; - } -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaUserRoleService extends KalturaServiceBase -{ - function __construct(KalturaClient $client = null) - { - parent::__construct($client); - } - - /** - * Adds a new user role object to the account. - * - * @param KalturaUserRole $userRole A new role - * @return KalturaUserRole - */ - function add(KalturaUserRole $userRole) - { - $kparams = array(); - $this->client->addParam($kparams, "userRole", $userRole->toParams()); - $this->client->queueServiceActionCall("userrole", "add", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaUserRole"); - return $resultObject; - } - - /** - * Retrieves a user role object using its ID. - * - * @param int $userRoleId The user role's unique identifier - * @return KalturaUserRole - */ - function get($userRoleId) - { - $kparams = array(); - $this->client->addParam($kparams, "userRoleId", $userRoleId); - $this->client->queueServiceActionCall("userrole", "get", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaUserRole"); - return $resultObject; - } - - /** - * Updates an existing user role object. - * - * @param int $userRoleId The user role's unique identifier - * @param KalturaUserRole $userRole Id The user role's unique identifier - * @return KalturaUserRole - */ - function update($userRoleId, KalturaUserRole $userRole) - { - $kparams = array(); - $this->client->addParam($kparams, "userRoleId", $userRoleId); - $this->client->addParam($kparams, "userRole", $userRole->toParams()); - $this->client->queueServiceActionCall("userrole", "update", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaUserRole"); - return $resultObject; - } - - /** - * Deletes an existing user role object. - * - * @param int $userRoleId The user role's unique identifier - * @return KalturaUserRole - */ - function delete($userRoleId) - { - $kparams = array(); - $this->client->addParam($kparams, "userRoleId", $userRoleId); - $this->client->queueServiceActionCall("userrole", "delete", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaUserRole"); - return $resultObject; - } - - /** - * Lists user role objects that are associated with an account. - Blocked user roles are listed unless you use a filter to exclude them. - Deleted user roles are not listed unless you use a filter to include them. - * - * @param KalturaUserRoleFilter $filter A filter used to exclude specific types of user roles - * @param KalturaFilterPager $pager A limit for the number of records to display on a page - * @return KalturaUserRoleListResponse - */ - function listAction(KalturaUserRoleFilter $filter = null, KalturaFilterPager $pager = null) - { - $kparams = array(); - if ($filter !== null) - $this->client->addParam($kparams, "filter", $filter->toParams()); - if ($pager !== null) - $this->client->addParam($kparams, "pager", $pager->toParams()); - $this->client->queueServiceActionCall("userrole", "list", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaUserRoleListResponse"); - return $resultObject; - } - - /** - * Creates a new user role object that is a duplicate of an existing role. - * - * @param int $userRoleId The user role's unique identifier - * @return KalturaUserRole - */ - function cloneAction($userRoleId) - { - $kparams = array(); - $this->client->addParam($kparams, "userRoleId", $userRoleId); - $this->client->queueServiceActionCall("userrole", "clone", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaUserRole"); - return $resultObject; - } -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaUserService extends KalturaServiceBase -{ - function __construct(KalturaClient $client = null) - { - parent::__construct($client); - } - - /** - * Adds a new user to an existing account in the Kaltura database. - Input param $id is the unique identifier in the partner's system. - * - * @param KalturaUser $user The new user - * @return KalturaUser - */ - function add(KalturaUser $user) - { - $kparams = array(); - $this->client->addParam($kparams, "user", $user->toParams()); - $this->client->queueServiceActionCall("user", "add", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaUser"); - return $resultObject; - } - - /** - * Updates an existing user object. - You can also use this action to update the userId. - * - * @param string $userId The user's unique identifier in the partner's system - * @param KalturaUser $user Id The user's unique identifier in the partner's system - * @return KalturaUser - */ - function update($userId, KalturaUser $user) - { - $kparams = array(); - $this->client->addParam($kparams, "userId", $userId); - $this->client->addParam($kparams, "user", $user->toParams()); - $this->client->queueServiceActionCall("user", "update", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaUser"); - return $resultObject; - } - - /** - * Retrieves a user object for a specified user ID. - * - * @param string $userId The user's unique identifier in the partner's system - * @return KalturaUser - */ - function get($userId = null) - { - $kparams = array(); - $this->client->addParam($kparams, "userId", $userId); - $this->client->queueServiceActionCall("user", "get", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaUser"); - return $resultObject; - } - - /** - * Retrieves a user object for a user's login ID and partner ID. - A login ID is the email address used by a user to log into the system. - * - * @param string $loginId The user's email address that identifies the user for login - * @return KalturaUser - */ - function getByLoginId($loginId) - { - $kparams = array(); - $this->client->addParam($kparams, "loginId", $loginId); - $this->client->queueServiceActionCall("user", "getByLoginId", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaUser"); - return $resultObject; - } - - /** - * Deletes a user from a partner account. - * - * @param string $userId The user's unique identifier in the partner's system - * @return KalturaUser - */ - function delete($userId) - { - $kparams = array(); - $this->client->addParam($kparams, "userId", $userId); - $this->client->queueServiceActionCall("user", "delete", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaUser"); - return $resultObject; - } - - /** - * Lists user objects that are associated with an account. - Blocked users are listed unless you use a filter to exclude them. - Deleted users are not listed unless you use a filter to include them. - * - * @param KalturaUserFilter $filter A filter used to exclude specific types of users - * @param KalturaFilterPager $pager A limit for the number of records to display on a page - * @return KalturaUserListResponse - */ - function listAction(KalturaUserFilter $filter = null, KalturaFilterPager $pager = null) - { - $kparams = array(); - if ($filter !== null) - $this->client->addParam($kparams, "filter", $filter->toParams()); - if ($pager !== null) - $this->client->addParam($kparams, "pager", $pager->toParams()); - $this->client->queueServiceActionCall("user", "list", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaUserListResponse"); - return $resultObject; - } - - /** - * Notifies that a user is banned from an account. - * - * @param string $userId The user's unique identifier in the partner's system - * @return - */ - function notifyBan($userId) - { - $kparams = array(); - $this->client->addParam($kparams, "userId", $userId); - $this->client->queueServiceActionCall("user", "notifyBan", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "null"); - return $resultObject; - } - - /** - * Logs a user into a partner account with a partner ID, a partner user ID (puser), and a user password. - * - * @param int $partnerId The identifier of the partner account - * @param string $userId The user's unique identifier in the partner's system - * @param string $password The user's password - * @param int $expiry The requested time (in seconds) before the generated KS expires (By default, a KS expires after 24 hours). - * @param string $privileges Special privileges - * @return string - */ - function login($partnerId, $userId, $password, $expiry = 86400, $privileges = "*") - { - $kparams = array(); - $this->client->addParam($kparams, "partnerId", $partnerId); - $this->client->addParam($kparams, "userId", $userId); - $this->client->addParam($kparams, "password", $password); - $this->client->addParam($kparams, "expiry", $expiry); - $this->client->addParam($kparams, "privileges", $privileges); - $this->client->queueServiceActionCall("user", "login", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "string"); - return $resultObject; - } - - /** - * Logs a user into a partner account with a user login ID and a user password. - * - * @param string $loginId The user's email address that identifies the user for login - * @param string $password The user's password - * @param int $partnerId The identifier of the partner account - * @param int $expiry The requested time (in seconds) before the generated KS expires (By default, a KS expires after 24 hours). - * @param string $privileges Special privileges - * @return string - */ - function loginByLoginId($loginId, $password, $partnerId = null, $expiry = 86400, $privileges = "*") - { - $kparams = array(); - $this->client->addParam($kparams, "loginId", $loginId); - $this->client->addParam($kparams, "password", $password); - $this->client->addParam($kparams, "partnerId", $partnerId); - $this->client->addParam($kparams, "expiry", $expiry); - $this->client->addParam($kparams, "privileges", $privileges); - $this->client->queueServiceActionCall("user", "loginByLoginId", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "string"); - return $resultObject; - } - - /** - * Updates a user's login data: email, password, name. - * - * @param string $oldLoginId The user's current email address that identified the user for login - * @param string $password The user's current email address that identified the user for login - * @param string $newLoginId Optional, The user's email address that will identify the user for login - * @param string $newPassword Optional, The user's new password - * @param string $newFirstName Optional, The user's new first name - * @param string $newLastName Optional, The user's new last name - * @return - */ - function updateLoginData($oldLoginId, $password, $newLoginId = "", $newPassword = "", $newFirstName = null, $newLastName = null) - { - $kparams = array(); - $this->client->addParam($kparams, "oldLoginId", $oldLoginId); - $this->client->addParam($kparams, "password", $password); - $this->client->addParam($kparams, "newLoginId", $newLoginId); - $this->client->addParam($kparams, "newPassword", $newPassword); - $this->client->addParam($kparams, "newFirstName", $newFirstName); - $this->client->addParam($kparams, "newLastName", $newLastName); - $this->client->queueServiceActionCall("user", "updateLoginData", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "null"); - return $resultObject; - } - - /** - * Reset user's password and send the user an email to generate a new one. - * - * @param string $email The user's email address (login email) - * @return - */ - function resetPassword($email) - { - $kparams = array(); - $this->client->addParam($kparams, "email", $email); - $this->client->queueServiceActionCall("user", "resetPassword", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "null"); - return $resultObject; - } - - /** - * Set initial users password - * - * @param string $hashKey The hash key used to identify the user (retrieved by email) - * @param string $newPassword The new password to set for the user - * @return - */ - function setInitialPassword($hashKey, $newPassword) - { - $kparams = array(); - $this->client->addParam($kparams, "hashKey", $hashKey); - $this->client->addParam($kparams, "newPassword", $newPassword); - $this->client->queueServiceActionCall("user", "setInitialPassword", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "null"); - return $resultObject; - } - - /** - * Enables a user to log into a partner account using an email address and a password - * - * @param string $userId The user's unique identifier in the partner's system - * @param string $loginId The user's email address that identifies the user for login - * @param string $password The user's password - * @return KalturaUser - */ - function enableLogin($userId, $loginId, $password = null) - { - $kparams = array(); - $this->client->addParam($kparams, "userId", $userId); - $this->client->addParam($kparams, "loginId", $loginId); - $this->client->addParam($kparams, "password", $password); - $this->client->queueServiceActionCall("user", "enableLogin", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaUser"); - return $resultObject; - } - - /** - * Disables a user's ability to log into a partner account using an email address and a password. - You may use either a userId or a loginId parameter for this action. - * - * @param string $userId The user's unique identifier in the partner's system - * @param string $loginId The user's email address that identifies the user for login - * @return KalturaUser - */ - function disableLogin($userId = null, $loginId = null) - { - $kparams = array(); - $this->client->addParam($kparams, "userId", $userId); - $this->client->addParam($kparams, "loginId", $loginId); - $this->client->queueServiceActionCall("user", "disableLogin", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaUser"); - return $resultObject; - } - - /** - * Index an entry by id. - * - * @param string $id - * @param bool $shouldUpdate - * @return string - */ - function index($id, $shouldUpdate = true) - { - $kparams = array(); - $this->client->addParam($kparams, "id", $id); - $this->client->addParam($kparams, "shouldUpdate", $shouldUpdate); - $this->client->queueServiceActionCall("user", "index", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "string"); - return $resultObject; - } - - /** - * - * - * @param file $fileData - * @param KalturaBulkUploadJobData $bulkUploadData - * @param KalturaBulkUploadUserData $bulkUploadUserData - * @return KalturaBulkUpload - */ - function addFromBulkUpload($fileData, KalturaBulkUploadJobData $bulkUploadData = null, KalturaBulkUploadUserData $bulkUploadUserData = null) - { - $kparams = array(); - $kfiles = array(); - $this->client->addParam($kfiles, "fileData", $fileData); - if ($bulkUploadData !== null) - $this->client->addParam($kparams, "bulkUploadData", $bulkUploadData->toParams()); - if ($bulkUploadUserData !== null) - $this->client->addParam($kparams, "bulkUploadUserData", $bulkUploadUserData->toParams()); - $this->client->queueServiceActionCall("user", "addFromBulkUpload", $kparams, $kfiles); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaBulkUpload"); - return $resultObject; - } - - /** - * Action which checks whther user login - * - * @param KalturaUserLoginDataFilter $filter - * @return bool - */ - function checkLoginDataExists(KalturaUserLoginDataFilter $filter) - { - $kparams = array(); - $this->client->addParam($kparams, "filter", $filter->toParams()); - $this->client->queueServiceActionCall("user", "checkLoginDataExists", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $resultObject = (bool) $resultObject; - return $resultObject; - } -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaWidgetService extends KalturaServiceBase -{ - function __construct(KalturaClient $client = null) - { - parent::__construct($client); - } - - /** - * Add new widget, can be attached to entry or kshow - SourceWidget is ignored. - * - * @param KalturaWidget $widget - * @return KalturaWidget - */ - function add(KalturaWidget $widget) - { - $kparams = array(); - $this->client->addParam($kparams, "widget", $widget->toParams()); - $this->client->queueServiceActionCall("widget", "add", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaWidget"); - return $resultObject; - } - - /** - * Update exisiting widget - * - * @param string $id - * @param KalturaWidget $widget - * @return KalturaWidget - */ - function update($id, KalturaWidget $widget) - { - $kparams = array(); - $this->client->addParam($kparams, "id", $id); - $this->client->addParam($kparams, "widget", $widget->toParams()); - $this->client->queueServiceActionCall("widget", "update", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaWidget"); - return $resultObject; - } - - /** - * Get widget by id - * - * @param string $id - * @return KalturaWidget - */ - function get($id) - { - $kparams = array(); - $this->client->addParam($kparams, "id", $id); - $this->client->queueServiceActionCall("widget", "get", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaWidget"); - return $resultObject; - } - - /** - * Add widget based on existing widget. - Must provide valid sourceWidgetId - * - * @param KalturaWidget $widget - * @return KalturaWidget - */ - function cloneAction(KalturaWidget $widget) - { - $kparams = array(); - $this->client->addParam($kparams, "widget", $widget->toParams()); - $this->client->queueServiceActionCall("widget", "clone", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaWidget"); - return $resultObject; - } - - /** - * Retrieve a list of available widget depends on the filter given - * - * @param KalturaWidgetFilter $filter - * @param KalturaFilterPager $pager - * @return KalturaWidgetListResponse - */ - function listAction(KalturaWidgetFilter $filter = null, KalturaFilterPager $pager = null) - { - $kparams = array(); - if ($filter !== null) - $this->client->addParam($kparams, "filter", $filter->toParams()); - if ($pager !== null) - $this->client->addParam($kparams, "pager", $pager->toParams()); - $this->client->queueServiceActionCall("widget", "list", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaWidgetListResponse"); - return $resultObject; - } -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaXInternalService extends KalturaServiceBase -{ - function __construct(KalturaClient $client = null) - { - parent::__construct($client); - } - - /** - * Creates new download job for multiple entry ids (comma separated), an email will be sent when the job is done - This sevice support the following entries: - - MediaEntry - - Video will be converted using the flavor params id - - Audio will be downloaded as MP3 - - Image will be downloaded as Jpeg - - MixEntry will be flattened using the flavor params id - - Other entry types are not supported - Returns the admin email that the email message will be sent to - * - * @param string $entryIds Comma separated list of entry ids - * @param string $flavorParamsId - * @return string - */ - function xAddBulkDownload($entryIds, $flavorParamsId = "") - { - $kparams = array(); - $this->client->addParam($kparams, "entryIds", $entryIds); - $this->client->addParam($kparams, "flavorParamsId", $flavorParamsId); - $this->client->queueServiceActionCall("xinternal", "xAddBulkDownload", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "string"); - return $resultObject; - } -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaClient extends KalturaClientBase -{ - /** - * @var string - */ - protected $apiVersion = '3.1.6'; - - /** - * Manage access control profiles - * @var KalturaAccessControlProfileService - */ - public $accessControlProfile = null; - - /** - * Add & Manage Access Controls - * @var KalturaAccessControlService - */ - public $accessControl = null; - - /** - * Manage details for the administrative user - * @var KalturaAdminUserService - */ - public $adminUser = null; - - /** - * Base Entry Service - * @var KalturaBaseEntryService - */ - public $baseEntry = null; - - /** - * Bulk upload service is used to upload & manage bulk uploads using CSV files. - * This service manages only entry bulk uploads. - * @var KalturaBulkUploadService - */ - public $bulkUpload = null; - - /** - * Add & Manage CategoryEntry - assign entry to category - * @var KalturaCategoryEntryService - */ - public $categoryEntry = null; - - /** - * Add & Manage Categories - * @var KalturaCategoryService - */ - public $category = null; - - /** - * Add & Manage CategoryUser - membership of a user in a category - * @var KalturaCategoryUserService - */ - public $categoryUser = null; - - /** - * Manage the connection between Conversion Profiles and Asset Params - * @var KalturaConversionProfileAssetParamsService - */ - public $conversionProfileAssetParams = null; - - /** - * Add & Manage Conversion Profiles - * @var KalturaConversionProfileService - */ - public $conversionProfile = null; - - /** - * Data service lets you manage data content (textual content) - * @var KalturaDataService - */ - public $data = null; - - /** - * Document service - * @var KalturaDocumentService - */ - public $document = null; - - /** - * EmailIngestionProfile service lets you manage email ingestion profile records - * @var KalturaEmailIngestionProfileService - */ - public $EmailIngestionProfile = null; - - /** - * Manage file assets - * @var KalturaFileAssetService - */ - public $fileAsset = null; - - /** - * Retrieve information and invoke actions on Flavor Asset - * @var KalturaFlavorAssetService - */ - public $flavorAsset = null; - - /** - * Flavor Params Output service - * @var KalturaFlavorParamsOutputService - */ - public $flavorParamsOutput = null; - - /** - * Add & Manage Flavor Params - * @var KalturaFlavorParamsService - */ - public $flavorParams = null; - - /** - * Manage live channel segments - * @var KalturaLiveChannelSegmentService - */ - public $liveChannelSegment = null; - - /** - * Live Channel service lets you manage live channels - * @var KalturaLiveChannelService - */ - public $liveChannel = null; - - /** - * Live Stream service lets you manage live stream entries - * @var KalturaLiveStreamService - */ - public $liveStream = null; - - /** - * Media Info service - * @var KalturaMediaInfoService - */ - public $mediaInfo = null; - - /** - * Manage media servers - * @var KalturaMediaServerService - */ - public $mediaServer = null; - - /** - * Media service lets you upload and manage media files (images / videos & audio) - * @var KalturaMediaService - */ - public $media = null; - - /** - * A Mix is an XML unique format invented by Kaltura, it allows the user to create a mix of videos and images, in and out points, transitions, text overlays, soundtrack, effects and much more... - * Mixing service lets you create a new mix, manage its metadata and make basic manipulations. - * @var KalturaMixingService - */ - public $mixing = null; - - /** - * Notification Service - * @var KalturaNotificationService - */ - public $notification = null; - - /** - * Partner service allows you to change/manage your partner personal details and settings as well - * @var KalturaPartnerService - */ - public $partner = null; - - /** - * PermissionItem service lets you create and manage permission items - * @var KalturaPermissionItemService - */ - public $permissionItem = null; - - /** - * Permission service lets you create and manage user permissions - * @var KalturaPermissionService - */ - public $permission = null; - - /** - * Playlist service lets you create,manage and play your playlists - * Playlists could be static (containing a fixed list of entries) or dynamic (baseed on a filter) - * @var KalturaPlaylistService - */ - public $playlist = null; - - /** - * Api for getting reports data by the report type and some inputFilter - * @var KalturaReportService - */ - public $report = null; - - /** - * Expose the schema definitions for syndication MRSS, bulk upload XML and other schema types. - * @var KalturaSchemaService - */ - public $schema = null; - - /** - * Search service allows you to search for media in various media providers - * This service is being used mostly by the CW component - * @var KalturaSearchService - */ - public $search = null; - - /** - * Session service - * @var KalturaSessionService - */ - public $session = null; - - /** - * Stats Service - * @var KalturaStatsService - */ - public $stats = null; - - /** - * Storage Profiles service - * @var KalturaStorageProfileService - */ - public $storageProfile = null; - - /** - * Add & Manage Syndication Feeds - * @var KalturaSyndicationFeedService - */ - public $syndicationFeed = null; - - /** - * System service is used for internal system helpers & to retrieve system level information - * @var KalturaSystemService - */ - public $system = null; - - /** - * Retrieve information and invoke actions on Thumb Asset - * @var KalturaThumbAssetService - */ - public $thumbAsset = null; - - /** - * Thumbnail Params Output service - * @var KalturaThumbParamsOutputService - */ - public $thumbParamsOutput = null; - - /** - * Add & Manage Thumb Params - * @var KalturaThumbParamsService - */ - public $thumbParams = null; - - /** - * UiConf service lets you create and manage your UIConfs for the various flash components - * This service is used by the KMC-ApplicationStudio - * @var KalturaUiConfService - */ - public $uiConf = null; - - /** - * - * @var KalturaUploadService - */ - public $upload = null; - - /** - * - * @var KalturaUploadTokenService - */ - public $uploadToken = null; - - /** - * UserRole service lets you create and manage user roles - * @var KalturaUserRoleService - */ - public $userRole = null; - - /** - * Manage partner users on Kaltura's side - * The userId in kaltura is the unique Id in the partner's system, and the [partnerId,Id] couple are unique key in kaltura's DB - * @var KalturaUserService - */ - public $user = null; - - /** - * Widget service for full widget management - * @var KalturaWidgetService - */ - public $widget = null; - - /** - * Internal Service is used for actions that are used internally in Kaltura applications and might be changed in the future without any notice. - * @var KalturaXInternalService - */ - public $xInternal = null; - - /** - * Kaltura client constructor - * - * @param KalturaConfiguration $config - */ - public function __construct(KalturaConfiguration $config) - { - parent::__construct($config); - - $this->accessControlProfile = new KalturaAccessControlProfileService($this); - $this->accessControl = new KalturaAccessControlService($this); - $this->adminUser = new KalturaAdminUserService($this); - $this->baseEntry = new KalturaBaseEntryService($this); - $this->bulkUpload = new KalturaBulkUploadService($this); - $this->categoryEntry = new KalturaCategoryEntryService($this); - $this->category = new KalturaCategoryService($this); - $this->categoryUser = new KalturaCategoryUserService($this); - $this->conversionProfileAssetParams = new KalturaConversionProfileAssetParamsService($this); - $this->conversionProfile = new KalturaConversionProfileService($this); - $this->data = new KalturaDataService($this); - $this->document = new KalturaDocumentService($this); - $this->EmailIngestionProfile = new KalturaEmailIngestionProfileService($this); - $this->fileAsset = new KalturaFileAssetService($this); - $this->flavorAsset = new KalturaFlavorAssetService($this); - $this->flavorParamsOutput = new KalturaFlavorParamsOutputService($this); - $this->flavorParams = new KalturaFlavorParamsService($this); - $this->liveChannelSegment = new KalturaLiveChannelSegmentService($this); - $this->liveChannel = new KalturaLiveChannelService($this); - $this->liveStream = new KalturaLiveStreamService($this); - $this->mediaInfo = new KalturaMediaInfoService($this); - $this->mediaServer = new KalturaMediaServerService($this); - $this->media = new KalturaMediaService($this); - $this->mixing = new KalturaMixingService($this); - $this->notification = new KalturaNotificationService($this); - $this->partner = new KalturaPartnerService($this); - $this->permissionItem = new KalturaPermissionItemService($this); - $this->permission = new KalturaPermissionService($this); - $this->playlist = new KalturaPlaylistService($this); - $this->report = new KalturaReportService($this); - $this->schema = new KalturaSchemaService($this); - $this->search = new KalturaSearchService($this); - $this->session = new KalturaSessionService($this); - $this->stats = new KalturaStatsService($this); - $this->storageProfile = new KalturaStorageProfileService($this); - $this->syndicationFeed = new KalturaSyndicationFeedService($this); - $this->system = new KalturaSystemService($this); - $this->thumbAsset = new KalturaThumbAssetService($this); - $this->thumbParamsOutput = new KalturaThumbParamsOutputService($this); - $this->thumbParams = new KalturaThumbParamsService($this); - $this->uiConf = new KalturaUiConfService($this); - $this->upload = new KalturaUploadService($this); - $this->uploadToken = new KalturaUploadTokenService($this); - $this->userRole = new KalturaUserRoleService($this); - $this->user = new KalturaUserService($this); - $this->widget = new KalturaWidgetService($this); - $this->xInternal = new KalturaXInternalService($this); - } - -} - diff --git a/local/kaltura/API/KalturaClientBase.php b/local/kaltura/API/KalturaClientBase.php deleted file mode 100644 index aff941328d669..0000000000000 --- a/local/kaltura/API/KalturaClientBase.php +++ /dev/null @@ -1,1228 +0,0 @@ -. -// -// @ignore -// =================================================================================================== - -/** - * @package Kaltura - * @subpackage Client - */ -class MultiRequestSubResult implements ArrayAccess -{ - function __construct($value) - { - $this->value = $value; - } - - function __toString() - { - return '{' . $this->value . '}'; - } - - function __get($name) - { - return new MultiRequestSubResult($this->value . ':' . $name); - } - - public function offsetExists($offset) - { - return true; - } - - public function offsetGet($offset) - { - return new MultiRequestSubResult($this->value . ':' . $offset); - } - - public function offsetSet($offset, $value) - { - } - - public function offsetUnset($offset) - { - } -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaNull -{ - private static $instance; - - private function __construct() - { - - } - - public static function getInstance() - { - if (!isset(self::$instance)) { - $c = __CLASS__; - self::$instance = new $c(); - } - return self::$instance; - } - - function __toString() - { - return ''; - } - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaClientBase -{ - const KALTURA_SERVICE_FORMAT_JSON = 1; - const KALTURA_SERVICE_FORMAT_XML = 2; - const KALTURA_SERVICE_FORMAT_PHP = 3; - - // KS V2 constants - const RANDOM_SIZE = 16; - - const FIELD_EXPIRY = '_e'; - const FIELD_TYPE = '_t'; - const FIELD_USER = '_u'; - - const METHOD_POST = 'POST'; - const METHOD_GET = 'GET'; - - /** - * @var string - */ - protected $apiVersion = null; - - /** - * @var KalturaConfiguration - */ - protected $config; - - /** - * @var string - */ - private $ks; - - /** - * @var boolean - */ - private $shouldLog = false; - - /** - * @var bool - */ - private $isMultiRequest = false; - - /** - * @var unknown_type - */ - private $callsQueue = array(); - - /** - * Array of all plugin services - * - * @var array - */ - protected $pluginServices = array(); - - /** - * @var Array of response headers - */ - private $responseHeaders = array(); - - /** - * path to save served results - * @var string - */ - protected $destinationPath = null; - - /** - * return served results without unserializing them - * @var boolean - */ - protected $returnServedResult = null; - - public function __get($serviceName) - { - if(isset($this->pluginServices[$serviceName])) - return $this->pluginServices[$serviceName]; - - return null; - } - - /** - * Kaltura client constructor - * - * @param KalturaConfiguration $config - */ - public function __construct(KalturaConfiguration $config) - { - $this->config = $config; - - $logger = $this->config->getLogger(); - if ($logger) - { - $this->shouldLog = true; - } - - // load all plugins - $pluginsFolder = realpath(dirname(__FILE__)) . '/KalturaPlugins'; - if(is_dir($pluginsFolder)) - { - $dir = dir($pluginsFolder); - while (false !== $fileName = $dir->read()) - { - $matches = null; - if(preg_match('/^([^.]+).php$/', $fileName, $matches)) - { - require_once("$pluginsFolder/$fileName"); - - $pluginClass = $matches[1]; - if(!class_exists($pluginClass) || !in_array('IKalturaClientPlugin', class_implements($pluginClass))) - continue; - - $plugin = call_user_func(array($pluginClass, 'get'), $this); - if(!($plugin instanceof IKalturaClientPlugin)) - continue; - - $pluginName = $plugin->getName(); - $services = $plugin->getServices(); - foreach($services as $serviceName => $service) - { - $service->setClient($this); - $this->pluginServices[$serviceName] = $service; - } - } - } - } - } - - /* Store response headers into array */ - public function readHeader($ch, $string) - { - array_push($this->responseHeaders, $string); - return strlen($string); - } - - /* Retrive response headers */ - public function getResponseHeaders() - { - return $this->responseHeaders; - } - - public function getServeUrl() - { - if (count($this->callsQueue) != 1) - return null; - - $params = array(); - $files = array(); - $this->log("service url: [" . $this->config->serviceUrl . "]"); - - // append the basic params - $this->addParam($params, "apiVersion", $this->apiVersion); - $this->addParam($params, "format", $this->config->format); - $this->addParam($params, "clientTag", $this->config->clientTag); - - $call = $this->callsQueue[0]; - $this->resetRequest(); - - $params = array_merge($params, $call->params); - $signature = $this->signature($params); - $this->addParam($params, "kalsig", $signature); - - $url = $this->config->serviceUrl . "/api_v3/index.php?service={$call->service}&action={$call->action}"; - $url .= '&' . http_build_query($params); - $this->log("Returned url [$url]"); - return $url; - } - - public function queueServiceActionCall($service, $action, $params = array(), $files = array()) - { - // in start session partner id is optional (default -1). if partner id was not set, use the one in the config - if ((!isset($params["partnerId"]) || $params["partnerId"] === -1) && !is_null($this->config->partnerId)) - $params["partnerId"] = $this->config->partnerId; - - $this->addParam($params, "ks", $this->ks); - - $call = new KalturaServiceActionCall($service, $action, $params, $files); - $this->callsQueue[] = $call; - } - - protected function resetRequest() - { - $this->destinationPath = null; - $this->returnServedResult = false; - $this->isMultiRequest = false; - $this->callsQueue = array(); - } - - /** - * Call all API service that are in queue - * - * @return unknown - */ - public function doQueue() - { - if($this->isMultiRequest && ($this->destinationPath || $this->returnServedResult)) - { - $this->resetRequest(); - throw new KalturaClientException("Downloading files is not supported as part of multi-request.", KalturaClientException::ERROR_DOWNLOAD_IN_MULTIREQUEST); - } - - if (count($this->callsQueue) == 0) - { - $this->resetRequest(); - return null; - } - - $startTime = microtime(true); - - $params = array(); - $files = array(); - $this->log("service url: [" . $this->config->serviceUrl . "]"); - - // append the basic params - $this->addParam($params, "apiVersion", $this->apiVersion); - $this->addParam($params, "format", $this->config->format); - $this->addParam($params, "clientTag", $this->config->clientTag); - $this->addParam($params, "ignoreNull", true); - - $url = $this->config->serviceUrl."/api_v3/index.php?service="; - if ($this->isMultiRequest) - { - $url .= "multirequest"; - $i = 1; - foreach ($this->callsQueue as $call) - { - $callParams = $call->getParamsForMultiRequest($i); - $callFiles = $call->getFilesForMultiRequest($i); - $params = array_merge($params, $callParams); - $files = array_merge($files, $callFiles); - $i++; - } - } - else - { - $call = $this->callsQueue[0]; - $url .= $call->service."&action=".$call->action; - $params = array_merge($params, $call->params); - $files = $call->files; - } - - $signature = $this->signature($params); - $this->addParam($params, "kalsig", $signature); - - try - { - list($postResult, $error) = $this->doHttpRequest($url, $params, $files); - } - catch(Exception $e) - { - $this->resetRequest(); - throw $e; - } - - if ($error) - { - $this->resetRequest(); - throw new KalturaClientException($error, KalturaClientException::ERROR_GENERIC); - } - else - { - // print server debug info to log - $serverName = null; - $serverSession = null; - foreach ($this->responseHeaders as $curHeader) - { - $splittedHeader = explode(':', $curHeader, 2); - if ($splittedHeader[0] == 'X-Me') - $serverName = trim($splittedHeader[1]); - else if ($splittedHeader[0] == 'X-Kaltura-Session') - $serverSession = trim($splittedHeader[1]); - } - if (!is_null($serverName) || !is_null($serverSession)) - $this->log("server: [{$serverName}], session: [{$serverSession}]"); - - $this->log("result (serialized): " . $postResult); - - if($this->returnServedResult) - { - $result = $postResult; - } - elseif($this->destinationPath) - { - if(!$postResult) - { - $this->resetRequest(); - throw new KalturaClientException("failed to download file", KalturaClientException::ERROR_READ_FAILED); - } - } - elseif ($this->config->format == self::KALTURA_SERVICE_FORMAT_PHP) - { - $result = @unserialize($postResult); - - if ($result === false && serialize(false) !== $postResult) - { - $this->resetRequest(); - throw new KalturaClientException("failed to unserialize server result\n$postResult", KalturaClientException::ERROR_UNSERIALIZE_FAILED); - } - $dump = print_r($result, true); - $this->log("result (object dump): " . $dump); - } - else - { - $this->resetRequest(); - throw new KalturaClientException("unsupported format: $postResult", KalturaClientException::ERROR_FORMAT_NOT_SUPPORTED); - } - } - $this->resetRequest(); - - $endTime = microtime (true); - - $this->log("execution time for [".$url."]: [" . ($endTime - $startTime) . "]"); - - return $result; - } - - /** - * Sign array of parameters - * - * @param array $params - * @return string - */ - private function signature($params) - { - ksort($params); - $str = ""; - foreach ($params as $k => $v) - { - $str .= $k.$v; - } - return md5($str); - } - - /** - * Send http request by using curl (if available) or php stream_context - * - * @param string $url - * @param parameters $params - * @return array of result and error - */ - protected function doHttpRequest($url, $params = array(), $files = array()) - { - if (function_exists('curl_init')) - return $this->doCurl($url, $params, $files); - - if($this->destinationPath || $this->returnServedResult) - throw new KalturaClientException("Downloading files is not supported with stream context http request, please use curl.", KalturaClientException::ERROR_DOWNLOAD_NOT_SUPPORTED); - - return $this->doPostRequest($url, $params, $files); - } - - /** - * Curl HTTP POST Request - * - * @param string $url - * @param array $params - * @param array $files - * @return array of result and error - */ - private function doCurl($url, $params = array(), $files = array()) - { - $opt = http_build_query($params, null, "&"); - // Force POST in case we have files - if(count($files) > 0) { - $this->config->method = self::METHOD_POST; - } - // Check for GET and append params to url - if( $this->config->method == self::METHOD_GET ) { - $url = $url . '&' . $opt; - } - $this->responseHeaders = array(); - $cookies = array(); - $ch = curl_init(); - curl_setopt($ch, CURLOPT_URL, $url); - if( $this->config->method == self::METHOD_POST ) { - curl_setopt($ch, CURLOPT_POST, 1); - if (count($files) > 0) - { - foreach($files as &$file) - $file = "@".$file; // let curl know its a file - curl_setopt($ch, CURLOPT_POSTFIELDS, array_merge($params, $files)); - } - else - { - $this->log("curl: $url&$opt"); - curl_setopt($ch, CURLOPT_POSTFIELDS, $opt); - } - } - curl_setopt($ch, CURLOPT_ENCODING, 'gzip,deflate'); - curl_setopt($ch, CURLOPT_USERAGENT, $this->config->userAgent); - if (count($files) > 0) - curl_setopt($ch, CURLOPT_TIMEOUT, 0); - else - curl_setopt($ch, CURLOPT_TIMEOUT, $this->config->curlTimeout); - - if ($this->config->startZendDebuggerSession === true) - { - $zendDebuggerParams = $this->getZendDebuggerParams($url); - $cookies = array_merge($cookies, $zendDebuggerParams); - } - - if (count($cookies) > 0) - { - $cookiesStr = http_build_query($cookies, null, '; '); - curl_setopt($ch, CURLOPT_COOKIE, $cookiesStr); - } - - if (isset($this->config->proxyHost)) { - curl_setopt($ch, CURLOPT_HTTPPROXYTUNNEL, true); - curl_setopt($ch, CURLOPT_PROXY, $this->config->proxyHost); - if (isset($this->config->proxyPort)) { - curl_setopt($ch, CURLOPT_PROXYPORT, $this->config->proxyPort); - } - if (isset($this->config->proxyUser)) { - curl_setopt($ch, CURLOPT_PROXYUSERPWD, $this->config->proxyUser.':'.$this->config->proxyPassword); - } - if (isset($this->config->proxyType) && $this->config->proxyType === 'SOCKS5') { - curl_setopt($ch, CURLOPT_PROXYTYPE, CURLPROXY_SOCKS5); - } - } - - // Set SSL verification - if(!$this->getConfig()->verifySSL) - { - curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); - curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 2); - } - elseif($this->getConfig()->sslCertificatePath) - { - curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, true); - curl_setopt($ch, CURLOPT_CAINFO, $this->getConfig()->sslCertificatePath); - } - - // Set custom headers - curl_setopt($ch, CURLOPT_HTTPHEADER, $this->config->requestHeaders ); - - // Save response headers - curl_setopt($ch, CURLOPT_HEADERFUNCTION, array($this, 'readHeader') ); - - $destinationResource = null; - if($this->destinationPath) - { - $destinationResource = fopen($this->destinationPath, "wb"); - curl_setopt($ch, CURLOPT_FILE, $destinationResource); - } - else - { - curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); - } - - $result = curl_exec($ch); - - if($destinationResource) - fclose($destinationResource); - - $curlError = curl_error($ch); - curl_close($ch); - return array($result, $curlError); - } - - /** - * HTTP stream context request - * - * @param string $url - * @param array $params - * @return array of result and error - */ - private function doPostRequest($url, $params = array(), $files = array()) - { - if (count($files) > 0) - throw new KalturaClientException("Uploading files is not supported with stream context http request, please use curl.", KalturaClientException::ERROR_UPLOAD_NOT_SUPPORTED); - - $formattedData = http_build_query($params , "", "&"); - $this->log("post: $url&$formattedData"); - - $params = array('http' => array( - "method" => "POST", - "User-Agent: " . $this->config->userAgent . "\r\n". - "Accept-language: en\r\n". - "Content-type: application/x-www-form-urlencoded\r\n", - "content" => $formattedData - )); - - if (isset($this->config->proxyType) && $this->config->proxyType === 'SOCKS5') { - throw new KalturaClientException("Cannot use SOCKS5 without curl installed.", KalturaClientException::ERROR_CONNECTION_FAILED); - } - if (isset($this->config->proxyHost)) { - $proxyhost = 'tcp://' . $this->config->proxyHost; - if (isset($this->config->proxyPort)) { - $proxyhost = $proxyhost . ":" . $this->config->proxyPort; - } - $params['http']['proxy'] = $proxyhost; - $params['http']['request_fulluri'] = true; - if (isset($this->config->proxyUser)) { - $auth = base64_encode($this->config->proxyUser.':'.$this->config->proxyPassword); - $params['http']['header'] = 'Proxy-Authorization: Basic ' . $auth; - } - } - - $ctx = stream_context_create($params); - $fp = @fopen($url, 'rb', false, $ctx); - if (!$fp) { - $phpErrorMsg = ""; - throw new KalturaClientException("Problem with $url, $phpErrorMsg", KalturaClientException::ERROR_CONNECTION_FAILED); - } - $response = @stream_get_contents($fp); - if ($response === false) { - throw new KalturaClientException("Problem reading data from $url, $phpErrorMsg", KalturaClientException::ERROR_READ_FAILED); - } - return array($response, ''); - } - - /** - * @return string - */ - public function getKs() - { - return $this->ks; - } - - /** - * @param string $ks - */ - public function setKs($ks) - { - $this->ks = $ks; - } - - /** - * @param boolean $returnServedResult - */ - public function setReturnServedResult($returnServedResult) - { - $this->returnServedResult = $returnServedResult; - } - - /** - * @return boolean - */ - public function getReturnServedResult() - { - return $this->returnServedResult; - } - - /** - * @param string $destinationPath - */ - public function setDestinationPath($destinationPath) - { - $this->destinationPath = $destinationPath; - } - - /** - * @return string - */ - public function getDestinationPath() - { - return $this->destinationPath; - } - - /** - * @return KalturaConfiguration - */ - public function getConfig() - { - return $this->config; - } - - /** - * @param KalturaConfiguration $config - */ - public function setConfig(KalturaConfiguration $config) - { - $this->config = $config; - - $logger = $this->config->getLogger(); - if ($logger instanceof IKalturaLogger) - { - $this->shouldLog = true; - } - } - - /** - * Add parameter to array of parameters that is passed by reference - * - * @param arrat $params - * @param string $paramName - * @param string $paramValue - */ - public function addParam(&$params, $paramName, $paramValue) - { - if ($paramValue === null) - return; - - if ($paramValue instanceof KalturaNull) { - $params[$paramName . '__null'] = ''; - return; - } - - if(is_object($paramValue) && $paramValue instanceof KalturaObjectBase) - { - $this->addParam($params, "$paramName:objectType", get_class($paramValue)); - foreach($paramValue as $prop => $val) - $this->addParam($params, "$paramName:$prop", $val); - - return; - } - - if(!is_array($paramValue)) - { - $params[$paramName] = (string)$paramValue; - return; - } - - if ($paramValue) - { - foreach($paramValue as $subParamName => $subParamValue) - $this->addParam($params, "$paramName:$subParamName", $subParamValue); - } - else - { - $this->addParam($params, "$paramName:-", ""); - } - } - - /** - * Validate the result object and throw exception if its an error - * - * @param object $resultObject - */ - public function throwExceptionIfError($resultObject) - { - if ($this->isError($resultObject)) - { - throw new KalturaException($resultObject["message"], $resultObject["code"]); - } - } - - /** - * Checks whether the result object is an error - * - * @param object $resultObject - */ - public function isError($resultObject) - { - return (is_array($resultObject) && isset($resultObject["message"]) && isset($resultObject["code"])); - } - - /** - * Validate that the passed object type is of the expected type - * - * @param any $resultObject - * @param string $objectType - */ - public function validateObjectType($resultObject, $objectType) - { - if (is_object($resultObject)) - { - if (!($resultObject instanceof $objectType)) - throw new KalturaClientException("Invalid object type", KalturaClientException::ERROR_INVALID_OBJECT_TYPE); - } - else if (gettype($resultObject) !== "NULL" && gettype($resultObject) !== $objectType) - { - throw new KalturaClientException("Invalid object type", KalturaClientException::ERROR_INVALID_OBJECT_TYPE); - } - } - - public function startMultiRequest() - { - $this->isMultiRequest = true; - } - - public function doMultiRequest() - { - return $this->doQueue(); - } - - public function isMultiRequest() - { - return $this->isMultiRequest; - } - - public function getMultiRequestQueueSize() - { - return count($this->callsQueue); - } - - public function getMultiRequestResult() - { - return new MultiRequestSubResult($this->getMultiRequestQueueSize() . ':result'); - } - - /** - * @param string $msg - */ - protected function log($msg) - { - if ($this->shouldLog) - $this->config->getLogger()->log($msg); - } - - /** - * Return a list of parameter used to a new start debug on the destination server api - * @link http://kb.zend.com/index.php?View=entry&EntryID=434 - * @param $url - */ - protected function getZendDebuggerParams($url) - { - $params = array(); - $passThruParams = array('debug_host', - 'debug_fastfile', - 'debug_port', - 'start_debug', - 'send_debug_header', - 'send_sess_end', - 'debug_jit', - 'debug_stop', - 'use_remote'); - - foreach($passThruParams as $param) - { - if (isset($_COOKIE[$param])) - $params[$param] = $_COOKIE[$param]; - } - - $params['original_url'] = $url; - $params['debug_session_id'] = microtime(true); // to create a new debug session - - return $params; - } - - public function generateSession($adminSecretForSigning, $userId, $type, $partnerId, $expiry = 86400, $privileges = '') - { - $rand = rand(0, 32000); - $expiry = time()+$expiry; - $fields = array ( - $partnerId , - $partnerId , - $expiry , - $type, - $rand , - $userId , - $privileges - ); - $info = implode ( ";" , $fields ); - - $signature = $this->hash ( $adminSecretForSigning , $info ); - $strToHash = $signature . "|" . $info ; - $encoded_str = base64_encode( $strToHash ); - - return $encoded_str; - } - - public static function generateSessionV2($adminSecretForSigning, $userId, $type, $partnerId, $expiry, $privileges) - { - // build fields array - $fields = array(); - foreach (explode(',', $privileges) as $privilege) - { - $privilege = trim($privilege); - if (!$privilege) - continue; - if ($privilege == '*') - $privilege = 'all:*'; - $splittedPrivilege = explode(':', $privilege, 2); - if (count($splittedPrivilege) > 1) - $fields[$splittedPrivilege[0]] = $splittedPrivilege[1]; - else - $fields[$splittedPrivilege[0]] = ''; - } - $fields[self::FIELD_EXPIRY] = time() + $expiry; - $fields[self::FIELD_TYPE] = $type; - $fields[self::FIELD_USER] = $userId; - - // build fields string - $fieldsStr = http_build_query($fields, '', '&'); - $rand = ''; - for ($i = 0; $i < self::RANDOM_SIZE; $i++) - $rand .= chr(rand(0, 0xff)); - $fieldsStr = $rand . $fieldsStr; - $fieldsStr = sha1($fieldsStr, true) . $fieldsStr; - - // encrypt and encode - $encryptedFields = self::aesEncrypt($adminSecretForSigning, $fieldsStr); - $decodedKs = "v2|{$partnerId}|" . $encryptedFields; - return str_replace(array('+', '/'), array('-', '_'), base64_encode($decodedKs)); - } - - protected static function aesEncrypt($key, $message) - { - return mcrypt_encrypt( - MCRYPT_RIJNDAEL_128, - substr(sha1($key, true), 0, 16), - $message, - MCRYPT_MODE_CBC, - str_repeat("\0", 16) // no need for an IV since we add a random string to the message anyway - ); - } - - private function hash ( $salt , $str ) - { - return sha1($salt.$str); - } - - /** - * @return KalturaNull - */ - public static function getKalturaNullValue() - { - - return KalturaNull::getInstance(); - } - -} - -/** - * @package Kaltura - * @subpackage Client - */ -interface IKalturaClientPlugin -{ - /** - * @return KalturaClientPlugin - */ - public static function get(KalturaClient $client); - - /** - * @return array - */ - public function getServices(); - - /** - * @return string - */ - public function getName(); -} - -/** - * @package Kaltura - * @subpackage Client - */ -abstract class KalturaClientPlugin implements IKalturaClientPlugin -{ - protected function __construct(KalturaClient $client) - { - - } -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaServiceActionCall -{ - /** - * @var string - */ - public $service; - - /** - * @var string - */ - public $action; - - - /** - * @var array - */ - public $params; - - /** - * @var array - */ - public $files; - - /** - * Contruct new Kaltura service action call, if params array contain sub arrays (for objects), it will be flattened - * - * @param string $service - * @param string $action - * @param array $params - * @param array $files - */ - public function __construct($service, $action, $params = array(), $files = array()) - { - $this->service = $service; - $this->action = $action; - $this->params = $this->parseParams($params); - $this->files = $files; - } - - /** - * Parse params array and sub arrays (for objects) - * - * @param array $params - */ - public function parseParams(array $params) - { - $newParams = array(); - foreach($params as $key => $val) - { - if (is_array($val)) - { - $newParams[$key] = $this->parseParams($val); - } - else - { - $newParams[$key] = $val; - } - } - return $newParams; - } - - /** - * Return the parameters for a multi request - * - * @param int $multiRequestIndex - */ - public function getParamsForMultiRequest($multiRequestIndex) - { - $multiRequestParams = array(); - $multiRequestParams[$multiRequestIndex.":service"] = $this->service; - $multiRequestParams[$multiRequestIndex.":action"] = $this->action; - foreach($this->params as $key => $val) - { - $multiRequestParams[$multiRequestIndex.":".$key] = $val; - } - return $multiRequestParams; - } - - /** - * Return the parameters for a multi request - * - * @param int $multiRequestIndex - */ - public function getFilesForMultiRequest($multiRequestIndex) - { - $multiRequestParams = array(); - foreach($this->files as $key => $val) - { - $multiRequestParams[$multiRequestIndex.":".$key] = $val; - } - return $multiRequestParams; - } -} - -/** - * Abstract base class for all client services - * - * @package Kaltura - * @subpackage Client - */ -abstract class KalturaServiceBase -{ - /** - * @var KalturaClient - */ - protected $client; - - /** - * Initialize the service keeping reference to the KalturaClient - * - * @param KalturaClient $client - */ - public function __construct(KalturaClient $client = null) - { - $this->client = $client; - } - - /** - * @param KalturaClient $client - */ - public function setClient(KalturaClient $client) - { - $this->client = $client; - } -} - -/** - * Abstract base class for all client objects - * - * @package Kaltura - * @subpackage Client - */ -abstract class KalturaObjectBase -{ - public function __construct($params = array()) - { - foreach ($params as $key => $value) - { - if (!property_exists($this, $key)) - throw new KalturaClientException("property [{$key}] does not exist on object [".get_class($this)."]", KalturaClientException::ERROR_INVALID_OBJECT_FIELD); - $this->$key = $value; - } - } - - protected function addIfNotNull(&$params, $paramName, $paramValue) - { - if ($paramValue !== null) - { - if($paramValue instanceof KalturaObjectBase) - { - $params[$paramName] = $paramValue->toParams(); - } - else - { - $params[$paramName] = $paramValue; - } - } - } - - public function toParams() - { - $params = array(); - $params["objectType"] = get_class($this); - foreach($this as $prop => $val) - { - $this->addIfNotNull($params, $prop, $val); - } - return $params; - } -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaException extends Exception -{ - public function __construct($message, $code) - { - $this->code = $code; - parent::__construct($message); - } -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaClientException extends Exception -{ - const ERROR_GENERIC = -1; - const ERROR_UNSERIALIZE_FAILED = -2; - const ERROR_FORMAT_NOT_SUPPORTED = -3; - const ERROR_UPLOAD_NOT_SUPPORTED = -4; - const ERROR_CONNECTION_FAILED = -5; - const ERROR_READ_FAILED = -6; - const ERROR_INVALID_PARTNER_ID = -7; - const ERROR_INVALID_OBJECT_TYPE = -8; - const ERROR_INVALID_OBJECT_FIELD = -9; - const ERROR_DOWNLOAD_NOT_SUPPORTED = -10; - const ERROR_DOWNLOAD_IN_MULTIREQUEST = -11; -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaConfiguration -{ - private $logger; - - public $serviceUrl = "http://www.kaltura.com/"; - public $partnerId = null; - public $format = 3; - public $clientTag = "php5:14-01-16"; - public $curlTimeout = 120; - public $userAgent = ''; - public $startZendDebuggerSession = false; - public $proxyHost = null; - public $proxyPort = null; - public $proxyType = 'HTTP'; - public $proxyUser = null; - public $proxyPassword = ''; - public $verifySSL = true; - public $sslCertificatePath = null; - public $requestHeaders = array(); - public $method = KalturaClientBase::METHOD_POST; - - - - - /** - * Constructs new Kaltura configuration object - * - */ - public function __construct($partnerId = -1) - { - if (!is_null($partnerId) && !is_numeric($partnerId)) - throw new KalturaClientException("Invalid partner id", KalturaClientException::ERROR_INVALID_PARTNER_ID); - - $this->partnerId = $partnerId; - } - - /** - * Set logger to get kaltura client debug logs - * - * @param IKalturaLogger $log - */ - public function setLogger(IKalturaLogger $log) - { - $this->logger = $log; - } - - /** - * Gets the logger (Internal client use) - * - * @return IKalturaLogger - */ - public function getLogger() - { - return $this->logger; - } -} - -/** - * Implement to get Kaltura Client logs - * - * @package Kaltura - * @subpackage Client - */ -interface IKalturaLogger -{ - function log($msg); -} - - diff --git a/local/kaltura/API/KalturaEnums.php b/local/kaltura/API/KalturaEnums.php deleted file mode 100644 index cefdffdc8e79e..0000000000000 --- a/local/kaltura/API/KalturaEnums.php +++ /dev/null @@ -1,3213 +0,0 @@ -. -// -// @ignore -// =================================================================================================== - -/** - * @package Kaltura - * @subpackage Client - */ -require_once(dirname(__FILE__) . "/KalturaClientBase.php"); - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaAppearInListType -{ - const PARTNER_ONLY = 1; - const CATEGORY_MEMBERS_ONLY = 3; -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaAssetParamsDeletePolicy -{ - const KEEP = 0; - const DELETE = 1; -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaAssetParamsOrigin -{ - const CONVERT = 0; - const INGEST = 1; - const CONVERT_WHEN_MISSING = 2; -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaAssetStatus -{ - const ERROR = -1; - const QUEUED = 0; - const READY = 2; - const DELETED = 3; - const IMPORTING = 7; - const EXPORTING = 9; -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaBatchJobErrorTypes -{ - const APP = 0; - const RUNTIME = 1; - const HTTP = 2; - const CURL = 3; - const KALTURA_API = 4; - const KALTURA_CLIENT = 5; -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaBatchJobStatus -{ - const PENDING = 0; - const QUEUED = 1; - const PROCESSING = 2; - const PROCESSED = 3; - const MOVEFILE = 4; - const FINISHED = 5; - const FAILED = 6; - const ABORTED = 7; - const ALMOST_DONE = 8; - const RETRY = 9; - const FATAL = 10; - const DONT_PROCESS = 11; - const FINISHED_PARTIALLY = 12; -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaBitRateMode -{ - const CBR = 1; - const VBR = 2; -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaCategoryEntryStatus -{ - const PENDING = 1; - const ACTIVE = 2; - const DELETED = 3; - const REJECTED = 4; -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaCategoryStatus -{ - const UPDATING = 1; - const ACTIVE = 2; - const DELETED = 3; - const PURGED = 4; -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaCategoryUserPermissionLevel -{ - const MANAGER = 0; - const MODERATOR = 1; - const CONTRIBUTOR = 2; - const MEMBER = 3; - const NONE = 4; -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaCategoryUserStatus -{ - const ACTIVE = 1; - const PENDING = 2; - const NOT_ACTIVE = 3; - const DELETED = 4; -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaCommercialUseType -{ - const NON_COMMERCIAL_USE = 0; - const COMMERCIAL_USE = 1; -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaContributionPolicyType -{ - const ALL = 1; - const MEMBERS_WITH_CONTRIBUTION_PERMISSION = 2; -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaControlPanelCommandStatus -{ - const PENDING = 1; - const HANDLED = 2; - const DONE = 3; - const FAILED = 4; -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaControlPanelCommandTargetType -{ - const DATA_CENTER = 1; - const SCHEDULER = 2; - const JOB_TYPE = 3; - const JOB = 4; - const BATCH = 5; -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaControlPanelCommandType -{ - const KILL = 4; -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaCountryRestrictionType -{ - const RESTRICT_COUNTRY_LIST = 0; - const ALLOW_COUNTRY_LIST = 1; -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaDVRStatus -{ - const DISABLED = 0; - const ENABLED = 1; -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaDirectoryRestrictionType -{ - const DONT_DISPLAY = 0; - const DISPLAY_WITH_LINK = 1; -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaEditorType -{ - const SIMPLE = 1; - const ADVANCED = 2; -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaEmailIngestionProfileStatus -{ - const INACTIVE = 0; - const ACTIVE = 1; -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaEntryModerationStatus -{ - const PENDING_MODERATION = 1; - const APPROVED = 2; - const REJECTED = 3; - const FLAGGED_FOR_REVIEW = 5; - const AUTO_APPROVED = 6; -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaFeatureStatusType -{ - const LOCK_CATEGORY = 1; - const CATEGORY = 2; - const CATEGORY_ENTRY = 3; - const ENTRY = 4; - const CATEGORY_USER = 5; - const USER = 6; -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaFlavorAssetStatus -{ - const ERROR = -1; - const QUEUED = 0; - const CONVERTING = 1; - const READY = 2; - const DELETED = 3; - const NOT_APPLICABLE = 4; - const TEMP = 5; - const WAIT_FOR_CONVERT = 6; - const IMPORTING = 7; - const VALIDATING = 8; - const EXPORTING = 9; -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaFlavorReadyBehaviorType -{ - const NO_IMPACT = 0; - const INHERIT_FLAVOR_PARAMS = 0; - const REQUIRED = 1; - const OPTIONAL = 2; -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaGender -{ - const UNKNOWN = 0; - const MALE = 1; - const FEMALE = 2; -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaInheritanceType -{ - const INHERIT = 1; - const MANUAL = 2; -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaIpAddressRestrictionType -{ - const RESTRICT_LIST = 0; - const ALLOW_LIST = 1; -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaLicenseType -{ - const UNKNOWN = -1; - const NONE = 0; - const COPYRIGHTED = 1; - const PUBLIC_DOMAIN = 2; - const CREATIVECOMMONS_ATTRIBUTION = 3; - const CREATIVECOMMONS_ATTRIBUTION_SHARE_ALIKE = 4; - const CREATIVECOMMONS_ATTRIBUTION_NO_DERIVATIVES = 5; - const CREATIVECOMMONS_ATTRIBUTION_NON_COMMERCIAL = 6; - const CREATIVECOMMONS_ATTRIBUTION_NON_COMMERCIAL_SHARE_ALIKE = 7; - const CREATIVECOMMONS_ATTRIBUTION_NON_COMMERCIAL_NO_DERIVATIVES = 8; - const GFDL = 9; - const GPL = 10; - const AFFERO_GPL = 11; - const LGPL = 12; - const BSD = 13; - const APACHE = 14; - const MOZILLA = 15; -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaLimitFlavorsRestrictionType -{ - const RESTRICT_LIST = 0; - const ALLOW_LIST = 1; -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaMailJobStatus -{ - const PENDING = 1; - const SENT = 2; - const ERROR = 3; - const QUEUED = 4; -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaMediaServerIndex -{ - const PRIMARY = 0; - const SECONDARY = 1; -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaMediaType -{ - const VIDEO = 1; - const IMAGE = 2; - const AUDIO = 5; - const LIVE_STREAM_FLASH = 201; - const LIVE_STREAM_WINDOWS_MEDIA = 202; - const LIVE_STREAM_REAL_MEDIA = 203; - const LIVE_STREAM_QUICKTIME = 204; -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaModerationFlagType -{ - const SEXUAL_CONTENT = 1; - const VIOLENT_REPULSIVE = 2; - const HARMFUL_DANGEROUS = 3; - const SPAM_COMMERCIALS = 4; - const COPYRIGHT = 5; - const TERMS_OF_USE_VIOLATION = 6; -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaMrssExtensionMode -{ - const APPEND = 1; - const REPLACE = 2; -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaNotificationObjectType -{ - const ENTRY = 1; - const KSHOW = 2; - const USER = 3; - const BATCH_JOB = 4; -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaNotificationStatus -{ - const PENDING = 1; - const SENT = 2; - const ERROR = 3; - const SHOULD_RESEND = 4; - const ERROR_RESENDING = 5; - const SENT_SYNCH = 6; - const QUEUED = 7; -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaNotificationType -{ - const ENTRY_ADD = 1; - const ENTR_UPDATE_PERMISSIONS = 2; - const ENTRY_DELETE = 3; - const ENTRY_BLOCK = 4; - const ENTRY_UPDATE = 5; - const ENTRY_UPDATE_THUMBNAIL = 6; - const ENTRY_UPDATE_MODERATION = 7; - const USER_ADD = 21; - const USER_BANNED = 26; -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaNullableBoolean -{ - const NULL_VALUE = -1; - const FALSE_VALUE = 0; - const TRUE_VALUE = 1; -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaPartnerGroupType -{ - const PUBLISHER = 1; - const VAR_GROUP = 2; - const GROUP = 3; - const TEMPLATE = 4; -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaPartnerStatus -{ - const ACTIVE = 1; - const BLOCKED = 2; - const FULL_BLOCK = 3; -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaPartnerType -{ - const KMC = 1; - const WIKI = 100; - const WORDPRESS = 101; - const DRUPAL = 102; - const DEKIWIKI = 103; - const MOODLE = 104; - const COMMUNITY_EDITION = 105; - const JOOMLA = 106; - const BLACKBOARD = 107; - const SAKAI = 108; - const ADMIN_CONSOLE = 109; -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaPermissionStatus -{ - const ACTIVE = 1; - const BLOCKED = 2; - const DELETED = 3; -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaPermissionType -{ - const NORMAL = 1; - const SPECIAL_FEATURE = 2; - const PLUGIN = 3; - const PARTNER_GROUP = 4; -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaPlaylistType -{ - const STATIC_LIST = 3; - const DYNAMIC = 10; - const EXTERNAL = 101; -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaPrivacyType -{ - const ALL = 1; - const AUTHENTICATED_USERS = 2; - const MEMBERS_ONLY = 3; -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaRecordStatus -{ - const DISABLED = 0; - const ENABLED = 1; -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaReportType -{ - const TOP_CONTENT = 1; - const CONTENT_DROPOFF = 2; - const CONTENT_INTERACTIONS = 3; - const MAP_OVERLAY = 4; - const TOP_CONTRIBUTORS = 5; - const TOP_SYNDICATION = 6; - const CONTENT_CONTRIBUTIONS = 7; - const USER_ENGAGEMENT = 11; - const SPEFICIC_USER_ENGAGEMENT = 12; - const USER_TOP_CONTENT = 13; - const USER_CONTENT_DROPOFF = 14; - const USER_CONTENT_INTERACTIONS = 15; - const APPLICATIONS = 16; - const USER_USAGE = 17; - const SPECIFIC_USER_USAGE = 18; - const VAR_USAGE = 19; - const TOP_CREATORS = 20; - const PLATFORMS = 21; - const OPERATION_SYSTEM = 22; - const BROWSERS = 23; - const PARTNER_USAGE = 201; -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaResponseType -{ - const RESPONSE_TYPE_JSON = 1; - const RESPONSE_TYPE_XML = 2; - const RESPONSE_TYPE_PHP = 3; - const RESPONSE_TYPE_PHP_ARRAY = 4; - const RESPONSE_TYPE_HTML = 7; - const RESPONSE_TYPE_MRSS = 8; - const RESPONSE_TYPE_JSONP = 9; -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaSearchOperatorType -{ - const SEARCH_AND = 1; - const SEARCH_OR = 2; -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaSearchProviderType -{ - const FLICKR = 3; - const YOUTUBE = 4; - const MYSPACE = 7; - const PHOTOBUCKET = 8; - const JAMENDO = 9; - const CCMIXTER = 10; - const NYPL = 11; - const CURRENT = 12; - const MEDIA_COMMONS = 13; - const KALTURA = 20; - const KALTURA_USER_CLIPS = 21; - const ARCHIVE_ORG = 22; - const KALTURA_PARTNER = 23; - const METACAFE = 24; - const SEARCH_PROXY = 28; - const PARTNER_SPECIFIC = 100; -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaSessionType -{ - const USER = 0; - const ADMIN = 2; -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaSiteRestrictionType -{ - const RESTRICT_SITE_LIST = 0; - const ALLOW_SITE_LIST = 1; -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaStatsEventType -{ - const WIDGET_LOADED = 1; - const MEDIA_LOADED = 2; - const PLAY = 3; - const PLAY_REACHED_25 = 4; - const PLAY_REACHED_50 = 5; - const PLAY_REACHED_75 = 6; - const PLAY_REACHED_100 = 7; - const OPEN_EDIT = 8; - const OPEN_VIRAL = 9; - const OPEN_DOWNLOAD = 10; - const OPEN_REPORT = 11; - const BUFFER_START = 12; - const BUFFER_END = 13; - const OPEN_FULL_SCREEN = 14; - const CLOSE_FULL_SCREEN = 15; - const REPLAY = 16; - const SEEK = 17; - const OPEN_UPLOAD = 18; - const SAVE_PUBLISH = 19; - const CLOSE_EDITOR = 20; - const PRE_BUMPER_PLAYED = 21; - const POST_BUMPER_PLAYED = 22; - const BUMPER_CLICKED = 23; - const PREROLL_STARTED = 24; - const MIDROLL_STARTED = 25; - const POSTROLL_STARTED = 26; - const OVERLAY_STARTED = 27; - const PREROLL_CLICKED = 28; - const MIDROLL_CLICKED = 29; - const POSTROLL_CLICKED = 30; - const OVERLAY_CLICKED = 31; - const PREROLL_25 = 32; - const PREROLL_50 = 33; - const PREROLL_75 = 34; - const MIDROLL_25 = 35; - const MIDROLL_50 = 36; - const MIDROLL_75 = 37; - const POSTROLL_25 = 38; - const POSTROLL_50 = 39; - const POSTROLL_75 = 40; -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaStatsFeatureType -{ - const NONE = 0; - const RELATED = 1; -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaStatsKmcEventType -{ - const CONTENT_PAGE_VIEW = 1001; - const CONTENT_ADD_PLAYLIST = 1010; - const CONTENT_EDIT_PLAYLIST = 1011; - const CONTENT_DELETE_PLAYLIST = 1012; - const CONTENT_EDIT_ENTRY = 1013; - const CONTENT_CHANGE_THUMBNAIL = 1014; - const CONTENT_ADD_TAGS = 1015; - const CONTENT_REMOVE_TAGS = 1016; - const CONTENT_ADD_ADMIN_TAGS = 1017; - const CONTENT_REMOVE_ADMIN_TAGS = 1018; - const CONTENT_DOWNLOAD = 1019; - const CONTENT_APPROVE_MODERATION = 1020; - const CONTENT_REJECT_MODERATION = 1021; - const CONTENT_BULK_UPLOAD = 1022; - const CONTENT_ADMIN_KCW_UPLOAD = 1023; - const ACCOUNT_CHANGE_PARTNER_INFO = 1030; - const ACCOUNT_CHANGE_LOGIN_INFO = 1031; - const ACCOUNT_CONTACT_US_USAGE = 1032; - const ACCOUNT_UPDATE_SERVER_SETTINGS = 1033; - const ACCOUNT_ACCOUNT_OVERVIEW = 1034; - const ACCOUNT_ACCESS_CONTROL = 1035; - const ACCOUNT_TRANSCODING_SETTINGS = 1036; - const ACCOUNT_ACCOUNT_UPGRADE = 1037; - const ACCOUNT_SAVE_SERVER_SETTINGS = 1038; - const ACCOUNT_ACCESS_CONTROL_DELETE = 1039; - const ACCOUNT_SAVE_TRANSCODING_SETTINGS = 1040; - const LOGIN = 1041; - const DASHBOARD_IMPORT_CONTENT = 1042; - const DASHBOARD_UPDATE_CONTENT = 1043; - const DASHBOARD_ACCOUNT_CONTACT_US = 1044; - const DASHBOARD_VIEW_REPORTS = 1045; - const DASHBOARD_EMBED_PLAYER = 1046; - const DASHBOARD_EMBED_PLAYLIST = 1047; - const DASHBOARD_CUSTOMIZE_PLAYERS = 1048; - const APP_STUDIO_NEW_PLAYER_SINGLE_VIDEO = 1050; - const APP_STUDIO_NEW_PLAYER_PLAYLIST = 1051; - const APP_STUDIO_NEW_PLAYER_MULTI_TAB_PLAYLIST = 1052; - const APP_STUDIO_EDIT_PLAYER_SINGLE_VIDEO = 1053; - const APP_STUDIO_EDIT_PLAYER_PLAYLIST = 1054; - const APP_STUDIO_EDIT_PLAYER_MULTI_TAB_PLAYLIST = 1055; - const APP_STUDIO_DUPLICATE_PLAYER = 1056; - const CONTENT_CONTENT_GO_TO_PAGE = 1057; - const CONTENT_DELETE_ITEM = 1058; - const CONTENT_DELETE_MIX = 1059; - const REPORTS_AND_ANALYTICS_BANDWIDTH_USAGE_TAB = 1070; - const REPORTS_AND_ANALYTICS_CONTENT_REPORTS_TAB = 1071; - const REPORTS_AND_ANALYTICS_USERS_AND_COMMUNITY_REPORTS_TAB = 1072; - const REPORTS_AND_ANALYTICS_TOP_CONTRIBUTORS = 1073; - const REPORTS_AND_ANALYTICS_MAP_OVERLAYS = 1074; - const REPORTS_AND_ANALYTICS_TOP_SYNDICATIONS = 1075; - const REPORTS_AND_ANALYTICS_TOP_CONTENT = 1076; - const REPORTS_AND_ANALYTICS_CONTENT_DROPOFF = 1077; - const REPORTS_AND_ANALYTICS_CONTENT_INTERACTIONS = 1078; - const REPORTS_AND_ANALYTICS_CONTENT_CONTRIBUTIONS = 1079; - const REPORTS_AND_ANALYTICS_VIDEO_DRILL_DOWN = 1080; - const REPORTS_AND_ANALYTICS_CONTENT_DRILL_DOWN_INTERACTION = 1081; - const REPORTS_AND_ANALYTICS_CONTENT_CONTRIBUTIONS_DRILLDOWN = 1082; - const REPORTS_AND_ANALYTICS_VIDEO_DRILL_DOWN_DROPOFF = 1083; - const REPORTS_AND_ANALYTICS_MAP_OVERLAYS_DRILLDOWN = 1084; - const REPORTS_AND_ANALYTICS_TOP_SYNDICATIONS_DRILL_DOWN = 1085; - const REPORTS_AND_ANALYTICS_BANDWIDTH_USAGE_VIEW_MONTHLY = 1086; - const REPORTS_AND_ANALYTICS_BANDWIDTH_USAGE_VIEW_YEARLY = 1087; - const CONTENT_ENTRY_DRILLDOWN = 1088; - const CONTENT_OPEN_PREVIEW_AND_EMBED = 1089; -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaStorageProfileDeliveryStatus -{ - const ACTIVE = 1; - const BLOCKED = 2; -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaStorageProfileReadyBehavior -{ - const NO_IMPACT = 0; - const REQUIRED = 1; -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaStorageProfileStatus -{ - const DISABLED = 1; - const AUTOMATIC = 2; - const MANUAL = 3; -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaSyndicationFeedStatus -{ - const DELETED = -1; - const ACTIVE = 1; -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaSyndicationFeedType -{ - const GOOGLE_VIDEO = 1; - const YAHOO = 2; - const ITUNES = 3; - const TUBE_MOGUL = 4; - const KALTURA = 5; - const KALTURA_XSLT = 6; -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaThumbAssetStatus -{ - const ERROR = -1; - const QUEUED = 0; - const CAPTURING = 1; - const READY = 2; - const DELETED = 3; - const IMPORTING = 7; - const EXPORTING = 9; -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaThumbCropType -{ - const RESIZE = 1; - const RESIZE_WITH_PADDING = 2; - const CROP = 3; - const CROP_FROM_TOP = 4; - const RESIZE_WITH_FORCE = 5; -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaUiConfCreationMode -{ - const WIZARD = 2; - const ADVANCED = 3; -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaUiConfObjType -{ - const PLAYER = 1; - const CONTRIBUTION_WIZARD = 2; - const SIMPLE_EDITOR = 3; - const ADVANCED_EDITOR = 4; - const PLAYLIST = 5; - const APP_STUDIO = 6; - const KRECORD = 7; - const PLAYER_V3 = 8; - const KMC_ACCOUNT = 9; - const KMC_ANALYTICS = 10; - const KMC_CONTENT = 11; - const KMC_DASHBOARD = 12; - const KMC_LOGIN = 13; - const PLAYER_SL = 14; - const CLIENTSIDE_ENCODER = 15; - const KMC_GENERAL = 16; - const KMC_ROLES_AND_PERMISSIONS = 17; - const CLIPPER = 18; - const KSR = 19; - const KUPLOAD = 20; -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaUpdateMethodType -{ - const MANUAL = 0; - const AUTOMATIC = 1; -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaUploadErrorCode -{ - const NO_ERROR = 0; - const GENERAL_ERROR = 1; - const PARTIAL_UPLOAD = 2; -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaUploadTokenStatus -{ - const PENDING = 0; - const PARTIAL_UPLOAD = 1; - const FULL_UPLOAD = 2; - const CLOSED = 3; - const TIMED_OUT = 4; - const DELETED = 5; -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaUserAgentRestrictionType -{ - const RESTRICT_LIST = 0; - const ALLOW_LIST = 1; -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaUserJoinPolicyType -{ - const AUTO_JOIN = 1; - const REQUEST_TO_JOIN = 2; - const NOT_ALLOWED = 3; -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaUserRoleStatus -{ - const ACTIVE = 1; - const BLOCKED = 2; - const DELETED = 3; -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaUserStatus -{ - const BLOCKED = 0; - const ACTIVE = 1; - const DELETED = 2; -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaWidgetSecurityType -{ - const NONE = 1; - const TIMEHASH = 2; -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaAccessControlOrderBy -{ - const CREATED_AT_ASC = "+createdAt"; - const CREATED_AT_DESC = "-createdAt"; -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaAccessControlProfileOrderBy -{ - const CREATED_AT_ASC = "+createdAt"; - const UPDATED_AT_ASC = "+updatedAt"; - const CREATED_AT_DESC = "-createdAt"; - const UPDATED_AT_DESC = "-updatedAt"; -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaAdminUserOrderBy -{ - const CREATED_AT_ASC = "+createdAt"; - const ID_ASC = "+id"; - const CREATED_AT_DESC = "-createdAt"; - const ID_DESC = "-id"; -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaAkamaiUniversalStreamType -{ - const HD_IPHONE_IPAD_LIVE = "HD iPhone/iPad Live"; - const UNIVERSAL_STREAMING_LIVE = "Universal Streaming Live"; -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaAmazonS3StorageProfileFilesPermissionLevel -{ - const ACL_AUTHENTICATED_READ = "authenticated-read"; - const ACL_PRIVATE = "private"; - const ACL_PUBLIC_READ = "public-read"; - const ACL_PUBLIC_READ_WRITE = "public-read-write"; -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaAmazonS3StorageProfileOrderBy -{ - const CREATED_AT_ASC = "+createdAt"; - const UPDATED_AT_ASC = "+updatedAt"; - const CREATED_AT_DESC = "-createdAt"; - const UPDATED_AT_DESC = "-updatedAt"; -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaApiActionPermissionItemOrderBy -{ - const CREATED_AT_ASC = "+createdAt"; - const ID_ASC = "+id"; - const UPDATED_AT_ASC = "+updatedAt"; - const CREATED_AT_DESC = "-createdAt"; - const ID_DESC = "-id"; - const UPDATED_AT_DESC = "-updatedAt"; -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaApiParameterPermissionItemAction -{ - const USAGE = "all"; - const INSERT = "insert"; - const READ = "read"; - const UPDATE = "update"; -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaApiParameterPermissionItemOrderBy -{ - const CREATED_AT_ASC = "+createdAt"; - const ID_ASC = "+id"; - const UPDATED_AT_ASC = "+updatedAt"; - const CREATED_AT_DESC = "-createdAt"; - const ID_DESC = "-id"; - const UPDATED_AT_DESC = "-updatedAt"; -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaAssetOrderBy -{ - const CREATED_AT_ASC = "+createdAt"; - const DELETED_AT_ASC = "+deletedAt"; - const SIZE_ASC = "+size"; - const UPDATED_AT_ASC = "+updatedAt"; - const CREATED_AT_DESC = "-createdAt"; - const DELETED_AT_DESC = "-deletedAt"; - const SIZE_DESC = "-size"; - const UPDATED_AT_DESC = "-updatedAt"; -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaAssetParamsOrderBy -{ -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaAssetParamsOutputOrderBy -{ -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaAssetType -{ - const ATTACHMENT = "attachment.Attachment"; - const CAPTION = "caption.Caption"; - const DOCUMENT = "document.Document"; - const IMAGE = "document.Image"; - const PDF = "document.PDF"; - const SWF = "document.SWF"; - const WIDEVINE_FLAVOR = "widevine.WidevineFlavor"; - const FLAVOR = "1"; - const THUMBNAIL = "2"; - const LIVE = "3"; -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaAudioCodec -{ - const NONE = ""; - const AAC = "aac"; - const AACHE = "aache"; - const AC3 = "ac3"; - const AMRNB = "amrnb"; - const COPY = "copy"; - const MP3 = "mp3"; - const MPEG2 = "mpeg2"; - const PCM = "pcm"; - const VORBIS = "vorbis"; - const WMA = "wma"; - const WMAPRO = "wmapro"; -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaBaseEntryOrderBy -{ - const CREATED_AT_ASC = "+createdAt"; - const END_DATE_ASC = "+endDate"; - const MODERATION_COUNT_ASC = "+moderationCount"; - const NAME_ASC = "+name"; - const PARTNER_SORT_VALUE_ASC = "+partnerSortValue"; - const RANK_ASC = "+rank"; - const RECENT_ASC = "+recent"; - const START_DATE_ASC = "+startDate"; - const TOTAL_RANK_ASC = "+totalRank"; - const UPDATED_AT_ASC = "+updatedAt"; - const WEIGHT_ASC = "+weight"; - const CREATED_AT_DESC = "-createdAt"; - const END_DATE_DESC = "-endDate"; - const MODERATION_COUNT_DESC = "-moderationCount"; - const NAME_DESC = "-name"; - const PARTNER_SORT_VALUE_DESC = "-partnerSortValue"; - const RANK_DESC = "-rank"; - const RECENT_DESC = "-recent"; - const START_DATE_DESC = "-startDate"; - const TOTAL_RANK_DESC = "-totalRank"; - const UPDATED_AT_DESC = "-updatedAt"; - const WEIGHT_DESC = "-weight"; -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaBaseSyndicationFeedOrderBy -{ - const CREATED_AT_ASC = "+createdAt"; - const NAME_ASC = "+name"; - const PLAYLIST_ID_ASC = "+playlistId"; - const TYPE_ASC = "+type"; - const UPDATED_AT_ASC = "+updatedAt"; - const CREATED_AT_DESC = "-createdAt"; - const NAME_DESC = "-name"; - const PLAYLIST_ID_DESC = "-playlistId"; - const TYPE_DESC = "-type"; - const UPDATED_AT_DESC = "-updatedAt"; -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaBatchJobOrderBy -{ - const CREATED_AT_ASC = "+createdAt"; - const ESTIMATED_EFFORT_ASC = "+estimatedEffort"; - const EXECUTION_ATTEMPTS_ASC = "+executionAttempts"; - const FINISH_TIME_ASC = "+finishTime"; - const LOCK_VERSION_ASC = "+lockVersion"; - const PRIORITY_ASC = "+priority"; - const QUEUE_TIME_ASC = "+queueTime"; - const STATUS_ASC = "+status"; - const UPDATED_AT_ASC = "+updatedAt"; - const CREATED_AT_DESC = "-createdAt"; - const ESTIMATED_EFFORT_DESC = "-estimatedEffort"; - const EXECUTION_ATTEMPTS_DESC = "-executionAttempts"; - const FINISH_TIME_DESC = "-finishTime"; - const LOCK_VERSION_DESC = "-lockVersion"; - const PRIORITY_DESC = "-priority"; - const QUEUE_TIME_DESC = "-queueTime"; - const STATUS_DESC = "-status"; - const UPDATED_AT_DESC = "-updatedAt"; -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaBatchJobType -{ - const PARSE_CAPTION_ASSET = "captionSearch.parseCaptionAsset"; - const DISTRIBUTION_DELETE = "contentDistribution.DistributionDelete"; - const DISTRIBUTION_DISABLE = "contentDistribution.DistributionDisable"; - const DISTRIBUTION_ENABLE = "contentDistribution.DistributionEnable"; - const DISTRIBUTION_FETCH_REPORT = "contentDistribution.DistributionFetchReport"; - const DISTRIBUTION_SUBMIT = "contentDistribution.DistributionSubmit"; - const DISTRIBUTION_SYNC = "contentDistribution.DistributionSync"; - const DISTRIBUTION_UPDATE = "contentDistribution.DistributionUpdate"; - const CONVERT = "0"; - const DROP_FOLDER_CONTENT_PROCESSOR = "dropFolder.DropFolderContentProcessor"; - const DROP_FOLDER_WATCHER = "dropFolder.DropFolderWatcher"; - const EVENT_NOTIFICATION_HANDLER = "eventNotification.EventNotificationHandler"; - const INDEX_TAGS = "tagSearch.IndexTagsByPrivacyContext"; - const TAG_RESOLVE = "tagSearch.TagResolve"; - const VIRUS_SCAN = "virusScan.VirusScan"; - const WIDEVINE_REPOSITORY_SYNC = "widevine.WidevineRepositorySync"; - const IMPORT = "1"; - const DELETE = "2"; - const FLATTEN = "3"; - const BULKUPLOAD = "4"; - const DVDCREATOR = "5"; - const DOWNLOAD = "6"; - const OOCONVERT = "7"; - const CONVERT_PROFILE = "10"; - const POSTCONVERT = "11"; - const EXTRACT_MEDIA = "14"; - const MAIL = "15"; - const NOTIFICATION = "16"; - const CLEANUP = "17"; - const SCHEDULER_HELPER = "18"; - const BULKDOWNLOAD = "19"; - const DB_CLEANUP = "20"; - const PROVISION_PROVIDE = "21"; - const CONVERT_COLLECTION = "22"; - const STORAGE_EXPORT = "23"; - const PROVISION_DELETE = "24"; - const STORAGE_DELETE = "25"; - const EMAIL_INGESTION = "26"; - const METADATA_IMPORT = "27"; - const METADATA_TRANSFORM = "28"; - const FILESYNC_IMPORT = "29"; - const CAPTURE_THUMB = "30"; - const DELETE_FILE = "31"; - const INDEX = "32"; - const MOVE_CATEGORY_ENTRIES = "33"; - const COPY = "34"; - const CONCAT = "35"; - const CONVERT_LIVE_SEGMENT = "36"; - const COPY_PARTNER = "37"; - const VALIDATE_LIVE_MEDIA_SERVERS = "38"; -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaBulkUploadAction -{ - const ADD = "1"; - const UPDATE = "2"; - const DELETE = "3"; - const REPLACE = "4"; - const TRANSFORM_XSLT = "5"; - const ADD_OR_UPDATE = "6"; -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaBulkUploadObjectType -{ - const ENTRY = "1"; - const CATEGORY = "2"; - const USER = "3"; - const CATEGORY_USER = "4"; - const CATEGORY_ENTRY = "5"; -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaBulkUploadOrderBy -{ -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaBulkUploadResultObjectType -{ - const ENTRY = "1"; - const CATEGORY = "2"; - const USER = "3"; - const CATEGORY_USER = "4"; - const CATEGORY_ENTRY = "5"; -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaBulkUploadResultStatus -{ - const ERROR = "1"; - const OK = "2"; - const IN_PROGRESS = "3"; -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaBulkUploadType -{ - const CSV = "bulkUploadCsv.CSV"; - const FILTER = "bulkUploadFilter.FILTER"; - const XML = "bulkUploadXml.XML"; - const DROP_FOLDER_XML = "dropFolderXmlBulkUpload.DROP_FOLDER_XML"; -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaCategoryEntryOrderBy -{ - const CREATED_AT_ASC = "+createdAt"; - const CREATED_AT_DESC = "-createdAt"; -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaCategoryIdentifierField -{ - const FULL_NAME = "fullName"; - const ID = "id"; - const REFERENCE_ID = "referenceId"; -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaCategoryOrderBy -{ - const CREATED_AT_ASC = "+createdAt"; - const DEPTH_ASC = "+depth"; - const DIRECT_ENTRIES_COUNT_ASC = "+directEntriesCount"; - const DIRECT_SUB_CATEGORIES_COUNT_ASC = "+directSubCategoriesCount"; - const ENTRIES_COUNT_ASC = "+entriesCount"; - const FULL_NAME_ASC = "+fullName"; - const MEMBERS_COUNT_ASC = "+membersCount"; - const NAME_ASC = "+name"; - const PARTNER_SORT_VALUE_ASC = "+partnerSortValue"; - const UPDATED_AT_ASC = "+updatedAt"; - const CREATED_AT_DESC = "-createdAt"; - const DEPTH_DESC = "-depth"; - const DIRECT_ENTRIES_COUNT_DESC = "-directEntriesCount"; - const DIRECT_SUB_CATEGORIES_COUNT_DESC = "-directSubCategoriesCount"; - const ENTRIES_COUNT_DESC = "-entriesCount"; - const FULL_NAME_DESC = "-fullName"; - const MEMBERS_COUNT_DESC = "-membersCount"; - const NAME_DESC = "-name"; - const PARTNER_SORT_VALUE_DESC = "-partnerSortValue"; - const UPDATED_AT_DESC = "-updatedAt"; -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaCategoryUserOrderBy -{ - const CREATED_AT_ASC = "+createdAt"; - const UPDATED_AT_ASC = "+updatedAt"; - const CREATED_AT_DESC = "-createdAt"; - const UPDATED_AT_DESC = "-updatedAt"; -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaConditionType -{ - const ABC_WATERMARK = "abcScreenersWatermarkAccessControl.abcWatermark"; - const EVENT_NOTIFICATION_FIELD = "eventNotification.BooleanField"; - const EVENT_NOTIFICATION_OBJECT_CHANGED = "eventNotification.ObjectChanged"; - const METADATA_FIELD_CHANGED = "metadata.FieldChanged"; - const METADATA_FIELD_COMPARE = "metadata.FieldCompare"; - const METADATA_FIELD_MATCH = "metadata.FieldMatch"; - const AUTHENTICATED = "1"; - const COUNTRY = "2"; - const IP_ADDRESS = "3"; - const SITE = "4"; - const USER_AGENT = "5"; - const FIELD_MATCH = "6"; - const FIELD_COMPARE = "7"; - const ASSET_PROPERTIES_COMPARE = "8"; -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaContainerFormat -{ - const _3GP = "3gp"; - const APPLEHTTP = "applehttp"; - const AVI = "avi"; - const BMP = "bmp"; - const COPY = "copy"; - const FLV = "flv"; - const ISMV = "ismv"; - const JPG = "jpg"; - const MKV = "mkv"; - const MOV = "mov"; - const MP3 = "mp3"; - const MP4 = "mp4"; - const MPEG = "mpeg"; - const MPEGTS = "mpegts"; - const OGG = "ogg"; - const OGV = "ogv"; - const PDF = "pdf"; - const PNG = "png"; - const SWF = "swf"; - const WAV = "wav"; - const WEBM = "webm"; - const WMA = "wma"; - const WMV = "wmv"; - const WVM = "wvm"; -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaContextType -{ - const PLAY = "1"; - const DOWNLOAD = "2"; - const THUMBNAIL = "3"; - const METADATA = "4"; - const EXPORT = "5"; -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaControlPanelCommandOrderBy -{ - const CREATED_AT_ASC = "+createdAt"; - const UPDATED_AT_ASC = "+updatedAt"; - const CREATED_AT_DESC = "-createdAt"; - const UPDATED_AT_DESC = "-updatedAt"; -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaConversionProfileAssetParamsOrderBy -{ -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaConversionProfileOrderBy -{ - const CREATED_AT_ASC = "+createdAt"; - const CREATED_AT_DESC = "-createdAt"; -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaConversionProfileStatus -{ - const DISABLED = "1"; - const ENABLED = "2"; - const DELETED = "3"; -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaConversionProfileType -{ - const MEDIA = "1"; - const LIVE_STREAM = "2"; -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaDataEntryOrderBy -{ - const CREATED_AT_ASC = "+createdAt"; - const END_DATE_ASC = "+endDate"; - const MODERATION_COUNT_ASC = "+moderationCount"; - const NAME_ASC = "+name"; - const PARTNER_SORT_VALUE_ASC = "+partnerSortValue"; - const RANK_ASC = "+rank"; - const RECENT_ASC = "+recent"; - const START_DATE_ASC = "+startDate"; - const TOTAL_RANK_ASC = "+totalRank"; - const UPDATED_AT_ASC = "+updatedAt"; - const WEIGHT_ASC = "+weight"; - const CREATED_AT_DESC = "-createdAt"; - const END_DATE_DESC = "-endDate"; - const MODERATION_COUNT_DESC = "-moderationCount"; - const NAME_DESC = "-name"; - const PARTNER_SORT_VALUE_DESC = "-partnerSortValue"; - const RANK_DESC = "-rank"; - const RECENT_DESC = "-recent"; - const START_DATE_DESC = "-startDate"; - const TOTAL_RANK_DESC = "-totalRank"; - const UPDATED_AT_DESC = "-updatedAt"; - const WEIGHT_DESC = "-weight"; -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaDurationType -{ - const LONG = "long"; - const MEDIUM = "medium"; - const NOT_AVAILABLE = "notavailable"; - const SHORT = "short"; -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaDynamicEnum -{ -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaEntryIdentifierField -{ - const ID = "id"; - const REFERENCE_ID = "referenceId"; -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaEntryReplacementStatus -{ - const NONE = "0"; - const APPROVED_BUT_NOT_READY = "1"; - const READY_BUT_NOT_APPROVED = "2"; - const NOT_READY_AND_NOT_APPROVED = "3"; -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaEntryStatus -{ - const ERROR_IMPORTING = "-2"; - const ERROR_CONVERTING = "-1"; - const SCAN_FAILURE = "virusScan.ScanFailure"; - const IMPORT = "0"; - const INFECTED = "virusScan.Infected"; - const PRECONVERT = "1"; - const READY = "2"; - const DELETED = "3"; - const PENDING = "4"; - const MODERATE = "5"; - const BLOCKED = "6"; - const NO_CONTENT = "7"; -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaEntryType -{ - const AUTOMATIC = "-1"; - const EXTERNAL_MEDIA = "externalMedia.externalMedia"; - const MEDIA_CLIP = "1"; - const MIX = "2"; - const PLAYLIST = "5"; - const DATA = "6"; - const LIVE_STREAM = "7"; - const LIVE_CHANNEL = "8"; - const DOCUMENT = "10"; -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaFileAssetObjectType -{ - const UI_CONF = "2"; -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaFileAssetOrderBy -{ - const CREATED_AT_ASC = "+createdAt"; - const UPDATED_AT_ASC = "+updatedAt"; - const CREATED_AT_DESC = "-createdAt"; - const UPDATED_AT_DESC = "-updatedAt"; -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaFileAssetStatus -{ - const PENDING = "0"; - const UPLOADING = "1"; - const READY = "2"; - const DELETED = "3"; - const ERROR = "4"; -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaFileSyncObjectType -{ - const DISTRIBUTION_PROFILE = "contentDistribution.DistributionProfile"; - const ENTRY_DISTRIBUTION = "contentDistribution.EntryDistribution"; - const GENERIC_DISTRIBUTION_ACTION = "contentDistribution.GenericDistributionAction"; - const EMAIL_NOTIFICATION_TEMPLATE = "emailNotification.EmailNotificationTemplate"; - const HTTP_NOTIFICATION_TEMPLATE = "httpNotification.HttpNotificationTemplate"; - const ENTRY = "1"; - const UICONF = "2"; - const BATCHJOB = "3"; - const ASSET = "4"; - const FLAVOR_ASSET = "4"; - const METADATA = "5"; - const METADATA_PROFILE = "6"; - const SYNDICATION_FEED = "7"; - const CONVERSION_PROFILE = "8"; - const FILE_ASSET = "9"; -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaFlavorAssetOrderBy -{ - const CREATED_AT_ASC = "+createdAt"; - const DELETED_AT_ASC = "+deletedAt"; - const SIZE_ASC = "+size"; - const UPDATED_AT_ASC = "+updatedAt"; - const CREATED_AT_DESC = "-createdAt"; - const DELETED_AT_DESC = "-deletedAt"; - const SIZE_DESC = "-size"; - const UPDATED_AT_DESC = "-updatedAt"; -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaFlavorParamsOrderBy -{ -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaFlavorParamsOutputOrderBy -{ -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaGenericSyndicationFeedOrderBy -{ - const CREATED_AT_ASC = "+createdAt"; - const NAME_ASC = "+name"; - const PLAYLIST_ID_ASC = "+playlistId"; - const TYPE_ASC = "+type"; - const UPDATED_AT_ASC = "+updatedAt"; - const CREATED_AT_DESC = "-createdAt"; - const NAME_DESC = "-name"; - const PLAYLIST_ID_DESC = "-playlistId"; - const TYPE_DESC = "-type"; - const UPDATED_AT_DESC = "-updatedAt"; -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaGenericXsltSyndicationFeedOrderBy -{ - const CREATED_AT_ASC = "+createdAt"; - const NAME_ASC = "+name"; - const PLAYLIST_ID_ASC = "+playlistId"; - const TYPE_ASC = "+type"; - const UPDATED_AT_ASC = "+updatedAt"; - const CREATED_AT_DESC = "-createdAt"; - const NAME_DESC = "-name"; - const PLAYLIST_ID_DESC = "-playlistId"; - const TYPE_DESC = "-type"; - const UPDATED_AT_DESC = "-updatedAt"; -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaGeoCoderType -{ - const KALTURA = "1"; -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaGoogleSyndicationFeedAdultValues -{ - const NO = "No"; - const YES = "Yes"; -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaGoogleVideoSyndicationFeedOrderBy -{ - const CREATED_AT_ASC = "+createdAt"; - const NAME_ASC = "+name"; - const PLAYLIST_ID_ASC = "+playlistId"; - const TYPE_ASC = "+type"; - const UPDATED_AT_ASC = "+updatedAt"; - const CREATED_AT_DESC = "-createdAt"; - const NAME_DESC = "-name"; - const PLAYLIST_ID_DESC = "-playlistId"; - const TYPE_DESC = "-type"; - const UPDATED_AT_DESC = "-updatedAt"; -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaITunesSyndicationFeedAdultValues -{ - const CLEAN = "clean"; - const NO = "no"; - const YES = "yes"; -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaITunesSyndicationFeedCategories -{ - const ARTS = "Arts"; - const ARTS_DESIGN = "Arts/Design"; - const ARTS_FASHION_BEAUTY = "Arts/Fashion & Beauty"; - const ARTS_FOOD = "Arts/Food"; - const ARTS_LITERATURE = "Arts/Literature"; - const ARTS_PERFORMING_ARTS = "Arts/Performing Arts"; - const ARTS_VISUAL_ARTS = "Arts/Visual Arts"; - const BUSINESS = "Business"; - const BUSINESS_BUSINESS_NEWS = "Business/Business News"; - const BUSINESS_CAREERS = "Business/Careers"; - const BUSINESS_INVESTING = "Business/Investing"; - const BUSINESS_MANAGEMENT_MARKETING = "Business/Management & Marketing"; - const BUSINESS_SHOPPING = "Business/Shopping"; - const COMEDY = "Comedy"; - const EDUCATION = "Education"; - const EDUCATION_TECHNOLOGY = "Education/Education Technology"; - const EDUCATION_HIGHER_EDUCATION = "Education/Higher Education"; - const EDUCATION_K_12 = "Education/K-12"; - const EDUCATION_LANGUAGE_COURSES = "Education/Language Courses"; - const EDUCATION_TRAINING = "Education/Training"; - const GAMES_HOBBIES = "Games & Hobbies"; - const GAMES_HOBBIES_AUTOMOTIVE = "Games & Hobbies/Automotive"; - const GAMES_HOBBIES_AVIATION = "Games & Hobbies/Aviation"; - const GAMES_HOBBIES_HOBBIES = "Games & Hobbies/Hobbies"; - const GAMES_HOBBIES_OTHER_GAMES = "Games & Hobbies/Other Games"; - const GAMES_HOBBIES_VIDEO_GAMES = "Games & Hobbies/Video Games"; - const GOVERNMENT_ORGANIZATIONS = "Government & Organizations"; - const GOVERNMENT_ORGANIZATIONS_LOCAL = "Government & Organizations/Local"; - const GOVERNMENT_ORGANIZATIONS_NATIONAL = "Government & Organizations/National"; - const GOVERNMENT_ORGANIZATIONS_NON_PROFIT = "Government & Organizations/Non-Profit"; - const GOVERNMENT_ORGANIZATIONS_REGIONAL = "Government & Organizations/Regional"; - const HEALTH = "Health"; - const HEALTH_ALTERNATIVE_HEALTH = "Health/Alternative Health"; - const HEALTH_FITNESS_NUTRITION = "Health/Fitness & Nutrition"; - const HEALTH_SELF_HELP = "Health/Self-Help"; - const HEALTH_SEXUALITY = "Health/Sexuality"; - const KIDS_FAMILY = "Kids & Family"; - const MUSIC = "Music"; - const NEWS_POLITICS = "News & Politics"; - const RELIGION_SPIRITUALITY = "Religion & Spirituality"; - const RELIGION_SPIRITUALITY_BUDDHISM = "Religion & Spirituality/Buddhism"; - const RELIGION_SPIRITUALITY_CHRISTIANITY = "Religion & Spirituality/Christianity"; - const RELIGION_SPIRITUALITY_HINDUISM = "Religion & Spirituality/Hinduism"; - const RELIGION_SPIRITUALITY_ISLAM = "Religion & Spirituality/Islam"; - const RELIGION_SPIRITUALITY_JUDAISM = "Religion & Spirituality/Judaism"; - const RELIGION_SPIRITUALITY_OTHER = "Religion & Spirituality/Other"; - const RELIGION_SPIRITUALITY_SPIRITUALITY = "Religion & Spirituality/Spirituality"; - const SCIENCE_MEDICINE = "Science & Medicine"; - const SCIENCE_MEDICINE_MEDICINE = "Science & Medicine/Medicine"; - const SCIENCE_MEDICINE_NATURAL_SCIENCES = "Science & Medicine/Natural Sciences"; - const SCIENCE_MEDICINE_SOCIAL_SCIENCES = "Science & Medicine/Social Sciences"; - const SOCIETY_CULTURE = "Society & Culture"; - const SOCIETY_CULTURE_HISTORY = "Society & Culture/History"; - const SOCIETY_CULTURE_PERSONAL_JOURNALS = "Society & Culture/Personal Journals"; - const SOCIETY_CULTURE_PHILOSOPHY = "Society & Culture/Philosophy"; - const SOCIETY_CULTURE_PLACES_TRAVEL = "Society & Culture/Places & Travel"; - const SPORTS_RECREATION = "Sports & Recreation"; - const SPORTS_RECREATION_AMATEUR = "Sports & Recreation/Amateur"; - const SPORTS_RECREATION_COLLEGE_HIGH_SCHOOL = "Sports & Recreation/College & High School"; - const SPORTS_RECREATION_OUTDOOR = "Sports & Recreation/Outdoor"; - const SPORTS_RECREATION_PROFESSIONAL = "Sports & Recreation/Professional"; - const TV_FILM = "TV & Film"; - const TECHNOLOGY = "Technology"; - const TECHNOLOGY_GADGETS = "Technology/Gadgets"; - const TECHNOLOGY_PODCASTING = "Technology/Podcasting"; - const TECHNOLOGY_SOFTWARE_HOW_TO = "Technology/Software How-To"; - const TECHNOLOGY_TECH_NEWS = "Technology/Tech News"; -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaITunesSyndicationFeedOrderBy -{ - const CREATED_AT_ASC = "+createdAt"; - const NAME_ASC = "+name"; - const PLAYLIST_ID_ASC = "+playlistId"; - const TYPE_ASC = "+type"; - const UPDATED_AT_ASC = "+updatedAt"; - const CREATED_AT_DESC = "-createdAt"; - const NAME_DESC = "-name"; - const PLAYLIST_ID_DESC = "-playlistId"; - const TYPE_DESC = "-type"; - const UPDATED_AT_DESC = "-updatedAt"; -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaLanguage -{ - const AB = "Abkhazian"; - const AA = "Afar"; - const AF = "Afrikaans"; - const SQ = "Albanian"; - const AM = "Amharic"; - const AR = "Arabic"; - const HY = "Armenian"; - const AS_ = "Assamese"; - const AY = "Aymara"; - const AZ = "Azerbaijani"; - const BA = "Bashkir"; - const EU = "Basque"; - const BN = "Bengali (Bangla)"; - const DZ = "Bhutani"; - const BH = "Bihari"; - const BI = "Bislama"; - const BR = "Breton"; - const BG = "Bulgarian"; - const MY = "Burmese"; - const BE = "Byelorussian (Belarusian)"; - const KM = "Cambodian"; - const CA = "Catalan"; - const ZH = "Chinese"; - const CO = "Corsican"; - const HR = "Croatian"; - const CS = "Czech"; - const DA = "Danish"; - const NL = "Dutch"; - const EN = "English"; - const EO = "Esperanto"; - const ET = "Estonian"; - const FO = "Faeroese"; - const FA = "Farsi"; - const FJ = "Fiji"; - const FI = "Finnish"; - const FR = "French"; - const FY = "Frisian"; - const GV = "Gaelic (Manx)"; - const GD = "Gaelic (Scottish)"; - const GL = "Galician"; - const KA = "Georgian"; - const DE = "German"; - const EL = "Greek"; - const KL = "Greenlandic"; - const GN = "Guarani"; - const GU = "Gujarati"; - const HA = "Hausa"; - const IW = "Hebrew"; - const HE = "Hebrew"; - const HI = "Hindi"; - const HU = "Hungarian"; - const IS = "Icelandic"; - const IN = "Indonesian"; - const ID = "Indonesian"; - const IA = "Interlingua"; - const IE = "Interlingue"; - const IU = "Inuktitut"; - const IK = "Inupiak"; - const GA = "Irish"; - const IT = "Italian"; - const JA = "Japanese"; - const JV = "Javanese"; - const KN = "Kannada"; - const KS = "Kashmiri"; - const KK = "Kazakh"; - const RW = "Kinyarwanda (Ruanda)"; - const KY = "Kirghiz"; - const RN = "Kirundi (Rundi)"; - const KO = "Korean"; - const KU = "Kurdish"; - const LO = "Laothian"; - const LA = "Latin"; - const LV = "Latvian (Lettish)"; - const LI = "Limburgish ( Limburger)"; - const LN = "Lingala"; - const LT = "Lithuanian"; - const MK = "Macedonian"; - const MG = "Malagasy"; - const MS = "Malay"; - const ML = "Malayalam"; - const MT = "Maltese"; - const MI = "Maori"; - const MR = "Marathi"; - const MO = "Moldavian"; - const MN = "Mongolian"; - const NA = "Nauru"; - const NE = "Nepali"; - const NO = "Norwegian"; - const OC = "Occitan"; - const OR_ = "Oriya"; - const OM = "Oromo (Afan, Galla)"; - const PS = "Pashto (Pushto)"; - const PL = "Polish"; - const PT = "Portuguese"; - const PA = "Punjabi"; - const QU = "Quechua"; - const RM = "Rhaeto-Romance"; - const RO = "Romanian"; - const RU = "Russian"; - const SM = "Samoan"; - const SG = "Sangro"; - const SA = "Sanskrit"; - const SR = "Serbian"; - const SH = "Serbo-Croatian"; - const ST = "Sesotho"; - const TN = "Setswana"; - const SN = "Shona"; - const SD = "Sindhi"; - const SI = "Sinhalese"; - const SS = "Siswati"; - const SK = "Slovak"; - const SL = "Slovenian"; - const SO = "Somali"; - const ES = "Spanish"; - const SU = "Sundanese"; - const SW = "Swahili (Kiswahili)"; - const SV = "Swedish"; - const TL = "Tagalog"; - const TG = "Tajik"; - const TA = "Tamil"; - const TT = "Tatar"; - const TE = "Telugu"; - const TH = "Thai"; - const BO = "Tibetan"; - const TI = "Tigrinya"; - const TO = "Tonga"; - const TS = "Tsonga"; - const TR = "Turkish"; - const TK = "Turkmen"; - const TW = "Twi"; - const UG = "Uighur"; - const UK = "Ukrainian"; - const UR = "Urdu"; - const UZ = "Uzbek"; - const VI = "Vietnamese"; - const VO = "Volapuk"; - const CY = "Welsh"; - const WO = "Wolof"; - const XH = "Xhosa"; - const YI = "Yiddish"; - const JI = "Yiddish"; - const YO = "Yoruba"; - const ZU = "Zulu"; -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaLanguageCode -{ - const AA = "aa"; - const AB = "ab"; - const AF = "af"; - const AM = "am"; - const AR = "ar"; - const AS_ = "as"; - const AY = "ay"; - const AZ = "az"; - const BA = "ba"; - const BE = "be"; - const BG = "bg"; - const BH = "bh"; - const BI = "bi"; - const BN = "bn"; - const BO = "bo"; - const BR = "br"; - const CA = "ca"; - const CO = "co"; - const CS = "cs"; - const CY = "cy"; - const DA = "da"; - const DE = "de"; - const DZ = "dz"; - const EL = "el"; - const EN = "en"; - const EO = "eo"; - const ES = "es"; - const ET = "et"; - const EU = "eu"; - const FA = "fa"; - const FI = "fi"; - const FJ = "fj"; - const FO = "fo"; - const FR = "fr"; - const FY = "fy"; - const GA = "ga"; - const GD = "gd"; - const GL = "gl"; - const GN = "gn"; - const GU = "gu"; - const GV = "gv"; - const HA = "ha"; - const HE = "he"; - const HI = "hi"; - const HR = "hr"; - const HU = "hu"; - const HY = "hy"; - const IA = "ia"; - const ID = "id"; - const IE = "ie"; - const IK = "ik"; - const IN = "in"; - const IS = "is"; - const IT = "it"; - const IU = "iu"; - const IW = "iw"; - const JA = "ja"; - const JI = "ji"; - const JV = "jv"; - const KA = "ka"; - const KK = "kk"; - const KL = "kl"; - const KM = "km"; - const KN = "kn"; - const KO = "ko"; - const KS = "ks"; - const KU = "ku"; - const KY = "ky"; - const LA = "la"; - const LI = "li"; - const LN = "ln"; - const LO = "lo"; - const LT = "lt"; - const LV = "lv"; - const MG = "mg"; - const MI = "mi"; - const MK = "mk"; - const ML = "ml"; - const MN = "mn"; - const MO = "mo"; - const MR = "mr"; - const MS = "ms"; - const MT = "mt"; - const MY = "my"; - const NA = "na"; - const NE = "ne"; - const NL = "nl"; - const NO = "no"; - const OC = "oc"; - const OM = "om"; - const OR_ = "or"; - const PA = "pa"; - const PL = "pl"; - const PS = "ps"; - const PT = "pt"; - const QU = "qu"; - const RM = "rm"; - const RN = "rn"; - const RO = "ro"; - const RU = "ru"; - const RW = "rw"; - const SA = "sa"; - const SD = "sd"; - const SG = "sg"; - const SH = "sh"; - const SI = "si"; - const SK = "sk"; - const SL = "sl"; - const SM = "sm"; - const SN = "sn"; - const SO = "so"; - const SQ = "sq"; - const SR = "sr"; - const SS = "ss"; - const ST = "st"; - const SU = "su"; - const SV = "sv"; - const SW = "sw"; - const TA = "ta"; - const TE = "te"; - const TG = "tg"; - const TH = "th"; - const TI = "ti"; - const TK = "tk"; - const TL = "tl"; - const TN = "tn"; - const TO = "to"; - const TR = "tr"; - const TS = "ts"; - const TT = "tt"; - const TW = "tw"; - const UG = "ug"; - const UK = "uk"; - const UR = "ur"; - const UZ = "uz"; - const VI = "vi"; - const VO = "vo"; - const WO = "wo"; - const XH = "xh"; - const YI = "yi"; - const YO = "yo"; - const ZH = "zh"; - const ZU = "zu"; -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaLiveAssetOrderBy -{ - const CREATED_AT_ASC = "+createdAt"; - const DELETED_AT_ASC = "+deletedAt"; - const SIZE_ASC = "+size"; - const UPDATED_AT_ASC = "+updatedAt"; - const CREATED_AT_DESC = "-createdAt"; - const DELETED_AT_DESC = "-deletedAt"; - const SIZE_DESC = "-size"; - const UPDATED_AT_DESC = "-updatedAt"; -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaLiveChannelOrderBy -{ - const CREATED_AT_ASC = "+createdAt"; - const DURATION_ASC = "+duration"; - const END_DATE_ASC = "+endDate"; - const LAST_PLAYED_AT_ASC = "+lastPlayedAt"; - const MEDIA_TYPE_ASC = "+mediaType"; - const MODERATION_COUNT_ASC = "+moderationCount"; - const NAME_ASC = "+name"; - const PARTNER_SORT_VALUE_ASC = "+partnerSortValue"; - const PLAYS_ASC = "+plays"; - const RANK_ASC = "+rank"; - const RECENT_ASC = "+recent"; - const START_DATE_ASC = "+startDate"; - const TOTAL_RANK_ASC = "+totalRank"; - const UPDATED_AT_ASC = "+updatedAt"; - const VIEWS_ASC = "+views"; - const WEIGHT_ASC = "+weight"; - const CREATED_AT_DESC = "-createdAt"; - const DURATION_DESC = "-duration"; - const END_DATE_DESC = "-endDate"; - const LAST_PLAYED_AT_DESC = "-lastPlayedAt"; - const MEDIA_TYPE_DESC = "-mediaType"; - const MODERATION_COUNT_DESC = "-moderationCount"; - const NAME_DESC = "-name"; - const PARTNER_SORT_VALUE_DESC = "-partnerSortValue"; - const PLAYS_DESC = "-plays"; - const RANK_DESC = "-rank"; - const RECENT_DESC = "-recent"; - const START_DATE_DESC = "-startDate"; - const TOTAL_RANK_DESC = "-totalRank"; - const UPDATED_AT_DESC = "-updatedAt"; - const VIEWS_DESC = "-views"; - const WEIGHT_DESC = "-weight"; -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaLiveChannelSegmentOrderBy -{ - const CREATED_AT_ASC = "+createdAt"; - const START_TIME_ASC = "+startTime"; - const UPDATED_AT_ASC = "+updatedAt"; - const CREATED_AT_DESC = "-createdAt"; - const START_TIME_DESC = "-startTime"; - const UPDATED_AT_DESC = "-updatedAt"; -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaLiveChannelSegmentStatus -{ - const ACTIVE = "2"; - const DELETED = "3"; -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaLiveChannelSegmentTriggerType -{ - const CHANNEL_RELATIVE = "1"; - const ABSOLUTE_TIME = "2"; - const SEGMENT_START_RELATIVE = "3"; - const SEGMENT_END_RELATIVE = "4"; -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaLiveChannelSegmentType -{ - const VIDEO_AND_AUDIO = "1"; -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaLiveEntryOrderBy -{ - const CREATED_AT_ASC = "+createdAt"; - const DURATION_ASC = "+duration"; - const END_DATE_ASC = "+endDate"; - const LAST_PLAYED_AT_ASC = "+lastPlayedAt"; - const MEDIA_TYPE_ASC = "+mediaType"; - const MODERATION_COUNT_ASC = "+moderationCount"; - const NAME_ASC = "+name"; - const PARTNER_SORT_VALUE_ASC = "+partnerSortValue"; - const PLAYS_ASC = "+plays"; - const RANK_ASC = "+rank"; - const RECENT_ASC = "+recent"; - const START_DATE_ASC = "+startDate"; - const TOTAL_RANK_ASC = "+totalRank"; - const UPDATED_AT_ASC = "+updatedAt"; - const VIEWS_ASC = "+views"; - const WEIGHT_ASC = "+weight"; - const CREATED_AT_DESC = "-createdAt"; - const DURATION_DESC = "-duration"; - const END_DATE_DESC = "-endDate"; - const LAST_PLAYED_AT_DESC = "-lastPlayedAt"; - const MEDIA_TYPE_DESC = "-mediaType"; - const MODERATION_COUNT_DESC = "-moderationCount"; - const NAME_DESC = "-name"; - const PARTNER_SORT_VALUE_DESC = "-partnerSortValue"; - const PLAYS_DESC = "-plays"; - const RANK_DESC = "-rank"; - const RECENT_DESC = "-recent"; - const START_DATE_DESC = "-startDate"; - const TOTAL_RANK_DESC = "-totalRank"; - const UPDATED_AT_DESC = "-updatedAt"; - const VIEWS_DESC = "-views"; - const WEIGHT_DESC = "-weight"; -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaLiveParamsOrderBy -{ -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaLiveStreamAdminEntryOrderBy -{ - const CREATED_AT_ASC = "+createdAt"; - const DURATION_ASC = "+duration"; - const END_DATE_ASC = "+endDate"; - const LAST_PLAYED_AT_ASC = "+lastPlayedAt"; - const MEDIA_TYPE_ASC = "+mediaType"; - const MODERATION_COUNT_ASC = "+moderationCount"; - const NAME_ASC = "+name"; - const PARTNER_SORT_VALUE_ASC = "+partnerSortValue"; - const PLAYS_ASC = "+plays"; - const RANK_ASC = "+rank"; - const RECENT_ASC = "+recent"; - const START_DATE_ASC = "+startDate"; - const TOTAL_RANK_ASC = "+totalRank"; - const UPDATED_AT_ASC = "+updatedAt"; - const VIEWS_ASC = "+views"; - const WEIGHT_ASC = "+weight"; - const CREATED_AT_DESC = "-createdAt"; - const DURATION_DESC = "-duration"; - const END_DATE_DESC = "-endDate"; - const LAST_PLAYED_AT_DESC = "-lastPlayedAt"; - const MEDIA_TYPE_DESC = "-mediaType"; - const MODERATION_COUNT_DESC = "-moderationCount"; - const NAME_DESC = "-name"; - const PARTNER_SORT_VALUE_DESC = "-partnerSortValue"; - const PLAYS_DESC = "-plays"; - const RANK_DESC = "-rank"; - const RECENT_DESC = "-recent"; - const START_DATE_DESC = "-startDate"; - const TOTAL_RANK_DESC = "-totalRank"; - const UPDATED_AT_DESC = "-updatedAt"; - const VIEWS_DESC = "-views"; - const WEIGHT_DESC = "-weight"; -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaLiveStreamEntryOrderBy -{ - const CREATED_AT_ASC = "+createdAt"; - const DURATION_ASC = "+duration"; - const END_DATE_ASC = "+endDate"; - const LAST_PLAYED_AT_ASC = "+lastPlayedAt"; - const MEDIA_TYPE_ASC = "+mediaType"; - const MODERATION_COUNT_ASC = "+moderationCount"; - const NAME_ASC = "+name"; - const PARTNER_SORT_VALUE_ASC = "+partnerSortValue"; - const PLAYS_ASC = "+plays"; - const RANK_ASC = "+rank"; - const RECENT_ASC = "+recent"; - const START_DATE_ASC = "+startDate"; - const TOTAL_RANK_ASC = "+totalRank"; - const UPDATED_AT_ASC = "+updatedAt"; - const VIEWS_ASC = "+views"; - const WEIGHT_ASC = "+weight"; - const CREATED_AT_DESC = "-createdAt"; - const DURATION_DESC = "-duration"; - const END_DATE_DESC = "-endDate"; - const LAST_PLAYED_AT_DESC = "-lastPlayedAt"; - const MEDIA_TYPE_DESC = "-mediaType"; - const MODERATION_COUNT_DESC = "-moderationCount"; - const NAME_DESC = "-name"; - const PARTNER_SORT_VALUE_DESC = "-partnerSortValue"; - const PLAYS_DESC = "-plays"; - const RANK_DESC = "-rank"; - const RECENT_DESC = "-recent"; - const START_DATE_DESC = "-startDate"; - const TOTAL_RANK_DESC = "-totalRank"; - const UPDATED_AT_DESC = "-updatedAt"; - const VIEWS_DESC = "-views"; - const WEIGHT_DESC = "-weight"; -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaMailType -{ - const MAIL_TYPE_KALTURA_NEWSLETTER = "10"; - const MAIL_TYPE_ADDED_TO_FAVORITES = "11"; - const MAIL_TYPE_ADDED_TO_CLIP_FAVORITES = "12"; - const MAIL_TYPE_NEW_COMMENT_IN_PROFILE = "13"; - const MAIL_TYPE_CLIP_ADDED_YOUR_KALTURA = "20"; - const MAIL_TYPE_VIDEO_ADDED = "21"; - const MAIL_TYPE_ROUGHCUT_CREATED = "22"; - const MAIL_TYPE_ADDED_KALTURA_TO_YOUR_FAVORITES = "23"; - const MAIL_TYPE_NEW_COMMENT_IN_KALTURA = "24"; - const MAIL_TYPE_CLIP_ADDED = "30"; - const MAIL_TYPE_VIDEO_CREATED = "31"; - const MAIL_TYPE_ADDED_KALTURA_TO_HIS_FAVORITES = "32"; - const MAIL_TYPE_NEW_COMMENT_IN_KALTURA_YOU_CONTRIBUTED = "33"; - const MAIL_TYPE_CLIP_CONTRIBUTED = "40"; - const MAIL_TYPE_ROUGHCUT_CREATED_SUBSCRIBED = "41"; - const MAIL_TYPE_ADDED_KALTURA_TO_HIS_FAVORITES_SUBSCRIBED = "42"; - const MAIL_TYPE_NEW_COMMENT_IN_KALTURA_YOU_SUBSCRIBED = "43"; - const MAIL_TYPE_REGISTER_CONFIRM = "50"; - const MAIL_TYPE_PASSWORD_RESET = "51"; - const MAIL_TYPE_LOGIN_MAIL_RESET = "52"; - const MAIL_TYPE_REGISTER_CONFIRM_VIDEO_SERVICE = "54"; - const MAIL_TYPE_VIDEO_READY = "60"; - const MAIL_TYPE_VIDEO_IS_READY = "62"; - const MAIL_TYPE_BULK_DOWNLOAD_READY = "63"; - const MAIL_TYPE_BULKUPLOAD_FINISHED = "64"; - const MAIL_TYPE_BULKUPLOAD_FAILED = "65"; - const MAIL_TYPE_BULKUPLOAD_ABORTED = "66"; - const MAIL_TYPE_NOTIFY_ERR = "70"; - const MAIL_TYPE_ACCOUNT_UPGRADE_CONFIRM = "80"; - const MAIL_TYPE_VIDEO_SERVICE_NOTICE = "81"; - const MAIL_TYPE_VIDEO_SERVICE_NOTICE_LIMIT_REACHED = "82"; - const MAIL_TYPE_VIDEO_SERVICE_NOTICE_ACCOUNT_LOCKED = "83"; - const MAIL_TYPE_VIDEO_SERVICE_NOTICE_ACCOUNT_DELETED = "84"; - const MAIL_TYPE_VIDEO_SERVICE_NOTICE_UPGRADE_OFFER = "85"; - const MAIL_TYPE_ACCOUNT_REACTIVE_CONFIRM = "86"; - const MAIL_TYPE_SYSTEM_USER_RESET_PASSWORD = "110"; - const MAIL_TYPE_SYSTEM_USER_RESET_PASSWORD_SUCCESS = "111"; - const MAIL_TYPE_SYSTEM_USER_NEW_PASSWORD = "112"; - const MAIL_TYPE_SYSTEM_USER_CREDENTIALS_SAVED = "113"; -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaMediaEntryOrderBy -{ - const CREATED_AT_ASC = "+createdAt"; - const DURATION_ASC = "+duration"; - const END_DATE_ASC = "+endDate"; - const LAST_PLAYED_AT_ASC = "+lastPlayedAt"; - const MEDIA_TYPE_ASC = "+mediaType"; - const MODERATION_COUNT_ASC = "+moderationCount"; - const NAME_ASC = "+name"; - const PARTNER_SORT_VALUE_ASC = "+partnerSortValue"; - const PLAYS_ASC = "+plays"; - const RANK_ASC = "+rank"; - const RECENT_ASC = "+recent"; - const START_DATE_ASC = "+startDate"; - const TOTAL_RANK_ASC = "+totalRank"; - const UPDATED_AT_ASC = "+updatedAt"; - const VIEWS_ASC = "+views"; - const WEIGHT_ASC = "+weight"; - const CREATED_AT_DESC = "-createdAt"; - const DURATION_DESC = "-duration"; - const END_DATE_DESC = "-endDate"; - const LAST_PLAYED_AT_DESC = "-lastPlayedAt"; - const MEDIA_TYPE_DESC = "-mediaType"; - const MODERATION_COUNT_DESC = "-moderationCount"; - const NAME_DESC = "-name"; - const PARTNER_SORT_VALUE_DESC = "-partnerSortValue"; - const PLAYS_DESC = "-plays"; - const RANK_DESC = "-rank"; - const RECENT_DESC = "-recent"; - const START_DATE_DESC = "-startDate"; - const TOTAL_RANK_DESC = "-totalRank"; - const UPDATED_AT_DESC = "-updatedAt"; - const VIEWS_DESC = "-views"; - const WEIGHT_DESC = "-weight"; -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaMediaFlavorParamsOrderBy -{ -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaMediaFlavorParamsOutputOrderBy -{ -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaMediaInfoOrderBy -{ -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaMediaParserType -{ - const MEDIAINFO = "0"; - const REMOTE_MEDIAINFO = "remoteMediaInfo.RemoteMediaInfo"; - const FFMPEG = "1"; -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaMediaServerOrderBy -{ - const CREATED_AT_ASC = "+createdAt"; - const UPDATED_AT_ASC = "+updatedAt"; - const CREATED_AT_DESC = "-createdAt"; - const UPDATED_AT_DESC = "-updatedAt"; -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaMixEntryOrderBy -{ - const CREATED_AT_ASC = "+createdAt"; - const DURATION_ASC = "+duration"; - const END_DATE_ASC = "+endDate"; - const LAST_PLAYED_AT_ASC = "+lastPlayedAt"; - const MODERATION_COUNT_ASC = "+moderationCount"; - const NAME_ASC = "+name"; - const PARTNER_SORT_VALUE_ASC = "+partnerSortValue"; - const PLAYS_ASC = "+plays"; - const RANK_ASC = "+rank"; - const RECENT_ASC = "+recent"; - const START_DATE_ASC = "+startDate"; - const TOTAL_RANK_ASC = "+totalRank"; - const UPDATED_AT_ASC = "+updatedAt"; - const VIEWS_ASC = "+views"; - const WEIGHT_ASC = "+weight"; - const CREATED_AT_DESC = "-createdAt"; - const DURATION_DESC = "-duration"; - const END_DATE_DESC = "-endDate"; - const LAST_PLAYED_AT_DESC = "-lastPlayedAt"; - const MODERATION_COUNT_DESC = "-moderationCount"; - const NAME_DESC = "-name"; - const PARTNER_SORT_VALUE_DESC = "-partnerSortValue"; - const PLAYS_DESC = "-plays"; - const RANK_DESC = "-rank"; - const RECENT_DESC = "-recent"; - const START_DATE_DESC = "-startDate"; - const TOTAL_RANK_DESC = "-totalRank"; - const UPDATED_AT_DESC = "-updatedAt"; - const VIEWS_DESC = "-views"; - const WEIGHT_DESC = "-weight"; -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaModerationFlagStatus -{ - const PENDING = "1"; - const MODERATED = "2"; -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaModerationObjectType -{ - const ENTRY = "2"; - const USER = "3"; -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaPartnerOrderBy -{ - const ADMIN_EMAIL_ASC = "+adminEmail"; - const ADMIN_NAME_ASC = "+adminName"; - const CREATED_AT_ASC = "+createdAt"; - const ID_ASC = "+id"; - const NAME_ASC = "+name"; - const STATUS_ASC = "+status"; - const WEBSITE_ASC = "+website"; - const ADMIN_EMAIL_DESC = "-adminEmail"; - const ADMIN_NAME_DESC = "-adminName"; - const CREATED_AT_DESC = "-createdAt"; - const ID_DESC = "-id"; - const NAME_DESC = "-name"; - const STATUS_DESC = "-status"; - const WEBSITE_DESC = "-website"; -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaPermissionItemOrderBy -{ - const CREATED_AT_ASC = "+createdAt"; - const ID_ASC = "+id"; - const UPDATED_AT_ASC = "+updatedAt"; - const CREATED_AT_DESC = "-createdAt"; - const ID_DESC = "-id"; - const UPDATED_AT_DESC = "-updatedAt"; -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaPermissionItemType -{ - const API_ACTION_ITEM = "kApiActionPermissionItem"; - const API_PARAMETER_ITEM = "kApiParameterPermissionItem"; -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaPermissionOrderBy -{ - const CREATED_AT_ASC = "+createdAt"; - const ID_ASC = "+id"; - const NAME_ASC = "+name"; - const UPDATED_AT_ASC = "+updatedAt"; - const CREATED_AT_DESC = "-createdAt"; - const ID_DESC = "-id"; - const NAME_DESC = "-name"; - const UPDATED_AT_DESC = "-updatedAt"; -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaPlayableEntryOrderBy -{ - const CREATED_AT_ASC = "+createdAt"; - const DURATION_ASC = "+duration"; - const END_DATE_ASC = "+endDate"; - const LAST_PLAYED_AT_ASC = "+lastPlayedAt"; - const MODERATION_COUNT_ASC = "+moderationCount"; - const NAME_ASC = "+name"; - const PARTNER_SORT_VALUE_ASC = "+partnerSortValue"; - const PLAYS_ASC = "+plays"; - const RANK_ASC = "+rank"; - const RECENT_ASC = "+recent"; - const START_DATE_ASC = "+startDate"; - const TOTAL_RANK_ASC = "+totalRank"; - const UPDATED_AT_ASC = "+updatedAt"; - const VIEWS_ASC = "+views"; - const WEIGHT_ASC = "+weight"; - const CREATED_AT_DESC = "-createdAt"; - const DURATION_DESC = "-duration"; - const END_DATE_DESC = "-endDate"; - const LAST_PLAYED_AT_DESC = "-lastPlayedAt"; - const MODERATION_COUNT_DESC = "-moderationCount"; - const NAME_DESC = "-name"; - const PARTNER_SORT_VALUE_DESC = "-partnerSortValue"; - const PLAYS_DESC = "-plays"; - const RANK_DESC = "-rank"; - const RECENT_DESC = "-recent"; - const START_DATE_DESC = "-startDate"; - const TOTAL_RANK_DESC = "-totalRank"; - const UPDATED_AT_DESC = "-updatedAt"; - const VIEWS_DESC = "-views"; - const WEIGHT_DESC = "-weight"; -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaPlaybackProtocol -{ - const APPLE_HTTP = "applehttp"; - const AUTO = "auto"; - const AKAMAI_HD = "hdnetwork"; - const AKAMAI_HDS = "hdnetworkmanifest"; - const HDS = "hds"; - const HLS = "hls"; - const HTTP = "http"; - const MPEG_DASH = "mpegdash"; - const RTMP = "rtmp"; - const RTSP = "rtsp"; - const SILVER_LIGHT = "sl"; -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaPlaylistOrderBy -{ - const CREATED_AT_ASC = "+createdAt"; - const END_DATE_ASC = "+endDate"; - const MODERATION_COUNT_ASC = "+moderationCount"; - const NAME_ASC = "+name"; - const PARTNER_SORT_VALUE_ASC = "+partnerSortValue"; - const RANK_ASC = "+rank"; - const RECENT_ASC = "+recent"; - const START_DATE_ASC = "+startDate"; - const TOTAL_RANK_ASC = "+totalRank"; - const UPDATED_AT_ASC = "+updatedAt"; - const WEIGHT_ASC = "+weight"; - const CREATED_AT_DESC = "-createdAt"; - const END_DATE_DESC = "-endDate"; - const MODERATION_COUNT_DESC = "-moderationCount"; - const NAME_DESC = "-name"; - const PARTNER_SORT_VALUE_DESC = "-partnerSortValue"; - const RANK_DESC = "-rank"; - const RECENT_DESC = "-recent"; - const START_DATE_DESC = "-startDate"; - const TOTAL_RANK_DESC = "-totalRank"; - const UPDATED_AT_DESC = "-updatedAt"; - const WEIGHT_DESC = "-weight"; -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaReportInterval -{ - const DAYS = "days"; - const MONTHS = "months"; -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaReportOrderBy -{ - const CREATED_AT_ASC = "+createdAt"; - const CREATED_AT_DESC = "-createdAt"; -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaRuleActionType -{ - const BLOCK = "1"; - const PREVIEW = "2"; - const LIMIT_FLAVORS = "3"; - const ADD_TO_STORAGE = "4"; -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaSchemaType -{ - const BULK_UPLOAD_RESULT_XML = "bulkUploadXml.bulkUploadResultXML"; - const BULK_UPLOAD_XML = "bulkUploadXml.bulkUploadXML"; - const INGEST_API = "cuePoint.ingestAPI"; - const SERVE_API = "cuePoint.serveAPI"; - const DROP_FOLDER_XML = "dropFolderXmlBulkUpload.dropFolderXml"; - const SYNDICATION = "syndication"; -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaSearchConditionComparison -{ - const EQUAL = "1"; - const GREATER_THAN = "2"; - const GREATER_THAN_OR_EQUAL = "3"; - const LESS_THAN = "4"; - const LESS_THAN_OR_EQUAL = "5"; -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaSourceType -{ - const LIMELIGHT_LIVE = "limeLight.LIVE_STREAM"; - const VELOCIX_LIVE = "velocix.VELOCIX_LIVE"; - const FILE = "1"; - const WEBCAM = "2"; - const URL = "5"; - const SEARCH_PROVIDER = "6"; - const AKAMAI_LIVE = "29"; - const MANUAL_LIVE_STREAM = "30"; - const AKAMAI_UNIVERSAL_LIVE = "31"; - const LIVE_STREAM = "32"; - const LIVE_CHANNEL = "33"; - const RECORDED_LIVE = "34"; - const CLIP = "35"; -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaStorageProfileOrderBy -{ - const CREATED_AT_ASC = "+createdAt"; - const UPDATED_AT_ASC = "+updatedAt"; - const CREATED_AT_DESC = "-createdAt"; - const UPDATED_AT_DESC = "-updatedAt"; -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaStorageProfileProtocol -{ - const KONTIKI = "kontiki.KONTIKI"; - const KALTURA_DC = "0"; - const FTP = "1"; - const SCP = "2"; - const SFTP = "3"; - const S3 = "6"; - const LOCAL = "7"; -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaSyndicationFeedEntriesOrderBy -{ - const CREATED_AT_DESC = "-createdAt"; - const RECENT = "recent"; -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaTaggedObjectType -{ - const ENTRY = "1"; - const CATEGORY = "2"; -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaThumbAssetOrderBy -{ - const CREATED_AT_ASC = "+createdAt"; - const DELETED_AT_ASC = "+deletedAt"; - const SIZE_ASC = "+size"; - const UPDATED_AT_ASC = "+updatedAt"; - const CREATED_AT_DESC = "-createdAt"; - const DELETED_AT_DESC = "-deletedAt"; - const SIZE_DESC = "-size"; - const UPDATED_AT_DESC = "-updatedAt"; -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaThumbParamsOrderBy -{ -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaThumbParamsOutputOrderBy -{ -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaTubeMogulSyndicationFeedCategories -{ - const ANIMALS_AND_PETS = "Animals & Pets"; - const ARTS_AND_ANIMATION = "Arts & Animation"; - const AUTOS = "Autos"; - const COMEDY = "Comedy"; - const COMMERCIALS_PROMOTIONAL = "Commercials/Promotional"; - const ENTERTAINMENT = "Entertainment"; - const FAMILY_AND_KIDS = "Family & Kids"; - const HOW_TO_INSTRUCTIONAL_DIY = "How To/Instructional/DIY"; - const MUSIC = "Music"; - const NEWS_AND_BLOGS = "News & Blogs"; - const SCIENCE_AND_TECHNOLOGY = "Science & Technology"; - const SPORTS = "Sports"; - const TRAVEL_AND_PLACES = "Travel & Places"; - const VIDEO_GAMES = "Video Games"; - const VLOGS_PEOPLE = "Vlogs & People"; -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaTubeMogulSyndicationFeedOrderBy -{ - const CREATED_AT_ASC = "+createdAt"; - const NAME_ASC = "+name"; - const PLAYLIST_ID_ASC = "+playlistId"; - const TYPE_ASC = "+type"; - const UPDATED_AT_ASC = "+updatedAt"; - const CREATED_AT_DESC = "-createdAt"; - const NAME_DESC = "-name"; - const PLAYLIST_ID_DESC = "-playlistId"; - const TYPE_DESC = "-type"; - const UPDATED_AT_DESC = "-updatedAt"; -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaUiConfOrderBy -{ - const CREATED_AT_ASC = "+createdAt"; - const UPDATED_AT_ASC = "+updatedAt"; - const CREATED_AT_DESC = "-createdAt"; - const UPDATED_AT_DESC = "-updatedAt"; -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaUploadTokenOrderBy -{ - const CREATED_AT_ASC = "+createdAt"; - const CREATED_AT_DESC = "-createdAt"; -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaUserLoginDataOrderBy -{ -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaUserOrderBy -{ - const CREATED_AT_ASC = "+createdAt"; - const ID_ASC = "+id"; - const CREATED_AT_DESC = "-createdAt"; - const ID_DESC = "-id"; -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaUserRoleOrderBy -{ - const CREATED_AT_ASC = "+createdAt"; - const ID_ASC = "+id"; - const NAME_ASC = "+name"; - const UPDATED_AT_ASC = "+updatedAt"; - const CREATED_AT_DESC = "-createdAt"; - const ID_DESC = "-id"; - const NAME_DESC = "-name"; - const UPDATED_AT_DESC = "-updatedAt"; -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaVideoCodec -{ - const NONE = ""; - const APCH = "apch"; - const APCN = "apcn"; - const APCO = "apco"; - const APCS = "apcs"; - const COPY = "copy"; - const DNXHD = "dnxhd"; - const DV = "dv"; - const FLV = "flv"; - const H263 = "h263"; - const H264 = "h264"; - const H264B = "h264b"; - const H264H = "h264h"; - const H264M = "h264m"; - const MPEG2 = "mpeg2"; - const MPEG4 = "mpeg4"; - const THEORA = "theora"; - const VP6 = "vp6"; - const VP8 = "vp8"; - const WMV2 = "wmv2"; - const WMV3 = "wmv3"; - const WVC1A = "wvc1a"; -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaWidgetOrderBy -{ - const CREATED_AT_ASC = "+createdAt"; - const CREATED_AT_DESC = "-createdAt"; -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaYahooSyndicationFeedAdultValues -{ - const ADULT = "adult"; - const NON_ADULT = "nonadult"; -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaYahooSyndicationFeedCategories -{ - const ACTION = "Action"; - const ANIMALS = "Animals"; - const ART_AND_ANIMATION = "Art & Animation"; - const COMMERCIALS = "Commercials"; - const ENTERTAINMENT_AND_TV = "Entertainment & TV"; - const FAMILY = "Family"; - const FOOD = "Food"; - const FUNNY_VIDEOS = "Funny Videos"; - const GAMES = "Games"; - const HEALTH_AND_BEAUTY = "Health & Beauty"; - const HOW_TO = "How-To"; - const MOVIES_AND_SHORTS = "Movies & Shorts"; - const MUSIC = "Music"; - const NEWS_AND_POLITICS = "News & Politics"; - const PEOPLE_AND_VLOGS = "People & Vlogs"; - const PRODUCTS_AND_TECH = "Products & Tech."; - const SCIENCE_AND_ENVIRONMENT = "Science & Environment"; - const SPORTS = "Sports"; - const TRANSPORTATION = "Transportation"; - const TRAVEL = "Travel"; -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaYahooSyndicationFeedOrderBy -{ - const CREATED_AT_ASC = "+createdAt"; - const NAME_ASC = "+name"; - const PLAYLIST_ID_ASC = "+playlistId"; - const TYPE_ASC = "+type"; - const UPDATED_AT_ASC = "+updatedAt"; - const CREATED_AT_DESC = "-createdAt"; - const NAME_DESC = "-name"; - const PLAYLIST_ID_DESC = "-playlistId"; - const TYPE_DESC = "-type"; - const UPDATED_AT_DESC = "-updatedAt"; -} - diff --git a/local/kaltura/API/KalturaPlugins/KalturaAbcScreenersWatermarkAccessControlClientPlugin.php b/local/kaltura/API/KalturaPlugins/KalturaAbcScreenersWatermarkAccessControlClientPlugin.php deleted file mode 100644 index 6f68c5fa37a5d..0000000000000 --- a/local/kaltura/API/KalturaPlugins/KalturaAbcScreenersWatermarkAccessControlClientPlugin.php +++ /dev/null @@ -1,84 +0,0 @@ -. -// -// @ignore -// =================================================================================================== - -/** - * @package Kaltura - * @subpackage Client - */ -require_once(dirname(__FILE__) . "/../KalturaClientBase.php"); -require_once(dirname(__FILE__) . "/../KalturaEnums.php"); -require_once(dirname(__FILE__) . "/../KalturaTypes.php"); - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaABCScreenersWatermarkCondition extends KalturaCondition -{ - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaAbcScreenersWatermarkAccessControlClientPlugin extends KalturaClientPlugin -{ - protected function __construct(KalturaClient $client) - { - parent::__construct($client); - } - - /** - * @return KalturaAbcScreenersWatermarkAccessControlClientPlugin - */ - public static function get(KalturaClient $client) - { - return new KalturaAbcScreenersWatermarkAccessControlClientPlugin($client); - } - - /** - * @return array - */ - public function getServices() - { - $services = array( - ); - return $services; - } - - /** - * @return string - */ - public function getName() - { - return 'abcScreenersWatermarkAccessControl'; - } -} - diff --git a/local/kaltura/API/KalturaPlugins/KalturaAdCuePointClientPlugin.php b/local/kaltura/API/KalturaPlugins/KalturaAdCuePointClientPlugin.php deleted file mode 100644 index 7cd819707c3be..0000000000000 --- a/local/kaltura/API/KalturaPlugins/KalturaAdCuePointClientPlugin.php +++ /dev/null @@ -1,253 +0,0 @@ -. -// -// @ignore -// =================================================================================================== - -/** - * @package Kaltura - * @subpackage Client - */ -require_once(dirname(__FILE__) . "/../KalturaClientBase.php"); -require_once(dirname(__FILE__) . "/../KalturaEnums.php"); -require_once(dirname(__FILE__) . "/../KalturaTypes.php"); -require_once(dirname(__FILE__) . "/KalturaCuePointClientPlugin.php"); - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaAdCuePointOrderBy -{ - const CREATED_AT_ASC = "+createdAt"; - const DURATION_ASC = "+duration"; - const END_TIME_ASC = "+endTime"; - const PARTNER_SORT_VALUE_ASC = "+partnerSortValue"; - const START_TIME_ASC = "+startTime"; - const UPDATED_AT_ASC = "+updatedAt"; - const CREATED_AT_DESC = "-createdAt"; - const DURATION_DESC = "-duration"; - const END_TIME_DESC = "-endTime"; - const PARTNER_SORT_VALUE_DESC = "-partnerSortValue"; - const START_TIME_DESC = "-startTime"; - const UPDATED_AT_DESC = "-updatedAt"; -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaAdProtocolType -{ - const CUSTOM = "0"; - const VAST = "1"; - const VAST_2_0 = "2"; - const VPAID = "3"; -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaAdType -{ - const VIDEO = "1"; - const OVERLAY = "2"; -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaAdCuePoint extends KalturaCuePoint -{ - /** - * - * - * @var KalturaAdProtocolType - * @insertonly - */ - public $protocolType = null; - - /** - * - * - * @var string - */ - public $sourceUrl = null; - - /** - * - * - * @var KalturaAdType - */ - public $adType = null; - - /** - * - * - * @var string - */ - public $title = null; - - /** - * - * - * @var int - */ - public $endTime = null; - - /** - * Duration in milliseconds - * - * - * @var int - * @readonly - */ - public $duration = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -abstract class KalturaAdCuePointBaseFilter extends KalturaCuePointFilter -{ - /** - * - * - * @var KalturaAdProtocolType - */ - public $protocolTypeEqual = null; - - /** - * - * - * @var string - */ - public $protocolTypeIn = null; - - /** - * - * - * @var string - */ - public $titleLike = null; - - /** - * - * - * @var string - */ - public $titleMultiLikeOr = null; - - /** - * - * - * @var string - */ - public $titleMultiLikeAnd = null; - - /** - * - * - * @var int - */ - public $endTimeGreaterThanOrEqual = null; - - /** - * - * - * @var int - */ - public $endTimeLessThanOrEqual = null; - - /** - * - * - * @var int - */ - public $durationGreaterThanOrEqual = null; - - /** - * - * - * @var int - */ - public $durationLessThanOrEqual = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaAdCuePointFilter extends KalturaAdCuePointBaseFilter -{ - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaAdCuePointClientPlugin extends KalturaClientPlugin -{ - protected function __construct(KalturaClient $client) - { - parent::__construct($client); - } - - /** - * @return KalturaAdCuePointClientPlugin - */ - public static function get(KalturaClient $client) - { - return new KalturaAdCuePointClientPlugin($client); - } - - /** - * @return array - */ - public function getServices() - { - $services = array( - ); - return $services; - } - - /** - * @return string - */ - public function getName() - { - return 'adCuePoint'; - } -} - diff --git a/local/kaltura/API/KalturaPlugins/KalturaAnnotationClientPlugin.php b/local/kaltura/API/KalturaPlugins/KalturaAnnotationClientPlugin.php deleted file mode 100644 index d2fd7a9629d54..0000000000000 --- a/local/kaltura/API/KalturaPlugins/KalturaAnnotationClientPlugin.php +++ /dev/null @@ -1,450 +0,0 @@ -. -// -// @ignore -// =================================================================================================== - -/** - * @package Kaltura - * @subpackage Client - */ -require_once(dirname(__FILE__) . "/../KalturaClientBase.php"); -require_once(dirname(__FILE__) . "/../KalturaEnums.php"); -require_once(dirname(__FILE__) . "/../KalturaTypes.php"); -require_once(dirname(__FILE__) . "/KalturaCuePointClientPlugin.php"); - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaAnnotationOrderBy -{ - const CREATED_AT_ASC = "+createdAt"; - const DURATION_ASC = "+duration"; - const END_TIME_ASC = "+endTime"; - const PARTNER_SORT_VALUE_ASC = "+partnerSortValue"; - const START_TIME_ASC = "+startTime"; - const UPDATED_AT_ASC = "+updatedAt"; - const CREATED_AT_DESC = "-createdAt"; - const DURATION_DESC = "-duration"; - const END_TIME_DESC = "-endTime"; - const PARTNER_SORT_VALUE_DESC = "-partnerSortValue"; - const START_TIME_DESC = "-startTime"; - const UPDATED_AT_DESC = "-updatedAt"; -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaAnnotation extends KalturaCuePoint -{ - /** - * - * - * @var string - * @insertonly - */ - public $parentId = null; - - /** - * - * - * @var string - */ - public $text = null; - - /** - * End time in milliseconds - * - * - * @var int - */ - public $endTime = null; - - /** - * Duration in milliseconds - * - * - * @var int - * @readonly - */ - public $duration = null; - - /** - * Depth in the tree - * - * - * @var int - * @readonly - */ - public $depth = null; - - /** - * Number of all descendants - * - * - * @var int - * @readonly - */ - public $childrenCount = null; - - /** - * Number of children, first generation only. - * - * - * @var int - * @readonly - */ - public $directChildrenCount = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaAnnotationListResponse extends KalturaObjectBase -{ - /** - * - * - * @var array of KalturaAnnotation - * @readonly - */ - public $objects; - - /** - * - * - * @var int - * @readonly - */ - public $totalCount = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -abstract class KalturaAnnotationBaseFilter extends KalturaCuePointFilter -{ - /** - * - * - * @var string - */ - public $parentIdEqual = null; - - /** - * - * - * @var string - */ - public $parentIdIn = null; - - /** - * - * - * @var string - */ - public $textLike = null; - - /** - * - * - * @var string - */ - public $textMultiLikeOr = null; - - /** - * - * - * @var string - */ - public $textMultiLikeAnd = null; - - /** - * - * - * @var int - */ - public $endTimeGreaterThanOrEqual = null; - - /** - * - * - * @var int - */ - public $endTimeLessThanOrEqual = null; - - /** - * - * - * @var int - */ - public $durationGreaterThanOrEqual = null; - - /** - * - * - * @var int - */ - public $durationLessThanOrEqual = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaAnnotationFilter extends KalturaAnnotationBaseFilter -{ - -} - - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaAnnotationService extends KalturaServiceBase -{ - function __construct(KalturaClient $client = null) - { - parent::__construct($client); - } - - /** - * Allows you to add an annotation object associated with an entry - * - * @param KalturaCuePoint $annotation - * @return KalturaAnnotation - */ - function add(KalturaCuePoint $annotation) - { - $kparams = array(); - $this->client->addParam($kparams, "annotation", $annotation->toParams()); - $this->client->queueServiceActionCall("annotation_annotation", "add", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaAnnotation"); - return $resultObject; - } - - /** - * Update annotation by id - * - * @param string $id - * @param KalturaCuePoint $annotation - * @return KalturaAnnotation - */ - function update($id, KalturaCuePoint $annotation) - { - $kparams = array(); - $this->client->addParam($kparams, "id", $id); - $this->client->addParam($kparams, "annotation", $annotation->toParams()); - $this->client->queueServiceActionCall("annotation_annotation", "update", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaAnnotation"); - return $resultObject; - } - - /** - * List annotation objects by filter and pager - * - * @param KalturaCuePointFilter $filter - * @param KalturaFilterPager $pager - * @return KalturaAnnotationListResponse - */ - function listAction(KalturaCuePointFilter $filter = null, KalturaFilterPager $pager = null) - { - $kparams = array(); - if ($filter !== null) - $this->client->addParam($kparams, "filter", $filter->toParams()); - if ($pager !== null) - $this->client->addParam($kparams, "pager", $pager->toParams()); - $this->client->queueServiceActionCall("annotation_annotation", "list", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaAnnotationListResponse"); - return $resultObject; - } - - /** - * Allows you to add multiple cue points objects by uploading XML that contains multiple cue point definitions - * - * @param file $fileData - * @return KalturaCuePointListResponse - */ - function addFromBulk($fileData) - { - $kparams = array(); - $kfiles = array(); - $this->client->addParam($kfiles, "fileData", $fileData); - $this->client->queueServiceActionCall("annotation_annotation", "addFromBulk", $kparams, $kfiles); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaCuePointListResponse"); - return $resultObject; - } - - /** - * Download multiple cue points objects as XML definitions - * - * @param KalturaCuePointFilter $filter - * @param KalturaFilterPager $pager - * @return file - */ - function serveBulk(KalturaCuePointFilter $filter = null, KalturaFilterPager $pager = null) - { - $kparams = array(); - if ($filter !== null) - $this->client->addParam($kparams, "filter", $filter->toParams()); - if ($pager !== null) - $this->client->addParam($kparams, "pager", $pager->toParams()); - $this->client->queueServiceActionCall("annotation_annotation", "serveBulk", $kparams); - if(!$this->client->getDestinationPath() && !$this->client->getReturnServedResult()) - return $this->client->getServeUrl(); - return $this->client->doQueue(); - } - - /** - * Retrieve an CuePoint object by id - * - * @param string $id - * @return KalturaCuePoint - */ - function get($id) - { - $kparams = array(); - $this->client->addParam($kparams, "id", $id); - $this->client->queueServiceActionCall("annotation_annotation", "get", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaCuePoint"); - return $resultObject; - } - - /** - * Count cue point objects by filter - * - * @param KalturaCuePointFilter $filter - * @return int - */ - function count(KalturaCuePointFilter $filter = null) - { - $kparams = array(); - if ($filter !== null) - $this->client->addParam($kparams, "filter", $filter->toParams()); - $this->client->queueServiceActionCall("annotation_annotation", "count", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "integer"); - return $resultObject; - } - - /** - * Delete cue point by id, and delete all children cue points - * - * @param string $id - * @return - */ - function delete($id) - { - $kparams = array(); - $this->client->addParam($kparams, "id", $id); - $this->client->queueServiceActionCall("annotation_annotation", "delete", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "null"); - return $resultObject; - } -} -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaAnnotationClientPlugin extends KalturaClientPlugin -{ - /** - * @var KalturaAnnotationService - */ - public $annotation = null; - - protected function __construct(KalturaClient $client) - { - parent::__construct($client); - $this->annotation = new KalturaAnnotationService($client); - } - - /** - * @return KalturaAnnotationClientPlugin - */ - public static function get(KalturaClient $client) - { - return new KalturaAnnotationClientPlugin($client); - } - - /** - * @return array - */ - public function getServices() - { - $services = array( - 'annotation' => $this->annotation, - ); - return $services; - } - - /** - * @return string - */ - public function getName() - { - return 'annotation'; - } -} - diff --git a/local/kaltura/API/KalturaPlugins/KalturaAsperaClientPlugin.php b/local/kaltura/API/KalturaPlugins/KalturaAsperaClientPlugin.php deleted file mode 100644 index b3044303955ae..0000000000000 --- a/local/kaltura/API/KalturaPlugins/KalturaAsperaClientPlugin.php +++ /dev/null @@ -1,113 +0,0 @@ -. -// -// @ignore -// =================================================================================================== - -/** - * @package Kaltura - * @subpackage Client - */ -require_once(dirname(__FILE__) . "/../KalturaClientBase.php"); -require_once(dirname(__FILE__) . "/../KalturaEnums.php"); -require_once(dirname(__FILE__) . "/../KalturaTypes.php"); - - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaAsperaService extends KalturaServiceBase -{ - function __construct(KalturaClient $client = null) - { - parent::__construct($client); - } - - /** - * - * - * @param string $flavorAssetId - * @return string - */ - function getFaspUrl($flavorAssetId) - { - $kparams = array(); - $this->client->addParam($kparams, "flavorAssetId", $flavorAssetId); - $this->client->queueServiceActionCall("aspera_aspera", "getFaspUrl", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "string"); - return $resultObject; - } -} -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaAsperaClientPlugin extends KalturaClientPlugin -{ - /** - * @var KalturaAsperaService - */ - public $aspera = null; - - protected function __construct(KalturaClient $client) - { - parent::__construct($client); - $this->aspera = new KalturaAsperaService($client); - } - - /** - * @return KalturaAsperaClientPlugin - */ - public static function get(KalturaClient $client) - { - return new KalturaAsperaClientPlugin($client); - } - - /** - * @return array - */ - public function getServices() - { - $services = array( - 'aspera' => $this->aspera, - ); - return $services; - } - - /** - * @return string - */ - public function getName() - { - return 'aspera'; - } -} - diff --git a/local/kaltura/API/KalturaPlugins/KalturaAttachmentClientPlugin.php b/local/kaltura/API/KalturaPlugins/KalturaAttachmentClientPlugin.php deleted file mode 100644 index 61fecf3fff1d5..0000000000000 --- a/local/kaltura/API/KalturaPlugins/KalturaAttachmentClientPlugin.php +++ /dev/null @@ -1,435 +0,0 @@ -. -// -// @ignore -// =================================================================================================== - -/** - * @package Kaltura - * @subpackage Client - */ -require_once(dirname(__FILE__) . "/../KalturaClientBase.php"); -require_once(dirname(__FILE__) . "/../KalturaEnums.php"); -require_once(dirname(__FILE__) . "/../KalturaTypes.php"); - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaAttachmentAssetStatus -{ - const ERROR = -1; - const QUEUED = 0; - const READY = 2; - const DELETED = 3; - const IMPORTING = 7; - const EXPORTING = 9; -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaAttachmentAssetOrderBy -{ - const CREATED_AT_ASC = "+createdAt"; - const DELETED_AT_ASC = "+deletedAt"; - const SIZE_ASC = "+size"; - const UPDATED_AT_ASC = "+updatedAt"; - const CREATED_AT_DESC = "-createdAt"; - const DELETED_AT_DESC = "-deletedAt"; - const SIZE_DESC = "-size"; - const UPDATED_AT_DESC = "-updatedAt"; -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaAttachmentType -{ - const TEXT = "1"; - const MEDIA = "2"; - const DOCUMENT = "3"; -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaAttachmentAsset extends KalturaAsset -{ - /** - * The filename of the attachment asset content - * - * - * @var string - */ - public $filename = null; - - /** - * Attachment asset title - * - * - * @var string - */ - public $title = null; - - /** - * The attachment format - * - * - * @var KalturaAttachmentType - */ - public $format = null; - - /** - * The status of the asset - * - * - * @var KalturaAttachmentAssetStatus - * @readonly - */ - public $status = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaAttachmentAssetListResponse extends KalturaObjectBase -{ - /** - * - * - * @var array of KalturaAttachmentAsset - * @readonly - */ - public $objects; - - /** - * - * - * @var int - * @readonly - */ - public $totalCount = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -abstract class KalturaAttachmentAssetBaseFilter extends KalturaAssetFilter -{ - /** - * - * - * @var KalturaAttachmentType - */ - public $formatEqual = null; - - /** - * - * - * @var string - */ - public $formatIn = null; - - /** - * - * - * @var KalturaAttachmentAssetStatus - */ - public $statusEqual = null; - - /** - * - * - * @var string - */ - public $statusIn = null; - - /** - * - * - * @var string - */ - public $statusNotIn = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaAttachmentAssetFilter extends KalturaAttachmentAssetBaseFilter -{ - -} - - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaAttachmentAssetService extends KalturaServiceBase -{ - function __construct(KalturaClient $client = null) - { - parent::__construct($client); - } - - /** - * Add attachment asset - * - * @param string $entryId - * @param KalturaAttachmentAsset $attachmentAsset - * @return KalturaAttachmentAsset - */ - function add($entryId, KalturaAttachmentAsset $attachmentAsset) - { - $kparams = array(); - $this->client->addParam($kparams, "entryId", $entryId); - $this->client->addParam($kparams, "attachmentAsset", $attachmentAsset->toParams()); - $this->client->queueServiceActionCall("attachment_attachmentasset", "add", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaAttachmentAsset"); - return $resultObject; - } - - /** - * Update content of attachment asset - * - * @param string $id - * @param KalturaContentResource $contentResource - * @return KalturaAttachmentAsset - */ - function setContent($id, KalturaContentResource $contentResource) - { - $kparams = array(); - $this->client->addParam($kparams, "id", $id); - $this->client->addParam($kparams, "contentResource", $contentResource->toParams()); - $this->client->queueServiceActionCall("attachment_attachmentasset", "setContent", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaAttachmentAsset"); - return $resultObject; - } - - /** - * Update attachment asset - * - * @param string $id - * @param KalturaAttachmentAsset $attachmentAsset - * @return KalturaAttachmentAsset - */ - function update($id, KalturaAttachmentAsset $attachmentAsset) - { - $kparams = array(); - $this->client->addParam($kparams, "id", $id); - $this->client->addParam($kparams, "attachmentAsset", $attachmentAsset->toParams()); - $this->client->queueServiceActionCall("attachment_attachmentasset", "update", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaAttachmentAsset"); - return $resultObject; - } - - /** - * Get download URL for the asset - * - * @param string $id - * @param int $storageId - * @return string - */ - function getUrl($id, $storageId = null) - { - $kparams = array(); - $this->client->addParam($kparams, "id", $id); - $this->client->addParam($kparams, "storageId", $storageId); - $this->client->queueServiceActionCall("attachment_attachmentasset", "getUrl", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "string"); - return $resultObject; - } - - /** - * Get remote storage existing paths for the asset - * - * @param string $id - * @return KalturaRemotePathListResponse - */ - function getRemotePaths($id) - { - $kparams = array(); - $this->client->addParam($kparams, "id", $id); - $this->client->queueServiceActionCall("attachment_attachmentasset", "getRemotePaths", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaRemotePathListResponse"); - return $resultObject; - } - - /** - * Serves attachment by its id - * - * @param string $attachmentAssetId - * @return file - */ - function serve($attachmentAssetId) - { - $kparams = array(); - $this->client->addParam($kparams, "attachmentAssetId", $attachmentAssetId); - $this->client->queueServiceActionCall("attachment_attachmentasset", "serve", $kparams); - if(!$this->client->getDestinationPath() && !$this->client->getReturnServedResult()) - return $this->client->getServeUrl(); - return $this->client->doQueue(); - } - - /** - * - * - * @param string $attachmentAssetId - * @return KalturaAttachmentAsset - */ - function get($attachmentAssetId) - { - $kparams = array(); - $this->client->addParam($kparams, "attachmentAssetId", $attachmentAssetId); - $this->client->queueServiceActionCall("attachment_attachmentasset", "get", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaAttachmentAsset"); - return $resultObject; - } - - /** - * List attachment Assets by filter and pager - * - * @param KalturaAssetFilter $filter - * @param KalturaFilterPager $pager - * @return KalturaAttachmentAssetListResponse - */ - function listAction(KalturaAssetFilter $filter = null, KalturaFilterPager $pager = null) - { - $kparams = array(); - if ($filter !== null) - $this->client->addParam($kparams, "filter", $filter->toParams()); - if ($pager !== null) - $this->client->addParam($kparams, "pager", $pager->toParams()); - $this->client->queueServiceActionCall("attachment_attachmentasset", "list", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaAttachmentAssetListResponse"); - return $resultObject; - } - - /** - * - * - * @param string $attachmentAssetId - * @return - */ - function delete($attachmentAssetId) - { - $kparams = array(); - $this->client->addParam($kparams, "attachmentAssetId", $attachmentAssetId); - $this->client->queueServiceActionCall("attachment_attachmentasset", "delete", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "null"); - return $resultObject; - } -} -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaAttachmentClientPlugin extends KalturaClientPlugin -{ - /** - * @var KalturaAttachmentAssetService - */ - public $attachmentAsset = null; - - protected function __construct(KalturaClient $client) - { - parent::__construct($client); - $this->attachmentAsset = new KalturaAttachmentAssetService($client); - } - - /** - * @return KalturaAttachmentClientPlugin - */ - public static function get(KalturaClient $client) - { - return new KalturaAttachmentClientPlugin($client); - } - - /** - * @return array - */ - public function getServices() - { - $services = array( - 'attachmentAsset' => $this->attachmentAsset, - ); - return $services; - } - - /** - * @return string - */ - public function getName() - { - return 'attachment'; - } -} - diff --git a/local/kaltura/API/KalturaPlugins/KalturaAuditClientPlugin.php b/local/kaltura/API/KalturaPlugins/KalturaAuditClientPlugin.php deleted file mode 100644 index a925d7a9467a8..0000000000000 --- a/local/kaltura/API/KalturaPlugins/KalturaAuditClientPlugin.php +++ /dev/null @@ -1,893 +0,0 @@ -. -// -// @ignore -// =================================================================================================== - -/** - * @package Kaltura - * @subpackage Client - */ -require_once(dirname(__FILE__) . "/../KalturaClientBase.php"); -require_once(dirname(__FILE__) . "/../KalturaEnums.php"); -require_once(dirname(__FILE__) . "/../KalturaTypes.php"); - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaAuditTrailChangeXmlNodeType -{ - const CHANGED = 1; - const ADDED = 2; - const REMOVED = 3; -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaAuditTrailContext -{ - const CLIENT = -1; - const SCRIPT = 0; - const PS2 = 1; - const API_V3 = 2; -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaAuditTrailFileSyncType -{ - const FILE = 1; - const LINK = 2; - const URL = 3; -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaAuditTrailStatus -{ - const PENDING = 1; - const READY = 2; - const FAILED = 3; -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaAuditTrailAction -{ - const CHANGED = "CHANGED"; - const CONTENT_VIEWED = "CONTENT_VIEWED"; - const COPIED = "COPIED"; - const CREATED = "CREATED"; - const DELETED = "DELETED"; - const FILE_SYNC_CREATED = "FILE_SYNC_CREATED"; - const RELATION_ADDED = "RELATION_ADDED"; - const RELATION_REMOVED = "RELATION_REMOVED"; - const VIEWED = "VIEWED"; -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaAuditTrailObjectType -{ - const BATCH_JOB = "BatchJob"; - const EMAIL_INGESTION_PROFILE = "EmailIngestionProfile"; - const FILE_SYNC = "FileSync"; - const KSHOW_KUSER = "KshowKuser"; - const METADATA = "Metadata"; - const METADATA_PROFILE = "MetadataProfile"; - const PARTNER = "Partner"; - const PERMISSION = "Permission"; - const UPLOAD_TOKEN = "UploadToken"; - const USER_LOGIN_DATA = "UserLoginData"; - const USER_ROLE = "UserRole"; - const ACCESS_CONTROL = "accessControl"; - const CATEGORY = "category"; - const CONVERSION_PROFILE_2 = "conversionProfile2"; - const ENTRY = "entry"; - const FLAVOR_ASSET = "flavorAsset"; - const FLAVOR_PARAMS = "flavorParams"; - const FLAVOR_PARAMS_CONVERSION_PROFILE = "flavorParamsConversionProfile"; - const FLAVOR_PARAMS_OUTPUT = "flavorParamsOutput"; - const KSHOW = "kshow"; - const KUSER = "kuser"; - const MEDIA_INFO = "mediaInfo"; - const MODERATION = "moderation"; - const ROUGHCUT = "roughcutEntry"; - const SYNDICATION = "syndicationFeed"; - const THUMBNAIL_ASSET = "thumbAsset"; - const THUMBNAIL_PARAMS = "thumbParams"; - const THUMBNAIL_PARAMS_OUTPUT = "thumbParamsOutput"; - const UI_CONF = "uiConf"; - const WIDGET = "widget"; -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaAuditTrailOrderBy -{ - const CREATED_AT_ASC = "+createdAt"; - const PARSED_AT_ASC = "+parsedAt"; - const CREATED_AT_DESC = "-createdAt"; - const PARSED_AT_DESC = "-parsedAt"; -} - -/** - * @package Kaltura - * @subpackage Client - */ -abstract class KalturaAuditTrailInfo extends KalturaObjectBase -{ - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaAuditTrail extends KalturaObjectBase -{ - /** - * - * - * @var int - * @readonly - */ - public $id = null; - - /** - * - * - * @var int - * @readonly - */ - public $createdAt = null; - - /** - * Indicates when the data was parsed - * - * - * @var int - * @readonly - */ - public $parsedAt = null; - - /** - * - * - * @var KalturaAuditTrailStatus - * @readonly - */ - public $status = null; - - /** - * - * - * @var KalturaAuditTrailObjectType - */ - public $auditObjectType = null; - - /** - * - * - * @var string - */ - public $objectId = null; - - /** - * - * - * @var string - */ - public $relatedObjectId = null; - - /** - * - * - * @var KalturaAuditTrailObjectType - */ - public $relatedObjectType = null; - - /** - * - * - * @var string - */ - public $entryId = null; - - /** - * - * - * @var int - * @readonly - */ - public $masterPartnerId = null; - - /** - * - * - * @var int - * @readonly - */ - public $partnerId = null; - - /** - * - * - * @var string - * @readonly - */ - public $requestId = null; - - /** - * - * - * @var string - */ - public $userId = null; - - /** - * - * - * @var KalturaAuditTrailAction - */ - public $action = null; - - /** - * - * - * @var KalturaAuditTrailInfo - */ - public $data; - - /** - * - * - * @var string - * @readonly - */ - public $ks = null; - - /** - * - * - * @var KalturaAuditTrailContext - * @readonly - */ - public $context = null; - - /** - * The API service and action that called and caused this audit - * - * - * @var string - * @readonly - */ - public $entryPoint = null; - - /** - * - * - * @var string - * @readonly - */ - public $serverName = null; - - /** - * - * - * @var string - * @readonly - */ - public $ipAddress = null; - - /** - * - * - * @var string - * @readonly - */ - public $userAgent = null; - - /** - * - * - * @var string - */ - public $clientTag = null; - - /** - * - * - * @var string - */ - public $description = null; - - /** - * - * - * @var string - * @readonly - */ - public $errorDescription = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaAuditTrailChangeItem extends KalturaObjectBase -{ - /** - * - * - * @var string - */ - public $descriptor = null; - - /** - * - * - * @var string - */ - public $oldValue = null; - - /** - * - * - * @var string - */ - public $newValue = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaAuditTrailListResponse extends KalturaObjectBase -{ - /** - * - * - * @var array of KalturaAuditTrail - * @readonly - */ - public $objects; - - /** - * - * - * @var int - * @readonly - */ - public $totalCount = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -abstract class KalturaAuditTrailBaseFilter extends KalturaFilter -{ - /** - * - * - * @var int - */ - public $idEqual = null; - - /** - * - * - * @var int - */ - public $createdAtGreaterThanOrEqual = null; - - /** - * - * - * @var int - */ - public $createdAtLessThanOrEqual = null; - - /** - * - * - * @var int - */ - public $parsedAtGreaterThanOrEqual = null; - - /** - * - * - * @var int - */ - public $parsedAtLessThanOrEqual = null; - - /** - * - * - * @var KalturaAuditTrailStatus - */ - public $statusEqual = null; - - /** - * - * - * @var string - */ - public $statusIn = null; - - /** - * - * - * @var KalturaAuditTrailObjectType - */ - public $auditObjectTypeEqual = null; - - /** - * - * - * @var string - */ - public $auditObjectTypeIn = null; - - /** - * - * - * @var string - */ - public $objectIdEqual = null; - - /** - * - * - * @var string - */ - public $objectIdIn = null; - - /** - * - * - * @var string - */ - public $relatedObjectIdEqual = null; - - /** - * - * - * @var string - */ - public $relatedObjectIdIn = null; - - /** - * - * - * @var KalturaAuditTrailObjectType - */ - public $relatedObjectTypeEqual = null; - - /** - * - * - * @var string - */ - public $relatedObjectTypeIn = null; - - /** - * - * - * @var string - */ - public $entryIdEqual = null; - - /** - * - * - * @var string - */ - public $entryIdIn = null; - - /** - * - * - * @var int - */ - public $masterPartnerIdEqual = null; - - /** - * - * - * @var string - */ - public $masterPartnerIdIn = null; - - /** - * - * - * @var int - */ - public $partnerIdEqual = null; - - /** - * - * - * @var string - */ - public $partnerIdIn = null; - - /** - * - * - * @var string - */ - public $requestIdEqual = null; - - /** - * - * - * @var string - */ - public $requestIdIn = null; - - /** - * - * - * @var string - */ - public $userIdEqual = null; - - /** - * - * - * @var string - */ - public $userIdIn = null; - - /** - * - * - * @var KalturaAuditTrailAction - */ - public $actionEqual = null; - - /** - * - * - * @var string - */ - public $actionIn = null; - - /** - * - * - * @var string - */ - public $ksEqual = null; - - /** - * - * - * @var KalturaAuditTrailContext - */ - public $contextEqual = null; - - /** - * - * - * @var string - */ - public $contextIn = null; - - /** - * - * - * @var string - */ - public $entryPointEqual = null; - - /** - * - * - * @var string - */ - public $entryPointIn = null; - - /** - * - * - * @var string - */ - public $serverNameEqual = null; - - /** - * - * - * @var string - */ - public $serverNameIn = null; - - /** - * - * - * @var string - */ - public $ipAddressEqual = null; - - /** - * - * - * @var string - */ - public $ipAddressIn = null; - - /** - * - * - * @var string - */ - public $clientTagEqual = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaAuditTrailChangeInfo extends KalturaAuditTrailInfo -{ - /** - * - * - * @var array of KalturaAuditTrailChangeItem - */ - public $changedItems; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaAuditTrailChangeXmlNode extends KalturaAuditTrailChangeItem -{ - /** - * - * - * @var KalturaAuditTrailChangeXmlNodeType - */ - public $type = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaAuditTrailFileSyncCreateInfo extends KalturaAuditTrailInfo -{ - /** - * - * - * @var string - */ - public $version = null; - - /** - * - * - * @var int - */ - public $objectSubType = null; - - /** - * - * - * @var int - */ - public $dc = null; - - /** - * - * - * @var bool - */ - public $original = null; - - /** - * - * - * @var KalturaAuditTrailFileSyncType - */ - public $fileType = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaAuditTrailTextInfo extends KalturaAuditTrailInfo -{ - /** - * - * - * @var string - */ - public $info = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaAuditTrailFilter extends KalturaAuditTrailBaseFilter -{ - -} - - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaAuditTrailService extends KalturaServiceBase -{ - function __construct(KalturaClient $client = null) - { - parent::__construct($client); - } - - /** - * Allows you to add an audit trail object and audit trail content associated with Kaltura object - * - * @param KalturaAuditTrail $auditTrail - * @return KalturaAuditTrail - */ - function add(KalturaAuditTrail $auditTrail) - { - $kparams = array(); - $this->client->addParam($kparams, "auditTrail", $auditTrail->toParams()); - $this->client->queueServiceActionCall("audit_audittrail", "add", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaAuditTrail"); - return $resultObject; - } - - /** - * Retrieve an audit trail object by id - * - * @param int $id - * @return KalturaAuditTrail - */ - function get($id) - { - $kparams = array(); - $this->client->addParam($kparams, "id", $id); - $this->client->queueServiceActionCall("audit_audittrail", "get", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaAuditTrail"); - return $resultObject; - } - - /** - * List audit trail objects by filter and pager - * - * @param KalturaAuditTrailFilter $filter - * @param KalturaFilterPager $pager - * @return KalturaAuditTrailListResponse - */ - function listAction(KalturaAuditTrailFilter $filter = null, KalturaFilterPager $pager = null) - { - $kparams = array(); - if ($filter !== null) - $this->client->addParam($kparams, "filter", $filter->toParams()); - if ($pager !== null) - $this->client->addParam($kparams, "pager", $pager->toParams()); - $this->client->queueServiceActionCall("audit_audittrail", "list", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaAuditTrailListResponse"); - return $resultObject; - } -} -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaAuditClientPlugin extends KalturaClientPlugin -{ - /** - * @var KalturaAuditTrailService - */ - public $auditTrail = null; - - protected function __construct(KalturaClient $client) - { - parent::__construct($client); - $this->auditTrail = new KalturaAuditTrailService($client); - } - - /** - * @return KalturaAuditClientPlugin - */ - public static function get(KalturaClient $client) - { - return new KalturaAuditClientPlugin($client); - } - - /** - * @return array - */ - public function getServices() - { - $services = array( - 'auditTrail' => $this->auditTrail, - ); - return $services; - } - - /** - * @return string - */ - public function getName() - { - return 'audit'; - } -} - diff --git a/local/kaltura/API/KalturaPlugins/KalturaBulkUploadClientPlugin.php b/local/kaltura/API/KalturaPlugins/KalturaBulkUploadClientPlugin.php deleted file mode 100644 index 7d844b642730c..0000000000000 --- a/local/kaltura/API/KalturaPlugins/KalturaBulkUploadClientPlugin.php +++ /dev/null @@ -1,187 +0,0 @@ -. -// -// @ignore -// =================================================================================================== - -/** - * @package Kaltura - * @subpackage Client - */ -require_once(dirname(__FILE__) . "/../KalturaClientBase.php"); -require_once(dirname(__FILE__) . "/../KalturaEnums.php"); -require_once(dirname(__FILE__) . "/../KalturaTypes.php"); - - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaBulkService extends KalturaServiceBase -{ - function __construct(KalturaClient $client = null) - { - parent::__construct($client); - } - - /** - * Get bulk upload batch job by id - * - * @param int $id - * @return KalturaBulkUpload - */ - function get($id) - { - $kparams = array(); - $this->client->addParam($kparams, "id", $id); - $this->client->queueServiceActionCall("bulkupload_bulk", "get", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaBulkUpload"); - return $resultObject; - } - - /** - * List bulk upload batch jobs - * - * @param KalturaBulkUploadFilter $bulkUploadFilter - * @param KalturaFilterPager $pager - * @return KalturaBulkUploadListResponse - */ - function listAction(KalturaBulkUploadFilter $bulkUploadFilter = null, KalturaFilterPager $pager = null) - { - $kparams = array(); - if ($bulkUploadFilter !== null) - $this->client->addParam($kparams, "bulkUploadFilter", $bulkUploadFilter->toParams()); - if ($pager !== null) - $this->client->addParam($kparams, "pager", $pager->toParams()); - $this->client->queueServiceActionCall("bulkupload_bulk", "list", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaBulkUploadListResponse"); - return $resultObject; - } - - /** - * Serve action returns the original file. - * - * @param int $id Job id - * @return file - */ - function serve($id) - { - $kparams = array(); - $this->client->addParam($kparams, "id", $id); - $this->client->queueServiceActionCall("bulkupload_bulk", "serve", $kparams); - if(!$this->client->getDestinationPath() && !$this->client->getReturnServedResult()) - return $this->client->getServeUrl(); - return $this->client->doQueue(); - } - - /** - * ServeLog action returns the log file for the bulk-upload job. - * - * @param int $id Job id - * @return file - */ - function serveLog($id) - { - $kparams = array(); - $this->client->addParam($kparams, "id", $id); - $this->client->queueServiceActionCall("bulkupload_bulk", "serveLog", $kparams); - if(!$this->client->getDestinationPath() && !$this->client->getReturnServedResult()) - return $this->client->getServeUrl(); - return $this->client->doQueue(); - } - - /** - * Aborts the bulk upload and all its child jobs - * - * @param int $id Job id - * @return KalturaBulkUpload - */ - function abort($id) - { - $kparams = array(); - $this->client->addParam($kparams, "id", $id); - $this->client->queueServiceActionCall("bulkupload_bulk", "abort", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaBulkUpload"); - return $resultObject; - } -} -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaBulkUploadClientPlugin extends KalturaClientPlugin -{ - /** - * @var KalturaBulkService - */ - public $bulk = null; - - protected function __construct(KalturaClient $client) - { - parent::__construct($client); - $this->bulk = new KalturaBulkService($client); - } - - /** - * @return KalturaBulkUploadClientPlugin - */ - public static function get(KalturaClient $client) - { - return new KalturaBulkUploadClientPlugin($client); - } - - /** - * @return array - */ - public function getServices() - { - $services = array( - 'bulk' => $this->bulk, - ); - return $services; - } - - /** - * @return string - */ - public function getName() - { - return 'bulkUpload'; - } -} - diff --git a/local/kaltura/API/KalturaPlugins/KalturaBulkUploadCsvClientPlugin.php b/local/kaltura/API/KalturaPlugins/KalturaBulkUploadCsvClientPlugin.php deleted file mode 100644 index 9f58ceae18d3f..0000000000000 --- a/local/kaltura/API/KalturaPlugins/KalturaBulkUploadCsvClientPlugin.php +++ /dev/null @@ -1,113 +0,0 @@ -. -// -// @ignore -// =================================================================================================== - -/** - * @package Kaltura - * @subpackage Client - */ -require_once(dirname(__FILE__) . "/../KalturaClientBase.php"); -require_once(dirname(__FILE__) . "/../KalturaEnums.php"); -require_once(dirname(__FILE__) . "/../KalturaTypes.php"); -require_once(dirname(__FILE__) . "/KalturaBulkUploadClientPlugin.php"); - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaBulkUploadCsvVersion -{ - const V1 = 1; - const V2 = 2; - const V3 = 3; -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaBulkUploadCsvJobData extends KalturaBulkUploadJobData -{ - /** - * The version of the csv file - * - * - * @var KalturaBulkUploadCsvVersion - * @readonly - */ - public $csvVersion = null; - - /** - * Array containing CSV headers - * - * - * @var array of KalturaString - */ - public $columns; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaBulkUploadCsvClientPlugin extends KalturaClientPlugin -{ - protected function __construct(KalturaClient $client) - { - parent::__construct($client); - } - - /** - * @return KalturaBulkUploadCsvClientPlugin - */ - public static function get(KalturaClient $client) - { - return new KalturaBulkUploadCsvClientPlugin($client); - } - - /** - * @return array - */ - public function getServices() - { - $services = array( - ); - return $services; - } - - /** - * @return string - */ - public function getName() - { - return 'bulkUploadCsv'; - } -} - diff --git a/local/kaltura/API/KalturaPlugins/KalturaBulkUploadFilterClientPlugin.php b/local/kaltura/API/KalturaPlugins/KalturaBulkUploadFilterClientPlugin.php deleted file mode 100644 index b77ca422630a2..0000000000000 --- a/local/kaltura/API/KalturaPlugins/KalturaBulkUploadFilterClientPlugin.php +++ /dev/null @@ -1,101 +0,0 @@ -. -// -// @ignore -// =================================================================================================== - -/** - * @package Kaltura - * @subpackage Client - */ -require_once(dirname(__FILE__) . "/../KalturaClientBase.php"); -require_once(dirname(__FILE__) . "/../KalturaEnums.php"); -require_once(dirname(__FILE__) . "/../KalturaTypes.php"); -require_once(dirname(__FILE__) . "/KalturaBulkUploadClientPlugin.php"); - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaBulkUploadFilterJobData extends KalturaBulkUploadJobData -{ - /** - * Filter for extracting the objects list to upload - * - * - * @var KalturaFilter - */ - public $filter; - - /** - * Template object for new object creation - * - * - * @var KalturaObjectBase - */ - public $templateObject; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaBulkUploadFilterClientPlugin extends KalturaClientPlugin -{ - protected function __construct(KalturaClient $client) - { - parent::__construct($client); - } - - /** - * @return KalturaBulkUploadFilterClientPlugin - */ - public static function get(KalturaClient $client) - { - return new KalturaBulkUploadFilterClientPlugin($client); - } - - /** - * @return array - */ - public function getServices() - { - $services = array( - ); - return $services; - } - - /** - * @return string - */ - public function getName() - { - return 'bulkUploadFilter'; - } -} - diff --git a/local/kaltura/API/KalturaPlugins/KalturaBulkUploadXmlClientPlugin.php b/local/kaltura/API/KalturaPlugins/KalturaBulkUploadXmlClientPlugin.php deleted file mode 100644 index 1fc677c98f93b..0000000000000 --- a/local/kaltura/API/KalturaPlugins/KalturaBulkUploadXmlClientPlugin.php +++ /dev/null @@ -1,85 +0,0 @@ -. -// -// @ignore -// =================================================================================================== - -/** - * @package Kaltura - * @subpackage Client - */ -require_once(dirname(__FILE__) . "/../KalturaClientBase.php"); -require_once(dirname(__FILE__) . "/../KalturaEnums.php"); -require_once(dirname(__FILE__) . "/../KalturaTypes.php"); -require_once(dirname(__FILE__) . "/KalturaBulkUploadClientPlugin.php"); - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaBulkUploadXmlJobData extends KalturaBulkUploadJobData -{ - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaBulkUploadXmlClientPlugin extends KalturaClientPlugin -{ - protected function __construct(KalturaClient $client) - { - parent::__construct($client); - } - - /** - * @return KalturaBulkUploadXmlClientPlugin - */ - public static function get(KalturaClient $client) - { - return new KalturaBulkUploadXmlClientPlugin($client); - } - - /** - * @return array - */ - public function getServices() - { - $services = array( - ); - return $services; - } - - /** - * @return string - */ - public function getName() - { - return 'bulkUploadXml'; - } -} - diff --git a/local/kaltura/API/KalturaPlugins/KalturaCaptionClientPlugin.php b/local/kaltura/API/KalturaPlugins/KalturaCaptionClientPlugin.php deleted file mode 100644 index 1217d2414b12e..0000000000000 --- a/local/kaltura/API/KalturaPlugins/KalturaCaptionClientPlugin.php +++ /dev/null @@ -1,771 +0,0 @@ -. -// -// @ignore -// =================================================================================================== - -/** - * @package Kaltura - * @subpackage Client - */ -require_once(dirname(__FILE__) . "/../KalturaClientBase.php"); -require_once(dirname(__FILE__) . "/../KalturaEnums.php"); -require_once(dirname(__FILE__) . "/../KalturaTypes.php"); - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaCaptionAssetStatus -{ - const ERROR = -1; - const QUEUED = 0; - const READY = 2; - const DELETED = 3; - const IMPORTING = 7; - const EXPORTING = 9; -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaCaptionAssetOrderBy -{ - const CREATED_AT_ASC = "+createdAt"; - const DELETED_AT_ASC = "+deletedAt"; - const SIZE_ASC = "+size"; - const UPDATED_AT_ASC = "+updatedAt"; - const CREATED_AT_DESC = "-createdAt"; - const DELETED_AT_DESC = "-deletedAt"; - const SIZE_DESC = "-size"; - const UPDATED_AT_DESC = "-updatedAt"; -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaCaptionParamsOrderBy -{ -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaCaptionType -{ - const SRT = "1"; - const DFXP = "2"; - const WEBVTT = "3"; -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaCaptionAsset extends KalturaAsset -{ - /** - * The Caption Params used to create this Caption Asset - * - * - * @var int - * @insertonly - */ - public $captionParamsId = null; - - /** - * The language of the caption asset content - * - * - * @var KalturaLanguage - */ - public $language = null; - - /** - * The language of the caption asset content - * - * - * @var KalturaLanguageCode - * @readonly - */ - public $languageCode = null; - - /** - * Is default caption asset of the entry - * - * - * @var KalturaNullableBoolean - */ - public $isDefault = null; - - /** - * Friendly label - * - * - * @var string - */ - public $label = null; - - /** - * The caption format - * - * - * @var KalturaCaptionType - * @insertonly - */ - public $format = null; - - /** - * The status of the asset - * - * - * @var KalturaCaptionAssetStatus - * @readonly - */ - public $status = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaCaptionAssetListResponse extends KalturaObjectBase -{ - /** - * - * - * @var array of KalturaCaptionAsset - * @readonly - */ - public $objects; - - /** - * - * - * @var int - * @readonly - */ - public $totalCount = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaCaptionParams extends KalturaAssetParams -{ - /** - * The language of the caption content - * - * - * @var KalturaLanguage - * @insertonly - */ - public $language = null; - - /** - * Is default caption asset of the entry - * - * - * @var KalturaNullableBoolean - */ - public $isDefault = null; - - /** - * Friendly label - * - * - * @var string - */ - public $label = null; - - /** - * The caption format - * - * - * @var KalturaCaptionType - * @insertonly - */ - public $format = null; - - /** - * Id of the caption params or the flavor params to be used as source for the caption creation - * - * - * @var int - */ - public $sourceParamsId = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaCaptionParamsListResponse extends KalturaObjectBase -{ - /** - * - * - * @var array of KalturaCaptionParams - * @readonly - */ - public $objects; - - /** - * - * - * @var int - * @readonly - */ - public $totalCount = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -abstract class KalturaCaptionAssetBaseFilter extends KalturaAssetFilter -{ - /** - * - * - * @var int - */ - public $captionParamsIdEqual = null; - - /** - * - * - * @var string - */ - public $captionParamsIdIn = null; - - /** - * - * - * @var KalturaCaptionType - */ - public $formatEqual = null; - - /** - * - * - * @var string - */ - public $formatIn = null; - - /** - * - * - * @var KalturaCaptionAssetStatus - */ - public $statusEqual = null; - - /** - * - * - * @var string - */ - public $statusIn = null; - - /** - * - * - * @var string - */ - public $statusNotIn = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -abstract class KalturaCaptionParamsBaseFilter extends KalturaAssetParamsFilter -{ - /** - * - * - * @var KalturaCaptionType - */ - public $formatEqual = null; - - /** - * - * - * @var string - */ - public $formatIn = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaCaptionAssetFilter extends KalturaCaptionAssetBaseFilter -{ - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaCaptionParamsFilter extends KalturaCaptionParamsBaseFilter -{ - -} - - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaCaptionAssetService extends KalturaServiceBase -{ - function __construct(KalturaClient $client = null) - { - parent::__construct($client); - } - - /** - * Add caption asset - * - * @param string $entryId - * @param KalturaCaptionAsset $captionAsset - * @return KalturaCaptionAsset - */ - function add($entryId, KalturaCaptionAsset $captionAsset) - { - $kparams = array(); - $this->client->addParam($kparams, "entryId", $entryId); - $this->client->addParam($kparams, "captionAsset", $captionAsset->toParams()); - $this->client->queueServiceActionCall("caption_captionasset", "add", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaCaptionAsset"); - return $resultObject; - } - - /** - * Update content of caption asset - * - * @param string $id - * @param KalturaContentResource $contentResource - * @return KalturaCaptionAsset - */ - function setContent($id, KalturaContentResource $contentResource) - { - $kparams = array(); - $this->client->addParam($kparams, "id", $id); - $this->client->addParam($kparams, "contentResource", $contentResource->toParams()); - $this->client->queueServiceActionCall("caption_captionasset", "setContent", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaCaptionAsset"); - return $resultObject; - } - - /** - * Update caption asset - * - * @param string $id - * @param KalturaCaptionAsset $captionAsset - * @return KalturaCaptionAsset - */ - function update($id, KalturaCaptionAsset $captionAsset) - { - $kparams = array(); - $this->client->addParam($kparams, "id", $id); - $this->client->addParam($kparams, "captionAsset", $captionAsset->toParams()); - $this->client->queueServiceActionCall("caption_captionasset", "update", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaCaptionAsset"); - return $resultObject; - } - - /** - * Serves caption by entry id and thumnail params id - * - * @param string $entryId - * @param int $captionParamId If not set, default caption will be used. - * @return file - */ - function serveByEntryId($entryId, $captionParamId = null) - { - $kparams = array(); - $this->client->addParam($kparams, "entryId", $entryId); - $this->client->addParam($kparams, "captionParamId", $captionParamId); - $this->client->queueServiceActionCall("caption_captionasset", "serveByEntryId", $kparams); - if(!$this->client->getDestinationPath() && !$this->client->getReturnServedResult()) - return $this->client->getServeUrl(); - return $this->client->doQueue(); - } - - /** - * Get download URL for the asset - * - * @param string $id - * @param int $storageId - * @return string - */ - function getUrl($id, $storageId = null) - { - $kparams = array(); - $this->client->addParam($kparams, "id", $id); - $this->client->addParam($kparams, "storageId", $storageId); - $this->client->queueServiceActionCall("caption_captionasset", "getUrl", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "string"); - return $resultObject; - } - - /** - * Get remote storage existing paths for the asset - * - * @param string $id - * @return KalturaRemotePathListResponse - */ - function getRemotePaths($id) - { - $kparams = array(); - $this->client->addParam($kparams, "id", $id); - $this->client->queueServiceActionCall("caption_captionasset", "getRemotePaths", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaRemotePathListResponse"); - return $resultObject; - } - - /** - * Serves caption by its id - * - * @param string $captionAssetId - * @return file - */ - function serve($captionAssetId) - { - $kparams = array(); - $this->client->addParam($kparams, "captionAssetId", $captionAssetId); - $this->client->queueServiceActionCall("caption_captionasset", "serve", $kparams); - if(!$this->client->getDestinationPath() && !$this->client->getReturnServedResult()) - return $this->client->getServeUrl(); - return $this->client->doQueue(); - } - - /** - * Serves caption by its id converting it to segmented WebVTT - * - * @param string $captionAssetId - * @param int $segmentDuration - * @param int $segmentIndex - * @param int $localTimestamp - * @return file - */ - function serveWebVTT($captionAssetId, $segmentDuration = 30, $segmentIndex = null, $localTimestamp = 10000) - { - $kparams = array(); - $this->client->addParam($kparams, "captionAssetId", $captionAssetId); - $this->client->addParam($kparams, "segmentDuration", $segmentDuration); - $this->client->addParam($kparams, "segmentIndex", $segmentIndex); - $this->client->addParam($kparams, "localTimestamp", $localTimestamp); - $this->client->queueServiceActionCall("caption_captionasset", "serveWebVTT", $kparams); - if(!$this->client->getDestinationPath() && !$this->client->getReturnServedResult()) - return $this->client->getServeUrl(); - return $this->client->doQueue(); - } - - /** - * Markss the caption as default and removes that mark from all other caption assets of the entry. - * - * @param string $captionAssetId - * @return - */ - function setAsDefault($captionAssetId) - { - $kparams = array(); - $this->client->addParam($kparams, "captionAssetId", $captionAssetId); - $this->client->queueServiceActionCall("caption_captionasset", "setAsDefault", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "null"); - return $resultObject; - } - - /** - * - * - * @param string $captionAssetId - * @return KalturaCaptionAsset - */ - function get($captionAssetId) - { - $kparams = array(); - $this->client->addParam($kparams, "captionAssetId", $captionAssetId); - $this->client->queueServiceActionCall("caption_captionasset", "get", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaCaptionAsset"); - return $resultObject; - } - - /** - * List caption Assets by filter and pager - * - * @param KalturaAssetFilter $filter - * @param KalturaFilterPager $pager - * @return KalturaCaptionAssetListResponse - */ - function listAction(KalturaAssetFilter $filter = null, KalturaFilterPager $pager = null) - { - $kparams = array(); - if ($filter !== null) - $this->client->addParam($kparams, "filter", $filter->toParams()); - if ($pager !== null) - $this->client->addParam($kparams, "pager", $pager->toParams()); - $this->client->queueServiceActionCall("caption_captionasset", "list", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaCaptionAssetListResponse"); - return $resultObject; - } - - /** - * - * - * @param string $captionAssetId - * @return - */ - function delete($captionAssetId) - { - $kparams = array(); - $this->client->addParam($kparams, "captionAssetId", $captionAssetId); - $this->client->queueServiceActionCall("caption_captionasset", "delete", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "null"); - return $resultObject; - } -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaCaptionParamsService extends KalturaServiceBase -{ - function __construct(KalturaClient $client = null) - { - parent::__construct($client); - } - - /** - * Add new Caption Params - * - * @param KalturaCaptionParams $captionParams - * @return KalturaCaptionParams - */ - function add(KalturaCaptionParams $captionParams) - { - $kparams = array(); - $this->client->addParam($kparams, "captionParams", $captionParams->toParams()); - $this->client->queueServiceActionCall("caption_captionparams", "add", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaCaptionParams"); - return $resultObject; - } - - /** - * Get Caption Params by ID - * - * @param int $id - * @return KalturaCaptionParams - */ - function get($id) - { - $kparams = array(); - $this->client->addParam($kparams, "id", $id); - $this->client->queueServiceActionCall("caption_captionparams", "get", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaCaptionParams"); - return $resultObject; - } - - /** - * Update Caption Params by ID - * - * @param int $id - * @param KalturaCaptionParams $captionParams - * @return KalturaCaptionParams - */ - function update($id, KalturaCaptionParams $captionParams) - { - $kparams = array(); - $this->client->addParam($kparams, "id", $id); - $this->client->addParam($kparams, "captionParams", $captionParams->toParams()); - $this->client->queueServiceActionCall("caption_captionparams", "update", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaCaptionParams"); - return $resultObject; - } - - /** - * Delete Caption Params by ID - * - * @param int $id - * @return - */ - function delete($id) - { - $kparams = array(); - $this->client->addParam($kparams, "id", $id); - $this->client->queueServiceActionCall("caption_captionparams", "delete", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "null"); - return $resultObject; - } - - /** - * List Caption Params by filter with paging support (By default - all system default params will be listed too) - * - * @param KalturaCaptionParamsFilter $filter - * @param KalturaFilterPager $pager - * @return KalturaCaptionParamsListResponse - */ - function listAction(KalturaCaptionParamsFilter $filter = null, KalturaFilterPager $pager = null) - { - $kparams = array(); - if ($filter !== null) - $this->client->addParam($kparams, "filter", $filter->toParams()); - if ($pager !== null) - $this->client->addParam($kparams, "pager", $pager->toParams()); - $this->client->queueServiceActionCall("caption_captionparams", "list", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaCaptionParamsListResponse"); - return $resultObject; - } -} -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaCaptionClientPlugin extends KalturaClientPlugin -{ - /** - * @var KalturaCaptionAssetService - */ - public $captionAsset = null; - - /** - * @var KalturaCaptionParamsService - */ - public $captionParams = null; - - protected function __construct(KalturaClient $client) - { - parent::__construct($client); - $this->captionAsset = new KalturaCaptionAssetService($client); - $this->captionParams = new KalturaCaptionParamsService($client); - } - - /** - * @return KalturaCaptionClientPlugin - */ - public static function get(KalturaClient $client) - { - return new KalturaCaptionClientPlugin($client); - } - - /** - * @return array - */ - public function getServices() - { - $services = array( - 'captionAsset' => $this->captionAsset, - 'captionParams' => $this->captionParams, - ); - return $services; - } - - /** - * @return string - */ - public function getName() - { - return 'caption'; - } -} - diff --git a/local/kaltura/API/KalturaPlugins/KalturaCaptionSearchClientPlugin.php b/local/kaltura/API/KalturaPlugins/KalturaCaptionSearchClientPlugin.php deleted file mode 100644 index 0962e15fdab99..0000000000000 --- a/local/kaltura/API/KalturaPlugins/KalturaCaptionSearchClientPlugin.php +++ /dev/null @@ -1,325 +0,0 @@ -. -// -// @ignore -// =================================================================================================== - -/** - * @package Kaltura - * @subpackage Client - */ -require_once(dirname(__FILE__) . "/../KalturaClientBase.php"); -require_once(dirname(__FILE__) . "/../KalturaEnums.php"); -require_once(dirname(__FILE__) . "/../KalturaTypes.php"); -require_once(dirname(__FILE__) . "/KalturaCaptionClientPlugin.php"); - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaCaptionAssetItem extends KalturaObjectBase -{ - /** - * The Caption Asset object - * - * - * @var KalturaCaptionAsset - */ - public $asset; - - /** - * The entry object - * - * - * @var KalturaBaseEntry - */ - public $entry; - - /** - * - * - * @var int - */ - public $startTime = null; - - /** - * - * - * @var int - */ - public $endTime = null; - - /** - * - * - * @var string - */ - public $content = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaCaptionAssetItemListResponse extends KalturaObjectBase -{ - /** - * - * - * @var array of KalturaCaptionAssetItem - * @readonly - */ - public $objects; - - /** - * - * - * @var int - * @readonly - */ - public $totalCount = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaCaptionAssetItemFilter extends KalturaCaptionAssetFilter -{ - /** - * - * - * @var string - */ - public $contentLike = null; - - /** - * - * - * @var string - */ - public $contentMultiLikeOr = null; - - /** - * - * - * @var string - */ - public $contentMultiLikeAnd = null; - - /** - * - * - * @var string - */ - public $partnerDescriptionLike = null; - - /** - * - * - * @var string - */ - public $partnerDescriptionMultiLikeOr = null; - - /** - * - * - * @var string - */ - public $partnerDescriptionMultiLikeAnd = null; - - /** - * - * - * @var KalturaLanguage - */ - public $languageEqual = null; - - /** - * - * - * @var string - */ - public $languageIn = null; - - /** - * - * - * @var string - */ - public $labelEqual = null; - - /** - * - * - * @var string - */ - public $labelIn = null; - - /** - * - * - * @var int - */ - public $startTimeGreaterThanOrEqual = null; - - /** - * - * - * @var int - */ - public $startTimeLessThanOrEqual = null; - - /** - * - * - * @var int - */ - public $endTimeGreaterThanOrEqual = null; - - /** - * - * - * @var int - */ - public $endTimeLessThanOrEqual = null; - - -} - - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaCaptionAssetItemService extends KalturaServiceBase -{ - function __construct(KalturaClient $client = null) - { - parent::__construct($client); - } - - /** - * Search caption asset items by filter, pager and free text - * - * @param KalturaBaseEntryFilter $entryFilter - * @param KalturaCaptionAssetItemFilter $captionAssetItemFilter - * @param KalturaFilterPager $captionAssetItemPager - * @return KalturaCaptionAssetItemListResponse - */ - function search(KalturaBaseEntryFilter $entryFilter = null, KalturaCaptionAssetItemFilter $captionAssetItemFilter = null, KalturaFilterPager $captionAssetItemPager = null) - { - $kparams = array(); - if ($entryFilter !== null) - $this->client->addParam($kparams, "entryFilter", $entryFilter->toParams()); - if ($captionAssetItemFilter !== null) - $this->client->addParam($kparams, "captionAssetItemFilter", $captionAssetItemFilter->toParams()); - if ($captionAssetItemPager !== null) - $this->client->addParam($kparams, "captionAssetItemPager", $captionAssetItemPager->toParams()); - $this->client->queueServiceActionCall("captionsearch_captionassetitem", "search", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaCaptionAssetItemListResponse"); - return $resultObject; - } - - /** - * Search caption asset items by filter, pager and free text - * - * @param KalturaBaseEntryFilter $entryFilter - * @param KalturaCaptionAssetItemFilter $captionAssetItemFilter - * @param KalturaFilterPager $captionAssetItemPager - * @return KalturaBaseEntryListResponse - */ - function searchEntries(KalturaBaseEntryFilter $entryFilter = null, KalturaCaptionAssetItemFilter $captionAssetItemFilter = null, KalturaFilterPager $captionAssetItemPager = null) - { - $kparams = array(); - if ($entryFilter !== null) - $this->client->addParam($kparams, "entryFilter", $entryFilter->toParams()); - if ($captionAssetItemFilter !== null) - $this->client->addParam($kparams, "captionAssetItemFilter", $captionAssetItemFilter->toParams()); - if ($captionAssetItemPager !== null) - $this->client->addParam($kparams, "captionAssetItemPager", $captionAssetItemPager->toParams()); - $this->client->queueServiceActionCall("captionsearch_captionassetitem", "searchEntries", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaBaseEntryListResponse"); - return $resultObject; - } -} -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaCaptionSearchClientPlugin extends KalturaClientPlugin -{ - /** - * @var KalturaCaptionAssetItemService - */ - public $captionAssetItem = null; - - protected function __construct(KalturaClient $client) - { - parent::__construct($client); - $this->captionAssetItem = new KalturaCaptionAssetItemService($client); - } - - /** - * @return KalturaCaptionSearchClientPlugin - */ - public static function get(KalturaClient $client) - { - return new KalturaCaptionSearchClientPlugin($client); - } - - /** - * @return array - */ - public function getServices() - { - $services = array( - 'captionAssetItem' => $this->captionAssetItem, - ); - return $services; - } - - /** - * @return string - */ - public function getName() - { - return 'captionSearch'; - } -} - diff --git a/local/kaltura/API/KalturaPlugins/KalturaCodeCuePointClientPlugin.php b/local/kaltura/API/KalturaPlugins/KalturaCodeCuePointClientPlugin.php deleted file mode 100644 index b598d86d7866a..0000000000000 --- a/local/kaltura/API/KalturaPlugins/KalturaCodeCuePointClientPlugin.php +++ /dev/null @@ -1,237 +0,0 @@ -. -// -// @ignore -// =================================================================================================== - -/** - * @package Kaltura - * @subpackage Client - */ -require_once(dirname(__FILE__) . "/../KalturaClientBase.php"); -require_once(dirname(__FILE__) . "/../KalturaEnums.php"); -require_once(dirname(__FILE__) . "/../KalturaTypes.php"); -require_once(dirname(__FILE__) . "/KalturaCuePointClientPlugin.php"); - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaCodeCuePointOrderBy -{ - const CREATED_AT_ASC = "+createdAt"; - const DURATION_ASC = "+duration"; - const END_TIME_ASC = "+endTime"; - const PARTNER_SORT_VALUE_ASC = "+partnerSortValue"; - const START_TIME_ASC = "+startTime"; - const UPDATED_AT_ASC = "+updatedAt"; - const CREATED_AT_DESC = "-createdAt"; - const DURATION_DESC = "-duration"; - const END_TIME_DESC = "-endTime"; - const PARTNER_SORT_VALUE_DESC = "-partnerSortValue"; - const START_TIME_DESC = "-startTime"; - const UPDATED_AT_DESC = "-updatedAt"; -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaCodeCuePoint extends KalturaCuePoint -{ - /** - * - * - * @var string - */ - public $code = null; - - /** - * - * - * @var string - */ - public $description = null; - - /** - * - * - * @var int - */ - public $endTime = null; - - /** - * Duration in milliseconds - * - * - * @var int - * @readonly - */ - public $duration = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -abstract class KalturaCodeCuePointBaseFilter extends KalturaCuePointFilter -{ - /** - * - * - * @var string - */ - public $codeLike = null; - - /** - * - * - * @var string - */ - public $codeMultiLikeOr = null; - - /** - * - * - * @var string - */ - public $codeMultiLikeAnd = null; - - /** - * - * - * @var string - */ - public $codeEqual = null; - - /** - * - * - * @var string - */ - public $codeIn = null; - - /** - * - * - * @var string - */ - public $descriptionLike = null; - - /** - * - * - * @var string - */ - public $descriptionMultiLikeOr = null; - - /** - * - * - * @var string - */ - public $descriptionMultiLikeAnd = null; - - /** - * - * - * @var int - */ - public $endTimeGreaterThanOrEqual = null; - - /** - * - * - * @var int - */ - public $endTimeLessThanOrEqual = null; - - /** - * - * - * @var int - */ - public $durationGreaterThanOrEqual = null; - - /** - * - * - * @var int - */ - public $durationLessThanOrEqual = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaCodeCuePointFilter extends KalturaCodeCuePointBaseFilter -{ - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaCodeCuePointClientPlugin extends KalturaClientPlugin -{ - protected function __construct(KalturaClient $client) - { - parent::__construct($client); - } - - /** - * @return KalturaCodeCuePointClientPlugin - */ - public static function get(KalturaClient $client) - { - return new KalturaCodeCuePointClientPlugin($client); - } - - /** - * @return array - */ - public function getServices() - { - $services = array( - ); - return $services; - } - - /** - * @return string - */ - public function getName() - { - return 'codeCuePoint'; - } -} - diff --git a/local/kaltura/API/KalturaPlugins/KalturaContentDistributionClientPlugin.php b/local/kaltura/API/KalturaPlugins/KalturaContentDistributionClientPlugin.php deleted file mode 100644 index 16c38cffc2447..0000000000000 --- a/local/kaltura/API/KalturaPlugins/KalturaContentDistributionClientPlugin.php +++ /dev/null @@ -1,3454 +0,0 @@ -. -// -// @ignore -// =================================================================================================== - -/** - * @package Kaltura - * @subpackage Client - */ -require_once(dirname(__FILE__) . "/../KalturaClientBase.php"); -require_once(dirname(__FILE__) . "/../KalturaEnums.php"); -require_once(dirname(__FILE__) . "/../KalturaTypes.php"); -require_once(dirname(__FILE__) . "/KalturaMetadataClientPlugin.php"); - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaDistributionAction -{ - const SUBMIT = 1; - const UPDATE = 2; - const DELETE = 3; - const FETCH_REPORT = 4; -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaDistributionErrorType -{ - const MISSING_FLAVOR = 1; - const MISSING_THUMBNAIL = 2; - const MISSING_METADATA = 3; - const INVALID_DATA = 4; - const MISSING_ASSET = 5; -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaDistributionFieldRequiredStatus -{ - const NOT_REQUIRED = 0; - const REQUIRED_BY_PROVIDER = 1; - const REQUIRED_BY_PARTNER = 2; -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaDistributionProfileActionStatus -{ - const DISABLED = 1; - const AUTOMATIC = 2; - const MANUAL = 3; -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaDistributionProfileStatus -{ - const DISABLED = 1; - const ENABLED = 2; - const DELETED = 3; -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaDistributionProtocol -{ - const FTP = 1; - const SCP = 2; - const SFTP = 3; - const HTTP = 4; - const HTTPS = 5; - const ASPERA = 10; -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaDistributionValidationErrorType -{ - const CUSTOM_ERROR = 0; - const STRING_EMPTY = 1; - const STRING_TOO_LONG = 2; - const STRING_TOO_SHORT = 3; - const INVALID_FORMAT = 4; -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaEntryDistributionFlag -{ - const NONE = 0; - const SUBMIT_REQUIRED = 1; - const DELETE_REQUIRED = 2; - const UPDATE_REQUIRED = 3; - const ENABLE_REQUIRED = 4; - const DISABLE_REQUIRED = 5; -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaEntryDistributionStatus -{ - const PENDING = 0; - const QUEUED = 1; - const READY = 2; - const DELETED = 3; - const SUBMITTING = 4; - const UPDATING = 5; - const DELETING = 6; - const ERROR_SUBMITTING = 7; - const ERROR_UPDATING = 8; - const ERROR_DELETING = 9; - const REMOVED = 10; - const IMPORT_SUBMITTING = 11; - const IMPORT_UPDATING = 12; -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaEntryDistributionSunStatus -{ - const BEFORE_SUNRISE = 1; - const AFTER_SUNRISE = 2; - const AFTER_SUNSET = 3; -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaGenericDistributionProviderParser -{ - const XSL = 1; - const XPATH = 2; - const REGEX = 3; -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaGenericDistributionProviderStatus -{ - const ACTIVE = 2; - const DELETED = 3; -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaConfigurableDistributionProfileOrderBy -{ - const CREATED_AT_ASC = "+createdAt"; - const UPDATED_AT_ASC = "+updatedAt"; - const CREATED_AT_DESC = "-createdAt"; - const UPDATED_AT_DESC = "-updatedAt"; -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaDistributionProfileOrderBy -{ - const CREATED_AT_ASC = "+createdAt"; - const UPDATED_AT_ASC = "+updatedAt"; - const CREATED_AT_DESC = "-createdAt"; - const UPDATED_AT_DESC = "-updatedAt"; -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaDistributionProviderOrderBy -{ -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaDistributionProviderType -{ - const ATT_UVERSE = "attUverseDistribution.ATT_UVERSE"; - const AVN = "avnDistribution.AVN"; - const COMCAST_MRSS = "comcastMrssDistribution.COMCAST_MRSS"; - const CROSS_KALTURA = "crossKalturaDistribution.CROSS_KALTURA"; - const DAILYMOTION = "dailymotionDistribution.DAILYMOTION"; - const DOUBLECLICK = "doubleClickDistribution.DOUBLECLICK"; - const FREEWHEEL = "freewheelDistribution.FREEWHEEL"; - const FREEWHEEL_GENERIC = "freewheelGenericDistribution.FREEWHEEL_GENERIC"; - const FTP = "ftpDistribution.FTP"; - const FTP_SCHEDULED = "ftpDistribution.FTP_SCHEDULED"; - const HULU = "huluDistribution.HULU"; - const IDETIC = "ideticDistribution.IDETIC"; - const METRO_PCS = "metroPcsDistribution.METRO_PCS"; - const MSN = "msnDistribution.MSN"; - const NDN = "ndnDistribution.NDN"; - const PODCAST = "podcastDistribution.PODCAST"; - const QUICKPLAY = "quickPlayDistribution.QUICKPLAY"; - const SYNACOR_HBO = "synacorHboDistribution.SYNACOR_HBO"; - const TIME_WARNER = "timeWarnerDistribution.TIME_WARNER"; - const TVCOM = "tvComDistribution.TVCOM"; - const UVERSE_CLICK_TO_ORDER = "uverseClickToOrderDistribution.UVERSE_CLICK_TO_ORDER"; - const UVERSE = "uverseDistribution.UVERSE"; - const VERIZON_VCAST = "verizonVcastDistribution.VERIZON_VCAST"; - const YAHOO = "yahooDistribution.YAHOO"; - const YOUTUBE = "youTubeDistribution.YOUTUBE"; - const YOUTUBE_API = "youtubeApiDistribution.YOUTUBE_API"; - const GENERIC = "1"; - const SYNDICATION = "2"; -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaEntryDistributionOrderBy -{ - const CREATED_AT_ASC = "+createdAt"; - const SUBMITTED_AT_ASC = "+submittedAt"; - const SUNRISE_ASC = "+sunrise"; - const SUNSET_ASC = "+sunset"; - const UPDATED_AT_ASC = "+updatedAt"; - const CREATED_AT_DESC = "-createdAt"; - const SUBMITTED_AT_DESC = "-submittedAt"; - const SUNRISE_DESC = "-sunrise"; - const SUNSET_DESC = "-sunset"; - const UPDATED_AT_DESC = "-updatedAt"; -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaGenericDistributionProfileOrderBy -{ - const CREATED_AT_ASC = "+createdAt"; - const UPDATED_AT_ASC = "+updatedAt"; - const CREATED_AT_DESC = "-createdAt"; - const UPDATED_AT_DESC = "-updatedAt"; -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaGenericDistributionProviderActionOrderBy -{ - const CREATED_AT_ASC = "+createdAt"; - const UPDATED_AT_ASC = "+updatedAt"; - const CREATED_AT_DESC = "-createdAt"; - const UPDATED_AT_DESC = "-updatedAt"; -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaGenericDistributionProviderOrderBy -{ - const CREATED_AT_ASC = "+createdAt"; - const UPDATED_AT_ASC = "+updatedAt"; - const CREATED_AT_DESC = "-createdAt"; - const UPDATED_AT_DESC = "-updatedAt"; -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaSyndicationDistributionProfileOrderBy -{ - const CREATED_AT_ASC = "+createdAt"; - const UPDATED_AT_ASC = "+updatedAt"; - const CREATED_AT_DESC = "-createdAt"; - const UPDATED_AT_DESC = "-updatedAt"; -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaSyndicationDistributionProviderOrderBy -{ -} - -/** - * @package Kaltura - * @subpackage Client - */ -abstract class KalturaAssetDistributionCondition extends KalturaObjectBase -{ - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaAssetDistributionRule extends KalturaObjectBase -{ - /** - * The validation error description that will be set on the "data" property on KalturaDistributionValidationErrorMissingAsset if rule was not fulfilled - * - * - * @var string - */ - public $validationError = null; - - /** - * An array of asset distribution conditions - * - * - * @var array of KalturaAssetDistributionCondition - */ - public $assetDistributionConditions; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaDistributionFieldConfig extends KalturaObjectBase -{ - /** - * A value taken from a connector field enum which associates the current configuration to that connector field - * Field enum class should be returned by the provider's getFieldEnumClass function. - * - * - * @var string - */ - public $fieldName = null; - - /** - * A string that will be shown to the user as the field name in error messages related to the current field - * - * - * @var string - */ - public $userFriendlyFieldName = null; - - /** - * An XSLT string that extracts the right value from the Kaltura entry MRSS XML. - * The value of the current connector field will be the one that is returned from transforming the Kaltura entry MRSS XML using this XSLT string. - * - * - * @var string - */ - public $entryMrssXslt = null; - - /** - * Is the field required to have a value for submission ? - * - * - * @var KalturaDistributionFieldRequiredStatus - */ - public $isRequired = null; - - /** - * Trigger distribution update when this field changes or not ? - * - * - * @var bool - */ - public $updateOnChange = null; - - /** - * Entry column or metadata xpath that should trigger an update - * - * - * @var array of KalturaString - */ - public $updateParams; - - /** - * Is this field config is the default for the distribution provider? - * - * - * @var bool - * @readonly - */ - public $isDefault = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -abstract class KalturaDistributionJobProviderData extends KalturaObjectBase -{ - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaDistributionThumbDimensions extends KalturaObjectBase -{ - /** - * - * - * @var int - */ - public $width = null; - - /** - * - * - * @var int - */ - public $height = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -abstract class KalturaDistributionProfile extends KalturaObjectBase -{ - /** - * Auto generated unique id - * - * - * @var int - * @readonly - */ - public $id = null; - - /** - * Profile creation date as Unix timestamp (In seconds) - * - * - * @var int - * @readonly - */ - public $createdAt = null; - - /** - * Profile last update date as Unix timestamp (In seconds) - * - * - * @var int - * @readonly - */ - public $updatedAt = null; - - /** - * - * - * @var int - * @readonly - */ - public $partnerId = null; - - /** - * - * - * @var KalturaDistributionProviderType - * @insertonly - */ - public $providerType = null; - - /** - * - * - * @var string - */ - public $name = null; - - /** - * - * - * @var KalturaDistributionProfileStatus - */ - public $status = null; - - /** - * - * - * @var KalturaDistributionProfileActionStatus - */ - public $submitEnabled = null; - - /** - * - * - * @var KalturaDistributionProfileActionStatus - */ - public $updateEnabled = null; - - /** - * - * - * @var KalturaDistributionProfileActionStatus - */ - public $deleteEnabled = null; - - /** - * - * - * @var KalturaDistributionProfileActionStatus - */ - public $reportEnabled = null; - - /** - * Comma separated flavor params ids that should be auto converted - * - * - * @var string - */ - public $autoCreateFlavors = null; - - /** - * Comma separated thumbnail params ids that should be auto generated - * - * - * @var string - */ - public $autoCreateThumb = null; - - /** - * Comma separated flavor params ids that should be submitted if ready - * - * - * @var string - */ - public $optionalFlavorParamsIds = null; - - /** - * Comma separated flavor params ids that required to be ready before submission - * - * - * @var string - */ - public $requiredFlavorParamsIds = null; - - /** - * Thumbnail dimensions that should be submitted if ready - * - * - * @var array of KalturaDistributionThumbDimensions - */ - public $optionalThumbDimensions; - - /** - * Thumbnail dimensions that required to be readt before submission - * - * - * @var array of KalturaDistributionThumbDimensions - */ - public $requiredThumbDimensions; - - /** - * Asset Distribution Rules for assets that should be submitted if ready - * - * - * @var array of KalturaAssetDistributionRule - */ - public $optionalAssetDistributionRules; - - /** - * Assets Asset Distribution Rules for assets that are required to be ready before submission - * - * - * @var array of KalturaAssetDistributionRule - */ - public $requiredAssetDistributionRules; - - /** - * If entry distribution sunrise not specified that will be the default since entry creation time, in seconds - * - * - * @var int - */ - public $sunriseDefaultOffset = null; - - /** - * If entry distribution sunset not specified that will be the default since entry creation time, in seconds - * - * - * @var int - */ - public $sunsetDefaultOffset = null; - - /** - * The best external storage to be used to download the asset files from - * - * - * @var int - */ - public $recommendedStorageProfileForDownload = null; - - /** - * The best Kaltura data center to be used to download the asset files to - * - * - * @var int - */ - public $recommendedDcForDownload = null; - - /** - * The best Kaltura data center to be used to execute the distribution job - * - * - * @var int - */ - public $recommendedDcForExecute = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaDistributionProfileListResponse extends KalturaObjectBase -{ - /** - * - * - * @var array of KalturaDistributionProfile - * @readonly - */ - public $objects; - - /** - * - * - * @var int - * @readonly - */ - public $totalCount = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -abstract class KalturaDistributionProvider extends KalturaObjectBase -{ - /** - * - * - * @var KalturaDistributionProviderType - * @readonly - */ - public $type = null; - - /** - * - * - * @var string - */ - public $name = null; - - /** - * - * - * @var bool - */ - public $scheduleUpdateEnabled = null; - - /** - * - * - * @var bool - */ - public $availabilityUpdateEnabled = null; - - /** - * - * - * @var bool - */ - public $deleteInsteadUpdate = null; - - /** - * - * - * @var int - */ - public $intervalBeforeSunrise = null; - - /** - * - * - * @var int - */ - public $intervalBeforeSunset = null; - - /** - * - * - * @var string - */ - public $updateRequiredEntryFields = null; - - /** - * - * - * @var string - */ - public $updateRequiredMetadataXPaths = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaDistributionProviderListResponse extends KalturaObjectBase -{ - /** - * - * - * @var array of KalturaDistributionProvider - * @readonly - */ - public $objects; - - /** - * - * - * @var int - * @readonly - */ - public $totalCount = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaDistributionRemoteMediaFile extends KalturaObjectBase -{ - /** - * - * - * @var string - */ - public $version = null; - - /** - * - * - * @var string - */ - public $assetId = null; - - /** - * - * - * @var string - */ - public $remoteId = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -abstract class KalturaDistributionValidationError extends KalturaObjectBase -{ - /** - * - * - * @var KalturaDistributionAction - */ - public $action = null; - - /** - * - * - * @var KalturaDistributionErrorType - */ - public $errorType = null; - - /** - * - * - * @var string - */ - public $description = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaEntryDistribution extends KalturaObjectBase -{ - /** - * Auto generated unique id - * - * - * @var int - * @readonly - */ - public $id = null; - - /** - * Entry distribution creation date as Unix timestamp (In seconds) - * - * - * @var int - * @readonly - */ - public $createdAt = null; - - /** - * Entry distribution last update date as Unix timestamp (In seconds) - * - * - * @var int - * @readonly - */ - public $updatedAt = null; - - /** - * Entry distribution submission date as Unix timestamp (In seconds) - * - * - * @var int - * @readonly - */ - public $submittedAt = null; - - /** - * - * - * @var string - * @insertonly - */ - public $entryId = null; - - /** - * - * - * @var int - * @readonly - */ - public $partnerId = null; - - /** - * - * - * @var int - * @insertonly - */ - public $distributionProfileId = null; - - /** - * - * - * @var KalturaEntryDistributionStatus - * @readonly - */ - public $status = null; - - /** - * - * - * @var KalturaEntryDistributionSunStatus - * @readonly - */ - public $sunStatus = null; - - /** - * - * - * @var KalturaEntryDistributionFlag - * @readonly - */ - public $dirtyStatus = null; - - /** - * Comma separated thumbnail asset ids - * - * - * @var string - */ - public $thumbAssetIds = null; - - /** - * Comma separated flavor asset ids - * - * - * @var string - */ - public $flavorAssetIds = null; - - /** - * Comma separated asset ids - * - * - * @var string - */ - public $assetIds = null; - - /** - * Entry distribution publish time as Unix timestamp (In seconds) - * - * - * @var int - */ - public $sunrise = null; - - /** - * Entry distribution un-publish time as Unix timestamp (In seconds) - * - * - * @var int - */ - public $sunset = null; - - /** - * The id as returned from the distributed destination - * - * - * @var string - * @readonly - */ - public $remoteId = null; - - /** - * The plays as retrieved from the remote destination reports - * - * - * @var int - * @readonly - */ - public $plays = null; - - /** - * The views as retrieved from the remote destination reports - * - * - * @var int - * @readonly - */ - public $views = null; - - /** - * - * - * @var array of KalturaDistributionValidationError - */ - public $validationErrors; - - /** - * - * - * @var KalturaBatchJobErrorTypes - * @readonly - */ - public $errorType = null; - - /** - * - * - * @var int - * @readonly - */ - public $errorNumber = null; - - /** - * - * - * @var string - * @readonly - */ - public $errorDescription = null; - - /** - * - * - * @var KalturaNullableBoolean - * @readonly - */ - public $hasSubmitResultsLog = null; - - /** - * - * - * @var KalturaNullableBoolean - * @readonly - */ - public $hasSubmitSentDataLog = null; - - /** - * - * - * @var KalturaNullableBoolean - * @readonly - */ - public $hasUpdateResultsLog = null; - - /** - * - * - * @var KalturaNullableBoolean - * @readonly - */ - public $hasUpdateSentDataLog = null; - - /** - * - * - * @var KalturaNullableBoolean - * @readonly - */ - public $hasDeleteResultsLog = null; - - /** - * - * - * @var KalturaNullableBoolean - * @readonly - */ - public $hasDeleteSentDataLog = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaEntryDistributionListResponse extends KalturaObjectBase -{ - /** - * - * - * @var array of KalturaEntryDistribution - * @readonly - */ - public $objects; - - /** - * - * - * @var int - * @readonly - */ - public $totalCount = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaGenericDistributionProfileAction extends KalturaObjectBase -{ - /** - * - * - * @var KalturaDistributionProtocol - */ - public $protocol = null; - - /** - * - * - * @var string - */ - public $serverUrl = null; - - /** - * - * - * @var string - */ - public $serverPath = null; - - /** - * - * - * @var string - */ - public $username = null; - - /** - * - * - * @var string - */ - public $password = null; - - /** - * - * - * @var bool - */ - public $ftpPassiveMode = null; - - /** - * - * - * @var string - */ - public $httpFieldName = null; - - /** - * - * - * @var string - */ - public $httpFileName = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaGenericDistributionProviderAction extends KalturaObjectBase -{ - /** - * Auto generated - * - * - * @var int - * @readonly - */ - public $id = null; - - /** - * Generic distribution provider action creation date as Unix timestamp (In seconds) - * - * - * @var int - * @readonly - */ - public $createdAt = null; - - /** - * Generic distribution provider action last update date as Unix timestamp (In seconds) - * - * - * @var int - * @readonly - */ - public $updatedAt = null; - - /** - * - * - * @var int - * @insertonly - */ - public $genericDistributionProviderId = null; - - /** - * - * - * @var KalturaDistributionAction - * @insertonly - */ - public $action = null; - - /** - * - * - * @var KalturaGenericDistributionProviderStatus - * @readonly - */ - public $status = null; - - /** - * - * - * @var KalturaGenericDistributionProviderParser - */ - public $resultsParser = null; - - /** - * - * - * @var KalturaDistributionProtocol - */ - public $protocol = null; - - /** - * - * - * @var string - */ - public $serverAddress = null; - - /** - * - * - * @var string - */ - public $remotePath = null; - - /** - * - * - * @var string - */ - public $remoteUsername = null; - - /** - * - * - * @var string - */ - public $remotePassword = null; - - /** - * - * - * @var string - */ - public $editableFields = null; - - /** - * - * - * @var string - */ - public $mandatoryFields = null; - - /** - * - * - * @var string - * @readonly - */ - public $mrssTransformer = null; - - /** - * - * - * @var string - * @readonly - */ - public $mrssValidator = null; - - /** - * - * - * @var string - * @readonly - */ - public $resultsTransformer = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaGenericDistributionProviderActionListResponse extends KalturaObjectBase -{ - /** - * - * - * @var array of KalturaGenericDistributionProviderAction - * @readonly - */ - public $objects; - - /** - * - * - * @var int - * @readonly - */ - public $totalCount = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaGenericDistributionProvider extends KalturaDistributionProvider -{ - /** - * Auto generated - * - * - * @var int - * @readonly - */ - public $id = null; - - /** - * Generic distribution provider creation date as Unix timestamp (In seconds) - * - * - * @var int - * @readonly - */ - public $createdAt = null; - - /** - * Generic distribution provider last update date as Unix timestamp (In seconds) - * - * - * @var int - * @readonly - */ - public $updatedAt = null; - - /** - * - * - * @var int - * @readonly - */ - public $partnerId = null; - - /** - * - * - * @var bool - */ - public $isDefault = null; - - /** - * - * - * @var KalturaGenericDistributionProviderStatus - * @readonly - */ - public $status = null; - - /** - * - * - * @var string - */ - public $optionalFlavorParamsIds = null; - - /** - * - * - * @var string - */ - public $requiredFlavorParamsIds = null; - - /** - * - * - * @var array of KalturaDistributionThumbDimensions - */ - public $optionalThumbDimensions; - - /** - * - * - * @var array of KalturaDistributionThumbDimensions - */ - public $requiredThumbDimensions; - - /** - * - * - * @var string - */ - public $editableFields = null; - - /** - * - * - * @var string - */ - public $mandatoryFields = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaGenericDistributionProviderListResponse extends KalturaObjectBase -{ - /** - * - * - * @var array of KalturaGenericDistributionProvider - * @readonly - */ - public $objects; - - /** - * - * - * @var int - * @readonly - */ - public $totalCount = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaAssetDistributionPropertyCondition extends KalturaAssetDistributionCondition -{ - /** - * The property name to look for, this will match to a getter on the asset object. - * Should be camelCase naming convention (defining "myPropertyName" will look for getMyPropertyName()) - * - * - * @var string - */ - public $propertyName = null; - - /** - * The value to compare - * - * - * @var string - */ - public $propertyValue = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -abstract class KalturaConfigurableDistributionJobProviderData extends KalturaDistributionJobProviderData -{ - /** - * - * - * @var string - */ - public $fieldValues = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -abstract class KalturaConfigurableDistributionProfile extends KalturaDistributionProfile -{ - /** - * - * - * @var array of KalturaDistributionFieldConfig - */ - public $fieldConfigArray; - - /** - * - * - * @var array of KalturaExtendingItemMrssParameter - */ - public $itemXpathsToExtend; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaContentDistributionSearchItem extends KalturaSearchItem -{ - /** - * - * - * @var bool - */ - public $noDistributionProfiles = null; - - /** - * - * - * @var int - */ - public $distributionProfileId = null; - - /** - * - * - * @var KalturaEntryDistributionSunStatus - */ - public $distributionSunStatus = null; - - /** - * - * - * @var KalturaEntryDistributionFlag - */ - public $entryDistributionFlag = null; - - /** - * - * - * @var KalturaEntryDistributionStatus - */ - public $entryDistributionStatus = null; - - /** - * - * - * @var bool - */ - public $hasEntryDistributionValidationErrors = null; - - /** - * Comma seperated validation error types - * - * - * @var string - */ - public $entryDistributionValidationErrors = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaDistributionJobData extends KalturaJobData -{ - /** - * - * - * @var int - */ - public $distributionProfileId = null; - - /** - * - * - * @var KalturaDistributionProfile - */ - public $distributionProfile; - - /** - * - * - * @var int - */ - public $entryDistributionId = null; - - /** - * - * - * @var KalturaEntryDistribution - */ - public $entryDistribution; - - /** - * Id of the media in the remote system - * - * - * @var string - */ - public $remoteId = null; - - /** - * - * - * @var KalturaDistributionProviderType - */ - public $providerType = null; - - /** - * Additional data that relevant for the provider only - * - * - * @var KalturaDistributionJobProviderData - */ - public $providerData; - - /** - * The results as returned from the remote destination - * - * - * @var string - */ - public $results = null; - - /** - * The data as sent to the remote destination - * - * - * @var string - */ - public $sentData = null; - - /** - * Stores array of media files that submitted to the destination site - * Could be used later for media update - * - * - * @var array of KalturaDistributionRemoteMediaFile - */ - public $mediaFiles; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -abstract class KalturaDistributionProfileBaseFilter extends KalturaFilter -{ - /** - * - * - * @var int - */ - public $idEqual = null; - - /** - * - * - * @var string - */ - public $idIn = null; - - /** - * - * - * @var int - */ - public $createdAtGreaterThanOrEqual = null; - - /** - * - * - * @var int - */ - public $createdAtLessThanOrEqual = null; - - /** - * - * - * @var int - */ - public $updatedAtGreaterThanOrEqual = null; - - /** - * - * - * @var int - */ - public $updatedAtLessThanOrEqual = null; - - /** - * - * - * @var KalturaDistributionProfileStatus - */ - public $statusEqual = null; - - /** - * - * - * @var string - */ - public $statusIn = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -abstract class KalturaDistributionProviderBaseFilter extends KalturaFilter -{ - /** - * - * - * @var KalturaDistributionProviderType - */ - public $typeEqual = null; - - /** - * - * - * @var string - */ - public $typeIn = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaDistributionValidationErrorInvalidData extends KalturaDistributionValidationError -{ - /** - * - * - * @var string - */ - public $fieldName = null; - - /** - * - * - * @var KalturaDistributionValidationErrorType - */ - public $validationErrorType = null; - - /** - * Parameter of the validation error - * For example, minimum value for KalturaDistributionValidationErrorType::STRING_TOO_SHORT validation error - * - * - * @var string - */ - public $validationErrorParam = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaDistributionValidationErrorMissingAsset extends KalturaDistributionValidationError -{ - /** - * - * - * @var string - */ - public $data = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaDistributionValidationErrorMissingFlavor extends KalturaDistributionValidationError -{ - /** - * - * - * @var string - */ - public $flavorParamsId = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaDistributionValidationErrorMissingMetadata extends KalturaDistributionValidationError -{ - /** - * - * - * @var string - */ - public $fieldName = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaDistributionValidationErrorMissingThumbnail extends KalturaDistributionValidationError -{ - /** - * - * - * @var KalturaDistributionThumbDimensions - */ - public $dimensions; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -abstract class KalturaEntryDistributionBaseFilter extends KalturaFilter -{ - /** - * - * - * @var int - */ - public $idEqual = null; - - /** - * - * - * @var string - */ - public $idIn = null; - - /** - * - * - * @var int - */ - public $createdAtGreaterThanOrEqual = null; - - /** - * - * - * @var int - */ - public $createdAtLessThanOrEqual = null; - - /** - * - * - * @var int - */ - public $updatedAtGreaterThanOrEqual = null; - - /** - * - * - * @var int - */ - public $updatedAtLessThanOrEqual = null; - - /** - * - * - * @var int - */ - public $submittedAtGreaterThanOrEqual = null; - - /** - * - * - * @var int - */ - public $submittedAtLessThanOrEqual = null; - - /** - * - * - * @var string - */ - public $entryIdEqual = null; - - /** - * - * - * @var string - */ - public $entryIdIn = null; - - /** - * - * - * @var int - */ - public $distributionProfileIdEqual = null; - - /** - * - * - * @var string - */ - public $distributionProfileIdIn = null; - - /** - * - * - * @var KalturaEntryDistributionStatus - */ - public $statusEqual = null; - - /** - * - * - * @var string - */ - public $statusIn = null; - - /** - * - * - * @var KalturaEntryDistributionFlag - */ - public $dirtyStatusEqual = null; - - /** - * - * - * @var string - */ - public $dirtyStatusIn = null; - - /** - * - * - * @var int - */ - public $sunriseGreaterThanOrEqual = null; - - /** - * - * - * @var int - */ - public $sunriseLessThanOrEqual = null; - - /** - * - * - * @var int - */ - public $sunsetGreaterThanOrEqual = null; - - /** - * - * - * @var int - */ - public $sunsetLessThanOrEqual = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaGenericDistributionJobProviderData extends KalturaDistributionJobProviderData -{ - /** - * - * - * @var string - */ - public $xml = null; - - /** - * - * - * @var string - */ - public $resultParseData = null; - - /** - * - * - * @var KalturaGenericDistributionProviderParser - */ - public $resultParserType = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaGenericDistributionProfile extends KalturaDistributionProfile -{ - /** - * - * - * @var int - * @insertonly - */ - public $genericProviderId = null; - - /** - * - * - * @var KalturaGenericDistributionProfileAction - */ - public $submitAction; - - /** - * - * - * @var KalturaGenericDistributionProfileAction - */ - public $updateAction; - - /** - * - * - * @var KalturaGenericDistributionProfileAction - */ - public $deleteAction; - - /** - * - * - * @var KalturaGenericDistributionProfileAction - */ - public $fetchReportAction; - - /** - * - * - * @var string - */ - public $updateRequiredEntryFields = null; - - /** - * - * - * @var string - */ - public $updateRequiredMetadataXPaths = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -abstract class KalturaGenericDistributionProviderActionBaseFilter extends KalturaFilter -{ - /** - * - * - * @var int - */ - public $idEqual = null; - - /** - * - * - * @var string - */ - public $idIn = null; - - /** - * - * - * @var int - */ - public $createdAtGreaterThanOrEqual = null; - - /** - * - * - * @var int - */ - public $createdAtLessThanOrEqual = null; - - /** - * - * - * @var int - */ - public $updatedAtGreaterThanOrEqual = null; - - /** - * - * - * @var int - */ - public $updatedAtLessThanOrEqual = null; - - /** - * - * - * @var int - */ - public $genericDistributionProviderIdEqual = null; - - /** - * - * - * @var string - */ - public $genericDistributionProviderIdIn = null; - - /** - * - * - * @var KalturaDistributionAction - */ - public $actionEqual = null; - - /** - * - * - * @var string - */ - public $actionIn = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaSyndicationDistributionProfile extends KalturaDistributionProfile -{ - /** - * - * - * @var string - */ - public $xsl = null; - - /** - * - * - * @var string - * @readonly - */ - public $feedId = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaSyndicationDistributionProvider extends KalturaDistributionProvider -{ - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaDistributionDeleteJobData extends KalturaDistributionJobData -{ - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaDistributionFetchReportJobData extends KalturaDistributionJobData -{ - /** - * - * - * @var int - */ - public $plays = null; - - /** - * - * - * @var int - */ - public $views = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaDistributionProfileFilter extends KalturaDistributionProfileBaseFilter -{ - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaDistributionProviderFilter extends KalturaDistributionProviderBaseFilter -{ - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaDistributionSubmitJobData extends KalturaDistributionJobData -{ - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaDistributionUpdateJobData extends KalturaDistributionJobData -{ - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaDistributionValidationErrorInvalidMetadata extends KalturaDistributionValidationErrorInvalidData -{ - /** - * - * - * @var int - */ - public $metadataProfileId = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaEntryDistributionFilter extends KalturaEntryDistributionBaseFilter -{ - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaGenericDistributionProviderActionFilter extends KalturaGenericDistributionProviderActionBaseFilter -{ - -} - -/** - * @package Kaltura - * @subpackage Client - */ -abstract class KalturaConfigurableDistributionProfileBaseFilter extends KalturaDistributionProfileFilter -{ - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaDistributionDisableJobData extends KalturaDistributionUpdateJobData -{ - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaDistributionEnableJobData extends KalturaDistributionUpdateJobData -{ - -} - -/** - * @package Kaltura - * @subpackage Client - */ -abstract class KalturaGenericDistributionProfileBaseFilter extends KalturaDistributionProfileFilter -{ - -} - -/** - * @package Kaltura - * @subpackage Client - */ -abstract class KalturaGenericDistributionProviderBaseFilter extends KalturaDistributionProviderFilter -{ - /** - * - * - * @var int - */ - public $idEqual = null; - - /** - * - * - * @var string - */ - public $idIn = null; - - /** - * - * - * @var int - */ - public $createdAtGreaterThanOrEqual = null; - - /** - * - * - * @var int - */ - public $createdAtLessThanOrEqual = null; - - /** - * - * - * @var int - */ - public $updatedAtGreaterThanOrEqual = null; - - /** - * - * - * @var int - */ - public $updatedAtLessThanOrEqual = null; - - /** - * - * - * @var int - */ - public $partnerIdEqual = null; - - /** - * - * - * @var string - */ - public $partnerIdIn = null; - - /** - * - * - * @var KalturaNullableBoolean - */ - public $isDefaultEqual = null; - - /** - * - * - * @var string - */ - public $isDefaultIn = null; - - /** - * - * - * @var KalturaGenericDistributionProviderStatus - */ - public $statusEqual = null; - - /** - * - * - * @var string - */ - public $statusIn = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -abstract class KalturaSyndicationDistributionProfileBaseFilter extends KalturaDistributionProfileFilter -{ - -} - -/** - * @package Kaltura - * @subpackage Client - */ -abstract class KalturaSyndicationDistributionProviderBaseFilter extends KalturaDistributionProviderFilter -{ - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaConfigurableDistributionProfileFilter extends KalturaConfigurableDistributionProfileBaseFilter -{ - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaGenericDistributionProfileFilter extends KalturaGenericDistributionProfileBaseFilter -{ - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaGenericDistributionProviderFilter extends KalturaGenericDistributionProviderBaseFilter -{ - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaSyndicationDistributionProfileFilter extends KalturaSyndicationDistributionProfileBaseFilter -{ - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaSyndicationDistributionProviderFilter extends KalturaSyndicationDistributionProviderBaseFilter -{ - -} - - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaDistributionProfileService extends KalturaServiceBase -{ - function __construct(KalturaClient $client = null) - { - parent::__construct($client); - } - - /** - * Add new Distribution Profile - * - * @param KalturaDistributionProfile $distributionProfile - * @return KalturaDistributionProfile - */ - function add(KalturaDistributionProfile $distributionProfile) - { - $kparams = array(); - $this->client->addParam($kparams, "distributionProfile", $distributionProfile->toParams()); - $this->client->queueServiceActionCall("contentdistribution_distributionprofile", "add", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaDistributionProfile"); - return $resultObject; - } - - /** - * Get Distribution Profile by id - * - * @param int $id - * @return KalturaDistributionProfile - */ - function get($id) - { - $kparams = array(); - $this->client->addParam($kparams, "id", $id); - $this->client->queueServiceActionCall("contentdistribution_distributionprofile", "get", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaDistributionProfile"); - return $resultObject; - } - - /** - * Update Distribution Profile by id - * - * @param int $id - * @param KalturaDistributionProfile $distributionProfile - * @return KalturaDistributionProfile - */ - function update($id, KalturaDistributionProfile $distributionProfile) - { - $kparams = array(); - $this->client->addParam($kparams, "id", $id); - $this->client->addParam($kparams, "distributionProfile", $distributionProfile->toParams()); - $this->client->queueServiceActionCall("contentdistribution_distributionprofile", "update", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaDistributionProfile"); - return $resultObject; - } - - /** - * Update Distribution Profile status by id - * - * @param int $id - * @param int $status - * @return KalturaDistributionProfile - */ - function updateStatus($id, $status) - { - $kparams = array(); - $this->client->addParam($kparams, "id", $id); - $this->client->addParam($kparams, "status", $status); - $this->client->queueServiceActionCall("contentdistribution_distributionprofile", "updateStatus", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaDistributionProfile"); - return $resultObject; - } - - /** - * Delete Distribution Profile by id - * - * @param int $id - * @return - */ - function delete($id) - { - $kparams = array(); - $this->client->addParam($kparams, "id", $id); - $this->client->queueServiceActionCall("contentdistribution_distributionprofile", "delete", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "null"); - return $resultObject; - } - - /** - * List all distribution providers - * - * @param KalturaDistributionProfileFilter $filter - * @param KalturaFilterPager $pager - * @return KalturaDistributionProfileListResponse - */ - function listAction(KalturaDistributionProfileFilter $filter = null, KalturaFilterPager $pager = null) - { - $kparams = array(); - if ($filter !== null) - $this->client->addParam($kparams, "filter", $filter->toParams()); - if ($pager !== null) - $this->client->addParam($kparams, "pager", $pager->toParams()); - $this->client->queueServiceActionCall("contentdistribution_distributionprofile", "list", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaDistributionProfileListResponse"); - return $resultObject; - } - - /** - * - * - * @param KalturaPartnerFilter $filter - * @param KalturaFilterPager $pager - * @return KalturaDistributionProfileListResponse - */ - function listByPartner(KalturaPartnerFilter $filter = null, KalturaFilterPager $pager = null) - { - $kparams = array(); - if ($filter !== null) - $this->client->addParam($kparams, "filter", $filter->toParams()); - if ($pager !== null) - $this->client->addParam($kparams, "pager", $pager->toParams()); - $this->client->queueServiceActionCall("contentdistribution_distributionprofile", "listByPartner", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaDistributionProfileListResponse"); - return $resultObject; - } -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaEntryDistributionService extends KalturaServiceBase -{ - function __construct(KalturaClient $client = null) - { - parent::__construct($client); - } - - /** - * Add new Entry Distribution - * - * @param KalturaEntryDistribution $entryDistribution - * @return KalturaEntryDistribution - */ - function add(KalturaEntryDistribution $entryDistribution) - { - $kparams = array(); - $this->client->addParam($kparams, "entryDistribution", $entryDistribution->toParams()); - $this->client->queueServiceActionCall("contentdistribution_entrydistribution", "add", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaEntryDistribution"); - return $resultObject; - } - - /** - * Get Entry Distribution by id - * - * @param int $id - * @return KalturaEntryDistribution - */ - function get($id) - { - $kparams = array(); - $this->client->addParam($kparams, "id", $id); - $this->client->queueServiceActionCall("contentdistribution_entrydistribution", "get", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaEntryDistribution"); - return $resultObject; - } - - /** - * Validates Entry Distribution by id for submission - * - * @param int $id - * @return KalturaEntryDistribution - */ - function validate($id) - { - $kparams = array(); - $this->client->addParam($kparams, "id", $id); - $this->client->queueServiceActionCall("contentdistribution_entrydistribution", "validate", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaEntryDistribution"); - return $resultObject; - } - - /** - * Update Entry Distribution by id - * - * @param int $id - * @param KalturaEntryDistribution $entryDistribution - * @return KalturaEntryDistribution - */ - function update($id, KalturaEntryDistribution $entryDistribution) - { - $kparams = array(); - $this->client->addParam($kparams, "id", $id); - $this->client->addParam($kparams, "entryDistribution", $entryDistribution->toParams()); - $this->client->queueServiceActionCall("contentdistribution_entrydistribution", "update", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaEntryDistribution"); - return $resultObject; - } - - /** - * Delete Entry Distribution by id - * - * @param int $id - * @return - */ - function delete($id) - { - $kparams = array(); - $this->client->addParam($kparams, "id", $id); - $this->client->queueServiceActionCall("contentdistribution_entrydistribution", "delete", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "null"); - return $resultObject; - } - - /** - * List all distribution providers - * - * @param KalturaEntryDistributionFilter $filter - * @param KalturaFilterPager $pager - * @return KalturaEntryDistributionListResponse - */ - function listAction(KalturaEntryDistributionFilter $filter = null, KalturaFilterPager $pager = null) - { - $kparams = array(); - if ($filter !== null) - $this->client->addParam($kparams, "filter", $filter->toParams()); - if ($pager !== null) - $this->client->addParam($kparams, "pager", $pager->toParams()); - $this->client->queueServiceActionCall("contentdistribution_entrydistribution", "list", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaEntryDistributionListResponse"); - return $resultObject; - } - - /** - * Submits Entry Distribution to the remote destination - * - * @param int $id - * @param bool $submitWhenReady - * @return KalturaEntryDistribution - */ - function submitAdd($id, $submitWhenReady = false) - { - $kparams = array(); - $this->client->addParam($kparams, "id", $id); - $this->client->addParam($kparams, "submitWhenReady", $submitWhenReady); - $this->client->queueServiceActionCall("contentdistribution_entrydistribution", "submitAdd", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaEntryDistribution"); - return $resultObject; - } - - /** - * Submits Entry Distribution changes to the remote destination - * - * @param int $id - * @return KalturaEntryDistribution - */ - function submitUpdate($id) - { - $kparams = array(); - $this->client->addParam($kparams, "id", $id); - $this->client->queueServiceActionCall("contentdistribution_entrydistribution", "submitUpdate", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaEntryDistribution"); - return $resultObject; - } - - /** - * Submits Entry Distribution report request - * - * @param int $id - * @return KalturaEntryDistribution - */ - function submitFetchReport($id) - { - $kparams = array(); - $this->client->addParam($kparams, "id", $id); - $this->client->queueServiceActionCall("contentdistribution_entrydistribution", "submitFetchReport", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaEntryDistribution"); - return $resultObject; - } - - /** - * Deletes Entry Distribution from the remote destination - * - * @param int $id - * @return KalturaEntryDistribution - */ - function submitDelete($id) - { - $kparams = array(); - $this->client->addParam($kparams, "id", $id); - $this->client->queueServiceActionCall("contentdistribution_entrydistribution", "submitDelete", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaEntryDistribution"); - return $resultObject; - } - - /** - * Retries last submit action - * - * @param int $id - * @return KalturaEntryDistribution - */ - function retrySubmit($id) - { - $kparams = array(); - $this->client->addParam($kparams, "id", $id); - $this->client->queueServiceActionCall("contentdistribution_entrydistribution", "retrySubmit", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaEntryDistribution"); - return $resultObject; - } - - /** - * Serves entry distribution sent data - * - * @param int $id - * @param int $actionType - * @return file - */ - function serveSentData($id, $actionType) - { - $kparams = array(); - $this->client->addParam($kparams, "id", $id); - $this->client->addParam($kparams, "actionType", $actionType); - $this->client->queueServiceActionCall("contentdistribution_entrydistribution", "serveSentData", $kparams); - if(!$this->client->getDestinationPath() && !$this->client->getReturnServedResult()) - return $this->client->getServeUrl(); - return $this->client->doQueue(); - } - - /** - * Serves entry distribution returned data - * - * @param int $id - * @param int $actionType - * @return file - */ - function serveReturnedData($id, $actionType) - { - $kparams = array(); - $this->client->addParam($kparams, "id", $id); - $this->client->addParam($kparams, "actionType", $actionType); - $this->client->queueServiceActionCall("contentdistribution_entrydistribution", "serveReturnedData", $kparams); - if(!$this->client->getDestinationPath() && !$this->client->getReturnServedResult()) - return $this->client->getServeUrl(); - return $this->client->doQueue(); - } -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaDistributionProviderService extends KalturaServiceBase -{ - function __construct(KalturaClient $client = null) - { - parent::__construct($client); - } - - /** - * List all distribution providers - * - * @param KalturaDistributionProviderFilter $filter - * @param KalturaFilterPager $pager - * @return KalturaDistributionProviderListResponse - */ - function listAction(KalturaDistributionProviderFilter $filter = null, KalturaFilterPager $pager = null) - { - $kparams = array(); - if ($filter !== null) - $this->client->addParam($kparams, "filter", $filter->toParams()); - if ($pager !== null) - $this->client->addParam($kparams, "pager", $pager->toParams()); - $this->client->queueServiceActionCall("contentdistribution_distributionprovider", "list", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaDistributionProviderListResponse"); - return $resultObject; - } -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaGenericDistributionProviderService extends KalturaServiceBase -{ - function __construct(KalturaClient $client = null) - { - parent::__construct($client); - } - - /** - * Add new Generic Distribution Provider - * - * @param KalturaGenericDistributionProvider $genericDistributionProvider - * @return KalturaGenericDistributionProvider - */ - function add(KalturaGenericDistributionProvider $genericDistributionProvider) - { - $kparams = array(); - $this->client->addParam($kparams, "genericDistributionProvider", $genericDistributionProvider->toParams()); - $this->client->queueServiceActionCall("contentdistribution_genericdistributionprovider", "add", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaGenericDistributionProvider"); - return $resultObject; - } - - /** - * Get Generic Distribution Provider by id - * - * @param int $id - * @return KalturaGenericDistributionProvider - */ - function get($id) - { - $kparams = array(); - $this->client->addParam($kparams, "id", $id); - $this->client->queueServiceActionCall("contentdistribution_genericdistributionprovider", "get", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaGenericDistributionProvider"); - return $resultObject; - } - - /** - * Update Generic Distribution Provider by id - * - * @param int $id - * @param KalturaGenericDistributionProvider $genericDistributionProvider - * @return KalturaGenericDistributionProvider - */ - function update($id, KalturaGenericDistributionProvider $genericDistributionProvider) - { - $kparams = array(); - $this->client->addParam($kparams, "id", $id); - $this->client->addParam($kparams, "genericDistributionProvider", $genericDistributionProvider->toParams()); - $this->client->queueServiceActionCall("contentdistribution_genericdistributionprovider", "update", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaGenericDistributionProvider"); - return $resultObject; - } - - /** - * Delete Generic Distribution Provider by id - * - * @param int $id - * @return - */ - function delete($id) - { - $kparams = array(); - $this->client->addParam($kparams, "id", $id); - $this->client->queueServiceActionCall("contentdistribution_genericdistributionprovider", "delete", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "null"); - return $resultObject; - } - - /** - * List all distribution providers - * - * @param KalturaGenericDistributionProviderFilter $filter - * @param KalturaFilterPager $pager - * @return KalturaGenericDistributionProviderListResponse - */ - function listAction(KalturaGenericDistributionProviderFilter $filter = null, KalturaFilterPager $pager = null) - { - $kparams = array(); - if ($filter !== null) - $this->client->addParam($kparams, "filter", $filter->toParams()); - if ($pager !== null) - $this->client->addParam($kparams, "pager", $pager->toParams()); - $this->client->queueServiceActionCall("contentdistribution_genericdistributionprovider", "list", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaGenericDistributionProviderListResponse"); - return $resultObject; - } -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaGenericDistributionProviderActionService extends KalturaServiceBase -{ - function __construct(KalturaClient $client = null) - { - parent::__construct($client); - } - - /** - * Add new Generic Distribution Provider Action - * - * @param KalturaGenericDistributionProviderAction $genericDistributionProviderAction - * @return KalturaGenericDistributionProviderAction - */ - function add(KalturaGenericDistributionProviderAction $genericDistributionProviderAction) - { - $kparams = array(); - $this->client->addParam($kparams, "genericDistributionProviderAction", $genericDistributionProviderAction->toParams()); - $this->client->queueServiceActionCall("contentdistribution_genericdistributionprovideraction", "add", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaGenericDistributionProviderAction"); - return $resultObject; - } - - /** - * Add MRSS transform file to generic distribution provider action - * - * @param int $id The id of the generic distribution provider action - * @param string $xslData XSL MRSS transformation data - * @return KalturaGenericDistributionProviderAction - */ - function addMrssTransform($id, $xslData) - { - $kparams = array(); - $this->client->addParam($kparams, "id", $id); - $this->client->addParam($kparams, "xslData", $xslData); - $this->client->queueServiceActionCall("contentdistribution_genericdistributionprovideraction", "addMrssTransform", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaGenericDistributionProviderAction"); - return $resultObject; - } - - /** - * Add MRSS transform file to generic distribution provider action - * - * @param int $id The id of the generic distribution provider action - * @param file $xslFile XSL MRSS transformation file - * @return KalturaGenericDistributionProviderAction - */ - function addMrssTransformFromFile($id, $xslFile) - { - $kparams = array(); - $this->client->addParam($kparams, "id", $id); - $kfiles = array(); - $this->client->addParam($kfiles, "xslFile", $xslFile); - $this->client->queueServiceActionCall("contentdistribution_genericdistributionprovideraction", "addMrssTransformFromFile", $kparams, $kfiles); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaGenericDistributionProviderAction"); - return $resultObject; - } - - /** - * Add MRSS validate file to generic distribution provider action - * - * @param int $id The id of the generic distribution provider action - * @param string $xsdData XSD MRSS validatation data - * @return KalturaGenericDistributionProviderAction - */ - function addMrssValidate($id, $xsdData) - { - $kparams = array(); - $this->client->addParam($kparams, "id", $id); - $this->client->addParam($kparams, "xsdData", $xsdData); - $this->client->queueServiceActionCall("contentdistribution_genericdistributionprovideraction", "addMrssValidate", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaGenericDistributionProviderAction"); - return $resultObject; - } - - /** - * Add MRSS validate file to generic distribution provider action - * - * @param int $id The id of the generic distribution provider action - * @param file $xsdFile XSD MRSS validatation file - * @return KalturaGenericDistributionProviderAction - */ - function addMrssValidateFromFile($id, $xsdFile) - { - $kparams = array(); - $this->client->addParam($kparams, "id", $id); - $kfiles = array(); - $this->client->addParam($kfiles, "xsdFile", $xsdFile); - $this->client->queueServiceActionCall("contentdistribution_genericdistributionprovideraction", "addMrssValidateFromFile", $kparams, $kfiles); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaGenericDistributionProviderAction"); - return $resultObject; - } - - /** - * Add results transform file to generic distribution provider action - * - * @param int $id The id of the generic distribution provider action - * @param string $transformData Transformation data xsl, xPath or regex - * @return KalturaGenericDistributionProviderAction - */ - function addResultsTransform($id, $transformData) - { - $kparams = array(); - $this->client->addParam($kparams, "id", $id); - $this->client->addParam($kparams, "transformData", $transformData); - $this->client->queueServiceActionCall("contentdistribution_genericdistributionprovideraction", "addResultsTransform", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaGenericDistributionProviderAction"); - return $resultObject; - } - - /** - * Add MRSS transform file to generic distribution provider action - * - * @param int $id The id of the generic distribution provider action - * @param file $transformFile Transformation file xsl, xPath or regex - * @return KalturaGenericDistributionProviderAction - */ - function addResultsTransformFromFile($id, $transformFile) - { - $kparams = array(); - $this->client->addParam($kparams, "id", $id); - $kfiles = array(); - $this->client->addParam($kfiles, "transformFile", $transformFile); - $this->client->queueServiceActionCall("contentdistribution_genericdistributionprovideraction", "addResultsTransformFromFile", $kparams, $kfiles); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaGenericDistributionProviderAction"); - return $resultObject; - } - - /** - * Get Generic Distribution Provider Action by id - * - * @param int $id - * @return KalturaGenericDistributionProviderAction - */ - function get($id) - { - $kparams = array(); - $this->client->addParam($kparams, "id", $id); - $this->client->queueServiceActionCall("contentdistribution_genericdistributionprovideraction", "get", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaGenericDistributionProviderAction"); - return $resultObject; - } - - /** - * Get Generic Distribution Provider Action by provider id - * - * @param int $genericDistributionProviderId - * @param int $actionType - * @return KalturaGenericDistributionProviderAction - */ - function getByProviderId($genericDistributionProviderId, $actionType) - { - $kparams = array(); - $this->client->addParam($kparams, "genericDistributionProviderId", $genericDistributionProviderId); - $this->client->addParam($kparams, "actionType", $actionType); - $this->client->queueServiceActionCall("contentdistribution_genericdistributionprovideraction", "getByProviderId", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaGenericDistributionProviderAction"); - return $resultObject; - } - - /** - * Update Generic Distribution Provider Action by provider id - * - * @param int $genericDistributionProviderId - * @param int $actionType - * @param KalturaGenericDistributionProviderAction $genericDistributionProviderAction - * @return KalturaGenericDistributionProviderAction - */ - function updateByProviderId($genericDistributionProviderId, $actionType, KalturaGenericDistributionProviderAction $genericDistributionProviderAction) - { - $kparams = array(); - $this->client->addParam($kparams, "genericDistributionProviderId", $genericDistributionProviderId); - $this->client->addParam($kparams, "actionType", $actionType); - $this->client->addParam($kparams, "genericDistributionProviderAction", $genericDistributionProviderAction->toParams()); - $this->client->queueServiceActionCall("contentdistribution_genericdistributionprovideraction", "updateByProviderId", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaGenericDistributionProviderAction"); - return $resultObject; - } - - /** - * Update Generic Distribution Provider Action by id - * - * @param int $id - * @param KalturaGenericDistributionProviderAction $genericDistributionProviderAction - * @return KalturaGenericDistributionProviderAction - */ - function update($id, KalturaGenericDistributionProviderAction $genericDistributionProviderAction) - { - $kparams = array(); - $this->client->addParam($kparams, "id", $id); - $this->client->addParam($kparams, "genericDistributionProviderAction", $genericDistributionProviderAction->toParams()); - $this->client->queueServiceActionCall("contentdistribution_genericdistributionprovideraction", "update", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaGenericDistributionProviderAction"); - return $resultObject; - } - - /** - * Delete Generic Distribution Provider Action by id - * - * @param int $id - * @return - */ - function delete($id) - { - $kparams = array(); - $this->client->addParam($kparams, "id", $id); - $this->client->queueServiceActionCall("contentdistribution_genericdistributionprovideraction", "delete", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "null"); - return $resultObject; - } - - /** - * Delete Generic Distribution Provider Action by provider id - * - * @param int $genericDistributionProviderId - * @param int $actionType - * @return - */ - function deleteByProviderId($genericDistributionProviderId, $actionType) - { - $kparams = array(); - $this->client->addParam($kparams, "genericDistributionProviderId", $genericDistributionProviderId); - $this->client->addParam($kparams, "actionType", $actionType); - $this->client->queueServiceActionCall("contentdistribution_genericdistributionprovideraction", "deleteByProviderId", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "null"); - return $resultObject; - } - - /** - * List all distribution providers - * - * @param KalturaGenericDistributionProviderActionFilter $filter - * @param KalturaFilterPager $pager - * @return KalturaGenericDistributionProviderActionListResponse - */ - function listAction(KalturaGenericDistributionProviderActionFilter $filter = null, KalturaFilterPager $pager = null) - { - $kparams = array(); - if ($filter !== null) - $this->client->addParam($kparams, "filter", $filter->toParams()); - if ($pager !== null) - $this->client->addParam($kparams, "pager", $pager->toParams()); - $this->client->queueServiceActionCall("contentdistribution_genericdistributionprovideraction", "list", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaGenericDistributionProviderActionListResponse"); - return $resultObject; - } -} -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaContentDistributionClientPlugin extends KalturaClientPlugin -{ - /** - * @var KalturaDistributionProfileService - */ - public $distributionProfile = null; - - /** - * @var KalturaEntryDistributionService - */ - public $entryDistribution = null; - - /** - * @var KalturaDistributionProviderService - */ - public $distributionProvider = null; - - /** - * @var KalturaGenericDistributionProviderService - */ - public $genericDistributionProvider = null; - - /** - * @var KalturaGenericDistributionProviderActionService - */ - public $genericDistributionProviderAction = null; - - protected function __construct(KalturaClient $client) - { - parent::__construct($client); - $this->distributionProfile = new KalturaDistributionProfileService($client); - $this->entryDistribution = new KalturaEntryDistributionService($client); - $this->distributionProvider = new KalturaDistributionProviderService($client); - $this->genericDistributionProvider = new KalturaGenericDistributionProviderService($client); - $this->genericDistributionProviderAction = new KalturaGenericDistributionProviderActionService($client); - } - - /** - * @return KalturaContentDistributionClientPlugin - */ - public static function get(KalturaClient $client) - { - return new KalturaContentDistributionClientPlugin($client); - } - - /** - * @return array - */ - public function getServices() - { - $services = array( - 'distributionProfile' => $this->distributionProfile, - 'entryDistribution' => $this->entryDistribution, - 'distributionProvider' => $this->distributionProvider, - 'genericDistributionProvider' => $this->genericDistributionProvider, - 'genericDistributionProviderAction' => $this->genericDistributionProviderAction, - ); - return $services; - } - - /** - * @return string - */ - public function getName() - { - return 'contentDistribution'; - } -} - diff --git a/local/kaltura/API/KalturaPlugins/KalturaCuePointClientPlugin.php b/local/kaltura/API/KalturaPlugins/KalturaCuePointClientPlugin.php deleted file mode 100644 index 03a5c937e8cd1..0000000000000 --- a/local/kaltura/API/KalturaPlugins/KalturaCuePointClientPlugin.php +++ /dev/null @@ -1,640 +0,0 @@ -. -// -// @ignore -// =================================================================================================== - -/** - * @package Kaltura - * @subpackage Client - */ -require_once(dirname(__FILE__) . "/../KalturaClientBase.php"); -require_once(dirname(__FILE__) . "/../KalturaEnums.php"); -require_once(dirname(__FILE__) . "/../KalturaTypes.php"); - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaCuePointStatus -{ - const READY = 1; - const DELETED = 2; -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaCuePointOrderBy -{ - const CREATED_AT_ASC = "+createdAt"; - const PARTNER_SORT_VALUE_ASC = "+partnerSortValue"; - const START_TIME_ASC = "+startTime"; - const UPDATED_AT_ASC = "+updatedAt"; - const CREATED_AT_DESC = "-createdAt"; - const PARTNER_SORT_VALUE_DESC = "-partnerSortValue"; - const START_TIME_DESC = "-startTime"; - const UPDATED_AT_DESC = "-updatedAt"; -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaCuePointType -{ - const AD = "adCuePoint.Ad"; - const ANNOTATION = "annotation.Annotation"; - const CODE = "codeCuePoint.Code"; -} - -/** - * @package Kaltura - * @subpackage Client - */ -abstract class KalturaCuePoint extends KalturaObjectBase -{ - /** - * - * - * @var string - * @readonly - */ - public $id = null; - - /** - * - * - * @var KalturaCuePointType - * @readonly - */ - public $cuePointType = null; - - /** - * - * - * @var KalturaCuePointStatus - * @readonly - */ - public $status = null; - - /** - * - * - * @var string - * @insertonly - */ - public $entryId = null; - - /** - * - * - * @var int - * @readonly - */ - public $partnerId = null; - - /** - * - * - * @var int - * @readonly - */ - public $createdAt = null; - - /** - * - * - * @var int - * @readonly - */ - public $updatedAt = null; - - /** - * - * - * @var string - */ - public $tags = null; - - /** - * Start time in milliseconds - * - * - * @var int - */ - public $startTime = null; - - /** - * - * - * @var string - * @readonly - */ - public $userId = null; - - /** - * - * - * @var string - */ - public $partnerData = null; - - /** - * - * - * @var int - */ - public $partnerSortValue = null; - - /** - * - * - * @var KalturaNullableBoolean - */ - public $forceStop = null; - - /** - * - * - * @var int - */ - public $thumbOffset = null; - - /** - * - * - * @var string - */ - public $systemName = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaCuePointListResponse extends KalturaObjectBase -{ - /** - * - * - * @var array of KalturaCuePoint - * @readonly - */ - public $objects; - - /** - * - * - * @var int - * @readonly - */ - public $totalCount = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -abstract class KalturaCuePointBaseFilter extends KalturaFilter -{ - /** - * - * - * @var string - */ - public $idEqual = null; - - /** - * - * - * @var string - */ - public $idIn = null; - - /** - * - * - * @var KalturaCuePointType - */ - public $cuePointTypeEqual = null; - - /** - * - * - * @var string - */ - public $cuePointTypeIn = null; - - /** - * - * - * @var KalturaCuePointStatus - */ - public $statusEqual = null; - - /** - * - * - * @var string - */ - public $statusIn = null; - - /** - * - * - * @var string - */ - public $entryIdEqual = null; - - /** - * - * - * @var string - */ - public $entryIdIn = null; - - /** - * - * - * @var int - */ - public $createdAtGreaterThanOrEqual = null; - - /** - * - * - * @var int - */ - public $createdAtLessThanOrEqual = null; - - /** - * - * - * @var int - */ - public $updatedAtGreaterThanOrEqual = null; - - /** - * - * - * @var int - */ - public $updatedAtLessThanOrEqual = null; - - /** - * - * - * @var string - */ - public $tagsLike = null; - - /** - * - * - * @var string - */ - public $tagsMultiLikeOr = null; - - /** - * - * - * @var string - */ - public $tagsMultiLikeAnd = null; - - /** - * - * - * @var int - */ - public $startTimeGreaterThanOrEqual = null; - - /** - * - * - * @var int - */ - public $startTimeLessThanOrEqual = null; - - /** - * - * - * @var string - */ - public $userIdEqual = null; - - /** - * - * - * @var string - */ - public $userIdIn = null; - - /** - * - * - * @var int - */ - public $partnerSortValueEqual = null; - - /** - * - * - * @var string - */ - public $partnerSortValueIn = null; - - /** - * - * - * @var int - */ - public $partnerSortValueGreaterThanOrEqual = null; - - /** - * - * - * @var int - */ - public $partnerSortValueLessThanOrEqual = null; - - /** - * - * - * @var KalturaNullableBoolean - */ - public $forceStopEqual = null; - - /** - * - * - * @var string - */ - public $systemNameEqual = null; - - /** - * - * - * @var string - */ - public $systemNameIn = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaCuePointFilter extends KalturaCuePointBaseFilter -{ - -} - - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaCuePointService extends KalturaServiceBase -{ - function __construct(KalturaClient $client = null) - { - parent::__construct($client); - } - - /** - * Allows you to add an cue point object associated with an entry - * - * @param KalturaCuePoint $cuePoint - * @return KalturaCuePoint - */ - function add(KalturaCuePoint $cuePoint) - { - $kparams = array(); - $this->client->addParam($kparams, "cuePoint", $cuePoint->toParams()); - $this->client->queueServiceActionCall("cuepoint_cuepoint", "add", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaCuePoint"); - return $resultObject; - } - - /** - * Allows you to add multiple cue points objects by uploading XML that contains multiple cue point definitions - * - * @param file $fileData - * @return KalturaCuePointListResponse - */ - function addFromBulk($fileData) - { - $kparams = array(); - $kfiles = array(); - $this->client->addParam($kfiles, "fileData", $fileData); - $this->client->queueServiceActionCall("cuepoint_cuepoint", "addFromBulk", $kparams, $kfiles); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaCuePointListResponse"); - return $resultObject; - } - - /** - * Download multiple cue points objects as XML definitions - * - * @param KalturaCuePointFilter $filter - * @param KalturaFilterPager $pager - * @return file - */ - function serveBulk(KalturaCuePointFilter $filter = null, KalturaFilterPager $pager = null) - { - $kparams = array(); - if ($filter !== null) - $this->client->addParam($kparams, "filter", $filter->toParams()); - if ($pager !== null) - $this->client->addParam($kparams, "pager", $pager->toParams()); - $this->client->queueServiceActionCall("cuepoint_cuepoint", "serveBulk", $kparams); - if(!$this->client->getDestinationPath() && !$this->client->getReturnServedResult()) - return $this->client->getServeUrl(); - return $this->client->doQueue(); - } - - /** - * Retrieve an CuePoint object by id - * - * @param string $id - * @return KalturaCuePoint - */ - function get($id) - { - $kparams = array(); - $this->client->addParam($kparams, "id", $id); - $this->client->queueServiceActionCall("cuepoint_cuepoint", "get", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaCuePoint"); - return $resultObject; - } - - /** - * List cue point objects by filter and pager - * - * @param KalturaCuePointFilter $filter - * @param KalturaFilterPager $pager - * @return KalturaCuePointListResponse - */ - function listAction(KalturaCuePointFilter $filter = null, KalturaFilterPager $pager = null) - { - $kparams = array(); - if ($filter !== null) - $this->client->addParam($kparams, "filter", $filter->toParams()); - if ($pager !== null) - $this->client->addParam($kparams, "pager", $pager->toParams()); - $this->client->queueServiceActionCall("cuepoint_cuepoint", "list", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaCuePointListResponse"); - return $resultObject; - } - - /** - * Count cue point objects by filter - * - * @param KalturaCuePointFilter $filter - * @return int - */ - function count(KalturaCuePointFilter $filter = null) - { - $kparams = array(); - if ($filter !== null) - $this->client->addParam($kparams, "filter", $filter->toParams()); - $this->client->queueServiceActionCall("cuepoint_cuepoint", "count", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "integer"); - return $resultObject; - } - - /** - * Update cue point by id - * - * @param string $id - * @param KalturaCuePoint $cuePoint - * @return KalturaCuePoint - */ - function update($id, KalturaCuePoint $cuePoint) - { - $kparams = array(); - $this->client->addParam($kparams, "id", $id); - $this->client->addParam($kparams, "cuePoint", $cuePoint->toParams()); - $this->client->queueServiceActionCall("cuepoint_cuepoint", "update", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaCuePoint"); - return $resultObject; - } - - /** - * Delete cue point by id, and delete all children cue points - * - * @param string $id - * @return - */ - function delete($id) - { - $kparams = array(); - $this->client->addParam($kparams, "id", $id); - $this->client->queueServiceActionCall("cuepoint_cuepoint", "delete", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "null"); - return $resultObject; - } -} -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaCuePointClientPlugin extends KalturaClientPlugin -{ - /** - * @var KalturaCuePointService - */ - public $cuePoint = null; - - protected function __construct(KalturaClient $client) - { - parent::__construct($client); - $this->cuePoint = new KalturaCuePointService($client); - } - - /** - * @return KalturaCuePointClientPlugin - */ - public static function get(KalturaClient $client) - { - return new KalturaCuePointClientPlugin($client); - } - - /** - * @return array - */ - public function getServices() - { - $services = array( - 'cuePoint' => $this->cuePoint, - ); - return $services; - } - - /** - * @return string - */ - public function getName() - { - return 'cuePoint'; - } -} - diff --git a/local/kaltura/API/KalturaPlugins/KalturaDocumentClientPlugin.php b/local/kaltura/API/KalturaPlugins/KalturaDocumentClientPlugin.php deleted file mode 100644 index b4ef635d2a2fc..0000000000000 --- a/local/kaltura/API/KalturaPlugins/KalturaDocumentClientPlugin.php +++ /dev/null @@ -1,944 +0,0 @@ -. -// -// @ignore -// =================================================================================================== - -/** - * @package Kaltura - * @subpackage Client - */ -require_once(dirname(__FILE__) . "/../KalturaClientBase.php"); -require_once(dirname(__FILE__) . "/../KalturaEnums.php"); -require_once(dirname(__FILE__) . "/../KalturaTypes.php"); - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaDocumentType -{ - const DOCUMENT = 11; - const SWF = 12; - const PDF = 13; -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaDocumentEntryOrderBy -{ - const CREATED_AT_ASC = "+createdAt"; - const END_DATE_ASC = "+endDate"; - const MODERATION_COUNT_ASC = "+moderationCount"; - const NAME_ASC = "+name"; - const PARTNER_SORT_VALUE_ASC = "+partnerSortValue"; - const RANK_ASC = "+rank"; - const RECENT_ASC = "+recent"; - const START_DATE_ASC = "+startDate"; - const TOTAL_RANK_ASC = "+totalRank"; - const UPDATED_AT_ASC = "+updatedAt"; - const WEIGHT_ASC = "+weight"; - const CREATED_AT_DESC = "-createdAt"; - const END_DATE_DESC = "-endDate"; - const MODERATION_COUNT_DESC = "-moderationCount"; - const NAME_DESC = "-name"; - const PARTNER_SORT_VALUE_DESC = "-partnerSortValue"; - const RANK_DESC = "-rank"; - const RECENT_DESC = "-recent"; - const START_DATE_DESC = "-startDate"; - const TOTAL_RANK_DESC = "-totalRank"; - const UPDATED_AT_DESC = "-updatedAt"; - const WEIGHT_DESC = "-weight"; -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaDocumentFlavorParamsOrderBy -{ -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaDocumentFlavorParamsOutputOrderBy -{ -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaImageFlavorParamsOrderBy -{ -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaImageFlavorParamsOutputOrderBy -{ -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaPdfFlavorParamsOrderBy -{ -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaPdfFlavorParamsOutputOrderBy -{ -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaSwfFlavorParamsOrderBy -{ -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaSwfFlavorParamsOutputOrderBy -{ -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaDocumentEntry extends KalturaBaseEntry -{ - /** - * The type of the document - * - * - * @var KalturaDocumentType - * @insertonly - */ - public $documentType = null; - - /** - * Comma separated asset params ids that exists for this media entry - * - * - * @var string - * @readonly - */ - public $assetParamsIds = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaDocumentListResponse extends KalturaObjectBase -{ - /** - * - * - * @var array of KalturaDocumentEntry - * @readonly - */ - public $objects; - - /** - * - * - * @var int - * @readonly - */ - public $totalCount = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaDocumentFlavorParams extends KalturaFlavorParams -{ - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaImageFlavorParams extends KalturaFlavorParams -{ - /** - * - * - * @var int - */ - public $densityWidth = null; - - /** - * - * - * @var int - */ - public $densityHeight = null; - - /** - * - * - * @var int - */ - public $sizeWidth = null; - - /** - * - * - * @var int - */ - public $sizeHeight = null; - - /** - * - * - * @var int - */ - public $depth = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaPdfFlavorParams extends KalturaFlavorParams -{ - /** - * - * - * @var bool - */ - public $readonly = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaSwfFlavorParams extends KalturaFlavorParams -{ - /** - * - * - * @var int - */ - public $flashVersion = null; - - /** - * - * - * @var bool - */ - public $poly2Bitmap = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -abstract class KalturaDocumentEntryBaseFilter extends KalturaBaseEntryFilter -{ - /** - * - * - * @var KalturaDocumentType - */ - public $documentTypeEqual = null; - - /** - * - * - * @var string - */ - public $documentTypeIn = null; - - /** - * - * - * @var string - */ - public $assetParamsIdsMatchOr = null; - - /** - * - * - * @var string - */ - public $assetParamsIdsMatchAnd = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaDocumentFlavorParamsOutput extends KalturaFlavorParamsOutput -{ - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaImageFlavorParamsOutput extends KalturaFlavorParamsOutput -{ - /** - * - * - * @var int - */ - public $densityWidth = null; - - /** - * - * - * @var int - */ - public $densityHeight = null; - - /** - * - * - * @var int - */ - public $sizeWidth = null; - - /** - * - * - * @var int - */ - public $sizeHeight = null; - - /** - * - * - * @var int - */ - public $depth = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaPdfFlavorParamsOutput extends KalturaFlavorParamsOutput -{ - /** - * - * - * @var bool - */ - public $readonly = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaSwfFlavorParamsOutput extends KalturaFlavorParamsOutput -{ - /** - * - * - * @var int - */ - public $flashVersion = null; - - /** - * - * - * @var bool - */ - public $poly2Bitmap = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaDocumentEntryFilter extends KalturaDocumentEntryBaseFilter -{ - -} - -/** - * @package Kaltura - * @subpackage Client - */ -abstract class KalturaDocumentFlavorParamsBaseFilter extends KalturaFlavorParamsFilter -{ - -} - -/** - * @package Kaltura - * @subpackage Client - */ -abstract class KalturaImageFlavorParamsBaseFilter extends KalturaFlavorParamsFilter -{ - -} - -/** - * @package Kaltura - * @subpackage Client - */ -abstract class KalturaPdfFlavorParamsBaseFilter extends KalturaFlavorParamsFilter -{ - -} - -/** - * @package Kaltura - * @subpackage Client - */ -abstract class KalturaSwfFlavorParamsBaseFilter extends KalturaFlavorParamsFilter -{ - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaDocumentFlavorParamsFilter extends KalturaDocumentFlavorParamsBaseFilter -{ - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaImageFlavorParamsFilter extends KalturaImageFlavorParamsBaseFilter -{ - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaPdfFlavorParamsFilter extends KalturaPdfFlavorParamsBaseFilter -{ - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaSwfFlavorParamsFilter extends KalturaSwfFlavorParamsBaseFilter -{ - -} - -/** - * @package Kaltura - * @subpackage Client - */ -abstract class KalturaDocumentFlavorParamsOutputBaseFilter extends KalturaFlavorParamsOutputFilter -{ - -} - -/** - * @package Kaltura - * @subpackage Client - */ -abstract class KalturaImageFlavorParamsOutputBaseFilter extends KalturaFlavorParamsOutputFilter -{ - -} - -/** - * @package Kaltura - * @subpackage Client - */ -abstract class KalturaPdfFlavorParamsOutputBaseFilter extends KalturaFlavorParamsOutputFilter -{ - -} - -/** - * @package Kaltura - * @subpackage Client - */ -abstract class KalturaSwfFlavorParamsOutputBaseFilter extends KalturaFlavorParamsOutputFilter -{ - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaDocumentFlavorParamsOutputFilter extends KalturaDocumentFlavorParamsOutputBaseFilter -{ - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaImageFlavorParamsOutputFilter extends KalturaImageFlavorParamsOutputBaseFilter -{ - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaPdfFlavorParamsOutputFilter extends KalturaPdfFlavorParamsOutputBaseFilter -{ - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaSwfFlavorParamsOutputFilter extends KalturaSwfFlavorParamsOutputBaseFilter -{ - -} - - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaDocumentsService extends KalturaServiceBase -{ - function __construct(KalturaClient $client = null) - { - parent::__construct($client); - } - - /** - * Add new document entry after the specific document file was uploaded and the upload token id exists - * - * @param KalturaDocumentEntry $documentEntry Document entry metadata - * @param string $uploadTokenId Upload token id - * @return KalturaDocumentEntry - */ - function addFromUploadedFile(KalturaDocumentEntry $documentEntry, $uploadTokenId) - { - $kparams = array(); - $this->client->addParam($kparams, "documentEntry", $documentEntry->toParams()); - $this->client->addParam($kparams, "uploadTokenId", $uploadTokenId); - $this->client->queueServiceActionCall("document_documents", "addFromUploadedFile", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaDocumentEntry"); - return $resultObject; - } - - /** - * Copy entry into new entry - * - * @param string $sourceEntryId Document entry id to copy from - * @param KalturaDocumentEntry $documentEntry Document entry metadata - * @param int $sourceFlavorParamsId The flavor to be used as the new entry source, source flavor will be used if not specified - * @return KalturaDocumentEntry - */ - function addFromEntry($sourceEntryId, KalturaDocumentEntry $documentEntry = null, $sourceFlavorParamsId = null) - { - $kparams = array(); - $this->client->addParam($kparams, "sourceEntryId", $sourceEntryId); - if ($documentEntry !== null) - $this->client->addParam($kparams, "documentEntry", $documentEntry->toParams()); - $this->client->addParam($kparams, "sourceFlavorParamsId", $sourceFlavorParamsId); - $this->client->queueServiceActionCall("document_documents", "addFromEntry", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaDocumentEntry"); - return $resultObject; - } - - /** - * Copy flavor asset into new entry - * - * @param string $sourceFlavorAssetId Flavor asset id to be used as the new entry source - * @param KalturaDocumentEntry $documentEntry Document entry metadata - * @return KalturaDocumentEntry - */ - function addFromFlavorAsset($sourceFlavorAssetId, KalturaDocumentEntry $documentEntry = null) - { - $kparams = array(); - $this->client->addParam($kparams, "sourceFlavorAssetId", $sourceFlavorAssetId); - if ($documentEntry !== null) - $this->client->addParam($kparams, "documentEntry", $documentEntry->toParams()); - $this->client->queueServiceActionCall("document_documents", "addFromFlavorAsset", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaDocumentEntry"); - return $resultObject; - } - - /** - * Convert entry - * - * @param string $entryId Document entry id - * @param int $conversionProfileId - * @param array $dynamicConversionAttributes - * @return int - */ - function convert($entryId, $conversionProfileId = null, array $dynamicConversionAttributes = null) - { - $kparams = array(); - $this->client->addParam($kparams, "entryId", $entryId); - $this->client->addParam($kparams, "conversionProfileId", $conversionProfileId); - if ($dynamicConversionAttributes !== null) - foreach($dynamicConversionAttributes as $index => $obj) - { - $this->client->addParam($kparams, "dynamicConversionAttributes:$index", $obj->toParams()); - } - $this->client->queueServiceActionCall("document_documents", "convert", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "integer"); - return $resultObject; - } - - /** - * Get document entry by ID. - * - * @param string $entryId Document entry id - * @param int $version Desired version of the data - * @return KalturaDocumentEntry - */ - function get($entryId, $version = -1) - { - $kparams = array(); - $this->client->addParam($kparams, "entryId", $entryId); - $this->client->addParam($kparams, "version", $version); - $this->client->queueServiceActionCall("document_documents", "get", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaDocumentEntry"); - return $resultObject; - } - - /** - * Update document entry. Only the properties that were set will be updated. - * - * @param string $entryId Document entry id to update - * @param KalturaDocumentEntry $documentEntry Document entry metadata to update - * @return KalturaDocumentEntry - */ - function update($entryId, KalturaDocumentEntry $documentEntry) - { - $kparams = array(); - $this->client->addParam($kparams, "entryId", $entryId); - $this->client->addParam($kparams, "documentEntry", $documentEntry->toParams()); - $this->client->queueServiceActionCall("document_documents", "update", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaDocumentEntry"); - return $resultObject; - } - - /** - * Delete a document entry. - * - * @param string $entryId Document entry id to delete - * @return - */ - function delete($entryId) - { - $kparams = array(); - $this->client->addParam($kparams, "entryId", $entryId); - $this->client->queueServiceActionCall("document_documents", "delete", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "null"); - return $resultObject; - } - - /** - * List document entries by filter with paging support. - * - * @param KalturaDocumentEntryFilter $filter Document entry filter - * @param KalturaFilterPager $pager Pager - * @return KalturaDocumentListResponse - */ - function listAction(KalturaDocumentEntryFilter $filter = null, KalturaFilterPager $pager = null) - { - $kparams = array(); - if ($filter !== null) - $this->client->addParam($kparams, "filter", $filter->toParams()); - if ($pager !== null) - $this->client->addParam($kparams, "pager", $pager->toParams()); - $this->client->queueServiceActionCall("document_documents", "list", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaDocumentListResponse"); - return $resultObject; - } - - /** - * Upload a document file to Kaltura, then the file can be used to create a document entry. - * - * @param file $fileData The file data - * @return string - */ - function upload($fileData) - { - $kparams = array(); - $kfiles = array(); - $this->client->addParam($kfiles, "fileData", $fileData); - $this->client->queueServiceActionCall("document_documents", "upload", $kparams, $kfiles); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "string"); - return $resultObject; - } - - /** - * This will queue a batch job for converting the document file to swf - Returns the URL where the new swf will be available - * - * @param string $entryId - * @return string - */ - function convertPptToSwf($entryId) - { - $kparams = array(); - $this->client->addParam($kparams, "entryId", $entryId); - $this->client->queueServiceActionCall("document_documents", "convertPptToSwf", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "string"); - return $resultObject; - } - - /** - * Serves the file content - * - * @param string $entryId Document entry id - * @param string $flavorAssetId Flavor asset id - * @param bool $forceProxy Force to get the content without redirect - * @return file - */ - function serve($entryId, $flavorAssetId = null, $forceProxy = false) - { - $kparams = array(); - $this->client->addParam($kparams, "entryId", $entryId); - $this->client->addParam($kparams, "flavorAssetId", $flavorAssetId); - $this->client->addParam($kparams, "forceProxy", $forceProxy); - $this->client->queueServiceActionCall("document_documents", "serve", $kparams); - if(!$this->client->getDestinationPath() && !$this->client->getReturnServedResult()) - return $this->client->getServeUrl(); - return $this->client->doQueue(); - } - - /** - * Serves the file content - * - * @param string $entryId Document entry id - * @param string $flavorParamsId Flavor params id - * @param bool $forceProxy Force to get the content without redirect - * @return file - */ - function serveByFlavorParamsId($entryId, $flavorParamsId = null, $forceProxy = false) - { - $kparams = array(); - $this->client->addParam($kparams, "entryId", $entryId); - $this->client->addParam($kparams, "flavorParamsId", $flavorParamsId); - $this->client->addParam($kparams, "forceProxy", $forceProxy); - $this->client->queueServiceActionCall("document_documents", "serveByFlavorParamsId", $kparams); - if(!$this->client->getDestinationPath() && !$this->client->getReturnServedResult()) - return $this->client->getServeUrl(); - return $this->client->doQueue(); - } - - /** - * Replace content associated with the given document entry. - * - * @param string $entryId Document entry id to update - * @param KalturaResource $resource Resource to be used to replace entry doc content - * @param int $conversionProfileId The conversion profile id to be used on the entry - * @return KalturaDocumentEntry - */ - function updateContent($entryId, KalturaResource $resource, $conversionProfileId = null) - { - $kparams = array(); - $this->client->addParam($kparams, "entryId", $entryId); - $this->client->addParam($kparams, "resource", $resource->toParams()); - $this->client->addParam($kparams, "conversionProfileId", $conversionProfileId); - $this->client->queueServiceActionCall("document_documents", "updateContent", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaDocumentEntry"); - return $resultObject; - } - - /** - * Approves document replacement - * - * @param string $entryId Document entry id to replace - * @return KalturaDocumentEntry - */ - function approveReplace($entryId) - { - $kparams = array(); - $this->client->addParam($kparams, "entryId", $entryId); - $this->client->queueServiceActionCall("document_documents", "approveReplace", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaDocumentEntry"); - return $resultObject; - } - - /** - * Cancels document replacement - * - * @param string $entryId Document entry id to cancel - * @return KalturaDocumentEntry - */ - function cancelReplace($entryId) - { - $kparams = array(); - $this->client->addParam($kparams, "entryId", $entryId); - $this->client->queueServiceActionCall("document_documents", "cancelReplace", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaDocumentEntry"); - return $resultObject; - } -} -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaDocumentClientPlugin extends KalturaClientPlugin -{ - /** - * @var KalturaDocumentsService - */ - public $documents = null; - - protected function __construct(KalturaClient $client) - { - parent::__construct($client); - $this->documents = new KalturaDocumentsService($client); - } - - /** - * @return KalturaDocumentClientPlugin - */ - public static function get(KalturaClient $client) - { - return new KalturaDocumentClientPlugin($client); - } - - /** - * @return array - */ - public function getServices() - { - $services = array( - 'documents' => $this->documents, - ); - return $services; - } - - /** - * @return string - */ - public function getName() - { - return 'document'; - } -} - diff --git a/local/kaltura/API/KalturaPlugins/KalturaDrmClientPlugin.php b/local/kaltura/API/KalturaPlugins/KalturaDrmClientPlugin.php deleted file mode 100644 index f4ed99398a7af..0000000000000 --- a/local/kaltura/API/KalturaPlugins/KalturaDrmClientPlugin.php +++ /dev/null @@ -1,434 +0,0 @@ -. -// -// @ignore -// =================================================================================================== - -/** - * @package Kaltura - * @subpackage Client - */ -require_once(dirname(__FILE__) . "/../KalturaClientBase.php"); -require_once(dirname(__FILE__) . "/../KalturaEnums.php"); -require_once(dirname(__FILE__) . "/../KalturaTypes.php"); - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaDrmProfileStatus -{ - const ACTIVE = 1; - const DELETED = 2; -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaDrmProfileOrderBy -{ - const ID_ASC = "+id"; - const NAME_ASC = "+name"; - const ID_DESC = "-id"; - const NAME_DESC = "-name"; -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaDrmProviderType -{ - const WIDEVINE = "widevine.WIDEVINE"; -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaDrmProfile extends KalturaObjectBase -{ - /** - * - * - * @var int - * @readonly - */ - public $id = null; - - /** - * - * - * @var int - * @insertonly - */ - public $partnerId = null; - - /** - * - * - * @var string - */ - public $name = null; - - /** - * - * - * @var string - */ - public $description = null; - - /** - * - * - * @var KalturaDrmProviderType - */ - public $provider = null; - - /** - * - * - * @var KalturaDrmProfileStatus - */ - public $status = null; - - /** - * - * - * @var string - */ - public $licenseServerUrl = null; - - /** - * - * - * @var string - */ - public $defaultPolicy = null; - - /** - * - * - * @var int - * @readonly - */ - public $createdAt = null; - - /** - * - * - * @var int - * @readonly - */ - public $updatedAt = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaDrmProfileListResponse extends KalturaObjectBase -{ - /** - * - * - * @var array of KalturaDrmProfile - * @readonly - */ - public $objects; - - /** - * - * - * @var int - * @readonly - */ - public $totalCount = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -abstract class KalturaDrmProfileBaseFilter extends KalturaFilter -{ - /** - * - * - * @var int - */ - public $idEqual = null; - - /** - * - * - * @var string - */ - public $idIn = null; - - /** - * - * - * @var int - */ - public $partnerIdEqual = null; - - /** - * - * - * @var string - */ - public $partnerIdIn = null; - - /** - * - * - * @var string - */ - public $nameLike = null; - - /** - * - * - * @var KalturaDrmProviderType - */ - public $providerEqual = null; - - /** - * - * - * @var string - */ - public $providerIn = null; - - /** - * - * - * @var KalturaDrmProfileStatus - */ - public $statusEqual = null; - - /** - * - * - * @var string - */ - public $statusIn = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaDrmProfileFilter extends KalturaDrmProfileBaseFilter -{ - -} - - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaDrmProfileService extends KalturaServiceBase -{ - function __construct(KalturaClient $client = null) - { - parent::__construct($client); - } - - /** - * Allows you to add a new DrmProfile object - * - * @param KalturaDrmProfile $drmProfile - * @return KalturaDrmProfile - */ - function add(KalturaDrmProfile $drmProfile) - { - $kparams = array(); - $this->client->addParam($kparams, "drmProfile", $drmProfile->toParams()); - $this->client->queueServiceActionCall("drm_drmprofile", "add", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaDrmProfile"); - return $resultObject; - } - - /** - * Retrieve a KalturaDrmProfile object by ID - * - * @param int $drmProfileId - * @return KalturaDrmProfile - */ - function get($drmProfileId) - { - $kparams = array(); - $this->client->addParam($kparams, "drmProfileId", $drmProfileId); - $this->client->queueServiceActionCall("drm_drmprofile", "get", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaDrmProfile"); - return $resultObject; - } - - /** - * Update an existing KalturaDrmProfile object - * - * @param int $drmProfileId - * @param KalturaDrmProfile $drmProfile Id - * @return KalturaDrmProfile - */ - function update($drmProfileId, KalturaDrmProfile $drmProfile) - { - $kparams = array(); - $this->client->addParam($kparams, "drmProfileId", $drmProfileId); - $this->client->addParam($kparams, "drmProfile", $drmProfile->toParams()); - $this->client->queueServiceActionCall("drm_drmprofile", "update", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaDrmProfile"); - return $resultObject; - } - - /** - * Mark the KalturaDrmProfile object as deleted - * - * @param int $drmProfileId - * @return KalturaDrmProfile - */ - function delete($drmProfileId) - { - $kparams = array(); - $this->client->addParam($kparams, "drmProfileId", $drmProfileId); - $this->client->queueServiceActionCall("drm_drmprofile", "delete", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaDrmProfile"); - return $resultObject; - } - - /** - * List KalturaDrmProfile objects - * - * @param KalturaDrmProfileFilter $filter - * @param KalturaFilterPager $pager - * @return KalturaDrmProfileListResponse - */ - function listAction(KalturaDrmProfileFilter $filter = null, KalturaFilterPager $pager = null) - { - $kparams = array(); - if ($filter !== null) - $this->client->addParam($kparams, "filter", $filter->toParams()); - if ($pager !== null) - $this->client->addParam($kparams, "pager", $pager->toParams()); - $this->client->queueServiceActionCall("drm_drmprofile", "list", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaDrmProfileListResponse"); - return $resultObject; - } - - /** - * Retrieve a KalturaDrmProfile object by provider, if no specific profile defined return default profile - * - * @param string $provider - * @return KalturaDrmProfile - */ - function getByProvider($provider) - { - $kparams = array(); - $this->client->addParam($kparams, "provider", $provider); - $this->client->queueServiceActionCall("drm_drmprofile", "getByProvider", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaDrmProfile"); - return $resultObject; - } -} -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaDrmClientPlugin extends KalturaClientPlugin -{ - /** - * @var KalturaDrmProfileService - */ - public $drmProfile = null; - - protected function __construct(KalturaClient $client) - { - parent::__construct($client); - $this->drmProfile = new KalturaDrmProfileService($client); - } - - /** - * @return KalturaDrmClientPlugin - */ - public static function get(KalturaClient $client) - { - return new KalturaDrmClientPlugin($client); - } - - /** - * @return array - */ - public function getServices() - { - $services = array( - 'drmProfile' => $this->drmProfile, - ); - return $services; - } - - /** - * @return string - */ - public function getName() - { - return 'drm'; - } -} - diff --git a/local/kaltura/API/KalturaPlugins/KalturaDropFolderClientPlugin.php b/local/kaltura/API/KalturaPlugins/KalturaDropFolderClientPlugin.php deleted file mode 100644 index 9abc8fc3db924..0000000000000 --- a/local/kaltura/API/KalturaPlugins/KalturaDropFolderClientPlugin.php +++ /dev/null @@ -1,1777 +0,0 @@ -. -// -// @ignore -// =================================================================================================== - -/** - * @package Kaltura - * @subpackage Client - */ -require_once(dirname(__FILE__) . "/../KalturaClientBase.php"); -require_once(dirname(__FILE__) . "/../KalturaEnums.php"); -require_once(dirname(__FILE__) . "/../KalturaTypes.php"); - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaDropFolderContentFileHandlerMatchPolicy -{ - const ADD_AS_NEW = 1; - const MATCH_EXISTING_OR_ADD_AS_NEW = 2; - const MATCH_EXISTING_OR_KEEP_IN_FOLDER = 3; -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaDropFolderFileDeletePolicy -{ - const MANUAL_DELETE = 1; - const AUTO_DELETE = 2; -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaDropFolderFileStatus -{ - const UPLOADING = 1; - const PENDING = 2; - const WAITING = 3; - const HANDLED = 4; - const IGNORE = 5; - const DELETED = 6; - const PURGED = 7; - const NO_MATCH = 8; - const ERROR_HANDLING = 9; - const ERROR_DELETING = 10; - const DOWNLOADING = 11; - const ERROR_DOWNLOADING = 12; - const PROCESSING = 13; - const PARSED = 14; - const DETECTED = 15; -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaDropFolderStatus -{ - const DISABLED = 0; - const ENABLED = 1; - const DELETED = 2; - const ERROR = 3; -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaDropFolderErrorCode -{ - const ERROR_CONNECT = "1"; - const ERROR_AUTENTICATE = "2"; - const ERROR_GET_PHISICAL_FILE_LIST = "3"; - const ERROR_GET_DB_FILE_LIST = "4"; - const DROP_FOLDER_APP_ERROR = "5"; - const CONTENT_MATCH_POLICY_UNDEFINED = "6"; -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaDropFolderFileErrorCode -{ - const ERROR_ADDING_BULK_UPLOAD = "dropFolderXmlBulkUpload.ERROR_ADDING_BULK_UPLOAD"; - const ERROR_ADD_CONTENT_RESOURCE = "dropFolderXmlBulkUpload.ERROR_ADD_CONTENT_RESOURCE"; - const ERROR_IN_BULK_UPLOAD = "dropFolderXmlBulkUpload.ERROR_IN_BULK_UPLOAD"; - const ERROR_WRITING_TEMP_FILE = "dropFolderXmlBulkUpload.ERROR_WRITING_TEMP_FILE"; - const LOCAL_FILE_WRONG_CHECKSUM = "dropFolderXmlBulkUpload.LOCAL_FILE_WRONG_CHECKSUM"; - const LOCAL_FILE_WRONG_SIZE = "dropFolderXmlBulkUpload.LOCAL_FILE_WRONG_SIZE"; - const MALFORMED_XML_FILE = "dropFolderXmlBulkUpload.MALFORMED_XML_FILE"; - const XML_FILE_SIZE_EXCEED_LIMIT = "dropFolderXmlBulkUpload.XML_FILE_SIZE_EXCEED_LIMIT"; - const ERROR_UPDATE_ENTRY = "1"; - const ERROR_ADD_ENTRY = "2"; - const FLAVOR_NOT_FOUND = "3"; - const FLAVOR_MISSING_IN_FILE_NAME = "4"; - const SLUG_REGEX_NO_MATCH = "5"; - const ERROR_READING_FILE = "6"; - const ERROR_DOWNLOADING_FILE = "7"; - const ERROR_UPDATE_FILE = "8"; - const ERROR_ADDING_CONTENT_PROCESSOR = "10"; - const ERROR_IN_CONTENT_PROCESSOR = "11"; - const ERROR_DELETING_FILE = "12"; - const FILE_NO_MATCH = "13"; -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaDropFolderFileHandlerType -{ - const XML = "dropFolderXmlBulkUpload.XML"; - const CONTENT = "1"; -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaDropFolderFileOrderBy -{ - const CREATED_AT_ASC = "+createdAt"; - const FILE_NAME_ASC = "+fileName"; - const FILE_SIZE_ASC = "+fileSize"; - const FILE_SIZE_LAST_SET_AT_ASC = "+fileSizeLastSetAt"; - const ID_ASC = "+id"; - const PARSED_FLAVOR_ASC = "+parsedFlavor"; - const PARSED_SLUG_ASC = "+parsedSlug"; - const UPDATED_AT_ASC = "+updatedAt"; - const CREATED_AT_DESC = "-createdAt"; - const FILE_NAME_DESC = "-fileName"; - const FILE_SIZE_DESC = "-fileSize"; - const FILE_SIZE_LAST_SET_AT_DESC = "-fileSizeLastSetAt"; - const ID_DESC = "-id"; - const PARSED_FLAVOR_DESC = "-parsedFlavor"; - const PARSED_SLUG_DESC = "-parsedSlug"; - const UPDATED_AT_DESC = "-updatedAt"; -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaDropFolderOrderBy -{ - const CREATED_AT_ASC = "+createdAt"; - const ID_ASC = "+id"; - const NAME_ASC = "+name"; - const UPDATED_AT_ASC = "+updatedAt"; - const CREATED_AT_DESC = "-createdAt"; - const ID_DESC = "-id"; - const NAME_DESC = "-name"; - const UPDATED_AT_DESC = "-updatedAt"; -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaDropFolderType -{ - const WEBEX = "WebexDropFolder.WEBEX"; - const LOCAL = "1"; - const FTP = "2"; - const SCP = "3"; - const SFTP = "4"; - const S3 = "6"; -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaFtpDropFolderOrderBy -{ - const CREATED_AT_ASC = "+createdAt"; - const ID_ASC = "+id"; - const NAME_ASC = "+name"; - const UPDATED_AT_ASC = "+updatedAt"; - const CREATED_AT_DESC = "-createdAt"; - const ID_DESC = "-id"; - const NAME_DESC = "-name"; - const UPDATED_AT_DESC = "-updatedAt"; -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaRemoteDropFolderOrderBy -{ - const CREATED_AT_ASC = "+createdAt"; - const ID_ASC = "+id"; - const NAME_ASC = "+name"; - const UPDATED_AT_ASC = "+updatedAt"; - const CREATED_AT_DESC = "-createdAt"; - const ID_DESC = "-id"; - const NAME_DESC = "-name"; - const UPDATED_AT_DESC = "-updatedAt"; -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaScpDropFolderOrderBy -{ - const CREATED_AT_ASC = "+createdAt"; - const ID_ASC = "+id"; - const NAME_ASC = "+name"; - const UPDATED_AT_ASC = "+updatedAt"; - const CREATED_AT_DESC = "-createdAt"; - const ID_DESC = "-id"; - const NAME_DESC = "-name"; - const UPDATED_AT_DESC = "-updatedAt"; -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaSftpDropFolderOrderBy -{ - const CREATED_AT_ASC = "+createdAt"; - const ID_ASC = "+id"; - const NAME_ASC = "+name"; - const UPDATED_AT_ASC = "+updatedAt"; - const CREATED_AT_DESC = "-createdAt"; - const ID_DESC = "-id"; - const NAME_DESC = "-name"; - const UPDATED_AT_DESC = "-updatedAt"; -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaSshDropFolderOrderBy -{ - const CREATED_AT_ASC = "+createdAt"; - const ID_ASC = "+id"; - const NAME_ASC = "+name"; - const UPDATED_AT_ASC = "+updatedAt"; - const CREATED_AT_DESC = "-createdAt"; - const ID_DESC = "-id"; - const NAME_DESC = "-name"; - const UPDATED_AT_DESC = "-updatedAt"; -} - -/** - * @package Kaltura - * @subpackage Client - */ -abstract class KalturaDropFolderFileHandlerConfig extends KalturaObjectBase -{ - /** - * - * - * @var KalturaDropFolderFileHandlerType - * @readonly - */ - public $handlerType = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaDropFolder extends KalturaObjectBase -{ - /** - * - * - * @var int - * @readonly - */ - public $id = null; - - /** - * - * - * @var int - * @insertonly - */ - public $partnerId = null; - - /** - * - * - * @var string - */ - public $name = null; - - /** - * - * - * @var string - */ - public $description = null; - - /** - * - * - * @var KalturaDropFolderType - */ - public $type = null; - - /** - * - * - * @var KalturaDropFolderStatus - */ - public $status = null; - - /** - * - * - * @var int - */ - public $conversionProfileId = null; - - /** - * - * - * @var int - */ - public $dc = null; - - /** - * - * - * @var string - */ - public $path = null; - - /** - * The ammount of time, in seconds, that should pass so that a file with no change in size we'll be treated as "finished uploading to folder" - * - * - * @var int - */ - public $fileSizeCheckInterval = null; - - /** - * - * - * @var KalturaDropFolderFileDeletePolicy - */ - public $fileDeletePolicy = null; - - /** - * - * - * @var int - */ - public $autoFileDeleteDays = null; - - /** - * - * - * @var KalturaDropFolderFileHandlerType - */ - public $fileHandlerType = null; - - /** - * - * - * @var string - */ - public $fileNamePatterns = null; - - /** - * - * - * @var KalturaDropFolderFileHandlerConfig - */ - public $fileHandlerConfig; - - /** - * - * - * @var string - */ - public $tags = null; - - /** - * - * - * @var KalturaDropFolderErrorCode - */ - public $errorCode = null; - - /** - * - * - * @var string - */ - public $errorDescription = null; - - /** - * - * - * @var string - */ - public $ignoreFileNamePatterns = null; - - /** - * - * - * @var int - * @readonly - */ - public $createdAt = null; - - /** - * - * - * @var int - * @readonly - */ - public $updatedAt = null; - - /** - * - * - * @var int - */ - public $lastAccessedAt = null; - - /** - * - * - * @var bool - */ - public $incremental = null; - - /** - * - * - * @var int - */ - public $lastFileTimestamp = null; - - /** - * - * - * @var int - */ - public $metadataProfileId = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaDropFolderFile extends KalturaObjectBase -{ - /** - * - * - * @var int - * @readonly - */ - public $id = null; - - /** - * - * - * @var int - * @readonly - */ - public $partnerId = null; - - /** - * - * - * @var int - * @insertonly - */ - public $dropFolderId = null; - - /** - * - * - * @var string - * @insertonly - */ - public $fileName = null; - - /** - * - * - * @var float - */ - public $fileSize = null; - - /** - * - * - * @var int - * @readonly - */ - public $fileSizeLastSetAt = null; - - /** - * - * - * @var KalturaDropFolderFileStatus - * @readonly - */ - public $status = null; - - /** - * - * - * @var KalturaDropFolderType - * @readonly - */ - public $type = null; - - /** - * - * - * @var string - */ - public $parsedSlug = null; - - /** - * - * - * @var string - */ - public $parsedFlavor = null; - - /** - * - * - * @var int - */ - public $leadDropFolderFileId = null; - - /** - * - * - * @var int - */ - public $deletedDropFolderFileId = null; - - /** - * - * - * @var string - */ - public $entryId = null; - - /** - * - * - * @var KalturaDropFolderFileErrorCode - */ - public $errorCode = null; - - /** - * - * - * @var string - */ - public $errorDescription = null; - - /** - * - * - * @var string - */ - public $lastModificationTime = null; - - /** - * - * - * @var int - * @readonly - */ - public $createdAt = null; - - /** - * - * - * @var int - * @readonly - */ - public $updatedAt = null; - - /** - * - * - * @var int - */ - public $uploadStartDetectedAt = null; - - /** - * - * - * @var int - */ - public $uploadEndDetectedAt = null; - - /** - * - * - * @var int - */ - public $importStartedAt = null; - - /** - * - * - * @var int - */ - public $importEndedAt = null; - - /** - * - * - * @var int - * @readonly - */ - public $batchJobId = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaDropFolderFileListResponse extends KalturaObjectBase -{ - /** - * - * - * @var array of KalturaDropFolderFile - * @readonly - */ - public $objects; - - /** - * - * - * @var int - * @readonly - */ - public $totalCount = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaDropFolderListResponse extends KalturaObjectBase -{ - /** - * - * - * @var array of KalturaDropFolder - * @readonly - */ - public $objects; - - /** - * - * - * @var int - * @readonly - */ - public $totalCount = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -abstract class KalturaDropFolderBaseFilter extends KalturaFilter -{ - /** - * - * - * @var int - */ - public $idEqual = null; - - /** - * - * - * @var string - */ - public $idIn = null; - - /** - * - * - * @var int - */ - public $partnerIdEqual = null; - - /** - * - * - * @var string - */ - public $partnerIdIn = null; - - /** - * - * - * @var string - */ - public $nameLike = null; - - /** - * - * - * @var KalturaDropFolderType - */ - public $typeEqual = null; - - /** - * - * - * @var string - */ - public $typeIn = null; - - /** - * - * - * @var KalturaDropFolderStatus - */ - public $statusEqual = null; - - /** - * - * - * @var string - */ - public $statusIn = null; - - /** - * - * - * @var int - */ - public $conversionProfileIdEqual = null; - - /** - * - * - * @var string - */ - public $conversionProfileIdIn = null; - - /** - * - * - * @var int - */ - public $dcEqual = null; - - /** - * - * - * @var string - */ - public $dcIn = null; - - /** - * - * - * @var string - */ - public $pathEqual = null; - - /** - * - * - * @var string - */ - public $pathLike = null; - - /** - * - * - * @var KalturaDropFolderFileHandlerType - */ - public $fileHandlerTypeEqual = null; - - /** - * - * - * @var string - */ - public $fileHandlerTypeIn = null; - - /** - * - * - * @var string - */ - public $fileNamePatternsLike = null; - - /** - * - * - * @var string - */ - public $fileNamePatternsMultiLikeOr = null; - - /** - * - * - * @var string - */ - public $fileNamePatternsMultiLikeAnd = null; - - /** - * - * - * @var string - */ - public $tagsLike = null; - - /** - * - * - * @var string - */ - public $tagsMultiLikeOr = null; - - /** - * - * - * @var string - */ - public $tagsMultiLikeAnd = null; - - /** - * - * - * @var KalturaDropFolderErrorCode - */ - public $errorCodeEqual = null; - - /** - * - * - * @var string - */ - public $errorCodeIn = null; - - /** - * - * - * @var int - */ - public $createdAtGreaterThanOrEqual = null; - - /** - * - * - * @var int - */ - public $createdAtLessThanOrEqual = null; - - /** - * - * - * @var int - */ - public $updatedAtGreaterThanOrEqual = null; - - /** - * - * - * @var int - */ - public $updatedAtLessThanOrEqual = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaDropFolderContentFileHandlerConfig extends KalturaDropFolderFileHandlerConfig -{ - /** - * - * - * @var KalturaDropFolderContentFileHandlerMatchPolicy - */ - public $contentMatchPolicy = null; - - /** - * Regular expression that defines valid file names to be handled. - * The following might be extracted from the file name and used if defined: - * - (?P\w+) - will be used as the drop folder file's parsed slug. - * - (?P\w+) - will be used as the drop folder file's parsed flavor. - * - * - * @var string - */ - public $slugRegex = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaDropFolderContentProcessorJobData extends KalturaJobData -{ - /** - * - * - * @var string - */ - public $dropFolderFileIds = null; - - /** - * - * - * @var string - */ - public $parsedSlug = null; - - /** - * - * - * @var KalturaDropFolderContentFileHandlerMatchPolicy - */ - public $contentMatchPolicy = null; - - /** - * - * - * @var int - */ - public $conversionProfileId = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -abstract class KalturaDropFolderFileBaseFilter extends KalturaFilter -{ - /** - * - * - * @var int - */ - public $idEqual = null; - - /** - * - * - * @var string - */ - public $idIn = null; - - /** - * - * - * @var int - */ - public $partnerIdEqual = null; - - /** - * - * - * @var string - */ - public $partnerIdIn = null; - - /** - * - * - * @var int - */ - public $dropFolderIdEqual = null; - - /** - * - * - * @var string - */ - public $dropFolderIdIn = null; - - /** - * - * - * @var string - */ - public $fileNameEqual = null; - - /** - * - * - * @var string - */ - public $fileNameIn = null; - - /** - * - * - * @var string - */ - public $fileNameLike = null; - - /** - * - * - * @var KalturaDropFolderFileStatus - */ - public $statusEqual = null; - - /** - * - * - * @var string - */ - public $statusIn = null; - - /** - * - * - * @var string - */ - public $statusNotIn = null; - - /** - * - * - * @var string - */ - public $parsedSlugEqual = null; - - /** - * - * - * @var string - */ - public $parsedSlugIn = null; - - /** - * - * - * @var string - */ - public $parsedSlugLike = null; - - /** - * - * - * @var string - */ - public $parsedFlavorEqual = null; - - /** - * - * - * @var string - */ - public $parsedFlavorIn = null; - - /** - * - * - * @var string - */ - public $parsedFlavorLike = null; - - /** - * - * - * @var int - */ - public $leadDropFolderFileIdEqual = null; - - /** - * - * - * @var int - */ - public $deletedDropFolderFileIdEqual = null; - - /** - * - * - * @var string - */ - public $entryIdEqual = null; - - /** - * - * - * @var KalturaDropFolderFileErrorCode - */ - public $errorCodeEqual = null; - - /** - * - * - * @var string - */ - public $errorCodeIn = null; - - /** - * - * - * @var int - */ - public $createdAtGreaterThanOrEqual = null; - - /** - * - * - * @var int - */ - public $createdAtLessThanOrEqual = null; - - /** - * - * - * @var int - */ - public $updatedAtGreaterThanOrEqual = null; - - /** - * - * - * @var int - */ - public $updatedAtLessThanOrEqual = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -abstract class KalturaRemoteDropFolder extends KalturaDropFolder -{ - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaDropFolderFileFilter extends KalturaDropFolderFileBaseFilter -{ - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaDropFolderFilter extends KalturaDropFolderBaseFilter -{ - /** - * - * - * @var KalturaNullableBoolean - */ - public $currentDc = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaFtpDropFolder extends KalturaRemoteDropFolder -{ - /** - * - * - * @var string - */ - public $host = null; - - /** - * - * - * @var int - */ - public $port = null; - - /** - * - * - * @var string - */ - public $username = null; - - /** - * - * - * @var string - */ - public $password = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -abstract class KalturaSshDropFolder extends KalturaRemoteDropFolder -{ - /** - * - * - * @var string - */ - public $host = null; - - /** - * - * - * @var int - */ - public $port = null; - - /** - * - * - * @var string - */ - public $username = null; - - /** - * - * - * @var string - */ - public $password = null; - - /** - * - * - * @var string - */ - public $privateKey = null; - - /** - * - * - * @var string - */ - public $publicKey = null; - - /** - * - * - * @var string - */ - public $passPhrase = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaDropFolderFileResource extends KalturaDataCenterContentResource -{ - /** - * Id of the drop folder file object - * - * - * @var int - */ - public $dropFolderFileId = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaDropFolderImportJobData extends KalturaSshImportJobData -{ - /** - * - * - * @var int - */ - public $dropFolderFileId = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -abstract class KalturaRemoteDropFolderBaseFilter extends KalturaDropFolderFilter -{ - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaScpDropFolder extends KalturaSshDropFolder -{ - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaSftpDropFolder extends KalturaSshDropFolder -{ - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaRemoteDropFolderFilter extends KalturaRemoteDropFolderBaseFilter -{ - -} - -/** - * @package Kaltura - * @subpackage Client - */ -abstract class KalturaFtpDropFolderBaseFilter extends KalturaRemoteDropFolderFilter -{ - -} - -/** - * @package Kaltura - * @subpackage Client - */ -abstract class KalturaSshDropFolderBaseFilter extends KalturaRemoteDropFolderFilter -{ - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaFtpDropFolderFilter extends KalturaFtpDropFolderBaseFilter -{ - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaSshDropFolderFilter extends KalturaSshDropFolderBaseFilter -{ - -} - -/** - * @package Kaltura - * @subpackage Client - */ -abstract class KalturaScpDropFolderBaseFilter extends KalturaSshDropFolderFilter -{ - -} - -/** - * @package Kaltura - * @subpackage Client - */ -abstract class KalturaSftpDropFolderBaseFilter extends KalturaSshDropFolderFilter -{ - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaScpDropFolderFilter extends KalturaScpDropFolderBaseFilter -{ - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaSftpDropFolderFilter extends KalturaSftpDropFolderBaseFilter -{ - -} - - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaDropFolderService extends KalturaServiceBase -{ - function __construct(KalturaClient $client = null) - { - parent::__construct($client); - } - - /** - * Allows you to add a new KalturaDropFolder object - * - * @param KalturaDropFolder $dropFolder - * @return KalturaDropFolder - */ - function add(KalturaDropFolder $dropFolder) - { - $kparams = array(); - $this->client->addParam($kparams, "dropFolder", $dropFolder->toParams()); - $this->client->queueServiceActionCall("dropfolder_dropfolder", "add", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaDropFolder"); - return $resultObject; - } - - /** - * Retrieve a KalturaDropFolder object by ID - * - * @param int $dropFolderId - * @return KalturaDropFolder - */ - function get($dropFolderId) - { - $kparams = array(); - $this->client->addParam($kparams, "dropFolderId", $dropFolderId); - $this->client->queueServiceActionCall("dropfolder_dropfolder", "get", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaDropFolder"); - return $resultObject; - } - - /** - * Update an existing KalturaDropFolder object - * - * @param int $dropFolderId - * @param KalturaDropFolder $dropFolder Id - * @return KalturaDropFolder - */ - function update($dropFolderId, KalturaDropFolder $dropFolder) - { - $kparams = array(); - $this->client->addParam($kparams, "dropFolderId", $dropFolderId); - $this->client->addParam($kparams, "dropFolder", $dropFolder->toParams()); - $this->client->queueServiceActionCall("dropfolder_dropfolder", "update", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaDropFolder"); - return $resultObject; - } - - /** - * Mark the KalturaDropFolder object as deleted - * - * @param int $dropFolderId - * @return KalturaDropFolder - */ - function delete($dropFolderId) - { - $kparams = array(); - $this->client->addParam($kparams, "dropFolderId", $dropFolderId); - $this->client->queueServiceActionCall("dropfolder_dropfolder", "delete", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaDropFolder"); - return $resultObject; - } - - /** - * List KalturaDropFolder objects - * - * @param KalturaDropFolderFilter $filter - * @param KalturaFilterPager $pager - * @return KalturaDropFolderListResponse - */ - function listAction(KalturaDropFolderFilter $filter = null, KalturaFilterPager $pager = null) - { - $kparams = array(); - if ($filter !== null) - $this->client->addParam($kparams, "filter", $filter->toParams()); - if ($pager !== null) - $this->client->addParam($kparams, "pager", $pager->toParams()); - $this->client->queueServiceActionCall("dropfolder_dropfolder", "list", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaDropFolderListResponse"); - return $resultObject; - } -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaDropFolderFileService extends KalturaServiceBase -{ - function __construct(KalturaClient $client = null) - { - parent::__construct($client); - } - - /** - * Allows you to add a new KalturaDropFolderFile object - * - * @param KalturaDropFolderFile $dropFolderFile - * @return KalturaDropFolderFile - */ - function add(KalturaDropFolderFile $dropFolderFile) - { - $kparams = array(); - $this->client->addParam($kparams, "dropFolderFile", $dropFolderFile->toParams()); - $this->client->queueServiceActionCall("dropfolder_dropfolderfile", "add", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaDropFolderFile"); - return $resultObject; - } - - /** - * Retrieve a KalturaDropFolderFile object by ID - * - * @param int $dropFolderFileId - * @return KalturaDropFolderFile - */ - function get($dropFolderFileId) - { - $kparams = array(); - $this->client->addParam($kparams, "dropFolderFileId", $dropFolderFileId); - $this->client->queueServiceActionCall("dropfolder_dropfolderfile", "get", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaDropFolderFile"); - return $resultObject; - } - - /** - * Update an existing KalturaDropFolderFile object - * - * @param int $dropFolderFileId - * @param KalturaDropFolderFile $dropFolderFile Id - * @return KalturaDropFolderFile - */ - function update($dropFolderFileId, KalturaDropFolderFile $dropFolderFile) - { - $kparams = array(); - $this->client->addParam($kparams, "dropFolderFileId", $dropFolderFileId); - $this->client->addParam($kparams, "dropFolderFile", $dropFolderFile->toParams()); - $this->client->queueServiceActionCall("dropfolder_dropfolderfile", "update", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaDropFolderFile"); - return $resultObject; - } - - /** - * Update status of KalturaDropFolderFile - * - * @param int $dropFolderFileId - * @param int $status - * @return KalturaDropFolderFile - */ - function updateStatus($dropFolderFileId, $status) - { - $kparams = array(); - $this->client->addParam($kparams, "dropFolderFileId", $dropFolderFileId); - $this->client->addParam($kparams, "status", $status); - $this->client->queueServiceActionCall("dropfolder_dropfolderfile", "updateStatus", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaDropFolderFile"); - return $resultObject; - } - - /** - * Mark the KalturaDropFolderFile object as deleted - * - * @param int $dropFolderFileId - * @return KalturaDropFolderFile - */ - function delete($dropFolderFileId) - { - $kparams = array(); - $this->client->addParam($kparams, "dropFolderFileId", $dropFolderFileId); - $this->client->queueServiceActionCall("dropfolder_dropfolderfile", "delete", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaDropFolderFile"); - return $resultObject; - } - - /** - * List KalturaDropFolderFile objects - * - * @param KalturaDropFolderFileFilter $filter - * @param KalturaFilterPager $pager - * @return KalturaDropFolderFileListResponse - */ - function listAction(KalturaDropFolderFileFilter $filter = null, KalturaFilterPager $pager = null) - { - $kparams = array(); - if ($filter !== null) - $this->client->addParam($kparams, "filter", $filter->toParams()); - if ($pager !== null) - $this->client->addParam($kparams, "pager", $pager->toParams()); - $this->client->queueServiceActionCall("dropfolder_dropfolderfile", "list", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaDropFolderFileListResponse"); - return $resultObject; - } - - /** - * Set the KalturaDropFolderFile status to ignore (KalturaDropFolderFileStatus::IGNORE) - * - * @param int $dropFolderFileId - * @return KalturaDropFolderFile - */ - function ignore($dropFolderFileId) - { - $kparams = array(); - $this->client->addParam($kparams, "dropFolderFileId", $dropFolderFileId); - $this->client->queueServiceActionCall("dropfolder_dropfolderfile", "ignore", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaDropFolderFile"); - return $resultObject; - } -} -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaDropFolderClientPlugin extends KalturaClientPlugin -{ - /** - * @var KalturaDropFolderService - */ - public $dropFolder = null; - - /** - * @var KalturaDropFolderFileService - */ - public $dropFolderFile = null; - - protected function __construct(KalturaClient $client) - { - parent::__construct($client); - $this->dropFolder = new KalturaDropFolderService($client); - $this->dropFolderFile = new KalturaDropFolderFileService($client); - } - - /** - * @return KalturaDropFolderClientPlugin - */ - public static function get(KalturaClient $client) - { - return new KalturaDropFolderClientPlugin($client); - } - - /** - * @return array - */ - public function getServices() - { - $services = array( - 'dropFolder' => $this->dropFolder, - 'dropFolderFile' => $this->dropFolderFile, - ); - return $services; - } - - /** - * @return string - */ - public function getName() - { - return 'dropFolder'; - } -} - diff --git a/local/kaltura/API/KalturaPlugins/KalturaDropFolderXmlBulkUploadClientPlugin.php b/local/kaltura/API/KalturaPlugins/KalturaDropFolderXmlBulkUploadClientPlugin.php deleted file mode 100644 index 9388b3cbb7a11..0000000000000 --- a/local/kaltura/API/KalturaPlugins/KalturaDropFolderXmlBulkUploadClientPlugin.php +++ /dev/null @@ -1,86 +0,0 @@ -. -// -// @ignore -// =================================================================================================== - -/** - * @package Kaltura - * @subpackage Client - */ -require_once(dirname(__FILE__) . "/../KalturaClientBase.php"); -require_once(dirname(__FILE__) . "/../KalturaEnums.php"); -require_once(dirname(__FILE__) . "/../KalturaTypes.php"); -require_once(dirname(__FILE__) . "/KalturaBulkUploadXmlClientPlugin.php"); -require_once(dirname(__FILE__) . "/KalturaDropFolderClientPlugin.php"); - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaDropFolderXmlBulkUploadFileHandlerConfig extends KalturaDropFolderFileHandlerConfig -{ - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaDropFolderXmlBulkUploadClientPlugin extends KalturaClientPlugin -{ - protected function __construct(KalturaClient $client) - { - parent::__construct($client); - } - - /** - * @return KalturaDropFolderXmlBulkUploadClientPlugin - */ - public static function get(KalturaClient $client) - { - return new KalturaDropFolderXmlBulkUploadClientPlugin($client); - } - - /** - * @return array - */ - public function getServices() - { - $services = array( - ); - return $services; - } - - /** - * @return string - */ - public function getName() - { - return 'dropFolderXmlBulkUpload'; - } -} - diff --git a/local/kaltura/API/KalturaPlugins/KalturaEmailNotificationClientPlugin.php b/local/kaltura/API/KalturaPlugins/KalturaEmailNotificationClientPlugin.php deleted file mode 100644 index 657a3fd4643c4..0000000000000 --- a/local/kaltura/API/KalturaPlugins/KalturaEmailNotificationClientPlugin.php +++ /dev/null @@ -1,630 +0,0 @@ -. -// -// @ignore -// =================================================================================================== - -/** - * @package Kaltura - * @subpackage Client - */ -require_once(dirname(__FILE__) . "/../KalturaClientBase.php"); -require_once(dirname(__FILE__) . "/../KalturaEnums.php"); -require_once(dirname(__FILE__) . "/../KalturaTypes.php"); -require_once(dirname(__FILE__) . "/KalturaEventNotificationClientPlugin.php"); - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaEmailNotificationTemplatePriority -{ - const HIGH = 1; - const NORMAL = 3; - const LOW = 5; -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaEmailNotificationFormat -{ - const HTML = "1"; - const TEXT = "2"; -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaEmailNotificationRecipientProviderType -{ - const STATIC_LIST = "1"; - const CATEGORY = "2"; - const USER = "3"; -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaEmailNotificationTemplateOrderBy -{ - const CREATED_AT_ASC = "+createdAt"; - const ID_ASC = "+id"; - const UPDATED_AT_ASC = "+updatedAt"; - const CREATED_AT_DESC = "-createdAt"; - const ID_DESC = "-id"; - const UPDATED_AT_DESC = "-updatedAt"; -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaEmailNotificationRecipient extends KalturaObjectBase -{ - /** - * Recipient e-mail address - * - * - * @var KalturaStringValue - */ - public $email; - - /** - * Recipient name - * - * - * @var KalturaStringValue - */ - public $name; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -abstract class KalturaEmailNotificationRecipientJobData extends KalturaObjectBase -{ - /** - * Provider type of the job data. - * - * - * @var KalturaEmailNotificationRecipientProviderType - * @readonly - */ - public $providerType = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -abstract class KalturaEmailNotificationRecipientProvider extends KalturaObjectBase -{ - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaCategoryUserProviderFilter extends KalturaFilter -{ - /** - * - * - * @var string - */ - public $userIdEqual = null; - - /** - * - * - * @var string - */ - public $userIdIn = null; - - /** - * - * - * @var KalturaCategoryUserStatus - */ - public $statusEqual = null; - - /** - * - * - * @var string - */ - public $statusIn = null; - - /** - * - * - * @var int - */ - public $createdAtGreaterThanOrEqual = null; - - /** - * - * - * @var int - */ - public $createdAtLessThanOrEqual = null; - - /** - * - * - * @var int - */ - public $updatedAtGreaterThanOrEqual = null; - - /** - * - * - * @var int - */ - public $updatedAtLessThanOrEqual = null; - - /** - * - * - * @var KalturaUpdateMethodType - */ - public $updateMethodEqual = null; - - /** - * - * - * @var string - */ - public $updateMethodIn = null; - - /** - * - * - * @var string - */ - public $permissionNamesMatchAnd = null; - - /** - * - * - * @var string - */ - public $permissionNamesMatchOr = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaEmailNotificationCategoryRecipientJobData extends KalturaEmailNotificationRecipientJobData -{ - /** - * - * - * @var KalturaCategoryUserFilter - */ - public $categoryUserFilter; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaEmailNotificationCategoryRecipientProvider extends KalturaEmailNotificationRecipientProvider -{ - /** - * The ID of the category whose subscribers should receive the email notification. - * - * - * @var KalturaStringValue - */ - public $categoryId; - - /** - * - * - * @var KalturaCategoryUserProviderFilter - */ - public $categoryUserFilter; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaEmailNotificationParameter extends KalturaEventNotificationParameter -{ - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaEmailNotificationStaticRecipientJobData extends KalturaEmailNotificationRecipientJobData -{ - /** - * Email to emails and names - * - * - * @var array of KalturaKeyValue - */ - public $emailRecipients; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaEmailNotificationStaticRecipientProvider extends KalturaEmailNotificationRecipientProvider -{ - /** - * Email to emails and names - * - * - * @var array of KalturaEmailNotificationRecipient - */ - public $emailRecipients; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaEmailNotificationTemplate extends KalturaEventNotificationTemplate -{ - /** - * Define the email body format - * - * - * @var KalturaEmailNotificationFormat - */ - public $format = null; - - /** - * Define the email subject - * - * - * @var string - */ - public $subject = null; - - /** - * Define the email body content - * - * - * @var string - */ - public $body = null; - - /** - * Define the email sender email - * - * - * @var string - */ - public $fromEmail = null; - - /** - * Define the email sender name - * - * - * @var string - */ - public $fromName = null; - - /** - * Email recipient emails and names - * - * - * @var KalturaEmailNotificationRecipientProvider - */ - public $to; - - /** - * Email recipient emails and names - * - * - * @var KalturaEmailNotificationRecipientProvider - */ - public $cc; - - /** - * Email recipient emails and names - * - * - * @var KalturaEmailNotificationRecipientProvider - */ - public $bcc; - - /** - * Default email addresses to whom the reply should be sent. - * - * - * @var KalturaEmailNotificationRecipientProvider - */ - public $replyTo; - - /** - * Define the email priority - * - * - * @var KalturaEmailNotificationTemplatePriority - */ - public $priority = null; - - /** - * Email address that a reading confirmation will be sent - * - * - * @var string - */ - public $confirmReadingTo = null; - - /** - * Hostname to use in Message-Id and Received headers and as default HELLO string. - * If empty, the value returned by SERVER_NAME is used or 'localhost.localdomain'. - * - * - * @var string - */ - public $hostname = null; - - /** - * Sets the message ID to be used in the Message-Id header. - * If empty, a unique id will be generated. - * - * - * @var string - */ - public $messageID = null; - - /** - * Adds a e-mail custom header - * - * - * @var array of KalturaKeyValue - */ - public $customHeaders; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaEmailNotificationUserRecipientJobData extends KalturaEmailNotificationRecipientJobData -{ - /** - * - * - * @var KalturaUserFilter - */ - public $filter; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaEmailNotificationUserRecipientProvider extends KalturaEmailNotificationRecipientProvider -{ - /** - * - * - * @var KalturaUserFilter - */ - public $filter; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaEmailNotificationDispatchJobData extends KalturaEventNotificationDispatchJobData -{ - /** - * Define the email sender email - * - * - * @var string - */ - public $fromEmail = null; - - /** - * Define the email sender name - * - * - * @var string - */ - public $fromName = null; - - /** - * Email recipient emails and names, key is mail address and value is the name - * - * - * @var KalturaEmailNotificationRecipientJobData - */ - public $to; - - /** - * Email cc emails and names, key is mail address and value is the name - * - * - * @var KalturaEmailNotificationRecipientJobData - */ - public $cc; - - /** - * Email bcc emails and names, key is mail address and value is the name - * - * - * @var KalturaEmailNotificationRecipientJobData - */ - public $bcc; - - /** - * Email addresses that a replies should be sent to, key is mail address and value is the name - * - * - * @var KalturaEmailNotificationRecipientJobData - */ - public $replyTo; - - /** - * Define the email priority - * - * - * @var KalturaEmailNotificationTemplatePriority - */ - public $priority = null; - - /** - * Email address that a reading confirmation will be sent to - * - * - * @var string - */ - public $confirmReadingTo = null; - - /** - * Hostname to use in Message-Id and Received headers and as default HELO string. - * If empty, the value returned by SERVER_NAME is used or 'localhost.localdomain'. - * - * - * @var string - */ - public $hostname = null; - - /** - * Sets the message ID to be used in the Message-Id header. - * If empty, a unique id will be generated. - * - * - * @var string - */ - public $messageID = null; - - /** - * Adds a e-mail custom header - * - * - * @var array of KalturaKeyValue - */ - public $customHeaders; - - /** - * Define the content dynamic parameters - * - * - * @var array of KalturaKeyValue - */ - public $contentParameters; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -abstract class KalturaEmailNotificationTemplateBaseFilter extends KalturaEventNotificationTemplateFilter -{ - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaEmailNotificationTemplateFilter extends KalturaEmailNotificationTemplateBaseFilter -{ - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaEmailNotificationClientPlugin extends KalturaClientPlugin -{ - protected function __construct(KalturaClient $client) - { - parent::__construct($client); - } - - /** - * @return KalturaEmailNotificationClientPlugin - */ - public static function get(KalturaClient $client) - { - return new KalturaEmailNotificationClientPlugin($client); - } - - /** - * @return array - */ - public function getServices() - { - $services = array( - ); - return $services; - } - - /** - * @return string - */ - public function getName() - { - return 'emailNotification'; - } -} - diff --git a/local/kaltura/API/KalturaPlugins/KalturaEventNotificationClientPlugin.php b/local/kaltura/API/KalturaPlugins/KalturaEventNotificationClientPlugin.php deleted file mode 100644 index 87ebdd44cb3b0..0000000000000 --- a/local/kaltura/API/KalturaPlugins/KalturaEventNotificationClientPlugin.php +++ /dev/null @@ -1,790 +0,0 @@ -. -// -// @ignore -// =================================================================================================== - -/** - * @package Kaltura - * @subpackage Client - */ -require_once(dirname(__FILE__) . "/../KalturaClientBase.php"); -require_once(dirname(__FILE__) . "/../KalturaEnums.php"); -require_once(dirname(__FILE__) . "/../KalturaTypes.php"); - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaEventNotificationTemplateStatus -{ - const DISABLED = 1; - const ACTIVE = 2; - const DELETED = 3; -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaEventNotificationEventObjectType -{ - const AD_CUE_POINT = "adCuePointEventNotifications.AdCuePoint"; - const ANNOTATION = "annotationEventNotifications.Annotation"; - const CAPTION_ASSET = "captionAssetEventNotifications.CaptionAsset"; - const CODE_CUE_POINT = "codeCuePointEventNotifications.CodeCuePoint"; - const DISTRIBUTION_PROFILE = "contentDistributionEventNotifications.DistributionProfile"; - const ENTRY_DISTRIBUTION = "contentDistributionEventNotifications.EntryDistribution"; - const CUE_POINT = "cuePointEventNotifications.CuePoint"; - const METADATA = "metadataEventNotifications.Metadata"; - const ENTRY = "1"; - const CATEGORY = "2"; - const ASSET = "3"; - const FLAVORASSET = "4"; - const THUMBASSET = "5"; - const KUSER = "8"; - const ACCESSCONTROL = "9"; - const BATCHJOB = "10"; - const BULKUPLOADRESULT = "11"; - const CATEGORYKUSER = "12"; - const CONVERSIONPROFILE2 = "14"; - const FLAVORPARAMS = "15"; - const FLAVORPARAMSCONVERSIONPROFILE = "16"; - const FLAVORPARAMSOUTPUT = "17"; - const GENERICSYNDICATIONFEED = "18"; - const KUSERTOUSERROLE = "19"; - const PARTNER = "20"; - const PERMISSION = "21"; - const PERMISSIONITEM = "22"; - const PERMISSIONTOPERMISSIONITEM = "23"; - const SCHEDULER = "24"; - const SCHEDULERCONFIG = "25"; - const SCHEDULERSTATUS = "26"; - const SCHEDULERWORKER = "27"; - const STORAGEPROFILE = "28"; - const SYNDICATIONFEED = "29"; - const THUMBPARAMS = "31"; - const THUMBPARAMSOUTPUT = "32"; - const UPLOADTOKEN = "33"; - const USERLOGINDATA = "34"; - const USERROLE = "35"; - const WIDGET = "36"; - const CATEGORYENTRY = "37"; -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaEventNotificationEventType -{ - const BATCH_JOB_STATUS = "1"; - const OBJECT_ADDED = "2"; - const OBJECT_CHANGED = "3"; - const OBJECT_COPIED = "4"; - const OBJECT_CREATED = "5"; - const OBJECT_DATA_CHANGED = "6"; - const OBJECT_DELETED = "7"; - const OBJECT_ERASED = "8"; - const OBJECT_READY_FOR_REPLACMENT = "9"; - const OBJECT_SAVED = "10"; - const OBJECT_UPDATED = "11"; - const OBJECT_REPLACED = "12"; -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaEventNotificationTemplateOrderBy -{ - const CREATED_AT_ASC = "+createdAt"; - const ID_ASC = "+id"; - const UPDATED_AT_ASC = "+updatedAt"; - const CREATED_AT_DESC = "-createdAt"; - const ID_DESC = "-id"; - const UPDATED_AT_DESC = "-updatedAt"; -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaEventNotificationTemplateType -{ - const EMAIL = "emailNotification.Email"; - const HTTP = "httpNotification.Http"; -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaEventNotificationParameter extends KalturaObjectBase -{ - /** - * The key in the subject and body to be replaced with the dynamic value - * - * - * @var string - */ - public $key = null; - - /** - * - * - * @var string - */ - public $description = null; - - /** - * The dynamic value to be placed in the final output - * - * - * @var KalturaStringValue - */ - public $value; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaEventNotificationTemplate extends KalturaObjectBase -{ - /** - * - * - * @var int - * @readonly - */ - public $id = null; - - /** - * - * - * @var int - * @readonly - */ - public $partnerId = null; - - /** - * - * - * @var string - */ - public $name = null; - - /** - * - * - * @var string - */ - public $systemName = null; - - /** - * - * - * @var string - */ - public $description = null; - - /** - * - * - * @var KalturaEventNotificationTemplateType - * @insertonly - */ - public $type = null; - - /** - * - * - * @var KalturaEventNotificationTemplateStatus - * @readonly - */ - public $status = null; - - /** - * - * - * @var int - * @readonly - */ - public $createdAt = null; - - /** - * - * - * @var int - * @readonly - */ - public $updatedAt = null; - - /** - * Define that the template could be dispatched manually from the API - * - * - * @var bool - */ - public $manualDispatchEnabled = null; - - /** - * Define that the template could be dispatched automatically by the system - * - * - * @var bool - */ - public $automaticDispatchEnabled = null; - - /** - * Define the event that should trigger this notification - * - * - * @var KalturaEventNotificationEventType - */ - public $eventType = null; - - /** - * Define the object that raied the event that should trigger this notification - * - * - * @var KalturaEventNotificationEventObjectType - */ - public $eventObjectType = null; - - /** - * Define the conditions that cause this notification to be triggered - * - * - * @var array of KalturaCondition - */ - public $eventConditions; - - /** - * Define the content dynamic parameters - * - * - * @var array of KalturaEventNotificationParameter - */ - public $contentParameters; - - /** - * Define the content dynamic parameters - * - * - * @var array of KalturaEventNotificationParameter - */ - public $userParameters; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaEventNotificationTemplateListResponse extends KalturaObjectBase -{ - /** - * - * - * @var array of KalturaEventNotificationTemplate - * @readonly - */ - public $objects; - - /** - * - * - * @var int - * @readonly - */ - public $totalCount = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaEventFieldCondition extends KalturaCondition -{ - /** - * The field to be evaluated at runtime - * - * - * @var KalturaBooleanField - */ - public $field; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaEventNotificationArrayParameter extends KalturaEventNotificationParameter -{ - /** - * - * - * @var array of KalturaString - */ - public $values; - - /** - * Used to restrict the values to close list - * - * - * @var array of KalturaStringValue - */ - public $allowedValues; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaEventNotificationDispatchJobData extends KalturaJobData -{ - /** - * - * - * @var int - */ - public $templateId = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -abstract class KalturaEventNotificationTemplateBaseFilter extends KalturaFilter -{ - /** - * - * - * @var int - */ - public $idEqual = null; - - /** - * - * - * @var string - */ - public $idIn = null; - - /** - * - * - * @var int - */ - public $partnerIdEqual = null; - - /** - * - * - * @var string - */ - public $partnerIdIn = null; - - /** - * - * - * @var string - */ - public $systemNameEqual = null; - - /** - * - * - * @var string - */ - public $systemNameIn = null; - - /** - * - * - * @var KalturaEventNotificationTemplateType - */ - public $typeEqual = null; - - /** - * - * - * @var string - */ - public $typeIn = null; - - /** - * - * - * @var KalturaEventNotificationTemplateStatus - */ - public $statusEqual = null; - - /** - * - * - * @var string - */ - public $statusIn = null; - - /** - * - * - * @var int - */ - public $createdAtGreaterThanOrEqual = null; - - /** - * - * - * @var int - */ - public $createdAtLessThanOrEqual = null; - - /** - * - * - * @var int - */ - public $updatedAtGreaterThanOrEqual = null; - - /** - * - * - * @var int - */ - public $updatedAtLessThanOrEqual = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaEventObjectChangedCondition extends KalturaCondition -{ - /** - * Comma seperated column names to be tested - * - * - * @var string - */ - public $modifiedColumns = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaEventNotificationTemplateFilter extends KalturaEventNotificationTemplateBaseFilter -{ - -} - - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaEventNotificationTemplateService extends KalturaServiceBase -{ - function __construct(KalturaClient $client = null) - { - parent::__construct($client); - } - - /** - * Allows you to add a new event notification template object - * - * @param KalturaEventNotificationTemplate $eventNotificationTemplate - * @return KalturaEventNotificationTemplate - */ - function add(KalturaEventNotificationTemplate $eventNotificationTemplate) - { - $kparams = array(); - $this->client->addParam($kparams, "eventNotificationTemplate", $eventNotificationTemplate->toParams()); - $this->client->queueServiceActionCall("eventnotification_eventnotificationtemplate", "add", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaEventNotificationTemplate"); - return $resultObject; - } - - /** - * Allows you to clone exiting event notification template object and create a new one with similar configuration - * - * @param int $id Source template to clone - * @param KalturaEventNotificationTemplate $eventNotificationTemplate Overwrite configuration object - * @return KalturaEventNotificationTemplate - */ - function cloneAction($id, KalturaEventNotificationTemplate $eventNotificationTemplate = null) - { - $kparams = array(); - $this->client->addParam($kparams, "id", $id); - if ($eventNotificationTemplate !== null) - $this->client->addParam($kparams, "eventNotificationTemplate", $eventNotificationTemplate->toParams()); - $this->client->queueServiceActionCall("eventnotification_eventnotificationtemplate", "clone", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaEventNotificationTemplate"); - return $resultObject; - } - - /** - * Retrieve an event notification template object by id - * - * @param int $id - * @return KalturaEventNotificationTemplate - */ - function get($id) - { - $kparams = array(); - $this->client->addParam($kparams, "id", $id); - $this->client->queueServiceActionCall("eventnotification_eventnotificationtemplate", "get", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaEventNotificationTemplate"); - return $resultObject; - } - - /** - * Update an existing event notification template object - * - * @param int $id - * @param KalturaEventNotificationTemplate $eventNotificationTemplate - * @return KalturaEventNotificationTemplate - */ - function update($id, KalturaEventNotificationTemplate $eventNotificationTemplate) - { - $kparams = array(); - $this->client->addParam($kparams, "id", $id); - $this->client->addParam($kparams, "eventNotificationTemplate", $eventNotificationTemplate->toParams()); - $this->client->queueServiceActionCall("eventnotification_eventnotificationtemplate", "update", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaEventNotificationTemplate"); - return $resultObject; - } - - /** - * Update event notification template status by id - * - * @param int $id - * @param int $status - * @return KalturaEventNotificationTemplate - */ - function updateStatus($id, $status) - { - $kparams = array(); - $this->client->addParam($kparams, "id", $id); - $this->client->addParam($kparams, "status", $status); - $this->client->queueServiceActionCall("eventnotification_eventnotificationtemplate", "updateStatus", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaEventNotificationTemplate"); - return $resultObject; - } - - /** - * Delete an event notification template object - * - * @param int $id - * @return - */ - function delete($id) - { - $kparams = array(); - $this->client->addParam($kparams, "id", $id); - $this->client->queueServiceActionCall("eventnotification_eventnotificationtemplate", "delete", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "null"); - return $resultObject; - } - - /** - * List event notification template objects - * - * @param KalturaEventNotificationTemplateFilter $filter - * @param KalturaFilterPager $pager - * @return KalturaEventNotificationTemplateListResponse - */ - function listAction(KalturaEventNotificationTemplateFilter $filter = null, KalturaFilterPager $pager = null) - { - $kparams = array(); - if ($filter !== null) - $this->client->addParam($kparams, "filter", $filter->toParams()); - if ($pager !== null) - $this->client->addParam($kparams, "pager", $pager->toParams()); - $this->client->queueServiceActionCall("eventnotification_eventnotificationtemplate", "list", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaEventNotificationTemplateListResponse"); - return $resultObject; - } - - /** - * - * - * @param KalturaPartnerFilter $filter - * @param KalturaFilterPager $pager - * @return KalturaEventNotificationTemplateListResponse - */ - function listByPartner(KalturaPartnerFilter $filter = null, KalturaFilterPager $pager = null) - { - $kparams = array(); - if ($filter !== null) - $this->client->addParam($kparams, "filter", $filter->toParams()); - if ($pager !== null) - $this->client->addParam($kparams, "pager", $pager->toParams()); - $this->client->queueServiceActionCall("eventnotification_eventnotificationtemplate", "listByPartner", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaEventNotificationTemplateListResponse"); - return $resultObject; - } - - /** - * Dispatch event notification object by id - * - * @param int $id - * @param KalturaEventNotificationDispatchJobData $data - * @return int - */ - function dispatch($id, KalturaEventNotificationDispatchJobData $data) - { - $kparams = array(); - $this->client->addParam($kparams, "id", $id); - $this->client->addParam($kparams, "data", $data->toParams()); - $this->client->queueServiceActionCall("eventnotification_eventnotificationtemplate", "dispatch", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "integer"); - return $resultObject; - } - - /** - * Action lists the template partner event notification templates. - * - * @param KalturaEventNotificationTemplateFilter $filter - * @param KalturaFilterPager $pager - * @return KalturaEventNotificationTemplateListResponse - */ - function listTemplates(KalturaEventNotificationTemplateFilter $filter = null, KalturaFilterPager $pager = null) - { - $kparams = array(); - if ($filter !== null) - $this->client->addParam($kparams, "filter", $filter->toParams()); - if ($pager !== null) - $this->client->addParam($kparams, "pager", $pager->toParams()); - $this->client->queueServiceActionCall("eventnotification_eventnotificationtemplate", "listTemplates", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaEventNotificationTemplateListResponse"); - return $resultObject; - } -} -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaEventNotificationClientPlugin extends KalturaClientPlugin -{ - /** - * @var KalturaEventNotificationTemplateService - */ - public $eventNotificationTemplate = null; - - protected function __construct(KalturaClient $client) - { - parent::__construct($client); - $this->eventNotificationTemplate = new KalturaEventNotificationTemplateService($client); - } - - /** - * @return KalturaEventNotificationClientPlugin - */ - public static function get(KalturaClient $client) - { - return new KalturaEventNotificationClientPlugin($client); - } - - /** - * @return array - */ - public function getServices() - { - $services = array( - 'eventNotificationTemplate' => $this->eventNotificationTemplate, - ); - return $services; - } - - /** - * @return string - */ - public function getName() - { - return 'eventNotification'; - } -} - diff --git a/local/kaltura/API/KalturaPlugins/KalturaExternalMediaClientPlugin.php b/local/kaltura/API/KalturaPlugins/KalturaExternalMediaClientPlugin.php deleted file mode 100644 index 275d567fe6e93..0000000000000 --- a/local/kaltura/API/KalturaPlugins/KalturaExternalMediaClientPlugin.php +++ /dev/null @@ -1,363 +0,0 @@ -. -// -// @ignore -// =================================================================================================== - -/** - * @package Kaltura - * @subpackage Client - */ -require_once(dirname(__FILE__) . "/../KalturaClientBase.php"); -require_once(dirname(__FILE__) . "/../KalturaEnums.php"); -require_once(dirname(__FILE__) . "/../KalturaTypes.php"); - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaExternalMediaEntryOrderBy -{ - const CREATED_AT_ASC = "+createdAt"; - const DURATION_ASC = "+duration"; - const END_DATE_ASC = "+endDate"; - const LAST_PLAYED_AT_ASC = "+lastPlayedAt"; - const MEDIA_TYPE_ASC = "+mediaType"; - const MODERATION_COUNT_ASC = "+moderationCount"; - const NAME_ASC = "+name"; - const PARTNER_SORT_VALUE_ASC = "+partnerSortValue"; - const PLAYS_ASC = "+plays"; - const RANK_ASC = "+rank"; - const RECENT_ASC = "+recent"; - const START_DATE_ASC = "+startDate"; - const TOTAL_RANK_ASC = "+totalRank"; - const UPDATED_AT_ASC = "+updatedAt"; - const VIEWS_ASC = "+views"; - const WEIGHT_ASC = "+weight"; - const CREATED_AT_DESC = "-createdAt"; - const DURATION_DESC = "-duration"; - const END_DATE_DESC = "-endDate"; - const LAST_PLAYED_AT_DESC = "-lastPlayedAt"; - const MEDIA_TYPE_DESC = "-mediaType"; - const MODERATION_COUNT_DESC = "-moderationCount"; - const NAME_DESC = "-name"; - const PARTNER_SORT_VALUE_DESC = "-partnerSortValue"; - const PLAYS_DESC = "-plays"; - const RANK_DESC = "-rank"; - const RECENT_DESC = "-recent"; - const START_DATE_DESC = "-startDate"; - const TOTAL_RANK_DESC = "-totalRank"; - const UPDATED_AT_DESC = "-updatedAt"; - const VIEWS_DESC = "-views"; - const WEIGHT_DESC = "-weight"; -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaExternalMediaSourceType -{ - const INTERCALL = "InterCall"; - const YOUTUBE = "YouTube"; -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaExternalMediaEntry extends KalturaMediaEntry -{ - /** - * The source type of the external media - * - * - * @var KalturaExternalMediaSourceType - * @insertonly - */ - public $externalSourceType = null; - - /** - * Comma separated asset params ids that exists for this external media entry - * - * - * @var string - * @readonly - */ - public $assetParamsIds = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaExternalMediaEntryListResponse extends KalturaObjectBase -{ - /** - * - * - * @var array of KalturaExternalMediaEntry - * @readonly - */ - public $objects; - - /** - * - * - * @var int - * @readonly - */ - public $totalCount = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -abstract class KalturaExternalMediaEntryBaseFilter extends KalturaMediaEntryFilter -{ - /** - * - * - * @var KalturaExternalMediaSourceType - */ - public $externalSourceTypeEqual = null; - - /** - * - * - * @var string - */ - public $externalSourceTypeIn = null; - - /** - * - * - * @var string - */ - public $assetParamsIdsMatchOr = null; - - /** - * - * - * @var string - */ - public $assetParamsIdsMatchAnd = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaExternalMediaEntryFilter extends KalturaExternalMediaEntryBaseFilter -{ - -} - - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaExternalMediaService extends KalturaServiceBase -{ - function __construct(KalturaClient $client = null) - { - parent::__construct($client); - } - - /** - * Add external media entry - * - * @param KalturaExternalMediaEntry $entry - * @return KalturaExternalMediaEntry - */ - function add(KalturaExternalMediaEntry $entry) - { - $kparams = array(); - $this->client->addParam($kparams, "entry", $entry->toParams()); - $this->client->queueServiceActionCall("externalmedia_externalmedia", "add", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaExternalMediaEntry"); - return $resultObject; - } - - /** - * Get external media entry by ID. - * - * @param string $id External media entry id - * @return KalturaExternalMediaEntry - */ - function get($id) - { - $kparams = array(); - $this->client->addParam($kparams, "id", $id); - $this->client->queueServiceActionCall("externalmedia_externalmedia", "get", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaExternalMediaEntry"); - return $resultObject; - } - - /** - * Update external media entry. Only the properties that were set will be updated. - * - * @param string $id External media entry id to update - * @param KalturaExternalMediaEntry $entry External media entry object to update - * @return KalturaExternalMediaEntry - */ - function update($id, KalturaExternalMediaEntry $entry) - { - $kparams = array(); - $this->client->addParam($kparams, "id", $id); - $this->client->addParam($kparams, "entry", $entry->toParams()); - $this->client->queueServiceActionCall("externalmedia_externalmedia", "update", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaExternalMediaEntry"); - return $resultObject; - } - - /** - * Delete a external media entry. - * - * @param string $id External media entry id to delete - * @return - */ - function delete($id) - { - $kparams = array(); - $this->client->addParam($kparams, "id", $id); - $this->client->queueServiceActionCall("externalmedia_externalmedia", "delete", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "null"); - return $resultObject; - } - - /** - * List media entries by filter with paging support. - * - * @param KalturaExternalMediaEntryFilter $filter External media entry filter - * @param KalturaFilterPager $pager Pager - * @return KalturaExternalMediaEntryListResponse - */ - function listAction(KalturaExternalMediaEntryFilter $filter = null, KalturaFilterPager $pager = null) - { - $kparams = array(); - if ($filter !== null) - $this->client->addParam($kparams, "filter", $filter->toParams()); - if ($pager !== null) - $this->client->addParam($kparams, "pager", $pager->toParams()); - $this->client->queueServiceActionCall("externalmedia_externalmedia", "list", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaExternalMediaEntryListResponse"); - return $resultObject; - } - - /** - * Count media entries by filter. - * - * @param KalturaExternalMediaEntryFilter $filter External media entry filter - * @return int - */ - function count(KalturaExternalMediaEntryFilter $filter = null) - { - $kparams = array(); - if ($filter !== null) - $this->client->addParam($kparams, "filter", $filter->toParams()); - $this->client->queueServiceActionCall("externalmedia_externalmedia", "count", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "integer"); - return $resultObject; - } -} -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaExternalMediaClientPlugin extends KalturaClientPlugin -{ - /** - * @var KalturaExternalMediaService - */ - public $externalMedia = null; - - protected function __construct(KalturaClient $client) - { - parent::__construct($client); - $this->externalMedia = new KalturaExternalMediaService($client); - } - - /** - * @return KalturaExternalMediaClientPlugin - */ - public static function get(KalturaClient $client) - { - return new KalturaExternalMediaClientPlugin($client); - } - - /** - * @return array - */ - public function getServices() - { - $services = array( - 'externalMedia' => $this->externalMedia, - ); - return $services; - } - - /** - * @return string - */ - public function getName() - { - return 'externalMedia'; - } -} - diff --git a/local/kaltura/API/KalturaPlugins/KalturaFileSyncClientPlugin.php b/local/kaltura/API/KalturaPlugins/KalturaFileSyncClientPlugin.php deleted file mode 100644 index 17d61c39db871..0000000000000 --- a/local/kaltura/API/KalturaPlugins/KalturaFileSyncClientPlugin.php +++ /dev/null @@ -1,338 +0,0 @@ -. -// -// @ignore -// =================================================================================================== - -/** - * @package Kaltura - * @subpackage Client - */ -require_once(dirname(__FILE__) . "/../KalturaClientBase.php"); -require_once(dirname(__FILE__) . "/../KalturaEnums.php"); -require_once(dirname(__FILE__) . "/../KalturaTypes.php"); - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaFileSyncStatus -{ - const ERROR = -1; - const PENDING = 1; - const READY = 2; - const DELETED = 3; - const PURGED = 4; -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaFileSyncType -{ - const FILE = 1; - const LINK = 2; - const URL = 3; -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaFileSyncOrderBy -{ - const CREATED_AT_ASC = "+createdAt"; - const FILE_SIZE_ASC = "+fileSize"; - const READY_AT_ASC = "+readyAt"; - const SYNC_TIME_ASC = "+syncTime"; - const UPDATED_AT_ASC = "+updatedAt"; - const CREATED_AT_DESC = "-createdAt"; - const FILE_SIZE_DESC = "-fileSize"; - const READY_AT_DESC = "-readyAt"; - const SYNC_TIME_DESC = "-syncTime"; - const UPDATED_AT_DESC = "-updatedAt"; -} - -/** - * @package Kaltura - * @subpackage Client - */ -abstract class KalturaFileSyncBaseFilter extends KalturaFilter -{ - /** - * - * - * @var int - */ - public $partnerIdEqual = null; - - /** - * - * - * @var KalturaFileSyncObjectType - */ - public $fileObjectTypeEqual = null; - - /** - * - * - * @var string - */ - public $fileObjectTypeIn = null; - - /** - * - * - * @var string - */ - public $objectIdEqual = null; - - /** - * - * - * @var string - */ - public $objectIdIn = null; - - /** - * - * - * @var string - */ - public $versionEqual = null; - - /** - * - * - * @var string - */ - public $versionIn = null; - - /** - * - * - * @var int - */ - public $objectSubTypeEqual = null; - - /** - * - * - * @var string - */ - public $objectSubTypeIn = null; - - /** - * - * - * @var string - */ - public $dcEqual = null; - - /** - * - * - * @var string - */ - public $dcIn = null; - - /** - * - * - * @var int - */ - public $originalEqual = null; - - /** - * - * - * @var int - */ - public $createdAtGreaterThanOrEqual = null; - - /** - * - * - * @var int - */ - public $createdAtLessThanOrEqual = null; - - /** - * - * - * @var int - */ - public $updatedAtGreaterThanOrEqual = null; - - /** - * - * - * @var int - */ - public $updatedAtLessThanOrEqual = null; - - /** - * - * - * @var int - */ - public $readyAtGreaterThanOrEqual = null; - - /** - * - * - * @var int - */ - public $readyAtLessThanOrEqual = null; - - /** - * - * - * @var int - */ - public $syncTimeGreaterThanOrEqual = null; - - /** - * - * - * @var int - */ - public $syncTimeLessThanOrEqual = null; - - /** - * - * - * @var KalturaFileSyncStatus - */ - public $statusEqual = null; - - /** - * - * - * @var string - */ - public $statusIn = null; - - /** - * - * - * @var KalturaFileSyncType - */ - public $fileTypeEqual = null; - - /** - * - * - * @var string - */ - public $fileTypeIn = null; - - /** - * - * - * @var int - */ - public $linkedIdEqual = null; - - /** - * - * - * @var int - */ - public $linkCountGreaterThanOrEqual = null; - - /** - * - * - * @var int - */ - public $linkCountLessThanOrEqual = null; - - /** - * - * - * @var float - */ - public $fileSizeGreaterThanOrEqual = null; - - /** - * - * - * @var float - */ - public $fileSizeLessThanOrEqual = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaFileSyncFilter extends KalturaFileSyncBaseFilter -{ - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaFileSyncClientPlugin extends KalturaClientPlugin -{ - protected function __construct(KalturaClient $client) - { - parent::__construct($client); - } - - /** - * @return KalturaFileSyncClientPlugin - */ - public static function get(KalturaClient $client) - { - return new KalturaFileSyncClientPlugin($client); - } - - /** - * @return array - */ - public function getServices() - { - $services = array( - ); - return $services; - } - - /** - * @return string - */ - public function getName() - { - return 'fileSync'; - } -} - diff --git a/local/kaltura/API/KalturaPlugins/KalturaHttpNotificationClientPlugin.php b/local/kaltura/API/KalturaPlugins/KalturaHttpNotificationClientPlugin.php deleted file mode 100644 index 5d7bc27ba0efa..0000000000000 --- a/local/kaltura/API/KalturaPlugins/KalturaHttpNotificationClientPlugin.php +++ /dev/null @@ -1,624 +0,0 @@ -. -// -// @ignore -// =================================================================================================== - -/** - * @package Kaltura - * @subpackage Client - */ -require_once(dirname(__FILE__) . "/../KalturaClientBase.php"); -require_once(dirname(__FILE__) . "/../KalturaEnums.php"); -require_once(dirname(__FILE__) . "/../KalturaTypes.php"); -require_once(dirname(__FILE__) . "/KalturaEventNotificationClientPlugin.php"); - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaHttpNotificationAuthenticationMethod -{ - const ANYSAFE = -18; - const ANY = -17; - const BASIC = 1; - const DIGEST = 2; - const GSSNEGOTIATE = 4; - const NTLM = 8; -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaHttpNotificationMethod -{ - const GET = 1; - const POST = 2; - const PUT = 3; - const DELETE = 4; -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaHttpNotificationSslVersion -{ - const V2 = 2; - const V3 = 3; -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaHttpNotificationCertificateType -{ - const DER = "DER"; - const ENG = "ENG"; - const PEM = "PEM"; -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaHttpNotificationSslKeyType -{ - const DER = "DER"; - const ENG = "ENG"; - const PEM = "PEM"; -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaHttpNotificationTemplateOrderBy -{ - const CREATED_AT_ASC = "+createdAt"; - const ID_ASC = "+id"; - const UPDATED_AT_ASC = "+updatedAt"; - const CREATED_AT_DESC = "-createdAt"; - const ID_DESC = "-id"; - const UPDATED_AT_DESC = "-updatedAt"; -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaHttpNotification extends KalturaObjectBase -{ - /** - * Object that triggered the notification - * - * - * @var KalturaObjectBase - */ - public $object; - - /** - * Object type that triggered the notification - * - * - * @var KalturaEventNotificationEventObjectType - */ - public $eventObjectType = null; - - /** - * ID of the batch job that execute the notification - * - * - * @var int - */ - public $eventNotificationJobId = null; - - /** - * ID of the template that triggered the notification - * - * - * @var int - */ - public $templateId = null; - - /** - * Name of the template that triggered the notification - * - * - * @var string - */ - public $templateName = null; - - /** - * System name of the template that triggered the notification - * - * - * @var string - */ - public $templateSystemName = null; - - /** - * Ecent type that triggered the notification - * - * - * @var KalturaEventNotificationEventType - */ - public $eventType = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -abstract class KalturaHttpNotificationData extends KalturaObjectBase -{ - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaHttpNotificationDataFields extends KalturaHttpNotificationData -{ - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaHttpNotificationDataText extends KalturaHttpNotificationData -{ - /** - * - * - * @var KalturaStringValue - */ - public $content; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaHttpNotificationObjectData extends KalturaHttpNotificationData -{ - /** - * Kaltura API object type - * - * - * @var string - */ - public $apiObjectType = null; - - /** - * Data format - * - * - * @var KalturaResponseType - */ - public $format = null; - - /** - * Ignore null attributes during serialization - * - * - * @var bool - */ - public $ignoreNull = null; - - /** - * PHP code - * - * - * @var string - */ - public $code = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaHttpNotificationTemplate extends KalturaEventNotificationTemplate -{ - /** - * Remote server URL - * - * - * @var string - */ - public $url = null; - - /** - * Request method. - * - * - * @var KalturaHttpNotificationMethod - */ - public $method = null; - - /** - * Data to send. - * - * - * @var KalturaHttpNotificationData - */ - public $data; - - /** - * The maximum number of seconds to allow cURL functions to execute. - * - * - * @var int - */ - public $timeout = null; - - /** - * The number of seconds to wait while trying to connect. - * Must be larger than zero. - * - * - * @var int - */ - public $connectTimeout = null; - - /** - * A username to use for the connection. - * - * - * @var string - */ - public $username = null; - - /** - * A password to use for the connection. - * - * - * @var string - */ - public $password = null; - - /** - * The HTTP authentication method to use. - * - * - * @var KalturaHttpNotificationAuthenticationMethod - */ - public $authenticationMethod = null; - - /** - * The SSL version (2 or 3) to use. - * By default PHP will try to determine this itself, although in some cases this must be set manually. - * - * - * @var KalturaHttpNotificationSslVersion - */ - public $sslVersion = null; - - /** - * SSL certificate to verify the peer with. - * - * - * @var string - */ - public $sslCertificate = null; - - /** - * The format of the certificate. - * - * - * @var KalturaHttpNotificationCertificateType - */ - public $sslCertificateType = null; - - /** - * The password required to use the certificate. - * - * - * @var string - */ - public $sslCertificatePassword = null; - - /** - * The identifier for the crypto engine of the private SSL key specified in ssl key. - * - * - * @var string - */ - public $sslEngine = null; - - /** - * The identifier for the crypto engine used for asymmetric crypto operations. - * - * - * @var string - */ - public $sslEngineDefault = null; - - /** - * The key type of the private SSL key specified in ssl key - PEM / DER / ENG. - * - * - * @var KalturaHttpNotificationSslKeyType - */ - public $sslKeyType = null; - - /** - * Private SSL key. - * - * - * @var string - */ - public $sslKey = null; - - /** - * The secret password needed to use the private SSL key specified in ssl key. - * - * - * @var string - */ - public $sslKeyPassword = null; - - /** - * Adds a e-mail custom header - * - * - * @var array of KalturaKeyValue - */ - public $customHeaders; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaHttpNotificationDispatchJobData extends KalturaEventNotificationDispatchJobData -{ - /** - * Remote server URL - * - * - * @var string - */ - public $url = null; - - /** - * Request method. - * - * - * @var KalturaHttpNotificationMethod - */ - public $method = null; - - /** - * Data to send. - * - * - * @var string - */ - public $data = null; - - /** - * The maximum number of seconds to allow cURL functions to execute. - * - * - * @var int - */ - public $timeout = null; - - /** - * The number of seconds to wait while trying to connect. - * Must be larger than zero. - * - * - * @var int - */ - public $connectTimeout = null; - - /** - * A username to use for the connection. - * - * - * @var string - */ - public $username = null; - - /** - * A password to use for the connection. - * - * - * @var string - */ - public $password = null; - - /** - * The HTTP authentication method to use. - * - * - * @var KalturaHttpNotificationAuthenticationMethod - */ - public $authenticationMethod = null; - - /** - * The SSL version (2 or 3) to use. - * By default PHP will try to determine this itself, although in some cases this must be set manually. - * - * - * @var KalturaHttpNotificationSslVersion - */ - public $sslVersion = null; - - /** - * SSL certificate to verify the peer with. - * - * - * @var string - */ - public $sslCertificate = null; - - /** - * The format of the certificate. - * - * - * @var KalturaHttpNotificationCertificateType - */ - public $sslCertificateType = null; - - /** - * The password required to use the certificate. - * - * - * @var string - */ - public $sslCertificatePassword = null; - - /** - * The identifier for the crypto engine of the private SSL key specified in ssl key. - * - * - * @var string - */ - public $sslEngine = null; - - /** - * The identifier for the crypto engine used for asymmetric crypto operations. - * - * - * @var string - */ - public $sslEngineDefault = null; - - /** - * The key type of the private SSL key specified in ssl key - PEM / DER / ENG. - * - * - * @var KalturaHttpNotificationSslKeyType - */ - public $sslKeyType = null; - - /** - * Private SSL key. - * - * - * @var string - */ - public $sslKey = null; - - /** - * The secret password needed to use the private SSL key specified in ssl key. - * - * - * @var string - */ - public $sslKeyPassword = null; - - /** - * Adds a e-mail custom header - * - * - * @var array of KalturaKeyValue - */ - public $customHeaders; - - /** - * Define the content dynamic parameters - * - * - * @var array of KalturaKeyValue - */ - public $contentParameters; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -abstract class KalturaHttpNotificationTemplateBaseFilter extends KalturaEventNotificationTemplateFilter -{ - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaHttpNotificationTemplateFilter extends KalturaHttpNotificationTemplateBaseFilter -{ - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaHttpNotificationClientPlugin extends KalturaClientPlugin -{ - protected function __construct(KalturaClient $client) - { - parent::__construct($client); - } - - /** - * @return KalturaHttpNotificationClientPlugin - */ - public static function get(KalturaClient $client) - { - return new KalturaHttpNotificationClientPlugin($client); - } - - /** - * @return array - */ - public function getServices() - { - $services = array( - ); - return $services; - } - - /** - * @return string - */ - public function getName() - { - return 'httpNotification'; - } -} - diff --git a/local/kaltura/API/KalturaPlugins/KalturaKontikiClientPlugin.php b/local/kaltura/API/KalturaPlugins/KalturaKontikiClientPlugin.php deleted file mode 100644 index e1120181283c8..0000000000000 --- a/local/kaltura/API/KalturaPlugins/KalturaKontikiClientPlugin.php +++ /dev/null @@ -1,177 +0,0 @@ -. -// -// @ignore -// =================================================================================================== - -/** - * @package Kaltura - * @subpackage Client - */ -require_once(dirname(__FILE__) . "/../KalturaClientBase.php"); -require_once(dirname(__FILE__) . "/../KalturaEnums.php"); -require_once(dirname(__FILE__) . "/../KalturaTypes.php"); - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaKontikiStorageProfileOrderBy -{ - const CREATED_AT_ASC = "+createdAt"; - const UPDATED_AT_ASC = "+updatedAt"; - const CREATED_AT_DESC = "-createdAt"; - const UPDATED_AT_DESC = "-updatedAt"; -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaKontikiStorageProfile extends KalturaStorageProfile -{ - /** - * - * - * @var string - */ - public $serviceToken = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaKontikiStorageDeleteJobData extends KalturaStorageDeleteJobData -{ - /** - * Unique Kontiki MOID for the content uploaded to Kontiki - * - * - * @var string - */ - public $contentMoid = null; - - /** - * - * - * @var string - */ - public $serviceToken = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaKontikiStorageExportJobData extends KalturaStorageExportJobData -{ - /** - * Holds the id of the exported asset - * - * - * @var string - */ - public $flavorAssetId = null; - - /** - * Unique Kontiki MOID for the content uploaded to Kontiki - * - * - * @var string - */ - public $contentMoid = null; - - /** - * - * - * @var string - */ - public $serviceToken = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -abstract class KalturaKontikiStorageProfileBaseFilter extends KalturaStorageProfileFilter -{ - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaKontikiStorageProfileFilter extends KalturaKontikiStorageProfileBaseFilter -{ - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaKontikiClientPlugin extends KalturaClientPlugin -{ - protected function __construct(KalturaClient $client) - { - parent::__construct($client); - } - - /** - * @return KalturaKontikiClientPlugin - */ - public static function get(KalturaClient $client) - { - return new KalturaKontikiClientPlugin($client); - } - - /** - * @return array - */ - public function getServices() - { - $services = array( - ); - return $services; - } - - /** - * @return string - */ - public function getName() - { - return 'kontiki'; - } -} - diff --git a/local/kaltura/API/KalturaPlugins/KalturaLikeClientPlugin.php b/local/kaltura/API/KalturaPlugins/KalturaLikeClientPlugin.php deleted file mode 100644 index 433c28cec56f6..0000000000000 --- a/local/kaltura/API/KalturaPlugins/KalturaLikeClientPlugin.php +++ /dev/null @@ -1,153 +0,0 @@ -. -// -// @ignore -// =================================================================================================== - -/** - * @package Kaltura - * @subpackage Client - */ -require_once(dirname(__FILE__) . "/../KalturaClientBase.php"); -require_once(dirname(__FILE__) . "/../KalturaEnums.php"); -require_once(dirname(__FILE__) . "/../KalturaTypes.php"); - - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaLikeService extends KalturaServiceBase -{ - function __construct(KalturaClient $client = null) - { - parent::__construct($client); - } - - /** - * - * - * @param string $entryId - * @return bool - */ - function like($entryId) - { - $kparams = array(); - $this->client->addParam($kparams, "entryId", $entryId); - $this->client->queueServiceActionCall("like_like", "like", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $resultObject = (bool) $resultObject; - return $resultObject; - } - - /** - * - * - * @param string $entryId - * @return bool - */ - function unlike($entryId) - { - $kparams = array(); - $this->client->addParam($kparams, "entryId", $entryId); - $this->client->queueServiceActionCall("like_like", "unlike", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $resultObject = (bool) $resultObject; - return $resultObject; - } - - /** - * - * - * @param string $entryId - * @param string $userId - * @return bool - */ - function checkLikeExists($entryId, $userId = null) - { - $kparams = array(); - $this->client->addParam($kparams, "entryId", $entryId); - $this->client->addParam($kparams, "userId", $userId); - $this->client->queueServiceActionCall("like_like", "checkLikeExists", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $resultObject = (bool) $resultObject; - return $resultObject; - } -} -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaLikeClientPlugin extends KalturaClientPlugin -{ - /** - * @var KalturaLikeService - */ - public $like = null; - - protected function __construct(KalturaClient $client) - { - parent::__construct($client); - $this->like = new KalturaLikeService($client); - } - - /** - * @return KalturaLikeClientPlugin - */ - public static function get(KalturaClient $client) - { - return new KalturaLikeClientPlugin($client); - } - - /** - * @return array - */ - public function getServices() - { - $services = array( - 'like' => $this->like, - ); - return $services; - } - - /** - * @return string - */ - public function getName() - { - return 'like'; - } -} - diff --git a/local/kaltura/API/KalturaPlugins/KalturaMetadataClientPlugin.php b/local/kaltura/API/KalturaPlugins/KalturaMetadataClientPlugin.php deleted file mode 100644 index 7919b7fc491b2..0000000000000 --- a/local/kaltura/API/KalturaPlugins/KalturaMetadataClientPlugin.php +++ /dev/null @@ -1,1566 +0,0 @@ -. -// -// @ignore -// =================================================================================================== - -/** - * @package Kaltura - * @subpackage Client - */ -require_once(dirname(__FILE__) . "/../KalturaClientBase.php"); -require_once(dirname(__FILE__) . "/../KalturaEnums.php"); -require_once(dirname(__FILE__) . "/../KalturaTypes.php"); - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaMetadataProfileCreateMode -{ - const API = 1; - const KMC = 2; - const APP = 3; -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaMetadataProfileStatus -{ - const ACTIVE = 1; - const DEPRECATED = 2; - const TRANSFORMING = 3; -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaMetadataStatus -{ - const VALID = 1; - const INVALID = 2; - const DELETED = 3; -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaMetadataObjectType -{ - const AD_CUE_POINT = "adCuePointMetadata.AdCuePoint"; - const ANNOTATION = "annotationMetadata.Annotation"; - const CODE_CUE_POINT = "codeCuePointMetadata.CodeCuePoint"; - const ENTRY = "1"; - const CATEGORY = "2"; - const USER = "3"; - const PARTNER = "4"; -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaMetadataOrderBy -{ - const CREATED_AT_ASC = "+createdAt"; - const METADATA_PROFILE_VERSION_ASC = "+metadataProfileVersion"; - const UPDATED_AT_ASC = "+updatedAt"; - const VERSION_ASC = "+version"; - const CREATED_AT_DESC = "-createdAt"; - const METADATA_PROFILE_VERSION_DESC = "-metadataProfileVersion"; - const UPDATED_AT_DESC = "-updatedAt"; - const VERSION_DESC = "-version"; -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaMetadataProfileOrderBy -{ - const CREATED_AT_ASC = "+createdAt"; - const UPDATED_AT_ASC = "+updatedAt"; - const CREATED_AT_DESC = "-createdAt"; - const UPDATED_AT_DESC = "-updatedAt"; -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaMetadata extends KalturaObjectBase -{ - /** - * - * - * @var int - * @readonly - */ - public $id = null; - - /** - * - * - * @var int - * @readonly - */ - public $partnerId = null; - - /** - * - * - * @var int - * @readonly - */ - public $metadataProfileId = null; - - /** - * - * - * @var int - * @readonly - */ - public $metadataProfileVersion = null; - - /** - * - * - * @var KalturaMetadataObjectType - * @readonly - */ - public $metadataObjectType = null; - - /** - * - * - * @var string - * @readonly - */ - public $objectId = null; - - /** - * - * - * @var int - * @readonly - */ - public $version = null; - - /** - * - * - * @var int - * @readonly - */ - public $createdAt = null; - - /** - * - * - * @var int - * @readonly - */ - public $updatedAt = null; - - /** - * - * - * @var KalturaMetadataStatus - * @readonly - */ - public $status = null; - - /** - * - * - * @var string - * @readonly - */ - public $xml = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaMetadataListResponse extends KalturaObjectBase -{ - /** - * - * - * @var array of KalturaMetadata - * @readonly - */ - public $objects; - - /** - * - * - * @var int - * @readonly - */ - public $totalCount = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaMetadataProfile extends KalturaObjectBase -{ - /** - * - * - * @var int - * @readonly - */ - public $id = null; - - /** - * - * - * @var int - * @readonly - */ - public $partnerId = null; - - /** - * - * - * @var KalturaMetadataObjectType - */ - public $metadataObjectType = null; - - /** - * - * - * @var int - * @readonly - */ - public $version = null; - - /** - * - * - * @var string - */ - public $name = null; - - /** - * - * - * @var string - */ - public $systemName = null; - - /** - * - * - * @var string - */ - public $description = null; - - /** - * - * - * @var int - * @readonly - */ - public $createdAt = null; - - /** - * - * - * @var int - * @readonly - */ - public $updatedAt = null; - - /** - * - * - * @var KalturaMetadataProfileStatus - * @readonly - */ - public $status = null; - - /** - * - * - * @var string - * @readonly - */ - public $xsd = null; - - /** - * - * - * @var string - * @readonly - */ - public $views = null; - - /** - * - * - * @var string - * @readonly - */ - public $xslt = null; - - /** - * - * - * @var KalturaMetadataProfileCreateMode - */ - public $createMode = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaMetadataProfileField extends KalturaObjectBase -{ - /** - * - * - * @var int - * @readonly - */ - public $id = null; - - /** - * - * - * @var string - * @readonly - */ - public $xPath = null; - - /** - * - * - * @var string - * @readonly - */ - public $key = null; - - /** - * - * - * @var string - * @readonly - */ - public $label = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaMetadataProfileFieldListResponse extends KalturaObjectBase -{ - /** - * - * - * @var array of KalturaMetadataProfileField - * @readonly - */ - public $objects; - - /** - * - * - * @var int - * @readonly - */ - public $totalCount = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaMetadataProfileListResponse extends KalturaObjectBase -{ - /** - * - * - * @var array of KalturaMetadataProfile - * @readonly - */ - public $objects; - - /** - * - * - * @var int - * @readonly - */ - public $totalCount = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaImportMetadataJobData extends KalturaJobData -{ - /** - * - * - * @var string - */ - public $srcFileUrl = null; - - /** - * - * - * @var string - */ - public $destFileLocalPath = null; - - /** - * - * - * @var int - */ - public $metadataId = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -abstract class KalturaMetadataBaseFilter extends KalturaFilter -{ - /** - * - * - * @var int - */ - public $partnerIdEqual = null; - - /** - * - * - * @var int - */ - public $metadataProfileIdEqual = null; - - /** - * - * - * @var int - */ - public $metadataProfileVersionEqual = null; - - /** - * - * - * @var int - */ - public $metadataProfileVersionGreaterThanOrEqual = null; - - /** - * - * - * @var int - */ - public $metadataProfileVersionLessThanOrEqual = null; - - /** - * - * - * @var KalturaMetadataObjectType - */ - public $metadataObjectTypeEqual = null; - - /** - * - * - * @var string - */ - public $objectIdEqual = null; - - /** - * - * - * @var string - */ - public $objectIdIn = null; - - /** - * - * - * @var int - */ - public $versionEqual = null; - - /** - * - * - * @var int - */ - public $versionGreaterThanOrEqual = null; - - /** - * - * - * @var int - */ - public $versionLessThanOrEqual = null; - - /** - * - * - * @var int - */ - public $createdAtGreaterThanOrEqual = null; - - /** - * - * - * @var int - */ - public $createdAtLessThanOrEqual = null; - - /** - * - * - * @var int - */ - public $updatedAtGreaterThanOrEqual = null; - - /** - * - * - * @var int - */ - public $updatedAtLessThanOrEqual = null; - - /** - * - * - * @var KalturaMetadataStatus - */ - public $statusEqual = null; - - /** - * - * - * @var string - */ - public $statusIn = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -abstract class KalturaMetadataProfileBaseFilter extends KalturaFilter -{ - /** - * - * - * @var int - */ - public $idEqual = null; - - /** - * - * - * @var int - */ - public $partnerIdEqual = null; - - /** - * - * - * @var KalturaMetadataObjectType - */ - public $metadataObjectTypeEqual = null; - - /** - * - * - * @var string - */ - public $metadataObjectTypeIn = null; - - /** - * - * - * @var int - */ - public $versionEqual = null; - - /** - * - * - * @var string - */ - public $nameEqual = null; - - /** - * - * - * @var string - */ - public $systemNameEqual = null; - - /** - * - * - * @var string - */ - public $systemNameIn = null; - - /** - * - * - * @var int - */ - public $createdAtGreaterThanOrEqual = null; - - /** - * - * - * @var int - */ - public $createdAtLessThanOrEqual = null; - - /** - * - * - * @var int - */ - public $updatedAtGreaterThanOrEqual = null; - - /** - * - * - * @var int - */ - public $updatedAtLessThanOrEqual = null; - - /** - * - * - * @var KalturaMetadataProfileStatus - */ - public $statusEqual = null; - - /** - * - * - * @var string - */ - public $statusIn = null; - - /** - * - * - * @var KalturaMetadataProfileCreateMode - */ - public $createModeEqual = null; - - /** - * - * - * @var KalturaMetadataProfileCreateMode - */ - public $createModeNotEqual = null; - - /** - * - * - * @var string - */ - public $createModeIn = null; - - /** - * - * - * @var string - */ - public $createModeNotIn = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaTransformMetadataJobData extends KalturaJobData -{ - /** - * - * - * @var string - */ - public $srcXslPath = null; - - /** - * - * - * @var int - */ - public $srcVersion = null; - - /** - * - * - * @var int - */ - public $destVersion = null; - - /** - * - * - * @var string - */ - public $destXsdPath = null; - - /** - * - * - * @var int - */ - public $metadataProfileId = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaCompareMetadataCondition extends KalturaCompareCondition -{ - /** - * May contain the full xpath to the field in three formats - * 1. Slashed xPath, e.g. /metadata/myElementName - * 2. Using local-name function, e.g. /[local-name()='metadata']/[local-name()='myElementName'] - * 3. Using only the field name, e.g. myElementName, it will be searched as //myElementName - * - * - * @var string - */ - public $xPath = null; - - /** - * Metadata profile id - * - * - * @var int - */ - public $profileId = null; - - /** - * Metadata profile system name - * - * - * @var string - */ - public $profileSystemName = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaFileAssetFilter extends KalturaFileAssetBaseFilter -{ - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaMatchMetadataCondition extends KalturaMatchCondition -{ - /** - * May contain the full xpath to the field in three formats - * 1. Slashed xPath, e.g. /metadata/myElementName - * 2. Using local-name function, e.g. /[local-name()='metadata']/[local-name()='myElementName'] - * 3. Using only the field name, e.g. myElementName, it will be searched as //myElementName - * - * - * @var string - */ - public $xPath = null; - - /** - * Metadata profile id - * - * - * @var int - */ - public $profileId = null; - - /** - * Metadata profile system name - * - * - * @var string - */ - public $profileSystemName = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaMetadataFieldChangedCondition extends KalturaMatchCondition -{ - /** - * May contain the full xpath to the field in three formats - * 1. Slashed xPath, e.g. /metadata/myElementName - * 2. Using local-name function, e.g. /[local-name()='metadata']/[local-name()='myElementName'] - * 3. Using only the field name, e.g. myElementName, it will be searched as //myElementName - * - * - * @var string - */ - public $xPath = null; - - /** - * Metadata profile id - * - * - * @var int - */ - public $profileId = null; - - /** - * Metadata profile system name - * - * - * @var string - */ - public $profileSystemName = null; - - /** - * - * - * @var string - */ - public $versionA = null; - - /** - * - * - * @var string - */ - public $versionB = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaMetadataFilter extends KalturaMetadataBaseFilter -{ - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaMetadataProfileFilter extends KalturaMetadataProfileBaseFilter -{ - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaMetadataSearchItem extends KalturaSearchOperator -{ - /** - * - * - * @var int - */ - public $metadataProfileId = null; - - /** - * - * - * @var string - */ - public $orderBy = null; - - -} - - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaMetadataService extends KalturaServiceBase -{ - function __construct(KalturaClient $client = null) - { - parent::__construct($client); - } - - /** - * Allows you to add a metadata object and metadata content associated with Kaltura object - * - * @param int $metadataProfileId - * @param string $objectType - * @param string $objectId - * @param string $xmlData XML metadata - * @return KalturaMetadata - */ - function add($metadataProfileId, $objectType, $objectId, $xmlData) - { - $kparams = array(); - $this->client->addParam($kparams, "metadataProfileId", $metadataProfileId); - $this->client->addParam($kparams, "objectType", $objectType); - $this->client->addParam($kparams, "objectId", $objectId); - $this->client->addParam($kparams, "xmlData", $xmlData); - $this->client->queueServiceActionCall("metadata_metadata", "add", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaMetadata"); - return $resultObject; - } - - /** - * Allows you to add a metadata object and metadata file associated with Kaltura object - * - * @param int $metadataProfileId - * @param string $objectType - * @param string $objectId - * @param file $xmlFile XML metadata - * @return KalturaMetadata - */ - function addFromFile($metadataProfileId, $objectType, $objectId, $xmlFile) - { - $kparams = array(); - $this->client->addParam($kparams, "metadataProfileId", $metadataProfileId); - $this->client->addParam($kparams, "objectType", $objectType); - $this->client->addParam($kparams, "objectId", $objectId); - $kfiles = array(); - $this->client->addParam($kfiles, "xmlFile", $xmlFile); - $this->client->queueServiceActionCall("metadata_metadata", "addFromFile", $kparams, $kfiles); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaMetadata"); - return $resultObject; - } - - /** - * Allows you to add a metadata xml data from remote URL - * - * @param int $metadataProfileId - * @param string $objectType - * @param string $objectId - * @param string $url XML metadata remote url - * @return KalturaMetadata - */ - function addFromUrl($metadataProfileId, $objectType, $objectId, $url) - { - $kparams = array(); - $this->client->addParam($kparams, "metadataProfileId", $metadataProfileId); - $this->client->addParam($kparams, "objectType", $objectType); - $this->client->addParam($kparams, "objectId", $objectId); - $this->client->addParam($kparams, "url", $url); - $this->client->queueServiceActionCall("metadata_metadata", "addFromUrl", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaMetadata"); - return $resultObject; - } - - /** - * Allows you to add a metadata xml data from remote URL. - Enables different permissions than addFromUrl action. - * - * @param int $metadataProfileId - * @param string $objectType - * @param string $objectId - * @param string $url XML metadata remote url - * @return KalturaMetadata - */ - function addFromBulk($metadataProfileId, $objectType, $objectId, $url) - { - $kparams = array(); - $this->client->addParam($kparams, "metadataProfileId", $metadataProfileId); - $this->client->addParam($kparams, "objectType", $objectType); - $this->client->addParam($kparams, "objectId", $objectId); - $this->client->addParam($kparams, "url", $url); - $this->client->queueServiceActionCall("metadata_metadata", "addFromBulk", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaMetadata"); - return $resultObject; - } - - /** - * Retrieve a metadata object by id - * - * @param int $id - * @return KalturaMetadata - */ - function get($id) - { - $kparams = array(); - $this->client->addParam($kparams, "id", $id); - $this->client->queueServiceActionCall("metadata_metadata", "get", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaMetadata"); - return $resultObject; - } - - /** - * Update an existing metadata object with new XML content - * - * @param int $id - * @param string $xmlData XML metadata - * @param int $version Enable update only if the metadata object version did not change by other process - * @return KalturaMetadata - */ - function update($id, $xmlData = null, $version = null) - { - $kparams = array(); - $this->client->addParam($kparams, "id", $id); - $this->client->addParam($kparams, "xmlData", $xmlData); - $this->client->addParam($kparams, "version", $version); - $this->client->queueServiceActionCall("metadata_metadata", "update", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaMetadata"); - return $resultObject; - } - - /** - * Update an existing metadata object with new XML file - * - * @param int $id - * @param file $xmlFile XML metadata - * @return KalturaMetadata - */ - function updateFromFile($id, $xmlFile = null) - { - $kparams = array(); - $this->client->addParam($kparams, "id", $id); - $kfiles = array(); - $this->client->addParam($kfiles, "xmlFile", $xmlFile); - $this->client->queueServiceActionCall("metadata_metadata", "updateFromFile", $kparams, $kfiles); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaMetadata"); - return $resultObject; - } - - /** - * List metadata objects by filter and pager - * - * @param KalturaMetadataFilter $filter - * @param KalturaFilterPager $pager - * @return KalturaMetadataListResponse - */ - function listAction(KalturaMetadataFilter $filter = null, KalturaFilterPager $pager = null) - { - $kparams = array(); - if ($filter !== null) - $this->client->addParam($kparams, "filter", $filter->toParams()); - if ($pager !== null) - $this->client->addParam($kparams, "pager", $pager->toParams()); - $this->client->queueServiceActionCall("metadata_metadata", "list", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaMetadataListResponse"); - return $resultObject; - } - - /** - * Delete an existing metadata - * - * @param int $id - * @return - */ - function delete($id) - { - $kparams = array(); - $this->client->addParam($kparams, "id", $id); - $this->client->queueServiceActionCall("metadata_metadata", "delete", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "null"); - return $resultObject; - } - - /** - * Mark existing metadata as invalid - Used by batch metadata transform - * - * @param int $id - * @param int $version Enable update only if the metadata object version did not change by other process - * @return - */ - function invalidate($id, $version = null) - { - $kparams = array(); - $this->client->addParam($kparams, "id", $id); - $this->client->addParam($kparams, "version", $version); - $this->client->queueServiceActionCall("metadata_metadata", "invalidate", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "null"); - return $resultObject; - } - - /** - * Serves metadata XML file - * - * @param int $id - * @return file - */ - function serve($id) - { - $kparams = array(); - $this->client->addParam($kparams, "id", $id); - $this->client->queueServiceActionCall("metadata_metadata", "serve", $kparams); - if(!$this->client->getDestinationPath() && !$this->client->getReturnServedResult()) - return $this->client->getServeUrl(); - return $this->client->doQueue(); - } - - /** - * Action transforms current metadata object XML using a provided XSL. - * - * @param int $id - * @param file $xslFile - * @return KalturaMetadata - */ - function updateFromXSL($id, $xslFile) - { - $kparams = array(); - $this->client->addParam($kparams, "id", $id); - $kfiles = array(); - $this->client->addParam($kfiles, "xslFile", $xslFile); - $this->client->queueServiceActionCall("metadata_metadata", "updateFromXSL", $kparams, $kfiles); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaMetadata"); - return $resultObject; - } -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaMetadataProfileService extends KalturaServiceBase -{ - function __construct(KalturaClient $client = null) - { - parent::__construct($client); - } - - /** - * Allows you to add a metadata profile object and metadata profile content associated with Kaltura object type - * - * @param KalturaMetadataProfile $metadataProfile - * @param string $xsdData XSD metadata definition - * @param string $viewsData UI views definition - * @return KalturaMetadataProfile - */ - function add(KalturaMetadataProfile $metadataProfile, $xsdData, $viewsData = null) - { - $kparams = array(); - $this->client->addParam($kparams, "metadataProfile", $metadataProfile->toParams()); - $this->client->addParam($kparams, "xsdData", $xsdData); - $this->client->addParam($kparams, "viewsData", $viewsData); - $this->client->queueServiceActionCall("metadata_metadataprofile", "add", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaMetadataProfile"); - return $resultObject; - } - - /** - * Allows you to add a metadata profile object and metadata profile file associated with Kaltura object type - * - * @param KalturaMetadataProfile $metadataProfile - * @param file $xsdFile XSD metadata definition - * @param file $viewsFile UI views definition - * @return KalturaMetadataProfile - */ - function addFromFile(KalturaMetadataProfile $metadataProfile, $xsdFile, $viewsFile = null) - { - $kparams = array(); - $this->client->addParam($kparams, "metadataProfile", $metadataProfile->toParams()); - $kfiles = array(); - $this->client->addParam($kfiles, "xsdFile", $xsdFile); - $this->client->addParam($kfiles, "viewsFile", $viewsFile); - $this->client->queueServiceActionCall("metadata_metadataprofile", "addFromFile", $kparams, $kfiles); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaMetadataProfile"); - return $resultObject; - } - - /** - * Retrieve a metadata profile object by id - * - * @param int $id - * @return KalturaMetadataProfile - */ - function get($id) - { - $kparams = array(); - $this->client->addParam($kparams, "id", $id); - $this->client->queueServiceActionCall("metadata_metadataprofile", "get", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaMetadataProfile"); - return $resultObject; - } - - /** - * Update an existing metadata object - * - * @param int $id - * @param KalturaMetadataProfile $metadataProfile - * @param string $xsdData XSD metadata definition - * @param string $viewsData UI views definition - * @return KalturaMetadataProfile - */ - function update($id, KalturaMetadataProfile $metadataProfile, $xsdData = null, $viewsData = null) - { - $kparams = array(); - $this->client->addParam($kparams, "id", $id); - $this->client->addParam($kparams, "metadataProfile", $metadataProfile->toParams()); - $this->client->addParam($kparams, "xsdData", $xsdData); - $this->client->addParam($kparams, "viewsData", $viewsData); - $this->client->queueServiceActionCall("metadata_metadataprofile", "update", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaMetadataProfile"); - return $resultObject; - } - - /** - * List metadata profile objects by filter and pager - * - * @param KalturaMetadataProfileFilter $filter - * @param KalturaFilterPager $pager - * @return KalturaMetadataProfileListResponse - */ - function listAction(KalturaMetadataProfileFilter $filter = null, KalturaFilterPager $pager = null) - { - $kparams = array(); - if ($filter !== null) - $this->client->addParam($kparams, "filter", $filter->toParams()); - if ($pager !== null) - $this->client->addParam($kparams, "pager", $pager->toParams()); - $this->client->queueServiceActionCall("metadata_metadataprofile", "list", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaMetadataProfileListResponse"); - return $resultObject; - } - - /** - * List metadata profile fields by metadata profile id - * - * @param int $metadataProfileId - * @return KalturaMetadataProfileFieldListResponse - */ - function listFields($metadataProfileId) - { - $kparams = array(); - $this->client->addParam($kparams, "metadataProfileId", $metadataProfileId); - $this->client->queueServiceActionCall("metadata_metadataprofile", "listFields", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaMetadataProfileFieldListResponse"); - return $resultObject; - } - - /** - * Delete an existing metadata profile - * - * @param int $id - * @return - */ - function delete($id) - { - $kparams = array(); - $this->client->addParam($kparams, "id", $id); - $this->client->queueServiceActionCall("metadata_metadataprofile", "delete", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "null"); - return $resultObject; - } - - /** - * Update an existing metadata object definition file - * - * @param int $id - * @param int $toVersion - * @return KalturaMetadataProfile - */ - function revert($id, $toVersion) - { - $kparams = array(); - $this->client->addParam($kparams, "id", $id); - $this->client->addParam($kparams, "toVersion", $toVersion); - $this->client->queueServiceActionCall("metadata_metadataprofile", "revert", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaMetadataProfile"); - return $resultObject; - } - - /** - * Update an existing metadata object definition file - * - * @param int $id - * @param file $xsdFile XSD metadata definition - * @return KalturaMetadataProfile - */ - function updateDefinitionFromFile($id, $xsdFile) - { - $kparams = array(); - $this->client->addParam($kparams, "id", $id); - $kfiles = array(); - $this->client->addParam($kfiles, "xsdFile", $xsdFile); - $this->client->queueServiceActionCall("metadata_metadataprofile", "updateDefinitionFromFile", $kparams, $kfiles); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaMetadataProfile"); - return $resultObject; - } - - /** - * Update an existing metadata object views file - * - * @param int $id - * @param file $viewsFile UI views file - * @return KalturaMetadataProfile - */ - function updateViewsFromFile($id, $viewsFile) - { - $kparams = array(); - $this->client->addParam($kparams, "id", $id); - $kfiles = array(); - $this->client->addParam($kfiles, "viewsFile", $viewsFile); - $this->client->queueServiceActionCall("metadata_metadataprofile", "updateViewsFromFile", $kparams, $kfiles); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaMetadataProfile"); - return $resultObject; - } - - /** - * Update an existing metadata object xslt file - * - * @param int $id - * @param file $xsltFile XSLT file, will be executed on every metadata add/update - * @return KalturaMetadataProfile - */ - function updateTransformationFromFile($id, $xsltFile) - { - $kparams = array(); - $this->client->addParam($kparams, "id", $id); - $kfiles = array(); - $this->client->addParam($kfiles, "xsltFile", $xsltFile); - $this->client->queueServiceActionCall("metadata_metadataprofile", "updateTransformationFromFile", $kparams, $kfiles); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaMetadataProfile"); - return $resultObject; - } - - /** - * Serves metadata profile XSD file - * - * @param int $id - * @return file - */ - function serve($id) - { - $kparams = array(); - $this->client->addParam($kparams, "id", $id); - $this->client->queueServiceActionCall("metadata_metadataprofile", "serve", $kparams); - if(!$this->client->getDestinationPath() && !$this->client->getReturnServedResult()) - return $this->client->getServeUrl(); - return $this->client->doQueue(); - } - - /** - * Serves metadata profile view file - * - * @param int $id - * @return file - */ - function serveView($id) - { - $kparams = array(); - $this->client->addParam($kparams, "id", $id); - $this->client->queueServiceActionCall("metadata_metadataprofile", "serveView", $kparams); - if(!$this->client->getDestinationPath() && !$this->client->getReturnServedResult()) - return $this->client->getServeUrl(); - return $this->client->doQueue(); - } -} -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaMetadataClientPlugin extends KalturaClientPlugin -{ - /** - * @var KalturaMetadataService - */ - public $metadata = null; - - /** - * @var KalturaMetadataProfileService - */ - public $metadataProfile = null; - - protected function __construct(KalturaClient $client) - { - parent::__construct($client); - $this->metadata = new KalturaMetadataService($client); - $this->metadataProfile = new KalturaMetadataProfileService($client); - } - - /** - * @return KalturaMetadataClientPlugin - */ - public static function get(KalturaClient $client) - { - return new KalturaMetadataClientPlugin($client); - } - - /** - * @return array - */ - public function getServices() - { - $services = array( - 'metadata' => $this->metadata, - 'metadataProfile' => $this->metadataProfile, - ); - return $services; - } - - /** - * @return string - */ - public function getName() - { - return 'metadata'; - } -} - diff --git a/local/kaltura/API/KalturaPlugins/KalturaMultiCentersClientPlugin.php b/local/kaltura/API/KalturaPlugins/KalturaMultiCentersClientPlugin.php deleted file mode 100644 index c3b2aff0a11b4..0000000000000 --- a/local/kaltura/API/KalturaPlugins/KalturaMultiCentersClientPlugin.php +++ /dev/null @@ -1,119 +0,0 @@ -. -// -// @ignore -// =================================================================================================== - -/** - * @package Kaltura - * @subpackage Client - */ -require_once(dirname(__FILE__) . "/../KalturaClientBase.php"); -require_once(dirname(__FILE__) . "/../KalturaEnums.php"); -require_once(dirname(__FILE__) . "/../KalturaTypes.php"); - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaFileSyncImportJobData extends KalturaJobData -{ - /** - * - * - * @var string - */ - public $sourceUrl = null; - - /** - * - * - * @var string - */ - public $filesyncId = null; - - /** - * - * - * @var string - */ - public $tmpFilePath = null; - - /** - * - * - * @var string - */ - public $destFilePath = null; - - /** - * - * - * @var int - */ - public $fileSize = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaMultiCentersClientPlugin extends KalturaClientPlugin -{ - protected function __construct(KalturaClient $client) - { - parent::__construct($client); - } - - /** - * @return KalturaMultiCentersClientPlugin - */ - public static function get(KalturaClient $client) - { - return new KalturaMultiCentersClientPlugin($client); - } - - /** - * @return array - */ - public function getServices() - { - $services = array( - ); - return $services; - } - - /** - * @return string - */ - public function getName() - { - return 'multiCenters'; - } -} - diff --git a/local/kaltura/API/KalturaPlugins/KalturaShortLinkClientPlugin.php b/local/kaltura/API/KalturaPlugins/KalturaShortLinkClientPlugin.php deleted file mode 100644 index 5da843b5e3be2..0000000000000 --- a/local/kaltura/API/KalturaPlugins/KalturaShortLinkClientPlugin.php +++ /dev/null @@ -1,476 +0,0 @@ -. -// -// @ignore -// =================================================================================================== - -/** - * @package Kaltura - * @subpackage Client - */ -require_once(dirname(__FILE__) . "/../KalturaClientBase.php"); -require_once(dirname(__FILE__) . "/../KalturaEnums.php"); -require_once(dirname(__FILE__) . "/../KalturaTypes.php"); - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaShortLinkStatus -{ - const DISABLED = 1; - const ENABLED = 2; - const DELETED = 3; -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaShortLinkOrderBy -{ - const CREATED_AT_ASC = "+createdAt"; - const EXPIRES_AT_ASC = "+expiresAt"; - const UPDATED_AT_ASC = "+updatedAt"; - const CREATED_AT_DESC = "-createdAt"; - const EXPIRES_AT_DESC = "-expiresAt"; - const UPDATED_AT_DESC = "-updatedAt"; -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaShortLink extends KalturaObjectBase -{ - /** - * - * - * @var int - * @readonly - */ - public $id = null; - - /** - * - * - * @var int - * @readonly - */ - public $createdAt = null; - - /** - * - * - * @var int - * @readonly - */ - public $updatedAt = null; - - /** - * - * - * @var int - */ - public $expiresAt = null; - - /** - * - * - * @var int - * @readonly - */ - public $partnerId = null; - - /** - * - * - * @var string - */ - public $userId = null; - - /** - * - * - * @var string - */ - public $name = null; - - /** - * - * - * @var string - */ - public $systemName = null; - - /** - * - * - * @var string - */ - public $fullUrl = null; - - /** - * - * - * @var KalturaShortLinkStatus - */ - public $status = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaShortLinkListResponse extends KalturaObjectBase -{ - /** - * - * - * @var array of KalturaShortLink - * @readonly - */ - public $objects; - - /** - * - * - * @var int - * @readonly - */ - public $totalCount = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -abstract class KalturaShortLinkBaseFilter extends KalturaFilter -{ - /** - * - * - * @var int - */ - public $idEqual = null; - - /** - * - * - * @var string - */ - public $idIn = null; - - /** - * - * - * @var int - */ - public $createdAtGreaterThanOrEqual = null; - - /** - * - * - * @var int - */ - public $createdAtLessThanOrEqual = null; - - /** - * - * - * @var int - */ - public $updatedAtGreaterThanOrEqual = null; - - /** - * - * - * @var int - */ - public $updatedAtLessThanOrEqual = null; - - /** - * - * - * @var int - */ - public $expiresAtGreaterThanOrEqual = null; - - /** - * - * - * @var int - */ - public $expiresAtLessThanOrEqual = null; - - /** - * - * - * @var int - */ - public $partnerIdEqual = null; - - /** - * - * - * @var string - */ - public $partnerIdIn = null; - - /** - * - * - * @var string - */ - public $userIdEqual = null; - - /** - * - * - * @var string - */ - public $userIdIn = null; - - /** - * - * - * @var string - */ - public $systemNameEqual = null; - - /** - * - * - * @var string - */ - public $systemNameIn = null; - - /** - * - * - * @var KalturaShortLinkStatus - */ - public $statusEqual = null; - - /** - * - * - * @var string - */ - public $statusIn = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaShortLinkFilter extends KalturaShortLinkBaseFilter -{ - -} - - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaShortLinkService extends KalturaServiceBase -{ - function __construct(KalturaClient $client = null) - { - parent::__construct($client); - } - - /** - * List short link objects by filter and pager - * - * @param KalturaShortLinkFilter $filter - * @param KalturaFilterPager $pager - * @return KalturaShortLinkListResponse - */ - function listAction(KalturaShortLinkFilter $filter = null, KalturaFilterPager $pager = null) - { - $kparams = array(); - if ($filter !== null) - $this->client->addParam($kparams, "filter", $filter->toParams()); - if ($pager !== null) - $this->client->addParam($kparams, "pager", $pager->toParams()); - $this->client->queueServiceActionCall("shortlink_shortlink", "list", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaShortLinkListResponse"); - return $resultObject; - } - - /** - * Allows you to add a short link object - * - * @param KalturaShortLink $shortLink - * @return KalturaShortLink - */ - function add(KalturaShortLink $shortLink) - { - $kparams = array(); - $this->client->addParam($kparams, "shortLink", $shortLink->toParams()); - $this->client->queueServiceActionCall("shortlink_shortlink", "add", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaShortLink"); - return $resultObject; - } - - /** - * Retrieve an short link object by id - * - * @param string $id - * @return KalturaShortLink - */ - function get($id) - { - $kparams = array(); - $this->client->addParam($kparams, "id", $id); - $this->client->queueServiceActionCall("shortlink_shortlink", "get", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaShortLink"); - return $resultObject; - } - - /** - * Update exisitng short link - * - * @param string $id - * @param KalturaShortLink $shortLink - * @return KalturaShortLink - */ - function update($id, KalturaShortLink $shortLink) - { - $kparams = array(); - $this->client->addParam($kparams, "id", $id); - $this->client->addParam($kparams, "shortLink", $shortLink->toParams()); - $this->client->queueServiceActionCall("shortlink_shortlink", "update", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaShortLink"); - return $resultObject; - } - - /** - * Mark the short link as deleted - * - * @param string $id - * @return KalturaShortLink - */ - function delete($id) - { - $kparams = array(); - $this->client->addParam($kparams, "id", $id); - $this->client->queueServiceActionCall("shortlink_shortlink", "delete", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaShortLink"); - return $resultObject; - } - - /** - * Serves short link - * - * @param string $id - * @param bool $proxy Proxy the response instead of redirect - * @return file - */ - function gotoAction($id, $proxy = false) - { - $kparams = array(); - $this->client->addParam($kparams, "id", $id); - $this->client->addParam($kparams, "proxy", $proxy); - $this->client->queueServiceActionCall("shortlink_shortlink", "goto", $kparams); - if(!$this->client->getDestinationPath() && !$this->client->getReturnServedResult()) - return $this->client->getServeUrl(); - return $this->client->doQueue(); - } -} -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaShortLinkClientPlugin extends KalturaClientPlugin -{ - /** - * @var KalturaShortLinkService - */ - public $shortLink = null; - - protected function __construct(KalturaClient $client) - { - parent::__construct($client); - $this->shortLink = new KalturaShortLinkService($client); - } - - /** - * @return KalturaShortLinkClientPlugin - */ - public static function get(KalturaClient $client) - { - return new KalturaShortLinkClientPlugin($client); - } - - /** - * @return array - */ - public function getServices() - { - $services = array( - 'shortLink' => $this->shortLink, - ); - return $services; - } - - /** - * @return string - */ - public function getName() - { - return 'shortLink'; - } -} - diff --git a/local/kaltura/API/KalturaPlugins/KalturaTagSearchClientPlugin.php b/local/kaltura/API/KalturaPlugins/KalturaTagSearchClientPlugin.php deleted file mode 100644 index 9c3080e1d0b09..0000000000000 --- a/local/kaltura/API/KalturaPlugins/KalturaTagSearchClientPlugin.php +++ /dev/null @@ -1,320 +0,0 @@ -. -// -// @ignore -// =================================================================================================== - -/** - * @package Kaltura - * @subpackage Client - */ -require_once(dirname(__FILE__) . "/../KalturaClientBase.php"); -require_once(dirname(__FILE__) . "/../KalturaEnums.php"); -require_once(dirname(__FILE__) . "/../KalturaTypes.php"); - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaTag extends KalturaObjectBase -{ - /** - * - * - * @var int - * @readonly - */ - public $id = null; - - /** - * - * - * @var string - * @readonly - */ - public $tag = null; - - /** - * - * - * @var KalturaTaggedObjectType - * @readonly - */ - public $taggedObjectType = null; - - /** - * - * - * @var int - * @readonly - */ - public $partnerId = null; - - /** - * - * - * @var int - * @readonly - */ - public $instanceCount = null; - - /** - * - * - * @var int - * @readonly - */ - public $createdAt = null; - - /** - * - * - * @var int - * @readonly - */ - public $updatedAt = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaTagListResponse extends KalturaObjectBase -{ - /** - * - * - * @var array of KalturaTag - * @readonly - */ - public $objects; - - /** - * - * - * @var int - * @readonly - */ - public $totalCount = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaIndexTagsByPrivacyContextJobData extends KalturaJobData -{ - /** - * - * - * @var int - */ - public $changedCategoryId = null; - - /** - * - * - * @var string - */ - public $deletedPrivacyContexts = null; - - /** - * - * - * @var string - */ - public $addedPrivacyContexts = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaTagFilter extends KalturaFilter -{ - /** - * - * - * @var KalturaTaggedObjectType - */ - public $objectTypeEqual = null; - - /** - * - * - * @var string - */ - public $tagEqual = null; - - /** - * - * - * @var string - */ - public $tagStartsWith = null; - - /** - * - * - * @var int - */ - public $instanceCountEqual = null; - - /** - * - * - * @var int - */ - public $instanceCountIn = null; - - -} - - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaTagService extends KalturaServiceBase -{ - function __construct(KalturaClient $client = null) - { - parent::__construct($client); - } - - /** - * - * - * @param KalturaTagFilter $tagFilter - * @param KalturaFilterPager $pager - * @return KalturaTagListResponse - */ - function search(KalturaTagFilter $tagFilter, KalturaFilterPager $pager = null) - { - $kparams = array(); - $this->client->addParam($kparams, "tagFilter", $tagFilter->toParams()); - if ($pager !== null) - $this->client->addParam($kparams, "pager", $pager->toParams()); - $this->client->queueServiceActionCall("tagsearch_tag", "search", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaTagListResponse"); - return $resultObject; - } - - /** - * Action goes over all tags with instanceCount==0 and checks whether they need to be removed from the DB. Returns number of removed tags. - * - * @return int - */ - function deletePending() - { - $kparams = array(); - $this->client->queueServiceActionCall("tagsearch_tag", "deletePending", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "integer"); - return $resultObject; - } - - /** - * - * - * @param int $categoryId - * @param string $pcToDecrement - * @param string $pcToIncrement - * @return - */ - function indexCategoryEntryTags($categoryId, $pcToDecrement, $pcToIncrement) - { - $kparams = array(); - $this->client->addParam($kparams, "categoryId", $categoryId); - $this->client->addParam($kparams, "pcToDecrement", $pcToDecrement); - $this->client->addParam($kparams, "pcToIncrement", $pcToIncrement); - $this->client->queueServiceActionCall("tagsearch_tag", "indexCategoryEntryTags", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "null"); - return $resultObject; - } -} -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaTagSearchClientPlugin extends KalturaClientPlugin -{ - /** - * @var KalturaTagService - */ - public $tag = null; - - protected function __construct(KalturaClient $client) - { - parent::__construct($client); - $this->tag = new KalturaTagService($client); - } - - /** - * @return KalturaTagSearchClientPlugin - */ - public static function get(KalturaClient $client) - { - return new KalturaTagSearchClientPlugin($client); - } - - /** - * @return array - */ - public function getServices() - { - $services = array( - 'tag' => $this->tag, - ); - return $services; - } - - /** - * @return string - */ - public function getName() - { - return 'tagSearch'; - } -} - diff --git a/local/kaltura/API/KalturaPlugins/KalturaVarConsoleClientPlugin.php b/local/kaltura/API/KalturaPlugins/KalturaVarConsoleClientPlugin.php deleted file mode 100644 index 83e347358b4a7..0000000000000 --- a/local/kaltura/API/KalturaPlugins/KalturaVarConsoleClientPlugin.php +++ /dev/null @@ -1,398 +0,0 @@ -. -// -// @ignore -// =================================================================================================== - -/** - * @package Kaltura - * @subpackage Client - */ -require_once(dirname(__FILE__) . "/../KalturaClientBase.php"); -require_once(dirname(__FILE__) . "/../KalturaEnums.php"); -require_once(dirname(__FILE__) . "/../KalturaTypes.php"); - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaVarPartnerUsageItem extends KalturaObjectBase -{ - /** - * Partner ID - * - * - * @var int - */ - public $partnerId = null; - - /** - * Partner name - * - * - * @var string - */ - public $partnerName = null; - - /** - * Partner status - * - * - * @var KalturaPartnerStatus - */ - public $partnerStatus = null; - - /** - * Partner package - * - * - * @var int - */ - public $partnerPackage = null; - - /** - * Partner creation date (Unix timestamp) - * - * - * @var int - */ - public $partnerCreatedAt = null; - - /** - * Number of player loads in the specific date range - * - * - * @var int - */ - public $views = null; - - /** - * Number of plays in the specific date range - * - * - * @var int - */ - public $plays = null; - - /** - * Number of new entries created during specific date range - * - * - * @var int - */ - public $entriesCount = null; - - /** - * Total number of entries - * - * - * @var int - */ - public $totalEntriesCount = null; - - /** - * Number of new video entries created during specific date range - * - * - * @var int - */ - public $videoEntriesCount = null; - - /** - * Number of new image entries created during specific date range - * - * - * @var int - */ - public $imageEntriesCount = null; - - /** - * Number of new audio entries created during specific date range - * - * - * @var int - */ - public $audioEntriesCount = null; - - /** - * Number of new mix entries created during specific date range - * - * - * @var int - */ - public $mixEntriesCount = null; - - /** - * The total bandwidth usage during the given date range (in MB) - * - * - * @var float - */ - public $bandwidth = null; - - /** - * The total storage consumption (in MB) - * - * - * @var float - */ - public $totalStorage = null; - - /** - * The added storage consumption (new uploads) during the given date range (in MB) - * - * - * @var float - */ - public $storage = null; - - /** - * The deleted storage consumption (new uploads) during the given date range (in MB) - * - * - * @var float - */ - public $deletedStorage = null; - - /** - * The peak amount of storage consumption during the given date range for the specific publisher - * - * - * @var float - */ - public $peakStorage = null; - - /** - * The average amount of storage consumption during the given date range for the specific publisher - * - * - * @var float - */ - public $avgStorage = null; - - /** - * The combined amount of bandwidth and storage consumed during the given date range for the specific publisher - * - * - * @var float - */ - public $combinedStorageBandwidth = null; - - /** - * Amount of transcoding usage in MB - * - * - * @var float - */ - public $transcodingUsage = null; - - /** - * TGhe date at which the report was taken - Unix Timestamp - * - * - * @var string - */ - public $dateId = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaPartnerUsageListResponse extends KalturaObjectBase -{ - /** - * - * - * @var KalturaVarPartnerUsageItem - */ - public $total; - - /** - * - * - * @var array of KalturaVarPartnerUsageItem - */ - public $objects; - - /** - * - * - * @var int - */ - public $totalCount = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaVarPartnerUsageTotalItem extends KalturaVarPartnerUsageItem -{ - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaVarConsolePartnerFilter extends KalturaPartnerFilter -{ - /** - * Eq filter for the partner's group type - * - * - * @var KalturaPartnerGroupType - */ - public $groupTypeEq = null; - - /** - * In filter for the partner's group type - * - * - * @var string - */ - public $groupTypeIn = null; - - /** - * Filter for partner permissions- filter contains comma-separated string of permission names which the returned partners should have. - * - * - * @var string - */ - public $partnerPermissionsExist = null; - - -} - - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaVarConsoleService extends KalturaServiceBase -{ - function __construct(KalturaClient $client = null) - { - parent::__construct($client); - } - - /** - * Function which calulates partner usage of a group of a VAR's sub-publishers - * - * @param KalturaPartnerFilter $partnerFilter - * @param KalturaReportInputFilter $usageFilter - * @param KalturaFilterPager $pager - * @return KalturaPartnerUsageListResponse - */ - function getPartnerUsage(KalturaPartnerFilter $partnerFilter = null, KalturaReportInputFilter $usageFilter = null, KalturaFilterPager $pager = null) - { - $kparams = array(); - if ($partnerFilter !== null) - $this->client->addParam($kparams, "partnerFilter", $partnerFilter->toParams()); - if ($usageFilter !== null) - $this->client->addParam($kparams, "usageFilter", $usageFilter->toParams()); - if ($pager !== null) - $this->client->addParam($kparams, "pager", $pager->toParams()); - $this->client->queueServiceActionCall("varconsole_varconsole", "getPartnerUsage", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaPartnerUsageListResponse"); - return $resultObject; - } - - /** - * Function to change a sub-publisher's status - * - * @param int $id - * @param int $status - * @return - */ - function updateStatus($id, $status) - { - $kparams = array(); - $this->client->addParam($kparams, "id", $id); - $this->client->addParam($kparams, "status", $status); - $this->client->queueServiceActionCall("varconsole_varconsole", "updateStatus", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "null"); - return $resultObject; - } -} -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaVarConsoleClientPlugin extends KalturaClientPlugin -{ - /** - * @var KalturaVarConsoleService - */ - public $varConsole = null; - - protected function __construct(KalturaClient $client) - { - parent::__construct($client); - $this->varConsole = new KalturaVarConsoleService($client); - } - - /** - * @return KalturaVarConsoleClientPlugin - */ - public static function get(KalturaClient $client) - { - return new KalturaVarConsoleClientPlugin($client); - } - - /** - * @return array - */ - public function getServices() - { - $services = array( - 'varConsole' => $this->varConsole, - ); - return $services; - } - - /** - * @return string - */ - public function getName() - { - return 'varConsole'; - } -} - diff --git a/local/kaltura/API/KalturaPlugins/KalturaVelocixClientPlugin.php b/local/kaltura/API/KalturaPlugins/KalturaVelocixClientPlugin.php deleted file mode 100644 index 5c4ff95bcb4f0..0000000000000 --- a/local/kaltura/API/KalturaPlugins/KalturaVelocixClientPlugin.php +++ /dev/null @@ -1,105 +0,0 @@ -. -// -// @ignore -// =================================================================================================== - -/** - * @package Kaltura - * @subpackage Client - */ -require_once(dirname(__FILE__) . "/../KalturaClientBase.php"); -require_once(dirname(__FILE__) . "/../KalturaEnums.php"); -require_once(dirname(__FILE__) . "/../KalturaTypes.php"); - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaVelocixProvisionJobData extends KalturaProvisionJobData -{ - /** - * - * - * @var array of KalturaKeyValue - */ - public $provisioningParams; - - /** - * - * - * @var string - */ - public $userName = null; - - /** - * - * - * @var string - */ - public $password = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaVelocixClientPlugin extends KalturaClientPlugin -{ - protected function __construct(KalturaClient $client) - { - parent::__construct($client); - } - - /** - * @return KalturaVelocixClientPlugin - */ - public static function get(KalturaClient $client) - { - return new KalturaVelocixClientPlugin($client); - } - - /** - * @return array - */ - public function getServices() - { - $services = array( - ); - return $services; - } - - /** - * @return string - */ - public function getName() - { - return 'velocix'; - } -} - diff --git a/local/kaltura/API/KalturaPlugins/KalturaVirusScanClientPlugin.php b/local/kaltura/API/KalturaPlugins/KalturaVirusScanClientPlugin.php deleted file mode 100644 index 77aacf1295b49..0000000000000 --- a/local/kaltura/API/KalturaPlugins/KalturaVirusScanClientPlugin.php +++ /dev/null @@ -1,545 +0,0 @@ -. -// -// @ignore -// =================================================================================================== - -/** - * @package Kaltura - * @subpackage Client - */ -require_once(dirname(__FILE__) . "/../KalturaClientBase.php"); -require_once(dirname(__FILE__) . "/../KalturaEnums.php"); -require_once(dirname(__FILE__) . "/../KalturaTypes.php"); - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaVirusFoundAction -{ - const NONE = 0; - const DELETE = 1; - const CLEAN_NONE = 2; - const CLEAN_DELETE = 3; -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaVirusScanJobResult -{ - const SCAN_ERROR = 1; - const FILE_IS_CLEAN = 2; - const FILE_WAS_CLEANED = 3; - const FILE_INFECTED = 4; -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaVirusScanProfileStatus -{ - const DISABLED = 1; - const ENABLED = 2; - const DELETED = 3; -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaVirusScanEngineType -{ - const CLAMAV_SCAN_ENGINE = "clamAVScanEngine.ClamAV"; - const SYMANTEC_SCAN_DIRECT_ENGINE = "symantecScanEngine.SymantecScanDirectEngine"; - const SYMANTEC_SCAN_ENGINE = "symantecScanEngine.SymantecScanEngine"; - const SYMANTEC_SCAN_JAVA_ENGINE = "symantecScanEngine.SymantecScanJavaEngine"; -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaVirusScanProfileOrderBy -{ - const CREATED_AT_ASC = "+createdAt"; - const UPDATED_AT_ASC = "+updatedAt"; - const CREATED_AT_DESC = "-createdAt"; - const UPDATED_AT_DESC = "-updatedAt"; -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaVirusScanProfile extends KalturaObjectBase -{ - /** - * - * - * @var int - * @readonly - */ - public $id = null; - - /** - * - * - * @var int - * @readonly - */ - public $createdAt = null; - - /** - * - * - * @var int - * @readonly - */ - public $updatedAt = null; - - /** - * - * - * @var int - * @readonly - */ - public $partnerId = null; - - /** - * - * - * @var string - */ - public $name = null; - - /** - * - * - * @var KalturaVirusScanProfileStatus - */ - public $status = null; - - /** - * - * - * @var KalturaVirusScanEngineType - */ - public $engineType = null; - - /** - * - * - * @var KalturaBaseEntryFilter - */ - public $entryFilter; - - /** - * - * - * @var KalturaVirusFoundAction - */ - public $actionIfInfected = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaVirusScanProfileListResponse extends KalturaObjectBase -{ - /** - * - * - * @var array of KalturaVirusScanProfile - * @readonly - */ - public $objects; - - /** - * - * - * @var int - * @readonly - */ - public $totalCount = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaParseCaptionAssetJobData extends KalturaJobData -{ - /** - * - * - * @var string - */ - public $captionAssetId = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaVirusScanJobData extends KalturaJobData -{ - /** - * - * - * @var string - */ - public $srcFilePath = null; - - /** - * - * - * @var string - */ - public $flavorAssetId = null; - - /** - * - * - * @var KalturaVirusScanJobResult - */ - public $scanResult = null; - - /** - * - * - * @var KalturaVirusFoundAction - */ - public $virusFoundAction = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -abstract class KalturaVirusScanProfileBaseFilter extends KalturaFilter -{ - /** - * - * - * @var int - */ - public $idEqual = null; - - /** - * - * - * @var string - */ - public $idIn = null; - - /** - * - * - * @var int - */ - public $createdAtGreaterThanOrEqual = null; - - /** - * - * - * @var int - */ - public $createdAtLessThanOrEqual = null; - - /** - * - * - * @var int - */ - public $updatedAtGreaterThanOrEqual = null; - - /** - * - * - * @var int - */ - public $updatedAtLessThanOrEqual = null; - - /** - * - * - * @var int - */ - public $partnerIdEqual = null; - - /** - * - * - * @var string - */ - public $partnerIdIn = null; - - /** - * - * - * @var string - */ - public $nameEqual = null; - - /** - * - * - * @var string - */ - public $nameLike = null; - - /** - * - * - * @var KalturaVirusScanProfileStatus - */ - public $statusEqual = null; - - /** - * - * - * @var string - */ - public $statusIn = null; - - /** - * - * - * @var KalturaVirusScanEngineType - */ - public $engineTypeEqual = null; - - /** - * - * - * @var string - */ - public $engineTypeIn = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaVirusScanProfileFilter extends KalturaVirusScanProfileBaseFilter -{ - -} - - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaVirusScanProfileService extends KalturaServiceBase -{ - function __construct(KalturaClient $client = null) - { - parent::__construct($client); - } - - /** - * List virus scan profile objects by filter and pager - * - * @param KalturaVirusScanProfileFilter $filter - * @param KalturaFilterPager $pager - * @return KalturaVirusScanProfileListResponse - */ - function listAction(KalturaVirusScanProfileFilter $filter = null, KalturaFilterPager $pager = null) - { - $kparams = array(); - if ($filter !== null) - $this->client->addParam($kparams, "filter", $filter->toParams()); - if ($pager !== null) - $this->client->addParam($kparams, "pager", $pager->toParams()); - $this->client->queueServiceActionCall("virusscan_virusscanprofile", "list", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaVirusScanProfileListResponse"); - return $resultObject; - } - - /** - * Allows you to add an virus scan profile object and virus scan profile content associated with Kaltura object - * - * @param KalturaVirusScanProfile $virusScanProfile - * @return KalturaVirusScanProfile - */ - function add(KalturaVirusScanProfile $virusScanProfile) - { - $kparams = array(); - $this->client->addParam($kparams, "virusScanProfile", $virusScanProfile->toParams()); - $this->client->queueServiceActionCall("virusscan_virusscanprofile", "add", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaVirusScanProfile"); - return $resultObject; - } - - /** - * Retrieve an virus scan profile object by id - * - * @param int $virusScanProfileId - * @return KalturaVirusScanProfile - */ - function get($virusScanProfileId) - { - $kparams = array(); - $this->client->addParam($kparams, "virusScanProfileId", $virusScanProfileId); - $this->client->queueServiceActionCall("virusscan_virusscanprofile", "get", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaVirusScanProfile"); - return $resultObject; - } - - /** - * Update exisitng virus scan profile, it is possible to update the virus scan profile id too - * - * @param int $virusScanProfileId - * @param KalturaVirusScanProfile $virusScanProfile Id - * @return KalturaVirusScanProfile - */ - function update($virusScanProfileId, KalturaVirusScanProfile $virusScanProfile) - { - $kparams = array(); - $this->client->addParam($kparams, "virusScanProfileId", $virusScanProfileId); - $this->client->addParam($kparams, "virusScanProfile", $virusScanProfile->toParams()); - $this->client->queueServiceActionCall("virusscan_virusscanprofile", "update", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaVirusScanProfile"); - return $resultObject; - } - - /** - * Mark the virus scan profile as deleted - * - * @param int $virusScanProfileId - * @return KalturaVirusScanProfile - */ - function delete($virusScanProfileId) - { - $kparams = array(); - $this->client->addParam($kparams, "virusScanProfileId", $virusScanProfileId); - $this->client->queueServiceActionCall("virusscan_virusscanprofile", "delete", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaVirusScanProfile"); - return $resultObject; - } - - /** - * Scan flavor asset according to virus scan profile - * - * @param string $flavorAssetId - * @param int $virusScanProfileId - * @return int - */ - function scan($flavorAssetId, $virusScanProfileId = null) - { - $kparams = array(); - $this->client->addParam($kparams, "flavorAssetId", $flavorAssetId); - $this->client->addParam($kparams, "virusScanProfileId", $virusScanProfileId); - $this->client->queueServiceActionCall("virusscan_virusscanprofile", "scan", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "integer"); - return $resultObject; - } -} -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaVirusScanClientPlugin extends KalturaClientPlugin -{ - /** - * @var KalturaVirusScanProfileService - */ - public $virusScanProfile = null; - - protected function __construct(KalturaClient $client) - { - parent::__construct($client); - $this->virusScanProfile = new KalturaVirusScanProfileService($client); - } - - /** - * @return KalturaVirusScanClientPlugin - */ - public static function get(KalturaClient $client) - { - return new KalturaVirusScanClientPlugin($client); - } - - /** - * @return array - */ - public function getServices() - { - $services = array( - 'virusScanProfile' => $this->virusScanProfile, - ); - return $services; - } - - /** - * @return string - */ - public function getName() - { - return 'virusScan'; - } -} - diff --git a/local/kaltura/API/KalturaPlugins/KalturaWebexDropFolderClientPlugin.php b/local/kaltura/API/KalturaPlugins/KalturaWebexDropFolderClientPlugin.php deleted file mode 100644 index b25e7eaec3a03..0000000000000 --- a/local/kaltura/API/KalturaPlugins/KalturaWebexDropFolderClientPlugin.php +++ /dev/null @@ -1,292 +0,0 @@ -. -// -// @ignore -// =================================================================================================== - -/** - * @package Kaltura - * @subpackage Client - */ -require_once(dirname(__FILE__) . "/../KalturaClientBase.php"); -require_once(dirname(__FILE__) . "/../KalturaEnums.php"); -require_once(dirname(__FILE__) . "/../KalturaTypes.php"); -require_once(dirname(__FILE__) . "/KalturaDropFolderClientPlugin.php"); -require_once(dirname(__FILE__) . "/KalturaMetadataClientPlugin.php"); - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaWebexDropFolderFileOrderBy -{ - const CREATED_AT_ASC = "+createdAt"; - const FILE_NAME_ASC = "+fileName"; - const FILE_SIZE_ASC = "+fileSize"; - const FILE_SIZE_LAST_SET_AT_ASC = "+fileSizeLastSetAt"; - const ID_ASC = "+id"; - const PARSED_FLAVOR_ASC = "+parsedFlavor"; - const PARSED_SLUG_ASC = "+parsedSlug"; - const UPDATED_AT_ASC = "+updatedAt"; - const CREATED_AT_DESC = "-createdAt"; - const FILE_NAME_DESC = "-fileName"; - const FILE_SIZE_DESC = "-fileSize"; - const FILE_SIZE_LAST_SET_AT_DESC = "-fileSizeLastSetAt"; - const ID_DESC = "-id"; - const PARSED_FLAVOR_DESC = "-parsedFlavor"; - const PARSED_SLUG_DESC = "-parsedSlug"; - const UPDATED_AT_DESC = "-updatedAt"; -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaWebexDropFolderOrderBy -{ - const CREATED_AT_ASC = "+createdAt"; - const ID_ASC = "+id"; - const NAME_ASC = "+name"; - const UPDATED_AT_ASC = "+updatedAt"; - const CREATED_AT_DESC = "-createdAt"; - const ID_DESC = "-id"; - const NAME_DESC = "-name"; - const UPDATED_AT_DESC = "-updatedAt"; -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaWebexDropFolder extends KalturaDropFolder -{ - /** - * - * - * @var string - */ - public $webexUserId = null; - - /** - * - * - * @var string - */ - public $webexPassword = null; - - /** - * - * - * @var int - */ - public $webexSiteId = null; - - /** - * - * - * @var string - */ - public $webexPartnerId = null; - - /** - * - * - * @var string - */ - public $webexServiceUrl = null; - - /** - * - * - * @var string - */ - public $webexHostIdMetadataFieldName = null; - - /** - * - * - * @var string - */ - public $categoriesMetadataFieldName = null; - - /** - * - * - * @var bool - */ - public $enforceEntitlement = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaWebexDropFolderFile extends KalturaDropFolderFile -{ - /** - * - * - * @var int - */ - public $recordingId = null; - - /** - * - * - * @var string - */ - public $webexHostId = null; - - /** - * - * - * @var string - */ - public $description = null; - - /** - * - * - * @var string - */ - public $confId = null; - - /** - * - * - * @var string - */ - public $contentUrl = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaWebexDropFolderContentProcessorJobData extends KalturaDropFolderContentProcessorJobData -{ - /** - * - * - * @var string - */ - public $description = null; - - /** - * - * - * @var string - */ - public $webexHostId = null; - - /** - * - * - * @var int - */ - public $dropFolderId = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -abstract class KalturaWebexDropFolderBaseFilter extends KalturaDropFolderFilter -{ - -} - -/** - * @package Kaltura - * @subpackage Client - */ -abstract class KalturaWebexDropFolderFileBaseFilter extends KalturaDropFolderFileFilter -{ - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaWebexDropFolderFileFilter extends KalturaWebexDropFolderFileBaseFilter -{ - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaWebexDropFolderFilter extends KalturaWebexDropFolderBaseFilter -{ - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaWebexDropFolderClientPlugin extends KalturaClientPlugin -{ - protected function __construct(KalturaClient $client) - { - parent::__construct($client); - } - - /** - * @return KalturaWebexDropFolderClientPlugin - */ - public static function get(KalturaClient $client) - { - return new KalturaWebexDropFolderClientPlugin($client); - } - - /** - * @return array - */ - public function getServices() - { - $services = array( - ); - return $services; - } - - /** - * @return string - */ - public function getName() - { - return 'WebexDropFolder'; - } -} - diff --git a/local/kaltura/API/KalturaPlugins/KalturaWidevineClientPlugin.php b/local/kaltura/API/KalturaPlugins/KalturaWidevineClientPlugin.php deleted file mode 100644 index c674c6bf508bb..0000000000000 --- a/local/kaltura/API/KalturaPlugins/KalturaWidevineClientPlugin.php +++ /dev/null @@ -1,396 +0,0 @@ -. -// -// @ignore -// =================================================================================================== - -/** - * @package Kaltura - * @subpackage Client - */ -require_once(dirname(__FILE__) . "/../KalturaClientBase.php"); -require_once(dirname(__FILE__) . "/../KalturaEnums.php"); -require_once(dirname(__FILE__) . "/../KalturaTypes.php"); -require_once(dirname(__FILE__) . "/KalturaDrmClientPlugin.php"); - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaWidevineRepositorySyncMode -{ - const MODIFY = 0; -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaWidevineFlavorAssetOrderBy -{ - const CREATED_AT_ASC = "+createdAt"; - const DELETED_AT_ASC = "+deletedAt"; - const SIZE_ASC = "+size"; - const UPDATED_AT_ASC = "+updatedAt"; - const CREATED_AT_DESC = "-createdAt"; - const DELETED_AT_DESC = "-deletedAt"; - const SIZE_DESC = "-size"; - const UPDATED_AT_DESC = "-updatedAt"; -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaWidevineFlavorParamsOrderBy -{ -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaWidevineFlavorParamsOutputOrderBy -{ -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaWidevineProfileOrderBy -{ - const ID_ASC = "+id"; - const NAME_ASC = "+name"; - const ID_DESC = "-id"; - const NAME_DESC = "-name"; -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaWidevineProfile extends KalturaDrmProfile -{ - /** - * - * - * @var string - */ - public $key = null; - - /** - * - * - * @var string - */ - public $iv = null; - - /** - * - * - * @var string - */ - public $owner = null; - - /** - * - * - * @var string - */ - public $portal = null; - - /** - * - * - * @var int - */ - public $maxGop = null; - - /** - * - * - * @var string - */ - public $regServerHost = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaWidevineRepositorySyncJobData extends KalturaJobData -{ - /** - * - * - * @var KalturaWidevineRepositorySyncMode - */ - public $syncMode = null; - - /** - * - * - * @var string - */ - public $wvAssetIds = null; - - /** - * - * - * @var string - */ - public $modifiedAttributes = null; - - /** - * - * - * @var int - */ - public $monitorSyncCompletion = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaWidevineFlavorAsset extends KalturaFlavorAsset -{ - /** - * License distribution window start date - * - * - * @var int - */ - public $widevineDistributionStartDate = null; - - /** - * License distribution window end date - * - * - * @var int - */ - public $widevineDistributionEndDate = null; - - /** - * Widevine unique asset id - * - * - * @var int - */ - public $widevineAssetId = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaWidevineFlavorParams extends KalturaFlavorParams -{ - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaWidevineFlavorParamsOutput extends KalturaFlavorParamsOutput -{ - /** - * License distribution window start date - * - * - * @var int - */ - public $widevineDistributionStartDate = null; - - /** - * License distribution window end date - * - * - * @var int - */ - public $widevineDistributionEndDate = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -abstract class KalturaWidevineProfileBaseFilter extends KalturaDrmProfileFilter -{ - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaWidevineProfileFilter extends KalturaWidevineProfileBaseFilter -{ - -} - -/** - * @package Kaltura - * @subpackage Client - */ -abstract class KalturaWidevineFlavorAssetBaseFilter extends KalturaFlavorAssetFilter -{ - -} - -/** - * @package Kaltura - * @subpackage Client - */ -abstract class KalturaWidevineFlavorParamsBaseFilter extends KalturaFlavorParamsFilter -{ - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaWidevineFlavorAssetFilter extends KalturaWidevineFlavorAssetBaseFilter -{ - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaWidevineFlavorParamsFilter extends KalturaWidevineFlavorParamsBaseFilter -{ - -} - -/** - * @package Kaltura - * @subpackage Client - */ -abstract class KalturaWidevineFlavorParamsOutputBaseFilter extends KalturaFlavorParamsOutputFilter -{ - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaWidevineFlavorParamsOutputFilter extends KalturaWidevineFlavorParamsOutputBaseFilter -{ - -} - - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaWidevineDrmService extends KalturaServiceBase -{ - function __construct(KalturaClient $client = null) - { - parent::__construct($client); - } - - /** - * Get license for encrypted content playback - * - * @param string $flavorAssetId - * @param string $referrer 64base encoded - * @return string - */ - function getLicense($flavorAssetId, $referrer = null) - { - $kparams = array(); - $this->client->addParam($kparams, "flavorAssetId", $flavorAssetId); - $this->client->addParam($kparams, "referrer", $referrer); - $this->client->queueServiceActionCall("widevine_widevinedrm", "getLicense", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "string"); - return $resultObject; - } -} -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaWidevineClientPlugin extends KalturaClientPlugin -{ - /** - * @var KalturaWidevineDrmService - */ - public $widevineDrm = null; - - protected function __construct(KalturaClient $client) - { - parent::__construct($client); - $this->widevineDrm = new KalturaWidevineDrmService($client); - } - - /** - * @return KalturaWidevineClientPlugin - */ - public static function get(KalturaClient $client) - { - return new KalturaWidevineClientPlugin($client); - } - - /** - * @return array - */ - public function getServices() - { - $services = array( - 'widevineDrm' => $this->widevineDrm, - ); - return $services; - } - - /** - * @return string - */ - public function getName() - { - return 'widevine'; - } -} - diff --git a/local/kaltura/API/KalturaTypes.php b/local/kaltura/API/KalturaTypes.php deleted file mode 100644 index 0cde7474bf5f7..0000000000000 --- a/local/kaltura/API/KalturaTypes.php +++ /dev/null @@ -1,16367 +0,0 @@ -. -// -// @ignore -// =================================================================================================== - -/** - * @package Kaltura - * @subpackage Client - */ -require_once(dirname(__FILE__) . "/KalturaClientBase.php"); - -/** - * @package Kaltura - * @subpackage Client - */ -abstract class KalturaBaseRestriction extends KalturaObjectBase -{ - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaAccessControl extends KalturaObjectBase -{ - /** - * The id of the Access Control Profile - * - * - * @var int - * @readonly - */ - public $id = null; - - /** - * - * - * @var int - * @readonly - */ - public $partnerId = null; - - /** - * The name of the Access Control Profile - * - * - * @var string - */ - public $name = null; - - /** - * System name of the Access Control Profile - * - * - * @var string - */ - public $systemName = null; - - /** - * The description of the Access Control Profile - * - * - * @var string - */ - public $description = null; - - /** - * Creation date as Unix timestamp (In seconds) - * - * - * @var int - * @readonly - */ - public $createdAt = null; - - /** - * True if this Conversion Profile is the default - * - * - * @var KalturaNullableBoolean - */ - public $isDefault = null; - - /** - * Array of Access Control Restrictions - * - * - * @var array of KalturaBaseRestriction - */ - public $restrictions; - - /** - * Indicates that the access control profile is new and should be handled using KalturaAccessControlProfile object and accessControlProfile service - * - * - * @var bool - * @readonly - */ - public $containsUnsuportedRestrictions = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaContextTypeHolder extends KalturaObjectBase -{ - /** - * The type of the condition context - * - * - * @var KalturaContextType - */ - public $type = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaAccessControlContextTypeHolder extends KalturaContextTypeHolder -{ - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaAccessControlListResponse extends KalturaObjectBase -{ - /** - * - * - * @var array of KalturaAccessControl - * @readonly - */ - public $objects; - - /** - * - * - * @var int - * @readonly - */ - public $totalCount = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -abstract class KalturaRuleAction extends KalturaObjectBase -{ - /** - * The type of the action - * - * - * @var KalturaRuleActionType - * @readonly - */ - public $type = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -abstract class KalturaCondition extends KalturaObjectBase -{ - /** - * The type of the access control condition - * - * - * @var KalturaConditionType - * @readonly - */ - public $type = null; - - /** - * - * - * @var string - */ - public $description = null; - - /** - * - * - * @var bool - */ - public $not = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaRule extends KalturaObjectBase -{ - /** - * Message to be thrown to the player in case the rule is fulfilled - * - * - * @var string - */ - public $message = null; - - /** - * Actions to be performed by the player in case the rule is fulfilled - * - * - * @var array of KalturaRuleAction - */ - public $actions; - - /** - * Conditions to validate the rule - * - * - * @var array of KalturaCondition - */ - public $conditions; - - /** - * Indicates what contexts should be tested by this rule - * - * - * @var array of KalturaContextTypeHolder - */ - public $contexts; - - /** - * Indicates that this rule is enough and no need to continue checking the rest of the rules - * - * - * @var bool - */ - public $stopProcessing = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaAccessControlProfile extends KalturaObjectBase -{ - /** - * The id of the Access Control Profile - * - * - * @var int - * @readonly - */ - public $id = null; - - /** - * - * - * @var int - * @readonly - */ - public $partnerId = null; - - /** - * The name of the Access Control Profile - * - * - * @var string - */ - public $name = null; - - /** - * System name of the Access Control Profile - * - * - * @var string - */ - public $systemName = null; - - /** - * The description of the Access Control Profile - * - * - * @var string - */ - public $description = null; - - /** - * Creation time as Unix timestamp (In seconds) - * - * - * @var int - * @readonly - */ - public $createdAt = null; - - /** - * Update time as Unix timestamp (In seconds) - * - * - * @var int - * @readonly - */ - public $updatedAt = null; - - /** - * True if this access control profile is the partner default - * - * - * @var KalturaNullableBoolean - */ - public $isDefault = null; - - /** - * Array of access control rules - * - * - * @var array of KalturaRule - */ - public $rules; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaAccessControlProfileListResponse extends KalturaObjectBase -{ - /** - * - * - * @var array of KalturaAccessControlProfile - * @readonly - */ - public $objects; - - /** - * - * - * @var int - * @readonly - */ - public $totalCount = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaKeyValue extends KalturaObjectBase -{ - /** - * - * - * @var string - */ - public $key = null; - - /** - * - * - * @var string - */ - public $value = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaAccessControlScope extends KalturaObjectBase -{ - /** - * URL to be used to test domain conditions. - * - * - * @var string - */ - public $referrer = null; - - /** - * IP to be used to test geographic location conditions. - * - * - * @var string - */ - public $ip = null; - - /** - * Kaltura session to be used to test session and user conditions. - * - * - * @var string - */ - public $ks = null; - - /** - * Browser or client application to be used to test agent conditions. - * - * - * @var string - */ - public $userAgent = null; - - /** - * Unix timestamp (In seconds) to be used to test entry scheduling, keep null to use now. - * - * - * @var int - */ - public $time = null; - - /** - * Indicates what contexts should be tested. No contexts means any context. - * - * - * @var array of KalturaAccessControlContextTypeHolder - */ - public $contexts; - - /** - * Array of hashes to pass to the access control profile scope - * - * - * @var array of KalturaKeyValue - */ - public $hashes; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaAsset extends KalturaObjectBase -{ - /** - * The ID of the Flavor Asset - * - * - * @var string - * @readonly - */ - public $id = null; - - /** - * The entry ID of the Flavor Asset - * - * - * @var string - * @readonly - */ - public $entryId = null; - - /** - * - * - * @var int - * @readonly - */ - public $partnerId = null; - - /** - * The version of the Flavor Asset - * - * - * @var int - * @readonly - */ - public $version = null; - - /** - * The size (in KBytes) of the Flavor Asset - * - * - * @var int - * @readonly - */ - public $size = null; - - /** - * Tags used to identify the Flavor Asset in various scenarios - * - * - * @var string - */ - public $tags = null; - - /** - * The file extension - * - * - * @var string - * @insertonly - */ - public $fileExt = null; - - /** - * - * - * @var int - * @readonly - */ - public $createdAt = null; - - /** - * - * - * @var int - * @readonly - */ - public $updatedAt = null; - - /** - * - * - * @var int - * @readonly - */ - public $deletedAt = null; - - /** - * System description, error message, warnings and failure cause. - * - * - * @var string - * @readonly - */ - public $description = null; - - /** - * Partner private data - * - * - * @var string - */ - public $partnerData = null; - - /** - * Partner friendly description - * - * - * @var string - */ - public $partnerDescription = null; - - /** - * Comma separated list of source flavor params ids - * - * - * @var string - */ - public $actualSourceAssetParamsIds = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaString extends KalturaObjectBase -{ - /** - * - * - * @var string - */ - public $value = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaAssetParams extends KalturaObjectBase -{ - /** - * The id of the Flavor Params - * - * - * @var int - * @readonly - */ - public $id = null; - - /** - * - * - * @var int - * @readonly - */ - public $partnerId = null; - - /** - * The name of the Flavor Params - * - * - * @var string - */ - public $name = null; - - /** - * System name of the Flavor Params - * - * - * @var string - */ - public $systemName = null; - - /** - * The description of the Flavor Params - * - * - * @var string - */ - public $description = null; - - /** - * Creation date as Unix timestamp (In seconds) - * - * - * @var int - * @readonly - */ - public $createdAt = null; - - /** - * True if those Flavor Params are part of system defaults - * - * - * @var KalturaNullableBoolean - * @readonly - */ - public $isSystemDefault = null; - - /** - * The Flavor Params tags are used to identify the flavor for different usage (e.g. web, hd, mobile) - * - * - * @var string - */ - public $tags = null; - - /** - * Array of partner permisison names that required for using this asset params - * - * - * @var array of KalturaString - */ - public $requiredPermissions; - - /** - * Id of remote storage profile that used to get the source, zero indicates Kaltura data center - * - * - * @var int - */ - public $sourceRemoteStorageProfileId = null; - - /** - * Comma seperated ids of remote storage profiles that the flavor distributed to, the distribution done by the conversion engine - * - * - * @var int - */ - public $remoteStorageProfileIds = null; - - /** - * Media parser type to be used for post-conversion validation - * - * - * @var KalturaMediaParserType - */ - public $mediaParserType = null; - - /** - * Comma seperated ids of source flavor params this flavor is created from - * - * - * @var string - */ - public $sourceAssetParamsIds = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -abstract class KalturaResource extends KalturaObjectBase -{ - -} - -/** - * @package Kaltura - * @subpackage Client - */ -abstract class KalturaContentResource extends KalturaResource -{ - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaAssetParamsResourceContainer extends KalturaResource -{ - /** - * The content resource to associate with asset params - * - * - * @var KalturaContentResource - */ - public $resource; - - /** - * The asset params to associate with the reaource - * - * - * @var int - */ - public $assetParamsId = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -abstract class KalturaOperationAttributes extends KalturaObjectBase -{ - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaBaseEntry extends KalturaObjectBase -{ - /** - * Auto generated 10 characters alphanumeric string - * - * - * @var string - * @readonly - */ - public $id = null; - - /** - * Entry name (Min 1 chars) - * - * - * @var string - */ - public $name = null; - - /** - * Entry description - * - * - * @var string - */ - public $description = null; - - /** - * - * - * @var int - * @readonly - */ - public $partnerId = null; - - /** - * The ID of the user who is the owner of this entry - * - * - * @var string - */ - public $userId = null; - - /** - * The ID of the user who created this entry - * - * - * @var string - * @insertonly - */ - public $creatorId = null; - - /** - * Entry tags - * - * - * @var string - */ - public $tags = null; - - /** - * Entry admin tags can be updated only by administrators - * - * - * @var string - */ - public $adminTags = null; - - /** - * Categories with no entitlement that this entry belongs to. - * - * - * @var string - */ - public $categories = null; - - /** - * Categories Ids of categories with no entitlement that this entry belongs to - * - * - * @var string - */ - public $categoriesIds = null; - - /** - * - * - * @var KalturaEntryStatus - * @readonly - */ - public $status = null; - - /** - * Entry moderation status - * - * - * @var KalturaEntryModerationStatus - * @readonly - */ - public $moderationStatus = null; - - /** - * Number of moderation requests waiting for this entry - * - * - * @var int - * @readonly - */ - public $moderationCount = null; - - /** - * The type of the entry, this is auto filled by the derived entry object - * - * - * @var KalturaEntryType - */ - public $type = null; - - /** - * Entry creation date as Unix timestamp (In seconds) - * - * - * @var int - * @readonly - */ - public $createdAt = null; - - /** - * Entry update date as Unix timestamp (In seconds) - * - * - * @var int - * @readonly - */ - public $updatedAt = null; - - /** - * The calculated average rank. rank = totalRank / votes - * - * - * @var float - * @readonly - */ - public $rank = null; - - /** - * The sum of all rank values submitted to the baseEntry.anonymousRank action - * - * - * @var int - * @readonly - */ - public $totalRank = null; - - /** - * A count of all requests made to the baseEntry.anonymousRank action - * - * - * @var int - * @readonly - */ - public $votes = null; - - /** - * - * - * @var int - */ - public $groupId = null; - - /** - * Can be used to store various partner related data as a string - * - * - * @var string - */ - public $partnerData = null; - - /** - * Download URL for the entry - * - * - * @var string - * @readonly - */ - public $downloadUrl = null; - - /** - * Indexed search text for full text search - * - * - * @var string - * @readonly - */ - public $searchText = null; - - /** - * License type used for this entry - * - * - * @var KalturaLicenseType - */ - public $licenseType = null; - - /** - * Version of the entry data - * - * - * @var int - * @readonly - */ - public $version = null; - - /** - * Thumbnail URL - * - * - * @var string - * @insertonly - */ - public $thumbnailUrl = null; - - /** - * The Access Control ID assigned to this entry (null when not set, send -1 to remove) - * - * - * @var int - */ - public $accessControlId = null; - - /** - * Entry scheduling start date (null when not set, send -1 to remove) - * - * - * @var int - */ - public $startDate = null; - - /** - * Entry scheduling end date (null when not set, send -1 to remove) - * - * - * @var int - */ - public $endDate = null; - - /** - * Entry external reference id - * - * - * @var string - */ - public $referenceId = null; - - /** - * ID of temporary entry that will replace this entry when it's approved and ready for replacement - * - * - * @var string - * @readonly - */ - public $replacingEntryId = null; - - /** - * ID of the entry that will be replaced when the replacement approved and this entry is ready - * - * - * @var string - * @readonly - */ - public $replacedEntryId = null; - - /** - * Status of the replacement readiness and approval - * - * - * @var KalturaEntryReplacementStatus - * @readonly - */ - public $replacementStatus = null; - - /** - * Can be used to store various partner related data as a numeric value - * - * - * @var int - */ - public $partnerSortValue = null; - - /** - * Override the default ingestion profile - * - * - * @var int - */ - public $conversionProfileId = null; - - /** - * IF not empty, points to an entry ID the should replace this current entry's id. - * - * - * @var string - */ - public $redirectEntryId = null; - - /** - * ID of source root entry, used for clipped, skipped and cropped entries that created from another entry - * - * - * @var string - * @readonly - */ - public $rootEntryId = null; - - /** - * clipping, skipping and cropping attributes that used to create this entry - * - * - * @var array of KalturaOperationAttributes - */ - public $operationAttributes; - - /** - * list of user ids that are entitled to edit the entry (no server enforcement) The difference between entitledUsersEdit and entitledUsersPublish is applicative only - * - * - * @var string - */ - public $entitledUsersEdit = null; - - /** - * list of user ids that are entitled to publish the entry (no server enforcement) The difference between entitledUsersEdit and entitledUsersPublish is applicative only - * - * - * @var string - */ - public $entitledUsersPublish = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaBaseEntryListResponse extends KalturaObjectBase -{ - /** - * - * - * @var array of KalturaBaseEntry - * @readonly - */ - public $objects; - - /** - * - * - * @var int - * @readonly - */ - public $totalCount = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -abstract class KalturaBaseSyndicationFeed extends KalturaObjectBase -{ - /** - * - * - * @var string - * @readonly - */ - public $id = null; - - /** - * - * - * @var string - * @readonly - */ - public $feedUrl = null; - - /** - * - * - * @var int - * @readonly - */ - public $partnerId = null; - - /** - * link a playlist that will set what content the feed will include - * if empty, all content will be included in feed - * - * - * @var string - */ - public $playlistId = null; - - /** - * feed name - * - * - * @var string - */ - public $name = null; - - /** - * feed status - * - * - * @var KalturaSyndicationFeedStatus - * @readonly - */ - public $status = null; - - /** - * feed type - * - * - * @var KalturaSyndicationFeedType - * @insertonly - */ - public $type = null; - - /** - * Base URL for each video, on the partners site - * This is required by all syndication types. - * - * - * @var string - */ - public $landingPage = null; - - /** - * Creation date as Unix timestamp (In seconds) - * - * - * @var int - * @readonly - */ - public $createdAt = null; - - /** - * allow_embed tells google OR yahoo weather to allow embedding the video on google OR yahoo video results - * or just to provide a link to the landing page. - * it is applied on the video-player_loc property in the XML (google) - * and addes media-player tag (yahoo) - * - * - * @var bool - */ - public $allowEmbed = null; - - /** - * Select a uiconf ID as player skin to include in the kwidget url - * - * - * @var int - */ - public $playerUiconfId = null; - - /** - * - * - * @var int - */ - public $flavorParamId = null; - - /** - * - * - * @var bool - */ - public $transcodeExistingContent = null; - - /** - * - * - * @var bool - */ - public $addToDefaultConversionProfile = null; - - /** - * - * - * @var string - */ - public $categories = null; - - /** - * - * - * @var int - */ - public $storageId = null; - - /** - * - * - * @var KalturaSyndicationFeedEntriesOrderBy - */ - public $entriesOrderBy = null; - - /** - * Should enforce entitlement on feed entries - * - * - * @var bool - */ - public $enforceEntitlement = null; - - /** - * Set privacy context for search entries that assiged to private and public categories within a category privacy context. - * - * - * @var string - */ - public $privacyContext = null; - - /** - * Update date as Unix timestamp (In seconds) - * - * - * @var int - * @readonly - */ - public $updatedAt = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaBaseSyndicationFeedListResponse extends KalturaObjectBase -{ - /** - * - * - * @var array of KalturaBaseSyndicationFeed - * @readonly - */ - public $objects; - - /** - * - * - * @var int - * @readonly - */ - public $totalCount = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaBulkUploadPluginData extends KalturaObjectBase -{ - /** - * - * - * @var string - */ - public $field = null; - - /** - * - * - * @var string - */ - public $value = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaBulkUploadResult extends KalturaObjectBase -{ - /** - * The id of the result - * - * - * @var int - * @readonly - */ - public $id = null; - - /** - * The id of the parent job - * - * - * @var int - */ - public $bulkUploadJobId = null; - - /** - * The index of the line in the CSV - * - * - * @var int - */ - public $lineIndex = null; - - /** - * - * - * @var int - */ - public $partnerId = null; - - /** - * - * - * @var KalturaBulkUploadResultStatus - */ - public $status = null; - - /** - * - * - * @var KalturaBulkUploadAction - */ - public $action = null; - - /** - * - * - * @var string - */ - public $objectId = null; - - /** - * - * - * @var int - */ - public $objectStatus = null; - - /** - * - * - * @var KalturaBulkUploadResultObjectType - */ - public $bulkUploadResultObjectType = null; - - /** - * The data as recieved in the csv - * - * - * @var string - */ - public $rowData = null; - - /** - * - * - * @var string - */ - public $partnerData = null; - - /** - * - * - * @var string - */ - public $objectErrorDescription = null; - - /** - * - * - * @var array of KalturaBulkUploadPluginData - */ - public $pluginsData; - - /** - * - * - * @var string - */ - public $errorDescription = null; - - /** - * - * - * @var string - */ - public $errorCode = null; - - /** - * - * - * @var int - */ - public $errorType = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaBulkUpload extends KalturaObjectBase -{ - /** - * - * - * @var int - */ - public $id = null; - - /** - * - * - * @var string - */ - public $uploadedBy = null; - - /** - * - * - * @var string - */ - public $uploadedByUserId = null; - - /** - * - * - * @var int - */ - public $uploadedOn = null; - - /** - * - * - * @var int - */ - public $numOfEntries = null; - - /** - * - * - * @var KalturaBatchJobStatus - */ - public $status = null; - - /** - * - * - * @var string - */ - public $logFileUrl = null; - - /** - * - * - * @var string - */ - public $csvFileUrl = null; - - /** - * - * - * @var string - */ - public $bulkFileUrl = null; - - /** - * - * - * @var KalturaBulkUploadType - */ - public $bulkUploadType = null; - - /** - * - * - * @var array of KalturaBulkUploadResult - */ - public $results; - - /** - * - * - * @var string - */ - public $error = null; - - /** - * - * - * @var KalturaBatchJobErrorTypes - */ - public $errorType = null; - - /** - * - * - * @var int - */ - public $errorNumber = null; - - /** - * - * - * @var string - */ - public $fileName = null; - - /** - * - * - * @var string - */ - public $description = null; - - /** - * - * - * @var int - */ - public $numOfObjects = null; - - /** - * - * - * @var KalturaBulkUploadObjectType - */ - public $bulkUploadObjectType = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaBulkUploadListResponse extends KalturaObjectBase -{ - /** - * - * - * @var array of KalturaBulkUpload - * @readonly - */ - public $objects; - - /** - * - * - * @var int - * @readonly - */ - public $totalCount = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -abstract class KalturaBulkUploadObjectData extends KalturaObjectBase -{ - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaCEError extends KalturaObjectBase -{ - /** - * - * - * @var string - * @readonly - */ - public $id = null; - - /** - * - * - * @var int - */ - public $partnerId = null; - - /** - * - * - * @var string - */ - public $browser = null; - - /** - * - * - * @var string - */ - public $serverIp = null; - - /** - * - * - * @var string - */ - public $serverOs = null; - - /** - * - * - * @var string - */ - public $phpVersion = null; - - /** - * - * - * @var string - */ - public $ceAdminEmail = null; - - /** - * - * - * @var string - */ - public $type = null; - - /** - * - * - * @var string - */ - public $description = null; - - /** - * - * - * @var string - */ - public $data = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaCategory extends KalturaObjectBase -{ - /** - * The id of the Category - * - * - * @var int - * @readonly - */ - public $id = null; - - /** - * - * - * @var int - */ - public $parentId = null; - - /** - * - * - * @var int - * @readonly - */ - public $depth = null; - - /** - * - * - * @var int - * @readonly - */ - public $partnerId = null; - - /** - * The name of the Category. - * The following characters are not allowed: '<', '>', ',' - * - * - * @var string - */ - public $name = null; - - /** - * The full name of the Category - * - * - * @var string - * @readonly - */ - public $fullName = null; - - /** - * The full ids of the Category - * - * - * @var string - * @readonly - */ - public $fullIds = null; - - /** - * Number of entries in this Category (including child categories) - * - * - * @var int - * @readonly - */ - public $entriesCount = null; - - /** - * Creation date as Unix timestamp (In seconds) - * - * - * @var int - * @readonly - */ - public $createdAt = null; - - /** - * Update date as Unix timestamp (In seconds) - * - * - * @var int - * @readonly - */ - public $updatedAt = null; - - /** - * Category description - * - * - * @var string - */ - public $description = null; - - /** - * Category tags - * - * - * @var string - */ - public $tags = null; - - /** - * If category will be returned for list action. - * - * - * @var KalturaAppearInListType - */ - public $appearInList = null; - - /** - * defines the privacy of the entries that assigned to this category - * - * - * @var KalturaPrivacyType - */ - public $privacy = null; - - /** - * If Category members are inherited from parent category or set manualy. - * - * - * @var KalturaInheritanceType - */ - public $inheritanceType = null; - - /** - * Who can ask to join this category - * - * - * @var KalturaUserJoinPolicyType - * @readonly - */ - public $userJoinPolicy = null; - - /** - * Default permissionLevel for new users - * - * - * @var KalturaCategoryUserPermissionLevel - */ - public $defaultPermissionLevel = null; - - /** - * Category Owner (User id) - * - * - * @var string - */ - public $owner = null; - - /** - * Number of entries that belong to this category directly - * - * - * @var int - * @readonly - */ - public $directEntriesCount = null; - - /** - * Category external id, controlled and managed by the partner. - * - * - * @var string - */ - public $referenceId = null; - - /** - * who can assign entries to this category - * - * - * @var KalturaContributionPolicyType - */ - public $contributionPolicy = null; - - /** - * Number of active members for this category - * - * - * @var int - * @readonly - */ - public $membersCount = null; - - /** - * Number of pending members for this category - * - * - * @var int - * @readonly - */ - public $pendingMembersCount = null; - - /** - * Set privacy context for search entries that assiged to private and public categories. the entries will be private if the search context is set with those categories. - * - * - * @var string - */ - public $privacyContext = null; - - /** - * comma separated parents that defines a privacyContext for search - * - * - * @var string - * @readonly - */ - public $privacyContexts = null; - - /** - * Status - * - * - * @var KalturaCategoryStatus - * @readonly - */ - public $status = null; - - /** - * The category id that this category inherit its members and members permission (for contribution and join) - * - * - * @var int - * @readonly - */ - public $inheritedParentId = null; - - /** - * Can be used to store various partner related data as a numeric value - * - * - * @var int - */ - public $partnerSortValue = null; - - /** - * Can be used to store various partner related data as a string - * - * - * @var string - */ - public $partnerData = null; - - /** - * Enable client side applications to define how to sort the category child categories - * - * - * @var KalturaCategoryOrderBy - */ - public $defaultOrderBy = null; - - /** - * Number of direct children categories - * - * - * @var int - * @readonly - */ - public $directSubCategoriesCount = null; - - /** - * Moderation to add entries to this category by users that are not of permission level Manager or Moderator. - * - * - * @var KalturaNullableBoolean - */ - public $moderation = null; - - /** - * Nunber of pending moderation entries - * - * - * @var int - * @readonly - */ - public $pendingEntriesCount = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaCategoryEntry extends KalturaObjectBase -{ - /** - * - * - * @var int - */ - public $categoryId = null; - - /** - * entry id - * - * - * @var string - */ - public $entryId = null; - - /** - * Creation date as Unix timestamp (In seconds) - * - * - * @var int - * @readonly - */ - public $createdAt = null; - - /** - * The full ids of the Category - * - * - * @var string - * @readonly - */ - public $categoryFullIds = null; - - /** - * CategroyEntry status - * - * - * @var KalturaCategoryEntryStatus - * @readonly - */ - public $status = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaCategoryEntryListResponse extends KalturaObjectBase -{ - /** - * - * - * @var array of KalturaCategoryEntry - * @readonly - */ - public $objects; - - /** - * - * - * @var int - * @readonly - */ - public $totalCount = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaCategoryListResponse extends KalturaObjectBase -{ - /** - * - * - * @var array of KalturaCategory - * @readonly - */ - public $objects; - - /** - * - * - * @var int - * @readonly - */ - public $totalCount = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaCategoryUser extends KalturaObjectBase -{ - /** - * - * - * @var int - * @insertonly - */ - public $categoryId = null; - - /** - * User id - * - * - * @var string - * @insertonly - */ - public $userId = null; - - /** - * Partner id - * - * - * @var int - * @readonly - */ - public $partnerId = null; - - /** - * Permission level - * - * - * @var KalturaCategoryUserPermissionLevel - */ - public $permissionLevel = null; - - /** - * Status - * - * - * @var KalturaCategoryUserStatus - * @readonly - */ - public $status = null; - - /** - * CategoryUser creation date as Unix timestamp (In seconds) - * - * - * @var int - * @readonly - */ - public $createdAt = null; - - /** - * CategoryUser update date as Unix timestamp (In seconds) - * - * - * @var int - * @readonly - */ - public $updatedAt = null; - - /** - * Update method can be either manual or automatic to distinguish between manual operations (for example in KMC) on automatic - using bulk upload - * - * - * @var KalturaUpdateMethodType - */ - public $updateMethod = null; - - /** - * The full ids of the Category - * - * - * @var string - * @readonly - */ - public $categoryFullIds = null; - - /** - * Set of category-related permissions for the current category user. - * - * - * @var string - */ - public $permissionNames = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaCategoryUserListResponse extends KalturaObjectBase -{ - /** - * - * - * @var array of KalturaCategoryUser - * @readonly - */ - public $objects; - - /** - * - * - * @var int - * @readonly - */ - public $totalCount = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaClientNotification extends KalturaObjectBase -{ - /** - * The URL where the notification should be sent to - * - * - * @var string - */ - public $url = null; - - /** - * The serialized notification data to send - * - * - * @var string - */ - public $data = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -abstract class KalturaContext extends KalturaObjectBase -{ - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaContextDataResult extends KalturaObjectBase -{ - /** - * Array of messages as received from the rules that invalidated - * - * - * @var array of KalturaString - */ - public $messages; - - /** - * Array of actions as received from the rules that invalidated - * - * - * @var array of KalturaRuleAction - */ - public $actions; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaConversionAttribute extends KalturaObjectBase -{ - /** - * The id of the flavor params, set to null for source flavor - * - * - * @var int - */ - public $flavorParamsId = null; - - /** - * Attribute name - * - * - * @var string - */ - public $name = null; - - /** - * Attribute value - * - * - * @var string - */ - public $value = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaCropDimensions extends KalturaObjectBase -{ - /** - * Crop left point - * - * - * @var int - */ - public $left = null; - - /** - * Crop top point - * - * - * @var int - */ - public $top = null; - - /** - * Crop width - * - * - * @var int - */ - public $width = null; - - /** - * Crop height - * - * - * @var int - */ - public $height = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaConversionProfile extends KalturaObjectBase -{ - /** - * The id of the Conversion Profile - * - * - * @var int - * @readonly - */ - public $id = null; - - /** - * - * - * @var int - * @readonly - */ - public $partnerId = null; - - /** - * - * - * @var KalturaConversionProfileStatus - */ - public $status = null; - - /** - * - * - * @var KalturaConversionProfileType - * @insertonly - */ - public $type = null; - - /** - * The name of the Conversion Profile - * - * - * @var string - */ - public $name = null; - - /** - * System name of the Conversion Profile - * - * - * @var string - */ - public $systemName = null; - - /** - * Comma separated tags - * - * - * @var string - */ - public $tags = null; - - /** - * The description of the Conversion Profile - * - * - * @var string - */ - public $description = null; - - /** - * ID of the default entry to be used for template data - * - * - * @var string - */ - public $defaultEntryId = null; - - /** - * Creation date as Unix timestamp (In seconds) - * - * - * @var int - * @readonly - */ - public $createdAt = null; - - /** - * List of included flavor ids (comma separated) - * - * - * @var string - */ - public $flavorParamsIds = null; - - /** - * Indicates that this conversion profile is system default - * - * - * @var KalturaNullableBoolean - */ - public $isDefault = null; - - /** - * Indicates that this conversion profile is partner default - * - * - * @var bool - * @readonly - */ - public $isPartnerDefault = null; - - /** - * Cropping dimensions - * - * - * @var KalturaCropDimensions - */ - public $cropDimensions; - - /** - * Clipping start position (in miliseconds) - * - * - * @var int - */ - public $clipStart = null; - - /** - * Clipping duration (in miliseconds) - * - * - * @var int - */ - public $clipDuration = null; - - /** - * XSL to transform ingestion MRSS XML - * - * - * @var string - */ - public $xslTransformation = null; - - /** - * ID of default storage profile to be used for linked net-storage file syncs - * - * - * @var int - */ - public $storageProfileId = null; - - /** - * Media parser type to be used for extract media - * - * - * @var KalturaMediaParserType - */ - public $mediaParserType = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaConversionProfileAssetParams extends KalturaObjectBase -{ - /** - * The id of the conversion profile - * - * - * @var int - * @readonly - */ - public $conversionProfileId = null; - - /** - * The id of the asset params - * - * - * @var int - * @readonly - */ - public $assetParamsId = null; - - /** - * The ingestion origin of the asset params - * - * - * @var KalturaFlavorReadyBehaviorType - */ - public $readyBehavior = null; - - /** - * The ingestion origin of the asset params - * - * - * @var KalturaAssetParamsOrigin - */ - public $origin = null; - - /** - * Asset params system name - * - * - * @var string - */ - public $systemName = null; - - /** - * Starts conversion even if the decision layer reduced the configuration to comply with the source - * - * - * @var KalturaNullableBoolean - */ - public $forceNoneComplied = null; - - /** - * Specifies how to treat the flavor after conversion is finished - * - * - * @var KalturaAssetParamsDeletePolicy - */ - public $deletePolicy = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaConversionProfileAssetParamsListResponse extends KalturaObjectBase -{ - /** - * - * - * @var array of KalturaConversionProfileAssetParams - * @readonly - */ - public $objects; - - /** - * - * - * @var int - * @readonly - */ - public $totalCount = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaConversionProfileListResponse extends KalturaObjectBase -{ - /** - * - * - * @var array of KalturaConversionProfile - * @readonly - */ - public $objects; - - /** - * - * - * @var int - * @readonly - */ - public $totalCount = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaConvertCollectionFlavorData extends KalturaObjectBase -{ - /** - * - * - * @var string - */ - public $flavorAssetId = null; - - /** - * - * - * @var int - */ - public $flavorParamsOutputId = null; - - /** - * - * - * @var int - */ - public $readyBehavior = null; - - /** - * - * - * @var int - */ - public $videoBitrate = null; - - /** - * - * - * @var int - */ - public $audioBitrate = null; - - /** - * - * - * @var string - */ - public $destFileSyncLocalPath = null; - - /** - * - * - * @var string - */ - public $destFileSyncRemoteUrl = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaDataEntry extends KalturaBaseEntry -{ - /** - * The data of the entry - * - * - * @var string - */ - public $dataContent = null; - - /** - * indicator whether to return the object for get action with the dataContent field. - * - * - * @var bool - * @insertonly - */ - public $retrieveDataContentByGet = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaDataListResponse extends KalturaObjectBase -{ - /** - * - * - * @var array of KalturaDataEntry - * @readonly - */ - public $objects; - - /** - * - * - * @var int - * @readonly - */ - public $totalCount = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaEmailIngestionProfile extends KalturaObjectBase -{ - /** - * - * - * @var int - * @readonly - */ - public $id = null; - - /** - * - * - * @var string - */ - public $name = null; - - /** - * - * - * @var string - */ - public $description = null; - - /** - * - * - * @var string - */ - public $emailAddress = null; - - /** - * - * - * @var string - */ - public $mailboxId = null; - - /** - * - * - * @var int - * @readonly - */ - public $partnerId = null; - - /** - * - * - * @var int - */ - public $conversionProfile2Id = null; - - /** - * - * - * @var KalturaEntryModerationStatus - */ - public $moderationStatus = null; - - /** - * - * - * @var KalturaEmailIngestionProfileStatus - * @readonly - */ - public $status = null; - - /** - * - * - * @var string - * @readonly - */ - public $createdAt = null; - - /** - * - * - * @var string - */ - public $defaultCategory = null; - - /** - * - * - * @var string - */ - public $defaultUserId = null; - - /** - * - * - * @var string - */ - public $defaultTags = null; - - /** - * - * - * @var string - */ - public $defaultAdminTags = null; - - /** - * - * - * @var int - */ - public $maxAttachmentSizeKbytes = null; - - /** - * - * - * @var int - */ - public $maxAttachmentsPerMail = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -abstract class KalturaValue extends KalturaObjectBase -{ - /** - * - * - * @var string - */ - public $description = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaStringValue extends KalturaValue -{ - /** - * - * - * @var string - */ - public $value = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -abstract class KalturaObjectIdentifier extends KalturaObjectBase -{ - /** - * Comma separated string of enum values denoting which features of the item need to be included in the MRSS - * - * - * @var string - */ - public $extendedFeatures = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaExtendingItemMrssParameter extends KalturaObjectBase -{ - /** - * XPath for the extending item - * - * - * @var string - */ - public $xpath = null; - - /** - * Object identifier - * - * - * @var KalturaObjectIdentifier - */ - public $identifier; - - /** - * Mode of extension - append to MRSS or replace the xpath content. - * - * - * @var KalturaMrssExtensionMode - */ - public $extensionMode = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaPlayableEntry extends KalturaBaseEntry -{ - /** - * Number of plays - * - * - * @var int - * @readonly - */ - public $plays = null; - - /** - * Number of views - * - * - * @var int - * @readonly - */ - public $views = null; - - /** - * The last time the entry was played - * - * - * @var int - * @readonly - */ - public $lastPlayedAt = null; - - /** - * The width in pixels - * - * - * @var int - * @readonly - */ - public $width = null; - - /** - * The height in pixels - * - * - * @var int - * @readonly - */ - public $height = null; - - /** - * The duration in seconds - * - * - * @var int - * @readonly - */ - public $duration = null; - - /** - * The duration in miliseconds - * - * - * @var int - */ - public $msDuration = null; - - /** - * The duration type (short for 0-4 mins, medium for 4-20 mins, long for 20+ mins) - * - * - * @var KalturaDurationType - * @readonly - */ - public $durationType = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaMediaEntry extends KalturaPlayableEntry -{ - /** - * The media type of the entry - * - * - * @var KalturaMediaType - * @insertonly - */ - public $mediaType = null; - - /** - * Override the default conversion quality - * - * - * @var string - * @insertonly - */ - public $conversionQuality = null; - - /** - * The source type of the entry - * - * - * @var KalturaSourceType - * @insertonly - */ - public $sourceType = null; - - /** - * The search provider type used to import this entry - * - * - * @var KalturaSearchProviderType - * @insertonly - */ - public $searchProviderType = null; - - /** - * The ID of the media in the importing site - * - * - * @var string - * @insertonly - */ - public $searchProviderId = null; - - /** - * The user name used for credits - * - * - * @var string - */ - public $creditUserName = null; - - /** - * The URL for credits - * - * - * @var string - */ - public $creditUrl = null; - - /** - * The media date extracted from EXIF data (For images) as Unix timestamp (In seconds) - * - * - * @var int - * @readonly - */ - public $mediaDate = null; - - /** - * The URL used for playback. This is not the download URL. - * - * - * @var string - * @readonly - */ - public $dataUrl = null; - - /** - * Comma separated flavor params ids that exists for this media entry - * - * - * @var string - * @readonly - */ - public $flavorParamsIds = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaFeatureStatus extends KalturaObjectBase -{ - /** - * - * - * @var KalturaFeatureStatusType - */ - public $type = null; - - /** - * - * - * @var int - */ - public $value = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaFeatureStatusListResponse extends KalturaObjectBase -{ - /** - * - * - * @var array of KalturaFeatureStatus - * @readonly - */ - public $objects; - - /** - * - * - * @var int - * @readonly - */ - public $totalCount = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaFileAsset extends KalturaObjectBase -{ - /** - * - * - * @var int - * @readonly - */ - public $id = null; - - /** - * - * - * @var int - * @readonly - */ - public $partnerId = null; - - /** - * - * - * @var KalturaFileAssetObjectType - * @insertonly - */ - public $fileAssetObjectType = null; - - /** - * - * - * @var string - * @insertonly - */ - public $objectId = null; - - /** - * - * - * @var string - */ - public $name = null; - - /** - * - * - * @var string - */ - public $systemName = null; - - /** - * - * - * @var string - */ - public $fileExt = null; - - /** - * - * - * @var int - * @readonly - */ - public $version = null; - - /** - * - * - * @var int - * @readonly - */ - public $createdAt = null; - - /** - * - * - * @var int - * @readonly - */ - public $updatedAt = null; - - /** - * - * - * @var KalturaFileAssetStatus - * @readonly - */ - public $status = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaFileAssetListResponse extends KalturaObjectBase -{ - /** - * - * - * @var array of KalturaFileAsset - * @readonly - */ - public $objects; - - /** - * - * - * @var int - * @readonly - */ - public $totalCount = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -abstract class KalturaSearchItem extends KalturaObjectBase -{ - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaFilter extends KalturaObjectBase -{ - /** - * - * - * @var string - */ - public $orderBy = null; - - /** - * - * - * @var KalturaSearchItem - */ - public $advancedSearch; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaFilterPager extends KalturaObjectBase -{ - /** - * The number of objects to retrieve. (Default is 30, maximum page size is 500). - * - * - * @var int - */ - public $pageSize = null; - - /** - * The page number for which {pageSize} of objects should be retrieved (Default is 1). - * - * - * @var int - */ - public $pageIndex = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaFlavorAsset extends KalturaAsset -{ - /** - * The Flavor Params used to create this Flavor Asset - * - * - * @var int - * @insertonly - */ - public $flavorParamsId = null; - - /** - * The width of the Flavor Asset - * - * - * @var int - * @readonly - */ - public $width = null; - - /** - * The height of the Flavor Asset - * - * - * @var int - * @readonly - */ - public $height = null; - - /** - * The overall bitrate (in KBits) of the Flavor Asset - * - * - * @var int - * @readonly - */ - public $bitrate = null; - - /** - * The frame rate (in FPS) of the Flavor Asset - * - * - * @var float - * @readonly - */ - public $frameRate = null; - - /** - * True if this Flavor Asset is the original source - * - * - * @var bool - * @readonly - */ - public $isOriginal = null; - - /** - * True if this Flavor Asset is playable in KDP - * - * - * @var bool - * @readonly - */ - public $isWeb = null; - - /** - * The container format - * - * - * @var string - * @readonly - */ - public $containerFormat = null; - - /** - * The video codec - * - * - * @var string - * @readonly - */ - public $videoCodecId = null; - - /** - * The status of the Flavor Asset - * - * - * @var KalturaFlavorAssetStatus - * @readonly - */ - public $status = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaFlavorAssetListResponse extends KalturaObjectBase -{ - /** - * - * - * @var array of KalturaFlavorAsset - * @readonly - */ - public $objects; - - /** - * - * - * @var int - * @readonly - */ - public $totalCount = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaFlavorParams extends KalturaAssetParams -{ - /** - * The video codec of the Flavor Params - * - * - * @var KalturaVideoCodec - */ - public $videoCodec = null; - - /** - * The video bitrate (in KBits) of the Flavor Params - * - * - * @var int - */ - public $videoBitrate = null; - - /** - * The audio codec of the Flavor Params - * - * - * @var KalturaAudioCodec - */ - public $audioCodec = null; - - /** - * The audio bitrate (in KBits) of the Flavor Params - * - * - * @var int - */ - public $audioBitrate = null; - - /** - * The number of audio channels for "downmixing" - * - * - * @var int - */ - public $audioChannels = null; - - /** - * The audio sample rate of the Flavor Params - * - * - * @var int - */ - public $audioSampleRate = null; - - /** - * The desired width of the Flavor Params - * - * - * @var int - */ - public $width = null; - - /** - * The desired height of the Flavor Params - * - * - * @var int - */ - public $height = null; - - /** - * The frame rate of the Flavor Params - * - * - * @var int - */ - public $frameRate = null; - - /** - * The gop size of the Flavor Params - * - * - * @var int - */ - public $gopSize = null; - - /** - * The list of conversion engines (comma separated) - * - * - * @var string - */ - public $conversionEngines = null; - - /** - * The list of conversion engines extra params (separated with "|") - * - * - * @var string - */ - public $conversionEnginesExtraParams = null; - - /** - * - * - * @var bool - */ - public $twoPass = null; - - /** - * - * - * @var int - */ - public $deinterlice = null; - - /** - * - * - * @var int - */ - public $rotate = null; - - /** - * - * - * @var string - */ - public $operators = null; - - /** - * - * - * @var int - */ - public $engineVersion = null; - - /** - * The container format of the Flavor Params - * - * - * @var KalturaContainerFormat - */ - public $format = null; - - /** - * - * - * @var int - */ - public $aspectRatioProcessingMode = null; - - /** - * - * - * @var int - */ - public $forceFrameToMultiplication16 = null; - - /** - * - * - * @var int - */ - public $isGopInSec = null; - - /** - * - * - * @var int - */ - public $isAvoidVideoShrinkFramesizeToSource = null; - - /** - * - * - * @var int - */ - public $isAvoidVideoShrinkBitrateToSource = null; - - /** - * - * - * @var int - */ - public $isVideoFrameRateForLowBrAppleHls = null; - - /** - * - * - * @var float - */ - public $anamorphicPixels = null; - - /** - * - * - * @var int - */ - public $isAvoidForcedKeyFrames = null; - - /** - * - * - * @var int - */ - public $maxFrameRate = null; - - /** - * - * - * @var int - */ - public $videoConstantBitrate = null; - - /** - * - * - * @var int - */ - public $videoBitrateTolerance = null; - - /** - * - * - * @var int - */ - public $clipOffset = null; - - /** - * - * - * @var int - */ - public $clipDuration = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaFlavorAssetWithParams extends KalturaObjectBase -{ - /** - * The Flavor Asset (Can be null when there are params without asset) - * - * - * @var KalturaFlavorAsset - */ - public $flavorAsset; - - /** - * The Flavor Params - * - * - * @var KalturaFlavorParams - */ - public $flavorParams; - - /** - * The entry id - * - * - * @var string - */ - public $entryId = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaFlavorParamsListResponse extends KalturaObjectBase -{ - /** - * - * - * @var array of KalturaFlavorParams - * @readonly - */ - public $objects; - - /** - * - * - * @var int - * @readonly - */ - public $totalCount = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaFlavorParamsOutput extends KalturaFlavorParams -{ - /** - * - * - * @var int - */ - public $flavorParamsId = null; - - /** - * - * - * @var string - */ - public $commandLinesStr = null; - - /** - * - * - * @var string - */ - public $flavorParamsVersion = null; - - /** - * - * - * @var string - */ - public $flavorAssetId = null; - - /** - * - * - * @var string - */ - public $flavorAssetVersion = null; - - /** - * - * - * @var int - */ - public $readyBehavior = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaFlavorParamsOutputListResponse extends KalturaObjectBase -{ - /** - * - * - * @var array of KalturaFlavorParamsOutput - * @readonly - */ - public $objects; - - /** - * - * - * @var int - * @readonly - */ - public $totalCount = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -abstract class KalturaObject extends KalturaObjectBase -{ - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaJobData extends KalturaObjectBase -{ - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaLiveStreamConfiguration extends KalturaObjectBase -{ - /** - * - * - * @var KalturaPlaybackProtocol - */ - public $protocol = null; - - /** - * - * - * @var string - */ - public $url = null; - - /** - * - * - * @var string - */ - public $publishUrl = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -abstract class KalturaLiveEntry extends KalturaMediaEntry -{ - /** - * The message to be presented when the stream is offline - * - * - * @var string - */ - public $offlineMessage = null; - - /** - * Recording Status Enabled/Disabled - * - * - * @var KalturaRecordStatus - * @insertonly - */ - public $recordStatus = null; - - /** - * DVR Status Enabled/Disabled - * - * - * @var KalturaDVRStatus - * @insertonly - */ - public $dvrStatus = null; - - /** - * Window of time which the DVR allows for backwards scrubbing (in minutes) - * - * - * @var int - * @insertonly - */ - public $dvrWindow = null; - - /** - * Array of key value protocol->live stream url objects - * - * - * @var array of KalturaLiveStreamConfiguration - */ - public $liveStreamConfigurations; - - /** - * Recorded entry id - * - * - * @var string - */ - public $recordedEntryId = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaLiveChannel extends KalturaLiveEntry -{ - /** - * Playlist id to be played - * - * - * @var string - */ - public $playlistId = null; - - /** - * Indicates that the segments should be repeated for ever - * - * - * @var KalturaNullableBoolean - */ - public $repeat = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaLiveChannelListResponse extends KalturaObjectBase -{ - /** - * - * - * @var array of KalturaLiveChannel - * @readonly - */ - public $objects; - - /** - * - * - * @var int - * @readonly - */ - public $totalCount = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaLiveChannelSegment extends KalturaObjectBase -{ - /** - * Unique identifier - * - * - * @var string - * @readonly - */ - public $id = null; - - /** - * - * - * @var int - * @readonly - */ - public $partnerId = null; - - /** - * Segment creation date as Unix timestamp (In seconds) - * - * - * @var int - * @readonly - */ - public $createdAt = null; - - /** - * Segment update date as Unix timestamp (In seconds) - * - * - * @var int - * @readonly - */ - public $updatedAt = null; - - /** - * Segment name - * - * - * @var string - */ - public $name = null; - - /** - * Segment description - * - * - * @var string - */ - public $description = null; - - /** - * Segment tags - * - * - * @var string - */ - public $tags = null; - - /** - * Segment could be associated with the main stream, as additional stream or as overlay - * - * - * @var KalturaLiveChannelSegmentType - */ - public $type = null; - - /** - * - * - * @var KalturaLiveChannelSegmentStatus - * @readonly - */ - public $status = null; - - /** - * Live channel id - * - * - * @var string - */ - public $channelId = null; - - /** - * Entry id to be played - * - * - * @var string - */ - public $entryId = null; - - /** - * Segment start time trigger type - * - * - * @var KalturaLiveChannelSegmentTriggerType - */ - public $triggerType = null; - - /** - * Live channel segment that the trigger relates to - * - * - * @var string - */ - public $triggerSegmentId = null; - - /** - * Segment play start time, in mili-seconds, according to trigger type - * - * - * @var float - */ - public $startTime = null; - - /** - * Segment play duration time, in mili-seconds - * - * - * @var float - */ - public $duration = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaLiveChannelSegmentListResponse extends KalturaObjectBase -{ - /** - * - * - * @var array of KalturaLiveChannelSegment - * @readonly - */ - public $objects; - - /** - * - * - * @var int - * @readonly - */ - public $totalCount = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaLiveStreamBitrate extends KalturaObjectBase -{ - /** - * - * - * @var int - */ - public $bitrate = null; - - /** - * - * - * @var int - */ - public $width = null; - - /** - * - * - * @var int - */ - public $height = null; - - /** - * - * - * @var string - */ - public $tags = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaLiveStreamEntry extends KalturaLiveEntry -{ - /** - * The stream id as provided by the provider - * - * - * @var string - * @readonly - */ - public $streamRemoteId = null; - - /** - * The backup stream id as provided by the provider - * - * - * @var string - * @readonly - */ - public $streamRemoteBackupId = null; - - /** - * Array of supported bitrates - * - * - * @var array of KalturaLiveStreamBitrate - */ - public $bitrates; - - /** - * - * - * @var string - */ - public $primaryBroadcastingUrl = null; - - /** - * - * - * @var string - */ - public $secondaryBroadcastingUrl = null; - - /** - * - * - * @var string - */ - public $streamName = null; - - /** - * The stream url - * - * - * @var string - */ - public $streamUrl = null; - - /** - * HLS URL - URL for live stream playback on mobile device - * - * - * @var string - */ - public $hlsStreamUrl = null; - - /** - * URL Manager to handle the live stream URL (for instance, add token) - * - * - * @var string - */ - public $urlManager = null; - - /** - * The broadcast primary ip - * - * - * @var string - */ - public $encodingIP1 = null; - - /** - * The broadcast secondary ip - * - * - * @var string - */ - public $encodingIP2 = null; - - /** - * The broadcast password - * - * - * @var string - */ - public $streamPassword = null; - - /** - * The broadcast username - * - * - * @var string - * @readonly - */ - public $streamUsername = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaLiveStreamListResponse extends KalturaObjectBase -{ - /** - * - * - * @var array of KalturaLiveStreamEntry - * @readonly - */ - public $objects; - - /** - * - * - * @var int - * @readonly - */ - public $totalCount = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -abstract class KalturaBaseEntryBaseFilter extends KalturaFilter -{ - /** - * This filter should be in use for retrieving only a specific entry (identified by its entryId). - * - * - * @var string - */ - public $idEqual = null; - - /** - * This filter should be in use for retrieving few specific entries (string should include comma separated list of entryId strings). - * - * - * @var string - */ - public $idIn = null; - - /** - * - * - * @var string - */ - public $idNotIn = null; - - /** - * This filter should be in use for retrieving specific entries. It should include only one string to search for in entry names (no wildcards, spaces are treated as part of the string). - * - * - * @var string - */ - public $nameLike = null; - - /** - * This filter should be in use for retrieving specific entries. It could include few (comma separated) strings for searching in entry names, while applying an OR logic to retrieve entries that contain at least one input string (no wildcards, spaces are treated as part of the string). - * - * - * @var string - */ - public $nameMultiLikeOr = null; - - /** - * This filter should be in use for retrieving specific entries. It could include few (comma separated) strings for searching in entry names, while applying an AND logic to retrieve entries that contain all input strings (no wildcards, spaces are treated as part of the string). - * - * - * @var string - */ - public $nameMultiLikeAnd = null; - - /** - * This filter should be in use for retrieving entries with a specific name. - * - * - * @var string - */ - public $nameEqual = null; - - /** - * This filter should be in use for retrieving only entries which were uploaded by/assigned to users of a specific Kaltura Partner (identified by Partner ID). - * - * - * @var int - */ - public $partnerIdEqual = null; - - /** - * This filter should be in use for retrieving only entries within Kaltura network which were uploaded by/assigned to users of few Kaltura Partners (string should include comma separated list of PartnerIDs) - * - * - * @var string - */ - public $partnerIdIn = null; - - /** - * This filter parameter should be in use for retrieving only entries, uploaded by/assigned to a specific user (identified by user Id). - * - * - * @var string - */ - public $userIdEqual = null; - - /** - * - * - * @var string - */ - public $creatorIdEqual = null; - - /** - * This filter should be in use for retrieving specific entries. It should include only one string to search for in entry tags (no wildcards, spaces are treated as part of the string). - * - * - * @var string - */ - public $tagsLike = null; - - /** - * This filter should be in use for retrieving specific entries. It could include few (comma separated) strings for searching in entry tags, while applying an OR logic to retrieve entries that contain at least one input string (no wildcards, spaces are treated as part of the string). - * - * - * @var string - */ - public $tagsMultiLikeOr = null; - - /** - * This filter should be in use for retrieving specific entries. It could include few (comma separated) strings for searching in entry tags, while applying an AND logic to retrieve entries that contain all input strings (no wildcards, spaces are treated as part of the string). - * - * - * @var string - */ - public $tagsMultiLikeAnd = null; - - /** - * This filter should be in use for retrieving specific entries. It should include only one string to search for in entry tags set by an ADMIN user (no wildcards, spaces are treated as part of the string). - * - * - * @var string - */ - public $adminTagsLike = null; - - /** - * This filter should be in use for retrieving specific entries. It could include few (comma separated) strings for searching in entry tags, set by an ADMIN user, while applying an OR logic to retrieve entries that contain at least one input string (no wildcards, spaces are treated as part of the string). - * - * - * @var string - */ - public $adminTagsMultiLikeOr = null; - - /** - * This filter should be in use for retrieving specific entries. It could include few (comma separated) strings for searching in entry tags, set by an ADMIN user, while applying an AND logic to retrieve entries that contain all input strings (no wildcards, spaces are treated as part of the string). - * - * - * @var string - */ - public $adminTagsMultiLikeAnd = null; - - /** - * - * - * @var string - */ - public $categoriesMatchAnd = null; - - /** - * All entries within these categories or their child categories. - * - * - * @var string - */ - public $categoriesMatchOr = null; - - /** - * - * - * @var string - */ - public $categoriesNotContains = null; - - /** - * - * - * @var string - */ - public $categoriesIdsMatchAnd = null; - - /** - * All entries of the categories, excluding their child categories. - * To include entries of the child categories, use categoryAncestorIdIn, or categoriesMatchOr. - * - * - * @var string - */ - public $categoriesIdsMatchOr = null; - - /** - * - * - * @var string - */ - public $categoriesIdsNotContains = null; - - /** - * - * - * @var KalturaNullableBoolean - */ - public $categoriesIdsEmpty = null; - - /** - * This filter should be in use for retrieving only entries, at a specific { - * - * @var KalturaEntryStatus - */ - public $statusEqual = null; - - /** - * This filter should be in use for retrieving only entries, not at a specific { - * - * @var KalturaEntryStatus - */ - public $statusNotEqual = null; - - /** - * This filter should be in use for retrieving only entries, at few specific { - * - * @var string - */ - public $statusIn = null; - - /** - * This filter should be in use for retrieving only entries, not at few specific { - * - * @var string - */ - public $statusNotIn = null; - - /** - * - * - * @var KalturaEntryModerationStatus - */ - public $moderationStatusEqual = null; - - /** - * - * - * @var KalturaEntryModerationStatus - */ - public $moderationStatusNotEqual = null; - - /** - * - * - * @var string - */ - public $moderationStatusIn = null; - - /** - * - * - * @var string - */ - public $moderationStatusNotIn = null; - - /** - * - * - * @var KalturaEntryType - */ - public $typeEqual = null; - - /** - * This filter should be in use for retrieving entries of few { - * - * @var string - */ - public $typeIn = null; - - /** - * This filter parameter should be in use for retrieving only entries which were created at Kaltura system after a specific time/date (standard timestamp format). - * - * - * @var int - */ - public $createdAtGreaterThanOrEqual = null; - - /** - * This filter parameter should be in use for retrieving only entries which were created at Kaltura system before a specific time/date (standard timestamp format). - * - * - * @var int - */ - public $createdAtLessThanOrEqual = null; - - /** - * - * - * @var int - */ - public $updatedAtGreaterThanOrEqual = null; - - /** - * - * - * @var int - */ - public $updatedAtLessThanOrEqual = null; - - /** - * - * - * @var int - */ - public $totalRankLessThanOrEqual = null; - - /** - * - * - * @var int - */ - public $totalRankGreaterThanOrEqual = null; - - /** - * - * - * @var int - */ - public $groupIdEqual = null; - - /** - * This filter should be in use for retrieving specific entries while search match the input string within all of the following metadata attributes: name, description, tags, adminTags. - * - * - * @var string - */ - public $searchTextMatchAnd = null; - - /** - * This filter should be in use for retrieving specific entries while search match the input string within at least one of the following metadata attributes: name, description, tags, adminTags. - * - * - * @var string - */ - public $searchTextMatchOr = null; - - /** - * - * - * @var int - */ - public $accessControlIdEqual = null; - - /** - * - * - * @var string - */ - public $accessControlIdIn = null; - - /** - * - * - * @var int - */ - public $startDateGreaterThanOrEqual = null; - - /** - * - * - * @var int - */ - public $startDateLessThanOrEqual = null; - - /** - * - * - * @var int - */ - public $startDateGreaterThanOrEqualOrNull = null; - - /** - * - * - * @var int - */ - public $startDateLessThanOrEqualOrNull = null; - - /** - * - * - * @var int - */ - public $endDateGreaterThanOrEqual = null; - - /** - * - * - * @var int - */ - public $endDateLessThanOrEqual = null; - - /** - * - * - * @var int - */ - public $endDateGreaterThanOrEqualOrNull = null; - - /** - * - * - * @var int - */ - public $endDateLessThanOrEqualOrNull = null; - - /** - * - * - * @var string - */ - public $referenceIdEqual = null; - - /** - * - * - * @var string - */ - public $referenceIdIn = null; - - /** - * - * - * @var string - */ - public $replacingEntryIdEqual = null; - - /** - * - * - * @var string - */ - public $replacingEntryIdIn = null; - - /** - * - * - * @var string - */ - public $replacedEntryIdEqual = null; - - /** - * - * - * @var string - */ - public $replacedEntryIdIn = null; - - /** - * - * - * @var KalturaEntryReplacementStatus - */ - public $replacementStatusEqual = null; - - /** - * - * - * @var string - */ - public $replacementStatusIn = null; - - /** - * - * - * @var int - */ - public $partnerSortValueGreaterThanOrEqual = null; - - /** - * - * - * @var int - */ - public $partnerSortValueLessThanOrEqual = null; - - /** - * - * - * @var string - */ - public $redirectEntryIdEqual = null; - - /** - * - * - * @var string - */ - public $rootEntryIdEqual = null; - - /** - * - * - * @var string - */ - public $rootEntryIdIn = null; - - /** - * - * - * @var string - */ - public $tagsNameMultiLikeOr = null; - - /** - * - * - * @var string - */ - public $tagsAdminTagsMultiLikeOr = null; - - /** - * - * - * @var string - */ - public $tagsAdminTagsNameMultiLikeOr = null; - - /** - * - * - * @var string - */ - public $tagsNameMultiLikeAnd = null; - - /** - * - * - * @var string - */ - public $tagsAdminTagsMultiLikeAnd = null; - - /** - * - * - * @var string - */ - public $tagsAdminTagsNameMultiLikeAnd = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaBaseEntryFilter extends KalturaBaseEntryBaseFilter -{ - /** - * - * - * @var string - */ - public $freeText = null; - - /** - * - * - * @var KalturaNullableBoolean - */ - public $isRoot = null; - - /** - * - * - * @var string - */ - public $categoriesFullNameIn = null; - - /** - * All entries within this categoy or in child categories - * - * - * @var string - */ - public $categoryAncestorIdIn = null; - - /** - * The id of the original entry - * - * - * @var string - */ - public $redirectFromEntryId = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -abstract class KalturaPlayableEntryBaseFilter extends KalturaBaseEntryFilter -{ - /** - * - * - * @var int - */ - public $lastPlayedAtGreaterThanOrEqual = null; - - /** - * - * - * @var int - */ - public $lastPlayedAtLessThanOrEqual = null; - - /** - * - * - * @var int - */ - public $durationLessThan = null; - - /** - * - * - * @var int - */ - public $durationGreaterThan = null; - - /** - * - * - * @var int - */ - public $durationLessThanOrEqual = null; - - /** - * - * - * @var int - */ - public $durationGreaterThanOrEqual = null; - - /** - * - * - * @var string - */ - public $durationTypeMatchOr = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaPlayableEntryFilter extends KalturaPlayableEntryBaseFilter -{ - -} - -/** - * @package Kaltura - * @subpackage Client - */ -abstract class KalturaMediaEntryBaseFilter extends KalturaPlayableEntryFilter -{ - /** - * - * - * @var KalturaMediaType - */ - public $mediaTypeEqual = null; - - /** - * - * - * @var string - */ - public $mediaTypeIn = null; - - /** - * - * - * @var int - */ - public $mediaDateGreaterThanOrEqual = null; - - /** - * - * - * @var int - */ - public $mediaDateLessThanOrEqual = null; - - /** - * - * - * @var string - */ - public $flavorParamsIdsMatchOr = null; - - /** - * - * - * @var string - */ - public $flavorParamsIdsMatchAnd = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaMediaEntryFilter extends KalturaMediaEntryBaseFilter -{ - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaMediaEntryFilterForPlaylist extends KalturaMediaEntryFilter -{ - /** - * - * - * @var int - */ - public $limit = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaMediaInfo extends KalturaObjectBase -{ - /** - * The id of the media info - * - * - * @var int - * @readonly - */ - public $id = null; - - /** - * The id of the related flavor asset - * - * - * @var string - */ - public $flavorAssetId = null; - - /** - * The file size - * - * - * @var int - */ - public $fileSize = null; - - /** - * The container format - * - * - * @var string - */ - public $containerFormat = null; - - /** - * The container id - * - * - * @var string - */ - public $containerId = null; - - /** - * The container profile - * - * - * @var string - */ - public $containerProfile = null; - - /** - * The container duration - * - * - * @var int - */ - public $containerDuration = null; - - /** - * The container bit rate - * - * - * @var int - */ - public $containerBitRate = null; - - /** - * The video format - * - * - * @var string - */ - public $videoFormat = null; - - /** - * The video codec id - * - * - * @var string - */ - public $videoCodecId = null; - - /** - * The video duration - * - * - * @var int - */ - public $videoDuration = null; - - /** - * The video bit rate - * - * - * @var int - */ - public $videoBitRate = null; - - /** - * The video bit rate mode - * - * - * @var KalturaBitRateMode - */ - public $videoBitRateMode = null; - - /** - * The video width - * - * - * @var int - */ - public $videoWidth = null; - - /** - * The video height - * - * - * @var int - */ - public $videoHeight = null; - - /** - * The video frame rate - * - * - * @var float - */ - public $videoFrameRate = null; - - /** - * The video display aspect ratio (dar) - * - * - * @var float - */ - public $videoDar = null; - - /** - * - * - * @var int - */ - public $videoRotation = null; - - /** - * The audio format - * - * - * @var string - */ - public $audioFormat = null; - - /** - * The audio codec id - * - * - * @var string - */ - public $audioCodecId = null; - - /** - * The audio duration - * - * - * @var int - */ - public $audioDuration = null; - - /** - * The audio bit rate - * - * - * @var int - */ - public $audioBitRate = null; - - /** - * The audio bit rate mode - * - * - * @var KalturaBitRateMode - */ - public $audioBitRateMode = null; - - /** - * The number of audio channels - * - * - * @var int - */ - public $audioChannels = null; - - /** - * The audio sampling rate - * - * - * @var int - */ - public $audioSamplingRate = null; - - /** - * The audio resolution - * - * - * @var int - */ - public $audioResolution = null; - - /** - * The writing library - * - * - * @var string - */ - public $writingLib = null; - - /** - * The data as returned by the mediainfo command line - * - * - * @var string - */ - public $rawData = null; - - /** - * - * - * @var string - */ - public $multiStreamInfo = null; - - /** - * - * - * @var int - */ - public $scanType = null; - - /** - * - * - * @var string - */ - public $multiStream = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaMediaInfoListResponse extends KalturaObjectBase -{ - /** - * - * - * @var array of KalturaMediaInfo - * @readonly - */ - public $objects; - - /** - * - * - * @var int - * @readonly - */ - public $totalCount = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaMediaListResponse extends KalturaObjectBase -{ - /** - * - * - * @var array of KalturaMediaEntry - * @readonly - */ - public $objects; - - /** - * - * - * @var int - * @readonly - */ - public $totalCount = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaMediaServer extends KalturaObjectBase -{ - /** - * Unique identifier - * - * - * @var int - * @readonly - */ - public $id = null; - - /** - * Server data center id - * - * - * @var int - * @readonly - */ - public $dc = null; - - /** - * Server host name - * - * - * @var string - * @readonly - */ - public $hostname = null; - - /** - * Server first registration date as Unix timestamp (In seconds) - * - * - * @var int - * @readonly - */ - public $createdAt = null; - - /** - * Server last update date as Unix timestamp (In seconds) - * - * - * @var int - * @readonly - */ - public $updatedAt = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaMediaServerStatus extends KalturaObjectBase -{ - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaMixEntry extends KalturaPlayableEntry -{ - /** - * Indicates whether the user has submited a real thumbnail to the mix (Not the one that was generated automaticaly) - * - * - * @var bool - * @readonly - */ - public $hasRealThumbnail = null; - - /** - * The editor type used to edit the metadata - * - * - * @var KalturaEditorType - */ - public $editorType = null; - - /** - * The xml data of the mix - * - * - * @var string - */ - public $dataContent = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaMixListResponse extends KalturaObjectBase -{ - /** - * - * - * @var array of KalturaMixEntry - * @readonly - */ - public $objects; - - /** - * - * - * @var int - * @readonly - */ - public $totalCount = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaModerationFlag extends KalturaObjectBase -{ - /** - * Moderation flag id - * - * - * @var int - * @readonly - */ - public $id = null; - - /** - * - * - * @var int - * @readonly - */ - public $partnerId = null; - - /** - * The user id that added the moderation flag - * - * - * @var string - * @readonly - */ - public $userId = null; - - /** - * The type of the moderation flag (entry or user) - * - * - * @var KalturaModerationObjectType - * @readonly - */ - public $moderationObjectType = null; - - /** - * If moderation flag is set for entry, this is the flagged entry id - * - * - * @var string - */ - public $flaggedEntryId = null; - - /** - * If moderation flag is set for user, this is the flagged user id - * - * - * @var string - */ - public $flaggedUserId = null; - - /** - * The moderation flag status - * - * - * @var KalturaModerationFlagStatus - * @readonly - */ - public $status = null; - - /** - * The comment that was added to the flag - * - * - * @var string - */ - public $comments = null; - - /** - * - * - * @var KalturaModerationFlagType - */ - public $flagType = null; - - /** - * - * - * @var int - * @readonly - */ - public $createdAt = null; - - /** - * - * - * @var int - * @readonly - */ - public $updatedAt = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaModerationFlagListResponse extends KalturaObjectBase -{ - /** - * - * - * @var array of KalturaModerationFlag - * @readonly - */ - public $objects; - - /** - * - * - * @var int - * @readonly - */ - public $totalCount = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaPlayerDeliveryType extends KalturaObjectBase -{ - /** - * - * - * @var string - */ - public $id = null; - - /** - * - * - * @var string - */ - public $label = null; - - /** - * - * - * @var array of KalturaKeyValue - */ - public $flashvars; - - /** - * - * - * @var string - */ - public $minVersion = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaPlayerEmbedCodeType extends KalturaObjectBase -{ - /** - * - * - * @var string - */ - public $id = null; - - /** - * - * - * @var string - */ - public $label = null; - - /** - * - * - * @var bool - */ - public $entryOnly = null; - - /** - * - * - * @var string - */ - public $minVersion = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaPartner extends KalturaObjectBase -{ - /** - * - * - * @var int - * @readonly - */ - public $id = null; - - /** - * - * - * @var string - */ - public $name = null; - - /** - * - * - * @var string - */ - public $website = null; - - /** - * - * - * @var string - */ - public $notificationUrl = null; - - /** - * - * - * @var int - */ - public $appearInSearch = null; - - /** - * - * - * @var int - * @readonly - */ - public $createdAt = null; - - /** - * deprecated - lastName and firstName replaces this field - * - * - * @var string - */ - public $adminName = null; - - /** - * - * - * @var string - */ - public $adminEmail = null; - - /** - * - * - * @var string - */ - public $description = null; - - /** - * - * - * @var KalturaCommercialUseType - */ - public $commercialUse = null; - - /** - * - * - * @var string - */ - public $landingPage = null; - - /** - * - * - * @var string - */ - public $userLandingPage = null; - - /** - * - * - * @var string - */ - public $contentCategories = null; - - /** - * - * - * @var KalturaPartnerType - */ - public $type = null; - - /** - * - * - * @var string - */ - public $phone = null; - - /** - * - * - * @var string - */ - public $describeYourself = null; - - /** - * - * - * @var bool - */ - public $adultContent = null; - - /** - * - * - * @var string - */ - public $defConversionProfileType = null; - - /** - * - * - * @var int - */ - public $notify = null; - - /** - * - * - * @var KalturaPartnerStatus - * @readonly - */ - public $status = null; - - /** - * - * - * @var int - */ - public $allowQuickEdit = null; - - /** - * - * - * @var int - */ - public $mergeEntryLists = null; - - /** - * - * - * @var string - */ - public $notificationsConfig = null; - - /** - * - * - * @var int - */ - public $maxUploadSize = null; - - /** - * - * - * @var int - * @readonly - */ - public $partnerPackage = null; - - /** - * - * - * @var string - * @readonly - */ - public $secret = null; - - /** - * - * - * @var string - * @readonly - */ - public $adminSecret = null; - - /** - * - * - * @var string - * @readonly - */ - public $cmsPassword = null; - - /** - * - * - * @var int - */ - public $allowMultiNotification = null; - - /** - * - * - * @var int - * @readonly - */ - public $adminLoginUsersQuota = null; - - /** - * - * - * @var string - */ - public $adminUserId = null; - - /** - * firstName and lastName replace the old (deprecated) adminName - * - * - * @var string - */ - public $firstName = null; - - /** - * lastName and firstName replace the old (deprecated) adminName - * - * - * @var string - */ - public $lastName = null; - - /** - * country code (2char) - this field is optional - * - * - * @var string - */ - public $country = null; - - /** - * state code (2char) - this field is optional - * - * - * @var string - */ - public $state = null; - - /** - * - * - * @var array of KalturaKeyValue - * @insertonly - */ - public $additionalParams; - - /** - * - * - * @var int - * @readonly - */ - public $publishersQuota = null; - - /** - * - * - * @var KalturaPartnerGroupType - * @readonly - */ - public $partnerGroupType = null; - - /** - * - * - * @var bool - * @readonly - */ - public $defaultEntitlementEnforcement = null; - - /** - * - * - * @var string - * @readonly - */ - public $defaultDeliveryType = null; - - /** - * - * - * @var string - * @readonly - */ - public $defaultEmbedCodeType = null; - - /** - * - * - * @var array of KalturaPlayerDeliveryType - * @readonly - */ - public $deliveryTypes; - - /** - * - * - * @var array of KalturaPlayerEmbedCodeType - * @readonly - */ - public $embedCodeTypes; - - /** - * - * - * @var int - * @readonly - */ - public $templatePartnerId = null; - - /** - * - * - * @var bool - * @readonly - */ - public $ignoreSeoLinks = null; - - /** - * - * - * @var string - * @readonly - */ - public $host = null; - - /** - * - * - * @var string - * @readonly - */ - public $cdnHost = null; - - /** - * - * - * @var string - * @readonly - */ - public $rtmpUrl = null; - - /** - * - * - * @var bool - * @readonly - */ - public $isFirstLogin = null; - - /** - * - * - * @var string - * @readonly - */ - public $logoutUrl = null; - - /** - * - * - * @var int - * @readonly - */ - public $partnerParentId = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaPartnerListResponse extends KalturaObjectBase -{ - /** - * - * - * @var array of KalturaPartner - * @readonly - */ - public $objects; - - /** - * - * - * @var int - * @readonly - */ - public $totalCount = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaPartnerStatistics extends KalturaObjectBase -{ - /** - * Package total allowed bandwidth and storage - * - * - * @var int - * @readonly - */ - public $packageBandwidthAndStorage = null; - - /** - * Partner total hosting in GB on the disk - * - * - * @var float - * @readonly - */ - public $hosting = null; - - /** - * Partner total bandwidth in GB - * - * - * @var float - * @readonly - */ - public $bandwidth = null; - - /** - * total usage in GB - including bandwidth and storage - * - * - * @var int - * @readonly - */ - public $usage = null; - - /** - * Percent of usage out of partner's package. if usage is 5GB and package is 10GB, this value will be 50 - * - * - * @var float - * @readonly - */ - public $usagePercent = null; - - /** - * date when partner reached the limit of his package (timestamp) - * - * - * @var int - * @readonly - */ - public $reachedLimitDate = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaPartnerUsage extends KalturaObjectBase -{ - /** - * Partner total hosting in GB on the disk - * - * - * @var float - * @readonly - */ - public $hostingGB = null; - - /** - * percent of usage out of partner's package. if usageGB is 5 and package is 10GB, this value will be 50 - * - * - * @var float - * @readonly - */ - public $Percent = null; - - /** - * package total BW - actually this is usage, which represents BW+storage - * - * - * @var int - * @readonly - */ - public $packageBW = null; - - /** - * total usage in GB - including bandwidth and storage - * - * - * @var float - * @readonly - */ - public $usageGB = null; - - /** - * date when partner reached the limit of his package (timestamp) - * - * - * @var int - * @readonly - */ - public $reachedLimitDate = null; - - /** - * a semi-colon separated list of comma-separated key-values to represent a usage graph. - * keys could be 1-12 for a year view (1,1.2;2,1.1;3,0.9;...;12,1.4;) - * keys could be 1-[28,29,30,31] depending on the requested month, for a daily view in a given month (1,0.4;2,0.2;...;31,0.1;) - * - * - * @var string - * @readonly - */ - public $usageGraph = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaPermission extends KalturaObjectBase -{ - /** - * - * - * @var int - * @readonly - */ - public $id = null; - - /** - * - * - * @var KalturaPermissionType - * @readonly - */ - public $type = null; - - /** - * - * - * @var string - */ - public $name = null; - - /** - * - * - * @var string - */ - public $friendlyName = null; - - /** - * - * - * @var string - */ - public $description = null; - - /** - * - * - * @var KalturaPermissionStatus - */ - public $status = null; - - /** - * - * - * @var int - * @readonly - */ - public $partnerId = null; - - /** - * - * - * @var string - */ - public $dependsOnPermissionNames = null; - - /** - * - * - * @var string - */ - public $tags = null; - - /** - * - * - * @var string - */ - public $permissionItemsIds = null; - - /** - * - * - * @var int - * @readonly - */ - public $createdAt = null; - - /** - * - * - * @var int - * @readonly - */ - public $updatedAt = null; - - /** - * - * - * @var string - */ - public $partnerGroup = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -abstract class KalturaPermissionItem extends KalturaObjectBase -{ - /** - * - * - * @var int - * @readonly - */ - public $id = null; - - /** - * - * - * @var KalturaPermissionItemType - * @readonly - */ - public $type = null; - - /** - * - * - * @var int - * @readonly - */ - public $partnerId = null; - - /** - * - * - * @var string - */ - public $tags = null; - - /** - * - * - * @var int - * @readonly - */ - public $createdAt = null; - - /** - * - * - * @var int - * @readonly - */ - public $updatedAt = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaPermissionItemListResponse extends KalturaObjectBase -{ - /** - * - * - * @var array of KalturaPermissionItem - * @readonly - */ - public $objects; - - /** - * - * - * @var int - * @readonly - */ - public $totalCount = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaPermissionListResponse extends KalturaObjectBase -{ - /** - * - * - * @var array of KalturaPermission - * @readonly - */ - public $objects; - - /** - * - * - * @var int - * @readonly - */ - public $totalCount = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaPlaylist extends KalturaBaseEntry -{ - /** - * Content of the playlist - - * XML if the playlistType is dynamic - * text if the playlistType is static - * url if the playlistType is mRss - * - * - * @var string - */ - public $playlistContent = null; - - /** - * - * - * @var array of KalturaMediaEntryFilterForPlaylist - */ - public $filters; - - /** - * Maximum count of results to be returned in playlist execution - * - * - * @var int - */ - public $totalResults = null; - - /** - * Type of playlist - * - * - * @var KalturaPlaylistType - */ - public $playlistType = null; - - /** - * Number of plays - * - * - * @var int - * @readonly - */ - public $plays = null; - - /** - * Number of views - * - * - * @var int - * @readonly - */ - public $views = null; - - /** - * The duration in seconds - * - * - * @var int - * @readonly - */ - public $duration = null; - - /** - * The url for this playlist - * - * - * @var string - * @readonly - */ - public $executeUrl = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaPlaylistListResponse extends KalturaObjectBase -{ - /** - * - * - * @var array of KalturaPlaylist - * @readonly - */ - public $objects; - - /** - * - * - * @var int - * @readonly - */ - public $totalCount = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaRemotePath extends KalturaObjectBase -{ - /** - * - * - * @var int - * @readonly - */ - public $storageProfileId = null; - - /** - * - * - * @var string - * @readonly - */ - public $uri = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaRemotePathListResponse extends KalturaObjectBase -{ - /** - * - * - * @var array of KalturaRemotePath - * @readonly - */ - public $objects; - - /** - * - * - * @var int - * @readonly - */ - public $totalCount = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaUrlResource extends KalturaContentResource -{ - /** - * Remote URL, FTP, HTTP or HTTPS - * - * - * @var string - */ - public $url = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaRemoteStorageResource extends KalturaUrlResource -{ - /** - * ID of storage profile to be associated with the created file sync, used for file serving URL composing. - * - * - * @var int - */ - public $storageProfileId = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaReportBaseTotal extends KalturaObjectBase -{ - /** - * - * - * @var string - */ - public $id = null; - - /** - * - * - * @var string - */ - public $data = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaReportGraph extends KalturaObjectBase -{ - /** - * - * - * @var string - */ - public $id = null; - - /** - * - * - * @var string - */ - public $data = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaReportInputBaseFilter extends KalturaObjectBase -{ - /** - * Start date as Unix timestamp (In seconds) - * - * - * @var int - */ - public $fromDate = null; - - /** - * End date as Unix timestamp (In seconds) - * - * - * @var int - */ - public $toDate = null; - - /** - * Start day as string (YYYYMMDD) - * - * - * @var string - */ - public $fromDay = null; - - /** - * End date as string (YYYYMMDD) - * - * - * @var string - */ - public $toDay = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaReportResponse extends KalturaObjectBase -{ - /** - * - * - * @var string - */ - public $columns = null; - - /** - * - * - * @var array of KalturaString - */ - public $results; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaReportTable extends KalturaObjectBase -{ - /** - * - * - * @var string - * @readonly - */ - public $header = null; - - /** - * - * - * @var string - * @readonly - */ - public $data = null; - - /** - * - * - * @var int - * @readonly - */ - public $totalCount = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaReportTotal extends KalturaObjectBase -{ - /** - * - * - * @var string - */ - public $header = null; - - /** - * - * - * @var string - */ - public $data = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaSearch extends KalturaObjectBase -{ - /** - * - * - * @var string - */ - public $keyWords = null; - - /** - * - * - * @var KalturaSearchProviderType - */ - public $searchSource = null; - - /** - * - * - * @var KalturaMediaType - */ - public $mediaType = null; - - /** - * Use this field to pass dynamic data for searching - * For example - if you set this field to "mymovies_$partner_id" - * The $partner_id will be automatically replcaed with your real partner Id - * - * - * @var string - */ - public $extraData = null; - - /** - * - * - * @var string - */ - public $authData = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaSearchAuthData extends KalturaObjectBase -{ - /** - * The authentication data that further should be used for search - * - * - * @var string - */ - public $authData = null; - - /** - * Login URL when user need to sign-in and authorize the search - * - * - * @var string - */ - public $loginUrl = null; - - /** - * Information when there was an error - * - * - * @var string - */ - public $message = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaSearchResult extends KalturaSearch -{ - /** - * - * - * @var string - */ - public $id = null; - - /** - * - * - * @var string - */ - public $title = null; - - /** - * - * - * @var string - */ - public $thumbUrl = null; - - /** - * - * - * @var string - */ - public $description = null; - - /** - * - * - * @var string - */ - public $tags = null; - - /** - * - * - * @var string - */ - public $url = null; - - /** - * - * - * @var string - */ - public $sourceLink = null; - - /** - * - * - * @var string - */ - public $credit = null; - - /** - * - * - * @var KalturaLicenseType - */ - public $licenseType = null; - - /** - * - * - * @var string - */ - public $flashPlaybackType = null; - - /** - * - * - * @var string - */ - public $fileExt = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaSearchResultResponse extends KalturaObjectBase -{ - /** - * - * - * @var array of KalturaSearchResult - * @readonly - */ - public $objects; - - /** - * - * - * @var bool - * @readonly - */ - public $needMediaInfo = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaSessionInfo extends KalturaObjectBase -{ - /** - * - * - * @var string - * @readonly - */ - public $ks = null; - - /** - * - * - * @var KalturaSessionType - * @readonly - */ - public $sessionType = null; - - /** - * - * - * @var int - * @readonly - */ - public $partnerId = null; - - /** - * - * - * @var string - * @readonly - */ - public $userId = null; - - /** - * - * - * @var int - * @readonly - */ - public $expiry = null; - - /** - * - * - * @var string - * @readonly - */ - public $privileges = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaSourceFileSyncDescriptor extends KalturaObjectBase -{ - /** - * - * - * @var string - */ - public $fileSyncLocalPath = null; - - /** - * The translated path as used by the scheduler - * - * - * @var string - */ - public $actualFileSyncLocalPath = null; - - /** - * - * - * @var string - */ - public $fileSyncRemoteUrl = null; - - /** - * - * - * @var string - */ - public $assetId = null; - - /** - * - * - * @var int - */ - public $assetParamsId = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaStartWidgetSessionResponse extends KalturaObjectBase -{ - /** - * - * - * @var int - * @readonly - */ - public $partnerId = null; - - /** - * - * - * @var string - * @readonly - */ - public $ks = null; - - /** - * - * - * @var string - * @readonly - */ - public $userId = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaStatsEvent extends KalturaObjectBase -{ - /** - * - * - * @var string - */ - public $clientVer = null; - - /** - * - * - * @var KalturaStatsEventType - */ - public $eventType = null; - - /** - * the client's timestamp of this event - * - * - * @var float - */ - public $eventTimestamp = null; - - /** - * a unique string generated by the client that will represent the client-side session: the primary component will pass it on to other components that sprout from it - * - * - * @var string - */ - public $sessionId = null; - - /** - * - * - * @var int - */ - public $partnerId = null; - - /** - * - * - * @var string - */ - public $entryId = null; - - /** - * the UV cookie - creates in the operational system and should be passed on ofr every event - * - * - * @var string - */ - public $uniqueViewer = null; - - /** - * - * - * @var string - */ - public $widgetId = null; - - /** - * - * - * @var int - */ - public $uiconfId = null; - - /** - * the partner's user id - * - * - * @var string - */ - public $userId = null; - - /** - * the timestamp along the video when the event happend - * - * - * @var int - */ - public $currentPoint = null; - - /** - * the duration of the video in milliseconds - will make it much faster than quering the db for each entry - * - * - * @var int - */ - public $duration = null; - - /** - * will be retrieved from the request of the user - * - * - * @var string - * @readonly - */ - public $userIp = null; - - /** - * the time in milliseconds the event took - * - * - * @var int - */ - public $processDuration = null; - - /** - * the id of the GUI control - will be used in the future to better understand what the user clicked - * - * - * @var string - */ - public $controlId = null; - - /** - * true if the user ever used seek in this session - * - * - * @var bool - */ - public $seek = null; - - /** - * timestamp of the new point on the timeline of the video after the user seeks - * - * - * @var int - */ - public $newPoint = null; - - /** - * the referrer of the client - * - * - * @var string - */ - public $referrer = null; - - /** - * will indicate if the event is thrown for the first video in the session - * - * - * @var bool - */ - public $isFirstInSession = null; - - /** - * kaltura application name - * - * - * @var string - */ - public $applicationId = null; - - /** - * - * - * @var int - */ - public $contextId = null; - - /** - * - * - * @var KalturaStatsFeatureType - */ - public $featureType = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaStatsKmcEvent extends KalturaObjectBase -{ - /** - * - * - * @var string - */ - public $clientVer = null; - - /** - * - * - * @var string - */ - public $kmcEventActionPath = null; - - /** - * - * - * @var KalturaStatsKmcEventType - */ - public $kmcEventType = null; - - /** - * the client's timestamp of this event - * - * - * @var float - */ - public $eventTimestamp = null; - - /** - * a unique string generated by the client that will represent the client-side session: the primary component will pass it on to other components that sprout from it - * - * - * @var string - */ - public $sessionId = null; - - /** - * - * - * @var int - */ - public $partnerId = null; - - /** - * - * - * @var string - */ - public $entryId = null; - - /** - * - * - * @var string - */ - public $widgetId = null; - - /** - * - * - * @var int - */ - public $uiconfId = null; - - /** - * the partner's user id - * - * - * @var string - */ - public $userId = null; - - /** - * will be retrieved from the request of the user - * - * - * @var string - * @readonly - */ - public $userIp = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaStorageProfile extends KalturaObjectBase -{ - /** - * - * - * @var int - * @readonly - */ - public $id = null; - - /** - * - * - * @var int - * @readonly - */ - public $createdAt = null; - - /** - * - * - * @var int - * @readonly - */ - public $updatedAt = null; - - /** - * - * - * @var int - * @readonly - */ - public $partnerId = null; - - /** - * - * - * @var string - */ - public $name = null; - - /** - * - * - * @var string - */ - public $systemName = null; - - /** - * - * - * @var string - */ - public $desciption = null; - - /** - * - * - * @var KalturaStorageProfileStatus - */ - public $status = null; - - /** - * - * - * @var KalturaStorageProfileProtocol - */ - public $protocol = null; - - /** - * - * - * @var string - */ - public $storageUrl = null; - - /** - * - * - * @var string - */ - public $storageBaseDir = null; - - /** - * - * - * @var string - */ - public $storageUsername = null; - - /** - * - * - * @var string - */ - public $storagePassword = null; - - /** - * - * - * @var bool - */ - public $storageFtpPassiveMode = null; - - /** - * - * - * @var string - */ - public $deliveryHttpBaseUrl = null; - - /** - * - * - * @var string - */ - public $deliveryHttpsBaseUrl = null; - - /** - * - * - * @var string - */ - public $deliveryRmpBaseUrl = null; - - /** - * - * - * @var string - */ - public $deliveryIisBaseUrl = null; - - /** - * - * - * @var int - */ - public $minFileSize = null; - - /** - * - * - * @var int - */ - public $maxFileSize = null; - - /** - * - * - * @var string - */ - public $flavorParamsIds = null; - - /** - * - * - * @var int - */ - public $maxConcurrentConnections = null; - - /** - * - * - * @var string - */ - public $pathManagerClass = null; - - /** - * - * - * @var array of KalturaKeyValue - */ - public $pathManagerParams; - - /** - * - * - * @var string - */ - public $urlManagerClass = null; - - /** - * - * - * @var array of KalturaKeyValue - */ - public $urlManagerParams; - - /** - * No need to create enum for temp field - * - * - * @var int - */ - public $trigger = null; - - /** - * Delivery Priority - * - * - * @var int - */ - public $deliveryPriority = null; - - /** - * - * - * @var KalturaStorageProfileDeliveryStatus - */ - public $deliveryStatus = null; - - /** - * - * - * @var string - */ - public $rtmpPrefix = null; - - /** - * - * - * @var KalturaStorageProfileReadyBehavior - */ - public $readyBehavior = null; - - /** - * Flag sugnifying that the storage exported content should be deleted when soure entry is deleted - * - * - * @var int - */ - public $allowAutoDelete = null; - - /** - * Indicates to the local file transfer manager to create a link to the file instead of copying it - * - * - * @var bool - */ - public $createFileLink = null; - - /** - * Holds storage profile export rules - * - * - * @var array of KalturaRule - */ - public $rules; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaStorageProfileListResponse extends KalturaObjectBase -{ - /** - * - * - * @var array of KalturaStorageProfile - * @readonly - */ - public $objects; - - /** - * - * - * @var int - * @readonly - */ - public $totalCount = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaSyndicationFeedEntryCount extends KalturaObjectBase -{ - /** - * the total count of entries that should appear in the feed without flavor filtering - * - * - * @var int - */ - public $totalEntryCount = null; - - /** - * count of entries that will appear in the feed (including all relevant filters) - * - * - * @var int - */ - public $actualEntryCount = null; - - /** - * count of entries that requires transcoding in order to be included in feed - * - * - * @var int - */ - public $requireTranscodingCount = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaThumbAsset extends KalturaAsset -{ - /** - * The Flavor Params used to create this Flavor Asset - * - * - * @var int - * @insertonly - */ - public $thumbParamsId = null; - - /** - * The width of the Flavor Asset - * - * - * @var int - * @readonly - */ - public $width = null; - - /** - * The height of the Flavor Asset - * - * - * @var int - * @readonly - */ - public $height = null; - - /** - * The status of the asset - * - * - * @var KalturaThumbAssetStatus - * @readonly - */ - public $status = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaThumbAssetListResponse extends KalturaObjectBase -{ - /** - * - * - * @var array of KalturaThumbAsset - * @readonly - */ - public $objects; - - /** - * - * - * @var int - * @readonly - */ - public $totalCount = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaThumbParams extends KalturaAssetParams -{ - /** - * - * - * @var KalturaThumbCropType - */ - public $cropType = null; - - /** - * - * - * @var int - */ - public $quality = null; - - /** - * - * - * @var int - */ - public $cropX = null; - - /** - * - * - * @var int - */ - public $cropY = null; - - /** - * - * - * @var int - */ - public $cropWidth = null; - - /** - * - * - * @var int - */ - public $cropHeight = null; - - /** - * - * - * @var float - */ - public $videoOffset = null; - - /** - * - * - * @var int - */ - public $width = null; - - /** - * - * - * @var int - */ - public $height = null; - - /** - * - * - * @var float - */ - public $scaleWidth = null; - - /** - * - * - * @var float - */ - public $scaleHeight = null; - - /** - * Hexadecimal value - * - * - * @var string - */ - public $backgroundColor = null; - - /** - * Id of the flavor params or the thumbnail params to be used as source for the thumbnail creation - * - * - * @var int - */ - public $sourceParamsId = null; - - /** - * The container format of the Flavor Params - * - * - * @var KalturaContainerFormat - */ - public $format = null; - - /** - * The image density (dpi) for example: 72 or 96 - * - * - * @var int - */ - public $density = null; - - /** - * Strip profiles and comments - * - * - * @var bool - */ - public $stripProfiles = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaThumbParamsListResponse extends KalturaObjectBase -{ - /** - * - * - * @var array of KalturaThumbParams - * @readonly - */ - public $objects; - - /** - * - * - * @var int - * @readonly - */ - public $totalCount = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaThumbParamsOutput extends KalturaThumbParams -{ - /** - * - * - * @var int - */ - public $thumbParamsId = null; - - /** - * - * - * @var string - */ - public $thumbParamsVersion = null; - - /** - * - * - * @var string - */ - public $thumbAssetId = null; - - /** - * - * - * @var string - */ - public $thumbAssetVersion = null; - - /** - * - * - * @var int - */ - public $rotate = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaThumbParamsOutputListResponse extends KalturaObjectBase -{ - /** - * - * - * @var array of KalturaThumbParamsOutput - * @readonly - */ - public $objects; - - /** - * - * - * @var int - * @readonly - */ - public $totalCount = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaThumbnailServeOptions extends KalturaObjectBase -{ - /** - * - * - * @var bool - */ - public $download = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaUiConf extends KalturaObjectBase -{ - /** - * - * - * @var int - * @readonly - */ - public $id = null; - - /** - * Name of the uiConf, this is not a primary key - * - * - * @var string - */ - public $name = null; - - /** - * - * - * @var string - */ - public $description = null; - - /** - * - * - * @var int - * @readonly - */ - public $partnerId = null; - - /** - * - * - * @var KalturaUiConfObjType - */ - public $objType = null; - - /** - * - * - * @var string - * @readonly - */ - public $objTypeAsString = null; - - /** - * - * - * @var int - */ - public $width = null; - - /** - * - * - * @var int - */ - public $height = null; - - /** - * - * - * @var string - */ - public $htmlParams = null; - - /** - * - * - * @var string - */ - public $swfUrl = null; - - /** - * - * - * @var string - * @readonly - */ - public $confFilePath = null; - - /** - * - * - * @var string - */ - public $confFile = null; - - /** - * - * - * @var string - */ - public $confFileFeatures = null; - - /** - * - * - * @var string - */ - public $config = null; - - /** - * - * - * @var string - */ - public $confVars = null; - - /** - * - * - * @var bool - */ - public $useCdn = null; - - /** - * - * - * @var string - */ - public $tags = null; - - /** - * - * - * @var string - */ - public $swfUrlVersion = null; - - /** - * Entry creation date as Unix timestamp (In seconds) - * - * - * @var int - * @readonly - */ - public $createdAt = null; - - /** - * Entry creation date as Unix timestamp (In seconds) - * - * - * @var int - * @readonly - */ - public $updatedAt = null; - - /** - * - * - * @var KalturaUiConfCreationMode - */ - public $creationMode = null; - - /** - * - * - * @var string - */ - public $html5Url = null; - - /** - * UiConf version - * - * - * @var string - * @readonly - */ - public $version = null; - - /** - * - * - * @var string - */ - public $partnerTags = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaUiConfListResponse extends KalturaObjectBase -{ - /** - * - * - * @var array of KalturaUiConf - * @readonly - */ - public $objects; - - /** - * - * - * @var int - * @readonly - */ - public $totalCount = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaUiConfTypeInfo extends KalturaObjectBase -{ - /** - * UiConf Type - * - * - * @var KalturaUiConfObjType - */ - public $type = null; - - /** - * Available versions - * - * - * @var array of KalturaString - */ - public $versions; - - /** - * The direcotry this type is saved at - * - * - * @var string - */ - public $directory = null; - - /** - * Filename for this UiConf type - * - * - * @var string - */ - public $filename = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaUploadResponse extends KalturaObjectBase -{ - /** - * - * - * @var string - */ - public $uploadTokenId = null; - - /** - * - * - * @var int - */ - public $fileSize = null; - - /** - * - * - * @var KalturaUploadErrorCode - */ - public $errorCode = null; - - /** - * - * - * @var string - */ - public $errorDescription = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaUploadToken extends KalturaObjectBase -{ - /** - * Upload token unique ID - * - * - * @var string - * @readonly - */ - public $id = null; - - /** - * Partner ID of the upload token - * - * - * @var int - * @readonly - */ - public $partnerId = null; - - /** - * User id for the upload token - * - * - * @var string - * @readonly - */ - public $userId = null; - - /** - * Status of the upload token - * - * - * @var KalturaUploadTokenStatus - * @readonly - */ - public $status = null; - - /** - * Name of the file for the upload token, can be empty when the upload token is created and will be updated internally after the file is uploaded - * - * - * @var string - * @insertonly - */ - public $fileName = null; - - /** - * File size in bytes, can be empty when the upload token is created and will be updated internally after the file is uploaded - * - * - * @var float - * @insertonly - */ - public $fileSize = null; - - /** - * Uploaded file size in bytes, can be used to identify how many bytes were uploaded before resuming - * - * - * @var float - * @readonly - */ - public $uploadedFileSize = null; - - /** - * Creation date as Unix timestamp (In seconds) - * - * - * @var int - * @readonly - */ - public $createdAt = null; - - /** - * Last update date as Unix timestamp (In seconds) - * - * - * @var int - * @readonly - */ - public $updatedAt = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaUploadTokenListResponse extends KalturaObjectBase -{ - /** - * - * - * @var array of KalturaUploadToken - * @readonly - */ - public $objects; - - /** - * - * - * @var int - * @readonly - */ - public $totalCount = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaUser extends KalturaObjectBase -{ - /** - * - * - * @var string - */ - public $id = null; - - /** - * - * - * @var int - * @readonly - */ - public $partnerId = null; - - /** - * - * - * @var string - */ - public $screenName = null; - - /** - * - * - * @var string - */ - public $fullName = null; - - /** - * - * - * @var string - */ - public $email = null; - - /** - * - * - * @var int - */ - public $dateOfBirth = null; - - /** - * - * - * @var string - */ - public $country = null; - - /** - * - * - * @var string - */ - public $state = null; - - /** - * - * - * @var string - */ - public $city = null; - - /** - * - * - * @var string - */ - public $zip = null; - - /** - * - * - * @var string - */ - public $thumbnailUrl = null; - - /** - * - * - * @var string - */ - public $description = null; - - /** - * - * - * @var string - */ - public $tags = null; - - /** - * Admin tags can be updated only by using an admin session - * - * - * @var string - */ - public $adminTags = null; - - /** - * - * - * @var KalturaGender - */ - public $gender = null; - - /** - * - * - * @var KalturaUserStatus - */ - public $status = null; - - /** - * Creation date as Unix timestamp (In seconds) - * - * - * @var int - * @readonly - */ - public $createdAt = null; - - /** - * Last update date as Unix timestamp (In seconds) - * - * - * @var int - * @readonly - */ - public $updatedAt = null; - - /** - * Can be used to store various partner related data as a string - * - * - * @var string - */ - public $partnerData = null; - - /** - * - * - * @var int - */ - public $indexedPartnerDataInt = null; - - /** - * - * - * @var string - */ - public $indexedPartnerDataString = null; - - /** - * - * - * @var int - * @readonly - */ - public $storageSize = null; - - /** - * - * - * @var string - * @insertonly - */ - public $password = null; - - /** - * - * - * @var string - */ - public $firstName = null; - - /** - * - * - * @var string - */ - public $lastName = null; - - /** - * - * - * @var bool - */ - public $isAdmin = null; - - /** - * - * - * @var KalturaLanguageCode - */ - public $language = null; - - /** - * - * - * @var int - * @readonly - */ - public $lastLoginTime = null; - - /** - * - * - * @var int - * @readonly - */ - public $statusUpdatedAt = null; - - /** - * - * - * @var int - * @readonly - */ - public $deletedAt = null; - - /** - * - * - * @var bool - * @readonly - */ - public $loginEnabled = null; - - /** - * - * - * @var string - */ - public $roleIds = null; - - /** - * - * - * @var string - * @readonly - */ - public $roleNames = null; - - /** - * - * - * @var bool - * @readonly - */ - public $isAccountOwner = null; - - /** - * - * - * @var string - */ - public $allowedPartnerIds = null; - - /** - * - * - * @var string - */ - public $allowedPartnerPackages = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaUserListResponse extends KalturaObjectBase -{ - /** - * - * - * @var array of KalturaUser - * @readonly - */ - public $objects; - - /** - * - * - * @var int - * @readonly - */ - public $totalCount = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaUserRole extends KalturaObjectBase -{ - /** - * - * - * @var int - * @readonly - */ - public $id = null; - - /** - * - * - * @var string - */ - public $name = null; - - /** - * - * - * @var string - */ - public $systemName = null; - - /** - * - * - * @var string - */ - public $description = null; - - /** - * - * - * @var KalturaUserRoleStatus - */ - public $status = null; - - /** - * - * - * @var int - * @readonly - */ - public $partnerId = null; - - /** - * - * - * @var string - */ - public $permissionNames = null; - - /** - * - * - * @var string - */ - public $tags = null; - - /** - * - * - * @var int - * @readonly - */ - public $createdAt = null; - - /** - * - * - * @var int - * @readonly - */ - public $updatedAt = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaUserRoleListResponse extends KalturaObjectBase -{ - /** - * - * - * @var array of KalturaUserRole - * @readonly - */ - public $objects; - - /** - * - * - * @var int - * @readonly - */ - public $totalCount = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaWidget extends KalturaObjectBase -{ - /** - * - * - * @var string - * @readonly - */ - public $id = null; - - /** - * - * - * @var string - */ - public $sourceWidgetId = null; - - /** - * - * - * @var string - * @readonly - */ - public $rootWidgetId = null; - - /** - * - * - * @var int - * @readonly - */ - public $partnerId = null; - - /** - * - * - * @var string - */ - public $entryId = null; - - /** - * - * - * @var int - */ - public $uiConfId = null; - - /** - * - * - * @var KalturaWidgetSecurityType - */ - public $securityType = null; - - /** - * - * - * @var int - */ - public $securityPolicy = null; - - /** - * - * - * @var int - * @readonly - */ - public $createdAt = null; - - /** - * - * - * @var int - * @readonly - */ - public $updatedAt = null; - - /** - * Can be used to store various partner related data as a string - * - * - * @var string - */ - public $partnerData = null; - - /** - * - * - * @var string - * @readonly - */ - public $widgetHTML = null; - - /** - * Should enforce entitlement on feed entries - * - * - * @var bool - */ - public $enforceEntitlement = null; - - /** - * Set privacy context for search entries that assiged to private and public categories within a category privacy context. - * - * - * @var string - */ - public $privacyContext = null; - - /** - * Addes the HTML5 script line to the widget's embed code - * - * - * @var bool - */ - public $addEmbedHtml5Support = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaWidgetListResponse extends KalturaObjectBase -{ - /** - * - * - * @var array of KalturaWidget - * @readonly - */ - public $objects; - - /** - * - * - * @var int - * @readonly - */ - public $totalCount = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -abstract class KalturaAccessControlBaseFilter extends KalturaFilter -{ - /** - * - * - * @var int - */ - public $idEqual = null; - - /** - * - * - * @var string - */ - public $idIn = null; - - /** - * - * - * @var string - */ - public $systemNameEqual = null; - - /** - * - * - * @var string - */ - public $systemNameIn = null; - - /** - * - * - * @var int - */ - public $createdAtGreaterThanOrEqual = null; - - /** - * - * - * @var int - */ - public $createdAtLessThanOrEqual = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaAccessControlBlockAction extends KalturaRuleAction -{ - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaAccessControlLimitFlavorsAction extends KalturaRuleAction -{ - /** - * Comma separated list of flavor ids - * - * - * @var string - */ - public $flavorParamsIds = null; - - /** - * - * - * @var bool - */ - public $isBlockedList = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaAccessControlPreviewAction extends KalturaRuleAction -{ - /** - * - * - * @var int - */ - public $limit = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -abstract class KalturaAccessControlProfileBaseFilter extends KalturaFilter -{ - /** - * - * - * @var int - */ - public $idEqual = null; - - /** - * - * - * @var string - */ - public $idIn = null; - - /** - * - * - * @var string - */ - public $systemNameEqual = null; - - /** - * - * - * @var string - */ - public $systemNameIn = null; - - /** - * - * - * @var int - */ - public $createdAtGreaterThanOrEqual = null; - - /** - * - * - * @var int - */ - public $createdAtLessThanOrEqual = null; - - /** - * - * - * @var int - */ - public $updatedAtGreaterThanOrEqual = null; - - /** - * - * - * @var int - */ - public $updatedAtLessThanOrEqual = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaAdminUser extends KalturaUser -{ - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaAmazonS3StorageProfile extends KalturaStorageProfile -{ - /** - * - * - * @var KalturaAmazonS3StorageProfileFilesPermissionLevel - */ - public $filesPermissionInS3 = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaApiActionPermissionItem extends KalturaPermissionItem -{ - /** - * - * - * @var string - */ - public $service = null; - - /** - * - * - * @var string - */ - public $action = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaApiParameterPermissionItem extends KalturaPermissionItem -{ - /** - * - * - * @var string - */ - public $object = null; - - /** - * - * - * @var string - */ - public $parameter = null; - - /** - * - * - * @var KalturaApiParameterPermissionItemAction - */ - public $action = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -abstract class KalturaAssetBaseFilter extends KalturaFilter -{ - /** - * - * - * @var string - */ - public $idEqual = null; - - /** - * - * - * @var string - */ - public $idIn = null; - - /** - * - * - * @var string - */ - public $entryIdEqual = null; - - /** - * - * - * @var string - */ - public $entryIdIn = null; - - /** - * - * - * @var int - */ - public $partnerIdEqual = null; - - /** - * - * - * @var string - */ - public $partnerIdIn = null; - - /** - * - * - * @var int - */ - public $sizeGreaterThanOrEqual = null; - - /** - * - * - * @var int - */ - public $sizeLessThanOrEqual = null; - - /** - * - * - * @var string - */ - public $tagsLike = null; - - /** - * - * - * @var string - */ - public $tagsMultiLikeOr = null; - - /** - * - * - * @var string - */ - public $tagsMultiLikeAnd = null; - - /** - * - * - * @var int - */ - public $createdAtGreaterThanOrEqual = null; - - /** - * - * - * @var int - */ - public $createdAtLessThanOrEqual = null; - - /** - * - * - * @var int - */ - public $updatedAtGreaterThanOrEqual = null; - - /** - * - * - * @var int - */ - public $updatedAtLessThanOrEqual = null; - - /** - * - * - * @var int - */ - public $deletedAtGreaterThanOrEqual = null; - - /** - * - * - * @var int - */ - public $deletedAtLessThanOrEqual = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -abstract class KalturaAssetParamsBaseFilter extends KalturaFilter -{ - /** - * - * - * @var string - */ - public $systemNameEqual = null; - - /** - * - * - * @var string - */ - public $systemNameIn = null; - - /** - * - * - * @var KalturaNullableBoolean - */ - public $isSystemDefaultEqual = null; - - /** - * - * - * @var string - */ - public $tagsEqual = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaAssetParamsOutput extends KalturaAssetParams -{ - /** - * - * - * @var int - */ - public $assetParamsId = null; - - /** - * - * - * @var string - */ - public $assetParamsVersion = null; - - /** - * - * - * @var string - */ - public $assetId = null; - - /** - * - * - * @var string - */ - public $assetVersion = null; - - /** - * - * - * @var int - */ - public $readyBehavior = null; - - /** - * The container format of the Flavor Params - * - * - * @var KalturaContainerFormat - */ - public $format = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaAssetPropertiesCompareCondition extends KalturaCondition -{ - /** - * Array of key/value objects that holds the property and the value to find and compare on an asset object - * - * - * @var array of KalturaKeyValue - */ - public $properties; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaAssetsParamsResourceContainers extends KalturaResource -{ - /** - * Array of resources associated with asset params ids - * - * - * @var array of KalturaAssetParamsResourceContainer - */ - public $resources; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaAuthenticatedCondition extends KalturaCondition -{ - /** - * The privelege needed to remove the restriction - * - * - * @var array of KalturaStringValue - */ - public $privileges; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -abstract class KalturaBaseSyndicationFeedBaseFilter extends KalturaFilter -{ - -} - -/** - * @package Kaltura - * @subpackage Client - */ -abstract class KalturaBatchJobBaseFilter extends KalturaFilter -{ - /** - * - * - * @var int - */ - public $idEqual = null; - - /** - * - * - * @var int - */ - public $idGreaterThanOrEqual = null; - - /** - * - * - * @var int - */ - public $partnerIdEqual = null; - - /** - * - * - * @var string - */ - public $partnerIdIn = null; - - /** - * - * - * @var string - */ - public $partnerIdNotIn = null; - - /** - * - * - * @var int - */ - public $createdAtGreaterThanOrEqual = null; - - /** - * - * - * @var int - */ - public $createdAtLessThanOrEqual = null; - - /** - * - * - * @var int - */ - public $updatedAtGreaterThanOrEqual = null; - - /** - * - * - * @var int - */ - public $updatedAtLessThanOrEqual = null; - - /** - * - * - * @var int - */ - public $executionAttemptsGreaterThanOrEqual = null; - - /** - * - * - * @var int - */ - public $executionAttemptsLessThanOrEqual = null; - - /** - * - * - * @var int - */ - public $lockVersionGreaterThanOrEqual = null; - - /** - * - * - * @var int - */ - public $lockVersionLessThanOrEqual = null; - - /** - * - * - * @var string - */ - public $entryIdEqual = null; - - /** - * - * - * @var KalturaBatchJobType - */ - public $jobTypeEqual = null; - - /** - * - * - * @var string - */ - public $jobTypeIn = null; - - /** - * - * - * @var string - */ - public $jobTypeNotIn = null; - - /** - * - * - * @var int - */ - public $jobSubTypeEqual = null; - - /** - * - * - * @var string - */ - public $jobSubTypeIn = null; - - /** - * - * - * @var string - */ - public $jobSubTypeNotIn = null; - - /** - * - * - * @var KalturaBatchJobStatus - */ - public $statusEqual = null; - - /** - * - * - * @var string - */ - public $statusIn = null; - - /** - * - * - * @var string - */ - public $statusNotIn = null; - - /** - * - * - * @var int - */ - public $priorityGreaterThanOrEqual = null; - - /** - * - * - * @var int - */ - public $priorityLessThanOrEqual = null; - - /** - * - * - * @var int - */ - public $priorityEqual = null; - - /** - * - * - * @var string - */ - public $priorityIn = null; - - /** - * - * - * @var string - */ - public $priorityNotIn = null; - - /** - * - * - * @var int - */ - public $batchVersionGreaterThanOrEqual = null; - - /** - * - * - * @var int - */ - public $batchVersionLessThanOrEqual = null; - - /** - * - * - * @var int - */ - public $batchVersionEqual = null; - - /** - * - * - * @var int - */ - public $queueTimeGreaterThanOrEqual = null; - - /** - * - * - * @var int - */ - public $queueTimeLessThanOrEqual = null; - - /** - * - * - * @var int - */ - public $finishTimeGreaterThanOrEqual = null; - - /** - * - * - * @var int - */ - public $finishTimeLessThanOrEqual = null; - - /** - * - * - * @var KalturaBatchJobErrorTypes - */ - public $errTypeEqual = null; - - /** - * - * - * @var string - */ - public $errTypeIn = null; - - /** - * - * - * @var string - */ - public $errTypeNotIn = null; - - /** - * - * - * @var int - */ - public $errNumberEqual = null; - - /** - * - * - * @var string - */ - public $errNumberIn = null; - - /** - * - * - * @var string - */ - public $errNumberNotIn = null; - - /** - * - * - * @var int - */ - public $estimatedEffortLessThan = null; - - /** - * - * - * @var int - */ - public $estimatedEffortGreaterThan = null; - - /** - * - * - * @var int - */ - public $urgencyLessThanOrEqual = null; - - /** - * - * - * @var int - */ - public $urgencyGreaterThanOrEqual = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaBooleanValue extends KalturaValue -{ - /** - * - * - * @var bool - */ - public $value = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaBulkDownloadJobData extends KalturaJobData -{ - /** - * Comma separated list of entry ids - * - * - * @var string - */ - public $entryIds = null; - - /** - * Flavor params id to use for conversion - * - * - * @var int - */ - public $flavorParamsId = null; - - /** - * The id of the requesting user - * - * - * @var string - */ - public $puserId = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -abstract class KalturaBulkUploadBaseFilter extends KalturaFilter -{ - /** - * - * - * @var int - */ - public $uploadedOnGreaterThanOrEqual = null; - - /** - * - * - * @var int - */ - public $uploadedOnLessThanOrEqual = null; - - /** - * - * - * @var int - */ - public $uploadedOnEqual = null; - - /** - * - * - * @var string - */ - public $statusIn = null; - - /** - * - * - * @var KalturaBatchJobStatus - */ - public $statusEqual = null; - - /** - * - * - * @var KalturaBulkUploadObjectType - */ - public $bulkUploadObjectTypeEqual = null; - - /** - * - * - * @var string - */ - public $bulkUploadObjectTypeIn = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaBulkUploadCategoryData extends KalturaBulkUploadObjectData -{ - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaBulkUploadCategoryEntryData extends KalturaBulkUploadObjectData -{ - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaBulkUploadCategoryUserData extends KalturaBulkUploadObjectData -{ - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaBulkUploadEntryData extends KalturaBulkUploadObjectData -{ - /** - * Selected profile id for all bulk entries - * - * - * @var int - */ - public $conversionProfileId = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaBulkUploadJobData extends KalturaJobData -{ - /** - * - * - * @var string - * @readonly - */ - public $userId = null; - - /** - * The screen name of the user - * - * - * @var string - * @readonly - */ - public $uploadedBy = null; - - /** - * Selected profile id for all bulk entries - * - * - * @var int - * @readonly - */ - public $conversionProfileId = null; - - /** - * Created by the API - * - * - * @var string - * @readonly - */ - public $resultsFileLocalPath = null; - - /** - * Created by the API - * - * - * @var string - * @readonly - */ - public $resultsFileUrl = null; - - /** - * Number of created entries - * - * - * @var int - * @readonly - */ - public $numOfEntries = null; - - /** - * Number of created objects - * - * - * @var int - * @readonly - */ - public $numOfObjects = null; - - /** - * The bulk upload file path - * - * - * @var string - * @readonly - */ - public $filePath = null; - - /** - * Type of object for bulk upload - * - * - * @var KalturaBulkUploadObjectType - * @readonly - */ - public $bulkUploadObjectType = null; - - /** - * Friendly name of the file, used to be recognized later in the logs. - * - * - * @var string - */ - public $fileName = null; - - /** - * Data pertaining to the objects being uploaded - * - * - * @var KalturaBulkUploadObjectData - * @readonly - */ - public $objectData; - - /** - * Type of bulk upload - * - * - * @var KalturaBulkUploadType - * @readonly - */ - public $type = null; - - /** - * Recipients of the email for bulk upload success/failure - * - * - * @var string - */ - public $emailRecipients = null; - - /** - * Number of objects that finished on error status - * - * - * @var int - */ - public $numOfErrorObjects = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaBulkUploadResultCategory extends KalturaBulkUploadResult -{ - /** - * - * - * @var string - */ - public $relativePath = null; - - /** - * - * - * @var string - */ - public $name = null; - - /** - * - * - * @var string - */ - public $referenceId = null; - - /** - * - * - * @var string - */ - public $description = null; - - /** - * - * - * @var string - */ - public $tags = null; - - /** - * - * - * @var int - */ - public $appearInList = null; - - /** - * - * - * @var int - */ - public $privacy = null; - - /** - * - * - * @var int - */ - public $inheritanceType = null; - - /** - * - * - * @var int - */ - public $userJoinPolicy = null; - - /** - * - * - * @var int - */ - public $defaultPermissionLevel = null; - - /** - * - * - * @var string - */ - public $owner = null; - - /** - * - * - * @var int - */ - public $contributionPolicy = null; - - /** - * - * - * @var int - */ - public $partnerSortValue = null; - - /** - * - * - * @var bool - */ - public $moderation = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaBulkUploadResultCategoryEntry extends KalturaBulkUploadResult -{ - /** - * - * - * @var int - */ - public $categoryId = null; - - /** - * - * - * @var string - */ - public $entryId = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaBulkUploadResultCategoryUser extends KalturaBulkUploadResult -{ - /** - * - * - * @var int - */ - public $categoryId = null; - - /** - * - * - * @var string - */ - public $categoryReferenceId = null; - - /** - * - * - * @var string - */ - public $userId = null; - - /** - * - * - * @var int - */ - public $permissionLevel = null; - - /** - * - * - * @var int - */ - public $updateMethod = null; - - /** - * - * - * @var int - */ - public $requiredObjectStatus = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaBulkUploadResultEntry extends KalturaBulkUploadResult -{ - /** - * - * - * @var string - */ - public $entryId = null; - - /** - * - * - * @var string - */ - public $title = null; - - /** - * - * - * @var string - */ - public $description = null; - - /** - * - * - * @var string - */ - public $tags = null; - - /** - * - * - * @var string - */ - public $url = null; - - /** - * - * - * @var string - */ - public $contentType = null; - - /** - * - * - * @var int - */ - public $conversionProfileId = null; - - /** - * - * - * @var int - */ - public $accessControlProfileId = null; - - /** - * - * - * @var string - */ - public $category = null; - - /** - * - * - * @var int - */ - public $scheduleStartDate = null; - - /** - * - * - * @var int - */ - public $scheduleEndDate = null; - - /** - * - * - * @var int - */ - public $entryStatus = null; - - /** - * - * - * @var string - */ - public $thumbnailUrl = null; - - /** - * - * - * @var bool - */ - public $thumbnailSaved = null; - - /** - * - * - * @var string - */ - public $sshPrivateKey = null; - - /** - * - * - * @var string - */ - public $sshPublicKey = null; - - /** - * - * - * @var string - */ - public $sshKeyPassphrase = null; - - /** - * - * - * @var string - */ - public $creatorId = null; - - /** - * - * - * @var string - */ - public $entitledUsersEdit = null; - - /** - * - * - * @var string - */ - public $entitledUsersPublish = null; - - /** - * - * - * @var string - */ - public $ownerId = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaBulkUploadResultUser extends KalturaBulkUploadResult -{ - /** - * - * - * @var string - */ - public $userId = null; - - /** - * - * - * @var string - */ - public $screenName = null; - - /** - * - * - * @var string - */ - public $email = null; - - /** - * - * - * @var string - */ - public $description = null; - - /** - * - * - * @var string - */ - public $tags = null; - - /** - * - * - * @var int - */ - public $dateOfBirth = null; - - /** - * - * - * @var string - */ - public $country = null; - - /** - * - * - * @var string - */ - public $state = null; - - /** - * - * - * @var string - */ - public $city = null; - - /** - * - * - * @var string - */ - public $zip = null; - - /** - * - * - * @var int - */ - public $gender = null; - - /** - * - * - * @var string - */ - public $firstName = null; - - /** - * - * - * @var string - */ - public $lastName = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaBulkUploadUserData extends KalturaBulkUploadObjectData -{ - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaCaptureThumbJobData extends KalturaJobData -{ - /** - * - * - * @var string - */ - public $srcFileSyncLocalPath = null; - - /** - * The translated path as used by the scheduler - * - * - * @var string - */ - public $actualSrcFileSyncLocalPath = null; - - /** - * - * - * @var string - */ - public $srcFileSyncRemoteUrl = null; - - /** - * - * - * @var int - */ - public $thumbParamsOutputId = null; - - /** - * - * - * @var string - */ - public $thumbAssetId = null; - - /** - * - * - * @var string - */ - public $srcAssetId = null; - - /** - * - * - * @var KalturaAssetType - */ - public $srcAssetType = null; - - /** - * - * - * @var string - */ - public $thumbPath = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -abstract class KalturaCategoryBaseFilter extends KalturaFilter -{ - /** - * - * - * @var int - */ - public $idEqual = null; - - /** - * - * - * @var string - */ - public $idIn = null; - - /** - * - * - * @var int - */ - public $parentIdEqual = null; - - /** - * - * - * @var string - */ - public $parentIdIn = null; - - /** - * - * - * @var int - */ - public $depthEqual = null; - - /** - * - * - * @var string - */ - public $fullNameEqual = null; - - /** - * - * - * @var string - */ - public $fullNameStartsWith = null; - - /** - * - * - * @var string - */ - public $fullNameIn = null; - - /** - * - * - * @var string - */ - public $fullIdsEqual = null; - - /** - * - * - * @var string - */ - public $fullIdsStartsWith = null; - - /** - * - * - * @var string - */ - public $fullIdsMatchOr = null; - - /** - * - * - * @var int - */ - public $createdAtGreaterThanOrEqual = null; - - /** - * - * - * @var int - */ - public $createdAtLessThanOrEqual = null; - - /** - * - * - * @var int - */ - public $updatedAtGreaterThanOrEqual = null; - - /** - * - * - * @var int - */ - public $updatedAtLessThanOrEqual = null; - - /** - * - * - * @var string - */ - public $tagsLike = null; - - /** - * - * - * @var string - */ - public $tagsMultiLikeOr = null; - - /** - * - * - * @var string - */ - public $tagsMultiLikeAnd = null; - - /** - * - * - * @var KalturaAppearInListType - */ - public $appearInListEqual = null; - - /** - * - * - * @var KalturaPrivacyType - */ - public $privacyEqual = null; - - /** - * - * - * @var string - */ - public $privacyIn = null; - - /** - * - * - * @var KalturaInheritanceType - */ - public $inheritanceTypeEqual = null; - - /** - * - * - * @var string - */ - public $inheritanceTypeIn = null; - - /** - * - * - * @var string - */ - public $referenceIdEqual = null; - - /** - * - * - * @var KalturaNullableBoolean - */ - public $referenceIdEmpty = null; - - /** - * - * - * @var KalturaContributionPolicyType - */ - public $contributionPolicyEqual = null; - - /** - * - * - * @var int - */ - public $membersCountGreaterThanOrEqual = null; - - /** - * - * - * @var int - */ - public $membersCountLessThanOrEqual = null; - - /** - * - * - * @var int - */ - public $pendingMembersCountGreaterThanOrEqual = null; - - /** - * - * - * @var int - */ - public $pendingMembersCountLessThanOrEqual = null; - - /** - * - * - * @var string - */ - public $privacyContextEqual = null; - - /** - * - * - * @var KalturaCategoryStatus - */ - public $statusEqual = null; - - /** - * - * - * @var string - */ - public $statusIn = null; - - /** - * - * - * @var int - */ - public $inheritedParentIdEqual = null; - - /** - * - * - * @var string - */ - public $inheritedParentIdIn = null; - - /** - * - * - * @var int - */ - public $partnerSortValueGreaterThanOrEqual = null; - - /** - * - * - * @var int - */ - public $partnerSortValueLessThanOrEqual = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaCategoryEntryAdvancedFilter extends KalturaSearchItem -{ - /** - * - * - * @var string - */ - public $categoriesMatchOr = null; - - /** - * - * - * @var string - */ - public $categoryEntryStatusIn = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -abstract class KalturaCategoryEntryBaseFilter extends KalturaFilter -{ - /** - * - * - * @var int - */ - public $categoryIdEqual = null; - - /** - * - * - * @var string - */ - public $categoryIdIn = null; - - /** - * - * - * @var string - */ - public $entryIdEqual = null; - - /** - * - * - * @var string - */ - public $entryIdIn = null; - - /** - * - * - * @var int - */ - public $createdAtGreaterThanOrEqual = null; - - /** - * - * - * @var int - */ - public $createdAtLessThanOrEqual = null; - - /** - * - * - * @var string - */ - public $categoryFullIdsStartsWith = null; - - /** - * - * - * @var KalturaCategoryEntryStatus - */ - public $statusEqual = null; - - /** - * - * - * @var string - */ - public $statusIn = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaCategoryIdentifier extends KalturaObjectIdentifier -{ - /** - * Identifier of the object - * - * - * @var KalturaCategoryIdentifierField - */ - public $identifier = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaCategoryUserAdvancedFilter extends KalturaSearchItem -{ - /** - * - * - * @var string - */ - public $memberIdEq = null; - - /** - * - * - * @var string - */ - public $memberIdIn = null; - - /** - * - * - * @var string - */ - public $memberPermissionsMatchOr = null; - - /** - * - * - * @var string - */ - public $memberPermissionsMatchAnd = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -abstract class KalturaCategoryUserBaseFilter extends KalturaFilter -{ - /** - * - * - * @var int - */ - public $categoryIdEqual = null; - - /** - * - * - * @var string - */ - public $categoryIdIn = null; - - /** - * - * - * @var string - */ - public $userIdEqual = null; - - /** - * - * - * @var string - */ - public $userIdIn = null; - - /** - * - * - * @var KalturaCategoryUserPermissionLevel - */ - public $permissionLevelEqual = null; - - /** - * - * - * @var string - */ - public $permissionLevelIn = null; - - /** - * - * - * @var KalturaCategoryUserStatus - */ - public $statusEqual = null; - - /** - * - * - * @var string - */ - public $statusIn = null; - - /** - * - * - * @var int - */ - public $createdAtGreaterThanOrEqual = null; - - /** - * - * - * @var int - */ - public $createdAtLessThanOrEqual = null; - - /** - * - * - * @var int - */ - public $updatedAtGreaterThanOrEqual = null; - - /** - * - * - * @var int - */ - public $updatedAtLessThanOrEqual = null; - - /** - * - * - * @var KalturaUpdateMethodType - */ - public $updateMethodEqual = null; - - /** - * - * - * @var string - */ - public $updateMethodIn = null; - - /** - * - * - * @var string - */ - public $categoryFullIdsStartsWith = null; - - /** - * - * - * @var string - */ - public $categoryFullIdsEqual = null; - - /** - * - * - * @var string - */ - public $permissionNamesMatchAnd = null; - - /** - * - * - * @var string - */ - public $permissionNamesMatchOr = null; - - /** - * - * - * @var string - */ - public $permissionNamesNotContains = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaClipAttributes extends KalturaOperationAttributes -{ - /** - * Offset in milliseconds - * - * - * @var int - */ - public $offset = null; - - /** - * Duration in milliseconds - * - * - * @var int - */ - public $duration = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaIntegerValue extends KalturaValue -{ - /** - * - * - * @var int - */ - public $value = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -abstract class KalturaCompareCondition extends KalturaCondition -{ - /** - * Value to evaluate against the field and operator - * - * - * @var KalturaIntegerValue - */ - public $value; - - /** - * Comparing operator - * - * - * @var KalturaSearchConditionComparison - */ - public $comparison = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -abstract class KalturaDataCenterContentResource extends KalturaContentResource -{ - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaConcatAttributes extends KalturaOperationAttributes -{ - /** - * The resource to be concatenated - * - * - * @var KalturaDataCenterContentResource - */ - public $resource; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaConcatJobData extends KalturaJobData -{ - /** - * Source files to be concatenated - * - * - * @var array of KalturaString - */ - public $srcFiles; - - /** - * Output file - * - * - * @var string - */ - public $destFilePath = null; - - /** - * Flavor asset to be ingested with the output - * - * - * @var string - */ - public $flavorAssetId = null; - - /** - * Clipping offset in seconds - * - * - * @var float - */ - public $offset = null; - - /** - * Clipping duration in seconds - * - * - * @var float - */ - public $duration = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -abstract class KalturaControlPanelCommandBaseFilter extends KalturaFilter -{ - /** - * - * - * @var int - */ - public $idEqual = null; - - /** - * - * - * @var string - */ - public $idIn = null; - - /** - * - * - * @var int - */ - public $createdAtGreaterThanOrEqual = null; - - /** - * - * - * @var int - */ - public $createdAtLessThanOrEqual = null; - - /** - * - * - * @var int - */ - public $createdByIdEqual = null; - - /** - * - * - * @var KalturaControlPanelCommandType - */ - public $typeEqual = null; - - /** - * - * - * @var string - */ - public $typeIn = null; - - /** - * - * - * @var KalturaControlPanelCommandTargetType - */ - public $targetTypeEqual = null; - - /** - * - * - * @var string - */ - public $targetTypeIn = null; - - /** - * - * - * @var KalturaControlPanelCommandStatus - */ - public $statusEqual = null; - - /** - * - * - * @var string - */ - public $statusIn = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaConvartableJobData extends KalturaJobData -{ - /** - * - * - * @var string - */ - public $srcFileSyncLocalPath = null; - - /** - * The translated path as used by the scheduler - * - * - * @var string - */ - public $actualSrcFileSyncLocalPath = null; - - /** - * - * - * @var string - */ - public $srcFileSyncRemoteUrl = null; - - /** - * - * - * @var array of KalturaSourceFileSyncDescriptor - */ - public $srcFileSyncs; - - /** - * - * - * @var int - */ - public $engineVersion = null; - - /** - * - * - * @var int - */ - public $flavorParamsOutputId = null; - - /** - * - * - * @var KalturaFlavorParamsOutput - */ - public $flavorParamsOutput; - - /** - * - * - * @var int - */ - public $mediaInfoId = null; - - /** - * - * - * @var int - */ - public $currentOperationSet = null; - - /** - * - * - * @var int - */ - public $currentOperationIndex = null; - - /** - * - * - * @var array of KalturaKeyValue - */ - public $pluginData; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -abstract class KalturaConversionProfileAssetParamsBaseFilter extends KalturaFilter -{ - /** - * - * - * @var int - */ - public $conversionProfileIdEqual = null; - - /** - * - * - * @var string - */ - public $conversionProfileIdIn = null; - - /** - * - * - * @var int - */ - public $assetParamsIdEqual = null; - - /** - * - * - * @var string - */ - public $assetParamsIdIn = null; - - /** - * - * - * @var KalturaFlavorReadyBehaviorType - */ - public $readyBehaviorEqual = null; - - /** - * - * - * @var string - */ - public $readyBehaviorIn = null; - - /** - * - * - * @var KalturaAssetParamsOrigin - */ - public $originEqual = null; - - /** - * - * - * @var string - */ - public $originIn = null; - - /** - * - * - * @var string - */ - public $systemNameEqual = null; - - /** - * - * - * @var string - */ - public $systemNameIn = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -abstract class KalturaConversionProfileBaseFilter extends KalturaFilter -{ - /** - * - * - * @var int - */ - public $idEqual = null; - - /** - * - * - * @var string - */ - public $idIn = null; - - /** - * - * - * @var KalturaConversionProfileStatus - */ - public $statusEqual = null; - - /** - * - * - * @var string - */ - public $statusIn = null; - - /** - * - * - * @var KalturaConversionProfileType - */ - public $typeEqual = null; - - /** - * - * - * @var string - */ - public $typeIn = null; - - /** - * - * - * @var string - */ - public $nameEqual = null; - - /** - * - * - * @var string - */ - public $systemNameEqual = null; - - /** - * - * - * @var string - */ - public $systemNameIn = null; - - /** - * - * - * @var string - */ - public $tagsMultiLikeOr = null; - - /** - * - * - * @var string - */ - public $tagsMultiLikeAnd = null; - - /** - * - * - * @var string - */ - public $defaultEntryIdEqual = null; - - /** - * - * - * @var string - */ - public $defaultEntryIdIn = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaConvertLiveSegmentJobData extends KalturaJobData -{ - /** - * Live stream entry id - * - * - * @var string - */ - public $entryId = null; - - /** - * Primary or secondary media server - * - * - * @var KalturaMediaServerIndex - */ - public $mediaServerIndex = null; - - /** - * The index of the file within the entry - * - * - * @var int - */ - public $fileIndex = null; - - /** - * The recorded live media - * - * - * @var string - */ - public $srcFilePath = null; - - /** - * The output file - * - * - * @var string - */ - public $destFilePath = null; - - /** - * Duration of the live entry including all recorded segments including the current - * - * - * @var float - */ - public $endTime = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaConvertProfileJobData extends KalturaJobData -{ - /** - * - * - * @var string - */ - public $inputFileSyncLocalPath = null; - - /** - * The height of last created thumbnail, will be used to comapare if this thumbnail is the best we can have - * - * - * @var int - */ - public $thumbHeight = null; - - /** - * The bit rate of last created thumbnail, will be used to comapare if this thumbnail is the best we can have - * - * - * @var int - */ - public $thumbBitrate = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaCopyPartnerJobData extends KalturaJobData -{ - /** - * Id of the partner to copy from - * - * - * @var int - */ - public $fromPartnerId = null; - - /** - * Id of the partner to copy to - * - * - * @var int - */ - public $toPartnerId = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaCountryRestriction extends KalturaBaseRestriction -{ - /** - * Country restriction type (Allow or deny) - * - * - * @var KalturaCountryRestrictionType - */ - public $countryRestrictionType = null; - - /** - * Comma separated list of country codes to allow to deny - * - * - * @var string - */ - public $countryList = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaDeleteFileJobData extends KalturaJobData -{ - /** - * - * - * @var string - */ - public $localFileSyncPath = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaDeleteJobData extends KalturaJobData -{ - /** - * The filter should return the list of objects that need to be deleted. - * - * - * @var KalturaFilter - */ - public $filter; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaDirectoryRestriction extends KalturaBaseRestriction -{ - /** - * Kaltura directory restriction type - * - * - * @var KalturaDirectoryRestrictionType - */ - public $directoryRestrictionType = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaCategoryUserFilter extends KalturaCategoryUserBaseFilter -{ - /** - * Return the list of categoryUser that are not inherited from parent category - only the direct categoryUsers. - * - * - * @var bool - */ - public $categoryDirectMembers = null; - - /** - * Free text search on user id or screen name - * - * - * @var string - */ - public $freeText = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -abstract class KalturaUserBaseFilter extends KalturaFilter -{ - /** - * - * - * @var int - */ - public $partnerIdEqual = null; - - /** - * - * - * @var string - */ - public $screenNameLike = null; - - /** - * - * - * @var string - */ - public $screenNameStartsWith = null; - - /** - * - * - * @var string - */ - public $emailLike = null; - - /** - * - * - * @var string - */ - public $emailStartsWith = null; - - /** - * - * - * @var string - */ - public $tagsMultiLikeOr = null; - - /** - * - * - * @var string - */ - public $tagsMultiLikeAnd = null; - - /** - * - * - * @var KalturaUserStatus - */ - public $statusEqual = null; - - /** - * - * - * @var string - */ - public $statusIn = null; - - /** - * - * - * @var int - */ - public $createdAtGreaterThanOrEqual = null; - - /** - * - * - * @var int - */ - public $createdAtLessThanOrEqual = null; - - /** - * - * - * @var string - */ - public $firstNameStartsWith = null; - - /** - * - * - * @var string - */ - public $lastNameStartsWith = null; - - /** - * - * - * @var KalturaNullableBoolean - */ - public $isAdminEqual = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaUserFilter extends KalturaUserBaseFilter -{ - /** - * - * - * @var string - */ - public $idOrScreenNameStartsWith = null; - - /** - * - * - * @var string - */ - public $idEqual = null; - - /** - * - * - * @var string - */ - public $idIn = null; - - /** - * - * - * @var KalturaNullableBoolean - */ - public $loginEnabledEqual = null; - - /** - * - * - * @var string - */ - public $roleIdEqual = null; - - /** - * - * - * @var string - */ - public $roleIdsEqual = null; - - /** - * - * - * @var string - */ - public $roleIdsIn = null; - - /** - * - * - * @var string - */ - public $firstNameOrLastNameStartsWith = null; - - /** - * Permission names filter expression - * - * - * @var string - */ - public $permissionNamesMultiLikeOr = null; - - /** - * Permission names filter expression - * - * - * @var string - */ - public $permissionNamesMultiLikeAnd = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaEntryContext extends KalturaContext -{ - /** - * The entry ID in the context of which the playlist should be built - * - * - * @var string - */ - public $entryId = null; - - /** - * Is this a redirected entry followup? - * - * - * @var KalturaNullableBoolean - */ - public $followEntryRedirect = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaEntryContextDataParams extends KalturaAccessControlScope -{ - /** - * Id of the current flavor. - * - * - * @var string - */ - public $flavorAssetId = null; - - /** - * The tags of the flavors that should be used for playback. - * - * - * @var string - */ - public $flavorTags = null; - - /** - * Playback streamer type: RTMP, HTTP, appleHttps, rtsp, sl. - * - * - * @var string - */ - public $streamerType = null; - - /** - * Protocol of the specific media object. - * - * - * @var string - */ - public $mediaProtocol = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaEntryContextDataResult extends KalturaContextDataResult -{ - /** - * - * - * @var bool - */ - public $isSiteRestricted = null; - - /** - * - * - * @var bool - */ - public $isCountryRestricted = null; - - /** - * - * - * @var bool - */ - public $isSessionRestricted = null; - - /** - * - * - * @var bool - */ - public $isIpAddressRestricted = null; - - /** - * - * - * @var bool - */ - public $isUserAgentRestricted = null; - - /** - * - * - * @var int - */ - public $previewLength = null; - - /** - * - * - * @var bool - */ - public $isScheduledNow = null; - - /** - * - * - * @var bool - */ - public $isAdmin = null; - - /** - * http/rtmp/hdnetwork - * - * - * @var string - */ - public $streamerType = null; - - /** - * http/https, rtmp/rtmpe - * - * - * @var string - */ - public $mediaProtocol = null; - - /** - * - * - * @var string - */ - public $storageProfilesXML = null; - - /** - * Array of messages as received from the access control rules that invalidated - * - * - * @var array of KalturaString - */ - public $accessControlMessages; - - /** - * Array of actions as received from the access control rules that invalidated - * - * - * @var array of KalturaRuleAction - */ - public $accessControlActions; - - /** - * Array of allowed flavor assets according to access control limitations and requested tags - * - * - * @var array of KalturaFlavorAsset - */ - public $flavorAssets; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaEntryIdentifier extends KalturaObjectIdentifier -{ - /** - * Identifier of the object - * - * - * @var KalturaEntryIdentifierField - */ - public $identifier = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -abstract class KalturaBooleanField extends KalturaBooleanValue -{ - -} - -/** - * @package Kaltura - * @subpackage Client - */ -abstract class KalturaFileAssetBaseFilter extends KalturaFilter -{ - /** - * - * - * @var int - */ - public $idEqual = null; - - /** - * - * - * @var string - */ - public $idIn = null; - - /** - * - * - * @var int - */ - public $partnerIdEqual = null; - - /** - * - * - * @var KalturaFileAssetObjectType - */ - public $fileAssetObjectTypeEqual = null; - - /** - * - * - * @var string - */ - public $objectIdEqual = null; - - /** - * - * - * @var string - */ - public $objectIdIn = null; - - /** - * - * - * @var int - */ - public $createdAtGreaterThanOrEqual = null; - - /** - * - * - * @var int - */ - public $createdAtLessThanOrEqual = null; - - /** - * - * - * @var int - */ - public $updatedAtGreaterThanOrEqual = null; - - /** - * - * - * @var int - */ - public $updatedAtLessThanOrEqual = null; - - /** - * - * - * @var KalturaFileAssetStatus - */ - public $statusEqual = null; - - /** - * - * - * @var string - */ - public $statusIn = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaFlattenJobData extends KalturaJobData -{ - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaGenericSyndicationFeed extends KalturaBaseSyndicationFeed -{ - /** - * feed description - * - * - * @var string - */ - public $feedDescription = null; - - /** - * feed landing page (i.e publisher website) - * - * - * @var string - */ - public $feedLandingPage = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaGoogleVideoSyndicationFeed extends KalturaBaseSyndicationFeed -{ - /** - * - * - * @var KalturaGoogleSyndicationFeedAdultValues - */ - public $adultContent = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaITunesSyndicationFeed extends KalturaBaseSyndicationFeed -{ - /** - * feed description - * - * - * @var string - */ - public $feedDescription = null; - - /** - * feed language - * - * - * @var string - */ - public $language = null; - - /** - * feed landing page (i.e publisher website) - * - * - * @var string - */ - public $feedLandingPage = null; - - /** - * author/publisher name - * - * - * @var string - */ - public $ownerName = null; - - /** - * publisher email - * - * - * @var string - */ - public $ownerEmail = null; - - /** - * podcast thumbnail - * - * - * @var string - */ - public $feedImageUrl = null; - - /** - * - * - * @var KalturaITunesSyndicationFeedCategories - * @readonly - */ - public $category = null; - - /** - * - * - * @var KalturaITunesSyndicationFeedAdultValues - */ - public $adultContent = null; - - /** - * - * - * @var string - */ - public $feedAuthor = null; - - /** - * true in case you want to enfore the palylist order on the - * - * - * @var KalturaNullableBoolean - */ - public $enforceOrder = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaImportJobData extends KalturaJobData -{ - /** - * - * - * @var string - */ - public $srcFileUrl = null; - - /** - * - * - * @var string - */ - public $destFileLocalPath = null; - - /** - * - * - * @var string - */ - public $flavorAssetId = null; - - /** - * - * - * @var int - */ - public $fileSize = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaIndexAdvancedFilter extends KalturaSearchItem -{ - /** - * - * - * @var int - */ - public $indexIdGreaterThan = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaIndexJobData extends KalturaJobData -{ - /** - * The filter should return the list of objects that need to be reindexed. - * - * - * @var KalturaFilter - */ - public $filter; - - /** - * Indicates the last id that reindexed, used when the batch crached, to re-run from the last crash point. - * - * - * @var int - */ - public $lastIndexId = null; - - /** - * Indicates that the object columns and attributes values should be recalculated before reindexed. - * - * - * @var bool - */ - public $shouldUpdate = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaIpAddressRestriction extends KalturaBaseRestriction -{ - /** - * Ip address restriction type (Allow or deny) - * - * - * @var KalturaIpAddressRestrictionType - */ - public $ipAddressRestrictionType = null; - - /** - * Comma separated list of ip address to allow to deny - * - * - * @var string - */ - public $ipAddressList = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaLimitFlavorsRestriction extends KalturaBaseRestriction -{ - /** - * Limit flavors restriction type (Allow or deny) - * - * - * @var KalturaLimitFlavorsRestrictionType - */ - public $limitFlavorsRestrictionType = null; - - /** - * Comma separated list of flavor params ids to allow to deny - * - * - * @var string - */ - public $flavorParamsIds = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -abstract class KalturaLiveChannelSegmentBaseFilter extends KalturaFilter -{ - /** - * - * - * @var int - */ - public $createdAtGreaterThanOrEqual = null; - - /** - * - * - * @var int - */ - public $createdAtLessThanOrEqual = null; - - /** - * - * - * @var int - */ - public $updatedAtGreaterThanOrEqual = null; - - /** - * - * - * @var int - */ - public $updatedAtLessThanOrEqual = null; - - /** - * - * - * @var KalturaLiveChannelSegmentStatus - */ - public $statusEqual = null; - - /** - * - * - * @var string - */ - public $statusIn = null; - - /** - * - * - * @var string - */ - public $channelIdEqual = null; - - /** - * - * - * @var string - */ - public $channelIdIn = null; - - /** - * - * - * @var float - */ - public $startTimeGreaterThanOrEqual = null; - - /** - * - * - * @var float - */ - public $startTimeLessThanOrEqual = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaMailJobData extends KalturaJobData -{ - /** - * - * - * @var KalturaMailType - */ - public $mailType = null; - - /** - * - * - * @var int - */ - public $mailPriority = null; - - /** - * - * - * @var KalturaMailJobStatus - */ - public $status = null; - - /** - * - * - * @var string - */ - public $recipientName = null; - - /** - * - * - * @var string - */ - public $recipientEmail = null; - - /** - * kuserId - * - * - * @var int - */ - public $recipientId = null; - - /** - * - * - * @var string - */ - public $fromName = null; - - /** - * - * - * @var string - */ - public $fromEmail = null; - - /** - * - * - * @var string - */ - public $bodyParams = null; - - /** - * - * - * @var string - */ - public $subjectParams = null; - - /** - * - * - * @var string - */ - public $templatePath = null; - - /** - * - * - * @var KalturaLanguageCode - */ - public $language = null; - - /** - * - * - * @var int - */ - public $campaignId = null; - - /** - * - * - * @var int - */ - public $minSendDate = null; - - /** - * - * - * @var bool - */ - public $isHtml = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -abstract class KalturaMatchCondition extends KalturaCondition -{ - /** - * - * - * @var array of KalturaStringValue - */ - public $values; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -abstract class KalturaMediaInfoBaseFilter extends KalturaFilter -{ - /** - * - * - * @var string - */ - public $flavorAssetIdEqual = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -abstract class KalturaMediaServerBaseFilter extends KalturaFilter -{ - /** - * - * - * @var int - */ - public $createdAtGreaterThanOrEqual = null; - - /** - * - * - * @var int - */ - public $createdAtLessThanOrEqual = null; - - /** - * - * - * @var int - */ - public $updatedAtGreaterThanOrEqual = null; - - /** - * - * - * @var int - */ - public $updatedAtLessThanOrEqual = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaMoveCategoryEntriesJobData extends KalturaJobData -{ - /** - * Source category id - * - * - * @var int - */ - public $srcCategoryId = null; - - /** - * Destination category id - * - * - * @var int - */ - public $destCategoryId = null; - - /** - * Saves the last category id that its entries moved completely - * In case of crash the batch will restart from that point - * - * - * @var int - */ - public $lastMovedCategoryId = null; - - /** - * Saves the last page index of the child categories filter pager - * In case of crash the batch will restart from that point - * - * - * @var int - */ - public $lastMovedCategoryPageIndex = null; - - /** - * Saves the last page index of the category entries filter pager - * In case of crash the batch will restart from that point - * - * - * @var int - */ - public $lastMovedCategoryEntryPageIndex = null; - - /** - * All entries from all child categories will be moved as well - * - * - * @var bool - */ - public $moveFromChildren = null; - - /** - * Entries won't be deleted from the source entry - * - * - * @var bool - */ - public $copyOnly = null; - - /** - * Destination categories fallback ids - * - * - * @var string - */ - public $destCategoryFullIds = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaNotificationJobData extends KalturaJobData -{ - /** - * - * - * @var string - */ - public $userId = null; - - /** - * - * - * @var KalturaNotificationType - */ - public $type = null; - - /** - * - * - * @var string - */ - public $typeAsString = null; - - /** - * - * - * @var string - */ - public $objectId = null; - - /** - * - * - * @var KalturaNotificationStatus - */ - public $status = null; - - /** - * - * - * @var string - */ - public $data = null; - - /** - * - * - * @var int - */ - public $numberOfAttempts = null; - - /** - * - * - * @var string - */ - public $notificationResult = null; - - /** - * - * - * @var KalturaNotificationObjectType - */ - public $objType = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -abstract class KalturaPartnerBaseFilter extends KalturaFilter -{ - /** - * - * - * @var int - */ - public $idEqual = null; - - /** - * - * - * @var string - */ - public $idIn = null; - - /** - * - * - * @var string - */ - public $idNotIn = null; - - /** - * - * - * @var string - */ - public $nameLike = null; - - /** - * - * - * @var string - */ - public $nameMultiLikeOr = null; - - /** - * - * - * @var string - */ - public $nameMultiLikeAnd = null; - - /** - * - * - * @var string - */ - public $nameEqual = null; - - /** - * - * - * @var KalturaPartnerStatus - */ - public $statusEqual = null; - - /** - * - * - * @var string - */ - public $statusIn = null; - - /** - * - * - * @var int - */ - public $partnerPackageEqual = null; - - /** - * - * - * @var int - */ - public $partnerPackageGreaterThanOrEqual = null; - - /** - * - * - * @var int - */ - public $partnerPackageLessThanOrEqual = null; - - /** - * - * - * @var KalturaPartnerGroupType - */ - public $partnerGroupTypeEqual = null; - - /** - * - * - * @var string - */ - public $partnerNameDescriptionWebsiteAdminNameAdminEmailLike = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -abstract class KalturaPermissionBaseFilter extends KalturaFilter -{ - /** - * - * - * @var int - */ - public $idEqual = null; - - /** - * - * - * @var string - */ - public $idIn = null; - - /** - * - * - * @var KalturaPermissionType - */ - public $typeEqual = null; - - /** - * - * - * @var string - */ - public $typeIn = null; - - /** - * - * - * @var string - */ - public $nameEqual = null; - - /** - * - * - * @var string - */ - public $nameIn = null; - - /** - * - * - * @var string - */ - public $friendlyNameLike = null; - - /** - * - * - * @var string - */ - public $descriptionLike = null; - - /** - * - * - * @var KalturaPermissionStatus - */ - public $statusEqual = null; - - /** - * - * - * @var string - */ - public $statusIn = null; - - /** - * - * - * @var int - */ - public $partnerIdEqual = null; - - /** - * - * - * @var string - */ - public $partnerIdIn = null; - - /** - * - * - * @var string - */ - public $dependsOnPermissionNamesMultiLikeOr = null; - - /** - * - * - * @var string - */ - public $dependsOnPermissionNamesMultiLikeAnd = null; - - /** - * - * - * @var string - */ - public $tagsMultiLikeOr = null; - - /** - * - * - * @var string - */ - public $tagsMultiLikeAnd = null; - - /** - * - * - * @var int - */ - public $createdAtGreaterThanOrEqual = null; - - /** - * - * - * @var int - */ - public $createdAtLessThanOrEqual = null; - - /** - * - * - * @var int - */ - public $updatedAtGreaterThanOrEqual = null; - - /** - * - * - * @var int - */ - public $updatedAtLessThanOrEqual = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -abstract class KalturaPermissionItemBaseFilter extends KalturaFilter -{ - /** - * - * - * @var int - */ - public $idEqual = null; - - /** - * - * - * @var string - */ - public $idIn = null; - - /** - * - * - * @var KalturaPermissionItemType - */ - public $typeEqual = null; - - /** - * - * - * @var string - */ - public $typeIn = null; - - /** - * - * - * @var int - */ - public $partnerIdEqual = null; - - /** - * - * - * @var string - */ - public $partnerIdIn = null; - - /** - * - * - * @var string - */ - public $tagsMultiLikeOr = null; - - /** - * - * - * @var string - */ - public $tagsMultiLikeAnd = null; - - /** - * - * - * @var int - */ - public $createdAtGreaterThanOrEqual = null; - - /** - * - * - * @var int - */ - public $createdAtLessThanOrEqual = null; - - /** - * - * - * @var int - */ - public $updatedAtGreaterThanOrEqual = null; - - /** - * - * - * @var int - */ - public $updatedAtLessThanOrEqual = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaProvisionJobData extends KalturaJobData -{ - /** - * - * - * @var string - */ - public $streamID = null; - - /** - * - * - * @var string - */ - public $backupStreamID = null; - - /** - * - * - * @var string - */ - public $rtmp = null; - - /** - * - * - * @var string - */ - public $encoderIP = null; - - /** - * - * - * @var string - */ - public $backupEncoderIP = null; - - /** - * - * - * @var string - */ - public $encoderPassword = null; - - /** - * - * - * @var string - */ - public $encoderUsername = null; - - /** - * - * - * @var int - */ - public $endDate = null; - - /** - * - * - * @var string - */ - public $returnVal = null; - - /** - * - * - * @var int - */ - public $mediaType = null; - - /** - * - * - * @var string - */ - public $primaryBroadcastingUrl = null; - - /** - * - * - * @var string - */ - public $secondaryBroadcastingUrl = null; - - /** - * - * - * @var string - */ - public $streamName = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -abstract class KalturaReportBaseFilter extends KalturaFilter -{ - /** - * - * - * @var int - */ - public $idEqual = null; - - /** - * - * - * @var string - */ - public $idIn = null; - - /** - * - * - * @var int - */ - public $partnerIdEqual = null; - - /** - * - * - * @var string - */ - public $partnerIdIn = null; - - /** - * - * - * @var string - */ - public $systemNameEqual = null; - - /** - * - * - * @var string - */ - public $systemNameIn = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaReportInputFilter extends KalturaReportInputBaseFilter -{ - /** - * Search keywords to filter objects - * - * - * @var string - */ - public $keywords = null; - - /** - * Search keywords in onjects tags - * - * - * @var bool - */ - public $searchInTags = null; - - /** - * Search keywords in onjects admin tags - * - * - * @var bool - */ - public $searchInAdminTags = null; - - /** - * Search onjects in specified categories - * - * - * @var string - */ - public $categories = null; - - /** - * Time zone offset in minutes - * - * - * @var int - */ - public $timeZoneOffset = null; - - /** - * Aggregated results according to interval - * - * - * @var KalturaReportInterval - */ - public $interval = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaSearchCondition extends KalturaSearchItem -{ - /** - * - * - * @var string - */ - public $field = null; - - /** - * - * - * @var string - */ - public $value = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaSearchOperator extends KalturaSearchItem -{ - /** - * - * - * @var KalturaSearchOperatorType - */ - public $type = null; - - /** - * - * - * @var array of KalturaSearchItem - */ - public $items; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaSessionRestriction extends KalturaBaseRestriction -{ - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaSiteRestriction extends KalturaBaseRestriction -{ - /** - * The site restriction type (allow or deny) - * - * - * @var KalturaSiteRestrictionType - */ - public $siteRestrictionType = null; - - /** - * Comma separated list of sites (domains) to allow or deny - * - * - * @var string - */ - public $siteList = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaStorageAddAction extends KalturaRuleAction -{ - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaStorageJobData extends KalturaJobData -{ - /** - * - * - * @var string - */ - public $serverUrl = null; - - /** - * - * - * @var string - */ - public $serverUsername = null; - - /** - * - * - * @var string - */ - public $serverPassword = null; - - /** - * - * - * @var bool - */ - public $ftpPassiveMode = null; - - /** - * - * - * @var string - */ - public $srcFileSyncLocalPath = null; - - /** - * - * - * @var string - */ - public $srcFileSyncId = null; - - /** - * - * - * @var string - */ - public $destFileSyncStoredPath = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -abstract class KalturaStorageProfileBaseFilter extends KalturaFilter -{ - /** - * - * - * @var int - */ - public $idEqual = null; - - /** - * - * - * @var string - */ - public $idIn = null; - - /** - * - * - * @var int - */ - public $createdAtGreaterThanOrEqual = null; - - /** - * - * - * @var int - */ - public $createdAtLessThanOrEqual = null; - - /** - * - * - * @var int - */ - public $updatedAtGreaterThanOrEqual = null; - - /** - * - * - * @var int - */ - public $updatedAtLessThanOrEqual = null; - - /** - * - * - * @var int - */ - public $partnerIdEqual = null; - - /** - * - * - * @var string - */ - public $partnerIdIn = null; - - /** - * - * - * @var string - */ - public $systemNameEqual = null; - - /** - * - * - * @var string - */ - public $systemNameIn = null; - - /** - * - * - * @var KalturaStorageProfileStatus - */ - public $statusEqual = null; - - /** - * - * - * @var string - */ - public $statusIn = null; - - /** - * - * - * @var KalturaStorageProfileProtocol - */ - public $protocolEqual = null; - - /** - * - * - * @var string - */ - public $protocolIn = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaTubeMogulSyndicationFeed extends KalturaBaseSyndicationFeed -{ - /** - * - * - * @var KalturaTubeMogulSyndicationFeedCategories - * @readonly - */ - public $category = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -abstract class KalturaUiConfBaseFilter extends KalturaFilter -{ - /** - * - * - * @var int - */ - public $idEqual = null; - - /** - * - * - * @var string - */ - public $idIn = null; - - /** - * - * - * @var string - */ - public $nameLike = null; - - /** - * - * - * @var int - */ - public $partnerIdEqual = null; - - /** - * - * - * @var string - */ - public $partnerIdIn = null; - - /** - * - * - * @var KalturaUiConfObjType - */ - public $objTypeEqual = null; - - /** - * - * - * @var string - */ - public $objTypeIn = null; - - /** - * - * - * @var string - */ - public $tagsMultiLikeOr = null; - - /** - * - * - * @var string - */ - public $tagsMultiLikeAnd = null; - - /** - * - * - * @var int - */ - public $createdAtGreaterThanOrEqual = null; - - /** - * - * - * @var int - */ - public $createdAtLessThanOrEqual = null; - - /** - * - * - * @var int - */ - public $updatedAtGreaterThanOrEqual = null; - - /** - * - * - * @var int - */ - public $updatedAtLessThanOrEqual = null; - - /** - * - * - * @var KalturaUiConfCreationMode - */ - public $creationModeEqual = null; - - /** - * - * - * @var string - */ - public $creationModeIn = null; - - /** - * - * - * @var string - */ - public $versionEqual = null; - - /** - * - * - * @var string - */ - public $versionMultiLikeOr = null; - - /** - * - * - * @var string - */ - public $versionMultiLikeAnd = null; - - /** - * - * - * @var string - */ - public $partnerTagsMultiLikeOr = null; - - /** - * - * - * @var string - */ - public $partnerTagsMultiLikeAnd = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -abstract class KalturaUploadTokenBaseFilter extends KalturaFilter -{ - /** - * - * - * @var string - */ - public $idEqual = null; - - /** - * - * - * @var string - */ - public $idIn = null; - - /** - * - * - * @var string - */ - public $userIdEqual = null; - - /** - * - * - * @var KalturaUploadTokenStatus - */ - public $statusEqual = null; - - /** - * - * - * @var string - */ - public $statusIn = null; - - /** - * - * - * @var string - */ - public $fileNameEqual = null; - - /** - * - * - * @var float - */ - public $fileSizeEqual = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaUserAgentRestriction extends KalturaBaseRestriction -{ - /** - * User agent restriction type (Allow or deny) - * - * - * @var KalturaUserAgentRestrictionType - */ - public $userAgentRestrictionType = null; - - /** - * A comma seperated list of user agent regular expressions - * - * - * @var string - */ - public $userAgentRegexList = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -abstract class KalturaUserLoginDataBaseFilter extends KalturaFilter -{ - /** - * - * - * @var string - */ - public $loginEmailEqual = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -abstract class KalturaUserRoleBaseFilter extends KalturaFilter -{ - /** - * - * - * @var int - */ - public $idEqual = null; - - /** - * - * - * @var string - */ - public $idIn = null; - - /** - * - * - * @var string - */ - public $nameEqual = null; - - /** - * - * - * @var string - */ - public $nameIn = null; - - /** - * - * - * @var string - */ - public $systemNameEqual = null; - - /** - * - * - * @var string - */ - public $systemNameIn = null; - - /** - * - * - * @var string - */ - public $descriptionLike = null; - - /** - * - * - * @var KalturaUserRoleStatus - */ - public $statusEqual = null; - - /** - * - * - * @var string - */ - public $statusIn = null; - - /** - * - * - * @var int - */ - public $partnerIdEqual = null; - - /** - * - * - * @var string - */ - public $partnerIdIn = null; - - /** - * - * - * @var string - */ - public $tagsMultiLikeOr = null; - - /** - * - * - * @var string - */ - public $tagsMultiLikeAnd = null; - - /** - * - * - * @var int - */ - public $createdAtGreaterThanOrEqual = null; - - /** - * - * - * @var int - */ - public $createdAtLessThanOrEqual = null; - - /** - * - * - * @var int - */ - public $updatedAtGreaterThanOrEqual = null; - - /** - * - * - * @var int - */ - public $updatedAtLessThanOrEqual = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -abstract class KalturaWidgetBaseFilter extends KalturaFilter -{ - /** - * - * - * @var string - */ - public $idEqual = null; - - /** - * - * - * @var string - */ - public $idIn = null; - - /** - * - * - * @var string - */ - public $sourceWidgetIdEqual = null; - - /** - * - * - * @var string - */ - public $rootWidgetIdEqual = null; - - /** - * - * - * @var int - */ - public $partnerIdEqual = null; - - /** - * - * - * @var string - */ - public $entryIdEqual = null; - - /** - * - * - * @var int - */ - public $uiConfIdEqual = null; - - /** - * - * - * @var int - */ - public $createdAtGreaterThanOrEqual = null; - - /** - * - * - * @var int - */ - public $createdAtLessThanOrEqual = null; - - /** - * - * - * @var int - */ - public $updatedAtGreaterThanOrEqual = null; - - /** - * - * - * @var int - */ - public $updatedAtLessThanOrEqual = null; - - /** - * - * - * @var string - */ - public $partnerDataLike = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaYahooSyndicationFeed extends KalturaBaseSyndicationFeed -{ - /** - * - * - * @var KalturaYahooSyndicationFeedCategories - * @readonly - */ - public $category = null; - - /** - * - * - * @var KalturaYahooSyndicationFeedAdultValues - */ - public $adultContent = null; - - /** - * feed description - * - * - * @var string - */ - public $feedDescription = null; - - /** - * feed landing page (i.e publisher website) - * - * - * @var string - */ - public $feedLandingPage = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaAccessControlFilter extends KalturaAccessControlBaseFilter -{ - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaAccessControlProfileFilter extends KalturaAccessControlProfileBaseFilter -{ - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaAkamaiProvisionJobData extends KalturaProvisionJobData -{ - /** - * - * - * @var string - */ - public $wsdlUsername = null; - - /** - * - * - * @var string - */ - public $wsdlPassword = null; - - /** - * - * - * @var string - */ - public $cpcode = null; - - /** - * - * - * @var string - */ - public $emailId = null; - - /** - * - * - * @var string - */ - public $primaryContact = null; - - /** - * - * - * @var string - */ - public $secondaryContact = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaAkamaiUniversalProvisionJobData extends KalturaProvisionJobData -{ - /** - * - * - * @var int - */ - public $streamId = null; - - /** - * - * - * @var string - */ - public $systemUserName = null; - - /** - * - * - * @var string - */ - public $systemPassword = null; - - /** - * - * - * @var string - */ - public $domainName = null; - - /** - * - * - * @var KalturaDVRStatus - */ - public $dvrEnabled = null; - - /** - * - * - * @var int - */ - public $dvrWindow = null; - - /** - * - * - * @var string - */ - public $primaryContact = null; - - /** - * - * - * @var string - */ - public $secondaryContact = null; - - /** - * - * - * @var KalturaAkamaiUniversalStreamType - */ - public $streamType = null; - - /** - * - * - * @var string - */ - public $notificationEmail = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaAssetFilter extends KalturaAssetBaseFilter -{ - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaAssetParamsFilter extends KalturaAssetParamsBaseFilter -{ - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaAssetResource extends KalturaContentResource -{ - /** - * ID of the source asset - * - * - * @var string - */ - public $assetId = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaBaseSyndicationFeedFilter extends KalturaBaseSyndicationFeedBaseFilter -{ - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaBatchJobFilter extends KalturaBatchJobBaseFilter -{ - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaBulkUploadFilter extends KalturaBulkUploadBaseFilter -{ - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaCategoryEntryFilter extends KalturaCategoryEntryBaseFilter -{ - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaCategoryFilter extends KalturaCategoryBaseFilter -{ - /** - * - * - * @var string - */ - public $freeText = null; - - /** - * - * - * @var string - */ - public $membersIn = null; - - /** - * - * - * @var string - */ - public $nameOrReferenceIdStartsWith = null; - - /** - * - * - * @var string - */ - public $managerEqual = null; - - /** - * - * - * @var string - */ - public $memberEqual = null; - - /** - * - * - * @var string - */ - public $fullNameStartsWithIn = null; - - /** - * not includes the category itself (only sub categories) - * - * - * @var string - */ - public $ancestorIdIn = null; - - /** - * - * - * @var string - */ - public $idOrInheritedParentIdIn = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaControlPanelCommandFilter extends KalturaControlPanelCommandBaseFilter -{ - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaConversionProfileFilter extends KalturaConversionProfileBaseFilter -{ - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaConversionProfileAssetParamsFilter extends KalturaConversionProfileAssetParamsBaseFilter -{ - /** - * - * - * @var KalturaConversionProfileFilter - */ - public $conversionProfileIdFilter; - - /** - * - * - * @var KalturaAssetParamsFilter - */ - public $assetParamsIdFilter; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaConvertCollectionJobData extends KalturaConvartableJobData -{ - /** - * - * - * @var string - */ - public $destDirLocalPath = null; - - /** - * - * - * @var string - */ - public $destDirRemoteUrl = null; - - /** - * - * - * @var string - */ - public $destFileName = null; - - /** - * - * - * @var string - */ - public $inputXmlLocalPath = null; - - /** - * - * - * @var string - */ - public $inputXmlRemoteUrl = null; - - /** - * - * - * @var string - */ - public $commandLinesStr = null; - - /** - * - * - * @var array of KalturaConvertCollectionFlavorData - */ - public $flavors; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaConvertJobData extends KalturaConvartableJobData -{ - /** - * - * - * @var string - */ - public $destFileSyncLocalPath = null; - - /** - * - * - * @var string - */ - public $destFileSyncRemoteUrl = null; - - /** - * - * - * @var string - */ - public $logFileSyncLocalPath = null; - - /** - * - * - * @var string - */ - public $logFileSyncRemoteUrl = null; - - /** - * - * - * @var string - */ - public $flavorAssetId = null; - - /** - * - * - * @var string - */ - public $remoteMediaId = null; - - /** - * - * - * @var string - */ - public $customData = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaCountryCondition extends KalturaMatchCondition -{ - /** - * The ip geo coder engine to be used - * - * - * @var KalturaGeoCoderType - */ - public $geoCoderType = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaEndUserReportInputFilter extends KalturaReportInputFilter -{ - /** - * - * - * @var string - */ - public $application = null; - - /** - * - * - * @var string - */ - public $userIds = null; - - /** - * - * - * @var string - */ - public $playbackContext = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaEntryResource extends KalturaContentResource -{ - /** - * ID of the source entry - * - * - * @var string - */ - public $entryId = null; - - /** - * ID of the source flavor params, set to null to use the source flavor - * - * - * @var int - */ - public $flavorParamsId = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaExtractMediaJobData extends KalturaConvartableJobData -{ - /** - * - * - * @var string - */ - public $flavorAssetId = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -abstract class KalturaIntegerField extends KalturaIntegerValue -{ - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaFieldCompareCondition extends KalturaCompareCondition -{ - /** - * Field to evaluate - * - * - * @var KalturaIntegerField - */ - public $field; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -abstract class KalturaStringField extends KalturaStringValue -{ - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaFieldMatchCondition extends KalturaMatchCondition -{ - /** - * Field to evaluate - * - * - * @var KalturaStringField - */ - public $field; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaFileSyncResource extends KalturaContentResource -{ - /** - * The object type of the file sync object - * - * - * @var int - */ - public $fileSyncObjectType = null; - - /** - * The object sub-type of the file sync object - * - * - * @var int - */ - public $objectSubType = null; - - /** - * The object id of the file sync object - * - * - * @var string - */ - public $objectId = null; - - /** - * The version of the file sync object - * - * - * @var string - */ - public $version = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaGenericXsltSyndicationFeed extends KalturaGenericSyndicationFeed -{ - /** - * - * - * @var string - */ - public $xslt = null; - - /** - * - * - * @var array of KalturaExtendingItemMrssParameter - */ - public $itemXpathsToExtend; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaIpAddressCondition extends KalturaMatchCondition -{ - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaLiveAsset extends KalturaFlavorAsset -{ - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaLiveChannelSegmentFilter extends KalturaLiveChannelSegmentBaseFilter -{ - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaLiveParams extends KalturaFlavorParams -{ - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaMediaFlavorParams extends KalturaFlavorParams -{ - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaMediaInfoFilter extends KalturaMediaInfoBaseFilter -{ - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaMediaServerFilter extends KalturaMediaServerBaseFilter -{ - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaOperationResource extends KalturaContentResource -{ - /** - * Only KalturaEntryResource and KalturaAssetResource are supported - * - * - * @var KalturaContentResource - */ - public $resource; - - /** - * - * - * @var array of KalturaOperationAttributes - */ - public $operationAttributes; - - /** - * ID of alternative asset params to be used instead of the system default flavor params - * - * - * @var int - */ - public $assetParamsId = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaPartnerFilter extends KalturaPartnerBaseFilter -{ - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaPermissionFilter extends KalturaPermissionBaseFilter -{ - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaPermissionItemFilter extends KalturaPermissionItemBaseFilter -{ - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaPostConvertJobData extends KalturaConvartableJobData -{ - /** - * - * - * @var string - */ - public $flavorAssetId = null; - - /** - * Indicates if a thumbnail should be created - * - * - * @var bool - */ - public $createThumb = null; - - /** - * The path of the created thumbnail - * - * - * @var string - */ - public $thumbPath = null; - - /** - * The position of the thumbnail in the media file - * - * - * @var int - */ - public $thumbOffset = null; - - /** - * The height of the movie, will be used to comapare if this thumbnail is the best we can have - * - * - * @var int - */ - public $thumbHeight = null; - - /** - * The bit rate of the movie, will be used to comapare if this thumbnail is the best we can have - * - * - * @var int - */ - public $thumbBitrate = null; - - /** - * - * - * @var string - */ - public $customData = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaPreviewRestriction extends KalturaSessionRestriction -{ - /** - * The preview restriction length - * - * - * @var int - */ - public $previewLength = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -abstract class KalturaRegexCondition extends KalturaMatchCondition -{ - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaRemoteStorageResources extends KalturaContentResource -{ - /** - * Array of remote stoage resources - * - * - * @var array of KalturaRemoteStorageResource - */ - public $resources; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaReportFilter extends KalturaReportBaseFilter -{ - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaSearchComparableCondition extends KalturaSearchCondition -{ - /** - * - * - * @var KalturaSearchConditionComparison - */ - public $comparison = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaSiteCondition extends KalturaMatchCondition -{ - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaSshImportJobData extends KalturaImportJobData -{ - /** - * - * - * @var string - */ - public $privateKey = null; - - /** - * - * - * @var string - */ - public $publicKey = null; - - /** - * - * - * @var string - */ - public $passPhrase = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaStorageDeleteJobData extends KalturaStorageJobData -{ - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaStorageExportJobData extends KalturaStorageJobData -{ - /** - * - * - * @var bool - */ - public $force = null; - - /** - * - * - * @var bool - */ - public $createLink = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaStorageProfileFilter extends KalturaStorageProfileBaseFilter -{ - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaStringResource extends KalturaContentResource -{ - /** - * Textual content - * - * - * @var string - */ - public $content = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaUiConfFilter extends KalturaUiConfBaseFilter -{ - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaUploadTokenFilter extends KalturaUploadTokenBaseFilter -{ - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaUserLoginDataFilter extends KalturaUserLoginDataBaseFilter -{ - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaUserRoleFilter extends KalturaUserRoleBaseFilter -{ - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaWidgetFilter extends KalturaWidgetBaseFilter -{ - -} - -/** - * @package Kaltura - * @subpackage Client - */ -abstract class KalturaAdminUserBaseFilter extends KalturaUserFilter -{ - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaAmazonS3StorageExportJobData extends KalturaStorageExportJobData -{ - /** - * - * - * @var KalturaAmazonS3StorageProfileFilesPermissionLevel - */ - public $filesPermissionInS3 = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -abstract class KalturaAmazonS3StorageProfileBaseFilter extends KalturaStorageProfileFilter -{ - -} - -/** - * @package Kaltura - * @subpackage Client - */ -abstract class KalturaApiActionPermissionItemBaseFilter extends KalturaPermissionItemFilter -{ - -} - -/** - * @package Kaltura - * @subpackage Client - */ -abstract class KalturaApiParameterPermissionItemBaseFilter extends KalturaPermissionItemFilter -{ - -} - -/** - * @package Kaltura - * @subpackage Client - */ -abstract class KalturaAssetParamsOutputBaseFilter extends KalturaAssetParamsFilter -{ - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaBatchJobFilterExt extends KalturaBatchJobFilter -{ - /** - * - * - * @var string - */ - public $jobTypeAndSubTypeIn = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaCountryContextField extends KalturaStringField -{ - /** - * The ip geo coder engine to be used - * - * - * @var KalturaGeoCoderType - */ - public $geoCoderType = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -abstract class KalturaDataEntryBaseFilter extends KalturaBaseEntryFilter -{ - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaEvalBooleanField extends KalturaBooleanField -{ - /** - * PHP code - * - * - * @var string - */ - public $code = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaEvalStringField extends KalturaStringField -{ - /** - * PHP code - * - * - * @var string - */ - public $code = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -abstract class KalturaFlavorAssetBaseFilter extends KalturaAssetFilter -{ - /** - * - * - * @var int - */ - public $flavorParamsIdEqual = null; - - /** - * - * - * @var string - */ - public $flavorParamsIdIn = null; - - /** - * - * - * @var KalturaFlavorAssetStatus - */ - public $statusEqual = null; - - /** - * - * - * @var string - */ - public $statusIn = null; - - /** - * - * - * @var string - */ - public $statusNotIn = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -abstract class KalturaFlavorParamsBaseFilter extends KalturaAssetParamsFilter -{ - /** - * - * - * @var KalturaContainerFormat - */ - public $formatEqual = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -abstract class KalturaGenericSyndicationFeedBaseFilter extends KalturaBaseSyndicationFeedFilter -{ - -} - -/** - * @package Kaltura - * @subpackage Client - */ -abstract class KalturaGoogleVideoSyndicationFeedBaseFilter extends KalturaBaseSyndicationFeedFilter -{ - -} - -/** - * @package Kaltura - * @subpackage Client - */ -abstract class KalturaITunesSyndicationFeedBaseFilter extends KalturaBaseSyndicationFeedFilter -{ - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaIpAddressContextField extends KalturaStringField -{ - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaMediaFlavorParamsOutput extends KalturaFlavorParamsOutput -{ - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaObjectIdField extends KalturaStringField -{ - -} - -/** - * @package Kaltura - * @subpackage Client - */ -abstract class KalturaPlaylistBaseFilter extends KalturaBaseEntryFilter -{ - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaServerFileResource extends KalturaDataCenterContentResource -{ - /** - * Full path to the local file - * - * - * @var string - */ - public $localFilePath = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaSshUrlResource extends KalturaUrlResource -{ - /** - * SSH private key - * - * - * @var string - */ - public $privateKey = null; - - /** - * SSH public key - * - * - * @var string - */ - public $publicKey = null; - - /** - * Passphrase for SSH keys - * - * - * @var string - */ - public $keyPassphrase = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -abstract class KalturaThumbAssetBaseFilter extends KalturaAssetFilter -{ - /** - * - * - * @var int - */ - public $thumbParamsIdEqual = null; - - /** - * - * - * @var string - */ - public $thumbParamsIdIn = null; - - /** - * - * - * @var KalturaThumbAssetStatus - */ - public $statusEqual = null; - - /** - * - * - * @var string - */ - public $statusIn = null; - - /** - * - * - * @var string - */ - public $statusNotIn = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -abstract class KalturaThumbParamsBaseFilter extends KalturaAssetParamsFilter -{ - /** - * - * - * @var KalturaContainerFormat - */ - public $formatEqual = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaTimeContextField extends KalturaIntegerField -{ - /** - * Time offset in seconds since current time - * - * - * @var int - */ - public $offset = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -abstract class KalturaTubeMogulSyndicationFeedBaseFilter extends KalturaBaseSyndicationFeedFilter -{ - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaUploadedFileTokenResource extends KalturaDataCenterContentResource -{ - /** - * Token that returned from upload.upload action or uploadToken.add action. - * - * - * @var string - */ - public $token = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaUserAgentCondition extends KalturaRegexCondition -{ - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaUserAgentContextField extends KalturaStringField -{ - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaUserEmailContextField extends KalturaStringField -{ - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaWebcamTokenResource extends KalturaDataCenterContentResource -{ - /** - * Token that returned from media server such as FMS or red5. - * - * - * @var string - */ - public $token = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -abstract class KalturaYahooSyndicationFeedBaseFilter extends KalturaBaseSyndicationFeedFilter -{ - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaAdminUserFilter extends KalturaAdminUserBaseFilter -{ - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaAmazonS3StorageProfileFilter extends KalturaAmazonS3StorageProfileBaseFilter -{ - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaApiActionPermissionItemFilter extends KalturaApiActionPermissionItemBaseFilter -{ - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaApiParameterPermissionItemFilter extends KalturaApiParameterPermissionItemBaseFilter -{ - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaAssetParamsOutputFilter extends KalturaAssetParamsOutputBaseFilter -{ - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaDataEntryFilter extends KalturaDataEntryBaseFilter -{ - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaFlavorAssetFilter extends KalturaFlavorAssetBaseFilter -{ - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaFlavorParamsFilter extends KalturaFlavorParamsBaseFilter -{ - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaGenericSyndicationFeedFilter extends KalturaGenericSyndicationFeedBaseFilter -{ - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaGoogleVideoSyndicationFeedFilter extends KalturaGoogleVideoSyndicationFeedBaseFilter -{ - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaITunesSyndicationFeedFilter extends KalturaITunesSyndicationFeedBaseFilter -{ - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaPlaylistFilter extends KalturaPlaylistBaseFilter -{ - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaThumbAssetFilter extends KalturaThumbAssetBaseFilter -{ - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaThumbParamsFilter extends KalturaThumbParamsBaseFilter -{ - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaTubeMogulSyndicationFeedFilter extends KalturaTubeMogulSyndicationFeedBaseFilter -{ - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaYahooSyndicationFeedFilter extends KalturaYahooSyndicationFeedBaseFilter -{ - -} - -/** - * @package Kaltura - * @subpackage Client - */ -abstract class KalturaFlavorParamsOutputBaseFilter extends KalturaFlavorParamsFilter -{ - /** - * - * - * @var int - */ - public $flavorParamsIdEqual = null; - - /** - * - * - * @var string - */ - public $flavorParamsVersionEqual = null; - - /** - * - * - * @var string - */ - public $flavorAssetIdEqual = null; - - /** - * - * - * @var string - */ - public $flavorAssetVersionEqual = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -abstract class KalturaGenericXsltSyndicationFeedBaseFilter extends KalturaGenericSyndicationFeedFilter -{ - -} - -/** - * @package Kaltura - * @subpackage Client - */ -abstract class KalturaLiveAssetBaseFilter extends KalturaFlavorAssetFilter -{ - -} - -/** - * @package Kaltura - * @subpackage Client - */ -abstract class KalturaLiveParamsBaseFilter extends KalturaFlavorParamsFilter -{ - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaLiveStreamAdminEntry extends KalturaLiveStreamEntry -{ - -} - -/** - * @package Kaltura - * @subpackage Client - */ -abstract class KalturaMediaFlavorParamsBaseFilter extends KalturaFlavorParamsFilter -{ - -} - -/** - * @package Kaltura - * @subpackage Client - */ -abstract class KalturaMixEntryBaseFilter extends KalturaPlayableEntryFilter -{ - -} - -/** - * @package Kaltura - * @subpackage Client - */ -abstract class KalturaThumbParamsOutputBaseFilter extends KalturaThumbParamsFilter -{ - /** - * - * - * @var int - */ - public $thumbParamsIdEqual = null; - - /** - * - * - * @var string - */ - public $thumbParamsVersionEqual = null; - - /** - * - * - * @var string - */ - public $thumbAssetIdEqual = null; - - /** - * - * - * @var string - */ - public $thumbAssetVersionEqual = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaFlavorParamsOutputFilter extends KalturaFlavorParamsOutputBaseFilter -{ - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaGenericXsltSyndicationFeedFilter extends KalturaGenericXsltSyndicationFeedBaseFilter -{ - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaLiveAssetFilter extends KalturaLiveAssetBaseFilter -{ - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaLiveParamsFilter extends KalturaLiveParamsBaseFilter -{ - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaMediaFlavorParamsFilter extends KalturaMediaFlavorParamsBaseFilter -{ - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaMixEntryFilter extends KalturaMixEntryBaseFilter -{ - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaThumbParamsOutputFilter extends KalturaThumbParamsOutputBaseFilter -{ - -} - -/** - * @package Kaltura - * @subpackage Client - */ -abstract class KalturaLiveEntryBaseFilter extends KalturaMediaEntryFilter -{ - -} - -/** - * @package Kaltura - * @subpackage Client - */ -abstract class KalturaMediaFlavorParamsOutputBaseFilter extends KalturaFlavorParamsOutputFilter -{ - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaLiveEntryFilter extends KalturaLiveEntryBaseFilter -{ - /** - * - * - * @var KalturaNullableBoolean - */ - public $isLive = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaMediaFlavorParamsOutputFilter extends KalturaMediaFlavorParamsOutputBaseFilter -{ - -} - -/** - * @package Kaltura - * @subpackage Client - */ -abstract class KalturaLiveChannelBaseFilter extends KalturaLiveEntryFilter -{ - -} - -/** - * @package Kaltura - * @subpackage Client - */ -abstract class KalturaLiveStreamEntryBaseFilter extends KalturaLiveEntryFilter -{ - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaLiveChannelFilter extends KalturaLiveChannelBaseFilter -{ - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaLiveStreamEntryFilter extends KalturaLiveStreamEntryBaseFilter -{ - -} - -/** - * @package Kaltura - * @subpackage Client - */ -abstract class KalturaLiveStreamAdminEntryBaseFilter extends KalturaLiveStreamEntryFilter -{ - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaLiveStreamAdminEntryFilter extends KalturaLiveStreamAdminEntryBaseFilter -{ - -} - diff --git a/local/kaltura/API/TestCode/DemoVideo.flv b/local/kaltura/API/TestCode/DemoVideo.flv deleted file mode 100644 index 5e0c8341d21b2ef6bdf406eb4cf7c0d330baf2c0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 512919 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 literal 0 HcmV?d00001 diff --git a/local/kaltura/API/TestCode/KalturaTestConfiguration.php b/local/kaltura/API/TestCode/KalturaTestConfiguration.php new file mode 100644 index 0000000000000..d11930208dd85 --- /dev/null +++ b/local/kaltura/API/TestCode/KalturaTestConfiguration.php @@ -0,0 +1,36 @@ +. +// +// @ignore +// =================================================================================================== +class KalturaTestConfiguration +{ + const PARTNER_ID = 54321; + const SECRET = "YOUR_USER_SECRET"; + const ADMIN_SECRET = "YOUR_ADMIN_SECRET"; + const SERVICE_URL = "http://www.kaltura.com"; + const UPLOAD_FILE = "DemoVideo.flv"; +} diff --git a/local/kaltura/API/TestCode/TestMain.php b/local/kaltura/API/TestCode/TestMain.php new file mode 100644 index 0000000000000..ea667b80325ac --- /dev/null +++ b/local/kaltura/API/TestCode/TestMain.php @@ -0,0 +1,137 @@ +. +// +// @ignore +// =================================================================================================== +require_once(dirname(__FILE__) . '/../KalturaClient.php'); +require_once(dirname(__FILE__).DIRECTORY_SEPARATOR.'KalturaTestConfiguration.php'); + +class TestMain implements IKalturaLogger +{ + public function log($message) + { + echo date('Y-m-d H:i:s') . ' ' . $message . "\n"; + } + + public static function run() + { + $test = new TestMain(); + $test->listActions(); + $test->multiRequest(); + $test->add(); + echo "\nFinished running client library tests\n"; + } + + private function getKalturaClient($partnerId, $adminSecret, $isAdmin) + { + $kConfig = new KalturaConfiguration($partnerId); + $kConfig->serviceUrl = KalturaTestConfiguration::SERVICE_URL; + $kConfig->setLogger($this); + $client = new KalturaClient($kConfig); + + $userId = "SomeUser"; + $sessionType = ($isAdmin)? KalturaSessionType::ADMIN : KalturaSessionType::USER; + try + { + $ks = $client->generateSession($adminSecret, $userId, $sessionType, $partnerId); + $client->setKs($ks); + } + catch(Exception $ex) + { + die("could not start session - check configurations in KalturaTestConfiguration class"); + } + + return $client; + } + + public function listActions() + { + try + { + $client = $this->getKalturaClient(KalturaTestConfiguration::PARTNER_ID, KalturaTestConfiguration::ADMIN_SECRET, true); + $results = $client->media->listAction(); + $entry = $results->objects[0]; + echo "\nGot an entry: [{$entry->name}]"; + } + catch(Exception $ex) + { + die($ex->getMessage()); + } + } + + public function multiRequest() + { + try + { + $client = $this->getKalturaClient(KalturaTestConfiguration::PARTNER_ID, KalturaTestConfiguration::ADMIN_SECRET, true); + $client->startMultiRequest(); + $client->baseEntry->count(); + $client->partner->getInfo(); + $client->partner->getUsage(2011); + $multiRequest = $client->doMultiRequest(); + $partner = $multiRequest[1]; + if(!is_object($partner) || get_class($partner) != 'KalturaPartner') + { + throw new Exception("UNEXPECTED_RESULT"); + } + echo "\nGot Admin User email: [{$partner->adminEmail}]"; + } + catch(Exception $ex) + { + die($ex->getMessage()); + } + } + + public function add() + { + try + { + echo "\nUploading test video..."; + $client = $this->getKalturaClient(KalturaTestConfiguration::PARTNER_ID, KalturaTestConfiguration::ADMIN_SECRET, false); + $filePath = KalturaTestConfiguration::UPLOAD_FILE; + + $token = $client->baseEntry->upload($filePath); + $entry = new KalturaMediaEntry(); + $entry->name = "my upload entry"; + $entry->mediaType = KalturaMediaType::VIDEO; + $newEntry = $client->media->addFromUploadedFile($entry, $token); + echo "\nUploaded a new Video entry " . $newEntry->id; + $client->media->delete($newEntry->id); + try { + $entry = null; + $entry = $client->media->get($newEntry->id); + } catch (KalturaException $exApi) { + if ($entry == null) { + echo "\nDeleted the entry (" . $newEntry->id .") successfully!"; + } + } + } catch (KalturaException $ex) { + die($ex->getMessage()); + } + } +} + +TestMain::run(); diff --git a/local/kaltura/API/agpl.txt b/local/kaltura/API/agpl.txt new file mode 100644 index 0000000000000..94a9ed024d385 --- /dev/null +++ b/local/kaltura/API/agpl.txt @@ -0,0 +1,674 @@ + GNU GENERAL PUBLIC LICENSE + Version 3, 29 June 2007 + + Copyright (C) 2007 Free Software Foundation, Inc. + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The GNU General Public License is a free, copyleft license for +software and other kinds of works. + + The licenses for most software and other practical works are designed +to take away your freedom to share and change the works. By contrast, +the GNU General Public License is intended to guarantee your freedom to +share and change all versions of a program--to make sure it remains free +software for all its users. We, the Free Software Foundation, use the +GNU General Public License for most of our software; it applies also to +any other work released this way by its authors. You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +them if you wish), that you receive source code or can get it if you +want it, that you can change the software or use pieces of it in new +free programs, and that you know you can do these things. + + To protect your rights, we need to prevent others from denying you +these rights or asking you to surrender the rights. Therefore, you have +certain responsibilities if you distribute copies of the software, or if +you modify it: responsibilities to respect the freedom of others. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must pass on to the recipients the same +freedoms that you received. You must make sure that they, too, receive +or can get the source code. And you must show them these terms so they +know their rights. + + Developers that use the GNU GPL protect your rights with two steps: +(1) assert copyright on the software, and (2) offer you this License +giving you legal permission to copy, distribute and/or modify it. + + For the developers' and authors' protection, the GPL clearly explains +that there is no warranty for this free software. For both users' and +authors' sake, the GPL requires that modified versions be marked as +changed, so that their problems will not be attributed erroneously to +authors of previous versions. + + Some devices are designed to deny users access to install or run +modified versions of the software inside them, although the manufacturer +can do so. This is fundamentally incompatible with the aim of +protecting users' freedom to change the software. The systematic +pattern of such abuse occurs in the area of products for individuals to +use, which is precisely where it is most unacceptable. Therefore, we +have designed this version of the GPL to prohibit the practice for those +products. If such problems arise substantially in other domains, we +stand ready to extend this provision to those domains in future versions +of the GPL, as needed to protect the freedom of users. + + Finally, every program is threatened constantly by software patents. +States should not allow patents to restrict development and use of +software on general-purpose computers, but in those that do, we wish to +avoid the special danger that patents applied to a free program could +make it effectively proprietary. To prevent this, the GPL assures that +patents cannot be used to render the program non-free. + + The precise terms and conditions for copying, distribution and +modification follow. + + TERMS AND CONDITIONS + + 0. Definitions. + + "This License" refers to version 3 of the GNU General Public License. + + "Copyright" also means copyright-like laws that apply to other kinds of +works, such as semiconductor masks. + + "The Program" refers to any copyrightable work licensed under this +License. Each licensee is addressed as "you". "Licensees" and +"recipients" may be individuals or organizations. + + To "modify" a work means to copy from or adapt all or part of the work +in a fashion requiring copyright permission, other than the making of an +exact copy. The resulting work is called a "modified version" of the +earlier work or a work "based on" the earlier work. + + A "covered work" means either the unmodified Program or a work based +on the Program. + + To "propagate" a work means to do anything with it that, without +permission, would make you directly or secondarily liable for +infringement under applicable copyright law, except executing it on a +computer or modifying a private copy. Propagation includes copying, +distribution (with or without modification), making available to the +public, and in some countries other activities as well. + + To "convey" a work means any kind of propagation that enables other +parties to make or receive copies. Mere interaction with a user through +a computer network, with no transfer of a copy, is not conveying. + + An interactive user interface displays "Appropriate Legal Notices" +to the extent that it includes a convenient and prominently visible +feature that (1) displays an appropriate copyright notice, and (2) +tells the user that there is no warranty for the work (except to the +extent that warranties are provided), that licensees may convey the +work under this License, and how to view a copy of this License. If +the interface presents a list of user commands or options, such as a +menu, a prominent item in the list meets this criterion. + + 1. Source Code. + + The "source code" for a work means the preferred form of the work +for making modifications to it. "Object code" means any non-source +form of a work. + + A "Standard Interface" means an interface that either is an official +standard defined by a recognized standards body, or, in the case of +interfaces specified for a particular programming language, one that +is widely used among developers working in that language. + + The "System Libraries" of an executable work include anything, other +than the work as a whole, that (a) is included in the normal form of +packaging a Major Component, but which is not part of that Major +Component, and (b) serves only to enable use of the work with that +Major Component, or to implement a Standard Interface for which an +implementation is available to the public in source code form. A +"Major Component", in this context, means a major essential component +(kernel, window system, and so on) of the specific operating system +(if any) on which the executable work runs, or a compiler used to +produce the work, or an object code interpreter used to run it. + + The "Corresponding Source" for a work in object code form means all +the source code needed to generate, install, and (for an executable +work) run the object code and to modify the work, including scripts to +control those activities. However, it does not include the work's +System Libraries, or general-purpose tools or generally available free +programs which are used unmodified in performing those activities but +which are not part of the work. For example, Corresponding Source +includes interface definition files associated with source files for +the work, and the source code for shared libraries and dynamically +linked subprograms that the work is specifically designed to require, +such as by intimate data communication or control flow between those +subprograms and other parts of the work. + + The Corresponding Source need not include anything that users +can regenerate automatically from other parts of the Corresponding +Source. + + The Corresponding Source for a work in source code form is that +same work. + + 2. Basic Permissions. + + All rights granted under this License are granted for the term of +copyright on the Program, and are irrevocable provided the stated +conditions are met. This License explicitly affirms your unlimited +permission to run the unmodified Program. The output from running a +covered work is covered by this License only if the output, given its +content, constitutes a covered work. This License acknowledges your +rights of fair use or other equivalent, as provided by copyright law. + + You may make, run and propagate covered works that you do not +convey, without conditions so long as your license otherwise remains +in force. You may convey covered works to others for the sole purpose +of having them make modifications exclusively for you, or provide you +with facilities for running those works, provided that you comply with +the terms of this License in conveying all material for which you do +not control copyright. Those thus making or running the covered works +for you must do so exclusively on your behalf, under your direction +and control, on terms that prohibit them from making any copies of +your copyrighted material outside their relationship with you. + + Conveying under any other circumstances is permitted solely under +the conditions stated below. Sublicensing is not allowed; section 10 +makes it unnecessary. + + 3. Protecting Users' Legal Rights From Anti-Circumvention Law. + + No covered work shall be deemed part of an effective technological +measure under any applicable law fulfilling obligations under article +11 of the WIPO copyright treaty adopted on 20 December 1996, or +similar laws prohibiting or restricting circumvention of such +measures. + + When you convey a covered work, you waive any legal power to forbid +circumvention of technological measures to the extent such circumvention +is effected by exercising rights under this License with respect to +the covered work, and you disclaim any intention to limit operation or +modification of the work as a means of enforcing, against the work's +users, your or third parties' legal rights to forbid circumvention of +technological measures. + + 4. Conveying Verbatim Copies. + + You may convey verbatim copies of the Program's source code as you +receive it, in any medium, provided that you conspicuously and +appropriately publish on each copy an appropriate copyright notice; +keep intact all notices stating that this License and any +non-permissive terms added in accord with section 7 apply to the code; +keep intact all notices of the absence of any warranty; and give all +recipients a copy of this License along with the Program. + + You may charge any price or no price for each copy that you convey, +and you may offer support or warranty protection for a fee. + + 5. Conveying Modified Source Versions. + + You may convey a work based on the Program, or the modifications to +produce it from the Program, in the form of source code under the +terms of section 4, provided that you also meet all of these conditions: + + a) The work must carry prominent notices stating that you modified + it, and giving a relevant date. + + b) The work must carry prominent notices stating that it is + released under this License and any conditions added under section + 7. This requirement modifies the requirement in section 4 to + "keep intact all notices". + + c) You must license the entire work, as a whole, under this + License to anyone who comes into possession of a copy. This + License will therefore apply, along with any applicable section 7 + additional terms, to the whole of the work, and all its parts, + regardless of how they are packaged. This License gives no + permission to license the work in any other way, but it does not + invalidate such permission if you have separately received it. + + d) If the work has interactive user interfaces, each must display + Appropriate Legal Notices; however, if the Program has interactive + interfaces that do not display Appropriate Legal Notices, your + work need not make them do so. + + A compilation of a covered work with other separate and independent +works, which are not by their nature extensions of the covered work, +and which are not combined with it such as to form a larger program, +in or on a volume of a storage or distribution medium, is called an +"aggregate" if the compilation and its resulting copyright are not +used to limit the access or legal rights of the compilation's users +beyond what the individual works permit. Inclusion of a covered work +in an aggregate does not cause this License to apply to the other +parts of the aggregate. + + 6. Conveying Non-Source Forms. + + You may convey a covered work in object code form under the terms +of sections 4 and 5, provided that you also convey the +machine-readable Corresponding Source under the terms of this License, +in one of these ways: + + a) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by the + Corresponding Source fixed on a durable physical medium + customarily used for software interchange. + + b) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by a + written offer, valid for at least three years and valid for as + long as you offer spare parts or customer support for that product + model, to give anyone who possesses the object code either (1) a + copy of the Corresponding Source for all the software in the + product that is covered by this License, on a durable physical + medium customarily used for software interchange, for a price no + more than your reasonable cost of physically performing this + conveying of source, or (2) access to copy the + Corresponding Source from a network server at no charge. + + c) Convey individual copies of the object code with a copy of the + written offer to provide the Corresponding Source. This + alternative is allowed only occasionally and noncommercially, and + only if you received the object code with such an offer, in accord + with subsection 6b. + + d) Convey the object code by offering access from a designated + place (gratis or for a charge), and offer equivalent access to the + Corresponding Source in the same way through the same place at no + further charge. You need not require recipients to copy the + Corresponding Source along with the object code. If the place to + copy the object code is a network server, the Corresponding Source + may be on a different server (operated by you or a third party) + that supports equivalent copying facilities, provided you maintain + clear directions next to the object code saying where to find the + Corresponding Source. Regardless of what server hosts the + Corresponding Source, you remain obligated to ensure that it is + available for as long as needed to satisfy these requirements. + + e) Convey the object code using peer-to-peer transmission, provided + you inform other peers where the object code and Corresponding + Source of the work are being offered to the general public at no + charge under subsection 6d. + + A separable portion of the object code, whose source code is excluded +from the Corresponding Source as a System Library, need not be +included in conveying the object code work. + + A "User Product" is either (1) a "consumer product", which means any +tangible personal property which is normally used for personal, family, +or household purposes, or (2) anything designed or sold for incorporation +into a dwelling. In determining whether a product is a consumer product, +doubtful cases shall be resolved in favor of coverage. For a particular +product received by a particular user, "normally used" refers to a +typical or common use of that class of product, regardless of the status +of the particular user or of the way in which the particular user +actually uses, or expects or is expected to use, the product. A product +is a consumer product regardless of whether the product has substantial +commercial, industrial or non-consumer uses, unless such uses represent +the only significant mode of use of the product. + + "Installation Information" for a User Product means any methods, +procedures, authorization keys, or other information required to install +and execute modified versions of a covered work in that User Product from +a modified version of its Corresponding Source. The information must +suffice to ensure that the continued functioning of the modified object +code is in no case prevented or interfered with solely because +modification has been made. + + If you convey an object code work under this section in, or with, or +specifically for use in, a User Product, and the conveying occurs as +part of a transaction in which the right of possession and use of the +User Product is transferred to the recipient in perpetuity or for a +fixed term (regardless of how the transaction is characterized), the +Corresponding Source conveyed under this section must be accompanied +by the Installation Information. But this requirement does not apply +if neither you nor any third party retains the ability to install +modified object code on the User Product (for example, the work has +been installed in ROM). + + The requirement to provide Installation Information does not include a +requirement to continue to provide support service, warranty, or updates +for a work that has been modified or installed by the recipient, or for +the User Product in which it has been modified or installed. Access to a +network may be denied when the modification itself materially and +adversely affects the operation of the network or violates the rules and +protocols for communication across the network. + + Corresponding Source conveyed, and Installation Information provided, +in accord with this section must be in a format that is publicly +documented (and with an implementation available to the public in +source code form), and must require no special password or key for +unpacking, reading or copying. + + 7. Additional Terms. + + "Additional permissions" are terms that supplement the terms of this +License by making exceptions from one or more of its conditions. +Additional permissions that are applicable to the entire Program shall +be treated as though they were included in this License, to the extent +that they are valid under applicable law. If additional permissions +apply only to part of the Program, that part may be used separately +under those permissions, but the entire Program remains governed by +this License without regard to the additional permissions. + + When you convey a copy of a covered work, you may at your option +remove any additional permissions from that copy, or from any part of +it. (Additional permissions may be written to require their own +removal in certain cases when you modify the work.) You may place +additional permissions on material, added by you to a covered work, +for which you have or can give appropriate copyright permission. + + Notwithstanding any other provision of this License, for material you +add to a covered work, you may (if authorized by the copyright holders of +that material) supplement the terms of this License with terms: + + a) Disclaiming warranty or limiting liability differently from the + terms of sections 15 and 16 of this License; or + + b) Requiring preservation of specified reasonable legal notices or + author attributions in that material or in the Appropriate Legal + Notices displayed by works containing it; or + + c) Prohibiting misrepresentation of the origin of that material, or + requiring that modified versions of such material be marked in + reasonable ways as different from the original version; or + + d) Limiting the use for publicity purposes of names of licensors or + authors of the material; or + + e) Declining to grant rights under trademark law for use of some + trade names, trademarks, or service marks; or + + f) Requiring indemnification of licensors and authors of that + material by anyone who conveys the material (or modified versions of + it) with contractual assumptions of liability to the recipient, for + any liability that these contractual assumptions directly impose on + those licensors and authors. + + All other non-permissive additional terms are considered "further +restrictions" within the meaning of section 10. If the Program as you +received it, or any part of it, contains a notice stating that it is +governed by this License along with a term that is a further +restriction, you may remove that term. If a license document contains +a further restriction but permits relicensing or conveying under this +License, you may add to a covered work material governed by the terms +of that license document, provided that the further restriction does +not survive such relicensing or conveying. + + If you add terms to a covered work in accord with this section, you +must place, in the relevant source files, a statement of the +additional terms that apply to those files, or a notice indicating +where to find the applicable terms. + + Additional terms, permissive or non-permissive, may be stated in the +form of a separately written license, or stated as exceptions; +the above requirements apply either way. + + 8. Termination. + + You may not propagate or modify a covered work except as expressly +provided under this License. Any attempt otherwise to propagate or +modify it is void, and will automatically terminate your rights under +this License (including any patent licenses granted under the third +paragraph of section 11). + + However, if you cease all violation of this License, then your +license from a particular copyright holder is reinstated (a) +provisionally, unless and until the copyright holder explicitly and +finally terminates your license, and (b) permanently, if the copyright +holder fails to notify you of the violation by some reasonable means +prior to 60 days after the cessation. + + Moreover, your license from a particular copyright holder is +reinstated permanently if the copyright holder notifies you of the +violation by some reasonable means, this is the first time you have +received notice of violation of this License (for any work) from that +copyright holder, and you cure the violation prior to 30 days after +your receipt of the notice. + + Termination of your rights under this section does not terminate the +licenses of parties who have received copies or rights from you under +this License. If your rights have been terminated and not permanently +reinstated, you do not qualify to receive new licenses for the same +material under section 10. + + 9. Acceptance Not Required for Having Copies. + + You are not required to accept this License in order to receive or +run a copy of the Program. Ancillary propagation of a covered work +occurring solely as a consequence of using peer-to-peer transmission +to receive a copy likewise does not require acceptance. However, +nothing other than this License grants you permission to propagate or +modify any covered work. These actions infringe copyright if you do +not accept this License. Therefore, by modifying or propagating a +covered work, you indicate your acceptance of this License to do so. + + 10. Automatic Licensing of Downstream Recipients. + + Each time you convey a covered work, the recipient automatically +receives a license from the original licensors, to run, modify and +propagate that work, subject to this License. You are not responsible +for enforcing compliance by third parties with this License. + + An "entity transaction" is a transaction transferring control of an +organization, or substantially all assets of one, or subdividing an +organization, or merging organizations. If propagation of a covered +work results from an entity transaction, each party to that +transaction who receives a copy of the work also receives whatever +licenses to the work the party's predecessor in interest had or could +give under the previous paragraph, plus a right to possession of the +Corresponding Source of the work from the predecessor in interest, if +the predecessor has it or can get it with reasonable efforts. + + You may not impose any further restrictions on the exercise of the +rights granted or affirmed under this License. For example, you may +not impose a license fee, royalty, or other charge for exercise of +rights granted under this License, and you may not initiate litigation +(including a cross-claim or counterclaim in a lawsuit) alleging that +any patent claim is infringed by making, using, selling, offering for +sale, or importing the Program or any portion of it. + + 11. Patents. + + A "contributor" is a copyright holder who authorizes use under this +License of the Program or a work on which the Program is based. The +work thus licensed is called the contributor's "contributor version". + + A contributor's "essential patent claims" are all patent claims +owned or controlled by the contributor, whether already acquired or +hereafter acquired, that would be infringed by some manner, permitted +by this License, of making, using, or selling its contributor version, +but do not include claims that would be infringed only as a +consequence of further modification of the contributor version. For +purposes of this definition, "control" includes the right to grant +patent sublicenses in a manner consistent with the requirements of +this License. + + Each contributor grants you a non-exclusive, worldwide, royalty-free +patent license under the contributor's essential patent claims, to +make, use, sell, offer for sale, import and otherwise run, modify and +propagate the contents of its contributor version. + + In the following three paragraphs, a "patent license" is any express +agreement or commitment, however denominated, not to enforce a patent +(such as an express permission to practice a patent or covenant not to +sue for patent infringement). To "grant" such a patent license to a +party means to make such an agreement or commitment not to enforce a +patent against the party. + + If you convey a covered work, knowingly relying on a patent license, +and the Corresponding Source of the work is not available for anyone +to copy, free of charge and under the terms of this License, through a +publicly available network server or other readily accessible means, +then you must either (1) cause the Corresponding Source to be so +available, or (2) arrange to deprive yourself of the benefit of the +patent license for this particular work, or (3) arrange, in a manner +consistent with the requirements of this License, to extend the patent +license to downstream recipients. "Knowingly relying" means you have +actual knowledge that, but for the patent license, your conveying the +covered work in a country, or your recipient's use of the covered work +in a country, would infringe one or more identifiable patents in that +country that you have reason to believe are valid. + + If, pursuant to or in connection with a single transaction or +arrangement, you convey, or propagate by procuring conveyance of, a +covered work, and grant a patent license to some of the parties +receiving the covered work authorizing them to use, propagate, modify +or convey a specific copy of the covered work, then the patent license +you grant is automatically extended to all recipients of the covered +work and works based on it. + + A patent license is "discriminatory" if it does not include within +the scope of its coverage, prohibits the exercise of, or is +conditioned on the non-exercise of one or more of the rights that are +specifically granted under this License. You may not convey a covered +work if you are a party to an arrangement with a third party that is +in the business of distributing software, under which you make payment +to the third party based on the extent of your activity of conveying +the work, and under which the third party grants, to any of the +parties who would receive the covered work from you, a discriminatory +patent license (a) in connection with copies of the covered work +conveyed by you (or copies made from those copies), or (b) primarily +for and in connection with specific products or compilations that +contain the covered work, unless you entered into that arrangement, +or that patent license was granted, prior to 28 March 2007. + + Nothing in this License shall be construed as excluding or limiting +any implied license or other defenses to infringement that may +otherwise be available to you under applicable patent law. + + 12. No Surrender of Others' Freedom. + + If conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot convey a +covered work so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you may +not convey it at all. For example, if you agree to terms that obligate you +to collect a royalty for further conveying from those to whom you convey +the Program, the only way you could satisfy both those terms and this +License would be to refrain entirely from conveying the Program. + + 13. Use with the GNU Affero General Public License. + + Notwithstanding any other provision of this License, you have +permission to link or combine any covered work with a work licensed +under version 3 of the GNU Affero General Public License into a single +combined work, and to convey the resulting work. The terms of this +License will continue to apply to the part which is the covered work, +but the special requirements of the GNU Affero General Public License, +section 13, concerning interaction through a network will apply to the +combination as such. + + 14. Revised Versions of this License. + + The Free Software Foundation may publish revised and/or new versions of +the GNU General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + + Each version is given a distinguishing version number. If the +Program specifies that a certain numbered version of the GNU General +Public License "or any later version" applies to it, you have the +option of following the terms and conditions either of that numbered +version or of any later version published by the Free Software +Foundation. If the Program does not specify a version number of the +GNU General Public License, you may choose any version ever published +by the Free Software Foundation. + + If the Program specifies that a proxy can decide which future +versions of the GNU General Public License can be used, that proxy's +public statement of acceptance of a version permanently authorizes you +to choose that version for the Program. + + Later license versions may give you additional or different +permissions. However, no additional obligations are imposed on any +author or copyright holder as a result of your choosing to follow a +later version. + + 15. Disclaimer of Warranty. + + THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY +APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT +HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY +OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, +THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM +IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF +ALL NECESSARY SERVICING, REPAIR OR CORRECTION. + + 16. Limitation of Liability. + + IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS +THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY +GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE +USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF +DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD +PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), +EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF +SUCH DAMAGES. + + 17. Interpretation of Sections 15 and 16. + + If the disclaimer of warranty and limitation of liability provided +above cannot be given local legal effect according to their terms, +reviewing courts shall apply local law that most closely approximates +an absolute waiver of all civil liability in connection with the +Program, unless a warranty or assumption of liability accompanies a +copy of the Program in return for a fee. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +state the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + + Copyright (C) + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . + +Also add information on how to contact you by electronic and paper mail. + + If the program does terminal interaction, make it output a short +notice like this when it starts in an interactive mode: + + Copyright (C) + This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the appropriate +parts of the General Public License. Of course, your program's commands +might be different; for a GUI interface, you would use an "about box". + + You should also get your employer (if you work as a programmer) or school, +if any, to sign a "copyright disclaimer" for the program, if necessary. +For more information on this, and how to apply and follow the GNU GPL, see +. + + The GNU General Public License does not permit incorporating your program +into proprietary programs. If your program is a subroutine library, you +may consider it more useful to permit linking proprietary applications with +the library. If this is what you want to do, use the GNU Lesser General +Public License instead of this License. But first, please read +. diff --git a/local/kaltura/db/access.php b/local/kaltura/db/access.php new file mode 100644 index 0000000000000..e1b21b000602b --- /dev/null +++ b/local/kaltura/db/access.php @@ -0,0 +1,39 @@ +. + +/** + * Kaltura local plug-in access.php + * + * @package local_kaltura + * @author Remote-Learner.net Inc + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + * @copyright (C) 2014 Remote Learner.net Inc http://www.remote-learner.net + */ + +$capabilities = array( + 'local/kaltura:download_trace_logs' => array( + 'captype' => 'read', + 'contextlevel' => CONTEXT_SYSTEM, + 'archetypes' => array( + 'manager' => CAP_ALLOW, + ) + ), + 'local/kaltura:migrate_data' => array( + 'captype' => 'read', + 'contextlevel' => CONTEXT_SYSTEM, + 'archetypes' => array( + 'manager' => CAP_ALLOW, + ) + ), +); \ No newline at end of file diff --git a/local/kaltura/db/install.php b/local/kaltura/db/install.php new file mode 100644 index 0000000000000..422b09aef583b --- /dev/null +++ b/local/kaltura/db/install.php @@ -0,0 +1,595 @@ +. + +/** + * Kaltura Post installation and migration code. + * + * @package local + * @subpackage kaltura + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + */ + +require_once(dirname(dirname(__FILE__)) . '/locallib.php'); + +if (!defined('MOODLE_INTERNAL')) { + die('Direct access to this script is forbidden.'); /// It must be included from a Moodle page +} + + + +function xmldb_local_kaltura_install() { + + // Copy plug configuration data + migrate_configuration_data(); + + // Create new Kaltura video resource/presentations from old resource types + migrate_resource_data(); + + + // Create new Kaltura video assignment from old assignment type and update all + // user data pertaining to that assignment + migrate_assignment_data(); + + return true; +} + +/** + * This function migrates old video assignment type data and creates new Kaltura + * video assignment modules from the old data. Updates the course modules table + * to refer to the newly created video assignment module. Updates the + * grade_items table to refer to the newly created assignment module. If grades + * are found in the grade_grades table, create a new video assignment submission + * record using the data from the old video assignment submission record and + * remove the old assignment submission data. Lastly the old assignment record + * is remove. + */ +function migrate_assignment_data() { + global $DB; + + $dbman = $DB->get_manager(); + $assign_table_exists = false; + $module_exists = false; + $rebuild_courses = array(); + + $table = new xmldb_table('assignment'); + if ($dbman->table_exists($table)) { + $assign_table_exists = true; + } + + if ($module = $DB->get_record('modules', array('name'=> 'kalvidassign'))) { + $module_exists = true; + } + + if ($assign_table_exists && $module_exists) { + + try { + //Check of the kalvidassign module exists and retrieve all old assignments + $module_table_exists = kalvidassign_exists($dbman); + + $params = array('assignmenttype' => 'kaltura'); + $old_assignments = $DB->get_records('assignment', $params); + + if (!empty($old_assignments)) { + + foreach ($old_assignments as $assignment) { + + $courseid = $assignment->course; + $rebuild_courses[$courseid] = $courseid; + $kalvidassign_obj = create_new_kalvidassign($assignment); + $kalvidassign_id = add_new_kalvidassign($kalvidassign_obj); + + if ($kalvidassign_id) { + + // Update calendar event + update_calendar_event($kalvidassign_id, $assignment->id); + + // update course modules record for the video assignment by + // setting it to point to the new kalvidassign instance + $old_assignment_cm = get_coursemodule_from_instance('assignment', $assignment->id); + + if (empty($old_assignment_cm)) { + continue; + } + + $cm = new stdClass(); + $cm->id = $old_assignment_cm->id; + $cm->module = $module->id; + $cm->instance = $kalvidassign_id; + + // Replace the old assignment type reference with a reference to the new + // assignment module + if ($DB->update_record('course_modules', $cm)) { + + $param = array('itemtype' => 'mod', + 'itemmodule' => 'assignment', + 'iteminstance' => $assignment->id); + + $grade_item = $DB->get_record('grade_items', $param); + + // If this assignment has a grade item then update the references to point to the new + // assignment module + if (!empty($grade_item)) { + + // Now update the grade_items record + $grade_item->itemmodule = 'kalvidassign'; + $grade_item->iteminstance = $kalvidassign_id; + + if ($DB->update_record('grade_items', $grade_item)) { + + $param = array('itemid' => $grade_item->id); + $grade_grades = $DB->get_records('grade_grades', $param, 'id,userid'); + + if (!empty($grade_grades)) { + + foreach ($grade_grades as $grade_grade) { + + $param = array('assignment' => $assignment->id, + 'userid' => $grade_grade->userid); + $assign_sub = $DB->get_record('assignment_submissions', $param); + + if (!empty($assign_sub) && !empty($assign_sub->data1)) { + + // Create new user assignment submission + create_new_kalvidassign_submission($kalvidassign_id, $assign_sub); + + // Remove old submission + $param = array('id' => $assign_sub->id); + $DB->delete_records('assignment_submissions',$param); + + } // end of if submission exists + + } // end of foreach loop grade_grades + + } // end of if empty grade_grades + + } // end of if update grade item failed + + } // end of if grade item exists + + // Delete old assignment record + $param = array('id' => $assignment->id); + $DB->delete_records('assignment', $param); + + } + + } + + } + } + } catch (Exception $exp) { + add_to_log(SITEID, 'local_kaltura', 'Data migration error', '', $exp->getMessage()); + } + + } + + foreach ($rebuild_courses as $courseid) { + rebuild_course_cache($courseid); + } + +} + +/** + * Updates the calendar event entry to refer to the new video assignment + * instance + * + * @param int - Id of new assignment instance + * @param int - Id of old assignment instance + */ +function update_calendar_event($new_assignment_id, $old_assignment_id) { + global $DB; + + $param = array('modulename' => 'assignment', + 'instance' => $old_assignment_id); + $event = $DB->get_record('event', $param); + + if (!empty($event)) { + $event->modulename = 'kalvidassign'; + $event->instance = $new_assignment_id; + + $DB->update_record('event', $event); + } +} + +/** + * This function migrates old resource data from the resource_old table and + * creates new kaltura video resource/presentations modules with the old data. + * Updates the course modules table to point to the new video + * resource/presentation modules. Removes old resource data from the + * resource_old table as well as from the resource table + * + */ +function migrate_resource_data() { + global $CFG, $DB; + + $dbman = $DB->get_manager(); + $module_table_exists = false; + $kalvidpres_exists = false; + $resource_old_exists = false; + + // Check if the mdl_resource_old table exists and has any entries. If so then we may have old resource activites to upgrade + $table = new xmldb_table('resource_old'); + if ($dbman->table_exists($table)) { + $resource_old_exists = true; + } + + // If resource old exists run through the upgrade steps to migrate the data into individual modules + if ($resource_old_exists) { + + // Check of the kalvidres module exists and include it's lib.php + $module_table_exists = kalvidres_exists($dbman); + + if ($module_table_exists) { + require_once($CFG->dirroot.'/mod/kalvidres/lib.php'); + } + + // Check of the kalvidpres module exists and include it's lib.php + $module_table_exists = kalvidpres_exists($dbman); + + if ($module_table_exists) { + require_once($CFG->dirroot.'/mod/kalvidpres/lib.php'); + } + + $params = array('migrated' => 0, + 'vr' => 'kalturavideo', + 'vp' => 'kalturaswfdoc'); + $sql = "SELECT * + FROM {resource_old} + WHERE migrated = :migrated + AND (type = :vr OR type = :vp)"; + + $kaltura_old_resources = $DB->get_records_sql($sql, $params); + + // If old resources have been found then we must convert them into new plugins + if (!empty($kaltura_old_resources)) { + + foreach ($kaltura_old_resources as $old_resource) { + + // If a kalture video resoruce is found + if (0 == strcmp('kalturavideo', $old_resource->type)) { + + // Get module information for the kaltura video resource and add a new instance + if (!$module = $DB->get_record('modules', array('name'=> 'kalvidres'))) { + continue; + } + + // Create an instance of the Kaltura video resource + $kalvidres_obj = create_new_kalvidres($old_resource); + $kalvidres_inst_id = kalvidres_add_instance($kalvidres_obj); + + // If add instance was successful + if ($kalvidres_inst_id) { + + // update course modules record for the video resourse by setting it to point to the new kalvidres instance + $cm = new stdClass(); + $cm->id = $old_resource->cmid; + $cm->module = $module->id; + $cm->instance = $kalvidres_inst_id; + + // If update successful remove references to the obsolete video resource + if (!is_null($old_resource->cmid) && $DB->update_record('course_modules', $cm)) { + + // Remove old instance of the resource/kalturavideo module from the resource table + $param = array('id' => $old_resource->id); + $DB->delete_records('resource', $param); + + // Remove the record of the old instance from the resource_old table + $DB->delete_records('resource_old', $param); + + } else { // Remove instance from module table + + $param = array('id' => $kalvidres_inst_id); + $DB->delete_records('kalvidres', $param); + } + } + + } else if (0 == strcmp('kalturaswfdoc', $old_resource->type)) { + // If Kaltura video presentation is found + + // Get module information for the kaltura video presention and add a new instance + if (!$module = $DB->get_record('modules', array('name'=> 'kalvidpres'))) { + continue; + } + + // Create an instance of the Kaltura video presentation + $kalvidpres_obj = create_new_kalvidpres($old_resource); + $kalvidpres_inst_id = kalvidpres_add_instance($kalvidpres_obj); + + // If add instance was successful + if ($kalvidpres_inst_id) { + + // update course modules record for the video presentation by setting it to point to the new kalvidres instance + $cm = new stdClass(); + $cm->id = $old_resource->cmid; + $cm->module = $module->id; + $cm->instance = $kalvidpres_inst_id; + + // If update successful remove references to the obsolete video resource + if ($DB->update_record('course_modules', $cm)) { + + // Remove old instance of the resource/kalturaswfdoc module from the resource table + $param = array('id' => $old_resource->id); + $DB->delete_records('resource', $param); + + // Remove the record of the old instance from the resource_old table + $DB->delete_records('resource_old', $param); + + } else { // Remove instance from module table + + $param = array('id' => $kalvidpres_inst_id); + $DB->delete_records('kalvidres', $param); + } + } + } + } + } + } +} + +/** + * Update Kaltura 1.9 configuration settings to 2.1 spec settings. + * This function also removes all of the old 1.9 player configurations + */ +function migrate_configuration_data() { + global $DB; + + $param = array('plugin' => 'block_kaltura'); + $records = $DB->get_records('config_plugins', $param); + $name_map = configuration_data_mapping(); + + if (empty($records)) { + return true; + } + + foreach ($records as $record) { + switch ($record->name) { + case 'kaltura_conn_server': + case 'kaltura_uri': + case 'kaltura_login': + case 'kaltura_password': + case 'kaltura_secret': + case 'kaltura_adminsecret': + case 'kaltura_partner_id': + + $name = $record->name; + + if (array_key_exists($name , $name_map)) { + + $record->plugin = 'local_kaltura'; + $record->name = $name_map[$name ]; + + $DB->update_record('config_plugins', $record); + } + + break; + default: + + $param = array ('id' => $record->id); + $DB->delete_records('config_plugins', $param); + break; + } + + } + +} + +/** + * Constructs and returns an array of Moodle 1.9 kaltura configuration name + * mappings where the key is the 1.9 configuraiton name and the value is the 2.1 + * configuration name + * + * @param - none + * @return array - array key 1.9 names, value 2.1 names + */ +function configuration_data_mapping() { + return array('kaltura_conn_server' => 'conn_server', + 'kaltura_uri' => 'uri', + 'kaltura_login' => 'login', + 'kaltura_password' => 'password', + 'kaltura_secret' => 'secret', + 'kaltura_adminsecret' => 'adminsecret', + 'kaltura_partner_id' => 'partner_id'); +} + +/** + * Adds a new instance of the kaltura video assignment + * + * @param object - a kaltura video assignment instance object + * @return int - id of the newly inserted record or false + */ +function add_new_kalvidassign($kalvidassign) { + global $DB; + + $id = $DB->insert_record('kalvidassign', $kalvidassign); + + return $id; +} + +/** + * Construct a kaltura video assignmentobject using parameters from a Moodle 1.9 + * kaltura video assignment type + * + * @param object - kaltura video assignment object (ver: Moodle 1.9) + * @return object - kaltura video assignment object (var: Moodle 2.1) + */ +function create_new_kalvidassign($old_assignment) { + + $kalvidassign = new stdClass(); + + $kalvidassign->course = $old_assignment->course; + $kalvidassign->name = $old_assignment->name; + $kalvidassign->intro = $old_assignment->intro; + $kalvidassign->introformat = $old_assignment->introformat; + $kalvidassign->timeavailable = $old_assignment->timeavailable; + $kalvidassign->timedue = $old_assignment->timedue; + $kalvidassign->preventlate = $old_assignment->preventlate; + $kalvidassign->resubmit = $old_assignment->resubmit; + $kalvidassign->emailteachers = $old_assignment->emailteachers; + $kalvidassign->grade = $old_assignment->grade; + $kalvidassign->timecreated = $old_assignment->timemodified; + + return $kalvidassign; +} + +/** + * Adds a new instance of the kaltura video assignment submission + * + * @param int - Id of the kaltura video assignment the submission is for + * @param object - old video assignment submission object + * + * @return int - id of the newly inserted record or false + */ +function create_new_kalvidassign_submission($kalvidassign_id, $old_assign_sub) { + global $DB; + + $kalvidassign_sub = new stdClass(); + $kalvidassign_sub->vidassignid = $kalvidassign_id; + $kalvidassign_sub->userid = $old_assign_sub->userid; + $kalvidassign_sub->entry_id = $old_assign_sub->data1; + $kalvidassign_sub->grade = $old_assign_sub->grade; + $kalvidassign_sub->submissioncomment = $old_assign_sub->submissioncomment; + $kalvidassign_sub->format = $old_assign_sub->format; + $kalvidassign_sub->teacher = $old_assign_sub->teacher; + $kalvidassign_sub->mailed = $old_assign_sub->mailed; + $kalvidassign_sub->timemarked = $old_assign_sub->timemarked; + $kalvidassign_sub->timecreated = $old_assign_sub->timecreated; + $kalvidassign_sub->timemodified = $old_assign_sub->timemodified; + + $id = $DB->insert_record('kalvidassign_submission', $kalvidassign_sub); + + return $id; +} + +/** + * Construct a kaltura video resource object using parameters from a Moodle 1.9 + * kaltura video resource + * + * @param object - kaltura video resource object (ver: Moodle 1.9) + * @return object - kaltura video resource object (var: Moodle 2.1) + */ +function create_new_kalvidres($old_resource) { + + $kalvidres = new stdClass(); + + $kalvidres->course = $old_resource->course; + $kalvidres->name = $old_resource->name; + $kalvidres->intro = $old_resource->intro; + $kalvidres->introformat = $old_resource->introformat; + $kalvidres->entry_id = $old_resource->alltext; + $kalvidres->video_title = $old_resource->name; + $kalvidres->uiconf_id = KALTURA_PLAYER_PLAYERREGULARDARK; + $kalvidres->widescreen = 0; + $kalvidres->height = 365; + $kalvidres->width = 400; + + return $kalvidres; +} + +/** + * Construct a kaltura video presentation object using parameters from a Moodle + * 1.9 kaltura video resource + * + * @param object - kaltura video presentation object (ver: Moodle 1.9) + * @return object - kaltura video presentation object (var: Moodle 2.1) + */ +function create_new_kalvidpres($old_resource) { + + $kalvidpres = new stdClass(); + + $kalvidpres->course = $old_resource->course; + $kalvidpres->name = $old_resource->name; + $kalvidpres->intro = $old_resource->intro; + $kalvidpres->introformat = $old_resource->introformat; + $kalvidpres->entry_id = $old_resource->alltext; + $kalvidpres->video_entry_id = $old_resource->alltext; + $kalvidpres->doc_entry_id = $old_resource->alltext; + $kalvidpres->video_title = $old_resource->name; + $kalvidpres->uiconf_id = KALTURA_PLAYER_PLAYERVIDEOPRESENTATION; + $kalvidpres->widescreen = 0; + $kalvidpres->height = 365; + $kalvidpres->width = 400; + + return $kalvidpres; +} + + +/** + * Check if the Kaltura video assignment table schema exists + * + * @para object - db manager + * @return bool - true if exists, else false + */ +function kalvidassign_exists($dbman) { + global $CFG; + + // Check of the Kaltura video resource plugin exists + $table = new xmldb_table('kalvidassign'); + + if (!$dbman->table_exists($table)) { + return false; + } + + if (!file_exists($CFG->dirroot.'/mod/kalvidassign/lib.php')) { + return false; + } + + return true; +} + +/** + * Check if the Kaltura video resource table schema exists + * + * @para object - db manager + * @return bool - true if exists, else false + */ +function kalvidres_exists($dbman) { + global $CFG; + + // Check of the Kaltura video resource plugin exists + $table = new xmldb_table('kalvidres'); + + if (!$dbman->table_exists($table)) { + return false; + } + + if (!file_exists($CFG->dirroot.'/mod/kalvidres/lib.php')) { + return false; + } + + return true; +} + +/** + * Check if the Kaltura video presentation table schema exists + * + * @para object - db manager + * @return bool - true if exists, else false + */ +function kalvidpres_exists($dbman) { + global $CFG; + + // Check of the Kaltura video pres plugin exists + $table = new xmldb_table('kalvidpres'); + + if (!$dbman->table_exists($table)) { + return false; + } + + if (!file_exists($CFG->dirroot.'/mod/kalvidpres/lib.php')) { + return false; + } + + return true; +} diff --git a/local/kaltura/db/install.xml b/local/kaltura/db/install.xml new file mode 100755 index 0000000000000..59ccf34885d6c --- /dev/null +++ b/local/kaltura/db/install.xml @@ -0,0 +1,25 @@ + + + + + + + + + + + + + + + + + + + +
    +
    +
    \ No newline at end of file diff --git a/local/kaltura/db/upgrade.php b/local/kaltura/db/upgrade.php new file mode 100644 index 0000000000000..e9504b672d08e --- /dev/null +++ b/local/kaltura/db/upgrade.php @@ -0,0 +1,67 @@ +. + +/** + * Upgrade code containing changes to the plugin data table. + * + * @package local_kaltura + * @author Remote-Learner.net Inc + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + * @copyright (C) 2014 Remote Learner.net Inc http://www.remote-learner.net + */ +function xmldb_local_kaltura_upgrade($oldversion) { + global $CFG, $DB; + + require_once($CFG->dirroot.'/local/kaltura/locallib.php'); + + $dbman = $DB->get_manager(); + + if ($oldversion < 2014013000) { + // Because the plug-in is being upgraded we need to set the migration flag to true. + set_config('migration_yes', 1, KALTURA_PLUGIN_NAME); + + // Define table local_kaltura_log to be created. + $table = new xmldb_table('local_kaltura_log'); + + // Adding fields to table local_kaltura_log. + $table->add_field('id', XMLDB_TYPE_INTEGER, '10', null, XMLDB_NOTNULL, XMLDB_SEQUENCE, null); + $table->add_field('module', XMLDB_TYPE_CHAR, '50', null, XMLDB_NOTNULL, null, null); + $table->add_field('type', XMLDB_TYPE_CHAR, '3', null, XMLDB_NOTNULL, null, null); + $table->add_field('endpoint', XMLDB_TYPE_CHAR, '255', null, XMLDB_NOTNULL, null, null); + $table->add_field('data', XMLDB_TYPE_TEXT, null, null, XMLDB_NOTNULL, null, null); + $table->add_field('timecreated', XMLDB_TYPE_INTEGER, '20', null, XMLDB_NOTNULL, null, '0'); + + // Adding keys to table local_kaltura_log. + $table->add_key('primary', XMLDB_KEY_PRIMARY, array('id')); + + // Adding indexes to table local_kaltura_log. + $table->add_index('module_idx', XMLDB_INDEX_NOTUNIQUE, array('module')); + $table->add_index('timecreated_idx', XMLDB_INDEX_NOTUNIQUE, array('timecreated')); + + // Conditionally launch create table for local_kaltura_log. + if (!$dbman->table_exists($table)) { + $dbman->create_table($table); + } + + // Kaltura savepoint reached. + upgrade_plugin_savepoint(true, 2014013000, 'local', 'kaltura'); + } + + if ($oldversion < 2014013000.01) { + // Kaltura savepoint reached. + upgrade_plugin_savepoint(true, 2014013000.01, 'local', 'kaltura'); + } +} \ No newline at end of file diff --git a/local/kaltura/download_log.php b/local/kaltura/download_log.php new file mode 100644 index 0000000000000..4da167e24fbf1 --- /dev/null +++ b/local/kaltura/download_log.php @@ -0,0 +1,103 @@ +. + +/** + * Download Kaltura logs page. + * + * @package local_kaltura + * @author Remote-Learner.net Inc + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + * @copyright (C) 2014 Remote Learner.net Inc http://www.remote-learner.net + */ + +require_once('../../config.php'); +require_once($CFG->dirroot.'/local/kaltura/download_log_form.php'); + +global $DB; + +$url = new moodle_url('/mod/lti/instructor_edit_tool_type.php'); +$context = context_system::instance(); +$heading = get_string('download_logs_title', 'local_kaltura'); +$site = get_site(); + +$PAGE->navbar->add(get_string('administrationsite')); +$PAGE->navbar->add(get_string('plugins', 'admin')); +$PAGE->navbar->add(get_string('localplugins')); +$PAGE->navbar->add(get_string('pluginname', 'local_kaltura'), new moodle_url('/admin/settings.php', array('section' => 'local_kaltura'))); +$PAGE->navbar->add(get_string('download_logs_title', 'local_kaltura')); + +$PAGE->set_url($url); +$PAGE->set_context($context); + +$PAGE->set_context($context); +$PAGE->set_pagelayout('standard'); +$PAGE->set_pagetype('local-kaltura-download-log'); +$PAGE->set_title($heading); +$PAGE->set_heading($site->fullname); + +require_login(null, false); + +require_capability('local/kaltura:download_trace_logs', $context); + +$url = new moodle_url('/admin/settings.php', array('section' => 'local_kaltura')); +$downloadurl = new moodle_url('/local/kaltura/download_log.php'); + +$form = new local_kaltura_download_log_form(); +if ($data = $form->get_data()) { + // User hit cancel. Redirect them back to the settings page. + if (isset($data->cancel)) { + redirect($url); + } + + require_sesskey(); + + // User hit submit button. Check for records since the configured date. + if (isset($data->submitbutton)) { + $rs = $DB->get_recordset_select('local_kaltura_log', 'timecreated >= ?', array($data->logs_start_time), 'timecreated ASC'); + + // Check if the recordset contains any data. + if ($rs->valid()) { + header('Content-Type: text/csv; charset=utf-8'); + header('Content-Disposition: attachment; filename=kalturalogs.csv'); + + // create a file pointer connected to the output stream + $output = fopen('php://output', 'w'); + + // output the column headings + fputcsv($output, array('Request/Response', 'Time', 'Module', 'Endpoint', 'Data (JSON)')); + + foreach ($rs as $record) { + $record->data = json_encode(unserialize($record->data)); + fputcsv($output, array($record->type, userdate($record->timecreated), $record->module, $record->endpoint, $record->data)); + } + + $rs->close(); + die(); + } else { + notice(get_string('no_records', 'local_kaltura'), $downloadurl); + } + } + + if (isset($data->deletelogs)) { + $DB->delete_records_select('local_kaltura_log', 'id > 0'); + notice(get_string('records_deleted', 'local_kaltura'), $downloadurl); + } +} + +echo $OUTPUT->header(); +echo $OUTPUT->heading(get_string('download_logs_title', 'local_kaltura')); +$form->display(); +echo $OUTPUT->footer(); diff --git a/local/kaltura/download_log_form.php b/local/kaltura/download_log_form.php new file mode 100644 index 0000000000000..10d089d4d17a7 --- /dev/null +++ b/local/kaltura/download_log_form.php @@ -0,0 +1,46 @@ +. + +/** + * @package local_kaltura + * @author Remote-Learner.net Inc + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + * @copyright (C) 2014 Remote Learner.net Inc http://www.remote-learner.net + */ + +defined('MOODLE_INTERNAL') || die; + +require_once($CFG->libdir.'/formslib.php'); +/** + * Download Kaltura logs form class. + */ +class local_kaltura_download_log_form extends moodleform { + /** + * This function defines the elements on the form. + */ + public function definition() { + $mform =& $this->_form; + + $mform->addElement('header', 'setup', get_string('options')); + $mform->addElement('date_selector', 'logs_start_time', get_string('download_log_range', 'local_kaltura')); + + $buttonarray=array(); + $buttonarray[] =& $mform->createElement('submit', 'submitbutton', get_string('download')); + $buttonarray[] =& $mform->createElement('submit', 'cancel', get_string('cancel')); + $buttonarray[] =& $mform->createElement('submit', 'deletelogs', get_string('delete_logs', 'local_kaltura')); + $mform->addGroup($buttonarray, 'buttonar', '', array(' '), false); + } +} \ No newline at end of file diff --git a/local/kaltura/lang/en/local_kaltura.php b/local/kaltura/lang/en/local_kaltura.php new file mode 100644 index 0000000000000..32c1d7aba9e64 --- /dev/null +++ b/local/kaltura/lang/en/local_kaltura.php @@ -0,0 +1,64 @@ +. + +/** + * Kaltura language file. + * + * @package local_kaltura + * @author Remote-Learner.net Inc + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + * @copyright (C) 2014 Remote Learner.net Inc http://www.remote-learner.net + */ + +$string['admin_secret'] = 'Admin secret'; +$string['admin_secret_desc'] = 'Enter the admin secret for your account.'; +$string['cancelbtn'] = 'Cancel'; +$string['categories_created'] = 'Number of categories created:'; +$string['delete_logs'] = 'Purge all logs'; +$string['download_logs_title'] = 'Download logs'; +$string['download_log_range'] = 'Download logs newer than selected date'; +$string['entries_migrated'] = 'The number of entries migrated:'; +$string['insertbtn'] = 'Embed media'; +$string['invalid_url'] = 'Invalid URL'; +$string['kaf_configuration_hdr'] = 'KAF configuration'; +$string['kaf_uri'] = 'KAF URI'; +$string['kaf_uri_desc'] = 'Type in the server URI of your KAF instance.'; +$string['kaltura_course_reports'] = 'Kaltura Course Media Reports'; +$string['kaltura:download_trace_logs'] = 'Download Kaltura trace logs'; +$string['kaltura:migrate_data'] = 'Migrate Kaltura Data'; +$string['migration_cannot_connect'] = 'Error connecting to Kaltura.'; +$string['migration_complete_redirect'] = 'The migration has been completed.'; +$string['migration_has_stopped'] = 'Due to the large amounts of data only a portion of the migration was completed. The last known location has been saved and you may continue migrating your data.'; +$string['migration_header'] = 'Data migration'; +$string['migration_kaf_url_not_set'] = 'The KAF URI is not set. Please enter a KAF URI before starting the migration'; +$string['migration_not_started'] = 'Click the start/continue button to start the migration.'; +$string['migration_notice'] = 'Data from your account needs to be migrated in order to be used with this version of the plug-ins. Go to the
    Migration page to begin the process.'; +$string['migration_root_category_not_set'] = 'Unable to determine the root category id.'; +$string['migration_profile_id_not_set'] = 'Unable to determine the metadata profile id.'; +$string['migration_select_a_category'] = 'Select a KAF category to migrate to'; +$string['migration_start_continue'] = 'Start / Continue'; +$string['migration_start_over_redirect'] = 'The migration statistics and last known location has been restarted.'; +$string['migration_start_time'] = 'The migration was originally started at:'; +$string['missing_required_info'] = 'Warning: the Partner id or Admin secret is empty. The Kaltura plug-ins will not work.'; +$string['no_records'] = 'No records returned.'; +$string['original_kafcategory'] = 'The KAF category selected for migration.'; +$string['partner_id'] = 'Partner id'; +$string['partner_id_desc'] = 'Enter the partner id for your account.'; +$string['pluginname'] = 'Kaltura package libraries'; +$string['records_deleted'] = 'All Kaltura log records were deleted.'; +$string['server_uri'] = 'Server URI'; +$string['server_uri_desc'] = 'Type in the server URI you want to connect to. Otherwise just type in the default settings (This setting is used for migration purposes).'; +$string['startover'] = 'Restart migration'; +$string['trace_log'] = 'Enable trace logging'; +$string['trace_log_desc'] = 'If enabled, all requests and responses to and from Kaltura are logged. These logs can be used by Kaltura support to diagnose any problems encountered. Enabling this setting may affect Moodle performance. You may download a CSV file of the logs from here.'; diff --git a/local/kaltura/lib.php b/local/kaltura/lib.php new file mode 100644 index 0000000000000..4778a2c55e957 --- /dev/null +++ b/local/kaltura/lib.php @@ -0,0 +1,24 @@ +. + +/** + * Kaltura library file. + * + * @package local_kaltura + * @author Remote-Learner.net Inc + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + * @copyright (C) 2014 Remote Learner.net Inc http://www.remote-learner.net + */ \ No newline at end of file diff --git a/local/kaltura/locallib.php b/local/kaltura/locallib.php new file mode 100644 index 0000000000000..555188bed88f3 --- /dev/null +++ b/local/kaltura/locallib.php @@ -0,0 +1,715 @@ +. + +/** + * Kaltura local library of functions. + * + * @package local_kaltura + * @author Remote-Learner.net Inc + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + * @copyright (C) 2014 Remote Learner.net Inc http://www.remote-learner.net + */ + +if (!defined('MOODLE_INTERNAL')) { + die('Direct access to this script is forbidden.'); +} + +require_once($CFG->dirroot.'/mod/lti/locallib.php'); + +define('KALTURA_PLUGIN_NAME', 'local_kaltura'); +define('KALTURA_DEFAULT_URI', 'www.kaltura.com'); +define('KALTURA_REPORT_DEFAULT_URI', 'http://apps.kaltura.com/hosted_pages'); +define('KAF_MYMEDIA_MODULE', 'mymedia'); +define('KAF_MEDIAGALLERY_MODULE', 'coursegallery'); +define('KAF_BROWSE_EMBED_MODULE', 'browseembed'); +define('KAF_MYMEDIA_ENDPOINT', 'hosted/index/my-media'); +define('KAF_MEDIAGALLERY_ENDPOINT', 'hosted/index/course-gallery'); +define('KAF_BROWSE_EMBED_ENDPOINT', 'browseandembed/index/browseandembed'); +define('KALTURA_LOG_REQUEST', 'REQ'); +define('KALTURA_LOG_RESPONSE', 'RES'); +define('KALTURA_PANEL_HEIGHT', 580); +define('KALTURA_PANEL_WIDTH', 1100); +define('KALTURA_LTI_LEARNER_ROLE', 'Learner'); +define('KALTURA_LTI_INSTRUCTOR_ROLE', 'Instructor'); +define('KALTURA_LTI_ADMIN_ROLE', 'urn:lti:sysrole:ims/lis/Administrator'); +define('KALTURA_REPO_NAME', 'kaltura'); +// For KALTURA_URI_TOKEN +// 1. Do not use characters that are used in regular expressions like {}[]() +// 2. Moodle cleans up urls that look like relative links into complete urls by inserting $CFG->wwwroot +define('KALTURA_URI_TOKEN', 'kaltura-kaf-uri.com'); + +/** + * This function validates whether a requested KAF module is valid. + * @param string $module The name of the module. + * @return bool True if valid, otherwise false. + */ +function local_kaltura_validate_kaf_module_request($module) { + $valid = false; + + switch ($module) { + case KAF_MYMEDIA_MODULE: + $valid = true; + break; + case KAF_MEDIAGALLERY_MODULE: + $valid = true; + break; + case KAF_BROWSE_EMBED_MODULE: + $valid = true; + break; + } + return $valid; +} + +/** + * This function calls @see lti_get_launch_container() to an LTI launch container to display the content. + * @param bool $withblocks Set to true to dislay embed content with Moodle blocks. Otherwise set to false. + * @return int Container value + */ +function local_kaltura_get_lti_launch_container($withblocks = true) { + $lti = new stdClass(); + $container = 0; + + if (!empty($withblocks)) { + $lti->launchcontainer = LTI_LAUNCH_CONTAINER_EMBED; + $container = lti_get_launch_container($lti, array('launchcontainer' => LTI_LAUNCH_CONTAINER_EMBED)); + } else { + $lti->launchcontainer = LTI_LAUNCH_CONTAINER_EMBED_NO_BLOCKS; + $container = lti_get_launch_container($lti, array('launchcontainer' => LTI_LAUNCH_CONTAINER_EMBED_NO_BLOCKS)); + } + + return $container; +} + +/** + * This function validates the parameters to see if all of the requirements for the module are met. + * @param array $params An array of parameters + * @return bool true if valid, otherwise false + */ +function local_kaltura_validate_mymedia_required_params($params) { + $valid = true; + + $expectedkeys = array( + // The activity instance id + 'id' => '', + // The KAL module requested + 'module' => '', + 'course' => new stdClass(), + 'title' => '', + 'width' => '', + 'height' => '', + 'cmid' => '', + 'custom_publishdata' => '', + ); + + // Get keys that reside in both parameters and expectedkeys + $matchingkeys = array_intersect_key($params, $expectedkeys); + + // The number of keys in the result should equal the number of expectedkeys + if (count($expectedkeys) != count($matchingkeys)) { + return false; + } + + $invalid = !is_numeric($params['id']) || !is_numeric($params['width']) || !is_numeric($params['height']) || !is_numeric($params['cmid']) || !is_object($params['course']); + + if ($invalid) { + return false; + } + + return true; +} + +/** + * This function validates the parameters to see if all of the requirements for the module are met. + * @param array $params An array of parameters + * @return bool true if valid, otherwise false + */ +function local_kaltura_validate_mediagallery_required_params($params) { + $valid = true; + + $expectedkeys = array( + // The activity instance id + 'id' => '', + // The KAL module requested + 'module' => '', + 'course' => new stdClass(), + 'title' => '', + 'width' => '', + 'height' => '', + 'cmid' => '', + 'custom_publishdata' => '', + ); + + // Get keys that reside in both parameters and expectedkeys + $matchingkeys = array_intersect_key($params, $expectedkeys); + + // The number of keys in the result should equal the number of expectedkeys + if (count($expectedkeys) != count($matchingkeys)) { + return false; + } + + $invalid = !is_numeric($params['id']) || !is_numeric($params['width']) || !is_numeric($params['height']) || !is_numeric($params['cmid']) || !is_object($params['course']); + + if ($invalid) { + return false; + } + + return true; +} + +/** + * This function validates the parameters to see if all of the requirements for the module are met. + * @param array $params An array of parameters + * @return bool true if valid, otherwise false + */ +function local_kaltura_validate_browseembed_required_params($params) { + $valid = true; + + $expectedkeys = array( + // The activity instance id + 'id' => '', + // The KAL module requested + 'module' => '', + 'course' => new stdClass(), + 'title' => '', + 'width' => '', + 'height' => '', + 'cmid' => '', + 'custom_publishdata' => '', + ); + + // Get keys that reside in both parameters and expectedkeys + $matchingkeys = array_intersect_key($params, $expectedkeys); + + // The number of keys in the result should equal the number of expectedkeys + if (count($expectedkeys) != count($matchingkeys)) { + return false; + } + + $invalid = !is_numeric($params['id']) || !is_numeric($params['width']) || !is_numeric($params['height']) || !is_numeric($params['cmid']) || !is_object($params['course']); + + if ($invalid) { + return false; + } + + return true; +} + +/** + * This function returns the endpoint URL belonging to the module that was requested. + * @param string $module The name of the module being requested. + * @param string Part of the URL that makes up the endpoint pertaining to the module requested. + * @return string Part of the URL for the end point designated for the module. Otherwise an empty string. + */ +function local_kaltura_get_endpoint($module) { + switch ($module) { + case KAF_MYMEDIA_MODULE: + return KAF_MYMEDIA_ENDPOINT; + break; + case KAF_MEDIAGALLERY_MODULE: + return KAF_MEDIAGALLERY_ENDPOINT; + break; + case KAF_BROWSE_EMBED_MODULE: + return KAF_BROWSE_EMBED_ENDPOINT; + break; + } + return ''; +} + +/** + * This function replaces the KALTURA_TOKEN_URI in a source URL with KAF URI domain. + * @param string $url A url which need the kaf_uri added. + * @return string Returns url with added KAF URI domain. + */ +function local_kaltura_add_kaf_uri_token($url) { + $configsettings = local_kaltura_get_config(); + // For records that have been migrated from old kaf uri to token format by search and replace. + if (preg_match('/https?:\/\/'.KALTURA_URI_TOKEN.'/', $url)) { + $url = preg_replace('/https?:\/\/'.KALTURA_URI_TOKEN.'/', $configsettings->kaf_uri, $url); + } + return $url; +} + +/** + * This function formats and returns an object that will be passed to mod_lti locallib.php functions. + * @param array $ltirequest An array of parameters to be converted into a properly formatted mod_lti instance. + * @return object Returns an object that meets the requirements for use with mod_lti locallib.php functions. + */ +function local_kaltura_format_lti_instance_object($ltirequest) { + $configsettings = local_kaltura_get_config(); + + // Convert request parameters into mod_lti friendly format for consumption. + $lti = new stdClass(); + $lti->course = $ltirequest['course']->id; + $lti->id = $ltirequest['id']; + $lti->name = $ltirequest['title']; + $lti->intro = isset($ltirequest['intro']) ? $ltirequest['intro'] : ''; + $lti->instructorchoicesendname = LTI_SETTING_ALWAYS; + $lti->instructorchoicesendemailaddr = LTI_SETTING_ALWAYS; + $lti->custom_publishdata = ''; + $lti->instructorcustomparameters = ''; + $lti->instructorchoiceacceptgrades = LTI_SETTING_NEVER; + $lti->instructorchoiceallowroster = LTI_SETTING_NEVER; + $lti->resourcekey = $configsettings->partner_id; + $lti->password = $configsettings->adminsecret; + // The Kaltura tool URL includes the account partner id. + $newuri = $configsettings->kaf_uri; + $lti->toolurl = $newuri; + if (!preg_match('/\/$/',$newuri)) { + $lti->toolurl .= '/'; + } + $lti->toolurl .= local_kaltura_get_endpoint($ltirequest['module']); + // Do not force SSL. At the module level. + $lti->forcessl = 0; + $lti->cmid = $ltirequest['cmid']; + + // Check if a source URL was passed. This means that a plug-in has requested to view a media entry and not a KAF interface. + if (!isset($ltirequest['source']) || empty($ltirequest['source'])) { + // If the Moodle site is configured to use HTTPS then this property will be used. + $lti->securetool = 'https://'.local_kaltura_format_uri(trim($lti->toolurl)); + $lti->toolurl = 'http://'.local_kaltura_format_uri(trim($lti->toolurl)); + } else { + $url = local_kaltura_format_uri($ltirequest['source']); + // If the Moodle site is configured to use HTTPS then this property will be used. + $lti->securetool = 'https://'.trim($url); + $lti->toolurl = 'http://'.trim($url); + } + + return $lti; +} + +/** + * This function formats an array that is passed to mod_lti locallib.php functions. + * @param object $lti An object returned from @see local_kaltura_format_lti_instance_object(). + * @param bool $withblocks Set to true to display blocks. Otherwise false. + * @return array An array formatted for use by mod_lti locallib.php functions. + */ +function local_kaltura_format_typeconfig($lti, $withblocks = true) { + $typeconfig = array(); + $typeconfig['sendname'] = $lti->instructorchoicesendname; + $typeconfig['sendemailaddr'] = $lti->instructorchoicesendemailaddr; + $typeconfig['customparameters'] = $lti->instructorcustomparameters; + $typeconfig['acceptgrades'] = $lti->instructorchoiceacceptgrades; + $typeconfig['allowroster'] = $lti->instructorchoiceallowroster; + $typeconfig['launchcontainer'] = local_kaltura_get_lti_launch_container($withblocks); + return $typeconfig; +} + +/** + * This function is based off of the code from @see lti_view(). + * @param string $endpoint The URL to access the KAF LTI tool. + * @param string $params The signed parameters returned by @see lti_sign_parameters(). + */ +function local_kaltura_strip_querystring($endpoint, $params) { + $endpointurl = new moodle_url($endpoint); + $endpointparams = $endpointurl->params(); + + // Strip querystring params in endpoint url from $parms to avoid duplication. + if (!empty($endpointparams) && !empty($parms)) { + foreach (array_keys($endpointparams) as $paramname) { + if (isset($parms[$paramname])) { + unset($parms[$paramname]); + } + } + } +} + +/** + * This function converts an LTI request object into a properly formatted LTI request that can be consumed by Moodle's LTI local library. + * The function is modeled closely after @see lti_view(). The code was refactored because the original function relied too heavily on + * there being an LTI tool defined in the LTI activity instance table. + * @param array $ltirequest An array with parameters specifying some required information for an LTI launch. + * @param array $withblocks True if Moodle blocks are to be included on the page else false. + * @return string Returns HTML required to initiate an LTI launch. + */ +function local_kaltura_request_lti_launch($ltirequest, $withblocks = true) { + global $CFG, $USER; + + $requestparams = array(); + + $lti = local_kaltura_format_lti_instance_object($ltirequest); + + $typeconfig = local_kaltura_format_typeconfig($lti, $withblocks); + + // This line was taken from @see lti_add_type. + // Create a salt value to be used for signing passed data to extension services + // The outcome service uses the service salt on the instance. This can be used + // for communication with services not related to a specific LTI instance. + $lti->servicesalt = uniqid('', true); + + // If SSL is forced, use HTTPS. + $endpoint = $lti->toolurl; + if (lti_request_is_using_ssl()) { + $endpoint = $lti->securetool; + } + + $requestparams = lti_build_request((object) $lti, $typeconfig, $ltirequest['course']); + + // Moodle by default uses the Moodle user id. Overriding this parameter to user the Moodle username. + $requestparams['user_id'] = $USER->username; + + // This block of code is loosly based off code from @see lti_view(). + $urlparts = parse_url($CFG->wwwroot); + $requestparams['tool_consumer_instance_guid'] = $urlparts['host']; + + $returnurlparams['unsigned'] = '0'; + + // Add the return URL. We send the launch container along to help us avoid frames-within-frames when the user returns. + $url = new moodle_url('/local/kaltura/service.php', $returnurlparams); + $requestparams['launch_presentation_return_url'] = $url->out(false); + + $serviceurl = new moodle_url('/local/kaltura/service.php'); + $requestparams['lis_outcome_service_url'] = $serviceurl->out(false); + + // Add custom parameters + $requestparams['custom_publishdata'] = local_kaltura_get_kaf_publishing_data(); + + // Specific settings for video presentation requests. + if (isset($ltirequest['custom_disable_add_new'])) { + $requestparams['custom_disable_add_new'] = $ltirequest['custom_disable_add_new']; + } + + if (isset($ltirequest['custom_filter_type'])) { + $requestparams['custom_filter_type'] = $ltirequest['custom_filter_type']; + } + + $params = lti_sign_parameters($requestparams, $endpoint, 'POST', $lti->resourcekey, $lti->password); + + local_kaltura_strip_querystring($endpoint, $params); + + $debuglaunch = 0; + + $content = lti_post_launch_html($params, $endpoint, $debuglaunch); + + // Check if debugging is enabled. + $enablelogging = get_config(KALTURA_PLUGIN_NAME, 'enable_logging'); + if (!empty($enablelogging)) { + local_kaltura_log_data($ltirequest['module'], $endpoint, $params, true); + } + + return $content; +} + +/** + * Writes data to the log table. + * @param string $module The module where the request originated from. + * @param string $endpoint The URL the request went out to. + * @param array $data All parameters used to created the request. + * @param bool $request Set to true if this is a request. Set to false if it is a response. + * @return bool True if the log entry was created. Otherwise false. + */ +function local_kaltura_log_data($module, $endpoint, $data, $request = true) { + global $DB; + + if (!is_array($data)) { + return false; + } + + $record = new stdClass(); + $record->type = KALTURA_LOG_RESPONSE; + + // If this is a request being sent out, validate the module and make sure it is a supported module. + if (!empty($request)) { + // Validate whether the module is one that is supported. + if (!local_kaltura_validate_kaf_module_request($module)) { + return false; + } + + $record->type = KALTURA_LOG_REQUEST; + } + + $record->module = $module; + $record->timecreated = time(); + $record->endpoint = $endpoint; + $record->data = serialize($data); + $DB->insert_record('local_kaltura_log', $record); + + return true; +} + +/** + * This functions removes the HTTP protocol and the trailing slash from a URI. + * @param string $uri The URI to format. + * @return string The formatted URI with the protocol and trailing slash removed. + */ +function local_kaltura_format_uri($uri) { + $newuri = str_replace('https://', '', $uri); + $newuri = str_replace('http://', '', $newuri); + $newuri = str_replace('www.', '', $newuri); + $newuri = rtrim($newuri, '/'); + return $newuri; +} + +/** + * This function creates a JSON string of the courses the user is enrolled in and the LTI roles the user has in the course. + * The JSON string is cached in the user's session global for efficiency purposes. + * @return string A JSON data structure outlining the user's LTI roles in all of their enroled courses. + */ +function local_kaltura_get_kaf_publishing_data() { + global $USER, $SITE; + + $role = is_siteadmin($USER->id) ? KALTURA_LTI_ADMIN_ROLE : KALTURA_LTI_INSTRUCTOR_ROLE; + $json = new stdClass(); + $json->courses = array(); + $hascap = false; + + // If the user is not an admin then retrieve all of the user's enroled courses. + if (KALTURA_LTI_ADMIN_ROLE != $role) { + $courses = enrol_get_users_courses($USER->id, true, 'id,fullname', 'fullname ASC'); + } else { + // Calling refactored code that allows for a limit on the number of courses returned. + $courses = local_kaltura_get_user_capability_course('moodle/course:manageactivities', $USER->id, true, 'id,fullname', 'fullname ASC'); + } + + foreach ($courses as $course) { + if ($course->id === $SITE->id) { + // Don't want to include the site id in this list + continue; + } + + if (KALTURA_LTI_ADMIN_ROLE != $role) { + // Check if the user has the manage capability in the course. + $hascap = has_capability('moodle/course:manageactivities', context_course::instance($course->id), $USER->id, false); + $role = $hascap ? KALTURA_LTI_INSTRUCTOR_ROLE : KALTURA_LTI_LEARNER_ROLE; + } + + // The properties must be nameed "courseId", "courseName" and "roles". + $data = new stdClass(); + $data->courseId = $course->id; + $data->courseName = $course->fullname; + $data->roles = $role; + $json->courses[$course->id] = $data; + } + + // Return an array with no pre-defined keys to structure the JSON the way Kaltura needs it to be. + $json->courses = array_values($json->courses); + + return json_encode($json); +} + +/** + * NOTE: This function is refactored from @see get_user_capability_course() from accesslib.php. The difference is the ability to + * limit the number of records returned. + * + * This function gets the list of courses that this user has a particular capability in. + * It is still not very efficient. + * + * @param string $capability Capability in question. + * @param int $userid User ID or null for current user. + * @param bool $doanything True if 'doanything' is permitted (default). + * @param string $fieldsexceptid Leave blank if you only need 'id' in the course records; + * otherwise use a comma-separated list of the fields you require, not including id. + * @param string $orderby If set, use a comma-separated list of fields from course + * table with sql modifiers (DESC) if needed. + * @param string $limit Limit the set of data returned. + * @return array Array of courses, may have zero entries. Or false if query failed. + */ +function local_kaltura_get_user_capability_course($capability, $userid = null, $doanything = true, $fieldsexceptid = '', $orderby = '', $limit = 200) { + global $DB; + + // Convert fields list and ordering. + $fieldlist = ''; + if ($fieldsexceptid) { + $fields = explode(',', $fieldsexceptid); + foreach($fields as $field) { + $fieldlist .= ',c.'.$field; + } + } + if ($orderby) { + $fields = explode(',', $orderby); + $orderby = ''; + foreach($fields as $field) { + if ($orderby) { + $orderby .= ','; + } + $orderby .= 'c.'.$field; + } + $orderby = 'ORDER BY '.$orderby; + } + + // Obtain a list of everything relevant about all courses including context. + // Note the result can be used directly as a context (we are going to), the course + // fields are just appended. + + $contextpreload = context_helper::get_preload_record_columns_sql('x'); + + $courses = array(); + $sql = "SELECT c.id $fieldlist, $contextpreload + FROM {course} c + JOIN {context} x ON (c.id=x.instanceid + AND x.contextlevel=".CONTEXT_COURSE.") + $orderby"; + $rs = $DB->get_recordset_sql($sql, null, 0, $limit); + + // Check capability for each course in turn. + foreach ($rs as $course) { + context_helper::preload_from_record($course); + $context = context_course::instance($course->id); + if (has_capability($capability, $context, $userid, $doanything)) { + // We've got the capability. Make the record look like a course record + // and store it + $courses[] = $course; + } + } + $rs->close(); + return empty($courses) ? array() : $courses; +} + +/** + * This function gets the local configuration and sanitizes the settings. + * @return object Returns object containing configuration settings for kaltura local plugin. + */ +function local_kaltura_get_config() { + $configsettings = get_config(KALTURA_PLUGIN_NAME); + if (empty($configsettings->kaf_uri)) { + $configsettings->kaf_uri = ""; + } + // If a https url is needed for kaf_uri it should be entered into the kaf_uri setting as https://. + if (!empty($configsettings->kaf_uri) && !preg_match('#^https?://#', $configsettings->kaf_uri)) { + $configsettings->kaf_uri = 'http://'.$configsettings->kaf_uri; + } + return $configsettings; +} + +/** + * This functions checks if a URL contains the host name that is configiured for the plug-in. + * @param string $url The URL to validate. + * @return bool Returns true if the URL contains the configured host name. Otherwise false. + */ +function local_kaltura_url_contains_configured_hostname($url) { + $configuration = local_kaltura_get_config(); + $configuri = local_kaltura_format_uri($configuration->kaf_uri); + + if (empty($configuri)) { + return false; + } + $position = strpos($url, $configuri); + if (false === $position) { + return false; + } + + return true; +} + +/** + * This function returns the URL parameter with a protocol prefixed, if non was detected. http:// is used by default if no protocol is found. + * @param string $url The URL to verify. + * @return string Returns the URL with the protocol. An empty string is returned in the case of an exception being thrown. + */ +function local_kaltura_add_protocol_to_url($url) { + $newurl = ''; + if (0 === strpos($url, 'https://')) { + $newurl = $url; + } else if (0 === strpos($url, 'http://')) { + $newurl = $url; + } else { + $newurl = 'http://'.$url; + } + + try { + $newurl = validate_param($newurl, PARAM_URL); + } catch (invalid_parameter_exception $e) { + return ''; + } + + return $newurl; +} + +/** + * This function searlizes an object or array and base 64 encodes it for storage into a table. + * @param array|object $object An object or array. + * @return string A base 64 encoded string of the parameter. + */ +function local_kaltura_encode_object_for_storage($object) { + // Check if the parameter either an object or array of if it's empty. + $data = $object; + if (!is_array($data)) { + $data = (array) $data; + } + + if (empty($data) || (!is_array($object) && !is_object($object))) { + return ''; + } + + return base64_encode(serialize($object)); +} + +/** + * This function base 64 decodes and unsearlizes an object. + * @param string $object A base 64 encoded string. + * @return array|object An array or object. + */ +function local_kaltura_decode_object_for_storage($object) { + // Check if the parameter is empty. + if (empty($object)) { + return ''; + } + + return unserialize(base64_decode($object)); +} + +/** + * This function takes a KalturaMediaEntry or KalturaDataEntry object and converts it into a Moodle metadata object. + * @param KalturaMediaEntry $object A KalturaMediaEntry object + * @return object|bool A slimed down version of the KalturaMediaEntry object, with slightly different object property names. Or false if an error was found. + */ +function local_kaltura_convert_kaltura_base_entry_object($object) { + $metadata = new stdClass; + + if ($object instanceof KalturaMediaEntry) { + + $metadata->url = ''; + $metadata->dataurl = $object->dataUrl; + $metadata->width = $object->width; + $metadata->height = $object->height; + $metadata->entryid = $object->id; + $metadata->title = $object->name; + $metadata->thumbnailurl = $object->thumbnailUrl; + $metadata->duration = $object->duration; + $metadata->description = $object->description; + $metadata->createdat = $object->createdAt; + $metadata->owner = $object->creatorId; + $metadata->tags = $object->tags; + $metadata->showtitle = 'on'; + $metadata->showdescription = 'on'; + $metadata->showowner = 'on'; + $metadata->player = ''; + $metadata->size = ''; + } else if ($object instanceof KalturaDataEntry) { + + $metadata->url = ''; + $metadata->dataurl = ''; + $metadata->url = ''; + $metadata->width = 0; + $metadata->height = 0; + $metadata->entryid = $object->id; + $metadata->title = $object->name; + $metadata->thumbnailurl = $object->thumbnailUrl; + $metadata->duration = 0; + $metadata->description = $object->description; + $metadata->createdat = $object->createdAt; + $metadata->owner = $object->creatorId; + $metadata->tags = $object->tags; + $metadata->showtitle = 'on'; + $metadata->showdescription = 'on'; + $metadata->showowner = 'on'; + $metadata->player = ''; + $metadata->size = ''; + } else { + $metadata = false; + } + + return $metadata; +} \ No newline at end of file diff --git a/local/kaltura/migration.php b/local/kaltura/migration.php new file mode 100644 index 0000000000000..0d4cc51b72f86 --- /dev/null +++ b/local/kaltura/migration.php @@ -0,0 +1,114 @@ +. + +/** + * Migration page. + * + * @package local_kaltura + * @author Remote-Learner.net Inc + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + * @copyright (C) 2014 Remote Learner.net Inc http://www.remote-learner.net + */ + +require_once('../../config.php'); +require_once($CFG->dirroot.'/local/kaltura/migration_form.php'); +require_once('locallib.php'); +require_once('API/KalturaClient.php'); +require_once($CFG->libdir.'/xmldb/xmldb_object.php'); +require_once($CFG->libdir.'/xmldb/xmldb_table.php'); +require_once('migrationlib.php'); + +$url = new moodle_url('/local/kaltura/migration.php'); +$context = context_system::instance(); +$heading = get_string('migration_header', 'local_kaltura'); +$site = get_site(); + +$PAGE->navbar->add(get_string('administrationsite')); +$PAGE->navbar->add(get_string('plugins', 'admin')); +$PAGE->navbar->add(get_string('localplugins')); +$PAGE->navbar->add(get_string('pluginname', 'local_kaltura'), new moodle_url('/admin/settings.php', array('section' => 'local_kaltura'))); +$PAGE->navbar->add(get_string('migration_header', 'local_kaltura')); + +$PAGE->set_url($url); +$PAGE->set_context($context); + +$PAGE->set_pagelayout('standard'); +$PAGE->set_pagetype('local-kaltura-migration'); +$PAGE->set_title($heading); +$PAGE->set_heading($site->fullname); + +require_login(null, false); + +require_capability('local/kaltura:migrate_data', $context); + +$url = new moodle_url('/admin/settings.php', array('section' => 'local_kaltura')); + +$form = new local_kaltura_migration_form(); +$redirectmessage = ''; + +if ($data = $form->get_data()) { + // User hit cancel. Redirect them back to the settings page. + if (isset($data->cancel)) { + redirect($url); + } + + require_sesskey(); + $migrationstats = new local_kaltura_migration_progress(); + + // User hit submit button. Check for records since the configured date. + if (isset($data->submitbutton)) { + // Set the migration start time and initialize the KAF root category id. + if (0 == local_kaltura_migration_progress::get_migrationstarted()) { + local_kaltura_migration_progress::init_migrationstarted(); + local_kaltura_migration_progress::set_kafcategoryrootid($data->kafcategory); + } + + // An array mapping of old categories to new categories. + $cachedcategories = array(); + + // Migrate entries that belong to categories under the old rood category. + list($categoryentries, $cachedcategories) = local_kaltura_move_entries_to_kaf_category_tree($data->kafcategory, 1); + // Migrate entries that are associated with the old profile id and contain metadata. + $metadataentries = local_kaltura_move_metadata_entries_to_kaf_category_tree($data->kafcategory, 1); + $redirectmessage = get_string('migration_has_stopped', 'local_kaltura'); + + // Migrate video presentation entries. + local_kaltura_migrate_video_presentation_entries($data->kafcategory, $cachedcategories); + + // Update the Kaltura activities. + local_kaltura_update_activities(); + + // If both variables are null, then there is nother more to migrate. + if (is_null($categoryentries) && is_null($metadataentries)) { + // Hide migration is needed message on settings page. + set_config('migration_yes', 0, KALTURA_PLUGIN_NAME); + $redirectmessage = get_string('migration_complete_redirect', 'local_kaltura'); + } + } else if (isset($data->startover)) { + local_kaltura_migration_progress::reset_all(); + $redirectmessage = get_string('migration_start_over_redirect', 'local_kaltura'); + } + + $migrationurl = new moodle_url('/local/kaltura/migration.php'); + redirect($migrationurl, $redirectmessage, 5); +} + +local_kaltura_retrieve_repository_settings(); + +echo $OUTPUT->header(); +echo $OUTPUT->heading(get_string('migration_header', 'local_kaltura')); +$form->display(); +echo $OUTPUT->footer(); diff --git a/local/kaltura/migration_form.php b/local/kaltura/migration_form.php new file mode 100644 index 0000000000000..c12ec9193908f --- /dev/null +++ b/local/kaltura/migration_form.php @@ -0,0 +1,77 @@ +. + +/** + * Migrate data form. + * + * @package local_kaltura + * @author Remote-Learner.net Inc + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + * @copyright (C) 2014 Remote Learner.net Inc http://www.remote-learner.net + */ + +defined('MOODLE_INTERNAL') || die; + +require_once($CFG->libdir.'/formslib.php'); + +/** + * Download Kaltura logs form class. + */ +class local_kaltura_migration_form extends moodleform { + /** + * This function defines the elements on the form. + */ + public function definition() { + $mform =& $this->_form; + + $categories = local_kaltura_get_categories(); + $migrationstats = new local_kaltura_migration_progress(); + + $mform->addElement('header', 'setup', get_string('options')); + + // If was never started, print a status message, otherwise print the date the migration originally started. + $notstarted = get_string('migration_not_started', 'local_kaltura'); + $startedtimestamp = local_kaltura_migration_progress::get_migrationstarted(); + $datestarted = userdate($startedtimestamp); + $message = empty($startedtimestamp) ? $notstarted : $datestarted; + + // Print more stats on the current state of the migration. + $mform->addElement('static', 'migration_start_time', get_string('migration_start_time', 'local_kaltura'), $message); + $mform->addElement('static', 'entries_migrated', get_string('entries_migrated', 'local_kaltura'), local_kaltura_migration_progress::get_entriesmigrated()); + $mform->addElement('static', 'categories created', get_string('categories_created', 'local_kaltura'), local_kaltura_migration_progress::get_categoriescreated()); + + $buttonarray = array(); + + $mform->addElement('select', 'kafcategory', get_string('migration_select_a_category', 'local_kaltura'), $categories); + + $catid = local_kaltura_migration_progress::get_kafcategoryrootid(); + + // If the migration was started perviously, then prevent the user from chaning the migration category by disabling the drop down, but setting the default value. + $migrationstarted = local_kaltura_migration_progress::get_migrationstarted(); + if (!empty($migrationstarted) && !empty($catid) && isset($categories[$catid])) { + $mform->addElement('hidden', 'disabledropdown', $catid); + $mform->setType('disabledropdown', PARAM_INT); + + $mform->setDefault('kafcategory', $catid); + $mform->disabledIf('kafcategory', 'disabledropdown', 'eq', $catid); + } + + $buttonarray[] =& $mform->createElement('submit', 'submitbutton', get_string('migration_start_continue', 'local_kaltura')); + $buttonarray[] =& $mform->createElement('submit', 'startover', get_string('startover', 'local_kaltura')); + $buttonarray[] =& $mform->createElement('submit', 'cancel', get_string('back')); + $mform->addGroup($buttonarray, 'buttonar', '', array(' '), false); + } +} diff --git a/local/kaltura/migrationlib.php b/local/kaltura/migrationlib.php new file mode 100644 index 0000000000000..9410f20d79d05 --- /dev/null +++ b/local/kaltura/migrationlib.php @@ -0,0 +1,1067 @@ +. + +/** + * Kaltura migration functions. The migration consists of two parts. The first part is retrieving all Kaltura media entries that were created anytime before + * the current date; associate those entries to a different category structure used by the KAF instance. The second part is to look at the metadata for the + * Kaltura entry and associate the entry to a category structure used by the KAF instance. Some Kaltura entries may have been uploaded but never used within + * a Moodle course, so this is the reason why we must initially retrieve all entries by created date and not by Kaltura category . + * + * @package local_kaltura + * @author Remote-Learner.net Inc + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + * @copyright (C) 2014 Remote Learner.net Inc http://www.remote-learner.net + */ + +if (!defined('MOODLE_INTERNAL')) { + die('Direct access to this script is forbidden.'); +} + +/* This constant is used in the recursive functions as a hard stop flag. The recursive functions will not go any deeper than this value. */ +define('KALTURA_MIGRATION_HARD_STOP', 5); +/* Constants used for padding height and witch values when migrating kaltura entries for video resource, presentation and media assignment. */ +define('KALTURA_MIGRATION_HEIGHT_PADDING', 100); +define('KALTURA_MIGRATION_WIDTH_PADDING', 50); +define('KALTURA_MIGRATION_DEFAULT_HEIGHT', 285); +define('KALTURA_MIGRATION_DEFAULT_WIDTH', 400); + +/** + * This function creates a connection to Kaltura. + * @return KalturaConfiguration A Kaltura client object. + */ +function local_kaltura_get_kaltura_client() { + global $USER; + + static $client = null; + + if (!is_null($client)) { + return $client; + } + + $configsettings = get_config(KALTURA_PLUGIN_NAME); + $config = new KalturaConfiguration($configsettings->partner_id); + $client = new KalturaClient($config); + + try { + $ks = $client->generateSession($configsettings->adminsecret, $USER->id, KalturaSessionType::ADMIN, $configsettings->partner_id); + $client->setKs($ks); + } catch (Exception $ex) { + $url = new moodle_url('/admin/settings.php', array('section' => 'local_kaltura')); + notice(get_string('migration_cannot_connect', 'local_kaltura'), $url); + } + + return $client; +} + +/** + * This function validates that a root category and a profile id have set. The root category is then queried to find a category id. + */ +function local_kaltura_retrieve_repository_settings() { + $rootcategoryid = get_config(KALTURA_PLUGIN_NAME, 'migration_source_category'); + $metadataprofileid = get_config(KALTURA_PLUGIN_NAME, 'migration_metadata_profile_id'); + + // If the root category id configuration option is empty, try to retrieve the value from the repository config settings. + if (empty($rootcategoryid)) { + $rootcategoryid = get_config(KALTURA_REPO_NAME, 'rootcategory_id'); + + if (empty($rootcategoryid)) { + notice(get_string('migration_root_category_not_set', 'local_kaltura')); + } + + set_config('migration_source_category', $rootcategoryid, KALTURA_PLUGIN_NAME); + } + + // If the metdata profile id configuration option is empty, try to retrieve the value from the repository config settings. + if (empty($metadataprofileid)) { + $metadataprofileid = get_config(KALTURA_REPO_NAME, 'metadata_profile_id'); + + if (empty($metadataprofileid)) { + notice(get_string('migration_profile_id_not_set', 'local_kaltura')); + } + + set_config('migration_metadata_profile_id', $metadataprofileid, KALTURA_PLUGIN_NAME); + } +} + +/** + * This function returns an array of all of the Kaltura categories. + * + * @return array An array of Kaltura category names. + */ +function local_kaltura_get_categories() { + static $list = array(); + + $client = local_kaltura_get_kaltura_client(); + $filter = null; + $pager = null; + + if (empty($list)) { + // Get a list of Kaltura categories. + $result = $client->category->listAction($filter, $pager); + + if ($result instanceof KalturaCategoryListResponse && 0 < count($result->objects)) { + foreach ($result->objects as $category) { + $list[$category->id] = $category->name; + } + asort($list); + } + } + + return $list; +} + +/** + * This function retrieves all Kaltura entries that were created before a specified date; and moves the entries to the new KAF category location. + * @param int $targetparentcatid The root category id configured for the KAF instance. + * @param int $index The page number to return from the paged API output. + * @param int $numofentries The number of entries to return from the API with. + * @return array An array whose index is the Kaltura entry id and value is an array of Kaltura category ids. + */ +function local_kaltura_move_entries_to_kaf_category_tree($targetparentcatid, $index = 1, $numofentries = 100) { + // The timestamp used to retrieve Kaltura entries that were created by or before the date. + static $createdby = 0; + // Which page is currently being processed. + static $pageindex = 1; + // The Kaltura plug-in settings variables. + static $reposettings = null; + // An array whose id is Kaltura entry ids; and value is an array of Kaltura category ids the entry belongs to. + static $entries = null; + // An object whose properties are: id - the 'channels' category id, fullname - the full path of the category. + static $channelscategory = null; + // An array of cached old to new category mappings. array(old category id => new category id). + static $cachedcategories = array(); + // An array of categories that currently exist on Kaltura. This is used to quickly retrieve the name of the category via the category id. + // Ex. array(old category id => category name). + static $currentcategories = null; + static $stop = 0; + + if (is_null($currentcategories)) { + $currentcategories = local_kaltura_get_categories(); + } + + // Retrieve the repository settings. + if (is_null($reposettings)) { + $reposettings = get_config(KALTURA_PLUGIN_NAME); + } + + // Set the timestamp for Kaltura entries created before the created by value. + if (empty($createdby)) { + $time = local_kaltura_migration_progress::get_existingcategoryrun(); + $createdby = empty($time) ? time() : $time; + } + + $client = local_kaltura_get_kaltura_client(); + + // Set the channels category ID. + if (is_null($channelscategory)) { + $channelscategory = local_kaltura_get_channels_id($client, $targetparentcatid); + } + + $pageindex = $index; + + // Create a Kaltura base filter object. + $filter = new KalturaBaseEntryFilter(); + $filter->categoryAncestorIdIn = $reposettings->migration_source_category; + $filter->createdAtLessThanOrEqual = $createdby; + $filter->orderBy = KalturaBaseEntryOrderBy::CREATED_AT_DESC; + + // Set page size and the page index. + $pager = new KalturaFilterPager(); + $pager->pageSize = $numofentries; + $pager->pageIndex = $pageindex; + + // Retrieve the Kaltura entry objects. + $result = $client->baseEntry->listAction($filter, $pager); + + // If the request was successful and the number of entries returned was greater than zero, get the old category ids and assign the entries them to the new KAF categories. + if ($result instanceof KalturaBaseEntryListResponse) { + if (0 < count($result->objects)) { + // Populate the entries array with key: entry id and value: an array of category ids the entry belongs to. + $entries = local_kaltura_get_entry_categories($client, $reposettings->migration_source_category, $result->objects); + + // Iterate over the array of entries and check if the category the entry belongs to has also been created under the new target category. + $cachedcategories = local_kaltura_assign_entries_to_new_categories($client, $entries, $channelscategory, $cachedcategories, $currentcategories); + + $lastentry = end($result->objects); + local_kaltura_migration_progress::set_existingcategoryrun($lastentry->createdAt - 1); + } else { + return null; + } + } + + // Increment the page index. + $pageindex++; + $stop++; + + // Check if the hard stop condition has reached. + if (KALTURA_MIGRATION_HARD_STOP == $stop) { + return array($entries, $cachedcategories); + } + + // Recusive call to retrieve the next set of Kaltura entries. + return local_kaltura_move_entries_to_kaf_category_tree($targetparentcatid, $pageindex, $numofentries); +} + +/** + * This function retrieves all Kaltura entries, created before a specified date and containing profile metadata; and moves the entries to the new KAF category location. + * @param int $targetparentcatid The root category id configured for the KAF instance. + * @param int $index The page number to return from the paged API output. + * @param int $numofentries The number of entries to return from the API with. + * @return array An array whose index is the Kaltura entry id and value is an array of Kaltura category ids. + */ +function local_kaltura_move_metadata_entries_to_kaf_category_tree($targetparentcatid, $index = 1, $numofentries = 100) { + // The timestamp used to retrieve Kaltura entries that were created by or before the date. + static $createdby = 0; + // Which page is currently being processed. + static $pageindex = 1; + // The Kaltura plug-in settings variables. + static $reposettings = null; + // An array whose id is Kaltura entry ids; and value is an array of Kaltura category ids the entry belongs to. + static $entries = null; + // An object whose properties are: id - the 'channels' category id, fullname - the full path of the category. + static $channelscategory = null; + // An object whose properties are: id - the 'Shared Repository' category id, fullname - the full path of the category. + static $sharedrepocategory = null; + // An array of cached old to new category mappings. array(old category id => new category id). + static $cachedcategories = array(); + // An array of categories that currently exist on Kaltura. This is used to quickly retrieve the name of the category via the category id. + // Ex. array(old category id => category name). + static $currentcategories = null; + // A hard stop condition for the recursive method. + static $stop = 0; + + if (is_null($currentcategories)) { + $currentcategories = local_kaltura_get_categories(); + } + // Retrieve the repository settings. + if (is_null($reposettings)) { + $reposettings = get_config(KALTURA_PLUGIN_NAME); + } + + // Set the timestamp for Kaltura entries created before the created by value. + if (empty($createdby)) { + $time = local_kaltura_migration_progress::get_sharedcategoryrun(); + $createdby = empty($time) ? time() : $time; + } + + $client = local_kaltura_get_kaltura_client(); + + // Set the channels category ID. + if (is_null($channelscategory)) { + $channelscategory = local_kaltura_get_channels_id($client, $targetparentcatid); + } + + // Set the siteshared category ID. Using the channels category id as the parent. + if (is_null($sharedrepocategory)) { + $sharedrepocategory = local_kaltura_get_sharedrepo_id($client, $channelscategory->id, $targetparentcatid); + // Add the 'Shared Repository' category id to the array of cached categories. + $cachedcategories['sharedrepository'] = $sharedrepocategory->id; + } + + $pageindex = $index; + + // Retrieve all of the entries were created by a certain time and associated with a specific profile id. + $filter = new KalturaBaseEntryFilter(); + $filter->advancedSearch = new KalturaMetadataSearchItem(); + $filter->advancedSearch->type = KalturaSearchOperatorType::SEARCH_OR; + $filter->advancedSearch->metadataProfileId = $reposettings->migration_metadata_profile_id; + $filter->createdAtLessThanOrEqual = $createdby; + $filter->freeText = '*'; + $filter->orderBy = KalturaBaseEntryOrderBy::CREATED_AT_DESC; + + $pager = new KalturaFilterPager(); + $pager->pageSize = $numofentries; + $pager->pageIndex = $pageindex; + + $result = $client->baseEntry->listAction($filter, $pager); + + // If the request was successful and the number of entries returned was greater than zero, get the old category ids and assign the entries them to the new KAF categories. + if ($result instanceof KalturaBaseEntryListResponse) { + if (0 < count($result->objects)) { + // Populate the entries array with key: entry id and value: an array of category ids the entry belongs to. + list($entries, $currentcategories) = local_kaltura_get_entry_metadata($client, $result->objects, $reposettings->migration_metadata_profile_id, $currentcategories); + + // Iterate over the array of entries and check if the category the entry belongs to has also been created under the new target category. + $cachedcategories = local_kaltura_assign_entries_to_new_course_categories($client, $entries, $channelscategory, $cachedcategories, $currentcategories); + + // Get the date of the last processed entry and set the shared category run date. This allows the user to continue the migration exactly where the + // previous run left off. + $lastentry = end($result->objects); + local_kaltura_migration_progress::set_sharedcategoryrun($lastentry->createdAt - 1); + } else { + return null; + } + } + + // Increment the page index. + $pageindex++; + $stop++; + + // Check if the hard stop condition has reached. + if (KALTURA_MIGRATION_HARD_STOP == $stop) { + return $entries; + } + + // Recusive call to retrieve the next set of Kaltura entries. + return local_kaltura_move_metadata_entries_to_kaf_category_tree($targetparentcatid, $pageindex, $numofentries); +} + +/** + * This function assigns the Kaltura entries to the new KAF categories. + * Future TODO: Improve the progress tracking of this method, by inspecting the results of API calls and find entries that already existed but were part of a multi request. + * + * @param KalturaConfiguration $client A Kaltura client object. + * @param array $entries An array whose key is Kaltura entry ids and value is an array of category ids. + * @param int $parentcategory The 'channels' category object whose properties are id and fullname. + * @param array $cachedcategories An array of cateogires that have been created under the KAF root category. + * The array key is the category name and value is the category ids. + * @param array $currentcategories An array of current category ids and their names @see local_kaltura_get_categories() + * @return array An array of cateogires that have been created under the KAF root category. The array key is the category name and value is the category ids. + */ +function local_kaltura_assign_entries_to_new_categories($client, $entries, $parentcategory, $cachedcategories, $currentcategories) { + $newcategory = 0; + $counter = 1; + + foreach ($entries as $entryid => $entrycategories) { + foreach ($entrycategories as $oldcategoryid) { + // Check if the category exists in the cached categories. + if (isset($cachedcategories[$oldcategoryid])) { + // Check if the entry was already added to the 'InContext' category. If not then assign it to the category. + $filter = new KalturaCategoryEntryFilter(); + $filter->categoryIdEqual = $cachedcategories[$oldcategoryid]; + $filter->entryIdEqual = $entryid; + $pager = null; + $result = $client->categoryEntry->listAction($filter, $pager); + + if ($result instanceof KalturaCategoryEntryListResponse && 0 == $result->totalCount) { + // Assign the entry to the 'InContext' category. + $categoryentry = new KalturaCategoryEntry(); + $categoryentry->categoryId = $cachedcategories[$oldcategoryid]; + $categoryentry->entryId = $entryid; + $result = $client->categoryEntry->add($categoryentry); + + local_kaltura_migration_progress::increment_entriesmigrated(); + } + } else { + // Get the name of the old root category. + $oldrootcategoryname = $currentcategories[$oldcategoryid]; + + // Check if the category exists under the KAF root matching on the category name. + $filter = new KalturaCategoryFilter(); + $filter->parentIdEqual = $parentcategory->id; + $filter->fullNameEqual = "{$parentcategory->fullname}>{$oldrootcategoryname}"; + $pager = null; + $result = $client->category->listAction($filter, $pager); + + // Cache the result or create a new category and cache the result. + if ($result instanceof KalturaCategoryListResponse && 1 == $result->totalCount) { + // Start multi-request, this will send multiple API calls as one batch request. + $client->startMultiRequest(); + // Get the 'InContext' sub category. + $filter = new KalturaCategoryFilter(); + $filter->parentIdEqual = $result->objects[0]->id; + $pager = null; + $client->category->listAction($filter, $pager); + + // Assign the entry to the 'InContext' sub category. + $categoryentry = new KalturaCategoryEntry(); + $categoryentry->categoryId = '{1:result:objects:0:id}'; + $categoryentry->entryId = $entryid; + $client->categoryEntry->add($categoryentry); + + $multirequest = $client->doMultiRequest(); + + local_kaltura_migration_progress::increment_entriesmigrated(); + + // Cache the mappting between the old category id and the 'InContext' category id. + $cachedcategories[$oldcategoryid] = $multirequest[0]->objects[0]->id; + } else { + // Start multi-request, this will send multiple API calls as one batch request. + $client->startMultiRequest(); + + $category = new KalturaCategory(); + $category->parentId = $parentcategory->id; + $category->name = $oldrootcategoryname; + $category->moderation = KalturaNullableBoolean::TRUE_VALUE; + $client->category->add($category); + + // Create the 'InContext' category under the new category. + $category = new KalturaCategory(); + $category->name = 'InContext'; + $category->parentId = '{1:result:id}'; + $category->moderation = KalturaNullableBoolean::TRUE_VALUE; + $client->category->add($category); + + $categoryentry = new KalturaCategoryEntry(); + $categoryentry->categoryId = '{2:result:id}'; + $categoryentry->entryId = $entryid; + $client->categoryEntry->add($categoryentry); + + $multirequest = $client->doMultiRequest(); + + local_kaltura_migration_progress::increment_entriesmigrated(); + // Increment categories twice. Once for the course name, the other for the 'InContext'. + local_kaltura_migration_progress::increment_categoriescreated(); + local_kaltura_migration_progress::increment_categoriescreated(); + + // Cache the mappting between the old category id and the 'InContext' category id. + $cachedcategories[$oldcategoryid] = $multirequest[1]->id; + } + } + } + } + return $cachedcategories; +} + +/** + * This is a refactored function of @see local_kaltura_assign_entries_to_new_categories(). The difference is that this adds a Kaltura media to the category + * Kaltura course category and not the 'InContext' sub-category of the course category. + * Future TODO: Improve the progress tracking of this method, by inspecting the results of API calls and find entries that already existed but were part of a multi request. + * + * @param KalturaConfiguration $client A Kaltura client object. + * @param array $entries An array whose key is Kaltura entry ids and value is an array of category ids. + * @param int $parentcategory The 'channels' category object whose properties are id and fullname. + * @param array $cachedcategories An array of cateogires that have been created under the KAF root category. + * The array key is the category name and value is the category ids. + * @param array $currentcategories An array of current category ids and their names @see local_kaltura_get_categories() + * @return array An array of cateogires that have been created under the KAF root category. The array key is the category name and value is the category ids. + */ +function local_kaltura_assign_entries_to_new_course_categories($client, $entries, $parentcategory, $cachedcategories, $currentcategories) { + $newcategory = 0; + $counter = 1; + + // Check if $entries is an array. + if (!is_array($entries)) { + return $cachedcategories; + } + + foreach ($entries as $entryid => $entrycategories) { + foreach ($entrycategories as $oldcategoryid) { + // Check if the course category exists in the cached categories. + if (isset($cachedcategories[$oldcategoryid])) { + // Check if the entry was already added to the course category. If not then assign it to the category. + $filter = new KalturaCategoryEntryFilter(); + $filter->categoryIdEqual = $cachedcategories[$oldcategoryid]; + $filter->entryIdEqual = $entryid; + $pager = null; + $result = $client->categoryEntry->listAction($filter, $pager); + + if ($result instanceof KalturaCategoryEntryListResponse && 0 == $result->totalCount) { + // Assign the entry to the course category. + $categoryentry = new KalturaCategoryEntry(); + $categoryentry->categoryId = $cachedcategories[$oldcategoryid]; + $categoryentry->entryId = $entryid; + $client->categoryEntry->add($categoryentry); + + local_kaltura_migration_progress::increment_entriesmigrated(); + } + } else { + // Get the name of the old root category. + $oldrootcategoryname = $currentcategories[$oldcategoryid]; + + // Check if the category exists under the KAF root matching on the category name. + $filter = new KalturaCategoryFilter(); + $filter->parentIdEqual = $parentcategory->id; + $filter->fullNameEqual = "{$parentcategory->fullname}>{$oldrootcategoryname}"; + $pager = null; + $result = $client->category->listAction($filter, $pager); + + // Cache the result or create a new category and cache the result. + if ($result instanceof KalturaCategoryListResponse && 1 == $result->totalCount) { + + // Assign the entry to the course category. + $categoryentry = new KalturaCategoryEntry(); + $categoryentry->categoryId = $result->objects[0]->id; + $categoryentry->entryId = $entryid; + $categoryresult = $client->categoryEntry->add($categoryentry); + + // If the result is a KalturaCategoryEntry then cache the category id. + if ($categoryresult instanceof KalturaCategoryEntry) { + // Cache the mapping between the old category id and the course category id. + $cachedcategories[$oldcategoryid] = $categoryresult->categoryId; + + local_kaltura_migration_progress::increment_entriesmigrated(); + } + } else { + // Start multi-request, this will send multiple API calls as one batch request. + $client->startMultiRequest(); + + $category = new KalturaCategory(); + $category->parentId = $parentcategory->id; + $category->name = $oldrootcategoryname; + $category->moderation = KalturaNullableBoolean::TRUE_VALUE; + $client->category->add($category); + + // Add the Kaltura media to the new course category. + $categoryentry = new KalturaCategoryEntry(); + $categoryentry->categoryId = '{1:result:id}'; + $categoryentry->entryId = $entryid; + $client->categoryEntry->add($categoryentry); + + $multirequest = $client->doMultiRequest(); + + local_kaltura_migration_progress::increment_entriesmigrated(); + // Increment categories created. + local_kaltura_migration_progress::increment_categoriescreated(); + + // Cache the mappting between the old category id and the course category id. + $cachedcategories[$oldcategoryid] = $multirequest[0]->id; + } + } + } + } + return $cachedcategories; +} + +/** + * This function returns the 'channels' category id, using the KAF root category id as part of the filter. The 'channels' category is created + * automatically when the user creates a new KAF instance. This function only needs to determine the category id. It does not need to create it. + * @param KalturaConfiguration $client A Kaltura client object. + * @param int $rootcatid The KAF root category id. + * @return object|bool An object whose properties are id and fullname, or false it's not found. + */ +function local_kaltura_get_channels_id($client, $rootcatid) { + // Retrieve the array of categories and get the name of the parent category. + $catnames = local_kaltura_get_categories(); + $parentcatname = $catnames[$rootcatid]; + + $filter = new KalturaCategoryFilter(); + $filter->ancestorIdIn = $rootcatid; + $filter->fullNameStartsWith = "$parentcatname>site>channels"; + $pager = null; + $result = $client->category->listAction($filter, $pager); + + if ($result instanceof KalturaCategoryListResponse && 0 < $result->totalCount) { + $category = new stdClass(); + $category->id = $result->objects[0]->id; + $category->fullname = "$parentcatname>site>channels"; + return $category; + } else { + return false; + } +} + +/** + * This function returns the 'Shared Repository' category id, using the channels category id as part of the filter. If the the category doesn't exist + * then is must be created. + * @param KalturaConfiguration $client A Kaltura client object. + * @param int $channelsid The channels category id. + * @param int $rootcatid The KAF root category id. + * @return object|bool An object whose properties are id and fullname. + */ +function local_kaltura_get_sharedrepo_id($client, $channelsid, $rootcatid) { + // Retrieve the array of categories and get the name of the parent category. + $catnames = local_kaltura_get_categories(); + $parentcatname = $catnames[$rootcatid]; + $siterepocat = new stdClass(); + + $filter = new KalturaCategoryFilter(); + $filter->parentIdEqual = $channelsid; + $filter->fullNameStartsWith = "$parentcatname>site>channels>Shared Repository"; + $pager = null; + $result = $client->category->listAction($filter, $pager); + + // If he category already exists. + if ($result instanceof KalturaCategoryListResponse && 0 < $result->totalCount) { + $siterepocat->id = $result->objects[0]->id; + $siterepocat->fullname = $result->objects[0]->fullName; + return $siterepocat; + } else { + // Create 'Shared Repository' category. + $category = new KalturaCategory(); + $category->parentId = $channelsid; + $category->name = 'Shared Repository'; + $category->moderation = KalturaNullableBoolean::TRUE_VALUE; + $result = $client->category->add($category); + + if ($result instanceof KalturaCategory) { + $siterepocat->id = $result->id; + $siterepocat->fullname = $result->fullName; + } + + local_kaltura_migration_progress::increment_categoriescreated(); + + return $siterepocat; + } +} + +/** + * This function retreives the custom metadata associated with a Kaltura entry. + * @param KalturaConfiguration $client A Kaltura client object. + * @param KalturaBaseEntryListResponse $entrylist An array of Kaltura entry objects. + * @param int $profileid A profile id. + * @param array $currentcategories An array of current category ids and their names @see local_kaltura_get_categories() + * @return Array An array. The first index is an array of Kaltura entry ids array(kaltura entry id => array(categories)). The second index + * is an array of current courses that will need to be created array(old category id => old category name). + */ +function local_kaltura_get_entry_metadata($client, $entrylist, $profileid, $currentcategories) { + $entries = array(); + $categories = array(); + + // Start multi-request, this will send multiple API calls as one batch request. + $client->startMultiRequest(); + + // Iterate ver each entry. Add it to the entries array (setting the entryid as the key), then retrieve the categories the entry belongs to. + foreach ($entrylist as $entry) { + // Call an API function to return all of the categories the entry belongs to. + $entries[$entry->id] = array(); + + $filter = new KalturaMetadataFilter(); + $filter->metadataProfileIdEqual = $profileid; + $filter->metadataObjectTypeEqual = KalturaMetadataObjectType::ENTRY; + $filter->objectIdEqual = $entry->id; + $pager = null; + $metadataplugin = KalturaMetadataClientPlugin::get($client); + $metadataplugin->metadata->listAction($filter, $pager); + } + + $multirequest = $client->doMultiRequest(); + + if (is_array($multirequest)) { + foreach ($multirequest as $metadatalists) { + if (is_array($metadatalists->objects)) { + foreach ($metadatalists->objects as $entrymetadata) { + // Get the metadata XML. + $xml = new SimpleXMLElement($entrymetadata->xml); + if (isset($xml->CourseShare)) { + $tempcat = (array) $xml->CourseShare; + // Add each category to the current categories array, as it will be required by the @see local_kaltura_assign_entries_to_new_categories(). + // With course shared metadata, the category may not actually exist yet. So insert a place holder that can be easily referenced in later functions. + foreach ($tempcat as $categoryname) { + $currentcategories["cs_$categoryname"] = $categoryname; + $categories[] = "cs_$categoryname"; + } + } + + if (1 == $xml->SystemShare) { + $categories[] = 'sharedrepository'; + } + + $entries[$entrymetadata->objectId] = $categories; + $categories = array(); + } + } + } + } + return array($entries, $currentcategories); +} + +/** + * This function retrieves all of the categories belonging to a Kaltura entry. + * @param KalturaConfiguration $client A Kaltura client object. + * @param int $rootcategoryid The Kaltura root category id. + * @param KalturaBaseEntryListResponse $entrylist An array of Kaltura entry objects. + * @return array An array of Kaltura entry ids where the keys of the array are the Kaltura entry ids and the values are array of Kaltura category ids. + */ +function local_kaltura_get_entry_categories($client, $rootcateogryid, $entrylist) { + $entries = array(); + + // Start multi-request, this will send multiple API calls as one batch request. + $client->startMultiRequest(); + + // Iterate ver each entry. Add it to the entries array (setting the entryid as the key), then retrieve the categories the entry belongs to. + foreach ($entrylist as $entry) { + // Call an API function to return all of the categories the entry belongs to. + $entries[$entry->id] = array(); + + $catfilter = new KalturaCategoryEntryFilter(); + $catfilter->entryIdEqual = $entry->id; + $catpager = new KalturaFilterPager(); + // Category limit per entry is 32, 100 is a high-enough limit. + $catpager->pageSize = 100; + $catpager->pageIndex = 1; + $client->categoryEntry->listAction($catfilter, $catpager); + } + + // Send the batch API request. + $multirequest = $client->doMultiRequest(); + $categories = array(); + $entryid = ''; + + // Iterate over an array of KalturaCategoryEntryListResponse results and save the category ids. + if (is_array($multirequest)) { + foreach ($multirequest as $entrylist) { + // Iterate over an array of KalturaCategoryEntry results. + if (is_array($entrylist->objects)) { + foreach ($entrylist->objects as $entrycategory) { + // Check that the categoryFullIds has the root category in it. + if (false === strpos($entrycategory->categoryFullIds, $rootcateogryid)) { + continue; + } + // Entry Id gets set multiple times... + $entryid = $entrycategory->entryId; + $categories[] = $entrycategory->categoryId; + } + } + + // Save the array of categories to the array of entries. + $entries[$entryid] = $categories; + // Reset categories array to make way for a new entry. + $categories = array(); + } + } + + return $entries; +} + +/** + * This function updates records for Kaltura video resrouce, presentation and media assignments; by adding a source URL and padding the width and height. + */ +function local_kaltura_update_activities() { + global $CFG, $DB; + + $configsettings = get_config(KALTURA_PLUGIN_NAME); + $client = local_kaltura_get_kaltura_client(); + + // Check if the KAF URi is initialized. + if (!isset($configsettings->kaf_uri) || empty($configsettings->kaf_uri)) { + $url = new moodle_url('/admin/settings.php', array('section' => 'local_kaltura')); + notice(get_string('migration_kaf_url_not_set', 'local_kaltura'), $url); + } + + // Check if the table exists. + $table = new xmldb_table('kalvidres'); + + if ($DB->get_manager()->table_exists($table)) { + // Migrate Kaltura video resrouce entries. + $sql = 'SELECT * + FROM {kalvidres} + WHERE source IS NULL'; + $records = $DB->get_records_sql($sql); + + foreach ($records as $id => $record) { + if (!is_null($record->entry_id) && !empty($record->entry_id)) { + $source = local_kaltura_build_source_url($record->entry_id, $record->height, $record->width, $record->uiconf_id); + $record->source = $source; + $record->width = $record->width + KALTURA_MIGRATION_WIDTH_PADDING; + $record->height = $record->height + KALTURA_MIGRATION_HEIGHT_PADDING; + + try { + // Retrieve the Kaltura base entry object. + $kalentry = $client->baseEntry->get($record->entry_id); + } + catch(Exception $ex) { + // if from some reason we were not able to get the entry - lets make an empty object to use for empty metadata + // since this is for backward compatibility - we can ignore that for the sake of completing the migration + $kalentry = new stdClass(); + } + $newobject = local_kaltura_convert_kaltura_base_entry_object($kalentry); + // Searlize and base 64 encode the metadata. + $metadata = local_kaltura_encode_object_for_storage($newobject); + $record->metadata = $metadata; + + $DB->update_record('kalvidres', $record, true); + } + } + } + + $table = new xmldb_table('kalvidpres'); + + if ($DB->get_manager()->table_exists($table)) { + // Migrate Kaltura video resrouce entries. + $sql = 'SELECT * + FROM {kalvidpres} + WHERE source IS NULL'; + $records = $DB->get_records_sql($sql); + + foreach ($records as $id => $record) { + if (!is_null($record->entry_id) && !empty($record->entry_id)) { + $player = empty($configsettings->presentation) ? $configsettings->presentation_custom : $configsettings->presentation; + $source = local_kaltura_build_source_url($record->entry_id, $record->height, $record->width, $player); + $record->source = $source; + $record->width = $record->width + KALTURA_MIGRATION_WIDTH_PADDING; + $record->height = $record->height + KALTURA_MIGRATION_HEIGHT_PADDING; + + // Retrieve the Kaltura base entry object. + $kalentry = $client->baseEntry->get($record->entry_id); + $newobject = local_kaltura_convert_kaltura_base_entry_object($kalentry); + // Searlize and base 64 encode the metadata. + $metadata = local_kaltura_encode_object_for_storage($newobject); + $record->metadata = $metadata; + + $DB->update_record('kalvidpres', $record, true); + } + } + } + + $table = new xmldb_table('kalvidassign_submission'); + + if ($DB->get_manager()->table_exists($table)) { + // Migrate Kaltura video resrouce entries. + $sql = 'SELECT * + FROM {kalvidassign_submission} + WHERE source IS NULL'; + $records = $DB->get_records_sql($sql); + + foreach ($records as $id => $record) { + if (!is_null($record->entry_id) && !empty($record->entry_id)) { + + $height = $configsettings->kalvidassign_player_height; + $width = $configsettings->kalvidassign_player_width; + $player = empty($configsettings->player) ? $configsettings->player_custom : $configsettings->player; + + $source = local_kaltura_build_source_url($record->entry_id, $height, $width, $player); + $record->source = $source; + $record->width = $width + KALTURA_MIGRATION_WIDTH_PADDING; + $record->height = $height + KALTURA_MIGRATION_HEIGHT_PADDING; + + // Retrieve the Kaltura base entry object. + $kalentry = $client->baseEntry->get($record->entry_id); + $newobject = local_kaltura_convert_kaltura_base_entry_object($kalentry); + // Searlize and base 64 encode the metadata. + $metadata = local_kaltura_encode_object_for_storage($newobject); + $record->metadata = $metadata; + + $DB->update_record('kalvidassign_submission', $record, true); + } + } + } +} + +/** + * This function updates the name and adminTags property of a KalturaDataEntry (Video presentation). + * @param KalturaConfiguration $client A Kaltura client object. + * @param Array $entrylist A list of Kaltura entries, where the key is the entry id and the value is the video presentation activity name. + */ +function local_kaltura_update_video_presentation_entry($client, $entrylist) { + foreach ($entrylist as $entryid => $activityname) { + $vidpres = new KalturaBaseEntry(); + $vidpres->name = $activityname; + $vidpres->adminTags = 'presentation'; + $client->baseEntry->update($entryid, $vidpres); + } +} + +/** + * This function migrates video presentation entries to the new KAF standard by setting additional properties. + * @param int $kafcategory The KAF root category. + * @param array $cachedcategories An array of cateogires that have been created under the KAF root category. + * @return void. + */ +function local_kaltura_migrate_video_presentation_entries($kafcategory, $cachedcategories) { + global $DB; + + $table = new xmldb_table('kalvidpres'); + + // Check if the video presentation table exists. + if ($DB->get_manager()->table_exists($table)) { + // Retrieve all video presentation records that have not yet been migrated. + $sql = 'SELECT id,name,course,entry_id + FROM {kalvidpres} + WHERE source IS NULL'; + $vidpresrecs = $DB->get_records_sql($sql); + + if (empty($vidpresrecs)) { + return; + } + + // Get a Kaltura session. + $client = local_kaltura_get_kaltura_client(); + + // Get the KAF channels category object. + $channelscategory = local_kaltura_get_channels_id($client, $kafcategory); + + // Initialize arrays used to map video presentation entries to Kaltura categories. + $entrycategories = array(); + $entry = array(); + + // Populate arrays with the mapping data. + foreach ($vidpresrecs as $rec) { + $entrycategories[$rec->entry_id] = array($rec->course); + $entry[$rec->entry_id] = $rec->name; + + // Check if the mapping of a course category to a new category already exists then skip the rest of the loop. + if (isset($cachedcategories[$rec->course])) { + continue; + } + + $cachedcategories[$rec->course] = $rec->course; + } + + // Create KAF categories and add the entries to the categories. + local_kaltura_assign_entries_to_new_categories($client, $entrycategories, $channelscategory, array(), $cachedcategories); + + // Update the entry name and adminTag property for the video presentation object. + local_kaltura_update_video_presentation_entry($client, $entry); + } + + return; +} + +/** + * This function takes a Kaltura entry id height, width and uiconf_id and returns a source URL pointing to the entry. + * @param string $entryid The Kaltura entry id. + * @param int $height The entry height. + * @param int $width The entry width. + * @param int $uiconfid The Kaltura player id. + * @return string A source URL. + */ +function local_kaltura_build_source_url($entryid, $height, $width, $uiconfid) { + $newheight = empty($height) ? KALTURA_MIGRATION_DEFAULT_HEIGHT : $height; + $newwidth = empty($width) ? KALTURA_MIGRATION_DEFAULT_WIDTH : $width; + $url = 'http://'.KALTURA_URI_TOKEN."/browseandembed/index/media/entryid/{$entryid}/showDescription/true/showTitle/true/showTags/true/showDuration/true/showOwner/"; + $url .= "true/showUploadDate/false/playerSize/{$newwidth}x{$newheight}/playerSkin/{$uiconfid}/"; + return $url; +} + +/** + * This class keeps statistics on the last entries that were process, as well as how many categories were created. + * It is also used to allow the use to continue the migration from where it last left off. + */ +class local_kaltura_migration_progress { + /** @var int The timestamp used to retrieve Kaltura entries that were created on or before this date. */ + static protected $existingcategoryrun = 0; + /** @var int The timestamp used to retrieve Kaltura entries where the metadata was created on or before this date. */ + static protected $sharedcategoryrun = 0; + /** @var int The number of categories that have been created. */ + static protected $categoriescreated = 0; + /** @var int The number of entries that have been migrated. */ + static protected $entriesmigrated = 0; + /** @var int The date the migration originally started. */ + static protected $migrationstarted = 0; + /** @var int KAF root category id. */ + static protected $kafcategoryrootid = 0; + + /** + * Constructor initializes static properties. + */ + public function __construct() { + $config = get_config(KALTURA_PLUGIN_NAME); + self::$migrationstarted = (isset($config->migrationstarted) && !empty($config->migrationstarted)) ? $config->migrationstarted : 0; + self::$existingcategoryrun = isset($config->existingcategoryrun) ? $config->existingcategoryrun : 0; + self::$sharedcategoryrun = isset($config->sharedcategoryrun) ? $config->sharedcategoryrun : 0; + self::$categoriescreated = isset($config->categoriescreated) ? $config->categoriescreated : 0; + self::$entriesmigrated = isset($config->entriesmigrated) ? $config->entriesmigrated : 0; + self::$kafcategoryrootid = isset($config->kafcategoryrootid) ? $config->kafcategoryrootid : 0; + } + + /** + * Returns the timestamp value of the date created for the last entry that was processed. + * @return int Unix timestamp. + */ + static public function get_existingcategoryrun() { + return self::$existingcategoryrun; + } + + /** + * Set the timestamp value. + * @param int $data A unix timestamp. + */ + static public function set_existingcategoryrun($data) { + self::$existingcategoryrun = $data; + } + + /** + * Returns the timestampe value of the date created for the last entry metadata that was processed. + * @return int Unix timestamp. + */ + static public function get_sharedcategoryrun() { + return self::$sharedcategoryrun; + } + + /** + * Set the timestamp value. + * @param int $data A unix timestamp. + */ + static public function set_sharedcategoryrun($data) { + self::$sharedcategoryrun = $data; + } + + /** + * Returns the number of categories created. + * @return int Unix timestamp. + */ + static public function get_categoriescreated() { + return self::$categoriescreated; + } + + /** + * Increment categories created. + */ + static public function increment_categoriescreated() { + self::$categoriescreated++; + } + + /** + * Returns the number of entries that were migrated. + * @return int Unix timestamp. + */ + static public function get_entriesmigrated() { + return self::$entriesmigrated; + } + + /** + * Increment entries migrated. + */ + static public function increment_entriesmigrated() { + self::$entriesmigrated++; + } + + /** + * Returns the timestamp for the original date the migration was started. + * @return int Unix timestamp. + */ + static public function get_migrationstarted() { + return self::$migrationstarted; + } + + /** + * Sets the time the migration started time to now. + */ + static public function init_migrationstarted() { + self::$migrationstarted = time(); + } + + /** + * Returns the KAF root category id + * @return int Unix timestamp. + */ + static public function get_kafcategoryrootid() { + return self::$kafcategoryrootid; + } + + /** + * Sets the the KAF root category id. + * @param int $data a Kaltura category id. + */ + static public function set_kafcategoryrootid($data) { + self::$kafcategoryrootid = $data; + } + + /** + * Reset all stats to nothing. + */ + static public function reset_all() { + self::$migrationstarted = 0; + self::$entriesmigrated = 0; + self::$categoriescreated = 0; + self::$sharedcategoryrun = 0; + self::$existingcategoryrun = 0; + self::$kafcategoryrootid = 0; + } + + /** + * Destructor that saves static properties to the DB. + */ + public function __destruct() { + set_config('existingcategoryrun', self::$existingcategoryrun, KALTURA_PLUGIN_NAME); + set_config('sharedcategoryrun', self::$sharedcategoryrun, KALTURA_PLUGIN_NAME); + set_config('categoriescreated', self::$categoriescreated, KALTURA_PLUGIN_NAME); + set_config('entriesmigrated', self::$entriesmigrated, KALTURA_PLUGIN_NAME); + set_config('migrationstarted', self::$migrationstarted, KALTURA_PLUGIN_NAME); + set_config('kafcategoryrootid', self::$kafcategoryrootid, KALTURA_PLUGIN_NAME); + } +} diff --git a/local/kaltura/pix/icon.png b/local/kaltura/pix/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..615c31d68e7c309bb63b6098a4bfbcad17a0bd27 GIT binary patch literal 1912 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 literal 0 HcmV?d00001 diff --git a/local/kaltura/pix/vidThumb.png b/local/kaltura/pix/vidThumb.png new file mode 100644 index 0000000000000000000000000000000000000000..cdf48281daab556c5b8885d8f4a304731376e125 GIT binary patch literal 2404 zcmaJ@dpwhU8($;u5=l|cW}*_?J#yHb+H6W8=T_+5Y&V7-Z1-{qB_%?S4o)4Ul2ehQ z5l<+cJW|o)l&2C&8Zj%$@tvOZynnpC_vdrpzw7t=e81o8x_;O9k2~4Tb*rMhhCB=g zQ*_!!@{q3S($^gUmws=iSIhGc`E^bH%4i7|{qX82-U;!X4uxPB=W=l&;W27m71u%dq25V}9wZxm5;sF5p<3UNY z@fd-450c}LT+*E_Dj0&ecnl^YA_5&@hUV~sFjyQ8x1eEaY9d9L@T1reEz*R|*I!g1 zfqXiT$%U94HgZ9c7QhiewkT<(f49Km{*-0&e_WIF!Z49EE(VJR7Ft>ay14v*D2w$I z&4)a|f9n08!hEkNE{O2}`5Xa{E*)H;{z57)-hl_wAP&!q!wFlwMYmuM#Nh{XxJU<2 zbL1{2o56|Te@DBx;GNifh{mRaP9$5Dl#gaI8F)(zEE$Uf9I!+)0#+Ilv1T~3sW}<9 z*=jRjMKE3Dk~nk$3uHr!T*g0K(l5CSMqqKJnMojzxesJG@;EHy_lEJzU)MtTrQQ!N zU?&QRNEd4Uzl zvlQ)?L5Wqx7&18~p`$pjjc^=k6d!!CQI?w7ODy*+87)suPnuZufFUaq#P{hXlEnD| zYm+jb07sYk8lWnSG?(+Ui-=T&!jT3ygu)}5!DHcI0T`8A1zOANwFF8gCuQK9c4dO! z>gs1B6HF~~TrU>0s}dTvpWYeUldIZsW>Bx3Czu#|F*5Qz+$U;m5~|C7^qbZ31ic%6 z8;_Z)eU{vbz@Lwup4MEW4NrEzfGYP-@xbRe2MT8=QU|K`G?A$VOdV})W#UT8?#j98 zx!7BN1N&<)t(%XqKX80d@~yjD9lnYDqC53*{@&|r)i>n4t0^mBBCb83X;e$iQuH5% z=8WSiVXEt{l$30gCs3C@mc(|32fVqvap3gWYzF&7$t7etOOh$7uFctbM9CwBbSCALzWHuieEFP+n z8$So`1{AoqN^$aJ`FFO|jxY<_as(~%U;~^b?*?cjR9Ht;j7$&$L4;gQU7Z~cHw58Z zPrT(K^zFx1r*C4{23o{{=x-);B`WA^Gcie;H!` zaDGvv{rXB_%wqt&HK)vu4=&^^ZiZ5Je`_{00fFePBmo?Q%?C;du3!`pFe$a z4LI44Z|FBK6?b(x9%Ug;E;SLfgpe}3rl!-%M0F=SbjbH%KCd_Ic|Uik{?F@nr5`iC zXeMFHh`m99`3EWPy5c%wfX{`dw#&<6?A8pOift|JjZxe5C3Rb+ZlY7Nouf0< z<-3Ulct#cS(@S%!bjJ^|3SXReT|aR(D`-Si=jY8=+oaTmpSqz^PR(0?J~wV=CJJ~L z-O`Ei@+MQ&SHPHOgcRe83BudwK3E+u6WQq8ynk?sFf9;>lCe&>o7X8?QqdY*>4&zw zwJ#wuDSfvVihvkX~&eM6bUqo5e0y)2a@#Nf`j&MkBi4i>I zSlAh|dz*kR;u+Gfy(;S5U#M%@jgWn-oITqIf41alN=iy&ql4_4L*jii$(ZX6%M>H- zd7nU+bbQ`k>eFnD->yk~9+0J4Z%zH(k8O3A6fnf|uX<&-@>7bk_wr=B!+DN(0?+t( zVeM3po@KAm?)hz&7k2wENi3@Q@BvZIct)uFT6pv2v5xJDG^kcvV{hL;4`MGg^3hzs zVp6fuK^fh!nnkD{k4S;FsG^an4ZoL5d?!3Q{J*_;=C+0UpxWi0Z>D$shb?-5Y+?x< zpcyv3Ni$6@YIS!WZD(XQB. + +/** + * My Media display library + * + * @package local + * @subpackage mymedia + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + */ + + +if (!defined('MOODLE_INTERNAL')) { + die('Direct access to this script is forbidden.'); /// It must be included from a Moodle page +} + +require_once(dirname(dirname(dirname(__FILE__))) . '/lib/tablelib.php'); + +class local_kaltura_renderer extends plugin_renderer_base { + + /** + * Generate the HTML for the iframe + * + * @return string The HTML iframe + */ + public function render_recent_courses() { + $html = '

  • +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 |nwL4y0Tg5I#1)KOdi#El&Kkk| zp?YOO+PBlrl{&gz0XM0!E=5L?Qp_VQzA5-JZm)l3bZOt72#P7SP|~;nj%ixci(mB! z>|1w!1D3fM6aiKe0>X>*?%(7{HWn<8?$A1G;VQX{ZF8zmH}!2gH&=}Pxn5J7=MzCw zPj;4?8}>TQsfVCM6j6i!G(G>zA&7QAuJi1;p^`a*Ft#+9n;#}o(X1o$Hxm;(G_*&d?TTMp#Trd3W-GEjU>7VKe>2Jrj@<|h^rNwrHnU%;`Gizje$m|VK z!HnT?p=8Hwb-`-Av-nO@8{C>5^zvtn7@Aury+^gvDmOhGaIg6;C7!X!2J$Uocd-R> z2uO%<-y#RzRrXi+s-nJ2g5euk>H%u<=Ha=iSwS$Xr#pE~1C$MFofMPzV$Jaz?-L@q zQ7kmbe_4sZ6m)tvP(*Y%qoPm5R3#`G4pAkwQ$bb}2BDaCP-~|v?R4*es14R%yX1AD zIt0Iw4^&|5>PPl62}W~h zNDA6L`}EUsL3R%?Qs^0IOn2v}fv(g`;arr3Ier4&{ z0MnWJd>=C1RJTK-l-V5-U-v_9UNGqsP@aaynY>~J?6Bs0U?K+`m9zCHa<-eu^{m&d zvVRJ=X?c3_%o`ACzW4F2O;!1*5s51WBS{fR#cWrCy02w6zxV#Hit~$&_A#2O^#f z{G+xN$4c>fo!g`$SJWsFuKN?X7xyVe&v}mTzZJ~wyXJDAyBTw(vu91_*51+#ob}as zL#PCJEGrxQTn5jZnN~X`Q#|uye2M`@?ocJX=4Z5Mycd2O#qew?!YLFe9YbpZXOarW zCI|#5NN-lzVD-Sj;fqt{OY2Z+&vjTCDN159N|-|B@%xYUWeD<1AZ2Uj=^+2`%g}Ki z=n|7ui&1a)>fSQACRBYu_=teaYUmV&U??0TqJfEZ%$b*w$Zr&I%QG}-0#Eq?EUazM zGv9>j*kY|-WW!z5b8}9Wh|6zUrzFDGXPQ*Z>aQ&lENFTI51HT^J7Ad21?w4tfsha_ z=TlXl>N%w$fD*|N2#&&_PV4EInD}Cs^K)HVKm`Yrgo)nwddtW)AJ14tgG2VhFX7r| zjcI7v{QA2>G)Lz;6I}oB!k#*AD?;{CEcw1l-T>;dB~xQU^o5rB><(k6I1Wf?YG1E;QM!2~AFUjjw(IC>K!BC`T3=C?_}-H-^g)NqKZzCeu0Dv#m3zCG-t}WMh7uMa^g3E!(<=&y@8a~IpU3En>8co@r5V|Z4V1Y z(mc|fVWIii7>sVw*(?K#j(&p1wFwV3-@*#B%ccWK-FypW0&oO=>5ngvebTWRbP(dq z=B01Vs9|3&vhzdAP3x$-xPqc8)3{E{1jEK#?ri%cKz+IzUD;kB2lHK*r@U`RO7)~B zG!2-Dc$Bk6!{&CcHz@Ziv@QGs;Ljf&djGx=DkI`9PR3#}O`$+LY9*vU`UHKXtHlbF zm$*~4>iCuU5Ntzw=Vv96M3+$!`&iFP~{gm>|JaOu~f1xK0PVO zk7+aLf@*V6@F7X4Nq0ym z`LMZbeWy90r>ZwqBXh#ytnJ>UD2=)R9KE$}dE+^DIrk2y1dpyXgbZq1WNh38i;JZ` ztwim9R^HUVCYk>z;=v&}q7AlFYM^CZ9cx9ak+9;{cy<`;AcuKUcdYdY)extYI>cv? zb+m^25IbN}!R)A+g!(fWS98E=qe%;T=ZfH9?xBKG0Wdc3USHUhQN8x$IKORc=W;U% zatJEm9`Ae`by0s}DJZy46gYvK9bh^${HT}d6rYO9jXuyQn>~+P*sD~@!+=2RCYpw5 zbztKlYAnuvK@Lt+xRjy9Byu`6)8qV-|M)OrXJpckhiTQ<1wmNBhx5=t%~0G**z6{x z44FuKQ_XOxG
    - -
    '; - - return $html; - } - - /** - * Generate the HTML for the course search textbox - * - * @return string The HTML for the coruse search textbox - */ - public function render_course_search() { - global $PAGE; - - $jsmodule = array( - 'name' => 'local_kaltura', - 'fullpath' => '/local/kaltura/js/kaltura.js' - ); - - $PAGE->requires->js_init_call('M.local_kaltura.search_course', array(), true, $jsmodule); - - $html = '
    - - - - -
    '; - - return $html; - } - - /** - * Render the Moodle courses - * - * @param array $courses An array of courses - * @param string $query The course being searched for - * @param string $action The action being performed: search or recent course listing - * @return mixed The HTML generated courses on success; false, otherwise - */ - public function render_courses($courses, $query = null, $action) { - $html = ''; - $report_url = get_config(KALTURA_PLUGIN_NAME, 'report_uri'); - - if (!is_array($courses)) { - return $html; - } - - if (count($courses) == 0 && $action == 'search') { - return get_string('no_course_result', 'local_kaltura', $query); - } - - if (count($courses) == 0 && $action == 'recent_courses') { - return get_string('no_recent_course', 'local_kaltura'); - } - - if ($action == 'search') { - $html .= '

    '.get_string('found_course', 'local_kaltura', count($courses)).'

    '; - } - - if ($action == 'recent_courses') { - $html .= '

    '.get_string('recent_course_view', 'local_kaltura').'

    '; - } - - foreach ($courses as $course) { - $session = local_kaltura_generate_weak_kaltura_session($course->id, $course->fullname); - if (empty($session)) { - return false; - } - if (empty($course->shortname)) { - $html .= "".$course->fullname."
    "; - } else { - $html .= "".$course->fullname."".' ('.$course->shortname.')'."
    "; - } - } - - return $html; - } - -} diff --git a/local/kaltura/service.php b/local/kaltura/service.php deleted file mode 100644 index e5afcdfd684c9..0000000000000 --- a/local/kaltura/service.php +++ /dev/null @@ -1,101 +0,0 @@ -. - -/** - * Kaltura LTI service script used receive data sent from the Kaltura content provider. - * - * @package local_kaltura - * @author Remote-Learner.net Inc - * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later - * @copyright (C) 2014 Remote Learner.net Inc http://www.remote-learner.net - */ - -require_once(dirname(__FILE__).'/../../config.php'); -require_once($CFG->dirroot.'/local/kaltura/locallib.php'); - -require_login(); - -global $PAGE; - -$url = required_param('url', PARAM_URL); -$width = required_param('width', PARAM_INT); -$height = required_param('height', PARAM_INT); -$entryid = required_param('entry_id', PARAM_TEXT); -$title = required_param('title', PARAM_TEXT); -$thumbnailurl = optional_param('thumbnailUrl', '', PARAM_URL); -$duration = optional_param('duration', '', PARAM_TEXT); -$description = optional_param('description', '', PARAM_TEXT); -$createdat = optional_param('createdAt', '', PARAM_TEXT); -$owner = optional_param('owner', '', PARAM_TEXT); -$tags = optional_param('tags', '', PARAM_TEXT); -$showtitle = optional_param('showTitle', '', PARAM_TEXT); -$showdescription = optional_param('showDescription', '', PARAM_TEXT); -$showtags = optional_param('showTags', '', PARAM_TEXT); -$showdescription = optional_param('showDuration', '', PARAM_TEXT); -$showowner = optional_param('showOwner', '', PARAM_TEXT); -$player = optional_param('player', '', PARAM_TEXT); -$size = optional_param('size', '', PARAM_TEXT); - -$serviceurl = new moodle_url('/local/kaltura/service.php'); - -// Log the request. -$enablelogging = get_config(KALTURA_PLUGIN_NAME, 'enable_logging'); -if (!empty($enablelogging)) { - $param = array( - 'url' => $url, - 'width' => $width, - 'height' => $height, - 'entryid' => $entryid, - '$title' => $title - ); - local_kaltura_log_data(KAF_BROWSE_EMBED_MODULE, $serviceurl->out(), $param, false); -} - -// Create a metadata object and serialize it. -$metadata = new stdClass(); -$metadata->url = $url; -$metadata->width = $width; -$metadata->height = $height; -$metadata->entryid = $entryid; -$metadata->title = $title; -$metadata->thumbnailurl = $thumbnailurl; -$metadata->duration = $duration; -$metadata->description = $description; -$metadata->createdat = $createdat; -$metadata->owner = $owner; -$metadata->tags = $tags; -$metadata->showtitle = $showtitle; -$metadata->showdescription = $showdescription; -$metadata->showowner = $showowner; -$metadata->player = $player; -$metadata->size = $size; - -$metadata = local_kaltura_encode_object_for_storage($metadata); - -$PAGE->set_url($serviceurl); -$PAGE->set_context(context_system::instance()); -$params = array( - 'iframeurl' => urlencode($url), - 'width' => $width, - 'height' => $height, - 'entryid' => $entryid, - 'title' => $title, - 'metadata' => $metadata, -); -$PAGE->requires->yui_module('moodle-local_kaltura-ltiservice', 'M.local_kaltura.init', array($params)); - -echo $OUTPUT->header(); -echo $OUTPUT->footer(); \ No newline at end of file diff --git a/local/kaltura/settings.php b/local/kaltura/settings.php deleted file mode 100644 index 3928930838cc2..0000000000000 --- a/local/kaltura/settings.php +++ /dev/null @@ -1,95 +0,0 @@ -. - -/** - * Kaltura config settings script. - * - * @package local_kaltura - * @author Remote-Learner.net Inc - * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later - * @copyright (C) 2014 Remote Learner.net Inc http://www.remote-learner.net - */ - -// It must be included from a Moodle page. -if (!defined('MOODLE_INTERNAL')) { - die('Direct access to this script is forbidden.'); -} - -require_once($CFG->dirroot.'/local/kaltura/locallib.php'); - -if ($hassiteconfig) { - - // Add local plug-in configuration settings link to the navigation block. - $settings = new admin_settingpage('local_kaltura', get_string('pluginname', 'local_kaltura')); - $ADMIN->add('localplugins', $settings); - - $configsettings = get_config(KALTURA_PLUGIN_NAME); - $missinginfo = get_string('missing_required_info', 'local_kaltura'); - $message = ''; - - if (isset($configsettings->kaf_uri) && !empty($configsettings->kaf_uri)) { - $url = local_kaltura_add_protocol_to_url($configsettings->kaf_uri); - if (empty($url)) { - $message = get_string('invalid_url', 'local_kaltura'); - } else { - $message = $url.'/admin'; - $message = html_writer::tag('a', $message, array('href' => $message)); - $message = html_writer::tag('center', $message); - } - } - - if (empty($configsettings->partner_id) || empty($configsettings->adminsecret)) { - $message .= html_writer::empty_tag('br'); - $message .= html_writer::tag('center', $missinginfo); - } - - // Pull the Kaltura repository settings (if exists). - $kalrepoconfig = get_config(KALTURA_REPO_NAME); - $repoprofileid = (!empty($kalrepoconfig) && !empty($kalrepoconfig->metadata_profile_id)) ? $kalrepoconfig->metadata_profile_id : ''; - - $adminsetting = new admin_setting_heading('kaf_url_heading', get_string('kaf_configuration_hdr', 'local_kaltura'), $message); - $adminsetting->plugin = KALTURA_PLUGIN_NAME; - $settings->add($adminsetting); - - $adminsetting = new admin_setting_configtext('kaf_uri', get_string('kaf_uri', 'local_kaltura'), get_string('kaf_uri_desc', 'local_kaltura'), '', PARAM_URL); - $adminsetting->plugin = KALTURA_PLUGIN_NAME; - $settings->add($adminsetting); - - $adminsetting = new admin_setting_configtext('uri', get_string('server_uri', 'local_kaltura'), get_string('server_uri_desc', 'local_kaltura'), KALTURA_DEFAULT_URI, PARAM_URL); - $adminsetting->plugin = KALTURA_PLUGIN_NAME; - $settings->add($adminsetting); - - $adminsetting = new admin_setting_configtext('partner_id', get_string('partner_id', 'local_kaltura'), get_string('partner_id_desc', 'local_kaltura'), '', PARAM_INT); - $adminsetting->plugin = KALTURA_PLUGIN_NAME; - $settings->add($adminsetting); - - $adminsetting = new admin_setting_configtext('adminsecret', get_string('admin_secret', 'local_kaltura'), get_string('admin_secret_desc', 'local_kaltura'), '', PARAM_ALPHANUM); - $adminsetting->plugin = KALTURA_PLUGIN_NAME; - $settings->add($adminsetting); - - $url = new moodle_url('/local/kaltura/download_log.php'); - $adminsetting = new admin_setting_configcheckbox('enable_logging', get_string('trace_log', 'local_kaltura'), get_string('trace_log_desc', 'local_kaltura', $url->out()), 0); - $adminsetting->plugin = KALTURA_PLUGIN_NAME; - $settings->add($adminsetting); - - if (isset($configsettings->migration_yes) && $configsettings->migration_yes == 1) { - $url = new moodle_url('/local/kaltura/migration.php'); - - $adminsetting = new admin_setting_heading('migration_url_heading', get_string('migration_notice', 'local_kaltura', $url->out()), ''); - $adminsetting->plugin = KALTURA_PLUGIN_NAME; - $settings->add($adminsetting); - } -} diff --git a/local/kaltura/styles.css b/local/kaltura/styles.css deleted file mode 100644 index 588bf360a6ddb..0000000000000 --- a/local/kaltura/styles.css +++ /dev/null @@ -1,10 +0,0 @@ -iframe#contentframe { - border-style: none; -} - -#panelcontentframecontainer { - overflow: scroll; - -webkit-overflow-scrolling: touch; - height: 100%; - width: 100%; -} diff --git a/local/kaltura/tests/locallib_test.php b/local/kaltura/tests/locallib_test.php deleted file mode 100644 index d2bfaa04a79e9..0000000000000 --- a/local/kaltura/tests/locallib_test.php +++ /dev/null @@ -1,1293 +0,0 @@ -. - -/** - * Kaltura local library phpunit tests. - * - * @package local_kaltura - * @author Remote-Learner.net Inc - * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later - * @copyright (C) 2014 Remote Learner.net Inc http://www.remote-learner.net - */ - -defined('MOODLE_INTERNAL') || die(); - -global $CFG; -require_once($CFG->dirroot.'/local/kaltura/locallib.php'); -require_once($CFG->dirroot.'/local/kaltura/API/KalturaTypes.php'); - -/** - * @group local_kaltura - */ -class local_kaltura_locallib_testcase extends advanced_testcase { - /** - * A Dataprovider method, providing invalid data. - */ - public function mymedia_test_required_param_fail() { - $data = array( - array( - array( - // 'id' => 1, - 'title' => 'title', - 'width' => 100, - 'height' => 100, - 'module' => KAF_MYMEDIA_MODULE, - 'course' => new stdClass(), - 'cmid' => 0, - 'custom_publishdata' => '', - ) - ), - array( - array( - 'id' => 1, - // 'title' => 'title', - 'width' => 100, - 'height' => 100, - 'module' => KAF_MYMEDIA_MODULE, - 'course' => new stdClass(), - 'cmid' => 0, - 'custom_publishdata' => '', - ) - ), - array( - array( - 'id' => 1, - 'title' => 'title', - // 'width' => 100, - 'height' => 100, - 'module' => KAF_MYMEDIA_MODULE, - 'course' => new stdClass(), - 'cmid' => 0, - 'custom_publishdata' => '', - ), - ), - array( - array( - 'id' => 1, - 'title' => 'title', - 'width' => 100, - // 'height' => 100, - 'module' => KAF_MYMEDIA_MODULE, - 'course' => new stdClass(), - 'cmid' => 0, - 'custom_publishdata' => '', - ) - ), - array( - array( - 'id' => 1, - 'title' => 'title', - 'width' => 100, - 'height' => 100, - // 'module' => '', - 'course' => new stdClass(), - 'cmid' => 0, - 'custom_publishdata' => '', - ) - ), - array( - array( - 'id' => 1, - 'title' => 'title', - 'width' => 100, - 'height' => 100, - 'module' => KAF_MYMEDIA_MODULE, - // 'course' => new stdClass(), - 'cmid' => 0, - 'custom_publishdata' => '', - ) - ), - array( - array( - 'id' => 1, - 'title' => 'title', - 'width' => 100, - 'height' => 100, - 'module' => KAF_MYMEDIA_MODULE, - 'course' => new stdClass(), - // 'cmid' => 0, - 'custom_publishdata' => '', - ) - ), - array( - array( - 'id' => 1, - 'title' => 'title', - 'width' => 100, - 'height' => 100, - 'module' => KAF_MYMEDIA_MODULE, - 'course' => new stdClass(), - 'cmid' => 0, - // 'custom_publishdata' => '', - ) - ), - array( - array( - // Non-numeric. - 'id' => 'string', - 'title' => 'title', - 'width' => 100, - 'height' => 100, - 'module' => KAF_MYMEDIA_MODULE, - 'course' => new stdClass(), - 'cmid' => 0, - 'custom_publishdata' => '', - ) - ), - array( - array( - 'id' => 1, - 'title' => 'title', - // Non-numeric. - 'width' => 'string', - 'height' => 100, - 'module' => KAF_MYMEDIA_MODULE, - 'course' => new stdClass(), - 'cmid' => 0, - 'custom_publishdata' => '', - ) - ), - array( - array( - 'id' => 1, - 'title' => 'title', - 'width' => 100, - // Non-numeric. - 'height' => 'string', - 'module' => KAF_MYMEDIA_MODULE, - 'course' => new stdClass(), - 'cmid' => 0, - 'custom_publishdata' => '', - ) - ), - array( - array( - 'id' => 1, - 'title' => 'title', - 'width' => 100, - 'height' => 100, - 'module' => KAF_MYMEDIA_MODULE, - // Not an object. - 'course' => 'string', - 'cmid' => 0, - 'custom_publishdata' => '', - ) - ), - array( - array( - 'id' => 1, - 'title' => 'title', - 'width' => 100, - 'height' => 100, - 'module' => KAF_MYMEDIA_MODULE, - 'course' => new stdClass(), - // Non-numeric. - 'cmid' => 'string', - 'custom_publishdata' => '', - ) - ), - ); - return $data; - } - - /** - * This function tests whether the parameters contain all required fields. - * @param array $data An array of parameters that are invalid. - * @dataProvider mymedia_test_required_param_fail - */ - public function test_local_kaltura_validate_mymedia_required_params_fail($data) { - $this->resetAfterTest(true); - $result = local_kaltura_validate_mymedia_required_params($data); - $this->assertFalse($result); - } - - /** - * A Dataprovider method, providing invalid data. - */ - public function mediagallery_test_required_param_fail() { - $data = array( - array( - array( - // 'id' => 1, - 'title' => 'title', - 'width' => 100, - 'height' => 100, - 'module' => KAF_MEDIAGALLERY_MODULE, - 'course' => new stdClass(), - 'cmid' => 0, - 'custom_publishdata' => '', - ) - ), - array( - array( - 'id' => 1, - // 'title' => 'title', - 'width' => 100, - 'height' => 100, - 'module' => KAF_MEDIAGALLERY_MODULE, - 'course' => new stdClass(), - 'cmid' => 0, - 'custom_publishdata' => '', - ) - ), - array( - array( - 'id' => 1, - 'title' => 'title', - // 'width' => 100, - 'height' => 100, - 'module' => KAF_MEDIAGALLERY_MODULE, - 'course' => new stdClass(), - 'cmid' => 0, - 'custom_publishdata' => '', - ), - ), - array( - array( - 'id' => 1, - 'title' => 'title', - 'width' => 100, - // 'height' => 100, - 'module' => KAF_MEDIAGALLERY_MODULE, - 'course' => new stdClass(), - 'cmid' => 0, - 'custom_publishdata' => '', - ) - ), - array( - array( - 'id' => 1, - 'title' => 'title', - 'width' => 100, - 'height' => 100, - // 'module' => '', - 'course' => new stdClass(), - 'cmid' => 0, - 'custom_publishdata' => '', - ) - ), - array( - array( - 'id' => 1, - 'title' => 'title', - 'width' => 100, - 'height' => 100, - 'module' => KAF_MEDIAGALLERY_MODULE, - // 'course' => new stdClass(), - 'cmid' => 0, - 'custom_publishdata' => '', - ) - ), - array( - array( - 'id' => 1, - 'title' => 'title', - 'width' => 100, - 'height' => 100, - 'module' => KAF_MEDIAGALLERY_MODULE, - 'course' => new stdClass(), - // 'cmid' => 0, - 'custom_publishdata' => '', - ) - ), - array( - array( - 'id' => 1, - 'title' => 'title', - 'width' => 100, - 'height' => 100, - 'module' => KAF_MEDIAGALLERY_MODULE, - 'course' => new stdClass(), - 'cmid' => 0, - // 'custom_publishdata' => '', - ) - ), - array( - array( - // Non-numeric. - 'id' => 'string', - 'title' => 'title', - 'width' => 100, - 'height' => 100, - 'module' => KAF_MEDIAGALLERY_MODULE, - 'course' => new stdClass(), - 'cmid' => 0, - 'custom_publishdata' => '', - ) - ), - array( - array( - 'id' => 1, - 'title' => 'title', - // Non-numeric. - 'width' => 'string', - 'height' => 100, - 'module' => KAF_MEDIAGALLERY_MODULE, - 'course' => new stdClass(), - 'cmid' => 0, - 'custom_publishdata' => '', - ) - ), - array( - array( - 'id' => 1, - 'title' => 'title', - 'width' => 100, - // Non-numeric. - 'height' => 'string', - 'module' => KAF_MEDIAGALLERY_MODULE, - 'course' => new stdClass(), - 'cmid' => 0, - 'custom_publishdata' => '', - ) - ), - array( - array( - 'id' => 1, - 'title' => 'title', - 'width' => 100, - 'height' => 100, - 'module' => KAF_MEDIAGALLERY_MODULE, - // Not an object. - 'course' => 'string', - 'cmid' => 0, - 'custom_publishdata' => '', - ) - ), - array( - array( - 'id' => 1, - 'title' => 'title', - 'width' => 100, - 'height' => 100, - 'module' => KAF_MEDIAGALLERY_MODULE, - 'course' => new stdClass(), - // Non-numeric. - 'cmid' => 'string', - 'custom_publishdata' => '', - ) - ), - ); - return $data; - } - - /** - * This function tests whether the parameters contain all required fields. - * @param array $data An array of parameters that are invalid. - * @dataProvider mediagallery_test_required_param_fail - */ - public function test_local_kaltura_validate_coursegallery_required_params_fail($data) { - $this->resetAfterTest(true); - $result = local_kaltura_validate_mediagallery_required_params($data); - $this->assertFalse($result); - } - - /** - * This function tests whether the parameters contain all required fields. - */ - public function test_local_kaltura_validate_coursegallery_required_params() { - $this->resetAfterTest(true); - $data = array( - 'id' => 1, - 'title' => 'title', - 'width' => 100, - 'height' => 100, - 'module' => KAF_MEDIAGALLERY_MODULE, - 'course' => new stdClass(), - 'cmid' => 0, - 'custom_publishdata' => '' - ); - - $result = local_kaltura_validate_mediagallery_required_params($data); - $this->assertTrue($result); - } - - /** - * A Dataprovider method, providing invalid data. - */ - public function browseembed_test_required_param_fail() { - $data = array( - array( - array( - // 'id' => 1, - 'title' => 'title', - 'width' => 100, - 'height' => 100, - 'module' => KAF_BROWSE_EMBED_MODULE, - 'course' => new stdClass(), - 'cmid' => 0, - 'custom_publishdata' => '', - ) - ), - array( - array( - 'id' => 1, - // 'title' => 'title', - 'width' => 100, - 'height' => 100, - 'module' => KAF_BROWSE_EMBED_MODULE, - 'course' => new stdClass(), - 'cmid' => 0, - 'custom_publishdata' => '', - ) - ), - array( - array( - 'id' => 1, - 'title' => 'title', - // 'width' => 100, - 'height' => 100, - 'module' => KAF_BROWSE_EMBED_MODULE, - 'course' => new stdClass(), - 'cmid' => 0, - 'custom_publishdata' => '', - ), - ), - array( - array( - 'id' => 1, - 'title' => 'title', - 'width' => 100, - // 'height' => 100, - 'module' => KAF_BROWSE_EMBED_MODULE, - 'course' => new stdClass(), - 'cmid' => 0, - 'custom_publishdata' => '', - ) - ), - array( - array( - 'id' => 1, - 'title' => 'title', - 'width' => 100, - 'height' => 100, - // 'module' => '', - 'course' => new stdClass(), - 'cmid' => 0, - 'custom_publishdata' => '', - ) - ), - array( - array( - 'id' => 1, - 'title' => 'title', - 'width' => 100, - 'height' => 100, - 'module' => KAF_BROWSE_EMBED_MODULE, - // 'course' => new stdClass(), - 'cmid' => 0, - 'custom_publishdata' => '', - ) - ), - array( - array( - 'id' => 1, - 'title' => 'title', - 'width' => 100, - 'height' => 100, - 'module' => KAF_BROWSE_EMBED_MODULE, - 'course' => new stdClass(), - // 'cmid' => 0, - 'custom_publishdata' => '', - ) - ), - array( - array( - 'id' => 1, - 'title' => 'title', - 'width' => 100, - 'height' => 100, - 'module' => KAF_BROWSE_EMBED_MODULE, - 'course' => new stdClass(), - 'cmid' => 0, - // 'custom_publishdata' => '', - ) - ), - array( - array( - // Non-numeric. - 'id' => 'string', - 'title' => 'title', - 'width' => 100, - 'height' => 100, - 'module' => KAF_BROWSE_EMBED_MODULE, - 'course' => new stdClass(), - 'cmid' => 0, - 'custom_publishdata' => '', - ) - ), - array( - array( - 'id' => 1, - 'title' => 'title', - // Non-numeric. - 'width' => 'string', - 'height' => 100, - 'module' => KAF_BROWSE_EMBED_MODULE, - 'course' => new stdClass(), - 'cmid' => 0, - 'custom_publishdata' => '', - ) - ), - array( - array( - 'id' => 1, - 'title' => 'title', - 'width' => 100, - // Non-numeric. - 'height' => 'string', - 'module' => KAF_BROWSE_EMBED_MODULE, - 'course' => new stdClass(), - 'cmid' => 0, - 'custom_publishdata' => '', - ) - ), - array( - array( - 'id' => 1, - 'title' => 'title', - 'width' => 100, - 'height' => 100, - 'module' => KAF_BROWSE_EMBED_MODULE, - // Not an object. - 'course' => 'string', - 'cmid' => 0, - 'custom_publishdata' => '', - ) - ), - array( - array( - 'id' => 1, - 'title' => 'title', - 'width' => 100, - 'height' => 100, - 'module' => KAF_BROWSE_EMBED_MODULE, - 'course' => new stdClass(), - // Non-numeric. - 'cmid' => 'string', - 'custom_publishdata' => '', - ) - ), - ); - return $data; - } - - /** - * This function tests whether the parameters contain all required fields. - * @param array $data An array of parameters that are invalid. - * @dataProvider browseembed_test_required_param_fail - */ - public function test_local_kaltura_validate_browseembed_required_params_fail($data) { - $result = local_kaltura_validate_browseembed_required_params($data); - $this->assertFalse($result); - } - - /** - * This function tests whether the parameters contain all required fields. - */ - public function test_local_kaltura_validate_browseembed_required_params() { - $data = array( - 'id' => 1, - 'title' => 'title', - 'width' => 100, - 'height' => 100, - 'module' => KAF_BROWSE_EMBED_MODULE, - 'course' => new stdClass(), - 'cmid' => 0, - 'custom_publishdata' => '' - ); - - $result = local_kaltura_validate_browseembed_required_params($data); - $this->assertTrue($result); - } - - /** - * This function tests the return values for @see local_kaltura_get_lti_launch_container(). - */ - public function test_local_kaltura_get_lti_launch_container() { - global $CFG; - - $this->resetAfterTest(true); - $result = local_kaltura_get_lti_launch_container(true); - $this->assertEquals(LTI_LAUNCH_CONTAINER_EMBED, $result); - - $result = local_kaltura_get_lti_launch_container(false); - $this->assertEquals(LTI_LAUNCH_CONTAINER_EMBED_NO_BLOCKS, $result); - } - - /** - * Data provider for different KAF service names. - */ - public function module_name_test_fail() { - $data = array( - array('nothing'), - array(''), - array(1234) - ); - return $data; - } - - /** - * Test validating available KAF services. - * @param array $data An array of parameters that are invalid. - * @dataProvider module_name_test_fail - */ - public function test_local_kaltura_validate_kaf_module_request_fail($data) { - $this->resetAfterTest(true); - $result = local_kaltura_validate_kaf_module_request($data); - $this->assertFalse($result); - } - - /** - * Data provider for different KAF service names. - */ - public function module_name_test() { - $data = array( - array('mymedia'), - array('coursegallery'), - ); - return $data; - } - - /** - * Test validating available KAF services. - * @param array $data An array of parameters that is valid. - * @dataProvider module_name_test - */ - public function test_local_kaltura_validate_kaf_module_request($data) { - $this->resetAfterTest(true); - $result = local_kaltura_validate_kaf_module_request($data); - $this->assertTrue($result); - } - - /** - * Test that the correct end point is returned. - */ - public function test_local_kaltura_get_endpoint() { - $this->resetAfterTest(true); - $result = local_kaltura_get_endpoint(KAF_MYMEDIA_MODULE); - $this->assertEquals(KAF_MYMEDIA_ENDPOINT, $result); - $result = local_kaltura_get_endpoint(KAF_MEDIAGALLERY_MODULE); - $this->assertEquals(KAF_MEDIAGALLERY_ENDPOINT, $result); - $result = local_kaltura_get_endpoint(KAF_BROWSE_EMBED_MODULE); - $this->assertEquals(KAF_BROWSE_EMBED_ENDPOINT, $result); - } - - /** - * This functions tests properties of the mod_lti object returned by local_kaltura_format_lti_instance_object(). - */ - public function test_local_kaltura_format_lti_instance_object() { - $this->resetAfterTest(true); - - set_config('partner_id', 12345, 'local_kaltura'); - set_config('adminsecret', 54321, 'local_kaltura'); - set_config('kaf_uri', 'http://phpunit.tests/local_kaltura/tests/', 'local_kaltura'); - $expecteduri = 'phpunit.tests/local_kaltura/tests'; - - $configsettings = get_config('local_kaltura'); - - $course = new stdClass(); - $course->id = 1; - $param = array( - 'id' => 1, - 'module' => 'mymedia', - 'course' => $course, - 'title' => 'phpunit test', - 'width' => 100, - 'height' => 100, - 'cmid' => 0, - 'intro' => 'phpunitintro', - ); - - $expected = new stdClass(); - - $result = local_kaltura_format_lti_instance_object($param); - - $this->assertObjectHasAttribute('course', $result); - $this->assertObjectHasAttribute('id', $result); - $this->assertObjectHasAttribute('name', $result); - $this->assertObjectHasAttribute('intro', $result); - $this->assertObjectHasAttribute('instructorchoicesendname', $result); - $this->assertObjectHasAttribute('instructorchoicesendemailaddr', $result); - $this->assertObjectHasAttribute('instructorcustomparameters', $result); - $this->assertObjectHasAttribute('instructorchoiceacceptgrades', $result); - $this->assertObjectHasAttribute('instructorchoiceallowroster', $result); - $this->assertObjectHasAttribute('resourcekey', $result); - $this->assertObjectHasAttribute('password', $result); - $this->assertObjectHasAttribute('toolurl', $result); - $this->assertObjectHasAttribute('securetool', $result); - $this->assertObjectHasAttribute('forcessl', $result); - $this->assertObjectHasAttribute('cmid', $result); - - $this->assertEquals(1, $result->course); - $this->assertEquals(1, $result->id); - $this->assertEquals('phpunit test', $result->name); - $this->assertEquals('phpunitintro', $result->intro); - $this->assertEquals(LTI_SETTING_ALWAYS, $result->instructorchoicesendname); - $this->assertEquals(LTI_SETTING_ALWAYS, $result->instructorchoicesendemailaddr); - $this->assertEquals('', $result->instructorcustomparameters); - $this->assertEquals(LTI_SETTING_NEVER, $result->instructorchoiceacceptgrades); - $this->assertEquals(LTI_SETTING_NEVER, $result->instructorchoiceallowroster); - $this->assertEquals($configsettings->partner_id, $result->resourcekey); - $this->assertEquals($configsettings->adminsecret, $result->password); - $this->assertEquals('http://phpunit.tests/local_kaltura/tests/'.KAF_MYMEDIA_ENDPOINT, $result->toolurl); - $this->assertEquals('https://phpunit.tests/local_kaltura/tests/'.KAF_MYMEDIA_ENDPOINT, $result->securetool); - $this->assertEquals(0, $result->cmid); - } - - /** - * Test the formatting of an array to be used by mod_lti. - */ - public function test_local_kaltura_format_typeconfig() { - $this->resetAfterTest(true); - - $param = new stdClass(); - $param->instructorchoicesendname = 0; - $param->instructorchoicesendemailaddr = 'a@a.com'; - $param->instructorcustomparameters = ''; - $param->instructorchoiceacceptgrades = 0; - $param->instructorchoiceallowroster = 3; - - $expected = array( - 'sendname' => 0, - 'sendemailaddr' => 'a@a.com', - 'customparameters' => '', - 'acceptgrades' => 0, - 'allowroster' => 3, - 'launchcontainer' => 2, - ); - - $result = local_kaltura_format_typeconfig($param); - - ksort($result); - ksort($expected); - $this->assertEquals($expected, $result); - - // call function specifying no blocks to be displayed - $expected['launchcontainer'] = 3; - $result = local_kaltura_format_typeconfig($param, false); - $this->assertEquals($expected, $result); - } - - /** - * Data provider for different KAF service names. - */ - public function invalid_logging_data() { - $data = array( - array( - 'string' - ), - array( - 1 - ), - array( - new stdClass() - ) - ); - return $data; - } - - /** - * Test logging. - * @param array $data Sample data from data provider method. - * @dataProvider module_name_test - */ - public function test_local_kaltura_log_data_invalid_logging_data($data) { - $this->resetAfterTest(true); - - $result = local_kaltura_log_data('mymedia', 'http://localhost', $data, true); - $this->assertFalse($result); - } - - /** - * Test logging. - */ - public function test_local_kaltura_log_data_invalid_module() { - $this->resetAfterTest(true); - - $json = '{"courses":[{"courseId":123,"courseName":"something","roles":"ltirole1,ltirole2"},{"courseId":456,"courseName":"else","roles":"ltirole3,ltirole4"}]'; - $data = array(); - $data['test1'] = 'test2'; - $data['test3'] = 'test4'; - $data['json'] = $json; - - $result = local_kaltura_log_data('invalidmodule', 'http://localhost', $data, true); - $this->assertFalse($result); - } - - /** - * Test logging. - */ - public function test_local_kaltura_log_data_logging_request_data() { - global $DB; - - $this->resetAfterTest(true); - - $json = '{"courses":[{"courseId":123,"courseName":"something","roles":"ltirole1,ltirole2"},{"courseId":456,"courseName":"else","roles":"ltirole3,ltirole4"}]'; - $data = array(); - $data['test1'] = 'test2'; - $data['test3'] = 'test4'; - $data['json'] = $json; - - $result = local_kaltura_log_data(KAF_MYMEDIA_MODULE, 'http://localhost', $data, true); - $this->assertTrue($result); - $record = $DB->get_record('local_kaltura_log', array('module'=> 'mymedia')); - - $this->assertObjectHasAttribute('id', $record); - - $this->assertObjectHasAttribute('module', $record); - $this->assertEquals(KAF_MYMEDIA_MODULE, $record->module); - - $this->assertObjectHasAttribute('type', $record); - $this->assertEquals(KALTURA_LOG_REQUEST, $record->type); - - $this->assertObjectHasAttribute('endpoint', $record); - $this->assertEquals('http://localhost', $record->endpoint); - - $this->assertObjectHasAttribute('data', $record); - $this->assertEquals(serialize($data), $record->data); - - $this->assertObjectHasAttribute('timecreated', $record); - $this->assertNotEquals(0, $record); - - $result = local_kaltura_log_data(KAF_MEDIAGALLERY_MODULE, 'http://localhost', $data, true); - $this->assertTrue($result); - - $record = $DB->get_record('local_kaltura_log', array('module'=> 'coursegallery')); - - $this->assertObjectHasAttribute('id', $record); - - $this->assertObjectHasAttribute('module', $record); - $this->assertEquals(KAF_MEDIAGALLERY_MODULE, $record->module); - - $this->assertObjectHasAttribute('type', $record); - $this->assertEquals(KALTURA_LOG_REQUEST, $record->type); - - $this->assertObjectHasAttribute('endpoint', $record); - $this->assertEquals('http://localhost', $record->endpoint); - - $this->assertObjectHasAttribute('data', $record); - $this->assertEquals(serialize($data), $record->data); - - $this->assertObjectHasAttribute('timecreated', $record); - $this->assertNotEquals(0, $record); - } - - /** - * Test logging. - */ - public function test_local_kaltura_log_data_logging_response_data() { - global $DB; - - $this->resetAfterTest(true); - - $json = '{"courses":[{"courseId":123,"courseName":"something","roles":"ltirole1,ltirole2"},{"courseId":456,"courseName":"else","roles":"ltirole3,ltirole4"}]'; - $data = array(); - $data['test1'] = 'test2'; - $data['test3'] = 'test4'; - $data['json'] = $json; - - $result = local_kaltura_log_data('phpunit response', 'http://localhost', $data, false); - $this->assertTrue($result); - - $record = $DB->get_record('local_kaltura_log', array('module'=> 'phpunit response')); - - $this->assertObjectHasAttribute('id', $record); - - $this->assertObjectHasAttribute('module', $record); - $this->assertEquals('phpunit response', $record->module); - - $this->assertObjectHasAttribute('type', $record); - $this->assertEquals(KALTURA_LOG_RESPONSE, $record->type); - - $this->assertObjectHasAttribute('endpoint', $record); - $this->assertEquals('http://localhost', $record->endpoint); - - $this->assertObjectHasAttribute('data', $record); - $this->assertEquals(serialize($data), $record->data); - - $this->assertObjectHasAttribute('timecreated', $record); - $this->assertNotEquals(0, $record); - } - - /** - * Data provider for test_local_kaltura_format_uri(). - */ - public function uri_format_test() { - return array( - array('http://phpunit.tests/local_kaltura/tests'), - array('http://phpunit.tests/local_kaltura/tests/'), - array('https://phpunit.tests/local_kaltura/tests'), - array('https://phpunit.tests/local_kaltura/tests/'), - array('https://www.phpunit.tests/local_kaltura/tests/'), - ); - } - - /** - * Test local_kaltura_format_uri(). - * @param string $url differnt URI formats. - * @dataProvider uri_format_test - */ - public function test_local_kaltura_format_uri($uri) { - $result = local_kaltura_format_uri($uri); - $this->assertEquals('phpunit.tests/local_kaltura/tests', $result); - } - - /** - * Test local_kaltura_get_kaf_publishing_data(). This test creates 4 coures. Enrolls the user as an editing teacher in coures 1 and 4, - * then enrolls the user as a student in course 2. - */ - public function test_local_kaltura_get_kaf_publishing_data_for_non_admin() { - global $DB; - - $this->resetAfterTest(true); - - // Get the roles. - $sql = "SELECT shortname,id - FROM {role}"; - $role = (array) $DB->get_records_sql($sql); - // Create a test user. - $user = $this->getDataGenerator()->create_user(); - - // Create test courses and assign the user roles. - $coursedata = array( - 'fullname' => 'Test 1', - 'shortname' => 'T1' - ); - $courseone = $this->getDataGenerator()->create_course($coursedata); - - $this->getDataGenerator()->enrol_user($user->id, $courseone->id, $role['editingteacher']->id, 'manual'); - - $coursedata = array( - 'fullname' => 'Test 2', - 'shortname' => 'T2' - ); - $coursetwo = $this->getDataGenerator()->create_course($coursedata); - - $this->getDataGenerator()->enrol_user($user->id, $coursetwo->id, $role['student']->id, 'manual'); - - $coursedata = array( - 'fullname' => 'Test 3', - 'shortname' => 'T3' - ); - $coursethree = $this->getDataGenerator()->create_course($coursedata); - - $coursedata = array( - 'fullname' => 'Test 4', - 'shortname' => 'T4' - ); - $coursefour = $this->getDataGenerator()->create_course($coursedata); - - $this->getDataGenerator()->enrol_user($user->id, $coursefour->id, $role['editingteacher']->id, 'manual'); - - // Set the current user to the test user. - advanced_testcase::setuser($user->id); - - $result = local_kaltura_get_kaf_publishing_data(); - - $json = '{"courses":[{"courseId":"'.$courseone->id.'","courseName":"'.$courseone->fullname.'","roles":"Instructor"}'; - $json .= ',{"courseId":"'.$coursetwo->id.'","courseName":"'.$coursetwo->fullname.'","roles":"Learner"}'; - $json .= ',{"courseId":"'.$coursefour->id.'","courseName":"'.$coursefour->fullname.'","roles":"Instructor"}]}'; - - $this->assertEquals($json, $result); - } - - /** - * Test local_kaltura_get_kaf_publishing_data(). This test creates 4 coures. Enrolls the user as an editing teacher in coures 1 and 4, - * then enrolls the user as a student in course 2. - */ - public function test_local_kaltura_get_kaf_publishing_data_for_admin() { - $this->resetAfterTest(true); - - // Create test courses and assign the user roles. - $coursedata = array( - 'fullname' => 'Test 1', - 'shortname' => 'T1' - ); - $courseone = $this->getDataGenerator()->create_course($coursedata); - - $coursedata = array( - 'fullname' => 'Test 2', - 'shortname' => 'T2' - ); - $coursetwo = $this->getDataGenerator()->create_course($coursedata); - - $coursedata = array( - 'fullname' => 'Test 3', - 'shortname' => 'T3' - ); - $coursethree = $this->getDataGenerator()->create_course($coursedata); - - $coursedata = array( - 'fullname' => 'Test 4', - 'shortname' => 'T4' - ); - $coursefour = $this->getDataGenerator()->create_course($coursedata); - - advanced_testcase::setAdminUser(); - - $result = local_kaltura_get_kaf_publishing_data(); - - $json = '{"courses":[{"courseId":"'.$courseone->id.'","courseName":"'.$courseone->fullname.'","roles":"urn:lti:sysrole:ims\/lis\/Administrator"}'; - $json .= ',{"courseId":"'.$coursetwo->id.'","courseName":"'.$coursetwo->fullname.'","roles":"urn:lti:sysrole:ims\/lis\/Administrator"}'; - $json .= ',{"courseId":"'.$coursethree->id.'","courseName":"'.$coursethree->fullname.'","roles":"urn:lti:sysrole:ims\/lis\/Administrator"}'; - $json .= ',{"courseId":"'.$coursefour->id.'","courseName":"'.$coursefour->fullname.'","roles":"urn:lti:sysrole:ims\/lis\/Administrator"}]}'; - - $this->assertEquals($json, $result); - } - - /** - * Data provider for test_local_kaltura_url_contains_configured_hostname_fail(). - */ - public function uri_hostname_tests_invalid() { - return array( - array('http://phpunit1.tests/local_kaltura/tests'), - array('http://phpunit.2tests/local_kaltura/tests/'), - array('http://tests.phpunit/local_kaltura/tests/'), - ); - } - - /** - * Test test_local_kaltura_url_contains_configured_hostname_fail(). - * @param string $url differnt URI formats. - * @dataProvider uri_hostname_tests_invalid - */ - public function test_local_kaltura_url_contains_configured_hostname_fail($url) { - $this->resetAfterTest(true); - - set_config('kaf_uri', 'phpunit.tests', 'local_kaltura'); - - $result = local_kaltura_url_contains_configured_hostname($url); - $this->assertFalse($result); - } - - /** - * Data provider for test_local_kaltura_url_contains_configured_hostname(). - */ - public function uri_hostname_tests_valid() { - return array( - array('http://phpunit.tests/local_kaltura/'), - array('https://phpunit.tests/local_kaltura/tests/'), - ); - } - - /** - * Test test_local_kaltura_url_contains_configured_hostname(). - * @param string $url differnt URI formats. - * @dataProvider uri_hostname_tests_valid - */ - public function test_local_kaltura_url_contains_configured_hostname($url) { - $this->resetAfterTest(true); - - set_config('kaf_uri', 'phpunit.tests', 'local_kaltura'); - - $result = local_kaltura_url_contains_configured_hostname($url); - $this->assertTrue($result); - } - - /** - * Test local_kaltura_add_protocol_to_url(). - */ - public function test_local_kaltura_add_protocol_to_url() { - $expected = 'http://example.com'; - $url = local_kaltura_add_protocol_to_url($expected); - $this->assertEquals($expected, $url); - - $expected = 'https://example.com'; - $url = local_kaltura_add_protocol_to_url($expected); - $this->assertEquals($expected, $url); - - $expected = 'http://example.com'; - $url = local_kaltura_add_protocol_to_url('example.com'); - $this->assertEquals($expected, $url); - - $url = local_kaltura_add_protocol_to_url('htdddtp://example.com'); - $this->assertEmpty($url); - } - - /** - * Test local_kaltura_add_kaf_uri_token(). - */ - public function test_local_kaltura_add_kaf_uri_token() { - $this->resetAfterTest(true); - - // Set KAF URI to HTTP. - $url = 'http://this-is-a-test-with-phpunit.com'; - set_config('kaf_uri', $url, 'local_kaltura'); - - $path = '/phpunit/testing/test1/'; - $expected = $url.$path; - - // Test HTTP returns with the confgirued URL in HTTP. - $actual = 'http://'.KALTURA_URI_TOKEN.$path; - $result = local_kaltura_add_kaf_uri_token($actual); - - $this->assertEquals($expected, $result); - - // Test HTTPS returns with the configured URL in HTTP. - $actual = 'https://'.KALTURA_URI_TOKEN.$path; - $result = local_kaltura_add_kaf_uri_token($actual); - - $this->assertEquals($expected, $result); - - // Set KAF URI to HTTPS. - $url = 'https://this-is-a-test-with-phpunit.com'; - set_config('kaf_uri', $url, 'local_kaltura'); - $expected = $url.$path; - - // Test HTTP returns with the confgirued URL in HTTPS. - $actual = 'http://'.KALTURA_URI_TOKEN.$path; - $result = local_kaltura_add_kaf_uri_token($actual); - - $this->assertEquals($expected, $result); - - // Test HTTPS returns with the confgirued URL in HTTPS. - $actual = 'https://'.KALTURA_URI_TOKEN.$path; - $result = local_kaltura_add_kaf_uri_token($actual); - - $this->assertEquals($expected, $result); - } - - /** - * Test local_kaltura_encode_object_for_storage() - */ - public function test_local_kaltura_encode_object_for_storage() { - $data = array(); - $result = local_kaltura_encode_object_for_storage($data); - $this->assertEquals('', $result); - - $data = new stdClass(); - $result = local_kaltura_encode_object_for_storage($data); - $this->assertEquals('', $result); - - $data = 'hello'; - $result = local_kaltura_encode_object_for_storage($data); - $this->assertEquals('', $result); - - $data = ''; - $result = local_kaltura_encode_object_for_storage($data); - $this->assertEquals('', $result); - - $data = new stdClass(); - $data->one = 'abc'; - $data->two = 'def'; - $result = local_kaltura_encode_object_for_storage($data); - $expected = base64_encode(serialize($data)); - $this->assertEquals($expected, $result); - - $data = array('one' => 'abc', 'two' => 'def'); - $result = local_kaltura_encode_object_for_storage($data); - $expected = base64_encode(serialize($data)); - $this->assertEquals($expected, $result); - } - - /** - * Test local_kaltura_decode_object_for_storage() - */ - public function test_local_kaltura_decode_object_for_storage() { - $result = local_kaltura_decode_object_for_storage(''); - $this->assertEquals('', $result); - - $expected = new stdClass(); - $expected->one = 'abc'; - $expected->two = 'def'; - $data = base64_encode(serialize($expected)); - $result = local_kaltura_decode_object_for_storage($data); - $this->assertEquals($expected, $result); - - $expected = array('one' => 'abc', 'two' => 'def'); - $data = base64_encode(serialize($expected)); - $result = local_kaltura_decode_object_for_storage($data); - $this->assertEquals($expected, $result); - } - - /** - * Test local_kaltura_convert_kaltura_base_entry_object() - */ - public function test_local_kaltura_convert_kaltura_base_entry_object() { - $result = local_kaltura_convert_kaltura_base_entry_object(new stdclass()); - $this->assertFalse($result); - - // Test converting a video entry. - $time = time(); - $base = new KalturaMediaEntry(); - $base->dataUrl = 'http:/phpunittest.com'; - $base->width = 100; - $base->height = 200; - $base->id = 'phpunit'; - $base->name = 'phpunit title'; - $base->thumbnailUrl = 'http://phpunittest.com/thumb'; - $base->duration = 300; - $base->description = 'phpunit description'; - $base->createdAt = $time; - $base->creatorId = 'phpunit user'; - $base->tags = ''; - - $expected = new stdClass(); - $expected->url = ''; - $expected->dataurl = 'http:/phpunittest.com'; - $expected->width = 100; - $expected->height = 200; - $expected->entryid = 'phpunit'; - $expected->title = 'phpunit title'; - $expected->thumbnailurl = 'http://phpunittest.com/thumb'; - $expected->duration = 300; - $expected->description = 'phpunit description'; - $expected->createdat = $time; - $expected->owner = 'phpunit user'; - $expected->tags = ''; - $expected->showtitle = 'on'; - $expected->showdescription = 'on'; - $expected->showowner = 'on'; - $expected->player = ''; - $expected->size = ''; - - $result = local_kaltura_convert_kaltura_base_entry_object($base); - $this->assertEquals($expected, $result); - - // Test converting a video presentation entry. - $base = new KalturaDataEntry(); - $base->id = 'phpunit'; - $base->name = 'phpunit title'; - $base->description = 'phpunit description'; - $base->creatorId = 'phpunit creator'; - $base->tags = 'phpunit tags'; - $base->createdAt = $time; - $base->thumbnailUrl = 'http://phpunittest.com/thumb'; - - $expected = new stdClass(); - $expected->url = ''; - $expected->dataurl = ''; - $expected->width = 0; - $expected->height = 0; - $expected->entryid = 'phpunit'; - $expected->title = 'phpunit title'; - $expected->thumbnailurl = 'http://phpunittest.com/thumb'; - $expected->duration = 0; - $expected->description = 'phpunit description'; - $expected->createdat = $time; - $expected->owner = 'phpunit creator'; - $expected->tags = 'phpunit tags'; - $expected->showtitle = 'on'; - $expected->showdescription = 'on'; - $expected->showowner = 'on'; - $expected->player = ''; - $expected->size = ''; - - $result = local_kaltura_convert_kaltura_base_entry_object($base); - $this->assertEquals($expected, $result); - } -} diff --git a/local/kaltura/tests/migrationlib_test.php b/local/kaltura/tests/migrationlib_test.php deleted file mode 100644 index 787db66afa10a..0000000000000 --- a/local/kaltura/tests/migrationlib_test.php +++ /dev/null @@ -1,194 +0,0 @@ -. - -/** - * Kaltura local_kaltura_migration_progress class phpunit tests. - * - * @package local_kaltura - * @author Remote-Learner.net Inc - * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later - * @copyright (C) 2014 Remote Learner.net Inc http://www.remote-learner.net - */ - -defined('MOODLE_INTERNAL') || die(); - -global $CFG; -require_once($CFG->dirroot.'/local/kaltura/locallib.php'); -require_once($CFG->dirroot.'/local/kaltura/migrationlib.php'); - -/** - * @group local_kaltura - */ -class local_kaltura_migrationlib_testcase extends advanced_testcase { - /** - * Test initialization of config values. - */ - public function test_initialization_of_config_values() { - $this->resetAfterTest(true); - - $result = new local_kaltura_migration_progress(); - $result = null; - - $configsettings = get_config(KALTURA_PLUGIN_NAME); - - $this->assertObjectHasAttribute('migrationstarted', $configsettings); - $this->assertObjectHasAttribute('existingcategoryrun', $configsettings); - $this->assertObjectHasAttribute('sharedcategoryrun', $configsettings); - $this->assertObjectHasAttribute('categoriescreated', $configsettings); - $this->assertObjectHasAttribute('entriesmigrated', $configsettings); - $this->assertObjectHasAttribute('kafcategoryrootid', $configsettings); - $this->assertEquals(0, $configsettings->migrationstarted); - $this->assertEquals(0, $configsettings->existingcategoryrun); - $this->assertEquals(0, $configsettings->sharedcategoryrun); - $this->assertEquals(0, $configsettings->categoriescreated); - $this->assertEquals(0, $configsettings->entriesmigrated); - $this->assertEquals(0, $configsettings->kafcategoryrootid); - } - - /** - * Test existingcategory accessor functions. - */ - public function test_existingcategoryrun() { - $this->resetAfterTest(true); - - $result = new local_kaltura_migration_progress(); - local_kaltura_migration_progress::set_existingcategoryrun(11); - $value = local_kaltura_migration_progress::get_existingcategoryrun(); - - $this->assertEquals(11, $value); - - $result = null; - $value = get_config(KALTURA_PLUGIN_NAME, 'existingcategoryrun'); - - $this->assertEquals(11, $value); - } - - /** - * Test sharedcategoryrun accessor functions. - */ - public function test_sharedcategoryrun() { - $this->resetAfterTest(true); - - $result = new local_kaltura_migration_progress(); - local_kaltura_migration_progress::set_sharedcategoryrun(11); - $value = local_kaltura_migration_progress::get_sharedcategoryrun(); - - $this->assertEquals(11, $value); - - $result = null; - $value = get_config(KALTURA_PLUGIN_NAME, 'sharedcategoryrun'); - - $this->assertEquals(11, $value); - } - - /** - * Test kafcategoryrootid functions. - */ - public function test_kafcategoryrootid() { - $this->resetAfterTest(true); - - $result = new local_kaltura_migration_progress(); - local_kaltura_migration_progress::set_kafcategoryrootid(11); - $value = local_kaltura_migration_progress::get_kafcategoryrootid(); - - $this->assertEquals(11, $value); - - $result = null; - $value = get_config(KALTURA_PLUGIN_NAME, 'kafcategoryrootid'); - - $this->assertEquals(11, $value); - } - - /** - * Test categoriescreated functions. - */ - public function test_categoriescreated() { - $this->resetAfterTest(true); - - $result = new local_kaltura_migration_progress(); - local_kaltura_migration_progress::increment_categoriescreated(); - $value = local_kaltura_migration_progress::get_categoriescreated(); - - $this->assertEquals(1, $value); - - $result = null; - $value = get_config(KALTURA_PLUGIN_NAME, 'categoriescreated'); - - $this->assertEquals(1, $value); - } - - /** - * Test entriesmigrated functions. - */ - public function test_entriesmigrated() { - $this->resetAfterTest(true); - - $result = new local_kaltura_migration_progress(); - local_kaltura_migration_progress::increment_entriesmigrated(); - $value = local_kaltura_migration_progress::get_entriesmigrated(); - - $this->assertEquals(1, $value); - - $result = null; - $value = get_config(KALTURA_PLUGIN_NAME, 'entriesmigrated'); - - $this->assertEquals(1, $value); - } - - /** - * Test migrationstarted functions. - */ - public function test_migrationstarted() { - $this->resetAfterTest(true); - - $result = new local_kaltura_migration_progress(); - local_kaltura_migration_progress::init_migrationstarted(); - $value = local_kaltura_migration_progress::get_migrationstarted(); - - $this->assertNotEquals(0, $value); - - $result = null; - $value = get_config(KALTURA_PLUGIN_NAME, 'migrationstarted'); - - $this->assertNotEquals(0, $value); - } - - /** - * Test resetting all migration progress properties functions. - */ - public function test_resetall() { - $this->resetAfterTest(true); - - $result = new local_kaltura_migration_progress(); - local_kaltura_migration_progress::set_existingcategoryrun(11); - local_kaltura_migration_progress::set_sharedcategoryrun(11); - local_kaltura_migration_progress::increment_categoriescreated(); - local_kaltura_migration_progress::increment_entriesmigrated(); - local_kaltura_migration_progress::init_migrationstarted(); - local_kaltura_migration_progress::set_kafcategoryrootid(11); - local_kaltura_migration_progress::reset_all(); - - $result = null; - - $configsettings = get_config(KALTURA_PLUGIN_NAME); - $this->assertEquals(0, $configsettings->migrationstarted); - $this->assertEquals(0, $configsettings->existingcategoryrun); - $this->assertEquals(0, $configsettings->sharedcategoryrun); - $this->assertEquals(0, $configsettings->categoriescreated); - $this->assertEquals(0, $configsettings->entriesmigrated); - $this->assertEquals(0, $configsettings->kafcategoryrootid); - } -} \ No newline at end of file diff --git a/local/kaltura/version.php b/local/kaltura/version.php deleted file mode 100644 index 15717660f91a0..0000000000000 --- a/local/kaltura/version.php +++ /dev/null @@ -1,32 +0,0 @@ -. - -/** - * Kaltura version file. - * - * @package local_kaltura - * @author Remote-Learner.net Inc - * @license http://www.gnu.org/copyleft/gpl.html GNU GPL - * @copyright (C) 2014 Remote Learner.net Inc http://www.remote-learner.net - */ - -if (!defined('MOODLE_INTERNAL')) { - die('Direct access to this script is forbidden.'); -} - -$plugin->version = 2014013000.01; -$plugin->component = 'local_kaltura'; -$plugin->release = 'Kaltura release 4.0.00 (RL: TBD)'; -$plugin->requires = 2013051400; -$plugin->maturity = MATURITY_STABLE; diff --git a/local/kaltura/yui/build/moodle-local_kaltura-lticontainer/moodle-local_kaltura-lticontainer-debug.js b/local/kaltura/yui/build/moodle-local_kaltura-lticontainer/moodle-local_kaltura-lticontainer-debug.js deleted file mode 100644 index 14660e707a1bf..0000000000000 --- a/local/kaltura/yui/build/moodle-local_kaltura-lticontainer/moodle-local_kaltura-lticontainer-debug.js +++ /dev/null @@ -1,167 +0,0 @@ -YUI.add('moodle-local_kaltura-lticontainer', function (Y, NAME) { - -// This file is part of Moodle - http://moodle.org/ -// -// Moodle is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// Moodle is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with Moodle. If not, see . - -/** - * YUI module used to resize the LTI launch container. - * - * @package local_kaltura - * @author Remote-Learner.net Inc - * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later - * @copyright (C) 2014 Remote Learner.net Inc http://www.remote-learner.net - */ - -/** - * This method calls the base class constructor - * @method LTICONTAINER - */ -var LTICONTAINER = function() { - LTICONTAINER.superclass.constructor.apply(this, arguments); -}; - -Y.extend(LTICONTAINER, Y.Base, { - /** - * The last known height of the element. - * @property lastheight - * @type {Integer} - * @default null - */ - lastheight: null, - - /** - * Add padding to make the bottom of the iframe visible. The iframe wasn't visible on some themes. Probably because of border widths, etc. - * @property padding - * @type {Integer} - * @default 15 - */ - padding: 15, - - /** - * Height of window. - * @property viewportheight - * @type {Integer} - * @default 15 - */ - viewportheight: null, - - /** - * Height of the entire document. - * @property documentheight - * @type {Integer} - * @default null - */ - documentheight: null, - - /** - * Height of the body element. - * @property documentheight - * @type {Integer} - * @default null - */ - clientheight: null, - - /** - * User video width size selection. - * @property kalvidwidth - * @type {Integer} - * @default null - */ - kalvidwidth: null, - - /** - * The YUI node object for the iframe container. - * @property ltiframe - * @type {Object} - * @default null - */ - ltiframe: null, - - /** - * Init function for the checkboxselection module - * @property params - * @type {Object} - */ - init : function(params) { - var bodynode = Y.one('body[class~='+params.bodyclass+']'); - - this.lastheight = params.lastheight; - this.padding = params.padding; - this.viewportheight = bodynode.get('winHeight'); - this.documentheight = bodynode.get('docHeight'); - this.clientheight = bodynode.getDOMNode.clientHeight; - this.ltiframe = Y.one('#contentframe'); - this.kalvidwidth = params.kalvidwidth; - - this.resize(); - this.timer = Y.later(250, this, this.resize); - }, - - /** - * This function resizes the iframe height and width. - */ - resize : function() { - if (this.lastheight !== Math.min(this.documentheight, this.viewportheight)) { - var newheight = this.viewportheight - this.ltiframe.getY() - this.padding+"px"; - this.ltiframe.setStyle('height', newheight); - this.lastheight = Math.min(this.documentheight, this.viewportheight); - } - - var kalvidcontent = Y.one('#kalvid_content'); - if (kalvidcontent !== null) { - var maxwidth = kalvidcontent.get('offsetWidth'); - var allowedsize = maxwidth - this.padding; - - if (this.kalvidwidth !== null) { - // Double current user's video width selection as requested by Kaltura. - var newsize = this.kalvidwidth * 2; - - // If "newsize" if over allowed size then set it to the maximum allowed. - if (newsize > allowedsize) { - this.ltiframe.setStyle('width', allowedsize+'px'); - } else { - this.ltiframe.setStyle('width', newsize+'px'); - } - } - } - } -}, -{ - NAME : 'moodle-local_kaltura-lticontainer', - ATTRS : { - bodyclass : { - value : null - }, - lastheight : { - value : null - }, - padding: { - value : 15 - } - } -}); -M.local_kaltura = M.local_kaltura || {}; - -/** - * Entry point for lticontainer module - * @param string params additional parameters. - * @return object the lticontainer object - */ -M.local_kaltura.init = function(params) { - return new LTICONTAINER(params); -}; - - -}, '@VERSION@', {"requires": ["base", "node"]}); diff --git a/local/kaltura/yui/build/moodle-local_kaltura-lticontainer/moodle-local_kaltura-lticontainer-min.js b/local/kaltura/yui/build/moodle-local_kaltura-lticontainer/moodle-local_kaltura-lticontainer-min.js deleted file mode 100644 index fbfe81e6b25f3..0000000000000 --- a/local/kaltura/yui/build/moodle-local_kaltura-lticontainer/moodle-local_kaltura-lticontainer-min.js +++ /dev/null @@ -1 +0,0 @@ -YUI.add("moodle-local_kaltura-lticontainer",function(e,t){var n=function(){n.superclass.constructor.apply(this,arguments)};e.extend(n,e.Base,{lastheight:null,padding:15,viewportheight:null,documentheight:null,clientheight:null,kalvidwidth:null,ltiframe:null,init:function(t){var n=e.one("body[class~="+t.bodyclass+"]");this.lastheight=t.lastheight,this.padding=t.padding,this.viewportheight=n.get("winHeight"),this.documentheight=n.get("docHeight"),this.clientheight=n.getDOMNode.clientHeight,this.ltiframe=e.one("#contentframe"),this.kalvidwidth=t.kalvidwidth,this.resize(),this.timer=e.later(250,this,this.resize)},resize:function(){if(this.lastheight!==Math.min(this.documentheight,this.viewportheight)){var t=this.viewportheight-this.ltiframe.getY()-this.padding+"px";this.ltiframe.setStyle("height",t),this.lastheight=Math.min(this.documentheight,this.viewportheight)}var n=e.one("#kalvid_content");if(n!==null){var r=n.get("offsetWidth"),i=r-this.padding;if(this.kalvidwidth!==null){var s=this.kalvidwidth*2;s>i?this.ltiframe.setStyle("width",i+"px"):this.ltiframe.setStyle("width",s+"px")}}}},{NAME:"moodle-local_kaltura-lticontainer",ATTRS:{bodyclass:{value:null},lastheight:{value:null},padding:{value:15}}}),M.local_kaltura=M.local_kaltura||{},M.local_kaltura.init=function(e){return new n(e)}},"@VERSION@",{requires:["base","node"]}); diff --git a/local/kaltura/yui/build/moodle-local_kaltura-lticontainer/moodle-local_kaltura-lticontainer.js b/local/kaltura/yui/build/moodle-local_kaltura-lticontainer/moodle-local_kaltura-lticontainer.js deleted file mode 100644 index 14660e707a1bf..0000000000000 --- a/local/kaltura/yui/build/moodle-local_kaltura-lticontainer/moodle-local_kaltura-lticontainer.js +++ /dev/null @@ -1,167 +0,0 @@ -YUI.add('moodle-local_kaltura-lticontainer', function (Y, NAME) { - -// This file is part of Moodle - http://moodle.org/ -// -// Moodle is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// Moodle is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with Moodle. If not, see . - -/** - * YUI module used to resize the LTI launch container. - * - * @package local_kaltura - * @author Remote-Learner.net Inc - * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later - * @copyright (C) 2014 Remote Learner.net Inc http://www.remote-learner.net - */ - -/** - * This method calls the base class constructor - * @method LTICONTAINER - */ -var LTICONTAINER = function() { - LTICONTAINER.superclass.constructor.apply(this, arguments); -}; - -Y.extend(LTICONTAINER, Y.Base, { - /** - * The last known height of the element. - * @property lastheight - * @type {Integer} - * @default null - */ - lastheight: null, - - /** - * Add padding to make the bottom of the iframe visible. The iframe wasn't visible on some themes. Probably because of border widths, etc. - * @property padding - * @type {Integer} - * @default 15 - */ - padding: 15, - - /** - * Height of window. - * @property viewportheight - * @type {Integer} - * @default 15 - */ - viewportheight: null, - - /** - * Height of the entire document. - * @property documentheight - * @type {Integer} - * @default null - */ - documentheight: null, - - /** - * Height of the body element. - * @property documentheight - * @type {Integer} - * @default null - */ - clientheight: null, - - /** - * User video width size selection. - * @property kalvidwidth - * @type {Integer} - * @default null - */ - kalvidwidth: null, - - /** - * The YUI node object for the iframe container. - * @property ltiframe - * @type {Object} - * @default null - */ - ltiframe: null, - - /** - * Init function for the checkboxselection module - * @property params - * @type {Object} - */ - init : function(params) { - var bodynode = Y.one('body[class~='+params.bodyclass+']'); - - this.lastheight = params.lastheight; - this.padding = params.padding; - this.viewportheight = bodynode.get('winHeight'); - this.documentheight = bodynode.get('docHeight'); - this.clientheight = bodynode.getDOMNode.clientHeight; - this.ltiframe = Y.one('#contentframe'); - this.kalvidwidth = params.kalvidwidth; - - this.resize(); - this.timer = Y.later(250, this, this.resize); - }, - - /** - * This function resizes the iframe height and width. - */ - resize : function() { - if (this.lastheight !== Math.min(this.documentheight, this.viewportheight)) { - var newheight = this.viewportheight - this.ltiframe.getY() - this.padding+"px"; - this.ltiframe.setStyle('height', newheight); - this.lastheight = Math.min(this.documentheight, this.viewportheight); - } - - var kalvidcontent = Y.one('#kalvid_content'); - if (kalvidcontent !== null) { - var maxwidth = kalvidcontent.get('offsetWidth'); - var allowedsize = maxwidth - this.padding; - - if (this.kalvidwidth !== null) { - // Double current user's video width selection as requested by Kaltura. - var newsize = this.kalvidwidth * 2; - - // If "newsize" if over allowed size then set it to the maximum allowed. - if (newsize > allowedsize) { - this.ltiframe.setStyle('width', allowedsize+'px'); - } else { - this.ltiframe.setStyle('width', newsize+'px'); - } - } - } - } -}, -{ - NAME : 'moodle-local_kaltura-lticontainer', - ATTRS : { - bodyclass : { - value : null - }, - lastheight : { - value : null - }, - padding: { - value : 15 - } - } -}); -M.local_kaltura = M.local_kaltura || {}; - -/** - * Entry point for lticontainer module - * @param string params additional parameters. - * @return object the lticontainer object - */ -M.local_kaltura.init = function(params) { - return new LTICONTAINER(params); -}; - - -}, '@VERSION@', {"requires": ["base", "node"]}); diff --git a/local/kaltura/yui/build/moodle-local_kaltura-ltipanel/moodle-local_kaltura-ltipanel-debug.js b/local/kaltura/yui/build/moodle-local_kaltura-ltipanel/moodle-local_kaltura-ltipanel-debug.js deleted file mode 100644 index 0d388ad0d3c8d..0000000000000 --- a/local/kaltura/yui/build/moodle-local_kaltura-ltipanel/moodle-local_kaltura-ltipanel-debug.js +++ /dev/null @@ -1,471 +0,0 @@ -YUI.add('moodle-local_kaltura-ltipanel', function (Y, NAME) { - -// This file is part of Moodle - http://moodle.org/ -// -// Moodle is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// Moodle is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with Moodle. If not, see . - -/** - * YUI module for displaying an LTI launch within a YUI panel. - * - * @package local_kaltura - * @author Remote-Learner.net Inc - * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later - * @copyright (C) 2014 Remote Learner.net Inc http://www.remote-learner.net - */ - - /** - * This method calls the base class constructor - * @method LTIPANEL - */ -var LTIPANEL = function() { - LTIPANEL.superclass.constructor.apply(this, arguments); -}; - -Y.extend(LTIPANEL, Y.Base, { - /** - * Contains the object tag needed to launch an LTI session. - * @property panelbodycontent - * @type {String} - * @default null - */ - panelbodycontent: null, - - /** - * Set to true if panel is visible, otherwise false. - * @property panelvisible - * @type {Boolean} - * @default null - */ - panelvisible: false, - - /** - * The panel object - * @property panel - * @type {Object} - * @default null - */ - panel: null, - - /** - * The name of the initiating module. - * @property modulename - * @type {String} - * @default null - */ - modulename: null, - - /** - * The id value of the add media button. - * @property addvidbtnid - * @type {String} - * @default null - */ - addvidbtnid: null, - - /** - * Init function for the checkboxselection module - * @property params - * @type {Object} - */ - init : function(params) { - // Check to make sure parameters are initialized - if ('0' === params.addvidbtnid || '0' === params.ltilaunchurl || 0 === params.courseid || 0 === params.height || 0 === params.width) { - alert('Some parameters were not initialized.'); - return; - } - - this.modulename = params.modulename; - this.addvidbtnid = params.addvidbtnid; - - var addvideobtn = Y.one('#'+params.addvidbtnid); - addvideobtn.on('click', this.open_panel_callback, this, params.ltilaunchurl, params.height, params.width); - }, - - /** - * Event handler callback for when the add video button is clicked. This function creates the a panel element. - * @property e - * @type {Object} - */ - open_panel_callback : function(e, url, height, width) { - var panelheight = parseInt(height, 10) + 45; - var panelwidth = parseInt(width, 10) + 23 + 'px'; - - width = width+'px'; - // Apply special width for mobile devices as requested by Kaltura. - if (Y.UA.ipod !== 0 || Y.UA.ipad !== 0 || Y.UA.iphone !== 0 || Y.UA.android !== 0 || Y.UA.mobile !== null) { - panelwidth = '80%'; - width = '100%'; - } - - var iframe = ""; - this.panelbodycontent = iframe; - if (Y.UA.ipod !== 0 || Y.UA.ipad !== 0 || Y.UA.iphone !== 0) { - // This outer div will constrain the iframe from overlapping over its content region on iOS devices. - this.panelbodycontent = "
    "+iframe+"
    "; - } - - // If the panel has not yet been initialized. - if (null === this.panel) { - this.panel = new Y.Panel({ - srcNode : Y.Node.create('
    '), - headerContent : '', - bodyContent : this.panelbodycontent, - width : panelwidth, - height : panelheight+"px", - zIndex : 6, - centered : true, - modal : true, - visible : false, - render : true, - hideOn : [ - { - node : Y.one('input[id=closeltipanel]'), - eventName : 'click' - } - ] - }); - - this.panel.show(); - - // Listen to simulated click event send from local/kaltura/service.php - Y.one('input[id=closeltipanel]').on('click', this.lti_hide_panel_callback, this); - - // // Listen to when the panel is made visible or hidden - this.panel.after('visibleChange', this.lti_panel_visible_change_callback, this); - } else { - this.panel.show(); - } - }, - - /** - * Event handler callback for when a simulated click event is triggered on a specifc element. - */ - lti_hide_panel_callback : function() { - // hide the thumbnail image. - var imagenode = Y.one('img[id=video_thumbnail]'); - imagenode.setStyle('display', 'none'); - // Update the iframe element attributes - var iframenode = Y.one('iframe[id=contentframe]'); - iframenode.setAttribute('width', Y.one('input[id=width]').getAttribute('value')); - iframenode.setAttribute('height', Y.one('input[id=height]').getAttribute('value')); - iframenode.setStyle('display', 'inline'); - - // If the page is a Video presentation or resource execute a function to change the button caption KALDEV-579 - var element = Y.one('input[name=modulename]'); - - if (undefined !== element && ('kalvidres' === this.modulename || 'kalvidpres' === this.modulename)) { - this.lti_panel_change_add_media_button_caption(); - } - }, - - lti_panel_change_add_media_button_caption : function() { - // Need to find a better way of doing this. Change was made for KALDEV-579. - var buttoncaption = M.util.get_string('replace_video', this.modulename); - if (buttoncaption !== Y.one('#'+this.addvidbtnid).getAttribute('value')) { - Y.one('#'+this.addvidbtnid).setAttribute('value', buttoncaption); - } - }, - - /** - * Event handler callback for when the panel is made hidden or visible. - */ - lti_panel_visible_change_callback : function() { - this.panelvisible = this.panel.get('visible'); - - // If panel is visible, re-launch the LIT request so that the user sees the main page. Instead of the last page they visited. If the panel is not visible then - // set the content to an empty string; this prevents videos from the iframe from continuing to play after the panel was closed. - if (true === this.panelvisible) { - this.panel.set('bodyContent', this.panelbodycontent); - } else { - this.panel.set('bodyContent', ''); - } - } -}, -{ - NAME : 'moodle-local_kaltura-ltipanel', - ATTRS : { - addvidbtnid : { - value: '0' - }, - ltilaunchurl : { - value: '0' - }, - height : { - value: 0 - }, - width : { - value: 0 - }, - modulename : { - value: '' - } - } -}); - -/** - * This method calls the base class constructor. The primary difference between LTIPANELMEDIAASSIGNMENT and LTIPANEL is that - * LTIPANELMEDIAASSIGNMENT creates a node and appends it to the body tag of the page. The reason for this is due to an issue with the Moodle - * navbar covering up part of the YUI panel, if the panel markup is appended to a child element within the body tag. - * @method LTIPANELMEDIAASSIGNMENT - */ -var LTIPANELMEDIAASSIGNMENT = function() { - LTIPANELMEDIAASSIGNMENT.superclass.constructor.apply(this, arguments); -}; - -Y.extend(LTIPANELMEDIAASSIGNMENT, Y.Base, { - /** - * Contains the object tag needed to launch an LTI session. - * @property panelbodycontent - * @type {String} - * @default null - */ - panelbodycontent: null, - - /** - * Set to true if panel is visible, otherwise false. - * @property panelvisible - * @type {Boolean} - * @default null - */ - panelvisible: false, - - /** - * The panel object - * @property panel - * @type {Object} - * @default null - */ - panel: null, - - /** - * The panel height. - * @property panelheight - * @type {Integer} - * @default 0 - */ - panelheight: 0, - - /** - * The panel width. - * @property panelwidth - * @type {Integer} - * @default 0 - */ - panelwidth: 0, - - /** - * Init function for the checkboxselection module - * @property params - * @type {Object} - */ - init : function(params) { - // Check to make sure parameters are initialized - if ('0' === params.addvidbtnid || '0' === params.ltilaunchurl || 0 === params.courseid || 0 === params.height || 0 === params.width) { - return; - } - - var addvideobtn = Y.one('#'+params.addvidbtnid); - addvideobtn.on('click', this.open_panel_callback, this, params.ltilaunchurl, params.height, params.width); - }, - - /** - * Event handler callback for when the add video button is clicked. This function creates the a panel element. - * @property e - * @type {Object} - */ - open_panel_callback : function(e, url, height, width) { - this.panelheight = parseInt(height, 10) + 45; - this.panelwidth = parseInt(width, 10) + 23; - - this.panelbodycontent = ""; - - // If the panel has not yet been initialized. - if (null === this.panel) { - this.panel = new Y.Panel({ - srcNode : Y.Node.create('
    '), - headerContent : '', - bodyContent : this.panelbodycontent, - width : this.panelwidth+"px", - height : this.panelheight+"px", - zIndex : 6, - centered : true, - modal : true, - visible : false, - render : true, - hideOn : [ - { - node : Y.one('input[id=closeltipanel]'), - eventName : 'click' - } - ] - }); - - this.panel.show(); - - // Listen to simulated click event send from local/kaltura/service.php - Y.one('input[id=closeltipanel]').on('click', this.lti_hide_panel_callback, this); - - // Listen to when the panel is made visible or hidden - this.panel.after('visibleChange', this.lti_panel_visible_change_callback, this); - } else { - this.panel.show(); - } - }, - - /** - * Event handler callback for when a simulated click event is triggered on a specifc element. - */ - lti_hide_panel_callback : function() { - // Enable submit button - Y.one('input[id=submit_video]').removeAttribute('disabled'); - // hide the thumbnail image. - var imagenode = Y.one('img[id=video_thumbnail]'); - imagenode.setStyle('display', 'none'); - // Update the iframe element attributes - var iframenode = Y.one('iframe[id=contentframe]'); - iframenode.setAttribute('width', Y.one('input[id=width]').getAttribute('value')); - iframenode.setAttribute('height', Y.one('input[id=height]').getAttribute('value')); - iframenode.setStyle('display', 'inline'); - Y.one('#id_add_video').set('value', M.util.get_string('replacevideo', 'kalvidassign')); - }, - - /** - * Event handler callback for when the panel is made hidden or visible. - */ - lti_panel_visible_change_callback : function() { - this.panelvisible = this.panel.get('visible'); - - // If panel is visible, re-launch the LIT request so that the user sees the main page. Instead of the last page they visited. If the panel is not visible then - // set the content to an empty string; this prevents videos from the iframe from continuing to play after the panel was closed. - if (true === this.panelvisible) { - this.panel.set('bodyContent', this.panelbodycontent); - this.panel.set('height', this.panelheight); - this.panel.set('width', this.panelwidth); - this.panel.set('centered', true); - } else { - this.panel.set('bodyContent', ''); - } - } -}, -{ - NAME : 'moodle-local_kaltura-ltipanel', - ATTRS : { - addvidbtnid : { - value: '0' - }, - ltilaunchurl : { - value: '0' - }, - height : { - value: 0 - }, - width : { - value: 0 - } - } -}); - -/** - * This method calls the base class constructor. This module renders a Panel for viewing media from multiple sources. - * @method LTISUBMISSIONREVIEW - */ -var LTISUBMISSIONREVIEW = function() { - LTISUBMISSIONREVIEW.superclass.constructor.apply(this, arguments); -}; - -Y.extend(LTISUBMISSIONREVIEW, Y.Base, { - /** - * An instance of the ltimediaassignment class. - * @property ltimediaassignment - * @type {Object} - * @default null - */ - ltimediaassignment: null, - - - /** - * Init function for the checkboxselection module - * @property params - * @type {Object} - */ - init : function(ltimediaassignment) { - this.ltimediaassignment = ltimediaassignment; - Y.one('form[id=fastgrade]').delegate('click', this.review_submission, 'a[name=submission_source]', this); - }, - - /** - * Callback function for when a user clicks on the review submission link. - * @property e - * @type {Object} - */ - review_submission : function(e) { - e.preventDefault(); - var source, height, width; - // Test if the target is an anchor tag or img tag. - if (e.target.test('a')) { - source = e.target.getAttribute('href'); - height = e.target.ancestor('div[name=media_submission]').get('childNodes').filter('input[name=height]').get('value'); - width = e.target.ancestor('div[name=media_submission]').get('childNodes').filter('input[name=width]').get('value'); - } else { - source = e.target.ancestor('a[name=submission_source]').getAttribute('href'); - height = e.target.ancestor('div[name=media_submission]').get('childNodes').filter('input[name=height]').get('value'); - width = e.target.ancestor('div[name=media_submission]').get('childNodes').filter('input[name=width]').get('value'); - } - - this.ltimediaassignment.open_panel_callback(null, source, height, width); - } -}, -{ - NAME : 'moodle-local_kaltura-ltipanel' -}); - -M.local_kaltura = M.local_kaltura || {}; - -/** - * Entry point for ltipanel module - * @param string params additional parameters. - * @return object the ltipanel object - */ -M.local_kaltura.init = function(params) { - return new LTIPANEL(params); -}; - -/** - * Entry point for ltipanelmediaassignment module - * @param string params additional parameters. - * @return object the ltipanel object - */ -M.local_kaltura.initmediaassignment = function(params) { - return new LTIPANELMEDIAASSIGNMENT(params); -}; - -/** - * Entry point for ltipanelmediaassignment module - * @param string params additional parameters. - * @return object the ltipanel object - */ -M.local_kaltura.initreviewsubmission = function() { - var args = { - addvidbtnid: '0', - ltilaunchurl: '0', - courseid: 0, - height: 0, - width: 0 - }; - var mediaassignment = new LTIPANELMEDIAASSIGNMENT(args); - return new LTISUBMISSIONREVIEW(mediaassignment); -}; - -}, '@VERSION@', {"requires": ["base", "node", "panel", "node-event-simulate"]}); diff --git a/local/kaltura/yui/build/moodle-local_kaltura-ltipanel/moodle-local_kaltura-ltipanel-min.js b/local/kaltura/yui/build/moodle-local_kaltura-ltipanel/moodle-local_kaltura-ltipanel-min.js deleted file mode 100644 index 45f15e6526442..0000000000000 --- a/local/kaltura/yui/build/moodle-local_kaltura-ltipanel/moodle-local_kaltura-ltipanel-min.js +++ /dev/null @@ -1 +0,0 @@ -YUI.add("moodle-local_kaltura-ltipanel",function(e,t){var n=function(){n.superclass.constructor.apply(this,arguments)};e.extend(n,e.Base,{panelbodycontent:null,panelvisible:!1,panel:null,modulename:null,addvidbtnid:null,init:function(t){if("0"===t.addvidbtnid||"0"===t.ltilaunchurl||0===t.courseid||0===t.height||0===t.width){alert("Some parameters were not initialized.");return}this.modulename=t.modulename,this.addvidbtnid=t.addvidbtnid;var n=e.one("#"+t.addvidbtnid);n.on("click",this.open_panel_callback,this,t.ltilaunchurl,t.height,t.width)},open_panel_callback:function(t,n,r,i){var s=parseInt(r,10)+45,o=parseInt(i,10)+23+"px";i+="px";if(e.UA.ipod!==0||e.UA.ipad!==0||e.UA.iphone!==0||e.UA.android!==0||e.UA.mobile!==null)o="80%",i="100%";var u="";this.panelbodycontent=u;if(e.UA.ipod!==0||e.UA.ipad!==0||e.UA.iphone!==0)this.panelbodycontent="
    "+u+"
    ";null===this.panel?(this.panel=new e.Panel({srcNode:e.Node.create('
    '),headerContent:"",bodyContent:this.panelbodycontent,width:o,height:s+"px",zIndex:6,centered:!0,modal:!0,visible:!1,render:!0,hideOn:[{node:e.one("input[id=closeltipanel]"),eventName:"click"}]}),this.panel.show(),e.one("input[id=closeltipanel]").on("click",this.lti_hide_panel_callback,this),this.panel.after("visibleChange",this.lti_panel_visible_change_callback,this)):this.panel.show()},lti_hide_panel_callback:function(){var t=e.one("img[id=video_thumbnail]");t.setStyle("display","none");var n=e.one("iframe[id=contentframe]");n.setAttribute("width",e.one("input[id=width]").getAttribute("value")),n.setAttribute("height",e.one("input[id=height]").getAttribute("value")),n.setStyle("display","inline");var r=e.one("input[name=modulename]");undefined!==r&&("kalvidres"===this.modulename||"kalvidpres"===this.modulename)&&this.lti_panel_change_add_media_button_caption()},lti_panel_change_add_media_button_caption:function(){var t=M.util.get_string("replace_video",this.modulename);t!==e.one("#"+this.addvidbtnid).getAttribute("value")&&e.one("#"+this.addvidbtnid).setAttribute("value",t)},lti_panel_visible_change_callback:function(){this.panelvisible=this.panel.get("visible"),!0===this.panelvisible?this.panel.set("bodyContent",this.panelbodycontent):this.panel.set("bodyContent","")}},{NAME:"moodle-local_kaltura-ltipanel",ATTRS:{addvidbtnid:{value:"0"},ltilaunchurl:{value:"0"},height:{value:0},width:{value:0},modulename:{value:""}}});var r=function(){r.superclass.constructor.apply(this,arguments)};e.extend(r,e.Base,{panelbodycontent:null,panelvisible:!1,panel:null,panelheight:0,panelwidth:0,init:function(t){if("0"===t.addvidbtnid||"0"===t.ltilaunchurl||0===t.courseid||0===t.height||0===t.width)return;var n=e.one("#"+t.addvidbtnid);n.on("click",this.open_panel_callback,this,t.ltilaunchurl,t.height,t.width)},open_panel_callback:function(t,n,r,i){this.panelheight=parseInt(r,10)+45,this.panelwidth=parseInt(i,10)+23,this.panelbodycontent="",null===this.panel?(this.panel=new e.Panel({srcNode:e.Node.create('
    '),headerContent:"",bodyContent:this.panelbodycontent,width:this.panelwidth+"px",height:this.panelheight+"px",zIndex:6,centered:!0,modal:!0,visible:!1,render:!0,hideOn:[{node:e.one("input[id=closeltipanel]"),eventName:"click"}]}),this.panel.show(),e.one("input[id=closeltipanel]").on("click",this.lti_hide_panel_callback,this),this.panel.after("visibleChange",this.lti_panel_visible_change_callback,this)):this.panel.show()},lti_hide_panel_callback:function(){e.one("input[id=submit_video]").removeAttribute("disabled");var t=e.one("img[id=video_thumbnail]");t.setStyle("display","none");var n=e.one("iframe[id=contentframe]");n.setAttribute("width",e.one("input[id=width]").getAttribute("value")),n.setAttribute("height",e.one("input[id=height]").getAttribute("value")),n.setStyle("display","inline"),e.one("#id_add_video").set("value",M.util.get_string("replacevideo","kalvidassign"))},lti_panel_visible_change_callback:function(){this.panelvisible=this.panel.get("visible"),!0===this.panelvisible?(this.panel.set("bodyContent",this.panelbodycontent),this.panel.set("height",this.panelheight),this.panel.set("width",this.panelwidth),this.panel.set("centered",!0)):this.panel.set("bodyContent","")}},{NAME:"moodle-local_kaltura-ltipanel",ATTRS:{addvidbtnid:{value:"0"},ltilaunchurl:{value:"0"},height:{value:0},width:{value:0}}});var i=function(){i.superclass.constructor.apply(this,arguments)};e.extend(i,e.Base,{ltimediaassignment:null,init:function(t){this.ltimediaassignment=t,e.one("form[id=fastgrade]").delegate("click",this.review_submission,"a[name=submission_source]",this)},review_submission:function(e){e.preventDefault();var t,n,r;e.target.test("a")?(t=e.target.getAttribute("href"),n=e.target.ancestor("div[name=media_submission]").get("childNodes").filter("input[name=height]").get("value"),r=e.target.ancestor("div[name=media_submission]").get("childNodes").filter("input[name=width]").get("value")):(t=e.target.ancestor("a[name=submission_source]").getAttribute("href"),n=e.target.ancestor("div[name=media_submission]").get("childNodes").filter("input[name=height]").get("value"),r=e.target.ancestor("div[name=media_submission]").get("childNodes").filter("input[name=width]").get("value")),this.ltimediaassignment.open_panel_callback(null,t,n,r)}},{NAME:"moodle-local_kaltura-ltipanel"}),M.local_kaltura=M.local_kaltura||{},M.local_kaltura.init=function(e){return new n(e)},M.local_kaltura.initmediaassignment=function(e){return new r(e)},M.local_kaltura.initreviewsubmission=function(){var e={addvidbtnid:"0",ltilaunchurl:"0",courseid:0,height:0,width:0},t=new r(e);return new i(t)}},"@VERSION@",{requires:["base","node","panel","node-event-simulate"]}); diff --git a/local/kaltura/yui/build/moodle-local_kaltura-ltipanel/moodle-local_kaltura-ltipanel.js b/local/kaltura/yui/build/moodle-local_kaltura-ltipanel/moodle-local_kaltura-ltipanel.js deleted file mode 100644 index 0d388ad0d3c8d..0000000000000 --- a/local/kaltura/yui/build/moodle-local_kaltura-ltipanel/moodle-local_kaltura-ltipanel.js +++ /dev/null @@ -1,471 +0,0 @@ -YUI.add('moodle-local_kaltura-ltipanel', function (Y, NAME) { - -// This file is part of Moodle - http://moodle.org/ -// -// Moodle is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// Moodle is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with Moodle. If not, see . - -/** - * YUI module for displaying an LTI launch within a YUI panel. - * - * @package local_kaltura - * @author Remote-Learner.net Inc - * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later - * @copyright (C) 2014 Remote Learner.net Inc http://www.remote-learner.net - */ - - /** - * This method calls the base class constructor - * @method LTIPANEL - */ -var LTIPANEL = function() { - LTIPANEL.superclass.constructor.apply(this, arguments); -}; - -Y.extend(LTIPANEL, Y.Base, { - /** - * Contains the object tag needed to launch an LTI session. - * @property panelbodycontent - * @type {String} - * @default null - */ - panelbodycontent: null, - - /** - * Set to true if panel is visible, otherwise false. - * @property panelvisible - * @type {Boolean} - * @default null - */ - panelvisible: false, - - /** - * The panel object - * @property panel - * @type {Object} - * @default null - */ - panel: null, - - /** - * The name of the initiating module. - * @property modulename - * @type {String} - * @default null - */ - modulename: null, - - /** - * The id value of the add media button. - * @property addvidbtnid - * @type {String} - * @default null - */ - addvidbtnid: null, - - /** - * Init function for the checkboxselection module - * @property params - * @type {Object} - */ - init : function(params) { - // Check to make sure parameters are initialized - if ('0' === params.addvidbtnid || '0' === params.ltilaunchurl || 0 === params.courseid || 0 === params.height || 0 === params.width) { - alert('Some parameters were not initialized.'); - return; - } - - this.modulename = params.modulename; - this.addvidbtnid = params.addvidbtnid; - - var addvideobtn = Y.one('#'+params.addvidbtnid); - addvideobtn.on('click', this.open_panel_callback, this, params.ltilaunchurl, params.height, params.width); - }, - - /** - * Event handler callback for when the add video button is clicked. This function creates the a panel element. - * @property e - * @type {Object} - */ - open_panel_callback : function(e, url, height, width) { - var panelheight = parseInt(height, 10) + 45; - var panelwidth = parseInt(width, 10) + 23 + 'px'; - - width = width+'px'; - // Apply special width for mobile devices as requested by Kaltura. - if (Y.UA.ipod !== 0 || Y.UA.ipad !== 0 || Y.UA.iphone !== 0 || Y.UA.android !== 0 || Y.UA.mobile !== null) { - panelwidth = '80%'; - width = '100%'; - } - - var iframe = ""; - this.panelbodycontent = iframe; - if (Y.UA.ipod !== 0 || Y.UA.ipad !== 0 || Y.UA.iphone !== 0) { - // This outer div will constrain the iframe from overlapping over its content region on iOS devices. - this.panelbodycontent = "
    "+iframe+"
    "; - } - - // If the panel has not yet been initialized. - if (null === this.panel) { - this.panel = new Y.Panel({ - srcNode : Y.Node.create('
    '), - headerContent : '', - bodyContent : this.panelbodycontent, - width : panelwidth, - height : panelheight+"px", - zIndex : 6, - centered : true, - modal : true, - visible : false, - render : true, - hideOn : [ - { - node : Y.one('input[id=closeltipanel]'), - eventName : 'click' - } - ] - }); - - this.panel.show(); - - // Listen to simulated click event send from local/kaltura/service.php - Y.one('input[id=closeltipanel]').on('click', this.lti_hide_panel_callback, this); - - // // Listen to when the panel is made visible or hidden - this.panel.after('visibleChange', this.lti_panel_visible_change_callback, this); - } else { - this.panel.show(); - } - }, - - /** - * Event handler callback for when a simulated click event is triggered on a specifc element. - */ - lti_hide_panel_callback : function() { - // hide the thumbnail image. - var imagenode = Y.one('img[id=video_thumbnail]'); - imagenode.setStyle('display', 'none'); - // Update the iframe element attributes - var iframenode = Y.one('iframe[id=contentframe]'); - iframenode.setAttribute('width', Y.one('input[id=width]').getAttribute('value')); - iframenode.setAttribute('height', Y.one('input[id=height]').getAttribute('value')); - iframenode.setStyle('display', 'inline'); - - // If the page is a Video presentation or resource execute a function to change the button caption KALDEV-579 - var element = Y.one('input[name=modulename]'); - - if (undefined !== element && ('kalvidres' === this.modulename || 'kalvidpres' === this.modulename)) { - this.lti_panel_change_add_media_button_caption(); - } - }, - - lti_panel_change_add_media_button_caption : function() { - // Need to find a better way of doing this. Change was made for KALDEV-579. - var buttoncaption = M.util.get_string('replace_video', this.modulename); - if (buttoncaption !== Y.one('#'+this.addvidbtnid).getAttribute('value')) { - Y.one('#'+this.addvidbtnid).setAttribute('value', buttoncaption); - } - }, - - /** - * Event handler callback for when the panel is made hidden or visible. - */ - lti_panel_visible_change_callback : function() { - this.panelvisible = this.panel.get('visible'); - - // If panel is visible, re-launch the LIT request so that the user sees the main page. Instead of the last page they visited. If the panel is not visible then - // set the content to an empty string; this prevents videos from the iframe from continuing to play after the panel was closed. - if (true === this.panelvisible) { - this.panel.set('bodyContent', this.panelbodycontent); - } else { - this.panel.set('bodyContent', ''); - } - } -}, -{ - NAME : 'moodle-local_kaltura-ltipanel', - ATTRS : { - addvidbtnid : { - value: '0' - }, - ltilaunchurl : { - value: '0' - }, - height : { - value: 0 - }, - width : { - value: 0 - }, - modulename : { - value: '' - } - } -}); - -/** - * This method calls the base class constructor. The primary difference between LTIPANELMEDIAASSIGNMENT and LTIPANEL is that - * LTIPANELMEDIAASSIGNMENT creates a node and appends it to the body tag of the page. The reason for this is due to an issue with the Moodle - * navbar covering up part of the YUI panel, if the panel markup is appended to a child element within the body tag. - * @method LTIPANELMEDIAASSIGNMENT - */ -var LTIPANELMEDIAASSIGNMENT = function() { - LTIPANELMEDIAASSIGNMENT.superclass.constructor.apply(this, arguments); -}; - -Y.extend(LTIPANELMEDIAASSIGNMENT, Y.Base, { - /** - * Contains the object tag needed to launch an LTI session. - * @property panelbodycontent - * @type {String} - * @default null - */ - panelbodycontent: null, - - /** - * Set to true if panel is visible, otherwise false. - * @property panelvisible - * @type {Boolean} - * @default null - */ - panelvisible: false, - - /** - * The panel object - * @property panel - * @type {Object} - * @default null - */ - panel: null, - - /** - * The panel height. - * @property panelheight - * @type {Integer} - * @default 0 - */ - panelheight: 0, - - /** - * The panel width. - * @property panelwidth - * @type {Integer} - * @default 0 - */ - panelwidth: 0, - - /** - * Init function for the checkboxselection module - * @property params - * @type {Object} - */ - init : function(params) { - // Check to make sure parameters are initialized - if ('0' === params.addvidbtnid || '0' === params.ltilaunchurl || 0 === params.courseid || 0 === params.height || 0 === params.width) { - return; - } - - var addvideobtn = Y.one('#'+params.addvidbtnid); - addvideobtn.on('click', this.open_panel_callback, this, params.ltilaunchurl, params.height, params.width); - }, - - /** - * Event handler callback for when the add video button is clicked. This function creates the a panel element. - * @property e - * @type {Object} - */ - open_panel_callback : function(e, url, height, width) { - this.panelheight = parseInt(height, 10) + 45; - this.panelwidth = parseInt(width, 10) + 23; - - this.panelbodycontent = ""; - - // If the panel has not yet been initialized. - if (null === this.panel) { - this.panel = new Y.Panel({ - srcNode : Y.Node.create('
    '), - headerContent : '', - bodyContent : this.panelbodycontent, - width : this.panelwidth+"px", - height : this.panelheight+"px", - zIndex : 6, - centered : true, - modal : true, - visible : false, - render : true, - hideOn : [ - { - node : Y.one('input[id=closeltipanel]'), - eventName : 'click' - } - ] - }); - - this.panel.show(); - - // Listen to simulated click event send from local/kaltura/service.php - Y.one('input[id=closeltipanel]').on('click', this.lti_hide_panel_callback, this); - - // Listen to when the panel is made visible or hidden - this.panel.after('visibleChange', this.lti_panel_visible_change_callback, this); - } else { - this.panel.show(); - } - }, - - /** - * Event handler callback for when a simulated click event is triggered on a specifc element. - */ - lti_hide_panel_callback : function() { - // Enable submit button - Y.one('input[id=submit_video]').removeAttribute('disabled'); - // hide the thumbnail image. - var imagenode = Y.one('img[id=video_thumbnail]'); - imagenode.setStyle('display', 'none'); - // Update the iframe element attributes - var iframenode = Y.one('iframe[id=contentframe]'); - iframenode.setAttribute('width', Y.one('input[id=width]').getAttribute('value')); - iframenode.setAttribute('height', Y.one('input[id=height]').getAttribute('value')); - iframenode.setStyle('display', 'inline'); - Y.one('#id_add_video').set('value', M.util.get_string('replacevideo', 'kalvidassign')); - }, - - /** - * Event handler callback for when the panel is made hidden or visible. - */ - lti_panel_visible_change_callback : function() { - this.panelvisible = this.panel.get('visible'); - - // If panel is visible, re-launch the LIT request so that the user sees the main page. Instead of the last page they visited. If the panel is not visible then - // set the content to an empty string; this prevents videos from the iframe from continuing to play after the panel was closed. - if (true === this.panelvisible) { - this.panel.set('bodyContent', this.panelbodycontent); - this.panel.set('height', this.panelheight); - this.panel.set('width', this.panelwidth); - this.panel.set('centered', true); - } else { - this.panel.set('bodyContent', ''); - } - } -}, -{ - NAME : 'moodle-local_kaltura-ltipanel', - ATTRS : { - addvidbtnid : { - value: '0' - }, - ltilaunchurl : { - value: '0' - }, - height : { - value: 0 - }, - width : { - value: 0 - } - } -}); - -/** - * This method calls the base class constructor. This module renders a Panel for viewing media from multiple sources. - * @method LTISUBMISSIONREVIEW - */ -var LTISUBMISSIONREVIEW = function() { - LTISUBMISSIONREVIEW.superclass.constructor.apply(this, arguments); -}; - -Y.extend(LTISUBMISSIONREVIEW, Y.Base, { - /** - * An instance of the ltimediaassignment class. - * @property ltimediaassignment - * @type {Object} - * @default null - */ - ltimediaassignment: null, - - - /** - * Init function for the checkboxselection module - * @property params - * @type {Object} - */ - init : function(ltimediaassignment) { - this.ltimediaassignment = ltimediaassignment; - Y.one('form[id=fastgrade]').delegate('click', this.review_submission, 'a[name=submission_source]', this); - }, - - /** - * Callback function for when a user clicks on the review submission link. - * @property e - * @type {Object} - */ - review_submission : function(e) { - e.preventDefault(); - var source, height, width; - // Test if the target is an anchor tag or img tag. - if (e.target.test('a')) { - source = e.target.getAttribute('href'); - height = e.target.ancestor('div[name=media_submission]').get('childNodes').filter('input[name=height]').get('value'); - width = e.target.ancestor('div[name=media_submission]').get('childNodes').filter('input[name=width]').get('value'); - } else { - source = e.target.ancestor('a[name=submission_source]').getAttribute('href'); - height = e.target.ancestor('div[name=media_submission]').get('childNodes').filter('input[name=height]').get('value'); - width = e.target.ancestor('div[name=media_submission]').get('childNodes').filter('input[name=width]').get('value'); - } - - this.ltimediaassignment.open_panel_callback(null, source, height, width); - } -}, -{ - NAME : 'moodle-local_kaltura-ltipanel' -}); - -M.local_kaltura = M.local_kaltura || {}; - -/** - * Entry point for ltipanel module - * @param string params additional parameters. - * @return object the ltipanel object - */ -M.local_kaltura.init = function(params) { - return new LTIPANEL(params); -}; - -/** - * Entry point for ltipanelmediaassignment module - * @param string params additional parameters. - * @return object the ltipanel object - */ -M.local_kaltura.initmediaassignment = function(params) { - return new LTIPANELMEDIAASSIGNMENT(params); -}; - -/** - * Entry point for ltipanelmediaassignment module - * @param string params additional parameters. - * @return object the ltipanel object - */ -M.local_kaltura.initreviewsubmission = function() { - var args = { - addvidbtnid: '0', - ltilaunchurl: '0', - courseid: 0, - height: 0, - width: 0 - }; - var mediaassignment = new LTIPANELMEDIAASSIGNMENT(args); - return new LTISUBMISSIONREVIEW(mediaassignment); -}; - -}, '@VERSION@', {"requires": ["base", "node", "panel", "node-event-simulate"]}); diff --git a/local/kaltura/yui/build/moodle-local_kaltura-ltiservice/moodle-local_kaltura-ltiservice-debug.js b/local/kaltura/yui/build/moodle-local_kaltura-ltiservice/moodle-local_kaltura-ltiservice-debug.js deleted file mode 100644 index 284a256d68afa..0000000000000 --- a/local/kaltura/yui/build/moodle-local_kaltura-ltiservice/moodle-local_kaltura-ltiservice-debug.js +++ /dev/null @@ -1,119 +0,0 @@ -YUI.add('moodle-local_kaltura-ltiservice', function (Y, NAME) { - -// This file is part of Moodle - http://moodle.org/ -// -// Moodle is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// Moodle is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with Moodle. If not, see . - -/** - * YUI module for displaying an LTI launch within a YUI panel. - * - * @package local_kaltura - * @author Remote-Learner.net Inc - * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later - * @copyright (C) 2014 Remote Learner.net Inc http://www.remote-learner.net - */ - - /** - * This method calls the base class constructor - * @method LTISERVICE - */ -var LTISERVICE = function() { - LTISERVICE.superclass.constructor.apply(this, arguments); -}; - -Y.extend(LTISERVICE, Y.Base, { - /** - * Init function for triggering a custom event and setting attributes. Also checks whether optional elements exist in the parent window. - * @property params - * @type {Object} - */ - init : function(params) { - if (window.parent.document.getElementById('video_title')) { - Y.one(window.parent.document.getElementById('video_title')).setAttribute('value', params.title); - } - - if (window.parent.document.getElementById('entry_id')) { - Y.one(window.parent.document.getElementById('entry_id')).setAttribute('value', params.entryid); - } - - if (window.parent.document.getElementById('height')) { - Y.one(window.parent.document.getElementById('height')).setAttribute('value', params.height); - } - - if (window.parent.document.getElementById('width')) { - Y.one(window.parent.document.getElementById('width')).setAttribute('value', params.width); - } - - if (window.parent.document.getElementById('uiconf_id')) { - Y.one(window.parent.document.getElementById('uiconf_id')).setAttribute('value', '1'); - } - - if (window.parent.document.getElementById('widescreen')) { - Y.one(window.parent.document.getElementById('widescreen')).setAttribute('value', '1'); - } - - if (window.parent.document.getElementById('video_preview_frame')) { - Y.one(window.parent.document.getElementById('video_preview_frame')).setAttribute('src', decodeURIComponent(params.iframeurl)); - } else if (window.parent.document.getElementById('contentframe')) { - Y.one(window.parent.document.getElementById('contentframe')).setAttribute('src', decodeURIComponent(params.iframeurl)); - } - - // This element must exist. - Y.one(window.parent.document.getElementById('source')).setAttribute('value', decodeURIComponent(params.iframeurl)); - - if (window.parent.document.getElementById('metadata')) { - Y.one(window.parent.document.getElementById('metadata')).setAttribute('value', params.metadata); - } - - if (window.parent.document.getElementById('closeltipanel')) { - Y.one(window.parent.document.getElementById('closeltipanel')).simulate('click'); - } - } -}, -{ - NAME : 'moodle-local_kaltura-ltiservice', - ATTRS : { - iframeurl : { - value: '' - }, - width : { - value: '' - }, - height : { - value: '' - }, - entryid : { - value: '' - }, - title : { - value: '' - }, - metadata : { - value: '' - } - } - -}); -M.local_kaltura = M.local_kaltura || {}; - -/** - * Entry point for ltiservice module - * @param string params additional parameters. - * @return object the ltiservice object - */ -M.local_kaltura.init = function(params) { - return new LTISERVICE(params); -}; - -}, '@VERSION@', {"requires": ["base", "node", "node-event-simulate"]}); diff --git a/local/kaltura/yui/build/moodle-local_kaltura-ltiservice/moodle-local_kaltura-ltiservice-min.js b/local/kaltura/yui/build/moodle-local_kaltura-ltiservice/moodle-local_kaltura-ltiservice-min.js deleted file mode 100644 index f27d292082325..0000000000000 --- a/local/kaltura/yui/build/moodle-local_kaltura-ltiservice/moodle-local_kaltura-ltiservice-min.js +++ /dev/null @@ -1 +0,0 @@ -YUI.add("moodle-local_kaltura-ltiservice",function(e,t){var n=function(){n.superclass.constructor.apply(this,arguments)};e.extend(n,e.Base,{init:function(t){window.parent.document.getElementById("video_title")&&e.one(window.parent.document.getElementById("video_title")).setAttribute("value",t.title),window.parent.document.getElementById("entry_id")&&e.one(window.parent.document.getElementById("entry_id")).setAttribute("value",t.entryid),window.parent.document.getElementById("height")&&e.one(window.parent.document.getElementById("height")).setAttribute("value",t.height),window.parent.document.getElementById("width")&&e.one(window.parent.document.getElementById("width")).setAttribute("value",t.width),window.parent.document.getElementById("uiconf_id")&&e.one(window.parent.document.getElementById("uiconf_id")).setAttribute("value","1"),window.parent.document.getElementById("widescreen")&&e.one(window.parent.document.getElementById("widescreen")).setAttribute("value","1"),window.parent.document.getElementById("video_preview_frame")?e.one(window.parent.document.getElementById("video_preview_frame")).setAttribute("src",decodeURIComponent(t.iframeurl)):window.parent.document.getElementById("contentframe")&&e.one(window.parent.document.getElementById("contentframe")).setAttribute("src",decodeURIComponent(t.iframeurl)),e.one(window.parent.document.getElementById("source")).setAttribute("value",decodeURIComponent(t.iframeurl)),window.parent.document.getElementById("metadata")&&e.one(window.parent.document.getElementById("metadata")).setAttribute("value",t.metadata),window.parent.document.getElementById("closeltipanel")&&e.one(window.parent.document.getElementById("closeltipanel")).simulate("click")}},{NAME:"moodle-local_kaltura-ltiservice",ATTRS:{iframeurl:{value:""},width:{value:""},height:{value:""},entryid:{value:""},title:{value:""},metadata:{value:""}}}),M.local_kaltura=M.local_kaltura||{},M.local_kaltura.init=function(e){return new n(e)}},"@VERSION@",{requires:["base","node","node-event-simulate"]}); diff --git a/local/kaltura/yui/build/moodle-local_kaltura-ltiservice/moodle-local_kaltura-ltiservice.js b/local/kaltura/yui/build/moodle-local_kaltura-ltiservice/moodle-local_kaltura-ltiservice.js deleted file mode 100644 index 284a256d68afa..0000000000000 --- a/local/kaltura/yui/build/moodle-local_kaltura-ltiservice/moodle-local_kaltura-ltiservice.js +++ /dev/null @@ -1,119 +0,0 @@ -YUI.add('moodle-local_kaltura-ltiservice', function (Y, NAME) { - -// This file is part of Moodle - http://moodle.org/ -// -// Moodle is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// Moodle is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with Moodle. If not, see . - -/** - * YUI module for displaying an LTI launch within a YUI panel. - * - * @package local_kaltura - * @author Remote-Learner.net Inc - * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later - * @copyright (C) 2014 Remote Learner.net Inc http://www.remote-learner.net - */ - - /** - * This method calls the base class constructor - * @method LTISERVICE - */ -var LTISERVICE = function() { - LTISERVICE.superclass.constructor.apply(this, arguments); -}; - -Y.extend(LTISERVICE, Y.Base, { - /** - * Init function for triggering a custom event and setting attributes. Also checks whether optional elements exist in the parent window. - * @property params - * @type {Object} - */ - init : function(params) { - if (window.parent.document.getElementById('video_title')) { - Y.one(window.parent.document.getElementById('video_title')).setAttribute('value', params.title); - } - - if (window.parent.document.getElementById('entry_id')) { - Y.one(window.parent.document.getElementById('entry_id')).setAttribute('value', params.entryid); - } - - if (window.parent.document.getElementById('height')) { - Y.one(window.parent.document.getElementById('height')).setAttribute('value', params.height); - } - - if (window.parent.document.getElementById('width')) { - Y.one(window.parent.document.getElementById('width')).setAttribute('value', params.width); - } - - if (window.parent.document.getElementById('uiconf_id')) { - Y.one(window.parent.document.getElementById('uiconf_id')).setAttribute('value', '1'); - } - - if (window.parent.document.getElementById('widescreen')) { - Y.one(window.parent.document.getElementById('widescreen')).setAttribute('value', '1'); - } - - if (window.parent.document.getElementById('video_preview_frame')) { - Y.one(window.parent.document.getElementById('video_preview_frame')).setAttribute('src', decodeURIComponent(params.iframeurl)); - } else if (window.parent.document.getElementById('contentframe')) { - Y.one(window.parent.document.getElementById('contentframe')).setAttribute('src', decodeURIComponent(params.iframeurl)); - } - - // This element must exist. - Y.one(window.parent.document.getElementById('source')).setAttribute('value', decodeURIComponent(params.iframeurl)); - - if (window.parent.document.getElementById('metadata')) { - Y.one(window.parent.document.getElementById('metadata')).setAttribute('value', params.metadata); - } - - if (window.parent.document.getElementById('closeltipanel')) { - Y.one(window.parent.document.getElementById('closeltipanel')).simulate('click'); - } - } -}, -{ - NAME : 'moodle-local_kaltura-ltiservice', - ATTRS : { - iframeurl : { - value: '' - }, - width : { - value: '' - }, - height : { - value: '' - }, - entryid : { - value: '' - }, - title : { - value: '' - }, - metadata : { - value: '' - } - } - -}); -M.local_kaltura = M.local_kaltura || {}; - -/** - * Entry point for ltiservice module - * @param string params additional parameters. - * @return object the ltiservice object - */ -M.local_kaltura.init = function(params) { - return new LTISERVICE(params); -}; - -}, '@VERSION@', {"requires": ["base", "node", "node-event-simulate"]}); diff --git a/local/kaltura/yui/build/moodle-local_kaltura-ltitinymcepanel/moodle-local_kaltura-ltitinymcepanel-debug.js b/local/kaltura/yui/build/moodle-local_kaltura-ltitinymcepanel/moodle-local_kaltura-ltitinymcepanel-debug.js deleted file mode 100644 index 23a1c5c8ac664..0000000000000 --- a/local/kaltura/yui/build/moodle-local_kaltura-ltitinymcepanel/moodle-local_kaltura-ltitinymcepanel-debug.js +++ /dev/null @@ -1,141 +0,0 @@ -YUI.add('moodle-local_kaltura-ltitinymcepanel', function (Y, NAME) { - -// This file is part of Moodle - http://moodle.org/ -// -// Moodle is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// Moodle is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with Moodle. If not, see . - -/** - * YUI module for displaying an LTI launch within a YUI panel. - * - * @package local_kaltura - * @author Remote-Learner.net Inc - * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later - * @copyright (C) 2014 Remote Learner.net Inc http://www.remote-learner.net - */ - - /** - * This method calls the base class constructor - * @method LTITINYMCEPANEL - */ -var LTITINYMCEPANEL = function() { - LTITINYMCEPANEL.superclass.constructor.apply(this, arguments); -}; - -Y.extend(LTITINYMCEPANEL, Y.Base, { - /** - * The context id the editor was launched in. - * @property contextid - * @type {Integer} - * @default null - */ - contextid: 0, - - /** - * Init function for the checkboxselection module - * @property {Object} params Data to help initialize the YUI module. - */ - init : function(params) { - // Check to make sure parameters are initialized. - if ('' === params.insertbtnid || '' === params.ltilaunchurl || '' === params.objecttagheight || '' === params.objecttagid || '' === params.previewiframeid) { - alert('Some parameters were not initialized.'); - return; - } - - // Initialize the the browse when the window is initially rendered. - this.load_lti_content(params.ltilaunchurl, params.objecttagid, params.objecttagheight); - - // Disable the insert button since nothing has been selected yet. - Y.one('#'+params.insertbtnid).set('disabled', true); - - // Listen to simulated click event send from local/kaltura/service.php - Y.one('#closeltipanel').on('click', this.user_selected_video_callback, this, params.insertbtnid, params.objecttagid, params.previewiframeid, params.objecttagheight); - - if (null !== Y.one('#page-footer')) { - Y.one('#page-footer').setStyle('display', 'none'); - } - }, - - /** - * A funciton to load the LTI content. This is called when the YUI module is first initialized. - * @property {String} url LTI launch URL. - * @property {String} iframeid iframe tag id. - * @property {String} iframeheight iframe tag height. - */ - load_lti_content : function(url, iframeid, iframeheight) { - if (0 === this.contextid) { - this.contextid = Y.one('#lti_launch_context_id').get('value'); - } - - var content = ''; - Y.one('#'+iframeid).setContent(content); - }, - - /** - * This function serves as a call back method for when the closeltipanel div has been clicked. It means that the user has - * selected a video for embedding into the TinyMCE edotor. Enabling the insert button, removing the contents LTI launch element and - * adding content to the media preview element. - * @property {Object} e Event object. - * @property {String} insertbtnid Insert button id. - * @property {String} objecttagid Object tag id. - * @property {String} previewiframeid Preview iframe tag id. - * @property {String} height Height of the iframe. - */ - user_selected_video_callback : function(e, insertbtnid, objecttagid, previewiframeid, height) { - Y.one('#'+insertbtnid).setStyle('display', 'inline'); - Y.one('#'+insertbtnid).set('disabled', false); - Y.one('#'+objecttagid).setContent(''); - - var center = Y.Node.create('
    '); - var iframe = Y.Node.create(''); - iframe.setAttribute('width', Y.one('#width').get('value')+'px'); - iframe.setAttribute('height', height+'px'); - iframe.setAttribute('src', Y.one('#source').get('value')); - - center.append(iframe); - Y.one('#'+previewiframeid).append(center); - } -}, -{ - NAME : 'moodle-local_kaltura-ltitinymcepanel', - ATTRS : { - insertbtnid : { - value : '' - }, - ltilaunchurl : { - value : '' - }, - objecttagheight : { - value : '' - }, - objecttagid : { - value : '' - }, - previewiframeid : { - value : '' - } - } -}); -M.local_kaltura = M.local_kaltura || {}; - -/** - * Entry point for ltipanel module - * @param {Object} params Additional parameters. - * @return {Object} the ltipanel object - */ -M.local_kaltura.init = function(params) { - return new LTITINYMCEPANEL(params); -}; - - -}, '@VERSION@', {"requires": ["base", "node", "panel", "node-event-simulate"]}); diff --git a/local/kaltura/yui/build/moodle-local_kaltura-ltitinymcepanel/moodle-local_kaltura-ltitinymcepanel-min.js b/local/kaltura/yui/build/moodle-local_kaltura-ltitinymcepanel/moodle-local_kaltura-ltitinymcepanel-min.js deleted file mode 100644 index 24eaf342ca72c..0000000000000 --- a/local/kaltura/yui/build/moodle-local_kaltura-ltitinymcepanel/moodle-local_kaltura-ltitinymcepanel-min.js +++ /dev/null @@ -1 +0,0 @@ -YUI.add("moodle-local_kaltura-ltitinymcepanel",function(e,t){var n=function(){n.superclass.constructor.apply(this,arguments)};e.extend(n,e.Base,{contextid:0,init:function(t){if(""===t.insertbtnid||""===t.ltilaunchurl||""===t.objecttagheight||""===t.objecttagid||""===t.previewiframeid){alert("Some parameters were not initialized.");return}this.load_lti_content(t.ltilaunchurl,t.objecttagid,t.objecttagheight),e.one("#"+t.insertbtnid).set("disabled",!0),e.one("#closeltipanel").on("click",this.user_selected_video_callback,this,t.insertbtnid,t.objecttagid,t.previewiframeid,t.objecttagheight),null!==e.one("#page-footer")&&e.one("#page-footer").setStyle("display","none")},load_lti_content:function(t,n,r){0===this.contextid&&(this.contextid=e.one("#lti_launch_context_id").get("value"));var i='';e.one("#"+n).setContent(i)},user_selected_video_callback:function(t,n,r,i,s){e.one("#"+n).setStyle("display","inline"),e.one("#"+n).set("disabled",!1),e.one("#"+r).setContent("");var o=e.Node.create("
    "),u=e.Node.create("");u.setAttribute("width",e.one("#width").get("value")+"px"),u.setAttribute("height",s+"px"),u.setAttribute("src",e.one("#source").get("value")),o.append(u),e.one("#"+i).append(o)}},{NAME:"moodle-local_kaltura-ltitinymcepanel",ATTRS:{insertbtnid:{value:""},ltilaunchurl:{value:""},objecttagheight:{value:""},objecttagid:{value:""},previewiframeid:{value:""}}}),M.local_kaltura=M.local_kaltura||{},M.local_kaltura.init=function(e){return new n(e)}},"@VERSION@",{requires:["base","node","panel","node-event-simulate"]}); diff --git a/local/kaltura/yui/build/moodle-local_kaltura-ltitinymcepanel/moodle-local_kaltura-ltitinymcepanel.js b/local/kaltura/yui/build/moodle-local_kaltura-ltitinymcepanel/moodle-local_kaltura-ltitinymcepanel.js deleted file mode 100644 index 23a1c5c8ac664..0000000000000 --- a/local/kaltura/yui/build/moodle-local_kaltura-ltitinymcepanel/moodle-local_kaltura-ltitinymcepanel.js +++ /dev/null @@ -1,141 +0,0 @@ -YUI.add('moodle-local_kaltura-ltitinymcepanel', function (Y, NAME) { - -// This file is part of Moodle - http://moodle.org/ -// -// Moodle is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// Moodle is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with Moodle. If not, see . - -/** - * YUI module for displaying an LTI launch within a YUI panel. - * - * @package local_kaltura - * @author Remote-Learner.net Inc - * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later - * @copyright (C) 2014 Remote Learner.net Inc http://www.remote-learner.net - */ - - /** - * This method calls the base class constructor - * @method LTITINYMCEPANEL - */ -var LTITINYMCEPANEL = function() { - LTITINYMCEPANEL.superclass.constructor.apply(this, arguments); -}; - -Y.extend(LTITINYMCEPANEL, Y.Base, { - /** - * The context id the editor was launched in. - * @property contextid - * @type {Integer} - * @default null - */ - contextid: 0, - - /** - * Init function for the checkboxselection module - * @property {Object} params Data to help initialize the YUI module. - */ - init : function(params) { - // Check to make sure parameters are initialized. - if ('' === params.insertbtnid || '' === params.ltilaunchurl || '' === params.objecttagheight || '' === params.objecttagid || '' === params.previewiframeid) { - alert('Some parameters were not initialized.'); - return; - } - - // Initialize the the browse when the window is initially rendered. - this.load_lti_content(params.ltilaunchurl, params.objecttagid, params.objecttagheight); - - // Disable the insert button since nothing has been selected yet. - Y.one('#'+params.insertbtnid).set('disabled', true); - - // Listen to simulated click event send from local/kaltura/service.php - Y.one('#closeltipanel').on('click', this.user_selected_video_callback, this, params.insertbtnid, params.objecttagid, params.previewiframeid, params.objecttagheight); - - if (null !== Y.one('#page-footer')) { - Y.one('#page-footer').setStyle('display', 'none'); - } - }, - - /** - * A funciton to load the LTI content. This is called when the YUI module is first initialized. - * @property {String} url LTI launch URL. - * @property {String} iframeid iframe tag id. - * @property {String} iframeheight iframe tag height. - */ - load_lti_content : function(url, iframeid, iframeheight) { - if (0 === this.contextid) { - this.contextid = Y.one('#lti_launch_context_id').get('value'); - } - - var content = ''; - Y.one('#'+iframeid).setContent(content); - }, - - /** - * This function serves as a call back method for when the closeltipanel div has been clicked. It means that the user has - * selected a video for embedding into the TinyMCE edotor. Enabling the insert button, removing the contents LTI launch element and - * adding content to the media preview element. - * @property {Object} e Event object. - * @property {String} insertbtnid Insert button id. - * @property {String} objecttagid Object tag id. - * @property {String} previewiframeid Preview iframe tag id. - * @property {String} height Height of the iframe. - */ - user_selected_video_callback : function(e, insertbtnid, objecttagid, previewiframeid, height) { - Y.one('#'+insertbtnid).setStyle('display', 'inline'); - Y.one('#'+insertbtnid).set('disabled', false); - Y.one('#'+objecttagid).setContent(''); - - var center = Y.Node.create('
    '); - var iframe = Y.Node.create(''); - iframe.setAttribute('width', Y.one('#width').get('value')+'px'); - iframe.setAttribute('height', height+'px'); - iframe.setAttribute('src', Y.one('#source').get('value')); - - center.append(iframe); - Y.one('#'+previewiframeid).append(center); - } -}, -{ - NAME : 'moodle-local_kaltura-ltitinymcepanel', - ATTRS : { - insertbtnid : { - value : '' - }, - ltilaunchurl : { - value : '' - }, - objecttagheight : { - value : '' - }, - objecttagid : { - value : '' - }, - previewiframeid : { - value : '' - } - } -}); -M.local_kaltura = M.local_kaltura || {}; - -/** - * Entry point for ltipanel module - * @param {Object} params Additional parameters. - * @return {Object} the ltipanel object - */ -M.local_kaltura.init = function(params) { - return new LTITINYMCEPANEL(params); -}; - - -}, '@VERSION@', {"requires": ["base", "node", "panel", "node-event-simulate"]}); diff --git a/local/kaltura/yui/src/build/moodle-local_kaltura-ltiservice/moodle-local_kaltura-ltiservice-debug.js b/local/kaltura/yui/src/build/moodle-local_kaltura-ltiservice/moodle-local_kaltura-ltiservice-debug.js deleted file mode 100644 index 3e316429bff2b..0000000000000 --- a/local/kaltura/yui/src/build/moodle-local_kaltura-ltiservice/moodle-local_kaltura-ltiservice-debug.js +++ /dev/null @@ -1,58 +0,0 @@ -YUI.add('moodle-local_kaltura-ltiservice', function (Y, NAME) { - -// This file is part of Moodle - http://moodle.org/ -// -// Moodle is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// Moodle is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with Moodle. If not, see . - -/** - * YUI module for displaying an LTI launch within a YUI panel. - * - * @package local_kaltura - * @author Remote-Learner.net Inc - * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later - * @copyright (C) 2014 Remote Learner.net Inc http://www.remote-learner.net - */ - - /** - * This method calls the base class constructor - * @method LTISERVICE - */ -var LTISERVICE = function() { - LTISERVICE.superclass.constructor.apply(this, arguments); -}; - -Y.extend(LTISERVICE, Y.Base, { - /** - * Init function for the checkboxselection module - */ - init : function() { - alert('ltiservice'); - - } -}, -{ - NAME : 'moodle-local_kaltura-ltiservice' -}); -M.local_kaltura = M.local_kaltura || {}; - -/** - * Entry point for ltiservice module - * @param string params additional parameters. - * @return object the ltiservice object - */ -M.local_kaltura.init = function(params) { - return new LTISERVICE(params); -}; - -}, '@VERSION@', {"requires": ["base", "node"]}); diff --git a/local/kaltura/yui/src/build/moodle-local_kaltura-ltiservice/moodle-local_kaltura-ltiservice-min.js b/local/kaltura/yui/src/build/moodle-local_kaltura-ltiservice/moodle-local_kaltura-ltiservice-min.js deleted file mode 100644 index aeb426ce7fab1..0000000000000 --- a/local/kaltura/yui/src/build/moodle-local_kaltura-ltiservice/moodle-local_kaltura-ltiservice-min.js +++ /dev/null @@ -1 +0,0 @@ -YUI.add("moodle-local_kaltura-ltiservice",function(e,t){var n=function(){n.superclass.constructor.apply(this,arguments)};e.extend(n,e.Base,{init:function(){alert("ltiservice")}},{NAME:"moodle-local_kaltura-ltiservice"}),M.local_kaltura=M.local_kaltura||{},M.local_kaltura.init=function(e){return new n(e)}},"@VERSION@",{requires:["base","node"]}); diff --git a/local/kaltura/yui/src/build/moodle-local_kaltura-ltiservice/moodle-local_kaltura-ltiservice.js b/local/kaltura/yui/src/build/moodle-local_kaltura-ltiservice/moodle-local_kaltura-ltiservice.js deleted file mode 100644 index 3e316429bff2b..0000000000000 --- a/local/kaltura/yui/src/build/moodle-local_kaltura-ltiservice/moodle-local_kaltura-ltiservice.js +++ /dev/null @@ -1,58 +0,0 @@ -YUI.add('moodle-local_kaltura-ltiservice', function (Y, NAME) { - -// This file is part of Moodle - http://moodle.org/ -// -// Moodle is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// Moodle is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with Moodle. If not, see . - -/** - * YUI module for displaying an LTI launch within a YUI panel. - * - * @package local_kaltura - * @author Remote-Learner.net Inc - * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later - * @copyright (C) 2014 Remote Learner.net Inc http://www.remote-learner.net - */ - - /** - * This method calls the base class constructor - * @method LTISERVICE - */ -var LTISERVICE = function() { - LTISERVICE.superclass.constructor.apply(this, arguments); -}; - -Y.extend(LTISERVICE, Y.Base, { - /** - * Init function for the checkboxselection module - */ - init : function() { - alert('ltiservice'); - - } -}, -{ - NAME : 'moodle-local_kaltura-ltiservice' -}); -M.local_kaltura = M.local_kaltura || {}; - -/** - * Entry point for ltiservice module - * @param string params additional parameters. - * @return object the ltiservice object - */ -M.local_kaltura.init = function(params) { - return new LTISERVICE(params); -}; - -}, '@VERSION@', {"requires": ["base", "node"]}); diff --git a/local/kaltura/yui/src/lticontainer/build.json b/local/kaltura/yui/src/lticontainer/build.json deleted file mode 100644 index cc70a98cbce94..0000000000000 --- a/local/kaltura/yui/src/lticontainer/build.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "name": "moodle-local_kaltura-lticontainer", - "builds": { - "moodle-local_kaltura-lticontainer": { - "jsfiles": [ - "lticontainer.js" - ] - } - } -} \ No newline at end of file diff --git a/local/kaltura/yui/src/lticontainer/js/lticontainer.js b/local/kaltura/yui/src/lticontainer/js/lticontainer.js deleted file mode 100644 index bd1df15a2fa86..0000000000000 --- a/local/kaltura/yui/src/lticontainer/js/lticontainer.js +++ /dev/null @@ -1,162 +0,0 @@ -// This file is part of Moodle - http://moodle.org/ -// -// Moodle is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// Moodle is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with Moodle. If not, see . - -/** - * YUI module used to resize the LTI launch container. - * - * @package local_kaltura - * @author Remote-Learner.net Inc - * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later - * @copyright (C) 2014 Remote Learner.net Inc http://www.remote-learner.net - */ - -/** - * This method calls the base class constructor - * @method LTICONTAINER - */ -var LTICONTAINER = function() { - LTICONTAINER.superclass.constructor.apply(this, arguments); -}; - -Y.extend(LTICONTAINER, Y.Base, { - /** - * The last known height of the element. - * @property lastheight - * @type {Integer} - * @default null - */ - lastheight: null, - - /** - * Add padding to make the bottom of the iframe visible. The iframe wasn't visible on some themes. Probably because of border widths, etc. - * @property padding - * @type {Integer} - * @default 15 - */ - padding: 15, - - /** - * Height of window. - * @property viewportheight - * @type {Integer} - * @default 15 - */ - viewportheight: null, - - /** - * Height of the entire document. - * @property documentheight - * @type {Integer} - * @default null - */ - documentheight: null, - - /** - * Height of the body element. - * @property documentheight - * @type {Integer} - * @default null - */ - clientheight: null, - - /** - * User video width size selection. - * @property kalvidwidth - * @type {Integer} - * @default null - */ - kalvidwidth: null, - - /** - * The YUI node object for the iframe container. - * @property ltiframe - * @type {Object} - * @default null - */ - ltiframe: null, - - /** - * Init function for the checkboxselection module - * @property params - * @type {Object} - */ - init : function(params) { - var bodynode = Y.one('body[class~='+params.bodyclass+']'); - - this.lastheight = params.lastheight; - this.padding = params.padding; - this.viewportheight = bodynode.get('winHeight'); - this.documentheight = bodynode.get('docHeight'); - this.clientheight = bodynode.getDOMNode.clientHeight; - this.ltiframe = Y.one('#contentframe'); - this.kalvidwidth = params.kalvidwidth; - - this.resize(); - this.timer = Y.later(250, this, this.resize); - }, - - /** - * This function resizes the iframe height and width. - */ - resize : function() { - if (this.lastheight !== Math.min(this.documentheight, this.viewportheight)) { - var newheight = this.viewportheight - this.ltiframe.getY() - this.padding+"px"; - this.ltiframe.setStyle('height', newheight); - this.lastheight = Math.min(this.documentheight, this.viewportheight); - } - - var kalvidcontent = Y.one('#kalvid_content'); - if (kalvidcontent !== null) { - var maxwidth = kalvidcontent.get('offsetWidth'); - var allowedsize = maxwidth - this.padding; - - if (this.kalvidwidth !== null) { - // Double current user's video width selection as requested by Kaltura. - var newsize = this.kalvidwidth * 2; - - // If "newsize" if over allowed size then set it to the maximum allowed. - if (newsize > allowedsize) { - this.ltiframe.setStyle('width', allowedsize+'px'); - } else { - this.ltiframe.setStyle('width', newsize+'px'); - } - } - } - } -}, -{ - NAME : 'moodle-local_kaltura-lticontainer', - ATTRS : { - bodyclass : { - value : null - }, - lastheight : { - value : null - }, - padding: { - value : 15 - } - } -}); -M.local_kaltura = M.local_kaltura || {}; - -/** - * Entry point for lticontainer module - * @param string params additional parameters. - * @return object the lticontainer object - */ -M.local_kaltura.init = function(params) { - return new LTICONTAINER(params); -}; diff --git a/local/kaltura/yui/src/lticontainer/meta/lticontainer.json b/local/kaltura/yui/src/lticontainer/meta/lticontainer.json deleted file mode 100644 index f3a5d478c89f3..0000000000000 --- a/local/kaltura/yui/src/lticontainer/meta/lticontainer.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "moodle-local_kaltura-lticontainer": { - "requires": [ - "base", - "node" - ] - } -} \ No newline at end of file diff --git a/local/kaltura/yui/src/ltipanel/build.json b/local/kaltura/yui/src/ltipanel/build.json deleted file mode 100644 index 037cdbe58b803..0000000000000 --- a/local/kaltura/yui/src/ltipanel/build.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "name": "moodle-local_kaltura-ltipanel", - "builds": { - "moodle-local_kaltura-ltipanel": { - "jsfiles": [ - "ltipanel.js" - ] - } - } -} diff --git a/local/kaltura/yui/src/ltipanel/js/ltipanel.js b/local/kaltura/yui/src/ltipanel/js/ltipanel.js deleted file mode 100644 index 559635513c23a..0000000000000 --- a/local/kaltura/yui/src/ltipanel/js/ltipanel.js +++ /dev/null @@ -1,467 +0,0 @@ -// This file is part of Moodle - http://moodle.org/ -// -// Moodle is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// Moodle is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with Moodle. If not, see . - -/** - * YUI module for displaying an LTI launch within a YUI panel. - * - * @package local_kaltura - * @author Remote-Learner.net Inc - * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later - * @copyright (C) 2014 Remote Learner.net Inc http://www.remote-learner.net - */ - - /** - * This method calls the base class constructor - * @method LTIPANEL - */ -var LTIPANEL = function() { - LTIPANEL.superclass.constructor.apply(this, arguments); -}; - -Y.extend(LTIPANEL, Y.Base, { - /** - * Contains the object tag needed to launch an LTI session. - * @property panelbodycontent - * @type {String} - * @default null - */ - panelbodycontent: null, - - /** - * Set to true if panel is visible, otherwise false. - * @property panelvisible - * @type {Boolean} - * @default null - */ - panelvisible: false, - - /** - * The panel object - * @property panel - * @type {Object} - * @default null - */ - panel: null, - - /** - * The name of the initiating module. - * @property modulename - * @type {String} - * @default null - */ - modulename: null, - - /** - * The id value of the add media button. - * @property addvidbtnid - * @type {String} - * @default null - */ - addvidbtnid: null, - - /** - * Init function for the checkboxselection module - * @property params - * @type {Object} - */ - init : function(params) { - // Check to make sure parameters are initialized - if ('0' === params.addvidbtnid || '0' === params.ltilaunchurl || 0 === params.courseid || 0 === params.height || 0 === params.width) { - alert('Some parameters were not initialized.'); - return; - } - - this.modulename = params.modulename; - this.addvidbtnid = params.addvidbtnid; - - var addvideobtn = Y.one('#'+params.addvidbtnid); - addvideobtn.on('click', this.open_panel_callback, this, params.ltilaunchurl, params.height, params.width); - }, - - /** - * Event handler callback for when the add video button is clicked. This function creates the a panel element. - * @property e - * @type {Object} - */ - open_panel_callback : function(e, url, height, width) { - var panelheight = parseInt(height, 10) + 45; - var panelwidth = parseInt(width, 10) + 23 + 'px'; - - width = width+'px'; - // Apply special width for mobile devices as requested by Kaltura. - if (Y.UA.ipod !== 0 || Y.UA.ipad !== 0 || Y.UA.iphone !== 0 || Y.UA.android !== 0 || Y.UA.mobile !== null) { - panelwidth = '80%'; - width = '100%'; - } - - var iframe = ""; - this.panelbodycontent = iframe; - if (Y.UA.ipod !== 0 || Y.UA.ipad !== 0 || Y.UA.iphone !== 0) { - // This outer div will constrain the iframe from overlapping over its content region on iOS devices. - this.panelbodycontent = "
    "+iframe+"
    "; - } - - // If the panel has not yet been initialized. - if (null === this.panel) { - this.panel = new Y.Panel({ - srcNode : Y.Node.create('
    '), - headerContent : '', - bodyContent : this.panelbodycontent, - width : panelwidth, - height : panelheight+"px", - zIndex : 6, - centered : true, - modal : true, - visible : false, - render : true, - hideOn : [ - { - node : Y.one('input[id=closeltipanel]'), - eventName : 'click' - } - ] - }); - - this.panel.show(); - - // Listen to simulated click event send from local/kaltura/service.php - Y.one('input[id=closeltipanel]').on('click', this.lti_hide_panel_callback, this); - - // // Listen to when the panel is made visible or hidden - this.panel.after('visibleChange', this.lti_panel_visible_change_callback, this); - } else { - this.panel.show(); - } - }, - - /** - * Event handler callback for when a simulated click event is triggered on a specifc element. - */ - lti_hide_panel_callback : function() { - // hide the thumbnail image. - var imagenode = Y.one('img[id=video_thumbnail]'); - imagenode.setStyle('display', 'none'); - // Update the iframe element attributes - var iframenode = Y.one('iframe[id=contentframe]'); - iframenode.setAttribute('width', Y.one('input[id=width]').getAttribute('value')); - iframenode.setAttribute('height', Y.one('input[id=height]').getAttribute('value')); - iframenode.setStyle('display', 'inline'); - - // If the page is a Video presentation or resource execute a function to change the button caption KALDEV-579 - var element = Y.one('input[name=modulename]'); - - if (undefined !== element && ('kalvidres' === this.modulename || 'kalvidpres' === this.modulename)) { - this.lti_panel_change_add_media_button_caption(); - } - }, - - lti_panel_change_add_media_button_caption : function() { - // Need to find a better way of doing this. Change was made for KALDEV-579. - var buttoncaption = M.util.get_string('replace_video', this.modulename); - if (buttoncaption !== Y.one('#'+this.addvidbtnid).getAttribute('value')) { - Y.one('#'+this.addvidbtnid).setAttribute('value', buttoncaption); - } - }, - - /** - * Event handler callback for when the panel is made hidden or visible. - */ - lti_panel_visible_change_callback : function() { - this.panelvisible = this.panel.get('visible'); - - // If panel is visible, re-launch the LIT request so that the user sees the main page. Instead of the last page they visited. If the panel is not visible then - // set the content to an empty string; this prevents videos from the iframe from continuing to play after the panel was closed. - if (true === this.panelvisible) { - this.panel.set('bodyContent', this.panelbodycontent); - } else { - this.panel.set('bodyContent', ''); - } - } -}, -{ - NAME : 'moodle-local_kaltura-ltipanel', - ATTRS : { - addvidbtnid : { - value: '0' - }, - ltilaunchurl : { - value: '0' - }, - height : { - value: 0 - }, - width : { - value: 0 - }, - modulename : { - value: '' - } - } -}); - -/** - * This method calls the base class constructor. The primary difference between LTIPANELMEDIAASSIGNMENT and LTIPANEL is that - * LTIPANELMEDIAASSIGNMENT creates a node and appends it to the body tag of the page. The reason for this is due to an issue with the Moodle - * navbar covering up part of the YUI panel, if the panel markup is appended to a child element within the body tag. - * @method LTIPANELMEDIAASSIGNMENT - */ -var LTIPANELMEDIAASSIGNMENT = function() { - LTIPANELMEDIAASSIGNMENT.superclass.constructor.apply(this, arguments); -}; - -Y.extend(LTIPANELMEDIAASSIGNMENT, Y.Base, { - /** - * Contains the object tag needed to launch an LTI session. - * @property panelbodycontent - * @type {String} - * @default null - */ - panelbodycontent: null, - - /** - * Set to true if panel is visible, otherwise false. - * @property panelvisible - * @type {Boolean} - * @default null - */ - panelvisible: false, - - /** - * The panel object - * @property panel - * @type {Object} - * @default null - */ - panel: null, - - /** - * The panel height. - * @property panelheight - * @type {Integer} - * @default 0 - */ - panelheight: 0, - - /** - * The panel width. - * @property panelwidth - * @type {Integer} - * @default 0 - */ - panelwidth: 0, - - /** - * Init function for the checkboxselection module - * @property params - * @type {Object} - */ - init : function(params) { - // Check to make sure parameters are initialized - if ('0' === params.addvidbtnid || '0' === params.ltilaunchurl || 0 === params.courseid || 0 === params.height || 0 === params.width) { - return; - } - - var addvideobtn = Y.one('#'+params.addvidbtnid); - addvideobtn.on('click', this.open_panel_callback, this, params.ltilaunchurl, params.height, params.width); - }, - - /** - * Event handler callback for when the add video button is clicked. This function creates the a panel element. - * @property e - * @type {Object} - */ - open_panel_callback : function(e, url, height, width) { - this.panelheight = parseInt(height, 10) + 45; - this.panelwidth = parseInt(width, 10) + 23; - - this.panelbodycontent = ""; - - // If the panel has not yet been initialized. - if (null === this.panel) { - this.panel = new Y.Panel({ - srcNode : Y.Node.create('
    '), - headerContent : '', - bodyContent : this.panelbodycontent, - width : this.panelwidth+"px", - height : this.panelheight+"px", - zIndex : 6, - centered : true, - modal : true, - visible : false, - render : true, - hideOn : [ - { - node : Y.one('input[id=closeltipanel]'), - eventName : 'click' - } - ] - }); - - this.panel.show(); - - // Listen to simulated click event send from local/kaltura/service.php - Y.one('input[id=closeltipanel]').on('click', this.lti_hide_panel_callback, this); - - // Listen to when the panel is made visible or hidden - this.panel.after('visibleChange', this.lti_panel_visible_change_callback, this); - } else { - this.panel.show(); - } - }, - - /** - * Event handler callback for when a simulated click event is triggered on a specifc element. - */ - lti_hide_panel_callback : function() { - // Enable submit button - Y.one('input[id=submit_video]').removeAttribute('disabled'); - // hide the thumbnail image. - var imagenode = Y.one('img[id=video_thumbnail]'); - imagenode.setStyle('display', 'none'); - // Update the iframe element attributes - var iframenode = Y.one('iframe[id=contentframe]'); - iframenode.setAttribute('width', Y.one('input[id=width]').getAttribute('value')); - iframenode.setAttribute('height', Y.one('input[id=height]').getAttribute('value')); - iframenode.setStyle('display', 'inline'); - Y.one('#id_add_video').set('value', M.util.get_string('replacevideo', 'kalvidassign')); - }, - - /** - * Event handler callback for when the panel is made hidden or visible. - */ - lti_panel_visible_change_callback : function() { - this.panelvisible = this.panel.get('visible'); - - // If panel is visible, re-launch the LIT request so that the user sees the main page. Instead of the last page they visited. If the panel is not visible then - // set the content to an empty string; this prevents videos from the iframe from continuing to play after the panel was closed. - if (true === this.panelvisible) { - this.panel.set('bodyContent', this.panelbodycontent); - this.panel.set('height', this.panelheight); - this.panel.set('width', this.panelwidth); - this.panel.set('centered', true); - } else { - this.panel.set('bodyContent', ''); - } - } -}, -{ - NAME : 'moodle-local_kaltura-ltipanel', - ATTRS : { - addvidbtnid : { - value: '0' - }, - ltilaunchurl : { - value: '0' - }, - height : { - value: 0 - }, - width : { - value: 0 - } - } -}); - -/** - * This method calls the base class constructor. This module renders a Panel for viewing media from multiple sources. - * @method LTISUBMISSIONREVIEW - */ -var LTISUBMISSIONREVIEW = function() { - LTISUBMISSIONREVIEW.superclass.constructor.apply(this, arguments); -}; - -Y.extend(LTISUBMISSIONREVIEW, Y.Base, { - /** - * An instance of the ltimediaassignment class. - * @property ltimediaassignment - * @type {Object} - * @default null - */ - ltimediaassignment: null, - - - /** - * Init function for the checkboxselection module - * @property params - * @type {Object} - */ - init : function(ltimediaassignment) { - this.ltimediaassignment = ltimediaassignment; - Y.one('form[id=fastgrade]').delegate('click', this.review_submission, 'a[name=submission_source]', this); - }, - - /** - * Callback function for when a user clicks on the review submission link. - * @property e - * @type {Object} - */ - review_submission : function(e) { - e.preventDefault(); - var source, height, width; - // Test if the target is an anchor tag or img tag. - if (e.target.test('a')) { - source = e.target.getAttribute('href'); - height = e.target.ancestor('div[name=media_submission]').get('childNodes').filter('input[name=height]').get('value'); - width = e.target.ancestor('div[name=media_submission]').get('childNodes').filter('input[name=width]').get('value'); - } else { - source = e.target.ancestor('a[name=submission_source]').getAttribute('href'); - height = e.target.ancestor('div[name=media_submission]').get('childNodes').filter('input[name=height]').get('value'); - width = e.target.ancestor('div[name=media_submission]').get('childNodes').filter('input[name=width]').get('value'); - } - - this.ltimediaassignment.open_panel_callback(null, source, height, width); - } -}, -{ - NAME : 'moodle-local_kaltura-ltipanel' -}); - -M.local_kaltura = M.local_kaltura || {}; - -/** - * Entry point for ltipanel module - * @param string params additional parameters. - * @return object the ltipanel object - */ -M.local_kaltura.init = function(params) { - return new LTIPANEL(params); -}; - -/** - * Entry point for ltipanelmediaassignment module - * @param string params additional parameters. - * @return object the ltipanel object - */ -M.local_kaltura.initmediaassignment = function(params) { - return new LTIPANELMEDIAASSIGNMENT(params); -}; - -/** - * Entry point for ltipanelmediaassignment module - * @param string params additional parameters. - * @return object the ltipanel object - */ -M.local_kaltura.initreviewsubmission = function() { - var args = { - addvidbtnid: '0', - ltilaunchurl: '0', - courseid: 0, - height: 0, - width: 0 - }; - var mediaassignment = new LTIPANELMEDIAASSIGNMENT(args); - return new LTISUBMISSIONREVIEW(mediaassignment); -}; \ No newline at end of file diff --git a/local/kaltura/yui/src/ltipanel/meta/ltipanel.json b/local/kaltura/yui/src/ltipanel/meta/ltipanel.json deleted file mode 100644 index c6fd71178cfe7..0000000000000 --- a/local/kaltura/yui/src/ltipanel/meta/ltipanel.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "moodle-local_kaltura-ltipanel": { - "requires": [ - "base", - "node", - "panel", - "node-event-simulate" - ] - } -} diff --git a/local/kaltura/yui/src/ltiservice/build.json b/local/kaltura/yui/src/ltiservice/build.json deleted file mode 100644 index a6512cc4eb485..0000000000000 --- a/local/kaltura/yui/src/ltiservice/build.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "name": "moodle-local_kaltura-ltiservice", - "builds": { - "moodle-local_kaltura-ltiservice": { - "jsfiles": [ - "ltiservice.js" - ] - } - } -} diff --git a/local/kaltura/yui/src/ltiservice/js/ltiservice.js b/local/kaltura/yui/src/ltiservice/js/ltiservice.js deleted file mode 100644 index 61ab4bc6204f3..0000000000000 --- a/local/kaltura/yui/src/ltiservice/js/ltiservice.js +++ /dev/null @@ -1,115 +0,0 @@ -// This file is part of Moodle - http://moodle.org/ -// -// Moodle is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// Moodle is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with Moodle. If not, see . - -/** - * YUI module for displaying an LTI launch within a YUI panel. - * - * @package local_kaltura - * @author Remote-Learner.net Inc - * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later - * @copyright (C) 2014 Remote Learner.net Inc http://www.remote-learner.net - */ - - /** - * This method calls the base class constructor - * @method LTISERVICE - */ -var LTISERVICE = function() { - LTISERVICE.superclass.constructor.apply(this, arguments); -}; - -Y.extend(LTISERVICE, Y.Base, { - /** - * Init function for triggering a custom event and setting attributes. Also checks whether optional elements exist in the parent window. - * @property params - * @type {Object} - */ - init : function(params) { - if (window.parent.document.getElementById('video_title')) { - Y.one(window.parent.document.getElementById('video_title')).setAttribute('value', params.title); - } - - if (window.parent.document.getElementById('entry_id')) { - Y.one(window.parent.document.getElementById('entry_id')).setAttribute('value', params.entryid); - } - - if (window.parent.document.getElementById('height')) { - Y.one(window.parent.document.getElementById('height')).setAttribute('value', params.height); - } - - if (window.parent.document.getElementById('width')) { - Y.one(window.parent.document.getElementById('width')).setAttribute('value', params.width); - } - - if (window.parent.document.getElementById('uiconf_id')) { - Y.one(window.parent.document.getElementById('uiconf_id')).setAttribute('value', '1'); - } - - if (window.parent.document.getElementById('widescreen')) { - Y.one(window.parent.document.getElementById('widescreen')).setAttribute('value', '1'); - } - - if (window.parent.document.getElementById('video_preview_frame')) { - Y.one(window.parent.document.getElementById('video_preview_frame')).setAttribute('src', decodeURIComponent(params.iframeurl)); - } else if (window.parent.document.getElementById('contentframe')) { - Y.one(window.parent.document.getElementById('contentframe')).setAttribute('src', decodeURIComponent(params.iframeurl)); - } - - // This element must exist. - Y.one(window.parent.document.getElementById('source')).setAttribute('value', decodeURIComponent(params.iframeurl)); - - if (window.parent.document.getElementById('metadata')) { - Y.one(window.parent.document.getElementById('metadata')).setAttribute('value', params.metadata); - } - - if (window.parent.document.getElementById('closeltipanel')) { - Y.one(window.parent.document.getElementById('closeltipanel')).simulate('click'); - } - } -}, -{ - NAME : 'moodle-local_kaltura-ltiservice', - ATTRS : { - iframeurl : { - value: '' - }, - width : { - value: '' - }, - height : { - value: '' - }, - entryid : { - value: '' - }, - title : { - value: '' - }, - metadata : { - value: '' - } - } - -}); -M.local_kaltura = M.local_kaltura || {}; - -/** - * Entry point for ltiservice module - * @param string params additional parameters. - * @return object the ltiservice object - */ -M.local_kaltura.init = function(params) { - return new LTISERVICE(params); -}; \ No newline at end of file diff --git a/local/kaltura/yui/src/ltiservice/meta/ltiservice.json b/local/kaltura/yui/src/ltiservice/meta/ltiservice.json deleted file mode 100644 index 0252ffd4bbf59..0000000000000 --- a/local/kaltura/yui/src/ltiservice/meta/ltiservice.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "moodle-local_kaltura-ltiservice": { - "requires": [ - "base", - "node", - "node-event-simulate" - ] - } -} \ No newline at end of file diff --git a/local/kaltura/yui/src/ltitinymcepanel/build.json b/local/kaltura/yui/src/ltitinymcepanel/build.json deleted file mode 100644 index c74304ce7f21e..0000000000000 --- a/local/kaltura/yui/src/ltitinymcepanel/build.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "name": "moodle-local_kaltura-ltitinymcepanel", - "builds": { - "moodle-local_kaltura-ltitinymcepanel": { - "jsfiles": [ - "ltitinymcepanel.js" - ] - } - } -} diff --git a/local/kaltura/yui/src/ltitinymcepanel/js/ltitinymcepanel.js b/local/kaltura/yui/src/ltitinymcepanel/js/ltitinymcepanel.js deleted file mode 100644 index d3ce263a58c80..0000000000000 --- a/local/kaltura/yui/src/ltitinymcepanel/js/ltitinymcepanel.js +++ /dev/null @@ -1,136 +0,0 @@ -// This file is part of Moodle - http://moodle.org/ -// -// Moodle is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// Moodle is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with Moodle. If not, see . - -/** - * YUI module for displaying an LTI launch within a YUI panel. - * - * @package local_kaltura - * @author Remote-Learner.net Inc - * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later - * @copyright (C) 2014 Remote Learner.net Inc http://www.remote-learner.net - */ - - /** - * This method calls the base class constructor - * @method LTITINYMCEPANEL - */ -var LTITINYMCEPANEL = function() { - LTITINYMCEPANEL.superclass.constructor.apply(this, arguments); -}; - -Y.extend(LTITINYMCEPANEL, Y.Base, { - /** - * The context id the editor was launched in. - * @property contextid - * @type {Integer} - * @default null - */ - contextid: 0, - - /** - * Init function for the checkboxselection module - * @property {Object} params Data to help initialize the YUI module. - */ - init : function(params) { - // Check to make sure parameters are initialized. - if ('' === params.insertbtnid || '' === params.ltilaunchurl || '' === params.objecttagheight || '' === params.objecttagid || '' === params.previewiframeid) { - alert('Some parameters were not initialized.'); - return; - } - - // Initialize the the browse when the window is initially rendered. - this.load_lti_content(params.ltilaunchurl, params.objecttagid, params.objecttagheight); - - // Disable the insert button since nothing has been selected yet. - Y.one('#'+params.insertbtnid).set('disabled', true); - - // Listen to simulated click event send from local/kaltura/service.php - Y.one('#closeltipanel').on('click', this.user_selected_video_callback, this, params.insertbtnid, params.objecttagid, params.previewiframeid, params.objecttagheight); - - if (null !== Y.one('#page-footer')) { - Y.one('#page-footer').setStyle('display', 'none'); - } - }, - - /** - * A funciton to load the LTI content. This is called when the YUI module is first initialized. - * @property {String} url LTI launch URL. - * @property {String} iframeid iframe tag id. - * @property {String} iframeheight iframe tag height. - */ - load_lti_content : function(url, iframeid, iframeheight) { - if (0 === this.contextid) { - this.contextid = Y.one('#lti_launch_context_id').get('value'); - } - - var content = ''; - Y.one('#'+iframeid).setContent(content); - }, - - /** - * This function serves as a call back method for when the closeltipanel div has been clicked. It means that the user has - * selected a video for embedding into the TinyMCE edotor. Enabling the insert button, removing the contents LTI launch element and - * adding content to the media preview element. - * @property {Object} e Event object. - * @property {String} insertbtnid Insert button id. - * @property {String} objecttagid Object tag id. - * @property {String} previewiframeid Preview iframe tag id. - * @property {String} height Height of the iframe. - */ - user_selected_video_callback : function(e, insertbtnid, objecttagid, previewiframeid, height) { - Y.one('#'+insertbtnid).setStyle('display', 'inline'); - Y.one('#'+insertbtnid).set('disabled', false); - Y.one('#'+objecttagid).setContent(''); - - var center = Y.Node.create('
    '); - var iframe = Y.Node.create(''); - iframe.setAttribute('width', Y.one('#width').get('value')+'px'); - iframe.setAttribute('height', height+'px'); - iframe.setAttribute('src', Y.one('#source').get('value')); - - center.append(iframe); - Y.one('#'+previewiframeid).append(center); - } -}, -{ - NAME : 'moodle-local_kaltura-ltitinymcepanel', - ATTRS : { - insertbtnid : { - value : '' - }, - ltilaunchurl : { - value : '' - }, - objecttagheight : { - value : '' - }, - objecttagid : { - value : '' - }, - previewiframeid : { - value : '' - } - } -}); -M.local_kaltura = M.local_kaltura || {}; - -/** - * Entry point for ltipanel module - * @param {Object} params Additional parameters. - * @return {Object} the ltipanel object - */ -M.local_kaltura.init = function(params) { - return new LTITINYMCEPANEL(params); -}; diff --git a/local/kaltura/yui/src/ltitinymcepanel/meta/ltitinymcepanel.json b/local/kaltura/yui/src/ltitinymcepanel/meta/ltitinymcepanel.json deleted file mode 100644 index 4d0cc2d1ded4a..0000000000000 --- a/local/kaltura/yui/src/ltitinymcepanel/meta/ltitinymcepanel.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "moodle-local_kaltura-ltitinymcepanel": { - "requires": [ - "base", - "node", - "panel", - "node-event-simulate" - ] - } -} diff --git a/local/kalturamediagallery/db/access.php b/local/kalturamediagallery/db/access.php deleted file mode 100644 index 50efff4815640..0000000000000 --- a/local/kalturamediagallery/db/access.php +++ /dev/null @@ -1,37 +0,0 @@ -. - -/** - * Kaltura media gallery capabilities. - * - * @package local_kalturamediagallery - * @author Remote-Learner.net Inc - * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later - * @copyright (C) 2014 Remote Learner.net Inc http://www.remote-learner.net - */ - -$capabilities = array( - 'local/kalturamediagallery:view' => array( - 'captype' => 'read', - 'contextlevel' => CONTEXT_COURSE, - 'archetypes' => array( - 'student' => CAP_ALLOW, - 'editingteacher' => CAP_ALLOW, - 'teacher' => CAP_ALLOW, - 'manager' => CAP_ALLOW - ) - ), -); \ No newline at end of file diff --git a/local/kalturamediagallery/index.php b/local/kalturamediagallery/index.php deleted file mode 100644 index 4771fb78168a0..0000000000000 --- a/local/kalturamediagallery/index.php +++ /dev/null @@ -1,78 +0,0 @@ -. - -/** - * Kaltura media gallery main viewing page. - * - * @package local_kalturamediagallery - * @author Remote-Learner.net Inc - * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later - * @copyright (C) 2014 Remote Learner.net Inc http://www.remote-learner.net - */ - -require_once(dirname(dirname(dirname(__FILE__))).'/config.php'); - -global $USER, $PAGE; - -require_login(); -$courseid = required_param('courseid', PARAM_INT); - -$context = context_course::instance($courseid); -require_capability('local/kalturamediagallery:view', $context); - -$mediagallery = get_string('heading_mediagallery', 'local_kalturamediagallery'); - -$course = get_course($courseid); - -$PAGE->set_context($context); -$PAGE->set_course($course); -$site = get_site(); -$header = format_string($site->shortname).": $mediagallery"; - -$PAGE->navbar->add(get_string('nav_mediagallery', 'local_kalturamediagallery')); - -$PAGE->set_url('/local/kalturamediagallery/index.php', array('courseid' => $courseid)); -$PAGE->set_pagetype('kalturamediagallery-index'); -$PAGE->set_pagelayout('standard'); -$PAGE->set_title($header); -$PAGE->set_heading($header); - -$pageclass = 'kaltura-mediagallery-body'; -$PAGE->add_body_class($pageclass); - -echo $OUTPUT->header(); - -// Request the launch content with an iframe tag. -$attr = array( - 'id' => 'contentframe', - 'height' => '600px', - 'width' => '100%', - 'allowfullscreen' => 'true', - 'webkitallowfullscreen' => 'true', - 'mozallowfullscreen' => 'true', - 'src' => 'lti_launch.php?courseid='.$courseid -); -echo html_writer::tag('iframe', '', $attr); - -// Require a YUI module to make the iframe tag be as large as possible. -$params = array( - 'bodyclass' => $pageclass, - 'lastheight' => null, - 'padding' => 15 -); -$PAGE->requires->yui_module('moodle-local_kaltura-lticontainer', 'M.local_kaltura.init', array($params), null, true); - -echo $OUTPUT->footer(); \ No newline at end of file diff --git a/local/kalturamediagallery/lang/en/local_kalturamediagallery.php b/local/kalturamediagallery/lang/en/local_kalturamediagallery.php deleted file mode 100644 index f6a979f53fa31..0000000000000 --- a/local/kalturamediagallery/lang/en/local_kalturamediagallery.php +++ /dev/null @@ -1,31 +0,0 @@ -. - -/** - * Kaltura media gallery language file. - * - * @package local_kalturamediagallery - * @author Remote-Learner.net Inc - * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later - * @copyright (C) 2014 Remote Learner.net Inc http://www.remote-learner.net - */ - -$string['heading_mediagallery'] = 'Kaltura Media Gallery'; -$string['invalid_launch_parameters'] = 'Invalid launch parameters'; -$string['kalturamediagallery:view'] = 'View Kaltura Media Gallery'; -$string['nav_mediagallery'] = 'Kaltura Media Gallery'; -$string['nav_mediagallery_page'] = 'Kaltura Media Gallery'; -$string['pluginname'] = 'Kaltura Media Gallery'; \ No newline at end of file diff --git a/local/kalturamediagallery/lib.php b/local/kalturamediagallery/lib.php deleted file mode 100644 index ad648814f0506..0000000000000 --- a/local/kalturamediagallery/lib.php +++ /dev/null @@ -1,72 +0,0 @@ -. - -/** - * Kaltura media gallery lib script. - * - * @package local_kalturamediagallery - * @author Remote-Learner.net Inc - * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later - * @copyright (C) 2014 Remote Learner.net Inc http://www.remote-learner.net - */ - -/** - * This function adds Kaltura media gallery link to the navigation block. The code ensures that the Kaltura media gallery link is only displayed in the 'Current courses' - * menu true. In addition it check if the current context is one that is below the course context. - * @param global_navigation $navigation a global_navigation object - * @return void - */ -function local_kalturamediagallery_extends_navigation($navigation) { - global $USER, $PAGE, $DB; - - if (empty($USER->id)) { - return; - } - - // When on the admin-index page, first check if the capability exists. - // This is to cover the edge case on the Plugins check page, where a check for the capability is performed before the capability has been added to the Moodle mdl_capabilities - // table. - if ('admin-index' === $PAGE->pagetype) { - $exists = $DB->record_exists('capabilities', array('name' => 'local/kalturamediagallery:view')); - - if (!$exists) { - return; - } - } - - // Check the current page context. If the context is not of a course or module then we are in another area of Moodle and return void. - $context = context::instance_by_id($PAGE->context->id); - $isvalidcontext = ($context instanceof context_course || $context instanceof context_module) ? true : false; - if (!$isvalidcontext) { - return; - } - - // If the context if a module then get the parent context. - $coursecontext = null; - if ($context instanceof context_module) { - $coursecontext = $context->get_course_context(); - } else { - $coursecontext = $context; - } - - $mycoursesnode = $navigation->find('currentcourse', $navigation::TYPE_ROOTNODE); - - if (empty($mycoursesnode) || !has_capability('local/kalturamediagallery:view', $coursecontext, $USER)) { - return; - } - - $name = get_string('nav_mediagallery', 'local_kalturamediagallery'); - $url = new moodle_url('/local/kalturamediagallery/index.php', array('courseid' => $coursecontext->instanceid)); - $kalmedgalnode = $mycoursesnode->add($name, $url, navigation_node::NODETYPE_LEAF, $name, 'kalcrsgal'); -} \ No newline at end of file diff --git a/local/kalturamediagallery/lti_launch.php b/local/kalturamediagallery/lti_launch.php deleted file mode 100644 index ac873e5e48903..0000000000000 --- a/local/kalturamediagallery/lti_launch.php +++ /dev/null @@ -1,53 +0,0 @@ -. - -/** - * Kaltura media gallery LTI launch page. - * - * @package local_kalturamediagallery - * @author Remote-Learner.net Inc - * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later - * @copyright (C) 2014 Remote Learner.net Inc http://www.remote-learner.net - */ - -require_once(dirname(dirname(dirname(__FILE__))).'/config.php'); -require_once(dirname(dirname(dirname(__FILE__))).'/local/kaltura/locallib.php'); - -global $USER; - -require_login(); -$courseid = required_param('courseid', PARAM_INT); - -$context = context_course::instance($courseid); -require_capability('local/kalturamediagallery:view', $context); -$course = get_course($courseid); - -$launch = array(); -$launch['id'] = 1; -$launch['cmid'] = 0; -$launch['title'] = 'Kaltura media gallery'; -$launch['module'] = KAF_MEDIAGALLERY_MODULE; -$launch['course'] = $course; -$launch['width'] = '300'; -$launch['height'] = '300'; -$launch['custom_publishdata'] = ''; - -if (local_kaltura_validate_mediagallery_required_params($launch)) { - $content = local_kaltura_request_lti_launch($launch); - echo $content; -} else { - echo get_string('invalid_launch_parameters', 'local_kalturamediagallery'); -} \ No newline at end of file diff --git a/local/kalturamediagallery/version.php b/local/kalturamediagallery/version.php deleted file mode 100644 index 9c42ae7c8da6e..0000000000000 --- a/local/kalturamediagallery/version.php +++ /dev/null @@ -1,36 +0,0 @@ -. - -/** - * Kaltura media gallery version file. - * - * @package local_kalturamediagallery - * @author Remote-Learner.net Inc - * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later - * @copyright (C) 2014 Remote Learner.net Inc http://www.remote-learner.net - */ - -if (!defined('MOODLE_INTERNAL')) { - die('Direct access to this script is forbidden.'); -} - -$plugin->version = 2014013000; -$plugin->component = 'local_kalturamediagallery'; -$plugin->release = 'Kaltura release 4.0.00 (RL: TBD)'; -$plugin->requires = 2013051400; -$plugin->maturity = MATURITY_STABLE; -$plugin->dependencies = array( - 'local_kaltura' => 2014013000 -); diff --git a/local/mymedia/db/access.php b/local/mymedia/db/access.php deleted file mode 100644 index 93392131941f4..0000000000000 --- a/local/mymedia/db/access.php +++ /dev/null @@ -1,34 +0,0 @@ -. - -/** - * My Media capabilities. - * - * @package local_mymedia - * @author Remote-Learner.net Inc - * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later - * @copyright (C) 2014 Remote Learner.net Inc http://www.remote-learner.net - */ - -$capabilities = array( - 'local/mymedia:view' => array( - 'captype' => 'read', - 'contextlevel' => CONTEXT_USER, - 'archetypes' => array( - 'user' => CAP_ALLOW - ) - ), -); \ No newline at end of file diff --git a/local/mymedia/lang/en/local_mymedia.php b/local/mymedia/lang/en/local_mymedia.php deleted file mode 100644 index 4920ca2654615..0000000000000 --- a/local/mymedia/lang/en/local_mymedia.php +++ /dev/null @@ -1,30 +0,0 @@ -. - -/** - * My Media language file. - * - * @package local_mymedia - * @author Remote-Learner.net Inc - * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later - * @copyright (C) 2014 Remote Learner.net Inc http://www.remote-learner.net - */ - -$string['heading_mymedia'] = 'My Media'; -$string['invalid_launch_parameters'] = 'Invalid launch parameters'; -$string['mymedia:view'] = 'View My Media page'; -$string['nav_mymedia'] = 'My Media'; -$string['pluginname'] = 'My Media'; \ No newline at end of file diff --git a/local/mymedia/lib.php b/local/mymedia/lib.php deleted file mode 100644 index cc1e2c5e1eab3..0000000000000 --- a/local/mymedia/lib.php +++ /dev/null @@ -1,56 +0,0 @@ -. - -/** - * Kaltura my media library script - * - * @package local_mymedia - * @author Remote-Learner.net Inc - * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later - * @copyright (C) 2014 Remote Learner.net Inc http://www.remote-learner.net - */ - -/** - * This function adds my media links to the navigation block - * @param global_navigation $navigation a global_navigation object - * @return void - */ -function local_mymedia_extends_navigation($navigation) { - global $USER, $DB, $PAGE; - - if (empty($USER->id)) { - return; - } - - // When on the admin-index page, first check if the capability exists. - // This is to cover the edge case on the Plugins check page, where a check for the capability is performed before the capability has been added to the Moodle mdl_capabilities - // table. - if ('admin-index' === $PAGE->pagetype) { - $exists = $DB->record_exists('capabilities', array('name' => 'local/mymedia:view')); - - if (!$exists) { - return; - } - } - - $nodehome = $navigation->get('home'); - $context = context_user::instance($USER->id); - - if (empty($nodehome) || !has_capability('local/mymedia:view', $context, $USER)) { - return; - } - - $mymedia = get_string('nav_mymedia', 'local_mymedia'); - $nodemymedia = $nodehome->add($mymedia, new moodle_url('/local/mymedia/mymedia.php'), navigation_node::NODETYPE_LEAF, $mymedia, 'mymedia'); -} \ No newline at end of file diff --git a/local/mymedia/lti_launch.php b/local/mymedia/lti_launch.php deleted file mode 100644 index 2f8942319b5f9..0000000000000 --- a/local/mymedia/lti_launch.php +++ /dev/null @@ -1,51 +0,0 @@ -. - -/** - * My Media LTI launch page. - * - * @package local_mymedia - * @author Remote-Learner.net Inc - * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later - * @copyright (C) 2014 Remote Learner.net Inc http://www.remote-learner.net - */ - -require_once(dirname(dirname(dirname(__FILE__))).'/config.php'); -require_once(dirname(dirname(dirname(__FILE__))).'/local/kaltura/locallib.php'); - -global $USER; - -require_login(); - -$context = context_user::instance($USER->id); -require_capability('local/mymedia:view', $context); - -$launch = array(); -$launch['id'] = 1; -$launch['cmid'] = 0; -$launch['title'] = 'My Media'; -$launch['module'] = KAF_MYMEDIA_MODULE; -$launch['course'] = $PAGE->course; -$launch['width'] = '300'; -$launch['height'] = '300'; -$launch['custom_publishdata'] = ''; - -if (local_kaltura_validate_mymedia_required_params($launch)) { - $content = local_kaltura_request_lti_launch($launch); - echo $content; -} else { - echo get_string('invalid_launch_parameters', 'local_mymedia'); -} \ No newline at end of file diff --git a/local/mymedia/mymedia.php b/local/mymedia/mymedia.php deleted file mode 100644 index 4cf43fde8f437..0000000000000 --- a/local/mymedia/mymedia.php +++ /dev/null @@ -1,71 +0,0 @@ -. - -/** - * My Media main viewing page. - * - * @package local_mymedia - * @author Remote-Learner.net Inc - * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later - * @copyright (C) 2014 Remote Learner.net Inc http://www.remote-learner.net - */ - -require_once(dirname(dirname(dirname(__FILE__))).'/config.php'); - -global $USER; - -require_login(); - -$context = context_user::instance($USER->id); -require_capability('local/mymedia:view', $context); - -$mymedia = get_string('heading_mymedia', 'local_mymedia'); -$PAGE->set_context(context_system::instance()); -$site = get_site(); -$header = format_string($site->shortname).": $mymedia"; - -$PAGE->set_url('/local/mymedia/mymedia.php'); -$PAGE->set_pagetype('mymedia-index'); -$PAGE->set_pagelayout('standard'); -$PAGE->set_title($header); -$PAGE->set_heading($header); - -$pageclass = 'kaltura-mediagallery-body'; -$PAGE->add_body_class($pageclass); - -echo $OUTPUT->header(); - -// Request the launch content with an iframe tag. -$attr = array( - 'id' => 'contentframe', - 'height' => '600px', - 'width' => '100%', - 'allowfullscreen' => 'true', - 'webkitallowfullscreen' => 'true', - 'mozallowfullscreen' => 'true', - 'src' => 'lti_launch.php' -); -echo html_writer::tag('iframe', '', $attr); - -// Require a YUI module to make the iframe tag be as large as possible. -$params = array( - 'bodyclass' => $pageclass, - 'lastheight' => null, - 'padding' => 15 -); -$PAGE->requires->yui_module('moodle-local_kaltura-lticontainer', 'M.local_kaltura.init', array($params), null, true); - -echo $OUTPUT->footer(); diff --git a/local/mymedia/version.php b/local/mymedia/version.php deleted file mode 100644 index 0e5d2b2b3b481..0000000000000 --- a/local/mymedia/version.php +++ /dev/null @@ -1,35 +0,0 @@ -. - -/** - * My Media version file. - * - * @package local_mymedia - * @author Remote-Learner.net Inc - * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later - * @copyright (C) 2014 Remote Learner.net Inc http://www.remote-learner.net - */ - -if (!defined('MOODLE_INTERNAL')) { - die('Direct access to this script is forbidden.'); -} - -$plugin->version = 2014013000; -$plugin->component = 'local_mymedia'; -$plugin->release = 'Kaltura release 4.0.00 (RL: TBD)'; -$plugin->requires = 2013051400; -$plugin->maturity = MATURITY_STABLE; -$plugin->dependencies = array( - 'local_kaltura' => 2014013000 -); diff --git a/mod/kalvidassign/backup/moodle2/backup_kalvidassign_activity_task.class.php b/mod/kalvidassign/backup/moodle2/backup_kalvidassign_activity_task.class.php deleted file mode 100644 index f2b8e7517b095..0000000000000 --- a/mod/kalvidassign/backup/moodle2/backup_kalvidassign_activity_task.class.php +++ /dev/null @@ -1,67 +0,0 @@ -. - -/** - * Kaltura video assignment backup activity task class. - * - * @package mod_kalvidassign - * @author Remote-Learner.net Inc - * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later - * @copyright (C) 2014 Remote Learner.net Inc http://www.remote-learner.net - */ - -require_once($CFG->dirroot.'/mod/kalvidassign/backup/moodle2/backup_kalvidassign_stepslib.php'); -require_once($CFG->dirroot.'/mod/kalvidassign/backup/moodle2/backup_kalvidassign_settingslib.php'); - -/** - * kalvidassign backup task that provides all the settings and steps to perform one - * complete backup of the activity - */ -class backup_kalvidassign_activity_task extends backup_activity_task { - - /** - * Define (add) particular settings this activity can have. - */ - protected function define_my_settings() { - // No particular settings for this activity. - } - - /** - * Define (add) particular steps this activity can have. - */ - protected function define_my_steps() { - // Choice only has one structure step. - $this->add_step(new backup_kalvidassign_activity_structure_step('kalvidassign_structure', 'kalvidassign.xml')); - } - - /** - * Code the transformations to perform in the activity in - * order to get transportable (encoded) links. - */ - static public function encode_content_links($content) { - global $CFG; - - $base = preg_quote($CFG->wwwroot, '/'); - - // Link to the list of kalvidassigns. - $search="/(".$base."\/mod\/kalvidassign\/index.php\?id\=)([0-9]+)/"; - $content= preg_replace($search, '$@KALVIDASSIGNINDEX*$2@$', $content); - - // Link to kalvidassign view by moduleid. - $search="/(".$base."\/mod\/kalvidassign\/view.php\?id\=)([0-9]+)/"; - $content= preg_replace($search, '$@KALVIDASSIGNVIEWBYID*$2@$', $content); - - return $content; - } -} \ No newline at end of file diff --git a/mod/kalvidassign/backup/moodle2/backup_kalvidassign_settingslib.php b/mod/kalvidassign/backup/moodle2/backup_kalvidassign_settingslib.php deleted file mode 100644 index 6bf1022679e88..0000000000000 --- a/mod/kalvidassign/backup/moodle2/backup_kalvidassign_settingslib.php +++ /dev/null @@ -1,26 +0,0 @@ -. - -/** - * Kaltura backup settingslib script. - * - * @package mod_kalvidassign - * @author Remote-Learner.net Inc - * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later - * @copyright (C) 2014 Remote Learner.net Inc http://www.remote-learner.net - */ - - // This activity has no particular settings but the inherited from the generic - // backup_activity_task so here there isn't any class definition, like the ones - // existing in /backup/moodle2/backup_settingslib.php (activities section) \ No newline at end of file diff --git a/mod/kalvidassign/backup/moodle2/backup_kalvidassign_stepslib.php b/mod/kalvidassign/backup/moodle2/backup_kalvidassign_stepslib.php deleted file mode 100644 index 91561e26a05c8..0000000000000 --- a/mod/kalvidassign/backup/moodle2/backup_kalvidassign_stepslib.php +++ /dev/null @@ -1,99 +0,0 @@ -. - -/** - * Kaltura video assignment backup stepslib script. - * - * @package mod_kalvidassign - * @author Remote-Learner.net Inc - * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later - * @copyright (C) 2014 Remote Learner.net Inc http://www.remote-learner.net - */ - -/** - * Define all the backup steps that will be used by the backup_kalvidassign_activity_task - */ - -/** - * Define the complete kalvidassign structure for backup, with file and id annotations - */ -class backup_kalvidassign_activity_structure_step extends backup_activity_structure_step { - - /** - * This function defines the structure used to backup the activity. - * @return backup_nested_element The $activitystructure wrapped by the common 'activity' element. - */ - protected function define_structure() { - - // To know if we are including userinfo. - $userinfo = $this->get_setting_value('userinfo'); - - // Define each element separated. - $columns = array( - 'course', - 'name', - 'intro', - 'introformat', - 'timeavailable', - 'timedue', - 'preventlate', - 'resubmit', - 'emailteachers', - 'grade', - 'timecreated', - 'timemodified' - ); - $kalvidassign = new backup_nested_element('kalvidassign', array('id'), $columns); - - $issues = new backup_nested_element('submissions'); - - $columns = array( - 'userid', - 'entry_id', - 'source', - 'width', - 'height', - 'grade', - 'submissioncomment', - 'format', - 'teacher', - 'mailed', - 'timemarked', - 'timecreated', - 'timemodified' - ); - $issue = new backup_nested_element('submission', array('id'), $columns); - - // Build the tree. - $kalvidassign->add_child($issues); - $issues->add_child($issue); - - // Define sources. - $kalvidassign->set_source_table('kalvidassign', array('id' => backup::VAR_ACTIVITYID)); - - // All the rest of elements only happen if we are including user info. - if ($userinfo) { - $issue->set_source_table('kalvidassign_submission', array('vidassignid' => backup::VAR_PARENTID)); - } - - // Annotate the user id's where required. - $issue->annotate_ids('user', 'userid'); - - // Annotate the file areas in use. - $issue->annotate_files('mod_kalvidassign', 'submission', 'id'); - - // Return the root element, wrapped into standard activity structure. - return $this->prepare_activity_structure($kalvidassign); - } -} \ No newline at end of file diff --git a/mod/kalvidassign/backup/moodle2/restore_kalvidassign_activity_task.class.php b/mod/kalvidassign/backup/moodle2/restore_kalvidassign_activity_task.class.php deleted file mode 100644 index 0ed52df4f50bb..0000000000000 --- a/mod/kalvidassign/backup/moodle2/restore_kalvidassign_activity_task.class.php +++ /dev/null @@ -1,109 +0,0 @@ -. - -/** - * Kaltura video assignment restore activity task class script. - * - * @package mod_kalvidassign - * @author Remote-Learner.net Inc - * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later - * @copyright (C) 2014 Remote Learner.net Inc http://www.remote-learner.net - */ - -defined('MOODLE_INTERNAL') || die(); - -require_once($CFG->dirroot.'/mod/kalvidassign/backup/moodle2/restore_kalvidassign_stepslib.php'); - -/** - * kalvidassign restore task that provides all the settings and steps to perform one - * complete restore of the activity. - */ -class restore_kalvidassign_activity_task extends restore_activity_task { - - /** - * Define (add) particular settings this activity can have. - */ - protected function define_my_settings() { - // No particular settings for this activity. - } - - /** - * Define (add) particular steps this activity can have. - */ - protected function define_my_steps() { - // Certificate only has one structure step. - $this->add_step(new restore_kalvidassign_activity_structure_step('kalvidassign_structure', 'kalvidassign.xml')); - } - - /** - * Define the contents in the activity that must be - * processed by the link decoder. - */ - static public function define_decode_contents() { - $contents = array(); - - $contents[] = new restore_decode_content('kalvidassign', array('intro'), 'kalvidassign'); - - return $contents; - } - - /** - * Define the decoding rules for links belonging - * to the activity to be executed by the link decoder. - */ - static public function define_decode_rules() { - $rules = array(); - - $rules[] = new restore_decode_rule('KALVIDASSIGNVIEWBYID', '/mod/kalvidassign/view.php?id=$1', 'course_module'); - $rules[] = new restore_decode_rule('KALVIDASSIGNINDEX', '/mod/kalvidassign/index.php?id=$1', 'course'); - - return $rules; - - } - - /** - * Define the restore log rules that will be applied - * by the {@link restore_logs_processor} when restoring - * kalvidassign logs. It must return one array - * of {@link restore_log_rule} objects. - */ - static public function define_restore_log_rules() { - $rules = array(); - - $rules[] = new restore_log_rule('kalvidassign', 'add', 'view.php?id={course_module}', '{kalvidassign}'); - $rules[] = new restore_log_rule('kalvidassign', 'update', 'view.php?id={course_module}', '{kalvidassign}'); - $rules[] = new restore_log_rule('kalvidassign', 'view', 'view.php?id={course_module}', '{kalvidassign}'); - - return $rules; - } - - /** - * Define the restore log rules that will be applied - * by the {@link restore_logs_processor} when restoring - * course logs. It must return one array - * of {@link restore_log_rule} objects. - * - * Note this rules are applied when restoring course logs - * by the restore final task, but are defined here at - * activity level. All them are rules not linked to any module instance (cmid = 0). - */ - static public function define_restore_log_rules_for_course() { - $rules = array(); - - // Fix old wrong uses (missing extension) - $rules[] = new restore_log_rule('kalvidassign', 'view all', 'index.php?id={course}', null); - - return $rules; - } -} \ No newline at end of file diff --git a/mod/kalvidassign/backup/moodle2/restore_kalvidassign_stepslib.php b/mod/kalvidassign/backup/moodle2/restore_kalvidassign_stepslib.php deleted file mode 100644 index a32272af6603e..0000000000000 --- a/mod/kalvidassign/backup/moodle2/restore_kalvidassign_stepslib.php +++ /dev/null @@ -1,82 +0,0 @@ -. - -/** - * Kaltura video assignment restore stepslib script. - * - * @package mod_kalvidassign - * @author Remote-Learner.net Inc - * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later - * @copyright (C) 2014 Remote Learner.net Inc http://www.remote-learner.net - */ - -/** - * Define all the restore steps that will be used by the restore_kalvidassign_activity_task - */ - -/** - * Structure step to restore one kalvidassign activity. - */ -class restore_kalvidassign_activity_structure_step extends restore_activity_structure_step { - - protected function define_structure() { - - $paths = array(); - $userinfo = $this->get_setting_value('userinfo'); - - $paths[] = new restore_path_element('kalvidassign', '/activity/kalvidassign'); - - if ($userinfo) { - $paths[] = new restore_path_element('kalvidassign_submission', '/activity/kalvidassign/submissions/submission'); - } - - // Return the paths wrapped into standard activity structure. - return $this->prepare_activity_structure($paths); - } - - protected function process_kalvidassign($data) { - global $DB; - - $data = (object)$data; - $oldid = $data->id; - $data->course = $this->get_courseid(); - - $data->timemodified = $this->apply_date_offset($data->timemodified); - - // insert the kalvidassign record. - $newitemid = $DB->insert_record('kalvidassign', $data); - // immediately after inserting "activity" record, call this. - $this->apply_activity_instance($newitemid); - } - - protected function process_kalvidassign_submission($data) { - global $DB; - - $data = (object)$data; - $oldid = $data->id; - - $data->vidassignid = $this->get_new_parentid('kalvidassign'); - $data->userid = $this->get_mappingid('user', $data->userid); - $data->timecreated = $this->apply_date_offset($data->timecreated); - - $newitemid = $DB->insert_record('kalvidassign_submission', $data); - $this->set_mapping('kalvidassign_submission', $oldid, $newitemid); - } - - - protected function after_execute() { - // Add kalvidassign related files, no need to match by itemname (just internally handled context). - $this->add_related_files('mod_kalvidassign', 'submission', 'kalvidassign_submission'); - } -} diff --git a/mod/kalvidassign/db/access.php b/mod/kalvidassign/db/access.php deleted file mode 100644 index 2c849c6f7849b..0000000000000 --- a/mod/kalvidassign/db/access.php +++ /dev/null @@ -1,55 +0,0 @@ -. - -/** - * Kaltura video assignment access script. - * - * @package mod_kalvidassign - * @author Remote-Learner.net Inc - * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later - * @copyright (C) 2014 Remote Learner.net Inc http://www.remote-learner.net - */ - -$capabilities = array( - - 'mod/kalvidassign:addinstance' => array( - 'riskbitmask' => RISK_XSS, - 'captype' => 'write', - 'contextlevel' => CONTEXT_COURSE, - 'archetypes' => array( - 'editingteacher' => CAP_ALLOW, - 'manager' => CAP_ALLOW - ), - 'clonepermissionsfrom' => 'moodle/course:manageactivities' - ), - - 'mod/kalvidassign:gradesubmission' => array( - 'captype' => 'write', - 'contextlevel' => CONTEXT_MODULE, - 'archetypes' => array( - 'teacher' => CAP_ALLOW, - 'editingteacher' => CAP_ALLOW, - 'manager' => CAP_ALLOW, - ) - ), - - 'mod/kalvidassign:submit' => array( - - 'captype' => 'write', - 'contextlevel' => CONTEXT_MODULE, - 'archetypes' => array( - 'student' => CAP_ALLOW - ) - ), -); \ No newline at end of file diff --git a/mod/kalvidassign/db/install.xml b/mod/kalvidassign/db/install.xml deleted file mode 100755 index 38705673b142f..0000000000000 --- a/mod/kalvidassign/db/install.xml +++ /dev/null @@ -1,60 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    -
    -
    \ No newline at end of file diff --git a/mod/kalvidassign/db/log.php b/mod/kalvidassign/db/log.php deleted file mode 100644 index 4cbc9949e2b30..0000000000000 --- a/mod/kalvidassign/db/log.php +++ /dev/null @@ -1,32 +0,0 @@ -. - -/** - * Kaltura video assignment log script. - * - * @package mod_kalvidassign - * @author Remote-Learner.net Inc - * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later - * @copyright (C) 2014 Remote Learner.net Inc http://www.remote-learner.net - */ - - -defined('MOODLE_INTERNAL') || die(); - -$logs = array( - array('module' => 'kalvidassign', 'action' => 'add', 'mtable' => 'kalvidassign', 'field' => 'name'), - array('module' => 'kalvidassign', 'action' => 'update', 'mtable' => 'kalvidassign', 'field' =>' name'), - array('module' => 'kalvidassign', 'action' => 'view', 'mtable' => 'kalvidassign', 'field' => 'name'), - array('module' => 'kalvidassign', 'action' => 'delete', 'mtable' => 'kalvidassign', 'field' => 'name') -); \ No newline at end of file diff --git a/mod/kalvidassign/db/messages.php b/mod/kalvidassign/db/messages.php deleted file mode 100644 index ceeb90aaefde9..0000000000000 --- a/mod/kalvidassign/db/messages.php +++ /dev/null @@ -1,26 +0,0 @@ -. - -/** - * Kaltura video assignment messages script. - * - * @package mod_kalvidassign - * @author Remote-Learner.net Inc - * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later - * @copyright (C) 2014 Remote Learner.net Inc http://www.remote-learner.net - */ - -$messageproviders = array( - 'kalvidassign_updates' => array() -); \ No newline at end of file diff --git a/mod/kalvidassign/db/upgrade.php b/mod/kalvidassign/db/upgrade.php deleted file mode 100644 index a387ba44f9c3b..0000000000000 --- a/mod/kalvidassign/db/upgrade.php +++ /dev/null @@ -1,89 +0,0 @@ -. - -/** - * Kaltura video assignment upgrade script. - * - * @package mod_kalvidassign - * @author Remote-Learner.net Inc - * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later - * @copyright (C) 2014 Remote Learner.net Inc http://www.remote-learner.net - */ - -function xmldb_kalvidassign_upgrade($oldversion) { - global $CFG, $DB; - - $dbman = $DB->get_manager(); - - if ($oldversion < 2011091301) { - - // Changing type of field intro on table kalvidassign to text - $table = new xmldb_table('kalvidassign'); - $field = new xmldb_field('intro', XMLDB_TYPE_TEXT, 'small', null, null, null, null, 'name'); - - // Launch change of type for field intro - $dbman->change_field_type($table, $field); - - // kalvidassign savepoint reached - upgrade_mod_savepoint(true, 2011091301, 'kalvidassign'); - } - - if ($oldversion < 2014013000) { - - // Define field source to be added to kalvidassign_submission. - $table = new xmldb_table('kalvidassign_submission'); - $field = new xmldb_field('source', XMLDB_TYPE_TEXT, null, null, null, null, null, 'entry_id'); - - // Conditionally launch add field source. - if (!$dbman->field_exists($table, $field)) { - $dbman->add_field($table, $field); - } - - // Define field width to be added to kalvidassign_submission. - $field = new xmldb_field('width', XMLDB_TYPE_INTEGER, '10', null, null, null, '0', 'source'); - - // Conditionally launch add field width. - if (!$dbman->field_exists($table, $field)) { - $dbman->add_field($table, $field); - } - - // Define field height to be added to kalvidassign_submission. - $field = new xmldb_field('height', XMLDB_TYPE_INTEGER, '10', null, null, null, '0', 'width'); - - // Conditionally launch add field height. - if (!$dbman->field_exists($table, $field)) { - $dbman->add_field($table, $field); - } - - // Kalvidassign savepoint reached. - upgrade_mod_savepoint(true, 2014013000, 'kalvidassign'); - } - - if ($oldversion < 2014013001) { - - // Define field metadata to be added to kalvidassign_submission. - $table = new xmldb_table('kalvidassign_submission'); - $field = new xmldb_field('metadata', XMLDB_TYPE_TEXT, null, null, null, null, null, 'timemarked'); - - // Conditionally launch add field metadata. - if (!$dbman->field_exists($table, $field)) { - $dbman->add_field($table, $field); - } - - // Kalvidassign savepoint reached. - upgrade_mod_savepoint(true, 2014013001, 'kalvidassign'); - } - - return true; -} diff --git a/mod/kalvidassign/grade_preferences_form.php b/mod/kalvidassign/grade_preferences_form.php deleted file mode 100644 index 85c3bad005f69..0000000000000 --- a/mod/kalvidassign/grade_preferences_form.php +++ /dev/null @@ -1,124 +0,0 @@ -. - -/** - * Kaltura grade preferences form. - * - * @package mod_kalvidassign - * @author Remote-Learner.net Inc - * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later - * @copyright (C) 2014 Remote Learner.net Inc http://www.remote-learner.net - */ - -if (!defined('MOODLE_INTERNAL')) { - die('Direct access to this script is forbidden.'); -} - -require_once(dirname(dirname(dirname(__FILE__))).'/course/moodleform_mod.php'); -require_once(dirname(__FILE__).'/locallib.php'); -require_once($CFG->libdir.'/formslib.php'); - -class kalvidassign_gradepreferences_form extends moodleform { - /** - * This function defines all of the elements displayed on the grade preferences form. - */ - public function definition() { - global $CFG, $COURSE, $USER; - - $mform =& $this->_form; - - $mform->addElement('hidden', 'cmid', $this->_customdata['cmid']); - $mform->setType('cmid', PARAM_INT); - - $mform->addElement('header', 'kal_vid_subm_hdr', get_string('optionalsettings', 'kalvidassign')); - - $context = context_module::instance($this->_customdata['cmid']); - - $group_opt = array(); - $groups = array(); - - // If the user doesn't have access to all group print the groups they have access to - if (!has_capability('moodle/site:accessallgroups', $context)) { - - // Determine the groups mode - switch($this->_customdata['groupmode']) { - case NOGROUPS: - // No groups, do nothing - break; - case SEPARATEGROUPS: - $groups = groups_get_all_groups($COURSE->id, $USER->id); - break; - case VISIBLEGROUPS: - $groups = groups_get_all_groups($COURSE->id); - break; - } - - $group_opt[0] = get_string('all', 'mod_kalvidassign'); - - foreach ($groups as $group_obj) { - $group_opt[$group_obj->id] = $group_obj->name; - } - - } else { - $groups = groups_get_all_groups($COURSE->id); - - $group_opt[0] = get_string('all', 'mod_kalvidassign'); - - foreach ($groups as $group_obj) { - $group_opt[$group_obj->id] = $group_obj->name; - } - - } - - $mform->addElement('select', 'group_filter', get_string('group_filter', 'mod_kalvidassign'), $group_opt); - - $filters = array( - KALASSIGN_ALL => get_string('all', 'kalvidassign'), - KALASSIGN_REQ_GRADING => get_string('reqgrading', 'kalvidassign'), - KALASSIGN_SUBMITTED => get_string('submitted', 'kalvidassign') - ); - - $mform->addElement('select', 'filter', get_string('show'), $filters); - $mform->addHelpButton('filter', 'show', 'kalvidassign'); - - $mform->addElement('text', 'perpage', get_string('pagesize', 'kalvidassign'), array('size' => 3, 'maxlength' => 3)); - $mform->setType('perpage', PARAM_INT); - $mform->addHelpButton('perpage', 'pagesize', 'kalvidassign'); - - $mform->addElement('checkbox', 'quickgrade', get_string('quickgrade', 'kalvidassign')); - $mform->setDefault('quickgrade', ''); - $mform->addHelpButton('quickgrade', 'quickgrade', 'kalvidassign'); - - $savepref = get_string('savepref', 'kalvidassign'); - - $mform->addElement('submit', 'savepref', $savepref); - } - - /** - * This funciton validates te submitted data. - * @param array $data array of ("fieldname"=>value) of submitted data - * @param array $files array of uploaded files "element_name"=>tmp_file_path - * @return array of "element_name"=>"error_description" if there are errors, - * or an empty array if everything is OK (true allowed for backwards compatibility too). - */ - public function validation($data, $files) { - $errors = parent::validation($data, $files); - - if (0 == (int) $data['perpage']) { - $errors['perpage'] = get_string('invalidperpage', 'kalvidassign'); - } - - return $errors; - } -} \ No newline at end of file diff --git a/mod/kalvidassign/grade_submissions.php b/mod/kalvidassign/grade_submissions.php deleted file mode 100644 index 1026bea5238f9..0000000000000 --- a/mod/kalvidassign/grade_submissions.php +++ /dev/null @@ -1,208 +0,0 @@ -. - -/** - * Kaltura grade submission script. - * - * @package mod_kalvidassign - * @author Remote-Learner.net Inc - * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later - * @copyright (C) 2014 Remote Learner.net Inc http://www.remote-learner.net - */ - -require_once(dirname(dirname(dirname(__FILE__))).'/config.php'); -require_once(dirname(__FILE__).'/lib.php'); -require_once(dirname(__FILE__).'/renderer.php'); -require_once(dirname(__FILE__).'/locallib.php'); -require_once(dirname(__FILE__).'/grade_preferences_form.php'); - -$id = required_param('cmid', PARAM_INT); // Course Module ID -$mode = optional_param('mode', 0, PARAM_TEXT); -$tifirst = optional_param('tifirst', '', PARAM_TEXT); -$tilast = optional_param('tilast', '', PARAM_TEXT); -$page = optional_param('page', 0, PARAM_INT); - -$url = new moodle_url('/mod/kalvidassign/grade_submissions.php'); -$url->param('cmid', $id); - -if (!empty($mode)) { - if (!confirm_sesskey()) { - print_error('confirmsesskeybad', 'error'); - } -} - -list($cm, $course, $kalvidassignobj) = kalvidassign_validate_cmid($id); - -require_login($course->id, false, $cm); - -global $PAGE, $OUTPUT, $USER; - -$currentcrumb = get_string('singlesubmissionheader', 'kalvidassign'); -$PAGE->set_url($url); -$PAGE->set_title(format_string($kalvidassignobj->name)); -$PAGE->set_heading($course->fullname); -$PAGE->navbar->add($currentcrumb); - -$renderer = $PAGE->get_renderer('mod_kalvidassign'); -$courseid = $PAGE->context->get_course_context(false); - -echo $OUTPUT->header(); - -require_capability('mod/kalvidassign:gradesubmission', context_module::instance($cm->id)); - -add_to_log($course->id, 'kalvidassign', 'view submissions page', 'grade_submissions.php?cmid='.$cm->id, $kalvidassignobj->id, $cm->id); - -$prefform = new kalvidassign_gradepreferences_form(null, array('cmid' => $cm->id, 'groupmode' => $cm->groupmode)); -$data = null; - -if ($data = $prefform->get_data()) { - set_user_preference('kalvidassign_group_filter', $data->group_filter); - - set_user_preference('kalvidassign_filter', $data->filter); - - if ($data->perpage > 0) { - set_user_preference('kalvidassign_perpage', $data->perpage); - } - - if (isset($data->quickgrade)) { - set_user_preference('kalvidassign_quickgrade', $data->quickgrade); - } else { - set_user_preference('kalvidassign_quickgrade', '0'); - } - -} - -if (empty($data)) { - $data = new stdClass(); -} - -$data->filter = get_user_preferences('kalvidassign_filter', 0); -$data->perpage = get_user_preferences('kalvidassign_perpage', 10); -$data->quickgrade = get_user_preferences('kalvidassign_quickgrade', 0); -$data->group_filter = get_user_preferences('kalvidassign_group_filter', 0); - -$gradedata = data_submitted(); - -// Check if fast grading was passed to the form and process the data -if (!empty($gradedata->mode)) { - - $usersubmission = array(); - $time = time(); - $updated = false; - - foreach ($gradedata->users as $userid => $val) { - - $param = array('vidassignid' => $kalvidassignobj->id, 'userid' => $userid); - - $usersubmissions = $DB->get_record('kalvidassign_submission', $param); - - if ($usersubmissions) { - - if (array_key_exists($userid, $gradedata->menu)) { - - // Update grade - if (($gradedata->menu[$userid] != $usersubmissions->grade)) { - - $usersubmissions->grade = $gradedata->menu[$userid]; - $usersubmissions->timemarked = $time; - $usersubmissions->teacher = $USER->id; - - $updated = true; - } - } - - if (array_key_exists($userid, $gradedata->submissioncomment)) { - - if (0 != strcmp($usersubmissions->submissioncomment, $gradedata->submissioncomment[$userid])) { - $usersubmissions->submissioncomment = $gradedata->submissioncomment[$userid]; - - $updated = true; - - } - } - - // trigger grade event - if ($DB->update_record('kalvidassign_submission', $usersubmissions)) { - - $grade = new stdClass(); - $grade->userid = $userid; - $grade = kalvidassign_get_submission_grade_object($kalvidassignobj->id, $userid); - - $kalvidassignobj->cmidnumber = $cm->idnumber; - - kalvidassign_grade_item_update($kalvidassignobj, $grade); - - // Add to log only if updating. - add_to_log($kalvidassignobj->course, 'kalvidassign', 'update grades', 'grade_submissions.php?cmid='.$cm->id, $cm->id); - - } - - } else { - // No user submission however the instructor has submitted grade data - $usersubmissions = new stdClass(); - $usersubmissions->vidassignid = $cm->instance; - $usersubmissions->userid = $userid; - $usersubmissions->entry_id = ''; - $usersubmissions->teacher = $USER->id; - $usersubmissions->timemarked = $time; - - // Need to prevent completely empty submissions from getting entered - // into the video submissions' table - // Check for unchanged grade value and an empty feedback value - $emptygrade = array_key_exists($userid, $gradedata->menu) && '-1' == $gradedata->menu[$userid]; - - $emptycomment = array_key_exists($userid, $gradedata->submissioncomment) && empty($gradedata->submissioncomment[$userid]); - - if ($emptygrade && $emptycomment ) { - continue; - } - - if (array_key_exists($userid, $gradedata->menu)) { - $usersubmissions->grade = $gradedata->menu[$userid]; - } - - if (array_key_exists($userid, $gradedata->submissioncomment)) { - $usersubmissions->submissioncomment = $gradedata->submissioncomment[$userid]; - } - - // trigger grade event - if ($DB->insert_record('kalvidassign_submission', $usersubmissions)) { - - $grade = new stdClass(); - $grade->userid = $userid; - $grade = kalvidassign_get_submission_grade_object($kalvidassignobj->id, $userid); - - $kalvidassignobj->cmidnumber = $cm->idnumber; - - kalvidassign_grade_item_update($kalvidassignobj, $grade); - - // Add to log only if updating - add_to_log($kalvidassignobj->course, 'kalvidassign', 'update grades', 'grade_submissions.php?cmid='.$cm->id, $cm->id); - - } - - } - - $updated = false; - } -} - -$renderer->display_submissions_table($cm, $data->group_filter, $data->filter, $data->perpage, $data->quickgrade, $tifirst, $tilast, $page); - -$prefform->set_data($data); -$prefform->display(); - -$PAGE->requires->yui_module('moodle-local_kaltura-ltipanel', 'M.local_kaltura.initreviewsubmission'); - -echo $OUTPUT->footer(); \ No newline at end of file diff --git a/mod/kalvidassign/index.php b/mod/kalvidassign/index.php deleted file mode 100644 index 440d715f2e5c4..0000000000000 --- a/mod/kalvidassign/index.php +++ /dev/null @@ -1,48 +0,0 @@ -. - -/** - * Kaltura index script. - * - * @package mod_kalvidassign - * @author Remote-Learner.net Inc - * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later - * @copyright (C) 2014 Remote Learner.net Inc http://www.remote-learner.net - */ - -require_once("../../config.php"); -require_once($CFG->dirroot.'/local/kaltura/locallib.php'); -require_once($CFG->dirroot.'/mod/kalvidassign/locallib.php'); - -$id = required_param('id', PARAM_INT); // Course ID. - -$course = $DB->get_record('course', array('id' => $id), '*', MUST_EXIST); - -require_login($course); - -global $SESSION, $CFG; - -$strplural = get_string("modulenameplural", "mod_kalvidassign"); -$PAGE->set_url('/mod/kalvidassign/index.php', array('id' => $id)); -$PAGE->set_pagelayout('incourse'); -$PAGE->navbar->add($strplural); -$PAGE->set_title($strplural); -$PAGE->set_heading($course->fullname); - -echo $OUTPUT->header(); - -$renderer = $PAGE->get_renderer('mod_kalvidassign'); -$renderer->display_kalvidassignments_table($course); - -echo $OUTPUT->footer(); diff --git a/mod/kalvidassign/lang/en/kalvidassign.php b/mod/kalvidassign/lang/en/kalvidassign.php deleted file mode 100644 index 9b2633fb116ac..0000000000000 --- a/mod/kalvidassign/lang/en/kalvidassign.php +++ /dev/null @@ -1,115 +0,0 @@ -. - -/** - * Kaltura video assignment language file. - * - * @package mod_kalvidassign - * @author Remote-Learner.net Inc - * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later - * @copyright (C) 2014 Remote Learner.net Inc http://www.remote-learner.net - */ - -$string['activity_not_migrated'] = 'This activity has not yet been migrated to use the new Kaltura instance.'; -$string['modulenameplural'] = 'Kaltura Media Assignments'; -$string['modulename'] = 'Kaltura Media Assignment'; -$string['modulename_help'] = 'The Kaltura Media Assignment enables a teacher to create assignments that require students to upload and submit Kaltura videos. Teachers can grade student submissions and provide feedback.'; -$string['name'] = 'Name'; -$string['availabledate'] = 'Available from'; -$string['duedate'] = 'Due Date'; -$string['preventlate'] = 'Prevent late submissions'; -$string['allowdeleting'] = 'Allow resubmitting'; -$string['allowdeleting_help'] = 'If enabled, students may replace submitted videos. Whether it is possible to submit after the due date is controlled by the \'Prevent late submissions\' setting'; -$string['emailteachers'] = 'Email alerts to teachers'; -$string['emailteachers_help'] = 'If enabled, teachers receive email notification whenever students add or update an assignment submission. Only teachers who are able to grade the particular assignment are notified. So, for example, if the course uses separate groups, teachers restricted to particular groups won\'t receive notification about students in other groups.'; -$string['invalidid'] = 'Invalid ID'; -$string['invalid_launch_parameters'] = 'Invalid launch parameters'; -$string['pluginadministration'] = 'Kaltura Media Assignment'; -$string['addvideo'] = 'Add media submission'; -$string['submitvideo'] = 'Submit media'; -$string['replacevideo'] = 'Replace media'; -$string['previewvideo'] = 'Preview'; -$string['gradesubmission'] = 'Grade submissions'; -$string['numberofsubmissions'] = 'Number of submissions: {$a}'; -$string['assignmentexpired'] = 'Submission cancelled. The assignment due date has passed'; -$string['assignmentsubmitted'] = 'Success, your assignment has been submitted'; -$string['emptyentryid'] = 'Video assignment was not submitted correctly. Please try to resubmit.'; -$string['deleteallsubmissions'] = 'Delete all video submissions'; -$string['fullname'] = 'Name'; -$string['grade'] = 'Grade'; -$string['submissioncomment'] = 'Comment'; -$string['timemodified'] = 'Last modified (Submission)'; -$string['grademodified'] = 'Last modified (Grade)'; -$string['finalgrade'] = 'Final grade'; -$string['status'] = 'Status'; -$string['optionalsettings'] = 'Optional settings'; -$string['savepref'] = 'Save preferences'; -$string['all'] = 'All'; -$string['reqgrading'] = 'Require grading'; -$string['submitted'] = 'Submitted'; -$string['pagesize'] = 'Submissions shown per page'; -$string['pagesize_help'] = 'Set the number of assignment to display per page'; -$string['show'] = 'Show'; -$string['show_help'] = "If filter is set to 'All' then all student submissions will be displayed; even if the student didn't submit anything. If set to 'Require grading' only submissions that has not been graded or submissions that were updated by the student after it was graded will be shown. If set to 'Submitted' only students who submitted a video assignment."; -$string['quickgrade'] = 'Allow quick grade'; -$string['quickgrade_help'] = 'If enabled, multiple assignments can be graded on one page. Add grades and comments then click the "Save all my feedback" button to save all changes for that page.'; -$string['invalidperpage'] = 'Enter a number greater than zero'; -$string['savefeedback'] = 'Save feedback'; -$string['submission'] = 'Submission'; -$string['grades'] = 'Grades'; -$string['feedback'] = 'Feedback'; -$string['singlesubmissionheader'] = 'Grade submission'; -$string['singlegrade'] = 'Add help text'; -$string['singlegrade_help'] = 'Add help text'; -$string['late'] = '{$a} late'; -$string['early'] = '{$a} early'; -$string['lastgrade'] = 'Last grade'; -$string['savedchanges'] = 'Changed Saved'; -$string['save'] = 'Save Changes'; -$string['cancel'] = 'Close'; -$string['checkconversionstatus'] = 'Check video conversion status'; -$string['pluginname'] = 'Kaltura Media Assignment'; -$string['video_converting'] = 'The video is still converting. Please check the status of the video at a later time.'; -$string['emailteachermail'] = '{$a->username} has updated their assignment submission -for \'{$a->assignment}\' at {$a->timeupdated} - -It is available here: - - {$a->url}'; -$string['emailteachermailhtml'] = '{$a->username} has updated their assignment submission -for \'{$a->assignment}\' at {$a->timeupdated}

    -It is available on the web site.'; -$string['messageprovider:kalvidassign_updates'] = 'Kaltura Media assignment notifications'; -$string['video_preview_header'] = 'Submission preview'; -$string['kalvidassign:gradesubmission'] = 'Grade video submissions'; -$string['kalvidassign:addinstance'] = 'Add a Kaltura Media Assignment'; -$string['kalvidassign:submit'] = 'Submit videos'; -$string['grade_video_not_cache'] = 'This video may still be in the process of converting...'; -$string['noenrolledstudents'] = 'No students are enrolled in the course'; -$string['group_filter'] = 'Group Filter'; -$string['use_screen_recorder'] = 'Record screen'; -$string['use_kcw'] = 'Upload media or record from webcam'; -$string['scr_loading'] = 'Loading...'; -$string['reviewvideo'] = 'Review submission'; -$string['kalvidassign:screenrecorder'] = 'Screen recorder'; -$string['checkingforjava'] = 'Checking for Java'; -$string['javanotenabled'] = 'Failed to detect Java, please make sure you have the latest version of Java installed and enabled and then try again.'; -$string['cannotdisplaythumbnail'] = 'Unable to display thumbnail'; -$string['noassignments'] = 'No Kaltura video assignments found in the course'; -$string['submitted'] = 'Submitted'; -$string['nosubmission'] = 'No submission'; -$string['nosubmissions'] = 'No submissions'; -$string['viewsubmission'] = 'View submission'; -$string['failedtoinsertsubmission'] = 'Failed to insert submission record.'; -$string['video_thumbnail'] = 'Video thumbnail'; \ No newline at end of file diff --git a/mod/kalvidassign/lib.php b/mod/kalvidassign/lib.php deleted file mode 100644 index b37a7365fd736..0000000000000 --- a/mod/kalvidassign/lib.php +++ /dev/null @@ -1,395 +0,0 @@ -. - -/** - * Kaltura video assignment main library script. - * - * @package mod_kalvidassign - * @author Remote-Learner.net Inc - * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later - * @copyright (C) 2014 Remote Learner.net Inc http://www.remote-learner.net - */ - -if (!defined('MOODLE_INTERNAL')) { - die('Direct access to this script is forbidden.'); -} - -/* Include eventslib.php */ -require_once($CFG->libdir.'/eventslib.php'); -/* Include calendar/lib.php */ -require_once($CFG->dirroot.'/calendar/lib.php'); - -/** - * Given an object containing all the necessary data, - * (defined by the form in mod_form.php) this function - * will create a new instance and return the id number - * of the new instance. - * - * @param object $kalvidassign An object from the form in mod_form.php - * @return int The id of the newly inserted kalvidassign record - */ -function kalvidassign_add_instance($kalvidassign) { - global $DB; - - $kalvidassign->timecreated = time(); - - $kalvidassign->id = $DB->insert_record('kalvidassign', $kalvidassign); - - if ($kalvidassign->timedue) { - $event = new stdClass(); - $event->name = $kalvidassign->name; - $event->description = format_module_intro('kalvidassign', $kalvidassign, $kalvidassign->coursemodule); - $event->courseid = $kalvidassign->course; - $event->groupid = 0; - $event->userid = 0; - $event->modulename = 'kalvidassign'; - $event->instance = $kalvidassign->id; - $event->eventtype = 'due'; - $event->timestart = $kalvidassign->timedue; - $event->timeduration = 0; - - calendar_event::create($event); - } - - kalvidassign_grade_item_update($kalvidassign); - - return $kalvidassign->id; -} - -/** - * Given an object containing all the necessary data, - * (defined by the form in mod_form.php) this function - * will update an existing instance with new data. - * - * @param object $kalvidassign An object from the form in mod_form.php - * @return bool Returns true on success, otherwise false. - */ -function kalvidassign_update_instance($kalvidassign) { - global $DB; - - $kalvidassign->timemodified = time(); - $kalvidassign->id = $kalvidassign->instance; - - $updated = $DB->update_record('kalvidassign', $kalvidassign); - - if ($kalvidassign->timedue) { - $event = new stdClass(); - - if ($event->id = $DB->get_field('event', 'id', array('modulename' => 'kalvidassign', 'instance' => $kalvidassign->id))) { - - $event->name = $kalvidassign->name; - $event->description = format_module_intro('kalvidassign', $kalvidassign, $kalvidassign->coursemodule); - $event->timestart = $kalvidassign->timedue; - - $calendarevent = calendar_event::load($event->id); - $calendarevent->update($event); - } else { - $event = new stdClass(); - $event->name = $kalvidassign->name; - $event->description = format_module_intro('kalvidassign', $kalvidassign, $kalvidassign->coursemodule); - $event->courseid = $kalvidassign->course; - $event->groupid = 0; - $event->userid = 0; - $event->modulename = 'kalvidassign'; - $event->instance = $kalvidassign->id; - $event->eventtype = 'due'; - $event->timestart = $kalvidassign->timedue; - $event->timeduration = 0; - - calendar_event::create($event); - } - } else { - $DB->delete_records('event', array('modulename' => 'kalvidassign', 'instance' => $kalvidassign->id)); - } - - if ($updated) { - kalvidassign_grade_item_update($kalvidassign); - } - - return $updated; -} - -/** - * Given an ID of an instance of this module, - * this function will permanently delete the instance - * and any data that depends on it. - * - * @param int $id Id of the module instance - * @return bool True on success, else false. - */ -function kalvidassign_delete_instance($id) { - global $DB; - - $result = true; - - if (! $kalvidassign = $DB->get_record('kalvidassign', array('id' => $id))) { - return false; - } - - if (! $DB->delete_records('kalvidassign_submission', array('vidassignid' => $kalvidassign->id))) { - $result = false; - } - - if (! $DB->delete_records('event', array('modulename' => 'kalvidassign', 'instance' => $kalvidassign->id))) { - $result = false; - } - - if (! $DB->delete_records('kalvidassign', array('id' => $kalvidassign->id))) { - $result = false; - } - - kalvidassign_grade_item_delete($kalvidassign); - - return $result; -} - -/** - * Return a small object with summary information about what a - * user has done with a given particular instance of this module - * Used for user activity reports. - * $return->time = the time they did it - * $return->info = a short text description - * - * @return object Returns time and info properties. - */ -function kalvidassign_user_outline($course, $user, $mod, $kalvidassign) { - $return = new stdClass; - $return->time = 0; - $return->info = ''; - return $return; -} - - -/** - * Print a detailed representation of what a user has done with - * a given particular instance of this module, for user activity reports. - * - * @return boolean always return true. - */ -function kalvidassign_user_complete($course, $user, $mod, $kalvidassign) { - return true; -} - -/** - * Given a course and a time, this module should find recent activity - * that has occurred in kalvidassign activities and print it out. - * Return true if there was output, or false is there was none. - * - * @return boolean Always returns false. - */ -function kalvidassign_print_recent_activity($course, $viewfullnames, $timestart) { - return false; -} - - -/** - * Must return an array of users who are participants for a given instance - * of kalvidassign. Must include every user involved in the instance, - * independient of his role (student, teacher, admin...). The returned objects - * must contain at least id property. See other modules as example. - * - * @param int $kalvidassign ID of an instance of this module - * @return bool Always returns false. - */ -function kalvidassign_get_participants($kalvidassignid) { - return false; -} - - -/** - * This function returns if a scale is being used by one kalvidassign - * if it has support for grading and scales. Commented code should be - * modified if necessary. See forum, glossary or journal modules - * as reference. - * - * @param int $kalvidassign id ID of an instance of this module - * @return bool Returns false as scales are not supportd by this module. - */ -function kalvidassign_scale_used($kalvidassignid, $scaleid) { - return false; -} - -/** - * Checks if scale is being used by any instance of kalvidassign. - * This function was added in 1.9 - * - * This is used to find out if scale used anywhere - * @param int $scaleid The scale id. - * @return bool True if the scale is used by any kalvidassign - */ -function kalvidassign_scale_used_anywhere($scaleid) { - global $DB; - - $param = array('grade' => -$scaleid); - if ($scaleid and $DB->record_exists('kalvidassign', $param)) { - return true; - } else { - return false; - } -} - -/** - * @param string $feature FEATURE_xx constant for requested feature - * @return mixed True if module supports feature, null if doesn't know - */ -function kalvidassign_supports($feature) { - switch($feature) { - case FEATURE_GROUPS: - return true; - break; - case FEATURE_GROUPINGS: - return true; - break; - case FEATURE_GROUPMEMBERSONLY: - return true; - break; - case FEATURE_MOD_INTRO: - return true; - break; - case FEATURE_COMPLETION_TRACKS_VIEWS: - return true; - break; - case FEATURE_GRADE_HAS_GRADE: - return true; - break; - case FEATURE_GRADE_OUTCOMES: - return true; - break; - case FEATURE_BACKUP_MOODLE2: - return true; - break; - default: - return null; - break; - } -} - -/** - * Create/update grade item for given kaltura video assignment - * - * @global object - * @param object kalvidassign object with extra cmidnumber - * @param mixed optional array/object of grade(s); 'reset' means reset grades in gradebook - * @return int, 0 if ok, error code otherwise - */ -function kalvidassign_grade_item_update($kalvidassign, $grades = null) { - require_once(dirname(dirname(dirname(__FILE__))).'/lib/gradelib.php'); - - $params = array('itemname' => $kalvidassign->name, 'idnumber' => $kalvidassign->cmidnumber); - - if ($kalvidassign->grade > 0) { - $params['gradetype'] = GRADE_TYPE_VALUE; - $params['grademax'] = $kalvidassign->grade; - $params['grademin'] = 0; - - } else if ($kalvidassign->grade < 0) { - $params['gradetype'] = GRADE_TYPE_SCALE; - $params['scaleid'] = -$kalvidassign->grade; - - } else { - $params['gradetype'] = GRADE_TYPE_TEXT; - } - - if ($grades === 'reset') { - $params['reset'] = true; - $grades = null; - } - - return grade_update('mod/kalvidassign', $kalvidassign->course, 'mod', 'kalvidassign', $kalvidassign->id, 0, $grades, $params); -} - -/** - * Removes all grades from gradebook - * - * @global object - * @param int $courseid - * @param string optional type - */ -function kalvidassign_reset_gradebook($courseid, $type = '') { - global $DB; - - $sql = "SELECT l.*, cm.idnumber as cmidnumber, l.course as courseid - FROM {kalvidassign} l, {course_modules} cm, {modules} m - WHERE m.name = 'kalvidassign' AND m.id = cm.module AND cm.instance = l.id AND l.course = :course"; - - $params = array ('course' => $courseid); - - if ($kalvisassigns = $DB->get_records_sql($sql, $params)) { - - foreach ($kalvisassigns as $kalvisassign) { - kalvidassign_grade_item_update($kalvisassign, 'reset'); - } - } -} - -/** - * Actual implementation of the reset course functionality, delete all the - * kaltura video submissions attempts for course $data->courseid. - * - * @global stdClass - * @global object - * @param object $data the data submitted from the reset course. - * @return array status array - */ -function kalvidassign_reset_userdata($data) { - global $DB; - - $componentstr = get_string('modulenameplural', 'kalvidassign'); - $status = array(); - - if (!empty($data->reset_kalvidassign)) { - $kalvidassignsql = "SELECT l.id - FROM {kalvidassign} l - WHERE l.course=:course"; - - $params = array ("course" => $data->courseid); - $DB->delete_records_select('kalvidassign_submission', "vidassignid IN ($kalvidassignsql)", $params); - - // remove all grades from gradebook - if (empty($data->reset_gradebook_grades)) { - kalvidassign_reset_gradebook($data->courseid); - } - - $status[] = array('component' => $componentstr, 'item' => get_string('deleteallsubmissions', 'kalvidassign'), 'error' => false); - } - - // updating dates - shift may be negative too - if ($data->timeshift) { - shift_course_mod_dates('kalvidassign', array('timedue', 'timeavailable'), $data->timeshift, $data->courseid); - $status[] = array('component' => $componentstr, 'item' => get_string('datechanged'), 'error' => false); - } - - return $status; -} - -/** - * This functions deletes a grade item. - * @param object $kalvidassign a Kaltura video assignment data object. - * @return int Returns GRADE_UPDATE_OK, GRADE_UPDATE_FAILED, GRADE_UPDATE_MULTIPLE or GRADE_UPDATE_ITEM_LOCKED. - */ -function kalvidassign_grade_item_delete($kalvidassign) { - global $CFG; - require_once($CFG->libdir.'/gradelib.php'); - return grade_update('mod/kalvidassign', $kalvidassign->course, 'mod', 'kalvidassign', $kalvidassign->id, 0, null, array('deleted' => 1)); -} - -/** - * Function to be run periodically according to the moodle cron - * - * Finds all assignment notifications that have yet to be mailed out, and mails them. - * @return bool Returns false as the this module doesn't support cron jobs - */ -function kalvidassign_cron () { - return false; -} \ No newline at end of file diff --git a/mod/kalvidassign/locallib.php b/mod/kalvidassign/locallib.php deleted file mode 100644 index b003b070e1259..0000000000000 --- a/mod/kalvidassign/locallib.php +++ /dev/null @@ -1,356 +0,0 @@ -. - -/** - * Kaltura video assignment locallib script. - * - * @package mod_kalvidassign - * @author Remote-Learner.net Inc - * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later - * @copyright (C) 2014 Remote Learner.net Inc http://www.remote-learner.net - */ - -/** - * This function returns true if the assignment submission period is over - * - * @param kalvidassign obj - * - * @return bool - true if assignment submission period is over else false - */ - -define('KALASSIGN_ALL', 0); -define('KALASSIGN_REQ_GRADING', 1); -define('KALASSIGN_SUBMITTED', 2); - -require_once(dirname(dirname(dirname(__FILE__))).'/lib/gradelib.php'); -require_once($CFG->dirroot.'/mod/kalvidassign/renderable.php'); -require_once(dirname(dirname(dirname(__FILE__))).'/local/kaltura/locallib.php'); - -/** - * Check if the assignment submission end date has passed or if late submissions - * are prohibited - * - * @param object - Kaltura instance video assignment object - * @return bool - true if expired, otherwise false - */ -function kalvidassign_assignemnt_submission_expired($kalvidassign) { - $expired = false; - - if ($kalvidassign->preventlate) { - $expired = (0 != $kalvidassign->timedue) && (time() > $kalvidassign->timedue); - } - - return $expired; -} - -/** - * Retrieve a list of users who have submitted assignments - * - * @param int $kalvidassignid The assignment id. - * @param string $filter Filter results by assignments that have been submitted or - * assignment that need to be graded or no filter at all. - * @return mixed collection of users or false. - */ -function kalvidassign_get_submissions($kalvidassignid, $filter = '') { - global $DB; - - $where = ''; - switch ($filter) { - case KALASSIGN_SUBMITTED: - $where = ' timemodified > 0 AND '; - break; - case KALASSIGN_REQ_GRADING: - $where = ' timemarked < timemodified AND '; - break; - } - - $param = array('instanceid' => $kalvidassignid); - $where .= ' vidassignid = :instanceid'; - - // Reordering the fields returned to make it easier to use in the grade_get_grades function. - $columns = 'userid,vidassignid,entry_id,grade,submissioncomment,format,teacher,mailed,timemarked,timecreated,timemodified,source,width,height'; - $records = $DB->get_records_select('kalvidassign_submission', $where, $param, 'timemodified DESC', $columns); - - if (empty($records)) { - return false; - } - - return $records; -} - -/** - * This function retrives the user's submission record. - * @param int $kalvidassignid The activity instance id. - * @param int $userid The user id. - * @return object A data object consisting of the user's submission. - */ -function kalvidassign_get_submission($kalvidassignid, $userid) { - global $DB; - - $param = array('instanceid' => $kalvidassignid, 'userid' => $userid); - $where = ''; - $where .= ' vidassignid = :instanceid AND userid = :userid'; - - // Reordering the fields returned to make it easier to use in the grade_get_grades function. - $columns = 'userid,id,vidassignid,entry_id,grade,submissioncomment,format,teacher,mailed,timemarked,timecreated,timemodified,source,width,height'; - $record = $DB->get_record_select('kalvidassign_submission', $where, $param, '*'); - - if (empty($record)) { - return false; - } - - return $record; - -} - -/** - * This function retrieves the submission grade object. - * @param int $instanceid The activity instance id. - * @param int $userid The user id. - * @return object A data object consisting of the user's submission. - */ -function kalvidassign_get_submission_grade_object($instanceid, $userid) { - global $DB; - - $param = array('kvid' => $instanceid, 'userid' => $userid); - - $sql = "SELECT u.id, u.id AS userid, s.grade AS rawgrade, s.submissioncomment AS feedback, s.format AS feedbackformat, - s.teacher AS usermodified, s.timemarked AS dategraded, s.timemodified AS datesubmitted - FROM {user} u, {kalvidassign_submission} s - WHERE u.id = s.userid AND s.vidassignid = :kvid - AND u.id = :userid"; - - $data = $DB->get_record_sql($sql, $param); - - if (-1 == $data->rawgrade) { - $data->rawgrade = null; - } - - return $data; -} - -/** - * This function validates the course module id and returns the course module object, course object and activity instance object. - * @return array an array with the following values array(course module object, $course object, activity instance object). - */ -function kalvidassign_validate_cmid ($cmid) { - global $DB; - - if (!$cm = get_coursemodule_from_id('kalvidassign', $cmid)) { - print_error('invalidcoursemodule'); - } - - if (!$course = $DB->get_record('course', array('id' => $cm->course))) { - print_error('coursemisconf'); - } - - if (!$kalvidassignobj = $DB->get_record('kalvidassign', array('id' => $cm->instance))) { - print_error('invalidid', 'kalvidassign'); - } - - return array($cm, $course, $kalvidassignobj); -} - -/** - * This function returns HTML markup to signify a submission was late. - * @return string HTML markup - */ -function kalvidassign_display_lateness($timesubmitted, $timedue) { - if (!$timedue) { - return ''; - } - $time = $timedue - $timesubmitted; - if ($time < 0) { - $timetext = get_string('late', 'kalvidassign', format_time($time)); - return ' ('.$timetext.')'; - } else { - $timetext = get_string('early', 'kalvidassign', format_time($time)); - return ' ('.$timetext.')'; - } -} - -/** - * Alerts teachers by email of new or changed assignments that need grading - * - * First checks whether the option to email teachers is set for this assignment. - * Sends an email to ALL teachers in the course (or in the group if using separate groups). - * Uses the methods kalvidassign_email_teachers_text() and kalvidassign_email_teachers_html() to construct the content. - * - * @global object - * @global object - * @param object $cm Kaltura video assignment course module object. - * @param string $name Name of the video assignment instance. - * @param object $submission The submission that has changed. - * @param object $context The context object. - * @return void - */ -function kalvidassign_email_teachers($cm, $name, $submission, $context) { - global $CFG, $DB; - - $user = $DB->get_record('user', array('id'=>$submission->userid)); - - if ($teachers = kalvidassign_get_graders($cm, $user, $context)) { - - $strassignments = get_string('modulenameplural', 'kalvidassign'); - $strassignment = get_string('modulename', 'kalvidassign'); - $strsubmitted = get_string('submitted', 'kalvidassign'); - - foreach ($teachers as $teacher) { - $info = new stdClass(); - $info->username = fullname($user, true); - $info->assignment = format_string($name, true); - $info->url = $CFG->wwwroot.'/mod/kalvidassign/grade_submissions.php?cmid='.$cm->id; - $info->timeupdated = strftime('%c', $submission->timemodified); - $info->courseid = $cm->course; - $info->cmid = $cm->id; - - $postsubject = $strsubmitted.': '.$user->username.' -> '.$name; - $posttext = kalvidassign_email_teachers_text($info); - $posthtml = ($teacher->mailformat == 1) ? kalvidassign_email_teachers_html($info) : ''; - - $eventdata = new stdClass(); - $eventdata->modulename = 'kalvidassign'; - $eventdata->userfrom = $user; - $eventdata->userto = $teacher; - $eventdata->subject = $postsubject; - $eventdata->fullmessage = $posttext; - $eventdata->fullmessageformat = FORMAT_PLAIN; - $eventdata->fullmessagehtml = $posthtml; - $eventdata->smallmessage = $postsubject; - - $eventdata->name = 'kalvidassign_updates'; - $eventdata->component = 'mod_kalvidassign'; - $eventdata->notification = 1; - $eventdata->contexturl = $info->url; - $eventdata->contexturlname = $info->assignment; - - message_send($eventdata); - } - } -} - -/** - * Returns a list of teachers that should be grading given submission. - * - * @param object $cm Kaltura video assignment course module object. - * @param object $user The Moodle user object. - * @param object $context A context object. - * @return array An array of grading userids - */ -function kalvidassign_get_graders($cm, $user, $context) { - // Potential graders. - $potgraders = get_users_by_capability($context, 'mod/kalvidassign:gradesubmission', '', '', '', '', '', '', false, false); - - $graders = array(); - // Separate groups are being used. - if (groups_get_activity_groupmode($cm) == SEPARATEGROUPS) { - // Try to find all groups. - if ($groups = groups_get_all_groups($cm->course, $user->id)) { - foreach ($groups as $group) { - foreach ($potgraders as $t) { - if ($t->id == $user->id) { - continue; // do not send self - } - if (groups_is_member($group->id, $t->id)) { - $graders[$t->id] = $t; - } - } - } - } else { - // user not in group, try to find graders without group - foreach ($potgraders as $t) { - if ($t->id == $user->id) { - // do not send self. - continue; - } - // ugly hack. - if (!groups_get_all_groups($cm->course, $t->id)) { - $graders[$t->id] = $t; - } - } - } - } else { - foreach ($potgraders as $t) { - if ($t->id == $user->id) { - // do not send self. - continue; - } - $graders[$t->id] = $t; - } - } - return $graders; -} - -/** - * Creates the text content for emails to teachers - * - * @param $info object The info used by the 'emailteachermail' language string - * @return string - */ -function kalvidassign_email_teachers_text($info) { - global $DB; - - $param = array('id' => $info->courseid); - $course = $DB->get_record('course', $param); - $posttext = ''; - - if (!empty($course)) { - $posttext = format_string($course->shortname, true, $course->id).' -> '.get_string('modulenameplural', 'kalvidassign').' -> '; - $posttext .= format_string($info->assignment, true, $course->id)."\n"; - $posttext .= '---------------------------------------------------------------------'."\n"; - $posttext .= get_string("emailteachermail", "kalvidassign", $info)."\n"; - $posttext .= "\n---------------------------------------------------------------------\n"; - } - - return $posttext; -} - -/** - * Creates the html content for emails to teachers - * - * @param object $info The info used by the 'emailteachermailhtml' language string - * @return string - */ -function kalvidassign_email_teachers_html($info) { - global $CFG, $DB; - - $param = array('id' => $info->courseid); - $course = $DB->get_record('course', $param); - $posthtml = ''; - - if (!empty($course)) { - $posthtml .= html_writer::start_tag('p'); - $attr = array('href' => new moodle_url('/course/view.php', array('id' => $course->id))); - $posthtml .= html_writer::tag('a', format_string($course->shortname, true, $course->id), $attr); - $posthtml .= '->'; - $attr = array('href' => new moodle_url('/mod/kalvidassign/view.php', array('id' => $info->cmid))); - $posthtml .= html_writer::tag('a', format_string($info->assignment, true, $course->id), $attr); - $posthtml .= html_writer::end_tag('p'); - $posthtml .= html_writer::start_tag('hr'); - $posthtml .= html_writer::tag('p', get_string('emailteachermailhtml', 'kalvidassign', $info)); - $posthtml .= html_writer::end_tag('hr'); - } - return $posthtml; -} - -/** - * This function retrieves a list of enrolled users with the capability to submit to the activity. - * @return array An array of user objects. - */ -function kalvidassign_get_assignment_students($cm) { - $context = context_module::instance($cm->id); - $users = get_enrolled_users($context, 'mod/kalvidassign:submit', 0, 'u.id'); - - return $users; -} \ No newline at end of file diff --git a/mod/kalvidassign/lti_launch.php b/mod/kalvidassign/lti_launch.php deleted file mode 100644 index d312fbbd2a617..0000000000000 --- a/mod/kalvidassign/lti_launch.php +++ /dev/null @@ -1,67 +0,0 @@ -. - -/** - * Kaltura video assignment LTI launch script. - * - * @package mod_kalvidassign - * @author Remote-Learner.net Inc - * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later - * @copyright (C) 2014 Remote Learner.net Inc http://www.remote-learner.net - */ - -require_once(dirname(dirname(dirname(__FILE__))).'/config.php'); -require_once(dirname(dirname(dirname(__FILE__))).'/local/kaltura/locallib.php'); - -global $USER; - -require_login(); -$courseid = required_param('courseid', PARAM_INT); -$cmid = required_param('cmid', PARAM_INT); -$height = required_param('height', PARAM_INT); -$width = required_param('width', PARAM_INT); -$withblocks = optional_param('withblocks', 0, PARAM_INT); -$source = optional_param('source', '', PARAM_URL); - -$context = context_course::instance($courseid); -require_capability('mod/kalvidassign:submit', $context); -$course = get_course($courseid); - -$launch = array(); -$launch['id'] = 1; -$launch['cmid'] = $cmid; -$launch['title'] = 'Kaltura video assignment'; -$launch['module'] = KAF_BROWSE_EMBED_MODULE; -$launch['course'] = $course; -$launch['width'] = $width; -$launch['height'] = $height; -$launch['custom_publishdata'] = ''; - -$source = $source = local_kaltura_add_kaf_uri_token($source); - -if (false === local_kaltura_url_contains_configured_hostname($source) && !empty($source)) { - echo get_string('invalid_source_parameter', 'mod_kalvidres'); - die; -} else { - $launch['source'] = urldecode($source); -} - -if (local_kaltura_validate_browseembed_required_params($launch)) { - $content = local_kaltura_request_lti_launch($launch, $withblocks); - echo $content; -} else { - echo get_string('invalid_launch_parameters', 'mod_kalvidassign'); -} \ No newline at end of file diff --git a/mod/kalvidassign/mod_form.php b/mod/kalvidassign/mod_form.php deleted file mode 100644 index fd767cc1b1764..0000000000000 --- a/mod/kalvidassign/mod_form.php +++ /dev/null @@ -1,78 +0,0 @@ -. - -/** - * Kaltura video assignment mod_form script. - * - * @package mod_kalvidassign - * @author Remote-Learner.net Inc - * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later - * @copyright (C) 2014 Remote Learner.net Inc http://www.remote-learner.net - */ - -if (!defined('MOODLE_INTERNAL')) { - die('Direct access to this script is forbidden.'); -} - -require_once(dirname(dirname(dirname(__FILE__))).'/course/moodleform_mod.php'); - -class mod_kalvidassign_mod_form extends moodleform_mod { - /** - * Definition function for the form. - */ - public function definition() { - global $CFG, $COURSE; - - $mform =& $this->_form; - - $mform->addElement('hidden', 'course', $COURSE->id); - - $mform->addElement('header', 'general', get_string('general', 'form')); - - $mform->addElement('text', 'name', get_string('name', 'kalvidassign'), array('size' => '64')); - - if (!empty($CFG->formatstringstriptags)) { - $mform->setType('name', PARAM_TEXT); - } else { - $mform->setType('name', PARAM_CLEANHTML); - } - $mform->addRule('name', null, 'required', null, 'client'); - - $this->add_intro_editor(false); - - $mform->addElement('date_time_selector', 'timeavailable', get_string('availabledate', 'kalvidassign'), array('optional' => true)); - $mform->setDefault('timeavailable', time()); - $mform->addElement('date_time_selector', 'timedue', get_string('duedate', 'kalvidassign'), array('optional' => true)); - $mform->setDefault('timedue', time()+7*24*3600); - - $ynoptions = array( 0 => get_string('no'), 1 => get_string('yes')); - - $mform->addElement('select', 'preventlate', get_string('preventlate', 'kalvidassign'), $ynoptions); - $mform->setDefault('preventlate', 0); - - $mform->addElement('select', 'resubmit', get_string('allowdeleting', 'kalvidassign'), $ynoptions); - $mform->addHelpButton('resubmit', 'allowdeleting', 'kalvidassign'); - $mform->setDefault('resubmit', 0); - - $mform->addElement('select', 'emailteachers', get_string('emailteachers', 'kalvidassign'), $ynoptions); - $mform->addHelpButton('emailteachers', 'emailteachers', 'kalvidassign'); - $mform->setDefault('emailteachers', 0); - - $this->standard_grading_coursemodule_elements(); - - $this->standard_coursemodule_elements(); - - $this->add_action_buttons(); - } -} \ No newline at end of file diff --git a/mod/kalvidassign/pix/icon.gif b/mod/kalvidassign/pix/icon.gif deleted file mode 100644 index 550df5db8c43d778c40a1290f1d3a724d0e88133..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 128 zcmZ?wbhEHb6krfwSoEKPf#I&Pahh>jn(@rE0|yTL|Np+Z^fq{iV2gnAh z6kuRrcJ. - -/** - * Kaltura video assignment renderable script. - * - * @package mod_kalvidassign - * @author Remote-Learner.net Inc - * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later - * @copyright (C) 2014 Remote Learner.net Inc http://www.remote-learner.net - */ - -defined('MOODLE_INTERNAL') || die(); - -/** - * Renderable course index summary - */ -class kalvidassign_course_index_summary implements renderable { - /** @var array assignments A list of course module info and submission counts or statuses */ - public $assignments = array(); - /** @var boolean usesections Does this course format support sections? */ - public $usesections = false; - /** @var string courseformat The current course format name */ - public $courseformatname = ''; - - /** - * constructor - * - * @param $usesections boolean True if this course format uses sections - * @param $courseformatname string The id of this course format - */ - public function __construct($usesections, $courseformatname) { - $this->usesections = $usesections; - $this->courseformatname = $courseformatname; - } - - /** - * Add a row of data to display on the course index page - * - * @param int $cmid The course module id for generating a link - * @param string $cmname The course module name for generating a link - * @param string $sectionname The name of the course section (only if $usesections is true) - * @param int $timedue The due date for the assignment - may be 0 if no duedate - * @param string $submissioninfo A string with either the number of submitted assignments, or the - * status of the current users submission depending on capabilities. - * @param string $gradeinfo The current users grade if they have been graded and it is not hidden. - */ - public function add_assign_info($cmid, $cmname, $sectionname, $timedue, $submissioninfo, $gradeinfo) { - $this->assignments[] = array( - 'cmid' => $cmid, - 'cmname' => $cmname, - 'sectionname' => $sectionname, - 'timedue' => $timedue, - 'submissioninfo' => $submissioninfo, - 'gradeinfo' => $gradeinfo - ); - } -} diff --git a/mod/kalvidassign/renderer.php b/mod/kalvidassign/renderer.php deleted file mode 100644 index 61d7a5812188b..0000000000000 --- a/mod/kalvidassign/renderer.php +++ /dev/null @@ -1,1124 +0,0 @@ -. - -/** - * Kaltura video assignment renderer script. - * - * @package mod_kalvidassign - * @author Remote-Learner.net Inc - * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later - * @copyright (C) 2014 Remote Learner.net Inc http://www.remote-learner.net - */ - -if (!defined('MOODLE_INTERNAL')) { - die('Direct access to this script is forbidden.'); -} - -require_once(dirname(dirname(dirname(__FILE__))).'/lib/tablelib.php'); -require_once(dirname(dirname(dirname(__FILE__))).'/lib/moodlelib.php'); -require_once(dirname(dirname(dirname(__FILE__))).'/local/kaltura/locallib.php'); - -/** - * Table class for displaying video submissions for grading - */ -class submissions_table extends table_sql { - /* @var bool Set to true if a quick grade form needs to be rendered. */ - public $quickgrade; - /* @var object An object returned from @see grade_get_grades(). */ - public $gradinginfo; - /* @var int The course module instnace id. */ - public $cminstance; - /* @var int The maximum grade point set for the activity instance. */ - public $grademax; - /* @var int The number of columns of the quick grade textarea element. */ - public $cols = 20; - /* @var int The number of rows of the quick grade textarea element. */ - public $rows = 4; - /* @var string The first initial of the first name filter. */ - public $tifirst; - /* @var string The first initial of the last name filter. */ - public $tilast; - /* @var int The current page number. */ - public $page; - - /** - * Constructor function for the submissions table class. - * @param int $uniqueid Unique id. - * @param int $cm Course module id. - * @param object $gradinginfo An object returned from @see grade_get_grades(). - * @param bool $quickgrade Set to true if a quick grade form needs to be rendered. - * @param string $tifirst The first initial of the first name filter. - * @param string $tilast The first initial of the first name filter. - * @param int $page The current page number. - */ - public function __construct($uniqueid, $cm, $gradinginfo, $quickgrade = false, $tifirst = '', $tilast = '', $page = 0) { - global $DB; - - parent::__construct($uniqueid); - - $this->quickgrade = $quickgrade; - $this->gradinginfo = $gradinginfo; - - $instance = $DB->get_record('kalvidassign', array('id' => $cm->instance), 'id,grade'); - - $instance->cmid = $cm->id; - - $this->cminstance = $instance; - - $this->grademax = $this->gradinginfo->items[0]->grademax; - - $this->tifirst = $tifirst; - $this->tilast = $tilast; - $this->page = $page; - } - - /** - * The function renders the picture column. - * @param object $data information about the current row being rendered. - * @return string HTML markup. - */ - public function col_picture($data) { - global $OUTPUT; - - $user = new stdClass(); - $user->id = $data->id; - $user->picture = $data->picture; - $user->imagealt = $data->imagealt; - $user->firstname = $data->firstname; - $user->lastname = $data->lastname; - $user->email = $data->email; - - $output = $OUTPUT->user_picture($user); - - $attr = array('type' => 'hidden', 'name' => 'users['.$data->id.']', 'value' => $data->id); - $output .= html_writer::empty_tag('input', $attr); - - return $output; - } - - /** - * The function renders the select grade column. - * @param object $data information about the current row being rendered. - * @return string HTML markup. - */ - public function col_selectgrade($data) { - global $CFG; - - $output = ''; - $finalgrade = false; - - if (array_key_exists($data->id, $this->gradinginfo->items[0]->grades)) { - - $finalgrade = $this->gradinginfo->items[0]->grades[$data->id]; - - if ($CFG->enableoutcomes) { - - $finalgrade->formatted_grade = $this->gradinginfo->items[0]->grades[$data->id]->str_grade; - } else { - - // Equation taken from mod/assignment/lib.php display_submissions() - $finalgrade->formatted_grade = round($finalgrade->grade, 2).' / '.round($this->grademax, 2); - } - } - - if (!is_bool($finalgrade) && ($finalgrade->locked || $finalgrade->overridden) ) { - - $locked_overridden = 'locked'; - - if ($finalgrade->overridden) { - $locked_overridden = 'overridden'; - } - $attr = array('id' => 'g'.$data->id, 'class' => $locked_overridden); - - $output = html_writer::tag('div', $finalgrade->formatted_grade, $attr); - - } else if (!empty($this->quickgrade)) { - - $attributes = array(); - - $grades_menu = make_grades_menu($this->cminstance->grade); - - $default = array(-1 => get_string('nograde')); - - $grade = null; - - if (!empty($data->timemarked)) { - $grade = $data->grade; - } - - $output = html_writer::select($grades_menu, 'menu['.$data->id.']', $grade, $default, $attributes); - - } else { - - $output = get_string('nograde'); - - if (!empty($data->timemarked)) { - $output = $this->display_grade($data->grade); - } - } - - return $output; - } - - /** - * The function renders the submissions comment column. - * @param object $data information about the current row being rendered. - * @return string HTML markup. - */ - public function col_submissioncomment($data) { - global $OUTPUT; - - $output = ''; - $finalgrade = false; - - if (array_key_exists($data->id, $this->gradinginfo->items[0]->grades)) { - $finalgrade = $this->gradinginfo->items[0]->grades[$data->id]; - } - - if ( (!is_bool($finalgrade) && ($finalgrade->locked || $finalgrade->overridden)) ) { - - $output = shorten_text(strip_tags($data->submissioncomment), 15); - - } else if (!empty($this->quickgrade)) { - - $param = array( - 'id' => 'comments_'.$data->submitid, - 'rows' => $this->rows, - 'cols' => $this->cols, - 'name' => 'submissioncomment['.$data->id.']'); - - $output .= html_writer::start_tag('textarea', $param); - $output .= $data->submissioncomment; - $output .= html_writer::end_tag('textarea'); - - } else { - $output = shorten_text(strip_tags($data->submissioncomment), 15); - } - - return $output; - } - - /** - * The function renders the grade marked column. - * @param object $data information about the current row being rendered. - * @return string HTML markup. - */ - public function col_grademarked($data) { - - $output = ''; - - if (!empty($data->timemarked)) { - $output = userdate($data->timemarked); - } - - return $output; - } - - /** - * The function renders the time modified column. - * @param object $data information about the current row being rendered. - * @return string HTML markup. - */ - public function col_timemodified($data) { - - $data->source = local_kaltura_add_kaf_uri_token($data->source); - $attr = array('name' => 'media_submission'); - $output = html_writer::start_tag('div', $attr); - - $attr = array('id' => 'ts'.$data->id); - - $date_modified = $data->timemodified; - $date_modified = is_null($date_modified) || empty($data->timemodified) ? '' : userdate($date_modified); - - $output .= html_writer::tag('div', $date_modified, $attr); - - $output .= html_writer::empty_tag('br'); - - // If the metadata property is empty only display an anchor tag. Otherwise display a thumbnail image. - if (!empty($data->entry_id)) { - - // Decode the additional video metadata. - $metadata = local_kaltura_decode_object_for_storage($data->metadata); - - // Check if the metadata thumbnailurl property is empty. If not then display the thumbnail. Otherwise display a text link. - if (!empty($metadata->thumbnailurl) && !is_null($metadata->thumbnailurl)) { - - $output .= html_writer::start_tag('center'); - $metadata = local_kaltura_decode_object_for_storage($data->metadata); - - $attr = array('src' => $metadata->thumbnailurl, 'class' => 'kalsubthumb'); - $thumbnail = html_writer::empty_tag('img', $attr); - - $attr = array('name' => 'submission_source', 'href' => local_kaltura_add_kaf_uri_token($data->source), 'class' => 'kalsubthumbanchor'); - $output .= html_writer::tag('a', $thumbnail, $attr); - $output .= html_writer::end_tag('center'); - - } else { - - $output .= html_writer::start_tag('center'); - $attr = array('name' => 'submission_source', 'href' => local_kaltura_add_kaf_uri_token($data->source), 'class' => 'kalsubanchor'); - $output .= html_writer::tag('a', get_string('viewsubmission', 'kalvidassign'), $attr); - $output .= html_writer::end_tag('center'); - } - } - - // Display hidden elements. - if (!empty($data->entry_id)) { - $attr = array('type' => 'hidden', 'name' => 'width', 'value' => $data->width); - $output .= html_writer::empty_tag('input', $attr); - - $attr = array('type' => 'hidden', 'name' => 'height', 'value' => $data->height); - $output .= html_writer::empty_tag('input', $attr); - } - - $output .= html_writer::end_tag('div'); - return $output; - } - - /** - * The function renders the grade column. - * @param object $data information about the current row being rendered. - * @return string HTML markup. - */ - public function col_grade($data) { - $finalgrade = false; - - if (array_key_exists($data->id, $this->gradinginfo->items[0]->grades)) { - $finalgrade = $this->gradinginfo->items[0]->grades[$data->id]; - } - - $finalgrade = (!is_bool($finalgrade)) ? $finalgrade->str_grade : '-'; - - $attr = array('id' => 'finalgrade_'.$data->id); - $output = html_writer::tag('span', $finalgrade, $attr); - - return $output; - } - - /** - * The function renders the time marked column. - * @param object $data information about the current row being rendered. - * @return string HTML markup. - */ - public function col_timemarked($data) { - $output = '-'; - - if (0 < $data->timemarked) { - - $attr = array('id' => 'tt'.$data->id); - $output = html_writer::tag('div', userdate($data->timemarked), $attr); - - } else { - $otuput = '-'; - } - - return $output; - } - - /** - * The function renders the submission status column. - * @param object $data information about the current row being rendered. - * @return string HTML markup. - */ - public function col_status($data) { - global $OUTPUT, $CFG; - - require_once(dirname(dirname(dirname(__FILE__))).'/lib/weblib.php'); - - $url = new moodle_url('/mod/kalvidassign/single_submission.php', array('cmid' => $this->cminstance->cmid, 'userid' => $data->id, 'sesskey' => sesskey())); - - if (!empty($this->tifirst)) { - $url->param('tifirst', $this->tifirst); - } - - if (!empty($this->tilast)) { - $url->param('tilast', $this->tilast); - } - - if (!empty($this->page)) { - $url->param('page', $this->page); - } - - $buttontext = ''; - if ($data->timemarked > 0) { - $class = 's1'; - $buttontext = get_string('update'); - } else { - $class = 's0'; - $buttontext = get_string('grade'); - } - - $attr = array('id' => 'up'.$data->id, - 'class' => $class); - - $output = html_writer::link($url, $buttontext, $attr); - - return $output; - } - - /** - * Return a grade in user-friendly form, whether it's a scale or not - * - * @global object - * @param mixed $grade - * @return string User-friendly representation of grade - * - * TODO: Move this to locallib.php - */ - public function display_grade($grade) { - global $DB; - - // Cache scales for each assignment - they might have different scales!! - static $kalscalegrades = array(); - - // Normal number - if ($this->cminstance->grade >= 0) { - if ($grade == -1) { - return '-'; - } else { - return $grade.' / '.$this->cminstance->grade; - } - - } else { - // Scale - if (empty($kalscalegrades[$this->cminstance->id])) { - - if ($scale = $DB->get_record('scale', array('id'=>-($this->cminstance->grade)))) { - - $kalscalegrades[$this->cminstance->id] = make_menu_from_list($scale->scale); - } else { - - return '-'; - } - } - - if (isset($kalscalegrades[$this->cminstance->id][$grade])) { - return $kalscalegrades[$this->cminstance->id][$grade]; - } - return '-'; - } - } -} - -/** - * This class renders the submission pages. - */ -class mod_kalvidassign_renderer extends plugin_renderer_base { - /** - * The function displays information about the assignment settings. - * @param object $data information about the current row being rendered. - * @return string HTML markup. - */ - public function display_mod_info($kalvideoobj, $context) { - global $DB; - $html = ''; - - if (!empty($kalvideoobj->timeavailable)) { - $html .= html_writer::start_tag('p'); - $html .= html_writer::tag('b', get_string('availabledate', 'kalvidassign').': '); - $html .= userdate($kalvideoobj->timeavailable); - $html .= html_writer::end_tag('p'); - } - - if (!empty($kalvideoobj->timedue)) { - $html .= html_writer::start_tag('p'); - $html .= html_writer::tag('b', get_string('duedate', 'kalvidassign').': '); - $html .= userdate($kalvideoobj->timedue); - $html .= html_writer::end_tag('p'); - } - - // Display a count of the numuber of submissions - if (has_capability('mod/kalvidassign:gradesubmission', $context)) { - - $param = array('vidassignid' => $kalvideoobj->id, 'timecreated' => 0, 'timemodified' => 0); - - $csql = "SELECT COUNT(*) - FROM {kalvidassign_submission} - WHERE vidassignid = :vidassignid - AND (timecreated > :timecreated OR timemodified > :timemodified) "; - - $count = $DB->count_records_sql($csql, $param); - - if ($count) { - $html .= html_writer::start_tag('p'); - $html .= get_string('numberofsubmissions', 'kalvidassign', $count); - $html .= html_writer::end_tag('p'); - } - - } - - return $html; - } - - /** - * This function returns HTML markup to render a form and submission buttons. - * @param object $cm A course module object. - * @param int $userid The current user id. - * @param bool $disablesubmit Set to true to disable the submit button. - * @return string Returns HTML markup. - */ - public function display_student_submit_buttons($cm, $userid, $disablesubmit = false) { - $html = ''; - - $target = new moodle_url('/mod/kalvidassign/submission.php'); - - $attr = array('method' => 'POST', 'action' => $target); - - $html .= html_writer::start_tag('form', $attr); - - $attr = array( - 'type' => 'hidden', - 'name' => 'entry_id', - 'id' => 'entry_id', - 'value' => '' - ); - - $html .= html_writer::empty_tag('input', $attr); - - $attr = array( - 'type' => 'hidden', - 'name' => 'cmid', - 'value' => $cm->id - ); - $html .= html_writer::empty_tag('input', $attr); - - $attr = array( - 'type' => 'hidden', - 'name' => 'sesskey', - 'value' => sesskey() - ); - $html .= html_writer::empty_tag('input', $attr); - - $html .= html_writer::empty_tag('input', array('type' => 'hidden', 'id' => 'width', 'name' => 'width', 'value' => 0)); - $html .= html_writer::empty_tag('input', array('type' => 'hidden', 'id' => 'height', 'name' => 'height', 'value' => 0)); - $html .= html_writer::empty_tag('input', array('type' => 'hidden', 'id' => 'source', 'name' => 'source', 'value' => 0)); - $html .= html_writer::empty_tag('input', array('type' => 'hidden', 'id' => 'metadata', 'name' => 'metadata', 'value' => 0)); - - $html .= html_writer::start_tag('center'); - - $attr = array( - 'type' => 'button', - 'id' => 'id_add_video', - 'name' => 'add_video', - 'value' => get_string('addvideo', 'kalvidassign') - ); - - if ($disablesubmit) { - $attr['disabled'] = 'disabled'; - } - - $html .= html_writer::empty_tag('input', $attr); - - $html .= ' '; - - $attr = array( - 'type' => 'submit', - 'name' => 'submit_video', - 'id' => 'submit_video', - 'disabled' => 'disabled', - 'value' => get_string('submitvideo', 'kalvidassign')); - - $html .= html_writer::empty_tag('input', $attr); - - $html .= html_writer::end_tag('center'); - - $html .= html_writer::end_tag('form'); - - return $html; - } - - /** - * This function returns HTML markup to render a form and submission buttons. - * @param object $cm A course module object. - * @param int $userid The current user id. - * @param bool $disablesubmit Set to true to disable the submit button. - * @return string Returns HTML markup. - */ - public function display_student_resubmit_buttons($cm, $userid, $disablesubmit = false) { - global $DB; - - $param = array('vidassignid' => $cm->instance, 'userid' => $userid); - $submissionrec = $DB->get_record('kalvidassign_submission', $param); - - $html = ''; - - $target = new moodle_url('/mod/kalvidassign/submission.php'); - - $attr = array('method' => 'POST', 'action' => $target); - - $html .= html_writer::start_tag('form', $attr); - - $attr = array( - 'type' => 'hidden', - 'name' => 'cmid', - 'value' => $cm->id - ); - - $html .= html_writer::empty_tag('input', $attr); - - $attr = array( - 'type' => 'hidden', - 'name' => 'entry_id', - 'id' => 'entry_id', - 'value' => $submissionrec->entry_id - ); - - $html .= html_writer::empty_tag('input', $attr); - - $attr = array( - 'type' => 'hidden', - 'name' => 'sesskey', - 'value' => sesskey() - ); - - $html .= html_writer::empty_tag('input', $attr); - - $html .= html_writer::empty_tag('input', array('type' => 'hidden', 'id' => 'width', 'name' => 'width', 'value' => 0)); - $html .= html_writer::empty_tag('input', array('type' => 'hidden', 'id' => 'height', 'name' => 'height', 'value' => 0)); - $html .= html_writer::empty_tag('input', array('type' => 'hidden', 'id' => 'source', 'name' => 'source', 'value' => 0)); - $html .= html_writer::empty_tag('input', array('type' => 'hidden', 'id' => 'metadata', 'name' => 'metadata', 'value' => 0)); - - $html .= html_writer::start_tag('center'); - - // Add submit and review buttons. - $attr = array( - 'type' => 'button', - 'name' => 'add_video', - 'id' => 'id_add_video', - 'value' => get_string('replacevideo', 'kalvidassign') - ); - - if ($disablesubmit) { - $attr['disabled'] = 'disabled'; - } - - $html .= html_writer::empty_tag('input', $attr); - - $html .= '  '; - - $attr = array( - 'type' => 'submit', - 'id' => 'submit_video', - 'name' => 'submit_video', - 'disabled' => 'disabled', - 'value' => get_string('submitvideo', 'kalvidassign') - ); - - if ($disablesubmit) { - $attr['disabled'] = 'disabled'; - } - - $html .= html_writer::empty_tag('input', $attr); - - $html .= html_writer::end_tag('center'); - - $html .= html_writer::end_tag('form'); - - return $html; - } - - /** - * This function returns HTML markup to render a form and submission buttons. - * @param object $cm A course module object. - * @param int $userid The current user id. - * @param bool $disablesubmit Set to true to disable the submit button. - * @return string Returns HTML markup. - */ - public function display_instructor_buttons($cm, $userid) { - $html = ''; - - $target = new moodle_url('/mod/kalvidassign/grade_submissions.php'); - - $attr = array('method' => 'POST', 'action' => $target); - - $html .= html_writer::start_tag('form', $attr); - - $html .= html_writer::start_tag('center'); - - $attr = array('type' => 'hidden', - 'name' => 'sesskey', - 'value' => sesskey()); - $html .= html_writer::empty_tag('input', $attr); - - $attr = array('type' => 'hidden', - 'name' => 'cmid', - 'value' => $cm->id); - $html .= html_writer::empty_tag('input', $attr); - - $attr = array('type' => 'submit', - 'name' => 'grade_submissions', - 'value' => get_string('gradesubmission', 'kalvidassign')); - - $html .= html_writer::empty_tag('input', $attr); - - $html .= html_writer::end_tag('center'); - - $html .= html_writer::end_tag('form'); - - return $html; - } - - /** - * This function returns HTML markup to render a the submissions table - * @param object $cm A course module object. - * @param int $groupfilter The group id to filter against. - * @param string $filter Filter users who have submitted, submitted and graded or everyone. - * @param int $perpage The number of submissions to display on a page. - * @param bool $quickgrade True if the quick grade table needs to be rendered, otherwsie false. - * @param string $tifirst The first initial of the first name. - * @param string $tilast The first initial of the last name. - * @param int $page The current page to render. - * @return string Returns HTML markup. - */ - public function display_submissions_table($cm, $groupfilter = 0, $filter = 'all', $perpage, $quickgrade = false, $tifirst = '', $tilast = '', $page = 0) { - - global $DB, $OUTPUT, $COURSE, $USER; - - // Get a list of users who have submissions and retrieve grade data for those users. - $users = kalvidassign_get_submissions($cm->instance, $filter); - - $define_columns = array('picture', 'fullname', 'selectgrade', 'submissioncomment', 'timemodified', 'timemarked', 'status', 'grade'); - - if (empty($users)) { - $users = array(); - } - - $entryids = array(); - - foreach ($users as $usersubmission) { - $entryids[$usersubmission->entry_id] = $usersubmission->entry_id; - } - - // Compare student who have submitted to the assignment with students who are - // currently enrolled in the course - $students = kalvidassign_get_assignment_students($cm); - $users = array_intersect(array_keys($users), array_keys($students)); - - if (empty($users)) { - echo html_writer::tag('p', get_string('noenrolledstudents', 'kalvidassign')); - return; - } - - $gradinginfo = grade_get_grades($cm->course, 'mod', 'kalvidassign', $cm->instance, $users); - - $where = ''; - switch ($filter) { - case KALASSIGN_SUBMITTED: - $where = ' kvs.timemodified > 0 AND '; - break; - case KALASSIGN_REQ_GRADING: - $where = ' kvs.timemarked < kvs.timemodified AND '; - break; - } - - // Determine logic needed for groups mode - $param = array(); - $groupswhere = ''; - $groupscolumn = ''; - $groupsjoin = ''; - $groups = array(); - $groupids = ''; - $context = context_course::instance($COURSE->id); - - // Get all groups that the user belongs to, check if the user has capability to access all groups - if (!has_capability('moodle/site:accessallgroups', $context, $USER->id)) { - $groups = groups_get_all_groups($COURSE->id, $USER->id); - - if (empty($groups)) { - $message = get_string('nosubmissions', 'kalvidassign'); - echo html_writer::tag('center', $message); - return; - } - } else { - $groups = groups_get_all_groups($COURSE->id); - } - - // Create a comma separated list of group ids - foreach ($groups as $group) { - $groupids .= $group->id.','; - } - - $groupids = rtrim($groupids, ','); - - switch (groups_get_activity_groupmode($cm)) { - case NOGROUPS: - // No groups, do nothing - break; - case SEPARATEGROUPS: - // If separate groups, but displaying all users then we must display only users - // who are in the same group as the current user - if (0 == $groupfilter) { - $groupscolumn = ', gm.groupid '; - $groupsjoin = ' RIGHT JOIN {groups_members} gm ON gm.userid = u.id RIGHT JOIN {groups} g ON g.id = gm.groupid '; - - $param['courseid'] = $cm->course; - $groupswhere .= ' AND g.courseid = :courseid '; - - $param['groupid'] = $groupfilter; - $groupswhere .= ' AND g.id IN ('.$groupids.') '; - - } - - case VISIBLEGROUPS: - // if visible groups but displaying a specific group then we must display users within - // that group, if displaying all groups then display all users in the course - if (0 != $groupfilter) { - - $groupscolumn = ', gm.groupid '; - $groupsjoin = ' RIGHT JOIN {groups_members} gm ON gm.userid = u.id RIGHT JOIN {groups} g ON g.id = gm.groupid '; - - $param['courseid'] = $cm->course; - $groupswhere .= ' AND g.courseid = :courseid '; - - $param['groupid'] = $groupfilter; - $groupswhere .= ' AND gm.groupid = :groupid '; - - } - break; - } - - $table = new submissions_table('kal_vid_submit_table', $cm, $gradinginfo, $quickgrade, $tifirst, $tilast, $page); - - // In order for the sortable first and last names to work. User ID has to be the first column returned and must be - // returned as id. Otherwise the table will display links to user profiles that are incorrect or do not exist - $columns = user_picture::fields('u').', kvs.id AS submitid, '; - $columns .= ' kvs.grade, kvs.submissioncomment, kvs.timemodified, kvs.entry_id, kvs.source, kvs.width, kvs.height, kvs.timemarked, '; - $columns .= 'kvs.metadata, 1 AS status, 1 AS selectgrade'.$groupscolumn; - $where .= ' u.deleted = 0 AND u.id IN ('.implode(',', $users).') '.$groupswhere; - - $param['instanceid'] = $cm->instance; - $from = "{user} u LEFT JOIN {kalvidassign_submission} kvs ON kvs.userid = u.id AND kvs.vidassignid = :instanceid ".$groupsjoin; - - $baseurl = new moodle_url('/mod/kalvidassign/grade_submissions.php', array('cmid' => $cm->id)); - - $col1 = get_string('fullname', 'kalvidassign'); - $col2 = get_string('grade', 'kalvidassign'); - $col3 = get_string('submissioncomment', 'kalvidassign'); - $col4 = get_string('timemodified', 'kalvidassign'); - $col5 = get_string('grademodified', 'kalvidassign'); - $col6 = get_string('status', 'kalvidassign'); - $col7 = get_string('finalgrade', 'kalvidassign'); - - $table->set_sql($columns, $from, $where, $param); - $table->define_baseurl($baseurl); - $table->collapsible(true); - - $table->define_columns($define_columns); - $table->define_headers(array('', $col1, $col2, $col3, $col4, $col5, $col6, $col7)); - - echo html_writer::start_tag('center'); - - $attributes = array('action' => new moodle_url('grade_submissions.php'), 'id' => 'fastgrade', 'method' => 'post'); - echo html_writer::start_tag('form', $attributes); - - $attributes = array('type' => 'hidden', 'name' => 'cmid', 'value' => $cm->id); - echo html_writer::empty_tag('input', $attributes); - - $attributes['name'] = 'mode'; - $attributes['value'] = 'fastgrade'; - - echo html_writer::empty_tag('input', $attributes); - - $attributes['name'] = 'sesskey'; - $attributes['value'] = sesskey(); - - echo html_writer::empty_tag('input', $attributes); - - $table->out($perpage, true); - - if ($quickgrade) { - $attributes = array('type' => 'submit', 'name' => 'save_feedback', 'value' => get_string('savefeedback', 'kalvidassign')); - - echo html_writer::empty_tag('input', $attributes); - } - - echo html_writer::end_tag('form'); - - echo html_writer::end_tag('center'); - - echo html_writer::empty_tag('input', array('id' => 'closeltipanel', 'type' => 'hidden')); - } - - /** - * Displays the assignments listing table. - * - * @param object $course The course odject. - */ - public function display_kalvidassignments_table($course) { - global $CFG, $DB, $PAGE, $OUTPUT, $USER; - - echo html_writer::start_tag('center'); - - $strplural = get_string('modulenameplural', 'kalvidassign'); - - if (!$cms = get_coursemodules_in_course('kalvidassign', $course->id, 'm.timedue')) { - echo get_string('noassignments', 'mod_kalvidassign'); - echo $OUTPUT->continue_button($CFG->wwwroot.'/course/view.php?id='.$course->id); - } - - $strsectionname = get_string('sectionname', 'format_'.$course->format); - $usesections = course_format_uses_sections($course->format); - $modinfo = get_fast_modinfo($course); - - if ($usesections) { - $sections = $modinfo->get_section_info_all(); - } - $courseindexsummary = new kalvidassign_course_index_summary($usesections, $strsectionname); - - $timenow = time(); - $currentsection = ''; - $assignmentcount = 0; - - foreach ($modinfo->instances['kalvidassign'] as $cm) { - if (!$cm->uservisible) { - continue; - } - - $assignmentcount++; - $timedue = $cms[$cm->id]->timedue; - - $sectionname = ''; - if ($usesections && $cm->sectionnum) { - $sectionname = get_section_name($course, $sections[$cm->sectionnum]); - } - - $submitted = ''; - $context = context_module::instance($cm->id); - - if (has_capability('mod/kalvidassign:gradesubmission', $context)) { - $submitted = $DB->count_records('kalvidassign_submission', array('vidassignid' => $cm->instance)); - } else if (has_capability('mod/kalvidassign:submit', $context)) { - if ($DB->count_records('kalvidassign_submission', array('vidassignid' => $cm->instance, 'userid' => $USER->id)) > 0) { - $submitted = get_string('submitted', 'mod_kalvidassign'); - } else { - $submitted = get_string('nosubmission', 'mod_kalvidassign'); - } - } - - $gradinginfo = grade_get_grades($course->id, 'mod', 'kalvidassign', $cm->instance, $USER->id); - if (isset($gradinginfo->items[0]->grades[$USER->id]) && !$gradinginfo->items[0]->grades[$USER->id]->hidden ) { - $grade = $gradinginfo->items[0]->grades[$USER->id]->str_grade; - } else { - $grade = '-'; - } - - $courseindexsummary->add_assign_info($cm->id, $cm->name, $sectionname, $timedue, $submitted, $grade); - } - - if ($assignmentcount > 0) { - $pagerenderer = $PAGE->get_renderer('mod_kalvidassign'); - echo $pagerenderer->render($courseindexsummary); - } - - echo html_writer::end_tag('center'); - } - - /** - * This function displays HTML markup needed by the ltipanel YUI module to display a popup window containing the LTI launch. - * @param object $submission A Kaltura video assignment video submission table object. - * @param int $courseid The course id. - * @param int $cmid The ccourse module id. - * @return string HTML markup. - */ - public function display_video_container_markup($submission, $courseid, $cmid) { - $source = new moodle_url('/local/kaltura/pix/vidThumb.png'); - $alt = get_string('video_thumbnail', 'mod_kalvidassign'); - $title = get_string('video_thumbnail', 'mod_kalvidassign'); - $iframe = ''; - $url = null; - - $attr = array( - 'id' => 'video_thumbnail', - 'src' => $source->out(), - 'alt' => $alt, - 'title' => $title - ); - - // If the submission object contains a source URL then display the video as part of an LTI launch. - if (!empty($submission->source)) { - $attr['style'] = 'display:none'; - - $params = array( - 'courseid' => $courseid, - 'height' => $submission->height, - 'width' => $submission->width, - 'withblocks' => 0, - 'source' => local_kaltura_add_kaf_uri_token($submission->source), - 'cmid' => $cmid - ); - $url = new moodle_url('/mod/kalvidassign/lti_launch.php', $params); - } - - $output = html_writer::empty_tag('img', $attr); - - $params = array( - 'id' => 'contentframe', - 'src' => ($url instanceof moodle_url) ? $url->out(false) : '', - 'allowfullscreen' => "true", - 'webkitallowfullscreen' => "true", - 'mozallowfullscreen' => "true", - 'height' => '100%', - 'width' => !empty($submission->width) ? $submission->width : '' - ); - - if (empty($submission->source)) { - $params['style'] = 'display:none'; - } - - $iframe = html_writer::tag('iframe', '', $params); - - $output .= html_writer::tag('center', $iframe); - $output .= html_writer::empty_tag('input', array('type' => 'hidden', 'id' => 'closeltipanel', 'value' => 0)); - - return $output; - } - - /** - * Display the feedback to the student - * - * This default method prints the teacher picture and name, date when marked, - * grade and teacher submissioncomment. - * - * @global object - * @global object - * @global object - * @param object $submission The submission object or NULL in which case it will be loaded - * - * TODO: correct documentation for this function - */ - public function display_grade_feedback($kalvidassign, $context) { - global $USER, $CFG, $DB, $OUTPUT; - - require_once($CFG->libdir.'/gradelib.php'); - - // Check if the user is enrolled to the coruse and can submit to the assignment - if (!is_enrolled($context, $USER, 'mod/kalvidassign:submit')) { - // can not submit assignments -> no feedback - return; - } - - // Get the user's submission obj - $gradinginfo = grade_get_grades($kalvidassign->course, 'mod', 'kalvidassign', $kalvidassign->id, $USER->id); - - $item = $gradinginfo->items[0]; - $grade = $item->grades[$USER->id]; - - // Hidden or error. - if ($grade->hidden or $grade->grade === false) { - return; - } - - // Nothing to show yet. - if ($grade->grade === null and empty($grade->str_feedback)) { - return; - } - - $gradedate = $grade->dategraded; - $gradeby = $grade->usermodified; - - // We need the teacher info - if (!$teacher = $DB->get_record('user', array('id'=>$gradeby))) { - print_error('cannotfindteacher'); - } - - // Print the feedback - echo $OUTPUT->heading(get_string('feedbackfromteacher', 'assignment', fullname($teacher))); - - echo ''; - - echo ''; - echo ''; - echo ''; - echo ''; - - echo ''; - echo ''; - echo ''; - - echo ''; - } - - /** - * Render a course index summary. - * - * @param kalvidassign_course_index_summary $indexsummary Structure for index summary. - * @return string HTML for assignments summary table - */ - public function render_kalvidassign_course_index_summary(kalvidassign_course_index_summary $indexsummary) { - $strplural = get_string('modulenameplural', 'kalvidassign'); - $strsectionname = $indexsummary->courseformatname; - $strduedate = get_string('duedate', 'kalvidassign'); - $strsubmission = get_string('submission', 'kalvidassign'); - $strgrade = get_string('grade'); - - $table = new html_table(); - if ($indexsummary->usesections) { - $table->head = array ($strsectionname, $strplural, $strduedate, $strsubmission, $strgrade); - $table->align = array ('left', 'left', 'center', 'right', 'right'); - } else { - $table->head = array ($strplural, $strduedate, $strsubmission, $strgrade); - $table->align = array ('left', 'left', 'center', 'right'); - } - $table->data = array(); - - $currentsection = ''; - foreach ($indexsummary->assignments as $info) { - $params = array('id' => $info['cmid']); - $link = html_writer::link(new moodle_url('/mod/kalvidassign/view.php', $params), $info['cmname']); - $due = $info['timedue'] ? userdate($info['timedue']) : '-'; - - $printsection = ''; - if ($indexsummary->usesections) { - if ($info['sectionname'] !== $currentsection) { - if ($info['sectionname']) { - $printsection = $info['sectionname']; - } - if ($currentsection !== '') { - $table->data[] = 'hr'; - } - $currentsection = $info['sectionname']; - } - } - - if ($indexsummary->usesections) { - $row = array($printsection, $link, $due, $info['submissioninfo'], $info['gradeinfo']); - } else { - $row = array($link, $due, $info['submissioninfo'], $info['gradeinfo']); - } - $table->data[] = $row; - } - - return html_writer::table($table); - } -} diff --git a/mod/kalvidassign/single_submission.php b/mod/kalvidassign/single_submission.php deleted file mode 100644 index 8d23288ce9be8..0000000000000 --- a/mod/kalvidassign/single_submission.php +++ /dev/null @@ -1,222 +0,0 @@ -. - -/** - * Kaltura video assignment single submission script. - * - * @package mod_kalvidassign - * @author Remote-Learner.net Inc - * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later - * @copyright (C) 2014 Remote Learner.net Inc http://www.remote-learner.net - */ - -require_once(dirname(dirname(dirname(__FILE__))).'/config.php'); -require_once(dirname(__FILE__).'/lib.php'); -require_once(dirname(__FILE__).'/renderer.php'); -require_once(dirname(__FILE__).'/locallib.php'); -require_once(dirname(__FILE__).'/single_submission_form.php'); - -$id = required_param('cmid', PARAM_INT); -$userid = required_param('userid', PARAM_INT); -$tifirst = optional_param('tifirst', '', PARAM_TEXT); -$tilast = optional_param('tilast', '', PARAM_TEXT); -$page = optional_param('page', 0, PARAM_INT); - - -list($cm, $course, $kalvidassignobj) = kalvidassign_validate_cmid($id); - -require_login($course->id, false, $cm); - -if (!confirm_sesskey()) { - print_error('confirmsesskeybad', 'error'); -} - -global $CFG, $PAGE, $OUTPUT, $USER; - -$url = new moodle_url('/mod/kalvidassign/single_submission.php'); -$url->params(array('cmid' => $id, 'userid' => $userid)); - -$context = context_module::instance($cm->id); - -$PAGE->set_url($url); -$PAGE->set_title(format_string($kalvidassignobj->name)); -$PAGE->set_heading($course->fullname); -$PAGE->set_context($context); - -$previousurl = new moodle_url('/mod/kalvidassign/grade_submissions.php', array('cmid' => $cm->id, 'tifirst' => $tifirst, 'tilast' => $tilast, 'page' => $page)); -$prevousurlstring = get_string('singlesubmissionheader', 'kalvidassign'); -$PAGE->navbar->add($prevousurlstring, $previousurl); -$PAGE->requires->css('/local/kaltura/styles.css'); - -require_capability('mod/kalvidassign:gradesubmission', $context); - -add_to_log($course->id, 'kalvidassign', 'view submission page', 'single_submission.php?id='.$cm->id, $kalvidassignobj->id, $cm->id); - -// Get a single submission record -$submission = kalvidassign_get_submission($cm->instance, $userid); - -// Get the submission user and the time they submitted the video -$param = array('id' => $userid); -$user = $DB->get_record('user', $param); - -$submissionuserpic = $OUTPUT->user_picture($user); -$submissionmodified = ' - '; -$datestringlate = ' - '; -$datestring = ' - '; - -$submissionuserinfo = fullname($user); - -// Get grading information -$gradinginfo = grade_get_grades($cm->course, 'mod', 'kalvidassign', $cm->instance, array($userid)); -$gradingdisabled = $gradinginfo->items[0]->grades[$userid]->locked || $gradinginfo->items[0]->grades[$userid]->overridden; - -// Get marking teacher information and the time the submission was marked -$teacher = ''; -if (!empty($submission)) { - $datestringlate = kalvidassign_display_lateness($submission->timemodified, $kalvidassignobj->timedue); - $submissionmodified = userdate($submission->timemodified); - $datestring = userdate($submission->timemarked)."  (".format_time(time() - $submission->timemarked).")"; - - $submissionuserinfo .= '
    '.$submissionmodified.$datestringlate; - - $param = array('id' => $submission->teacher); - $teacher = $DB->get_record('user', $param); -} - -$markingteacherpic = ''; -$markingtreacherinfo = ''; - -if (!empty($teacher)) { - $markingteacherpic = $OUTPUT->user_picture($teacher); - $markingtreacherinfo = fullname($teacher).'
    '.$datestring; -} - -// Setup form data -$formdata = new stdClass(); -$formdata->submissionuserpic = $submissionuserpic; -$formdata->submissionuserinfo = $submissionuserinfo; -$formdata->markingteacherpic = $markingteacherpic; -$formdata->markingteacherinfo = $markingtreacherinfo; -$formdata->grading_info = $gradinginfo; -$formdata->gradingdisabled = $gradingdisabled; -$formdata->cm = $cm; -$formdata->context = $context; -$formdata->cminstance = $kalvidassignobj; -$formdata->submission = $submission; -$formdata->userid = $userid; -$formdata->enableoutcomes = $CFG->enableoutcomes; -$formdata->submissioncomment_editor = array('text' => $submission->submissioncomment, 'format' => FORMAT_HTML); -$formdata->tifirst = $tifirst; -$formdata->tilast = $tilast; -$formdata->page = $page; - -$submissionform = new kalvidassign_singlesubmission_form(null, $formdata); - -if ($submissionform->is_cancelled()) { - redirect($previousurl); -} else if ($submitted_data = $submissionform->get_data()) { - - if (!isset($submitted_data->cancel) && isset($submitted_data->xgrade) && isset($submitted_data->submissioncomment_editor)) { - - // Flag used when an instructor is about to grade a user who does not have - // a submittion (see KALDEV-126) - $updategrade = true; - - if ($submission) { - - $submissionchanged = strcmp($submission->submissioncomment, $submitted_data->submissioncomment_editor['text']); - if ($submission->grade == $submitted_data->xgrade && $submissionchanged) { - - $updategrade = false; - } else { - $submission->grade = $submitted_data->xgrade; - $submission->submissioncomment = $submitted_data->submissioncomment_editor['text']; - $submission->format = $submitted_data->submissioncomment_editor['format']; - $submission->timemarked = time(); - $submission->teacher = $USER->id; - $DB->update_record('kalvidassign_submission', $submission); - } - - } else { - - // Check for unchanged values - if ('-1' == $submitted_data->xgrade && empty($submitted_data->submissioncomment_editor['text'])) { - - $updategrade = false; - } else { - - $submission = new stdClass(); - $submission->vidassignid = $cm->instance; - $submission->userid = $userid; - $submission->grade = $submitted_data->xgrade; - $submission->submissioncomment = $submitted_data->submissioncomment_editor['text']; - $submission->format = $submitted_data->submissioncomment_editor['format']; - $submission->timemarked = time(); - $submission->teacher = $USER->id; - - $DB->insert_record('kalvidassign_submission', $submission); - } - } - - if ($updategrade) { - $kalvidassignobj->cmidnumber = $cm->idnumber; - - $gradeobj = kalvidassign_get_submission_grade_object($kalvidassignobj->id, $userid); - - kalvidassign_grade_item_update($kalvidassignobj, $gradeobj); - - // Add to log. - add_to_log($kalvidassignobj->course, 'kalvidassign', 'update grades', 'grade_submissions.php?cmid='.$cm->id, $cm->id); - - } - - // Handle outcome data - if (!empty($CFG->enableoutcomes)) { - require_once($CFG->libdir.'/gradelib.php'); - - $data = array(); - $gradinginfo = grade_get_grades($course->id, 'mod', 'kalvidassign', $kalvidassignobj->id, $userid); - - if (!empty($gradinginfo->outcomes)) { - foreach ($gradinginfo->outcomes as $n => $old) { - $name = 'outcome_'.$n; - if (isset($submitted_data->{$name}[$userid]) and - $old->grades[$userid]->grade != $submitted_data->{$name}[$userid]) { - - $data[$n] = $submitted_data->{$name}[$userid]; - } - } - } - - if (count($data) > 0) { - grade_update_outcomes('mod/kalvidassign', $course->id, 'mod', 'kalvidassign', $kalvidassignobj->id, $userid, $data); - } - } - - } - - redirect($previousurl); - -} - -$pageheading = get_string('gradesubmission', 'kalvidassign'); - -echo $OUTPUT->header(); -echo $OUTPUT->heading($pageheading.': '.fullname($user)); - -$submissionform->set_data($formdata); - -$submissionform->display(); - -echo $OUTPUT->footer(); \ No newline at end of file diff --git a/mod/kalvidassign/single_submission_form.php b/mod/kalvidassign/single_submission_form.php deleted file mode 100644 index bd24bb35c7fb1..0000000000000 --- a/mod/kalvidassign/single_submission_form.php +++ /dev/null @@ -1,209 +0,0 @@ -. - -/** - * Kaltura video assignment single submission form. - * - * @package mod_kalvidassign - * @author Remote-Learner.net Inc - * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later - * @copyright (C) 2014 Remote Learner.net Inc http://www.remote-learner.net - */ - -if (!defined('MOODLE_INTERNAL')) { - die('Direct access to this script is forbidden.'); -} - -require_once(dirname(dirname(dirname(__FILE__))).'/course/moodleform_mod.php'); - -class kalvidassign_singlesubmission_form extends moodleform { - - /** - * This function defines the forums elments that are to be displayed - */ - public function definition() { - global $CFG, $PAGE; - - $mform =& $this->_form; - - $cm = $this->_customdata->cm; - $userid = $this->_customdata->userid; - - $mform->addElement('hidden', 'cmid', $cm->id); - $mform->setType('cmid', PARAM_INT); - $mform->addelement('hidden', 'userid', $userid); - $mform->setType('userid', PARAM_INT); - $mform->addElement('hidden', 'tifirst', $this->_customdata->tifirst); - $mform->setType('tifirst', PARAM_TEXT); - $mform->addElement('hidden', 'tilast', $this->_customdata->tilast); - $mform->setType('tilast', PARAM_TEXT); - $mform->addElement('hidden', 'page', $this->_customdata->page); - $mform->setType('page', PARAM_INT); - - /* Submission section */ - $mform->addElement('header', 'single_submission_1', get_string('submission', 'kalvidassign')); - - $mform->addelement('static', 'submittinguser', $this->_customdata->submissionuserpic, $this->_customdata->submissionuserinfo); - - /* Video preview */ - $mform->addElement('header', 'single_submission_2', get_string('previewvideo', 'kalvidassign')); - - $submission = $this->_customdata->submission; - $gradinginfo = $this->_customdata->grading_info; - $entryobject = ''; - $timemodified = ''; - - if (!empty($submission->entry_id) && !empty($submission->source)) { - $attr = array( - 'src' => local_kaltura_add_kaf_uri_token($submission->source), - 'height' => $submission->height, - 'width' => $submission->width, - 'allowfullscreen' => "true", - 'webkitallowfullscreen' => "true", - 'mozallowfullscreen' => "true" - ); - $mform->addElement('html', html_writer::tag('iframe', '', $attr)); - } - - /* Grades section */ - $mform->addElement('header', 'single_submission_3', get_string('grades', 'kalvidassign')); - - $attributes = array(); - - if ($this->_customdata->gradingdisabled || $this->_customdata->gradingdisabled) { - $attributes['disabled'] = 'disabled'; - } - - $grademenu = make_grades_menu($this->_customdata->cminstance->grade); - $grademenu['-1'] = get_string('nograde'); - - $mform->addElement('select', 'xgrade', get_string('grade').':', $grademenu, $attributes); - - if (isset($submission->grade)) { - $mform->setDefault('xgrade', $this->_customdata->submission->grade ); - } else { - $mform->setDefault('xgrade', '-1' ); - } - - $mform->setType('xgrade', PARAM_INT); - - if (!empty($this->_customdata->enableoutcomes) && !empty($gradinginfo)) { - - foreach ($gradinginfo->outcomes as $n => $outcome) { - - $options = make_grades_menu(-$outcome->scaleid); - - if (array_key_exists($this->_customdata->userid, $outcome->grades) && - $outcome->grades[$this->_customdata->userid]->locked) { - - $options[0] = get_string('nooutcome', 'grades'); - echo $options[$outcome->grades[$this->_customdata->userid]->grade]; - - } else { - - $options[''] = get_string('nooutcome', 'grades'); - $attributes = array('id' => 'menuoutcome_'.$n ); - $mform->addElement('select', 'outcome_'.$n.'['.$this->_customdata->userid.']', $outcome->name.':', $options, $attributes ); - $mform->setType('outcome_'.$n.'['.$this->_customdata->userid.']', PARAM_INT); - - if (array_key_exists($this->_customdata->userid, $outcome->grades)) { - $mform->setDefault('outcome_'.$n.'['.$this->_customdata->userid.']', $outcome->grades[$this->_customdata->userid]->grade ); - } - } - } - } - - if (has_capability('gradereport/grader:view', $this->_customdata->context) && has_capability('moodle/grade:viewall', $this->_customdata->context)) { - - if (empty($gradinginfo) || !array_key_exists($this->_customdata->userid, $gradinginfo->items[0]->grades)) { - - $grade = ' - '; - - } else if (0 != strcmp('-', $gradinginfo->items[0]->grades[$this->_customdata->userid]->str_grade)) { - - $grade = ''; - $grade .= $this->_customdata->grading_info->items[0]->grades[$this->_customdata->userid]->str_grade.''; - } else { - - $grade = $this->_customdata->grading_info->items[0]->grades[$this->_customdata->userid]->str_grade; - } - - } else { - - $grade = $this->_customdata->grading_info->items[0]->grades[$this->_customdata->userid]->str_grade; - - } - - $mform->addElement('static', 'finalgrade', get_string('currentgrade', 'assignment').':', $grade); - $mform->setType('finalgrade', PARAM_INT); - - /* Feedback section */ - $mform->addElement('header', 'single_submission_4', get_string('feedback', 'kalvidassign')); - - if (!empty($this->_customdata->gradingdisabled)) { - - if (array_key_exists($this->_customdata->userid, $gradinginfo->items[0]->grades)) { - $mform->addElement('static', 'disabledfeedback', ' ', $gradinginfo->items[0]->grades[$this->_customdata->userid]->str_feedback ); - } else { - $mform->addElement('static', 'disabledfeedback', ' ', '' ); - } - - } else { - - $mform->addElement('editor', 'submissioncomment_editor', get_string('feedback', 'kalvidassign').':', null, $this->get_editor_options() ); - $mform->setType('submissioncomment_editor', PARAM_RAW); - - } - - /* Marked section */ - $mform->addElement('header', 'single_submission_5', get_string('lastgrade', 'kalvidassign')); - - $mform->addElement('static', 'markingteacher', $this->_customdata->markingteacherpic, $this->_customdata->markingteacherinfo); - - $this->add_action_buttons(); - } - - /** - * This function sets the text editor format. - * @param object|array $data object or array of default values - * @return void - */ - public function set_data($data) { - - if (!isset($data->submission->format)) { - $data->textformat = FORMAT_HTML; - } else { - $data->textformat = $data->submission->format; - } - - $editoroptions = $this->get_editor_options(); - - return parent::set_data($data); - - } - - /** - * This function gets the editor options. - * @return array An array of editor options. - */ - protected function get_editor_options() { - $editoroptions = array(); - $editoroptions['component'] = 'mod_kalvidassign'; - $editoroptions['noclean'] = false; - $editoroptions['maxfiles'] = 0; - $editoroptions['context'] = $this->_customdata->context; - - return $editoroptions; - } -} diff --git a/mod/kalvidassign/styles.css b/mod/kalvidassign/styles.css deleted file mode 100644 index 5bf863558203d..0000000000000 --- a/mod/kalvidassign/styles.css +++ /dev/null @@ -1,53 +0,0 @@ -#page-mod-kalvidassign-single_submission #page #page-header .navbar { - display:none; -} - - -#page-mod-kalvidassign-single_submission #page #page-content { - min-width: 500px; -} - - -#page-mod-kalvidassign-single_submission #page #page-content #region-main-box { - left:1px; - width:180%; -} - -#page-mod-kalvidassign-view .feedback { - border: 1px solid #DDDDDD; - margin:10px auto; -} - -#page-mod-kalvidassign-view .feedback .grade { - text-align: right; - font-weight: bold; -} - -#page-mod-kalvidassign-view .feedback .topic { - border-color: #DDDDDD; - border-style: solid; - border-width: 0 0 1px; - padding: 4px; -} - -#page-mod-kalvidassign-view .feedback .topic .fullname { - font-weight: bold; -} - -#slider_border { - width: 10%; - height: 18px; - border: 1px solid #000000; - overflow: hidden; -} - -#id_add_video { - float: none; -} - -#video_thumbnail { - display: block; - margin-left: auto; - margin-right: auto; - margin-bottom: 5px; -} \ No newline at end of file diff --git a/mod/kalvidassign/submission.php b/mod/kalvidassign/submission.php deleted file mode 100644 index 6166272c7c874..0000000000000 --- a/mod/kalvidassign/submission.php +++ /dev/null @@ -1,147 +0,0 @@ -. - -/** - * Kaltura video assignment submission script. - * - * @package mod_kalvidassign - * @author Remote-Learner.net Inc - * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later - * @copyright (C) 2014 Remote Learner.net Inc http://www.remote-learner.net - */ - -require_once(dirname(dirname(dirname(__FILE__))).'/config.php'); -require_once(dirname(__FILE__).'/locallib.php'); - -if (!confirm_sesskey()) { - print_error('confirmsesskeybad', 'error'); -} - -$entryid = required_param('entry_id', PARAM_TEXT); -$source = required_param('source', PARAM_URL); -$cmid = required_param('cmid', PARAM_INT); -$width = required_param('width', PARAM_TEXT); -$height = required_param('height', PARAM_TEXT); -$metadata = required_param('metadata', PARAM_TEXT); - -global $USER, $OUTPUT, $DB, $PAGE; - -$urlparts = parse_url($source); -if (!empty($urlparts['path'])) { - $source = 'http://'.KALTURA_URI_TOKEN.$urlparts['path']; -} - -if (! $cm = get_coursemodule_from_id('kalvidassign', $cmid)) { - print_error('invalidcoursemodule'); -} - -if (! $course = $DB->get_record('course', array('id' => $cm->course))) { - print_error('coursemisconf'); -} - -if (! $kalvidassignobj = $DB->get_record('kalvidassign', array('id' => $cm->instance))) { - print_error('invalidid', 'kalvidassign'); -} - -require_course_login($course->id, true, $cm); - -$PAGE->set_url('/mod/kalvidassign/view.php', array('id' => $course->id)); -$PAGE->set_title(format_string($kalvidassignobj->name)); -$PAGE->set_heading($course->fullname); - - -if (kalvidassign_assignemnt_submission_expired($kalvidassignobj)) { - print_error('assignmentexpired', 'kalvidassign', 'course/view.php?id='.$course->id); -} - -echo $OUTPUT->header(); - -if (empty($entryid)) { - print_error('emptyentryid', 'kalvidassign', new moodle_url('/mod/kalvidassign/view.php', array('id' => $cm->id))); -} - -$param = array('vidassignid' => $kalvidassignobj->id, 'userid' => $USER->id); -$submission = $DB->get_record('kalvidassign_submission', $param); - -$time = time(); -$url = new moodle_url('/mod/kalvidassign/view.php', array('id' => $cm->id)); - -if ($submission) { - $submission->entry_id = $entryid; - $submission->source = $source; - $submission->width = $width; - $submission->height = $height; - $submission->timemodified = $time; - $submission->metadata = $metadata; - - if (0 == $submission->timecreated) { - $submission->timecreated = $time; - } - - if ($DB->update_record('kalvidassign_submission', $submission)) { - - $message = get_string('assignmentsubmitted', 'kalvidassign'); - $continue = get_string('continue'); - - echo $OUTPUT->notification($message, 'notifysuccess'); - - echo html_writer::start_tag('center'); - - echo $OUTPUT->single_button($url, $continue, 'post'); - echo html_writer::end_tag('center'); - - add_to_log($course->id, 'kalvidassign', 'submit', 'view.php?id='.$cm->id, $kalvidassignobj->id, $cm->id); - } else { - notice(get_string('failedtoinsertsubmission', 'kalvidassign'), $url, $course); - } - -} else { - $submission = new stdClass(); - $submission->entry_id = $entryid; - $submission->userid = $USER->id; - $submission->vidassignid = $kalvidassignobj->id; - $submission->grade = -1; - $submission->source = $source; - $submission->width = $width; - $submission->height = $height; - $submission->metadata = $metadata; - $submission->timecreated = $time; - $submission->timemodified = $time; - - if ($DB->insert_record('kalvidassign_submission', $submission)) { - - $message = get_string('assignmentsubmitted', 'kalvidassign'); - $continue = get_string('continue'); - - echo $OUTPUT->notification($message, 'notifysuccess'); - - echo html_writer::start_tag('center'); - - echo $OUTPUT->single_button($url, $continue, 'post'); - echo html_writer::end_tag('center'); - - } else { - notice(get_string('failedtoinsertsubmission', 'kalvidassign'), $url, $course); - } - -} - -$context = $PAGE->context; - -// Email an alert to the teacher -if ($kalvidassignobj->emailteachers) { - kalvidassign_email_teachers($cm, $kalvidassignobj->name, $submission, $context); -} - -echo $OUTPUT->footer(); diff --git a/mod/kalvidassign/version.php b/mod/kalvidassign/version.php deleted file mode 100644 index 888c601ea51bf..0000000000000 --- a/mod/kalvidassign/version.php +++ /dev/null @@ -1,36 +0,0 @@ -. - -/** - * Kaltura version script - * - * @package mod_kalvidassign - * @author Remote-Learner.net Inc - * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later - * @copyright (C) 2014 Remote Learner.net Inc http://www.remote-learner.net - */ - -if (!defined('MOODLE_INTERNAL')) { - die('Direct access to this script is forbidden.'); -} - -$module->version = 2014013001; -$module->component = 'mod_kalvidassign'; -$module->release = 'Kaltura release 4.0.00 (RL: TBD)'; -$module->requires = 2013051400; -$module->cron = 0; -$module->maturity = MATURITY_STABLE; -$module->dependencies = array( - 'local_kaltura' => 2014013000.01, -); diff --git a/mod/kalvidassign/view.php b/mod/kalvidassign/view.php deleted file mode 100644 index 6823bfa56679d..0000000000000 --- a/mod/kalvidassign/view.php +++ /dev/null @@ -1,138 +0,0 @@ -. - -/** - * Kaltura video assignment view script. - * - * @package mod_kalvidassign - * @author Remote-Learner.net Inc - * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later - * @copyright (C) 2014 Remote Learner.net Inc http://www.remote-learner.net - */ - -require_once(dirname(dirname(dirname(__FILE__))).'/config.php'); -require_once(dirname(dirname(dirname(__FILE__))).'/local/kaltura/locallib.php'); -require_once(dirname(__FILE__).'/locallib.php'); - -$id = optional_param('id', 0, PARAM_INT); - -// Retrieve module instance. -if (empty($id)) { - print_error('invalidid', 'kalvidassign'); -} - -if (!empty($id)) { - list($cm, $course, $kalvidassign) = kalvidassign_validate_cmid($id); -} - -require_course_login($course->id, true, $cm); - -global $SESSION, $CFG; - -$PAGE->set_url('/mod/kalvidassign/view.php', array('id' => $id)); -$PAGE->set_title(format_string($kalvidassign->name)); -$PAGE->set_heading($course->fullname); -$pageclass = 'kaltura-kalvidassign-body'; -$PAGE->add_body_class($pageclass); - -$context = context_module::instance($cm->id); - -add_to_log($course->id, 'kalvidassign', 'view assignment details', 'view.php?id='.$cm->id, $kalvidassign->id, $cm->id); - -// Update 'viewed' state if required by completion system -$completion = new completion_info($course); -$completion->set_module_viewed($cm); - -$PAGE->requires->css('/mod/kalvidassign/styles.css'); -$PAGE->requires->css('/local/kaltura/styles.css'); -echo $OUTPUT->header(); - -$renderer = $PAGE->get_renderer('mod_kalvidassign'); - -echo $OUTPUT->box_start('generalbox'); - -echo $renderer->display_mod_info($kalvidassign, $context); - -echo format_module_intro('kalvidassign', $kalvidassign, $cm->id); -echo $OUTPUT->box_end(); - -$disabled = false; -$url = ''; -$width = 0; -$height = 0; - -if (!has_capability('mod/kalvidassign:gradesubmission', $context)) { - - $param = array('vidassignid' => $kalvidassign->id, 'userid' => $USER->id); - $submission = $DB->get_record('kalvidassign_submission', $param); - - // If the entry_id field is not empty but the source field is empty, then the data for this activity has not yet been migrated. - if (!empty($submission->entry_id) && empty($submission->source)) { - notice(get_string('activity_not_migrated', 'kalvidassign'), new moodle_url('/course/view.php', array('id' => $course->id))); - } - - echo $renderer->display_video_container_markup($submission, $course->id, $cm->id); - - if (kalvidassign_assignemnt_submission_expired($kalvidassign)) { - $disabled = true; - } - - if (empty($submission->entry_id) && empty($submission->timecreated)) { - - echo $renderer->display_student_submit_buttons($cm, $USER->id, $disabled); - - echo $renderer->display_grade_feedback($kalvidassign, $context); - } else { - - if ($disabled || !$kalvidassign->resubmit) { - $disabled = true; - } - - echo $renderer->display_student_resubmit_buttons($cm, $USER->id, $disabled); - - echo $renderer->display_grade_feedback($kalvidassign, $context); - } - - $params = array( - 'withblocks' => 0, - 'courseid' => $course->id, - 'width' => KALTURA_PANEL_WIDTH, - 'height' => KALTURA_PANEL_HEIGHT, - 'cmid' => $cm->id - ); - - $url = new moodle_url('/mod/kalvidassign/lti_launch.php', $params); - - $params = array( - 'addvidbtnid' => 'id_add_video', - 'ltilaunchurl' => $url->out(false), - 'height' => KALTURA_PANEL_HEIGHT, - 'width' => KALTURA_PANEL_WIDTH - ); - - $PAGE->requires->yui_module('moodle-local_kaltura-ltipanel', 'M.local_kaltura.initmediaassignment', array($params), null, true); - - // Require a YUI module to make the object tag be as large as possible. - $params = array( - 'bodyclass' => $pageclass, - 'lastheight' => null, - 'padding' => 15 - ); - $PAGE->requires->yui_module('moodle-local_kaltura-lticontainer', 'M.local_kaltura.init', array($params), null, true); - $PAGE->requires->string_for_js('replacevideo', 'kalvidassign'); -} else { - echo $renderer->display_instructor_buttons($cm, $USER->id); -} - -echo $OUTPUT->footer(); \ No newline at end of file diff --git a/mod/kalvidpres/backup/moodle2/backup_kalvidpres_activity_task.class.php b/mod/kalvidpres/backup/moodle2/backup_kalvidpres_activity_task.class.php deleted file mode 100644 index 7dd685bb2ad72..0000000000000 --- a/mod/kalvidpres/backup/moodle2/backup_kalvidpres_activity_task.class.php +++ /dev/null @@ -1,67 +0,0 @@ -. - -/** - * Kaltura video presentation activity task file. - * - * @package mod_kalvidpres - * @author Remote-Learner.net Inc - * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later - * @copyright (C) 2014 Remote Learner.net Inc http://www.remote-learner.net - */ - -require_once($CFG->dirroot.'/mod/kalvidpres/backup/moodle2/backup_kalvidpres_stepslib.php'); -require_once($CFG->dirroot.'/mod/kalvidpres/backup/moodle2/backup_kalvidpres_settingslib.php'); - -/** - * kalvidpres backup task that provides all the settings and steps to perform one - * complete backup of the activity - */ -class backup_kalvidpres_activity_task extends backup_activity_task { - - /** - * Define (add) particular settings this activity can have - */ - protected function define_my_settings() { - // No particular settings for this activity - } - - /** - * Define (add) particular steps this activity can have - */ - protected function define_my_steps() { - // Choice only has one structure step - $this->add_step(new backup_kalvidpres_activity_structure_step('kalvidpres_structure', 'kalvidpres.xml')); - } - - /** - * Code the transformations to perform in the activity in - * order to get transportable (encoded) links - */ - static public function encode_content_links($content) { - global $CFG; - - $base = preg_quote($CFG->wwwroot, "/"); - - // Link to the list of kalvidpress - $search="/(".$base."\/mod\/kalvidpres\/index.php\?id\=)([0-9]+)/"; - $content= preg_replace($search, '$@KALVIDPRESINDEX*$2@$', $content); - - // Link to kalvidpres view by moduleid - $search="/(".$base."\/mod\/kalvidpres\/view.php\?id\=)([0-9]+)/"; - $content= preg_replace($search, '$@KALVIDPRESVIEWBYID*$2@$', $content); - - return $content; - } -} diff --git a/mod/kalvidpres/backup/moodle2/backup_kalvidpres_settingslib.php b/mod/kalvidpres/backup/moodle2/backup_kalvidpres_settingslib.php deleted file mode 100644 index b4c9768140a4a..0000000000000 --- a/mod/kalvidpres/backup/moodle2/backup_kalvidpres_settingslib.php +++ /dev/null @@ -1,26 +0,0 @@ -. - -/** - * Kaltura video presentation settingslib file. - * - * @package mod_kalvidpres - * @author Remote-Learner.net Inc - * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later - * @copyright (C) 2014 Remote Learner.net Inc http://www.remote-learner.net - */ - - // This activity has no particular settings but the inherited from the generic - // backup_activity_task so here there isn't any class definition, like the ones - // existing in /backup/moodle2/backup_settingslib.php (activities section) \ No newline at end of file diff --git a/mod/kalvidpres/backup/moodle2/backup_kalvidpres_stepslib.php b/mod/kalvidpres/backup/moodle2/backup_kalvidpres_stepslib.php deleted file mode 100644 index 3f7935d090f17..0000000000000 --- a/mod/kalvidpres/backup/moodle2/backup_kalvidpres_stepslib.php +++ /dev/null @@ -1,47 +0,0 @@ -. - -/** - * Kaltura video presentation stepslib file. - * - * @package mod_kalvidpres - * @author Remote-Learner.net Inc - * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later - * @copyright (C) 2014 Remote Learner.net Inc http://www.remote-learner.net - */ - -/** - * Define all the backup steps that will be used by the backup_kalvidpres_activity_task - */ - -/** - * Define the complete kalvidpres structure for backup, with file and id annotations - */ -class backup_kalvidpres_activity_structure_step extends backup_activity_structure_step { - - protected function define_structure() { - - // Define each element separated - $kalvidpres = new backup_nested_element('kalvidpres', array('id'), array( - 'name', 'intro', 'introformat', 'entry_id', 'video_entry_id', 'doc_entry_id', - 'video_title', 'uiconf_id', 'widescreen', 'height', 'width', 'source', 'timemodified', - 'timecreated')); - - // Define sources - $kalvidpres->set_source_table('kalvidpres', array('id' => backup::VAR_ACTIVITYID)); - - // Return the root element, wrapped into standard activity structure - return $this->prepare_activity_structure($kalvidpres); - } -} diff --git a/mod/kalvidpres/backup/moodle2/backup_kalvidres_activity_task.class.php b/mod/kalvidpres/backup/moodle2/backup_kalvidres_activity_task.class.php deleted file mode 100644 index a73ff6be762a0..0000000000000 --- a/mod/kalvidpres/backup/moodle2/backup_kalvidres_activity_task.class.php +++ /dev/null @@ -1,66 +0,0 @@ -. - -/** - * Kaltura video resource backup activity tasks script. - * - * @package mod_kalvidres - * @author Remote-Learner.net Inc - * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later - * @copyright (C) 2014 Remote Learner.net Inc http://www.remote-learner.net - */ - -require_once($CFG->dirroot.'/mod/kalvidres/backup/moodle2/backup_kalvidres_stepslib.php'); -require_once($CFG->dirroot.'/mod/kalvidres/backup/moodle2/backup_kalvidres_settingslib.php'); - -/** - * kalvidres backup task that provides all the settings and steps to perform one - * complete backup of the activity - */ -class backup_kalvidres_activity_task extends backup_activity_task { - /** - * Define (add) particular settings this activity can have - */ - protected function define_my_settings() { - // No particular settings for this activity - } - - /** - * Define (add) particular steps this activity can have - */ - protected function define_my_steps() { - // Choice only has one structure step - $this->add_step(new backup_kalvidres_activity_structure_step('kalvidres_structure', 'kalvidres.xml')); - } - - /** - * Code the transformations to perform in the activity in - * order to get transportable (encoded) links - */ - static public function encode_content_links($content) { - global $CFG; - - $base = preg_quote($CFG->wwwroot, "/"); - - // Link to the list of kalvidress - $search="/(".$base."\/mod\/kalvidres\/index.php\?id\=)([0-9]+)/"; - $content= preg_replace($search, '$@KALVIDRESINDEX*$2@$', $content); - - // Link to kalvidres view by moduleid - $search="/(".$base."\/mod\/kalvidres\/view.php\?id\=)([0-9]+)/"; - $content= preg_replace($search, '$@KALVIDRESVIEWBYID*$2@$', $content); - - return $content; - } -} diff --git a/mod/kalvidpres/backup/moodle2/backup_kalvidres_settingslib.php b/mod/kalvidpres/backup/moodle2/backup_kalvidres_settingslib.php deleted file mode 100644 index 4a0cd75a42b2a..0000000000000 --- a/mod/kalvidpres/backup/moodle2/backup_kalvidres_settingslib.php +++ /dev/null @@ -1,26 +0,0 @@ -. - -/** - * Kaltura video resource backup settingslib script. - * - * @package mod_kalvidres - * @author Remote-Learner.net Inc - * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later - * @copyright (C) 2014 Remote Learner.net Inc http://www.remote-learner.net - */ - - // This activity has no particular settings but the inherited from the generic - // backup_activity_task so here there isn't any class definition, like the ones - // existing in /backup/moodle2/backup_settingslib.php (activities section) \ No newline at end of file diff --git a/mod/kalvidpres/backup/moodle2/backup_kalvidres_stepslib.php b/mod/kalvidpres/backup/moodle2/backup_kalvidres_stepslib.php deleted file mode 100644 index ae532446cc14f..0000000000000 --- a/mod/kalvidpres/backup/moodle2/backup_kalvidres_stepslib.php +++ /dev/null @@ -1,46 +0,0 @@ -. - -/** - * Kaltura video resource backup stepslib script. - * - * @package mod_kalvidres - * @author Remote-Learner.net Inc - * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later - * @copyright (C) 2014 Remote Learner.net Inc http://www.remote-learner.net - */ - -/** - * Define all the backup steps that will be used by the backup_kalvidres_activity_task - */ - -/** - * Define the complete kalvidres structure for backup, with file and id annotations - */ -class backup_kalvidres_activity_structure_step extends backup_activity_structure_step { - - protected function define_structure() { - - // Define each element separated - $kalvidres = new backup_nested_element('kalvidres', array('id'), array( - 'name', 'intro', 'introformat', 'entry_id', 'video_title', - 'uiconf_id', 'widescreen', 'height', 'width', 'source', 'timemodified', 'timecreated')); - - // Define sources - $kalvidres->set_source_table('kalvidres', array('id' => backup::VAR_ACTIVITYID)); - - // Return the root element, wrapped into standard activity structure - return $this->prepare_activity_structure($kalvidres); - } -} diff --git a/mod/kalvidpres/backup/moodle2/restore_kalvidpres_activity_task.class.php b/mod/kalvidpres/backup/moodle2/restore_kalvidpres_activity_task.class.php deleted file mode 100644 index 850da925d0bb1..0000000000000 --- a/mod/kalvidpres/backup/moodle2/restore_kalvidpres_activity_task.class.php +++ /dev/null @@ -1,107 +0,0 @@ -. - -/** - * Kaltura video presentation activity task file. - * - * @package mod_kalvidpres - * @author Remote-Learner.net Inc - * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later - * @copyright (C) 2014 Remote Learner.net Inc http://www.remote-learner.net - */ - -defined('MOODLE_INTERNAL') || die(); - -require_once($CFG->dirroot.'/mod/kalvidpres/backup/moodle2/restore_kalvidpres_stepslib.php'); - -/** - * kalvidpres restore task that provides all the settings and steps to perform one - * complete restore of the activity - */ -class restore_kalvidpres_activity_task extends restore_activity_task { - - /** - * Define (add) particular settings this activity can have - */ - protected function define_my_settings() { - // No particular settings for this activity - } - - /** - * Define (add) particular steps this activity can have - */ - protected function define_my_steps() { - // Certificate only has one structure step - $this->add_step(new restore_kalvidpres_activity_structure_step('kalvidpres_structure', 'kalvidpres.xml')); - } - - /** - * Define the contents in the activity that must be - * processed by the link decoder - */ - static public function define_decode_contents() { - $contents = array(); - - $contents[] = new restore_decode_content('kalvidpres', array('intro'), 'kalvidpres'); - - return $contents; - } - - /** - * Define the decoding rules for links belonging - * to the activity to be executed by the link decoder - */ - static public function define_decode_rules() { - $rules = array(); - - $rules[] = new restore_decode_rule('KALVIDPRESVIEWBYID', '/mod/kalvidpres/view.php?id=$1', 'course_module'); - $rules[] = new restore_decode_rule('KALVIDPRESINDEX', '/mod/kalvidpres/index.php?id=$1', 'course'); - - return $rules; - - } - - /** - * Define the restore log rules that will be applied - * by the {@link restore_logs_processor} when restoring - * kalvidpres logs. It must return one array - * of {@link restore_log_rule} objects - */ - static public function define_restore_log_rules() { - $rules = array(); - - $rules[] = new restore_log_rule('kalvidpres', 'view', 'view.php?id={course_module}', '{kalvidpres}'); - - return $rules; - } - - /** - * Define the restore log rules that will be applied - * by the {@link restore_logs_processor} when restoring - * course logs. It must return one array - * of {@link restore_log_rule} objects - * - * Note this rules are applied when restoring course logs - * by the restore final task, but are defined here at - * activity level. All them are rules not linked to any module instance (cmid = 0) - */ - static public function define_restore_log_rules_for_course() { - $rules = array(); - - // Fix old wrong uses (missing extension) - $rules[] = new restore_log_rule('kalvidpres', 'view all', 'index.php?id={course}', null); - - return $rules; - } -} diff --git a/mod/kalvidpres/backup/moodle2/restore_kalvidpres_stepslib.php b/mod/kalvidpres/backup/moodle2/restore_kalvidpres_stepslib.php deleted file mode 100644 index a74cc417ea761..0000000000000 --- a/mod/kalvidpres/backup/moodle2/restore_kalvidpres_stepslib.php +++ /dev/null @@ -1,62 +0,0 @@ -. - -/** - * Kaltura video presentation stepslib file. - * - * @package mod_kalvidpres - * @author Remote-Learner.net Inc - * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later - * @copyright (C) 2014 Remote Learner.net Inc http://www.remote-learner.net - */ - -/** - * Define all the restore steps that will be used by the restore_kalvidpres_activity_task - */ - -/** - * Structure step to restore one kalvidpres activity - */ -class restore_kalvidpres_activity_structure_step extends restore_activity_structure_step { - - protected function define_structure() { - - $paths = array(); - - $paths[] = new restore_path_element('kalvidpres', '/activity/kalvidpres'); - - // Return the paths wrapped into standard activity structure - return $this->prepare_activity_structure($paths); - } - - protected function process_kalvidpres($data) { - global $DB; - - $data = (object)$data; - $oldid = $data->id; - $data->course = $this->get_courseid(); - - $data->timemodified = $this->apply_date_offset($data->timemodified); - - // insert the kalvidpres record - $newitemid = $DB->insert_record('kalvidpres', $data); - // immediately after inserting "activity" record, call this - $this->apply_activity_instance($newitemid); - } - - protected function after_execute() { - // Add kalvidpres related files, no need to match by itemname (just internally handled context) - $this->add_related_files('mod_kalvidpres', 'intro', null); - } -} diff --git a/mod/kalvidpres/backup/moodle2/restore_kalvidres_activity_task.class.php b/mod/kalvidpres/backup/moodle2/restore_kalvidres_activity_task.class.php deleted file mode 100644 index fbd26b2b83f26..0000000000000 --- a/mod/kalvidpres/backup/moodle2/restore_kalvidres_activity_task.class.php +++ /dev/null @@ -1,107 +0,0 @@ -. - -/** - * Kaltura video resource restore activity tasks script. - * - * @package mod_kalvidres - * @author Remote-Learner.net Inc - * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later - * @copyright (C) 2014 Remote Learner.net Inc http://www.remote-learner.net - */ - -defined('MOODLE_INTERNAL') || die(); - -require_once($CFG->dirroot.'/mod/kalvidres/backup/moodle2/restore_kalvidres_stepslib.php'); - -/** - * kalvidres restore task that provides all the settings and steps to perform one - * complete restore of the activity - */ -class restore_kalvidres_activity_task extends restore_activity_task { - - /** - * Define (add) particular settings this activity can have - */ - protected function define_my_settings() { - // No particular settings for this activity - } - - /** - * Define (add) particular steps this activity can have - */ - protected function define_my_steps() { - // Certificate only has one structure step - $this->add_step(new restore_kalvidres_activity_structure_step('kalvidres_structure', 'kalvidres.xml')); - } - - /** - * Define the contents in the activity that must be - * processed by the link decoder - */ - static public function define_decode_contents() { - $contents = array(); - - $contents[] = new restore_decode_content('kalvidres', array('intro'), 'kalvidres'); - - return $contents; - } - - /** - * Define the decoding rules for links belonging - * to the activity to be executed by the link decoder - */ - static public function define_decode_rules() { - $rules = array(); - - $rules[] = new restore_decode_rule('KALVIDRESVIEWBYID', '/mod/kalvidres/view.php?id=$1', 'course_module'); - $rules[] = new restore_decode_rule('KALVIDRESINDEX', '/mod/kalvidres/index.php?id=$1', 'course'); - - return $rules; - - } - - /** - * Define the restore log rules that will be applied - * by the {@link restore_logs_processor} when restoring - * kalvidres logs. It must return one array - * of {@link restore_log_rule} objects - */ - static public function define_restore_log_rules() { - $rules = array(); - - $rules[] = new restore_log_rule('kalvidres', 'view', 'view.php?id={course_module}', '{kalvidres}'); - - return $rules; - } - - /** - * Define the restore log rules that will be applied - * by the {@link restore_logs_processor} when restoring - * course logs. It must return one array - * of {@link restore_log_rule} objects - * - * Note this rules are applied when restoring course logs - * by the restore final task, but are defined here at - * activity level. All them are rules not linked to any module instance (cmid = 0) - */ - static public function define_restore_log_rules_for_course() { - $rules = array(); - - // Fix old wrong uses (missing extension) - $rules[] = new restore_log_rule('kalvidres', 'view all', 'index.php?id={course}', null); - - return $rules; - } -} diff --git a/mod/kalvidpres/backup/moodle2/restore_kalvidres_stepslib.php b/mod/kalvidpres/backup/moodle2/restore_kalvidres_stepslib.php deleted file mode 100644 index 9aaac8a0bfbc5..0000000000000 --- a/mod/kalvidpres/backup/moodle2/restore_kalvidres_stepslib.php +++ /dev/null @@ -1,62 +0,0 @@ -. - -/** - * Kaltura video resource restore stepslib script. - * - * @package mod_kalvidres - * @author Remote-Learner.net Inc - * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later - * @copyright (C) 2014 Remote Learner.net Inc http://www.remote-learner.net - */ - -/** - * Define all the restore steps that will be used by the restore_kalvidres_activity_task - */ - -/** - * Structure step to restore one kalvidres activity - */ -class restore_kalvidres_activity_structure_step extends restore_activity_structure_step { - - protected function define_structure() { - - $paths = array(); - - $paths[] = new restore_path_element('kalvidres', '/activity/kalvidres'); - - // Return the paths wrapped into standard activity structure - return $this->prepare_activity_structure($paths); - } - - protected function process_kalvidres($data) { - global $DB; - - $data = (object)$data; - $oldid = $data->id; - $data->course = $this->get_courseid(); - - $data->timemodified = $this->apply_date_offset($data->timemodified); - - // insert the kalvidres record - $newitemid = $DB->insert_record('kalvidres', $data); - // immediately after inserting "activity" record, call this - $this->apply_activity_instance($newitemid); - } - - protected function after_execute() { - // Add kalvidres related files, no need to match by itemname (just internally handled context) - $this->add_related_files('mod_kalvidres', 'intro', null); - } -} diff --git a/mod/kalvidpres/db/access.php b/mod/kalvidpres/db/access.php deleted file mode 100644 index 71c0be5111e0e..0000000000000 --- a/mod/kalvidpres/db/access.php +++ /dev/null @@ -1,36 +0,0 @@ -. - -/** - * Kaltura video presentation access file. - * - * @package mod_kalvidpres - * @author Remote-Learner.net Inc - * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later - * @copyright (C) 2014 Remote Learner.net Inc http://www.remote-learner.net - */ - -$capabilities = array( - - 'mod/kalvidpres:addinstance' => array( - 'riskbitmask' => RISK_XSS, - 'captype' => 'write', - 'contextlevel' => CONTEXT_COURSE, - 'archetypes' => array( - 'editingteacher' => CAP_ALLOW, - 'manager' => CAP_ALLOW - ), - 'clonepermissionsfrom' => 'moodle/course:manageactivities' - ), -); \ No newline at end of file diff --git a/mod/kalvidpres/db/install.xml b/mod/kalvidpres/db/install.xml deleted file mode 100644 index 3b038ac03a336..0000000000000 --- a/mod/kalvidpres/db/install.xml +++ /dev/null @@ -1,36 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    -
    -
    \ No newline at end of file diff --git a/mod/kalvidpres/db/log.php b/mod/kalvidpres/db/log.php deleted file mode 100644 index e40a56b2a5788..0000000000000 --- a/mod/kalvidpres/db/log.php +++ /dev/null @@ -1,31 +0,0 @@ -. - -/** - * Kaltura video presentation log file. - * - * @package mod_kalvidpres - * @author Remote-Learner.net Inc - * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later - * @copyright (C) 2014 Remote Learner.net Inc http://www.remote-learner.net - */ - - -defined('MOODLE_INTERNAL') || die(); - -global $DB; - -$logs = array( - array('module' => 'kalvidpres', 'action' => 'view', 'mtable' => 'kalvidpres', 'field' => 'name'), -); \ No newline at end of file diff --git a/mod/kalvidpres/db/upgrade.php b/mod/kalvidpres/db/upgrade.php deleted file mode 100644 index 8c7b3d22ae915..0000000000000 --- a/mod/kalvidpres/db/upgrade.php +++ /dev/null @@ -1,96 +0,0 @@ -. - -/** - * Kaltura video presentation upgrade file. - * - * @package mod_kalvidpres - * @author Remote-Learner.net Inc - * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later - * @copyright (C) 2014 Remote Learner.net Inc http://www.remote-learner.net - */ - -function xmldb_kalvidpres_upgrade($oldversion) { - global $CFG, $DB; - - $dbman = $DB->get_manager(); - - if ($oldversion < 2011111112) { - - // Changing type of field intro on table kalvidpres to text - $table = new xmldb_table('kalvidpres'); - $field = new xmldb_field('intro', XMLDB_TYPE_TEXT, 'small', null, null, null, null, 'name'); - - // Launch change of type for field intro - $dbman->change_field_type($table, $field); - - // kalvidpres savepoint reached - upgrade_mod_savepoint(true, 2011111112, 'kalvidpres'); - } - - if ($oldversion < 2012010301) { - - // Define index doc_entry_id_idx (not unique) to be dropped form kalvidpres - $table = new xmldb_table('kalvidpres'); - $index = new xmldb_index('doc_entry_id_idx', XMLDB_INDEX_UNIQUE, array('doc_entry_id')); - - // Conditionally launch drop index doc_entry_id_idx - if ($dbman->index_exists($table, $index)) { - $dbman->drop_index($table, $index); - } - - // Define index doc_entry_id_idx (not unique) to be added to kalvidpres - $index = new xmldb_index('doc_entry_id_idx', XMLDB_INDEX_NOTUNIQUE, array('doc_entry_id')); - - // Conditionally launch add index doc_entry_id_idx - if (!$dbman->index_exists($table, $index)) { - $dbman->add_index($table, $index); - } - - // kalvidpres savepoint reached - upgrade_mod_savepoint(true, 2012010301, 'kalvidpres'); - } - - if ($oldversion < 2014013000) { - - // Define field source to be added to kalvidpres. - $table = new xmldb_table('kalvidpres'); - $field = new xmldb_field('source', XMLDB_TYPE_TEXT, null, null, null, null, null, 'width'); - - // Conditionally launch add field source. - if (!$dbman->field_exists($table, $field)) { - $dbman->add_field($table, $field); - } - - // Kalvidpres savepoint reached. - upgrade_mod_savepoint(true, 2014013000, 'kalvidpres'); - } - - if ($oldversion < 2014013001) { - - // Define field metadata to be added to kalvidpres. - $table = new xmldb_table('kalvidpres'); - $field = new xmldb_field('metadata', XMLDB_TYPE_TEXT, null, null, null, null, null, 'source'); - - // Conditionally launch add field metadata. - if (!$dbman->field_exists($table, $field)) { - $dbman->add_field($table, $field); - } - - // Kalvidassign savepoint reached. - upgrade_mod_savepoint(true, 2014013001, 'kalvidpres'); - } - - return true; -} diff --git a/mod/kalvidpres/lang/en/kalvidpres.php b/mod/kalvidpres/lang/en/kalvidpres.php deleted file mode 100644 index da00347ea75cc..0000000000000 --- a/mod/kalvidpres/lang/en/kalvidpres.php +++ /dev/null @@ -1,36 +0,0 @@ -. - -/** - * Kaltura video presentation language file. - * - * @package mod_kalvidpres - * @author Remote-Learner.net Inc - * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later - * @copyright (C) 2014 Remote Learner.net Inc http://www.remote-learner.net - */ - -$string['modulenameplural'] = 'Kaltura Video Presentation'; -$string['modulename'] = 'Kaltura Video Presentation'; -$string['modulename_help'] = 'The Kaltura Video Presentation enables a teacher to create a resource using a Kaltura video.'; -$string['pluginadministration'] = 'Kaltura Video Presentation'; -$string['pluginname'] = 'Kaltura Video Presentation'; -$string['name'] = 'Name'; -$string['novidsource'] = 'No media content found. You must add media content in order to save a video presentation.'; -$string['video_hdr'] = 'Video'; -$string['add_video'] = 'Add media'; -$string['invalidid'] = 'Invalid ID'; -$string['invalid_source_parameter'] = 'Invalid source parameter'; -$string['replace_video'] = 'Replace media'; -$string['kalvidpres:addinstance'] = 'Add a Kaltura Video Presentation'; diff --git a/mod/kalvidpres/lang/en/kalvidres.php b/mod/kalvidpres/lang/en/kalvidres.php deleted file mode 100644 index 8fcff45e8d121..0000000000000 --- a/mod/kalvidpres/lang/en/kalvidres.php +++ /dev/null @@ -1,36 +0,0 @@ -. - -/** - * Kaltura video resource language file. - * - * @package mod_kalvidres - * @author Remote-Learner.net Inc - * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later - * @copyright (C) 2014 Remote Learner.net Inc http://www.remote-learner.net - */ -$string['modulenameplural'] = 'Kaltura Video Resource'; -$string['modulename'] = 'Kaltura Video Resource'; -$string['modulename_help'] = 'The Kaltura Video Resource enables a teacher to create a resource using a Kaltura video.'; -$string['pluginadministration'] = 'Kaltura Video Resource'; -$string['pluginname'] = 'Kaltura Video Resource'; -$string['name'] = 'Name'; -$string['novidsource'] = 'No media content found. You must add media content in order to save a video resource.'; -$string['video_hdr'] = 'Video'; -$string['add_video'] = 'Add media'; -$string['invalidid'] = 'Invalid ID'; -$string['invalid_launch_parameters'] = 'Invalid launch parameters'; -$string['invalid_source_parameter'] = 'Invalid source parameter'; -$string['replace_video'] = 'Replace media'; -$string['kalvidres:addinstance'] = 'Add a Kaltura Video Resource'; diff --git a/mod/kalvidpres/lib.php b/mod/kalvidpres/lib.php deleted file mode 100644 index 02a16f008a7de..0000000000000 --- a/mod/kalvidpres/lib.php +++ /dev/null @@ -1,199 +0,0 @@ -. - -/** - * Kaltura video presentation main library file. - * - * @package mod_kalvidpres - * @author Remote-Learner.net Inc - * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later - * @copyright (C) 2014 Remote Learner.net Inc http://www.remote-learner.net - */ - -if (!defined('MOODLE_INTERNAL')) { - die('Direct access to this script is forbidden.'); -} - -/** - * Given an object containing all the necessary data, - * (defined by the form in mod_form.php) this function - * will create a new instance and return the id number - * of the new instance. - * - * @param object $kalvidpres An object from the form in mod_form.php - * @return int The id of the newly inserted kalvidassign record - */ -function kalvidpres_add_instance($kalvidpres) { - global $DB, $CFG; - require_once($CFG->dirroot.'/local/kaltura/locallib.php'); - - $kalvidpres->timecreated = time(); - - $urlparts = parse_url($kalvidpres->source); - if (!empty($urlparts['path'])) { - $kalvidpres->source = 'http://'.KALTURA_URI_TOKEN.$urlparts['path']; - } - - $kalvidpres->id = $DB->insert_record('kalvidpres', $kalvidpres); - - return $kalvidpres->id; -} - -/** - * Given an object containing all the necessary data, - * (defined by the form in mod_form.php) this function - * will update an existing instance with new data. - * - * @param object $kalvidpres An object from the form in mod_form.php - * @return boolean Success/Fail - */ -function kalvidpres_update_instance($kalvidpres) { - global $DB, $CFG; - require_once($CFG->dirroot.'/local/kaltura/locallib.php'); - - $kalvidpres->timemodified = time(); - $kalvidpres->id = $kalvidpres->instance; - - $urlparts = parse_url($kalvidpres->source); - if (!empty($urlparts['path'])) { - $kalvidpres->source = 'http://'.KALTURA_URI_TOKEN.$urlparts['path']; - } - - $updated = $DB->update_record('kalvidpres', $kalvidpres); - - return $updated; -} - -/** - * Given an ID of an instance of this module, - * this function will permanently delete the instance - * and any data that depends on it. - * - * @param int $id Id of the module instance - * @return boolean Success/Failure - */ -function kalvidpres_delete_instance($id) { - global $DB; - - if (! $kalvidpres = $DB->get_record('kalvidpres', array('id' => $id))) { - return false; - } - - $DB->delete_records('kalvidpres', array('id' => $kalvidpres->id)); - - return true; -} - -/** - * Return a small object with summary information about what a - * user has done with a given particular instance of this module - * Used for user activity reports. - * $return->time = the time they did it - * $return->info = a short text description - * - * @return null - * @todo Finish documenting this function - */ -function kalvidpres_user_outline($course, $user, $mod, $kalvidpres) { - $return = new stdClass; - $return->time = 0; - $return->info = ''; - return $return; -} - -/** - * Print a detailed representation of what a user has done with - * a given particular instance of this module, for user activity reports. - * - * @return boolean - * @todo Finish documenting this function - */ -function kalvidpres_user_complete($course, $user, $mod, $kalvidpres) { - return true; -} - -/** - * Given a course and a time, this module should find recent activity - * that has occurred in kalvidpres activities and print it out. - * Return true if there was output, or false is there was none. - * - * @return boolean - * @todo Finish documenting this function - */ -function kalvidpres_print_recent_activity($course, $viewfullnames, $timestart) { - return false; -} - -/** - * Function to be run periodically according to the moodle cron - * This function searches for things that need to be done, such - * as sending out mail, toggling flags etc ... - * - * @return boolean - */ -function kalvidpres_cron () { - return false; -} - -/** - * Must return an array of users who are participants for a given instance - * of kalvidpres. Must include every user involved in the instance, independient - * of his role (student, teacher, admin...). The returned objects must contain - * at least id property. See other modules as example. - * - * @param int $kalvidpres ID of an instance of this module - * @return boolean|array false if no participants, array of objects otherwise - */ -function kalvidpres_get_participants($kalvidpresid) { - return false; -} - -/** - * @param string $feature FEATURE_xx constant for requested feature - * @return mixed True if module supports feature, null if doesn't know - */ -function kalvidpres_supports($feature) { - switch($feature) { - case FEATURE_MOD_ARCHETYPE: - return MOD_ARCHETYPE_RESOURCE; - break; - case FEATURE_GROUPS: - return true; - break; - case FEATURE_GROUPINGS: - return true; - break; - case FEATURE_GROUPMEMBERSONLY: - return true; - break; - case FEATURE_MOD_INTRO: - return true; - break; - case FEATURE_COMPLETION_TRACKS_VIEWS: - return false; - break; - case FEATURE_GRADE_HAS_GRADE: - return false; - break; - case FEATURE_GRADE_OUTCOMES: - return false; - break; - case FEATURE_BACKUP_MOODLE2: - return true; - break; - default: - return null; - break; - } -} diff --git a/mod/kalvidpres/lti_launch.php b/mod/kalvidpres/lti_launch.php deleted file mode 100644 index f729eabc5ebba..0000000000000 --- a/mod/kalvidpres/lti_launch.php +++ /dev/null @@ -1,74 +0,0 @@ -. - -/** - * Kaltura video presentation LTI launch page. - * - * @package mod_kalvidpres - * @author Remote-Learner.net Inc - * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later - * @copyright (C) 2014 Remote Learner.net Inc http://www.remote-learner.net - */ - -require_once(dirname(dirname(dirname(__FILE__))).'/config.php'); -require_once(dirname(dirname(dirname(__FILE__))).'/local/kaltura/locallib.php'); - -global $USER; - -require_login(); -$courseid = required_param('courseid', PARAM_INT); -$height = required_param('height', PARAM_INT); -$width = required_param('width', PARAM_INT); -$withblocks = optional_param('withblocks', 0, PARAM_INT); -$source = optional_param('source', '', PARAM_URL); - -$context = context_course::instance($courseid); - -// If the user isn't a teacher or they are not enrolled in the course context then return with an error. -if (!has_capability('mod/kalvidpres:addinstance', $context) && is_guest($context)) { - echo get_string('nocapabilitytousethisservice', 'error'); - die(); -} - -$course = get_course($courseid); - -$launch = array(); -$launch['id'] = 1; -$launch['cmid'] = 0; -$launch['title'] = 'Kaltura video presentation'; -$launch['module'] = KAF_BROWSE_EMBED_MODULE; -$launch['course'] = $course; -$launch['width'] = $width; -$launch['height'] = $height; -$launch['custom_publishdata'] = ''; -$launch['custom_disable_add_new'] = 'yes'; -$launch['custom_filter_type'] = 'VideoPresentations'; - -$source = local_kaltura_add_kaf_uri_token($source); - -if (false === local_kaltura_url_contains_configured_hostname($source) && !empty($source)) { - echo get_string('invalid_source_parameter', 'mod_kalvidpres'); - die; -} else { - $launch['source'] = urldecode($source); -} - -if (local_kaltura_validate_browseembed_required_params($launch)) { - $content = local_kaltura_request_lti_launch($launch, $withblocks); - echo $content; -} else { - echo get_string('invalid_launch_parameters', 'mod_kalvidpres'); -} diff --git a/mod/kalvidpres/mod_form.php b/mod/kalvidpres/mod_form.php deleted file mode 100644 index 54137b888935c..0000000000000 --- a/mod/kalvidpres/mod_form.php +++ /dev/null @@ -1,261 +0,0 @@ -. - -/** - * Kaltura video presentation formslib class. - * - * @package mod_kalvidpres - * @author Remote-Learner.net Inc - * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later - * @copyright (C) 2014 Remote Learner.net Inc http://www.remote-learner.net - */ - -if (!defined('MOODLE_INTERNAL')) { - die('Direct access to this script is forbidden.'); -} - -require_once(dirname(dirname(dirname(__FILE__))).'/course/moodleform_mod.php'); -require_once(dirname(dirname(dirname(__FILE__))).'/local/kaltura/locallib.php'); - -class mod_kalvidpres_mod_form extends moodleform_mod { - /** @var string Part of the id for the add video button. */ - protected $addvideobutton = 'add_video'; - - /** - * Forms lib definition function - */ - public function definition() { - global $CFG, $COURSE, $PAGE; - - $PAGE->requires->css('/mod/kalvidpres/styles.css'); - $pageclass = 'kaltura-kalvidpres-body'; - $PAGE->add_body_class($pageclass); - - $params = array( - 'withblocks' => 0, - 'courseid' => $COURSE->id, - 'width' => KALTURA_PANEL_WIDTH, - 'height' => KALTURA_PANEL_HEIGHT - ); - - $url = new moodle_url('/mod/kalvidpres/lti_launch.php', $params); - - $params = array( - 'addvidbtnid' => 'id_'.$this->addvideobutton, - 'ltilaunchurl' => $url->out(), - 'height' => KALTURA_PANEL_HEIGHT, - 'width' => KALTURA_PANEL_WIDTH, - 'modulename' => 'kalvidpres' - ); - - $PAGE->requires->yui_module('moodle-local_kaltura-ltipanel', 'M.local_kaltura.init', array($params), null, true); - // Make replace media language string available to the YUI modules - $PAGE->requires->string_for_js('replace_video', 'kalvidpres'); - - // Require a YUI module to make the object tag be as large as possible. - $params = array( - 'bodyclass' => $pageclass, - 'lastheight' => null, - 'padding' => 15 - ); - $PAGE->requires->yui_module('moodle-local_kaltura-lticontainer', 'M.local_kaltura.init', array($params), null, true); - - $mform =& $this->_form; - - // This line is needed to avoid a PHP warning when the form is submitted. - // Because this value is set as the default for one of the formslib elements. - $uiconf_id = ''; - - /* Hidden fields */ - $attr = array('id' => 'entry_id'); - $mform->addElement('hidden', 'entry_id', '', $attr); - $mform->setType('entry_id', PARAM_NOTAGS); - - $attr = array('id' => 'source'); - $mform->addElement('hidden', 'source', '', $attr); - $mform->setType('source', PARAM_URL); - - $attr = array('id' => 'video_title'); - $mform->addElement('hidden', 'video_title', 'x', $attr); - $mform->setType('video_title', PARAM_TEXT); - - $attr = array('id' => 'uiconf_id'); - $mform->addElement('hidden', 'uiconf_id', '', $attr); - $mform->setDefault('uiconf_id', $uiconf_id); - $mform->setType('uiconf_id', PARAM_INT); - - $attr = array('id' => 'video_entry_id'); - $mform->addElement('hidden', 'video_entry_id', '', $attr); - $mform->setDefault('video_entry_id', 'x'); - $mform->setType('video_entry_id', PARAM_INT); - - $attr = array('id' => 'doc_entry_id'); - $mform->addElement('hidden', 'doc_entry_id', '', $attr); - $mform->setDefault('doc_entry_id', 'x'); - $mform->setType('doc_entry_id', PARAM_INT); - - $attr = array('id' => 'widescreen'); - $mform->addElement('hidden', 'widescreen', 'x', $attr); - $mform->setDefault('widescreen', 0); - $mform->setType('widescreen', PARAM_INT); - - $attr = array('id' => 'height'); - $mform->addElement('hidden', 'height', '', $attr); - $mform->setDefault('height', '365'); - $mform->setType('height', PARAM_TEXT); - - $attr = array('id' => 'width'); - $mform->addElement('hidden', 'width', '', $attr); - $mform->setDefault('width', '400'); - $mform->setType('width', PARAM_TEXT); - - $attr = array('id' => 'metadata'); - $mform->addElement('hidden', 'metadata', '', $attr); - $mform->setType('metadata', PARAM_TEXT); - - $mform->addElement('header', 'general', get_string('general', 'form')); - - $mform->addElement('text', 'name', get_string('name', 'kalvidpres'), array('size' => '64')); - - if (!empty($CFG->formatstringstriptags)) { - $mform->setType('name', PARAM_TEXT); - } else { - $mform->setType('name', PARAM_CLEANHTML); - } - - $mform->addRule('name', null, 'required', null, 'client'); - - $this->add_intro_editor(false); - - $mform->addElement('header', 'video', get_string('video_hdr', 'kalvidpres')); - $this->add_video_definition($mform); - - $this->standard_coursemodule_elements(); - - $this->add_action_buttons(); - - $mform->addElement('html', html_writer::empty_tag('input', array('type' => 'hidden', 'id' => 'closeltipanel', 'value' => 0))); - } - - /** - * This function adds the video thumbnail element and buttons to the form. - * @param MoodleQuickForm $mform An instance of MoodleQuickForm used to add elements to the form. - */ - private function add_video_definition($mform) { - $addinstance = empty($this->current->entry_id) ? true : false; - - $thumbnail = $this->get_thumbnail_markup(!$addinstance); - - $videopreview = $this->get_iframe_video_preview_markup($addinstance); - - $mform->addElement('static', 'add_video_thumb', ' ', $thumbnail); - $mform->addElement('static', 'add_video_preview', ' ', $videopreview); - - $videogroup = array(); - if ($addinstance) { - $videogroup[] =& $mform->createElement('button', $this->addvideobutton, get_string('add_video', 'kalvidpres')); - } else { - $videogroup[] =& $mform->createElement('button', $this->addvideobutton, get_string('replace_video', 'kalvidpres')); - } - - $mform->addGroup($videogroup, 'video_group', ' ', ' ', false); - } - - /** - * This functions returns the markup to display a thumbnail image. - * @param bool $hide Set to true to hide it, otherwise false. When set to hide the thumbnail markup is still rendered - * but the display style is set to none. The reason for this is that the YUI module uses the img tag to place the iframe just below it. - * As well as to hide the image tag when a new video is selected. - * @return string Returns an image element markup. - */ - private function get_thumbnail_markup($hide = false) { - $source = new moodle_url('/local/kaltura/pix/vidThumb.png'); - $alt = get_string('add_video', 'kalvidpres'); - $title = get_string('add_video', 'kalvidpres'); - - $attr = array( - 'id' => 'video_thumbnail', - 'src' => $source->out(), - 'alt' => $alt, - 'title' => $title - ); - - if ($hide) { - $attr['style'] = 'display:none'; - } - - $output = html_writer::empty_tag('img', $attr); - - return $output; - } - - /** - * This functions returns iframe markup for displaying the video preview interface. - * @param bool $hide True to hide the element, otherwise false. - * @return string Returns an iframe markup - */ - private function get_iframe_video_preview_markup($hide = true) { - $width = empty($this->current->width) ? '0px' : $this->current->width.'px'; - $height = empty($this->current->height) ? 'opx' : $this->current->height.'px'; - $source = empty($this->current->source) ? '' : $this->current->source; - - $params = array( - 'id' => 'contentframe', - 'src' => $source, - 'height' => $height, - 'width' => $width, - 'allowfullscreen' => 'true', - 'webkitallowfullscreen' => 'true', - 'mozallowfullscreen' => 'true' - ); - - if ($hide) { - $params['style'] = 'display:none'; - } - - // If the source attribute is not empty, initiate an LTI launch to avoid having ACL issues when another user with permissions edits the module. - // This also assists with full screen functionality on some mobile devices. - if (!empty($source)) { - $ltiparams = array( - 'courseid' => $this->current->course, - 'height' => $height, - 'width' => $width, - 'withblocks' => 0, - 'source' => $source - ); - - $url = new moodle_url('/mod/kalvidpres/lti_launch.php', $ltiparams); - $params['src'] = $url->out(false); - } - - return html_writer::tag('iframe', '', $params); - } - - /** - * This function validates the form on save. - * - * @param array $data Array of form values - * @param array $files Array of files - * @return array $errors Array of error messages - */ - public function validation($data, $files) { - $errors = array(); - - if (empty($data['source'])) { - $errors['add_video_thumb'] = get_string('novidsource', 'kalvidpres'); - } - - return $errors; - } -} diff --git a/mod/kalvidpres/pix/icon.gif b/mod/kalvidpres/pix/icon.gif deleted file mode 100644 index 550df5db8c43d778c40a1290f1d3a724d0e88133..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 128 zcmZ?wbhEHb6krfwSoEKPf#I&Pahh>jn(@rE0|yTL|Np+Z^fq{iV2gnAh z6kuRrcJ. - -/** - * Kaltura video presentation renderer file. - * - * @package mod_kalvidpres - * @author Remote-Learner.net Inc - * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later - * @copyright (C) 2014 Remote Learner.net Inc http://www.remote-learner.net - */ - -if (!defined('MOODLE_INTERNAL')) { - die('Direct access to this script is forbidden.'); -} - -require_once(dirname(dirname(dirname(__FILE__))).'/local/kaltura/locallib.php'); - -class mod_kalvidpres_renderer extends plugin_renderer_base { - /** - * This function displays the iframe markup. - * @param object $kalvidpres A Kaltura video resrouce instance object. - * @param int $courseid A course id. - * @return string HTML markup. - */ - public function display_iframe($kalvidpres, $courseid) { - $params = array( - 'courseid' => $courseid, - 'height' => $kalvidpres->height, - 'width' => $kalvidpres->width, - 'withblocks' => 0, - 'source' => $kalvidpres->source - ); - $url = new moodle_url('/mod/kalvidpres/lti_launch.php', $params); - - $attr = array( - 'id' => 'contentframe', - 'height' => '100%', - 'width' => $kalvidpres->width, - 'src' => $url->out(false), - 'allowfullscreen' => 'true', - 'webkitallowfullscreen' => 'true', - 'mozallowfullscreen' => 'true' - ); - - $output = html_writer::tag('iframe', '', $attr); - $output = html_writer::tag('div', $output, array('id' => 'kalvid_content')); - return $output; - } -} diff --git a/mod/kalvidpres/styles.css b/mod/kalvidpres/styles.css deleted file mode 100644 index 7951a285376b4..0000000000000 --- a/mod/kalvidpres/styles.css +++ /dev/null @@ -1,38 +0,0 @@ -#id_add_video { - float: left; -} - -#id_video_preview { - float: left; - margin-left: 5px; -} - -#slider_border { - width: 100%; - height: 18px; - border: 1px solid #000000; - overflow: hidden; -} - -#progress_bar { - float: left; - height: 18px; - width: 0%; - /*border-right: 1px solid #000000;*/ - background: #00FF00; -} - -#loading_text { - position: relative; - top: -18px; - font-weight: bold; - left: 12px; -} - -#kalvid_content { - text-align: center; -} - -#id_video #video_thumbnail { - float: left; -} diff --git a/mod/kalvidpres/version.php b/mod/kalvidpres/version.php deleted file mode 100644 index 597bf0bfbe228..0000000000000 --- a/mod/kalvidpres/version.php +++ /dev/null @@ -1,36 +0,0 @@ -. - -/** - * Kaltura video presentation version file. - * - * @package mod_kalvidpres - * @author Remote-Learner.net Inc - * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later - * @copyright (C) 2014 Remote Learner.net Inc http://www.remote-learner.net - */ - -if (!defined('MOODLE_INTERNAL')) { - die('Direct access to this script is forbidden.'); -} - -$module->version = 2014013001; -$module->component = 'mod_kalvidpres'; -$module->release = 'Kaltura release 4.0.00 (RL: TBD)'; -$module->requires = 2013051400; -$module->cron = 0; -$module->maturity = MATURITY_STABLE; -$module->dependencies = array( - 'local_kaltura' => 2014013000.01 -); diff --git a/mod/kalvidpres/view.php b/mod/kalvidpres/view.php deleted file mode 100644 index b38c6924270cf..0000000000000 --- a/mod/kalvidpres/view.php +++ /dev/null @@ -1,89 +0,0 @@ -. - -/** - * Kaltura video presentation view page. - * - * @package mod_kalvidpres - * @author Remote-Learner.net Inc - * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later - * @copyright (C) 2014 Remote Learner.net Inc http://www.remote-learner.net - */ - -require_once(dirname(dirname(dirname(__FILE__))).'/config.php'); - -$id = optional_param('id', 0, PARAM_INT); - -// Retrieve module instance. -if (empty($id)) { - print_error('invalidid', 'kalvidpres'); -} - -if (!empty($id)) { - - if (!$cm = get_coursemodule_from_id('kalvidpres', $id)) { - print_error('invalidcoursemodule'); - } - - if (!$course = $DB->get_record('course', array('id' => $cm->course))) { - print_error('coursemisconf'); - } - - if (!$kalvidpres = $DB->get_record('kalvidpres', array("id" => $cm->instance))) { - print_error('invalidid', 'kalvidpres'); - } -} - -require_course_login($course->id, true, $cm); - -global $SESSION, $CFG; - -$PAGE->set_url('/mod/kalvidpres/view.php', array('id' => $id)); -$PAGE->set_title(format_string($kalvidpres->name)); -$PAGE->set_heading($course->fullname); -$pageclass = 'kaltura-kalvidpres-body'; -$PAGE->add_body_class($pageclass); - -$context = $PAGE->context; - -add_to_log($course->id, 'kalvidpres', 'view video resource', 'view.php?id='.$cm->id, $kalvidpres->id, $cm->id); - -$completion = new completion_info($course); -$completion->set_module_viewed($cm); - -echo $OUTPUT->header(); - -$renderer = $PAGE->get_renderer('mod_kalvidpres'); - -echo $OUTPUT->box_start('generalbox'); - -echo format_module_intro('kalvidpres', $kalvidpres, $cm->id); - -echo $OUTPUT->box_end(); - -// Require a YUI module to make the object tag be as large as possible. -$params = array( - 'bodyclass' => $pageclass, - 'lastheight' => null, - 'padding' => 15, - 'kalvidwidth' => $kalvidpres->width -); -$PAGE->requires->yui_module('moodle-local_kaltura-lticontainer', 'M.local_kaltura.init', array($params), null, true); - -// Set iframe width to fill the entire center region per KALDEV-562. -$kalvidpres->width = '100%'; - -echo $renderer->display_iframe($kalvidpres, $course->id); - -echo $OUTPUT->footer(); diff --git a/mod/kalvidres/backup/moodle2/backup_kalvidres_activity_task.class.php b/mod/kalvidres/backup/moodle2/backup_kalvidres_activity_task.class.php deleted file mode 100644 index a73ff6be762a0..0000000000000 --- a/mod/kalvidres/backup/moodle2/backup_kalvidres_activity_task.class.php +++ /dev/null @@ -1,66 +0,0 @@ -. - -/** - * Kaltura video resource backup activity tasks script. - * - * @package mod_kalvidres - * @author Remote-Learner.net Inc - * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later - * @copyright (C) 2014 Remote Learner.net Inc http://www.remote-learner.net - */ - -require_once($CFG->dirroot.'/mod/kalvidres/backup/moodle2/backup_kalvidres_stepslib.php'); -require_once($CFG->dirroot.'/mod/kalvidres/backup/moodle2/backup_kalvidres_settingslib.php'); - -/** - * kalvidres backup task that provides all the settings and steps to perform one - * complete backup of the activity - */ -class backup_kalvidres_activity_task extends backup_activity_task { - /** - * Define (add) particular settings this activity can have - */ - protected function define_my_settings() { - // No particular settings for this activity - } - - /** - * Define (add) particular steps this activity can have - */ - protected function define_my_steps() { - // Choice only has one structure step - $this->add_step(new backup_kalvidres_activity_structure_step('kalvidres_structure', 'kalvidres.xml')); - } - - /** - * Code the transformations to perform in the activity in - * order to get transportable (encoded) links - */ - static public function encode_content_links($content) { - global $CFG; - - $base = preg_quote($CFG->wwwroot, "/"); - - // Link to the list of kalvidress - $search="/(".$base."\/mod\/kalvidres\/index.php\?id\=)([0-9]+)/"; - $content= preg_replace($search, '$@KALVIDRESINDEX*$2@$', $content); - - // Link to kalvidres view by moduleid - $search="/(".$base."\/mod\/kalvidres\/view.php\?id\=)([0-9]+)/"; - $content= preg_replace($search, '$@KALVIDRESVIEWBYID*$2@$', $content); - - return $content; - } -} diff --git a/mod/kalvidres/backup/moodle2/backup_kalvidres_settingslib.php b/mod/kalvidres/backup/moodle2/backup_kalvidres_settingslib.php deleted file mode 100644 index 4a0cd75a42b2a..0000000000000 --- a/mod/kalvidres/backup/moodle2/backup_kalvidres_settingslib.php +++ /dev/null @@ -1,26 +0,0 @@ -. - -/** - * Kaltura video resource backup settingslib script. - * - * @package mod_kalvidres - * @author Remote-Learner.net Inc - * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later - * @copyright (C) 2014 Remote Learner.net Inc http://www.remote-learner.net - */ - - // This activity has no particular settings but the inherited from the generic - // backup_activity_task so here there isn't any class definition, like the ones - // existing in /backup/moodle2/backup_settingslib.php (activities section) \ No newline at end of file diff --git a/mod/kalvidres/backup/moodle2/backup_kalvidres_stepslib.php b/mod/kalvidres/backup/moodle2/backup_kalvidres_stepslib.php deleted file mode 100644 index ae532446cc14f..0000000000000 --- a/mod/kalvidres/backup/moodle2/backup_kalvidres_stepslib.php +++ /dev/null @@ -1,46 +0,0 @@ -. - -/** - * Kaltura video resource backup stepslib script. - * - * @package mod_kalvidres - * @author Remote-Learner.net Inc - * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later - * @copyright (C) 2014 Remote Learner.net Inc http://www.remote-learner.net - */ - -/** - * Define all the backup steps that will be used by the backup_kalvidres_activity_task - */ - -/** - * Define the complete kalvidres structure for backup, with file and id annotations - */ -class backup_kalvidres_activity_structure_step extends backup_activity_structure_step { - - protected function define_structure() { - - // Define each element separated - $kalvidres = new backup_nested_element('kalvidres', array('id'), array( - 'name', 'intro', 'introformat', 'entry_id', 'video_title', - 'uiconf_id', 'widescreen', 'height', 'width', 'source', 'timemodified', 'timecreated')); - - // Define sources - $kalvidres->set_source_table('kalvidres', array('id' => backup::VAR_ACTIVITYID)); - - // Return the root element, wrapped into standard activity structure - return $this->prepare_activity_structure($kalvidres); - } -} diff --git a/mod/kalvidres/backup/moodle2/restore_kalvidres_activity_task.class.php b/mod/kalvidres/backup/moodle2/restore_kalvidres_activity_task.class.php deleted file mode 100644 index fbd26b2b83f26..0000000000000 --- a/mod/kalvidres/backup/moodle2/restore_kalvidres_activity_task.class.php +++ /dev/null @@ -1,107 +0,0 @@ -. - -/** - * Kaltura video resource restore activity tasks script. - * - * @package mod_kalvidres - * @author Remote-Learner.net Inc - * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later - * @copyright (C) 2014 Remote Learner.net Inc http://www.remote-learner.net - */ - -defined('MOODLE_INTERNAL') || die(); - -require_once($CFG->dirroot.'/mod/kalvidres/backup/moodle2/restore_kalvidres_stepslib.php'); - -/** - * kalvidres restore task that provides all the settings and steps to perform one - * complete restore of the activity - */ -class restore_kalvidres_activity_task extends restore_activity_task { - - /** - * Define (add) particular settings this activity can have - */ - protected function define_my_settings() { - // No particular settings for this activity - } - - /** - * Define (add) particular steps this activity can have - */ - protected function define_my_steps() { - // Certificate only has one structure step - $this->add_step(new restore_kalvidres_activity_structure_step('kalvidres_structure', 'kalvidres.xml')); - } - - /** - * Define the contents in the activity that must be - * processed by the link decoder - */ - static public function define_decode_contents() { - $contents = array(); - - $contents[] = new restore_decode_content('kalvidres', array('intro'), 'kalvidres'); - - return $contents; - } - - /** - * Define the decoding rules for links belonging - * to the activity to be executed by the link decoder - */ - static public function define_decode_rules() { - $rules = array(); - - $rules[] = new restore_decode_rule('KALVIDRESVIEWBYID', '/mod/kalvidres/view.php?id=$1', 'course_module'); - $rules[] = new restore_decode_rule('KALVIDRESINDEX', '/mod/kalvidres/index.php?id=$1', 'course'); - - return $rules; - - } - - /** - * Define the restore log rules that will be applied - * by the {@link restore_logs_processor} when restoring - * kalvidres logs. It must return one array - * of {@link restore_log_rule} objects - */ - static public function define_restore_log_rules() { - $rules = array(); - - $rules[] = new restore_log_rule('kalvidres', 'view', 'view.php?id={course_module}', '{kalvidres}'); - - return $rules; - } - - /** - * Define the restore log rules that will be applied - * by the {@link restore_logs_processor} when restoring - * course logs. It must return one array - * of {@link restore_log_rule} objects - * - * Note this rules are applied when restoring course logs - * by the restore final task, but are defined here at - * activity level. All them are rules not linked to any module instance (cmid = 0) - */ - static public function define_restore_log_rules_for_course() { - $rules = array(); - - // Fix old wrong uses (missing extension) - $rules[] = new restore_log_rule('kalvidres', 'view all', 'index.php?id={course}', null); - - return $rules; - } -} diff --git a/mod/kalvidres/backup/moodle2/restore_kalvidres_stepslib.php b/mod/kalvidres/backup/moodle2/restore_kalvidres_stepslib.php deleted file mode 100644 index 9aaac8a0bfbc5..0000000000000 --- a/mod/kalvidres/backup/moodle2/restore_kalvidres_stepslib.php +++ /dev/null @@ -1,62 +0,0 @@ -. - -/** - * Kaltura video resource restore stepslib script. - * - * @package mod_kalvidres - * @author Remote-Learner.net Inc - * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later - * @copyright (C) 2014 Remote Learner.net Inc http://www.remote-learner.net - */ - -/** - * Define all the restore steps that will be used by the restore_kalvidres_activity_task - */ - -/** - * Structure step to restore one kalvidres activity - */ -class restore_kalvidres_activity_structure_step extends restore_activity_structure_step { - - protected function define_structure() { - - $paths = array(); - - $paths[] = new restore_path_element('kalvidres', '/activity/kalvidres'); - - // Return the paths wrapped into standard activity structure - return $this->prepare_activity_structure($paths); - } - - protected function process_kalvidres($data) { - global $DB; - - $data = (object)$data; - $oldid = $data->id; - $data->course = $this->get_courseid(); - - $data->timemodified = $this->apply_date_offset($data->timemodified); - - // insert the kalvidres record - $newitemid = $DB->insert_record('kalvidres', $data); - // immediately after inserting "activity" record, call this - $this->apply_activity_instance($newitemid); - } - - protected function after_execute() { - // Add kalvidres related files, no need to match by itemname (just internally handled context) - $this->add_related_files('mod_kalvidres', 'intro', null); - } -} diff --git a/mod/kalvidres/db/access.php b/mod/kalvidres/db/access.php deleted file mode 100644 index 93d5f0e2e163a..0000000000000 --- a/mod/kalvidres/db/access.php +++ /dev/null @@ -1,35 +0,0 @@ -. - -/** - * Kaltura video resource accesslib. - * - * @package mod_kalvidres - * @author Remote-Learner.net Inc - * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later - * @copyright (C) 2014 Remote Learner.net Inc http://www.remote-learner.net - */ - -$capabilities = array( - 'mod/kalvidres:addinstance' => array( - 'riskbitmask' => RISK_XSS, - 'captype' => 'write', - 'contextlevel' => CONTEXT_COURSE, - 'archetypes' => array( - 'editingteacher' => CAP_ALLOW, - 'manager' => CAP_ALLOW - ), - 'clonepermissionsfrom' => 'moodle/course:manageactivities' - ), - ); \ No newline at end of file diff --git a/mod/kalvidres/db/install.xml b/mod/kalvidres/db/install.xml deleted file mode 100644 index 4da7c9abe95c3..0000000000000 --- a/mod/kalvidres/db/install.xml +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - -
    -
    -
    \ No newline at end of file diff --git a/mod/kalvidres/db/log.php b/mod/kalvidres/db/log.php deleted file mode 100644 index 2006b3cb7e043..0000000000000 --- a/mod/kalvidres/db/log.php +++ /dev/null @@ -1,28 +0,0 @@ -. - -/** - * Kaltura video resource log file. - * - * @package mod_kalvidres - * @author Remote-Learner.net Inc - * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later - * @copyright (C) 2014 Remote Learner.net Inc http://www.remote-learner.net - */ - -defined('MOODLE_INTERNAL') || die(); - -$logs = array( - array('module' => 'kalvidres', 'action' => 'view', 'mtable' => 'kalvidres', 'field' => 'name'), -); diff --git a/mod/kalvidres/db/upgrade.php b/mod/kalvidres/db/upgrade.php deleted file mode 100644 index 4eaf7a251047c..0000000000000 --- a/mod/kalvidres/db/upgrade.php +++ /dev/null @@ -1,71 +0,0 @@ -get_manager(); - - if ($oldversion < 2011110702) { - - // Changing type of field intro on table kalvidres to text. - $table = new xmldb_table('kalvidres'); - $field = new xmldb_field('intro', XMLDB_TYPE_TEXT, 'small', null, null, null, null, 'name'); - - // Launch change of type for field intro. - $dbman->change_field_type($table, $field); - - // Kalvidres savepoint reached. - upgrade_mod_savepoint(true, 2011110702, 'kalvidres'); - } - - if ($oldversion < 2014013000) { - - // Define field source to be added to kalvidres. - $table = new xmldb_table('kalvidres'); - $field = new xmldb_field('source', XMLDB_TYPE_TEXT, null, null, null, null, null, 'width'); - - // Conditionally launch add field source. - if (!$dbman->field_exists($table, $field)) { - $dbman->add_field($table, $field); - } - - // Kalvidres savepoint reached. - upgrade_mod_savepoint(true, 2014013000, 'kalvidres'); - } - - if ($oldversion < 2014013001) { - - // Define field metadata to be added to kalvidres. - $table = new xmldb_table('kalvidres'); - $field = new xmldb_field('metadata', XMLDB_TYPE_TEXT, null, null, null, null, null, 'source'); - - // Conditionally launch add field metadata. - if (!$dbman->field_exists($table, $field)) { - $dbman->add_field($table, $field); - } - - // Kalvidassign savepoint reached. - upgrade_mod_savepoint(true, 2014013001, 'kalvidres'); - } - - return true; -} diff --git a/mod/kalvidres/lang/en/kalvidres.php b/mod/kalvidres/lang/en/kalvidres.php deleted file mode 100644 index 8fcff45e8d121..0000000000000 --- a/mod/kalvidres/lang/en/kalvidres.php +++ /dev/null @@ -1,36 +0,0 @@ -. - -/** - * Kaltura video resource language file. - * - * @package mod_kalvidres - * @author Remote-Learner.net Inc - * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later - * @copyright (C) 2014 Remote Learner.net Inc http://www.remote-learner.net - */ -$string['modulenameplural'] = 'Kaltura Video Resource'; -$string['modulename'] = 'Kaltura Video Resource'; -$string['modulename_help'] = 'The Kaltura Video Resource enables a teacher to create a resource using a Kaltura video.'; -$string['pluginadministration'] = 'Kaltura Video Resource'; -$string['pluginname'] = 'Kaltura Video Resource'; -$string['name'] = 'Name'; -$string['novidsource'] = 'No media content found. You must add media content in order to save a video resource.'; -$string['video_hdr'] = 'Video'; -$string['add_video'] = 'Add media'; -$string['invalidid'] = 'Invalid ID'; -$string['invalid_launch_parameters'] = 'Invalid launch parameters'; -$string['invalid_source_parameter'] = 'Invalid source parameter'; -$string['replace_video'] = 'Replace media'; -$string['kalvidres:addinstance'] = 'Add a Kaltura Video Resource'; diff --git a/mod/kalvidres/lib.php b/mod/kalvidres/lib.php deleted file mode 100644 index 62b1f782c6f8b..0000000000000 --- a/mod/kalvidres/lib.php +++ /dev/null @@ -1,199 +0,0 @@ -. - -/** - * Kaltura video resource library script. - * - * @package mod_kalvidres - * @author Remote-Learner.net Inc - * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later - * @copyright (C) 2014 Remote Learner.net Inc http://www.remote-learner.net - */ - -if (!defined('MOODLE_INTERNAL')) { - die('Direct access to this script is forbidden.'); -} - -/** - * Given an object containing all the necessary data, - * (defined by the form in mod_form.php) this function - * will create a new instance and return the id number - * of the new instance. - * - * @param object $kalvidres An object from the form in mod_form.php - * @return int The id of the newly inserted kalvidassign record - */ -function kalvidres_add_instance($kalvidres) { - global $DB, $CFG; - require_once($CFG->dirroot.'/local/kaltura/locallib.php'); - - $kalvidres->timecreated = time(); - - $urlparts = parse_url($kalvidres->source); - if (!empty($urlparts['path'])) { - $kalvidres->source = 'http://'.KALTURA_URI_TOKEN.$urlparts['path']; - } - $kalvidres->id = $DB->insert_record('kalvidres', $kalvidres); - - return $kalvidres->id; -} - -/** - * Given an object containing all the necessary data, - * (defined by the form in mod_form.php) this function - * will update an existing instance with new data. - * - * @param object $kalvidres An object from the form in mod_form.php - * @return boolean Success/Fail - */ -function kalvidres_update_instance($kalvidres) { - global $DB, $CFG; - require_once($CFG->dirroot.'/local/kaltura/locallib.php'); - - $kalvidres->timemodified = time(); - $kalvidres->id = $kalvidres->instance; - $urlparts = parse_url($kalvidres->source); - if (!empty($urlparts['path'])) { - $kalvidres->source = 'http://'.KALTURA_URI_TOKEN.$urlparts['path']; - } - - $updated = $DB->update_record('kalvidres', $kalvidres); - - return $updated; -} - -/** - * Given an ID of an instance of this module, - * this function will permanently delete the instance - * and any data that depends on it. - * - * @param int $id Id of the module instance - * @return boolean Success/Failure - */ -function kalvidres_delete_instance($id) { - global $DB; - - if (! $kalvidres = $DB->get_record('kalvidres', array('id' => $id))) { - return false; - } - - $DB->delete_records('kalvidres', array('id' => $kalvidres->id)); - - return true; -} - -/** - * Return a small object with summary information about what a - * user has done with a given particular instance of this module - * Used for user activity reports. - * $return->time = the time they did it - * $return->info = a short text description - * - * @return null - * @todo Finish documenting this function - */ -function kalvidres_user_outline($course, $user, $mod, $kalvidres) { - $return = new stdClass; - $return->time = 0; - $return->info = ''; - return $return; -} - -/** - * Print a detailed representation of what a user has done with - * a given particular instance of this module, for user activity reports. - * - * @return boolean - * @todo Finish documenting this function - */ -function kalvidres_user_complete($course, $user, $mod, $kalvidres) { - return true; -} - -/** - * Given a course and a time, this module should find recent activity - * that has occurred in kalvidres activities and print it out. - * Return true if there was output, or false is there was none. - * - * @return boolean - * @todo Finish documenting this function - */ -function kalvidres_print_recent_activity($course, $viewfullnames, $timestart) { - // TODO: finish this function - return false; // True if anything was printed, otherwise false -} - -/** - * Function to be run periodically according to the moodle cron - * This function searches for things that need to be done, such - * as sending out mail, toggling flags etc ... - * - * @return boolean - */ -function kalvidres_cron () { - return false; -} - -/** - * Must return an array of users who are participants for a given instance - * of kalvidres. Must include every user involved in the instance, independient - * of his role (student, teacher, admin...). The returned objects must contain - * at least id property. See other modules as example. - * - * @param int $kalvidres ID of an instance of this module - * @return boolean|array false if no participants, array of objects otherwise - */ -function kalvidres_get_participants($kalvidresid) { - // TODO: finish this function - return false; -} - -/** - * @param string $feature FEATURE_xx constant for requested feature - * @return mixed True if module supports feature, null if doesn't know - */ -function kalvidres_supports($feature) { - switch($feature) { - case FEATURE_MOD_ARCHETYPE: - return MOD_ARCHETYPE_RESOURCE; - break; - case FEATURE_GROUPS: - return true; - break; - case FEATURE_GROUPINGS: - return true; - break; - case FEATURE_GROUPMEMBERSONLY: - return true; - break; - case FEATURE_MOD_INTRO: - return true; - break; - case FEATURE_COMPLETION_TRACKS_VIEWS: - return false; - break; - case FEATURE_GRADE_HAS_GRADE: - return false; - break; - case FEATURE_GRADE_OUTCOMES: - return false; - break; - case FEATURE_BACKUP_MOODLE2: - return true; - break; - default: - return null; - break; - } -} diff --git a/mod/kalvidres/lti_launch.php b/mod/kalvidres/lti_launch.php deleted file mode 100644 index 7655931c53d36..0000000000000 --- a/mod/kalvidres/lti_launch.php +++ /dev/null @@ -1,73 +0,0 @@ -. - -/** - * Kaltura video resource LTI launch page. - * - * @package mod_kalvidres - * @author Remote-Learner.net Inc - * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later - * @copyright (C) 2014 Remote Learner.net Inc http://www.remote-learner.net - */ - -require_once(dirname(dirname(dirname(__FILE__))).'/config.php'); -require_once(dirname(dirname(dirname(__FILE__))).'/local/kaltura/locallib.php'); - -global $USER; - -require_login(); - -$courseid = required_param('courseid', PARAM_INT); -$height = required_param('height', PARAM_INT); -$width = required_param('width', PARAM_INT); -$withblocks = optional_param('withblocks', 0, PARAM_INT); -$source = optional_param('source', '', PARAM_URL); - -$context = context_course::instance($courseid); - -// If the user isn't a teacher or they are not enrolled in the course context then return with an error. -if (!has_capability('mod/kalvidres:addinstance', $context) && is_guest($context)) { - echo get_string('nocapabilitytousethisservice', 'error'); - die(); -} - -$course = get_course($courseid); - -$launch = array(); -$launch['id'] = 1; -$launch['cmid'] = 0; -$launch['title'] = 'Kaltura video resource'; -$launch['module'] = KAF_BROWSE_EMBED_MODULE; -$launch['course'] = $course; -$launch['width'] = $width; -$launch['height'] = $height; -$launch['custom_publishdata'] = ''; - -$source = local_kaltura_add_kaf_uri_token($source); - -if (false === local_kaltura_url_contains_configured_hostname($source) && !empty($source)) { - echo get_string('invalid_source_parameter', 'mod_kalvidres'); - die; -} else { - $launch['source'] = urldecode($source); -} - -if (local_kaltura_validate_browseembed_required_params($launch)) { - $content = local_kaltura_request_lti_launch($launch, $withblocks); - echo $content; -} else { - echo get_string('invalid_launch_parameters', 'mod_kalvidres'); -} diff --git a/mod/kalvidres/mod_form.php b/mod/kalvidres/mod_form.php deleted file mode 100644 index c82a6e01b73bc..0000000000000 --- a/mod/kalvidres/mod_form.php +++ /dev/null @@ -1,251 +0,0 @@ -. - -/** - * Kaltura video resource formslib class. - * - * @package mod_kalvidres - * @author Remote-Learner.net Inc - * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later - * @copyright (C) 2014 Remote Learner.net Inc http://www.remote-learner.net - */ - -if (!defined('MOODLE_INTERNAL')) { - die('Direct access to this script is forbidden.'); -} - -require_once(dirname(dirname(dirname(__FILE__))).'/course/moodleform_mod.php'); -require_once(dirname(dirname(dirname(__FILE__))).'/local/kaltura/locallib.php'); - -class mod_kalvidres_mod_form extends moodleform_mod { - /** @var string Part of the id for the add video button. */ - protected $addvideobutton = 'add_video'; - - /** - * Forms lib definition function - */ - public function definition() { - global $CFG, $COURSE, $PAGE; - - $PAGE->requires->css('/mod/kalvidres/styles.css'); - $pageclass = 'kaltura-kalvidres-body'; - $PAGE->add_body_class($pageclass); - - $params = array( - 'withblocks' => 0, - 'courseid' => $COURSE->id, - 'width' => KALTURA_PANEL_WIDTH, - 'height' => KALTURA_PANEL_HEIGHT - ); - - $url = new moodle_url('/mod/kalvidres/lti_launch.php', $params); - - $params = array( - 'addvidbtnid' => 'id_'.$this->addvideobutton, - 'ltilaunchurl' => $url->out(), - 'height' => KALTURA_PANEL_HEIGHT, - 'width' => KALTURA_PANEL_WIDTH, - 'modulename' => 'kalvidres' - ); - - $PAGE->requires->yui_module('moodle-local_kaltura-ltipanel', 'M.local_kaltura.init', array($params), null, true); - // Make replace media language string available to the YUI modules - $PAGE->requires->string_for_js('replace_video', 'kalvidres'); - - // Require a YUI module to make the object tag be as large as possible. - $params = array( - 'bodyclass' => $pageclass, - 'lastheight' => null, - 'padding' => 15 - ); - $PAGE->requires->yui_module('moodle-local_kaltura-lticontainer', 'M.local_kaltura.init', array($params), null, true); - - $mform =& $this->_form; - - // This line is needed to avoid a PHP warning when the form is submitted. - // Because this value is set as the default for one of the formslib elements. - $uiconf_id = ''; - - /* Hidden fields */ - $attr = array('id' => 'entry_id'); - $mform->addElement('hidden', 'entry_id', '', $attr); - $mform->setType('entry_id', PARAM_NOTAGS); - - $attr = array('id' => 'source'); - $mform->addElement('hidden', 'source', '', $attr); - $mform->setType('source', PARAM_URL); - - $attr = array('id' => 'video_title'); - $mform->addElement('hidden', 'video_title', 'x', $attr); - $mform->setType('video_title', PARAM_TEXT); - - $attr = array('id' => 'uiconf_id'); - $mform->addElement('hidden', 'uiconf_id', '', $attr); - $mform->setDefault('uiconf_id', $uiconf_id); - $mform->setType('uiconf_id', PARAM_INT); - - $attr = array('id' => 'widescreen'); - $mform->addElement('hidden', 'widescreen', 'x', $attr); - $mform->setDefault('widescreen', 0); - $mform->setType('widescreen', PARAM_INT); - - $attr = array('id' => 'height'); - $mform->addElement('hidden', 'height', '', $attr); - $mform->setDefault('height', '365'); - $mform->setType('height', PARAM_TEXT); - - $attr = array('id' => 'width'); - $mform->addElement('hidden', 'width', '', $attr); - $mform->setDefault('width', '400'); - $mform->setType('width', PARAM_TEXT); - - $attr = array('id' => 'metadata'); - $mform->addElement('hidden', 'metadata', '', $attr); - $mform->setType('metadata', PARAM_TEXT); - - $mform->addElement('header', 'general', get_string('general', 'form')); - - $mform->addElement('text', 'name', get_string('name', 'kalvidres'), array('size' => '64')); - - if (!empty($CFG->formatstringstriptags)) { - $mform->setType('name', PARAM_TEXT); - } else { - $mform->setType('name', PARAM_CLEANHTML); - } - - $mform->addRule('name', null, 'required', null, 'client'); - - $this->add_intro_editor(false); - - $mform->addElement('header', 'video', get_string('video_hdr', 'kalvidres')); - $this->add_video_definition($mform); - - $this->standard_coursemodule_elements(); - - $this->add_action_buttons(); - - $mform->addElement('html', html_writer::empty_tag('input', array('type' => 'hidden', 'id' => 'closeltipanel', 'value' => 0))); - } - - /** - * This function adds the video thumbnail element and buttons to the form. - * @param MoodleQuickForm $mform An instance of MoodleQuickForm used to add elements to the form. - */ - private function add_video_definition($mform) { - $addinstance = empty($this->current->entry_id) ? true : false; - - $thumbnail = $this->get_thumbnail_markup(!$addinstance); - - $videopreview = $this->get_iframe_video_preview_markup($addinstance); - - $mform->addElement('static', 'add_video_thumb', ' ', $thumbnail); - $mform->addElement('static', 'add_video_preview', ' ', $videopreview); - - $videogroup = array(); - if ($addinstance) { - $videogroup[] =& $mform->createElement('button', $this->addvideobutton, get_string('add_video', 'kalvidres')); - } else { - $videogroup[] =& $mform->createElement('button', $this->addvideobutton, get_string('replace_video', 'kalvidres')); - } - - $mform->addGroup($videogroup, 'video_group', ' ', ' ', false); - } - - /** - * This functions returns the markup to display a thumbnail image. - * @param bool $hide Set to true to hide it, otherwise false. When set to hide the thumbnail markup is still rendered - * but the display style is set to none. The reason for this is that the YUI module uses the img tag to place the iframe just below it. - * As well as to hide the image tag when a new video is selected. - * @return string Returns an image element markup. - */ - private function get_thumbnail_markup($hide = false) { - $source = new moodle_url('/local/kaltura/pix/vidThumb.png'); - $alt = get_string('add_video', 'kalvidres'); - $title = get_string('add_video', 'kalvidres'); - - $attr = array( - 'id' => 'video_thumbnail', - 'src' => $source->out(), - 'alt' => $alt, - 'title' => $title - ); - - if ($hide) { - $attr['style'] = 'display:none'; - } - - $output = html_writer::empty_tag('img', $attr); - - return $output; - } - - /** - * This functions returns iframe markup for displaying the video preview interface. - * @param bool $hide True to hide the element, otherwise false. - * @return string Returns an iframe markup - */ - private function get_iframe_video_preview_markup($hide = true) { - $width = empty($this->current->width) ? '0px' : $this->current->width.'px'; - $height = empty($this->current->height) ? 'opx' : $this->current->height.'px'; - $source = empty($this->current->source) ? '' : $this->current->source; - - $params = array( - 'id' => 'contentframe', - 'src' => $source, - 'height' => $height, - 'width' => $width, - 'allowfullscreen' => 'true', - 'webkitallowfullscreen' => 'true', - 'mozallowfullscreen' => 'true' - ); - - if ($hide) { - $params['style'] = 'display:none'; - } - - // If the source attribute is not empty, initiate an LTI launch to avoid having ACL issues when another user with permissions edits the module. - // This also assists with full screen functionality on some mobile devices. - if (!empty($source)) { - $ltiparams = array( - 'courseid' => $this->current->course, - 'height' => $height, - 'width' => $width, - 'withblocks' => 0, - 'source' => $source - ); - - $url = new moodle_url('/mod/kalvidres/lti_launch.php', $ltiparams); - $params['src'] = $url->out(false); - } - - return html_writer::tag('iframe', '', $params); - } - - /** - * This function validates the form on save. - * - * @param array $data Array of form values - * @param array $files Array of files - * @return array $errors Array of error messages - */ - public function validation($data, $files) { - $errors = array(); - - if (empty($data['source'])) { - $errors['add_video_thumb'] = get_string('novidsource', 'kalvidres'); - } - - return $errors; - } -} diff --git a/mod/kalvidres/pix/icon.gif b/mod/kalvidres/pix/icon.gif deleted file mode 100644 index 550df5db8c43d778c40a1290f1d3a724d0e88133..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 128 zcmZ?wbhEHb6krfwSoEKPf#I&Pahh>jn(@rE0|yTL|Np+Z^fq{iV2gnAh z6kuRrcJ. - -/** - * Kaltura video resource renderer file. - * - * @package mod_kalvidres - * @author Remote-Learner.net Inc - * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later - * @copyright (C) 2014 Remote Learner.net Inc http://www.remote-learner.net - */ - -if (!defined('MOODLE_INTERNAL')) { - die('Direct access to this script is forbidden.'); -} - -require_once(dirname(dirname(dirname(__FILE__))).'/local/kaltura/locallib.php'); - -class mod_kalvidres_renderer extends plugin_renderer_base { - /** - * This function displays the title of the video in bold. - * @param string $title The title of the video. - * @return string HTML markup. - */ - public function display_mod_info($title) { - $output = ''; - - $attr = array('for' => 'video_name'); - $output .= html_writer::start_tag('b'); - $output .= html_writer::tag('div', $title); - $output .= html_writer::end_tag('b'); - $output .= html_writer::empty_tag('br'); - - return $output; - } - - /** - * This function displays the iframe markup. - * @param object $kalvidres A Kaltura video resrouce instance object. - * @param int $courseid A course id. - * @return string HTML markup. - */ - public function display_iframe($kalvidres, $courseid) { - $params = array( - 'courseid' => $courseid, - 'height' => $kalvidres->height, - 'width' => $kalvidres->width, - 'withblocks' => 0, - 'source' => $kalvidres->source - ); - $url = new moodle_url('/mod/kalvidres/lti_launch.php', $params); - - $attr = array( - 'id' => 'contentframe', - 'height' => '100%', - 'width' => $kalvidres->width, - 'src' => $url->out(false), - 'allowfullscreen' => 'true', - 'webkitallowfullscreen' => 'true', - 'mozallowfullscreen' => 'true' - ); - - $output = html_writer::tag('iframe', '', $attr); - $output = html_writer::tag('center', $output); - return $output; - } -} \ No newline at end of file diff --git a/mod/kalvidres/styles.css b/mod/kalvidres/styles.css deleted file mode 100644 index 129e37c40e949..0000000000000 --- a/mod/kalvidres/styles.css +++ /dev/null @@ -1,34 +0,0 @@ -#id_add_video { - float: left; -} - -#id_video_properties, #id_video_preview { - float: left; - margin-left: 5px; -} - -#slider_border { - width: 100%; - height: 18px; - border: 1px solid #000000; - overflow: hidden; -} - -#progress_bar { - float: left; - height: 18px; - width: 0%; - /*border-right: 1px solid #000000;*/ - background: #00FF00; -} - -#loading_text { - position: relative; - top: -18px; - font-weight: bold; - left: 12px; -} - -#id_video #video_thumbnail { - float: left; -} diff --git a/mod/kalvidres/version.php b/mod/kalvidres/version.php deleted file mode 100644 index b48480e430679..0000000000000 --- a/mod/kalvidres/version.php +++ /dev/null @@ -1,36 +0,0 @@ -. - -/** - * Kaltura video resource version file. - * - * @package mod_kalvidres - * @author Remote-Learner.net Inc - * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later - * @copyright (C) 2014 Remote Learner.net Inc http://www.remote-learner.net - */ - -if (!defined('MOODLE_INTERNAL')) { - die('Direct access to this script is forbidden.'); -} - -$module->version = 2014013001; -$module->component = 'mod_kalvidres'; -$module->release = 'Kaltura release 4.0.00 (RL: TBD)'; -$module->requires = 2013051400; -$module->cron = 0; -$module->maturity = MATURITY_STABLE; -$module->dependencies = array( - 'local_kaltura' => 2014013000.01 -); diff --git a/mod/kalvidres/view.php b/mod/kalvidres/view.php deleted file mode 100644 index bb09dfb86b244..0000000000000 --- a/mod/kalvidres/view.php +++ /dev/null @@ -1,86 +0,0 @@ -. - -/** - * Kaltura video resource view page. - * - * @package mod_kalvidres - * @author Remote-Learner.net Inc - * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later - * @copyright (C) 2014 Remote Learner.net Inc http://www.remote-learner.net - */ - -require_once(dirname(dirname(dirname(__FILE__))).'/config.php'); - -$id = optional_param('id', 0, PARAM_INT); - -// Retrieve module instance. -if (empty($id)) { - print_error('invalidid', 'kalvidres'); -} - -if (!empty($id)) { - - if (!$cm = get_coursemodule_from_id('kalvidres', $id)) { - print_error('invalidcoursemodule'); - } - - if (!$course = $DB->get_record('course', array('id' => $cm->course))) { - print_error('coursemisconf'); - } - - if (!$kalvidres = $DB->get_record('kalvidres', array("id" => $cm->instance))) { - print_error('invalidid', 'kalvidres'); - } -} - -require_course_login($course->id, true, $cm); - -global $SESSION, $CFG; - -$PAGE->set_url('/mod/kalvidres/view.php', array('id' => $id)); -$PAGE->set_title(format_string($kalvidres->name)); -$PAGE->set_heading($course->fullname); -$pageclass = 'kaltura-kalvidres-body'; -$PAGE->add_body_class($pageclass); - -$context = $PAGE->context; - -add_to_log($course->id, 'kalvidres', 'view video resource', 'view.php?id='.$cm->id, $kalvidres->id, $cm->id); - -$completion = new completion_info($course); -$completion->set_module_viewed($cm); - -echo $OUTPUT->header(); - -$description = format_module_intro('kalvidres', $kalvidres, $cm->id); -if (!empty($description)) { - echo $OUTPUT->box_start('generalbox'); - echo $description; - echo $OUTPUT->box_end(); -} - -$renderer = $PAGE->get_renderer('mod_kalvidres'); - -// Require a YUI module to make the object tag be as large as possible. -$params = array( - 'bodyclass' => $pageclass, - 'lastheight' => null, - 'padding' => 15 -); -$PAGE->requires->yui_module('moodle-local_kaltura-lticontainer', 'M.local_kaltura.init', array($params), null, true); - -echo $renderer->display_iframe($kalvidres, $course->id); - -echo $OUTPUT->footer(); From 30a732f82e47cbf580128acfa04afd36c1356804 Mon Sep 17 00:00:00 2001 From: Gonen Radai Date: Mon, 6 Oct 2014 15:13:43 +0300 Subject: [PATCH 003/326] cleaning master --- filter/kaltura/filter.php | 233 ---------------------- filter/kaltura/filtersettings.php | 30 --- filter/kaltura/lang/en/filter_kaltura.php | 29 --- filter/kaltura/lti_launch.php | 81 -------- filter/kaltura/version.php | 33 --- 5 files changed, 406 deletions(-) delete mode 100644 filter/kaltura/filter.php delete mode 100644 filter/kaltura/filtersettings.php delete mode 100644 filter/kaltura/lang/en/filter_kaltura.php delete mode 100644 filter/kaltura/lti_launch.php delete mode 100644 filter/kaltura/version.php diff --git a/filter/kaltura/filter.php b/filter/kaltura/filter.php deleted file mode 100644 index 99db0494d09b9..0000000000000 --- a/filter/kaltura/filter.php +++ /dev/null @@ -1,233 +0,0 @@ -. - -/** - * Kaltura filter script. - * - * @package filter_kaltura - * @author Remote-Learner.net Inc - * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later - * @copyright (C) 2014 Remote-Learner.net Inc (http://www.remote-learner.net) - */ - -class filter_kaltura extends moodle_text_filter { - /** @var object $context The current page context. */ - public static $pagecontext = null; - - /** @var string $kafuri The KAF URI. */ - public static $kafuri = null; - - /** @var string $apiurl The URI used by the previous version (v3) of the plug-ins when embedding anchor tags. */ - public static $apiurl = null; - - /** @var string $module The module used to render part of the final URL. */ - public static $module = null; - - /** @var string $defaultheight The default height for the video. */ - public static $defaultheight = 280; - - /** @var string $defaultwidth The default width for the video. */ - public static $defaultwidth = 400; - - /** - * This function runs once during a single page request and initialzies - * some data. - * @param object $page Moodle page object. - * @param object $context Page context object. - */ - public function setup($page, $context) { - global $CFG; - require_once($CFG->dirroot.'/local/kaltura/locallib.php'); - $configsettings = local_kaltura_get_config(); - - self::$pagecontext = $this->get_course_context($context); - - $newuri = ''; - - self::$kafuri = $configsettings->kaf_uri; - - if (!empty($configsettings->uri)) { - self::$apiurl = $configsettings->uri; - } - - self::$module = local_kaltura_get_endpoint(KAF_BROWSE_EMBED_MODULE); - } - - /** - * This function returns the course context where possible. - * @param object $context A context object. - * @return object A Moodle context object. - */ - protected function get_course_context($context) { - $coursecontext = null; - - if ($context instanceof context_course) { - $coursecontext = $context; - } else if ($context instanceof context_module) { - $coursecontext = $context->get_course_context(); - } else { - $coursecontext = context_system::instance(); - } - - return $coursecontext; - } - - /** - * This function does the work of converting text that matches a regular expression into - * Kaltura video markup, so that links to Kaltura videos are displayed in the Kaltura - * video player. - * @param string $text Text that is to be displayed on the page. - * @param array $options An array of additional options. - * @return string The same text or modified text is returned. - */ - public function filter($text, array $options = array()) { - global $CFG; - - // Check if the the filter plug-in is enabled. - if (empty($CFG->filter_kaltura_enable)) { - return $text; - } - - // Check either if the KAF URI or API URI has been set. If neither has been set then return the text with no changes. - if (is_null(self::$kafuri) && is_null(self::$apiurl)) { - return $text; - } - - // Performance shortcut. All regexes bellow end with the tag, if not present nothing can match. - if (false === stripos($text, '')) { - return $text; - } - - // We need to return the original value if regex fails! - $newtext = $text; - - // Search for v3 Kaltura embedded anchor tag format. - $uri = self::$apiurl; - $uri = rtrim($uri, '/'); - $uri = str_replace(array('.', '/', 'https'), array('\.', '\/', 'https?'), $uri); - - $oldsearch = '/]*href="('.$uri.')\/index\.php\/kwidget\/wid\/_([0-9]+)\/uiconf_id\/([0-9]+)\/entry_id\/([\d]+_([a-z0-9]+))\/v\/flash"[^>]*>([^>]*)<\/a>/is'; - $newtext = preg_replace_callback($oldsearch, 'filter_kaltura_callback', $newtext); - - // Search for newer versoin of Kaltura embedded anchor tag format. - $uri = self::$kafuri; - $uri = rtrim($uri, '/'); - $uri = str_replace(array('http://', 'https://', '.', '/'), array('https?://', 'https?://', '\.', '\/'), $uri); - - $search = '/]*href="(https?:\/\/'.KALTURA_URI_TOKEN.')\/browseandembed\/index\/media\/entryid\/([\d]+_([a-z0-9]+))\/showDescription\/(true|false)\/showTitle\/(true|false)\/'; - $search .= 'showTags\/(true|false)\/showDuration\/(true|false)\/showOwner\/(true|false)\/showUploadDate\/(true|false)\/playerSize\/([0-9]+)x([0-9]+)\/playerSkin\/([0-9]+)\/"[^>]*>([^>]*)<\/a>/is'; - $newtext = preg_replace_callback($search, 'filter_kaltura_callback', $newtext); - - if (empty($newtext) || $newtext === $text) { - // Error or not filtered. - unset($newtext); - return $text; - } - - return $newtext; - } -} - -/** - * Change links to Kaltura into embedded Kaltura videos. - * @param array $link An array of elements matching the regular expression from class filter_kaltura - filter(). - * @return string Kaltura embed video markup. - */ -function filter_kaltura_callback($link) { - global $CFG; - $newtext = $link[0]; - - $newurl = $link[1]; - if (!empty($newurl)) { - // Check to see if token is being used in url and replace with kaf_uri. - $parts = parse_url($link[1]); - if (!empty($parts['host']) && KALTURA_URI_TOKEN == $parts['host']) { - $newurl = filter_kaltura::$kafuri; - } - } - - $newurl = preg_replace('#https?://#','',$newurl); - $kafuri = preg_replace('#https?://#', '', filter_kaltura::$kafuri); - // Convert KAF URI anchor tags into iframe markup. - if (14 == count($link) && $newurl == $kafuri) { - // Get the height and width of the iframe. - $properties = explode('||', $link[13]); - - if (4 != count($properties)) { - return $link[0]; - } - - $source = filter_kaltura::$kafuri.'/browseandembed/index/media/entryid/'.$link[2].'/showDescription/'.$link[4].'/showTitle/'.$link[5]; - $source .= '/showTags/'.$link[6].'/showDuration/'.$link[7].'/showOwner/'.$link[8].'/showUploadDate/'.$link[9]; - $source .= '/playerSize/'.$properties[3].'x'.$properties[2].'/playerSkin/'.$link[12]; - - // Iniitate an LTI launch. - $params = array( - 'courseid' => filter_kaltura::$pagecontext->instanceid, - 'height' => $properties[2], - 'width' => $properties[3], - 'withblocks' => 0, - 'source' => $source - ); - $url = new moodle_url('/filter/kaltura/lti_launch.php', $params); - - $attr = array( - 'id' => 'contentframe', - 'height' => $properties[2], - 'width' => $properties[3], - 'allowfullscreen' => 'true', - 'webkitallowfullscreen' => 'true', - 'mozallowfullscreen' => 'true', - 'src' => $url->out(false), - 'frameborder' => '0' - ); - - $newtext = html_writer::tag('iframe', '', $attr); - } - - // Convert v3 anchor tags into iframe markup. - if (7 == count($link) && $link[1] == filter_kaltura::$apiurl) { - $source = filter_kaltura::$kafuri.'/browseandembed/index/media/entryid/'.$link[4].'/playerSize/'; - $source .= filter_kaltura::$defaultwidth.'x'.filter_kaltura::$defaultheight.'/playerSkin/'.$link[3]; - - // Iniitate an LTI launch. - $params = array( - 'courseid' => filter_kaltura::$pagecontext->instanceid, - 'height' => filter_kaltura::$defaultheight, - 'width' => filter_kaltura::$defaultwidth, - 'withblocks' => 0, - 'source' => $source - ); - - $url = new moodle_url('/filter/kaltura/lti_launch.php', $params); - - $attr = array( - 'id' => 'contentframe', - 'height' => filter_kaltura::$defaultheight, - 'width' => filter_kaltura::$defaultwidth, - 'allowfullscreen' => 'true', - 'webkitallowfullscreen' => 'true', - 'mozallowfullscreen' => 'true', - 'src' => $url->out(false), - 'frameborder' => '0' - ); - - $newtext = html_writer::tag('iframe', '', $attr); - - } - - return $newtext; -} diff --git a/filter/kaltura/filtersettings.php b/filter/kaltura/filtersettings.php deleted file mode 100644 index 7e8dc74a9e979..0000000000000 --- a/filter/kaltura/filtersettings.php +++ /dev/null @@ -1,30 +0,0 @@ -. - -/** - * Kaltura filter settings script. - * - * @package filter_kaltura - * @author Remote-Learner.net Inc - * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later - * @copyright (C) 2014 Remote-Learner.net Inc (http://www.remote-learner.net) - */ - -defined('MOODLE_INTERNAL') || die; - -if ($ADMIN->fulltree) { - $settings->add(new admin_setting_configcheckbox('filter_kaltura_enable', get_string('enable', 'filter_kaltura'), get_string('enable_help', 'filter_kaltura'), 1)); -} \ No newline at end of file diff --git a/filter/kaltura/lang/en/filter_kaltura.php b/filter/kaltura/lang/en/filter_kaltura.php deleted file mode 100644 index e3e1fa37574f9..0000000000000 --- a/filter/kaltura/lang/en/filter_kaltura.php +++ /dev/null @@ -1,29 +0,0 @@ -. - -/** - * Kaltura filter language file. - * - * @package filter_kaltura - * @author Remote-Learner.net Inc - * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later - * @copyright (C) 2014 Remote-Learner.net Inc (http://www.remote-learner.net) - */ - -$string['filtername'] = 'Kaltura Media'; -$string['enable'] = 'Embed Kaltura Video Links'; -$string['enable_help'] = 'Convert Kaltura video links to embed code'; -$string['unable'] = 'Unable to convert video at this time'; \ No newline at end of file diff --git a/filter/kaltura/lti_launch.php b/filter/kaltura/lti_launch.php deleted file mode 100644 index 9df539c9a54ea..0000000000000 --- a/filter/kaltura/lti_launch.php +++ /dev/null @@ -1,81 +0,0 @@ -. - -/** - * Kaltura filter plug-in LTI launch page. - * - * @package filter_kaltura - * @author Remote-Learner.net Inc - * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later - * @copyright (C) 2014 Remote Learner.net Inc http://www.remote-learner.net - */ - -require_once(dirname(dirname(dirname(__FILE__))).'/config.php'); -require_once(dirname(dirname(dirname(__FILE__))).'/local/kaltura/locallib.php'); - -global $SITE; - -require_login(); - -$courseid = required_param('courseid', PARAM_INT); -$height = required_param('height', PARAM_INT); -$width = required_param('width', PARAM_INT); -$withblocks = optional_param('withblocks', 0, PARAM_INT); -$source = optional_param('source', '', PARAM_URL); - -// If a course id of zero is passed, then we must be in the system context. -if (0 != $courseid) { - $context = context_course::instance($courseid); -} else { - $context = context_system::instance(); -} - -// Check if we're in a course context. -if ($context instanceof context_course) { - $course = get_course($courseid); - - // Check if the user has the capability to view comments in Moodle. - if (!has_capability('moodle/comment:view', $context)) { - echo get_string('nocapabilitytousethisservice', 'error'); - die(); - } -} else { - $course = $SITE; -} - -$launch = array(); -$launch['id'] = 1; -$launch['cmid'] = 0; -$launch['title'] = 'Kaltura video resource'; -$launch['module'] = KAF_BROWSE_EMBED_MODULE; -$launch['course'] = $course; -$launch['width'] = $width; -$launch['height'] = $height; -$launch['custom_publishdata'] = ''; - -if (false === local_kaltura_url_contains_configured_hostname($source) && !empty($source)) { - echo get_string('invalid_source_parameter', 'mod_kalvidres'); - die; -} else { - $launch['source'] = urldecode($source); -} - -if (local_kaltura_validate_browseembed_required_params($launch)) { - $content = local_kaltura_request_lti_launch($launch, $withblocks); - echo $content; -} else { - echo get_string('invalid_launch_parameters', 'mod_kalvidres'); -} \ No newline at end of file diff --git a/filter/kaltura/version.php b/filter/kaltura/version.php deleted file mode 100644 index b9f7ed5a795ef..0000000000000 --- a/filter/kaltura/version.php +++ /dev/null @@ -1,33 +0,0 @@ -. - -/** - * Kaltura version script. - * - * @package filter_kaltura - * @author Remote-Learner.net Inc - * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later - * @copyright (C) 2014 Remote-Learner.net Inc (http://www.remote-learner.net) - */ -defined('MOODLE_INTERNAL') || die(); - -$plugin->version = 2014013000; -$plugin->release = 'Kaltura release 4.0.00 (RL: TBD)'; -$plugin->requires = 2013051400; -$plugin->maturity = MATURITY_STABLE; -$plugin->dependencies = array( - 'local_kaltura' => 2014013000 -); \ No newline at end of file From 7c4d80d1f1b09c53522d45ac057d3324d4f2eef1 Mon Sep 17 00:00:00 2001 From: Gonen Radai Date: Mon, 6 Oct 2014 15:16:53 +0300 Subject: [PATCH 004/326] first commit of v4.0.0 for moodle 2.6 --- filter/kaltura/filter.php | 233 + filter/kaltura/filtersettings.php | 30 + filter/kaltura/lang/en/filter_kaltura.php | 29 + filter/kaltura/lti_launch.php | 81 + filter/kaltura/version.php | 33 + .../lang/en/tinymce_kalturamedia.php | 28 + .../tinymce/plugins/kalturamedia/lib.php | 69 + .../plugins/kalturamedia/lti_launch.php | 77 + .../tinymce/plugins/kalturamedia/pix/icon.png | Bin 0 -> 1912 bytes .../kalturamedia/tinymce/editor_plugin.js | 75 + .../plugins/kalturamedia/tinymce/img/icon.gif | Bin 0 -> 575 bytes .../kalturamedia/tinymce/js/ltipopuplib.js | 53 + .../kalturamedia/tinymce/ltibrowse.php | 69 + .../plugins/kalturamedia/tinymce/renderer.php | 84 + .../kalturamedia/tinymce_kalturamedia.php | 28 + .../tinymce/plugins/kalturamedia/version.php | 33 + local/kaltura/API/KalturaClient.php | 8347 ++++++++ local/kaltura/API/KalturaClientBase.php | 1228 ++ local/kaltura/API/KalturaEnums.php | 3213 +++ ...nersWatermarkAccessControlClientPlugin.php | 84 + .../KalturaAdCuePointClientPlugin.php | 253 + .../KalturaAnnotationClientPlugin.php | 450 + .../KalturaAsperaClientPlugin.php | 113 + .../KalturaAttachmentClientPlugin.php | 435 + .../KalturaAuditClientPlugin.php | 893 + .../KalturaBulkUploadClientPlugin.php | 187 + .../KalturaBulkUploadCsvClientPlugin.php | 113 + .../KalturaBulkUploadFilterClientPlugin.php | 101 + .../KalturaBulkUploadXmlClientPlugin.php | 85 + .../KalturaCaptionClientPlugin.php | 771 + .../KalturaCaptionSearchClientPlugin.php | 325 + .../KalturaCodeCuePointClientPlugin.php | 237 + ...KalturaContentDistributionClientPlugin.php | 3454 ++++ .../KalturaCuePointClientPlugin.php | 640 + .../KalturaDocumentClientPlugin.php | 944 + .../KalturaPlugins/KalturaDrmClientPlugin.php | 434 + .../KalturaDropFolderClientPlugin.php | 1777 ++ ...uraDropFolderXmlBulkUploadClientPlugin.php | 86 + .../KalturaEmailNotificationClientPlugin.php | 630 + .../KalturaEventNotificationClientPlugin.php | 790 + .../KalturaExternalMediaClientPlugin.php | 363 + .../KalturaFileSyncClientPlugin.php | 338 + .../KalturaHttpNotificationClientPlugin.php | 624 + .../KalturaKontikiClientPlugin.php | 177 + .../KalturaLikeClientPlugin.php | 153 + .../KalturaMetadataClientPlugin.php | 1566 ++ .../KalturaMultiCentersClientPlugin.php | 119 + .../KalturaShortLinkClientPlugin.php | 476 + .../KalturaTagSearchClientPlugin.php | 320 + .../KalturaVarConsoleClientPlugin.php | 398 + .../KalturaVelocixClientPlugin.php | 105 + .../KalturaVirusScanClientPlugin.php | 545 + .../KalturaWebexDropFolderClientPlugin.php | 292 + .../KalturaWidevineClientPlugin.php | 396 + local/kaltura/API/KalturaTypes.php | 16367 ++++++++++++++++ local/kaltura/API/TestCode/DemoVideo.flv | Bin 0 -> 512919 bytes .../API/TestCode/KalturaTestConfiguration.php | 36 + local/kaltura/API/TestCode/TestMain.php | 137 + local/kaltura/API/agpl.txt | 674 + local/kaltura/db/access.php | 39 + local/kaltura/db/install.xml | 25 + local/kaltura/db/upgrade.php | 67 + local/kaltura/download_log.php | 102 + local/kaltura/download_log_form.php | 46 + local/kaltura/lang/en/local_kaltura.php | 66 + local/kaltura/lib.php | 24 + local/kaltura/locallib.php | 715 + local/kaltura/migration.php | 114 + local/kaltura/migration_form.php | 77 + local/kaltura/migrationlib.php | 1067 + local/kaltura/pix/icon.png | Bin 0 -> 1912 bytes local/kaltura/pix/kavatar.png | Bin 0 -> 2998 bytes local/kaltura/pix/vidThumb.png | Bin 0 -> 2404 bytes local/kaltura/service.php | 101 + local/kaltura/settings.php | 95 + local/kaltura/styles.css | 10 + local/kaltura/test.php | 27 + local/kaltura/tests/locallib_test.php | 1293 ++ local/kaltura/tests/migrationlib_test.php | 194 + local/kaltura/version.php | 32 + ...moodle-local_kaltura-lticontainer-debug.js | 167 + .../moodle-local_kaltura-lticontainer-min.js | 1 + .../moodle-local_kaltura-lticontainer.js | 167 + .../moodle-local_kaltura-ltipanel-debug.js | 472 + .../moodle-local_kaltura-ltipanel-min.js | 1 + .../moodle-local_kaltura-ltipanel.js | 472 + .../moodle-local_kaltura-ltiservice-debug.js | 120 + .../moodle-local_kaltura-ltiservice-min.js | 1 + .../moodle-local_kaltura-ltiservice.js | 120 + ...dle-local_kaltura-ltitinymcepanel-debug.js | 141 + ...oodle-local_kaltura-ltitinymcepanel-min.js | 1 + .../moodle-local_kaltura-ltitinymcepanel.js | 141 + .../moodle-local_kaltura-ltiservice-debug.js | 58 + .../moodle-local_kaltura-ltiservice-min.js | 1 + .../moodle-local_kaltura-ltiservice.js | 58 + local/kaltura/yui/src/lticontainer/build.json | 10 + .../yui/src/lticontainer/js/lticontainer.js | 162 + .../src/lticontainer/meta/lticontainer.json | 8 + local/kaltura/yui/src/ltipanel/build.json | 10 + local/kaltura/yui/src/ltipanel/js/ltipanel.js | 467 + .../yui/src/ltipanel/meta/ltipanel.json | 10 + local/kaltura/yui/src/ltiservice/build.json | 10 + .../yui/src/ltiservice/js/ltiservice.js | 115 + .../yui/src/ltiservice/meta/ltiservice.json | 9 + .../yui/src/ltitinymcepanel/build.json | 10 + .../src/ltitinymcepanel/js/ltitinymcepanel.js | 136 + .../ltitinymcepanel/meta/ltitinymcepanel.json | 10 + local/kalturamediagallery/db/access.php | 37 + local/kalturamediagallery/index.php | 78 + .../lang/en/local_kalturamediagallery.php | 31 + local/kalturamediagallery/lib.php | 72 + local/kalturamediagallery/lti_launch.php | 53 + local/kalturamediagallery/version.php | 36 + local/mymedia/db/access.php | 34 + local/mymedia/lang/en/local_mymedia.php | 30 + local/mymedia/lib.php | 56 + local/mymedia/lti_launch.php | 51 + local/mymedia/mymedia.php | 71 + local/mymedia/renderer.php | 924 + local/mymedia/version.php | 35 + ...ackup_kalvidassign_activity_task.class.php | 67 + .../backup_kalvidassign_settingslib.php | 26 + .../moodle2/backup_kalvidassign_stepslib.php | 99 + ...store_kalvidassign_activity_task.class.php | 109 + .../moodle2/restore_kalvidassign_stepslib.php | 82 + mod/kalvidassign/db/access.php | 55 + mod/kalvidassign/db/install.xml | 60 + mod/kalvidassign/db/log.php | 32 + mod/kalvidassign/db/messages.php | 26 + mod/kalvidassign/db/upgrade.php | 89 + mod/kalvidassign/grade_preferences_form.php | 124 + mod/kalvidassign/grade_submissions.php | 208 + mod/kalvidassign/index.php | 48 + mod/kalvidassign/lang/en/kalvidassign.php | 115 + mod/kalvidassign/lib.php | 395 + mod/kalvidassign/locallib.php | 356 + mod/kalvidassign/lti_launch.php | 67 + mod/kalvidassign/mod_form.php | 78 + mod/kalvidassign/pix/icon.gif | Bin 0 -> 128 bytes mod/kalvidassign/renderable.php | 69 + mod/kalvidassign/renderer.php | 1127 ++ mod/kalvidassign/single_submission.php | 222 + mod/kalvidassign/single_submission_form.php | 209 + mod/kalvidassign/styles.css | 53 + mod/kalvidassign/submission.php | 147 + mod/kalvidassign/tests/locallib_test.php | 77 + mod/kalvidassign/version.php | 36 + mod/kalvidassign/view.php | 138 + .../backup_kalvidpres_activity_task.class.php | 67 + .../moodle2/backup_kalvidpres_settingslib.php | 26 + .../moodle2/backup_kalvidpres_stepslib.php | 47 + .../backup_kalvidres_activity_task.class.php | 66 + .../moodle2/backup_kalvidres_settingslib.php | 26 + .../moodle2/backup_kalvidres_stepslib.php | 46 + ...restore_kalvidpres_activity_task.class.php | 107 + .../moodle2/restore_kalvidpres_stepslib.php | 62 + .../restore_kalvidres_activity_task.class.php | 107 + .../moodle2/restore_kalvidres_stepslib.php | 62 + mod/kalvidpres/db/access.php | 36 + mod/kalvidpres/db/install.xml | 36 + mod/kalvidpres/db/log.php | 31 + mod/kalvidpres/db/upgrade.php | 96 + mod/kalvidpres/lang/en/kalvidpres.php | 36 + mod/kalvidpres/lang/en/kalvidres.php | 36 + mod/kalvidpres/lib.php | 199 + mod/kalvidpres/locallib.php | 33 + mod/kalvidpres/lti_launch.php | 74 + mod/kalvidpres/mod_form.php | 261 + mod/kalvidpres/pix/icon.gif | Bin 0 -> 128 bytes mod/kalvidpres/renderer.php | 61 + mod/kalvidpres/styles.css | 38 + mod/kalvidpres/version.php | 36 + mod/kalvidpres/view.php | 86 + .../backup_kalvidres_activity_task.class.php | 66 + .../moodle2/backup_kalvidres_settingslib.php | 26 + .../moodle2/backup_kalvidres_stepslib.php | 46 + .../restore_kalvidres_activity_task.class.php | 107 + .../moodle2/restore_kalvidres_stepslib.php | 62 + mod/kalvidres/db/access.php | 35 + mod/kalvidres/db/install.xml | 30 + mod/kalvidres/db/log.php | 28 + mod/kalvidres/db/upgrade.php | 71 + mod/kalvidres/lang/en/kalvidres.php | 36 + mod/kalvidres/lib.php | 199 + mod/kalvidres/lti_launch.php | 73 + mod/kalvidres/mod_form.php | 251 + mod/kalvidres/pix/icon.gif | Bin 0 -> 128 bytes mod/kalvidres/renderer.php | 78 + mod/kalvidres/styles.css | 34 + mod/kalvidres/version.php | 36 + mod/kalvidres/view.php | 86 + 191 files changed, 65131 insertions(+) create mode 100644 filter/kaltura/filter.php create mode 100644 filter/kaltura/filtersettings.php create mode 100644 filter/kaltura/lang/en/filter_kaltura.php create mode 100644 filter/kaltura/lti_launch.php create mode 100644 filter/kaltura/version.php create mode 100644 lib/editor/tinymce/plugins/kalturamedia/lang/en/tinymce_kalturamedia.php create mode 100644 lib/editor/tinymce/plugins/kalturamedia/lib.php create mode 100644 lib/editor/tinymce/plugins/kalturamedia/lti_launch.php create mode 100644 lib/editor/tinymce/plugins/kalturamedia/pix/icon.png create mode 100644 lib/editor/tinymce/plugins/kalturamedia/tinymce/editor_plugin.js create mode 100644 lib/editor/tinymce/plugins/kalturamedia/tinymce/img/icon.gif create mode 100644 lib/editor/tinymce/plugins/kalturamedia/tinymce/js/ltipopuplib.js create mode 100644 lib/editor/tinymce/plugins/kalturamedia/tinymce/ltibrowse.php create mode 100644 lib/editor/tinymce/plugins/kalturamedia/tinymce/renderer.php create mode 100644 lib/editor/tinymce/plugins/kalturamedia/tinymce_kalturamedia.php create mode 100644 lib/editor/tinymce/plugins/kalturamedia/version.php create mode 100644 local/kaltura/API/KalturaClient.php create mode 100644 local/kaltura/API/KalturaClientBase.php create mode 100644 local/kaltura/API/KalturaEnums.php create mode 100644 local/kaltura/API/KalturaPlugins/KalturaAbcScreenersWatermarkAccessControlClientPlugin.php create mode 100644 local/kaltura/API/KalturaPlugins/KalturaAdCuePointClientPlugin.php create mode 100644 local/kaltura/API/KalturaPlugins/KalturaAnnotationClientPlugin.php create mode 100644 local/kaltura/API/KalturaPlugins/KalturaAsperaClientPlugin.php create mode 100644 local/kaltura/API/KalturaPlugins/KalturaAttachmentClientPlugin.php create mode 100644 local/kaltura/API/KalturaPlugins/KalturaAuditClientPlugin.php create mode 100644 local/kaltura/API/KalturaPlugins/KalturaBulkUploadClientPlugin.php create mode 100644 local/kaltura/API/KalturaPlugins/KalturaBulkUploadCsvClientPlugin.php create mode 100644 local/kaltura/API/KalturaPlugins/KalturaBulkUploadFilterClientPlugin.php create mode 100644 local/kaltura/API/KalturaPlugins/KalturaBulkUploadXmlClientPlugin.php create mode 100644 local/kaltura/API/KalturaPlugins/KalturaCaptionClientPlugin.php create mode 100644 local/kaltura/API/KalturaPlugins/KalturaCaptionSearchClientPlugin.php create mode 100644 local/kaltura/API/KalturaPlugins/KalturaCodeCuePointClientPlugin.php create mode 100644 local/kaltura/API/KalturaPlugins/KalturaContentDistributionClientPlugin.php create mode 100644 local/kaltura/API/KalturaPlugins/KalturaCuePointClientPlugin.php create mode 100644 local/kaltura/API/KalturaPlugins/KalturaDocumentClientPlugin.php create mode 100644 local/kaltura/API/KalturaPlugins/KalturaDrmClientPlugin.php create mode 100644 local/kaltura/API/KalturaPlugins/KalturaDropFolderClientPlugin.php create mode 100644 local/kaltura/API/KalturaPlugins/KalturaDropFolderXmlBulkUploadClientPlugin.php create mode 100644 local/kaltura/API/KalturaPlugins/KalturaEmailNotificationClientPlugin.php create mode 100644 local/kaltura/API/KalturaPlugins/KalturaEventNotificationClientPlugin.php create mode 100644 local/kaltura/API/KalturaPlugins/KalturaExternalMediaClientPlugin.php create mode 100644 local/kaltura/API/KalturaPlugins/KalturaFileSyncClientPlugin.php create mode 100644 local/kaltura/API/KalturaPlugins/KalturaHttpNotificationClientPlugin.php create mode 100644 local/kaltura/API/KalturaPlugins/KalturaKontikiClientPlugin.php create mode 100644 local/kaltura/API/KalturaPlugins/KalturaLikeClientPlugin.php create mode 100644 local/kaltura/API/KalturaPlugins/KalturaMetadataClientPlugin.php create mode 100644 local/kaltura/API/KalturaPlugins/KalturaMultiCentersClientPlugin.php create mode 100644 local/kaltura/API/KalturaPlugins/KalturaShortLinkClientPlugin.php create mode 100644 local/kaltura/API/KalturaPlugins/KalturaTagSearchClientPlugin.php create mode 100644 local/kaltura/API/KalturaPlugins/KalturaVarConsoleClientPlugin.php create mode 100644 local/kaltura/API/KalturaPlugins/KalturaVelocixClientPlugin.php create mode 100644 local/kaltura/API/KalturaPlugins/KalturaVirusScanClientPlugin.php create mode 100644 local/kaltura/API/KalturaPlugins/KalturaWebexDropFolderClientPlugin.php create mode 100644 local/kaltura/API/KalturaPlugins/KalturaWidevineClientPlugin.php create mode 100644 local/kaltura/API/KalturaTypes.php create mode 100644 local/kaltura/API/TestCode/DemoVideo.flv create mode 100644 local/kaltura/API/TestCode/KalturaTestConfiguration.php create mode 100644 local/kaltura/API/TestCode/TestMain.php create mode 100644 local/kaltura/API/agpl.txt create mode 100644 local/kaltura/db/access.php create mode 100755 local/kaltura/db/install.xml create mode 100644 local/kaltura/db/upgrade.php create mode 100644 local/kaltura/download_log.php create mode 100644 local/kaltura/download_log_form.php create mode 100644 local/kaltura/lang/en/local_kaltura.php create mode 100644 local/kaltura/lib.php create mode 100644 local/kaltura/locallib.php create mode 100644 local/kaltura/migration.php create mode 100644 local/kaltura/migration_form.php create mode 100644 local/kaltura/migrationlib.php create mode 100644 local/kaltura/pix/icon.png create mode 100644 local/kaltura/pix/kavatar.png create mode 100644 local/kaltura/pix/vidThumb.png create mode 100644 local/kaltura/service.php create mode 100644 local/kaltura/settings.php create mode 100644 local/kaltura/styles.css create mode 100644 local/kaltura/test.php create mode 100644 local/kaltura/tests/locallib_test.php create mode 100644 local/kaltura/tests/migrationlib_test.php create mode 100644 local/kaltura/version.php create mode 100644 local/kaltura/yui/build/moodle-local_kaltura-lticontainer/moodle-local_kaltura-lticontainer-debug.js create mode 100644 local/kaltura/yui/build/moodle-local_kaltura-lticontainer/moodle-local_kaltura-lticontainer-min.js create mode 100644 local/kaltura/yui/build/moodle-local_kaltura-lticontainer/moodle-local_kaltura-lticontainer.js create mode 100644 local/kaltura/yui/build/moodle-local_kaltura-ltipanel/moodle-local_kaltura-ltipanel-debug.js create mode 100644 local/kaltura/yui/build/moodle-local_kaltura-ltipanel/moodle-local_kaltura-ltipanel-min.js create mode 100644 local/kaltura/yui/build/moodle-local_kaltura-ltipanel/moodle-local_kaltura-ltipanel.js create mode 100644 local/kaltura/yui/build/moodle-local_kaltura-ltiservice/moodle-local_kaltura-ltiservice-debug.js create mode 100644 local/kaltura/yui/build/moodle-local_kaltura-ltiservice/moodle-local_kaltura-ltiservice-min.js create mode 100644 local/kaltura/yui/build/moodle-local_kaltura-ltiservice/moodle-local_kaltura-ltiservice.js create mode 100644 local/kaltura/yui/build/moodle-local_kaltura-ltitinymcepanel/moodle-local_kaltura-ltitinymcepanel-debug.js create mode 100644 local/kaltura/yui/build/moodle-local_kaltura-ltitinymcepanel/moodle-local_kaltura-ltitinymcepanel-min.js create mode 100644 local/kaltura/yui/build/moodle-local_kaltura-ltitinymcepanel/moodle-local_kaltura-ltitinymcepanel.js create mode 100644 local/kaltura/yui/src/build/moodle-local_kaltura-ltiservice/moodle-local_kaltura-ltiservice-debug.js create mode 100644 local/kaltura/yui/src/build/moodle-local_kaltura-ltiservice/moodle-local_kaltura-ltiservice-min.js create mode 100644 local/kaltura/yui/src/build/moodle-local_kaltura-ltiservice/moodle-local_kaltura-ltiservice.js create mode 100644 local/kaltura/yui/src/lticontainer/build.json create mode 100644 local/kaltura/yui/src/lticontainer/js/lticontainer.js create mode 100644 local/kaltura/yui/src/lticontainer/meta/lticontainer.json create mode 100644 local/kaltura/yui/src/ltipanel/build.json create mode 100644 local/kaltura/yui/src/ltipanel/js/ltipanel.js create mode 100644 local/kaltura/yui/src/ltipanel/meta/ltipanel.json create mode 100644 local/kaltura/yui/src/ltiservice/build.json create mode 100644 local/kaltura/yui/src/ltiservice/js/ltiservice.js create mode 100644 local/kaltura/yui/src/ltiservice/meta/ltiservice.json create mode 100644 local/kaltura/yui/src/ltitinymcepanel/build.json create mode 100644 local/kaltura/yui/src/ltitinymcepanel/js/ltitinymcepanel.js create mode 100644 local/kaltura/yui/src/ltitinymcepanel/meta/ltitinymcepanel.json create mode 100644 local/kalturamediagallery/db/access.php create mode 100644 local/kalturamediagallery/index.php create mode 100644 local/kalturamediagallery/lang/en/local_kalturamediagallery.php create mode 100644 local/kalturamediagallery/lib.php create mode 100644 local/kalturamediagallery/lti_launch.php create mode 100644 local/kalturamediagallery/version.php create mode 100644 local/mymedia/db/access.php create mode 100644 local/mymedia/lang/en/local_mymedia.php create mode 100644 local/mymedia/lib.php create mode 100644 local/mymedia/lti_launch.php create mode 100644 local/mymedia/mymedia.php create mode 100644 local/mymedia/renderer.php create mode 100644 local/mymedia/version.php create mode 100644 mod/kalvidassign/backup/moodle2/backup_kalvidassign_activity_task.class.php create mode 100644 mod/kalvidassign/backup/moodle2/backup_kalvidassign_settingslib.php create mode 100644 mod/kalvidassign/backup/moodle2/backup_kalvidassign_stepslib.php create mode 100644 mod/kalvidassign/backup/moodle2/restore_kalvidassign_activity_task.class.php create mode 100644 mod/kalvidassign/backup/moodle2/restore_kalvidassign_stepslib.php create mode 100644 mod/kalvidassign/db/access.php create mode 100755 mod/kalvidassign/db/install.xml create mode 100644 mod/kalvidassign/db/log.php create mode 100644 mod/kalvidassign/db/messages.php create mode 100644 mod/kalvidassign/db/upgrade.php create mode 100644 mod/kalvidassign/grade_preferences_form.php create mode 100644 mod/kalvidassign/grade_submissions.php create mode 100644 mod/kalvidassign/index.php create mode 100644 mod/kalvidassign/lang/en/kalvidassign.php create mode 100644 mod/kalvidassign/lib.php create mode 100644 mod/kalvidassign/locallib.php create mode 100644 mod/kalvidassign/lti_launch.php create mode 100644 mod/kalvidassign/mod_form.php create mode 100644 mod/kalvidassign/pix/icon.gif create mode 100644 mod/kalvidassign/renderable.php create mode 100644 mod/kalvidassign/renderer.php create mode 100644 mod/kalvidassign/single_submission.php create mode 100644 mod/kalvidassign/single_submission_form.php create mode 100644 mod/kalvidassign/styles.css create mode 100644 mod/kalvidassign/submission.php create mode 100644 mod/kalvidassign/tests/locallib_test.php create mode 100644 mod/kalvidassign/version.php create mode 100644 mod/kalvidassign/view.php create mode 100644 mod/kalvidpres/backup/moodle2/backup_kalvidpres_activity_task.class.php create mode 100644 mod/kalvidpres/backup/moodle2/backup_kalvidpres_settingslib.php create mode 100644 mod/kalvidpres/backup/moodle2/backup_kalvidpres_stepslib.php create mode 100644 mod/kalvidpres/backup/moodle2/backup_kalvidres_activity_task.class.php create mode 100644 mod/kalvidpres/backup/moodle2/backup_kalvidres_settingslib.php create mode 100644 mod/kalvidpres/backup/moodle2/backup_kalvidres_stepslib.php create mode 100644 mod/kalvidpres/backup/moodle2/restore_kalvidpres_activity_task.class.php create mode 100644 mod/kalvidpres/backup/moodle2/restore_kalvidpres_stepslib.php create mode 100644 mod/kalvidpres/backup/moodle2/restore_kalvidres_activity_task.class.php create mode 100644 mod/kalvidpres/backup/moodle2/restore_kalvidres_stepslib.php create mode 100644 mod/kalvidpres/db/access.php create mode 100644 mod/kalvidpres/db/install.xml create mode 100644 mod/kalvidpres/db/log.php create mode 100644 mod/kalvidpres/db/upgrade.php create mode 100644 mod/kalvidpres/lang/en/kalvidpres.php create mode 100644 mod/kalvidpres/lang/en/kalvidres.php create mode 100644 mod/kalvidpres/lib.php create mode 100644 mod/kalvidpres/locallib.php create mode 100644 mod/kalvidpres/lti_launch.php create mode 100644 mod/kalvidpres/mod_form.php create mode 100644 mod/kalvidpres/pix/icon.gif create mode 100644 mod/kalvidpres/renderer.php create mode 100644 mod/kalvidpres/styles.css create mode 100644 mod/kalvidpres/version.php create mode 100644 mod/kalvidpres/view.php create mode 100644 mod/kalvidres/backup/moodle2/backup_kalvidres_activity_task.class.php create mode 100644 mod/kalvidres/backup/moodle2/backup_kalvidres_settingslib.php create mode 100644 mod/kalvidres/backup/moodle2/backup_kalvidres_stepslib.php create mode 100644 mod/kalvidres/backup/moodle2/restore_kalvidres_activity_task.class.php create mode 100644 mod/kalvidres/backup/moodle2/restore_kalvidres_stepslib.php create mode 100644 mod/kalvidres/db/access.php create mode 100644 mod/kalvidres/db/install.xml create mode 100644 mod/kalvidres/db/log.php create mode 100644 mod/kalvidres/db/upgrade.php create mode 100644 mod/kalvidres/lang/en/kalvidres.php create mode 100644 mod/kalvidres/lib.php create mode 100644 mod/kalvidres/lti_launch.php create mode 100644 mod/kalvidres/mod_form.php create mode 100644 mod/kalvidres/pix/icon.gif create mode 100644 mod/kalvidres/renderer.php create mode 100644 mod/kalvidres/styles.css create mode 100644 mod/kalvidres/version.php create mode 100644 mod/kalvidres/view.php diff --git a/filter/kaltura/filter.php b/filter/kaltura/filter.php new file mode 100644 index 0000000000000..99db0494d09b9 --- /dev/null +++ b/filter/kaltura/filter.php @@ -0,0 +1,233 @@ +. + +/** + * Kaltura filter script. + * + * @package filter_kaltura + * @author Remote-Learner.net Inc + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + * @copyright (C) 2014 Remote-Learner.net Inc (http://www.remote-learner.net) + */ + +class filter_kaltura extends moodle_text_filter { + /** @var object $context The current page context. */ + public static $pagecontext = null; + + /** @var string $kafuri The KAF URI. */ + public static $kafuri = null; + + /** @var string $apiurl The URI used by the previous version (v3) of the plug-ins when embedding anchor tags. */ + public static $apiurl = null; + + /** @var string $module The module used to render part of the final URL. */ + public static $module = null; + + /** @var string $defaultheight The default height for the video. */ + public static $defaultheight = 280; + + /** @var string $defaultwidth The default width for the video. */ + public static $defaultwidth = 400; + + /** + * This function runs once during a single page request and initialzies + * some data. + * @param object $page Moodle page object. + * @param object $context Page context object. + */ + public function setup($page, $context) { + global $CFG; + require_once($CFG->dirroot.'/local/kaltura/locallib.php'); + $configsettings = local_kaltura_get_config(); + + self::$pagecontext = $this->get_course_context($context); + + $newuri = ''; + + self::$kafuri = $configsettings->kaf_uri; + + if (!empty($configsettings->uri)) { + self::$apiurl = $configsettings->uri; + } + + self::$module = local_kaltura_get_endpoint(KAF_BROWSE_EMBED_MODULE); + } + + /** + * This function returns the course context where possible. + * @param object $context A context object. + * @return object A Moodle context object. + */ + protected function get_course_context($context) { + $coursecontext = null; + + if ($context instanceof context_course) { + $coursecontext = $context; + } else if ($context instanceof context_module) { + $coursecontext = $context->get_course_context(); + } else { + $coursecontext = context_system::instance(); + } + + return $coursecontext; + } + + /** + * This function does the work of converting text that matches a regular expression into + * Kaltura video markup, so that links to Kaltura videos are displayed in the Kaltura + * video player. + * @param string $text Text that is to be displayed on the page. + * @param array $options An array of additional options. + * @return string The same text or modified text is returned. + */ + public function filter($text, array $options = array()) { + global $CFG; + + // Check if the the filter plug-in is enabled. + if (empty($CFG->filter_kaltura_enable)) { + return $text; + } + + // Check either if the KAF URI or API URI has been set. If neither has been set then return the text with no changes. + if (is_null(self::$kafuri) && is_null(self::$apiurl)) { + return $text; + } + + // Performance shortcut. All regexes bellow end with the tag, if not present nothing can match. + if (false === stripos($text, '')) { + return $text; + } + + // We need to return the original value if regex fails! + $newtext = $text; + + // Search for v3 Kaltura embedded anchor tag format. + $uri = self::$apiurl; + $uri = rtrim($uri, '/'); + $uri = str_replace(array('.', '/', 'https'), array('\.', '\/', 'https?'), $uri); + + $oldsearch = '/]*href="('.$uri.')\/index\.php\/kwidget\/wid\/_([0-9]+)\/uiconf_id\/([0-9]+)\/entry_id\/([\d]+_([a-z0-9]+))\/v\/flash"[^>]*>([^>]*)<\/a>/is'; + $newtext = preg_replace_callback($oldsearch, 'filter_kaltura_callback', $newtext); + + // Search for newer versoin of Kaltura embedded anchor tag format. + $uri = self::$kafuri; + $uri = rtrim($uri, '/'); + $uri = str_replace(array('http://', 'https://', '.', '/'), array('https?://', 'https?://', '\.', '\/'), $uri); + + $search = '/]*href="(https?:\/\/'.KALTURA_URI_TOKEN.')\/browseandembed\/index\/media\/entryid\/([\d]+_([a-z0-9]+))\/showDescription\/(true|false)\/showTitle\/(true|false)\/'; + $search .= 'showTags\/(true|false)\/showDuration\/(true|false)\/showOwner\/(true|false)\/showUploadDate\/(true|false)\/playerSize\/([0-9]+)x([0-9]+)\/playerSkin\/([0-9]+)\/"[^>]*>([^>]*)<\/a>/is'; + $newtext = preg_replace_callback($search, 'filter_kaltura_callback', $newtext); + + if (empty($newtext) || $newtext === $text) { + // Error or not filtered. + unset($newtext); + return $text; + } + + return $newtext; + } +} + +/** + * Change links to Kaltura into embedded Kaltura videos. + * @param array $link An array of elements matching the regular expression from class filter_kaltura - filter(). + * @return string Kaltura embed video markup. + */ +function filter_kaltura_callback($link) { + global $CFG; + $newtext = $link[0]; + + $newurl = $link[1]; + if (!empty($newurl)) { + // Check to see if token is being used in url and replace with kaf_uri. + $parts = parse_url($link[1]); + if (!empty($parts['host']) && KALTURA_URI_TOKEN == $parts['host']) { + $newurl = filter_kaltura::$kafuri; + } + } + + $newurl = preg_replace('#https?://#','',$newurl); + $kafuri = preg_replace('#https?://#', '', filter_kaltura::$kafuri); + // Convert KAF URI anchor tags into iframe markup. + if (14 == count($link) && $newurl == $kafuri) { + // Get the height and width of the iframe. + $properties = explode('||', $link[13]); + + if (4 != count($properties)) { + return $link[0]; + } + + $source = filter_kaltura::$kafuri.'/browseandembed/index/media/entryid/'.$link[2].'/showDescription/'.$link[4].'/showTitle/'.$link[5]; + $source .= '/showTags/'.$link[6].'/showDuration/'.$link[7].'/showOwner/'.$link[8].'/showUploadDate/'.$link[9]; + $source .= '/playerSize/'.$properties[3].'x'.$properties[2].'/playerSkin/'.$link[12]; + + // Iniitate an LTI launch. + $params = array( + 'courseid' => filter_kaltura::$pagecontext->instanceid, + 'height' => $properties[2], + 'width' => $properties[3], + 'withblocks' => 0, + 'source' => $source + ); + $url = new moodle_url('/filter/kaltura/lti_launch.php', $params); + + $attr = array( + 'id' => 'contentframe', + 'height' => $properties[2], + 'width' => $properties[3], + 'allowfullscreen' => 'true', + 'webkitallowfullscreen' => 'true', + 'mozallowfullscreen' => 'true', + 'src' => $url->out(false), + 'frameborder' => '0' + ); + + $newtext = html_writer::tag('iframe', '', $attr); + } + + // Convert v3 anchor tags into iframe markup. + if (7 == count($link) && $link[1] == filter_kaltura::$apiurl) { + $source = filter_kaltura::$kafuri.'/browseandembed/index/media/entryid/'.$link[4].'/playerSize/'; + $source .= filter_kaltura::$defaultwidth.'x'.filter_kaltura::$defaultheight.'/playerSkin/'.$link[3]; + + // Iniitate an LTI launch. + $params = array( + 'courseid' => filter_kaltura::$pagecontext->instanceid, + 'height' => filter_kaltura::$defaultheight, + 'width' => filter_kaltura::$defaultwidth, + 'withblocks' => 0, + 'source' => $source + ); + + $url = new moodle_url('/filter/kaltura/lti_launch.php', $params); + + $attr = array( + 'id' => 'contentframe', + 'height' => filter_kaltura::$defaultheight, + 'width' => filter_kaltura::$defaultwidth, + 'allowfullscreen' => 'true', + 'webkitallowfullscreen' => 'true', + 'mozallowfullscreen' => 'true', + 'src' => $url->out(false), + 'frameborder' => '0' + ); + + $newtext = html_writer::tag('iframe', '', $attr); + + } + + return $newtext; +} diff --git a/filter/kaltura/filtersettings.php b/filter/kaltura/filtersettings.php new file mode 100644 index 0000000000000..7e8dc74a9e979 --- /dev/null +++ b/filter/kaltura/filtersettings.php @@ -0,0 +1,30 @@ +. + +/** + * Kaltura filter settings script. + * + * @package filter_kaltura + * @author Remote-Learner.net Inc + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + * @copyright (C) 2014 Remote-Learner.net Inc (http://www.remote-learner.net) + */ + +defined('MOODLE_INTERNAL') || die; + +if ($ADMIN->fulltree) { + $settings->add(new admin_setting_configcheckbox('filter_kaltura_enable', get_string('enable', 'filter_kaltura'), get_string('enable_help', 'filter_kaltura'), 1)); +} \ No newline at end of file diff --git a/filter/kaltura/lang/en/filter_kaltura.php b/filter/kaltura/lang/en/filter_kaltura.php new file mode 100644 index 0000000000000..e3e1fa37574f9 --- /dev/null +++ b/filter/kaltura/lang/en/filter_kaltura.php @@ -0,0 +1,29 @@ +. + +/** + * Kaltura filter language file. + * + * @package filter_kaltura + * @author Remote-Learner.net Inc + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + * @copyright (C) 2014 Remote-Learner.net Inc (http://www.remote-learner.net) + */ + +$string['filtername'] = 'Kaltura Media'; +$string['enable'] = 'Embed Kaltura Video Links'; +$string['enable_help'] = 'Convert Kaltura video links to embed code'; +$string['unable'] = 'Unable to convert video at this time'; \ No newline at end of file diff --git a/filter/kaltura/lti_launch.php b/filter/kaltura/lti_launch.php new file mode 100644 index 0000000000000..9df539c9a54ea --- /dev/null +++ b/filter/kaltura/lti_launch.php @@ -0,0 +1,81 @@ +. + +/** + * Kaltura filter plug-in LTI launch page. + * + * @package filter_kaltura + * @author Remote-Learner.net Inc + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + * @copyright (C) 2014 Remote Learner.net Inc http://www.remote-learner.net + */ + +require_once(dirname(dirname(dirname(__FILE__))).'/config.php'); +require_once(dirname(dirname(dirname(__FILE__))).'/local/kaltura/locallib.php'); + +global $SITE; + +require_login(); + +$courseid = required_param('courseid', PARAM_INT); +$height = required_param('height', PARAM_INT); +$width = required_param('width', PARAM_INT); +$withblocks = optional_param('withblocks', 0, PARAM_INT); +$source = optional_param('source', '', PARAM_URL); + +// If a course id of zero is passed, then we must be in the system context. +if (0 != $courseid) { + $context = context_course::instance($courseid); +} else { + $context = context_system::instance(); +} + +// Check if we're in a course context. +if ($context instanceof context_course) { + $course = get_course($courseid); + + // Check if the user has the capability to view comments in Moodle. + if (!has_capability('moodle/comment:view', $context)) { + echo get_string('nocapabilitytousethisservice', 'error'); + die(); + } +} else { + $course = $SITE; +} + +$launch = array(); +$launch['id'] = 1; +$launch['cmid'] = 0; +$launch['title'] = 'Kaltura video resource'; +$launch['module'] = KAF_BROWSE_EMBED_MODULE; +$launch['course'] = $course; +$launch['width'] = $width; +$launch['height'] = $height; +$launch['custom_publishdata'] = ''; + +if (false === local_kaltura_url_contains_configured_hostname($source) && !empty($source)) { + echo get_string('invalid_source_parameter', 'mod_kalvidres'); + die; +} else { + $launch['source'] = urldecode($source); +} + +if (local_kaltura_validate_browseembed_required_params($launch)) { + $content = local_kaltura_request_lti_launch($launch, $withblocks); + echo $content; +} else { + echo get_string('invalid_launch_parameters', 'mod_kalvidres'); +} \ No newline at end of file diff --git a/filter/kaltura/version.php b/filter/kaltura/version.php new file mode 100644 index 0000000000000..bb8a56eccd35f --- /dev/null +++ b/filter/kaltura/version.php @@ -0,0 +1,33 @@ +. + +/** + * Kaltura version script. + * + * @package filter_kaltura + * @author Remote-Learner.net Inc + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + * @copyright (C) 2014 Remote-Learner.net Inc (http://www.remote-learner.net) + */ +defined('MOODLE_INTERNAL') || die(); + +$plugin->version = 2014023000; +$plugin->release = 'Kaltura release 4.0.00 (RL: TBD)'; +$plugin->requires = 2013111801; +$plugin->maturity = MATURITY_STABLE; +$plugin->dependencies = array( + 'local_kaltura' => 2014013000 +); diff --git a/lib/editor/tinymce/plugins/kalturamedia/lang/en/tinymce_kalturamedia.php b/lib/editor/tinymce/plugins/kalturamedia/lang/en/tinymce_kalturamedia.php new file mode 100644 index 0000000000000..b2f2b7d51943f --- /dev/null +++ b/lib/editor/tinymce/plugins/kalturamedia/lang/en/tinymce_kalturamedia.php @@ -0,0 +1,28 @@ +. + +/** + * Kaltura media language file. + * + * @package tinymce_kalturamedia + * @author Remote-Learner.net Inc + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + * @copyright (C) 2014 Remote Learner.net Inc http://www.remote-learner.net + */ + +$string['pluginname'] = 'Kaltura media'; +/* All lang strings used from TinyMCE JavaScript code must be named 'pluginname:stringname', no need to create langs/en_dlg.js */ +$string['kalturamedia:desc'] = 'Embed Kaltura Media'; +$string['kalturamedia:insertbtn'] = 'Insert media'; +$string['kalturamedia:cancelbtn'] = 'Cancel'; diff --git a/lib/editor/tinymce/plugins/kalturamedia/lib.php b/lib/editor/tinymce/plugins/kalturamedia/lib.php new file mode 100644 index 0000000000000..16d414b02a224 --- /dev/null +++ b/lib/editor/tinymce/plugins/kalturamedia/lib.php @@ -0,0 +1,69 @@ +. + +/** + * Kaltura media library file. + * + * @package tinymce_kalturamedia + * @author Remote-Learner.net Inc + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + * @copyright (C) 2014 Remote Learner.net Inc http://www.remote-learner.net + */ + +if (!defined('MOODLE_INTERNAL')) { + die('Direct access to this script is forbidden.'); +} + +require_once(dirname(dirname(dirname(dirname(dirname(dirname(__FILE__)))))).'/local/kaltura/locallib.php'); + +class tinymce_kalturamedia extends editor_tinymce_plugin { + /** @var array list of buttons defined by this plugin */ + protected $buttons = array('kalturamedia'); + + /** + * Adjusts TinyMCE init parameters for this plugin. + * + * Subclasses must implement this function in order to carry out changes + * to the TinyMCE settings. + * + * @param array $params TinyMCE init parameters array + * @param context $context Context where editor is being shown + * @param array $options Options for this editor + */ + protected function update_init_params(array &$params, context $context, array $options = null) { + $params['lti_launch_context_id'] = $context->id; + + // Add button after 'unlink' in Moodlemedia + if ($row = $this->find_button($params, 'moodleemoticon')) { + $this->add_button_after($params, $row, 'kalturamedia', 'moodlemedia', true); + } else { + $this->add_button_after($params, 1, 'kalturamedia'); + } + + // Add JS file, which uses default name. + $this->add_js_plugin($params); + } + + /** + * Gets the order in which to run this plugin. Order usually only matters if + * (a) the place you add your button might depend on another plugin, or + * (b) you want to make some changes to layout etc. that should happen last. + * The default order is 100; within that, plugins are sorted alphabetically. + * Return a lower number if you want this plugin to run earlier, or a higher + * number if you want it to run later. + */ + protected function get_sort_order() { + return 111; + } +} \ No newline at end of file diff --git a/lib/editor/tinymce/plugins/kalturamedia/lti_launch.php b/lib/editor/tinymce/plugins/kalturamedia/lti_launch.php new file mode 100644 index 0000000000000..1c4ea2631073d --- /dev/null +++ b/lib/editor/tinymce/plugins/kalturamedia/lti_launch.php @@ -0,0 +1,77 @@ +. + +/** + * Kaltura media LTI launch page. + * + * @package tinymce_kalturamedia + * @author Remote-Learner.net Inc + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + * @copyright (C) 2014 Remote Learner.net Inc http://www.remote-learner.net + */ + +require_once(dirname(dirname(dirname(dirname(dirname(dirname(__FILE__)))))).'/config.php'); +require_once(dirname(dirname(dirname(dirname(dirname(dirname(__FILE__)))))).'/local/kaltura/locallib.php'); + +global $USER; + +require_login(); + +$contextid = required_param('contextid', PARAM_INT); +$height = required_param('height', PARAM_INT); +$width = required_param('width', PARAM_INT); +$withblocks = optional_param('withblocks', 0, PARAM_INT); + +$context = context::instance_by_id($contextid); + +$launch = array(); +$course = 0; + +if ($context instanceof context_course) { + $course = get_course($context->instanceid); + +} else if ($context instanceof context_system || $context instanceof context_coursecat) { + $course = get_course(1); +} else { + // Find parent context + $parentcontexts = $context->get_parent_contexts(false); + + foreach ($parentcontexts as $ctx) { + if ($ctx instanceof context_course) { + $course = get_course($ctx->instanceid); + break; + } else if ($ctx instanceof context_system || $ctx instanceof context_coursecat) { + $course = get_course(1); + break; + } + } +} + +$launch['id'] = 1; +$launch['cmid'] = 0; +$launch['title'] = 'Kaltura media'; +$launch['module'] = KAF_BROWSE_EMBED_MODULE; +$launch['course'] = $course; +$launch['width'] = $width; +$launch['height'] = $height; +$launch['custom_publishdata'] = ''; + +if (local_kaltura_validate_browseembed_required_params($launch)) { + $content = local_kaltura_request_lti_launch($launch, $withblocks); + echo $content; +} else { + echo get_string('invalid_launch_parameters', 'mod_kalvidres'); +} diff --git a/lib/editor/tinymce/plugins/kalturamedia/pix/icon.png b/lib/editor/tinymce/plugins/kalturamedia/pix/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..615c31d68e7c309bb63b6098a4bfbcad17a0bd27 GIT binary patch literal 1912 zcmaJ?X;c$u6b)e!Lqt5r4Hw2yt5C8NvXr2K5P}krB?WO~NCt=|nK&6t5U{wRsDPp( zR?%wJiY!$?i@2c(3R)M`atMkdM+;Q}i;AF#zjX4L3#Hi6(Z+o*#S%V7+Nf#XzKA=r8LA_%CILNJ0OW5{&A zaJ)*o3WdW~1%)eCEm!cB;B0Te%P7DFG%yAMMvYpl7Z`=$fUW>vTaM`Zc7Vh+(|~Rp~Gl zq6I99Pz;iQ2|+y5PbFw{Uu3oV&)0-s7~Kfz=u8^JQqmw$Ci{P=M)L)&$3o$+`TnP{ zK0Hwe(?elBl7K4k#>GyvgwhFoQ5eDyG#o+HgSR+89>EZOJfZ`9!#F^MN~=T+`T?{| zCJ4~#F-WU`1H?iQ=hIXwrGUfr3A}9OI!cd z=D{P}JC@}a)8d;iwuiO2*HPTmCMRbA|5iEz#G-JcX?mDLU|1Z*+iZT+^mgoASKDP{ z4l2mxwi?gzn_07RPgV;LjT%l)AJ6uWeXvDXGAwrDsBv*)IWOR}p!MoYnwt}nPqbhD zYdmWsxINRvngY9>r;s!V(s|xYYYGTLv*}CGn>~3W@4w#Z+oz)}N#PRQH{Cw#X}uWs%&oK3G&W zrd@jC-qCJ!P76VPyX17^qFsk~<`>#T%ZbFwLMh~yQTc0DdpJ1<+OR+Q>EEt5BvrrI z`u&i_jXC3D|L%u9!RDX8+qT#-s`tc_?0~zqR&5UrR^#`8IqCH|nR(0xBfEKl-lost zDzZAZ)!b{^yX;2PZbnyXh1&n_;v}NZ^znO_iyzMhCmroJ?`Qfm-?C#f4tIgAP?fH& z-Y$;{2R4@XC$|;F1e+g+&@Og%Uplq6W>OAaQtEx9$2eQ7>fCFLzwxMope`v~GZ%X% z@jf#ddb->y<@Cs0MOyspuCy#^)AM;-c1QwW(M90}wvH*;Rf!!R{xH2MTW!}&&Xw-I z<@kFui4uM9jdLh(#rgDIQB{KZ11*7Nh;}g&5G}>lvZx>Nh);W@7U@3=*b0-$I%r@>AimMyQx{zYnmtb zfgdD)K8UEj-1eiB;RuPtJNny!1P5DxdC1JL@|HTa7Rx-BEF2cUt+D1LapjCCuI6~7 zZ%r$^IdRR)wx+s-mld5vx2axH&5DMnMSyjF>E`^pVCqC`bl;P)tYY>oiCxk3Ddo_~ zOQV~bvwE(6<5DUuUi>EQW+4CYf&CF4tvwY->WLf6-Y*+|X2IMn^ZHcp)=clMRvQS4 zxoeK+uX_1P&^2*%1Q^1w8v?6y21*Xh)|. + +/** + * Kaltura media javascript file. + * + * @package tinymce_kalturamedia + * @author Remote-Learner.net Inc + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + * @copyright (C) 2014 Remote Learner.net Inc http://www.remote-learner.net + */ + +(function() { + tinymce.create('tinymce.plugins.kalturamediaPlugin', { + /** + * Initializes the plugin, this will be executed after the plugin has been created. + * This call is done before the editor instance has finished it's initialization so use the onInit event + * of the editor instance to intercept that event. + * + * @param {tinymce.Editor} ed Editor instance that the plugin is initialized in. + * @param {string} url Absolute URL to where the plugin is located. + */ + init : function(ed, url) { + lang = tinyMCE.activeEditor.getParam('language'); + + // Register the command to open a popup window + ed.addCommand('mcekalturamedia', function() { + ed.windowManager.open({ + file : ed.getParam("moodle_plugin_base")+'kalturamedia/tinymce/ltibrowse.php?lang=' + lang, + width : 1128 + parseInt(ed.getLang('media.delta_width', 0)), + height : 583 + parseInt(ed.getLang('media.delta_height', 0)), + inline : 1 + }, { + plugin_url : url + }); + }); + + // Register kalturaMedia button + ed.addButton('kalturamedia', { + title : 'kalturamedia.desc', + cmd : 'mcekalturamedia', + image : url+'/img/icon.gif' + }); + }, + + /** + * Returns information about the plugin as a name/value array. + * The current keys are longname, author, authorurl, infourl and version. + * + * @return {Object} Name/value array containing information about the plugin. + */ + getInfo : function() { + return { + longname : 'Kaltura media plugin', + author : 'Remote-Learner.net Inc', + authorurl : 'http://remote-learner.net', + infourl : 'http://docs.moodle.org/en/TinyMCE', + version : "1.0" + }; + } + }); + + // Register plugin. + tinymce.PluginManager.add('kalturamedia', tinymce.plugins.kalturamediaPlugin); +})(); diff --git a/lib/editor/tinymce/plugins/kalturamedia/tinymce/img/icon.gif b/lib/editor/tinymce/plugins/kalturamedia/tinymce/img/icon.gif new file mode 100644 index 0000000000000000000000000000000000000000..b32189b87d2ce8ab896659db755c9773d521696f GIT binary patch literal 575 zcmZ?wbhEHb6krfwIOfXmk4^hGr{NoZ^Zz`Wzj=+n@*95;H2Ep0^FhSqkD&g0F_WJn zIv>T1zl!U9me6}EW%6H5mmzC5L-rhoytxed(;4z-GUU%QAI|6;!XD@FdV;{CguYttpu^_MMnTs2v9)AHC2 z?Hvyd{$FGGf1Tm~O@?oG82;R0{C}U}{}YD)Lk%eY6Lc<0O)N=GQ7F$W$xv|j^bKH8 z{K>+|#Zb?n!vF-Jh+<%GZ>Vo-mThipZ&qru>uBcTZj!5aXi{m@ZDQf8SDsw2)}f. + +/** + * Kaltura media ltippopup javascript file. This code is based off of the word done for the Moodle media plug-in. + * @see editor/tinymce/plugins/moodlemedia. + * + * @package tinymce_kalturamedia + * @author Remote-Learner.net Inc + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + * @copyright (C) 2014 Remote Learner.net Inc http://www.remote-learner.net + */ + +var ed, url; + +if (url = tinyMCEPopup.getParam("media_external_list_url")) { + document.write(''); +} + +/** + * Initialization function to set a global to the current tinyMCE popup editor instance; and to set the editor context hidden element. + */ +function init() { + ed = tinyMCEPopup.editor; + var contextid = ed.getParam('lti_launch_context_id'); + document.getElementById('lti_launch_context_id').value = contextid; +} + +/** + * Insert the selected media into the editor. + */ +function insertMedia() { + var form = document.forms[0]; + var token = form.token.value; + var url = ''; + var parser = document.createElement('a'); + parser.href = form.source.value; + url = token + parser.pathname + parser.search; + var content = 'tinymce-kalturamedia-embed||'+form.video_title.value+'||'+form.width.value+'||'+form.height.value+''; + ed.execCommand('mceInsertContent', false, content); + tinyMCEPopup.close(); +} +tinyMCEPopup.onInit.add(init); diff --git a/lib/editor/tinymce/plugins/kalturamedia/tinymce/ltibrowse.php b/lib/editor/tinymce/plugins/kalturamedia/tinymce/ltibrowse.php new file mode 100644 index 0000000000000..0ab8ff96df99b --- /dev/null +++ b/lib/editor/tinymce/plugins/kalturamedia/tinymce/ltibrowse.php @@ -0,0 +1,69 @@ +. + +/** + * Kaltura media LTI launch page. + * + * @package tinymce_kalturamedia + * @author Remote-Learner.net Inc + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + * @copyright (C) 2014 Remote Learner.net Inc http://www.remote-learner.net + */ + +require_once(dirname(dirname(dirname(dirname(dirname(dirname(dirname(__FILE__))))))).'/config.php'); +require_once($CFG->dirroot.'/local/kaltura/locallib.php'); +require_once('renderer.php'); + +global $PAGE; + +require_login(); + +$PAGE->set_pagelayout('popup'); +$PAGE->set_url('/editor/tinymce/plugins/kalturamedia/tinymce/ltilaunch.php'); +$PAGE->set_context(context_system::instance()); + +echo $OUTPUT->header(); + +$editor = get_texteditor('tinymce'); +$tinymcebaseurl = $editor->get_tinymce_base_url(); + +echo html_writer::script('', $tinymcebaseurl.'tiny_mce_popup.js'); +echo html_writer::script('', $tinymcebaseurl.'utils/validate.js'); +echo html_writer::script('', $tinymcebaseurl.'utils/form_utils.js'); +echo html_writer::script('', $tinymcebaseurl.'utils/editable_selects.js'); +echo html_writer::script('', 'js/ltipopuplib.js'); + +echo tinymce_kalturamedia_preview_embed_form(); + +$urlparams = array( + 'withblocks' => 0, + 'width' => KALTURA_PANEL_WIDTH, + 'height' => KALTURA_PANEL_HEIGHT +); + +$url = new moodle_url('/lib/editor/tinymce/plugins/kalturamedia/lti_launch.php', $urlparams); + +$params = array( + 'insertbtnid' => TINMCE_KALTURAMEDIA_INSERT_BUTTON_ID, + 'ltilaunchurl' => $url->out(), + 'objecttagheight' => TINMCE_KALTURAMEDIA_OBJECT_TAG_HEIGHT, + 'objecttagid' => TINMCE_KALTURAMEDIA_OBJECT_TAG_ID, + 'previewiframeid' => TINMCE_KALTURAMEDIA_PREVIEW_IFRAME_TAG_ID +); + +$PAGE->requires->yui_module('moodle-local_kaltura-ltitinymcepanel', 'M.local_kaltura.init', array($params), null, true); + +echo $OUTPUT->footer(); diff --git a/lib/editor/tinymce/plugins/kalturamedia/tinymce/renderer.php b/lib/editor/tinymce/plugins/kalturamedia/tinymce/renderer.php new file mode 100644 index 0000000000000..79d03f0d6692d --- /dev/null +++ b/lib/editor/tinymce/plugins/kalturamedia/tinymce/renderer.php @@ -0,0 +1,84 @@ +. + +/** + * LTI preview and selection renderer library. + * + * @package tinymce_kalturamedia + * @author Remote-Learner.net Inc + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + * @copyright (C) 2014 Remote Learner.net Inc http://www.remote-learner.net + */ + +define('TINMCE_KALTURAMEDIA_INSERT_BUTTON_ID', 'insert'); +define('TINMCE_KALTURAMEDIA_OBJECT_TAG_ID', 'objecttagcontainer'); +define('TINMCE_KALTURAMEDIA_PREVIEW_IFRAME_TAG_ID', 'video_preview_frame'); +define('TINMCE_KALTURAMEDIA_OBJECT_TAG_HEIGHT', '500'); + +/** + * Returns HTML markup for a form used to preview and insert the video markup into the page. + * @return string HTML markup. + */ +function tinymce_kalturamedia_preview_embed_form() { + // Create hidden elements. + $hiddenelements = html_writer::empty_tag('input', array('type' => 'hidden', 'id' => 'entry_id', 'value' => '')); + $hiddenelements .= html_writer::empty_tag('input', array('type' => 'hidden', 'id' => 'source', 'value' => '')); + $hiddenelements .= html_writer::empty_tag('input', array('type' => 'hidden', 'id' => 'token', 'value' => KALTURA_URI_TOKEN)); + $hiddenelements .= html_writer::empty_tag('input', array('type' => 'hidden', 'id' => 'video_title', 'value' => '')); + $hiddenelements .= html_writer::empty_tag('input', array('type' => 'hidden', 'id' => 'uiconf_id', 'value' => '')); + $hiddenelements .= html_writer::empty_tag('input', array('type' => 'hidden', 'id' => 'widescreen', 'value' => '')); + $hiddenelements .= html_writer::empty_tag('input', array('type' => 'hidden', 'id' => 'height', 'value' => '')); + $hiddenelements .= html_writer::empty_tag('input', array('type' => 'hidden', 'id' => 'width', 'value' => '')); + $hiddenelements .= html_writer::empty_tag('input', array('type' => 'hidden', 'id' => 'lti_launch_context_id', 'value' => '')); + + // Create LTI launch and preview container divs + $ltilaunchcontainer = html_writer::tag('div', '', array('id' => TINMCE_KALTURAMEDIA_OBJECT_TAG_ID)); + $previewcontainer = html_writer::tag('div', '', array('id' => TINMCE_KALTURAMEDIA_PREVIEW_IFRAME_TAG_ID)); + + // Create insert button. + $params = array( + 'type' => 'submit', + 'id' => TINMCE_KALTURAMEDIA_INSERT_BUTTON_ID, + 'name' => TINMCE_KALTURAMEDIA_INSERT_BUTTON_ID, + // Using the language string from the local plug-in. + 'value' => get_string('insertbtn', 'local_kaltura'), + 'class' => 'updateButton', + 'style' => 'display: none' + ); + $insertbutton = html_writer::empty_tag('input', $params); + $insertbuttondiv = html_writer::tag('div', $insertbutton, array('style' => 'float: left')); + + // Create cancel button. + $param = array( + 'type' => 'submit', + 'id' => 'cancel', + 'name' => 'cancel', + // Using the language string from the local plug-in. TODO: figure out how to access the TinyMCE language strings. + 'value' => get_string('cancelbtn', 'local_kaltura'), + 'onclick' => 'tinyMCEPopup.close();' + ); + $cancelbutton = html_writer::empty_tag('input', $param); + $cancelbuttondiv = html_writer::tag('div', $cancelbutton, array('style' => 'float: right')); + + $buttonscontainer = html_writer::tag('div', $insertbuttondiv.$cancelbuttondiv, array('class' => 'mceActionPanel')); + + // This element is used so that the ltiservice.js can simulate a 'click' event. This tells the plug-in that the user has choosen a video to embed on the page + // and it will enable the insert button. + $simulateclickdiv = html_writer::tag('input', '', array('id' => 'closeltipanel', 'type' => 'hidden', 'value' => '')); + + $content = $simulateclickdiv.$ltilaunchcontainer.$previewcontainer.$hiddenelements.$buttonscontainer; + return html_writer::tag('form', $content, array('onsubmit' => 'insertMedia();return false', 'action' => '#')); +} diff --git a/lib/editor/tinymce/plugins/kalturamedia/tinymce_kalturamedia.php b/lib/editor/tinymce/plugins/kalturamedia/tinymce_kalturamedia.php new file mode 100644 index 0000000000000..8c54889da8eaf --- /dev/null +++ b/lib/editor/tinymce/plugins/kalturamedia/tinymce_kalturamedia.php @@ -0,0 +1,28 @@ +. + +/** + * Kaltura media language file. + * + * @package tinymce_kalturamedia + * @author Remote-Learner.net Inc + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + * @copyright (C) 2014 Remote Learner.net Inc http://www.remote-learner.net + */ + +$string['pluginname'] = 'Kaltura media'; +/* All lang strings used from TinyMCE JavaScript code must be named 'pluginname:stringname', no need to create langs/en_dlg.js */ +$string['kalturamedia:desc'] = 'Embed Kaltura Media'; +$string['insertbtn'] = 'Insert media'; +$string['cancelbtn'] = 'Cancel'; diff --git a/lib/editor/tinymce/plugins/kalturamedia/version.php b/lib/editor/tinymce/plugins/kalturamedia/version.php new file mode 100644 index 0000000000000..2a118b2d2b73a --- /dev/null +++ b/lib/editor/tinymce/plugins/kalturamedia/version.php @@ -0,0 +1,33 @@ +. + +/** + * Kaltura media version file. + * + * @package tinymce_kalturamedia + * @author Remote-Learner.net Inc + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + * @copyright (C) 2014 Remote Learner.net Inc http://www.remote-learner.net + */ + +defined('MOODLE_INTERNAL') || die(); + +$plugin->version = 2014023000; +// Required Moodle version. +$plugin->requires = 2013111801; +// Full name of the plugin (used for diagnostics). +$plugin->component = 'tinymce_kalturamedia'; +$plugin->dependencies = array( + 'local_kaltura' => 2014013000 +); diff --git a/local/kaltura/API/KalturaClient.php b/local/kaltura/API/KalturaClient.php new file mode 100644 index 0000000000000..45294c8ad090a --- /dev/null +++ b/local/kaltura/API/KalturaClient.php @@ -0,0 +1,8347 @@ +. +// +// @ignore +// =================================================================================================== + +/** + * @package Kaltura + * @subpackage Client + */ +require_once(dirname(__FILE__) . "/KalturaClientBase.php"); +require_once(dirname(__FILE__) . "/KalturaEnums.php"); +require_once(dirname(__FILE__) . "/KalturaTypes.php"); + + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaAccessControlProfileService extends KalturaServiceBase +{ + function __construct(KalturaClient $client = null) + { + parent::__construct($client); + } + + /** + * Add new access control profile + * + * @param KalturaAccessControlProfile $accessControlProfile + * @return KalturaAccessControlProfile + */ + function add(KalturaAccessControlProfile $accessControlProfile) + { + $kparams = array(); + $this->client->addParam($kparams, "accessControlProfile", $accessControlProfile->toParams()); + $this->client->queueServiceActionCall("accesscontrolprofile", "add", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaAccessControlProfile"); + return $resultObject; + } + + /** + * Get access control profile by id + * + * @param int $id + * @return KalturaAccessControlProfile + */ + function get($id) + { + $kparams = array(); + $this->client->addParam($kparams, "id", $id); + $this->client->queueServiceActionCall("accesscontrolprofile", "get", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaAccessControlProfile"); + return $resultObject; + } + + /** + * Update access control profile by id + * + * @param int $id + * @param KalturaAccessControlProfile $accessControlProfile + * @return KalturaAccessControlProfile + */ + function update($id, KalturaAccessControlProfile $accessControlProfile) + { + $kparams = array(); + $this->client->addParam($kparams, "id", $id); + $this->client->addParam($kparams, "accessControlProfile", $accessControlProfile->toParams()); + $this->client->queueServiceActionCall("accesscontrolprofile", "update", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaAccessControlProfile"); + return $resultObject; + } + + /** + * Delete access control profile by id + * + * @param int $id + * @return + */ + function delete($id) + { + $kparams = array(); + $this->client->addParam($kparams, "id", $id); + $this->client->queueServiceActionCall("accesscontrolprofile", "delete", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "null"); + return $resultObject; + } + + /** + * List access control profiles by filter and pager + * + * @param KalturaAccessControlProfileFilter $filter + * @param KalturaFilterPager $pager + * @return KalturaAccessControlProfileListResponse + */ + function listAction(KalturaAccessControlProfileFilter $filter = null, KalturaFilterPager $pager = null) + { + $kparams = array(); + if ($filter !== null) + $this->client->addParam($kparams, "filter", $filter->toParams()); + if ($pager !== null) + $this->client->addParam($kparams, "pager", $pager->toParams()); + $this->client->queueServiceActionCall("accesscontrolprofile", "list", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaAccessControlProfileListResponse"); + return $resultObject; + } +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaAccessControlService extends KalturaServiceBase +{ + function __construct(KalturaClient $client = null) + { + parent::__construct($client); + } + + /** + * Add new Access Control Profile + * + * @param KalturaAccessControl $accessControl + * @return KalturaAccessControl + */ + function add(KalturaAccessControl $accessControl) + { + $kparams = array(); + $this->client->addParam($kparams, "accessControl", $accessControl->toParams()); + $this->client->queueServiceActionCall("accesscontrol", "add", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaAccessControl"); + return $resultObject; + } + + /** + * Get Access Control Profile by id + * + * @param int $id + * @return KalturaAccessControl + */ + function get($id) + { + $kparams = array(); + $this->client->addParam($kparams, "id", $id); + $this->client->queueServiceActionCall("accesscontrol", "get", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaAccessControl"); + return $resultObject; + } + + /** + * Update Access Control Profile by id + * + * @param int $id + * @param KalturaAccessControl $accessControl + * @return KalturaAccessControl + */ + function update($id, KalturaAccessControl $accessControl) + { + $kparams = array(); + $this->client->addParam($kparams, "id", $id); + $this->client->addParam($kparams, "accessControl", $accessControl->toParams()); + $this->client->queueServiceActionCall("accesscontrol", "update", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaAccessControl"); + return $resultObject; + } + + /** + * Delete Access Control Profile by id + * + * @param int $id + * @return + */ + function delete($id) + { + $kparams = array(); + $this->client->addParam($kparams, "id", $id); + $this->client->queueServiceActionCall("accesscontrol", "delete", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "null"); + return $resultObject; + } + + /** + * List Access Control Profiles by filter and pager + * + * @param KalturaAccessControlFilter $filter + * @param KalturaFilterPager $pager + * @return KalturaAccessControlListResponse + */ + function listAction(KalturaAccessControlFilter $filter = null, KalturaFilterPager $pager = null) + { + $kparams = array(); + if ($filter !== null) + $this->client->addParam($kparams, "filter", $filter->toParams()); + if ($pager !== null) + $this->client->addParam($kparams, "pager", $pager->toParams()); + $this->client->queueServiceActionCall("accesscontrol", "list", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaAccessControlListResponse"); + return $resultObject; + } +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaAdminUserService extends KalturaServiceBase +{ + function __construct(KalturaClient $client = null) + { + parent::__construct($client); + } + + /** + * Update admin user password and email + * + * @param string $email + * @param string $password + * @param string $newEmail Optional, provide only when you want to update the email + * @param string $newPassword + * @return KalturaAdminUser + */ + function updatePassword($email, $password, $newEmail = "", $newPassword = "") + { + $kparams = array(); + $this->client->addParam($kparams, "email", $email); + $this->client->addParam($kparams, "password", $password); + $this->client->addParam($kparams, "newEmail", $newEmail); + $this->client->addParam($kparams, "newPassword", $newPassword); + $this->client->queueServiceActionCall("adminuser", "updatePassword", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaAdminUser"); + return $resultObject; + } + + /** + * Reset admin user password and send it to the users email address + * + * @param string $email + * @return + */ + function resetPassword($email) + { + $kparams = array(); + $this->client->addParam($kparams, "email", $email); + $this->client->queueServiceActionCall("adminuser", "resetPassword", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "null"); + return $resultObject; + } + + /** + * Get an admin session using admin email and password (Used for login to the KMC application) + * + * @param string $email + * @param string $password + * @param int $partnerId + * @return string + */ + function login($email, $password, $partnerId = null) + { + $kparams = array(); + $this->client->addParam($kparams, "email", $email); + $this->client->addParam($kparams, "password", $password); + $this->client->addParam($kparams, "partnerId", $partnerId); + $this->client->queueServiceActionCall("adminuser", "login", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "string"); + return $resultObject; + } + + /** + * Set initial users password + * + * @param string $hashKey + * @param string $newPassword New password to set + * @return + */ + function setInitialPassword($hashKey, $newPassword) + { + $kparams = array(); + $this->client->addParam($kparams, "hashKey", $hashKey); + $this->client->addParam($kparams, "newPassword", $newPassword); + $this->client->queueServiceActionCall("adminuser", "setInitialPassword", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "null"); + return $resultObject; + } +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaBaseEntryService extends KalturaServiceBase +{ + function __construct(KalturaClient $client = null) + { + parent::__construct($client); + } + + /** + * Generic add entry, should be used when the uploaded entry type is not known. + * + * @param KalturaBaseEntry $entry + * @param string $type + * @return KalturaBaseEntry + */ + function add(KalturaBaseEntry $entry, $type = null) + { + $kparams = array(); + $this->client->addParam($kparams, "entry", $entry->toParams()); + $this->client->addParam($kparams, "type", $type); + $this->client->queueServiceActionCall("baseentry", "add", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaBaseEntry"); + return $resultObject; + } + + /** + * Attach content resource to entry in status NO_MEDIA + * + * @param string $entryId + * @param KalturaResource $resource + * @return KalturaBaseEntry + */ + function addContent($entryId, KalturaResource $resource) + { + $kparams = array(); + $this->client->addParam($kparams, "entryId", $entryId); + $this->client->addParam($kparams, "resource", $resource->toParams()); + $this->client->queueServiceActionCall("baseentry", "addContent", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaBaseEntry"); + return $resultObject; + } + + /** + * Generic add entry using an uploaded file, should be used when the uploaded entry type is not known. + * + * @param KalturaBaseEntry $entry + * @param string $uploadTokenId + * @param string $type + * @return KalturaBaseEntry + */ + function addFromUploadedFile(KalturaBaseEntry $entry, $uploadTokenId, $type = null) + { + $kparams = array(); + $this->client->addParam($kparams, "entry", $entry->toParams()); + $this->client->addParam($kparams, "uploadTokenId", $uploadTokenId); + $this->client->addParam($kparams, "type", $type); + $this->client->queueServiceActionCall("baseentry", "addFromUploadedFile", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaBaseEntry"); + return $resultObject; + } + + /** + * Get base entry by ID. + * + * @param string $entryId Entry id + * @param int $version Desired version of the data + * @return KalturaBaseEntry + */ + function get($entryId, $version = -1) + { + $kparams = array(); + $this->client->addParam($kparams, "entryId", $entryId); + $this->client->addParam($kparams, "version", $version); + $this->client->queueServiceActionCall("baseentry", "get", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaBaseEntry"); + return $resultObject; + } + + /** + * Get remote storage existing paths for the asset. + * + * @param string $entryId + * @return KalturaRemotePathListResponse + */ + function getRemotePaths($entryId) + { + $kparams = array(); + $this->client->addParam($kparams, "entryId", $entryId); + $this->client->queueServiceActionCall("baseentry", "getRemotePaths", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaRemotePathListResponse"); + return $resultObject; + } + + /** + * Update base entry. Only the properties that were set will be updated. + * + * @param string $entryId Entry id to update + * @param KalturaBaseEntry $baseEntry Base entry metadata to update + * @return KalturaBaseEntry + */ + function update($entryId, KalturaBaseEntry $baseEntry) + { + $kparams = array(); + $this->client->addParam($kparams, "entryId", $entryId); + $this->client->addParam($kparams, "baseEntry", $baseEntry->toParams()); + $this->client->queueServiceActionCall("baseentry", "update", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaBaseEntry"); + return $resultObject; + } + + /** + * Update the content resource associated with the entry. + * + * @param string $entryId Entry id to update + * @param KalturaResource $resource Resource to be used to replace entry content + * @param int $conversionProfileId The conversion profile id to be used on the entry + * @return KalturaBaseEntry + */ + function updateContent($entryId, KalturaResource $resource, $conversionProfileId = null) + { + $kparams = array(); + $this->client->addParam($kparams, "entryId", $entryId); + $this->client->addParam($kparams, "resource", $resource->toParams()); + $this->client->addParam($kparams, "conversionProfileId", $conversionProfileId); + $this->client->queueServiceActionCall("baseentry", "updateContent", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaBaseEntry"); + return $resultObject; + } + + /** + * Get an array of KalturaBaseEntry objects by a comma-separated list of ids. + * + * @param string $entryIds Comma separated string of entry ids + * @return array + */ + function getByIds($entryIds) + { + $kparams = array(); + $this->client->addParam($kparams, "entryIds", $entryIds); + $this->client->queueServiceActionCall("baseentry", "getByIds", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "array"); + return $resultObject; + } + + /** + * Delete an entry. + * + * @param string $entryId Entry id to delete + * @return + */ + function delete($entryId) + { + $kparams = array(); + $this->client->addParam($kparams, "entryId", $entryId); + $this->client->queueServiceActionCall("baseentry", "delete", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "null"); + return $resultObject; + } + + /** + * List base entries by filter with paging support. + * + * @param KalturaBaseEntryFilter $filter Entry filter + * @param KalturaFilterPager $pager Pager + * @return KalturaBaseEntryListResponse + */ + function listAction(KalturaBaseEntryFilter $filter = null, KalturaFilterPager $pager = null) + { + $kparams = array(); + if ($filter !== null) + $this->client->addParam($kparams, "filter", $filter->toParams()); + if ($pager !== null) + $this->client->addParam($kparams, "pager", $pager->toParams()); + $this->client->queueServiceActionCall("baseentry", "list", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaBaseEntryListResponse"); + return $resultObject; + } + + /** + * List base entries by filter according to reference id + * + * @param string $refId Entry Reference ID + * @param KalturaFilterPager $pager Pager + * @return KalturaBaseEntryListResponse + */ + function listByReferenceId($refId, KalturaFilterPager $pager = null) + { + $kparams = array(); + $this->client->addParam($kparams, "refId", $refId); + if ($pager !== null) + $this->client->addParam($kparams, "pager", $pager->toParams()); + $this->client->queueServiceActionCall("baseentry", "listByReferenceId", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaBaseEntryListResponse"); + return $resultObject; + } + + /** + * Count base entries by filter. + * + * @param KalturaBaseEntryFilter $filter Entry filter + * @return int + */ + function count(KalturaBaseEntryFilter $filter = null) + { + $kparams = array(); + if ($filter !== null) + $this->client->addParam($kparams, "filter", $filter->toParams()); + $this->client->queueServiceActionCall("baseentry", "count", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "integer"); + return $resultObject; + } + + /** + * Upload a file to Kaltura, that can be used to create an entry. + * + * @param file $fileData The file data + * @return string + */ + function upload($fileData) + { + $kparams = array(); + $kfiles = array(); + $this->client->addParam($kfiles, "fileData", $fileData); + $this->client->queueServiceActionCall("baseentry", "upload", $kparams, $kfiles); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "string"); + return $resultObject; + } + + /** + * Update entry thumbnail using a raw jpeg file. + * + * @param string $entryId Media entry id + * @param file $fileData Jpeg file data + * @return KalturaBaseEntry + */ + function updateThumbnailJpeg($entryId, $fileData) + { + $kparams = array(); + $this->client->addParam($kparams, "entryId", $entryId); + $kfiles = array(); + $this->client->addParam($kfiles, "fileData", $fileData); + $this->client->queueServiceActionCall("baseentry", "updateThumbnailJpeg", $kparams, $kfiles); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaBaseEntry"); + return $resultObject; + } + + /** + * Update entry thumbnail using url. + * + * @param string $entryId Media entry id + * @param string $url File url + * @return KalturaBaseEntry + */ + function updateThumbnailFromUrl($entryId, $url) + { + $kparams = array(); + $this->client->addParam($kparams, "entryId", $entryId); + $this->client->addParam($kparams, "url", $url); + $this->client->queueServiceActionCall("baseentry", "updateThumbnailFromUrl", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaBaseEntry"); + return $resultObject; + } + + /** + * Update entry thumbnail from a different entry by a specified time offset (in seconds). + * + * @param string $entryId Media entry id + * @param string $sourceEntryId Media entry id + * @param int $timeOffset Time offset (in seconds) + * @return KalturaBaseEntry + */ + function updateThumbnailFromSourceEntry($entryId, $sourceEntryId, $timeOffset) + { + $kparams = array(); + $this->client->addParam($kparams, "entryId", $entryId); + $this->client->addParam($kparams, "sourceEntryId", $sourceEntryId); + $this->client->addParam($kparams, "timeOffset", $timeOffset); + $this->client->queueServiceActionCall("baseentry", "updateThumbnailFromSourceEntry", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaBaseEntry"); + return $resultObject; + } + + /** + * Flag inappropriate entry for moderation. + * + * @param KalturaModerationFlag $moderationFlag + * @return + */ + function flag(KalturaModerationFlag $moderationFlag) + { + $kparams = array(); + $this->client->addParam($kparams, "moderationFlag", $moderationFlag->toParams()); + $this->client->queueServiceActionCall("baseentry", "flag", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "null"); + return $resultObject; + } + + /** + * Reject the entry and mark the pending flags (if any) as moderated (this will make the entry non-playable). + * + * @param string $entryId + * @return + */ + function reject($entryId) + { + $kparams = array(); + $this->client->addParam($kparams, "entryId", $entryId); + $this->client->queueServiceActionCall("baseentry", "reject", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "null"); + return $resultObject; + } + + /** + * Approve the entry and mark the pending flags (if any) as moderated (this will make the entry playable). + * + * @param string $entryId + * @return + */ + function approve($entryId) + { + $kparams = array(); + $this->client->addParam($kparams, "entryId", $entryId); + $this->client->queueServiceActionCall("baseentry", "approve", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "null"); + return $resultObject; + } + + /** + * List all pending flags for the entry. + * + * @param string $entryId + * @param KalturaFilterPager $pager + * @return KalturaModerationFlagListResponse + */ + function listFlags($entryId, KalturaFilterPager $pager = null) + { + $kparams = array(); + $this->client->addParam($kparams, "entryId", $entryId); + if ($pager !== null) + $this->client->addParam($kparams, "pager", $pager->toParams()); + $this->client->queueServiceActionCall("baseentry", "listFlags", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaModerationFlagListResponse"); + return $resultObject; + } + + /** + * Anonymously rank an entry, no validation is done on duplicate rankings. + * + * @param string $entryId + * @param int $rank + * @return + */ + function anonymousRank($entryId, $rank) + { + $kparams = array(); + $this->client->addParam($kparams, "entryId", $entryId); + $this->client->addParam($kparams, "rank", $rank); + $this->client->queueServiceActionCall("baseentry", "anonymousRank", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "null"); + return $resultObject; + } + + /** + * This action delivers entry-related data, based on the user's context: access control, restriction, playback format and storage information. + * + * @param string $entryId + * @param KalturaEntryContextDataParams $contextDataParams + * @return KalturaEntryContextDataResult + */ + function getContextData($entryId, KalturaEntryContextDataParams $contextDataParams) + { + $kparams = array(); + $this->client->addParam($kparams, "entryId", $entryId); + $this->client->addParam($kparams, "contextDataParams", $contextDataParams->toParams()); + $this->client->queueServiceActionCall("baseentry", "getContextData", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaEntryContextDataResult"); + return $resultObject; + } + + /** + * + * + * @param string $entryId + * @param int $storageProfileId + * @return KalturaBaseEntry + */ + function export($entryId, $storageProfileId) + { + $kparams = array(); + $this->client->addParam($kparams, "entryId", $entryId); + $this->client->addParam($kparams, "storageProfileId", $storageProfileId); + $this->client->queueServiceActionCall("baseentry", "export", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaBaseEntry"); + return $resultObject; + } + + /** + * Index an entry by id. + * + * @param string $id + * @param bool $shouldUpdate + * @return int + */ + function index($id, $shouldUpdate = true) + { + $kparams = array(); + $this->client->addParam($kparams, "id", $id); + $this->client->addParam($kparams, "shouldUpdate", $shouldUpdate); + $this->client->queueServiceActionCall("baseentry", "index", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "integer"); + return $resultObject; + } + + /** + * Clone an entry with optional attributes to apply to the clone + * + * @param string $entryId Id of entry to clone + * @return KalturaBaseEntry + */ + function cloneAction($entryId) + { + $kparams = array(); + $this->client->addParam($kparams, "entryId", $entryId); + $this->client->queueServiceActionCall("baseentry", "clone", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaBaseEntry"); + return $resultObject; + } +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaBulkUploadService extends KalturaServiceBase +{ + function __construct(KalturaClient $client = null) + { + parent::__construct($client); + } + + /** + * Add new bulk upload batch job + Conversion profile id can be specified in the API or in the CSV file, the one in the CSV file will be stronger. + If no conversion profile was specified, partner's default will be used + * + * @param int $conversionProfileId Convertion profile id to use for converting the current bulk (-1 to use partner's default) + * @param file $csvFileData Bulk upload file + * @param string $bulkUploadType + * @param string $uploadedBy + * @param string $fileName Friendly name of the file, used to be recognized later in the logs. + * @return KalturaBulkUpload + */ + function add($conversionProfileId, $csvFileData, $bulkUploadType = null, $uploadedBy = null, $fileName = null) + { + $kparams = array(); + $this->client->addParam($kparams, "conversionProfileId", $conversionProfileId); + $kfiles = array(); + $this->client->addParam($kfiles, "csvFileData", $csvFileData); + $this->client->addParam($kparams, "bulkUploadType", $bulkUploadType); + $this->client->addParam($kparams, "uploadedBy", $uploadedBy); + $this->client->addParam($kparams, "fileName", $fileName); + $this->client->queueServiceActionCall("bulkupload", "add", $kparams, $kfiles); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaBulkUpload"); + return $resultObject; + } + + /** + * Get bulk upload batch job by id + * + * @param bigint $id + * @return KalturaBulkUpload + */ + function get($id) + { + $kparams = array(); + $this->client->addParam($kparams, "id", $id); + $this->client->queueServiceActionCall("bulkupload", "get", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaBulkUpload"); + return $resultObject; + } + + /** + * List bulk upload batch jobs + * + * @param KalturaFilterPager $pager + * @return KalturaBulkUploadListResponse + */ + function listAction(KalturaFilterPager $pager = null) + { + $kparams = array(); + if ($pager !== null) + $this->client->addParam($kparams, "pager", $pager->toParams()); + $this->client->queueServiceActionCall("bulkupload", "list", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaBulkUploadListResponse"); + return $resultObject; + } + + /** + * Serve action returan the original file. + * + * @param bigint $id Job id + * @return file + */ + function serve($id) + { + $kparams = array(); + $this->client->addParam($kparams, "id", $id); + $this->client->queueServiceActionCall("bulkupload", "serve", $kparams); + if(!$this->client->getDestinationPath() && !$this->client->getReturnServedResult()) + return $this->client->getServeUrl(); + return $this->client->doQueue(); + } + + /** + * ServeLog action returan the original file. + * + * @param bigint $id Job id + * @return file + */ + function serveLog($id) + { + $kparams = array(); + $this->client->addParam($kparams, "id", $id); + $this->client->queueServiceActionCall("bulkupload", "serveLog", $kparams); + if(!$this->client->getDestinationPath() && !$this->client->getReturnServedResult()) + return $this->client->getServeUrl(); + return $this->client->doQueue(); + } + + /** + * Aborts the bulk upload and all its child jobs + * + * @param bigint $id Job id + * @return KalturaBulkUpload + */ + function abort($id) + { + $kparams = array(); + $this->client->addParam($kparams, "id", $id); + $this->client->queueServiceActionCall("bulkupload", "abort", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaBulkUpload"); + return $resultObject; + } +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaCategoryEntryService extends KalturaServiceBase +{ + function __construct(KalturaClient $client = null) + { + parent::__construct($client); + } + + /** + * Add new CategoryEntry + * + * @param KalturaCategoryEntry $categoryEntry + * @return KalturaCategoryEntry + */ + function add(KalturaCategoryEntry $categoryEntry) + { + $kparams = array(); + $this->client->addParam($kparams, "categoryEntry", $categoryEntry->toParams()); + $this->client->queueServiceActionCall("categoryentry", "add", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaCategoryEntry"); + return $resultObject; + } + + /** + * Delete CategoryEntry + * + * @param string $entryId + * @param int $categoryId + * @return + */ + function delete($entryId, $categoryId) + { + $kparams = array(); + $this->client->addParam($kparams, "entryId", $entryId); + $this->client->addParam($kparams, "categoryId", $categoryId); + $this->client->queueServiceActionCall("categoryentry", "delete", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "null"); + return $resultObject; + } + + /** + * List all categoryEntry + * + * @param KalturaCategoryEntryFilter $filter + * @param KalturaFilterPager $pager + * @return KalturaCategoryEntryListResponse + */ + function listAction(KalturaCategoryEntryFilter $filter = null, KalturaFilterPager $pager = null) + { + $kparams = array(); + if ($filter !== null) + $this->client->addParam($kparams, "filter", $filter->toParams()); + if ($pager !== null) + $this->client->addParam($kparams, "pager", $pager->toParams()); + $this->client->queueServiceActionCall("categoryentry", "list", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaCategoryEntryListResponse"); + return $resultObject; + } + + /** + * Index CategoryEntry by Id + * + * @param string $entryId + * @param int $categoryId + * @param bool $shouldUpdate + * @return int + */ + function index($entryId, $categoryId, $shouldUpdate = true) + { + $kparams = array(); + $this->client->addParam($kparams, "entryId", $entryId); + $this->client->addParam($kparams, "categoryId", $categoryId); + $this->client->addParam($kparams, "shouldUpdate", $shouldUpdate); + $this->client->queueServiceActionCall("categoryentry", "index", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "integer"); + return $resultObject; + } + + /** + * Activate CategoryEntry when it is pending moderation + * + * @param string $entryId + * @param int $categoryId + * @return + */ + function activate($entryId, $categoryId) + { + $kparams = array(); + $this->client->addParam($kparams, "entryId", $entryId); + $this->client->addParam($kparams, "categoryId", $categoryId); + $this->client->queueServiceActionCall("categoryentry", "activate", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "null"); + return $resultObject; + } + + /** + * Activate CategoryEntry when it is pending moderation + * + * @param string $entryId + * @param int $categoryId + * @return + */ + function reject($entryId, $categoryId) + { + $kparams = array(); + $this->client->addParam($kparams, "entryId", $entryId); + $this->client->addParam($kparams, "categoryId", $categoryId); + $this->client->queueServiceActionCall("categoryentry", "reject", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "null"); + return $resultObject; + } +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaCategoryService extends KalturaServiceBase +{ + function __construct(KalturaClient $client = null) + { + parent::__construct($client); + } + + /** + * Add new Category + * + * @param KalturaCategory $category + * @return KalturaCategory + */ + function add(KalturaCategory $category) + { + $kparams = array(); + $this->client->addParam($kparams, "category", $category->toParams()); + $this->client->queueServiceActionCall("category", "add", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaCategory"); + return $resultObject; + } + + /** + * Get Category by id + * + * @param int $id + * @return KalturaCategory + */ + function get($id) + { + $kparams = array(); + $this->client->addParam($kparams, "id", $id); + $this->client->queueServiceActionCall("category", "get", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaCategory"); + return $resultObject; + } + + /** + * Update Category + * + * @param int $id + * @param KalturaCategory $category + * @return KalturaCategory + */ + function update($id, KalturaCategory $category) + { + $kparams = array(); + $this->client->addParam($kparams, "id", $id); + $this->client->addParam($kparams, "category", $category->toParams()); + $this->client->queueServiceActionCall("category", "update", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaCategory"); + return $resultObject; + } + + /** + * Delete a Category + * + * @param int $id + * @param int $moveEntriesToParentCategory + * @return + */ + function delete($id, $moveEntriesToParentCategory = 1) + { + $kparams = array(); + $this->client->addParam($kparams, "id", $id); + $this->client->addParam($kparams, "moveEntriesToParentCategory", $moveEntriesToParentCategory); + $this->client->queueServiceActionCall("category", "delete", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "null"); + return $resultObject; + } + + /** + * List all categories + * + * @param KalturaCategoryFilter $filter + * @param KalturaFilterPager $pager + * @return KalturaCategoryListResponse + */ + function listAction(KalturaCategoryFilter $filter = null, KalturaFilterPager $pager = null) + { + $kparams = array(); + if ($filter !== null) + $this->client->addParam($kparams, "filter", $filter->toParams()); + if ($pager !== null) + $this->client->addParam($kparams, "pager", $pager->toParams()); + $this->client->queueServiceActionCall("category", "list", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaCategoryListResponse"); + return $resultObject; + } + + /** + * Index Category by id + * + * @param int $id + * @param bool $shouldUpdate + * @return int + */ + function index($id, $shouldUpdate = true) + { + $kparams = array(); + $this->client->addParam($kparams, "id", $id); + $this->client->addParam($kparams, "shouldUpdate", $shouldUpdate); + $this->client->queueServiceActionCall("category", "index", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "integer"); + return $resultObject; + } + + /** + * Move categories that belong to the same parent category to a target categroy - enabled only for ks with disable entitlement + * + * @param string $categoryIds + * @param int $targetCategoryParentId + * @return KalturaCategoryListResponse + */ + function move($categoryIds, $targetCategoryParentId) + { + $kparams = array(); + $this->client->addParam($kparams, "categoryIds", $categoryIds); + $this->client->addParam($kparams, "targetCategoryParentId", $targetCategoryParentId); + $this->client->queueServiceActionCall("category", "move", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaCategoryListResponse"); + return $resultObject; + } + + /** + * Unlock categories + * + * @return + */ + function unlockCategories() + { + $kparams = array(); + $this->client->queueServiceActionCall("category", "unlockCategories", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "null"); + return $resultObject; + } + + /** + * + * + * @param file $fileData + * @param KalturaBulkUploadJobData $bulkUploadData + * @param KalturaBulkUploadCategoryData $bulkUploadCategoryData + * @return KalturaBulkUpload + */ + function addFromBulkUpload($fileData, KalturaBulkUploadJobData $bulkUploadData = null, KalturaBulkUploadCategoryData $bulkUploadCategoryData = null) + { + $kparams = array(); + $kfiles = array(); + $this->client->addParam($kfiles, "fileData", $fileData); + if ($bulkUploadData !== null) + $this->client->addParam($kparams, "bulkUploadData", $bulkUploadData->toParams()); + if ($bulkUploadCategoryData !== null) + $this->client->addParam($kparams, "bulkUploadCategoryData", $bulkUploadCategoryData->toParams()); + $this->client->queueServiceActionCall("category", "addFromBulkUpload", $kparams, $kfiles); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaBulkUpload"); + return $resultObject; + } +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaCategoryUserService extends KalturaServiceBase +{ + function __construct(KalturaClient $client = null) + { + parent::__construct($client); + } + + /** + * Add new CategoryUser + * + * @param KalturaCategoryUser $categoryUser + * @return KalturaCategoryUser + */ + function add(KalturaCategoryUser $categoryUser) + { + $kparams = array(); + $this->client->addParam($kparams, "categoryUser", $categoryUser->toParams()); + $this->client->queueServiceActionCall("categoryuser", "add", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaCategoryUser"); + return $resultObject; + } + + /** + * Get CategoryUser by id + * + * @param int $categoryId + * @param string $userId + * @return KalturaCategoryUser + */ + function get($categoryId, $userId) + { + $kparams = array(); + $this->client->addParam($kparams, "categoryId", $categoryId); + $this->client->addParam($kparams, "userId", $userId); + $this->client->queueServiceActionCall("categoryuser", "get", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaCategoryUser"); + return $resultObject; + } + + /** + * Update CategoryUser by id + * + * @param int $categoryId + * @param string $userId + * @param KalturaCategoryUser $categoryUser + * @param bool $override - to override manual changes + * @return KalturaCategoryUser + */ + function update($categoryId, $userId, KalturaCategoryUser $categoryUser, $override = false) + { + $kparams = array(); + $this->client->addParam($kparams, "categoryId", $categoryId); + $this->client->addParam($kparams, "userId", $userId); + $this->client->addParam($kparams, "categoryUser", $categoryUser->toParams()); + $this->client->addParam($kparams, "override", $override); + $this->client->queueServiceActionCall("categoryuser", "update", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaCategoryUser"); + return $resultObject; + } + + /** + * Delete a CategoryUser + * + * @param int $categoryId + * @param string $userId + * @return + */ + function delete($categoryId, $userId) + { + $kparams = array(); + $this->client->addParam($kparams, "categoryId", $categoryId); + $this->client->addParam($kparams, "userId", $userId); + $this->client->queueServiceActionCall("categoryuser", "delete", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "null"); + return $resultObject; + } + + /** + * Activate CategoryUser + * + * @param int $categoryId + * @param string $userId + * @return KalturaCategoryUser + */ + function activate($categoryId, $userId) + { + $kparams = array(); + $this->client->addParam($kparams, "categoryId", $categoryId); + $this->client->addParam($kparams, "userId", $userId); + $this->client->queueServiceActionCall("categoryuser", "activate", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaCategoryUser"); + return $resultObject; + } + + /** + * Reject CategoryUser + * + * @param int $categoryId + * @param string $userId + * @return KalturaCategoryUser + */ + function deactivate($categoryId, $userId) + { + $kparams = array(); + $this->client->addParam($kparams, "categoryId", $categoryId); + $this->client->addParam($kparams, "userId", $userId); + $this->client->queueServiceActionCall("categoryuser", "deactivate", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaCategoryUser"); + return $resultObject; + } + + /** + * List all categories + * + * @param KalturaCategoryUserFilter $filter + * @param KalturaFilterPager $pager + * @return KalturaCategoryUserListResponse + */ + function listAction(KalturaCategoryUserFilter $filter = null, KalturaFilterPager $pager = null) + { + $kparams = array(); + if ($filter !== null) + $this->client->addParam($kparams, "filter", $filter->toParams()); + if ($pager !== null) + $this->client->addParam($kparams, "pager", $pager->toParams()); + $this->client->queueServiceActionCall("categoryuser", "list", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaCategoryUserListResponse"); + return $resultObject; + } + + /** + * Copy all memeber from parent category + * + * @param int $categoryId + * @return + */ + function copyFromCategory($categoryId) + { + $kparams = array(); + $this->client->addParam($kparams, "categoryId", $categoryId); + $this->client->queueServiceActionCall("categoryuser", "copyFromCategory", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "null"); + return $resultObject; + } + + /** + * Index CategoryUser by userid and category id + * + * @param string $userId + * @param int $categoryId + * @param bool $shouldUpdate + * @return int + */ + function index($userId, $categoryId, $shouldUpdate = true) + { + $kparams = array(); + $this->client->addParam($kparams, "userId", $userId); + $this->client->addParam($kparams, "categoryId", $categoryId); + $this->client->addParam($kparams, "shouldUpdate", $shouldUpdate); + $this->client->queueServiceActionCall("categoryuser", "index", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "integer"); + return $resultObject; + } + + /** + * + * + * @param file $fileData + * @param KalturaBulkUploadJobData $bulkUploadData + * @param KalturaBulkUploadCategoryUserData $bulkUploadCategoryUserData + * @return KalturaBulkUpload + */ + function addFromBulkUpload($fileData, KalturaBulkUploadJobData $bulkUploadData = null, KalturaBulkUploadCategoryUserData $bulkUploadCategoryUserData = null) + { + $kparams = array(); + $kfiles = array(); + $this->client->addParam($kfiles, "fileData", $fileData); + if ($bulkUploadData !== null) + $this->client->addParam($kparams, "bulkUploadData", $bulkUploadData->toParams()); + if ($bulkUploadCategoryUserData !== null) + $this->client->addParam($kparams, "bulkUploadCategoryUserData", $bulkUploadCategoryUserData->toParams()); + $this->client->queueServiceActionCall("categoryuser", "addFromBulkUpload", $kparams, $kfiles); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaBulkUpload"); + return $resultObject; + } +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaConversionProfileAssetParamsService extends KalturaServiceBase +{ + function __construct(KalturaClient $client = null) + { + parent::__construct($client); + } + + /** + * Lists asset parmas of conversion profile by ID + * + * @param KalturaConversionProfileAssetParamsFilter $filter + * @param KalturaFilterPager $pager + * @return KalturaConversionProfileAssetParamsListResponse + */ + function listAction(KalturaConversionProfileAssetParamsFilter $filter = null, KalturaFilterPager $pager = null) + { + $kparams = array(); + if ($filter !== null) + $this->client->addParam($kparams, "filter", $filter->toParams()); + if ($pager !== null) + $this->client->addParam($kparams, "pager", $pager->toParams()); + $this->client->queueServiceActionCall("conversionprofileassetparams", "list", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaConversionProfileAssetParamsListResponse"); + return $resultObject; + } + + /** + * Update asset parmas of conversion profile by ID + * + * @param int $conversionProfileId + * @param int $assetParamsId + * @param KalturaConversionProfileAssetParams $conversionProfileAssetParams + * @return KalturaConversionProfileAssetParams + */ + function update($conversionProfileId, $assetParamsId, KalturaConversionProfileAssetParams $conversionProfileAssetParams) + { + $kparams = array(); + $this->client->addParam($kparams, "conversionProfileId", $conversionProfileId); + $this->client->addParam($kparams, "assetParamsId", $assetParamsId); + $this->client->addParam($kparams, "conversionProfileAssetParams", $conversionProfileAssetParams->toParams()); + $this->client->queueServiceActionCall("conversionprofileassetparams", "update", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaConversionProfileAssetParams"); + return $resultObject; + } +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaConversionProfileService extends KalturaServiceBase +{ + function __construct(KalturaClient $client = null) + { + parent::__construct($client); + } + + /** + * Set Conversion Profile to be the partner default + * + * @param int $id + * @return KalturaConversionProfile + */ + function setAsDefault($id) + { + $kparams = array(); + $this->client->addParam($kparams, "id", $id); + $this->client->queueServiceActionCall("conversionprofile", "setAsDefault", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaConversionProfile"); + return $resultObject; + } + + /** + * Get the partner's default conversion profile + * + * @param string $type + * @return KalturaConversionProfile + */ + function getDefault($type = null) + { + $kparams = array(); + $this->client->addParam($kparams, "type", $type); + $this->client->queueServiceActionCall("conversionprofile", "getDefault", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaConversionProfile"); + return $resultObject; + } + + /** + * Add new Conversion Profile + * + * @param KalturaConversionProfile $conversionProfile + * @return KalturaConversionProfile + */ + function add(KalturaConversionProfile $conversionProfile) + { + $kparams = array(); + $this->client->addParam($kparams, "conversionProfile", $conversionProfile->toParams()); + $this->client->queueServiceActionCall("conversionprofile", "add", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaConversionProfile"); + return $resultObject; + } + + /** + * Get Conversion Profile by ID + * + * @param int $id + * @return KalturaConversionProfile + */ + function get($id) + { + $kparams = array(); + $this->client->addParam($kparams, "id", $id); + $this->client->queueServiceActionCall("conversionprofile", "get", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaConversionProfile"); + return $resultObject; + } + + /** + * Update Conversion Profile by ID + * + * @param int $id + * @param KalturaConversionProfile $conversionProfile + * @return KalturaConversionProfile + */ + function update($id, KalturaConversionProfile $conversionProfile) + { + $kparams = array(); + $this->client->addParam($kparams, "id", $id); + $this->client->addParam($kparams, "conversionProfile", $conversionProfile->toParams()); + $this->client->queueServiceActionCall("conversionprofile", "update", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaConversionProfile"); + return $resultObject; + } + + /** + * Delete Conversion Profile by ID + * + * @param int $id + * @return + */ + function delete($id) + { + $kparams = array(); + $this->client->addParam($kparams, "id", $id); + $this->client->queueServiceActionCall("conversionprofile", "delete", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "null"); + return $resultObject; + } + + /** + * List Conversion Profiles by filter with paging support + * + * @param KalturaConversionProfileFilter $filter + * @param KalturaFilterPager $pager + * @return KalturaConversionProfileListResponse + */ + function listAction(KalturaConversionProfileFilter $filter = null, KalturaFilterPager $pager = null) + { + $kparams = array(); + if ($filter !== null) + $this->client->addParam($kparams, "filter", $filter->toParams()); + if ($pager !== null) + $this->client->addParam($kparams, "pager", $pager->toParams()); + $this->client->queueServiceActionCall("conversionprofile", "list", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaConversionProfileListResponse"); + return $resultObject; + } +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaDataService extends KalturaServiceBase +{ + function __construct(KalturaClient $client = null) + { + parent::__construct($client); + } + + /** + * Adds a new data entry + * + * @param KalturaDataEntry $dataEntry Data entry + * @return KalturaDataEntry + */ + function add(KalturaDataEntry $dataEntry) + { + $kparams = array(); + $this->client->addParam($kparams, "dataEntry", $dataEntry->toParams()); + $this->client->queueServiceActionCall("data", "add", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaDataEntry"); + return $resultObject; + } + + /** + * Get data entry by ID. + * + * @param string $entryId Data entry id + * @param int $version Desired version of the data + * @return KalturaDataEntry + */ + function get($entryId, $version = -1) + { + $kparams = array(); + $this->client->addParam($kparams, "entryId", $entryId); + $this->client->addParam($kparams, "version", $version); + $this->client->queueServiceActionCall("data", "get", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaDataEntry"); + return $resultObject; + } + + /** + * Update data entry. Only the properties that were set will be updated. + * + * @param string $entryId Data entry id to update + * @param KalturaDataEntry $documentEntry Data entry metadata to update + * @return KalturaDataEntry + */ + function update($entryId, KalturaDataEntry $documentEntry) + { + $kparams = array(); + $this->client->addParam($kparams, "entryId", $entryId); + $this->client->addParam($kparams, "documentEntry", $documentEntry->toParams()); + $this->client->queueServiceActionCall("data", "update", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaDataEntry"); + return $resultObject; + } + + /** + * Delete a data entry. + * + * @param string $entryId Data entry id to delete + * @return + */ + function delete($entryId) + { + $kparams = array(); + $this->client->addParam($kparams, "entryId", $entryId); + $this->client->queueServiceActionCall("data", "delete", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "null"); + return $resultObject; + } + + /** + * List data entries by filter with paging support. + * + * @param KalturaDataEntryFilter $filter Document entry filter + * @param KalturaFilterPager $pager Pager + * @return KalturaDataListResponse + */ + function listAction(KalturaDataEntryFilter $filter = null, KalturaFilterPager $pager = null) + { + $kparams = array(); + if ($filter !== null) + $this->client->addParam($kparams, "filter", $filter->toParams()); + if ($pager !== null) + $this->client->addParam($kparams, "pager", $pager->toParams()); + $this->client->queueServiceActionCall("data", "list", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaDataListResponse"); + return $resultObject; + } + + /** + * Serve action returan the file from dataContent field. + * + * @param string $entryId Data entry id + * @param int $version Desired version of the data + * @param bool $forceProxy Force to get the content without redirect + * @return file + */ + function serve($entryId, $version = -1, $forceProxy = false) + { + $kparams = array(); + $this->client->addParam($kparams, "entryId", $entryId); + $this->client->addParam($kparams, "version", $version); + $this->client->addParam($kparams, "forceProxy", $forceProxy); + $this->client->queueServiceActionCall("data", "serve", $kparams); + if(!$this->client->getDestinationPath() && !$this->client->getReturnServedResult()) + return $this->client->getServeUrl(); + return $this->client->doQueue(); + } +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaDocumentService extends KalturaServiceBase +{ + function __construct(KalturaClient $client = null) + { + parent::__construct($client); + } + + /** + * Add new document entry after the specific document file was uploaded and the upload token id exists + * + * @param KalturaDocumentEntry $documentEntry Document entry metadata + * @param string $uploadTokenId Upload token id + * @return KalturaDocumentEntry + */ + function addFromUploadedFile(KalturaDocumentEntry $documentEntry, $uploadTokenId) + { + $kparams = array(); + $this->client->addParam($kparams, "documentEntry", $documentEntry->toParams()); + $this->client->addParam($kparams, "uploadTokenId", $uploadTokenId); + $this->client->queueServiceActionCall("document", "addFromUploadedFile", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaDocumentEntry"); + return $resultObject; + } + + /** + * Copy entry into new entry + * + * @param string $sourceEntryId Document entry id to copy from + * @param KalturaDocumentEntry $documentEntry Document entry metadata + * @param int $sourceFlavorParamsId The flavor to be used as the new entry source, source flavor will be used if not specified + * @return KalturaDocumentEntry + */ + function addFromEntry($sourceEntryId, KalturaDocumentEntry $documentEntry = null, $sourceFlavorParamsId = null) + { + $kparams = array(); + $this->client->addParam($kparams, "sourceEntryId", $sourceEntryId); + if ($documentEntry !== null) + $this->client->addParam($kparams, "documentEntry", $documentEntry->toParams()); + $this->client->addParam($kparams, "sourceFlavorParamsId", $sourceFlavorParamsId); + $this->client->queueServiceActionCall("document", "addFromEntry", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaDocumentEntry"); + return $resultObject; + } + + /** + * Copy flavor asset into new entry + * + * @param string $sourceFlavorAssetId Flavor asset id to be used as the new entry source + * @param KalturaDocumentEntry $documentEntry Document entry metadata + * @return KalturaDocumentEntry + */ + function addFromFlavorAsset($sourceFlavorAssetId, KalturaDocumentEntry $documentEntry = null) + { + $kparams = array(); + $this->client->addParam($kparams, "sourceFlavorAssetId", $sourceFlavorAssetId); + if ($documentEntry !== null) + $this->client->addParam($kparams, "documentEntry", $documentEntry->toParams()); + $this->client->queueServiceActionCall("document", "addFromFlavorAsset", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaDocumentEntry"); + return $resultObject; + } + + /** + * Convert entry + * + * @param string $entryId Document entry id + * @param int $conversionProfileId + * @param array $dynamicConversionAttributes + * @return int + */ + function convert($entryId, $conversionProfileId = null, array $dynamicConversionAttributes = null) + { + $kparams = array(); + $this->client->addParam($kparams, "entryId", $entryId); + $this->client->addParam($kparams, "conversionProfileId", $conversionProfileId); + if ($dynamicConversionAttributes !== null) + foreach($dynamicConversionAttributes as $index => $obj) + { + $this->client->addParam($kparams, "dynamicConversionAttributes:$index", $obj->toParams()); + } + $this->client->queueServiceActionCall("document", "convert", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "integer"); + return $resultObject; + } + + /** + * Get document entry by ID. + * + * @param string $entryId Document entry id + * @param int $version Desired version of the data + * @return KalturaDocumentEntry + */ + function get($entryId, $version = -1) + { + $kparams = array(); + $this->client->addParam($kparams, "entryId", $entryId); + $this->client->addParam($kparams, "version", $version); + $this->client->queueServiceActionCall("document", "get", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaDocumentEntry"); + return $resultObject; + } + + /** + * Update document entry. Only the properties that were set will be updated. + * + * @param string $entryId Document entry id to update + * @param KalturaDocumentEntry $documentEntry Document entry metadata to update + * @return KalturaDocumentEntry + */ + function update($entryId, KalturaDocumentEntry $documentEntry) + { + $kparams = array(); + $this->client->addParam($kparams, "entryId", $entryId); + $this->client->addParam($kparams, "documentEntry", $documentEntry->toParams()); + $this->client->queueServiceActionCall("document", "update", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaDocumentEntry"); + return $resultObject; + } + + /** + * Delete a document entry. + * + * @param string $entryId Document entry id to delete + * @return + */ + function delete($entryId) + { + $kparams = array(); + $this->client->addParam($kparams, "entryId", $entryId); + $this->client->queueServiceActionCall("document", "delete", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "null"); + return $resultObject; + } + + /** + * List document entries by filter with paging support. + * + * @param KalturaDocumentEntryFilter $filter Document entry filter + * @param KalturaFilterPager $pager Pager + * @return KalturaDocumentListResponse + */ + function listAction(KalturaDocumentEntryFilter $filter = null, KalturaFilterPager $pager = null) + { + $kparams = array(); + if ($filter !== null) + $this->client->addParam($kparams, "filter", $filter->toParams()); + if ($pager !== null) + $this->client->addParam($kparams, "pager", $pager->toParams()); + $this->client->queueServiceActionCall("document", "list", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaDocumentListResponse"); + return $resultObject; + } + + /** + * Upload a document file to Kaltura, then the file can be used to create a document entry. + * + * @param file $fileData The file data + * @return string + */ + function upload($fileData) + { + $kparams = array(); + $kfiles = array(); + $this->client->addParam($kfiles, "fileData", $fileData); + $this->client->queueServiceActionCall("document", "upload", $kparams, $kfiles); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "string"); + return $resultObject; + } + + /** + * This will queue a batch job for converting the document file to swf + Returns the URL where the new swf will be available + * + * @param string $entryId + * @return string + */ + function convertPptToSwf($entryId) + { + $kparams = array(); + $this->client->addParam($kparams, "entryId", $entryId); + $this->client->queueServiceActionCall("document", "convertPptToSwf", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "string"); + return $resultObject; + } + + /** + * Serves the file content + * + * @param string $entryId Document entry id + * @param string $flavorAssetId Flavor asset id + * @param bool $forceProxy Force to get the content without redirect + * @return file + */ + function serve($entryId, $flavorAssetId = null, $forceProxy = false) + { + $kparams = array(); + $this->client->addParam($kparams, "entryId", $entryId); + $this->client->addParam($kparams, "flavorAssetId", $flavorAssetId); + $this->client->addParam($kparams, "forceProxy", $forceProxy); + $this->client->queueServiceActionCall("document", "serve", $kparams); + if(!$this->client->getDestinationPath() && !$this->client->getReturnServedResult()) + return $this->client->getServeUrl(); + return $this->client->doQueue(); + } + + /** + * Serves the file content + * + * @param string $entryId Document entry id + * @param string $flavorParamsId Flavor params id + * @param bool $forceProxy Force to get the content without redirect + * @return file + */ + function serveByFlavorParamsId($entryId, $flavorParamsId = null, $forceProxy = false) + { + $kparams = array(); + $this->client->addParam($kparams, "entryId", $entryId); + $this->client->addParam($kparams, "flavorParamsId", $flavorParamsId); + $this->client->addParam($kparams, "forceProxy", $forceProxy); + $this->client->queueServiceActionCall("document", "serveByFlavorParamsId", $kparams); + if(!$this->client->getDestinationPath() && !$this->client->getReturnServedResult()) + return $this->client->getServeUrl(); + return $this->client->doQueue(); + } + + /** + * Replace content associated with the given document entry. + * + * @param string $entryId Document entry id to update + * @param KalturaResource $resource Resource to be used to replace entry doc content + * @param int $conversionProfileId The conversion profile id to be used on the entry + * @return KalturaDocumentEntry + */ + function updateContent($entryId, KalturaResource $resource, $conversionProfileId = null) + { + $kparams = array(); + $this->client->addParam($kparams, "entryId", $entryId); + $this->client->addParam($kparams, "resource", $resource->toParams()); + $this->client->addParam($kparams, "conversionProfileId", $conversionProfileId); + $this->client->queueServiceActionCall("document", "updateContent", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaDocumentEntry"); + return $resultObject; + } + + /** + * Approves document replacement + * + * @param string $entryId Document entry id to replace + * @return KalturaDocumentEntry + */ + function approveReplace($entryId) + { + $kparams = array(); + $this->client->addParam($kparams, "entryId", $entryId); + $this->client->queueServiceActionCall("document", "approveReplace", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaDocumentEntry"); + return $resultObject; + } + + /** + * Cancels document replacement + * + * @param string $entryId Document entry id to cancel + * @return KalturaDocumentEntry + */ + function cancelReplace($entryId) + { + $kparams = array(); + $this->client->addParam($kparams, "entryId", $entryId); + $this->client->queueServiceActionCall("document", "cancelReplace", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaDocumentEntry"); + return $resultObject; + } +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaEmailIngestionProfileService extends KalturaServiceBase +{ + function __construct(KalturaClient $client = null) + { + parent::__construct($client); + } + + /** + * EmailIngestionProfile Add action allows you to add a EmailIngestionProfile to Kaltura DB + * + * @param KalturaEmailIngestionProfile $EmailIP Mandatory input parameter of type KalturaEmailIngestionProfile + * @return KalturaEmailIngestionProfile + */ + function add(KalturaEmailIngestionProfile $EmailIP) + { + $kparams = array(); + $this->client->addParam($kparams, "EmailIP", $EmailIP->toParams()); + $this->client->queueServiceActionCall("emailingestionprofile", "add", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaEmailIngestionProfile"); + return $resultObject; + } + + /** + * Retrieve a EmailIngestionProfile by email address + * + * @param string $emailAddress + * @return KalturaEmailIngestionProfile + */ + function getByEmailAddress($emailAddress) + { + $kparams = array(); + $this->client->addParam($kparams, "emailAddress", $emailAddress); + $this->client->queueServiceActionCall("emailingestionprofile", "getByEmailAddress", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaEmailIngestionProfile"); + return $resultObject; + } + + /** + * Retrieve a EmailIngestionProfile by id + * + * @param int $id + * @return KalturaEmailIngestionProfile + */ + function get($id) + { + $kparams = array(); + $this->client->addParam($kparams, "id", $id); + $this->client->queueServiceActionCall("emailingestionprofile", "get", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaEmailIngestionProfile"); + return $resultObject; + } + + /** + * Update an existing EmailIngestionProfile + * + * @param int $id + * @param KalturaEmailIngestionProfile $EmailIP + * @return KalturaEmailIngestionProfile + */ + function update($id, KalturaEmailIngestionProfile $EmailIP) + { + $kparams = array(); + $this->client->addParam($kparams, "id", $id); + $this->client->addParam($kparams, "EmailIP", $EmailIP->toParams()); + $this->client->queueServiceActionCall("emailingestionprofile", "update", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaEmailIngestionProfile"); + return $resultObject; + } + + /** + * Delete an existing EmailIngestionProfile + * + * @param int $id + * @return + */ + function delete($id) + { + $kparams = array(); + $this->client->addParam($kparams, "id", $id); + $this->client->queueServiceActionCall("emailingestionprofile", "delete", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "null"); + return $resultObject; + } + + /** + * Add KalturaMediaEntry from email ingestion + * + * @param KalturaMediaEntry $mediaEntry Media entry metadata + * @param string $uploadTokenId Upload token id + * @param int $emailProfId + * @param string $fromAddress + * @param string $emailMsgId + * @return KalturaMediaEntry + */ + function addMediaEntry(KalturaMediaEntry $mediaEntry, $uploadTokenId, $emailProfId, $fromAddress, $emailMsgId) + { + $kparams = array(); + $this->client->addParam($kparams, "mediaEntry", $mediaEntry->toParams()); + $this->client->addParam($kparams, "uploadTokenId", $uploadTokenId); + $this->client->addParam($kparams, "emailProfId", $emailProfId); + $this->client->addParam($kparams, "fromAddress", $fromAddress); + $this->client->addParam($kparams, "emailMsgId", $emailMsgId); + $this->client->queueServiceActionCall("emailingestionprofile", "addMediaEntry", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaMediaEntry"); + return $resultObject; + } +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaFileAssetService extends KalturaServiceBase +{ + function __construct(KalturaClient $client = null) + { + parent::__construct($client); + } + + /** + * Add new file asset + * + * @param KalturaFileAsset $fileAsset + * @return KalturaFileAsset + */ + function add(KalturaFileAsset $fileAsset) + { + $kparams = array(); + $this->client->addParam($kparams, "fileAsset", $fileAsset->toParams()); + $this->client->queueServiceActionCall("fileasset", "add", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaFileAsset"); + return $resultObject; + } + + /** + * Get file asset by id + * + * @param int $id + * @return KalturaFileAsset + */ + function get($id) + { + $kparams = array(); + $this->client->addParam($kparams, "id", $id); + $this->client->queueServiceActionCall("fileasset", "get", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaFileAsset"); + return $resultObject; + } + + /** + * Update file asset by id + * + * @param int $id + * @param KalturaFileAsset $fileAsset + * @return KalturaFileAsset + */ + function update($id, KalturaFileAsset $fileAsset) + { + $kparams = array(); + $this->client->addParam($kparams, "id", $id); + $this->client->addParam($kparams, "fileAsset", $fileAsset->toParams()); + $this->client->queueServiceActionCall("fileasset", "update", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaFileAsset"); + return $resultObject; + } + + /** + * Delete file asset by id + * + * @param int $id + * @return + */ + function delete($id) + { + $kparams = array(); + $this->client->addParam($kparams, "id", $id); + $this->client->queueServiceActionCall("fileasset", "delete", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "null"); + return $resultObject; + } + + /** + * Serve file asset by id + * + * @param int $id + * @return file + */ + function serve($id) + { + $kparams = array(); + $this->client->addParam($kparams, "id", $id); + $this->client->queueServiceActionCall("fileasset", "serve", $kparams); + if(!$this->client->getDestinationPath() && !$this->client->getReturnServedResult()) + return $this->client->getServeUrl(); + return $this->client->doQueue(); + } + + /** + * Set content of file asset + * + * @param string $id + * @param KalturaContentResource $contentResource + * @return KalturaFileAsset + */ + function setContent($id, KalturaContentResource $contentResource) + { + $kparams = array(); + $this->client->addParam($kparams, "id", $id); + $this->client->addParam($kparams, "contentResource", $contentResource->toParams()); + $this->client->queueServiceActionCall("fileasset", "setContent", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaFileAsset"); + return $resultObject; + } + + /** + * List file assets by filter and pager + * + * @param KalturaFileAssetFilter $filter + * @param KalturaFilterPager $pager + * @return KalturaFileAssetListResponse + */ + function listAction(KalturaFileAssetFilter $filter, KalturaFilterPager $pager = null) + { + $kparams = array(); + $this->client->addParam($kparams, "filter", $filter->toParams()); + if ($pager !== null) + $this->client->addParam($kparams, "pager", $pager->toParams()); + $this->client->queueServiceActionCall("fileasset", "list", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaFileAssetListResponse"); + return $resultObject; + } +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaFlavorAssetService extends KalturaServiceBase +{ + function __construct(KalturaClient $client = null) + { + parent::__construct($client); + } + + /** + * Add flavor asset + * + * @param string $entryId + * @param KalturaFlavorAsset $flavorAsset + * @return KalturaFlavorAsset + */ + function add($entryId, KalturaFlavorAsset $flavorAsset) + { + $kparams = array(); + $this->client->addParam($kparams, "entryId", $entryId); + $this->client->addParam($kparams, "flavorAsset", $flavorAsset->toParams()); + $this->client->queueServiceActionCall("flavorasset", "add", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaFlavorAsset"); + return $resultObject; + } + + /** + * Update flavor asset + * + * @param string $id + * @param KalturaFlavorAsset $flavorAsset + * @return KalturaFlavorAsset + */ + function update($id, KalturaFlavorAsset $flavorAsset) + { + $kparams = array(); + $this->client->addParam($kparams, "id", $id); + $this->client->addParam($kparams, "flavorAsset", $flavorAsset->toParams()); + $this->client->queueServiceActionCall("flavorasset", "update", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaFlavorAsset"); + return $resultObject; + } + + /** + * Update content of flavor asset + * + * @param string $id + * @param KalturaContentResource $contentResource + * @return KalturaFlavorAsset + */ + function setContent($id, KalturaContentResource $contentResource) + { + $kparams = array(); + $this->client->addParam($kparams, "id", $id); + $this->client->addParam($kparams, "contentResource", $contentResource->toParams()); + $this->client->queueServiceActionCall("flavorasset", "setContent", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaFlavorAsset"); + return $resultObject; + } + + /** + * Get Flavor Asset by ID + * + * @param string $id + * @return KalturaFlavorAsset + */ + function get($id) + { + $kparams = array(); + $this->client->addParam($kparams, "id", $id); + $this->client->queueServiceActionCall("flavorasset", "get", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaFlavorAsset"); + return $resultObject; + } + + /** + * Get Flavor Assets for Entry + * + * @param string $entryId + * @return array + */ + function getByEntryId($entryId) + { + $kparams = array(); + $this->client->addParam($kparams, "entryId", $entryId); + $this->client->queueServiceActionCall("flavorasset", "getByEntryId", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "array"); + return $resultObject; + } + + /** + * List Flavor Assets by filter and pager + * + * @param KalturaAssetFilter $filter + * @param KalturaFilterPager $pager + * @return KalturaFlavorAssetListResponse + */ + function listAction(KalturaAssetFilter $filter = null, KalturaFilterPager $pager = null) + { + $kparams = array(); + if ($filter !== null) + $this->client->addParam($kparams, "filter", $filter->toParams()); + if ($pager !== null) + $this->client->addParam($kparams, "pager", $pager->toParams()); + $this->client->queueServiceActionCall("flavorasset", "list", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaFlavorAssetListResponse"); + return $resultObject; + } + + /** + * Get web playable Flavor Assets for Entry + * + * @param string $entryId + * @return array + */ + function getWebPlayableByEntryId($entryId) + { + $kparams = array(); + $this->client->addParam($kparams, "entryId", $entryId); + $this->client->queueServiceActionCall("flavorasset", "getWebPlayableByEntryId", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "array"); + return $resultObject; + } + + /** + * Add and convert new Flavor Asset for Entry with specific Flavor Params + * + * @param string $entryId + * @param int $flavorParamsId + * @param int $priority + * @return + */ + function convert($entryId, $flavorParamsId, $priority = 0) + { + $kparams = array(); + $this->client->addParam($kparams, "entryId", $entryId); + $this->client->addParam($kparams, "flavorParamsId", $flavorParamsId); + $this->client->addParam($kparams, "priority", $priority); + $this->client->queueServiceActionCall("flavorasset", "convert", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "null"); + return $resultObject; + } + + /** + * Reconvert Flavor Asset by ID + * + * @param string $id Flavor Asset ID + * @return + */ + function reconvert($id) + { + $kparams = array(); + $this->client->addParam($kparams, "id", $id); + $this->client->queueServiceActionCall("flavorasset", "reconvert", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "null"); + return $resultObject; + } + + /** + * Delete Flavor Asset by ID + * + * @param string $id + * @return + */ + function delete($id) + { + $kparams = array(); + $this->client->addParam($kparams, "id", $id); + $this->client->queueServiceActionCall("flavorasset", "delete", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "null"); + return $resultObject; + } + + /** + * Get download URL for the asset + * + * @param string $id + * @param int $storageId + * @param bool $forceProxy + * @return string + */ + function getUrl($id, $storageId = null, $forceProxy = false) + { + $kparams = array(); + $this->client->addParam($kparams, "id", $id); + $this->client->addParam($kparams, "storageId", $storageId); + $this->client->addParam($kparams, "forceProxy", $forceProxy); + $this->client->queueServiceActionCall("flavorasset", "getUrl", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "string"); + return $resultObject; + } + + /** + * Get remote storage existing paths for the asset + * + * @param string $id + * @return KalturaRemotePathListResponse + */ + function getRemotePaths($id) + { + $kparams = array(); + $this->client->addParam($kparams, "id", $id); + $this->client->queueServiceActionCall("flavorasset", "getRemotePaths", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaRemotePathListResponse"); + return $resultObject; + } + + /** + * Get download URL for the Flavor Asset + * + * @param string $id + * @param bool $useCdn + * @return string + */ + function getDownloadUrl($id, $useCdn = false) + { + $kparams = array(); + $this->client->addParam($kparams, "id", $id); + $this->client->addParam($kparams, "useCdn", $useCdn); + $this->client->queueServiceActionCall("flavorasset", "getDownloadUrl", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "string"); + return $resultObject; + } + + /** + * Get Flavor Asset with the relevant Flavor Params (Flavor Params can exist without Flavor Asset & vice versa) + * + * @param string $entryId + * @return array + */ + function getFlavorAssetsWithParams($entryId) + { + $kparams = array(); + $this->client->addParam($kparams, "entryId", $entryId); + $this->client->queueServiceActionCall("flavorasset", "getFlavorAssetsWithParams", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "array"); + return $resultObject; + } + + /** + * Manually export an asset + * + * @param string $assetId + * @param int $storageProfileId + * @return KalturaFlavorAsset + */ + function export($assetId, $storageProfileId) + { + $kparams = array(); + $this->client->addParam($kparams, "assetId", $assetId); + $this->client->addParam($kparams, "storageProfileId", $storageProfileId); + $this->client->queueServiceActionCall("flavorasset", "export", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaFlavorAsset"); + return $resultObject; + } + + /** + * Set a given flavor as the original flavor + * + * @param string $assetId + * @return + */ + function setAsSource($assetId) + { + $kparams = array(); + $this->client->addParam($kparams, "assetId", $assetId); + $this->client->queueServiceActionCall("flavorasset", "setAsSource", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "null"); + return $resultObject; + } +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaFlavorParamsOutputService extends KalturaServiceBase +{ + function __construct(KalturaClient $client = null) + { + parent::__construct($client); + } + + /** + * Get flavor params output object by ID + * + * @param int $id + * @return KalturaFlavorParamsOutput + */ + function get($id) + { + $kparams = array(); + $this->client->addParam($kparams, "id", $id); + $this->client->queueServiceActionCall("flavorparamsoutput", "get", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaFlavorParamsOutput"); + return $resultObject; + } + + /** + * List flavor params output objects by filter and pager + * + * @param KalturaFlavorParamsOutputFilter $filter + * @param KalturaFilterPager $pager + * @return KalturaFlavorParamsOutputListResponse + */ + function listAction(KalturaFlavorParamsOutputFilter $filter = null, KalturaFilterPager $pager = null) + { + $kparams = array(); + if ($filter !== null) + $this->client->addParam($kparams, "filter", $filter->toParams()); + if ($pager !== null) + $this->client->addParam($kparams, "pager", $pager->toParams()); + $this->client->queueServiceActionCall("flavorparamsoutput", "list", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaFlavorParamsOutputListResponse"); + return $resultObject; + } +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaFlavorParamsService extends KalturaServiceBase +{ + function __construct(KalturaClient $client = null) + { + parent::__construct($client); + } + + /** + * Add new Flavor Params + * + * @param KalturaFlavorParams $flavorParams + * @return KalturaFlavorParams + */ + function add(KalturaFlavorParams $flavorParams) + { + $kparams = array(); + $this->client->addParam($kparams, "flavorParams", $flavorParams->toParams()); + $this->client->queueServiceActionCall("flavorparams", "add", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaFlavorParams"); + return $resultObject; + } + + /** + * Get Flavor Params by ID + * + * @param int $id + * @return KalturaFlavorParams + */ + function get($id) + { + $kparams = array(); + $this->client->addParam($kparams, "id", $id); + $this->client->queueServiceActionCall("flavorparams", "get", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaFlavorParams"); + return $resultObject; + } + + /** + * Update Flavor Params by ID + * + * @param int $id + * @param KalturaFlavorParams $flavorParams + * @return KalturaFlavorParams + */ + function update($id, KalturaFlavorParams $flavorParams) + { + $kparams = array(); + $this->client->addParam($kparams, "id", $id); + $this->client->addParam($kparams, "flavorParams", $flavorParams->toParams()); + $this->client->queueServiceActionCall("flavorparams", "update", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaFlavorParams"); + return $resultObject; + } + + /** + * Delete Flavor Params by ID + * + * @param int $id + * @return + */ + function delete($id) + { + $kparams = array(); + $this->client->addParam($kparams, "id", $id); + $this->client->queueServiceActionCall("flavorparams", "delete", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "null"); + return $resultObject; + } + + /** + * List Flavor Params by filter with paging support (By default - all system default params will be listed too) + * + * @param KalturaFlavorParamsFilter $filter + * @param KalturaFilterPager $pager + * @return KalturaFlavorParamsListResponse + */ + function listAction(KalturaFlavorParamsFilter $filter = null, KalturaFilterPager $pager = null) + { + $kparams = array(); + if ($filter !== null) + $this->client->addParam($kparams, "filter", $filter->toParams()); + if ($pager !== null) + $this->client->addParam($kparams, "pager", $pager->toParams()); + $this->client->queueServiceActionCall("flavorparams", "list", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaFlavorParamsListResponse"); + return $resultObject; + } + + /** + * Get Flavor Params by Conversion Profile ID + * + * @param int $conversionProfileId + * @return array + */ + function getByConversionProfileId($conversionProfileId) + { + $kparams = array(); + $this->client->addParam($kparams, "conversionProfileId", $conversionProfileId); + $this->client->queueServiceActionCall("flavorparams", "getByConversionProfileId", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "array"); + return $resultObject; + } +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaLiveChannelSegmentService extends KalturaServiceBase +{ + function __construct(KalturaClient $client = null) + { + parent::__construct($client); + } + + /** + * Add new live channel segment + * + * @param KalturaLiveChannelSegment $liveChannelSegment + * @return KalturaLiveChannelSegment + */ + function add(KalturaLiveChannelSegment $liveChannelSegment) + { + $kparams = array(); + $this->client->addParam($kparams, "liveChannelSegment", $liveChannelSegment->toParams()); + $this->client->queueServiceActionCall("livechannelsegment", "add", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaLiveChannelSegment"); + return $resultObject; + } + + /** + * Get live channel segment by id + * + * @param int $id + * @return KalturaLiveChannelSegment + */ + function get($id) + { + $kparams = array(); + $this->client->addParam($kparams, "id", $id); + $this->client->queueServiceActionCall("livechannelsegment", "get", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaLiveChannelSegment"); + return $resultObject; + } + + /** + * Update live channel segment by id + * + * @param int $id + * @param KalturaLiveChannelSegment $liveChannelSegment + * @return KalturaLiveChannelSegment + */ + function update($id, KalturaLiveChannelSegment $liveChannelSegment) + { + $kparams = array(); + $this->client->addParam($kparams, "id", $id); + $this->client->addParam($kparams, "liveChannelSegment", $liveChannelSegment->toParams()); + $this->client->queueServiceActionCall("livechannelsegment", "update", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaLiveChannelSegment"); + return $resultObject; + } + + /** + * Delete live channel segment by id + * + * @param int $id + * @return + */ + function delete($id) + { + $kparams = array(); + $this->client->addParam($kparams, "id", $id); + $this->client->queueServiceActionCall("livechannelsegment", "delete", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "null"); + return $resultObject; + } + + /** + * List live channel segments by filter and pager + * + * @param KalturaLiveChannelSegmentFilter $filter + * @param KalturaFilterPager $pager + * @return KalturaLiveChannelSegmentListResponse + */ + function listAction(KalturaLiveChannelSegmentFilter $filter = null, KalturaFilterPager $pager = null) + { + $kparams = array(); + if ($filter !== null) + $this->client->addParam($kparams, "filter", $filter->toParams()); + if ($pager !== null) + $this->client->addParam($kparams, "pager", $pager->toParams()); + $this->client->queueServiceActionCall("livechannelsegment", "list", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaLiveChannelSegmentListResponse"); + return $resultObject; + } +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaLiveChannelService extends KalturaServiceBase +{ + function __construct(KalturaClient $client = null) + { + parent::__construct($client); + } + + /** + * Adds new live channel. + * + * @param KalturaLiveChannel $liveChannel Live channel metadata + * @return KalturaLiveChannel + */ + function add(KalturaLiveChannel $liveChannel) + { + $kparams = array(); + $this->client->addParam($kparams, "liveChannel", $liveChannel->toParams()); + $this->client->queueServiceActionCall("livechannel", "add", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaLiveChannel"); + return $resultObject; + } + + /** + * Get live channel by ID. + * + * @param string $id Live channel id + * @return KalturaLiveChannel + */ + function get($id) + { + $kparams = array(); + $this->client->addParam($kparams, "id", $id); + $this->client->queueServiceActionCall("livechannel", "get", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaLiveChannel"); + return $resultObject; + } + + /** + * Update live channel. Only the properties that were set will be updated. + * + * @param string $id Live channel id to update + * @param KalturaLiveChannel $liveChannel Live channel metadata to update + * @return KalturaLiveChannel + */ + function update($id, KalturaLiveChannel $liveChannel) + { + $kparams = array(); + $this->client->addParam($kparams, "id", $id); + $this->client->addParam($kparams, "liveChannel", $liveChannel->toParams()); + $this->client->queueServiceActionCall("livechannel", "update", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaLiveChannel"); + return $resultObject; + } + + /** + * Delete a live channel. + * + * @param string $id Live channel id to delete + * @return + */ + function delete($id) + { + $kparams = array(); + $this->client->addParam($kparams, "id", $id); + $this->client->queueServiceActionCall("livechannel", "delete", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "null"); + return $resultObject; + } + + /** + * List live channels by filter with paging support. + * + * @param KalturaLiveChannelFilter $filter Live channel filter + * @param KalturaFilterPager $pager Pager + * @return KalturaLiveChannelListResponse + */ + function listAction(KalturaLiveChannelFilter $filter = null, KalturaFilterPager $pager = null) + { + $kparams = array(); + if ($filter !== null) + $this->client->addParam($kparams, "filter", $filter->toParams()); + if ($pager !== null) + $this->client->addParam($kparams, "pager", $pager->toParams()); + $this->client->queueServiceActionCall("livechannel", "list", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaLiveChannelListResponse"); + return $resultObject; + } + + /** + * Delivering the status of a live channel (on-air/offline) + * + * @param string $id ID of the live channel + * @return bool + */ + function isLive($id) + { + $kparams = array(); + $this->client->addParam($kparams, "id", $id); + $this->client->queueServiceActionCall("livechannel", "isLive", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $resultObject = (bool) $resultObject; + return $resultObject; + } + + /** + * Append recorded video to live entry + * + * @param string $entryId Live entry id + * @param int $mediaServerIndex + * @param KalturaServerFileResource $resource + * @param float $duration + * @return + */ + function appendRecording($entryId, $mediaServerIndex, KalturaServerFileResource $resource, $duration) + { + $kparams = array(); + $this->client->addParam($kparams, "entryId", $entryId); + $this->client->addParam($kparams, "mediaServerIndex", $mediaServerIndex); + $this->client->addParam($kparams, "resource", $resource->toParams()); + $this->client->addParam($kparams, "duration", $duration); + $this->client->queueServiceActionCall("livechannel", "appendRecording", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "null"); + return $resultObject; + } + + /** + * Register media server to live entry + * + * @param string $entryId Live entry id + * @param string $hostname Media server host name + * @param int $mediaServerIndex Media server index primary / secondary + * @return KalturaLiveEntry + */ + function registerMediaServer($entryId, $hostname, $mediaServerIndex) + { + $kparams = array(); + $this->client->addParam($kparams, "entryId", $entryId); + $this->client->addParam($kparams, "hostname", $hostname); + $this->client->addParam($kparams, "mediaServerIndex", $mediaServerIndex); + $this->client->queueServiceActionCall("livechannel", "registerMediaServer", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaLiveEntry"); + return $resultObject; + } + + /** + * Unregister media server from live entry + * + * @param string $entryId Live entry id + * @param string $hostname Media server host name + * @param int $mediaServerIndex Media server index primary / secondary + * @return KalturaLiveEntry + */ + function unregisterMediaServer($entryId, $hostname, $mediaServerIndex) + { + $kparams = array(); + $this->client->addParam($kparams, "entryId", $entryId); + $this->client->addParam($kparams, "hostname", $hostname); + $this->client->addParam($kparams, "mediaServerIndex", $mediaServerIndex); + $this->client->queueServiceActionCall("livechannel", "unregisterMediaServer", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaLiveEntry"); + return $resultObject; + } + + /** + * Validates all registered media servers + * + * @param string $entryId Live entry id + * @return + */ + function validateRegisteredMediaServers($entryId) + { + $kparams = array(); + $this->client->addParam($kparams, "entryId", $entryId); + $this->client->queueServiceActionCall("livechannel", "validateRegisteredMediaServers", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "null"); + return $resultObject; + } +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaLiveStreamService extends KalturaServiceBase +{ + function __construct(KalturaClient $client = null) + { + parent::__construct($client); + } + + /** + * Adds new live stream entry. + The entry will be queued for provision. + * + * @param KalturaLiveStreamEntry $liveStreamEntry Live stream entry metadata + * @param string $sourceType Live stream source type + * @return KalturaLiveStreamEntry + */ + function add(KalturaLiveStreamEntry $liveStreamEntry, $sourceType = null) + { + $kparams = array(); + $this->client->addParam($kparams, "liveStreamEntry", $liveStreamEntry->toParams()); + $this->client->addParam($kparams, "sourceType", $sourceType); + $this->client->queueServiceActionCall("livestream", "add", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaLiveStreamEntry"); + return $resultObject; + } + + /** + * Get live stream entry by ID. + * + * @param string $entryId Live stream entry id + * @param int $version Desired version of the data + * @return KalturaLiveStreamEntry + */ + function get($entryId, $version = -1) + { + $kparams = array(); + $this->client->addParam($kparams, "entryId", $entryId); + $this->client->addParam($kparams, "version", $version); + $this->client->queueServiceActionCall("livestream", "get", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaLiveStreamEntry"); + return $resultObject; + } + + /** + * Authenticate live-stream entry against stream token and partner limitations + * + * @param string $entryId Live stream entry id + * @param string $token Live stream broadcasting token + * @return KalturaLiveStreamEntry + */ + function authenticate($entryId, $token) + { + $kparams = array(); + $this->client->addParam($kparams, "entryId", $entryId); + $this->client->addParam($kparams, "token", $token); + $this->client->queueServiceActionCall("livestream", "authenticate", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaLiveStreamEntry"); + return $resultObject; + } + + /** + * Update live stream entry. Only the properties that were set will be updated. + * + * @param string $entryId Live stream entry id to update + * @param KalturaLiveStreamEntry $liveStreamEntry Live stream entry metadata to update + * @return KalturaLiveStreamEntry + */ + function update($entryId, KalturaLiveStreamEntry $liveStreamEntry) + { + $kparams = array(); + $this->client->addParam($kparams, "entryId", $entryId); + $this->client->addParam($kparams, "liveStreamEntry", $liveStreamEntry->toParams()); + $this->client->queueServiceActionCall("livestream", "update", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaLiveStreamEntry"); + return $resultObject; + } + + /** + * Delete a live stream entry. + * + * @param string $entryId Live stream entry id to delete + * @return + */ + function delete($entryId) + { + $kparams = array(); + $this->client->addParam($kparams, "entryId", $entryId); + $this->client->queueServiceActionCall("livestream", "delete", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "null"); + return $resultObject; + } + + /** + * List live stream entries by filter with paging support. + * + * @param KalturaLiveStreamEntryFilter $filter Live stream entry filter + * @param KalturaFilterPager $pager Pager + * @return KalturaLiveStreamListResponse + */ + function listAction(KalturaLiveStreamEntryFilter $filter = null, KalturaFilterPager $pager = null) + { + $kparams = array(); + if ($filter !== null) + $this->client->addParam($kparams, "filter", $filter->toParams()); + if ($pager !== null) + $this->client->addParam($kparams, "pager", $pager->toParams()); + $this->client->queueServiceActionCall("livestream", "list", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaLiveStreamListResponse"); + return $resultObject; + } + + /** + * Update live stream entry thumbnail using a raw jpeg file + * + * @param string $entryId Live stream entry id + * @param file $fileData Jpeg file data + * @return KalturaLiveStreamEntry + */ + function updateOfflineThumbnailJpeg($entryId, $fileData) + { + $kparams = array(); + $this->client->addParam($kparams, "entryId", $entryId); + $kfiles = array(); + $this->client->addParam($kfiles, "fileData", $fileData); + $this->client->queueServiceActionCall("livestream", "updateOfflineThumbnailJpeg", $kparams, $kfiles); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaLiveStreamEntry"); + return $resultObject; + } + + /** + * Update entry thumbnail using url + * + * @param string $entryId Live stream entry id + * @param string $url File url + * @return KalturaLiveStreamEntry + */ + function updateOfflineThumbnailFromUrl($entryId, $url) + { + $kparams = array(); + $this->client->addParam($kparams, "entryId", $entryId); + $this->client->addParam($kparams, "url", $url); + $this->client->queueServiceActionCall("livestream", "updateOfflineThumbnailFromUrl", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaLiveStreamEntry"); + return $resultObject; + } + + /** + * Delivering the status of a live stream (on-air/offline) if it is possible + * + * @param string $id ID of the live stream + * @param string $protocol Protocol of the stream to test. + * @return bool + */ + function isLive($id, $protocol) + { + $kparams = array(); + $this->client->addParam($kparams, "id", $id); + $this->client->addParam($kparams, "protocol", $protocol); + $this->client->queueServiceActionCall("livestream", "isLive", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $resultObject = (bool) $resultObject; + return $resultObject; + } + + /** + * Append recorded video to live entry + * + * @param string $entryId Live entry id + * @param int $mediaServerIndex + * @param KalturaServerFileResource $resource + * @param float $duration + * @return + */ + function appendRecording($entryId, $mediaServerIndex, KalturaServerFileResource $resource, $duration) + { + $kparams = array(); + $this->client->addParam($kparams, "entryId", $entryId); + $this->client->addParam($kparams, "mediaServerIndex", $mediaServerIndex); + $this->client->addParam($kparams, "resource", $resource->toParams()); + $this->client->addParam($kparams, "duration", $duration); + $this->client->queueServiceActionCall("livestream", "appendRecording", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "null"); + return $resultObject; + } + + /** + * Register media server to live entry + * + * @param string $entryId Live entry id + * @param string $hostname Media server host name + * @param int $mediaServerIndex Media server index primary / secondary + * @return KalturaLiveEntry + */ + function registerMediaServer($entryId, $hostname, $mediaServerIndex) + { + $kparams = array(); + $this->client->addParam($kparams, "entryId", $entryId); + $this->client->addParam($kparams, "hostname", $hostname); + $this->client->addParam($kparams, "mediaServerIndex", $mediaServerIndex); + $this->client->queueServiceActionCall("livestream", "registerMediaServer", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaLiveEntry"); + return $resultObject; + } + + /** + * Unregister media server from live entry + * + * @param string $entryId Live entry id + * @param string $hostname Media server host name + * @param int $mediaServerIndex Media server index primary / secondary + * @return KalturaLiveEntry + */ + function unregisterMediaServer($entryId, $hostname, $mediaServerIndex) + { + $kparams = array(); + $this->client->addParam($kparams, "entryId", $entryId); + $this->client->addParam($kparams, "hostname", $hostname); + $this->client->addParam($kparams, "mediaServerIndex", $mediaServerIndex); + $this->client->queueServiceActionCall("livestream", "unregisterMediaServer", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaLiveEntry"); + return $resultObject; + } + + /** + * Validates all registered media servers + * + * @param string $entryId Live entry id + * @return + */ + function validateRegisteredMediaServers($entryId) + { + $kparams = array(); + $this->client->addParam($kparams, "entryId", $entryId); + $this->client->queueServiceActionCall("livestream", "validateRegisteredMediaServers", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "null"); + return $resultObject; + } +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaMediaInfoService extends KalturaServiceBase +{ + function __construct(KalturaClient $client = null) + { + parent::__construct($client); + } + + /** + * List media info objects by filter and pager + * + * @param KalturaMediaInfoFilter $filter + * @param KalturaFilterPager $pager + * @return KalturaMediaInfoListResponse + */ + function listAction(KalturaMediaInfoFilter $filter = null, KalturaFilterPager $pager = null) + { + $kparams = array(); + if ($filter !== null) + $this->client->addParam($kparams, "filter", $filter->toParams()); + if ($pager !== null) + $this->client->addParam($kparams, "pager", $pager->toParams()); + $this->client->queueServiceActionCall("mediainfo", "list", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaMediaInfoListResponse"); + return $resultObject; + } +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaMediaServerService extends KalturaServiceBase +{ + function __construct(KalturaClient $client = null) + { + parent::__construct($client); + } + + /** + * Get media server by hostname + * + * @param string $hostname + * @return KalturaMediaServer + */ + function get($hostname) + { + $kparams = array(); + $this->client->addParam($kparams, "hostname", $hostname); + $this->client->queueServiceActionCall("mediaserver", "get", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaMediaServer"); + return $resultObject; + } + + /** + * Update media server status + * + * @param string $hostname + * @param KalturaMediaServerStatus $mediaServerStatus + * @return KalturaMediaServer + */ + function reportStatus($hostname, KalturaMediaServerStatus $mediaServerStatus) + { + $kparams = array(); + $this->client->addParam($kparams, "hostname", $hostname); + $this->client->addParam($kparams, "mediaServerStatus", $mediaServerStatus->toParams()); + $this->client->queueServiceActionCall("mediaserver", "reportStatus", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaMediaServer"); + return $resultObject; + } +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaMediaService extends KalturaServiceBase +{ + function __construct(KalturaClient $client = null) + { + parent::__construct($client); + } + + /** + * Add entry + * + * @param KalturaMediaEntry $entry + * @return KalturaMediaEntry + */ + function add(KalturaMediaEntry $entry) + { + $kparams = array(); + $this->client->addParam($kparams, "entry", $entry->toParams()); + $this->client->queueServiceActionCall("media", "add", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaMediaEntry"); + return $resultObject; + } + + /** + * Add content to media entry which is not yet associated with content (therefore is in status NO_CONTENT). + If the requirement is to replace the entry's associated content, use action updateContent. + * + * @param string $entryId + * @param KalturaResource $resource + * @return KalturaMediaEntry + */ + function addContent($entryId, KalturaResource $resource = null) + { + $kparams = array(); + $this->client->addParam($kparams, "entryId", $entryId); + if ($resource !== null) + $this->client->addParam($kparams, "resource", $resource->toParams()); + $this->client->queueServiceActionCall("media", "addContent", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaMediaEntry"); + return $resultObject; + } + + /** + * Adds new media entry by importing an HTTP or FTP URL. + The entry will be queued for import and then for conversion. + * + * @param KalturaMediaEntry $mediaEntry Media entry metadata + * @param string $url An HTTP or FTP URL + * @return KalturaMediaEntry + */ + function addFromUrl(KalturaMediaEntry $mediaEntry, $url) + { + $kparams = array(); + $this->client->addParam($kparams, "mediaEntry", $mediaEntry->toParams()); + $this->client->addParam($kparams, "url", $url); + $this->client->queueServiceActionCall("media", "addFromUrl", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaMediaEntry"); + return $resultObject; + } + + /** + * Adds new media entry by importing the media file from a search provider. + This action should be used with the search service result. + * + * @param KalturaMediaEntry $mediaEntry Media entry metadata + * @param KalturaSearchResult $searchResult Result object from search service + * @return KalturaMediaEntry + */ + function addFromSearchResult(KalturaMediaEntry $mediaEntry = null, KalturaSearchResult $searchResult = null) + { + $kparams = array(); + if ($mediaEntry !== null) + $this->client->addParam($kparams, "mediaEntry", $mediaEntry->toParams()); + if ($searchResult !== null) + $this->client->addParam($kparams, "searchResult", $searchResult->toParams()); + $this->client->queueServiceActionCall("media", "addFromSearchResult", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaMediaEntry"); + return $resultObject; + } + + /** + * Add new entry after the specific media file was uploaded and the upload token id exists + * + * @param KalturaMediaEntry $mediaEntry Media entry metadata + * @param string $uploadTokenId Upload token id + * @return KalturaMediaEntry + */ + function addFromUploadedFile(KalturaMediaEntry $mediaEntry, $uploadTokenId) + { + $kparams = array(); + $this->client->addParam($kparams, "mediaEntry", $mediaEntry->toParams()); + $this->client->addParam($kparams, "uploadTokenId", $uploadTokenId); + $this->client->queueServiceActionCall("media", "addFromUploadedFile", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaMediaEntry"); + return $resultObject; + } + + /** + * Add new entry after the file was recored on the server and the token id exists + * + * @param KalturaMediaEntry $mediaEntry Media entry metadata + * @param string $webcamTokenId Token id for the recored webcam file + * @return KalturaMediaEntry + */ + function addFromRecordedWebcam(KalturaMediaEntry $mediaEntry, $webcamTokenId) + { + $kparams = array(); + $this->client->addParam($kparams, "mediaEntry", $mediaEntry->toParams()); + $this->client->addParam($kparams, "webcamTokenId", $webcamTokenId); + $this->client->queueServiceActionCall("media", "addFromRecordedWebcam", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaMediaEntry"); + return $resultObject; + } + + /** + * Copy entry into new entry + * + * @param string $sourceEntryId Media entry id to copy from + * @param KalturaMediaEntry $mediaEntry Media entry metadata + * @param int $sourceFlavorParamsId The flavor to be used as the new entry source, source flavor will be used if not specified + * @return KalturaMediaEntry + */ + function addFromEntry($sourceEntryId, KalturaMediaEntry $mediaEntry = null, $sourceFlavorParamsId = null) + { + $kparams = array(); + $this->client->addParam($kparams, "sourceEntryId", $sourceEntryId); + if ($mediaEntry !== null) + $this->client->addParam($kparams, "mediaEntry", $mediaEntry->toParams()); + $this->client->addParam($kparams, "sourceFlavorParamsId", $sourceFlavorParamsId); + $this->client->queueServiceActionCall("media", "addFromEntry", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaMediaEntry"); + return $resultObject; + } + + /** + * Copy flavor asset into new entry + * + * @param string $sourceFlavorAssetId Flavor asset id to be used as the new entry source + * @param KalturaMediaEntry $mediaEntry Media entry metadata + * @return KalturaMediaEntry + */ + function addFromFlavorAsset($sourceFlavorAssetId, KalturaMediaEntry $mediaEntry = null) + { + $kparams = array(); + $this->client->addParam($kparams, "sourceFlavorAssetId", $sourceFlavorAssetId); + if ($mediaEntry !== null) + $this->client->addParam($kparams, "mediaEntry", $mediaEntry->toParams()); + $this->client->queueServiceActionCall("media", "addFromFlavorAsset", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaMediaEntry"); + return $resultObject; + } + + /** + * Convert entry + * + * @param string $entryId Media entry id + * @param int $conversionProfileId + * @param array $dynamicConversionAttributes + * @return int + */ + function convert($entryId, $conversionProfileId = null, array $dynamicConversionAttributes = null) + { + $kparams = array(); + $this->client->addParam($kparams, "entryId", $entryId); + $this->client->addParam($kparams, "conversionProfileId", $conversionProfileId); + if ($dynamicConversionAttributes !== null) + foreach($dynamicConversionAttributes as $index => $obj) + { + $this->client->addParam($kparams, "dynamicConversionAttributes:$index", $obj->toParams()); + } + $this->client->queueServiceActionCall("media", "convert", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "integer"); + return $resultObject; + } + + /** + * Get media entry by ID. + * + * @param string $entryId Media entry id + * @param int $version Desired version of the data + * @return KalturaMediaEntry + */ + function get($entryId, $version = -1) + { + $kparams = array(); + $this->client->addParam($kparams, "entryId", $entryId); + $this->client->addParam($kparams, "version", $version); + $this->client->queueServiceActionCall("media", "get", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaMediaEntry"); + return $resultObject; + } + + /** + * Get MRSS by entry id + XML will return as an escaped string + * + * @param string $entryId Entry id + * @param array $extendingItemsArray + * @return string + */ + function getMrss($entryId, array $extendingItemsArray = null) + { + $kparams = array(); + $this->client->addParam($kparams, "entryId", $entryId); + if ($extendingItemsArray !== null) + foreach($extendingItemsArray as $index => $obj) + { + $this->client->addParam($kparams, "extendingItemsArray:$index", $obj->toParams()); + } + $this->client->queueServiceActionCall("media", "getMrss", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "string"); + return $resultObject; + } + + /** + * Update media entry. Only the properties that were set will be updated. + * + * @param string $entryId Media entry id to update + * @param KalturaMediaEntry $mediaEntry Media entry metadata to update + * @return KalturaMediaEntry + */ + function update($entryId, KalturaMediaEntry $mediaEntry) + { + $kparams = array(); + $this->client->addParam($kparams, "entryId", $entryId); + $this->client->addParam($kparams, "mediaEntry", $mediaEntry->toParams()); + $this->client->queueServiceActionCall("media", "update", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaMediaEntry"); + return $resultObject; + } + + /** + * Replace content associated with the media entry. + * + * @param string $entryId Media entry id to update + * @param KalturaResource $resource Resource to be used to replace entry media content + * @param int $conversionProfileId The conversion profile id to be used on the entry + * @return KalturaMediaEntry + */ + function updateContent($entryId, KalturaResource $resource, $conversionProfileId = null) + { + $kparams = array(); + $this->client->addParam($kparams, "entryId", $entryId); + $this->client->addParam($kparams, "resource", $resource->toParams()); + $this->client->addParam($kparams, "conversionProfileId", $conversionProfileId); + $this->client->queueServiceActionCall("media", "updateContent", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaMediaEntry"); + return $resultObject; + } + + /** + * Delete a media entry. + * + * @param string $entryId Media entry id to delete + * @return + */ + function delete($entryId) + { + $kparams = array(); + $this->client->addParam($kparams, "entryId", $entryId); + $this->client->queueServiceActionCall("media", "delete", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "null"); + return $resultObject; + } + + /** + * Approves media replacement + * + * @param string $entryId Media entry id to replace + * @return KalturaMediaEntry + */ + function approveReplace($entryId) + { + $kparams = array(); + $this->client->addParam($kparams, "entryId", $entryId); + $this->client->queueServiceActionCall("media", "approveReplace", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaMediaEntry"); + return $resultObject; + } + + /** + * Cancels media replacement + * + * @param string $entryId Media entry id to cancel + * @return KalturaMediaEntry + */ + function cancelReplace($entryId) + { + $kparams = array(); + $this->client->addParam($kparams, "entryId", $entryId); + $this->client->queueServiceActionCall("media", "cancelReplace", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaMediaEntry"); + return $resultObject; + } + + /** + * List media entries by filter with paging support. + * + * @param KalturaMediaEntryFilter $filter Media entry filter + * @param KalturaFilterPager $pager Pager + * @return KalturaMediaListResponse + */ + function listAction(KalturaMediaEntryFilter $filter = null, KalturaFilterPager $pager = null) + { + $kparams = array(); + if ($filter !== null) + $this->client->addParam($kparams, "filter", $filter->toParams()); + if ($pager !== null) + $this->client->addParam($kparams, "pager", $pager->toParams()); + $this->client->queueServiceActionCall("media", "list", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaMediaListResponse"); + return $resultObject; + } + + /** + * Count media entries by filter. + * + * @param KalturaMediaEntryFilter $filter Media entry filter + * @return int + */ + function count(KalturaMediaEntryFilter $filter = null) + { + $kparams = array(); + if ($filter !== null) + $this->client->addParam($kparams, "filter", $filter->toParams()); + $this->client->queueServiceActionCall("media", "count", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "integer"); + return $resultObject; + } + + /** + * Upload a media file to Kaltura, then the file can be used to create a media entry. + * + * @param file $fileData The file data + * @return string + */ + function upload($fileData) + { + $kparams = array(); + $kfiles = array(); + $this->client->addParam($kfiles, "fileData", $fileData); + $this->client->queueServiceActionCall("media", "upload", $kparams, $kfiles); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "string"); + return $resultObject; + } + + /** + * Update media entry thumbnail by a specified time offset (In seconds) + If flavor params id not specified, source flavor will be used by default + * + * @param string $entryId Media entry id + * @param int $timeOffset Time offset (in seconds) + * @param int $flavorParamsId The flavor params id to be used + * @return KalturaMediaEntry + */ + function updateThumbnail($entryId, $timeOffset, $flavorParamsId = null) + { + $kparams = array(); + $this->client->addParam($kparams, "entryId", $entryId); + $this->client->addParam($kparams, "timeOffset", $timeOffset); + $this->client->addParam($kparams, "flavorParamsId", $flavorParamsId); + $this->client->queueServiceActionCall("media", "updateThumbnail", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaMediaEntry"); + return $resultObject; + } + + /** + * Update media entry thumbnail from a different entry by a specified time offset (In seconds) + If flavor params id not specified, source flavor will be used by default + * + * @param string $entryId Media entry id + * @param string $sourceEntryId Media entry id + * @param int $timeOffset Time offset (in seconds) + * @param int $flavorParamsId The flavor params id to be used + * @return KalturaMediaEntry + */ + function updateThumbnailFromSourceEntry($entryId, $sourceEntryId, $timeOffset, $flavorParamsId = null) + { + $kparams = array(); + $this->client->addParam($kparams, "entryId", $entryId); + $this->client->addParam($kparams, "sourceEntryId", $sourceEntryId); + $this->client->addParam($kparams, "timeOffset", $timeOffset); + $this->client->addParam($kparams, "flavorParamsId", $flavorParamsId); + $this->client->queueServiceActionCall("media", "updateThumbnailFromSourceEntry", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaMediaEntry"); + return $resultObject; + } + + /** + * Update media entry thumbnail using a raw jpeg file + * + * @param string $entryId Media entry id + * @param file $fileData Jpeg file data + * @return KalturaMediaEntry + */ + function updateThumbnailJpeg($entryId, $fileData) + { + $kparams = array(); + $this->client->addParam($kparams, "entryId", $entryId); + $kfiles = array(); + $this->client->addParam($kfiles, "fileData", $fileData); + $this->client->queueServiceActionCall("media", "updateThumbnailJpeg", $kparams, $kfiles); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaMediaEntry"); + return $resultObject; + } + + /** + * Update entry thumbnail using url + * + * @param string $entryId Media entry id + * @param string $url File url + * @return KalturaBaseEntry + */ + function updateThumbnailFromUrl($entryId, $url) + { + $kparams = array(); + $this->client->addParam($kparams, "entryId", $entryId); + $this->client->addParam($kparams, "url", $url); + $this->client->queueServiceActionCall("media", "updateThumbnailFromUrl", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaBaseEntry"); + return $resultObject; + } + + /** + * Request a new conversion job, this can be used to convert the media entry to a different format + * + * @param string $entryId Media entry id + * @param string $fileFormat Format to convert + * @return int + */ + function requestConversion($entryId, $fileFormat) + { + $kparams = array(); + $this->client->addParam($kparams, "entryId", $entryId); + $this->client->addParam($kparams, "fileFormat", $fileFormat); + $this->client->queueServiceActionCall("media", "requestConversion", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "integer"); + return $resultObject; + } + + /** + * Flag inappropriate media entry for moderation + * + * @param KalturaModerationFlag $moderationFlag + * @return + */ + function flag(KalturaModerationFlag $moderationFlag) + { + $kparams = array(); + $this->client->addParam($kparams, "moderationFlag", $moderationFlag->toParams()); + $this->client->queueServiceActionCall("media", "flag", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "null"); + return $resultObject; + } + + /** + * Reject the media entry and mark the pending flags (if any) as moderated (this will make the entry non playable) + * + * @param string $entryId + * @return + */ + function reject($entryId) + { + $kparams = array(); + $this->client->addParam($kparams, "entryId", $entryId); + $this->client->queueServiceActionCall("media", "reject", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "null"); + return $resultObject; + } + + /** + * Approve the media entry and mark the pending flags (if any) as moderated (this will make the entry playable) + * + * @param string $entryId + * @return + */ + function approve($entryId) + { + $kparams = array(); + $this->client->addParam($kparams, "entryId", $entryId); + $this->client->queueServiceActionCall("media", "approve", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "null"); + return $resultObject; + } + + /** + * List all pending flags for the media entry + * + * @param string $entryId + * @param KalturaFilterPager $pager + * @return KalturaModerationFlagListResponse + */ + function listFlags($entryId, KalturaFilterPager $pager = null) + { + $kparams = array(); + $this->client->addParam($kparams, "entryId", $entryId); + if ($pager !== null) + $this->client->addParam($kparams, "pager", $pager->toParams()); + $this->client->queueServiceActionCall("media", "listFlags", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaModerationFlagListResponse"); + return $resultObject; + } + + /** + * Anonymously rank a media entry, no validation is done on duplicate rankings + * + * @param string $entryId + * @param int $rank + * @return + */ + function anonymousRank($entryId, $rank) + { + $kparams = array(); + $this->client->addParam($kparams, "entryId", $entryId); + $this->client->addParam($kparams, "rank", $rank); + $this->client->queueServiceActionCall("media", "anonymousRank", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "null"); + return $resultObject; + } + + /** + * Add new bulk upload batch job + Conversion profile id can be specified in the API or in the CSV file, the one in the CSV file will be stronger. + If no conversion profile was specified, partner's default will be used + * + * @param file $fileData + * @param KalturaBulkUploadJobData $bulkUploadData + * @param KalturaBulkUploadEntryData $bulkUploadEntryData + * @return KalturaBulkUpload + */ + function bulkUploadAdd($fileData, KalturaBulkUploadJobData $bulkUploadData = null, KalturaBulkUploadEntryData $bulkUploadEntryData = null) + { + $kparams = array(); + $kfiles = array(); + $this->client->addParam($kfiles, "fileData", $fileData); + if ($bulkUploadData !== null) + $this->client->addParam($kparams, "bulkUploadData", $bulkUploadData->toParams()); + if ($bulkUploadEntryData !== null) + $this->client->addParam($kparams, "bulkUploadEntryData", $bulkUploadEntryData->toParams()); + $this->client->queueServiceActionCall("media", "bulkUploadAdd", $kparams, $kfiles); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaBulkUpload"); + return $resultObject; + } +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaMixingService extends KalturaServiceBase +{ + function __construct(KalturaClient $client = null) + { + parent::__construct($client); + } + + /** + * Adds a new mix. + If the dataContent is null, a default timeline will be created. + * + * @param KalturaMixEntry $mixEntry Mix entry metadata + * @return KalturaMixEntry + */ + function add(KalturaMixEntry $mixEntry) + { + $kparams = array(); + $this->client->addParam($kparams, "mixEntry", $mixEntry->toParams()); + $this->client->queueServiceActionCall("mixing", "add", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaMixEntry"); + return $resultObject; + } + + /** + * Get mix entry by id. + * + * @param string $entryId Mix entry id + * @param int $version Desired version of the data + * @return KalturaMixEntry + */ + function get($entryId, $version = -1) + { + $kparams = array(); + $this->client->addParam($kparams, "entryId", $entryId); + $this->client->addParam($kparams, "version", $version); + $this->client->queueServiceActionCall("mixing", "get", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaMixEntry"); + return $resultObject; + } + + /** + * Update mix entry. Only the properties that were set will be updated. + * + * @param string $entryId Mix entry id to update + * @param KalturaMixEntry $mixEntry Mix entry metadata to update + * @return KalturaMixEntry + */ + function update($entryId, KalturaMixEntry $mixEntry) + { + $kparams = array(); + $this->client->addParam($kparams, "entryId", $entryId); + $this->client->addParam($kparams, "mixEntry", $mixEntry->toParams()); + $this->client->queueServiceActionCall("mixing", "update", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaMixEntry"); + return $resultObject; + } + + /** + * Delete a mix entry. + * + * @param string $entryId Mix entry id to delete + * @return + */ + function delete($entryId) + { + $kparams = array(); + $this->client->addParam($kparams, "entryId", $entryId); + $this->client->queueServiceActionCall("mixing", "delete", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "null"); + return $resultObject; + } + + /** + * List entries by filter with paging support. + Return parameter is an array of mix entries. + * + * @param KalturaMixEntryFilter $filter Mix entry filter + * @param KalturaFilterPager $pager Pager + * @return KalturaMixListResponse + */ + function listAction(KalturaMixEntryFilter $filter = null, KalturaFilterPager $pager = null) + { + $kparams = array(); + if ($filter !== null) + $this->client->addParam($kparams, "filter", $filter->toParams()); + if ($pager !== null) + $this->client->addParam($kparams, "pager", $pager->toParams()); + $this->client->queueServiceActionCall("mixing", "list", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaMixListResponse"); + return $resultObject; + } + + /** + * Count mix entries by filter. + * + * @param KalturaMediaEntryFilter $filter Media entry filter + * @return int + */ + function count(KalturaMediaEntryFilter $filter = null) + { + $kparams = array(); + if ($filter !== null) + $this->client->addParam($kparams, "filter", $filter->toParams()); + $this->client->queueServiceActionCall("mixing", "count", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "integer"); + return $resultObject; + } + + /** + * Clones an existing mix. + * + * @param string $entryId Mix entry id to clone + * @return KalturaMixEntry + */ + function cloneAction($entryId) + { + $kparams = array(); + $this->client->addParam($kparams, "entryId", $entryId); + $this->client->queueServiceActionCall("mixing", "clone", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaMixEntry"); + return $resultObject; + } + + /** + * Appends a media entry to a the end of the mix timeline, this will save the mix timeline as a new version. + * + * @param string $mixEntryId Mix entry to append to its timeline + * @param string $mediaEntryId Media entry to append to the timeline + * @return KalturaMixEntry + */ + function appendMediaEntry($mixEntryId, $mediaEntryId) + { + $kparams = array(); + $this->client->addParam($kparams, "mixEntryId", $mixEntryId); + $this->client->addParam($kparams, "mediaEntryId", $mediaEntryId); + $this->client->queueServiceActionCall("mixing", "appendMediaEntry", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaMixEntry"); + return $resultObject; + } + + /** + * Get the mixes in which the media entry is included + * + * @param string $mediaEntryId + * @return array + */ + function getMixesByMediaId($mediaEntryId) + { + $kparams = array(); + $this->client->addParam($kparams, "mediaEntryId", $mediaEntryId); + $this->client->queueServiceActionCall("mixing", "getMixesByMediaId", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "array"); + return $resultObject; + } + + /** + * Get all ready media entries that exist in the given mix id + * + * @param string $mixId + * @param int $version Desired version to get the data from + * @return array + */ + function getReadyMediaEntries($mixId, $version = -1) + { + $kparams = array(); + $this->client->addParam($kparams, "mixId", $mixId); + $this->client->addParam($kparams, "version", $version); + $this->client->queueServiceActionCall("mixing", "getReadyMediaEntries", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "array"); + return $resultObject; + } + + /** + * Anonymously rank a mix entry, no validation is done on duplicate rankings + * + * @param string $entryId + * @param int $rank + * @return + */ + function anonymousRank($entryId, $rank) + { + $kparams = array(); + $this->client->addParam($kparams, "entryId", $entryId); + $this->client->addParam($kparams, "rank", $rank); + $this->client->queueServiceActionCall("mixing", "anonymousRank", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "null"); + return $resultObject; + } +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaNotificationService extends KalturaServiceBase +{ + function __construct(KalturaClient $client = null) + { + parent::__construct($client); + } + + /** + * Return the notifications for a specific entry id and type + * + * @param string $entryId + * @param int $type + * @return KalturaClientNotification + */ + function getClientNotification($entryId, $type) + { + $kparams = array(); + $this->client->addParam($kparams, "entryId", $entryId); + $this->client->addParam($kparams, "type", $type); + $this->client->queueServiceActionCall("notification", "getClientNotification", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaClientNotification"); + return $resultObject; + } +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaPartnerService extends KalturaServiceBase +{ + function __construct(KalturaClient $client = null) + { + parent::__construct($client); + } + + /** + * Create a new Partner object + * + * @param KalturaPartner $partner + * @param string $cmsPassword + * @param int $templatePartnerId + * @param bool $silent + * @return KalturaPartner + */ + function register(KalturaPartner $partner, $cmsPassword = "", $templatePartnerId = null, $silent = false) + { + $kparams = array(); + $this->client->addParam($kparams, "partner", $partner->toParams()); + $this->client->addParam($kparams, "cmsPassword", $cmsPassword); + $this->client->addParam($kparams, "templatePartnerId", $templatePartnerId); + $this->client->addParam($kparams, "silent", $silent); + $this->client->queueServiceActionCall("partner", "register", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaPartner"); + return $resultObject; + } + + /** + * Update details and settings of an existing partner + * + * @param KalturaPartner $partner + * @param bool $allowEmpty + * @return KalturaPartner + */ + function update(KalturaPartner $partner, $allowEmpty = false) + { + $kparams = array(); + $this->client->addParam($kparams, "partner", $partner->toParams()); + $this->client->addParam($kparams, "allowEmpty", $allowEmpty); + $this->client->queueServiceActionCall("partner", "update", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaPartner"); + return $resultObject; + } + + /** + * Retrieve partner object by Id + * + * @param int $id + * @return KalturaPartner + */ + function get($id = null) + { + $kparams = array(); + $this->client->addParam($kparams, "id", $id); + $this->client->queueServiceActionCall("partner", "get", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaPartner"); + return $resultObject; + } + + /** + * Retrieve partner secret and admin secret + * + * @param int $partnerId + * @param string $adminEmail + * @param string $cmsPassword + * @return KalturaPartner + */ + function getSecrets($partnerId, $adminEmail, $cmsPassword) + { + $kparams = array(); + $this->client->addParam($kparams, "partnerId", $partnerId); + $this->client->addParam($kparams, "adminEmail", $adminEmail); + $this->client->addParam($kparams, "cmsPassword", $cmsPassword); + $this->client->queueServiceActionCall("partner", "getSecrets", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaPartner"); + return $resultObject; + } + + /** + * Retrieve all info attributed to the partner + This action expects no parameters. It returns information for the current KS partnerId. + * + * @return KalturaPartner + */ + function getInfo() + { + $kparams = array(); + $this->client->queueServiceActionCall("partner", "getInfo", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaPartner"); + return $resultObject; + } + + /** + * Get usage statistics for a partner + Calculation is done according to partner's package + Additional data returned is a graph points of streaming usage in a timeframe + The resolution can be "days" or "months" + * + * @param int $year + * @param int $month + * @param string $resolution + * @return KalturaPartnerUsage + */ + function getUsage($year = "", $month = 1, $resolution = null) + { + $kparams = array(); + $this->client->addParam($kparams, "year", $year); + $this->client->addParam($kparams, "month", $month); + $this->client->addParam($kparams, "resolution", $resolution); + $this->client->queueServiceActionCall("partner", "getUsage", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaPartnerUsage"); + return $resultObject; + } + + /** + * Get usage statistics for a partner + Calculation is done according to partner's package + * + * @return KalturaPartnerStatistics + */ + function getStatistics() + { + $kparams = array(); + $this->client->queueServiceActionCall("partner", "getStatistics", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaPartnerStatistics"); + return $resultObject; + } + + /** + * Retrieve a list of partner objects which the current user is allowed to access. + * + * @param KalturaPartnerFilter $partnerFilter + * @param KalturaFilterPager $pager + * @return KalturaPartnerListResponse + */ + function listPartnersForUser(KalturaPartnerFilter $partnerFilter = null, KalturaFilterPager $pager = null) + { + $kparams = array(); + if ($partnerFilter !== null) + $this->client->addParam($kparams, "partnerFilter", $partnerFilter->toParams()); + if ($pager !== null) + $this->client->addParam($kparams, "pager", $pager->toParams()); + $this->client->queueServiceActionCall("partner", "listPartnersForUser", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaPartnerListResponse"); + return $resultObject; + } + + /** + * List partners by filter with paging support + Current implementation will only list the sub partners of the partner initiating the api call (using the current KS). + This action is only partially implemented to support listing sub partners of a VAR partner. + * + * @param KalturaPartnerFilter $filter + * @param KalturaFilterPager $pager + * @return KalturaPartnerListResponse + */ + function listAction(KalturaPartnerFilter $filter = null, KalturaFilterPager $pager = null) + { + $kparams = array(); + if ($filter !== null) + $this->client->addParam($kparams, "filter", $filter->toParams()); + if ($pager !== null) + $this->client->addParam($kparams, "pager", $pager->toParams()); + $this->client->queueServiceActionCall("partner", "list", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaPartnerListResponse"); + return $resultObject; + } + + /** + * List partner's current processes' statuses + * + * @return KalturaFeatureStatusListResponse + */ + function listFeatureStatus() + { + $kparams = array(); + $this->client->queueServiceActionCall("partner", "listFeatureStatus", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaFeatureStatusListResponse"); + return $resultObject; + } + + /** + * Count partner's existing sub-publishers (count includes the partner itself). + * + * @param KalturaPartnerFilter $filter + * @return int + */ + function count(KalturaPartnerFilter $filter = null) + { + $kparams = array(); + if ($filter !== null) + $this->client->addParam($kparams, "filter", $filter->toParams()); + $this->client->queueServiceActionCall("partner", "count", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "integer"); + return $resultObject; + } +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaPermissionItemService extends KalturaServiceBase +{ + function __construct(KalturaClient $client = null) + { + parent::__construct($client); + } + + /** + * Adds a new permission item object to the account. + This action is available only to Kaltura system administrators. + * + * @param KalturaPermissionItem $permissionItem The new permission item + * @return KalturaPermissionItem + */ + function add(KalturaPermissionItem $permissionItem) + { + $kparams = array(); + $this->client->addParam($kparams, "permissionItem", $permissionItem->toParams()); + $this->client->queueServiceActionCall("permissionitem", "add", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaPermissionItem"); + return $resultObject; + } + + /** + * Retrieves a permission item object using its ID. + * + * @param int $permissionItemId The permission item's unique identifier + * @return KalturaPermissionItem + */ + function get($permissionItemId) + { + $kparams = array(); + $this->client->addParam($kparams, "permissionItemId", $permissionItemId); + $this->client->queueServiceActionCall("permissionitem", "get", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaPermissionItem"); + return $resultObject; + } + + /** + * Updates an existing permission item object. + This action is available only to Kaltura system administrators. + * + * @param int $permissionItemId The permission item's unique identifier + * @param KalturaPermissionItem $permissionItem Id The permission item's unique identifier + * @return KalturaPermissionItem + */ + function update($permissionItemId, KalturaPermissionItem $permissionItem) + { + $kparams = array(); + $this->client->addParam($kparams, "permissionItemId", $permissionItemId); + $this->client->addParam($kparams, "permissionItem", $permissionItem->toParams()); + $this->client->queueServiceActionCall("permissionitem", "update", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaPermissionItem"); + return $resultObject; + } + + /** + * Deletes an existing permission item object. + This action is available only to Kaltura system administrators. + * + * @param int $permissionItemId The permission item's unique identifier + * @return KalturaPermissionItem + */ + function delete($permissionItemId) + { + $kparams = array(); + $this->client->addParam($kparams, "permissionItemId", $permissionItemId); + $this->client->queueServiceActionCall("permissionitem", "delete", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaPermissionItem"); + return $resultObject; + } + + /** + * Lists permission item objects that are associated with an account. + * + * @param KalturaPermissionItemFilter $filter A filter used to exclude specific types of permission items + * @param KalturaFilterPager $pager A limit for the number of records to display on a page + * @return KalturaPermissionItemListResponse + */ + function listAction(KalturaPermissionItemFilter $filter = null, KalturaFilterPager $pager = null) + { + $kparams = array(); + if ($filter !== null) + $this->client->addParam($kparams, "filter", $filter->toParams()); + if ($pager !== null) + $this->client->addParam($kparams, "pager", $pager->toParams()); + $this->client->queueServiceActionCall("permissionitem", "list", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaPermissionItemListResponse"); + return $resultObject; + } +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaPermissionService extends KalturaServiceBase +{ + function __construct(KalturaClient $client = null) + { + parent::__construct($client); + } + + /** + * Adds a new permission object to the account. + * + * @param KalturaPermission $permission The new permission + * @return KalturaPermission + */ + function add(KalturaPermission $permission) + { + $kparams = array(); + $this->client->addParam($kparams, "permission", $permission->toParams()); + $this->client->queueServiceActionCall("permission", "add", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaPermission"); + return $resultObject; + } + + /** + * Retrieves a permission object using its ID. + * + * @param string $permissionName The name assigned to the permission + * @return KalturaPermission + */ + function get($permissionName) + { + $kparams = array(); + $this->client->addParam($kparams, "permissionName", $permissionName); + $this->client->queueServiceActionCall("permission", "get", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaPermission"); + return $resultObject; + } + + /** + * Updates an existing permission object. + * + * @param string $permissionName The name assigned to the permission + * @param KalturaPermission $permission Name The name assigned to the permission + * @return KalturaPermission + */ + function update($permissionName, KalturaPermission $permission) + { + $kparams = array(); + $this->client->addParam($kparams, "permissionName", $permissionName); + $this->client->addParam($kparams, "permission", $permission->toParams()); + $this->client->queueServiceActionCall("permission", "update", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaPermission"); + return $resultObject; + } + + /** + * Deletes an existing permission object. + * + * @param string $permissionName The name assigned to the permission + * @return KalturaPermission + */ + function delete($permissionName) + { + $kparams = array(); + $this->client->addParam($kparams, "permissionName", $permissionName); + $this->client->queueServiceActionCall("permission", "delete", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaPermission"); + return $resultObject; + } + + /** + * Lists permission objects that are associated with an account. + Blocked permissions are listed unless you use a filter to exclude them. + Blocked permissions are listed unless you use a filter to exclude them. + * + * @param KalturaPermissionFilter $filter A filter used to exclude specific types of permissions + * @param KalturaFilterPager $pager A limit for the number of records to display on a page + * @return KalturaPermissionListResponse + */ + function listAction(KalturaPermissionFilter $filter = null, KalturaFilterPager $pager = null) + { + $kparams = array(); + if ($filter !== null) + $this->client->addParam($kparams, "filter", $filter->toParams()); + if ($pager !== null) + $this->client->addParam($kparams, "pager", $pager->toParams()); + $this->client->queueServiceActionCall("permission", "list", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaPermissionListResponse"); + return $resultObject; + } + + /** + * Retrieves a list of permissions that apply to the current KS. + * + * @return string + */ + function getCurrentPermissions() + { + $kparams = array(); + $this->client->queueServiceActionCall("permission", "getCurrentPermissions", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "string"); + return $resultObject; + } +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaPlaylistService extends KalturaServiceBase +{ + function __construct(KalturaClient $client = null) + { + parent::__construct($client); + } + + /** + * Add new playlist + Note that all entries used in a playlist will become public and may appear in KalturaNetwork + * + * @param KalturaPlaylist $playlist + * @param bool $updateStats Indicates that the playlist statistics attributes should be updated synchronously now + * @return KalturaPlaylist + */ + function add(KalturaPlaylist $playlist, $updateStats = false) + { + $kparams = array(); + $this->client->addParam($kparams, "playlist", $playlist->toParams()); + $this->client->addParam($kparams, "updateStats", $updateStats); + $this->client->queueServiceActionCall("playlist", "add", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaPlaylist"); + return $resultObject; + } + + /** + * Retrieve a playlist + * + * @param string $id + * @param int $version Desired version of the data + * @return KalturaPlaylist + */ + function get($id, $version = -1) + { + $kparams = array(); + $this->client->addParam($kparams, "id", $id); + $this->client->addParam($kparams, "version", $version); + $this->client->queueServiceActionCall("playlist", "get", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaPlaylist"); + return $resultObject; + } + + /** + * Update existing playlist + Note - you cannot change playlist type. updated playlist must be of the same type. + * + * @param string $id + * @param KalturaPlaylist $playlist + * @param bool $updateStats + * @return KalturaPlaylist + */ + function update($id, KalturaPlaylist $playlist, $updateStats = false) + { + $kparams = array(); + $this->client->addParam($kparams, "id", $id); + $this->client->addParam($kparams, "playlist", $playlist->toParams()); + $this->client->addParam($kparams, "updateStats", $updateStats); + $this->client->queueServiceActionCall("playlist", "update", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaPlaylist"); + return $resultObject; + } + + /** + * Delete existing playlist + * + * @param string $id + * @return + */ + function delete($id) + { + $kparams = array(); + $this->client->addParam($kparams, "id", $id); + $this->client->queueServiceActionCall("playlist", "delete", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "null"); + return $resultObject; + } + + /** + * Clone an existing playlist + * + * @param string $id Id of the playlist to clone + * @param KalturaPlaylist $newPlaylist Parameters defined here will override the ones in the cloned playlist + * @return KalturaPlaylist + */ + function cloneAction($id, KalturaPlaylist $newPlaylist = null) + { + $kparams = array(); + $this->client->addParam($kparams, "id", $id); + if ($newPlaylist !== null) + $this->client->addParam($kparams, "newPlaylist", $newPlaylist->toParams()); + $this->client->queueServiceActionCall("playlist", "clone", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaPlaylist"); + return $resultObject; + } + + /** + * List available playlists + * + * @param KalturaPlaylistFilter $filter + * @param KalturaFilterPager $pager + * @return KalturaPlaylistListResponse + */ + function listAction(KalturaPlaylistFilter $filter = null, KalturaFilterPager $pager = null) + { + $kparams = array(); + if ($filter !== null) + $this->client->addParam($kparams, "filter", $filter->toParams()); + if ($pager !== null) + $this->client->addParam($kparams, "pager", $pager->toParams()); + $this->client->queueServiceActionCall("playlist", "list", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaPlaylistListResponse"); + return $resultObject; + } + + /** + * Retrieve playlist for playing purpose + * + * @param string $id + * @param string $detailed + * @param KalturaContext $playlistContext + * @param KalturaMediaEntryFilterForPlaylist $filter + * @return array + */ + function execute($id, $detailed = "", KalturaContext $playlistContext = null, KalturaMediaEntryFilterForPlaylist $filter = null) + { + $kparams = array(); + $this->client->addParam($kparams, "id", $id); + $this->client->addParam($kparams, "detailed", $detailed); + if ($playlistContext !== null) + $this->client->addParam($kparams, "playlistContext", $playlistContext->toParams()); + if ($filter !== null) + $this->client->addParam($kparams, "filter", $filter->toParams()); + $this->client->queueServiceActionCall("playlist", "execute", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "array"); + return $resultObject; + } + + /** + * Retrieve playlist for playing purpose, based on content + * + * @param int $playlistType + * @param string $playlistContent + * @param string $detailed + * @return array + */ + function executeFromContent($playlistType, $playlistContent, $detailed = "") + { + $kparams = array(); + $this->client->addParam($kparams, "playlistType", $playlistType); + $this->client->addParam($kparams, "playlistContent", $playlistContent); + $this->client->addParam($kparams, "detailed", $detailed); + $this->client->queueServiceActionCall("playlist", "executeFromContent", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "array"); + return $resultObject; + } + + /** + * Revrieve playlist for playing purpose, based on media entry filters + * + * @param array $filters + * @param int $totalResults + * @param string $detailed + * @return array + */ + function executeFromFilters(array $filters, $totalResults, $detailed = "") + { + $kparams = array(); + foreach($filters as $index => $obj) + { + $this->client->addParam($kparams, "filters:$index", $obj->toParams()); + } + $this->client->addParam($kparams, "totalResults", $totalResults); + $this->client->addParam($kparams, "detailed", $detailed); + $this->client->queueServiceActionCall("playlist", "executeFromFilters", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "array"); + return $resultObject; + } + + /** + * Retrieve playlist statistics + * + * @param int $playlistType + * @param string $playlistContent + * @return KalturaPlaylist + */ + function getStatsFromContent($playlistType, $playlistContent) + { + $kparams = array(); + $this->client->addParam($kparams, "playlistType", $playlistType); + $this->client->addParam($kparams, "playlistContent", $playlistContent); + $this->client->queueServiceActionCall("playlist", "getStatsFromContent", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaPlaylist"); + return $resultObject; + } +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaReportService extends KalturaServiceBase +{ + function __construct(KalturaClient $client = null) + { + parent::__construct($client); + } + + /** + * Report getGraphs action allows to get a graph data for a specific report. + * + * @param int $reportType + * @param KalturaReportInputFilter $reportInputFilter + * @param string $dimension + * @param string $objectIds - one ID or more (separated by ',') of specific objects to query + * @return array + */ + function getGraphs($reportType, KalturaReportInputFilter $reportInputFilter, $dimension = null, $objectIds = null) + { + $kparams = array(); + $this->client->addParam($kparams, "reportType", $reportType); + $this->client->addParam($kparams, "reportInputFilter", $reportInputFilter->toParams()); + $this->client->addParam($kparams, "dimension", $dimension); + $this->client->addParam($kparams, "objectIds", $objectIds); + $this->client->queueServiceActionCall("report", "getGraphs", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "array"); + return $resultObject; + } + + /** + * Report getTotal action allows to get a graph data for a specific report. + * + * @param int $reportType + * @param KalturaReportInputFilter $reportInputFilter + * @param string $objectIds - one ID or more (separated by ',') of specific objects to query + * @return KalturaReportTotal + */ + function getTotal($reportType, KalturaReportInputFilter $reportInputFilter, $objectIds = null) + { + $kparams = array(); + $this->client->addParam($kparams, "reportType", $reportType); + $this->client->addParam($kparams, "reportInputFilter", $reportInputFilter->toParams()); + $this->client->addParam($kparams, "objectIds", $objectIds); + $this->client->queueServiceActionCall("report", "getTotal", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaReportTotal"); + return $resultObject; + } + + /** + * Report getBaseTotal action allows to get a the total base for storage reports + * + * @param int $reportType + * @param KalturaReportInputFilter $reportInputFilter + * @param string $objectIds - one ID or more (separated by ',') of specific objects to query + * @return array + */ + function getBaseTotal($reportType, KalturaReportInputFilter $reportInputFilter, $objectIds = null) + { + $kparams = array(); + $this->client->addParam($kparams, "reportType", $reportType); + $this->client->addParam($kparams, "reportInputFilter", $reportInputFilter->toParams()); + $this->client->addParam($kparams, "objectIds", $objectIds); + $this->client->queueServiceActionCall("report", "getBaseTotal", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "array"); + return $resultObject; + } + + /** + * Report getTable action allows to get a graph data for a specific report. + * + * @param int $reportType + * @param KalturaReportInputFilter $reportInputFilter + * @param KalturaFilterPager $pager + * @param string $order + * @param string $objectIds - one ID or more (separated by ',') of specific objects to query + * @return KalturaReportTable + */ + function getTable($reportType, KalturaReportInputFilter $reportInputFilter, KalturaFilterPager $pager, $order = null, $objectIds = null) + { + $kparams = array(); + $this->client->addParam($kparams, "reportType", $reportType); + $this->client->addParam($kparams, "reportInputFilter", $reportInputFilter->toParams()); + $this->client->addParam($kparams, "pager", $pager->toParams()); + $this->client->addParam($kparams, "order", $order); + $this->client->addParam($kparams, "objectIds", $objectIds); + $this->client->queueServiceActionCall("report", "getTable", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaReportTable"); + return $resultObject; + } + + /** + * Will create a Csv file for the given report and return the URL to access it + * + * @param string $reportTitle The title of the report to display at top of CSV + * @param string $reportText The text of the filter of the report + * @param string $headers The headers of the columns - a map between the enumerations on the server side and the their display text + * @param int $reportType + * @param KalturaReportInputFilter $reportInputFilter + * @param string $dimension + * @param KalturaFilterPager $pager + * @param string $order + * @param string $objectIds - one ID or more (separated by ',') of specific objects to query + * @return string + */ + function getUrlForReportAsCsv($reportTitle, $reportText, $headers, $reportType, KalturaReportInputFilter $reportInputFilter, $dimension = null, KalturaFilterPager $pager = null, $order = null, $objectIds = null) + { + $kparams = array(); + $this->client->addParam($kparams, "reportTitle", $reportTitle); + $this->client->addParam($kparams, "reportText", $reportText); + $this->client->addParam($kparams, "headers", $headers); + $this->client->addParam($kparams, "reportType", $reportType); + $this->client->addParam($kparams, "reportInputFilter", $reportInputFilter->toParams()); + $this->client->addParam($kparams, "dimension", $dimension); + if ($pager !== null) + $this->client->addParam($kparams, "pager", $pager->toParams()); + $this->client->addParam($kparams, "order", $order); + $this->client->addParam($kparams, "objectIds", $objectIds); + $this->client->queueServiceActionCall("report", "getUrlForReportAsCsv", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "string"); + return $resultObject; + } + + /** + * + * + * @param int $id + * @param array $params + * @return KalturaReportResponse + */ + function execute($id, array $params = null) + { + $kparams = array(); + $this->client->addParam($kparams, "id", $id); + if ($params !== null) + foreach($params as $index => $obj) + { + $this->client->addParam($kparams, "params:$index", $obj->toParams()); + } + $this->client->queueServiceActionCall("report", "execute", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaReportResponse"); + return $resultObject; + } + + /** + * + * + * @param int $id + * @param array $params + * @return file + */ + function getCsv($id, array $params = null) + { + $kparams = array(); + $this->client->addParam($kparams, "id", $id); + if ($params !== null) + foreach($params as $index => $obj) + { + $this->client->addParam($kparams, "params:$index", $obj->toParams()); + } + $this->client->queueServiceActionCall("report", "getCsv", $kparams); + if(!$this->client->getDestinationPath() && !$this->client->getReturnServedResult()) + return $this->client->getServeUrl(); + return $this->client->doQueue(); + } + + /** + * Returns report CSV file executed by string params with the following convention: param1=value1;param2=value2 + * + * @param int $id + * @param string $params + * @return file + */ + function getCsvFromStringParams($id, $params = null) + { + $kparams = array(); + $this->client->addParam($kparams, "id", $id); + $this->client->addParam($kparams, "params", $params); + $this->client->queueServiceActionCall("report", "getCsvFromStringParams", $kparams); + if(!$this->client->getDestinationPath() && !$this->client->getReturnServedResult()) + return $this->client->getServeUrl(); + return $this->client->doQueue(); + } +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaSchemaService extends KalturaServiceBase +{ + function __construct(KalturaClient $client = null) + { + parent::__construct($client); + } + + /** + * Serves the requested XSD according to the type and name. + * + * @param string $type + * @return file + */ + function serve($type) + { + $kparams = array(); + $this->client->addParam($kparams, "type", $type); + $this->client->queueServiceActionCall("schema", "serve", $kparams); + if(!$this->client->getDestinationPath() && !$this->client->getReturnServedResult()) + return $this->client->getServeUrl(); + return $this->client->doQueue(); + } +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaSearchService extends KalturaServiceBase +{ + function __construct(KalturaClient $client = null) + { + parent::__construct($client); + } + + /** + * Search for media in one of the supported media providers + * + * @param KalturaSearch $search A KalturaSearch object contains the search keywords, media provider and media type + * @param KalturaFilterPager $pager + * @return KalturaSearchResultResponse + */ + function search(KalturaSearch $search, KalturaFilterPager $pager = null) + { + $kparams = array(); + $this->client->addParam($kparams, "search", $search->toParams()); + if ($pager !== null) + $this->client->addParam($kparams, "pager", $pager->toParams()); + $this->client->queueServiceActionCall("search", "search", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaSearchResultResponse"); + return $resultObject; + } + + /** + * Retrieve extra information about media found in search action + Some providers return only part of the fields needed to create entry from, use this action to get the rest of the fields. + * + * @param KalturaSearchResult $searchResult KalturaSearchResult object extends KalturaSearch and has all fields required for media:add + * @return KalturaSearchResult + */ + function getMediaInfo(KalturaSearchResult $searchResult) + { + $kparams = array(); + $this->client->addParam($kparams, "searchResult", $searchResult->toParams()); + $this->client->queueServiceActionCall("search", "getMediaInfo", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaSearchResult"); + return $resultObject; + } + + /** + * Search for media given a specific URL + Kaltura supports a searchURL action on some of the media providers. + This action will return a KalturaSearchResult object based on a given URL (assuming the media provider is supported) + * + * @param int $mediaType + * @param string $url + * @return KalturaSearchResult + */ + function searchUrl($mediaType, $url) + { + $kparams = array(); + $this->client->addParam($kparams, "mediaType", $mediaType); + $this->client->addParam($kparams, "url", $url); + $this->client->queueServiceActionCall("search", "searchUrl", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaSearchResult"); + return $resultObject; + } + + /** + * + * + * @param int $searchSource + * @param string $userName + * @param string $password + * @return KalturaSearchAuthData + */ + function externalLogin($searchSource, $userName, $password) + { + $kparams = array(); + $this->client->addParam($kparams, "searchSource", $searchSource); + $this->client->addParam($kparams, "userName", $userName); + $this->client->addParam($kparams, "password", $password); + $this->client->queueServiceActionCall("search", "externalLogin", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaSearchAuthData"); + return $resultObject; + } +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaSessionService extends KalturaServiceBase +{ + function __construct(KalturaClient $client = null) + { + parent::__construct($client); + } + + /** + * Start a session with Kaltura's server. + The result KS is the session key that you should pass to all services that requires a ticket. + * + * @param string $secret Remember to provide the correct secret according to the sessionType you want + * @param string $userId + * @param int $type Regular session or Admin session + * @param int $partnerId + * @param int $expiry KS expiry time in seconds + * @param string $privileges + * @return string + */ + function start($secret, $userId = "", $type = 0, $partnerId = null, $expiry = 86400, $privileges = null) + { + $kparams = array(); + $this->client->addParam($kparams, "secret", $secret); + $this->client->addParam($kparams, "userId", $userId); + $this->client->addParam($kparams, "type", $type); + $this->client->addParam($kparams, "partnerId", $partnerId); + $this->client->addParam($kparams, "expiry", $expiry); + $this->client->addParam($kparams, "privileges", $privileges); + $this->client->queueServiceActionCall("session", "start", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "string"); + return $resultObject; + } + + /** + * End a session with the Kaltura server, making the current KS invalid. + * + * @return + */ + function end() + { + $kparams = array(); + $this->client->queueServiceActionCall("session", "end", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "null"); + return $resultObject; + } + + /** + * Start an impersonated session with Kaltura's server. + The result KS is the session key that you should pass to all services that requires a ticket. + * + * @param string $secret - should be the secret (admin or user) of the original partnerId (not impersonatedPartnerId). + * @param int $impersonatedPartnerId + * @param string $userId - impersonated userId + * @param int $type + * @param int $partnerId + * @param int $expiry KS expiry time in seconds + * @param string $privileges + * @return string + */ + function impersonate($secret, $impersonatedPartnerId, $userId = "", $type = 0, $partnerId = null, $expiry = 86400, $privileges = null) + { + $kparams = array(); + $this->client->addParam($kparams, "secret", $secret); + $this->client->addParam($kparams, "impersonatedPartnerId", $impersonatedPartnerId); + $this->client->addParam($kparams, "userId", $userId); + $this->client->addParam($kparams, "type", $type); + $this->client->addParam($kparams, "partnerId", $partnerId); + $this->client->addParam($kparams, "expiry", $expiry); + $this->client->addParam($kparams, "privileges", $privileges); + $this->client->queueServiceActionCall("session", "impersonate", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "string"); + return $resultObject; + } + + /** + * Start an impersonated session with Kaltura's server. + The result KS info contains the session key that you should pass to all services that requires a ticket. + Type, expiry and privileges won't be changed if they're not set + * + * @param string $session The old KS of the impersonated partner + * @param int $type Type of the new KS + * @param int $expiry Expiry time in seconds of the new KS + * @param string $privileges Privileges of the new KS + * @return KalturaSessionInfo + */ + function impersonateByKs($session, $type = null, $expiry = null, $privileges = null) + { + $kparams = array(); + $this->client->addParam($kparams, "session", $session); + $this->client->addParam($kparams, "type", $type); + $this->client->addParam($kparams, "expiry", $expiry); + $this->client->addParam($kparams, "privileges", $privileges); + $this->client->queueServiceActionCall("session", "impersonateByKs", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaSessionInfo"); + return $resultObject; + } + + /** + * Parse session key and return its info + * + * @param string $session The KS to be parsed, keep it empty to use current session. + * @return KalturaSessionInfo + */ + function get($session = null) + { + $kparams = array(); + $this->client->addParam($kparams, "session", $session); + $this->client->queueServiceActionCall("session", "get", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaSessionInfo"); + return $resultObject; + } + + /** + * Start a session for Kaltura's flash widgets + * + * @param string $widgetId + * @param int $expiry + * @return KalturaStartWidgetSessionResponse + */ + function startWidgetSession($widgetId, $expiry = 86400) + { + $kparams = array(); + $this->client->addParam($kparams, "widgetId", $widgetId); + $this->client->addParam($kparams, "expiry", $expiry); + $this->client->queueServiceActionCall("session", "startWidgetSession", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaStartWidgetSessionResponse"); + return $resultObject; + } +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaStatsService extends KalturaServiceBase +{ + function __construct(KalturaClient $client = null) + { + parent::__construct($client); + } + + /** + * Will write to the event log a single line representing the event + client version - will help interprete the line structure. different client versions might have slightly different data/data formats in the line +event_id - number is the row number in yuval's excel +datetime - same format as MySql's datetime - can change and should reflect the time zone +session id - can be some big random number or guid +partner id +entry id +unique viewer +widget id +ui_conf id +uid - the puser id as set by the ppartner +current point - in milliseconds +duration - milliseconds +user ip +process duration - in milliseconds +control id +seek +new point +referrer + + + KalturaStatsEvent $event + * + * @param KalturaStatsEvent $event + * @return bool + */ + function collect(KalturaStatsEvent $event) + { + $kparams = array(); + $this->client->addParam($kparams, "event", $event->toParams()); + $this->client->queueServiceActionCall("stats", "collect", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $resultObject = (bool) $resultObject; + return $resultObject; + } + + /** + * Will collect the kmcEvent sent form the KMC client + // this will actually be an empty function because all events will be sent using GET and will anyway be logged in the apache log + * + * @param KalturaStatsKmcEvent $kmcEvent + * @return + */ + function kmcCollect(KalturaStatsKmcEvent $kmcEvent) + { + $kparams = array(); + $this->client->addParam($kparams, "kmcEvent", $kmcEvent->toParams()); + $this->client->queueServiceActionCall("stats", "kmcCollect", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "null"); + return $resultObject; + } + + /** + * + * + * @param KalturaCEError $kalturaCEError + * @return KalturaCEError + */ + function reportKceError(KalturaCEError $kalturaCEError) + { + $kparams = array(); + $this->client->addParam($kparams, "kalturaCEError", $kalturaCEError->toParams()); + $this->client->queueServiceActionCall("stats", "reportKceError", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaCEError"); + return $resultObject; + } + + /** + * Use this action to report errors to the kaltura server. + * + * @param string $errorCode + * @param string $errorMessage + * @return + */ + function reportError($errorCode, $errorMessage) + { + $kparams = array(); + $this->client->addParam($kparams, "errorCode", $errorCode); + $this->client->addParam($kparams, "errorMessage", $errorMessage); + $this->client->queueServiceActionCall("stats", "reportError", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "null"); + return $resultObject; + } +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaStorageProfileService extends KalturaServiceBase +{ + function __construct(KalturaClient $client = null) + { + parent::__construct($client); + } + + /** + * Adds a storage profile to the Kaltura DB. + * + * @param KalturaStorageProfile $storageProfile + * @return KalturaStorageProfile + */ + function add(KalturaStorageProfile $storageProfile) + { + $kparams = array(); + $this->client->addParam($kparams, "storageProfile", $storageProfile->toParams()); + $this->client->queueServiceActionCall("storageprofile", "add", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaStorageProfile"); + return $resultObject; + } + + /** + * + * + * @param int $storageId + * @param int $status + * @return + */ + function updateStatus($storageId, $status) + { + $kparams = array(); + $this->client->addParam($kparams, "storageId", $storageId); + $this->client->addParam($kparams, "status", $status); + $this->client->queueServiceActionCall("storageprofile", "updateStatus", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "null"); + return $resultObject; + } + + /** + * Get storage profile by id + * + * @param int $storageProfileId + * @return KalturaStorageProfile + */ + function get($storageProfileId) + { + $kparams = array(); + $this->client->addParam($kparams, "storageProfileId", $storageProfileId); + $this->client->queueServiceActionCall("storageprofile", "get", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaStorageProfile"); + return $resultObject; + } + + /** + * Update storage profile by id + * + * @param int $storageProfileId + * @param KalturaStorageProfile $storageProfile Id + * @return KalturaStorageProfile + */ + function update($storageProfileId, KalturaStorageProfile $storageProfile) + { + $kparams = array(); + $this->client->addParam($kparams, "storageProfileId", $storageProfileId); + $this->client->addParam($kparams, "storageProfile", $storageProfile->toParams()); + $this->client->queueServiceActionCall("storageprofile", "update", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaStorageProfile"); + return $resultObject; + } + + /** + * + * + * @param KalturaStorageProfileFilter $filter + * @param KalturaFilterPager $pager + * @return KalturaStorageProfileListResponse + */ + function listAction(KalturaStorageProfileFilter $filter = null, KalturaFilterPager $pager = null) + { + $kparams = array(); + if ($filter !== null) + $this->client->addParam($kparams, "filter", $filter->toParams()); + if ($pager !== null) + $this->client->addParam($kparams, "pager", $pager->toParams()); + $this->client->queueServiceActionCall("storageprofile", "list", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaStorageProfileListResponse"); + return $resultObject; + } +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaSyndicationFeedService extends KalturaServiceBase +{ + function __construct(KalturaClient $client = null) + { + parent::__construct($client); + } + + /** + * Add new Syndication Feed + * + * @param KalturaBaseSyndicationFeed $syndicationFeed + * @return KalturaBaseSyndicationFeed + */ + function add(KalturaBaseSyndicationFeed $syndicationFeed) + { + $kparams = array(); + $this->client->addParam($kparams, "syndicationFeed", $syndicationFeed->toParams()); + $this->client->queueServiceActionCall("syndicationfeed", "add", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaBaseSyndicationFeed"); + return $resultObject; + } + + /** + * Get Syndication Feed by ID + * + * @param string $id + * @return KalturaBaseSyndicationFeed + */ + function get($id) + { + $kparams = array(); + $this->client->addParam($kparams, "id", $id); + $this->client->queueServiceActionCall("syndicationfeed", "get", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaBaseSyndicationFeed"); + return $resultObject; + } + + /** + * Update Syndication Feed by ID + * + * @param string $id + * @param KalturaBaseSyndicationFeed $syndicationFeed + * @return KalturaBaseSyndicationFeed + */ + function update($id, KalturaBaseSyndicationFeed $syndicationFeed) + { + $kparams = array(); + $this->client->addParam($kparams, "id", $id); + $this->client->addParam($kparams, "syndicationFeed", $syndicationFeed->toParams()); + $this->client->queueServiceActionCall("syndicationfeed", "update", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaBaseSyndicationFeed"); + return $resultObject; + } + + /** + * Delete Syndication Feed by ID + * + * @param string $id + * @return + */ + function delete($id) + { + $kparams = array(); + $this->client->addParam($kparams, "id", $id); + $this->client->queueServiceActionCall("syndicationfeed", "delete", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "null"); + return $resultObject; + } + + /** + * List Syndication Feeds by filter with paging support + * + * @param KalturaBaseSyndicationFeedFilter $filter + * @param KalturaFilterPager $pager + * @return KalturaBaseSyndicationFeedListResponse + */ + function listAction(KalturaBaseSyndicationFeedFilter $filter = null, KalturaFilterPager $pager = null) + { + $kparams = array(); + if ($filter !== null) + $this->client->addParam($kparams, "filter", $filter->toParams()); + if ($pager !== null) + $this->client->addParam($kparams, "pager", $pager->toParams()); + $this->client->queueServiceActionCall("syndicationfeed", "list", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaBaseSyndicationFeedListResponse"); + return $resultObject; + } + + /** + * Get entry count for a syndication feed + * + * @param string $feedId + * @return KalturaSyndicationFeedEntryCount + */ + function getEntryCount($feedId) + { + $kparams = array(); + $this->client->addParam($kparams, "feedId", $feedId); + $this->client->queueServiceActionCall("syndicationfeed", "getEntryCount", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaSyndicationFeedEntryCount"); + return $resultObject; + } + + /** + * Request conversion for all entries that doesnt have the required flavor param + returns a comma-separated ids of conversion jobs + * + * @param string $feedId + * @return string + */ + function requestConversion($feedId) + { + $kparams = array(); + $this->client->addParam($kparams, "feedId", $feedId); + $this->client->queueServiceActionCall("syndicationfeed", "requestConversion", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "string"); + return $resultObject; + } +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaSystemService extends KalturaServiceBase +{ + function __construct(KalturaClient $client = null) + { + parent::__construct($client); + } + + /** + * + * + * @return bool + */ + function ping() + { + $kparams = array(); + $this->client->queueServiceActionCall("system", "ping", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $resultObject = (bool) $resultObject; + return $resultObject; + } + + /** + * + * + * @return bool + */ + function pingDatabase() + { + $kparams = array(); + $this->client->queueServiceActionCall("system", "pingDatabase", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $resultObject = (bool) $resultObject; + return $resultObject; + } + + /** + * + * + * @return int + */ + function getTime() + { + $kparams = array(); + $this->client->queueServiceActionCall("system", "getTime", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "integer"); + return $resultObject; + } +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaThumbAssetService extends KalturaServiceBase +{ + function __construct(KalturaClient $client = null) + { + parent::__construct($client); + } + + /** + * Add thumbnail asset + * + * @param string $entryId + * @param KalturaThumbAsset $thumbAsset + * @return KalturaThumbAsset + */ + function add($entryId, KalturaThumbAsset $thumbAsset) + { + $kparams = array(); + $this->client->addParam($kparams, "entryId", $entryId); + $this->client->addParam($kparams, "thumbAsset", $thumbAsset->toParams()); + $this->client->queueServiceActionCall("thumbasset", "add", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaThumbAsset"); + return $resultObject; + } + + /** + * Update content of thumbnail asset + * + * @param string $id + * @param KalturaContentResource $contentResource + * @return KalturaThumbAsset + */ + function setContent($id, KalturaContentResource $contentResource) + { + $kparams = array(); + $this->client->addParam($kparams, "id", $id); + $this->client->addParam($kparams, "contentResource", $contentResource->toParams()); + $this->client->queueServiceActionCall("thumbasset", "setContent", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaThumbAsset"); + return $resultObject; + } + + /** + * Update thumbnail asset + * + * @param string $id + * @param KalturaThumbAsset $thumbAsset + * @return KalturaThumbAsset + */ + function update($id, KalturaThumbAsset $thumbAsset) + { + $kparams = array(); + $this->client->addParam($kparams, "id", $id); + $this->client->addParam($kparams, "thumbAsset", $thumbAsset->toParams()); + $this->client->queueServiceActionCall("thumbasset", "update", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaThumbAsset"); + return $resultObject; + } + + /** + * Serves thumbnail by entry id and thumnail params id + * + * @param string $entryId + * @param int $thumbParamId If not set, default thumbnail will be used. + * @return file + */ + function serveByEntryId($entryId, $thumbParamId = null) + { + $kparams = array(); + $this->client->addParam($kparams, "entryId", $entryId); + $this->client->addParam($kparams, "thumbParamId", $thumbParamId); + $this->client->queueServiceActionCall("thumbasset", "serveByEntryId", $kparams); + if(!$this->client->getDestinationPath() && !$this->client->getReturnServedResult()) + return $this->client->getServeUrl(); + return $this->client->doQueue(); + } + + /** + * Serves thumbnail by its id + * + * @param string $thumbAssetId + * @param int $version + * @param KalturaThumbParams $thumbParams + * @param KalturaThumbnailServeOptions $options + * @return file + */ + function serve($thumbAssetId, $version = null, KalturaThumbParams $thumbParams = null, KalturaThumbnailServeOptions $options = null) + { + $kparams = array(); + $this->client->addParam($kparams, "thumbAssetId", $thumbAssetId); + $this->client->addParam($kparams, "version", $version); + if ($thumbParams !== null) + $this->client->addParam($kparams, "thumbParams", $thumbParams->toParams()); + if ($options !== null) + $this->client->addParam($kparams, "options", $options->toParams()); + $this->client->queueServiceActionCall("thumbasset", "serve", $kparams); + if(!$this->client->getDestinationPath() && !$this->client->getReturnServedResult()) + return $this->client->getServeUrl(); + return $this->client->doQueue(); + } + + /** + * Tags the thumbnail as DEFAULT_THUMB and removes that tag from all other thumbnail assets of the entry. + Create a new file sync link on the entry thumbnail that points to the thumbnail asset file sync. + * + * @param string $thumbAssetId + * @return + */ + function setAsDefault($thumbAssetId) + { + $kparams = array(); + $this->client->addParam($kparams, "thumbAssetId", $thumbAssetId); + $this->client->queueServiceActionCall("thumbasset", "setAsDefault", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "null"); + return $resultObject; + } + + /** + * + * + * @param string $entryId + * @param int $destThumbParamsId Indicate the id of the ThumbParams to be generate this thumbnail by + * @return KalturaThumbAsset + */ + function generateByEntryId($entryId, $destThumbParamsId) + { + $kparams = array(); + $this->client->addParam($kparams, "entryId", $entryId); + $this->client->addParam($kparams, "destThumbParamsId", $destThumbParamsId); + $this->client->queueServiceActionCall("thumbasset", "generateByEntryId", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaThumbAsset"); + return $resultObject; + } + + /** + * + * + * @param string $entryId + * @param KalturaThumbParams $thumbParams + * @param string $sourceAssetId Id of the source asset (flavor or thumbnail) to be used as source for the thumbnail generation + * @return KalturaThumbAsset + */ + function generate($entryId, KalturaThumbParams $thumbParams, $sourceAssetId = null) + { + $kparams = array(); + $this->client->addParam($kparams, "entryId", $entryId); + $this->client->addParam($kparams, "thumbParams", $thumbParams->toParams()); + $this->client->addParam($kparams, "sourceAssetId", $sourceAssetId); + $this->client->queueServiceActionCall("thumbasset", "generate", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaThumbAsset"); + return $resultObject; + } + + /** + * + * + * @param string $thumbAssetId + * @return KalturaThumbAsset + */ + function regenerate($thumbAssetId) + { + $kparams = array(); + $this->client->addParam($kparams, "thumbAssetId", $thumbAssetId); + $this->client->queueServiceActionCall("thumbasset", "regenerate", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaThumbAsset"); + return $resultObject; + } + + /** + * + * + * @param string $thumbAssetId + * @return KalturaThumbAsset + */ + function get($thumbAssetId) + { + $kparams = array(); + $this->client->addParam($kparams, "thumbAssetId", $thumbAssetId); + $this->client->queueServiceActionCall("thumbasset", "get", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaThumbAsset"); + return $resultObject; + } + + /** + * + * + * @param string $entryId + * @return array + */ + function getByEntryId($entryId) + { + $kparams = array(); + $this->client->addParam($kparams, "entryId", $entryId); + $this->client->queueServiceActionCall("thumbasset", "getByEntryId", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "array"); + return $resultObject; + } + + /** + * List Thumbnail Assets by filter and pager + * + * @param KalturaAssetFilter $filter + * @param KalturaFilterPager $pager + * @return KalturaThumbAssetListResponse + */ + function listAction(KalturaAssetFilter $filter = null, KalturaFilterPager $pager = null) + { + $kparams = array(); + if ($filter !== null) + $this->client->addParam($kparams, "filter", $filter->toParams()); + if ($pager !== null) + $this->client->addParam($kparams, "pager", $pager->toParams()); + $this->client->queueServiceActionCall("thumbasset", "list", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaThumbAssetListResponse"); + return $resultObject; + } + + /** + * + * + * @param string $entryId + * @param string $url + * @return KalturaThumbAsset + */ + function addFromUrl($entryId, $url) + { + $kparams = array(); + $this->client->addParam($kparams, "entryId", $entryId); + $this->client->addParam($kparams, "url", $url); + $this->client->queueServiceActionCall("thumbasset", "addFromUrl", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaThumbAsset"); + return $resultObject; + } + + /** + * + * + * @param string $entryId + * @param file $fileData + * @return KalturaThumbAsset + */ + function addFromImage($entryId, $fileData) + { + $kparams = array(); + $this->client->addParam($kparams, "entryId", $entryId); + $kfiles = array(); + $this->client->addParam($kfiles, "fileData", $fileData); + $this->client->queueServiceActionCall("thumbasset", "addFromImage", $kparams, $kfiles); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaThumbAsset"); + return $resultObject; + } + + /** + * + * + * @param string $thumbAssetId + * @return + */ + function delete($thumbAssetId) + { + $kparams = array(); + $this->client->addParam($kparams, "thumbAssetId", $thumbAssetId); + $this->client->queueServiceActionCall("thumbasset", "delete", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "null"); + return $resultObject; + } + + /** + * Get download URL for the asset + * + * @param string $id + * @param int $storageId + * @param KalturaThumbParams $thumbParams + * @return string + */ + function getUrl($id, $storageId = null, KalturaThumbParams $thumbParams = null) + { + $kparams = array(); + $this->client->addParam($kparams, "id", $id); + $this->client->addParam($kparams, "storageId", $storageId); + if ($thumbParams !== null) + $this->client->addParam($kparams, "thumbParams", $thumbParams->toParams()); + $this->client->queueServiceActionCall("thumbasset", "getUrl", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "string"); + return $resultObject; + } + + /** + * Get remote storage existing paths for the asset + * + * @param string $id + * @return KalturaRemotePathListResponse + */ + function getRemotePaths($id) + { + $kparams = array(); + $this->client->addParam($kparams, "id", $id); + $this->client->queueServiceActionCall("thumbasset", "getRemotePaths", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaRemotePathListResponse"); + return $resultObject; + } +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaThumbParamsOutputService extends KalturaServiceBase +{ + function __construct(KalturaClient $client = null) + { + parent::__construct($client); + } + + /** + * Get thumb params output object by ID + * + * @param int $id + * @return KalturaThumbParamsOutput + */ + function get($id) + { + $kparams = array(); + $this->client->addParam($kparams, "id", $id); + $this->client->queueServiceActionCall("thumbparamsoutput", "get", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaThumbParamsOutput"); + return $resultObject; + } + + /** + * List thumb params output objects by filter and pager + * + * @param KalturaThumbParamsOutputFilter $filter + * @param KalturaFilterPager $pager + * @return KalturaThumbParamsOutputListResponse + */ + function listAction(KalturaThumbParamsOutputFilter $filter = null, KalturaFilterPager $pager = null) + { + $kparams = array(); + if ($filter !== null) + $this->client->addParam($kparams, "filter", $filter->toParams()); + if ($pager !== null) + $this->client->addParam($kparams, "pager", $pager->toParams()); + $this->client->queueServiceActionCall("thumbparamsoutput", "list", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaThumbParamsOutputListResponse"); + return $resultObject; + } +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaThumbParamsService extends KalturaServiceBase +{ + function __construct(KalturaClient $client = null) + { + parent::__construct($client); + } + + /** + * Add new Thumb Params + * + * @param KalturaThumbParams $thumbParams + * @return KalturaThumbParams + */ + function add(KalturaThumbParams $thumbParams) + { + $kparams = array(); + $this->client->addParam($kparams, "thumbParams", $thumbParams->toParams()); + $this->client->queueServiceActionCall("thumbparams", "add", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaThumbParams"); + return $resultObject; + } + + /** + * Get Thumb Params by ID + * + * @param int $id + * @return KalturaThumbParams + */ + function get($id) + { + $kparams = array(); + $this->client->addParam($kparams, "id", $id); + $this->client->queueServiceActionCall("thumbparams", "get", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaThumbParams"); + return $resultObject; + } + + /** + * Update Thumb Params by ID + * + * @param int $id + * @param KalturaThumbParams $thumbParams + * @return KalturaThumbParams + */ + function update($id, KalturaThumbParams $thumbParams) + { + $kparams = array(); + $this->client->addParam($kparams, "id", $id); + $this->client->addParam($kparams, "thumbParams", $thumbParams->toParams()); + $this->client->queueServiceActionCall("thumbparams", "update", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaThumbParams"); + return $resultObject; + } + + /** + * Delete Thumb Params by ID + * + * @param int $id + * @return + */ + function delete($id) + { + $kparams = array(); + $this->client->addParam($kparams, "id", $id); + $this->client->queueServiceActionCall("thumbparams", "delete", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "null"); + return $resultObject; + } + + /** + * List Thumb Params by filter with paging support (By default - all system default params will be listed too) + * + * @param KalturaThumbParamsFilter $filter + * @param KalturaFilterPager $pager + * @return KalturaThumbParamsListResponse + */ + function listAction(KalturaThumbParamsFilter $filter = null, KalturaFilterPager $pager = null) + { + $kparams = array(); + if ($filter !== null) + $this->client->addParam($kparams, "filter", $filter->toParams()); + if ($pager !== null) + $this->client->addParam($kparams, "pager", $pager->toParams()); + $this->client->queueServiceActionCall("thumbparams", "list", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaThumbParamsListResponse"); + return $resultObject; + } + + /** + * Get Thumb Params by Conversion Profile ID + * + * @param int $conversionProfileId + * @return array + */ + function getByConversionProfileId($conversionProfileId) + { + $kparams = array(); + $this->client->addParam($kparams, "conversionProfileId", $conversionProfileId); + $this->client->queueServiceActionCall("thumbparams", "getByConversionProfileId", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "array"); + return $resultObject; + } +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaUiConfService extends KalturaServiceBase +{ + function __construct(KalturaClient $client = null) + { + parent::__construct($client); + } + + /** + * UIConf Add action allows you to add a UIConf to Kaltura DB + * + * @param KalturaUiConf $uiConf Mandatory input parameter of type KalturaUiConf + * @return KalturaUiConf + */ + function add(KalturaUiConf $uiConf) + { + $kparams = array(); + $this->client->addParam($kparams, "uiConf", $uiConf->toParams()); + $this->client->queueServiceActionCall("uiconf", "add", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaUiConf"); + return $resultObject; + } + + /** + * Update an existing UIConf + * + * @param int $id + * @param KalturaUiConf $uiConf + * @return KalturaUiConf + */ + function update($id, KalturaUiConf $uiConf) + { + $kparams = array(); + $this->client->addParam($kparams, "id", $id); + $this->client->addParam($kparams, "uiConf", $uiConf->toParams()); + $this->client->queueServiceActionCall("uiconf", "update", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaUiConf"); + return $resultObject; + } + + /** + * Retrieve a UIConf by id + * + * @param int $id + * @return KalturaUiConf + */ + function get($id) + { + $kparams = array(); + $this->client->addParam($kparams, "id", $id); + $this->client->queueServiceActionCall("uiconf", "get", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaUiConf"); + return $resultObject; + } + + /** + * Delete an existing UIConf + * + * @param int $id + * @return + */ + function delete($id) + { + $kparams = array(); + $this->client->addParam($kparams, "id", $id); + $this->client->queueServiceActionCall("uiconf", "delete", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "null"); + return $resultObject; + } + + /** + * Clone an existing UIConf + * + * @param int $id + * @return KalturaUiConf + */ + function cloneAction($id) + { + $kparams = array(); + $this->client->addParam($kparams, "id", $id); + $this->client->queueServiceActionCall("uiconf", "clone", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaUiConf"); + return $resultObject; + } + + /** + * Retrieve a list of available template UIConfs + * + * @param KalturaUiConfFilter $filter + * @param KalturaFilterPager $pager + * @return KalturaUiConfListResponse + */ + function listTemplates(KalturaUiConfFilter $filter = null, KalturaFilterPager $pager = null) + { + $kparams = array(); + if ($filter !== null) + $this->client->addParam($kparams, "filter", $filter->toParams()); + if ($pager !== null) + $this->client->addParam($kparams, "pager", $pager->toParams()); + $this->client->queueServiceActionCall("uiconf", "listTemplates", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaUiConfListResponse"); + return $resultObject; + } + + /** + * Retrieve a list of available UIConfs + * + * @param KalturaUiConfFilter $filter + * @param KalturaFilterPager $pager + * @return KalturaUiConfListResponse + */ + function listAction(KalturaUiConfFilter $filter = null, KalturaFilterPager $pager = null) + { + $kparams = array(); + if ($filter !== null) + $this->client->addParam($kparams, "filter", $filter->toParams()); + if ($pager !== null) + $this->client->addParam($kparams, "pager", $pager->toParams()); + $this->client->queueServiceActionCall("uiconf", "list", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaUiConfListResponse"); + return $resultObject; + } + + /** + * Retrieve a list of all available versions by object type + * + * @return array + */ + function getAvailableTypes() + { + $kparams = array(); + $this->client->queueServiceActionCall("uiconf", "getAvailableTypes", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "array"); + return $resultObject; + } +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaUploadService extends KalturaServiceBase +{ + function __construct(KalturaClient $client = null) + { + parent::__construct($client); + } + + /** + * + * + * @param file $fileData The file data + * @return string + */ + function upload($fileData) + { + $kparams = array(); + $kfiles = array(); + $this->client->addParam($kfiles, "fileData", $fileData); + $this->client->queueServiceActionCall("upload", "upload", $kparams, $kfiles); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "string"); + return $resultObject; + } + + /** + * + * + * @param string $fileName + * @return KalturaUploadResponse + */ + function getUploadedFileTokenByFileName($fileName) + { + $kparams = array(); + $this->client->addParam($kparams, "fileName", $fileName); + $this->client->queueServiceActionCall("upload", "getUploadedFileTokenByFileName", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaUploadResponse"); + return $resultObject; + } +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaUploadTokenService extends KalturaServiceBase +{ + function __construct(KalturaClient $client = null) + { + parent::__construct($client); + } + + /** + * Adds new upload token to upload a file + * + * @param KalturaUploadToken $uploadToken + * @return KalturaUploadToken + */ + function add(KalturaUploadToken $uploadToken = null) + { + $kparams = array(); + if ($uploadToken !== null) + $this->client->addParam($kparams, "uploadToken", $uploadToken->toParams()); + $this->client->queueServiceActionCall("uploadtoken", "add", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaUploadToken"); + return $resultObject; + } + + /** + * Get upload token by id + * + * @param string $uploadTokenId + * @return KalturaUploadToken + */ + function get($uploadTokenId) + { + $kparams = array(); + $this->client->addParam($kparams, "uploadTokenId", $uploadTokenId); + $this->client->queueServiceActionCall("uploadtoken", "get", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaUploadToken"); + return $resultObject; + } + + /** + * Upload a file using the upload token id, returns an error on failure (an exception will be thrown when using one of the Kaltura clients) + * + * @param string $uploadTokenId + * @param file $fileData + * @param bool $resume + * @param bool $finalChunk + * @param float $resumeAt + * @return KalturaUploadToken + */ + function upload($uploadTokenId, $fileData, $resume = false, $finalChunk = true, $resumeAt = -1) + { + $kparams = array(); + $this->client->addParam($kparams, "uploadTokenId", $uploadTokenId); + $kfiles = array(); + $this->client->addParam($kfiles, "fileData", $fileData); + $this->client->addParam($kparams, "resume", $resume); + $this->client->addParam($kparams, "finalChunk", $finalChunk); + $this->client->addParam($kparams, "resumeAt", $resumeAt); + $this->client->queueServiceActionCall("uploadtoken", "upload", $kparams, $kfiles); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaUploadToken"); + return $resultObject; + } + + /** + * Deletes the upload token by upload token id + * + * @param string $uploadTokenId + * @return + */ + function delete($uploadTokenId) + { + $kparams = array(); + $this->client->addParam($kparams, "uploadTokenId", $uploadTokenId); + $this->client->queueServiceActionCall("uploadtoken", "delete", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "null"); + return $resultObject; + } + + /** + * List upload token by filter with pager support. + When using a user session the service will be restricted to users objects only. + * + * @param KalturaUploadTokenFilter $filter + * @param KalturaFilterPager $pager + * @return KalturaUploadTokenListResponse + */ + function listAction(KalturaUploadTokenFilter $filter = null, KalturaFilterPager $pager = null) + { + $kparams = array(); + if ($filter !== null) + $this->client->addParam($kparams, "filter", $filter->toParams()); + if ($pager !== null) + $this->client->addParam($kparams, "pager", $pager->toParams()); + $this->client->queueServiceActionCall("uploadtoken", "list", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaUploadTokenListResponse"); + return $resultObject; + } +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaUserRoleService extends KalturaServiceBase +{ + function __construct(KalturaClient $client = null) + { + parent::__construct($client); + } + + /** + * Adds a new user role object to the account. + * + * @param KalturaUserRole $userRole A new role + * @return KalturaUserRole + */ + function add(KalturaUserRole $userRole) + { + $kparams = array(); + $this->client->addParam($kparams, "userRole", $userRole->toParams()); + $this->client->queueServiceActionCall("userrole", "add", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaUserRole"); + return $resultObject; + } + + /** + * Retrieves a user role object using its ID. + * + * @param int $userRoleId The user role's unique identifier + * @return KalturaUserRole + */ + function get($userRoleId) + { + $kparams = array(); + $this->client->addParam($kparams, "userRoleId", $userRoleId); + $this->client->queueServiceActionCall("userrole", "get", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaUserRole"); + return $resultObject; + } + + /** + * Updates an existing user role object. + * + * @param int $userRoleId The user role's unique identifier + * @param KalturaUserRole $userRole Id The user role's unique identifier + * @return KalturaUserRole + */ + function update($userRoleId, KalturaUserRole $userRole) + { + $kparams = array(); + $this->client->addParam($kparams, "userRoleId", $userRoleId); + $this->client->addParam($kparams, "userRole", $userRole->toParams()); + $this->client->queueServiceActionCall("userrole", "update", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaUserRole"); + return $resultObject; + } + + /** + * Deletes an existing user role object. + * + * @param int $userRoleId The user role's unique identifier + * @return KalturaUserRole + */ + function delete($userRoleId) + { + $kparams = array(); + $this->client->addParam($kparams, "userRoleId", $userRoleId); + $this->client->queueServiceActionCall("userrole", "delete", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaUserRole"); + return $resultObject; + } + + /** + * Lists user role objects that are associated with an account. + Blocked user roles are listed unless you use a filter to exclude them. + Deleted user roles are not listed unless you use a filter to include them. + * + * @param KalturaUserRoleFilter $filter A filter used to exclude specific types of user roles + * @param KalturaFilterPager $pager A limit for the number of records to display on a page + * @return KalturaUserRoleListResponse + */ + function listAction(KalturaUserRoleFilter $filter = null, KalturaFilterPager $pager = null) + { + $kparams = array(); + if ($filter !== null) + $this->client->addParam($kparams, "filter", $filter->toParams()); + if ($pager !== null) + $this->client->addParam($kparams, "pager", $pager->toParams()); + $this->client->queueServiceActionCall("userrole", "list", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaUserRoleListResponse"); + return $resultObject; + } + + /** + * Creates a new user role object that is a duplicate of an existing role. + * + * @param int $userRoleId The user role's unique identifier + * @return KalturaUserRole + */ + function cloneAction($userRoleId) + { + $kparams = array(); + $this->client->addParam($kparams, "userRoleId", $userRoleId); + $this->client->queueServiceActionCall("userrole", "clone", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaUserRole"); + return $resultObject; + } +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaUserService extends KalturaServiceBase +{ + function __construct(KalturaClient $client = null) + { + parent::__construct($client); + } + + /** + * Adds a new user to an existing account in the Kaltura database. + Input param $id is the unique identifier in the partner's system. + * + * @param KalturaUser $user The new user + * @return KalturaUser + */ + function add(KalturaUser $user) + { + $kparams = array(); + $this->client->addParam($kparams, "user", $user->toParams()); + $this->client->queueServiceActionCall("user", "add", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaUser"); + return $resultObject; + } + + /** + * Updates an existing user object. + You can also use this action to update the userId. + * + * @param string $userId The user's unique identifier in the partner's system + * @param KalturaUser $user Id The user's unique identifier in the partner's system + * @return KalturaUser + */ + function update($userId, KalturaUser $user) + { + $kparams = array(); + $this->client->addParam($kparams, "userId", $userId); + $this->client->addParam($kparams, "user", $user->toParams()); + $this->client->queueServiceActionCall("user", "update", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaUser"); + return $resultObject; + } + + /** + * Retrieves a user object for a specified user ID. + * + * @param string $userId The user's unique identifier in the partner's system + * @return KalturaUser + */ + function get($userId = null) + { + $kparams = array(); + $this->client->addParam($kparams, "userId", $userId); + $this->client->queueServiceActionCall("user", "get", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaUser"); + return $resultObject; + } + + /** + * Retrieves a user object for a user's login ID and partner ID. + A login ID is the email address used by a user to log into the system. + * + * @param string $loginId The user's email address that identifies the user for login + * @return KalturaUser + */ + function getByLoginId($loginId) + { + $kparams = array(); + $this->client->addParam($kparams, "loginId", $loginId); + $this->client->queueServiceActionCall("user", "getByLoginId", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaUser"); + return $resultObject; + } + + /** + * Deletes a user from a partner account. + * + * @param string $userId The user's unique identifier in the partner's system + * @return KalturaUser + */ + function delete($userId) + { + $kparams = array(); + $this->client->addParam($kparams, "userId", $userId); + $this->client->queueServiceActionCall("user", "delete", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaUser"); + return $resultObject; + } + + /** + * Lists user objects that are associated with an account. + Blocked users are listed unless you use a filter to exclude them. + Deleted users are not listed unless you use a filter to include them. + * + * @param KalturaUserFilter $filter A filter used to exclude specific types of users + * @param KalturaFilterPager $pager A limit for the number of records to display on a page + * @return KalturaUserListResponse + */ + function listAction(KalturaUserFilter $filter = null, KalturaFilterPager $pager = null) + { + $kparams = array(); + if ($filter !== null) + $this->client->addParam($kparams, "filter", $filter->toParams()); + if ($pager !== null) + $this->client->addParam($kparams, "pager", $pager->toParams()); + $this->client->queueServiceActionCall("user", "list", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaUserListResponse"); + return $resultObject; + } + + /** + * Notifies that a user is banned from an account. + * + * @param string $userId The user's unique identifier in the partner's system + * @return + */ + function notifyBan($userId) + { + $kparams = array(); + $this->client->addParam($kparams, "userId", $userId); + $this->client->queueServiceActionCall("user", "notifyBan", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "null"); + return $resultObject; + } + + /** + * Logs a user into a partner account with a partner ID, a partner user ID (puser), and a user password. + * + * @param int $partnerId The identifier of the partner account + * @param string $userId The user's unique identifier in the partner's system + * @param string $password The user's password + * @param int $expiry The requested time (in seconds) before the generated KS expires (By default, a KS expires after 24 hours). + * @param string $privileges Special privileges + * @return string + */ + function login($partnerId, $userId, $password, $expiry = 86400, $privileges = "*") + { + $kparams = array(); + $this->client->addParam($kparams, "partnerId", $partnerId); + $this->client->addParam($kparams, "userId", $userId); + $this->client->addParam($kparams, "password", $password); + $this->client->addParam($kparams, "expiry", $expiry); + $this->client->addParam($kparams, "privileges", $privileges); + $this->client->queueServiceActionCall("user", "login", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "string"); + return $resultObject; + } + + /** + * Logs a user into a partner account with a user login ID and a user password. + * + * @param string $loginId The user's email address that identifies the user for login + * @param string $password The user's password + * @param int $partnerId The identifier of the partner account + * @param int $expiry The requested time (in seconds) before the generated KS expires (By default, a KS expires after 24 hours). + * @param string $privileges Special privileges + * @return string + */ + function loginByLoginId($loginId, $password, $partnerId = null, $expiry = 86400, $privileges = "*") + { + $kparams = array(); + $this->client->addParam($kparams, "loginId", $loginId); + $this->client->addParam($kparams, "password", $password); + $this->client->addParam($kparams, "partnerId", $partnerId); + $this->client->addParam($kparams, "expiry", $expiry); + $this->client->addParam($kparams, "privileges", $privileges); + $this->client->queueServiceActionCall("user", "loginByLoginId", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "string"); + return $resultObject; + } + + /** + * Updates a user's login data: email, password, name. + * + * @param string $oldLoginId The user's current email address that identified the user for login + * @param string $password The user's current email address that identified the user for login + * @param string $newLoginId Optional, The user's email address that will identify the user for login + * @param string $newPassword Optional, The user's new password + * @param string $newFirstName Optional, The user's new first name + * @param string $newLastName Optional, The user's new last name + * @return + */ + function updateLoginData($oldLoginId, $password, $newLoginId = "", $newPassword = "", $newFirstName = null, $newLastName = null) + { + $kparams = array(); + $this->client->addParam($kparams, "oldLoginId", $oldLoginId); + $this->client->addParam($kparams, "password", $password); + $this->client->addParam($kparams, "newLoginId", $newLoginId); + $this->client->addParam($kparams, "newPassword", $newPassword); + $this->client->addParam($kparams, "newFirstName", $newFirstName); + $this->client->addParam($kparams, "newLastName", $newLastName); + $this->client->queueServiceActionCall("user", "updateLoginData", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "null"); + return $resultObject; + } + + /** + * Reset user's password and send the user an email to generate a new one. + * + * @param string $email The user's email address (login email) + * @return + */ + function resetPassword($email) + { + $kparams = array(); + $this->client->addParam($kparams, "email", $email); + $this->client->queueServiceActionCall("user", "resetPassword", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "null"); + return $resultObject; + } + + /** + * Set initial users password + * + * @param string $hashKey The hash key used to identify the user (retrieved by email) + * @param string $newPassword The new password to set for the user + * @return + */ + function setInitialPassword($hashKey, $newPassword) + { + $kparams = array(); + $this->client->addParam($kparams, "hashKey", $hashKey); + $this->client->addParam($kparams, "newPassword", $newPassword); + $this->client->queueServiceActionCall("user", "setInitialPassword", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "null"); + return $resultObject; + } + + /** + * Enables a user to log into a partner account using an email address and a password + * + * @param string $userId The user's unique identifier in the partner's system + * @param string $loginId The user's email address that identifies the user for login + * @param string $password The user's password + * @return KalturaUser + */ + function enableLogin($userId, $loginId, $password = null) + { + $kparams = array(); + $this->client->addParam($kparams, "userId", $userId); + $this->client->addParam($kparams, "loginId", $loginId); + $this->client->addParam($kparams, "password", $password); + $this->client->queueServiceActionCall("user", "enableLogin", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaUser"); + return $resultObject; + } + + /** + * Disables a user's ability to log into a partner account using an email address and a password. + You may use either a userId or a loginId parameter for this action. + * + * @param string $userId The user's unique identifier in the partner's system + * @param string $loginId The user's email address that identifies the user for login + * @return KalturaUser + */ + function disableLogin($userId = null, $loginId = null) + { + $kparams = array(); + $this->client->addParam($kparams, "userId", $userId); + $this->client->addParam($kparams, "loginId", $loginId); + $this->client->queueServiceActionCall("user", "disableLogin", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaUser"); + return $resultObject; + } + + /** + * Index an entry by id. + * + * @param string $id + * @param bool $shouldUpdate + * @return string + */ + function index($id, $shouldUpdate = true) + { + $kparams = array(); + $this->client->addParam($kparams, "id", $id); + $this->client->addParam($kparams, "shouldUpdate", $shouldUpdate); + $this->client->queueServiceActionCall("user", "index", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "string"); + return $resultObject; + } + + /** + * + * + * @param file $fileData + * @param KalturaBulkUploadJobData $bulkUploadData + * @param KalturaBulkUploadUserData $bulkUploadUserData + * @return KalturaBulkUpload + */ + function addFromBulkUpload($fileData, KalturaBulkUploadJobData $bulkUploadData = null, KalturaBulkUploadUserData $bulkUploadUserData = null) + { + $kparams = array(); + $kfiles = array(); + $this->client->addParam($kfiles, "fileData", $fileData); + if ($bulkUploadData !== null) + $this->client->addParam($kparams, "bulkUploadData", $bulkUploadData->toParams()); + if ($bulkUploadUserData !== null) + $this->client->addParam($kparams, "bulkUploadUserData", $bulkUploadUserData->toParams()); + $this->client->queueServiceActionCall("user", "addFromBulkUpload", $kparams, $kfiles); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaBulkUpload"); + return $resultObject; + } + + /** + * Action which checks whther user login + * + * @param KalturaUserLoginDataFilter $filter + * @return bool + */ + function checkLoginDataExists(KalturaUserLoginDataFilter $filter) + { + $kparams = array(); + $this->client->addParam($kparams, "filter", $filter->toParams()); + $this->client->queueServiceActionCall("user", "checkLoginDataExists", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $resultObject = (bool) $resultObject; + return $resultObject; + } +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaWidgetService extends KalturaServiceBase +{ + function __construct(KalturaClient $client = null) + { + parent::__construct($client); + } + + /** + * Add new widget, can be attached to entry or kshow + SourceWidget is ignored. + * + * @param KalturaWidget $widget + * @return KalturaWidget + */ + function add(KalturaWidget $widget) + { + $kparams = array(); + $this->client->addParam($kparams, "widget", $widget->toParams()); + $this->client->queueServiceActionCall("widget", "add", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaWidget"); + return $resultObject; + } + + /** + * Update exisiting widget + * + * @param string $id + * @param KalturaWidget $widget + * @return KalturaWidget + */ + function update($id, KalturaWidget $widget) + { + $kparams = array(); + $this->client->addParam($kparams, "id", $id); + $this->client->addParam($kparams, "widget", $widget->toParams()); + $this->client->queueServiceActionCall("widget", "update", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaWidget"); + return $resultObject; + } + + /** + * Get widget by id + * + * @param string $id + * @return KalturaWidget + */ + function get($id) + { + $kparams = array(); + $this->client->addParam($kparams, "id", $id); + $this->client->queueServiceActionCall("widget", "get", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaWidget"); + return $resultObject; + } + + /** + * Add widget based on existing widget. + Must provide valid sourceWidgetId + * + * @param KalturaWidget $widget + * @return KalturaWidget + */ + function cloneAction(KalturaWidget $widget) + { + $kparams = array(); + $this->client->addParam($kparams, "widget", $widget->toParams()); + $this->client->queueServiceActionCall("widget", "clone", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaWidget"); + return $resultObject; + } + + /** + * Retrieve a list of available widget depends on the filter given + * + * @param KalturaWidgetFilter $filter + * @param KalturaFilterPager $pager + * @return KalturaWidgetListResponse + */ + function listAction(KalturaWidgetFilter $filter = null, KalturaFilterPager $pager = null) + { + $kparams = array(); + if ($filter !== null) + $this->client->addParam($kparams, "filter", $filter->toParams()); + if ($pager !== null) + $this->client->addParam($kparams, "pager", $pager->toParams()); + $this->client->queueServiceActionCall("widget", "list", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaWidgetListResponse"); + return $resultObject; + } +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaXInternalService extends KalturaServiceBase +{ + function __construct(KalturaClient $client = null) + { + parent::__construct($client); + } + + /** + * Creates new download job for multiple entry ids (comma separated), an email will be sent when the job is done + This sevice support the following entries: + - MediaEntry + - Video will be converted using the flavor params id + - Audio will be downloaded as MP3 + - Image will be downloaded as Jpeg + - MixEntry will be flattened using the flavor params id + - Other entry types are not supported + Returns the admin email that the email message will be sent to + * + * @param string $entryIds Comma separated list of entry ids + * @param string $flavorParamsId + * @return string + */ + function xAddBulkDownload($entryIds, $flavorParamsId = "") + { + $kparams = array(); + $this->client->addParam($kparams, "entryIds", $entryIds); + $this->client->addParam($kparams, "flavorParamsId", $flavorParamsId); + $this->client->queueServiceActionCall("xinternal", "xAddBulkDownload", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "string"); + return $resultObject; + } +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaClient extends KalturaClientBase +{ + /** + * @var string + */ + protected $apiVersion = '3.1.6'; + + /** + * Manage access control profiles + * @var KalturaAccessControlProfileService + */ + public $accessControlProfile = null; + + /** + * Add & Manage Access Controls + * @var KalturaAccessControlService + */ + public $accessControl = null; + + /** + * Manage details for the administrative user + * @var KalturaAdminUserService + */ + public $adminUser = null; + + /** + * Base Entry Service + * @var KalturaBaseEntryService + */ + public $baseEntry = null; + + /** + * Bulk upload service is used to upload & manage bulk uploads using CSV files. + * This service manages only entry bulk uploads. + * @var KalturaBulkUploadService + */ + public $bulkUpload = null; + + /** + * Add & Manage CategoryEntry - assign entry to category + * @var KalturaCategoryEntryService + */ + public $categoryEntry = null; + + /** + * Add & Manage Categories + * @var KalturaCategoryService + */ + public $category = null; + + /** + * Add & Manage CategoryUser - membership of a user in a category + * @var KalturaCategoryUserService + */ + public $categoryUser = null; + + /** + * Manage the connection between Conversion Profiles and Asset Params + * @var KalturaConversionProfileAssetParamsService + */ + public $conversionProfileAssetParams = null; + + /** + * Add & Manage Conversion Profiles + * @var KalturaConversionProfileService + */ + public $conversionProfile = null; + + /** + * Data service lets you manage data content (textual content) + * @var KalturaDataService + */ + public $data = null; + + /** + * Document service + * @var KalturaDocumentService + */ + public $document = null; + + /** + * EmailIngestionProfile service lets you manage email ingestion profile records + * @var KalturaEmailIngestionProfileService + */ + public $EmailIngestionProfile = null; + + /** + * Manage file assets + * @var KalturaFileAssetService + */ + public $fileAsset = null; + + /** + * Retrieve information and invoke actions on Flavor Asset + * @var KalturaFlavorAssetService + */ + public $flavorAsset = null; + + /** + * Flavor Params Output service + * @var KalturaFlavorParamsOutputService + */ + public $flavorParamsOutput = null; + + /** + * Add & Manage Flavor Params + * @var KalturaFlavorParamsService + */ + public $flavorParams = null; + + /** + * Manage live channel segments + * @var KalturaLiveChannelSegmentService + */ + public $liveChannelSegment = null; + + /** + * Live Channel service lets you manage live channels + * @var KalturaLiveChannelService + */ + public $liveChannel = null; + + /** + * Live Stream service lets you manage live stream entries + * @var KalturaLiveStreamService + */ + public $liveStream = null; + + /** + * Media Info service + * @var KalturaMediaInfoService + */ + public $mediaInfo = null; + + /** + * Manage media servers + * @var KalturaMediaServerService + */ + public $mediaServer = null; + + /** + * Media service lets you upload and manage media files (images / videos & audio) + * @var KalturaMediaService + */ + public $media = null; + + /** + * A Mix is an XML unique format invented by Kaltura, it allows the user to create a mix of videos and images, in and out points, transitions, text overlays, soundtrack, effects and much more... + * Mixing service lets you create a new mix, manage its metadata and make basic manipulations. + * @var KalturaMixingService + */ + public $mixing = null; + + /** + * Notification Service + * @var KalturaNotificationService + */ + public $notification = null; + + /** + * Partner service allows you to change/manage your partner personal details and settings as well + * @var KalturaPartnerService + */ + public $partner = null; + + /** + * PermissionItem service lets you create and manage permission items + * @var KalturaPermissionItemService + */ + public $permissionItem = null; + + /** + * Permission service lets you create and manage user permissions + * @var KalturaPermissionService + */ + public $permission = null; + + /** + * Playlist service lets you create,manage and play your playlists + * Playlists could be static (containing a fixed list of entries) or dynamic (baseed on a filter) + * @var KalturaPlaylistService + */ + public $playlist = null; + + /** + * Api for getting reports data by the report type and some inputFilter + * @var KalturaReportService + */ + public $report = null; + + /** + * Expose the schema definitions for syndication MRSS, bulk upload XML and other schema types. + * @var KalturaSchemaService + */ + public $schema = null; + + /** + * Search service allows you to search for media in various media providers + * This service is being used mostly by the CW component + * @var KalturaSearchService + */ + public $search = null; + + /** + * Session service + * @var KalturaSessionService + */ + public $session = null; + + /** + * Stats Service + * @var KalturaStatsService + */ + public $stats = null; + + /** + * Storage Profiles service + * @var KalturaStorageProfileService + */ + public $storageProfile = null; + + /** + * Add & Manage Syndication Feeds + * @var KalturaSyndicationFeedService + */ + public $syndicationFeed = null; + + /** + * System service is used for internal system helpers & to retrieve system level information + * @var KalturaSystemService + */ + public $system = null; + + /** + * Retrieve information and invoke actions on Thumb Asset + * @var KalturaThumbAssetService + */ + public $thumbAsset = null; + + /** + * Thumbnail Params Output service + * @var KalturaThumbParamsOutputService + */ + public $thumbParamsOutput = null; + + /** + * Add & Manage Thumb Params + * @var KalturaThumbParamsService + */ + public $thumbParams = null; + + /** + * UiConf service lets you create and manage your UIConfs for the various flash components + * This service is used by the KMC-ApplicationStudio + * @var KalturaUiConfService + */ + public $uiConf = null; + + /** + * + * @var KalturaUploadService + */ + public $upload = null; + + /** + * + * @var KalturaUploadTokenService + */ + public $uploadToken = null; + + /** + * UserRole service lets you create and manage user roles + * @var KalturaUserRoleService + */ + public $userRole = null; + + /** + * Manage partner users on Kaltura's side + * The userId in kaltura is the unique Id in the partner's system, and the [partnerId,Id] couple are unique key in kaltura's DB + * @var KalturaUserService + */ + public $user = null; + + /** + * Widget service for full widget management + * @var KalturaWidgetService + */ + public $widget = null; + + /** + * Internal Service is used for actions that are used internally in Kaltura applications and might be changed in the future without any notice. + * @var KalturaXInternalService + */ + public $xInternal = null; + + /** + * Kaltura client constructor + * + * @param KalturaConfiguration $config + */ + public function __construct(KalturaConfiguration $config) + { + parent::__construct($config); + + $this->accessControlProfile = new KalturaAccessControlProfileService($this); + $this->accessControl = new KalturaAccessControlService($this); + $this->adminUser = new KalturaAdminUserService($this); + $this->baseEntry = new KalturaBaseEntryService($this); + $this->bulkUpload = new KalturaBulkUploadService($this); + $this->categoryEntry = new KalturaCategoryEntryService($this); + $this->category = new KalturaCategoryService($this); + $this->categoryUser = new KalturaCategoryUserService($this); + $this->conversionProfileAssetParams = new KalturaConversionProfileAssetParamsService($this); + $this->conversionProfile = new KalturaConversionProfileService($this); + $this->data = new KalturaDataService($this); + $this->document = new KalturaDocumentService($this); + $this->EmailIngestionProfile = new KalturaEmailIngestionProfileService($this); + $this->fileAsset = new KalturaFileAssetService($this); + $this->flavorAsset = new KalturaFlavorAssetService($this); + $this->flavorParamsOutput = new KalturaFlavorParamsOutputService($this); + $this->flavorParams = new KalturaFlavorParamsService($this); + $this->liveChannelSegment = new KalturaLiveChannelSegmentService($this); + $this->liveChannel = new KalturaLiveChannelService($this); + $this->liveStream = new KalturaLiveStreamService($this); + $this->mediaInfo = new KalturaMediaInfoService($this); + $this->mediaServer = new KalturaMediaServerService($this); + $this->media = new KalturaMediaService($this); + $this->mixing = new KalturaMixingService($this); + $this->notification = new KalturaNotificationService($this); + $this->partner = new KalturaPartnerService($this); + $this->permissionItem = new KalturaPermissionItemService($this); + $this->permission = new KalturaPermissionService($this); + $this->playlist = new KalturaPlaylistService($this); + $this->report = new KalturaReportService($this); + $this->schema = new KalturaSchemaService($this); + $this->search = new KalturaSearchService($this); + $this->session = new KalturaSessionService($this); + $this->stats = new KalturaStatsService($this); + $this->storageProfile = new KalturaStorageProfileService($this); + $this->syndicationFeed = new KalturaSyndicationFeedService($this); + $this->system = new KalturaSystemService($this); + $this->thumbAsset = new KalturaThumbAssetService($this); + $this->thumbParamsOutput = new KalturaThumbParamsOutputService($this); + $this->thumbParams = new KalturaThumbParamsService($this); + $this->uiConf = new KalturaUiConfService($this); + $this->upload = new KalturaUploadService($this); + $this->uploadToken = new KalturaUploadTokenService($this); + $this->userRole = new KalturaUserRoleService($this); + $this->user = new KalturaUserService($this); + $this->widget = new KalturaWidgetService($this); + $this->xInternal = new KalturaXInternalService($this); + } + +} + diff --git a/local/kaltura/API/KalturaClientBase.php b/local/kaltura/API/KalturaClientBase.php new file mode 100644 index 0000000000000..aff941328d669 --- /dev/null +++ b/local/kaltura/API/KalturaClientBase.php @@ -0,0 +1,1228 @@ +. +// +// @ignore +// =================================================================================================== + +/** + * @package Kaltura + * @subpackage Client + */ +class MultiRequestSubResult implements ArrayAccess +{ + function __construct($value) + { + $this->value = $value; + } + + function __toString() + { + return '{' . $this->value . '}'; + } + + function __get($name) + { + return new MultiRequestSubResult($this->value . ':' . $name); + } + + public function offsetExists($offset) + { + return true; + } + + public function offsetGet($offset) + { + return new MultiRequestSubResult($this->value . ':' . $offset); + } + + public function offsetSet($offset, $value) + { + } + + public function offsetUnset($offset) + { + } +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaNull +{ + private static $instance; + + private function __construct() + { + + } + + public static function getInstance() + { + if (!isset(self::$instance)) { + $c = __CLASS__; + self::$instance = new $c(); + } + return self::$instance; + } + + function __toString() + { + return ''; + } + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaClientBase +{ + const KALTURA_SERVICE_FORMAT_JSON = 1; + const KALTURA_SERVICE_FORMAT_XML = 2; + const KALTURA_SERVICE_FORMAT_PHP = 3; + + // KS V2 constants + const RANDOM_SIZE = 16; + + const FIELD_EXPIRY = '_e'; + const FIELD_TYPE = '_t'; + const FIELD_USER = '_u'; + + const METHOD_POST = 'POST'; + const METHOD_GET = 'GET'; + + /** + * @var string + */ + protected $apiVersion = null; + + /** + * @var KalturaConfiguration + */ + protected $config; + + /** + * @var string + */ + private $ks; + + /** + * @var boolean + */ + private $shouldLog = false; + + /** + * @var bool + */ + private $isMultiRequest = false; + + /** + * @var unknown_type + */ + private $callsQueue = array(); + + /** + * Array of all plugin services + * + * @var array + */ + protected $pluginServices = array(); + + /** + * @var Array of response headers + */ + private $responseHeaders = array(); + + /** + * path to save served results + * @var string + */ + protected $destinationPath = null; + + /** + * return served results without unserializing them + * @var boolean + */ + protected $returnServedResult = null; + + public function __get($serviceName) + { + if(isset($this->pluginServices[$serviceName])) + return $this->pluginServices[$serviceName]; + + return null; + } + + /** + * Kaltura client constructor + * + * @param KalturaConfiguration $config + */ + public function __construct(KalturaConfiguration $config) + { + $this->config = $config; + + $logger = $this->config->getLogger(); + if ($logger) + { + $this->shouldLog = true; + } + + // load all plugins + $pluginsFolder = realpath(dirname(__FILE__)) . '/KalturaPlugins'; + if(is_dir($pluginsFolder)) + { + $dir = dir($pluginsFolder); + while (false !== $fileName = $dir->read()) + { + $matches = null; + if(preg_match('/^([^.]+).php$/', $fileName, $matches)) + { + require_once("$pluginsFolder/$fileName"); + + $pluginClass = $matches[1]; + if(!class_exists($pluginClass) || !in_array('IKalturaClientPlugin', class_implements($pluginClass))) + continue; + + $plugin = call_user_func(array($pluginClass, 'get'), $this); + if(!($plugin instanceof IKalturaClientPlugin)) + continue; + + $pluginName = $plugin->getName(); + $services = $plugin->getServices(); + foreach($services as $serviceName => $service) + { + $service->setClient($this); + $this->pluginServices[$serviceName] = $service; + } + } + } + } + } + + /* Store response headers into array */ + public function readHeader($ch, $string) + { + array_push($this->responseHeaders, $string); + return strlen($string); + } + + /* Retrive response headers */ + public function getResponseHeaders() + { + return $this->responseHeaders; + } + + public function getServeUrl() + { + if (count($this->callsQueue) != 1) + return null; + + $params = array(); + $files = array(); + $this->log("service url: [" . $this->config->serviceUrl . "]"); + + // append the basic params + $this->addParam($params, "apiVersion", $this->apiVersion); + $this->addParam($params, "format", $this->config->format); + $this->addParam($params, "clientTag", $this->config->clientTag); + + $call = $this->callsQueue[0]; + $this->resetRequest(); + + $params = array_merge($params, $call->params); + $signature = $this->signature($params); + $this->addParam($params, "kalsig", $signature); + + $url = $this->config->serviceUrl . "/api_v3/index.php?service={$call->service}&action={$call->action}"; + $url .= '&' . http_build_query($params); + $this->log("Returned url [$url]"); + return $url; + } + + public function queueServiceActionCall($service, $action, $params = array(), $files = array()) + { + // in start session partner id is optional (default -1). if partner id was not set, use the one in the config + if ((!isset($params["partnerId"]) || $params["partnerId"] === -1) && !is_null($this->config->partnerId)) + $params["partnerId"] = $this->config->partnerId; + + $this->addParam($params, "ks", $this->ks); + + $call = new KalturaServiceActionCall($service, $action, $params, $files); + $this->callsQueue[] = $call; + } + + protected function resetRequest() + { + $this->destinationPath = null; + $this->returnServedResult = false; + $this->isMultiRequest = false; + $this->callsQueue = array(); + } + + /** + * Call all API service that are in queue + * + * @return unknown + */ + public function doQueue() + { + if($this->isMultiRequest && ($this->destinationPath || $this->returnServedResult)) + { + $this->resetRequest(); + throw new KalturaClientException("Downloading files is not supported as part of multi-request.", KalturaClientException::ERROR_DOWNLOAD_IN_MULTIREQUEST); + } + + if (count($this->callsQueue) == 0) + { + $this->resetRequest(); + return null; + } + + $startTime = microtime(true); + + $params = array(); + $files = array(); + $this->log("service url: [" . $this->config->serviceUrl . "]"); + + // append the basic params + $this->addParam($params, "apiVersion", $this->apiVersion); + $this->addParam($params, "format", $this->config->format); + $this->addParam($params, "clientTag", $this->config->clientTag); + $this->addParam($params, "ignoreNull", true); + + $url = $this->config->serviceUrl."/api_v3/index.php?service="; + if ($this->isMultiRequest) + { + $url .= "multirequest"; + $i = 1; + foreach ($this->callsQueue as $call) + { + $callParams = $call->getParamsForMultiRequest($i); + $callFiles = $call->getFilesForMultiRequest($i); + $params = array_merge($params, $callParams); + $files = array_merge($files, $callFiles); + $i++; + } + } + else + { + $call = $this->callsQueue[0]; + $url .= $call->service."&action=".$call->action; + $params = array_merge($params, $call->params); + $files = $call->files; + } + + $signature = $this->signature($params); + $this->addParam($params, "kalsig", $signature); + + try + { + list($postResult, $error) = $this->doHttpRequest($url, $params, $files); + } + catch(Exception $e) + { + $this->resetRequest(); + throw $e; + } + + if ($error) + { + $this->resetRequest(); + throw new KalturaClientException($error, KalturaClientException::ERROR_GENERIC); + } + else + { + // print server debug info to log + $serverName = null; + $serverSession = null; + foreach ($this->responseHeaders as $curHeader) + { + $splittedHeader = explode(':', $curHeader, 2); + if ($splittedHeader[0] == 'X-Me') + $serverName = trim($splittedHeader[1]); + else if ($splittedHeader[0] == 'X-Kaltura-Session') + $serverSession = trim($splittedHeader[1]); + } + if (!is_null($serverName) || !is_null($serverSession)) + $this->log("server: [{$serverName}], session: [{$serverSession}]"); + + $this->log("result (serialized): " . $postResult); + + if($this->returnServedResult) + { + $result = $postResult; + } + elseif($this->destinationPath) + { + if(!$postResult) + { + $this->resetRequest(); + throw new KalturaClientException("failed to download file", KalturaClientException::ERROR_READ_FAILED); + } + } + elseif ($this->config->format == self::KALTURA_SERVICE_FORMAT_PHP) + { + $result = @unserialize($postResult); + + if ($result === false && serialize(false) !== $postResult) + { + $this->resetRequest(); + throw new KalturaClientException("failed to unserialize server result\n$postResult", KalturaClientException::ERROR_UNSERIALIZE_FAILED); + } + $dump = print_r($result, true); + $this->log("result (object dump): " . $dump); + } + else + { + $this->resetRequest(); + throw new KalturaClientException("unsupported format: $postResult", KalturaClientException::ERROR_FORMAT_NOT_SUPPORTED); + } + } + $this->resetRequest(); + + $endTime = microtime (true); + + $this->log("execution time for [".$url."]: [" . ($endTime - $startTime) . "]"); + + return $result; + } + + /** + * Sign array of parameters + * + * @param array $params + * @return string + */ + private function signature($params) + { + ksort($params); + $str = ""; + foreach ($params as $k => $v) + { + $str .= $k.$v; + } + return md5($str); + } + + /** + * Send http request by using curl (if available) or php stream_context + * + * @param string $url + * @param parameters $params + * @return array of result and error + */ + protected function doHttpRequest($url, $params = array(), $files = array()) + { + if (function_exists('curl_init')) + return $this->doCurl($url, $params, $files); + + if($this->destinationPath || $this->returnServedResult) + throw new KalturaClientException("Downloading files is not supported with stream context http request, please use curl.", KalturaClientException::ERROR_DOWNLOAD_NOT_SUPPORTED); + + return $this->doPostRequest($url, $params, $files); + } + + /** + * Curl HTTP POST Request + * + * @param string $url + * @param array $params + * @param array $files + * @return array of result and error + */ + private function doCurl($url, $params = array(), $files = array()) + { + $opt = http_build_query($params, null, "&"); + // Force POST in case we have files + if(count($files) > 0) { + $this->config->method = self::METHOD_POST; + } + // Check for GET and append params to url + if( $this->config->method == self::METHOD_GET ) { + $url = $url . '&' . $opt; + } + $this->responseHeaders = array(); + $cookies = array(); + $ch = curl_init(); + curl_setopt($ch, CURLOPT_URL, $url); + if( $this->config->method == self::METHOD_POST ) { + curl_setopt($ch, CURLOPT_POST, 1); + if (count($files) > 0) + { + foreach($files as &$file) + $file = "@".$file; // let curl know its a file + curl_setopt($ch, CURLOPT_POSTFIELDS, array_merge($params, $files)); + } + else + { + $this->log("curl: $url&$opt"); + curl_setopt($ch, CURLOPT_POSTFIELDS, $opt); + } + } + curl_setopt($ch, CURLOPT_ENCODING, 'gzip,deflate'); + curl_setopt($ch, CURLOPT_USERAGENT, $this->config->userAgent); + if (count($files) > 0) + curl_setopt($ch, CURLOPT_TIMEOUT, 0); + else + curl_setopt($ch, CURLOPT_TIMEOUT, $this->config->curlTimeout); + + if ($this->config->startZendDebuggerSession === true) + { + $zendDebuggerParams = $this->getZendDebuggerParams($url); + $cookies = array_merge($cookies, $zendDebuggerParams); + } + + if (count($cookies) > 0) + { + $cookiesStr = http_build_query($cookies, null, '; '); + curl_setopt($ch, CURLOPT_COOKIE, $cookiesStr); + } + + if (isset($this->config->proxyHost)) { + curl_setopt($ch, CURLOPT_HTTPPROXYTUNNEL, true); + curl_setopt($ch, CURLOPT_PROXY, $this->config->proxyHost); + if (isset($this->config->proxyPort)) { + curl_setopt($ch, CURLOPT_PROXYPORT, $this->config->proxyPort); + } + if (isset($this->config->proxyUser)) { + curl_setopt($ch, CURLOPT_PROXYUSERPWD, $this->config->proxyUser.':'.$this->config->proxyPassword); + } + if (isset($this->config->proxyType) && $this->config->proxyType === 'SOCKS5') { + curl_setopt($ch, CURLOPT_PROXYTYPE, CURLPROXY_SOCKS5); + } + } + + // Set SSL verification + if(!$this->getConfig()->verifySSL) + { + curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); + curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 2); + } + elseif($this->getConfig()->sslCertificatePath) + { + curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, true); + curl_setopt($ch, CURLOPT_CAINFO, $this->getConfig()->sslCertificatePath); + } + + // Set custom headers + curl_setopt($ch, CURLOPT_HTTPHEADER, $this->config->requestHeaders ); + + // Save response headers + curl_setopt($ch, CURLOPT_HEADERFUNCTION, array($this, 'readHeader') ); + + $destinationResource = null; + if($this->destinationPath) + { + $destinationResource = fopen($this->destinationPath, "wb"); + curl_setopt($ch, CURLOPT_FILE, $destinationResource); + } + else + { + curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); + } + + $result = curl_exec($ch); + + if($destinationResource) + fclose($destinationResource); + + $curlError = curl_error($ch); + curl_close($ch); + return array($result, $curlError); + } + + /** + * HTTP stream context request + * + * @param string $url + * @param array $params + * @return array of result and error + */ + private function doPostRequest($url, $params = array(), $files = array()) + { + if (count($files) > 0) + throw new KalturaClientException("Uploading files is not supported with stream context http request, please use curl.", KalturaClientException::ERROR_UPLOAD_NOT_SUPPORTED); + + $formattedData = http_build_query($params , "", "&"); + $this->log("post: $url&$formattedData"); + + $params = array('http' => array( + "method" => "POST", + "User-Agent: " . $this->config->userAgent . "\r\n". + "Accept-language: en\r\n". + "Content-type: application/x-www-form-urlencoded\r\n", + "content" => $formattedData + )); + + if (isset($this->config->proxyType) && $this->config->proxyType === 'SOCKS5') { + throw new KalturaClientException("Cannot use SOCKS5 without curl installed.", KalturaClientException::ERROR_CONNECTION_FAILED); + } + if (isset($this->config->proxyHost)) { + $proxyhost = 'tcp://' . $this->config->proxyHost; + if (isset($this->config->proxyPort)) { + $proxyhost = $proxyhost . ":" . $this->config->proxyPort; + } + $params['http']['proxy'] = $proxyhost; + $params['http']['request_fulluri'] = true; + if (isset($this->config->proxyUser)) { + $auth = base64_encode($this->config->proxyUser.':'.$this->config->proxyPassword); + $params['http']['header'] = 'Proxy-Authorization: Basic ' . $auth; + } + } + + $ctx = stream_context_create($params); + $fp = @fopen($url, 'rb', false, $ctx); + if (!$fp) { + $phpErrorMsg = ""; + throw new KalturaClientException("Problem with $url, $phpErrorMsg", KalturaClientException::ERROR_CONNECTION_FAILED); + } + $response = @stream_get_contents($fp); + if ($response === false) { + throw new KalturaClientException("Problem reading data from $url, $phpErrorMsg", KalturaClientException::ERROR_READ_FAILED); + } + return array($response, ''); + } + + /** + * @return string + */ + public function getKs() + { + return $this->ks; + } + + /** + * @param string $ks + */ + public function setKs($ks) + { + $this->ks = $ks; + } + + /** + * @param boolean $returnServedResult + */ + public function setReturnServedResult($returnServedResult) + { + $this->returnServedResult = $returnServedResult; + } + + /** + * @return boolean + */ + public function getReturnServedResult() + { + return $this->returnServedResult; + } + + /** + * @param string $destinationPath + */ + public function setDestinationPath($destinationPath) + { + $this->destinationPath = $destinationPath; + } + + /** + * @return string + */ + public function getDestinationPath() + { + return $this->destinationPath; + } + + /** + * @return KalturaConfiguration + */ + public function getConfig() + { + return $this->config; + } + + /** + * @param KalturaConfiguration $config + */ + public function setConfig(KalturaConfiguration $config) + { + $this->config = $config; + + $logger = $this->config->getLogger(); + if ($logger instanceof IKalturaLogger) + { + $this->shouldLog = true; + } + } + + /** + * Add parameter to array of parameters that is passed by reference + * + * @param arrat $params + * @param string $paramName + * @param string $paramValue + */ + public function addParam(&$params, $paramName, $paramValue) + { + if ($paramValue === null) + return; + + if ($paramValue instanceof KalturaNull) { + $params[$paramName . '__null'] = ''; + return; + } + + if(is_object($paramValue) && $paramValue instanceof KalturaObjectBase) + { + $this->addParam($params, "$paramName:objectType", get_class($paramValue)); + foreach($paramValue as $prop => $val) + $this->addParam($params, "$paramName:$prop", $val); + + return; + } + + if(!is_array($paramValue)) + { + $params[$paramName] = (string)$paramValue; + return; + } + + if ($paramValue) + { + foreach($paramValue as $subParamName => $subParamValue) + $this->addParam($params, "$paramName:$subParamName", $subParamValue); + } + else + { + $this->addParam($params, "$paramName:-", ""); + } + } + + /** + * Validate the result object and throw exception if its an error + * + * @param object $resultObject + */ + public function throwExceptionIfError($resultObject) + { + if ($this->isError($resultObject)) + { + throw new KalturaException($resultObject["message"], $resultObject["code"]); + } + } + + /** + * Checks whether the result object is an error + * + * @param object $resultObject + */ + public function isError($resultObject) + { + return (is_array($resultObject) && isset($resultObject["message"]) && isset($resultObject["code"])); + } + + /** + * Validate that the passed object type is of the expected type + * + * @param any $resultObject + * @param string $objectType + */ + public function validateObjectType($resultObject, $objectType) + { + if (is_object($resultObject)) + { + if (!($resultObject instanceof $objectType)) + throw new KalturaClientException("Invalid object type", KalturaClientException::ERROR_INVALID_OBJECT_TYPE); + } + else if (gettype($resultObject) !== "NULL" && gettype($resultObject) !== $objectType) + { + throw new KalturaClientException("Invalid object type", KalturaClientException::ERROR_INVALID_OBJECT_TYPE); + } + } + + public function startMultiRequest() + { + $this->isMultiRequest = true; + } + + public function doMultiRequest() + { + return $this->doQueue(); + } + + public function isMultiRequest() + { + return $this->isMultiRequest; + } + + public function getMultiRequestQueueSize() + { + return count($this->callsQueue); + } + + public function getMultiRequestResult() + { + return new MultiRequestSubResult($this->getMultiRequestQueueSize() . ':result'); + } + + /** + * @param string $msg + */ + protected function log($msg) + { + if ($this->shouldLog) + $this->config->getLogger()->log($msg); + } + + /** + * Return a list of parameter used to a new start debug on the destination server api + * @link http://kb.zend.com/index.php?View=entry&EntryID=434 + * @param $url + */ + protected function getZendDebuggerParams($url) + { + $params = array(); + $passThruParams = array('debug_host', + 'debug_fastfile', + 'debug_port', + 'start_debug', + 'send_debug_header', + 'send_sess_end', + 'debug_jit', + 'debug_stop', + 'use_remote'); + + foreach($passThruParams as $param) + { + if (isset($_COOKIE[$param])) + $params[$param] = $_COOKIE[$param]; + } + + $params['original_url'] = $url; + $params['debug_session_id'] = microtime(true); // to create a new debug session + + return $params; + } + + public function generateSession($adminSecretForSigning, $userId, $type, $partnerId, $expiry = 86400, $privileges = '') + { + $rand = rand(0, 32000); + $expiry = time()+$expiry; + $fields = array ( + $partnerId , + $partnerId , + $expiry , + $type, + $rand , + $userId , + $privileges + ); + $info = implode ( ";" , $fields ); + + $signature = $this->hash ( $adminSecretForSigning , $info ); + $strToHash = $signature . "|" . $info ; + $encoded_str = base64_encode( $strToHash ); + + return $encoded_str; + } + + public static function generateSessionV2($adminSecretForSigning, $userId, $type, $partnerId, $expiry, $privileges) + { + // build fields array + $fields = array(); + foreach (explode(',', $privileges) as $privilege) + { + $privilege = trim($privilege); + if (!$privilege) + continue; + if ($privilege == '*') + $privilege = 'all:*'; + $splittedPrivilege = explode(':', $privilege, 2); + if (count($splittedPrivilege) > 1) + $fields[$splittedPrivilege[0]] = $splittedPrivilege[1]; + else + $fields[$splittedPrivilege[0]] = ''; + } + $fields[self::FIELD_EXPIRY] = time() + $expiry; + $fields[self::FIELD_TYPE] = $type; + $fields[self::FIELD_USER] = $userId; + + // build fields string + $fieldsStr = http_build_query($fields, '', '&'); + $rand = ''; + for ($i = 0; $i < self::RANDOM_SIZE; $i++) + $rand .= chr(rand(0, 0xff)); + $fieldsStr = $rand . $fieldsStr; + $fieldsStr = sha1($fieldsStr, true) . $fieldsStr; + + // encrypt and encode + $encryptedFields = self::aesEncrypt($adminSecretForSigning, $fieldsStr); + $decodedKs = "v2|{$partnerId}|" . $encryptedFields; + return str_replace(array('+', '/'), array('-', '_'), base64_encode($decodedKs)); + } + + protected static function aesEncrypt($key, $message) + { + return mcrypt_encrypt( + MCRYPT_RIJNDAEL_128, + substr(sha1($key, true), 0, 16), + $message, + MCRYPT_MODE_CBC, + str_repeat("\0", 16) // no need for an IV since we add a random string to the message anyway + ); + } + + private function hash ( $salt , $str ) + { + return sha1($salt.$str); + } + + /** + * @return KalturaNull + */ + public static function getKalturaNullValue() + { + + return KalturaNull::getInstance(); + } + +} + +/** + * @package Kaltura + * @subpackage Client + */ +interface IKalturaClientPlugin +{ + /** + * @return KalturaClientPlugin + */ + public static function get(KalturaClient $client); + + /** + * @return array + */ + public function getServices(); + + /** + * @return string + */ + public function getName(); +} + +/** + * @package Kaltura + * @subpackage Client + */ +abstract class KalturaClientPlugin implements IKalturaClientPlugin +{ + protected function __construct(KalturaClient $client) + { + + } +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaServiceActionCall +{ + /** + * @var string + */ + public $service; + + /** + * @var string + */ + public $action; + + + /** + * @var array + */ + public $params; + + /** + * @var array + */ + public $files; + + /** + * Contruct new Kaltura service action call, if params array contain sub arrays (for objects), it will be flattened + * + * @param string $service + * @param string $action + * @param array $params + * @param array $files + */ + public function __construct($service, $action, $params = array(), $files = array()) + { + $this->service = $service; + $this->action = $action; + $this->params = $this->parseParams($params); + $this->files = $files; + } + + /** + * Parse params array and sub arrays (for objects) + * + * @param array $params + */ + public function parseParams(array $params) + { + $newParams = array(); + foreach($params as $key => $val) + { + if (is_array($val)) + { + $newParams[$key] = $this->parseParams($val); + } + else + { + $newParams[$key] = $val; + } + } + return $newParams; + } + + /** + * Return the parameters for a multi request + * + * @param int $multiRequestIndex + */ + public function getParamsForMultiRequest($multiRequestIndex) + { + $multiRequestParams = array(); + $multiRequestParams[$multiRequestIndex.":service"] = $this->service; + $multiRequestParams[$multiRequestIndex.":action"] = $this->action; + foreach($this->params as $key => $val) + { + $multiRequestParams[$multiRequestIndex.":".$key] = $val; + } + return $multiRequestParams; + } + + /** + * Return the parameters for a multi request + * + * @param int $multiRequestIndex + */ + public function getFilesForMultiRequest($multiRequestIndex) + { + $multiRequestParams = array(); + foreach($this->files as $key => $val) + { + $multiRequestParams[$multiRequestIndex.":".$key] = $val; + } + return $multiRequestParams; + } +} + +/** + * Abstract base class for all client services + * + * @package Kaltura + * @subpackage Client + */ +abstract class KalturaServiceBase +{ + /** + * @var KalturaClient + */ + protected $client; + + /** + * Initialize the service keeping reference to the KalturaClient + * + * @param KalturaClient $client + */ + public function __construct(KalturaClient $client = null) + { + $this->client = $client; + } + + /** + * @param KalturaClient $client + */ + public function setClient(KalturaClient $client) + { + $this->client = $client; + } +} + +/** + * Abstract base class for all client objects + * + * @package Kaltura + * @subpackage Client + */ +abstract class KalturaObjectBase +{ + public function __construct($params = array()) + { + foreach ($params as $key => $value) + { + if (!property_exists($this, $key)) + throw new KalturaClientException("property [{$key}] does not exist on object [".get_class($this)."]", KalturaClientException::ERROR_INVALID_OBJECT_FIELD); + $this->$key = $value; + } + } + + protected function addIfNotNull(&$params, $paramName, $paramValue) + { + if ($paramValue !== null) + { + if($paramValue instanceof KalturaObjectBase) + { + $params[$paramName] = $paramValue->toParams(); + } + else + { + $params[$paramName] = $paramValue; + } + } + } + + public function toParams() + { + $params = array(); + $params["objectType"] = get_class($this); + foreach($this as $prop => $val) + { + $this->addIfNotNull($params, $prop, $val); + } + return $params; + } +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaException extends Exception +{ + public function __construct($message, $code) + { + $this->code = $code; + parent::__construct($message); + } +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaClientException extends Exception +{ + const ERROR_GENERIC = -1; + const ERROR_UNSERIALIZE_FAILED = -2; + const ERROR_FORMAT_NOT_SUPPORTED = -3; + const ERROR_UPLOAD_NOT_SUPPORTED = -4; + const ERROR_CONNECTION_FAILED = -5; + const ERROR_READ_FAILED = -6; + const ERROR_INVALID_PARTNER_ID = -7; + const ERROR_INVALID_OBJECT_TYPE = -8; + const ERROR_INVALID_OBJECT_FIELD = -9; + const ERROR_DOWNLOAD_NOT_SUPPORTED = -10; + const ERROR_DOWNLOAD_IN_MULTIREQUEST = -11; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaConfiguration +{ + private $logger; + + public $serviceUrl = "http://www.kaltura.com/"; + public $partnerId = null; + public $format = 3; + public $clientTag = "php5:14-01-16"; + public $curlTimeout = 120; + public $userAgent = ''; + public $startZendDebuggerSession = false; + public $proxyHost = null; + public $proxyPort = null; + public $proxyType = 'HTTP'; + public $proxyUser = null; + public $proxyPassword = ''; + public $verifySSL = true; + public $sslCertificatePath = null; + public $requestHeaders = array(); + public $method = KalturaClientBase::METHOD_POST; + + + + + /** + * Constructs new Kaltura configuration object + * + */ + public function __construct($partnerId = -1) + { + if (!is_null($partnerId) && !is_numeric($partnerId)) + throw new KalturaClientException("Invalid partner id", KalturaClientException::ERROR_INVALID_PARTNER_ID); + + $this->partnerId = $partnerId; + } + + /** + * Set logger to get kaltura client debug logs + * + * @param IKalturaLogger $log + */ + public function setLogger(IKalturaLogger $log) + { + $this->logger = $log; + } + + /** + * Gets the logger (Internal client use) + * + * @return IKalturaLogger + */ + public function getLogger() + { + return $this->logger; + } +} + +/** + * Implement to get Kaltura Client logs + * + * @package Kaltura + * @subpackage Client + */ +interface IKalturaLogger +{ + function log($msg); +} + + diff --git a/local/kaltura/API/KalturaEnums.php b/local/kaltura/API/KalturaEnums.php new file mode 100644 index 0000000000000..cefdffdc8e79e --- /dev/null +++ b/local/kaltura/API/KalturaEnums.php @@ -0,0 +1,3213 @@ +. +// +// @ignore +// =================================================================================================== + +/** + * @package Kaltura + * @subpackage Client + */ +require_once(dirname(__FILE__) . "/KalturaClientBase.php"); + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaAppearInListType +{ + const PARTNER_ONLY = 1; + const CATEGORY_MEMBERS_ONLY = 3; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaAssetParamsDeletePolicy +{ + const KEEP = 0; + const DELETE = 1; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaAssetParamsOrigin +{ + const CONVERT = 0; + const INGEST = 1; + const CONVERT_WHEN_MISSING = 2; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaAssetStatus +{ + const ERROR = -1; + const QUEUED = 0; + const READY = 2; + const DELETED = 3; + const IMPORTING = 7; + const EXPORTING = 9; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaBatchJobErrorTypes +{ + const APP = 0; + const RUNTIME = 1; + const HTTP = 2; + const CURL = 3; + const KALTURA_API = 4; + const KALTURA_CLIENT = 5; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaBatchJobStatus +{ + const PENDING = 0; + const QUEUED = 1; + const PROCESSING = 2; + const PROCESSED = 3; + const MOVEFILE = 4; + const FINISHED = 5; + const FAILED = 6; + const ABORTED = 7; + const ALMOST_DONE = 8; + const RETRY = 9; + const FATAL = 10; + const DONT_PROCESS = 11; + const FINISHED_PARTIALLY = 12; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaBitRateMode +{ + const CBR = 1; + const VBR = 2; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaCategoryEntryStatus +{ + const PENDING = 1; + const ACTIVE = 2; + const DELETED = 3; + const REJECTED = 4; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaCategoryStatus +{ + const UPDATING = 1; + const ACTIVE = 2; + const DELETED = 3; + const PURGED = 4; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaCategoryUserPermissionLevel +{ + const MANAGER = 0; + const MODERATOR = 1; + const CONTRIBUTOR = 2; + const MEMBER = 3; + const NONE = 4; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaCategoryUserStatus +{ + const ACTIVE = 1; + const PENDING = 2; + const NOT_ACTIVE = 3; + const DELETED = 4; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaCommercialUseType +{ + const NON_COMMERCIAL_USE = 0; + const COMMERCIAL_USE = 1; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaContributionPolicyType +{ + const ALL = 1; + const MEMBERS_WITH_CONTRIBUTION_PERMISSION = 2; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaControlPanelCommandStatus +{ + const PENDING = 1; + const HANDLED = 2; + const DONE = 3; + const FAILED = 4; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaControlPanelCommandTargetType +{ + const DATA_CENTER = 1; + const SCHEDULER = 2; + const JOB_TYPE = 3; + const JOB = 4; + const BATCH = 5; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaControlPanelCommandType +{ + const KILL = 4; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaCountryRestrictionType +{ + const RESTRICT_COUNTRY_LIST = 0; + const ALLOW_COUNTRY_LIST = 1; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaDVRStatus +{ + const DISABLED = 0; + const ENABLED = 1; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaDirectoryRestrictionType +{ + const DONT_DISPLAY = 0; + const DISPLAY_WITH_LINK = 1; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaEditorType +{ + const SIMPLE = 1; + const ADVANCED = 2; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaEmailIngestionProfileStatus +{ + const INACTIVE = 0; + const ACTIVE = 1; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaEntryModerationStatus +{ + const PENDING_MODERATION = 1; + const APPROVED = 2; + const REJECTED = 3; + const FLAGGED_FOR_REVIEW = 5; + const AUTO_APPROVED = 6; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaFeatureStatusType +{ + const LOCK_CATEGORY = 1; + const CATEGORY = 2; + const CATEGORY_ENTRY = 3; + const ENTRY = 4; + const CATEGORY_USER = 5; + const USER = 6; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaFlavorAssetStatus +{ + const ERROR = -1; + const QUEUED = 0; + const CONVERTING = 1; + const READY = 2; + const DELETED = 3; + const NOT_APPLICABLE = 4; + const TEMP = 5; + const WAIT_FOR_CONVERT = 6; + const IMPORTING = 7; + const VALIDATING = 8; + const EXPORTING = 9; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaFlavorReadyBehaviorType +{ + const NO_IMPACT = 0; + const INHERIT_FLAVOR_PARAMS = 0; + const REQUIRED = 1; + const OPTIONAL = 2; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaGender +{ + const UNKNOWN = 0; + const MALE = 1; + const FEMALE = 2; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaInheritanceType +{ + const INHERIT = 1; + const MANUAL = 2; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaIpAddressRestrictionType +{ + const RESTRICT_LIST = 0; + const ALLOW_LIST = 1; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaLicenseType +{ + const UNKNOWN = -1; + const NONE = 0; + const COPYRIGHTED = 1; + const PUBLIC_DOMAIN = 2; + const CREATIVECOMMONS_ATTRIBUTION = 3; + const CREATIVECOMMONS_ATTRIBUTION_SHARE_ALIKE = 4; + const CREATIVECOMMONS_ATTRIBUTION_NO_DERIVATIVES = 5; + const CREATIVECOMMONS_ATTRIBUTION_NON_COMMERCIAL = 6; + const CREATIVECOMMONS_ATTRIBUTION_NON_COMMERCIAL_SHARE_ALIKE = 7; + const CREATIVECOMMONS_ATTRIBUTION_NON_COMMERCIAL_NO_DERIVATIVES = 8; + const GFDL = 9; + const GPL = 10; + const AFFERO_GPL = 11; + const LGPL = 12; + const BSD = 13; + const APACHE = 14; + const MOZILLA = 15; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaLimitFlavorsRestrictionType +{ + const RESTRICT_LIST = 0; + const ALLOW_LIST = 1; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaMailJobStatus +{ + const PENDING = 1; + const SENT = 2; + const ERROR = 3; + const QUEUED = 4; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaMediaServerIndex +{ + const PRIMARY = 0; + const SECONDARY = 1; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaMediaType +{ + const VIDEO = 1; + const IMAGE = 2; + const AUDIO = 5; + const LIVE_STREAM_FLASH = 201; + const LIVE_STREAM_WINDOWS_MEDIA = 202; + const LIVE_STREAM_REAL_MEDIA = 203; + const LIVE_STREAM_QUICKTIME = 204; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaModerationFlagType +{ + const SEXUAL_CONTENT = 1; + const VIOLENT_REPULSIVE = 2; + const HARMFUL_DANGEROUS = 3; + const SPAM_COMMERCIALS = 4; + const COPYRIGHT = 5; + const TERMS_OF_USE_VIOLATION = 6; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaMrssExtensionMode +{ + const APPEND = 1; + const REPLACE = 2; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaNotificationObjectType +{ + const ENTRY = 1; + const KSHOW = 2; + const USER = 3; + const BATCH_JOB = 4; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaNotificationStatus +{ + const PENDING = 1; + const SENT = 2; + const ERROR = 3; + const SHOULD_RESEND = 4; + const ERROR_RESENDING = 5; + const SENT_SYNCH = 6; + const QUEUED = 7; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaNotificationType +{ + const ENTRY_ADD = 1; + const ENTR_UPDATE_PERMISSIONS = 2; + const ENTRY_DELETE = 3; + const ENTRY_BLOCK = 4; + const ENTRY_UPDATE = 5; + const ENTRY_UPDATE_THUMBNAIL = 6; + const ENTRY_UPDATE_MODERATION = 7; + const USER_ADD = 21; + const USER_BANNED = 26; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaNullableBoolean +{ + const NULL_VALUE = -1; + const FALSE_VALUE = 0; + const TRUE_VALUE = 1; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaPartnerGroupType +{ + const PUBLISHER = 1; + const VAR_GROUP = 2; + const GROUP = 3; + const TEMPLATE = 4; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaPartnerStatus +{ + const ACTIVE = 1; + const BLOCKED = 2; + const FULL_BLOCK = 3; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaPartnerType +{ + const KMC = 1; + const WIKI = 100; + const WORDPRESS = 101; + const DRUPAL = 102; + const DEKIWIKI = 103; + const MOODLE = 104; + const COMMUNITY_EDITION = 105; + const JOOMLA = 106; + const BLACKBOARD = 107; + const SAKAI = 108; + const ADMIN_CONSOLE = 109; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaPermissionStatus +{ + const ACTIVE = 1; + const BLOCKED = 2; + const DELETED = 3; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaPermissionType +{ + const NORMAL = 1; + const SPECIAL_FEATURE = 2; + const PLUGIN = 3; + const PARTNER_GROUP = 4; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaPlaylistType +{ + const STATIC_LIST = 3; + const DYNAMIC = 10; + const EXTERNAL = 101; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaPrivacyType +{ + const ALL = 1; + const AUTHENTICATED_USERS = 2; + const MEMBERS_ONLY = 3; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaRecordStatus +{ + const DISABLED = 0; + const ENABLED = 1; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaReportType +{ + const TOP_CONTENT = 1; + const CONTENT_DROPOFF = 2; + const CONTENT_INTERACTIONS = 3; + const MAP_OVERLAY = 4; + const TOP_CONTRIBUTORS = 5; + const TOP_SYNDICATION = 6; + const CONTENT_CONTRIBUTIONS = 7; + const USER_ENGAGEMENT = 11; + const SPEFICIC_USER_ENGAGEMENT = 12; + const USER_TOP_CONTENT = 13; + const USER_CONTENT_DROPOFF = 14; + const USER_CONTENT_INTERACTIONS = 15; + const APPLICATIONS = 16; + const USER_USAGE = 17; + const SPECIFIC_USER_USAGE = 18; + const VAR_USAGE = 19; + const TOP_CREATORS = 20; + const PLATFORMS = 21; + const OPERATION_SYSTEM = 22; + const BROWSERS = 23; + const PARTNER_USAGE = 201; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaResponseType +{ + const RESPONSE_TYPE_JSON = 1; + const RESPONSE_TYPE_XML = 2; + const RESPONSE_TYPE_PHP = 3; + const RESPONSE_TYPE_PHP_ARRAY = 4; + const RESPONSE_TYPE_HTML = 7; + const RESPONSE_TYPE_MRSS = 8; + const RESPONSE_TYPE_JSONP = 9; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaSearchOperatorType +{ + const SEARCH_AND = 1; + const SEARCH_OR = 2; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaSearchProviderType +{ + const FLICKR = 3; + const YOUTUBE = 4; + const MYSPACE = 7; + const PHOTOBUCKET = 8; + const JAMENDO = 9; + const CCMIXTER = 10; + const NYPL = 11; + const CURRENT = 12; + const MEDIA_COMMONS = 13; + const KALTURA = 20; + const KALTURA_USER_CLIPS = 21; + const ARCHIVE_ORG = 22; + const KALTURA_PARTNER = 23; + const METACAFE = 24; + const SEARCH_PROXY = 28; + const PARTNER_SPECIFIC = 100; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaSessionType +{ + const USER = 0; + const ADMIN = 2; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaSiteRestrictionType +{ + const RESTRICT_SITE_LIST = 0; + const ALLOW_SITE_LIST = 1; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaStatsEventType +{ + const WIDGET_LOADED = 1; + const MEDIA_LOADED = 2; + const PLAY = 3; + const PLAY_REACHED_25 = 4; + const PLAY_REACHED_50 = 5; + const PLAY_REACHED_75 = 6; + const PLAY_REACHED_100 = 7; + const OPEN_EDIT = 8; + const OPEN_VIRAL = 9; + const OPEN_DOWNLOAD = 10; + const OPEN_REPORT = 11; + const BUFFER_START = 12; + const BUFFER_END = 13; + const OPEN_FULL_SCREEN = 14; + const CLOSE_FULL_SCREEN = 15; + const REPLAY = 16; + const SEEK = 17; + const OPEN_UPLOAD = 18; + const SAVE_PUBLISH = 19; + const CLOSE_EDITOR = 20; + const PRE_BUMPER_PLAYED = 21; + const POST_BUMPER_PLAYED = 22; + const BUMPER_CLICKED = 23; + const PREROLL_STARTED = 24; + const MIDROLL_STARTED = 25; + const POSTROLL_STARTED = 26; + const OVERLAY_STARTED = 27; + const PREROLL_CLICKED = 28; + const MIDROLL_CLICKED = 29; + const POSTROLL_CLICKED = 30; + const OVERLAY_CLICKED = 31; + const PREROLL_25 = 32; + const PREROLL_50 = 33; + const PREROLL_75 = 34; + const MIDROLL_25 = 35; + const MIDROLL_50 = 36; + const MIDROLL_75 = 37; + const POSTROLL_25 = 38; + const POSTROLL_50 = 39; + const POSTROLL_75 = 40; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaStatsFeatureType +{ + const NONE = 0; + const RELATED = 1; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaStatsKmcEventType +{ + const CONTENT_PAGE_VIEW = 1001; + const CONTENT_ADD_PLAYLIST = 1010; + const CONTENT_EDIT_PLAYLIST = 1011; + const CONTENT_DELETE_PLAYLIST = 1012; + const CONTENT_EDIT_ENTRY = 1013; + const CONTENT_CHANGE_THUMBNAIL = 1014; + const CONTENT_ADD_TAGS = 1015; + const CONTENT_REMOVE_TAGS = 1016; + const CONTENT_ADD_ADMIN_TAGS = 1017; + const CONTENT_REMOVE_ADMIN_TAGS = 1018; + const CONTENT_DOWNLOAD = 1019; + const CONTENT_APPROVE_MODERATION = 1020; + const CONTENT_REJECT_MODERATION = 1021; + const CONTENT_BULK_UPLOAD = 1022; + const CONTENT_ADMIN_KCW_UPLOAD = 1023; + const ACCOUNT_CHANGE_PARTNER_INFO = 1030; + const ACCOUNT_CHANGE_LOGIN_INFO = 1031; + const ACCOUNT_CONTACT_US_USAGE = 1032; + const ACCOUNT_UPDATE_SERVER_SETTINGS = 1033; + const ACCOUNT_ACCOUNT_OVERVIEW = 1034; + const ACCOUNT_ACCESS_CONTROL = 1035; + const ACCOUNT_TRANSCODING_SETTINGS = 1036; + const ACCOUNT_ACCOUNT_UPGRADE = 1037; + const ACCOUNT_SAVE_SERVER_SETTINGS = 1038; + const ACCOUNT_ACCESS_CONTROL_DELETE = 1039; + const ACCOUNT_SAVE_TRANSCODING_SETTINGS = 1040; + const LOGIN = 1041; + const DASHBOARD_IMPORT_CONTENT = 1042; + const DASHBOARD_UPDATE_CONTENT = 1043; + const DASHBOARD_ACCOUNT_CONTACT_US = 1044; + const DASHBOARD_VIEW_REPORTS = 1045; + const DASHBOARD_EMBED_PLAYER = 1046; + const DASHBOARD_EMBED_PLAYLIST = 1047; + const DASHBOARD_CUSTOMIZE_PLAYERS = 1048; + const APP_STUDIO_NEW_PLAYER_SINGLE_VIDEO = 1050; + const APP_STUDIO_NEW_PLAYER_PLAYLIST = 1051; + const APP_STUDIO_NEW_PLAYER_MULTI_TAB_PLAYLIST = 1052; + const APP_STUDIO_EDIT_PLAYER_SINGLE_VIDEO = 1053; + const APP_STUDIO_EDIT_PLAYER_PLAYLIST = 1054; + const APP_STUDIO_EDIT_PLAYER_MULTI_TAB_PLAYLIST = 1055; + const APP_STUDIO_DUPLICATE_PLAYER = 1056; + const CONTENT_CONTENT_GO_TO_PAGE = 1057; + const CONTENT_DELETE_ITEM = 1058; + const CONTENT_DELETE_MIX = 1059; + const REPORTS_AND_ANALYTICS_BANDWIDTH_USAGE_TAB = 1070; + const REPORTS_AND_ANALYTICS_CONTENT_REPORTS_TAB = 1071; + const REPORTS_AND_ANALYTICS_USERS_AND_COMMUNITY_REPORTS_TAB = 1072; + const REPORTS_AND_ANALYTICS_TOP_CONTRIBUTORS = 1073; + const REPORTS_AND_ANALYTICS_MAP_OVERLAYS = 1074; + const REPORTS_AND_ANALYTICS_TOP_SYNDICATIONS = 1075; + const REPORTS_AND_ANALYTICS_TOP_CONTENT = 1076; + const REPORTS_AND_ANALYTICS_CONTENT_DROPOFF = 1077; + const REPORTS_AND_ANALYTICS_CONTENT_INTERACTIONS = 1078; + const REPORTS_AND_ANALYTICS_CONTENT_CONTRIBUTIONS = 1079; + const REPORTS_AND_ANALYTICS_VIDEO_DRILL_DOWN = 1080; + const REPORTS_AND_ANALYTICS_CONTENT_DRILL_DOWN_INTERACTION = 1081; + const REPORTS_AND_ANALYTICS_CONTENT_CONTRIBUTIONS_DRILLDOWN = 1082; + const REPORTS_AND_ANALYTICS_VIDEO_DRILL_DOWN_DROPOFF = 1083; + const REPORTS_AND_ANALYTICS_MAP_OVERLAYS_DRILLDOWN = 1084; + const REPORTS_AND_ANALYTICS_TOP_SYNDICATIONS_DRILL_DOWN = 1085; + const REPORTS_AND_ANALYTICS_BANDWIDTH_USAGE_VIEW_MONTHLY = 1086; + const REPORTS_AND_ANALYTICS_BANDWIDTH_USAGE_VIEW_YEARLY = 1087; + const CONTENT_ENTRY_DRILLDOWN = 1088; + const CONTENT_OPEN_PREVIEW_AND_EMBED = 1089; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaStorageProfileDeliveryStatus +{ + const ACTIVE = 1; + const BLOCKED = 2; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaStorageProfileReadyBehavior +{ + const NO_IMPACT = 0; + const REQUIRED = 1; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaStorageProfileStatus +{ + const DISABLED = 1; + const AUTOMATIC = 2; + const MANUAL = 3; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaSyndicationFeedStatus +{ + const DELETED = -1; + const ACTIVE = 1; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaSyndicationFeedType +{ + const GOOGLE_VIDEO = 1; + const YAHOO = 2; + const ITUNES = 3; + const TUBE_MOGUL = 4; + const KALTURA = 5; + const KALTURA_XSLT = 6; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaThumbAssetStatus +{ + const ERROR = -1; + const QUEUED = 0; + const CAPTURING = 1; + const READY = 2; + const DELETED = 3; + const IMPORTING = 7; + const EXPORTING = 9; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaThumbCropType +{ + const RESIZE = 1; + const RESIZE_WITH_PADDING = 2; + const CROP = 3; + const CROP_FROM_TOP = 4; + const RESIZE_WITH_FORCE = 5; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaUiConfCreationMode +{ + const WIZARD = 2; + const ADVANCED = 3; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaUiConfObjType +{ + const PLAYER = 1; + const CONTRIBUTION_WIZARD = 2; + const SIMPLE_EDITOR = 3; + const ADVANCED_EDITOR = 4; + const PLAYLIST = 5; + const APP_STUDIO = 6; + const KRECORD = 7; + const PLAYER_V3 = 8; + const KMC_ACCOUNT = 9; + const KMC_ANALYTICS = 10; + const KMC_CONTENT = 11; + const KMC_DASHBOARD = 12; + const KMC_LOGIN = 13; + const PLAYER_SL = 14; + const CLIENTSIDE_ENCODER = 15; + const KMC_GENERAL = 16; + const KMC_ROLES_AND_PERMISSIONS = 17; + const CLIPPER = 18; + const KSR = 19; + const KUPLOAD = 20; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaUpdateMethodType +{ + const MANUAL = 0; + const AUTOMATIC = 1; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaUploadErrorCode +{ + const NO_ERROR = 0; + const GENERAL_ERROR = 1; + const PARTIAL_UPLOAD = 2; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaUploadTokenStatus +{ + const PENDING = 0; + const PARTIAL_UPLOAD = 1; + const FULL_UPLOAD = 2; + const CLOSED = 3; + const TIMED_OUT = 4; + const DELETED = 5; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaUserAgentRestrictionType +{ + const RESTRICT_LIST = 0; + const ALLOW_LIST = 1; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaUserJoinPolicyType +{ + const AUTO_JOIN = 1; + const REQUEST_TO_JOIN = 2; + const NOT_ALLOWED = 3; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaUserRoleStatus +{ + const ACTIVE = 1; + const BLOCKED = 2; + const DELETED = 3; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaUserStatus +{ + const BLOCKED = 0; + const ACTIVE = 1; + const DELETED = 2; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaWidgetSecurityType +{ + const NONE = 1; + const TIMEHASH = 2; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaAccessControlOrderBy +{ + const CREATED_AT_ASC = "+createdAt"; + const CREATED_AT_DESC = "-createdAt"; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaAccessControlProfileOrderBy +{ + const CREATED_AT_ASC = "+createdAt"; + const UPDATED_AT_ASC = "+updatedAt"; + const CREATED_AT_DESC = "-createdAt"; + const UPDATED_AT_DESC = "-updatedAt"; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaAdminUserOrderBy +{ + const CREATED_AT_ASC = "+createdAt"; + const ID_ASC = "+id"; + const CREATED_AT_DESC = "-createdAt"; + const ID_DESC = "-id"; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaAkamaiUniversalStreamType +{ + const HD_IPHONE_IPAD_LIVE = "HD iPhone/iPad Live"; + const UNIVERSAL_STREAMING_LIVE = "Universal Streaming Live"; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaAmazonS3StorageProfileFilesPermissionLevel +{ + const ACL_AUTHENTICATED_READ = "authenticated-read"; + const ACL_PRIVATE = "private"; + const ACL_PUBLIC_READ = "public-read"; + const ACL_PUBLIC_READ_WRITE = "public-read-write"; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaAmazonS3StorageProfileOrderBy +{ + const CREATED_AT_ASC = "+createdAt"; + const UPDATED_AT_ASC = "+updatedAt"; + const CREATED_AT_DESC = "-createdAt"; + const UPDATED_AT_DESC = "-updatedAt"; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaApiActionPermissionItemOrderBy +{ + const CREATED_AT_ASC = "+createdAt"; + const ID_ASC = "+id"; + const UPDATED_AT_ASC = "+updatedAt"; + const CREATED_AT_DESC = "-createdAt"; + const ID_DESC = "-id"; + const UPDATED_AT_DESC = "-updatedAt"; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaApiParameterPermissionItemAction +{ + const USAGE = "all"; + const INSERT = "insert"; + const READ = "read"; + const UPDATE = "update"; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaApiParameterPermissionItemOrderBy +{ + const CREATED_AT_ASC = "+createdAt"; + const ID_ASC = "+id"; + const UPDATED_AT_ASC = "+updatedAt"; + const CREATED_AT_DESC = "-createdAt"; + const ID_DESC = "-id"; + const UPDATED_AT_DESC = "-updatedAt"; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaAssetOrderBy +{ + const CREATED_AT_ASC = "+createdAt"; + const DELETED_AT_ASC = "+deletedAt"; + const SIZE_ASC = "+size"; + const UPDATED_AT_ASC = "+updatedAt"; + const CREATED_AT_DESC = "-createdAt"; + const DELETED_AT_DESC = "-deletedAt"; + const SIZE_DESC = "-size"; + const UPDATED_AT_DESC = "-updatedAt"; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaAssetParamsOrderBy +{ +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaAssetParamsOutputOrderBy +{ +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaAssetType +{ + const ATTACHMENT = "attachment.Attachment"; + const CAPTION = "caption.Caption"; + const DOCUMENT = "document.Document"; + const IMAGE = "document.Image"; + const PDF = "document.PDF"; + const SWF = "document.SWF"; + const WIDEVINE_FLAVOR = "widevine.WidevineFlavor"; + const FLAVOR = "1"; + const THUMBNAIL = "2"; + const LIVE = "3"; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaAudioCodec +{ + const NONE = ""; + const AAC = "aac"; + const AACHE = "aache"; + const AC3 = "ac3"; + const AMRNB = "amrnb"; + const COPY = "copy"; + const MP3 = "mp3"; + const MPEG2 = "mpeg2"; + const PCM = "pcm"; + const VORBIS = "vorbis"; + const WMA = "wma"; + const WMAPRO = "wmapro"; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaBaseEntryOrderBy +{ + const CREATED_AT_ASC = "+createdAt"; + const END_DATE_ASC = "+endDate"; + const MODERATION_COUNT_ASC = "+moderationCount"; + const NAME_ASC = "+name"; + const PARTNER_SORT_VALUE_ASC = "+partnerSortValue"; + const RANK_ASC = "+rank"; + const RECENT_ASC = "+recent"; + const START_DATE_ASC = "+startDate"; + const TOTAL_RANK_ASC = "+totalRank"; + const UPDATED_AT_ASC = "+updatedAt"; + const WEIGHT_ASC = "+weight"; + const CREATED_AT_DESC = "-createdAt"; + const END_DATE_DESC = "-endDate"; + const MODERATION_COUNT_DESC = "-moderationCount"; + const NAME_DESC = "-name"; + const PARTNER_SORT_VALUE_DESC = "-partnerSortValue"; + const RANK_DESC = "-rank"; + const RECENT_DESC = "-recent"; + const START_DATE_DESC = "-startDate"; + const TOTAL_RANK_DESC = "-totalRank"; + const UPDATED_AT_DESC = "-updatedAt"; + const WEIGHT_DESC = "-weight"; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaBaseSyndicationFeedOrderBy +{ + const CREATED_AT_ASC = "+createdAt"; + const NAME_ASC = "+name"; + const PLAYLIST_ID_ASC = "+playlistId"; + const TYPE_ASC = "+type"; + const UPDATED_AT_ASC = "+updatedAt"; + const CREATED_AT_DESC = "-createdAt"; + const NAME_DESC = "-name"; + const PLAYLIST_ID_DESC = "-playlistId"; + const TYPE_DESC = "-type"; + const UPDATED_AT_DESC = "-updatedAt"; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaBatchJobOrderBy +{ + const CREATED_AT_ASC = "+createdAt"; + const ESTIMATED_EFFORT_ASC = "+estimatedEffort"; + const EXECUTION_ATTEMPTS_ASC = "+executionAttempts"; + const FINISH_TIME_ASC = "+finishTime"; + const LOCK_VERSION_ASC = "+lockVersion"; + const PRIORITY_ASC = "+priority"; + const QUEUE_TIME_ASC = "+queueTime"; + const STATUS_ASC = "+status"; + const UPDATED_AT_ASC = "+updatedAt"; + const CREATED_AT_DESC = "-createdAt"; + const ESTIMATED_EFFORT_DESC = "-estimatedEffort"; + const EXECUTION_ATTEMPTS_DESC = "-executionAttempts"; + const FINISH_TIME_DESC = "-finishTime"; + const LOCK_VERSION_DESC = "-lockVersion"; + const PRIORITY_DESC = "-priority"; + const QUEUE_TIME_DESC = "-queueTime"; + const STATUS_DESC = "-status"; + const UPDATED_AT_DESC = "-updatedAt"; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaBatchJobType +{ + const PARSE_CAPTION_ASSET = "captionSearch.parseCaptionAsset"; + const DISTRIBUTION_DELETE = "contentDistribution.DistributionDelete"; + const DISTRIBUTION_DISABLE = "contentDistribution.DistributionDisable"; + const DISTRIBUTION_ENABLE = "contentDistribution.DistributionEnable"; + const DISTRIBUTION_FETCH_REPORT = "contentDistribution.DistributionFetchReport"; + const DISTRIBUTION_SUBMIT = "contentDistribution.DistributionSubmit"; + const DISTRIBUTION_SYNC = "contentDistribution.DistributionSync"; + const DISTRIBUTION_UPDATE = "contentDistribution.DistributionUpdate"; + const CONVERT = "0"; + const DROP_FOLDER_CONTENT_PROCESSOR = "dropFolder.DropFolderContentProcessor"; + const DROP_FOLDER_WATCHER = "dropFolder.DropFolderWatcher"; + const EVENT_NOTIFICATION_HANDLER = "eventNotification.EventNotificationHandler"; + const INDEX_TAGS = "tagSearch.IndexTagsByPrivacyContext"; + const TAG_RESOLVE = "tagSearch.TagResolve"; + const VIRUS_SCAN = "virusScan.VirusScan"; + const WIDEVINE_REPOSITORY_SYNC = "widevine.WidevineRepositorySync"; + const IMPORT = "1"; + const DELETE = "2"; + const FLATTEN = "3"; + const BULKUPLOAD = "4"; + const DVDCREATOR = "5"; + const DOWNLOAD = "6"; + const OOCONVERT = "7"; + const CONVERT_PROFILE = "10"; + const POSTCONVERT = "11"; + const EXTRACT_MEDIA = "14"; + const MAIL = "15"; + const NOTIFICATION = "16"; + const CLEANUP = "17"; + const SCHEDULER_HELPER = "18"; + const BULKDOWNLOAD = "19"; + const DB_CLEANUP = "20"; + const PROVISION_PROVIDE = "21"; + const CONVERT_COLLECTION = "22"; + const STORAGE_EXPORT = "23"; + const PROVISION_DELETE = "24"; + const STORAGE_DELETE = "25"; + const EMAIL_INGESTION = "26"; + const METADATA_IMPORT = "27"; + const METADATA_TRANSFORM = "28"; + const FILESYNC_IMPORT = "29"; + const CAPTURE_THUMB = "30"; + const DELETE_FILE = "31"; + const INDEX = "32"; + const MOVE_CATEGORY_ENTRIES = "33"; + const COPY = "34"; + const CONCAT = "35"; + const CONVERT_LIVE_SEGMENT = "36"; + const COPY_PARTNER = "37"; + const VALIDATE_LIVE_MEDIA_SERVERS = "38"; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaBulkUploadAction +{ + const ADD = "1"; + const UPDATE = "2"; + const DELETE = "3"; + const REPLACE = "4"; + const TRANSFORM_XSLT = "5"; + const ADD_OR_UPDATE = "6"; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaBulkUploadObjectType +{ + const ENTRY = "1"; + const CATEGORY = "2"; + const USER = "3"; + const CATEGORY_USER = "4"; + const CATEGORY_ENTRY = "5"; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaBulkUploadOrderBy +{ +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaBulkUploadResultObjectType +{ + const ENTRY = "1"; + const CATEGORY = "2"; + const USER = "3"; + const CATEGORY_USER = "4"; + const CATEGORY_ENTRY = "5"; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaBulkUploadResultStatus +{ + const ERROR = "1"; + const OK = "2"; + const IN_PROGRESS = "3"; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaBulkUploadType +{ + const CSV = "bulkUploadCsv.CSV"; + const FILTER = "bulkUploadFilter.FILTER"; + const XML = "bulkUploadXml.XML"; + const DROP_FOLDER_XML = "dropFolderXmlBulkUpload.DROP_FOLDER_XML"; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaCategoryEntryOrderBy +{ + const CREATED_AT_ASC = "+createdAt"; + const CREATED_AT_DESC = "-createdAt"; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaCategoryIdentifierField +{ + const FULL_NAME = "fullName"; + const ID = "id"; + const REFERENCE_ID = "referenceId"; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaCategoryOrderBy +{ + const CREATED_AT_ASC = "+createdAt"; + const DEPTH_ASC = "+depth"; + const DIRECT_ENTRIES_COUNT_ASC = "+directEntriesCount"; + const DIRECT_SUB_CATEGORIES_COUNT_ASC = "+directSubCategoriesCount"; + const ENTRIES_COUNT_ASC = "+entriesCount"; + const FULL_NAME_ASC = "+fullName"; + const MEMBERS_COUNT_ASC = "+membersCount"; + const NAME_ASC = "+name"; + const PARTNER_SORT_VALUE_ASC = "+partnerSortValue"; + const UPDATED_AT_ASC = "+updatedAt"; + const CREATED_AT_DESC = "-createdAt"; + const DEPTH_DESC = "-depth"; + const DIRECT_ENTRIES_COUNT_DESC = "-directEntriesCount"; + const DIRECT_SUB_CATEGORIES_COUNT_DESC = "-directSubCategoriesCount"; + const ENTRIES_COUNT_DESC = "-entriesCount"; + const FULL_NAME_DESC = "-fullName"; + const MEMBERS_COUNT_DESC = "-membersCount"; + const NAME_DESC = "-name"; + const PARTNER_SORT_VALUE_DESC = "-partnerSortValue"; + const UPDATED_AT_DESC = "-updatedAt"; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaCategoryUserOrderBy +{ + const CREATED_AT_ASC = "+createdAt"; + const UPDATED_AT_ASC = "+updatedAt"; + const CREATED_AT_DESC = "-createdAt"; + const UPDATED_AT_DESC = "-updatedAt"; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaConditionType +{ + const ABC_WATERMARK = "abcScreenersWatermarkAccessControl.abcWatermark"; + const EVENT_NOTIFICATION_FIELD = "eventNotification.BooleanField"; + const EVENT_NOTIFICATION_OBJECT_CHANGED = "eventNotification.ObjectChanged"; + const METADATA_FIELD_CHANGED = "metadata.FieldChanged"; + const METADATA_FIELD_COMPARE = "metadata.FieldCompare"; + const METADATA_FIELD_MATCH = "metadata.FieldMatch"; + const AUTHENTICATED = "1"; + const COUNTRY = "2"; + const IP_ADDRESS = "3"; + const SITE = "4"; + const USER_AGENT = "5"; + const FIELD_MATCH = "6"; + const FIELD_COMPARE = "7"; + const ASSET_PROPERTIES_COMPARE = "8"; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaContainerFormat +{ + const _3GP = "3gp"; + const APPLEHTTP = "applehttp"; + const AVI = "avi"; + const BMP = "bmp"; + const COPY = "copy"; + const FLV = "flv"; + const ISMV = "ismv"; + const JPG = "jpg"; + const MKV = "mkv"; + const MOV = "mov"; + const MP3 = "mp3"; + const MP4 = "mp4"; + const MPEG = "mpeg"; + const MPEGTS = "mpegts"; + const OGG = "ogg"; + const OGV = "ogv"; + const PDF = "pdf"; + const PNG = "png"; + const SWF = "swf"; + const WAV = "wav"; + const WEBM = "webm"; + const WMA = "wma"; + const WMV = "wmv"; + const WVM = "wvm"; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaContextType +{ + const PLAY = "1"; + const DOWNLOAD = "2"; + const THUMBNAIL = "3"; + const METADATA = "4"; + const EXPORT = "5"; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaControlPanelCommandOrderBy +{ + const CREATED_AT_ASC = "+createdAt"; + const UPDATED_AT_ASC = "+updatedAt"; + const CREATED_AT_DESC = "-createdAt"; + const UPDATED_AT_DESC = "-updatedAt"; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaConversionProfileAssetParamsOrderBy +{ +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaConversionProfileOrderBy +{ + const CREATED_AT_ASC = "+createdAt"; + const CREATED_AT_DESC = "-createdAt"; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaConversionProfileStatus +{ + const DISABLED = "1"; + const ENABLED = "2"; + const DELETED = "3"; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaConversionProfileType +{ + const MEDIA = "1"; + const LIVE_STREAM = "2"; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaDataEntryOrderBy +{ + const CREATED_AT_ASC = "+createdAt"; + const END_DATE_ASC = "+endDate"; + const MODERATION_COUNT_ASC = "+moderationCount"; + const NAME_ASC = "+name"; + const PARTNER_SORT_VALUE_ASC = "+partnerSortValue"; + const RANK_ASC = "+rank"; + const RECENT_ASC = "+recent"; + const START_DATE_ASC = "+startDate"; + const TOTAL_RANK_ASC = "+totalRank"; + const UPDATED_AT_ASC = "+updatedAt"; + const WEIGHT_ASC = "+weight"; + const CREATED_AT_DESC = "-createdAt"; + const END_DATE_DESC = "-endDate"; + const MODERATION_COUNT_DESC = "-moderationCount"; + const NAME_DESC = "-name"; + const PARTNER_SORT_VALUE_DESC = "-partnerSortValue"; + const RANK_DESC = "-rank"; + const RECENT_DESC = "-recent"; + const START_DATE_DESC = "-startDate"; + const TOTAL_RANK_DESC = "-totalRank"; + const UPDATED_AT_DESC = "-updatedAt"; + const WEIGHT_DESC = "-weight"; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaDurationType +{ + const LONG = "long"; + const MEDIUM = "medium"; + const NOT_AVAILABLE = "notavailable"; + const SHORT = "short"; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaDynamicEnum +{ +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaEntryIdentifierField +{ + const ID = "id"; + const REFERENCE_ID = "referenceId"; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaEntryReplacementStatus +{ + const NONE = "0"; + const APPROVED_BUT_NOT_READY = "1"; + const READY_BUT_NOT_APPROVED = "2"; + const NOT_READY_AND_NOT_APPROVED = "3"; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaEntryStatus +{ + const ERROR_IMPORTING = "-2"; + const ERROR_CONVERTING = "-1"; + const SCAN_FAILURE = "virusScan.ScanFailure"; + const IMPORT = "0"; + const INFECTED = "virusScan.Infected"; + const PRECONVERT = "1"; + const READY = "2"; + const DELETED = "3"; + const PENDING = "4"; + const MODERATE = "5"; + const BLOCKED = "6"; + const NO_CONTENT = "7"; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaEntryType +{ + const AUTOMATIC = "-1"; + const EXTERNAL_MEDIA = "externalMedia.externalMedia"; + const MEDIA_CLIP = "1"; + const MIX = "2"; + const PLAYLIST = "5"; + const DATA = "6"; + const LIVE_STREAM = "7"; + const LIVE_CHANNEL = "8"; + const DOCUMENT = "10"; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaFileAssetObjectType +{ + const UI_CONF = "2"; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaFileAssetOrderBy +{ + const CREATED_AT_ASC = "+createdAt"; + const UPDATED_AT_ASC = "+updatedAt"; + const CREATED_AT_DESC = "-createdAt"; + const UPDATED_AT_DESC = "-updatedAt"; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaFileAssetStatus +{ + const PENDING = "0"; + const UPLOADING = "1"; + const READY = "2"; + const DELETED = "3"; + const ERROR = "4"; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaFileSyncObjectType +{ + const DISTRIBUTION_PROFILE = "contentDistribution.DistributionProfile"; + const ENTRY_DISTRIBUTION = "contentDistribution.EntryDistribution"; + const GENERIC_DISTRIBUTION_ACTION = "contentDistribution.GenericDistributionAction"; + const EMAIL_NOTIFICATION_TEMPLATE = "emailNotification.EmailNotificationTemplate"; + const HTTP_NOTIFICATION_TEMPLATE = "httpNotification.HttpNotificationTemplate"; + const ENTRY = "1"; + const UICONF = "2"; + const BATCHJOB = "3"; + const ASSET = "4"; + const FLAVOR_ASSET = "4"; + const METADATA = "5"; + const METADATA_PROFILE = "6"; + const SYNDICATION_FEED = "7"; + const CONVERSION_PROFILE = "8"; + const FILE_ASSET = "9"; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaFlavorAssetOrderBy +{ + const CREATED_AT_ASC = "+createdAt"; + const DELETED_AT_ASC = "+deletedAt"; + const SIZE_ASC = "+size"; + const UPDATED_AT_ASC = "+updatedAt"; + const CREATED_AT_DESC = "-createdAt"; + const DELETED_AT_DESC = "-deletedAt"; + const SIZE_DESC = "-size"; + const UPDATED_AT_DESC = "-updatedAt"; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaFlavorParamsOrderBy +{ +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaFlavorParamsOutputOrderBy +{ +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaGenericSyndicationFeedOrderBy +{ + const CREATED_AT_ASC = "+createdAt"; + const NAME_ASC = "+name"; + const PLAYLIST_ID_ASC = "+playlistId"; + const TYPE_ASC = "+type"; + const UPDATED_AT_ASC = "+updatedAt"; + const CREATED_AT_DESC = "-createdAt"; + const NAME_DESC = "-name"; + const PLAYLIST_ID_DESC = "-playlistId"; + const TYPE_DESC = "-type"; + const UPDATED_AT_DESC = "-updatedAt"; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaGenericXsltSyndicationFeedOrderBy +{ + const CREATED_AT_ASC = "+createdAt"; + const NAME_ASC = "+name"; + const PLAYLIST_ID_ASC = "+playlistId"; + const TYPE_ASC = "+type"; + const UPDATED_AT_ASC = "+updatedAt"; + const CREATED_AT_DESC = "-createdAt"; + const NAME_DESC = "-name"; + const PLAYLIST_ID_DESC = "-playlistId"; + const TYPE_DESC = "-type"; + const UPDATED_AT_DESC = "-updatedAt"; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaGeoCoderType +{ + const KALTURA = "1"; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaGoogleSyndicationFeedAdultValues +{ + const NO = "No"; + const YES = "Yes"; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaGoogleVideoSyndicationFeedOrderBy +{ + const CREATED_AT_ASC = "+createdAt"; + const NAME_ASC = "+name"; + const PLAYLIST_ID_ASC = "+playlistId"; + const TYPE_ASC = "+type"; + const UPDATED_AT_ASC = "+updatedAt"; + const CREATED_AT_DESC = "-createdAt"; + const NAME_DESC = "-name"; + const PLAYLIST_ID_DESC = "-playlistId"; + const TYPE_DESC = "-type"; + const UPDATED_AT_DESC = "-updatedAt"; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaITunesSyndicationFeedAdultValues +{ + const CLEAN = "clean"; + const NO = "no"; + const YES = "yes"; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaITunesSyndicationFeedCategories +{ + const ARTS = "Arts"; + const ARTS_DESIGN = "Arts/Design"; + const ARTS_FASHION_BEAUTY = "Arts/Fashion & Beauty"; + const ARTS_FOOD = "Arts/Food"; + const ARTS_LITERATURE = "Arts/Literature"; + const ARTS_PERFORMING_ARTS = "Arts/Performing Arts"; + const ARTS_VISUAL_ARTS = "Arts/Visual Arts"; + const BUSINESS = "Business"; + const BUSINESS_BUSINESS_NEWS = "Business/Business News"; + const BUSINESS_CAREERS = "Business/Careers"; + const BUSINESS_INVESTING = "Business/Investing"; + const BUSINESS_MANAGEMENT_MARKETING = "Business/Management & Marketing"; + const BUSINESS_SHOPPING = "Business/Shopping"; + const COMEDY = "Comedy"; + const EDUCATION = "Education"; + const EDUCATION_TECHNOLOGY = "Education/Education Technology"; + const EDUCATION_HIGHER_EDUCATION = "Education/Higher Education"; + const EDUCATION_K_12 = "Education/K-12"; + const EDUCATION_LANGUAGE_COURSES = "Education/Language Courses"; + const EDUCATION_TRAINING = "Education/Training"; + const GAMES_HOBBIES = "Games & Hobbies"; + const GAMES_HOBBIES_AUTOMOTIVE = "Games & Hobbies/Automotive"; + const GAMES_HOBBIES_AVIATION = "Games & Hobbies/Aviation"; + const GAMES_HOBBIES_HOBBIES = "Games & Hobbies/Hobbies"; + const GAMES_HOBBIES_OTHER_GAMES = "Games & Hobbies/Other Games"; + const GAMES_HOBBIES_VIDEO_GAMES = "Games & Hobbies/Video Games"; + const GOVERNMENT_ORGANIZATIONS = "Government & Organizations"; + const GOVERNMENT_ORGANIZATIONS_LOCAL = "Government & Organizations/Local"; + const GOVERNMENT_ORGANIZATIONS_NATIONAL = "Government & Organizations/National"; + const GOVERNMENT_ORGANIZATIONS_NON_PROFIT = "Government & Organizations/Non-Profit"; + const GOVERNMENT_ORGANIZATIONS_REGIONAL = "Government & Organizations/Regional"; + const HEALTH = "Health"; + const HEALTH_ALTERNATIVE_HEALTH = "Health/Alternative Health"; + const HEALTH_FITNESS_NUTRITION = "Health/Fitness & Nutrition"; + const HEALTH_SELF_HELP = "Health/Self-Help"; + const HEALTH_SEXUALITY = "Health/Sexuality"; + const KIDS_FAMILY = "Kids & Family"; + const MUSIC = "Music"; + const NEWS_POLITICS = "News & Politics"; + const RELIGION_SPIRITUALITY = "Religion & Spirituality"; + const RELIGION_SPIRITUALITY_BUDDHISM = "Religion & Spirituality/Buddhism"; + const RELIGION_SPIRITUALITY_CHRISTIANITY = "Religion & Spirituality/Christianity"; + const RELIGION_SPIRITUALITY_HINDUISM = "Religion & Spirituality/Hinduism"; + const RELIGION_SPIRITUALITY_ISLAM = "Religion & Spirituality/Islam"; + const RELIGION_SPIRITUALITY_JUDAISM = "Religion & Spirituality/Judaism"; + const RELIGION_SPIRITUALITY_OTHER = "Religion & Spirituality/Other"; + const RELIGION_SPIRITUALITY_SPIRITUALITY = "Religion & Spirituality/Spirituality"; + const SCIENCE_MEDICINE = "Science & Medicine"; + const SCIENCE_MEDICINE_MEDICINE = "Science & Medicine/Medicine"; + const SCIENCE_MEDICINE_NATURAL_SCIENCES = "Science & Medicine/Natural Sciences"; + const SCIENCE_MEDICINE_SOCIAL_SCIENCES = "Science & Medicine/Social Sciences"; + const SOCIETY_CULTURE = "Society & Culture"; + const SOCIETY_CULTURE_HISTORY = "Society & Culture/History"; + const SOCIETY_CULTURE_PERSONAL_JOURNALS = "Society & Culture/Personal Journals"; + const SOCIETY_CULTURE_PHILOSOPHY = "Society & Culture/Philosophy"; + const SOCIETY_CULTURE_PLACES_TRAVEL = "Society & Culture/Places & Travel"; + const SPORTS_RECREATION = "Sports & Recreation"; + const SPORTS_RECREATION_AMATEUR = "Sports & Recreation/Amateur"; + const SPORTS_RECREATION_COLLEGE_HIGH_SCHOOL = "Sports & Recreation/College & High School"; + const SPORTS_RECREATION_OUTDOOR = "Sports & Recreation/Outdoor"; + const SPORTS_RECREATION_PROFESSIONAL = "Sports & Recreation/Professional"; + const TV_FILM = "TV & Film"; + const TECHNOLOGY = "Technology"; + const TECHNOLOGY_GADGETS = "Technology/Gadgets"; + const TECHNOLOGY_PODCASTING = "Technology/Podcasting"; + const TECHNOLOGY_SOFTWARE_HOW_TO = "Technology/Software How-To"; + const TECHNOLOGY_TECH_NEWS = "Technology/Tech News"; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaITunesSyndicationFeedOrderBy +{ + const CREATED_AT_ASC = "+createdAt"; + const NAME_ASC = "+name"; + const PLAYLIST_ID_ASC = "+playlistId"; + const TYPE_ASC = "+type"; + const UPDATED_AT_ASC = "+updatedAt"; + const CREATED_AT_DESC = "-createdAt"; + const NAME_DESC = "-name"; + const PLAYLIST_ID_DESC = "-playlistId"; + const TYPE_DESC = "-type"; + const UPDATED_AT_DESC = "-updatedAt"; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaLanguage +{ + const AB = "Abkhazian"; + const AA = "Afar"; + const AF = "Afrikaans"; + const SQ = "Albanian"; + const AM = "Amharic"; + const AR = "Arabic"; + const HY = "Armenian"; + const AS_ = "Assamese"; + const AY = "Aymara"; + const AZ = "Azerbaijani"; + const BA = "Bashkir"; + const EU = "Basque"; + const BN = "Bengali (Bangla)"; + const DZ = "Bhutani"; + const BH = "Bihari"; + const BI = "Bislama"; + const BR = "Breton"; + const BG = "Bulgarian"; + const MY = "Burmese"; + const BE = "Byelorussian (Belarusian)"; + const KM = "Cambodian"; + const CA = "Catalan"; + const ZH = "Chinese"; + const CO = "Corsican"; + const HR = "Croatian"; + const CS = "Czech"; + const DA = "Danish"; + const NL = "Dutch"; + const EN = "English"; + const EO = "Esperanto"; + const ET = "Estonian"; + const FO = "Faeroese"; + const FA = "Farsi"; + const FJ = "Fiji"; + const FI = "Finnish"; + const FR = "French"; + const FY = "Frisian"; + const GV = "Gaelic (Manx)"; + const GD = "Gaelic (Scottish)"; + const GL = "Galician"; + const KA = "Georgian"; + const DE = "German"; + const EL = "Greek"; + const KL = "Greenlandic"; + const GN = "Guarani"; + const GU = "Gujarati"; + const HA = "Hausa"; + const IW = "Hebrew"; + const HE = "Hebrew"; + const HI = "Hindi"; + const HU = "Hungarian"; + const IS = "Icelandic"; + const IN = "Indonesian"; + const ID = "Indonesian"; + const IA = "Interlingua"; + const IE = "Interlingue"; + const IU = "Inuktitut"; + const IK = "Inupiak"; + const GA = "Irish"; + const IT = "Italian"; + const JA = "Japanese"; + const JV = "Javanese"; + const KN = "Kannada"; + const KS = "Kashmiri"; + const KK = "Kazakh"; + const RW = "Kinyarwanda (Ruanda)"; + const KY = "Kirghiz"; + const RN = "Kirundi (Rundi)"; + const KO = "Korean"; + const KU = "Kurdish"; + const LO = "Laothian"; + const LA = "Latin"; + const LV = "Latvian (Lettish)"; + const LI = "Limburgish ( Limburger)"; + const LN = "Lingala"; + const LT = "Lithuanian"; + const MK = "Macedonian"; + const MG = "Malagasy"; + const MS = "Malay"; + const ML = "Malayalam"; + const MT = "Maltese"; + const MI = "Maori"; + const MR = "Marathi"; + const MO = "Moldavian"; + const MN = "Mongolian"; + const NA = "Nauru"; + const NE = "Nepali"; + const NO = "Norwegian"; + const OC = "Occitan"; + const OR_ = "Oriya"; + const OM = "Oromo (Afan, Galla)"; + const PS = "Pashto (Pushto)"; + const PL = "Polish"; + const PT = "Portuguese"; + const PA = "Punjabi"; + const QU = "Quechua"; + const RM = "Rhaeto-Romance"; + const RO = "Romanian"; + const RU = "Russian"; + const SM = "Samoan"; + const SG = "Sangro"; + const SA = "Sanskrit"; + const SR = "Serbian"; + const SH = "Serbo-Croatian"; + const ST = "Sesotho"; + const TN = "Setswana"; + const SN = "Shona"; + const SD = "Sindhi"; + const SI = "Sinhalese"; + const SS = "Siswati"; + const SK = "Slovak"; + const SL = "Slovenian"; + const SO = "Somali"; + const ES = "Spanish"; + const SU = "Sundanese"; + const SW = "Swahili (Kiswahili)"; + const SV = "Swedish"; + const TL = "Tagalog"; + const TG = "Tajik"; + const TA = "Tamil"; + const TT = "Tatar"; + const TE = "Telugu"; + const TH = "Thai"; + const BO = "Tibetan"; + const TI = "Tigrinya"; + const TO = "Tonga"; + const TS = "Tsonga"; + const TR = "Turkish"; + const TK = "Turkmen"; + const TW = "Twi"; + const UG = "Uighur"; + const UK = "Ukrainian"; + const UR = "Urdu"; + const UZ = "Uzbek"; + const VI = "Vietnamese"; + const VO = "Volapuk"; + const CY = "Welsh"; + const WO = "Wolof"; + const XH = "Xhosa"; + const YI = "Yiddish"; + const JI = "Yiddish"; + const YO = "Yoruba"; + const ZU = "Zulu"; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaLanguageCode +{ + const AA = "aa"; + const AB = "ab"; + const AF = "af"; + const AM = "am"; + const AR = "ar"; + const AS_ = "as"; + const AY = "ay"; + const AZ = "az"; + const BA = "ba"; + const BE = "be"; + const BG = "bg"; + const BH = "bh"; + const BI = "bi"; + const BN = "bn"; + const BO = "bo"; + const BR = "br"; + const CA = "ca"; + const CO = "co"; + const CS = "cs"; + const CY = "cy"; + const DA = "da"; + const DE = "de"; + const DZ = "dz"; + const EL = "el"; + const EN = "en"; + const EO = "eo"; + const ES = "es"; + const ET = "et"; + const EU = "eu"; + const FA = "fa"; + const FI = "fi"; + const FJ = "fj"; + const FO = "fo"; + const FR = "fr"; + const FY = "fy"; + const GA = "ga"; + const GD = "gd"; + const GL = "gl"; + const GN = "gn"; + const GU = "gu"; + const GV = "gv"; + const HA = "ha"; + const HE = "he"; + const HI = "hi"; + const HR = "hr"; + const HU = "hu"; + const HY = "hy"; + const IA = "ia"; + const ID = "id"; + const IE = "ie"; + const IK = "ik"; + const IN = "in"; + const IS = "is"; + const IT = "it"; + const IU = "iu"; + const IW = "iw"; + const JA = "ja"; + const JI = "ji"; + const JV = "jv"; + const KA = "ka"; + const KK = "kk"; + const KL = "kl"; + const KM = "km"; + const KN = "kn"; + const KO = "ko"; + const KS = "ks"; + const KU = "ku"; + const KY = "ky"; + const LA = "la"; + const LI = "li"; + const LN = "ln"; + const LO = "lo"; + const LT = "lt"; + const LV = "lv"; + const MG = "mg"; + const MI = "mi"; + const MK = "mk"; + const ML = "ml"; + const MN = "mn"; + const MO = "mo"; + const MR = "mr"; + const MS = "ms"; + const MT = "mt"; + const MY = "my"; + const NA = "na"; + const NE = "ne"; + const NL = "nl"; + const NO = "no"; + const OC = "oc"; + const OM = "om"; + const OR_ = "or"; + const PA = "pa"; + const PL = "pl"; + const PS = "ps"; + const PT = "pt"; + const QU = "qu"; + const RM = "rm"; + const RN = "rn"; + const RO = "ro"; + const RU = "ru"; + const RW = "rw"; + const SA = "sa"; + const SD = "sd"; + const SG = "sg"; + const SH = "sh"; + const SI = "si"; + const SK = "sk"; + const SL = "sl"; + const SM = "sm"; + const SN = "sn"; + const SO = "so"; + const SQ = "sq"; + const SR = "sr"; + const SS = "ss"; + const ST = "st"; + const SU = "su"; + const SV = "sv"; + const SW = "sw"; + const TA = "ta"; + const TE = "te"; + const TG = "tg"; + const TH = "th"; + const TI = "ti"; + const TK = "tk"; + const TL = "tl"; + const TN = "tn"; + const TO = "to"; + const TR = "tr"; + const TS = "ts"; + const TT = "tt"; + const TW = "tw"; + const UG = "ug"; + const UK = "uk"; + const UR = "ur"; + const UZ = "uz"; + const VI = "vi"; + const VO = "vo"; + const WO = "wo"; + const XH = "xh"; + const YI = "yi"; + const YO = "yo"; + const ZH = "zh"; + const ZU = "zu"; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaLiveAssetOrderBy +{ + const CREATED_AT_ASC = "+createdAt"; + const DELETED_AT_ASC = "+deletedAt"; + const SIZE_ASC = "+size"; + const UPDATED_AT_ASC = "+updatedAt"; + const CREATED_AT_DESC = "-createdAt"; + const DELETED_AT_DESC = "-deletedAt"; + const SIZE_DESC = "-size"; + const UPDATED_AT_DESC = "-updatedAt"; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaLiveChannelOrderBy +{ + const CREATED_AT_ASC = "+createdAt"; + const DURATION_ASC = "+duration"; + const END_DATE_ASC = "+endDate"; + const LAST_PLAYED_AT_ASC = "+lastPlayedAt"; + const MEDIA_TYPE_ASC = "+mediaType"; + const MODERATION_COUNT_ASC = "+moderationCount"; + const NAME_ASC = "+name"; + const PARTNER_SORT_VALUE_ASC = "+partnerSortValue"; + const PLAYS_ASC = "+plays"; + const RANK_ASC = "+rank"; + const RECENT_ASC = "+recent"; + const START_DATE_ASC = "+startDate"; + const TOTAL_RANK_ASC = "+totalRank"; + const UPDATED_AT_ASC = "+updatedAt"; + const VIEWS_ASC = "+views"; + const WEIGHT_ASC = "+weight"; + const CREATED_AT_DESC = "-createdAt"; + const DURATION_DESC = "-duration"; + const END_DATE_DESC = "-endDate"; + const LAST_PLAYED_AT_DESC = "-lastPlayedAt"; + const MEDIA_TYPE_DESC = "-mediaType"; + const MODERATION_COUNT_DESC = "-moderationCount"; + const NAME_DESC = "-name"; + const PARTNER_SORT_VALUE_DESC = "-partnerSortValue"; + const PLAYS_DESC = "-plays"; + const RANK_DESC = "-rank"; + const RECENT_DESC = "-recent"; + const START_DATE_DESC = "-startDate"; + const TOTAL_RANK_DESC = "-totalRank"; + const UPDATED_AT_DESC = "-updatedAt"; + const VIEWS_DESC = "-views"; + const WEIGHT_DESC = "-weight"; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaLiveChannelSegmentOrderBy +{ + const CREATED_AT_ASC = "+createdAt"; + const START_TIME_ASC = "+startTime"; + const UPDATED_AT_ASC = "+updatedAt"; + const CREATED_AT_DESC = "-createdAt"; + const START_TIME_DESC = "-startTime"; + const UPDATED_AT_DESC = "-updatedAt"; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaLiveChannelSegmentStatus +{ + const ACTIVE = "2"; + const DELETED = "3"; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaLiveChannelSegmentTriggerType +{ + const CHANNEL_RELATIVE = "1"; + const ABSOLUTE_TIME = "2"; + const SEGMENT_START_RELATIVE = "3"; + const SEGMENT_END_RELATIVE = "4"; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaLiveChannelSegmentType +{ + const VIDEO_AND_AUDIO = "1"; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaLiveEntryOrderBy +{ + const CREATED_AT_ASC = "+createdAt"; + const DURATION_ASC = "+duration"; + const END_DATE_ASC = "+endDate"; + const LAST_PLAYED_AT_ASC = "+lastPlayedAt"; + const MEDIA_TYPE_ASC = "+mediaType"; + const MODERATION_COUNT_ASC = "+moderationCount"; + const NAME_ASC = "+name"; + const PARTNER_SORT_VALUE_ASC = "+partnerSortValue"; + const PLAYS_ASC = "+plays"; + const RANK_ASC = "+rank"; + const RECENT_ASC = "+recent"; + const START_DATE_ASC = "+startDate"; + const TOTAL_RANK_ASC = "+totalRank"; + const UPDATED_AT_ASC = "+updatedAt"; + const VIEWS_ASC = "+views"; + const WEIGHT_ASC = "+weight"; + const CREATED_AT_DESC = "-createdAt"; + const DURATION_DESC = "-duration"; + const END_DATE_DESC = "-endDate"; + const LAST_PLAYED_AT_DESC = "-lastPlayedAt"; + const MEDIA_TYPE_DESC = "-mediaType"; + const MODERATION_COUNT_DESC = "-moderationCount"; + const NAME_DESC = "-name"; + const PARTNER_SORT_VALUE_DESC = "-partnerSortValue"; + const PLAYS_DESC = "-plays"; + const RANK_DESC = "-rank"; + const RECENT_DESC = "-recent"; + const START_DATE_DESC = "-startDate"; + const TOTAL_RANK_DESC = "-totalRank"; + const UPDATED_AT_DESC = "-updatedAt"; + const VIEWS_DESC = "-views"; + const WEIGHT_DESC = "-weight"; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaLiveParamsOrderBy +{ +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaLiveStreamAdminEntryOrderBy +{ + const CREATED_AT_ASC = "+createdAt"; + const DURATION_ASC = "+duration"; + const END_DATE_ASC = "+endDate"; + const LAST_PLAYED_AT_ASC = "+lastPlayedAt"; + const MEDIA_TYPE_ASC = "+mediaType"; + const MODERATION_COUNT_ASC = "+moderationCount"; + const NAME_ASC = "+name"; + const PARTNER_SORT_VALUE_ASC = "+partnerSortValue"; + const PLAYS_ASC = "+plays"; + const RANK_ASC = "+rank"; + const RECENT_ASC = "+recent"; + const START_DATE_ASC = "+startDate"; + const TOTAL_RANK_ASC = "+totalRank"; + const UPDATED_AT_ASC = "+updatedAt"; + const VIEWS_ASC = "+views"; + const WEIGHT_ASC = "+weight"; + const CREATED_AT_DESC = "-createdAt"; + const DURATION_DESC = "-duration"; + const END_DATE_DESC = "-endDate"; + const LAST_PLAYED_AT_DESC = "-lastPlayedAt"; + const MEDIA_TYPE_DESC = "-mediaType"; + const MODERATION_COUNT_DESC = "-moderationCount"; + const NAME_DESC = "-name"; + const PARTNER_SORT_VALUE_DESC = "-partnerSortValue"; + const PLAYS_DESC = "-plays"; + const RANK_DESC = "-rank"; + const RECENT_DESC = "-recent"; + const START_DATE_DESC = "-startDate"; + const TOTAL_RANK_DESC = "-totalRank"; + const UPDATED_AT_DESC = "-updatedAt"; + const VIEWS_DESC = "-views"; + const WEIGHT_DESC = "-weight"; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaLiveStreamEntryOrderBy +{ + const CREATED_AT_ASC = "+createdAt"; + const DURATION_ASC = "+duration"; + const END_DATE_ASC = "+endDate"; + const LAST_PLAYED_AT_ASC = "+lastPlayedAt"; + const MEDIA_TYPE_ASC = "+mediaType"; + const MODERATION_COUNT_ASC = "+moderationCount"; + const NAME_ASC = "+name"; + const PARTNER_SORT_VALUE_ASC = "+partnerSortValue"; + const PLAYS_ASC = "+plays"; + const RANK_ASC = "+rank"; + const RECENT_ASC = "+recent"; + const START_DATE_ASC = "+startDate"; + const TOTAL_RANK_ASC = "+totalRank"; + const UPDATED_AT_ASC = "+updatedAt"; + const VIEWS_ASC = "+views"; + const WEIGHT_ASC = "+weight"; + const CREATED_AT_DESC = "-createdAt"; + const DURATION_DESC = "-duration"; + const END_DATE_DESC = "-endDate"; + const LAST_PLAYED_AT_DESC = "-lastPlayedAt"; + const MEDIA_TYPE_DESC = "-mediaType"; + const MODERATION_COUNT_DESC = "-moderationCount"; + const NAME_DESC = "-name"; + const PARTNER_SORT_VALUE_DESC = "-partnerSortValue"; + const PLAYS_DESC = "-plays"; + const RANK_DESC = "-rank"; + const RECENT_DESC = "-recent"; + const START_DATE_DESC = "-startDate"; + const TOTAL_RANK_DESC = "-totalRank"; + const UPDATED_AT_DESC = "-updatedAt"; + const VIEWS_DESC = "-views"; + const WEIGHT_DESC = "-weight"; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaMailType +{ + const MAIL_TYPE_KALTURA_NEWSLETTER = "10"; + const MAIL_TYPE_ADDED_TO_FAVORITES = "11"; + const MAIL_TYPE_ADDED_TO_CLIP_FAVORITES = "12"; + const MAIL_TYPE_NEW_COMMENT_IN_PROFILE = "13"; + const MAIL_TYPE_CLIP_ADDED_YOUR_KALTURA = "20"; + const MAIL_TYPE_VIDEO_ADDED = "21"; + const MAIL_TYPE_ROUGHCUT_CREATED = "22"; + const MAIL_TYPE_ADDED_KALTURA_TO_YOUR_FAVORITES = "23"; + const MAIL_TYPE_NEW_COMMENT_IN_KALTURA = "24"; + const MAIL_TYPE_CLIP_ADDED = "30"; + const MAIL_TYPE_VIDEO_CREATED = "31"; + const MAIL_TYPE_ADDED_KALTURA_TO_HIS_FAVORITES = "32"; + const MAIL_TYPE_NEW_COMMENT_IN_KALTURA_YOU_CONTRIBUTED = "33"; + const MAIL_TYPE_CLIP_CONTRIBUTED = "40"; + const MAIL_TYPE_ROUGHCUT_CREATED_SUBSCRIBED = "41"; + const MAIL_TYPE_ADDED_KALTURA_TO_HIS_FAVORITES_SUBSCRIBED = "42"; + const MAIL_TYPE_NEW_COMMENT_IN_KALTURA_YOU_SUBSCRIBED = "43"; + const MAIL_TYPE_REGISTER_CONFIRM = "50"; + const MAIL_TYPE_PASSWORD_RESET = "51"; + const MAIL_TYPE_LOGIN_MAIL_RESET = "52"; + const MAIL_TYPE_REGISTER_CONFIRM_VIDEO_SERVICE = "54"; + const MAIL_TYPE_VIDEO_READY = "60"; + const MAIL_TYPE_VIDEO_IS_READY = "62"; + const MAIL_TYPE_BULK_DOWNLOAD_READY = "63"; + const MAIL_TYPE_BULKUPLOAD_FINISHED = "64"; + const MAIL_TYPE_BULKUPLOAD_FAILED = "65"; + const MAIL_TYPE_BULKUPLOAD_ABORTED = "66"; + const MAIL_TYPE_NOTIFY_ERR = "70"; + const MAIL_TYPE_ACCOUNT_UPGRADE_CONFIRM = "80"; + const MAIL_TYPE_VIDEO_SERVICE_NOTICE = "81"; + const MAIL_TYPE_VIDEO_SERVICE_NOTICE_LIMIT_REACHED = "82"; + const MAIL_TYPE_VIDEO_SERVICE_NOTICE_ACCOUNT_LOCKED = "83"; + const MAIL_TYPE_VIDEO_SERVICE_NOTICE_ACCOUNT_DELETED = "84"; + const MAIL_TYPE_VIDEO_SERVICE_NOTICE_UPGRADE_OFFER = "85"; + const MAIL_TYPE_ACCOUNT_REACTIVE_CONFIRM = "86"; + const MAIL_TYPE_SYSTEM_USER_RESET_PASSWORD = "110"; + const MAIL_TYPE_SYSTEM_USER_RESET_PASSWORD_SUCCESS = "111"; + const MAIL_TYPE_SYSTEM_USER_NEW_PASSWORD = "112"; + const MAIL_TYPE_SYSTEM_USER_CREDENTIALS_SAVED = "113"; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaMediaEntryOrderBy +{ + const CREATED_AT_ASC = "+createdAt"; + const DURATION_ASC = "+duration"; + const END_DATE_ASC = "+endDate"; + const LAST_PLAYED_AT_ASC = "+lastPlayedAt"; + const MEDIA_TYPE_ASC = "+mediaType"; + const MODERATION_COUNT_ASC = "+moderationCount"; + const NAME_ASC = "+name"; + const PARTNER_SORT_VALUE_ASC = "+partnerSortValue"; + const PLAYS_ASC = "+plays"; + const RANK_ASC = "+rank"; + const RECENT_ASC = "+recent"; + const START_DATE_ASC = "+startDate"; + const TOTAL_RANK_ASC = "+totalRank"; + const UPDATED_AT_ASC = "+updatedAt"; + const VIEWS_ASC = "+views"; + const WEIGHT_ASC = "+weight"; + const CREATED_AT_DESC = "-createdAt"; + const DURATION_DESC = "-duration"; + const END_DATE_DESC = "-endDate"; + const LAST_PLAYED_AT_DESC = "-lastPlayedAt"; + const MEDIA_TYPE_DESC = "-mediaType"; + const MODERATION_COUNT_DESC = "-moderationCount"; + const NAME_DESC = "-name"; + const PARTNER_SORT_VALUE_DESC = "-partnerSortValue"; + const PLAYS_DESC = "-plays"; + const RANK_DESC = "-rank"; + const RECENT_DESC = "-recent"; + const START_DATE_DESC = "-startDate"; + const TOTAL_RANK_DESC = "-totalRank"; + const UPDATED_AT_DESC = "-updatedAt"; + const VIEWS_DESC = "-views"; + const WEIGHT_DESC = "-weight"; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaMediaFlavorParamsOrderBy +{ +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaMediaFlavorParamsOutputOrderBy +{ +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaMediaInfoOrderBy +{ +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaMediaParserType +{ + const MEDIAINFO = "0"; + const REMOTE_MEDIAINFO = "remoteMediaInfo.RemoteMediaInfo"; + const FFMPEG = "1"; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaMediaServerOrderBy +{ + const CREATED_AT_ASC = "+createdAt"; + const UPDATED_AT_ASC = "+updatedAt"; + const CREATED_AT_DESC = "-createdAt"; + const UPDATED_AT_DESC = "-updatedAt"; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaMixEntryOrderBy +{ + const CREATED_AT_ASC = "+createdAt"; + const DURATION_ASC = "+duration"; + const END_DATE_ASC = "+endDate"; + const LAST_PLAYED_AT_ASC = "+lastPlayedAt"; + const MODERATION_COUNT_ASC = "+moderationCount"; + const NAME_ASC = "+name"; + const PARTNER_SORT_VALUE_ASC = "+partnerSortValue"; + const PLAYS_ASC = "+plays"; + const RANK_ASC = "+rank"; + const RECENT_ASC = "+recent"; + const START_DATE_ASC = "+startDate"; + const TOTAL_RANK_ASC = "+totalRank"; + const UPDATED_AT_ASC = "+updatedAt"; + const VIEWS_ASC = "+views"; + const WEIGHT_ASC = "+weight"; + const CREATED_AT_DESC = "-createdAt"; + const DURATION_DESC = "-duration"; + const END_DATE_DESC = "-endDate"; + const LAST_PLAYED_AT_DESC = "-lastPlayedAt"; + const MODERATION_COUNT_DESC = "-moderationCount"; + const NAME_DESC = "-name"; + const PARTNER_SORT_VALUE_DESC = "-partnerSortValue"; + const PLAYS_DESC = "-plays"; + const RANK_DESC = "-rank"; + const RECENT_DESC = "-recent"; + const START_DATE_DESC = "-startDate"; + const TOTAL_RANK_DESC = "-totalRank"; + const UPDATED_AT_DESC = "-updatedAt"; + const VIEWS_DESC = "-views"; + const WEIGHT_DESC = "-weight"; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaModerationFlagStatus +{ + const PENDING = "1"; + const MODERATED = "2"; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaModerationObjectType +{ + const ENTRY = "2"; + const USER = "3"; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaPartnerOrderBy +{ + const ADMIN_EMAIL_ASC = "+adminEmail"; + const ADMIN_NAME_ASC = "+adminName"; + const CREATED_AT_ASC = "+createdAt"; + const ID_ASC = "+id"; + const NAME_ASC = "+name"; + const STATUS_ASC = "+status"; + const WEBSITE_ASC = "+website"; + const ADMIN_EMAIL_DESC = "-adminEmail"; + const ADMIN_NAME_DESC = "-adminName"; + const CREATED_AT_DESC = "-createdAt"; + const ID_DESC = "-id"; + const NAME_DESC = "-name"; + const STATUS_DESC = "-status"; + const WEBSITE_DESC = "-website"; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaPermissionItemOrderBy +{ + const CREATED_AT_ASC = "+createdAt"; + const ID_ASC = "+id"; + const UPDATED_AT_ASC = "+updatedAt"; + const CREATED_AT_DESC = "-createdAt"; + const ID_DESC = "-id"; + const UPDATED_AT_DESC = "-updatedAt"; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaPermissionItemType +{ + const API_ACTION_ITEM = "kApiActionPermissionItem"; + const API_PARAMETER_ITEM = "kApiParameterPermissionItem"; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaPermissionOrderBy +{ + const CREATED_AT_ASC = "+createdAt"; + const ID_ASC = "+id"; + const NAME_ASC = "+name"; + const UPDATED_AT_ASC = "+updatedAt"; + const CREATED_AT_DESC = "-createdAt"; + const ID_DESC = "-id"; + const NAME_DESC = "-name"; + const UPDATED_AT_DESC = "-updatedAt"; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaPlayableEntryOrderBy +{ + const CREATED_AT_ASC = "+createdAt"; + const DURATION_ASC = "+duration"; + const END_DATE_ASC = "+endDate"; + const LAST_PLAYED_AT_ASC = "+lastPlayedAt"; + const MODERATION_COUNT_ASC = "+moderationCount"; + const NAME_ASC = "+name"; + const PARTNER_SORT_VALUE_ASC = "+partnerSortValue"; + const PLAYS_ASC = "+plays"; + const RANK_ASC = "+rank"; + const RECENT_ASC = "+recent"; + const START_DATE_ASC = "+startDate"; + const TOTAL_RANK_ASC = "+totalRank"; + const UPDATED_AT_ASC = "+updatedAt"; + const VIEWS_ASC = "+views"; + const WEIGHT_ASC = "+weight"; + const CREATED_AT_DESC = "-createdAt"; + const DURATION_DESC = "-duration"; + const END_DATE_DESC = "-endDate"; + const LAST_PLAYED_AT_DESC = "-lastPlayedAt"; + const MODERATION_COUNT_DESC = "-moderationCount"; + const NAME_DESC = "-name"; + const PARTNER_SORT_VALUE_DESC = "-partnerSortValue"; + const PLAYS_DESC = "-plays"; + const RANK_DESC = "-rank"; + const RECENT_DESC = "-recent"; + const START_DATE_DESC = "-startDate"; + const TOTAL_RANK_DESC = "-totalRank"; + const UPDATED_AT_DESC = "-updatedAt"; + const VIEWS_DESC = "-views"; + const WEIGHT_DESC = "-weight"; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaPlaybackProtocol +{ + const APPLE_HTTP = "applehttp"; + const AUTO = "auto"; + const AKAMAI_HD = "hdnetwork"; + const AKAMAI_HDS = "hdnetworkmanifest"; + const HDS = "hds"; + const HLS = "hls"; + const HTTP = "http"; + const MPEG_DASH = "mpegdash"; + const RTMP = "rtmp"; + const RTSP = "rtsp"; + const SILVER_LIGHT = "sl"; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaPlaylistOrderBy +{ + const CREATED_AT_ASC = "+createdAt"; + const END_DATE_ASC = "+endDate"; + const MODERATION_COUNT_ASC = "+moderationCount"; + const NAME_ASC = "+name"; + const PARTNER_SORT_VALUE_ASC = "+partnerSortValue"; + const RANK_ASC = "+rank"; + const RECENT_ASC = "+recent"; + const START_DATE_ASC = "+startDate"; + const TOTAL_RANK_ASC = "+totalRank"; + const UPDATED_AT_ASC = "+updatedAt"; + const WEIGHT_ASC = "+weight"; + const CREATED_AT_DESC = "-createdAt"; + const END_DATE_DESC = "-endDate"; + const MODERATION_COUNT_DESC = "-moderationCount"; + const NAME_DESC = "-name"; + const PARTNER_SORT_VALUE_DESC = "-partnerSortValue"; + const RANK_DESC = "-rank"; + const RECENT_DESC = "-recent"; + const START_DATE_DESC = "-startDate"; + const TOTAL_RANK_DESC = "-totalRank"; + const UPDATED_AT_DESC = "-updatedAt"; + const WEIGHT_DESC = "-weight"; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaReportInterval +{ + const DAYS = "days"; + const MONTHS = "months"; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaReportOrderBy +{ + const CREATED_AT_ASC = "+createdAt"; + const CREATED_AT_DESC = "-createdAt"; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaRuleActionType +{ + const BLOCK = "1"; + const PREVIEW = "2"; + const LIMIT_FLAVORS = "3"; + const ADD_TO_STORAGE = "4"; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaSchemaType +{ + const BULK_UPLOAD_RESULT_XML = "bulkUploadXml.bulkUploadResultXML"; + const BULK_UPLOAD_XML = "bulkUploadXml.bulkUploadXML"; + const INGEST_API = "cuePoint.ingestAPI"; + const SERVE_API = "cuePoint.serveAPI"; + const DROP_FOLDER_XML = "dropFolderXmlBulkUpload.dropFolderXml"; + const SYNDICATION = "syndication"; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaSearchConditionComparison +{ + const EQUAL = "1"; + const GREATER_THAN = "2"; + const GREATER_THAN_OR_EQUAL = "3"; + const LESS_THAN = "4"; + const LESS_THAN_OR_EQUAL = "5"; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaSourceType +{ + const LIMELIGHT_LIVE = "limeLight.LIVE_STREAM"; + const VELOCIX_LIVE = "velocix.VELOCIX_LIVE"; + const FILE = "1"; + const WEBCAM = "2"; + const URL = "5"; + const SEARCH_PROVIDER = "6"; + const AKAMAI_LIVE = "29"; + const MANUAL_LIVE_STREAM = "30"; + const AKAMAI_UNIVERSAL_LIVE = "31"; + const LIVE_STREAM = "32"; + const LIVE_CHANNEL = "33"; + const RECORDED_LIVE = "34"; + const CLIP = "35"; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaStorageProfileOrderBy +{ + const CREATED_AT_ASC = "+createdAt"; + const UPDATED_AT_ASC = "+updatedAt"; + const CREATED_AT_DESC = "-createdAt"; + const UPDATED_AT_DESC = "-updatedAt"; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaStorageProfileProtocol +{ + const KONTIKI = "kontiki.KONTIKI"; + const KALTURA_DC = "0"; + const FTP = "1"; + const SCP = "2"; + const SFTP = "3"; + const S3 = "6"; + const LOCAL = "7"; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaSyndicationFeedEntriesOrderBy +{ + const CREATED_AT_DESC = "-createdAt"; + const RECENT = "recent"; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaTaggedObjectType +{ + const ENTRY = "1"; + const CATEGORY = "2"; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaThumbAssetOrderBy +{ + const CREATED_AT_ASC = "+createdAt"; + const DELETED_AT_ASC = "+deletedAt"; + const SIZE_ASC = "+size"; + const UPDATED_AT_ASC = "+updatedAt"; + const CREATED_AT_DESC = "-createdAt"; + const DELETED_AT_DESC = "-deletedAt"; + const SIZE_DESC = "-size"; + const UPDATED_AT_DESC = "-updatedAt"; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaThumbParamsOrderBy +{ +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaThumbParamsOutputOrderBy +{ +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaTubeMogulSyndicationFeedCategories +{ + const ANIMALS_AND_PETS = "Animals & Pets"; + const ARTS_AND_ANIMATION = "Arts & Animation"; + const AUTOS = "Autos"; + const COMEDY = "Comedy"; + const COMMERCIALS_PROMOTIONAL = "Commercials/Promotional"; + const ENTERTAINMENT = "Entertainment"; + const FAMILY_AND_KIDS = "Family & Kids"; + const HOW_TO_INSTRUCTIONAL_DIY = "How To/Instructional/DIY"; + const MUSIC = "Music"; + const NEWS_AND_BLOGS = "News & Blogs"; + const SCIENCE_AND_TECHNOLOGY = "Science & Technology"; + const SPORTS = "Sports"; + const TRAVEL_AND_PLACES = "Travel & Places"; + const VIDEO_GAMES = "Video Games"; + const VLOGS_PEOPLE = "Vlogs & People"; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaTubeMogulSyndicationFeedOrderBy +{ + const CREATED_AT_ASC = "+createdAt"; + const NAME_ASC = "+name"; + const PLAYLIST_ID_ASC = "+playlistId"; + const TYPE_ASC = "+type"; + const UPDATED_AT_ASC = "+updatedAt"; + const CREATED_AT_DESC = "-createdAt"; + const NAME_DESC = "-name"; + const PLAYLIST_ID_DESC = "-playlistId"; + const TYPE_DESC = "-type"; + const UPDATED_AT_DESC = "-updatedAt"; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaUiConfOrderBy +{ + const CREATED_AT_ASC = "+createdAt"; + const UPDATED_AT_ASC = "+updatedAt"; + const CREATED_AT_DESC = "-createdAt"; + const UPDATED_AT_DESC = "-updatedAt"; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaUploadTokenOrderBy +{ + const CREATED_AT_ASC = "+createdAt"; + const CREATED_AT_DESC = "-createdAt"; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaUserLoginDataOrderBy +{ +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaUserOrderBy +{ + const CREATED_AT_ASC = "+createdAt"; + const ID_ASC = "+id"; + const CREATED_AT_DESC = "-createdAt"; + const ID_DESC = "-id"; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaUserRoleOrderBy +{ + const CREATED_AT_ASC = "+createdAt"; + const ID_ASC = "+id"; + const NAME_ASC = "+name"; + const UPDATED_AT_ASC = "+updatedAt"; + const CREATED_AT_DESC = "-createdAt"; + const ID_DESC = "-id"; + const NAME_DESC = "-name"; + const UPDATED_AT_DESC = "-updatedAt"; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaVideoCodec +{ + const NONE = ""; + const APCH = "apch"; + const APCN = "apcn"; + const APCO = "apco"; + const APCS = "apcs"; + const COPY = "copy"; + const DNXHD = "dnxhd"; + const DV = "dv"; + const FLV = "flv"; + const H263 = "h263"; + const H264 = "h264"; + const H264B = "h264b"; + const H264H = "h264h"; + const H264M = "h264m"; + const MPEG2 = "mpeg2"; + const MPEG4 = "mpeg4"; + const THEORA = "theora"; + const VP6 = "vp6"; + const VP8 = "vp8"; + const WMV2 = "wmv2"; + const WMV3 = "wmv3"; + const WVC1A = "wvc1a"; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaWidgetOrderBy +{ + const CREATED_AT_ASC = "+createdAt"; + const CREATED_AT_DESC = "-createdAt"; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaYahooSyndicationFeedAdultValues +{ + const ADULT = "adult"; + const NON_ADULT = "nonadult"; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaYahooSyndicationFeedCategories +{ + const ACTION = "Action"; + const ANIMALS = "Animals"; + const ART_AND_ANIMATION = "Art & Animation"; + const COMMERCIALS = "Commercials"; + const ENTERTAINMENT_AND_TV = "Entertainment & TV"; + const FAMILY = "Family"; + const FOOD = "Food"; + const FUNNY_VIDEOS = "Funny Videos"; + const GAMES = "Games"; + const HEALTH_AND_BEAUTY = "Health & Beauty"; + const HOW_TO = "How-To"; + const MOVIES_AND_SHORTS = "Movies & Shorts"; + const MUSIC = "Music"; + const NEWS_AND_POLITICS = "News & Politics"; + const PEOPLE_AND_VLOGS = "People & Vlogs"; + const PRODUCTS_AND_TECH = "Products & Tech."; + const SCIENCE_AND_ENVIRONMENT = "Science & Environment"; + const SPORTS = "Sports"; + const TRANSPORTATION = "Transportation"; + const TRAVEL = "Travel"; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaYahooSyndicationFeedOrderBy +{ + const CREATED_AT_ASC = "+createdAt"; + const NAME_ASC = "+name"; + const PLAYLIST_ID_ASC = "+playlistId"; + const TYPE_ASC = "+type"; + const UPDATED_AT_ASC = "+updatedAt"; + const CREATED_AT_DESC = "-createdAt"; + const NAME_DESC = "-name"; + const PLAYLIST_ID_DESC = "-playlistId"; + const TYPE_DESC = "-type"; + const UPDATED_AT_DESC = "-updatedAt"; +} + diff --git a/local/kaltura/API/KalturaPlugins/KalturaAbcScreenersWatermarkAccessControlClientPlugin.php b/local/kaltura/API/KalturaPlugins/KalturaAbcScreenersWatermarkAccessControlClientPlugin.php new file mode 100644 index 0000000000000..6f68c5fa37a5d --- /dev/null +++ b/local/kaltura/API/KalturaPlugins/KalturaAbcScreenersWatermarkAccessControlClientPlugin.php @@ -0,0 +1,84 @@ +. +// +// @ignore +// =================================================================================================== + +/** + * @package Kaltura + * @subpackage Client + */ +require_once(dirname(__FILE__) . "/../KalturaClientBase.php"); +require_once(dirname(__FILE__) . "/../KalturaEnums.php"); +require_once(dirname(__FILE__) . "/../KalturaTypes.php"); + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaABCScreenersWatermarkCondition extends KalturaCondition +{ + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaAbcScreenersWatermarkAccessControlClientPlugin extends KalturaClientPlugin +{ + protected function __construct(KalturaClient $client) + { + parent::__construct($client); + } + + /** + * @return KalturaAbcScreenersWatermarkAccessControlClientPlugin + */ + public static function get(KalturaClient $client) + { + return new KalturaAbcScreenersWatermarkAccessControlClientPlugin($client); + } + + /** + * @return array + */ + public function getServices() + { + $services = array( + ); + return $services; + } + + /** + * @return string + */ + public function getName() + { + return 'abcScreenersWatermarkAccessControl'; + } +} + diff --git a/local/kaltura/API/KalturaPlugins/KalturaAdCuePointClientPlugin.php b/local/kaltura/API/KalturaPlugins/KalturaAdCuePointClientPlugin.php new file mode 100644 index 0000000000000..7cd819707c3be --- /dev/null +++ b/local/kaltura/API/KalturaPlugins/KalturaAdCuePointClientPlugin.php @@ -0,0 +1,253 @@ +. +// +// @ignore +// =================================================================================================== + +/** + * @package Kaltura + * @subpackage Client + */ +require_once(dirname(__FILE__) . "/../KalturaClientBase.php"); +require_once(dirname(__FILE__) . "/../KalturaEnums.php"); +require_once(dirname(__FILE__) . "/../KalturaTypes.php"); +require_once(dirname(__FILE__) . "/KalturaCuePointClientPlugin.php"); + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaAdCuePointOrderBy +{ + const CREATED_AT_ASC = "+createdAt"; + const DURATION_ASC = "+duration"; + const END_TIME_ASC = "+endTime"; + const PARTNER_SORT_VALUE_ASC = "+partnerSortValue"; + const START_TIME_ASC = "+startTime"; + const UPDATED_AT_ASC = "+updatedAt"; + const CREATED_AT_DESC = "-createdAt"; + const DURATION_DESC = "-duration"; + const END_TIME_DESC = "-endTime"; + const PARTNER_SORT_VALUE_DESC = "-partnerSortValue"; + const START_TIME_DESC = "-startTime"; + const UPDATED_AT_DESC = "-updatedAt"; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaAdProtocolType +{ + const CUSTOM = "0"; + const VAST = "1"; + const VAST_2_0 = "2"; + const VPAID = "3"; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaAdType +{ + const VIDEO = "1"; + const OVERLAY = "2"; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaAdCuePoint extends KalturaCuePoint +{ + /** + * + * + * @var KalturaAdProtocolType + * @insertonly + */ + public $protocolType = null; + + /** + * + * + * @var string + */ + public $sourceUrl = null; + + /** + * + * + * @var KalturaAdType + */ + public $adType = null; + + /** + * + * + * @var string + */ + public $title = null; + + /** + * + * + * @var int + */ + public $endTime = null; + + /** + * Duration in milliseconds + * + * + * @var int + * @readonly + */ + public $duration = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +abstract class KalturaAdCuePointBaseFilter extends KalturaCuePointFilter +{ + /** + * + * + * @var KalturaAdProtocolType + */ + public $protocolTypeEqual = null; + + /** + * + * + * @var string + */ + public $protocolTypeIn = null; + + /** + * + * + * @var string + */ + public $titleLike = null; + + /** + * + * + * @var string + */ + public $titleMultiLikeOr = null; + + /** + * + * + * @var string + */ + public $titleMultiLikeAnd = null; + + /** + * + * + * @var int + */ + public $endTimeGreaterThanOrEqual = null; + + /** + * + * + * @var int + */ + public $endTimeLessThanOrEqual = null; + + /** + * + * + * @var int + */ + public $durationGreaterThanOrEqual = null; + + /** + * + * + * @var int + */ + public $durationLessThanOrEqual = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaAdCuePointFilter extends KalturaAdCuePointBaseFilter +{ + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaAdCuePointClientPlugin extends KalturaClientPlugin +{ + protected function __construct(KalturaClient $client) + { + parent::__construct($client); + } + + /** + * @return KalturaAdCuePointClientPlugin + */ + public static function get(KalturaClient $client) + { + return new KalturaAdCuePointClientPlugin($client); + } + + /** + * @return array + */ + public function getServices() + { + $services = array( + ); + return $services; + } + + /** + * @return string + */ + public function getName() + { + return 'adCuePoint'; + } +} + diff --git a/local/kaltura/API/KalturaPlugins/KalturaAnnotationClientPlugin.php b/local/kaltura/API/KalturaPlugins/KalturaAnnotationClientPlugin.php new file mode 100644 index 0000000000000..d2fd7a9629d54 --- /dev/null +++ b/local/kaltura/API/KalturaPlugins/KalturaAnnotationClientPlugin.php @@ -0,0 +1,450 @@ +. +// +// @ignore +// =================================================================================================== + +/** + * @package Kaltura + * @subpackage Client + */ +require_once(dirname(__FILE__) . "/../KalturaClientBase.php"); +require_once(dirname(__FILE__) . "/../KalturaEnums.php"); +require_once(dirname(__FILE__) . "/../KalturaTypes.php"); +require_once(dirname(__FILE__) . "/KalturaCuePointClientPlugin.php"); + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaAnnotationOrderBy +{ + const CREATED_AT_ASC = "+createdAt"; + const DURATION_ASC = "+duration"; + const END_TIME_ASC = "+endTime"; + const PARTNER_SORT_VALUE_ASC = "+partnerSortValue"; + const START_TIME_ASC = "+startTime"; + const UPDATED_AT_ASC = "+updatedAt"; + const CREATED_AT_DESC = "-createdAt"; + const DURATION_DESC = "-duration"; + const END_TIME_DESC = "-endTime"; + const PARTNER_SORT_VALUE_DESC = "-partnerSortValue"; + const START_TIME_DESC = "-startTime"; + const UPDATED_AT_DESC = "-updatedAt"; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaAnnotation extends KalturaCuePoint +{ + /** + * + * + * @var string + * @insertonly + */ + public $parentId = null; + + /** + * + * + * @var string + */ + public $text = null; + + /** + * End time in milliseconds + * + * + * @var int + */ + public $endTime = null; + + /** + * Duration in milliseconds + * + * + * @var int + * @readonly + */ + public $duration = null; + + /** + * Depth in the tree + * + * + * @var int + * @readonly + */ + public $depth = null; + + /** + * Number of all descendants + * + * + * @var int + * @readonly + */ + public $childrenCount = null; + + /** + * Number of children, first generation only. + * + * + * @var int + * @readonly + */ + public $directChildrenCount = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaAnnotationListResponse extends KalturaObjectBase +{ + /** + * + * + * @var array of KalturaAnnotation + * @readonly + */ + public $objects; + + /** + * + * + * @var int + * @readonly + */ + public $totalCount = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +abstract class KalturaAnnotationBaseFilter extends KalturaCuePointFilter +{ + /** + * + * + * @var string + */ + public $parentIdEqual = null; + + /** + * + * + * @var string + */ + public $parentIdIn = null; + + /** + * + * + * @var string + */ + public $textLike = null; + + /** + * + * + * @var string + */ + public $textMultiLikeOr = null; + + /** + * + * + * @var string + */ + public $textMultiLikeAnd = null; + + /** + * + * + * @var int + */ + public $endTimeGreaterThanOrEqual = null; + + /** + * + * + * @var int + */ + public $endTimeLessThanOrEqual = null; + + /** + * + * + * @var int + */ + public $durationGreaterThanOrEqual = null; + + /** + * + * + * @var int + */ + public $durationLessThanOrEqual = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaAnnotationFilter extends KalturaAnnotationBaseFilter +{ + +} + + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaAnnotationService extends KalturaServiceBase +{ + function __construct(KalturaClient $client = null) + { + parent::__construct($client); + } + + /** + * Allows you to add an annotation object associated with an entry + * + * @param KalturaCuePoint $annotation + * @return KalturaAnnotation + */ + function add(KalturaCuePoint $annotation) + { + $kparams = array(); + $this->client->addParam($kparams, "annotation", $annotation->toParams()); + $this->client->queueServiceActionCall("annotation_annotation", "add", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaAnnotation"); + return $resultObject; + } + + /** + * Update annotation by id + * + * @param string $id + * @param KalturaCuePoint $annotation + * @return KalturaAnnotation + */ + function update($id, KalturaCuePoint $annotation) + { + $kparams = array(); + $this->client->addParam($kparams, "id", $id); + $this->client->addParam($kparams, "annotation", $annotation->toParams()); + $this->client->queueServiceActionCall("annotation_annotation", "update", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaAnnotation"); + return $resultObject; + } + + /** + * List annotation objects by filter and pager + * + * @param KalturaCuePointFilter $filter + * @param KalturaFilterPager $pager + * @return KalturaAnnotationListResponse + */ + function listAction(KalturaCuePointFilter $filter = null, KalturaFilterPager $pager = null) + { + $kparams = array(); + if ($filter !== null) + $this->client->addParam($kparams, "filter", $filter->toParams()); + if ($pager !== null) + $this->client->addParam($kparams, "pager", $pager->toParams()); + $this->client->queueServiceActionCall("annotation_annotation", "list", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaAnnotationListResponse"); + return $resultObject; + } + + /** + * Allows you to add multiple cue points objects by uploading XML that contains multiple cue point definitions + * + * @param file $fileData + * @return KalturaCuePointListResponse + */ + function addFromBulk($fileData) + { + $kparams = array(); + $kfiles = array(); + $this->client->addParam($kfiles, "fileData", $fileData); + $this->client->queueServiceActionCall("annotation_annotation", "addFromBulk", $kparams, $kfiles); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaCuePointListResponse"); + return $resultObject; + } + + /** + * Download multiple cue points objects as XML definitions + * + * @param KalturaCuePointFilter $filter + * @param KalturaFilterPager $pager + * @return file + */ + function serveBulk(KalturaCuePointFilter $filter = null, KalturaFilterPager $pager = null) + { + $kparams = array(); + if ($filter !== null) + $this->client->addParam($kparams, "filter", $filter->toParams()); + if ($pager !== null) + $this->client->addParam($kparams, "pager", $pager->toParams()); + $this->client->queueServiceActionCall("annotation_annotation", "serveBulk", $kparams); + if(!$this->client->getDestinationPath() && !$this->client->getReturnServedResult()) + return $this->client->getServeUrl(); + return $this->client->doQueue(); + } + + /** + * Retrieve an CuePoint object by id + * + * @param string $id + * @return KalturaCuePoint + */ + function get($id) + { + $kparams = array(); + $this->client->addParam($kparams, "id", $id); + $this->client->queueServiceActionCall("annotation_annotation", "get", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaCuePoint"); + return $resultObject; + } + + /** + * Count cue point objects by filter + * + * @param KalturaCuePointFilter $filter + * @return int + */ + function count(KalturaCuePointFilter $filter = null) + { + $kparams = array(); + if ($filter !== null) + $this->client->addParam($kparams, "filter", $filter->toParams()); + $this->client->queueServiceActionCall("annotation_annotation", "count", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "integer"); + return $resultObject; + } + + /** + * Delete cue point by id, and delete all children cue points + * + * @param string $id + * @return + */ + function delete($id) + { + $kparams = array(); + $this->client->addParam($kparams, "id", $id); + $this->client->queueServiceActionCall("annotation_annotation", "delete", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "null"); + return $resultObject; + } +} +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaAnnotationClientPlugin extends KalturaClientPlugin +{ + /** + * @var KalturaAnnotationService + */ + public $annotation = null; + + protected function __construct(KalturaClient $client) + { + parent::__construct($client); + $this->annotation = new KalturaAnnotationService($client); + } + + /** + * @return KalturaAnnotationClientPlugin + */ + public static function get(KalturaClient $client) + { + return new KalturaAnnotationClientPlugin($client); + } + + /** + * @return array + */ + public function getServices() + { + $services = array( + 'annotation' => $this->annotation, + ); + return $services; + } + + /** + * @return string + */ + public function getName() + { + return 'annotation'; + } +} + diff --git a/local/kaltura/API/KalturaPlugins/KalturaAsperaClientPlugin.php b/local/kaltura/API/KalturaPlugins/KalturaAsperaClientPlugin.php new file mode 100644 index 0000000000000..b3044303955ae --- /dev/null +++ b/local/kaltura/API/KalturaPlugins/KalturaAsperaClientPlugin.php @@ -0,0 +1,113 @@ +. +// +// @ignore +// =================================================================================================== + +/** + * @package Kaltura + * @subpackage Client + */ +require_once(dirname(__FILE__) . "/../KalturaClientBase.php"); +require_once(dirname(__FILE__) . "/../KalturaEnums.php"); +require_once(dirname(__FILE__) . "/../KalturaTypes.php"); + + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaAsperaService extends KalturaServiceBase +{ + function __construct(KalturaClient $client = null) + { + parent::__construct($client); + } + + /** + * + * + * @param string $flavorAssetId + * @return string + */ + function getFaspUrl($flavorAssetId) + { + $kparams = array(); + $this->client->addParam($kparams, "flavorAssetId", $flavorAssetId); + $this->client->queueServiceActionCall("aspera_aspera", "getFaspUrl", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "string"); + return $resultObject; + } +} +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaAsperaClientPlugin extends KalturaClientPlugin +{ + /** + * @var KalturaAsperaService + */ + public $aspera = null; + + protected function __construct(KalturaClient $client) + { + parent::__construct($client); + $this->aspera = new KalturaAsperaService($client); + } + + /** + * @return KalturaAsperaClientPlugin + */ + public static function get(KalturaClient $client) + { + return new KalturaAsperaClientPlugin($client); + } + + /** + * @return array + */ + public function getServices() + { + $services = array( + 'aspera' => $this->aspera, + ); + return $services; + } + + /** + * @return string + */ + public function getName() + { + return 'aspera'; + } +} + diff --git a/local/kaltura/API/KalturaPlugins/KalturaAttachmentClientPlugin.php b/local/kaltura/API/KalturaPlugins/KalturaAttachmentClientPlugin.php new file mode 100644 index 0000000000000..61fecf3fff1d5 --- /dev/null +++ b/local/kaltura/API/KalturaPlugins/KalturaAttachmentClientPlugin.php @@ -0,0 +1,435 @@ +. +// +// @ignore +// =================================================================================================== + +/** + * @package Kaltura + * @subpackage Client + */ +require_once(dirname(__FILE__) . "/../KalturaClientBase.php"); +require_once(dirname(__FILE__) . "/../KalturaEnums.php"); +require_once(dirname(__FILE__) . "/../KalturaTypes.php"); + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaAttachmentAssetStatus +{ + const ERROR = -1; + const QUEUED = 0; + const READY = 2; + const DELETED = 3; + const IMPORTING = 7; + const EXPORTING = 9; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaAttachmentAssetOrderBy +{ + const CREATED_AT_ASC = "+createdAt"; + const DELETED_AT_ASC = "+deletedAt"; + const SIZE_ASC = "+size"; + const UPDATED_AT_ASC = "+updatedAt"; + const CREATED_AT_DESC = "-createdAt"; + const DELETED_AT_DESC = "-deletedAt"; + const SIZE_DESC = "-size"; + const UPDATED_AT_DESC = "-updatedAt"; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaAttachmentType +{ + const TEXT = "1"; + const MEDIA = "2"; + const DOCUMENT = "3"; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaAttachmentAsset extends KalturaAsset +{ + /** + * The filename of the attachment asset content + * + * + * @var string + */ + public $filename = null; + + /** + * Attachment asset title + * + * + * @var string + */ + public $title = null; + + /** + * The attachment format + * + * + * @var KalturaAttachmentType + */ + public $format = null; + + /** + * The status of the asset + * + * + * @var KalturaAttachmentAssetStatus + * @readonly + */ + public $status = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaAttachmentAssetListResponse extends KalturaObjectBase +{ + /** + * + * + * @var array of KalturaAttachmentAsset + * @readonly + */ + public $objects; + + /** + * + * + * @var int + * @readonly + */ + public $totalCount = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +abstract class KalturaAttachmentAssetBaseFilter extends KalturaAssetFilter +{ + /** + * + * + * @var KalturaAttachmentType + */ + public $formatEqual = null; + + /** + * + * + * @var string + */ + public $formatIn = null; + + /** + * + * + * @var KalturaAttachmentAssetStatus + */ + public $statusEqual = null; + + /** + * + * + * @var string + */ + public $statusIn = null; + + /** + * + * + * @var string + */ + public $statusNotIn = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaAttachmentAssetFilter extends KalturaAttachmentAssetBaseFilter +{ + +} + + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaAttachmentAssetService extends KalturaServiceBase +{ + function __construct(KalturaClient $client = null) + { + parent::__construct($client); + } + + /** + * Add attachment asset + * + * @param string $entryId + * @param KalturaAttachmentAsset $attachmentAsset + * @return KalturaAttachmentAsset + */ + function add($entryId, KalturaAttachmentAsset $attachmentAsset) + { + $kparams = array(); + $this->client->addParam($kparams, "entryId", $entryId); + $this->client->addParam($kparams, "attachmentAsset", $attachmentAsset->toParams()); + $this->client->queueServiceActionCall("attachment_attachmentasset", "add", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaAttachmentAsset"); + return $resultObject; + } + + /** + * Update content of attachment asset + * + * @param string $id + * @param KalturaContentResource $contentResource + * @return KalturaAttachmentAsset + */ + function setContent($id, KalturaContentResource $contentResource) + { + $kparams = array(); + $this->client->addParam($kparams, "id", $id); + $this->client->addParam($kparams, "contentResource", $contentResource->toParams()); + $this->client->queueServiceActionCall("attachment_attachmentasset", "setContent", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaAttachmentAsset"); + return $resultObject; + } + + /** + * Update attachment asset + * + * @param string $id + * @param KalturaAttachmentAsset $attachmentAsset + * @return KalturaAttachmentAsset + */ + function update($id, KalturaAttachmentAsset $attachmentAsset) + { + $kparams = array(); + $this->client->addParam($kparams, "id", $id); + $this->client->addParam($kparams, "attachmentAsset", $attachmentAsset->toParams()); + $this->client->queueServiceActionCall("attachment_attachmentasset", "update", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaAttachmentAsset"); + return $resultObject; + } + + /** + * Get download URL for the asset + * + * @param string $id + * @param int $storageId + * @return string + */ + function getUrl($id, $storageId = null) + { + $kparams = array(); + $this->client->addParam($kparams, "id", $id); + $this->client->addParam($kparams, "storageId", $storageId); + $this->client->queueServiceActionCall("attachment_attachmentasset", "getUrl", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "string"); + return $resultObject; + } + + /** + * Get remote storage existing paths for the asset + * + * @param string $id + * @return KalturaRemotePathListResponse + */ + function getRemotePaths($id) + { + $kparams = array(); + $this->client->addParam($kparams, "id", $id); + $this->client->queueServiceActionCall("attachment_attachmentasset", "getRemotePaths", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaRemotePathListResponse"); + return $resultObject; + } + + /** + * Serves attachment by its id + * + * @param string $attachmentAssetId + * @return file + */ + function serve($attachmentAssetId) + { + $kparams = array(); + $this->client->addParam($kparams, "attachmentAssetId", $attachmentAssetId); + $this->client->queueServiceActionCall("attachment_attachmentasset", "serve", $kparams); + if(!$this->client->getDestinationPath() && !$this->client->getReturnServedResult()) + return $this->client->getServeUrl(); + return $this->client->doQueue(); + } + + /** + * + * + * @param string $attachmentAssetId + * @return KalturaAttachmentAsset + */ + function get($attachmentAssetId) + { + $kparams = array(); + $this->client->addParam($kparams, "attachmentAssetId", $attachmentAssetId); + $this->client->queueServiceActionCall("attachment_attachmentasset", "get", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaAttachmentAsset"); + return $resultObject; + } + + /** + * List attachment Assets by filter and pager + * + * @param KalturaAssetFilter $filter + * @param KalturaFilterPager $pager + * @return KalturaAttachmentAssetListResponse + */ + function listAction(KalturaAssetFilter $filter = null, KalturaFilterPager $pager = null) + { + $kparams = array(); + if ($filter !== null) + $this->client->addParam($kparams, "filter", $filter->toParams()); + if ($pager !== null) + $this->client->addParam($kparams, "pager", $pager->toParams()); + $this->client->queueServiceActionCall("attachment_attachmentasset", "list", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaAttachmentAssetListResponse"); + return $resultObject; + } + + /** + * + * + * @param string $attachmentAssetId + * @return + */ + function delete($attachmentAssetId) + { + $kparams = array(); + $this->client->addParam($kparams, "attachmentAssetId", $attachmentAssetId); + $this->client->queueServiceActionCall("attachment_attachmentasset", "delete", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "null"); + return $resultObject; + } +} +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaAttachmentClientPlugin extends KalturaClientPlugin +{ + /** + * @var KalturaAttachmentAssetService + */ + public $attachmentAsset = null; + + protected function __construct(KalturaClient $client) + { + parent::__construct($client); + $this->attachmentAsset = new KalturaAttachmentAssetService($client); + } + + /** + * @return KalturaAttachmentClientPlugin + */ + public static function get(KalturaClient $client) + { + return new KalturaAttachmentClientPlugin($client); + } + + /** + * @return array + */ + public function getServices() + { + $services = array( + 'attachmentAsset' => $this->attachmentAsset, + ); + return $services; + } + + /** + * @return string + */ + public function getName() + { + return 'attachment'; + } +} + diff --git a/local/kaltura/API/KalturaPlugins/KalturaAuditClientPlugin.php b/local/kaltura/API/KalturaPlugins/KalturaAuditClientPlugin.php new file mode 100644 index 0000000000000..a925d7a9467a8 --- /dev/null +++ b/local/kaltura/API/KalturaPlugins/KalturaAuditClientPlugin.php @@ -0,0 +1,893 @@ +. +// +// @ignore +// =================================================================================================== + +/** + * @package Kaltura + * @subpackage Client + */ +require_once(dirname(__FILE__) . "/../KalturaClientBase.php"); +require_once(dirname(__FILE__) . "/../KalturaEnums.php"); +require_once(dirname(__FILE__) . "/../KalturaTypes.php"); + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaAuditTrailChangeXmlNodeType +{ + const CHANGED = 1; + const ADDED = 2; + const REMOVED = 3; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaAuditTrailContext +{ + const CLIENT = -1; + const SCRIPT = 0; + const PS2 = 1; + const API_V3 = 2; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaAuditTrailFileSyncType +{ + const FILE = 1; + const LINK = 2; + const URL = 3; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaAuditTrailStatus +{ + const PENDING = 1; + const READY = 2; + const FAILED = 3; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaAuditTrailAction +{ + const CHANGED = "CHANGED"; + const CONTENT_VIEWED = "CONTENT_VIEWED"; + const COPIED = "COPIED"; + const CREATED = "CREATED"; + const DELETED = "DELETED"; + const FILE_SYNC_CREATED = "FILE_SYNC_CREATED"; + const RELATION_ADDED = "RELATION_ADDED"; + const RELATION_REMOVED = "RELATION_REMOVED"; + const VIEWED = "VIEWED"; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaAuditTrailObjectType +{ + const BATCH_JOB = "BatchJob"; + const EMAIL_INGESTION_PROFILE = "EmailIngestionProfile"; + const FILE_SYNC = "FileSync"; + const KSHOW_KUSER = "KshowKuser"; + const METADATA = "Metadata"; + const METADATA_PROFILE = "MetadataProfile"; + const PARTNER = "Partner"; + const PERMISSION = "Permission"; + const UPLOAD_TOKEN = "UploadToken"; + const USER_LOGIN_DATA = "UserLoginData"; + const USER_ROLE = "UserRole"; + const ACCESS_CONTROL = "accessControl"; + const CATEGORY = "category"; + const CONVERSION_PROFILE_2 = "conversionProfile2"; + const ENTRY = "entry"; + const FLAVOR_ASSET = "flavorAsset"; + const FLAVOR_PARAMS = "flavorParams"; + const FLAVOR_PARAMS_CONVERSION_PROFILE = "flavorParamsConversionProfile"; + const FLAVOR_PARAMS_OUTPUT = "flavorParamsOutput"; + const KSHOW = "kshow"; + const KUSER = "kuser"; + const MEDIA_INFO = "mediaInfo"; + const MODERATION = "moderation"; + const ROUGHCUT = "roughcutEntry"; + const SYNDICATION = "syndicationFeed"; + const THUMBNAIL_ASSET = "thumbAsset"; + const THUMBNAIL_PARAMS = "thumbParams"; + const THUMBNAIL_PARAMS_OUTPUT = "thumbParamsOutput"; + const UI_CONF = "uiConf"; + const WIDGET = "widget"; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaAuditTrailOrderBy +{ + const CREATED_AT_ASC = "+createdAt"; + const PARSED_AT_ASC = "+parsedAt"; + const CREATED_AT_DESC = "-createdAt"; + const PARSED_AT_DESC = "-parsedAt"; +} + +/** + * @package Kaltura + * @subpackage Client + */ +abstract class KalturaAuditTrailInfo extends KalturaObjectBase +{ + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaAuditTrail extends KalturaObjectBase +{ + /** + * + * + * @var int + * @readonly + */ + public $id = null; + + /** + * + * + * @var int + * @readonly + */ + public $createdAt = null; + + /** + * Indicates when the data was parsed + * + * + * @var int + * @readonly + */ + public $parsedAt = null; + + /** + * + * + * @var KalturaAuditTrailStatus + * @readonly + */ + public $status = null; + + /** + * + * + * @var KalturaAuditTrailObjectType + */ + public $auditObjectType = null; + + /** + * + * + * @var string + */ + public $objectId = null; + + /** + * + * + * @var string + */ + public $relatedObjectId = null; + + /** + * + * + * @var KalturaAuditTrailObjectType + */ + public $relatedObjectType = null; + + /** + * + * + * @var string + */ + public $entryId = null; + + /** + * + * + * @var int + * @readonly + */ + public $masterPartnerId = null; + + /** + * + * + * @var int + * @readonly + */ + public $partnerId = null; + + /** + * + * + * @var string + * @readonly + */ + public $requestId = null; + + /** + * + * + * @var string + */ + public $userId = null; + + /** + * + * + * @var KalturaAuditTrailAction + */ + public $action = null; + + /** + * + * + * @var KalturaAuditTrailInfo + */ + public $data; + + /** + * + * + * @var string + * @readonly + */ + public $ks = null; + + /** + * + * + * @var KalturaAuditTrailContext + * @readonly + */ + public $context = null; + + /** + * The API service and action that called and caused this audit + * + * + * @var string + * @readonly + */ + public $entryPoint = null; + + /** + * + * + * @var string + * @readonly + */ + public $serverName = null; + + /** + * + * + * @var string + * @readonly + */ + public $ipAddress = null; + + /** + * + * + * @var string + * @readonly + */ + public $userAgent = null; + + /** + * + * + * @var string + */ + public $clientTag = null; + + /** + * + * + * @var string + */ + public $description = null; + + /** + * + * + * @var string + * @readonly + */ + public $errorDescription = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaAuditTrailChangeItem extends KalturaObjectBase +{ + /** + * + * + * @var string + */ + public $descriptor = null; + + /** + * + * + * @var string + */ + public $oldValue = null; + + /** + * + * + * @var string + */ + public $newValue = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaAuditTrailListResponse extends KalturaObjectBase +{ + /** + * + * + * @var array of KalturaAuditTrail + * @readonly + */ + public $objects; + + /** + * + * + * @var int + * @readonly + */ + public $totalCount = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +abstract class KalturaAuditTrailBaseFilter extends KalturaFilter +{ + /** + * + * + * @var int + */ + public $idEqual = null; + + /** + * + * + * @var int + */ + public $createdAtGreaterThanOrEqual = null; + + /** + * + * + * @var int + */ + public $createdAtLessThanOrEqual = null; + + /** + * + * + * @var int + */ + public $parsedAtGreaterThanOrEqual = null; + + /** + * + * + * @var int + */ + public $parsedAtLessThanOrEqual = null; + + /** + * + * + * @var KalturaAuditTrailStatus + */ + public $statusEqual = null; + + /** + * + * + * @var string + */ + public $statusIn = null; + + /** + * + * + * @var KalturaAuditTrailObjectType + */ + public $auditObjectTypeEqual = null; + + /** + * + * + * @var string + */ + public $auditObjectTypeIn = null; + + /** + * + * + * @var string + */ + public $objectIdEqual = null; + + /** + * + * + * @var string + */ + public $objectIdIn = null; + + /** + * + * + * @var string + */ + public $relatedObjectIdEqual = null; + + /** + * + * + * @var string + */ + public $relatedObjectIdIn = null; + + /** + * + * + * @var KalturaAuditTrailObjectType + */ + public $relatedObjectTypeEqual = null; + + /** + * + * + * @var string + */ + public $relatedObjectTypeIn = null; + + /** + * + * + * @var string + */ + public $entryIdEqual = null; + + /** + * + * + * @var string + */ + public $entryIdIn = null; + + /** + * + * + * @var int + */ + public $masterPartnerIdEqual = null; + + /** + * + * + * @var string + */ + public $masterPartnerIdIn = null; + + /** + * + * + * @var int + */ + public $partnerIdEqual = null; + + /** + * + * + * @var string + */ + public $partnerIdIn = null; + + /** + * + * + * @var string + */ + public $requestIdEqual = null; + + /** + * + * + * @var string + */ + public $requestIdIn = null; + + /** + * + * + * @var string + */ + public $userIdEqual = null; + + /** + * + * + * @var string + */ + public $userIdIn = null; + + /** + * + * + * @var KalturaAuditTrailAction + */ + public $actionEqual = null; + + /** + * + * + * @var string + */ + public $actionIn = null; + + /** + * + * + * @var string + */ + public $ksEqual = null; + + /** + * + * + * @var KalturaAuditTrailContext + */ + public $contextEqual = null; + + /** + * + * + * @var string + */ + public $contextIn = null; + + /** + * + * + * @var string + */ + public $entryPointEqual = null; + + /** + * + * + * @var string + */ + public $entryPointIn = null; + + /** + * + * + * @var string + */ + public $serverNameEqual = null; + + /** + * + * + * @var string + */ + public $serverNameIn = null; + + /** + * + * + * @var string + */ + public $ipAddressEqual = null; + + /** + * + * + * @var string + */ + public $ipAddressIn = null; + + /** + * + * + * @var string + */ + public $clientTagEqual = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaAuditTrailChangeInfo extends KalturaAuditTrailInfo +{ + /** + * + * + * @var array of KalturaAuditTrailChangeItem + */ + public $changedItems; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaAuditTrailChangeXmlNode extends KalturaAuditTrailChangeItem +{ + /** + * + * + * @var KalturaAuditTrailChangeXmlNodeType + */ + public $type = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaAuditTrailFileSyncCreateInfo extends KalturaAuditTrailInfo +{ + /** + * + * + * @var string + */ + public $version = null; + + /** + * + * + * @var int + */ + public $objectSubType = null; + + /** + * + * + * @var int + */ + public $dc = null; + + /** + * + * + * @var bool + */ + public $original = null; + + /** + * + * + * @var KalturaAuditTrailFileSyncType + */ + public $fileType = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaAuditTrailTextInfo extends KalturaAuditTrailInfo +{ + /** + * + * + * @var string + */ + public $info = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaAuditTrailFilter extends KalturaAuditTrailBaseFilter +{ + +} + + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaAuditTrailService extends KalturaServiceBase +{ + function __construct(KalturaClient $client = null) + { + parent::__construct($client); + } + + /** + * Allows you to add an audit trail object and audit trail content associated with Kaltura object + * + * @param KalturaAuditTrail $auditTrail + * @return KalturaAuditTrail + */ + function add(KalturaAuditTrail $auditTrail) + { + $kparams = array(); + $this->client->addParam($kparams, "auditTrail", $auditTrail->toParams()); + $this->client->queueServiceActionCall("audit_audittrail", "add", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaAuditTrail"); + return $resultObject; + } + + /** + * Retrieve an audit trail object by id + * + * @param int $id + * @return KalturaAuditTrail + */ + function get($id) + { + $kparams = array(); + $this->client->addParam($kparams, "id", $id); + $this->client->queueServiceActionCall("audit_audittrail", "get", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaAuditTrail"); + return $resultObject; + } + + /** + * List audit trail objects by filter and pager + * + * @param KalturaAuditTrailFilter $filter + * @param KalturaFilterPager $pager + * @return KalturaAuditTrailListResponse + */ + function listAction(KalturaAuditTrailFilter $filter = null, KalturaFilterPager $pager = null) + { + $kparams = array(); + if ($filter !== null) + $this->client->addParam($kparams, "filter", $filter->toParams()); + if ($pager !== null) + $this->client->addParam($kparams, "pager", $pager->toParams()); + $this->client->queueServiceActionCall("audit_audittrail", "list", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaAuditTrailListResponse"); + return $resultObject; + } +} +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaAuditClientPlugin extends KalturaClientPlugin +{ + /** + * @var KalturaAuditTrailService + */ + public $auditTrail = null; + + protected function __construct(KalturaClient $client) + { + parent::__construct($client); + $this->auditTrail = new KalturaAuditTrailService($client); + } + + /** + * @return KalturaAuditClientPlugin + */ + public static function get(KalturaClient $client) + { + return new KalturaAuditClientPlugin($client); + } + + /** + * @return array + */ + public function getServices() + { + $services = array( + 'auditTrail' => $this->auditTrail, + ); + return $services; + } + + /** + * @return string + */ + public function getName() + { + return 'audit'; + } +} + diff --git a/local/kaltura/API/KalturaPlugins/KalturaBulkUploadClientPlugin.php b/local/kaltura/API/KalturaPlugins/KalturaBulkUploadClientPlugin.php new file mode 100644 index 0000000000000..7d844b642730c --- /dev/null +++ b/local/kaltura/API/KalturaPlugins/KalturaBulkUploadClientPlugin.php @@ -0,0 +1,187 @@ +. +// +// @ignore +// =================================================================================================== + +/** + * @package Kaltura + * @subpackage Client + */ +require_once(dirname(__FILE__) . "/../KalturaClientBase.php"); +require_once(dirname(__FILE__) . "/../KalturaEnums.php"); +require_once(dirname(__FILE__) . "/../KalturaTypes.php"); + + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaBulkService extends KalturaServiceBase +{ + function __construct(KalturaClient $client = null) + { + parent::__construct($client); + } + + /** + * Get bulk upload batch job by id + * + * @param int $id + * @return KalturaBulkUpload + */ + function get($id) + { + $kparams = array(); + $this->client->addParam($kparams, "id", $id); + $this->client->queueServiceActionCall("bulkupload_bulk", "get", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaBulkUpload"); + return $resultObject; + } + + /** + * List bulk upload batch jobs + * + * @param KalturaBulkUploadFilter $bulkUploadFilter + * @param KalturaFilterPager $pager + * @return KalturaBulkUploadListResponse + */ + function listAction(KalturaBulkUploadFilter $bulkUploadFilter = null, KalturaFilterPager $pager = null) + { + $kparams = array(); + if ($bulkUploadFilter !== null) + $this->client->addParam($kparams, "bulkUploadFilter", $bulkUploadFilter->toParams()); + if ($pager !== null) + $this->client->addParam($kparams, "pager", $pager->toParams()); + $this->client->queueServiceActionCall("bulkupload_bulk", "list", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaBulkUploadListResponse"); + return $resultObject; + } + + /** + * Serve action returns the original file. + * + * @param int $id Job id + * @return file + */ + function serve($id) + { + $kparams = array(); + $this->client->addParam($kparams, "id", $id); + $this->client->queueServiceActionCall("bulkupload_bulk", "serve", $kparams); + if(!$this->client->getDestinationPath() && !$this->client->getReturnServedResult()) + return $this->client->getServeUrl(); + return $this->client->doQueue(); + } + + /** + * ServeLog action returns the log file for the bulk-upload job. + * + * @param int $id Job id + * @return file + */ + function serveLog($id) + { + $kparams = array(); + $this->client->addParam($kparams, "id", $id); + $this->client->queueServiceActionCall("bulkupload_bulk", "serveLog", $kparams); + if(!$this->client->getDestinationPath() && !$this->client->getReturnServedResult()) + return $this->client->getServeUrl(); + return $this->client->doQueue(); + } + + /** + * Aborts the bulk upload and all its child jobs + * + * @param int $id Job id + * @return KalturaBulkUpload + */ + function abort($id) + { + $kparams = array(); + $this->client->addParam($kparams, "id", $id); + $this->client->queueServiceActionCall("bulkupload_bulk", "abort", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaBulkUpload"); + return $resultObject; + } +} +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaBulkUploadClientPlugin extends KalturaClientPlugin +{ + /** + * @var KalturaBulkService + */ + public $bulk = null; + + protected function __construct(KalturaClient $client) + { + parent::__construct($client); + $this->bulk = new KalturaBulkService($client); + } + + /** + * @return KalturaBulkUploadClientPlugin + */ + public static function get(KalturaClient $client) + { + return new KalturaBulkUploadClientPlugin($client); + } + + /** + * @return array + */ + public function getServices() + { + $services = array( + 'bulk' => $this->bulk, + ); + return $services; + } + + /** + * @return string + */ + public function getName() + { + return 'bulkUpload'; + } +} + diff --git a/local/kaltura/API/KalturaPlugins/KalturaBulkUploadCsvClientPlugin.php b/local/kaltura/API/KalturaPlugins/KalturaBulkUploadCsvClientPlugin.php new file mode 100644 index 0000000000000..9f58ceae18d3f --- /dev/null +++ b/local/kaltura/API/KalturaPlugins/KalturaBulkUploadCsvClientPlugin.php @@ -0,0 +1,113 @@ +. +// +// @ignore +// =================================================================================================== + +/** + * @package Kaltura + * @subpackage Client + */ +require_once(dirname(__FILE__) . "/../KalturaClientBase.php"); +require_once(dirname(__FILE__) . "/../KalturaEnums.php"); +require_once(dirname(__FILE__) . "/../KalturaTypes.php"); +require_once(dirname(__FILE__) . "/KalturaBulkUploadClientPlugin.php"); + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaBulkUploadCsvVersion +{ + const V1 = 1; + const V2 = 2; + const V3 = 3; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaBulkUploadCsvJobData extends KalturaBulkUploadJobData +{ + /** + * The version of the csv file + * + * + * @var KalturaBulkUploadCsvVersion + * @readonly + */ + public $csvVersion = null; + + /** + * Array containing CSV headers + * + * + * @var array of KalturaString + */ + public $columns; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaBulkUploadCsvClientPlugin extends KalturaClientPlugin +{ + protected function __construct(KalturaClient $client) + { + parent::__construct($client); + } + + /** + * @return KalturaBulkUploadCsvClientPlugin + */ + public static function get(KalturaClient $client) + { + return new KalturaBulkUploadCsvClientPlugin($client); + } + + /** + * @return array + */ + public function getServices() + { + $services = array( + ); + return $services; + } + + /** + * @return string + */ + public function getName() + { + return 'bulkUploadCsv'; + } +} + diff --git a/local/kaltura/API/KalturaPlugins/KalturaBulkUploadFilterClientPlugin.php b/local/kaltura/API/KalturaPlugins/KalturaBulkUploadFilterClientPlugin.php new file mode 100644 index 0000000000000..b77ca422630a2 --- /dev/null +++ b/local/kaltura/API/KalturaPlugins/KalturaBulkUploadFilterClientPlugin.php @@ -0,0 +1,101 @@ +. +// +// @ignore +// =================================================================================================== + +/** + * @package Kaltura + * @subpackage Client + */ +require_once(dirname(__FILE__) . "/../KalturaClientBase.php"); +require_once(dirname(__FILE__) . "/../KalturaEnums.php"); +require_once(dirname(__FILE__) . "/../KalturaTypes.php"); +require_once(dirname(__FILE__) . "/KalturaBulkUploadClientPlugin.php"); + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaBulkUploadFilterJobData extends KalturaBulkUploadJobData +{ + /** + * Filter for extracting the objects list to upload + * + * + * @var KalturaFilter + */ + public $filter; + + /** + * Template object for new object creation + * + * + * @var KalturaObjectBase + */ + public $templateObject; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaBulkUploadFilterClientPlugin extends KalturaClientPlugin +{ + protected function __construct(KalturaClient $client) + { + parent::__construct($client); + } + + /** + * @return KalturaBulkUploadFilterClientPlugin + */ + public static function get(KalturaClient $client) + { + return new KalturaBulkUploadFilterClientPlugin($client); + } + + /** + * @return array + */ + public function getServices() + { + $services = array( + ); + return $services; + } + + /** + * @return string + */ + public function getName() + { + return 'bulkUploadFilter'; + } +} + diff --git a/local/kaltura/API/KalturaPlugins/KalturaBulkUploadXmlClientPlugin.php b/local/kaltura/API/KalturaPlugins/KalturaBulkUploadXmlClientPlugin.php new file mode 100644 index 0000000000000..1fc677c98f93b --- /dev/null +++ b/local/kaltura/API/KalturaPlugins/KalturaBulkUploadXmlClientPlugin.php @@ -0,0 +1,85 @@ +. +// +// @ignore +// =================================================================================================== + +/** + * @package Kaltura + * @subpackage Client + */ +require_once(dirname(__FILE__) . "/../KalturaClientBase.php"); +require_once(dirname(__FILE__) . "/../KalturaEnums.php"); +require_once(dirname(__FILE__) . "/../KalturaTypes.php"); +require_once(dirname(__FILE__) . "/KalturaBulkUploadClientPlugin.php"); + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaBulkUploadXmlJobData extends KalturaBulkUploadJobData +{ + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaBulkUploadXmlClientPlugin extends KalturaClientPlugin +{ + protected function __construct(KalturaClient $client) + { + parent::__construct($client); + } + + /** + * @return KalturaBulkUploadXmlClientPlugin + */ + public static function get(KalturaClient $client) + { + return new KalturaBulkUploadXmlClientPlugin($client); + } + + /** + * @return array + */ + public function getServices() + { + $services = array( + ); + return $services; + } + + /** + * @return string + */ + public function getName() + { + return 'bulkUploadXml'; + } +} + diff --git a/local/kaltura/API/KalturaPlugins/KalturaCaptionClientPlugin.php b/local/kaltura/API/KalturaPlugins/KalturaCaptionClientPlugin.php new file mode 100644 index 0000000000000..1217d2414b12e --- /dev/null +++ b/local/kaltura/API/KalturaPlugins/KalturaCaptionClientPlugin.php @@ -0,0 +1,771 @@ +. +// +// @ignore +// =================================================================================================== + +/** + * @package Kaltura + * @subpackage Client + */ +require_once(dirname(__FILE__) . "/../KalturaClientBase.php"); +require_once(dirname(__FILE__) . "/../KalturaEnums.php"); +require_once(dirname(__FILE__) . "/../KalturaTypes.php"); + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaCaptionAssetStatus +{ + const ERROR = -1; + const QUEUED = 0; + const READY = 2; + const DELETED = 3; + const IMPORTING = 7; + const EXPORTING = 9; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaCaptionAssetOrderBy +{ + const CREATED_AT_ASC = "+createdAt"; + const DELETED_AT_ASC = "+deletedAt"; + const SIZE_ASC = "+size"; + const UPDATED_AT_ASC = "+updatedAt"; + const CREATED_AT_DESC = "-createdAt"; + const DELETED_AT_DESC = "-deletedAt"; + const SIZE_DESC = "-size"; + const UPDATED_AT_DESC = "-updatedAt"; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaCaptionParamsOrderBy +{ +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaCaptionType +{ + const SRT = "1"; + const DFXP = "2"; + const WEBVTT = "3"; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaCaptionAsset extends KalturaAsset +{ + /** + * The Caption Params used to create this Caption Asset + * + * + * @var int + * @insertonly + */ + public $captionParamsId = null; + + /** + * The language of the caption asset content + * + * + * @var KalturaLanguage + */ + public $language = null; + + /** + * The language of the caption asset content + * + * + * @var KalturaLanguageCode + * @readonly + */ + public $languageCode = null; + + /** + * Is default caption asset of the entry + * + * + * @var KalturaNullableBoolean + */ + public $isDefault = null; + + /** + * Friendly label + * + * + * @var string + */ + public $label = null; + + /** + * The caption format + * + * + * @var KalturaCaptionType + * @insertonly + */ + public $format = null; + + /** + * The status of the asset + * + * + * @var KalturaCaptionAssetStatus + * @readonly + */ + public $status = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaCaptionAssetListResponse extends KalturaObjectBase +{ + /** + * + * + * @var array of KalturaCaptionAsset + * @readonly + */ + public $objects; + + /** + * + * + * @var int + * @readonly + */ + public $totalCount = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaCaptionParams extends KalturaAssetParams +{ + /** + * The language of the caption content + * + * + * @var KalturaLanguage + * @insertonly + */ + public $language = null; + + /** + * Is default caption asset of the entry + * + * + * @var KalturaNullableBoolean + */ + public $isDefault = null; + + /** + * Friendly label + * + * + * @var string + */ + public $label = null; + + /** + * The caption format + * + * + * @var KalturaCaptionType + * @insertonly + */ + public $format = null; + + /** + * Id of the caption params or the flavor params to be used as source for the caption creation + * + * + * @var int + */ + public $sourceParamsId = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaCaptionParamsListResponse extends KalturaObjectBase +{ + /** + * + * + * @var array of KalturaCaptionParams + * @readonly + */ + public $objects; + + /** + * + * + * @var int + * @readonly + */ + public $totalCount = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +abstract class KalturaCaptionAssetBaseFilter extends KalturaAssetFilter +{ + /** + * + * + * @var int + */ + public $captionParamsIdEqual = null; + + /** + * + * + * @var string + */ + public $captionParamsIdIn = null; + + /** + * + * + * @var KalturaCaptionType + */ + public $formatEqual = null; + + /** + * + * + * @var string + */ + public $formatIn = null; + + /** + * + * + * @var KalturaCaptionAssetStatus + */ + public $statusEqual = null; + + /** + * + * + * @var string + */ + public $statusIn = null; + + /** + * + * + * @var string + */ + public $statusNotIn = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +abstract class KalturaCaptionParamsBaseFilter extends KalturaAssetParamsFilter +{ + /** + * + * + * @var KalturaCaptionType + */ + public $formatEqual = null; + + /** + * + * + * @var string + */ + public $formatIn = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaCaptionAssetFilter extends KalturaCaptionAssetBaseFilter +{ + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaCaptionParamsFilter extends KalturaCaptionParamsBaseFilter +{ + +} + + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaCaptionAssetService extends KalturaServiceBase +{ + function __construct(KalturaClient $client = null) + { + parent::__construct($client); + } + + /** + * Add caption asset + * + * @param string $entryId + * @param KalturaCaptionAsset $captionAsset + * @return KalturaCaptionAsset + */ + function add($entryId, KalturaCaptionAsset $captionAsset) + { + $kparams = array(); + $this->client->addParam($kparams, "entryId", $entryId); + $this->client->addParam($kparams, "captionAsset", $captionAsset->toParams()); + $this->client->queueServiceActionCall("caption_captionasset", "add", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaCaptionAsset"); + return $resultObject; + } + + /** + * Update content of caption asset + * + * @param string $id + * @param KalturaContentResource $contentResource + * @return KalturaCaptionAsset + */ + function setContent($id, KalturaContentResource $contentResource) + { + $kparams = array(); + $this->client->addParam($kparams, "id", $id); + $this->client->addParam($kparams, "contentResource", $contentResource->toParams()); + $this->client->queueServiceActionCall("caption_captionasset", "setContent", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaCaptionAsset"); + return $resultObject; + } + + /** + * Update caption asset + * + * @param string $id + * @param KalturaCaptionAsset $captionAsset + * @return KalturaCaptionAsset + */ + function update($id, KalturaCaptionAsset $captionAsset) + { + $kparams = array(); + $this->client->addParam($kparams, "id", $id); + $this->client->addParam($kparams, "captionAsset", $captionAsset->toParams()); + $this->client->queueServiceActionCall("caption_captionasset", "update", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaCaptionAsset"); + return $resultObject; + } + + /** + * Serves caption by entry id and thumnail params id + * + * @param string $entryId + * @param int $captionParamId If not set, default caption will be used. + * @return file + */ + function serveByEntryId($entryId, $captionParamId = null) + { + $kparams = array(); + $this->client->addParam($kparams, "entryId", $entryId); + $this->client->addParam($kparams, "captionParamId", $captionParamId); + $this->client->queueServiceActionCall("caption_captionasset", "serveByEntryId", $kparams); + if(!$this->client->getDestinationPath() && !$this->client->getReturnServedResult()) + return $this->client->getServeUrl(); + return $this->client->doQueue(); + } + + /** + * Get download URL for the asset + * + * @param string $id + * @param int $storageId + * @return string + */ + function getUrl($id, $storageId = null) + { + $kparams = array(); + $this->client->addParam($kparams, "id", $id); + $this->client->addParam($kparams, "storageId", $storageId); + $this->client->queueServiceActionCall("caption_captionasset", "getUrl", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "string"); + return $resultObject; + } + + /** + * Get remote storage existing paths for the asset + * + * @param string $id + * @return KalturaRemotePathListResponse + */ + function getRemotePaths($id) + { + $kparams = array(); + $this->client->addParam($kparams, "id", $id); + $this->client->queueServiceActionCall("caption_captionasset", "getRemotePaths", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaRemotePathListResponse"); + return $resultObject; + } + + /** + * Serves caption by its id + * + * @param string $captionAssetId + * @return file + */ + function serve($captionAssetId) + { + $kparams = array(); + $this->client->addParam($kparams, "captionAssetId", $captionAssetId); + $this->client->queueServiceActionCall("caption_captionasset", "serve", $kparams); + if(!$this->client->getDestinationPath() && !$this->client->getReturnServedResult()) + return $this->client->getServeUrl(); + return $this->client->doQueue(); + } + + /** + * Serves caption by its id converting it to segmented WebVTT + * + * @param string $captionAssetId + * @param int $segmentDuration + * @param int $segmentIndex + * @param int $localTimestamp + * @return file + */ + function serveWebVTT($captionAssetId, $segmentDuration = 30, $segmentIndex = null, $localTimestamp = 10000) + { + $kparams = array(); + $this->client->addParam($kparams, "captionAssetId", $captionAssetId); + $this->client->addParam($kparams, "segmentDuration", $segmentDuration); + $this->client->addParam($kparams, "segmentIndex", $segmentIndex); + $this->client->addParam($kparams, "localTimestamp", $localTimestamp); + $this->client->queueServiceActionCall("caption_captionasset", "serveWebVTT", $kparams); + if(!$this->client->getDestinationPath() && !$this->client->getReturnServedResult()) + return $this->client->getServeUrl(); + return $this->client->doQueue(); + } + + /** + * Markss the caption as default and removes that mark from all other caption assets of the entry. + * + * @param string $captionAssetId + * @return + */ + function setAsDefault($captionAssetId) + { + $kparams = array(); + $this->client->addParam($kparams, "captionAssetId", $captionAssetId); + $this->client->queueServiceActionCall("caption_captionasset", "setAsDefault", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "null"); + return $resultObject; + } + + /** + * + * + * @param string $captionAssetId + * @return KalturaCaptionAsset + */ + function get($captionAssetId) + { + $kparams = array(); + $this->client->addParam($kparams, "captionAssetId", $captionAssetId); + $this->client->queueServiceActionCall("caption_captionasset", "get", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaCaptionAsset"); + return $resultObject; + } + + /** + * List caption Assets by filter and pager + * + * @param KalturaAssetFilter $filter + * @param KalturaFilterPager $pager + * @return KalturaCaptionAssetListResponse + */ + function listAction(KalturaAssetFilter $filter = null, KalturaFilterPager $pager = null) + { + $kparams = array(); + if ($filter !== null) + $this->client->addParam($kparams, "filter", $filter->toParams()); + if ($pager !== null) + $this->client->addParam($kparams, "pager", $pager->toParams()); + $this->client->queueServiceActionCall("caption_captionasset", "list", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaCaptionAssetListResponse"); + return $resultObject; + } + + /** + * + * + * @param string $captionAssetId + * @return + */ + function delete($captionAssetId) + { + $kparams = array(); + $this->client->addParam($kparams, "captionAssetId", $captionAssetId); + $this->client->queueServiceActionCall("caption_captionasset", "delete", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "null"); + return $resultObject; + } +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaCaptionParamsService extends KalturaServiceBase +{ + function __construct(KalturaClient $client = null) + { + parent::__construct($client); + } + + /** + * Add new Caption Params + * + * @param KalturaCaptionParams $captionParams + * @return KalturaCaptionParams + */ + function add(KalturaCaptionParams $captionParams) + { + $kparams = array(); + $this->client->addParam($kparams, "captionParams", $captionParams->toParams()); + $this->client->queueServiceActionCall("caption_captionparams", "add", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaCaptionParams"); + return $resultObject; + } + + /** + * Get Caption Params by ID + * + * @param int $id + * @return KalturaCaptionParams + */ + function get($id) + { + $kparams = array(); + $this->client->addParam($kparams, "id", $id); + $this->client->queueServiceActionCall("caption_captionparams", "get", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaCaptionParams"); + return $resultObject; + } + + /** + * Update Caption Params by ID + * + * @param int $id + * @param KalturaCaptionParams $captionParams + * @return KalturaCaptionParams + */ + function update($id, KalturaCaptionParams $captionParams) + { + $kparams = array(); + $this->client->addParam($kparams, "id", $id); + $this->client->addParam($kparams, "captionParams", $captionParams->toParams()); + $this->client->queueServiceActionCall("caption_captionparams", "update", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaCaptionParams"); + return $resultObject; + } + + /** + * Delete Caption Params by ID + * + * @param int $id + * @return + */ + function delete($id) + { + $kparams = array(); + $this->client->addParam($kparams, "id", $id); + $this->client->queueServiceActionCall("caption_captionparams", "delete", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "null"); + return $resultObject; + } + + /** + * List Caption Params by filter with paging support (By default - all system default params will be listed too) + * + * @param KalturaCaptionParamsFilter $filter + * @param KalturaFilterPager $pager + * @return KalturaCaptionParamsListResponse + */ + function listAction(KalturaCaptionParamsFilter $filter = null, KalturaFilterPager $pager = null) + { + $kparams = array(); + if ($filter !== null) + $this->client->addParam($kparams, "filter", $filter->toParams()); + if ($pager !== null) + $this->client->addParam($kparams, "pager", $pager->toParams()); + $this->client->queueServiceActionCall("caption_captionparams", "list", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaCaptionParamsListResponse"); + return $resultObject; + } +} +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaCaptionClientPlugin extends KalturaClientPlugin +{ + /** + * @var KalturaCaptionAssetService + */ + public $captionAsset = null; + + /** + * @var KalturaCaptionParamsService + */ + public $captionParams = null; + + protected function __construct(KalturaClient $client) + { + parent::__construct($client); + $this->captionAsset = new KalturaCaptionAssetService($client); + $this->captionParams = new KalturaCaptionParamsService($client); + } + + /** + * @return KalturaCaptionClientPlugin + */ + public static function get(KalturaClient $client) + { + return new KalturaCaptionClientPlugin($client); + } + + /** + * @return array + */ + public function getServices() + { + $services = array( + 'captionAsset' => $this->captionAsset, + 'captionParams' => $this->captionParams, + ); + return $services; + } + + /** + * @return string + */ + public function getName() + { + return 'caption'; + } +} + diff --git a/local/kaltura/API/KalturaPlugins/KalturaCaptionSearchClientPlugin.php b/local/kaltura/API/KalturaPlugins/KalturaCaptionSearchClientPlugin.php new file mode 100644 index 0000000000000..0962e15fdab99 --- /dev/null +++ b/local/kaltura/API/KalturaPlugins/KalturaCaptionSearchClientPlugin.php @@ -0,0 +1,325 @@ +. +// +// @ignore +// =================================================================================================== + +/** + * @package Kaltura + * @subpackage Client + */ +require_once(dirname(__FILE__) . "/../KalturaClientBase.php"); +require_once(dirname(__FILE__) . "/../KalturaEnums.php"); +require_once(dirname(__FILE__) . "/../KalturaTypes.php"); +require_once(dirname(__FILE__) . "/KalturaCaptionClientPlugin.php"); + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaCaptionAssetItem extends KalturaObjectBase +{ + /** + * The Caption Asset object + * + * + * @var KalturaCaptionAsset + */ + public $asset; + + /** + * The entry object + * + * + * @var KalturaBaseEntry + */ + public $entry; + + /** + * + * + * @var int + */ + public $startTime = null; + + /** + * + * + * @var int + */ + public $endTime = null; + + /** + * + * + * @var string + */ + public $content = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaCaptionAssetItemListResponse extends KalturaObjectBase +{ + /** + * + * + * @var array of KalturaCaptionAssetItem + * @readonly + */ + public $objects; + + /** + * + * + * @var int + * @readonly + */ + public $totalCount = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaCaptionAssetItemFilter extends KalturaCaptionAssetFilter +{ + /** + * + * + * @var string + */ + public $contentLike = null; + + /** + * + * + * @var string + */ + public $contentMultiLikeOr = null; + + /** + * + * + * @var string + */ + public $contentMultiLikeAnd = null; + + /** + * + * + * @var string + */ + public $partnerDescriptionLike = null; + + /** + * + * + * @var string + */ + public $partnerDescriptionMultiLikeOr = null; + + /** + * + * + * @var string + */ + public $partnerDescriptionMultiLikeAnd = null; + + /** + * + * + * @var KalturaLanguage + */ + public $languageEqual = null; + + /** + * + * + * @var string + */ + public $languageIn = null; + + /** + * + * + * @var string + */ + public $labelEqual = null; + + /** + * + * + * @var string + */ + public $labelIn = null; + + /** + * + * + * @var int + */ + public $startTimeGreaterThanOrEqual = null; + + /** + * + * + * @var int + */ + public $startTimeLessThanOrEqual = null; + + /** + * + * + * @var int + */ + public $endTimeGreaterThanOrEqual = null; + + /** + * + * + * @var int + */ + public $endTimeLessThanOrEqual = null; + + +} + + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaCaptionAssetItemService extends KalturaServiceBase +{ + function __construct(KalturaClient $client = null) + { + parent::__construct($client); + } + + /** + * Search caption asset items by filter, pager and free text + * + * @param KalturaBaseEntryFilter $entryFilter + * @param KalturaCaptionAssetItemFilter $captionAssetItemFilter + * @param KalturaFilterPager $captionAssetItemPager + * @return KalturaCaptionAssetItemListResponse + */ + function search(KalturaBaseEntryFilter $entryFilter = null, KalturaCaptionAssetItemFilter $captionAssetItemFilter = null, KalturaFilterPager $captionAssetItemPager = null) + { + $kparams = array(); + if ($entryFilter !== null) + $this->client->addParam($kparams, "entryFilter", $entryFilter->toParams()); + if ($captionAssetItemFilter !== null) + $this->client->addParam($kparams, "captionAssetItemFilter", $captionAssetItemFilter->toParams()); + if ($captionAssetItemPager !== null) + $this->client->addParam($kparams, "captionAssetItemPager", $captionAssetItemPager->toParams()); + $this->client->queueServiceActionCall("captionsearch_captionassetitem", "search", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaCaptionAssetItemListResponse"); + return $resultObject; + } + + /** + * Search caption asset items by filter, pager and free text + * + * @param KalturaBaseEntryFilter $entryFilter + * @param KalturaCaptionAssetItemFilter $captionAssetItemFilter + * @param KalturaFilterPager $captionAssetItemPager + * @return KalturaBaseEntryListResponse + */ + function searchEntries(KalturaBaseEntryFilter $entryFilter = null, KalturaCaptionAssetItemFilter $captionAssetItemFilter = null, KalturaFilterPager $captionAssetItemPager = null) + { + $kparams = array(); + if ($entryFilter !== null) + $this->client->addParam($kparams, "entryFilter", $entryFilter->toParams()); + if ($captionAssetItemFilter !== null) + $this->client->addParam($kparams, "captionAssetItemFilter", $captionAssetItemFilter->toParams()); + if ($captionAssetItemPager !== null) + $this->client->addParam($kparams, "captionAssetItemPager", $captionAssetItemPager->toParams()); + $this->client->queueServiceActionCall("captionsearch_captionassetitem", "searchEntries", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaBaseEntryListResponse"); + return $resultObject; + } +} +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaCaptionSearchClientPlugin extends KalturaClientPlugin +{ + /** + * @var KalturaCaptionAssetItemService + */ + public $captionAssetItem = null; + + protected function __construct(KalturaClient $client) + { + parent::__construct($client); + $this->captionAssetItem = new KalturaCaptionAssetItemService($client); + } + + /** + * @return KalturaCaptionSearchClientPlugin + */ + public static function get(KalturaClient $client) + { + return new KalturaCaptionSearchClientPlugin($client); + } + + /** + * @return array + */ + public function getServices() + { + $services = array( + 'captionAssetItem' => $this->captionAssetItem, + ); + return $services; + } + + /** + * @return string + */ + public function getName() + { + return 'captionSearch'; + } +} + diff --git a/local/kaltura/API/KalturaPlugins/KalturaCodeCuePointClientPlugin.php b/local/kaltura/API/KalturaPlugins/KalturaCodeCuePointClientPlugin.php new file mode 100644 index 0000000000000..b598d86d7866a --- /dev/null +++ b/local/kaltura/API/KalturaPlugins/KalturaCodeCuePointClientPlugin.php @@ -0,0 +1,237 @@ +. +// +// @ignore +// =================================================================================================== + +/** + * @package Kaltura + * @subpackage Client + */ +require_once(dirname(__FILE__) . "/../KalturaClientBase.php"); +require_once(dirname(__FILE__) . "/../KalturaEnums.php"); +require_once(dirname(__FILE__) . "/../KalturaTypes.php"); +require_once(dirname(__FILE__) . "/KalturaCuePointClientPlugin.php"); + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaCodeCuePointOrderBy +{ + const CREATED_AT_ASC = "+createdAt"; + const DURATION_ASC = "+duration"; + const END_TIME_ASC = "+endTime"; + const PARTNER_SORT_VALUE_ASC = "+partnerSortValue"; + const START_TIME_ASC = "+startTime"; + const UPDATED_AT_ASC = "+updatedAt"; + const CREATED_AT_DESC = "-createdAt"; + const DURATION_DESC = "-duration"; + const END_TIME_DESC = "-endTime"; + const PARTNER_SORT_VALUE_DESC = "-partnerSortValue"; + const START_TIME_DESC = "-startTime"; + const UPDATED_AT_DESC = "-updatedAt"; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaCodeCuePoint extends KalturaCuePoint +{ + /** + * + * + * @var string + */ + public $code = null; + + /** + * + * + * @var string + */ + public $description = null; + + /** + * + * + * @var int + */ + public $endTime = null; + + /** + * Duration in milliseconds + * + * + * @var int + * @readonly + */ + public $duration = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +abstract class KalturaCodeCuePointBaseFilter extends KalturaCuePointFilter +{ + /** + * + * + * @var string + */ + public $codeLike = null; + + /** + * + * + * @var string + */ + public $codeMultiLikeOr = null; + + /** + * + * + * @var string + */ + public $codeMultiLikeAnd = null; + + /** + * + * + * @var string + */ + public $codeEqual = null; + + /** + * + * + * @var string + */ + public $codeIn = null; + + /** + * + * + * @var string + */ + public $descriptionLike = null; + + /** + * + * + * @var string + */ + public $descriptionMultiLikeOr = null; + + /** + * + * + * @var string + */ + public $descriptionMultiLikeAnd = null; + + /** + * + * + * @var int + */ + public $endTimeGreaterThanOrEqual = null; + + /** + * + * + * @var int + */ + public $endTimeLessThanOrEqual = null; + + /** + * + * + * @var int + */ + public $durationGreaterThanOrEqual = null; + + /** + * + * + * @var int + */ + public $durationLessThanOrEqual = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaCodeCuePointFilter extends KalturaCodeCuePointBaseFilter +{ + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaCodeCuePointClientPlugin extends KalturaClientPlugin +{ + protected function __construct(KalturaClient $client) + { + parent::__construct($client); + } + + /** + * @return KalturaCodeCuePointClientPlugin + */ + public static function get(KalturaClient $client) + { + return new KalturaCodeCuePointClientPlugin($client); + } + + /** + * @return array + */ + public function getServices() + { + $services = array( + ); + return $services; + } + + /** + * @return string + */ + public function getName() + { + return 'codeCuePoint'; + } +} + diff --git a/local/kaltura/API/KalturaPlugins/KalturaContentDistributionClientPlugin.php b/local/kaltura/API/KalturaPlugins/KalturaContentDistributionClientPlugin.php new file mode 100644 index 0000000000000..16c38cffc2447 --- /dev/null +++ b/local/kaltura/API/KalturaPlugins/KalturaContentDistributionClientPlugin.php @@ -0,0 +1,3454 @@ +. +// +// @ignore +// =================================================================================================== + +/** + * @package Kaltura + * @subpackage Client + */ +require_once(dirname(__FILE__) . "/../KalturaClientBase.php"); +require_once(dirname(__FILE__) . "/../KalturaEnums.php"); +require_once(dirname(__FILE__) . "/../KalturaTypes.php"); +require_once(dirname(__FILE__) . "/KalturaMetadataClientPlugin.php"); + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaDistributionAction +{ + const SUBMIT = 1; + const UPDATE = 2; + const DELETE = 3; + const FETCH_REPORT = 4; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaDistributionErrorType +{ + const MISSING_FLAVOR = 1; + const MISSING_THUMBNAIL = 2; + const MISSING_METADATA = 3; + const INVALID_DATA = 4; + const MISSING_ASSET = 5; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaDistributionFieldRequiredStatus +{ + const NOT_REQUIRED = 0; + const REQUIRED_BY_PROVIDER = 1; + const REQUIRED_BY_PARTNER = 2; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaDistributionProfileActionStatus +{ + const DISABLED = 1; + const AUTOMATIC = 2; + const MANUAL = 3; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaDistributionProfileStatus +{ + const DISABLED = 1; + const ENABLED = 2; + const DELETED = 3; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaDistributionProtocol +{ + const FTP = 1; + const SCP = 2; + const SFTP = 3; + const HTTP = 4; + const HTTPS = 5; + const ASPERA = 10; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaDistributionValidationErrorType +{ + const CUSTOM_ERROR = 0; + const STRING_EMPTY = 1; + const STRING_TOO_LONG = 2; + const STRING_TOO_SHORT = 3; + const INVALID_FORMAT = 4; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaEntryDistributionFlag +{ + const NONE = 0; + const SUBMIT_REQUIRED = 1; + const DELETE_REQUIRED = 2; + const UPDATE_REQUIRED = 3; + const ENABLE_REQUIRED = 4; + const DISABLE_REQUIRED = 5; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaEntryDistributionStatus +{ + const PENDING = 0; + const QUEUED = 1; + const READY = 2; + const DELETED = 3; + const SUBMITTING = 4; + const UPDATING = 5; + const DELETING = 6; + const ERROR_SUBMITTING = 7; + const ERROR_UPDATING = 8; + const ERROR_DELETING = 9; + const REMOVED = 10; + const IMPORT_SUBMITTING = 11; + const IMPORT_UPDATING = 12; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaEntryDistributionSunStatus +{ + const BEFORE_SUNRISE = 1; + const AFTER_SUNRISE = 2; + const AFTER_SUNSET = 3; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaGenericDistributionProviderParser +{ + const XSL = 1; + const XPATH = 2; + const REGEX = 3; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaGenericDistributionProviderStatus +{ + const ACTIVE = 2; + const DELETED = 3; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaConfigurableDistributionProfileOrderBy +{ + const CREATED_AT_ASC = "+createdAt"; + const UPDATED_AT_ASC = "+updatedAt"; + const CREATED_AT_DESC = "-createdAt"; + const UPDATED_AT_DESC = "-updatedAt"; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaDistributionProfileOrderBy +{ + const CREATED_AT_ASC = "+createdAt"; + const UPDATED_AT_ASC = "+updatedAt"; + const CREATED_AT_DESC = "-createdAt"; + const UPDATED_AT_DESC = "-updatedAt"; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaDistributionProviderOrderBy +{ +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaDistributionProviderType +{ + const ATT_UVERSE = "attUverseDistribution.ATT_UVERSE"; + const AVN = "avnDistribution.AVN"; + const COMCAST_MRSS = "comcastMrssDistribution.COMCAST_MRSS"; + const CROSS_KALTURA = "crossKalturaDistribution.CROSS_KALTURA"; + const DAILYMOTION = "dailymotionDistribution.DAILYMOTION"; + const DOUBLECLICK = "doubleClickDistribution.DOUBLECLICK"; + const FREEWHEEL = "freewheelDistribution.FREEWHEEL"; + const FREEWHEEL_GENERIC = "freewheelGenericDistribution.FREEWHEEL_GENERIC"; + const FTP = "ftpDistribution.FTP"; + const FTP_SCHEDULED = "ftpDistribution.FTP_SCHEDULED"; + const HULU = "huluDistribution.HULU"; + const IDETIC = "ideticDistribution.IDETIC"; + const METRO_PCS = "metroPcsDistribution.METRO_PCS"; + const MSN = "msnDistribution.MSN"; + const NDN = "ndnDistribution.NDN"; + const PODCAST = "podcastDistribution.PODCAST"; + const QUICKPLAY = "quickPlayDistribution.QUICKPLAY"; + const SYNACOR_HBO = "synacorHboDistribution.SYNACOR_HBO"; + const TIME_WARNER = "timeWarnerDistribution.TIME_WARNER"; + const TVCOM = "tvComDistribution.TVCOM"; + const UVERSE_CLICK_TO_ORDER = "uverseClickToOrderDistribution.UVERSE_CLICK_TO_ORDER"; + const UVERSE = "uverseDistribution.UVERSE"; + const VERIZON_VCAST = "verizonVcastDistribution.VERIZON_VCAST"; + const YAHOO = "yahooDistribution.YAHOO"; + const YOUTUBE = "youTubeDistribution.YOUTUBE"; + const YOUTUBE_API = "youtubeApiDistribution.YOUTUBE_API"; + const GENERIC = "1"; + const SYNDICATION = "2"; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaEntryDistributionOrderBy +{ + const CREATED_AT_ASC = "+createdAt"; + const SUBMITTED_AT_ASC = "+submittedAt"; + const SUNRISE_ASC = "+sunrise"; + const SUNSET_ASC = "+sunset"; + const UPDATED_AT_ASC = "+updatedAt"; + const CREATED_AT_DESC = "-createdAt"; + const SUBMITTED_AT_DESC = "-submittedAt"; + const SUNRISE_DESC = "-sunrise"; + const SUNSET_DESC = "-sunset"; + const UPDATED_AT_DESC = "-updatedAt"; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaGenericDistributionProfileOrderBy +{ + const CREATED_AT_ASC = "+createdAt"; + const UPDATED_AT_ASC = "+updatedAt"; + const CREATED_AT_DESC = "-createdAt"; + const UPDATED_AT_DESC = "-updatedAt"; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaGenericDistributionProviderActionOrderBy +{ + const CREATED_AT_ASC = "+createdAt"; + const UPDATED_AT_ASC = "+updatedAt"; + const CREATED_AT_DESC = "-createdAt"; + const UPDATED_AT_DESC = "-updatedAt"; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaGenericDistributionProviderOrderBy +{ + const CREATED_AT_ASC = "+createdAt"; + const UPDATED_AT_ASC = "+updatedAt"; + const CREATED_AT_DESC = "-createdAt"; + const UPDATED_AT_DESC = "-updatedAt"; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaSyndicationDistributionProfileOrderBy +{ + const CREATED_AT_ASC = "+createdAt"; + const UPDATED_AT_ASC = "+updatedAt"; + const CREATED_AT_DESC = "-createdAt"; + const UPDATED_AT_DESC = "-updatedAt"; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaSyndicationDistributionProviderOrderBy +{ +} + +/** + * @package Kaltura + * @subpackage Client + */ +abstract class KalturaAssetDistributionCondition extends KalturaObjectBase +{ + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaAssetDistributionRule extends KalturaObjectBase +{ + /** + * The validation error description that will be set on the "data" property on KalturaDistributionValidationErrorMissingAsset if rule was not fulfilled + * + * + * @var string + */ + public $validationError = null; + + /** + * An array of asset distribution conditions + * + * + * @var array of KalturaAssetDistributionCondition + */ + public $assetDistributionConditions; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaDistributionFieldConfig extends KalturaObjectBase +{ + /** + * A value taken from a connector field enum which associates the current configuration to that connector field + * Field enum class should be returned by the provider's getFieldEnumClass function. + * + * + * @var string + */ + public $fieldName = null; + + /** + * A string that will be shown to the user as the field name in error messages related to the current field + * + * + * @var string + */ + public $userFriendlyFieldName = null; + + /** + * An XSLT string that extracts the right value from the Kaltura entry MRSS XML. + * The value of the current connector field will be the one that is returned from transforming the Kaltura entry MRSS XML using this XSLT string. + * + * + * @var string + */ + public $entryMrssXslt = null; + + /** + * Is the field required to have a value for submission ? + * + * + * @var KalturaDistributionFieldRequiredStatus + */ + public $isRequired = null; + + /** + * Trigger distribution update when this field changes or not ? + * + * + * @var bool + */ + public $updateOnChange = null; + + /** + * Entry column or metadata xpath that should trigger an update + * + * + * @var array of KalturaString + */ + public $updateParams; + + /** + * Is this field config is the default for the distribution provider? + * + * + * @var bool + * @readonly + */ + public $isDefault = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +abstract class KalturaDistributionJobProviderData extends KalturaObjectBase +{ + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaDistributionThumbDimensions extends KalturaObjectBase +{ + /** + * + * + * @var int + */ + public $width = null; + + /** + * + * + * @var int + */ + public $height = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +abstract class KalturaDistributionProfile extends KalturaObjectBase +{ + /** + * Auto generated unique id + * + * + * @var int + * @readonly + */ + public $id = null; + + /** + * Profile creation date as Unix timestamp (In seconds) + * + * + * @var int + * @readonly + */ + public $createdAt = null; + + /** + * Profile last update date as Unix timestamp (In seconds) + * + * + * @var int + * @readonly + */ + public $updatedAt = null; + + /** + * + * + * @var int + * @readonly + */ + public $partnerId = null; + + /** + * + * + * @var KalturaDistributionProviderType + * @insertonly + */ + public $providerType = null; + + /** + * + * + * @var string + */ + public $name = null; + + /** + * + * + * @var KalturaDistributionProfileStatus + */ + public $status = null; + + /** + * + * + * @var KalturaDistributionProfileActionStatus + */ + public $submitEnabled = null; + + /** + * + * + * @var KalturaDistributionProfileActionStatus + */ + public $updateEnabled = null; + + /** + * + * + * @var KalturaDistributionProfileActionStatus + */ + public $deleteEnabled = null; + + /** + * + * + * @var KalturaDistributionProfileActionStatus + */ + public $reportEnabled = null; + + /** + * Comma separated flavor params ids that should be auto converted + * + * + * @var string + */ + public $autoCreateFlavors = null; + + /** + * Comma separated thumbnail params ids that should be auto generated + * + * + * @var string + */ + public $autoCreateThumb = null; + + /** + * Comma separated flavor params ids that should be submitted if ready + * + * + * @var string + */ + public $optionalFlavorParamsIds = null; + + /** + * Comma separated flavor params ids that required to be ready before submission + * + * + * @var string + */ + public $requiredFlavorParamsIds = null; + + /** + * Thumbnail dimensions that should be submitted if ready + * + * + * @var array of KalturaDistributionThumbDimensions + */ + public $optionalThumbDimensions; + + /** + * Thumbnail dimensions that required to be readt before submission + * + * + * @var array of KalturaDistributionThumbDimensions + */ + public $requiredThumbDimensions; + + /** + * Asset Distribution Rules for assets that should be submitted if ready + * + * + * @var array of KalturaAssetDistributionRule + */ + public $optionalAssetDistributionRules; + + /** + * Assets Asset Distribution Rules for assets that are required to be ready before submission + * + * + * @var array of KalturaAssetDistributionRule + */ + public $requiredAssetDistributionRules; + + /** + * If entry distribution sunrise not specified that will be the default since entry creation time, in seconds + * + * + * @var int + */ + public $sunriseDefaultOffset = null; + + /** + * If entry distribution sunset not specified that will be the default since entry creation time, in seconds + * + * + * @var int + */ + public $sunsetDefaultOffset = null; + + /** + * The best external storage to be used to download the asset files from + * + * + * @var int + */ + public $recommendedStorageProfileForDownload = null; + + /** + * The best Kaltura data center to be used to download the asset files to + * + * + * @var int + */ + public $recommendedDcForDownload = null; + + /** + * The best Kaltura data center to be used to execute the distribution job + * + * + * @var int + */ + public $recommendedDcForExecute = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaDistributionProfileListResponse extends KalturaObjectBase +{ + /** + * + * + * @var array of KalturaDistributionProfile + * @readonly + */ + public $objects; + + /** + * + * + * @var int + * @readonly + */ + public $totalCount = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +abstract class KalturaDistributionProvider extends KalturaObjectBase +{ + /** + * + * + * @var KalturaDistributionProviderType + * @readonly + */ + public $type = null; + + /** + * + * + * @var string + */ + public $name = null; + + /** + * + * + * @var bool + */ + public $scheduleUpdateEnabled = null; + + /** + * + * + * @var bool + */ + public $availabilityUpdateEnabled = null; + + /** + * + * + * @var bool + */ + public $deleteInsteadUpdate = null; + + /** + * + * + * @var int + */ + public $intervalBeforeSunrise = null; + + /** + * + * + * @var int + */ + public $intervalBeforeSunset = null; + + /** + * + * + * @var string + */ + public $updateRequiredEntryFields = null; + + /** + * + * + * @var string + */ + public $updateRequiredMetadataXPaths = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaDistributionProviderListResponse extends KalturaObjectBase +{ + /** + * + * + * @var array of KalturaDistributionProvider + * @readonly + */ + public $objects; + + /** + * + * + * @var int + * @readonly + */ + public $totalCount = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaDistributionRemoteMediaFile extends KalturaObjectBase +{ + /** + * + * + * @var string + */ + public $version = null; + + /** + * + * + * @var string + */ + public $assetId = null; + + /** + * + * + * @var string + */ + public $remoteId = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +abstract class KalturaDistributionValidationError extends KalturaObjectBase +{ + /** + * + * + * @var KalturaDistributionAction + */ + public $action = null; + + /** + * + * + * @var KalturaDistributionErrorType + */ + public $errorType = null; + + /** + * + * + * @var string + */ + public $description = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaEntryDistribution extends KalturaObjectBase +{ + /** + * Auto generated unique id + * + * + * @var int + * @readonly + */ + public $id = null; + + /** + * Entry distribution creation date as Unix timestamp (In seconds) + * + * + * @var int + * @readonly + */ + public $createdAt = null; + + /** + * Entry distribution last update date as Unix timestamp (In seconds) + * + * + * @var int + * @readonly + */ + public $updatedAt = null; + + /** + * Entry distribution submission date as Unix timestamp (In seconds) + * + * + * @var int + * @readonly + */ + public $submittedAt = null; + + /** + * + * + * @var string + * @insertonly + */ + public $entryId = null; + + /** + * + * + * @var int + * @readonly + */ + public $partnerId = null; + + /** + * + * + * @var int + * @insertonly + */ + public $distributionProfileId = null; + + /** + * + * + * @var KalturaEntryDistributionStatus + * @readonly + */ + public $status = null; + + /** + * + * + * @var KalturaEntryDistributionSunStatus + * @readonly + */ + public $sunStatus = null; + + /** + * + * + * @var KalturaEntryDistributionFlag + * @readonly + */ + public $dirtyStatus = null; + + /** + * Comma separated thumbnail asset ids + * + * + * @var string + */ + public $thumbAssetIds = null; + + /** + * Comma separated flavor asset ids + * + * + * @var string + */ + public $flavorAssetIds = null; + + /** + * Comma separated asset ids + * + * + * @var string + */ + public $assetIds = null; + + /** + * Entry distribution publish time as Unix timestamp (In seconds) + * + * + * @var int + */ + public $sunrise = null; + + /** + * Entry distribution un-publish time as Unix timestamp (In seconds) + * + * + * @var int + */ + public $sunset = null; + + /** + * The id as returned from the distributed destination + * + * + * @var string + * @readonly + */ + public $remoteId = null; + + /** + * The plays as retrieved from the remote destination reports + * + * + * @var int + * @readonly + */ + public $plays = null; + + /** + * The views as retrieved from the remote destination reports + * + * + * @var int + * @readonly + */ + public $views = null; + + /** + * + * + * @var array of KalturaDistributionValidationError + */ + public $validationErrors; + + /** + * + * + * @var KalturaBatchJobErrorTypes + * @readonly + */ + public $errorType = null; + + /** + * + * + * @var int + * @readonly + */ + public $errorNumber = null; + + /** + * + * + * @var string + * @readonly + */ + public $errorDescription = null; + + /** + * + * + * @var KalturaNullableBoolean + * @readonly + */ + public $hasSubmitResultsLog = null; + + /** + * + * + * @var KalturaNullableBoolean + * @readonly + */ + public $hasSubmitSentDataLog = null; + + /** + * + * + * @var KalturaNullableBoolean + * @readonly + */ + public $hasUpdateResultsLog = null; + + /** + * + * + * @var KalturaNullableBoolean + * @readonly + */ + public $hasUpdateSentDataLog = null; + + /** + * + * + * @var KalturaNullableBoolean + * @readonly + */ + public $hasDeleteResultsLog = null; + + /** + * + * + * @var KalturaNullableBoolean + * @readonly + */ + public $hasDeleteSentDataLog = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaEntryDistributionListResponse extends KalturaObjectBase +{ + /** + * + * + * @var array of KalturaEntryDistribution + * @readonly + */ + public $objects; + + /** + * + * + * @var int + * @readonly + */ + public $totalCount = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaGenericDistributionProfileAction extends KalturaObjectBase +{ + /** + * + * + * @var KalturaDistributionProtocol + */ + public $protocol = null; + + /** + * + * + * @var string + */ + public $serverUrl = null; + + /** + * + * + * @var string + */ + public $serverPath = null; + + /** + * + * + * @var string + */ + public $username = null; + + /** + * + * + * @var string + */ + public $password = null; + + /** + * + * + * @var bool + */ + public $ftpPassiveMode = null; + + /** + * + * + * @var string + */ + public $httpFieldName = null; + + /** + * + * + * @var string + */ + public $httpFileName = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaGenericDistributionProviderAction extends KalturaObjectBase +{ + /** + * Auto generated + * + * + * @var int + * @readonly + */ + public $id = null; + + /** + * Generic distribution provider action creation date as Unix timestamp (In seconds) + * + * + * @var int + * @readonly + */ + public $createdAt = null; + + /** + * Generic distribution provider action last update date as Unix timestamp (In seconds) + * + * + * @var int + * @readonly + */ + public $updatedAt = null; + + /** + * + * + * @var int + * @insertonly + */ + public $genericDistributionProviderId = null; + + /** + * + * + * @var KalturaDistributionAction + * @insertonly + */ + public $action = null; + + /** + * + * + * @var KalturaGenericDistributionProviderStatus + * @readonly + */ + public $status = null; + + /** + * + * + * @var KalturaGenericDistributionProviderParser + */ + public $resultsParser = null; + + /** + * + * + * @var KalturaDistributionProtocol + */ + public $protocol = null; + + /** + * + * + * @var string + */ + public $serverAddress = null; + + /** + * + * + * @var string + */ + public $remotePath = null; + + /** + * + * + * @var string + */ + public $remoteUsername = null; + + /** + * + * + * @var string + */ + public $remotePassword = null; + + /** + * + * + * @var string + */ + public $editableFields = null; + + /** + * + * + * @var string + */ + public $mandatoryFields = null; + + /** + * + * + * @var string + * @readonly + */ + public $mrssTransformer = null; + + /** + * + * + * @var string + * @readonly + */ + public $mrssValidator = null; + + /** + * + * + * @var string + * @readonly + */ + public $resultsTransformer = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaGenericDistributionProviderActionListResponse extends KalturaObjectBase +{ + /** + * + * + * @var array of KalturaGenericDistributionProviderAction + * @readonly + */ + public $objects; + + /** + * + * + * @var int + * @readonly + */ + public $totalCount = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaGenericDistributionProvider extends KalturaDistributionProvider +{ + /** + * Auto generated + * + * + * @var int + * @readonly + */ + public $id = null; + + /** + * Generic distribution provider creation date as Unix timestamp (In seconds) + * + * + * @var int + * @readonly + */ + public $createdAt = null; + + /** + * Generic distribution provider last update date as Unix timestamp (In seconds) + * + * + * @var int + * @readonly + */ + public $updatedAt = null; + + /** + * + * + * @var int + * @readonly + */ + public $partnerId = null; + + /** + * + * + * @var bool + */ + public $isDefault = null; + + /** + * + * + * @var KalturaGenericDistributionProviderStatus + * @readonly + */ + public $status = null; + + /** + * + * + * @var string + */ + public $optionalFlavorParamsIds = null; + + /** + * + * + * @var string + */ + public $requiredFlavorParamsIds = null; + + /** + * + * + * @var array of KalturaDistributionThumbDimensions + */ + public $optionalThumbDimensions; + + /** + * + * + * @var array of KalturaDistributionThumbDimensions + */ + public $requiredThumbDimensions; + + /** + * + * + * @var string + */ + public $editableFields = null; + + /** + * + * + * @var string + */ + public $mandatoryFields = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaGenericDistributionProviderListResponse extends KalturaObjectBase +{ + /** + * + * + * @var array of KalturaGenericDistributionProvider + * @readonly + */ + public $objects; + + /** + * + * + * @var int + * @readonly + */ + public $totalCount = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaAssetDistributionPropertyCondition extends KalturaAssetDistributionCondition +{ + /** + * The property name to look for, this will match to a getter on the asset object. + * Should be camelCase naming convention (defining "myPropertyName" will look for getMyPropertyName()) + * + * + * @var string + */ + public $propertyName = null; + + /** + * The value to compare + * + * + * @var string + */ + public $propertyValue = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +abstract class KalturaConfigurableDistributionJobProviderData extends KalturaDistributionJobProviderData +{ + /** + * + * + * @var string + */ + public $fieldValues = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +abstract class KalturaConfigurableDistributionProfile extends KalturaDistributionProfile +{ + /** + * + * + * @var array of KalturaDistributionFieldConfig + */ + public $fieldConfigArray; + + /** + * + * + * @var array of KalturaExtendingItemMrssParameter + */ + public $itemXpathsToExtend; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaContentDistributionSearchItem extends KalturaSearchItem +{ + /** + * + * + * @var bool + */ + public $noDistributionProfiles = null; + + /** + * + * + * @var int + */ + public $distributionProfileId = null; + + /** + * + * + * @var KalturaEntryDistributionSunStatus + */ + public $distributionSunStatus = null; + + /** + * + * + * @var KalturaEntryDistributionFlag + */ + public $entryDistributionFlag = null; + + /** + * + * + * @var KalturaEntryDistributionStatus + */ + public $entryDistributionStatus = null; + + /** + * + * + * @var bool + */ + public $hasEntryDistributionValidationErrors = null; + + /** + * Comma seperated validation error types + * + * + * @var string + */ + public $entryDistributionValidationErrors = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaDistributionJobData extends KalturaJobData +{ + /** + * + * + * @var int + */ + public $distributionProfileId = null; + + /** + * + * + * @var KalturaDistributionProfile + */ + public $distributionProfile; + + /** + * + * + * @var int + */ + public $entryDistributionId = null; + + /** + * + * + * @var KalturaEntryDistribution + */ + public $entryDistribution; + + /** + * Id of the media in the remote system + * + * + * @var string + */ + public $remoteId = null; + + /** + * + * + * @var KalturaDistributionProviderType + */ + public $providerType = null; + + /** + * Additional data that relevant for the provider only + * + * + * @var KalturaDistributionJobProviderData + */ + public $providerData; + + /** + * The results as returned from the remote destination + * + * + * @var string + */ + public $results = null; + + /** + * The data as sent to the remote destination + * + * + * @var string + */ + public $sentData = null; + + /** + * Stores array of media files that submitted to the destination site + * Could be used later for media update + * + * + * @var array of KalturaDistributionRemoteMediaFile + */ + public $mediaFiles; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +abstract class KalturaDistributionProfileBaseFilter extends KalturaFilter +{ + /** + * + * + * @var int + */ + public $idEqual = null; + + /** + * + * + * @var string + */ + public $idIn = null; + + /** + * + * + * @var int + */ + public $createdAtGreaterThanOrEqual = null; + + /** + * + * + * @var int + */ + public $createdAtLessThanOrEqual = null; + + /** + * + * + * @var int + */ + public $updatedAtGreaterThanOrEqual = null; + + /** + * + * + * @var int + */ + public $updatedAtLessThanOrEqual = null; + + /** + * + * + * @var KalturaDistributionProfileStatus + */ + public $statusEqual = null; + + /** + * + * + * @var string + */ + public $statusIn = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +abstract class KalturaDistributionProviderBaseFilter extends KalturaFilter +{ + /** + * + * + * @var KalturaDistributionProviderType + */ + public $typeEqual = null; + + /** + * + * + * @var string + */ + public $typeIn = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaDistributionValidationErrorInvalidData extends KalturaDistributionValidationError +{ + /** + * + * + * @var string + */ + public $fieldName = null; + + /** + * + * + * @var KalturaDistributionValidationErrorType + */ + public $validationErrorType = null; + + /** + * Parameter of the validation error + * For example, minimum value for KalturaDistributionValidationErrorType::STRING_TOO_SHORT validation error + * + * + * @var string + */ + public $validationErrorParam = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaDistributionValidationErrorMissingAsset extends KalturaDistributionValidationError +{ + /** + * + * + * @var string + */ + public $data = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaDistributionValidationErrorMissingFlavor extends KalturaDistributionValidationError +{ + /** + * + * + * @var string + */ + public $flavorParamsId = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaDistributionValidationErrorMissingMetadata extends KalturaDistributionValidationError +{ + /** + * + * + * @var string + */ + public $fieldName = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaDistributionValidationErrorMissingThumbnail extends KalturaDistributionValidationError +{ + /** + * + * + * @var KalturaDistributionThumbDimensions + */ + public $dimensions; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +abstract class KalturaEntryDistributionBaseFilter extends KalturaFilter +{ + /** + * + * + * @var int + */ + public $idEqual = null; + + /** + * + * + * @var string + */ + public $idIn = null; + + /** + * + * + * @var int + */ + public $createdAtGreaterThanOrEqual = null; + + /** + * + * + * @var int + */ + public $createdAtLessThanOrEqual = null; + + /** + * + * + * @var int + */ + public $updatedAtGreaterThanOrEqual = null; + + /** + * + * + * @var int + */ + public $updatedAtLessThanOrEqual = null; + + /** + * + * + * @var int + */ + public $submittedAtGreaterThanOrEqual = null; + + /** + * + * + * @var int + */ + public $submittedAtLessThanOrEqual = null; + + /** + * + * + * @var string + */ + public $entryIdEqual = null; + + /** + * + * + * @var string + */ + public $entryIdIn = null; + + /** + * + * + * @var int + */ + public $distributionProfileIdEqual = null; + + /** + * + * + * @var string + */ + public $distributionProfileIdIn = null; + + /** + * + * + * @var KalturaEntryDistributionStatus + */ + public $statusEqual = null; + + /** + * + * + * @var string + */ + public $statusIn = null; + + /** + * + * + * @var KalturaEntryDistributionFlag + */ + public $dirtyStatusEqual = null; + + /** + * + * + * @var string + */ + public $dirtyStatusIn = null; + + /** + * + * + * @var int + */ + public $sunriseGreaterThanOrEqual = null; + + /** + * + * + * @var int + */ + public $sunriseLessThanOrEqual = null; + + /** + * + * + * @var int + */ + public $sunsetGreaterThanOrEqual = null; + + /** + * + * + * @var int + */ + public $sunsetLessThanOrEqual = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaGenericDistributionJobProviderData extends KalturaDistributionJobProviderData +{ + /** + * + * + * @var string + */ + public $xml = null; + + /** + * + * + * @var string + */ + public $resultParseData = null; + + /** + * + * + * @var KalturaGenericDistributionProviderParser + */ + public $resultParserType = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaGenericDistributionProfile extends KalturaDistributionProfile +{ + /** + * + * + * @var int + * @insertonly + */ + public $genericProviderId = null; + + /** + * + * + * @var KalturaGenericDistributionProfileAction + */ + public $submitAction; + + /** + * + * + * @var KalturaGenericDistributionProfileAction + */ + public $updateAction; + + /** + * + * + * @var KalturaGenericDistributionProfileAction + */ + public $deleteAction; + + /** + * + * + * @var KalturaGenericDistributionProfileAction + */ + public $fetchReportAction; + + /** + * + * + * @var string + */ + public $updateRequiredEntryFields = null; + + /** + * + * + * @var string + */ + public $updateRequiredMetadataXPaths = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +abstract class KalturaGenericDistributionProviderActionBaseFilter extends KalturaFilter +{ + /** + * + * + * @var int + */ + public $idEqual = null; + + /** + * + * + * @var string + */ + public $idIn = null; + + /** + * + * + * @var int + */ + public $createdAtGreaterThanOrEqual = null; + + /** + * + * + * @var int + */ + public $createdAtLessThanOrEqual = null; + + /** + * + * + * @var int + */ + public $updatedAtGreaterThanOrEqual = null; + + /** + * + * + * @var int + */ + public $updatedAtLessThanOrEqual = null; + + /** + * + * + * @var int + */ + public $genericDistributionProviderIdEqual = null; + + /** + * + * + * @var string + */ + public $genericDistributionProviderIdIn = null; + + /** + * + * + * @var KalturaDistributionAction + */ + public $actionEqual = null; + + /** + * + * + * @var string + */ + public $actionIn = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaSyndicationDistributionProfile extends KalturaDistributionProfile +{ + /** + * + * + * @var string + */ + public $xsl = null; + + /** + * + * + * @var string + * @readonly + */ + public $feedId = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaSyndicationDistributionProvider extends KalturaDistributionProvider +{ + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaDistributionDeleteJobData extends KalturaDistributionJobData +{ + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaDistributionFetchReportJobData extends KalturaDistributionJobData +{ + /** + * + * + * @var int + */ + public $plays = null; + + /** + * + * + * @var int + */ + public $views = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaDistributionProfileFilter extends KalturaDistributionProfileBaseFilter +{ + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaDistributionProviderFilter extends KalturaDistributionProviderBaseFilter +{ + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaDistributionSubmitJobData extends KalturaDistributionJobData +{ + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaDistributionUpdateJobData extends KalturaDistributionJobData +{ + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaDistributionValidationErrorInvalidMetadata extends KalturaDistributionValidationErrorInvalidData +{ + /** + * + * + * @var int + */ + public $metadataProfileId = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaEntryDistributionFilter extends KalturaEntryDistributionBaseFilter +{ + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaGenericDistributionProviderActionFilter extends KalturaGenericDistributionProviderActionBaseFilter +{ + +} + +/** + * @package Kaltura + * @subpackage Client + */ +abstract class KalturaConfigurableDistributionProfileBaseFilter extends KalturaDistributionProfileFilter +{ + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaDistributionDisableJobData extends KalturaDistributionUpdateJobData +{ + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaDistributionEnableJobData extends KalturaDistributionUpdateJobData +{ + +} + +/** + * @package Kaltura + * @subpackage Client + */ +abstract class KalturaGenericDistributionProfileBaseFilter extends KalturaDistributionProfileFilter +{ + +} + +/** + * @package Kaltura + * @subpackage Client + */ +abstract class KalturaGenericDistributionProviderBaseFilter extends KalturaDistributionProviderFilter +{ + /** + * + * + * @var int + */ + public $idEqual = null; + + /** + * + * + * @var string + */ + public $idIn = null; + + /** + * + * + * @var int + */ + public $createdAtGreaterThanOrEqual = null; + + /** + * + * + * @var int + */ + public $createdAtLessThanOrEqual = null; + + /** + * + * + * @var int + */ + public $updatedAtGreaterThanOrEqual = null; + + /** + * + * + * @var int + */ + public $updatedAtLessThanOrEqual = null; + + /** + * + * + * @var int + */ + public $partnerIdEqual = null; + + /** + * + * + * @var string + */ + public $partnerIdIn = null; + + /** + * + * + * @var KalturaNullableBoolean + */ + public $isDefaultEqual = null; + + /** + * + * + * @var string + */ + public $isDefaultIn = null; + + /** + * + * + * @var KalturaGenericDistributionProviderStatus + */ + public $statusEqual = null; + + /** + * + * + * @var string + */ + public $statusIn = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +abstract class KalturaSyndicationDistributionProfileBaseFilter extends KalturaDistributionProfileFilter +{ + +} + +/** + * @package Kaltura + * @subpackage Client + */ +abstract class KalturaSyndicationDistributionProviderBaseFilter extends KalturaDistributionProviderFilter +{ + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaConfigurableDistributionProfileFilter extends KalturaConfigurableDistributionProfileBaseFilter +{ + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaGenericDistributionProfileFilter extends KalturaGenericDistributionProfileBaseFilter +{ + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaGenericDistributionProviderFilter extends KalturaGenericDistributionProviderBaseFilter +{ + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaSyndicationDistributionProfileFilter extends KalturaSyndicationDistributionProfileBaseFilter +{ + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaSyndicationDistributionProviderFilter extends KalturaSyndicationDistributionProviderBaseFilter +{ + +} + + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaDistributionProfileService extends KalturaServiceBase +{ + function __construct(KalturaClient $client = null) + { + parent::__construct($client); + } + + /** + * Add new Distribution Profile + * + * @param KalturaDistributionProfile $distributionProfile + * @return KalturaDistributionProfile + */ + function add(KalturaDistributionProfile $distributionProfile) + { + $kparams = array(); + $this->client->addParam($kparams, "distributionProfile", $distributionProfile->toParams()); + $this->client->queueServiceActionCall("contentdistribution_distributionprofile", "add", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaDistributionProfile"); + return $resultObject; + } + + /** + * Get Distribution Profile by id + * + * @param int $id + * @return KalturaDistributionProfile + */ + function get($id) + { + $kparams = array(); + $this->client->addParam($kparams, "id", $id); + $this->client->queueServiceActionCall("contentdistribution_distributionprofile", "get", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaDistributionProfile"); + return $resultObject; + } + + /** + * Update Distribution Profile by id + * + * @param int $id + * @param KalturaDistributionProfile $distributionProfile + * @return KalturaDistributionProfile + */ + function update($id, KalturaDistributionProfile $distributionProfile) + { + $kparams = array(); + $this->client->addParam($kparams, "id", $id); + $this->client->addParam($kparams, "distributionProfile", $distributionProfile->toParams()); + $this->client->queueServiceActionCall("contentdistribution_distributionprofile", "update", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaDistributionProfile"); + return $resultObject; + } + + /** + * Update Distribution Profile status by id + * + * @param int $id + * @param int $status + * @return KalturaDistributionProfile + */ + function updateStatus($id, $status) + { + $kparams = array(); + $this->client->addParam($kparams, "id", $id); + $this->client->addParam($kparams, "status", $status); + $this->client->queueServiceActionCall("contentdistribution_distributionprofile", "updateStatus", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaDistributionProfile"); + return $resultObject; + } + + /** + * Delete Distribution Profile by id + * + * @param int $id + * @return + */ + function delete($id) + { + $kparams = array(); + $this->client->addParam($kparams, "id", $id); + $this->client->queueServiceActionCall("contentdistribution_distributionprofile", "delete", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "null"); + return $resultObject; + } + + /** + * List all distribution providers + * + * @param KalturaDistributionProfileFilter $filter + * @param KalturaFilterPager $pager + * @return KalturaDistributionProfileListResponse + */ + function listAction(KalturaDistributionProfileFilter $filter = null, KalturaFilterPager $pager = null) + { + $kparams = array(); + if ($filter !== null) + $this->client->addParam($kparams, "filter", $filter->toParams()); + if ($pager !== null) + $this->client->addParam($kparams, "pager", $pager->toParams()); + $this->client->queueServiceActionCall("contentdistribution_distributionprofile", "list", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaDistributionProfileListResponse"); + return $resultObject; + } + + /** + * + * + * @param KalturaPartnerFilter $filter + * @param KalturaFilterPager $pager + * @return KalturaDistributionProfileListResponse + */ + function listByPartner(KalturaPartnerFilter $filter = null, KalturaFilterPager $pager = null) + { + $kparams = array(); + if ($filter !== null) + $this->client->addParam($kparams, "filter", $filter->toParams()); + if ($pager !== null) + $this->client->addParam($kparams, "pager", $pager->toParams()); + $this->client->queueServiceActionCall("contentdistribution_distributionprofile", "listByPartner", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaDistributionProfileListResponse"); + return $resultObject; + } +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaEntryDistributionService extends KalturaServiceBase +{ + function __construct(KalturaClient $client = null) + { + parent::__construct($client); + } + + /** + * Add new Entry Distribution + * + * @param KalturaEntryDistribution $entryDistribution + * @return KalturaEntryDistribution + */ + function add(KalturaEntryDistribution $entryDistribution) + { + $kparams = array(); + $this->client->addParam($kparams, "entryDistribution", $entryDistribution->toParams()); + $this->client->queueServiceActionCall("contentdistribution_entrydistribution", "add", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaEntryDistribution"); + return $resultObject; + } + + /** + * Get Entry Distribution by id + * + * @param int $id + * @return KalturaEntryDistribution + */ + function get($id) + { + $kparams = array(); + $this->client->addParam($kparams, "id", $id); + $this->client->queueServiceActionCall("contentdistribution_entrydistribution", "get", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaEntryDistribution"); + return $resultObject; + } + + /** + * Validates Entry Distribution by id for submission + * + * @param int $id + * @return KalturaEntryDistribution + */ + function validate($id) + { + $kparams = array(); + $this->client->addParam($kparams, "id", $id); + $this->client->queueServiceActionCall("contentdistribution_entrydistribution", "validate", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaEntryDistribution"); + return $resultObject; + } + + /** + * Update Entry Distribution by id + * + * @param int $id + * @param KalturaEntryDistribution $entryDistribution + * @return KalturaEntryDistribution + */ + function update($id, KalturaEntryDistribution $entryDistribution) + { + $kparams = array(); + $this->client->addParam($kparams, "id", $id); + $this->client->addParam($kparams, "entryDistribution", $entryDistribution->toParams()); + $this->client->queueServiceActionCall("contentdistribution_entrydistribution", "update", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaEntryDistribution"); + return $resultObject; + } + + /** + * Delete Entry Distribution by id + * + * @param int $id + * @return + */ + function delete($id) + { + $kparams = array(); + $this->client->addParam($kparams, "id", $id); + $this->client->queueServiceActionCall("contentdistribution_entrydistribution", "delete", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "null"); + return $resultObject; + } + + /** + * List all distribution providers + * + * @param KalturaEntryDistributionFilter $filter + * @param KalturaFilterPager $pager + * @return KalturaEntryDistributionListResponse + */ + function listAction(KalturaEntryDistributionFilter $filter = null, KalturaFilterPager $pager = null) + { + $kparams = array(); + if ($filter !== null) + $this->client->addParam($kparams, "filter", $filter->toParams()); + if ($pager !== null) + $this->client->addParam($kparams, "pager", $pager->toParams()); + $this->client->queueServiceActionCall("contentdistribution_entrydistribution", "list", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaEntryDistributionListResponse"); + return $resultObject; + } + + /** + * Submits Entry Distribution to the remote destination + * + * @param int $id + * @param bool $submitWhenReady + * @return KalturaEntryDistribution + */ + function submitAdd($id, $submitWhenReady = false) + { + $kparams = array(); + $this->client->addParam($kparams, "id", $id); + $this->client->addParam($kparams, "submitWhenReady", $submitWhenReady); + $this->client->queueServiceActionCall("contentdistribution_entrydistribution", "submitAdd", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaEntryDistribution"); + return $resultObject; + } + + /** + * Submits Entry Distribution changes to the remote destination + * + * @param int $id + * @return KalturaEntryDistribution + */ + function submitUpdate($id) + { + $kparams = array(); + $this->client->addParam($kparams, "id", $id); + $this->client->queueServiceActionCall("contentdistribution_entrydistribution", "submitUpdate", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaEntryDistribution"); + return $resultObject; + } + + /** + * Submits Entry Distribution report request + * + * @param int $id + * @return KalturaEntryDistribution + */ + function submitFetchReport($id) + { + $kparams = array(); + $this->client->addParam($kparams, "id", $id); + $this->client->queueServiceActionCall("contentdistribution_entrydistribution", "submitFetchReport", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaEntryDistribution"); + return $resultObject; + } + + /** + * Deletes Entry Distribution from the remote destination + * + * @param int $id + * @return KalturaEntryDistribution + */ + function submitDelete($id) + { + $kparams = array(); + $this->client->addParam($kparams, "id", $id); + $this->client->queueServiceActionCall("contentdistribution_entrydistribution", "submitDelete", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaEntryDistribution"); + return $resultObject; + } + + /** + * Retries last submit action + * + * @param int $id + * @return KalturaEntryDistribution + */ + function retrySubmit($id) + { + $kparams = array(); + $this->client->addParam($kparams, "id", $id); + $this->client->queueServiceActionCall("contentdistribution_entrydistribution", "retrySubmit", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaEntryDistribution"); + return $resultObject; + } + + /** + * Serves entry distribution sent data + * + * @param int $id + * @param int $actionType + * @return file + */ + function serveSentData($id, $actionType) + { + $kparams = array(); + $this->client->addParam($kparams, "id", $id); + $this->client->addParam($kparams, "actionType", $actionType); + $this->client->queueServiceActionCall("contentdistribution_entrydistribution", "serveSentData", $kparams); + if(!$this->client->getDestinationPath() && !$this->client->getReturnServedResult()) + return $this->client->getServeUrl(); + return $this->client->doQueue(); + } + + /** + * Serves entry distribution returned data + * + * @param int $id + * @param int $actionType + * @return file + */ + function serveReturnedData($id, $actionType) + { + $kparams = array(); + $this->client->addParam($kparams, "id", $id); + $this->client->addParam($kparams, "actionType", $actionType); + $this->client->queueServiceActionCall("contentdistribution_entrydistribution", "serveReturnedData", $kparams); + if(!$this->client->getDestinationPath() && !$this->client->getReturnServedResult()) + return $this->client->getServeUrl(); + return $this->client->doQueue(); + } +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaDistributionProviderService extends KalturaServiceBase +{ + function __construct(KalturaClient $client = null) + { + parent::__construct($client); + } + + /** + * List all distribution providers + * + * @param KalturaDistributionProviderFilter $filter + * @param KalturaFilterPager $pager + * @return KalturaDistributionProviderListResponse + */ + function listAction(KalturaDistributionProviderFilter $filter = null, KalturaFilterPager $pager = null) + { + $kparams = array(); + if ($filter !== null) + $this->client->addParam($kparams, "filter", $filter->toParams()); + if ($pager !== null) + $this->client->addParam($kparams, "pager", $pager->toParams()); + $this->client->queueServiceActionCall("contentdistribution_distributionprovider", "list", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaDistributionProviderListResponse"); + return $resultObject; + } +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaGenericDistributionProviderService extends KalturaServiceBase +{ + function __construct(KalturaClient $client = null) + { + parent::__construct($client); + } + + /** + * Add new Generic Distribution Provider + * + * @param KalturaGenericDistributionProvider $genericDistributionProvider + * @return KalturaGenericDistributionProvider + */ + function add(KalturaGenericDistributionProvider $genericDistributionProvider) + { + $kparams = array(); + $this->client->addParam($kparams, "genericDistributionProvider", $genericDistributionProvider->toParams()); + $this->client->queueServiceActionCall("contentdistribution_genericdistributionprovider", "add", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaGenericDistributionProvider"); + return $resultObject; + } + + /** + * Get Generic Distribution Provider by id + * + * @param int $id + * @return KalturaGenericDistributionProvider + */ + function get($id) + { + $kparams = array(); + $this->client->addParam($kparams, "id", $id); + $this->client->queueServiceActionCall("contentdistribution_genericdistributionprovider", "get", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaGenericDistributionProvider"); + return $resultObject; + } + + /** + * Update Generic Distribution Provider by id + * + * @param int $id + * @param KalturaGenericDistributionProvider $genericDistributionProvider + * @return KalturaGenericDistributionProvider + */ + function update($id, KalturaGenericDistributionProvider $genericDistributionProvider) + { + $kparams = array(); + $this->client->addParam($kparams, "id", $id); + $this->client->addParam($kparams, "genericDistributionProvider", $genericDistributionProvider->toParams()); + $this->client->queueServiceActionCall("contentdistribution_genericdistributionprovider", "update", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaGenericDistributionProvider"); + return $resultObject; + } + + /** + * Delete Generic Distribution Provider by id + * + * @param int $id + * @return + */ + function delete($id) + { + $kparams = array(); + $this->client->addParam($kparams, "id", $id); + $this->client->queueServiceActionCall("contentdistribution_genericdistributionprovider", "delete", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "null"); + return $resultObject; + } + + /** + * List all distribution providers + * + * @param KalturaGenericDistributionProviderFilter $filter + * @param KalturaFilterPager $pager + * @return KalturaGenericDistributionProviderListResponse + */ + function listAction(KalturaGenericDistributionProviderFilter $filter = null, KalturaFilterPager $pager = null) + { + $kparams = array(); + if ($filter !== null) + $this->client->addParam($kparams, "filter", $filter->toParams()); + if ($pager !== null) + $this->client->addParam($kparams, "pager", $pager->toParams()); + $this->client->queueServiceActionCall("contentdistribution_genericdistributionprovider", "list", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaGenericDistributionProviderListResponse"); + return $resultObject; + } +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaGenericDistributionProviderActionService extends KalturaServiceBase +{ + function __construct(KalturaClient $client = null) + { + parent::__construct($client); + } + + /** + * Add new Generic Distribution Provider Action + * + * @param KalturaGenericDistributionProviderAction $genericDistributionProviderAction + * @return KalturaGenericDistributionProviderAction + */ + function add(KalturaGenericDistributionProviderAction $genericDistributionProviderAction) + { + $kparams = array(); + $this->client->addParam($kparams, "genericDistributionProviderAction", $genericDistributionProviderAction->toParams()); + $this->client->queueServiceActionCall("contentdistribution_genericdistributionprovideraction", "add", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaGenericDistributionProviderAction"); + return $resultObject; + } + + /** + * Add MRSS transform file to generic distribution provider action + * + * @param int $id The id of the generic distribution provider action + * @param string $xslData XSL MRSS transformation data + * @return KalturaGenericDistributionProviderAction + */ + function addMrssTransform($id, $xslData) + { + $kparams = array(); + $this->client->addParam($kparams, "id", $id); + $this->client->addParam($kparams, "xslData", $xslData); + $this->client->queueServiceActionCall("contentdistribution_genericdistributionprovideraction", "addMrssTransform", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaGenericDistributionProviderAction"); + return $resultObject; + } + + /** + * Add MRSS transform file to generic distribution provider action + * + * @param int $id The id of the generic distribution provider action + * @param file $xslFile XSL MRSS transformation file + * @return KalturaGenericDistributionProviderAction + */ + function addMrssTransformFromFile($id, $xslFile) + { + $kparams = array(); + $this->client->addParam($kparams, "id", $id); + $kfiles = array(); + $this->client->addParam($kfiles, "xslFile", $xslFile); + $this->client->queueServiceActionCall("contentdistribution_genericdistributionprovideraction", "addMrssTransformFromFile", $kparams, $kfiles); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaGenericDistributionProviderAction"); + return $resultObject; + } + + /** + * Add MRSS validate file to generic distribution provider action + * + * @param int $id The id of the generic distribution provider action + * @param string $xsdData XSD MRSS validatation data + * @return KalturaGenericDistributionProviderAction + */ + function addMrssValidate($id, $xsdData) + { + $kparams = array(); + $this->client->addParam($kparams, "id", $id); + $this->client->addParam($kparams, "xsdData", $xsdData); + $this->client->queueServiceActionCall("contentdistribution_genericdistributionprovideraction", "addMrssValidate", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaGenericDistributionProviderAction"); + return $resultObject; + } + + /** + * Add MRSS validate file to generic distribution provider action + * + * @param int $id The id of the generic distribution provider action + * @param file $xsdFile XSD MRSS validatation file + * @return KalturaGenericDistributionProviderAction + */ + function addMrssValidateFromFile($id, $xsdFile) + { + $kparams = array(); + $this->client->addParam($kparams, "id", $id); + $kfiles = array(); + $this->client->addParam($kfiles, "xsdFile", $xsdFile); + $this->client->queueServiceActionCall("contentdistribution_genericdistributionprovideraction", "addMrssValidateFromFile", $kparams, $kfiles); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaGenericDistributionProviderAction"); + return $resultObject; + } + + /** + * Add results transform file to generic distribution provider action + * + * @param int $id The id of the generic distribution provider action + * @param string $transformData Transformation data xsl, xPath or regex + * @return KalturaGenericDistributionProviderAction + */ + function addResultsTransform($id, $transformData) + { + $kparams = array(); + $this->client->addParam($kparams, "id", $id); + $this->client->addParam($kparams, "transformData", $transformData); + $this->client->queueServiceActionCall("contentdistribution_genericdistributionprovideraction", "addResultsTransform", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaGenericDistributionProviderAction"); + return $resultObject; + } + + /** + * Add MRSS transform file to generic distribution provider action + * + * @param int $id The id of the generic distribution provider action + * @param file $transformFile Transformation file xsl, xPath or regex + * @return KalturaGenericDistributionProviderAction + */ + function addResultsTransformFromFile($id, $transformFile) + { + $kparams = array(); + $this->client->addParam($kparams, "id", $id); + $kfiles = array(); + $this->client->addParam($kfiles, "transformFile", $transformFile); + $this->client->queueServiceActionCall("contentdistribution_genericdistributionprovideraction", "addResultsTransformFromFile", $kparams, $kfiles); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaGenericDistributionProviderAction"); + return $resultObject; + } + + /** + * Get Generic Distribution Provider Action by id + * + * @param int $id + * @return KalturaGenericDistributionProviderAction + */ + function get($id) + { + $kparams = array(); + $this->client->addParam($kparams, "id", $id); + $this->client->queueServiceActionCall("contentdistribution_genericdistributionprovideraction", "get", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaGenericDistributionProviderAction"); + return $resultObject; + } + + /** + * Get Generic Distribution Provider Action by provider id + * + * @param int $genericDistributionProviderId + * @param int $actionType + * @return KalturaGenericDistributionProviderAction + */ + function getByProviderId($genericDistributionProviderId, $actionType) + { + $kparams = array(); + $this->client->addParam($kparams, "genericDistributionProviderId", $genericDistributionProviderId); + $this->client->addParam($kparams, "actionType", $actionType); + $this->client->queueServiceActionCall("contentdistribution_genericdistributionprovideraction", "getByProviderId", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaGenericDistributionProviderAction"); + return $resultObject; + } + + /** + * Update Generic Distribution Provider Action by provider id + * + * @param int $genericDistributionProviderId + * @param int $actionType + * @param KalturaGenericDistributionProviderAction $genericDistributionProviderAction + * @return KalturaGenericDistributionProviderAction + */ + function updateByProviderId($genericDistributionProviderId, $actionType, KalturaGenericDistributionProviderAction $genericDistributionProviderAction) + { + $kparams = array(); + $this->client->addParam($kparams, "genericDistributionProviderId", $genericDistributionProviderId); + $this->client->addParam($kparams, "actionType", $actionType); + $this->client->addParam($kparams, "genericDistributionProviderAction", $genericDistributionProviderAction->toParams()); + $this->client->queueServiceActionCall("contentdistribution_genericdistributionprovideraction", "updateByProviderId", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaGenericDistributionProviderAction"); + return $resultObject; + } + + /** + * Update Generic Distribution Provider Action by id + * + * @param int $id + * @param KalturaGenericDistributionProviderAction $genericDistributionProviderAction + * @return KalturaGenericDistributionProviderAction + */ + function update($id, KalturaGenericDistributionProviderAction $genericDistributionProviderAction) + { + $kparams = array(); + $this->client->addParam($kparams, "id", $id); + $this->client->addParam($kparams, "genericDistributionProviderAction", $genericDistributionProviderAction->toParams()); + $this->client->queueServiceActionCall("contentdistribution_genericdistributionprovideraction", "update", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaGenericDistributionProviderAction"); + return $resultObject; + } + + /** + * Delete Generic Distribution Provider Action by id + * + * @param int $id + * @return + */ + function delete($id) + { + $kparams = array(); + $this->client->addParam($kparams, "id", $id); + $this->client->queueServiceActionCall("contentdistribution_genericdistributionprovideraction", "delete", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "null"); + return $resultObject; + } + + /** + * Delete Generic Distribution Provider Action by provider id + * + * @param int $genericDistributionProviderId + * @param int $actionType + * @return + */ + function deleteByProviderId($genericDistributionProviderId, $actionType) + { + $kparams = array(); + $this->client->addParam($kparams, "genericDistributionProviderId", $genericDistributionProviderId); + $this->client->addParam($kparams, "actionType", $actionType); + $this->client->queueServiceActionCall("contentdistribution_genericdistributionprovideraction", "deleteByProviderId", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "null"); + return $resultObject; + } + + /** + * List all distribution providers + * + * @param KalturaGenericDistributionProviderActionFilter $filter + * @param KalturaFilterPager $pager + * @return KalturaGenericDistributionProviderActionListResponse + */ + function listAction(KalturaGenericDistributionProviderActionFilter $filter = null, KalturaFilterPager $pager = null) + { + $kparams = array(); + if ($filter !== null) + $this->client->addParam($kparams, "filter", $filter->toParams()); + if ($pager !== null) + $this->client->addParam($kparams, "pager", $pager->toParams()); + $this->client->queueServiceActionCall("contentdistribution_genericdistributionprovideraction", "list", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaGenericDistributionProviderActionListResponse"); + return $resultObject; + } +} +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaContentDistributionClientPlugin extends KalturaClientPlugin +{ + /** + * @var KalturaDistributionProfileService + */ + public $distributionProfile = null; + + /** + * @var KalturaEntryDistributionService + */ + public $entryDistribution = null; + + /** + * @var KalturaDistributionProviderService + */ + public $distributionProvider = null; + + /** + * @var KalturaGenericDistributionProviderService + */ + public $genericDistributionProvider = null; + + /** + * @var KalturaGenericDistributionProviderActionService + */ + public $genericDistributionProviderAction = null; + + protected function __construct(KalturaClient $client) + { + parent::__construct($client); + $this->distributionProfile = new KalturaDistributionProfileService($client); + $this->entryDistribution = new KalturaEntryDistributionService($client); + $this->distributionProvider = new KalturaDistributionProviderService($client); + $this->genericDistributionProvider = new KalturaGenericDistributionProviderService($client); + $this->genericDistributionProviderAction = new KalturaGenericDistributionProviderActionService($client); + } + + /** + * @return KalturaContentDistributionClientPlugin + */ + public static function get(KalturaClient $client) + { + return new KalturaContentDistributionClientPlugin($client); + } + + /** + * @return array + */ + public function getServices() + { + $services = array( + 'distributionProfile' => $this->distributionProfile, + 'entryDistribution' => $this->entryDistribution, + 'distributionProvider' => $this->distributionProvider, + 'genericDistributionProvider' => $this->genericDistributionProvider, + 'genericDistributionProviderAction' => $this->genericDistributionProviderAction, + ); + return $services; + } + + /** + * @return string + */ + public function getName() + { + return 'contentDistribution'; + } +} + diff --git a/local/kaltura/API/KalturaPlugins/KalturaCuePointClientPlugin.php b/local/kaltura/API/KalturaPlugins/KalturaCuePointClientPlugin.php new file mode 100644 index 0000000000000..03a5c937e8cd1 --- /dev/null +++ b/local/kaltura/API/KalturaPlugins/KalturaCuePointClientPlugin.php @@ -0,0 +1,640 @@ +. +// +// @ignore +// =================================================================================================== + +/** + * @package Kaltura + * @subpackage Client + */ +require_once(dirname(__FILE__) . "/../KalturaClientBase.php"); +require_once(dirname(__FILE__) . "/../KalturaEnums.php"); +require_once(dirname(__FILE__) . "/../KalturaTypes.php"); + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaCuePointStatus +{ + const READY = 1; + const DELETED = 2; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaCuePointOrderBy +{ + const CREATED_AT_ASC = "+createdAt"; + const PARTNER_SORT_VALUE_ASC = "+partnerSortValue"; + const START_TIME_ASC = "+startTime"; + const UPDATED_AT_ASC = "+updatedAt"; + const CREATED_AT_DESC = "-createdAt"; + const PARTNER_SORT_VALUE_DESC = "-partnerSortValue"; + const START_TIME_DESC = "-startTime"; + const UPDATED_AT_DESC = "-updatedAt"; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaCuePointType +{ + const AD = "adCuePoint.Ad"; + const ANNOTATION = "annotation.Annotation"; + const CODE = "codeCuePoint.Code"; +} + +/** + * @package Kaltura + * @subpackage Client + */ +abstract class KalturaCuePoint extends KalturaObjectBase +{ + /** + * + * + * @var string + * @readonly + */ + public $id = null; + + /** + * + * + * @var KalturaCuePointType + * @readonly + */ + public $cuePointType = null; + + /** + * + * + * @var KalturaCuePointStatus + * @readonly + */ + public $status = null; + + /** + * + * + * @var string + * @insertonly + */ + public $entryId = null; + + /** + * + * + * @var int + * @readonly + */ + public $partnerId = null; + + /** + * + * + * @var int + * @readonly + */ + public $createdAt = null; + + /** + * + * + * @var int + * @readonly + */ + public $updatedAt = null; + + /** + * + * + * @var string + */ + public $tags = null; + + /** + * Start time in milliseconds + * + * + * @var int + */ + public $startTime = null; + + /** + * + * + * @var string + * @readonly + */ + public $userId = null; + + /** + * + * + * @var string + */ + public $partnerData = null; + + /** + * + * + * @var int + */ + public $partnerSortValue = null; + + /** + * + * + * @var KalturaNullableBoolean + */ + public $forceStop = null; + + /** + * + * + * @var int + */ + public $thumbOffset = null; + + /** + * + * + * @var string + */ + public $systemName = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaCuePointListResponse extends KalturaObjectBase +{ + /** + * + * + * @var array of KalturaCuePoint + * @readonly + */ + public $objects; + + /** + * + * + * @var int + * @readonly + */ + public $totalCount = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +abstract class KalturaCuePointBaseFilter extends KalturaFilter +{ + /** + * + * + * @var string + */ + public $idEqual = null; + + /** + * + * + * @var string + */ + public $idIn = null; + + /** + * + * + * @var KalturaCuePointType + */ + public $cuePointTypeEqual = null; + + /** + * + * + * @var string + */ + public $cuePointTypeIn = null; + + /** + * + * + * @var KalturaCuePointStatus + */ + public $statusEqual = null; + + /** + * + * + * @var string + */ + public $statusIn = null; + + /** + * + * + * @var string + */ + public $entryIdEqual = null; + + /** + * + * + * @var string + */ + public $entryIdIn = null; + + /** + * + * + * @var int + */ + public $createdAtGreaterThanOrEqual = null; + + /** + * + * + * @var int + */ + public $createdAtLessThanOrEqual = null; + + /** + * + * + * @var int + */ + public $updatedAtGreaterThanOrEqual = null; + + /** + * + * + * @var int + */ + public $updatedAtLessThanOrEqual = null; + + /** + * + * + * @var string + */ + public $tagsLike = null; + + /** + * + * + * @var string + */ + public $tagsMultiLikeOr = null; + + /** + * + * + * @var string + */ + public $tagsMultiLikeAnd = null; + + /** + * + * + * @var int + */ + public $startTimeGreaterThanOrEqual = null; + + /** + * + * + * @var int + */ + public $startTimeLessThanOrEqual = null; + + /** + * + * + * @var string + */ + public $userIdEqual = null; + + /** + * + * + * @var string + */ + public $userIdIn = null; + + /** + * + * + * @var int + */ + public $partnerSortValueEqual = null; + + /** + * + * + * @var string + */ + public $partnerSortValueIn = null; + + /** + * + * + * @var int + */ + public $partnerSortValueGreaterThanOrEqual = null; + + /** + * + * + * @var int + */ + public $partnerSortValueLessThanOrEqual = null; + + /** + * + * + * @var KalturaNullableBoolean + */ + public $forceStopEqual = null; + + /** + * + * + * @var string + */ + public $systemNameEqual = null; + + /** + * + * + * @var string + */ + public $systemNameIn = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaCuePointFilter extends KalturaCuePointBaseFilter +{ + +} + + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaCuePointService extends KalturaServiceBase +{ + function __construct(KalturaClient $client = null) + { + parent::__construct($client); + } + + /** + * Allows you to add an cue point object associated with an entry + * + * @param KalturaCuePoint $cuePoint + * @return KalturaCuePoint + */ + function add(KalturaCuePoint $cuePoint) + { + $kparams = array(); + $this->client->addParam($kparams, "cuePoint", $cuePoint->toParams()); + $this->client->queueServiceActionCall("cuepoint_cuepoint", "add", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaCuePoint"); + return $resultObject; + } + + /** + * Allows you to add multiple cue points objects by uploading XML that contains multiple cue point definitions + * + * @param file $fileData + * @return KalturaCuePointListResponse + */ + function addFromBulk($fileData) + { + $kparams = array(); + $kfiles = array(); + $this->client->addParam($kfiles, "fileData", $fileData); + $this->client->queueServiceActionCall("cuepoint_cuepoint", "addFromBulk", $kparams, $kfiles); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaCuePointListResponse"); + return $resultObject; + } + + /** + * Download multiple cue points objects as XML definitions + * + * @param KalturaCuePointFilter $filter + * @param KalturaFilterPager $pager + * @return file + */ + function serveBulk(KalturaCuePointFilter $filter = null, KalturaFilterPager $pager = null) + { + $kparams = array(); + if ($filter !== null) + $this->client->addParam($kparams, "filter", $filter->toParams()); + if ($pager !== null) + $this->client->addParam($kparams, "pager", $pager->toParams()); + $this->client->queueServiceActionCall("cuepoint_cuepoint", "serveBulk", $kparams); + if(!$this->client->getDestinationPath() && !$this->client->getReturnServedResult()) + return $this->client->getServeUrl(); + return $this->client->doQueue(); + } + + /** + * Retrieve an CuePoint object by id + * + * @param string $id + * @return KalturaCuePoint + */ + function get($id) + { + $kparams = array(); + $this->client->addParam($kparams, "id", $id); + $this->client->queueServiceActionCall("cuepoint_cuepoint", "get", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaCuePoint"); + return $resultObject; + } + + /** + * List cue point objects by filter and pager + * + * @param KalturaCuePointFilter $filter + * @param KalturaFilterPager $pager + * @return KalturaCuePointListResponse + */ + function listAction(KalturaCuePointFilter $filter = null, KalturaFilterPager $pager = null) + { + $kparams = array(); + if ($filter !== null) + $this->client->addParam($kparams, "filter", $filter->toParams()); + if ($pager !== null) + $this->client->addParam($kparams, "pager", $pager->toParams()); + $this->client->queueServiceActionCall("cuepoint_cuepoint", "list", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaCuePointListResponse"); + return $resultObject; + } + + /** + * Count cue point objects by filter + * + * @param KalturaCuePointFilter $filter + * @return int + */ + function count(KalturaCuePointFilter $filter = null) + { + $kparams = array(); + if ($filter !== null) + $this->client->addParam($kparams, "filter", $filter->toParams()); + $this->client->queueServiceActionCall("cuepoint_cuepoint", "count", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "integer"); + return $resultObject; + } + + /** + * Update cue point by id + * + * @param string $id + * @param KalturaCuePoint $cuePoint + * @return KalturaCuePoint + */ + function update($id, KalturaCuePoint $cuePoint) + { + $kparams = array(); + $this->client->addParam($kparams, "id", $id); + $this->client->addParam($kparams, "cuePoint", $cuePoint->toParams()); + $this->client->queueServiceActionCall("cuepoint_cuepoint", "update", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaCuePoint"); + return $resultObject; + } + + /** + * Delete cue point by id, and delete all children cue points + * + * @param string $id + * @return + */ + function delete($id) + { + $kparams = array(); + $this->client->addParam($kparams, "id", $id); + $this->client->queueServiceActionCall("cuepoint_cuepoint", "delete", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "null"); + return $resultObject; + } +} +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaCuePointClientPlugin extends KalturaClientPlugin +{ + /** + * @var KalturaCuePointService + */ + public $cuePoint = null; + + protected function __construct(KalturaClient $client) + { + parent::__construct($client); + $this->cuePoint = new KalturaCuePointService($client); + } + + /** + * @return KalturaCuePointClientPlugin + */ + public static function get(KalturaClient $client) + { + return new KalturaCuePointClientPlugin($client); + } + + /** + * @return array + */ + public function getServices() + { + $services = array( + 'cuePoint' => $this->cuePoint, + ); + return $services; + } + + /** + * @return string + */ + public function getName() + { + return 'cuePoint'; + } +} + diff --git a/local/kaltura/API/KalturaPlugins/KalturaDocumentClientPlugin.php b/local/kaltura/API/KalturaPlugins/KalturaDocumentClientPlugin.php new file mode 100644 index 0000000000000..b4ef635d2a2fc --- /dev/null +++ b/local/kaltura/API/KalturaPlugins/KalturaDocumentClientPlugin.php @@ -0,0 +1,944 @@ +. +// +// @ignore +// =================================================================================================== + +/** + * @package Kaltura + * @subpackage Client + */ +require_once(dirname(__FILE__) . "/../KalturaClientBase.php"); +require_once(dirname(__FILE__) . "/../KalturaEnums.php"); +require_once(dirname(__FILE__) . "/../KalturaTypes.php"); + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaDocumentType +{ + const DOCUMENT = 11; + const SWF = 12; + const PDF = 13; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaDocumentEntryOrderBy +{ + const CREATED_AT_ASC = "+createdAt"; + const END_DATE_ASC = "+endDate"; + const MODERATION_COUNT_ASC = "+moderationCount"; + const NAME_ASC = "+name"; + const PARTNER_SORT_VALUE_ASC = "+partnerSortValue"; + const RANK_ASC = "+rank"; + const RECENT_ASC = "+recent"; + const START_DATE_ASC = "+startDate"; + const TOTAL_RANK_ASC = "+totalRank"; + const UPDATED_AT_ASC = "+updatedAt"; + const WEIGHT_ASC = "+weight"; + const CREATED_AT_DESC = "-createdAt"; + const END_DATE_DESC = "-endDate"; + const MODERATION_COUNT_DESC = "-moderationCount"; + const NAME_DESC = "-name"; + const PARTNER_SORT_VALUE_DESC = "-partnerSortValue"; + const RANK_DESC = "-rank"; + const RECENT_DESC = "-recent"; + const START_DATE_DESC = "-startDate"; + const TOTAL_RANK_DESC = "-totalRank"; + const UPDATED_AT_DESC = "-updatedAt"; + const WEIGHT_DESC = "-weight"; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaDocumentFlavorParamsOrderBy +{ +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaDocumentFlavorParamsOutputOrderBy +{ +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaImageFlavorParamsOrderBy +{ +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaImageFlavorParamsOutputOrderBy +{ +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaPdfFlavorParamsOrderBy +{ +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaPdfFlavorParamsOutputOrderBy +{ +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaSwfFlavorParamsOrderBy +{ +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaSwfFlavorParamsOutputOrderBy +{ +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaDocumentEntry extends KalturaBaseEntry +{ + /** + * The type of the document + * + * + * @var KalturaDocumentType + * @insertonly + */ + public $documentType = null; + + /** + * Comma separated asset params ids that exists for this media entry + * + * + * @var string + * @readonly + */ + public $assetParamsIds = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaDocumentListResponse extends KalturaObjectBase +{ + /** + * + * + * @var array of KalturaDocumentEntry + * @readonly + */ + public $objects; + + /** + * + * + * @var int + * @readonly + */ + public $totalCount = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaDocumentFlavorParams extends KalturaFlavorParams +{ + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaImageFlavorParams extends KalturaFlavorParams +{ + /** + * + * + * @var int + */ + public $densityWidth = null; + + /** + * + * + * @var int + */ + public $densityHeight = null; + + /** + * + * + * @var int + */ + public $sizeWidth = null; + + /** + * + * + * @var int + */ + public $sizeHeight = null; + + /** + * + * + * @var int + */ + public $depth = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaPdfFlavorParams extends KalturaFlavorParams +{ + /** + * + * + * @var bool + */ + public $readonly = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaSwfFlavorParams extends KalturaFlavorParams +{ + /** + * + * + * @var int + */ + public $flashVersion = null; + + /** + * + * + * @var bool + */ + public $poly2Bitmap = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +abstract class KalturaDocumentEntryBaseFilter extends KalturaBaseEntryFilter +{ + /** + * + * + * @var KalturaDocumentType + */ + public $documentTypeEqual = null; + + /** + * + * + * @var string + */ + public $documentTypeIn = null; + + /** + * + * + * @var string + */ + public $assetParamsIdsMatchOr = null; + + /** + * + * + * @var string + */ + public $assetParamsIdsMatchAnd = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaDocumentFlavorParamsOutput extends KalturaFlavorParamsOutput +{ + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaImageFlavorParamsOutput extends KalturaFlavorParamsOutput +{ + /** + * + * + * @var int + */ + public $densityWidth = null; + + /** + * + * + * @var int + */ + public $densityHeight = null; + + /** + * + * + * @var int + */ + public $sizeWidth = null; + + /** + * + * + * @var int + */ + public $sizeHeight = null; + + /** + * + * + * @var int + */ + public $depth = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaPdfFlavorParamsOutput extends KalturaFlavorParamsOutput +{ + /** + * + * + * @var bool + */ + public $readonly = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaSwfFlavorParamsOutput extends KalturaFlavorParamsOutput +{ + /** + * + * + * @var int + */ + public $flashVersion = null; + + /** + * + * + * @var bool + */ + public $poly2Bitmap = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaDocumentEntryFilter extends KalturaDocumentEntryBaseFilter +{ + +} + +/** + * @package Kaltura + * @subpackage Client + */ +abstract class KalturaDocumentFlavorParamsBaseFilter extends KalturaFlavorParamsFilter +{ + +} + +/** + * @package Kaltura + * @subpackage Client + */ +abstract class KalturaImageFlavorParamsBaseFilter extends KalturaFlavorParamsFilter +{ + +} + +/** + * @package Kaltura + * @subpackage Client + */ +abstract class KalturaPdfFlavorParamsBaseFilter extends KalturaFlavorParamsFilter +{ + +} + +/** + * @package Kaltura + * @subpackage Client + */ +abstract class KalturaSwfFlavorParamsBaseFilter extends KalturaFlavorParamsFilter +{ + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaDocumentFlavorParamsFilter extends KalturaDocumentFlavorParamsBaseFilter +{ + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaImageFlavorParamsFilter extends KalturaImageFlavorParamsBaseFilter +{ + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaPdfFlavorParamsFilter extends KalturaPdfFlavorParamsBaseFilter +{ + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaSwfFlavorParamsFilter extends KalturaSwfFlavorParamsBaseFilter +{ + +} + +/** + * @package Kaltura + * @subpackage Client + */ +abstract class KalturaDocumentFlavorParamsOutputBaseFilter extends KalturaFlavorParamsOutputFilter +{ + +} + +/** + * @package Kaltura + * @subpackage Client + */ +abstract class KalturaImageFlavorParamsOutputBaseFilter extends KalturaFlavorParamsOutputFilter +{ + +} + +/** + * @package Kaltura + * @subpackage Client + */ +abstract class KalturaPdfFlavorParamsOutputBaseFilter extends KalturaFlavorParamsOutputFilter +{ + +} + +/** + * @package Kaltura + * @subpackage Client + */ +abstract class KalturaSwfFlavorParamsOutputBaseFilter extends KalturaFlavorParamsOutputFilter +{ + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaDocumentFlavorParamsOutputFilter extends KalturaDocumentFlavorParamsOutputBaseFilter +{ + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaImageFlavorParamsOutputFilter extends KalturaImageFlavorParamsOutputBaseFilter +{ + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaPdfFlavorParamsOutputFilter extends KalturaPdfFlavorParamsOutputBaseFilter +{ + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaSwfFlavorParamsOutputFilter extends KalturaSwfFlavorParamsOutputBaseFilter +{ + +} + + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaDocumentsService extends KalturaServiceBase +{ + function __construct(KalturaClient $client = null) + { + parent::__construct($client); + } + + /** + * Add new document entry after the specific document file was uploaded and the upload token id exists + * + * @param KalturaDocumentEntry $documentEntry Document entry metadata + * @param string $uploadTokenId Upload token id + * @return KalturaDocumentEntry + */ + function addFromUploadedFile(KalturaDocumentEntry $documentEntry, $uploadTokenId) + { + $kparams = array(); + $this->client->addParam($kparams, "documentEntry", $documentEntry->toParams()); + $this->client->addParam($kparams, "uploadTokenId", $uploadTokenId); + $this->client->queueServiceActionCall("document_documents", "addFromUploadedFile", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaDocumentEntry"); + return $resultObject; + } + + /** + * Copy entry into new entry + * + * @param string $sourceEntryId Document entry id to copy from + * @param KalturaDocumentEntry $documentEntry Document entry metadata + * @param int $sourceFlavorParamsId The flavor to be used as the new entry source, source flavor will be used if not specified + * @return KalturaDocumentEntry + */ + function addFromEntry($sourceEntryId, KalturaDocumentEntry $documentEntry = null, $sourceFlavorParamsId = null) + { + $kparams = array(); + $this->client->addParam($kparams, "sourceEntryId", $sourceEntryId); + if ($documentEntry !== null) + $this->client->addParam($kparams, "documentEntry", $documentEntry->toParams()); + $this->client->addParam($kparams, "sourceFlavorParamsId", $sourceFlavorParamsId); + $this->client->queueServiceActionCall("document_documents", "addFromEntry", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaDocumentEntry"); + return $resultObject; + } + + /** + * Copy flavor asset into new entry + * + * @param string $sourceFlavorAssetId Flavor asset id to be used as the new entry source + * @param KalturaDocumentEntry $documentEntry Document entry metadata + * @return KalturaDocumentEntry + */ + function addFromFlavorAsset($sourceFlavorAssetId, KalturaDocumentEntry $documentEntry = null) + { + $kparams = array(); + $this->client->addParam($kparams, "sourceFlavorAssetId", $sourceFlavorAssetId); + if ($documentEntry !== null) + $this->client->addParam($kparams, "documentEntry", $documentEntry->toParams()); + $this->client->queueServiceActionCall("document_documents", "addFromFlavorAsset", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaDocumentEntry"); + return $resultObject; + } + + /** + * Convert entry + * + * @param string $entryId Document entry id + * @param int $conversionProfileId + * @param array $dynamicConversionAttributes + * @return int + */ + function convert($entryId, $conversionProfileId = null, array $dynamicConversionAttributes = null) + { + $kparams = array(); + $this->client->addParam($kparams, "entryId", $entryId); + $this->client->addParam($kparams, "conversionProfileId", $conversionProfileId); + if ($dynamicConversionAttributes !== null) + foreach($dynamicConversionAttributes as $index => $obj) + { + $this->client->addParam($kparams, "dynamicConversionAttributes:$index", $obj->toParams()); + } + $this->client->queueServiceActionCall("document_documents", "convert", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "integer"); + return $resultObject; + } + + /** + * Get document entry by ID. + * + * @param string $entryId Document entry id + * @param int $version Desired version of the data + * @return KalturaDocumentEntry + */ + function get($entryId, $version = -1) + { + $kparams = array(); + $this->client->addParam($kparams, "entryId", $entryId); + $this->client->addParam($kparams, "version", $version); + $this->client->queueServiceActionCall("document_documents", "get", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaDocumentEntry"); + return $resultObject; + } + + /** + * Update document entry. Only the properties that were set will be updated. + * + * @param string $entryId Document entry id to update + * @param KalturaDocumentEntry $documentEntry Document entry metadata to update + * @return KalturaDocumentEntry + */ + function update($entryId, KalturaDocumentEntry $documentEntry) + { + $kparams = array(); + $this->client->addParam($kparams, "entryId", $entryId); + $this->client->addParam($kparams, "documentEntry", $documentEntry->toParams()); + $this->client->queueServiceActionCall("document_documents", "update", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaDocumentEntry"); + return $resultObject; + } + + /** + * Delete a document entry. + * + * @param string $entryId Document entry id to delete + * @return + */ + function delete($entryId) + { + $kparams = array(); + $this->client->addParam($kparams, "entryId", $entryId); + $this->client->queueServiceActionCall("document_documents", "delete", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "null"); + return $resultObject; + } + + /** + * List document entries by filter with paging support. + * + * @param KalturaDocumentEntryFilter $filter Document entry filter + * @param KalturaFilterPager $pager Pager + * @return KalturaDocumentListResponse + */ + function listAction(KalturaDocumentEntryFilter $filter = null, KalturaFilterPager $pager = null) + { + $kparams = array(); + if ($filter !== null) + $this->client->addParam($kparams, "filter", $filter->toParams()); + if ($pager !== null) + $this->client->addParam($kparams, "pager", $pager->toParams()); + $this->client->queueServiceActionCall("document_documents", "list", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaDocumentListResponse"); + return $resultObject; + } + + /** + * Upload a document file to Kaltura, then the file can be used to create a document entry. + * + * @param file $fileData The file data + * @return string + */ + function upload($fileData) + { + $kparams = array(); + $kfiles = array(); + $this->client->addParam($kfiles, "fileData", $fileData); + $this->client->queueServiceActionCall("document_documents", "upload", $kparams, $kfiles); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "string"); + return $resultObject; + } + + /** + * This will queue a batch job for converting the document file to swf + Returns the URL where the new swf will be available + * + * @param string $entryId + * @return string + */ + function convertPptToSwf($entryId) + { + $kparams = array(); + $this->client->addParam($kparams, "entryId", $entryId); + $this->client->queueServiceActionCall("document_documents", "convertPptToSwf", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "string"); + return $resultObject; + } + + /** + * Serves the file content + * + * @param string $entryId Document entry id + * @param string $flavorAssetId Flavor asset id + * @param bool $forceProxy Force to get the content without redirect + * @return file + */ + function serve($entryId, $flavorAssetId = null, $forceProxy = false) + { + $kparams = array(); + $this->client->addParam($kparams, "entryId", $entryId); + $this->client->addParam($kparams, "flavorAssetId", $flavorAssetId); + $this->client->addParam($kparams, "forceProxy", $forceProxy); + $this->client->queueServiceActionCall("document_documents", "serve", $kparams); + if(!$this->client->getDestinationPath() && !$this->client->getReturnServedResult()) + return $this->client->getServeUrl(); + return $this->client->doQueue(); + } + + /** + * Serves the file content + * + * @param string $entryId Document entry id + * @param string $flavorParamsId Flavor params id + * @param bool $forceProxy Force to get the content without redirect + * @return file + */ + function serveByFlavorParamsId($entryId, $flavorParamsId = null, $forceProxy = false) + { + $kparams = array(); + $this->client->addParam($kparams, "entryId", $entryId); + $this->client->addParam($kparams, "flavorParamsId", $flavorParamsId); + $this->client->addParam($kparams, "forceProxy", $forceProxy); + $this->client->queueServiceActionCall("document_documents", "serveByFlavorParamsId", $kparams); + if(!$this->client->getDestinationPath() && !$this->client->getReturnServedResult()) + return $this->client->getServeUrl(); + return $this->client->doQueue(); + } + + /** + * Replace content associated with the given document entry. + * + * @param string $entryId Document entry id to update + * @param KalturaResource $resource Resource to be used to replace entry doc content + * @param int $conversionProfileId The conversion profile id to be used on the entry + * @return KalturaDocumentEntry + */ + function updateContent($entryId, KalturaResource $resource, $conversionProfileId = null) + { + $kparams = array(); + $this->client->addParam($kparams, "entryId", $entryId); + $this->client->addParam($kparams, "resource", $resource->toParams()); + $this->client->addParam($kparams, "conversionProfileId", $conversionProfileId); + $this->client->queueServiceActionCall("document_documents", "updateContent", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaDocumentEntry"); + return $resultObject; + } + + /** + * Approves document replacement + * + * @param string $entryId Document entry id to replace + * @return KalturaDocumentEntry + */ + function approveReplace($entryId) + { + $kparams = array(); + $this->client->addParam($kparams, "entryId", $entryId); + $this->client->queueServiceActionCall("document_documents", "approveReplace", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaDocumentEntry"); + return $resultObject; + } + + /** + * Cancels document replacement + * + * @param string $entryId Document entry id to cancel + * @return KalturaDocumentEntry + */ + function cancelReplace($entryId) + { + $kparams = array(); + $this->client->addParam($kparams, "entryId", $entryId); + $this->client->queueServiceActionCall("document_documents", "cancelReplace", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaDocumentEntry"); + return $resultObject; + } +} +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaDocumentClientPlugin extends KalturaClientPlugin +{ + /** + * @var KalturaDocumentsService + */ + public $documents = null; + + protected function __construct(KalturaClient $client) + { + parent::__construct($client); + $this->documents = new KalturaDocumentsService($client); + } + + /** + * @return KalturaDocumentClientPlugin + */ + public static function get(KalturaClient $client) + { + return new KalturaDocumentClientPlugin($client); + } + + /** + * @return array + */ + public function getServices() + { + $services = array( + 'documents' => $this->documents, + ); + return $services; + } + + /** + * @return string + */ + public function getName() + { + return 'document'; + } +} + diff --git a/local/kaltura/API/KalturaPlugins/KalturaDrmClientPlugin.php b/local/kaltura/API/KalturaPlugins/KalturaDrmClientPlugin.php new file mode 100644 index 0000000000000..f4ed99398a7af --- /dev/null +++ b/local/kaltura/API/KalturaPlugins/KalturaDrmClientPlugin.php @@ -0,0 +1,434 @@ +. +// +// @ignore +// =================================================================================================== + +/** + * @package Kaltura + * @subpackage Client + */ +require_once(dirname(__FILE__) . "/../KalturaClientBase.php"); +require_once(dirname(__FILE__) . "/../KalturaEnums.php"); +require_once(dirname(__FILE__) . "/../KalturaTypes.php"); + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaDrmProfileStatus +{ + const ACTIVE = 1; + const DELETED = 2; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaDrmProfileOrderBy +{ + const ID_ASC = "+id"; + const NAME_ASC = "+name"; + const ID_DESC = "-id"; + const NAME_DESC = "-name"; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaDrmProviderType +{ + const WIDEVINE = "widevine.WIDEVINE"; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaDrmProfile extends KalturaObjectBase +{ + /** + * + * + * @var int + * @readonly + */ + public $id = null; + + /** + * + * + * @var int + * @insertonly + */ + public $partnerId = null; + + /** + * + * + * @var string + */ + public $name = null; + + /** + * + * + * @var string + */ + public $description = null; + + /** + * + * + * @var KalturaDrmProviderType + */ + public $provider = null; + + /** + * + * + * @var KalturaDrmProfileStatus + */ + public $status = null; + + /** + * + * + * @var string + */ + public $licenseServerUrl = null; + + /** + * + * + * @var string + */ + public $defaultPolicy = null; + + /** + * + * + * @var int + * @readonly + */ + public $createdAt = null; + + /** + * + * + * @var int + * @readonly + */ + public $updatedAt = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaDrmProfileListResponse extends KalturaObjectBase +{ + /** + * + * + * @var array of KalturaDrmProfile + * @readonly + */ + public $objects; + + /** + * + * + * @var int + * @readonly + */ + public $totalCount = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +abstract class KalturaDrmProfileBaseFilter extends KalturaFilter +{ + /** + * + * + * @var int + */ + public $idEqual = null; + + /** + * + * + * @var string + */ + public $idIn = null; + + /** + * + * + * @var int + */ + public $partnerIdEqual = null; + + /** + * + * + * @var string + */ + public $partnerIdIn = null; + + /** + * + * + * @var string + */ + public $nameLike = null; + + /** + * + * + * @var KalturaDrmProviderType + */ + public $providerEqual = null; + + /** + * + * + * @var string + */ + public $providerIn = null; + + /** + * + * + * @var KalturaDrmProfileStatus + */ + public $statusEqual = null; + + /** + * + * + * @var string + */ + public $statusIn = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaDrmProfileFilter extends KalturaDrmProfileBaseFilter +{ + +} + + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaDrmProfileService extends KalturaServiceBase +{ + function __construct(KalturaClient $client = null) + { + parent::__construct($client); + } + + /** + * Allows you to add a new DrmProfile object + * + * @param KalturaDrmProfile $drmProfile + * @return KalturaDrmProfile + */ + function add(KalturaDrmProfile $drmProfile) + { + $kparams = array(); + $this->client->addParam($kparams, "drmProfile", $drmProfile->toParams()); + $this->client->queueServiceActionCall("drm_drmprofile", "add", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaDrmProfile"); + return $resultObject; + } + + /** + * Retrieve a KalturaDrmProfile object by ID + * + * @param int $drmProfileId + * @return KalturaDrmProfile + */ + function get($drmProfileId) + { + $kparams = array(); + $this->client->addParam($kparams, "drmProfileId", $drmProfileId); + $this->client->queueServiceActionCall("drm_drmprofile", "get", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaDrmProfile"); + return $resultObject; + } + + /** + * Update an existing KalturaDrmProfile object + * + * @param int $drmProfileId + * @param KalturaDrmProfile $drmProfile Id + * @return KalturaDrmProfile + */ + function update($drmProfileId, KalturaDrmProfile $drmProfile) + { + $kparams = array(); + $this->client->addParam($kparams, "drmProfileId", $drmProfileId); + $this->client->addParam($kparams, "drmProfile", $drmProfile->toParams()); + $this->client->queueServiceActionCall("drm_drmprofile", "update", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaDrmProfile"); + return $resultObject; + } + + /** + * Mark the KalturaDrmProfile object as deleted + * + * @param int $drmProfileId + * @return KalturaDrmProfile + */ + function delete($drmProfileId) + { + $kparams = array(); + $this->client->addParam($kparams, "drmProfileId", $drmProfileId); + $this->client->queueServiceActionCall("drm_drmprofile", "delete", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaDrmProfile"); + return $resultObject; + } + + /** + * List KalturaDrmProfile objects + * + * @param KalturaDrmProfileFilter $filter + * @param KalturaFilterPager $pager + * @return KalturaDrmProfileListResponse + */ + function listAction(KalturaDrmProfileFilter $filter = null, KalturaFilterPager $pager = null) + { + $kparams = array(); + if ($filter !== null) + $this->client->addParam($kparams, "filter", $filter->toParams()); + if ($pager !== null) + $this->client->addParam($kparams, "pager", $pager->toParams()); + $this->client->queueServiceActionCall("drm_drmprofile", "list", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaDrmProfileListResponse"); + return $resultObject; + } + + /** + * Retrieve a KalturaDrmProfile object by provider, if no specific profile defined return default profile + * + * @param string $provider + * @return KalturaDrmProfile + */ + function getByProvider($provider) + { + $kparams = array(); + $this->client->addParam($kparams, "provider", $provider); + $this->client->queueServiceActionCall("drm_drmprofile", "getByProvider", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaDrmProfile"); + return $resultObject; + } +} +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaDrmClientPlugin extends KalturaClientPlugin +{ + /** + * @var KalturaDrmProfileService + */ + public $drmProfile = null; + + protected function __construct(KalturaClient $client) + { + parent::__construct($client); + $this->drmProfile = new KalturaDrmProfileService($client); + } + + /** + * @return KalturaDrmClientPlugin + */ + public static function get(KalturaClient $client) + { + return new KalturaDrmClientPlugin($client); + } + + /** + * @return array + */ + public function getServices() + { + $services = array( + 'drmProfile' => $this->drmProfile, + ); + return $services; + } + + /** + * @return string + */ + public function getName() + { + return 'drm'; + } +} + diff --git a/local/kaltura/API/KalturaPlugins/KalturaDropFolderClientPlugin.php b/local/kaltura/API/KalturaPlugins/KalturaDropFolderClientPlugin.php new file mode 100644 index 0000000000000..9abc8fc3db924 --- /dev/null +++ b/local/kaltura/API/KalturaPlugins/KalturaDropFolderClientPlugin.php @@ -0,0 +1,1777 @@ +. +// +// @ignore +// =================================================================================================== + +/** + * @package Kaltura + * @subpackage Client + */ +require_once(dirname(__FILE__) . "/../KalturaClientBase.php"); +require_once(dirname(__FILE__) . "/../KalturaEnums.php"); +require_once(dirname(__FILE__) . "/../KalturaTypes.php"); + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaDropFolderContentFileHandlerMatchPolicy +{ + const ADD_AS_NEW = 1; + const MATCH_EXISTING_OR_ADD_AS_NEW = 2; + const MATCH_EXISTING_OR_KEEP_IN_FOLDER = 3; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaDropFolderFileDeletePolicy +{ + const MANUAL_DELETE = 1; + const AUTO_DELETE = 2; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaDropFolderFileStatus +{ + const UPLOADING = 1; + const PENDING = 2; + const WAITING = 3; + const HANDLED = 4; + const IGNORE = 5; + const DELETED = 6; + const PURGED = 7; + const NO_MATCH = 8; + const ERROR_HANDLING = 9; + const ERROR_DELETING = 10; + const DOWNLOADING = 11; + const ERROR_DOWNLOADING = 12; + const PROCESSING = 13; + const PARSED = 14; + const DETECTED = 15; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaDropFolderStatus +{ + const DISABLED = 0; + const ENABLED = 1; + const DELETED = 2; + const ERROR = 3; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaDropFolderErrorCode +{ + const ERROR_CONNECT = "1"; + const ERROR_AUTENTICATE = "2"; + const ERROR_GET_PHISICAL_FILE_LIST = "3"; + const ERROR_GET_DB_FILE_LIST = "4"; + const DROP_FOLDER_APP_ERROR = "5"; + const CONTENT_MATCH_POLICY_UNDEFINED = "6"; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaDropFolderFileErrorCode +{ + const ERROR_ADDING_BULK_UPLOAD = "dropFolderXmlBulkUpload.ERROR_ADDING_BULK_UPLOAD"; + const ERROR_ADD_CONTENT_RESOURCE = "dropFolderXmlBulkUpload.ERROR_ADD_CONTENT_RESOURCE"; + const ERROR_IN_BULK_UPLOAD = "dropFolderXmlBulkUpload.ERROR_IN_BULK_UPLOAD"; + const ERROR_WRITING_TEMP_FILE = "dropFolderXmlBulkUpload.ERROR_WRITING_TEMP_FILE"; + const LOCAL_FILE_WRONG_CHECKSUM = "dropFolderXmlBulkUpload.LOCAL_FILE_WRONG_CHECKSUM"; + const LOCAL_FILE_WRONG_SIZE = "dropFolderXmlBulkUpload.LOCAL_FILE_WRONG_SIZE"; + const MALFORMED_XML_FILE = "dropFolderXmlBulkUpload.MALFORMED_XML_FILE"; + const XML_FILE_SIZE_EXCEED_LIMIT = "dropFolderXmlBulkUpload.XML_FILE_SIZE_EXCEED_LIMIT"; + const ERROR_UPDATE_ENTRY = "1"; + const ERROR_ADD_ENTRY = "2"; + const FLAVOR_NOT_FOUND = "3"; + const FLAVOR_MISSING_IN_FILE_NAME = "4"; + const SLUG_REGEX_NO_MATCH = "5"; + const ERROR_READING_FILE = "6"; + const ERROR_DOWNLOADING_FILE = "7"; + const ERROR_UPDATE_FILE = "8"; + const ERROR_ADDING_CONTENT_PROCESSOR = "10"; + const ERROR_IN_CONTENT_PROCESSOR = "11"; + const ERROR_DELETING_FILE = "12"; + const FILE_NO_MATCH = "13"; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaDropFolderFileHandlerType +{ + const XML = "dropFolderXmlBulkUpload.XML"; + const CONTENT = "1"; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaDropFolderFileOrderBy +{ + const CREATED_AT_ASC = "+createdAt"; + const FILE_NAME_ASC = "+fileName"; + const FILE_SIZE_ASC = "+fileSize"; + const FILE_SIZE_LAST_SET_AT_ASC = "+fileSizeLastSetAt"; + const ID_ASC = "+id"; + const PARSED_FLAVOR_ASC = "+parsedFlavor"; + const PARSED_SLUG_ASC = "+parsedSlug"; + const UPDATED_AT_ASC = "+updatedAt"; + const CREATED_AT_DESC = "-createdAt"; + const FILE_NAME_DESC = "-fileName"; + const FILE_SIZE_DESC = "-fileSize"; + const FILE_SIZE_LAST_SET_AT_DESC = "-fileSizeLastSetAt"; + const ID_DESC = "-id"; + const PARSED_FLAVOR_DESC = "-parsedFlavor"; + const PARSED_SLUG_DESC = "-parsedSlug"; + const UPDATED_AT_DESC = "-updatedAt"; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaDropFolderOrderBy +{ + const CREATED_AT_ASC = "+createdAt"; + const ID_ASC = "+id"; + const NAME_ASC = "+name"; + const UPDATED_AT_ASC = "+updatedAt"; + const CREATED_AT_DESC = "-createdAt"; + const ID_DESC = "-id"; + const NAME_DESC = "-name"; + const UPDATED_AT_DESC = "-updatedAt"; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaDropFolderType +{ + const WEBEX = "WebexDropFolder.WEBEX"; + const LOCAL = "1"; + const FTP = "2"; + const SCP = "3"; + const SFTP = "4"; + const S3 = "6"; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaFtpDropFolderOrderBy +{ + const CREATED_AT_ASC = "+createdAt"; + const ID_ASC = "+id"; + const NAME_ASC = "+name"; + const UPDATED_AT_ASC = "+updatedAt"; + const CREATED_AT_DESC = "-createdAt"; + const ID_DESC = "-id"; + const NAME_DESC = "-name"; + const UPDATED_AT_DESC = "-updatedAt"; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaRemoteDropFolderOrderBy +{ + const CREATED_AT_ASC = "+createdAt"; + const ID_ASC = "+id"; + const NAME_ASC = "+name"; + const UPDATED_AT_ASC = "+updatedAt"; + const CREATED_AT_DESC = "-createdAt"; + const ID_DESC = "-id"; + const NAME_DESC = "-name"; + const UPDATED_AT_DESC = "-updatedAt"; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaScpDropFolderOrderBy +{ + const CREATED_AT_ASC = "+createdAt"; + const ID_ASC = "+id"; + const NAME_ASC = "+name"; + const UPDATED_AT_ASC = "+updatedAt"; + const CREATED_AT_DESC = "-createdAt"; + const ID_DESC = "-id"; + const NAME_DESC = "-name"; + const UPDATED_AT_DESC = "-updatedAt"; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaSftpDropFolderOrderBy +{ + const CREATED_AT_ASC = "+createdAt"; + const ID_ASC = "+id"; + const NAME_ASC = "+name"; + const UPDATED_AT_ASC = "+updatedAt"; + const CREATED_AT_DESC = "-createdAt"; + const ID_DESC = "-id"; + const NAME_DESC = "-name"; + const UPDATED_AT_DESC = "-updatedAt"; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaSshDropFolderOrderBy +{ + const CREATED_AT_ASC = "+createdAt"; + const ID_ASC = "+id"; + const NAME_ASC = "+name"; + const UPDATED_AT_ASC = "+updatedAt"; + const CREATED_AT_DESC = "-createdAt"; + const ID_DESC = "-id"; + const NAME_DESC = "-name"; + const UPDATED_AT_DESC = "-updatedAt"; +} + +/** + * @package Kaltura + * @subpackage Client + */ +abstract class KalturaDropFolderFileHandlerConfig extends KalturaObjectBase +{ + /** + * + * + * @var KalturaDropFolderFileHandlerType + * @readonly + */ + public $handlerType = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaDropFolder extends KalturaObjectBase +{ + /** + * + * + * @var int + * @readonly + */ + public $id = null; + + /** + * + * + * @var int + * @insertonly + */ + public $partnerId = null; + + /** + * + * + * @var string + */ + public $name = null; + + /** + * + * + * @var string + */ + public $description = null; + + /** + * + * + * @var KalturaDropFolderType + */ + public $type = null; + + /** + * + * + * @var KalturaDropFolderStatus + */ + public $status = null; + + /** + * + * + * @var int + */ + public $conversionProfileId = null; + + /** + * + * + * @var int + */ + public $dc = null; + + /** + * + * + * @var string + */ + public $path = null; + + /** + * The ammount of time, in seconds, that should pass so that a file with no change in size we'll be treated as "finished uploading to folder" + * + * + * @var int + */ + public $fileSizeCheckInterval = null; + + /** + * + * + * @var KalturaDropFolderFileDeletePolicy + */ + public $fileDeletePolicy = null; + + /** + * + * + * @var int + */ + public $autoFileDeleteDays = null; + + /** + * + * + * @var KalturaDropFolderFileHandlerType + */ + public $fileHandlerType = null; + + /** + * + * + * @var string + */ + public $fileNamePatterns = null; + + /** + * + * + * @var KalturaDropFolderFileHandlerConfig + */ + public $fileHandlerConfig; + + /** + * + * + * @var string + */ + public $tags = null; + + /** + * + * + * @var KalturaDropFolderErrorCode + */ + public $errorCode = null; + + /** + * + * + * @var string + */ + public $errorDescription = null; + + /** + * + * + * @var string + */ + public $ignoreFileNamePatterns = null; + + /** + * + * + * @var int + * @readonly + */ + public $createdAt = null; + + /** + * + * + * @var int + * @readonly + */ + public $updatedAt = null; + + /** + * + * + * @var int + */ + public $lastAccessedAt = null; + + /** + * + * + * @var bool + */ + public $incremental = null; + + /** + * + * + * @var int + */ + public $lastFileTimestamp = null; + + /** + * + * + * @var int + */ + public $metadataProfileId = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaDropFolderFile extends KalturaObjectBase +{ + /** + * + * + * @var int + * @readonly + */ + public $id = null; + + /** + * + * + * @var int + * @readonly + */ + public $partnerId = null; + + /** + * + * + * @var int + * @insertonly + */ + public $dropFolderId = null; + + /** + * + * + * @var string + * @insertonly + */ + public $fileName = null; + + /** + * + * + * @var float + */ + public $fileSize = null; + + /** + * + * + * @var int + * @readonly + */ + public $fileSizeLastSetAt = null; + + /** + * + * + * @var KalturaDropFolderFileStatus + * @readonly + */ + public $status = null; + + /** + * + * + * @var KalturaDropFolderType + * @readonly + */ + public $type = null; + + /** + * + * + * @var string + */ + public $parsedSlug = null; + + /** + * + * + * @var string + */ + public $parsedFlavor = null; + + /** + * + * + * @var int + */ + public $leadDropFolderFileId = null; + + /** + * + * + * @var int + */ + public $deletedDropFolderFileId = null; + + /** + * + * + * @var string + */ + public $entryId = null; + + /** + * + * + * @var KalturaDropFolderFileErrorCode + */ + public $errorCode = null; + + /** + * + * + * @var string + */ + public $errorDescription = null; + + /** + * + * + * @var string + */ + public $lastModificationTime = null; + + /** + * + * + * @var int + * @readonly + */ + public $createdAt = null; + + /** + * + * + * @var int + * @readonly + */ + public $updatedAt = null; + + /** + * + * + * @var int + */ + public $uploadStartDetectedAt = null; + + /** + * + * + * @var int + */ + public $uploadEndDetectedAt = null; + + /** + * + * + * @var int + */ + public $importStartedAt = null; + + /** + * + * + * @var int + */ + public $importEndedAt = null; + + /** + * + * + * @var int + * @readonly + */ + public $batchJobId = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaDropFolderFileListResponse extends KalturaObjectBase +{ + /** + * + * + * @var array of KalturaDropFolderFile + * @readonly + */ + public $objects; + + /** + * + * + * @var int + * @readonly + */ + public $totalCount = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaDropFolderListResponse extends KalturaObjectBase +{ + /** + * + * + * @var array of KalturaDropFolder + * @readonly + */ + public $objects; + + /** + * + * + * @var int + * @readonly + */ + public $totalCount = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +abstract class KalturaDropFolderBaseFilter extends KalturaFilter +{ + /** + * + * + * @var int + */ + public $idEqual = null; + + /** + * + * + * @var string + */ + public $idIn = null; + + /** + * + * + * @var int + */ + public $partnerIdEqual = null; + + /** + * + * + * @var string + */ + public $partnerIdIn = null; + + /** + * + * + * @var string + */ + public $nameLike = null; + + /** + * + * + * @var KalturaDropFolderType + */ + public $typeEqual = null; + + /** + * + * + * @var string + */ + public $typeIn = null; + + /** + * + * + * @var KalturaDropFolderStatus + */ + public $statusEqual = null; + + /** + * + * + * @var string + */ + public $statusIn = null; + + /** + * + * + * @var int + */ + public $conversionProfileIdEqual = null; + + /** + * + * + * @var string + */ + public $conversionProfileIdIn = null; + + /** + * + * + * @var int + */ + public $dcEqual = null; + + /** + * + * + * @var string + */ + public $dcIn = null; + + /** + * + * + * @var string + */ + public $pathEqual = null; + + /** + * + * + * @var string + */ + public $pathLike = null; + + /** + * + * + * @var KalturaDropFolderFileHandlerType + */ + public $fileHandlerTypeEqual = null; + + /** + * + * + * @var string + */ + public $fileHandlerTypeIn = null; + + /** + * + * + * @var string + */ + public $fileNamePatternsLike = null; + + /** + * + * + * @var string + */ + public $fileNamePatternsMultiLikeOr = null; + + /** + * + * + * @var string + */ + public $fileNamePatternsMultiLikeAnd = null; + + /** + * + * + * @var string + */ + public $tagsLike = null; + + /** + * + * + * @var string + */ + public $tagsMultiLikeOr = null; + + /** + * + * + * @var string + */ + public $tagsMultiLikeAnd = null; + + /** + * + * + * @var KalturaDropFolderErrorCode + */ + public $errorCodeEqual = null; + + /** + * + * + * @var string + */ + public $errorCodeIn = null; + + /** + * + * + * @var int + */ + public $createdAtGreaterThanOrEqual = null; + + /** + * + * + * @var int + */ + public $createdAtLessThanOrEqual = null; + + /** + * + * + * @var int + */ + public $updatedAtGreaterThanOrEqual = null; + + /** + * + * + * @var int + */ + public $updatedAtLessThanOrEqual = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaDropFolderContentFileHandlerConfig extends KalturaDropFolderFileHandlerConfig +{ + /** + * + * + * @var KalturaDropFolderContentFileHandlerMatchPolicy + */ + public $contentMatchPolicy = null; + + /** + * Regular expression that defines valid file names to be handled. + * The following might be extracted from the file name and used if defined: + * - (?P\w+) - will be used as the drop folder file's parsed slug. + * - (?P\w+) - will be used as the drop folder file's parsed flavor. + * + * + * @var string + */ + public $slugRegex = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaDropFolderContentProcessorJobData extends KalturaJobData +{ + /** + * + * + * @var string + */ + public $dropFolderFileIds = null; + + /** + * + * + * @var string + */ + public $parsedSlug = null; + + /** + * + * + * @var KalturaDropFolderContentFileHandlerMatchPolicy + */ + public $contentMatchPolicy = null; + + /** + * + * + * @var int + */ + public $conversionProfileId = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +abstract class KalturaDropFolderFileBaseFilter extends KalturaFilter +{ + /** + * + * + * @var int + */ + public $idEqual = null; + + /** + * + * + * @var string + */ + public $idIn = null; + + /** + * + * + * @var int + */ + public $partnerIdEqual = null; + + /** + * + * + * @var string + */ + public $partnerIdIn = null; + + /** + * + * + * @var int + */ + public $dropFolderIdEqual = null; + + /** + * + * + * @var string + */ + public $dropFolderIdIn = null; + + /** + * + * + * @var string + */ + public $fileNameEqual = null; + + /** + * + * + * @var string + */ + public $fileNameIn = null; + + /** + * + * + * @var string + */ + public $fileNameLike = null; + + /** + * + * + * @var KalturaDropFolderFileStatus + */ + public $statusEqual = null; + + /** + * + * + * @var string + */ + public $statusIn = null; + + /** + * + * + * @var string + */ + public $statusNotIn = null; + + /** + * + * + * @var string + */ + public $parsedSlugEqual = null; + + /** + * + * + * @var string + */ + public $parsedSlugIn = null; + + /** + * + * + * @var string + */ + public $parsedSlugLike = null; + + /** + * + * + * @var string + */ + public $parsedFlavorEqual = null; + + /** + * + * + * @var string + */ + public $parsedFlavorIn = null; + + /** + * + * + * @var string + */ + public $parsedFlavorLike = null; + + /** + * + * + * @var int + */ + public $leadDropFolderFileIdEqual = null; + + /** + * + * + * @var int + */ + public $deletedDropFolderFileIdEqual = null; + + /** + * + * + * @var string + */ + public $entryIdEqual = null; + + /** + * + * + * @var KalturaDropFolderFileErrorCode + */ + public $errorCodeEqual = null; + + /** + * + * + * @var string + */ + public $errorCodeIn = null; + + /** + * + * + * @var int + */ + public $createdAtGreaterThanOrEqual = null; + + /** + * + * + * @var int + */ + public $createdAtLessThanOrEqual = null; + + /** + * + * + * @var int + */ + public $updatedAtGreaterThanOrEqual = null; + + /** + * + * + * @var int + */ + public $updatedAtLessThanOrEqual = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +abstract class KalturaRemoteDropFolder extends KalturaDropFolder +{ + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaDropFolderFileFilter extends KalturaDropFolderFileBaseFilter +{ + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaDropFolderFilter extends KalturaDropFolderBaseFilter +{ + /** + * + * + * @var KalturaNullableBoolean + */ + public $currentDc = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaFtpDropFolder extends KalturaRemoteDropFolder +{ + /** + * + * + * @var string + */ + public $host = null; + + /** + * + * + * @var int + */ + public $port = null; + + /** + * + * + * @var string + */ + public $username = null; + + /** + * + * + * @var string + */ + public $password = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +abstract class KalturaSshDropFolder extends KalturaRemoteDropFolder +{ + /** + * + * + * @var string + */ + public $host = null; + + /** + * + * + * @var int + */ + public $port = null; + + /** + * + * + * @var string + */ + public $username = null; + + /** + * + * + * @var string + */ + public $password = null; + + /** + * + * + * @var string + */ + public $privateKey = null; + + /** + * + * + * @var string + */ + public $publicKey = null; + + /** + * + * + * @var string + */ + public $passPhrase = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaDropFolderFileResource extends KalturaDataCenterContentResource +{ + /** + * Id of the drop folder file object + * + * + * @var int + */ + public $dropFolderFileId = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaDropFolderImportJobData extends KalturaSshImportJobData +{ + /** + * + * + * @var int + */ + public $dropFolderFileId = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +abstract class KalturaRemoteDropFolderBaseFilter extends KalturaDropFolderFilter +{ + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaScpDropFolder extends KalturaSshDropFolder +{ + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaSftpDropFolder extends KalturaSshDropFolder +{ + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaRemoteDropFolderFilter extends KalturaRemoteDropFolderBaseFilter +{ + +} + +/** + * @package Kaltura + * @subpackage Client + */ +abstract class KalturaFtpDropFolderBaseFilter extends KalturaRemoteDropFolderFilter +{ + +} + +/** + * @package Kaltura + * @subpackage Client + */ +abstract class KalturaSshDropFolderBaseFilter extends KalturaRemoteDropFolderFilter +{ + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaFtpDropFolderFilter extends KalturaFtpDropFolderBaseFilter +{ + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaSshDropFolderFilter extends KalturaSshDropFolderBaseFilter +{ + +} + +/** + * @package Kaltura + * @subpackage Client + */ +abstract class KalturaScpDropFolderBaseFilter extends KalturaSshDropFolderFilter +{ + +} + +/** + * @package Kaltura + * @subpackage Client + */ +abstract class KalturaSftpDropFolderBaseFilter extends KalturaSshDropFolderFilter +{ + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaScpDropFolderFilter extends KalturaScpDropFolderBaseFilter +{ + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaSftpDropFolderFilter extends KalturaSftpDropFolderBaseFilter +{ + +} + + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaDropFolderService extends KalturaServiceBase +{ + function __construct(KalturaClient $client = null) + { + parent::__construct($client); + } + + /** + * Allows you to add a new KalturaDropFolder object + * + * @param KalturaDropFolder $dropFolder + * @return KalturaDropFolder + */ + function add(KalturaDropFolder $dropFolder) + { + $kparams = array(); + $this->client->addParam($kparams, "dropFolder", $dropFolder->toParams()); + $this->client->queueServiceActionCall("dropfolder_dropfolder", "add", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaDropFolder"); + return $resultObject; + } + + /** + * Retrieve a KalturaDropFolder object by ID + * + * @param int $dropFolderId + * @return KalturaDropFolder + */ + function get($dropFolderId) + { + $kparams = array(); + $this->client->addParam($kparams, "dropFolderId", $dropFolderId); + $this->client->queueServiceActionCall("dropfolder_dropfolder", "get", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaDropFolder"); + return $resultObject; + } + + /** + * Update an existing KalturaDropFolder object + * + * @param int $dropFolderId + * @param KalturaDropFolder $dropFolder Id + * @return KalturaDropFolder + */ + function update($dropFolderId, KalturaDropFolder $dropFolder) + { + $kparams = array(); + $this->client->addParam($kparams, "dropFolderId", $dropFolderId); + $this->client->addParam($kparams, "dropFolder", $dropFolder->toParams()); + $this->client->queueServiceActionCall("dropfolder_dropfolder", "update", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaDropFolder"); + return $resultObject; + } + + /** + * Mark the KalturaDropFolder object as deleted + * + * @param int $dropFolderId + * @return KalturaDropFolder + */ + function delete($dropFolderId) + { + $kparams = array(); + $this->client->addParam($kparams, "dropFolderId", $dropFolderId); + $this->client->queueServiceActionCall("dropfolder_dropfolder", "delete", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaDropFolder"); + return $resultObject; + } + + /** + * List KalturaDropFolder objects + * + * @param KalturaDropFolderFilter $filter + * @param KalturaFilterPager $pager + * @return KalturaDropFolderListResponse + */ + function listAction(KalturaDropFolderFilter $filter = null, KalturaFilterPager $pager = null) + { + $kparams = array(); + if ($filter !== null) + $this->client->addParam($kparams, "filter", $filter->toParams()); + if ($pager !== null) + $this->client->addParam($kparams, "pager", $pager->toParams()); + $this->client->queueServiceActionCall("dropfolder_dropfolder", "list", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaDropFolderListResponse"); + return $resultObject; + } +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaDropFolderFileService extends KalturaServiceBase +{ + function __construct(KalturaClient $client = null) + { + parent::__construct($client); + } + + /** + * Allows you to add a new KalturaDropFolderFile object + * + * @param KalturaDropFolderFile $dropFolderFile + * @return KalturaDropFolderFile + */ + function add(KalturaDropFolderFile $dropFolderFile) + { + $kparams = array(); + $this->client->addParam($kparams, "dropFolderFile", $dropFolderFile->toParams()); + $this->client->queueServiceActionCall("dropfolder_dropfolderfile", "add", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaDropFolderFile"); + return $resultObject; + } + + /** + * Retrieve a KalturaDropFolderFile object by ID + * + * @param int $dropFolderFileId + * @return KalturaDropFolderFile + */ + function get($dropFolderFileId) + { + $kparams = array(); + $this->client->addParam($kparams, "dropFolderFileId", $dropFolderFileId); + $this->client->queueServiceActionCall("dropfolder_dropfolderfile", "get", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaDropFolderFile"); + return $resultObject; + } + + /** + * Update an existing KalturaDropFolderFile object + * + * @param int $dropFolderFileId + * @param KalturaDropFolderFile $dropFolderFile Id + * @return KalturaDropFolderFile + */ + function update($dropFolderFileId, KalturaDropFolderFile $dropFolderFile) + { + $kparams = array(); + $this->client->addParam($kparams, "dropFolderFileId", $dropFolderFileId); + $this->client->addParam($kparams, "dropFolderFile", $dropFolderFile->toParams()); + $this->client->queueServiceActionCall("dropfolder_dropfolderfile", "update", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaDropFolderFile"); + return $resultObject; + } + + /** + * Update status of KalturaDropFolderFile + * + * @param int $dropFolderFileId + * @param int $status + * @return KalturaDropFolderFile + */ + function updateStatus($dropFolderFileId, $status) + { + $kparams = array(); + $this->client->addParam($kparams, "dropFolderFileId", $dropFolderFileId); + $this->client->addParam($kparams, "status", $status); + $this->client->queueServiceActionCall("dropfolder_dropfolderfile", "updateStatus", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaDropFolderFile"); + return $resultObject; + } + + /** + * Mark the KalturaDropFolderFile object as deleted + * + * @param int $dropFolderFileId + * @return KalturaDropFolderFile + */ + function delete($dropFolderFileId) + { + $kparams = array(); + $this->client->addParam($kparams, "dropFolderFileId", $dropFolderFileId); + $this->client->queueServiceActionCall("dropfolder_dropfolderfile", "delete", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaDropFolderFile"); + return $resultObject; + } + + /** + * List KalturaDropFolderFile objects + * + * @param KalturaDropFolderFileFilter $filter + * @param KalturaFilterPager $pager + * @return KalturaDropFolderFileListResponse + */ + function listAction(KalturaDropFolderFileFilter $filter = null, KalturaFilterPager $pager = null) + { + $kparams = array(); + if ($filter !== null) + $this->client->addParam($kparams, "filter", $filter->toParams()); + if ($pager !== null) + $this->client->addParam($kparams, "pager", $pager->toParams()); + $this->client->queueServiceActionCall("dropfolder_dropfolderfile", "list", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaDropFolderFileListResponse"); + return $resultObject; + } + + /** + * Set the KalturaDropFolderFile status to ignore (KalturaDropFolderFileStatus::IGNORE) + * + * @param int $dropFolderFileId + * @return KalturaDropFolderFile + */ + function ignore($dropFolderFileId) + { + $kparams = array(); + $this->client->addParam($kparams, "dropFolderFileId", $dropFolderFileId); + $this->client->queueServiceActionCall("dropfolder_dropfolderfile", "ignore", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaDropFolderFile"); + return $resultObject; + } +} +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaDropFolderClientPlugin extends KalturaClientPlugin +{ + /** + * @var KalturaDropFolderService + */ + public $dropFolder = null; + + /** + * @var KalturaDropFolderFileService + */ + public $dropFolderFile = null; + + protected function __construct(KalturaClient $client) + { + parent::__construct($client); + $this->dropFolder = new KalturaDropFolderService($client); + $this->dropFolderFile = new KalturaDropFolderFileService($client); + } + + /** + * @return KalturaDropFolderClientPlugin + */ + public static function get(KalturaClient $client) + { + return new KalturaDropFolderClientPlugin($client); + } + + /** + * @return array + */ + public function getServices() + { + $services = array( + 'dropFolder' => $this->dropFolder, + 'dropFolderFile' => $this->dropFolderFile, + ); + return $services; + } + + /** + * @return string + */ + public function getName() + { + return 'dropFolder'; + } +} + diff --git a/local/kaltura/API/KalturaPlugins/KalturaDropFolderXmlBulkUploadClientPlugin.php b/local/kaltura/API/KalturaPlugins/KalturaDropFolderXmlBulkUploadClientPlugin.php new file mode 100644 index 0000000000000..9388b3cbb7a11 --- /dev/null +++ b/local/kaltura/API/KalturaPlugins/KalturaDropFolderXmlBulkUploadClientPlugin.php @@ -0,0 +1,86 @@ +. +// +// @ignore +// =================================================================================================== + +/** + * @package Kaltura + * @subpackage Client + */ +require_once(dirname(__FILE__) . "/../KalturaClientBase.php"); +require_once(dirname(__FILE__) . "/../KalturaEnums.php"); +require_once(dirname(__FILE__) . "/../KalturaTypes.php"); +require_once(dirname(__FILE__) . "/KalturaBulkUploadXmlClientPlugin.php"); +require_once(dirname(__FILE__) . "/KalturaDropFolderClientPlugin.php"); + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaDropFolderXmlBulkUploadFileHandlerConfig extends KalturaDropFolderFileHandlerConfig +{ + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaDropFolderXmlBulkUploadClientPlugin extends KalturaClientPlugin +{ + protected function __construct(KalturaClient $client) + { + parent::__construct($client); + } + + /** + * @return KalturaDropFolderXmlBulkUploadClientPlugin + */ + public static function get(KalturaClient $client) + { + return new KalturaDropFolderXmlBulkUploadClientPlugin($client); + } + + /** + * @return array + */ + public function getServices() + { + $services = array( + ); + return $services; + } + + /** + * @return string + */ + public function getName() + { + return 'dropFolderXmlBulkUpload'; + } +} + diff --git a/local/kaltura/API/KalturaPlugins/KalturaEmailNotificationClientPlugin.php b/local/kaltura/API/KalturaPlugins/KalturaEmailNotificationClientPlugin.php new file mode 100644 index 0000000000000..657a3fd4643c4 --- /dev/null +++ b/local/kaltura/API/KalturaPlugins/KalturaEmailNotificationClientPlugin.php @@ -0,0 +1,630 @@ +. +// +// @ignore +// =================================================================================================== + +/** + * @package Kaltura + * @subpackage Client + */ +require_once(dirname(__FILE__) . "/../KalturaClientBase.php"); +require_once(dirname(__FILE__) . "/../KalturaEnums.php"); +require_once(dirname(__FILE__) . "/../KalturaTypes.php"); +require_once(dirname(__FILE__) . "/KalturaEventNotificationClientPlugin.php"); + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaEmailNotificationTemplatePriority +{ + const HIGH = 1; + const NORMAL = 3; + const LOW = 5; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaEmailNotificationFormat +{ + const HTML = "1"; + const TEXT = "2"; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaEmailNotificationRecipientProviderType +{ + const STATIC_LIST = "1"; + const CATEGORY = "2"; + const USER = "3"; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaEmailNotificationTemplateOrderBy +{ + const CREATED_AT_ASC = "+createdAt"; + const ID_ASC = "+id"; + const UPDATED_AT_ASC = "+updatedAt"; + const CREATED_AT_DESC = "-createdAt"; + const ID_DESC = "-id"; + const UPDATED_AT_DESC = "-updatedAt"; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaEmailNotificationRecipient extends KalturaObjectBase +{ + /** + * Recipient e-mail address + * + * + * @var KalturaStringValue + */ + public $email; + + /** + * Recipient name + * + * + * @var KalturaStringValue + */ + public $name; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +abstract class KalturaEmailNotificationRecipientJobData extends KalturaObjectBase +{ + /** + * Provider type of the job data. + * + * + * @var KalturaEmailNotificationRecipientProviderType + * @readonly + */ + public $providerType = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +abstract class KalturaEmailNotificationRecipientProvider extends KalturaObjectBase +{ + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaCategoryUserProviderFilter extends KalturaFilter +{ + /** + * + * + * @var string + */ + public $userIdEqual = null; + + /** + * + * + * @var string + */ + public $userIdIn = null; + + /** + * + * + * @var KalturaCategoryUserStatus + */ + public $statusEqual = null; + + /** + * + * + * @var string + */ + public $statusIn = null; + + /** + * + * + * @var int + */ + public $createdAtGreaterThanOrEqual = null; + + /** + * + * + * @var int + */ + public $createdAtLessThanOrEqual = null; + + /** + * + * + * @var int + */ + public $updatedAtGreaterThanOrEqual = null; + + /** + * + * + * @var int + */ + public $updatedAtLessThanOrEqual = null; + + /** + * + * + * @var KalturaUpdateMethodType + */ + public $updateMethodEqual = null; + + /** + * + * + * @var string + */ + public $updateMethodIn = null; + + /** + * + * + * @var string + */ + public $permissionNamesMatchAnd = null; + + /** + * + * + * @var string + */ + public $permissionNamesMatchOr = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaEmailNotificationCategoryRecipientJobData extends KalturaEmailNotificationRecipientJobData +{ + /** + * + * + * @var KalturaCategoryUserFilter + */ + public $categoryUserFilter; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaEmailNotificationCategoryRecipientProvider extends KalturaEmailNotificationRecipientProvider +{ + /** + * The ID of the category whose subscribers should receive the email notification. + * + * + * @var KalturaStringValue + */ + public $categoryId; + + /** + * + * + * @var KalturaCategoryUserProviderFilter + */ + public $categoryUserFilter; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaEmailNotificationParameter extends KalturaEventNotificationParameter +{ + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaEmailNotificationStaticRecipientJobData extends KalturaEmailNotificationRecipientJobData +{ + /** + * Email to emails and names + * + * + * @var array of KalturaKeyValue + */ + public $emailRecipients; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaEmailNotificationStaticRecipientProvider extends KalturaEmailNotificationRecipientProvider +{ + /** + * Email to emails and names + * + * + * @var array of KalturaEmailNotificationRecipient + */ + public $emailRecipients; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaEmailNotificationTemplate extends KalturaEventNotificationTemplate +{ + /** + * Define the email body format + * + * + * @var KalturaEmailNotificationFormat + */ + public $format = null; + + /** + * Define the email subject + * + * + * @var string + */ + public $subject = null; + + /** + * Define the email body content + * + * + * @var string + */ + public $body = null; + + /** + * Define the email sender email + * + * + * @var string + */ + public $fromEmail = null; + + /** + * Define the email sender name + * + * + * @var string + */ + public $fromName = null; + + /** + * Email recipient emails and names + * + * + * @var KalturaEmailNotificationRecipientProvider + */ + public $to; + + /** + * Email recipient emails and names + * + * + * @var KalturaEmailNotificationRecipientProvider + */ + public $cc; + + /** + * Email recipient emails and names + * + * + * @var KalturaEmailNotificationRecipientProvider + */ + public $bcc; + + /** + * Default email addresses to whom the reply should be sent. + * + * + * @var KalturaEmailNotificationRecipientProvider + */ + public $replyTo; + + /** + * Define the email priority + * + * + * @var KalturaEmailNotificationTemplatePriority + */ + public $priority = null; + + /** + * Email address that a reading confirmation will be sent + * + * + * @var string + */ + public $confirmReadingTo = null; + + /** + * Hostname to use in Message-Id and Received headers and as default HELLO string. + * If empty, the value returned by SERVER_NAME is used or 'localhost.localdomain'. + * + * + * @var string + */ + public $hostname = null; + + /** + * Sets the message ID to be used in the Message-Id header. + * If empty, a unique id will be generated. + * + * + * @var string + */ + public $messageID = null; + + /** + * Adds a e-mail custom header + * + * + * @var array of KalturaKeyValue + */ + public $customHeaders; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaEmailNotificationUserRecipientJobData extends KalturaEmailNotificationRecipientJobData +{ + /** + * + * + * @var KalturaUserFilter + */ + public $filter; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaEmailNotificationUserRecipientProvider extends KalturaEmailNotificationRecipientProvider +{ + /** + * + * + * @var KalturaUserFilter + */ + public $filter; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaEmailNotificationDispatchJobData extends KalturaEventNotificationDispatchJobData +{ + /** + * Define the email sender email + * + * + * @var string + */ + public $fromEmail = null; + + /** + * Define the email sender name + * + * + * @var string + */ + public $fromName = null; + + /** + * Email recipient emails and names, key is mail address and value is the name + * + * + * @var KalturaEmailNotificationRecipientJobData + */ + public $to; + + /** + * Email cc emails and names, key is mail address and value is the name + * + * + * @var KalturaEmailNotificationRecipientJobData + */ + public $cc; + + /** + * Email bcc emails and names, key is mail address and value is the name + * + * + * @var KalturaEmailNotificationRecipientJobData + */ + public $bcc; + + /** + * Email addresses that a replies should be sent to, key is mail address and value is the name + * + * + * @var KalturaEmailNotificationRecipientJobData + */ + public $replyTo; + + /** + * Define the email priority + * + * + * @var KalturaEmailNotificationTemplatePriority + */ + public $priority = null; + + /** + * Email address that a reading confirmation will be sent to + * + * + * @var string + */ + public $confirmReadingTo = null; + + /** + * Hostname to use in Message-Id and Received headers and as default HELO string. + * If empty, the value returned by SERVER_NAME is used or 'localhost.localdomain'. + * + * + * @var string + */ + public $hostname = null; + + /** + * Sets the message ID to be used in the Message-Id header. + * If empty, a unique id will be generated. + * + * + * @var string + */ + public $messageID = null; + + /** + * Adds a e-mail custom header + * + * + * @var array of KalturaKeyValue + */ + public $customHeaders; + + /** + * Define the content dynamic parameters + * + * + * @var array of KalturaKeyValue + */ + public $contentParameters; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +abstract class KalturaEmailNotificationTemplateBaseFilter extends KalturaEventNotificationTemplateFilter +{ + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaEmailNotificationTemplateFilter extends KalturaEmailNotificationTemplateBaseFilter +{ + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaEmailNotificationClientPlugin extends KalturaClientPlugin +{ + protected function __construct(KalturaClient $client) + { + parent::__construct($client); + } + + /** + * @return KalturaEmailNotificationClientPlugin + */ + public static function get(KalturaClient $client) + { + return new KalturaEmailNotificationClientPlugin($client); + } + + /** + * @return array + */ + public function getServices() + { + $services = array( + ); + return $services; + } + + /** + * @return string + */ + public function getName() + { + return 'emailNotification'; + } +} + diff --git a/local/kaltura/API/KalturaPlugins/KalturaEventNotificationClientPlugin.php b/local/kaltura/API/KalturaPlugins/KalturaEventNotificationClientPlugin.php new file mode 100644 index 0000000000000..87ebdd44cb3b0 --- /dev/null +++ b/local/kaltura/API/KalturaPlugins/KalturaEventNotificationClientPlugin.php @@ -0,0 +1,790 @@ +. +// +// @ignore +// =================================================================================================== + +/** + * @package Kaltura + * @subpackage Client + */ +require_once(dirname(__FILE__) . "/../KalturaClientBase.php"); +require_once(dirname(__FILE__) . "/../KalturaEnums.php"); +require_once(dirname(__FILE__) . "/../KalturaTypes.php"); + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaEventNotificationTemplateStatus +{ + const DISABLED = 1; + const ACTIVE = 2; + const DELETED = 3; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaEventNotificationEventObjectType +{ + const AD_CUE_POINT = "adCuePointEventNotifications.AdCuePoint"; + const ANNOTATION = "annotationEventNotifications.Annotation"; + const CAPTION_ASSET = "captionAssetEventNotifications.CaptionAsset"; + const CODE_CUE_POINT = "codeCuePointEventNotifications.CodeCuePoint"; + const DISTRIBUTION_PROFILE = "contentDistributionEventNotifications.DistributionProfile"; + const ENTRY_DISTRIBUTION = "contentDistributionEventNotifications.EntryDistribution"; + const CUE_POINT = "cuePointEventNotifications.CuePoint"; + const METADATA = "metadataEventNotifications.Metadata"; + const ENTRY = "1"; + const CATEGORY = "2"; + const ASSET = "3"; + const FLAVORASSET = "4"; + const THUMBASSET = "5"; + const KUSER = "8"; + const ACCESSCONTROL = "9"; + const BATCHJOB = "10"; + const BULKUPLOADRESULT = "11"; + const CATEGORYKUSER = "12"; + const CONVERSIONPROFILE2 = "14"; + const FLAVORPARAMS = "15"; + const FLAVORPARAMSCONVERSIONPROFILE = "16"; + const FLAVORPARAMSOUTPUT = "17"; + const GENERICSYNDICATIONFEED = "18"; + const KUSERTOUSERROLE = "19"; + const PARTNER = "20"; + const PERMISSION = "21"; + const PERMISSIONITEM = "22"; + const PERMISSIONTOPERMISSIONITEM = "23"; + const SCHEDULER = "24"; + const SCHEDULERCONFIG = "25"; + const SCHEDULERSTATUS = "26"; + const SCHEDULERWORKER = "27"; + const STORAGEPROFILE = "28"; + const SYNDICATIONFEED = "29"; + const THUMBPARAMS = "31"; + const THUMBPARAMSOUTPUT = "32"; + const UPLOADTOKEN = "33"; + const USERLOGINDATA = "34"; + const USERROLE = "35"; + const WIDGET = "36"; + const CATEGORYENTRY = "37"; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaEventNotificationEventType +{ + const BATCH_JOB_STATUS = "1"; + const OBJECT_ADDED = "2"; + const OBJECT_CHANGED = "3"; + const OBJECT_COPIED = "4"; + const OBJECT_CREATED = "5"; + const OBJECT_DATA_CHANGED = "6"; + const OBJECT_DELETED = "7"; + const OBJECT_ERASED = "8"; + const OBJECT_READY_FOR_REPLACMENT = "9"; + const OBJECT_SAVED = "10"; + const OBJECT_UPDATED = "11"; + const OBJECT_REPLACED = "12"; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaEventNotificationTemplateOrderBy +{ + const CREATED_AT_ASC = "+createdAt"; + const ID_ASC = "+id"; + const UPDATED_AT_ASC = "+updatedAt"; + const CREATED_AT_DESC = "-createdAt"; + const ID_DESC = "-id"; + const UPDATED_AT_DESC = "-updatedAt"; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaEventNotificationTemplateType +{ + const EMAIL = "emailNotification.Email"; + const HTTP = "httpNotification.Http"; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaEventNotificationParameter extends KalturaObjectBase +{ + /** + * The key in the subject and body to be replaced with the dynamic value + * + * + * @var string + */ + public $key = null; + + /** + * + * + * @var string + */ + public $description = null; + + /** + * The dynamic value to be placed in the final output + * + * + * @var KalturaStringValue + */ + public $value; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaEventNotificationTemplate extends KalturaObjectBase +{ + /** + * + * + * @var int + * @readonly + */ + public $id = null; + + /** + * + * + * @var int + * @readonly + */ + public $partnerId = null; + + /** + * + * + * @var string + */ + public $name = null; + + /** + * + * + * @var string + */ + public $systemName = null; + + /** + * + * + * @var string + */ + public $description = null; + + /** + * + * + * @var KalturaEventNotificationTemplateType + * @insertonly + */ + public $type = null; + + /** + * + * + * @var KalturaEventNotificationTemplateStatus + * @readonly + */ + public $status = null; + + /** + * + * + * @var int + * @readonly + */ + public $createdAt = null; + + /** + * + * + * @var int + * @readonly + */ + public $updatedAt = null; + + /** + * Define that the template could be dispatched manually from the API + * + * + * @var bool + */ + public $manualDispatchEnabled = null; + + /** + * Define that the template could be dispatched automatically by the system + * + * + * @var bool + */ + public $automaticDispatchEnabled = null; + + /** + * Define the event that should trigger this notification + * + * + * @var KalturaEventNotificationEventType + */ + public $eventType = null; + + /** + * Define the object that raied the event that should trigger this notification + * + * + * @var KalturaEventNotificationEventObjectType + */ + public $eventObjectType = null; + + /** + * Define the conditions that cause this notification to be triggered + * + * + * @var array of KalturaCondition + */ + public $eventConditions; + + /** + * Define the content dynamic parameters + * + * + * @var array of KalturaEventNotificationParameter + */ + public $contentParameters; + + /** + * Define the content dynamic parameters + * + * + * @var array of KalturaEventNotificationParameter + */ + public $userParameters; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaEventNotificationTemplateListResponse extends KalturaObjectBase +{ + /** + * + * + * @var array of KalturaEventNotificationTemplate + * @readonly + */ + public $objects; + + /** + * + * + * @var int + * @readonly + */ + public $totalCount = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaEventFieldCondition extends KalturaCondition +{ + /** + * The field to be evaluated at runtime + * + * + * @var KalturaBooleanField + */ + public $field; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaEventNotificationArrayParameter extends KalturaEventNotificationParameter +{ + /** + * + * + * @var array of KalturaString + */ + public $values; + + /** + * Used to restrict the values to close list + * + * + * @var array of KalturaStringValue + */ + public $allowedValues; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaEventNotificationDispatchJobData extends KalturaJobData +{ + /** + * + * + * @var int + */ + public $templateId = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +abstract class KalturaEventNotificationTemplateBaseFilter extends KalturaFilter +{ + /** + * + * + * @var int + */ + public $idEqual = null; + + /** + * + * + * @var string + */ + public $idIn = null; + + /** + * + * + * @var int + */ + public $partnerIdEqual = null; + + /** + * + * + * @var string + */ + public $partnerIdIn = null; + + /** + * + * + * @var string + */ + public $systemNameEqual = null; + + /** + * + * + * @var string + */ + public $systemNameIn = null; + + /** + * + * + * @var KalturaEventNotificationTemplateType + */ + public $typeEqual = null; + + /** + * + * + * @var string + */ + public $typeIn = null; + + /** + * + * + * @var KalturaEventNotificationTemplateStatus + */ + public $statusEqual = null; + + /** + * + * + * @var string + */ + public $statusIn = null; + + /** + * + * + * @var int + */ + public $createdAtGreaterThanOrEqual = null; + + /** + * + * + * @var int + */ + public $createdAtLessThanOrEqual = null; + + /** + * + * + * @var int + */ + public $updatedAtGreaterThanOrEqual = null; + + /** + * + * + * @var int + */ + public $updatedAtLessThanOrEqual = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaEventObjectChangedCondition extends KalturaCondition +{ + /** + * Comma seperated column names to be tested + * + * + * @var string + */ + public $modifiedColumns = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaEventNotificationTemplateFilter extends KalturaEventNotificationTemplateBaseFilter +{ + +} + + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaEventNotificationTemplateService extends KalturaServiceBase +{ + function __construct(KalturaClient $client = null) + { + parent::__construct($client); + } + + /** + * Allows you to add a new event notification template object + * + * @param KalturaEventNotificationTemplate $eventNotificationTemplate + * @return KalturaEventNotificationTemplate + */ + function add(KalturaEventNotificationTemplate $eventNotificationTemplate) + { + $kparams = array(); + $this->client->addParam($kparams, "eventNotificationTemplate", $eventNotificationTemplate->toParams()); + $this->client->queueServiceActionCall("eventnotification_eventnotificationtemplate", "add", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaEventNotificationTemplate"); + return $resultObject; + } + + /** + * Allows you to clone exiting event notification template object and create a new one with similar configuration + * + * @param int $id Source template to clone + * @param KalturaEventNotificationTemplate $eventNotificationTemplate Overwrite configuration object + * @return KalturaEventNotificationTemplate + */ + function cloneAction($id, KalturaEventNotificationTemplate $eventNotificationTemplate = null) + { + $kparams = array(); + $this->client->addParam($kparams, "id", $id); + if ($eventNotificationTemplate !== null) + $this->client->addParam($kparams, "eventNotificationTemplate", $eventNotificationTemplate->toParams()); + $this->client->queueServiceActionCall("eventnotification_eventnotificationtemplate", "clone", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaEventNotificationTemplate"); + return $resultObject; + } + + /** + * Retrieve an event notification template object by id + * + * @param int $id + * @return KalturaEventNotificationTemplate + */ + function get($id) + { + $kparams = array(); + $this->client->addParam($kparams, "id", $id); + $this->client->queueServiceActionCall("eventnotification_eventnotificationtemplate", "get", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaEventNotificationTemplate"); + return $resultObject; + } + + /** + * Update an existing event notification template object + * + * @param int $id + * @param KalturaEventNotificationTemplate $eventNotificationTemplate + * @return KalturaEventNotificationTemplate + */ + function update($id, KalturaEventNotificationTemplate $eventNotificationTemplate) + { + $kparams = array(); + $this->client->addParam($kparams, "id", $id); + $this->client->addParam($kparams, "eventNotificationTemplate", $eventNotificationTemplate->toParams()); + $this->client->queueServiceActionCall("eventnotification_eventnotificationtemplate", "update", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaEventNotificationTemplate"); + return $resultObject; + } + + /** + * Update event notification template status by id + * + * @param int $id + * @param int $status + * @return KalturaEventNotificationTemplate + */ + function updateStatus($id, $status) + { + $kparams = array(); + $this->client->addParam($kparams, "id", $id); + $this->client->addParam($kparams, "status", $status); + $this->client->queueServiceActionCall("eventnotification_eventnotificationtemplate", "updateStatus", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaEventNotificationTemplate"); + return $resultObject; + } + + /** + * Delete an event notification template object + * + * @param int $id + * @return + */ + function delete($id) + { + $kparams = array(); + $this->client->addParam($kparams, "id", $id); + $this->client->queueServiceActionCall("eventnotification_eventnotificationtemplate", "delete", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "null"); + return $resultObject; + } + + /** + * List event notification template objects + * + * @param KalturaEventNotificationTemplateFilter $filter + * @param KalturaFilterPager $pager + * @return KalturaEventNotificationTemplateListResponse + */ + function listAction(KalturaEventNotificationTemplateFilter $filter = null, KalturaFilterPager $pager = null) + { + $kparams = array(); + if ($filter !== null) + $this->client->addParam($kparams, "filter", $filter->toParams()); + if ($pager !== null) + $this->client->addParam($kparams, "pager", $pager->toParams()); + $this->client->queueServiceActionCall("eventnotification_eventnotificationtemplate", "list", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaEventNotificationTemplateListResponse"); + return $resultObject; + } + + /** + * + * + * @param KalturaPartnerFilter $filter + * @param KalturaFilterPager $pager + * @return KalturaEventNotificationTemplateListResponse + */ + function listByPartner(KalturaPartnerFilter $filter = null, KalturaFilterPager $pager = null) + { + $kparams = array(); + if ($filter !== null) + $this->client->addParam($kparams, "filter", $filter->toParams()); + if ($pager !== null) + $this->client->addParam($kparams, "pager", $pager->toParams()); + $this->client->queueServiceActionCall("eventnotification_eventnotificationtemplate", "listByPartner", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaEventNotificationTemplateListResponse"); + return $resultObject; + } + + /** + * Dispatch event notification object by id + * + * @param int $id + * @param KalturaEventNotificationDispatchJobData $data + * @return int + */ + function dispatch($id, KalturaEventNotificationDispatchJobData $data) + { + $kparams = array(); + $this->client->addParam($kparams, "id", $id); + $this->client->addParam($kparams, "data", $data->toParams()); + $this->client->queueServiceActionCall("eventnotification_eventnotificationtemplate", "dispatch", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "integer"); + return $resultObject; + } + + /** + * Action lists the template partner event notification templates. + * + * @param KalturaEventNotificationTemplateFilter $filter + * @param KalturaFilterPager $pager + * @return KalturaEventNotificationTemplateListResponse + */ + function listTemplates(KalturaEventNotificationTemplateFilter $filter = null, KalturaFilterPager $pager = null) + { + $kparams = array(); + if ($filter !== null) + $this->client->addParam($kparams, "filter", $filter->toParams()); + if ($pager !== null) + $this->client->addParam($kparams, "pager", $pager->toParams()); + $this->client->queueServiceActionCall("eventnotification_eventnotificationtemplate", "listTemplates", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaEventNotificationTemplateListResponse"); + return $resultObject; + } +} +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaEventNotificationClientPlugin extends KalturaClientPlugin +{ + /** + * @var KalturaEventNotificationTemplateService + */ + public $eventNotificationTemplate = null; + + protected function __construct(KalturaClient $client) + { + parent::__construct($client); + $this->eventNotificationTemplate = new KalturaEventNotificationTemplateService($client); + } + + /** + * @return KalturaEventNotificationClientPlugin + */ + public static function get(KalturaClient $client) + { + return new KalturaEventNotificationClientPlugin($client); + } + + /** + * @return array + */ + public function getServices() + { + $services = array( + 'eventNotificationTemplate' => $this->eventNotificationTemplate, + ); + return $services; + } + + /** + * @return string + */ + public function getName() + { + return 'eventNotification'; + } +} + diff --git a/local/kaltura/API/KalturaPlugins/KalturaExternalMediaClientPlugin.php b/local/kaltura/API/KalturaPlugins/KalturaExternalMediaClientPlugin.php new file mode 100644 index 0000000000000..275d567fe6e93 --- /dev/null +++ b/local/kaltura/API/KalturaPlugins/KalturaExternalMediaClientPlugin.php @@ -0,0 +1,363 @@ +. +// +// @ignore +// =================================================================================================== + +/** + * @package Kaltura + * @subpackage Client + */ +require_once(dirname(__FILE__) . "/../KalturaClientBase.php"); +require_once(dirname(__FILE__) . "/../KalturaEnums.php"); +require_once(dirname(__FILE__) . "/../KalturaTypes.php"); + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaExternalMediaEntryOrderBy +{ + const CREATED_AT_ASC = "+createdAt"; + const DURATION_ASC = "+duration"; + const END_DATE_ASC = "+endDate"; + const LAST_PLAYED_AT_ASC = "+lastPlayedAt"; + const MEDIA_TYPE_ASC = "+mediaType"; + const MODERATION_COUNT_ASC = "+moderationCount"; + const NAME_ASC = "+name"; + const PARTNER_SORT_VALUE_ASC = "+partnerSortValue"; + const PLAYS_ASC = "+plays"; + const RANK_ASC = "+rank"; + const RECENT_ASC = "+recent"; + const START_DATE_ASC = "+startDate"; + const TOTAL_RANK_ASC = "+totalRank"; + const UPDATED_AT_ASC = "+updatedAt"; + const VIEWS_ASC = "+views"; + const WEIGHT_ASC = "+weight"; + const CREATED_AT_DESC = "-createdAt"; + const DURATION_DESC = "-duration"; + const END_DATE_DESC = "-endDate"; + const LAST_PLAYED_AT_DESC = "-lastPlayedAt"; + const MEDIA_TYPE_DESC = "-mediaType"; + const MODERATION_COUNT_DESC = "-moderationCount"; + const NAME_DESC = "-name"; + const PARTNER_SORT_VALUE_DESC = "-partnerSortValue"; + const PLAYS_DESC = "-plays"; + const RANK_DESC = "-rank"; + const RECENT_DESC = "-recent"; + const START_DATE_DESC = "-startDate"; + const TOTAL_RANK_DESC = "-totalRank"; + const UPDATED_AT_DESC = "-updatedAt"; + const VIEWS_DESC = "-views"; + const WEIGHT_DESC = "-weight"; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaExternalMediaSourceType +{ + const INTERCALL = "InterCall"; + const YOUTUBE = "YouTube"; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaExternalMediaEntry extends KalturaMediaEntry +{ + /** + * The source type of the external media + * + * + * @var KalturaExternalMediaSourceType + * @insertonly + */ + public $externalSourceType = null; + + /** + * Comma separated asset params ids that exists for this external media entry + * + * + * @var string + * @readonly + */ + public $assetParamsIds = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaExternalMediaEntryListResponse extends KalturaObjectBase +{ + /** + * + * + * @var array of KalturaExternalMediaEntry + * @readonly + */ + public $objects; + + /** + * + * + * @var int + * @readonly + */ + public $totalCount = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +abstract class KalturaExternalMediaEntryBaseFilter extends KalturaMediaEntryFilter +{ + /** + * + * + * @var KalturaExternalMediaSourceType + */ + public $externalSourceTypeEqual = null; + + /** + * + * + * @var string + */ + public $externalSourceTypeIn = null; + + /** + * + * + * @var string + */ + public $assetParamsIdsMatchOr = null; + + /** + * + * + * @var string + */ + public $assetParamsIdsMatchAnd = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaExternalMediaEntryFilter extends KalturaExternalMediaEntryBaseFilter +{ + +} + + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaExternalMediaService extends KalturaServiceBase +{ + function __construct(KalturaClient $client = null) + { + parent::__construct($client); + } + + /** + * Add external media entry + * + * @param KalturaExternalMediaEntry $entry + * @return KalturaExternalMediaEntry + */ + function add(KalturaExternalMediaEntry $entry) + { + $kparams = array(); + $this->client->addParam($kparams, "entry", $entry->toParams()); + $this->client->queueServiceActionCall("externalmedia_externalmedia", "add", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaExternalMediaEntry"); + return $resultObject; + } + + /** + * Get external media entry by ID. + * + * @param string $id External media entry id + * @return KalturaExternalMediaEntry + */ + function get($id) + { + $kparams = array(); + $this->client->addParam($kparams, "id", $id); + $this->client->queueServiceActionCall("externalmedia_externalmedia", "get", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaExternalMediaEntry"); + return $resultObject; + } + + /** + * Update external media entry. Only the properties that were set will be updated. + * + * @param string $id External media entry id to update + * @param KalturaExternalMediaEntry $entry External media entry object to update + * @return KalturaExternalMediaEntry + */ + function update($id, KalturaExternalMediaEntry $entry) + { + $kparams = array(); + $this->client->addParam($kparams, "id", $id); + $this->client->addParam($kparams, "entry", $entry->toParams()); + $this->client->queueServiceActionCall("externalmedia_externalmedia", "update", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaExternalMediaEntry"); + return $resultObject; + } + + /** + * Delete a external media entry. + * + * @param string $id External media entry id to delete + * @return + */ + function delete($id) + { + $kparams = array(); + $this->client->addParam($kparams, "id", $id); + $this->client->queueServiceActionCall("externalmedia_externalmedia", "delete", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "null"); + return $resultObject; + } + + /** + * List media entries by filter with paging support. + * + * @param KalturaExternalMediaEntryFilter $filter External media entry filter + * @param KalturaFilterPager $pager Pager + * @return KalturaExternalMediaEntryListResponse + */ + function listAction(KalturaExternalMediaEntryFilter $filter = null, KalturaFilterPager $pager = null) + { + $kparams = array(); + if ($filter !== null) + $this->client->addParam($kparams, "filter", $filter->toParams()); + if ($pager !== null) + $this->client->addParam($kparams, "pager", $pager->toParams()); + $this->client->queueServiceActionCall("externalmedia_externalmedia", "list", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaExternalMediaEntryListResponse"); + return $resultObject; + } + + /** + * Count media entries by filter. + * + * @param KalturaExternalMediaEntryFilter $filter External media entry filter + * @return int + */ + function count(KalturaExternalMediaEntryFilter $filter = null) + { + $kparams = array(); + if ($filter !== null) + $this->client->addParam($kparams, "filter", $filter->toParams()); + $this->client->queueServiceActionCall("externalmedia_externalmedia", "count", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "integer"); + return $resultObject; + } +} +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaExternalMediaClientPlugin extends KalturaClientPlugin +{ + /** + * @var KalturaExternalMediaService + */ + public $externalMedia = null; + + protected function __construct(KalturaClient $client) + { + parent::__construct($client); + $this->externalMedia = new KalturaExternalMediaService($client); + } + + /** + * @return KalturaExternalMediaClientPlugin + */ + public static function get(KalturaClient $client) + { + return new KalturaExternalMediaClientPlugin($client); + } + + /** + * @return array + */ + public function getServices() + { + $services = array( + 'externalMedia' => $this->externalMedia, + ); + return $services; + } + + /** + * @return string + */ + public function getName() + { + return 'externalMedia'; + } +} + diff --git a/local/kaltura/API/KalturaPlugins/KalturaFileSyncClientPlugin.php b/local/kaltura/API/KalturaPlugins/KalturaFileSyncClientPlugin.php new file mode 100644 index 0000000000000..17d61c39db871 --- /dev/null +++ b/local/kaltura/API/KalturaPlugins/KalturaFileSyncClientPlugin.php @@ -0,0 +1,338 @@ +. +// +// @ignore +// =================================================================================================== + +/** + * @package Kaltura + * @subpackage Client + */ +require_once(dirname(__FILE__) . "/../KalturaClientBase.php"); +require_once(dirname(__FILE__) . "/../KalturaEnums.php"); +require_once(dirname(__FILE__) . "/../KalturaTypes.php"); + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaFileSyncStatus +{ + const ERROR = -1; + const PENDING = 1; + const READY = 2; + const DELETED = 3; + const PURGED = 4; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaFileSyncType +{ + const FILE = 1; + const LINK = 2; + const URL = 3; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaFileSyncOrderBy +{ + const CREATED_AT_ASC = "+createdAt"; + const FILE_SIZE_ASC = "+fileSize"; + const READY_AT_ASC = "+readyAt"; + const SYNC_TIME_ASC = "+syncTime"; + const UPDATED_AT_ASC = "+updatedAt"; + const CREATED_AT_DESC = "-createdAt"; + const FILE_SIZE_DESC = "-fileSize"; + const READY_AT_DESC = "-readyAt"; + const SYNC_TIME_DESC = "-syncTime"; + const UPDATED_AT_DESC = "-updatedAt"; +} + +/** + * @package Kaltura + * @subpackage Client + */ +abstract class KalturaFileSyncBaseFilter extends KalturaFilter +{ + /** + * + * + * @var int + */ + public $partnerIdEqual = null; + + /** + * + * + * @var KalturaFileSyncObjectType + */ + public $fileObjectTypeEqual = null; + + /** + * + * + * @var string + */ + public $fileObjectTypeIn = null; + + /** + * + * + * @var string + */ + public $objectIdEqual = null; + + /** + * + * + * @var string + */ + public $objectIdIn = null; + + /** + * + * + * @var string + */ + public $versionEqual = null; + + /** + * + * + * @var string + */ + public $versionIn = null; + + /** + * + * + * @var int + */ + public $objectSubTypeEqual = null; + + /** + * + * + * @var string + */ + public $objectSubTypeIn = null; + + /** + * + * + * @var string + */ + public $dcEqual = null; + + /** + * + * + * @var string + */ + public $dcIn = null; + + /** + * + * + * @var int + */ + public $originalEqual = null; + + /** + * + * + * @var int + */ + public $createdAtGreaterThanOrEqual = null; + + /** + * + * + * @var int + */ + public $createdAtLessThanOrEqual = null; + + /** + * + * + * @var int + */ + public $updatedAtGreaterThanOrEqual = null; + + /** + * + * + * @var int + */ + public $updatedAtLessThanOrEqual = null; + + /** + * + * + * @var int + */ + public $readyAtGreaterThanOrEqual = null; + + /** + * + * + * @var int + */ + public $readyAtLessThanOrEqual = null; + + /** + * + * + * @var int + */ + public $syncTimeGreaterThanOrEqual = null; + + /** + * + * + * @var int + */ + public $syncTimeLessThanOrEqual = null; + + /** + * + * + * @var KalturaFileSyncStatus + */ + public $statusEqual = null; + + /** + * + * + * @var string + */ + public $statusIn = null; + + /** + * + * + * @var KalturaFileSyncType + */ + public $fileTypeEqual = null; + + /** + * + * + * @var string + */ + public $fileTypeIn = null; + + /** + * + * + * @var int + */ + public $linkedIdEqual = null; + + /** + * + * + * @var int + */ + public $linkCountGreaterThanOrEqual = null; + + /** + * + * + * @var int + */ + public $linkCountLessThanOrEqual = null; + + /** + * + * + * @var float + */ + public $fileSizeGreaterThanOrEqual = null; + + /** + * + * + * @var float + */ + public $fileSizeLessThanOrEqual = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaFileSyncFilter extends KalturaFileSyncBaseFilter +{ + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaFileSyncClientPlugin extends KalturaClientPlugin +{ + protected function __construct(KalturaClient $client) + { + parent::__construct($client); + } + + /** + * @return KalturaFileSyncClientPlugin + */ + public static function get(KalturaClient $client) + { + return new KalturaFileSyncClientPlugin($client); + } + + /** + * @return array + */ + public function getServices() + { + $services = array( + ); + return $services; + } + + /** + * @return string + */ + public function getName() + { + return 'fileSync'; + } +} + diff --git a/local/kaltura/API/KalturaPlugins/KalturaHttpNotificationClientPlugin.php b/local/kaltura/API/KalturaPlugins/KalturaHttpNotificationClientPlugin.php new file mode 100644 index 0000000000000..5d7bc27ba0efa --- /dev/null +++ b/local/kaltura/API/KalturaPlugins/KalturaHttpNotificationClientPlugin.php @@ -0,0 +1,624 @@ +. +// +// @ignore +// =================================================================================================== + +/** + * @package Kaltura + * @subpackage Client + */ +require_once(dirname(__FILE__) . "/../KalturaClientBase.php"); +require_once(dirname(__FILE__) . "/../KalturaEnums.php"); +require_once(dirname(__FILE__) . "/../KalturaTypes.php"); +require_once(dirname(__FILE__) . "/KalturaEventNotificationClientPlugin.php"); + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaHttpNotificationAuthenticationMethod +{ + const ANYSAFE = -18; + const ANY = -17; + const BASIC = 1; + const DIGEST = 2; + const GSSNEGOTIATE = 4; + const NTLM = 8; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaHttpNotificationMethod +{ + const GET = 1; + const POST = 2; + const PUT = 3; + const DELETE = 4; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaHttpNotificationSslVersion +{ + const V2 = 2; + const V3 = 3; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaHttpNotificationCertificateType +{ + const DER = "DER"; + const ENG = "ENG"; + const PEM = "PEM"; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaHttpNotificationSslKeyType +{ + const DER = "DER"; + const ENG = "ENG"; + const PEM = "PEM"; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaHttpNotificationTemplateOrderBy +{ + const CREATED_AT_ASC = "+createdAt"; + const ID_ASC = "+id"; + const UPDATED_AT_ASC = "+updatedAt"; + const CREATED_AT_DESC = "-createdAt"; + const ID_DESC = "-id"; + const UPDATED_AT_DESC = "-updatedAt"; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaHttpNotification extends KalturaObjectBase +{ + /** + * Object that triggered the notification + * + * + * @var KalturaObjectBase + */ + public $object; + + /** + * Object type that triggered the notification + * + * + * @var KalturaEventNotificationEventObjectType + */ + public $eventObjectType = null; + + /** + * ID of the batch job that execute the notification + * + * + * @var int + */ + public $eventNotificationJobId = null; + + /** + * ID of the template that triggered the notification + * + * + * @var int + */ + public $templateId = null; + + /** + * Name of the template that triggered the notification + * + * + * @var string + */ + public $templateName = null; + + /** + * System name of the template that triggered the notification + * + * + * @var string + */ + public $templateSystemName = null; + + /** + * Ecent type that triggered the notification + * + * + * @var KalturaEventNotificationEventType + */ + public $eventType = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +abstract class KalturaHttpNotificationData extends KalturaObjectBase +{ + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaHttpNotificationDataFields extends KalturaHttpNotificationData +{ + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaHttpNotificationDataText extends KalturaHttpNotificationData +{ + /** + * + * + * @var KalturaStringValue + */ + public $content; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaHttpNotificationObjectData extends KalturaHttpNotificationData +{ + /** + * Kaltura API object type + * + * + * @var string + */ + public $apiObjectType = null; + + /** + * Data format + * + * + * @var KalturaResponseType + */ + public $format = null; + + /** + * Ignore null attributes during serialization + * + * + * @var bool + */ + public $ignoreNull = null; + + /** + * PHP code + * + * + * @var string + */ + public $code = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaHttpNotificationTemplate extends KalturaEventNotificationTemplate +{ + /** + * Remote server URL + * + * + * @var string + */ + public $url = null; + + /** + * Request method. + * + * + * @var KalturaHttpNotificationMethod + */ + public $method = null; + + /** + * Data to send. + * + * + * @var KalturaHttpNotificationData + */ + public $data; + + /** + * The maximum number of seconds to allow cURL functions to execute. + * + * + * @var int + */ + public $timeout = null; + + /** + * The number of seconds to wait while trying to connect. + * Must be larger than zero. + * + * + * @var int + */ + public $connectTimeout = null; + + /** + * A username to use for the connection. + * + * + * @var string + */ + public $username = null; + + /** + * A password to use for the connection. + * + * + * @var string + */ + public $password = null; + + /** + * The HTTP authentication method to use. + * + * + * @var KalturaHttpNotificationAuthenticationMethod + */ + public $authenticationMethod = null; + + /** + * The SSL version (2 or 3) to use. + * By default PHP will try to determine this itself, although in some cases this must be set manually. + * + * + * @var KalturaHttpNotificationSslVersion + */ + public $sslVersion = null; + + /** + * SSL certificate to verify the peer with. + * + * + * @var string + */ + public $sslCertificate = null; + + /** + * The format of the certificate. + * + * + * @var KalturaHttpNotificationCertificateType + */ + public $sslCertificateType = null; + + /** + * The password required to use the certificate. + * + * + * @var string + */ + public $sslCertificatePassword = null; + + /** + * The identifier for the crypto engine of the private SSL key specified in ssl key. + * + * + * @var string + */ + public $sslEngine = null; + + /** + * The identifier for the crypto engine used for asymmetric crypto operations. + * + * + * @var string + */ + public $sslEngineDefault = null; + + /** + * The key type of the private SSL key specified in ssl key - PEM / DER / ENG. + * + * + * @var KalturaHttpNotificationSslKeyType + */ + public $sslKeyType = null; + + /** + * Private SSL key. + * + * + * @var string + */ + public $sslKey = null; + + /** + * The secret password needed to use the private SSL key specified in ssl key. + * + * + * @var string + */ + public $sslKeyPassword = null; + + /** + * Adds a e-mail custom header + * + * + * @var array of KalturaKeyValue + */ + public $customHeaders; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaHttpNotificationDispatchJobData extends KalturaEventNotificationDispatchJobData +{ + /** + * Remote server URL + * + * + * @var string + */ + public $url = null; + + /** + * Request method. + * + * + * @var KalturaHttpNotificationMethod + */ + public $method = null; + + /** + * Data to send. + * + * + * @var string + */ + public $data = null; + + /** + * The maximum number of seconds to allow cURL functions to execute. + * + * + * @var int + */ + public $timeout = null; + + /** + * The number of seconds to wait while trying to connect. + * Must be larger than zero. + * + * + * @var int + */ + public $connectTimeout = null; + + /** + * A username to use for the connection. + * + * + * @var string + */ + public $username = null; + + /** + * A password to use for the connection. + * + * + * @var string + */ + public $password = null; + + /** + * The HTTP authentication method to use. + * + * + * @var KalturaHttpNotificationAuthenticationMethod + */ + public $authenticationMethod = null; + + /** + * The SSL version (2 or 3) to use. + * By default PHP will try to determine this itself, although in some cases this must be set manually. + * + * + * @var KalturaHttpNotificationSslVersion + */ + public $sslVersion = null; + + /** + * SSL certificate to verify the peer with. + * + * + * @var string + */ + public $sslCertificate = null; + + /** + * The format of the certificate. + * + * + * @var KalturaHttpNotificationCertificateType + */ + public $sslCertificateType = null; + + /** + * The password required to use the certificate. + * + * + * @var string + */ + public $sslCertificatePassword = null; + + /** + * The identifier for the crypto engine of the private SSL key specified in ssl key. + * + * + * @var string + */ + public $sslEngine = null; + + /** + * The identifier for the crypto engine used for asymmetric crypto operations. + * + * + * @var string + */ + public $sslEngineDefault = null; + + /** + * The key type of the private SSL key specified in ssl key - PEM / DER / ENG. + * + * + * @var KalturaHttpNotificationSslKeyType + */ + public $sslKeyType = null; + + /** + * Private SSL key. + * + * + * @var string + */ + public $sslKey = null; + + /** + * The secret password needed to use the private SSL key specified in ssl key. + * + * + * @var string + */ + public $sslKeyPassword = null; + + /** + * Adds a e-mail custom header + * + * + * @var array of KalturaKeyValue + */ + public $customHeaders; + + /** + * Define the content dynamic parameters + * + * + * @var array of KalturaKeyValue + */ + public $contentParameters; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +abstract class KalturaHttpNotificationTemplateBaseFilter extends KalturaEventNotificationTemplateFilter +{ + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaHttpNotificationTemplateFilter extends KalturaHttpNotificationTemplateBaseFilter +{ + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaHttpNotificationClientPlugin extends KalturaClientPlugin +{ + protected function __construct(KalturaClient $client) + { + parent::__construct($client); + } + + /** + * @return KalturaHttpNotificationClientPlugin + */ + public static function get(KalturaClient $client) + { + return new KalturaHttpNotificationClientPlugin($client); + } + + /** + * @return array + */ + public function getServices() + { + $services = array( + ); + return $services; + } + + /** + * @return string + */ + public function getName() + { + return 'httpNotification'; + } +} + diff --git a/local/kaltura/API/KalturaPlugins/KalturaKontikiClientPlugin.php b/local/kaltura/API/KalturaPlugins/KalturaKontikiClientPlugin.php new file mode 100644 index 0000000000000..e1120181283c8 --- /dev/null +++ b/local/kaltura/API/KalturaPlugins/KalturaKontikiClientPlugin.php @@ -0,0 +1,177 @@ +. +// +// @ignore +// =================================================================================================== + +/** + * @package Kaltura + * @subpackage Client + */ +require_once(dirname(__FILE__) . "/../KalturaClientBase.php"); +require_once(dirname(__FILE__) . "/../KalturaEnums.php"); +require_once(dirname(__FILE__) . "/../KalturaTypes.php"); + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaKontikiStorageProfileOrderBy +{ + const CREATED_AT_ASC = "+createdAt"; + const UPDATED_AT_ASC = "+updatedAt"; + const CREATED_AT_DESC = "-createdAt"; + const UPDATED_AT_DESC = "-updatedAt"; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaKontikiStorageProfile extends KalturaStorageProfile +{ + /** + * + * + * @var string + */ + public $serviceToken = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaKontikiStorageDeleteJobData extends KalturaStorageDeleteJobData +{ + /** + * Unique Kontiki MOID for the content uploaded to Kontiki + * + * + * @var string + */ + public $contentMoid = null; + + /** + * + * + * @var string + */ + public $serviceToken = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaKontikiStorageExportJobData extends KalturaStorageExportJobData +{ + /** + * Holds the id of the exported asset + * + * + * @var string + */ + public $flavorAssetId = null; + + /** + * Unique Kontiki MOID for the content uploaded to Kontiki + * + * + * @var string + */ + public $contentMoid = null; + + /** + * + * + * @var string + */ + public $serviceToken = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +abstract class KalturaKontikiStorageProfileBaseFilter extends KalturaStorageProfileFilter +{ + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaKontikiStorageProfileFilter extends KalturaKontikiStorageProfileBaseFilter +{ + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaKontikiClientPlugin extends KalturaClientPlugin +{ + protected function __construct(KalturaClient $client) + { + parent::__construct($client); + } + + /** + * @return KalturaKontikiClientPlugin + */ + public static function get(KalturaClient $client) + { + return new KalturaKontikiClientPlugin($client); + } + + /** + * @return array + */ + public function getServices() + { + $services = array( + ); + return $services; + } + + /** + * @return string + */ + public function getName() + { + return 'kontiki'; + } +} + diff --git a/local/kaltura/API/KalturaPlugins/KalturaLikeClientPlugin.php b/local/kaltura/API/KalturaPlugins/KalturaLikeClientPlugin.php new file mode 100644 index 0000000000000..433c28cec56f6 --- /dev/null +++ b/local/kaltura/API/KalturaPlugins/KalturaLikeClientPlugin.php @@ -0,0 +1,153 @@ +. +// +// @ignore +// =================================================================================================== + +/** + * @package Kaltura + * @subpackage Client + */ +require_once(dirname(__FILE__) . "/../KalturaClientBase.php"); +require_once(dirname(__FILE__) . "/../KalturaEnums.php"); +require_once(dirname(__FILE__) . "/../KalturaTypes.php"); + + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaLikeService extends KalturaServiceBase +{ + function __construct(KalturaClient $client = null) + { + parent::__construct($client); + } + + /** + * + * + * @param string $entryId + * @return bool + */ + function like($entryId) + { + $kparams = array(); + $this->client->addParam($kparams, "entryId", $entryId); + $this->client->queueServiceActionCall("like_like", "like", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $resultObject = (bool) $resultObject; + return $resultObject; + } + + /** + * + * + * @param string $entryId + * @return bool + */ + function unlike($entryId) + { + $kparams = array(); + $this->client->addParam($kparams, "entryId", $entryId); + $this->client->queueServiceActionCall("like_like", "unlike", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $resultObject = (bool) $resultObject; + return $resultObject; + } + + /** + * + * + * @param string $entryId + * @param string $userId + * @return bool + */ + function checkLikeExists($entryId, $userId = null) + { + $kparams = array(); + $this->client->addParam($kparams, "entryId", $entryId); + $this->client->addParam($kparams, "userId", $userId); + $this->client->queueServiceActionCall("like_like", "checkLikeExists", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $resultObject = (bool) $resultObject; + return $resultObject; + } +} +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaLikeClientPlugin extends KalturaClientPlugin +{ + /** + * @var KalturaLikeService + */ + public $like = null; + + protected function __construct(KalturaClient $client) + { + parent::__construct($client); + $this->like = new KalturaLikeService($client); + } + + /** + * @return KalturaLikeClientPlugin + */ + public static function get(KalturaClient $client) + { + return new KalturaLikeClientPlugin($client); + } + + /** + * @return array + */ + public function getServices() + { + $services = array( + 'like' => $this->like, + ); + return $services; + } + + /** + * @return string + */ + public function getName() + { + return 'like'; + } +} + diff --git a/local/kaltura/API/KalturaPlugins/KalturaMetadataClientPlugin.php b/local/kaltura/API/KalturaPlugins/KalturaMetadataClientPlugin.php new file mode 100644 index 0000000000000..7919b7fc491b2 --- /dev/null +++ b/local/kaltura/API/KalturaPlugins/KalturaMetadataClientPlugin.php @@ -0,0 +1,1566 @@ +. +// +// @ignore +// =================================================================================================== + +/** + * @package Kaltura + * @subpackage Client + */ +require_once(dirname(__FILE__) . "/../KalturaClientBase.php"); +require_once(dirname(__FILE__) . "/../KalturaEnums.php"); +require_once(dirname(__FILE__) . "/../KalturaTypes.php"); + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaMetadataProfileCreateMode +{ + const API = 1; + const KMC = 2; + const APP = 3; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaMetadataProfileStatus +{ + const ACTIVE = 1; + const DEPRECATED = 2; + const TRANSFORMING = 3; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaMetadataStatus +{ + const VALID = 1; + const INVALID = 2; + const DELETED = 3; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaMetadataObjectType +{ + const AD_CUE_POINT = "adCuePointMetadata.AdCuePoint"; + const ANNOTATION = "annotationMetadata.Annotation"; + const CODE_CUE_POINT = "codeCuePointMetadata.CodeCuePoint"; + const ENTRY = "1"; + const CATEGORY = "2"; + const USER = "3"; + const PARTNER = "4"; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaMetadataOrderBy +{ + const CREATED_AT_ASC = "+createdAt"; + const METADATA_PROFILE_VERSION_ASC = "+metadataProfileVersion"; + const UPDATED_AT_ASC = "+updatedAt"; + const VERSION_ASC = "+version"; + const CREATED_AT_DESC = "-createdAt"; + const METADATA_PROFILE_VERSION_DESC = "-metadataProfileVersion"; + const UPDATED_AT_DESC = "-updatedAt"; + const VERSION_DESC = "-version"; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaMetadataProfileOrderBy +{ + const CREATED_AT_ASC = "+createdAt"; + const UPDATED_AT_ASC = "+updatedAt"; + const CREATED_AT_DESC = "-createdAt"; + const UPDATED_AT_DESC = "-updatedAt"; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaMetadata extends KalturaObjectBase +{ + /** + * + * + * @var int + * @readonly + */ + public $id = null; + + /** + * + * + * @var int + * @readonly + */ + public $partnerId = null; + + /** + * + * + * @var int + * @readonly + */ + public $metadataProfileId = null; + + /** + * + * + * @var int + * @readonly + */ + public $metadataProfileVersion = null; + + /** + * + * + * @var KalturaMetadataObjectType + * @readonly + */ + public $metadataObjectType = null; + + /** + * + * + * @var string + * @readonly + */ + public $objectId = null; + + /** + * + * + * @var int + * @readonly + */ + public $version = null; + + /** + * + * + * @var int + * @readonly + */ + public $createdAt = null; + + /** + * + * + * @var int + * @readonly + */ + public $updatedAt = null; + + /** + * + * + * @var KalturaMetadataStatus + * @readonly + */ + public $status = null; + + /** + * + * + * @var string + * @readonly + */ + public $xml = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaMetadataListResponse extends KalturaObjectBase +{ + /** + * + * + * @var array of KalturaMetadata + * @readonly + */ + public $objects; + + /** + * + * + * @var int + * @readonly + */ + public $totalCount = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaMetadataProfile extends KalturaObjectBase +{ + /** + * + * + * @var int + * @readonly + */ + public $id = null; + + /** + * + * + * @var int + * @readonly + */ + public $partnerId = null; + + /** + * + * + * @var KalturaMetadataObjectType + */ + public $metadataObjectType = null; + + /** + * + * + * @var int + * @readonly + */ + public $version = null; + + /** + * + * + * @var string + */ + public $name = null; + + /** + * + * + * @var string + */ + public $systemName = null; + + /** + * + * + * @var string + */ + public $description = null; + + /** + * + * + * @var int + * @readonly + */ + public $createdAt = null; + + /** + * + * + * @var int + * @readonly + */ + public $updatedAt = null; + + /** + * + * + * @var KalturaMetadataProfileStatus + * @readonly + */ + public $status = null; + + /** + * + * + * @var string + * @readonly + */ + public $xsd = null; + + /** + * + * + * @var string + * @readonly + */ + public $views = null; + + /** + * + * + * @var string + * @readonly + */ + public $xslt = null; + + /** + * + * + * @var KalturaMetadataProfileCreateMode + */ + public $createMode = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaMetadataProfileField extends KalturaObjectBase +{ + /** + * + * + * @var int + * @readonly + */ + public $id = null; + + /** + * + * + * @var string + * @readonly + */ + public $xPath = null; + + /** + * + * + * @var string + * @readonly + */ + public $key = null; + + /** + * + * + * @var string + * @readonly + */ + public $label = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaMetadataProfileFieldListResponse extends KalturaObjectBase +{ + /** + * + * + * @var array of KalturaMetadataProfileField + * @readonly + */ + public $objects; + + /** + * + * + * @var int + * @readonly + */ + public $totalCount = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaMetadataProfileListResponse extends KalturaObjectBase +{ + /** + * + * + * @var array of KalturaMetadataProfile + * @readonly + */ + public $objects; + + /** + * + * + * @var int + * @readonly + */ + public $totalCount = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaImportMetadataJobData extends KalturaJobData +{ + /** + * + * + * @var string + */ + public $srcFileUrl = null; + + /** + * + * + * @var string + */ + public $destFileLocalPath = null; + + /** + * + * + * @var int + */ + public $metadataId = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +abstract class KalturaMetadataBaseFilter extends KalturaFilter +{ + /** + * + * + * @var int + */ + public $partnerIdEqual = null; + + /** + * + * + * @var int + */ + public $metadataProfileIdEqual = null; + + /** + * + * + * @var int + */ + public $metadataProfileVersionEqual = null; + + /** + * + * + * @var int + */ + public $metadataProfileVersionGreaterThanOrEqual = null; + + /** + * + * + * @var int + */ + public $metadataProfileVersionLessThanOrEqual = null; + + /** + * + * + * @var KalturaMetadataObjectType + */ + public $metadataObjectTypeEqual = null; + + /** + * + * + * @var string + */ + public $objectIdEqual = null; + + /** + * + * + * @var string + */ + public $objectIdIn = null; + + /** + * + * + * @var int + */ + public $versionEqual = null; + + /** + * + * + * @var int + */ + public $versionGreaterThanOrEqual = null; + + /** + * + * + * @var int + */ + public $versionLessThanOrEqual = null; + + /** + * + * + * @var int + */ + public $createdAtGreaterThanOrEqual = null; + + /** + * + * + * @var int + */ + public $createdAtLessThanOrEqual = null; + + /** + * + * + * @var int + */ + public $updatedAtGreaterThanOrEqual = null; + + /** + * + * + * @var int + */ + public $updatedAtLessThanOrEqual = null; + + /** + * + * + * @var KalturaMetadataStatus + */ + public $statusEqual = null; + + /** + * + * + * @var string + */ + public $statusIn = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +abstract class KalturaMetadataProfileBaseFilter extends KalturaFilter +{ + /** + * + * + * @var int + */ + public $idEqual = null; + + /** + * + * + * @var int + */ + public $partnerIdEqual = null; + + /** + * + * + * @var KalturaMetadataObjectType + */ + public $metadataObjectTypeEqual = null; + + /** + * + * + * @var string + */ + public $metadataObjectTypeIn = null; + + /** + * + * + * @var int + */ + public $versionEqual = null; + + /** + * + * + * @var string + */ + public $nameEqual = null; + + /** + * + * + * @var string + */ + public $systemNameEqual = null; + + /** + * + * + * @var string + */ + public $systemNameIn = null; + + /** + * + * + * @var int + */ + public $createdAtGreaterThanOrEqual = null; + + /** + * + * + * @var int + */ + public $createdAtLessThanOrEqual = null; + + /** + * + * + * @var int + */ + public $updatedAtGreaterThanOrEqual = null; + + /** + * + * + * @var int + */ + public $updatedAtLessThanOrEqual = null; + + /** + * + * + * @var KalturaMetadataProfileStatus + */ + public $statusEqual = null; + + /** + * + * + * @var string + */ + public $statusIn = null; + + /** + * + * + * @var KalturaMetadataProfileCreateMode + */ + public $createModeEqual = null; + + /** + * + * + * @var KalturaMetadataProfileCreateMode + */ + public $createModeNotEqual = null; + + /** + * + * + * @var string + */ + public $createModeIn = null; + + /** + * + * + * @var string + */ + public $createModeNotIn = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaTransformMetadataJobData extends KalturaJobData +{ + /** + * + * + * @var string + */ + public $srcXslPath = null; + + /** + * + * + * @var int + */ + public $srcVersion = null; + + /** + * + * + * @var int + */ + public $destVersion = null; + + /** + * + * + * @var string + */ + public $destXsdPath = null; + + /** + * + * + * @var int + */ + public $metadataProfileId = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaCompareMetadataCondition extends KalturaCompareCondition +{ + /** + * May contain the full xpath to the field in three formats + * 1. Slashed xPath, e.g. /metadata/myElementName + * 2. Using local-name function, e.g. /[local-name()='metadata']/[local-name()='myElementName'] + * 3. Using only the field name, e.g. myElementName, it will be searched as //myElementName + * + * + * @var string + */ + public $xPath = null; + + /** + * Metadata profile id + * + * + * @var int + */ + public $profileId = null; + + /** + * Metadata profile system name + * + * + * @var string + */ + public $profileSystemName = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaFileAssetFilter extends KalturaFileAssetBaseFilter +{ + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaMatchMetadataCondition extends KalturaMatchCondition +{ + /** + * May contain the full xpath to the field in three formats + * 1. Slashed xPath, e.g. /metadata/myElementName + * 2. Using local-name function, e.g. /[local-name()='metadata']/[local-name()='myElementName'] + * 3. Using only the field name, e.g. myElementName, it will be searched as //myElementName + * + * + * @var string + */ + public $xPath = null; + + /** + * Metadata profile id + * + * + * @var int + */ + public $profileId = null; + + /** + * Metadata profile system name + * + * + * @var string + */ + public $profileSystemName = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaMetadataFieldChangedCondition extends KalturaMatchCondition +{ + /** + * May contain the full xpath to the field in three formats + * 1. Slashed xPath, e.g. /metadata/myElementName + * 2. Using local-name function, e.g. /[local-name()='metadata']/[local-name()='myElementName'] + * 3. Using only the field name, e.g. myElementName, it will be searched as //myElementName + * + * + * @var string + */ + public $xPath = null; + + /** + * Metadata profile id + * + * + * @var int + */ + public $profileId = null; + + /** + * Metadata profile system name + * + * + * @var string + */ + public $profileSystemName = null; + + /** + * + * + * @var string + */ + public $versionA = null; + + /** + * + * + * @var string + */ + public $versionB = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaMetadataFilter extends KalturaMetadataBaseFilter +{ + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaMetadataProfileFilter extends KalturaMetadataProfileBaseFilter +{ + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaMetadataSearchItem extends KalturaSearchOperator +{ + /** + * + * + * @var int + */ + public $metadataProfileId = null; + + /** + * + * + * @var string + */ + public $orderBy = null; + + +} + + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaMetadataService extends KalturaServiceBase +{ + function __construct(KalturaClient $client = null) + { + parent::__construct($client); + } + + /** + * Allows you to add a metadata object and metadata content associated with Kaltura object + * + * @param int $metadataProfileId + * @param string $objectType + * @param string $objectId + * @param string $xmlData XML metadata + * @return KalturaMetadata + */ + function add($metadataProfileId, $objectType, $objectId, $xmlData) + { + $kparams = array(); + $this->client->addParam($kparams, "metadataProfileId", $metadataProfileId); + $this->client->addParam($kparams, "objectType", $objectType); + $this->client->addParam($kparams, "objectId", $objectId); + $this->client->addParam($kparams, "xmlData", $xmlData); + $this->client->queueServiceActionCall("metadata_metadata", "add", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaMetadata"); + return $resultObject; + } + + /** + * Allows you to add a metadata object and metadata file associated with Kaltura object + * + * @param int $metadataProfileId + * @param string $objectType + * @param string $objectId + * @param file $xmlFile XML metadata + * @return KalturaMetadata + */ + function addFromFile($metadataProfileId, $objectType, $objectId, $xmlFile) + { + $kparams = array(); + $this->client->addParam($kparams, "metadataProfileId", $metadataProfileId); + $this->client->addParam($kparams, "objectType", $objectType); + $this->client->addParam($kparams, "objectId", $objectId); + $kfiles = array(); + $this->client->addParam($kfiles, "xmlFile", $xmlFile); + $this->client->queueServiceActionCall("metadata_metadata", "addFromFile", $kparams, $kfiles); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaMetadata"); + return $resultObject; + } + + /** + * Allows you to add a metadata xml data from remote URL + * + * @param int $metadataProfileId + * @param string $objectType + * @param string $objectId + * @param string $url XML metadata remote url + * @return KalturaMetadata + */ + function addFromUrl($metadataProfileId, $objectType, $objectId, $url) + { + $kparams = array(); + $this->client->addParam($kparams, "metadataProfileId", $metadataProfileId); + $this->client->addParam($kparams, "objectType", $objectType); + $this->client->addParam($kparams, "objectId", $objectId); + $this->client->addParam($kparams, "url", $url); + $this->client->queueServiceActionCall("metadata_metadata", "addFromUrl", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaMetadata"); + return $resultObject; + } + + /** + * Allows you to add a metadata xml data from remote URL. + Enables different permissions than addFromUrl action. + * + * @param int $metadataProfileId + * @param string $objectType + * @param string $objectId + * @param string $url XML metadata remote url + * @return KalturaMetadata + */ + function addFromBulk($metadataProfileId, $objectType, $objectId, $url) + { + $kparams = array(); + $this->client->addParam($kparams, "metadataProfileId", $metadataProfileId); + $this->client->addParam($kparams, "objectType", $objectType); + $this->client->addParam($kparams, "objectId", $objectId); + $this->client->addParam($kparams, "url", $url); + $this->client->queueServiceActionCall("metadata_metadata", "addFromBulk", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaMetadata"); + return $resultObject; + } + + /** + * Retrieve a metadata object by id + * + * @param int $id + * @return KalturaMetadata + */ + function get($id) + { + $kparams = array(); + $this->client->addParam($kparams, "id", $id); + $this->client->queueServiceActionCall("metadata_metadata", "get", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaMetadata"); + return $resultObject; + } + + /** + * Update an existing metadata object with new XML content + * + * @param int $id + * @param string $xmlData XML metadata + * @param int $version Enable update only if the metadata object version did not change by other process + * @return KalturaMetadata + */ + function update($id, $xmlData = null, $version = null) + { + $kparams = array(); + $this->client->addParam($kparams, "id", $id); + $this->client->addParam($kparams, "xmlData", $xmlData); + $this->client->addParam($kparams, "version", $version); + $this->client->queueServiceActionCall("metadata_metadata", "update", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaMetadata"); + return $resultObject; + } + + /** + * Update an existing metadata object with new XML file + * + * @param int $id + * @param file $xmlFile XML metadata + * @return KalturaMetadata + */ + function updateFromFile($id, $xmlFile = null) + { + $kparams = array(); + $this->client->addParam($kparams, "id", $id); + $kfiles = array(); + $this->client->addParam($kfiles, "xmlFile", $xmlFile); + $this->client->queueServiceActionCall("metadata_metadata", "updateFromFile", $kparams, $kfiles); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaMetadata"); + return $resultObject; + } + + /** + * List metadata objects by filter and pager + * + * @param KalturaMetadataFilter $filter + * @param KalturaFilterPager $pager + * @return KalturaMetadataListResponse + */ + function listAction(KalturaMetadataFilter $filter = null, KalturaFilterPager $pager = null) + { + $kparams = array(); + if ($filter !== null) + $this->client->addParam($kparams, "filter", $filter->toParams()); + if ($pager !== null) + $this->client->addParam($kparams, "pager", $pager->toParams()); + $this->client->queueServiceActionCall("metadata_metadata", "list", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaMetadataListResponse"); + return $resultObject; + } + + /** + * Delete an existing metadata + * + * @param int $id + * @return + */ + function delete($id) + { + $kparams = array(); + $this->client->addParam($kparams, "id", $id); + $this->client->queueServiceActionCall("metadata_metadata", "delete", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "null"); + return $resultObject; + } + + /** + * Mark existing metadata as invalid + Used by batch metadata transform + * + * @param int $id + * @param int $version Enable update only if the metadata object version did not change by other process + * @return + */ + function invalidate($id, $version = null) + { + $kparams = array(); + $this->client->addParam($kparams, "id", $id); + $this->client->addParam($kparams, "version", $version); + $this->client->queueServiceActionCall("metadata_metadata", "invalidate", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "null"); + return $resultObject; + } + + /** + * Serves metadata XML file + * + * @param int $id + * @return file + */ + function serve($id) + { + $kparams = array(); + $this->client->addParam($kparams, "id", $id); + $this->client->queueServiceActionCall("metadata_metadata", "serve", $kparams); + if(!$this->client->getDestinationPath() && !$this->client->getReturnServedResult()) + return $this->client->getServeUrl(); + return $this->client->doQueue(); + } + + /** + * Action transforms current metadata object XML using a provided XSL. + * + * @param int $id + * @param file $xslFile + * @return KalturaMetadata + */ + function updateFromXSL($id, $xslFile) + { + $kparams = array(); + $this->client->addParam($kparams, "id", $id); + $kfiles = array(); + $this->client->addParam($kfiles, "xslFile", $xslFile); + $this->client->queueServiceActionCall("metadata_metadata", "updateFromXSL", $kparams, $kfiles); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaMetadata"); + return $resultObject; + } +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaMetadataProfileService extends KalturaServiceBase +{ + function __construct(KalturaClient $client = null) + { + parent::__construct($client); + } + + /** + * Allows you to add a metadata profile object and metadata profile content associated with Kaltura object type + * + * @param KalturaMetadataProfile $metadataProfile + * @param string $xsdData XSD metadata definition + * @param string $viewsData UI views definition + * @return KalturaMetadataProfile + */ + function add(KalturaMetadataProfile $metadataProfile, $xsdData, $viewsData = null) + { + $kparams = array(); + $this->client->addParam($kparams, "metadataProfile", $metadataProfile->toParams()); + $this->client->addParam($kparams, "xsdData", $xsdData); + $this->client->addParam($kparams, "viewsData", $viewsData); + $this->client->queueServiceActionCall("metadata_metadataprofile", "add", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaMetadataProfile"); + return $resultObject; + } + + /** + * Allows you to add a metadata profile object and metadata profile file associated with Kaltura object type + * + * @param KalturaMetadataProfile $metadataProfile + * @param file $xsdFile XSD metadata definition + * @param file $viewsFile UI views definition + * @return KalturaMetadataProfile + */ + function addFromFile(KalturaMetadataProfile $metadataProfile, $xsdFile, $viewsFile = null) + { + $kparams = array(); + $this->client->addParam($kparams, "metadataProfile", $metadataProfile->toParams()); + $kfiles = array(); + $this->client->addParam($kfiles, "xsdFile", $xsdFile); + $this->client->addParam($kfiles, "viewsFile", $viewsFile); + $this->client->queueServiceActionCall("metadata_metadataprofile", "addFromFile", $kparams, $kfiles); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaMetadataProfile"); + return $resultObject; + } + + /** + * Retrieve a metadata profile object by id + * + * @param int $id + * @return KalturaMetadataProfile + */ + function get($id) + { + $kparams = array(); + $this->client->addParam($kparams, "id", $id); + $this->client->queueServiceActionCall("metadata_metadataprofile", "get", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaMetadataProfile"); + return $resultObject; + } + + /** + * Update an existing metadata object + * + * @param int $id + * @param KalturaMetadataProfile $metadataProfile + * @param string $xsdData XSD metadata definition + * @param string $viewsData UI views definition + * @return KalturaMetadataProfile + */ + function update($id, KalturaMetadataProfile $metadataProfile, $xsdData = null, $viewsData = null) + { + $kparams = array(); + $this->client->addParam($kparams, "id", $id); + $this->client->addParam($kparams, "metadataProfile", $metadataProfile->toParams()); + $this->client->addParam($kparams, "xsdData", $xsdData); + $this->client->addParam($kparams, "viewsData", $viewsData); + $this->client->queueServiceActionCall("metadata_metadataprofile", "update", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaMetadataProfile"); + return $resultObject; + } + + /** + * List metadata profile objects by filter and pager + * + * @param KalturaMetadataProfileFilter $filter + * @param KalturaFilterPager $pager + * @return KalturaMetadataProfileListResponse + */ + function listAction(KalturaMetadataProfileFilter $filter = null, KalturaFilterPager $pager = null) + { + $kparams = array(); + if ($filter !== null) + $this->client->addParam($kparams, "filter", $filter->toParams()); + if ($pager !== null) + $this->client->addParam($kparams, "pager", $pager->toParams()); + $this->client->queueServiceActionCall("metadata_metadataprofile", "list", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaMetadataProfileListResponse"); + return $resultObject; + } + + /** + * List metadata profile fields by metadata profile id + * + * @param int $metadataProfileId + * @return KalturaMetadataProfileFieldListResponse + */ + function listFields($metadataProfileId) + { + $kparams = array(); + $this->client->addParam($kparams, "metadataProfileId", $metadataProfileId); + $this->client->queueServiceActionCall("metadata_metadataprofile", "listFields", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaMetadataProfileFieldListResponse"); + return $resultObject; + } + + /** + * Delete an existing metadata profile + * + * @param int $id + * @return + */ + function delete($id) + { + $kparams = array(); + $this->client->addParam($kparams, "id", $id); + $this->client->queueServiceActionCall("metadata_metadataprofile", "delete", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "null"); + return $resultObject; + } + + /** + * Update an existing metadata object definition file + * + * @param int $id + * @param int $toVersion + * @return KalturaMetadataProfile + */ + function revert($id, $toVersion) + { + $kparams = array(); + $this->client->addParam($kparams, "id", $id); + $this->client->addParam($kparams, "toVersion", $toVersion); + $this->client->queueServiceActionCall("metadata_metadataprofile", "revert", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaMetadataProfile"); + return $resultObject; + } + + /** + * Update an existing metadata object definition file + * + * @param int $id + * @param file $xsdFile XSD metadata definition + * @return KalturaMetadataProfile + */ + function updateDefinitionFromFile($id, $xsdFile) + { + $kparams = array(); + $this->client->addParam($kparams, "id", $id); + $kfiles = array(); + $this->client->addParam($kfiles, "xsdFile", $xsdFile); + $this->client->queueServiceActionCall("metadata_metadataprofile", "updateDefinitionFromFile", $kparams, $kfiles); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaMetadataProfile"); + return $resultObject; + } + + /** + * Update an existing metadata object views file + * + * @param int $id + * @param file $viewsFile UI views file + * @return KalturaMetadataProfile + */ + function updateViewsFromFile($id, $viewsFile) + { + $kparams = array(); + $this->client->addParam($kparams, "id", $id); + $kfiles = array(); + $this->client->addParam($kfiles, "viewsFile", $viewsFile); + $this->client->queueServiceActionCall("metadata_metadataprofile", "updateViewsFromFile", $kparams, $kfiles); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaMetadataProfile"); + return $resultObject; + } + + /** + * Update an existing metadata object xslt file + * + * @param int $id + * @param file $xsltFile XSLT file, will be executed on every metadata add/update + * @return KalturaMetadataProfile + */ + function updateTransformationFromFile($id, $xsltFile) + { + $kparams = array(); + $this->client->addParam($kparams, "id", $id); + $kfiles = array(); + $this->client->addParam($kfiles, "xsltFile", $xsltFile); + $this->client->queueServiceActionCall("metadata_metadataprofile", "updateTransformationFromFile", $kparams, $kfiles); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaMetadataProfile"); + return $resultObject; + } + + /** + * Serves metadata profile XSD file + * + * @param int $id + * @return file + */ + function serve($id) + { + $kparams = array(); + $this->client->addParam($kparams, "id", $id); + $this->client->queueServiceActionCall("metadata_metadataprofile", "serve", $kparams); + if(!$this->client->getDestinationPath() && !$this->client->getReturnServedResult()) + return $this->client->getServeUrl(); + return $this->client->doQueue(); + } + + /** + * Serves metadata profile view file + * + * @param int $id + * @return file + */ + function serveView($id) + { + $kparams = array(); + $this->client->addParam($kparams, "id", $id); + $this->client->queueServiceActionCall("metadata_metadataprofile", "serveView", $kparams); + if(!$this->client->getDestinationPath() && !$this->client->getReturnServedResult()) + return $this->client->getServeUrl(); + return $this->client->doQueue(); + } +} +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaMetadataClientPlugin extends KalturaClientPlugin +{ + /** + * @var KalturaMetadataService + */ + public $metadata = null; + + /** + * @var KalturaMetadataProfileService + */ + public $metadataProfile = null; + + protected function __construct(KalturaClient $client) + { + parent::__construct($client); + $this->metadata = new KalturaMetadataService($client); + $this->metadataProfile = new KalturaMetadataProfileService($client); + } + + /** + * @return KalturaMetadataClientPlugin + */ + public static function get(KalturaClient $client) + { + return new KalturaMetadataClientPlugin($client); + } + + /** + * @return array + */ + public function getServices() + { + $services = array( + 'metadata' => $this->metadata, + 'metadataProfile' => $this->metadataProfile, + ); + return $services; + } + + /** + * @return string + */ + public function getName() + { + return 'metadata'; + } +} + diff --git a/local/kaltura/API/KalturaPlugins/KalturaMultiCentersClientPlugin.php b/local/kaltura/API/KalturaPlugins/KalturaMultiCentersClientPlugin.php new file mode 100644 index 0000000000000..c3b2aff0a11b4 --- /dev/null +++ b/local/kaltura/API/KalturaPlugins/KalturaMultiCentersClientPlugin.php @@ -0,0 +1,119 @@ +. +// +// @ignore +// =================================================================================================== + +/** + * @package Kaltura + * @subpackage Client + */ +require_once(dirname(__FILE__) . "/../KalturaClientBase.php"); +require_once(dirname(__FILE__) . "/../KalturaEnums.php"); +require_once(dirname(__FILE__) . "/../KalturaTypes.php"); + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaFileSyncImportJobData extends KalturaJobData +{ + /** + * + * + * @var string + */ + public $sourceUrl = null; + + /** + * + * + * @var string + */ + public $filesyncId = null; + + /** + * + * + * @var string + */ + public $tmpFilePath = null; + + /** + * + * + * @var string + */ + public $destFilePath = null; + + /** + * + * + * @var int + */ + public $fileSize = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaMultiCentersClientPlugin extends KalturaClientPlugin +{ + protected function __construct(KalturaClient $client) + { + parent::__construct($client); + } + + /** + * @return KalturaMultiCentersClientPlugin + */ + public static function get(KalturaClient $client) + { + return new KalturaMultiCentersClientPlugin($client); + } + + /** + * @return array + */ + public function getServices() + { + $services = array( + ); + return $services; + } + + /** + * @return string + */ + public function getName() + { + return 'multiCenters'; + } +} + diff --git a/local/kaltura/API/KalturaPlugins/KalturaShortLinkClientPlugin.php b/local/kaltura/API/KalturaPlugins/KalturaShortLinkClientPlugin.php new file mode 100644 index 0000000000000..5da843b5e3be2 --- /dev/null +++ b/local/kaltura/API/KalturaPlugins/KalturaShortLinkClientPlugin.php @@ -0,0 +1,476 @@ +. +// +// @ignore +// =================================================================================================== + +/** + * @package Kaltura + * @subpackage Client + */ +require_once(dirname(__FILE__) . "/../KalturaClientBase.php"); +require_once(dirname(__FILE__) . "/../KalturaEnums.php"); +require_once(dirname(__FILE__) . "/../KalturaTypes.php"); + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaShortLinkStatus +{ + const DISABLED = 1; + const ENABLED = 2; + const DELETED = 3; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaShortLinkOrderBy +{ + const CREATED_AT_ASC = "+createdAt"; + const EXPIRES_AT_ASC = "+expiresAt"; + const UPDATED_AT_ASC = "+updatedAt"; + const CREATED_AT_DESC = "-createdAt"; + const EXPIRES_AT_DESC = "-expiresAt"; + const UPDATED_AT_DESC = "-updatedAt"; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaShortLink extends KalturaObjectBase +{ + /** + * + * + * @var int + * @readonly + */ + public $id = null; + + /** + * + * + * @var int + * @readonly + */ + public $createdAt = null; + + /** + * + * + * @var int + * @readonly + */ + public $updatedAt = null; + + /** + * + * + * @var int + */ + public $expiresAt = null; + + /** + * + * + * @var int + * @readonly + */ + public $partnerId = null; + + /** + * + * + * @var string + */ + public $userId = null; + + /** + * + * + * @var string + */ + public $name = null; + + /** + * + * + * @var string + */ + public $systemName = null; + + /** + * + * + * @var string + */ + public $fullUrl = null; + + /** + * + * + * @var KalturaShortLinkStatus + */ + public $status = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaShortLinkListResponse extends KalturaObjectBase +{ + /** + * + * + * @var array of KalturaShortLink + * @readonly + */ + public $objects; + + /** + * + * + * @var int + * @readonly + */ + public $totalCount = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +abstract class KalturaShortLinkBaseFilter extends KalturaFilter +{ + /** + * + * + * @var int + */ + public $idEqual = null; + + /** + * + * + * @var string + */ + public $idIn = null; + + /** + * + * + * @var int + */ + public $createdAtGreaterThanOrEqual = null; + + /** + * + * + * @var int + */ + public $createdAtLessThanOrEqual = null; + + /** + * + * + * @var int + */ + public $updatedAtGreaterThanOrEqual = null; + + /** + * + * + * @var int + */ + public $updatedAtLessThanOrEqual = null; + + /** + * + * + * @var int + */ + public $expiresAtGreaterThanOrEqual = null; + + /** + * + * + * @var int + */ + public $expiresAtLessThanOrEqual = null; + + /** + * + * + * @var int + */ + public $partnerIdEqual = null; + + /** + * + * + * @var string + */ + public $partnerIdIn = null; + + /** + * + * + * @var string + */ + public $userIdEqual = null; + + /** + * + * + * @var string + */ + public $userIdIn = null; + + /** + * + * + * @var string + */ + public $systemNameEqual = null; + + /** + * + * + * @var string + */ + public $systemNameIn = null; + + /** + * + * + * @var KalturaShortLinkStatus + */ + public $statusEqual = null; + + /** + * + * + * @var string + */ + public $statusIn = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaShortLinkFilter extends KalturaShortLinkBaseFilter +{ + +} + + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaShortLinkService extends KalturaServiceBase +{ + function __construct(KalturaClient $client = null) + { + parent::__construct($client); + } + + /** + * List short link objects by filter and pager + * + * @param KalturaShortLinkFilter $filter + * @param KalturaFilterPager $pager + * @return KalturaShortLinkListResponse + */ + function listAction(KalturaShortLinkFilter $filter = null, KalturaFilterPager $pager = null) + { + $kparams = array(); + if ($filter !== null) + $this->client->addParam($kparams, "filter", $filter->toParams()); + if ($pager !== null) + $this->client->addParam($kparams, "pager", $pager->toParams()); + $this->client->queueServiceActionCall("shortlink_shortlink", "list", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaShortLinkListResponse"); + return $resultObject; + } + + /** + * Allows you to add a short link object + * + * @param KalturaShortLink $shortLink + * @return KalturaShortLink + */ + function add(KalturaShortLink $shortLink) + { + $kparams = array(); + $this->client->addParam($kparams, "shortLink", $shortLink->toParams()); + $this->client->queueServiceActionCall("shortlink_shortlink", "add", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaShortLink"); + return $resultObject; + } + + /** + * Retrieve an short link object by id + * + * @param string $id + * @return KalturaShortLink + */ + function get($id) + { + $kparams = array(); + $this->client->addParam($kparams, "id", $id); + $this->client->queueServiceActionCall("shortlink_shortlink", "get", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaShortLink"); + return $resultObject; + } + + /** + * Update exisitng short link + * + * @param string $id + * @param KalturaShortLink $shortLink + * @return KalturaShortLink + */ + function update($id, KalturaShortLink $shortLink) + { + $kparams = array(); + $this->client->addParam($kparams, "id", $id); + $this->client->addParam($kparams, "shortLink", $shortLink->toParams()); + $this->client->queueServiceActionCall("shortlink_shortlink", "update", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaShortLink"); + return $resultObject; + } + + /** + * Mark the short link as deleted + * + * @param string $id + * @return KalturaShortLink + */ + function delete($id) + { + $kparams = array(); + $this->client->addParam($kparams, "id", $id); + $this->client->queueServiceActionCall("shortlink_shortlink", "delete", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaShortLink"); + return $resultObject; + } + + /** + * Serves short link + * + * @param string $id + * @param bool $proxy Proxy the response instead of redirect + * @return file + */ + function gotoAction($id, $proxy = false) + { + $kparams = array(); + $this->client->addParam($kparams, "id", $id); + $this->client->addParam($kparams, "proxy", $proxy); + $this->client->queueServiceActionCall("shortlink_shortlink", "goto", $kparams); + if(!$this->client->getDestinationPath() && !$this->client->getReturnServedResult()) + return $this->client->getServeUrl(); + return $this->client->doQueue(); + } +} +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaShortLinkClientPlugin extends KalturaClientPlugin +{ + /** + * @var KalturaShortLinkService + */ + public $shortLink = null; + + protected function __construct(KalturaClient $client) + { + parent::__construct($client); + $this->shortLink = new KalturaShortLinkService($client); + } + + /** + * @return KalturaShortLinkClientPlugin + */ + public static function get(KalturaClient $client) + { + return new KalturaShortLinkClientPlugin($client); + } + + /** + * @return array + */ + public function getServices() + { + $services = array( + 'shortLink' => $this->shortLink, + ); + return $services; + } + + /** + * @return string + */ + public function getName() + { + return 'shortLink'; + } +} + diff --git a/local/kaltura/API/KalturaPlugins/KalturaTagSearchClientPlugin.php b/local/kaltura/API/KalturaPlugins/KalturaTagSearchClientPlugin.php new file mode 100644 index 0000000000000..9c3080e1d0b09 --- /dev/null +++ b/local/kaltura/API/KalturaPlugins/KalturaTagSearchClientPlugin.php @@ -0,0 +1,320 @@ +. +// +// @ignore +// =================================================================================================== + +/** + * @package Kaltura + * @subpackage Client + */ +require_once(dirname(__FILE__) . "/../KalturaClientBase.php"); +require_once(dirname(__FILE__) . "/../KalturaEnums.php"); +require_once(dirname(__FILE__) . "/../KalturaTypes.php"); + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaTag extends KalturaObjectBase +{ + /** + * + * + * @var int + * @readonly + */ + public $id = null; + + /** + * + * + * @var string + * @readonly + */ + public $tag = null; + + /** + * + * + * @var KalturaTaggedObjectType + * @readonly + */ + public $taggedObjectType = null; + + /** + * + * + * @var int + * @readonly + */ + public $partnerId = null; + + /** + * + * + * @var int + * @readonly + */ + public $instanceCount = null; + + /** + * + * + * @var int + * @readonly + */ + public $createdAt = null; + + /** + * + * + * @var int + * @readonly + */ + public $updatedAt = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaTagListResponse extends KalturaObjectBase +{ + /** + * + * + * @var array of KalturaTag + * @readonly + */ + public $objects; + + /** + * + * + * @var int + * @readonly + */ + public $totalCount = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaIndexTagsByPrivacyContextJobData extends KalturaJobData +{ + /** + * + * + * @var int + */ + public $changedCategoryId = null; + + /** + * + * + * @var string + */ + public $deletedPrivacyContexts = null; + + /** + * + * + * @var string + */ + public $addedPrivacyContexts = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaTagFilter extends KalturaFilter +{ + /** + * + * + * @var KalturaTaggedObjectType + */ + public $objectTypeEqual = null; + + /** + * + * + * @var string + */ + public $tagEqual = null; + + /** + * + * + * @var string + */ + public $tagStartsWith = null; + + /** + * + * + * @var int + */ + public $instanceCountEqual = null; + + /** + * + * + * @var int + */ + public $instanceCountIn = null; + + +} + + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaTagService extends KalturaServiceBase +{ + function __construct(KalturaClient $client = null) + { + parent::__construct($client); + } + + /** + * + * + * @param KalturaTagFilter $tagFilter + * @param KalturaFilterPager $pager + * @return KalturaTagListResponse + */ + function search(KalturaTagFilter $tagFilter, KalturaFilterPager $pager = null) + { + $kparams = array(); + $this->client->addParam($kparams, "tagFilter", $tagFilter->toParams()); + if ($pager !== null) + $this->client->addParam($kparams, "pager", $pager->toParams()); + $this->client->queueServiceActionCall("tagsearch_tag", "search", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaTagListResponse"); + return $resultObject; + } + + /** + * Action goes over all tags with instanceCount==0 and checks whether they need to be removed from the DB. Returns number of removed tags. + * + * @return int + */ + function deletePending() + { + $kparams = array(); + $this->client->queueServiceActionCall("tagsearch_tag", "deletePending", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "integer"); + return $resultObject; + } + + /** + * + * + * @param int $categoryId + * @param string $pcToDecrement + * @param string $pcToIncrement + * @return + */ + function indexCategoryEntryTags($categoryId, $pcToDecrement, $pcToIncrement) + { + $kparams = array(); + $this->client->addParam($kparams, "categoryId", $categoryId); + $this->client->addParam($kparams, "pcToDecrement", $pcToDecrement); + $this->client->addParam($kparams, "pcToIncrement", $pcToIncrement); + $this->client->queueServiceActionCall("tagsearch_tag", "indexCategoryEntryTags", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "null"); + return $resultObject; + } +} +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaTagSearchClientPlugin extends KalturaClientPlugin +{ + /** + * @var KalturaTagService + */ + public $tag = null; + + protected function __construct(KalturaClient $client) + { + parent::__construct($client); + $this->tag = new KalturaTagService($client); + } + + /** + * @return KalturaTagSearchClientPlugin + */ + public static function get(KalturaClient $client) + { + return new KalturaTagSearchClientPlugin($client); + } + + /** + * @return array + */ + public function getServices() + { + $services = array( + 'tag' => $this->tag, + ); + return $services; + } + + /** + * @return string + */ + public function getName() + { + return 'tagSearch'; + } +} + diff --git a/local/kaltura/API/KalturaPlugins/KalturaVarConsoleClientPlugin.php b/local/kaltura/API/KalturaPlugins/KalturaVarConsoleClientPlugin.php new file mode 100644 index 0000000000000..83e347358b4a7 --- /dev/null +++ b/local/kaltura/API/KalturaPlugins/KalturaVarConsoleClientPlugin.php @@ -0,0 +1,398 @@ +. +// +// @ignore +// =================================================================================================== + +/** + * @package Kaltura + * @subpackage Client + */ +require_once(dirname(__FILE__) . "/../KalturaClientBase.php"); +require_once(dirname(__FILE__) . "/../KalturaEnums.php"); +require_once(dirname(__FILE__) . "/../KalturaTypes.php"); + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaVarPartnerUsageItem extends KalturaObjectBase +{ + /** + * Partner ID + * + * + * @var int + */ + public $partnerId = null; + + /** + * Partner name + * + * + * @var string + */ + public $partnerName = null; + + /** + * Partner status + * + * + * @var KalturaPartnerStatus + */ + public $partnerStatus = null; + + /** + * Partner package + * + * + * @var int + */ + public $partnerPackage = null; + + /** + * Partner creation date (Unix timestamp) + * + * + * @var int + */ + public $partnerCreatedAt = null; + + /** + * Number of player loads in the specific date range + * + * + * @var int + */ + public $views = null; + + /** + * Number of plays in the specific date range + * + * + * @var int + */ + public $plays = null; + + /** + * Number of new entries created during specific date range + * + * + * @var int + */ + public $entriesCount = null; + + /** + * Total number of entries + * + * + * @var int + */ + public $totalEntriesCount = null; + + /** + * Number of new video entries created during specific date range + * + * + * @var int + */ + public $videoEntriesCount = null; + + /** + * Number of new image entries created during specific date range + * + * + * @var int + */ + public $imageEntriesCount = null; + + /** + * Number of new audio entries created during specific date range + * + * + * @var int + */ + public $audioEntriesCount = null; + + /** + * Number of new mix entries created during specific date range + * + * + * @var int + */ + public $mixEntriesCount = null; + + /** + * The total bandwidth usage during the given date range (in MB) + * + * + * @var float + */ + public $bandwidth = null; + + /** + * The total storage consumption (in MB) + * + * + * @var float + */ + public $totalStorage = null; + + /** + * The added storage consumption (new uploads) during the given date range (in MB) + * + * + * @var float + */ + public $storage = null; + + /** + * The deleted storage consumption (new uploads) during the given date range (in MB) + * + * + * @var float + */ + public $deletedStorage = null; + + /** + * The peak amount of storage consumption during the given date range for the specific publisher + * + * + * @var float + */ + public $peakStorage = null; + + /** + * The average amount of storage consumption during the given date range for the specific publisher + * + * + * @var float + */ + public $avgStorage = null; + + /** + * The combined amount of bandwidth and storage consumed during the given date range for the specific publisher + * + * + * @var float + */ + public $combinedStorageBandwidth = null; + + /** + * Amount of transcoding usage in MB + * + * + * @var float + */ + public $transcodingUsage = null; + + /** + * TGhe date at which the report was taken - Unix Timestamp + * + * + * @var string + */ + public $dateId = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaPartnerUsageListResponse extends KalturaObjectBase +{ + /** + * + * + * @var KalturaVarPartnerUsageItem + */ + public $total; + + /** + * + * + * @var array of KalturaVarPartnerUsageItem + */ + public $objects; + + /** + * + * + * @var int + */ + public $totalCount = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaVarPartnerUsageTotalItem extends KalturaVarPartnerUsageItem +{ + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaVarConsolePartnerFilter extends KalturaPartnerFilter +{ + /** + * Eq filter for the partner's group type + * + * + * @var KalturaPartnerGroupType + */ + public $groupTypeEq = null; + + /** + * In filter for the partner's group type + * + * + * @var string + */ + public $groupTypeIn = null; + + /** + * Filter for partner permissions- filter contains comma-separated string of permission names which the returned partners should have. + * + * + * @var string + */ + public $partnerPermissionsExist = null; + + +} + + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaVarConsoleService extends KalturaServiceBase +{ + function __construct(KalturaClient $client = null) + { + parent::__construct($client); + } + + /** + * Function which calulates partner usage of a group of a VAR's sub-publishers + * + * @param KalturaPartnerFilter $partnerFilter + * @param KalturaReportInputFilter $usageFilter + * @param KalturaFilterPager $pager + * @return KalturaPartnerUsageListResponse + */ + function getPartnerUsage(KalturaPartnerFilter $partnerFilter = null, KalturaReportInputFilter $usageFilter = null, KalturaFilterPager $pager = null) + { + $kparams = array(); + if ($partnerFilter !== null) + $this->client->addParam($kparams, "partnerFilter", $partnerFilter->toParams()); + if ($usageFilter !== null) + $this->client->addParam($kparams, "usageFilter", $usageFilter->toParams()); + if ($pager !== null) + $this->client->addParam($kparams, "pager", $pager->toParams()); + $this->client->queueServiceActionCall("varconsole_varconsole", "getPartnerUsage", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaPartnerUsageListResponse"); + return $resultObject; + } + + /** + * Function to change a sub-publisher's status + * + * @param int $id + * @param int $status + * @return + */ + function updateStatus($id, $status) + { + $kparams = array(); + $this->client->addParam($kparams, "id", $id); + $this->client->addParam($kparams, "status", $status); + $this->client->queueServiceActionCall("varconsole_varconsole", "updateStatus", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "null"); + return $resultObject; + } +} +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaVarConsoleClientPlugin extends KalturaClientPlugin +{ + /** + * @var KalturaVarConsoleService + */ + public $varConsole = null; + + protected function __construct(KalturaClient $client) + { + parent::__construct($client); + $this->varConsole = new KalturaVarConsoleService($client); + } + + /** + * @return KalturaVarConsoleClientPlugin + */ + public static function get(KalturaClient $client) + { + return new KalturaVarConsoleClientPlugin($client); + } + + /** + * @return array + */ + public function getServices() + { + $services = array( + 'varConsole' => $this->varConsole, + ); + return $services; + } + + /** + * @return string + */ + public function getName() + { + return 'varConsole'; + } +} + diff --git a/local/kaltura/API/KalturaPlugins/KalturaVelocixClientPlugin.php b/local/kaltura/API/KalturaPlugins/KalturaVelocixClientPlugin.php new file mode 100644 index 0000000000000..5c4ff95bcb4f0 --- /dev/null +++ b/local/kaltura/API/KalturaPlugins/KalturaVelocixClientPlugin.php @@ -0,0 +1,105 @@ +. +// +// @ignore +// =================================================================================================== + +/** + * @package Kaltura + * @subpackage Client + */ +require_once(dirname(__FILE__) . "/../KalturaClientBase.php"); +require_once(dirname(__FILE__) . "/../KalturaEnums.php"); +require_once(dirname(__FILE__) . "/../KalturaTypes.php"); + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaVelocixProvisionJobData extends KalturaProvisionJobData +{ + /** + * + * + * @var array of KalturaKeyValue + */ + public $provisioningParams; + + /** + * + * + * @var string + */ + public $userName = null; + + /** + * + * + * @var string + */ + public $password = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaVelocixClientPlugin extends KalturaClientPlugin +{ + protected function __construct(KalturaClient $client) + { + parent::__construct($client); + } + + /** + * @return KalturaVelocixClientPlugin + */ + public static function get(KalturaClient $client) + { + return new KalturaVelocixClientPlugin($client); + } + + /** + * @return array + */ + public function getServices() + { + $services = array( + ); + return $services; + } + + /** + * @return string + */ + public function getName() + { + return 'velocix'; + } +} + diff --git a/local/kaltura/API/KalturaPlugins/KalturaVirusScanClientPlugin.php b/local/kaltura/API/KalturaPlugins/KalturaVirusScanClientPlugin.php new file mode 100644 index 0000000000000..77aacf1295b49 --- /dev/null +++ b/local/kaltura/API/KalturaPlugins/KalturaVirusScanClientPlugin.php @@ -0,0 +1,545 @@ +. +// +// @ignore +// =================================================================================================== + +/** + * @package Kaltura + * @subpackage Client + */ +require_once(dirname(__FILE__) . "/../KalturaClientBase.php"); +require_once(dirname(__FILE__) . "/../KalturaEnums.php"); +require_once(dirname(__FILE__) . "/../KalturaTypes.php"); + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaVirusFoundAction +{ + const NONE = 0; + const DELETE = 1; + const CLEAN_NONE = 2; + const CLEAN_DELETE = 3; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaVirusScanJobResult +{ + const SCAN_ERROR = 1; + const FILE_IS_CLEAN = 2; + const FILE_WAS_CLEANED = 3; + const FILE_INFECTED = 4; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaVirusScanProfileStatus +{ + const DISABLED = 1; + const ENABLED = 2; + const DELETED = 3; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaVirusScanEngineType +{ + const CLAMAV_SCAN_ENGINE = "clamAVScanEngine.ClamAV"; + const SYMANTEC_SCAN_DIRECT_ENGINE = "symantecScanEngine.SymantecScanDirectEngine"; + const SYMANTEC_SCAN_ENGINE = "symantecScanEngine.SymantecScanEngine"; + const SYMANTEC_SCAN_JAVA_ENGINE = "symantecScanEngine.SymantecScanJavaEngine"; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaVirusScanProfileOrderBy +{ + const CREATED_AT_ASC = "+createdAt"; + const UPDATED_AT_ASC = "+updatedAt"; + const CREATED_AT_DESC = "-createdAt"; + const UPDATED_AT_DESC = "-updatedAt"; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaVirusScanProfile extends KalturaObjectBase +{ + /** + * + * + * @var int + * @readonly + */ + public $id = null; + + /** + * + * + * @var int + * @readonly + */ + public $createdAt = null; + + /** + * + * + * @var int + * @readonly + */ + public $updatedAt = null; + + /** + * + * + * @var int + * @readonly + */ + public $partnerId = null; + + /** + * + * + * @var string + */ + public $name = null; + + /** + * + * + * @var KalturaVirusScanProfileStatus + */ + public $status = null; + + /** + * + * + * @var KalturaVirusScanEngineType + */ + public $engineType = null; + + /** + * + * + * @var KalturaBaseEntryFilter + */ + public $entryFilter; + + /** + * + * + * @var KalturaVirusFoundAction + */ + public $actionIfInfected = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaVirusScanProfileListResponse extends KalturaObjectBase +{ + /** + * + * + * @var array of KalturaVirusScanProfile + * @readonly + */ + public $objects; + + /** + * + * + * @var int + * @readonly + */ + public $totalCount = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaParseCaptionAssetJobData extends KalturaJobData +{ + /** + * + * + * @var string + */ + public $captionAssetId = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaVirusScanJobData extends KalturaJobData +{ + /** + * + * + * @var string + */ + public $srcFilePath = null; + + /** + * + * + * @var string + */ + public $flavorAssetId = null; + + /** + * + * + * @var KalturaVirusScanJobResult + */ + public $scanResult = null; + + /** + * + * + * @var KalturaVirusFoundAction + */ + public $virusFoundAction = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +abstract class KalturaVirusScanProfileBaseFilter extends KalturaFilter +{ + /** + * + * + * @var int + */ + public $idEqual = null; + + /** + * + * + * @var string + */ + public $idIn = null; + + /** + * + * + * @var int + */ + public $createdAtGreaterThanOrEqual = null; + + /** + * + * + * @var int + */ + public $createdAtLessThanOrEqual = null; + + /** + * + * + * @var int + */ + public $updatedAtGreaterThanOrEqual = null; + + /** + * + * + * @var int + */ + public $updatedAtLessThanOrEqual = null; + + /** + * + * + * @var int + */ + public $partnerIdEqual = null; + + /** + * + * + * @var string + */ + public $partnerIdIn = null; + + /** + * + * + * @var string + */ + public $nameEqual = null; + + /** + * + * + * @var string + */ + public $nameLike = null; + + /** + * + * + * @var KalturaVirusScanProfileStatus + */ + public $statusEqual = null; + + /** + * + * + * @var string + */ + public $statusIn = null; + + /** + * + * + * @var KalturaVirusScanEngineType + */ + public $engineTypeEqual = null; + + /** + * + * + * @var string + */ + public $engineTypeIn = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaVirusScanProfileFilter extends KalturaVirusScanProfileBaseFilter +{ + +} + + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaVirusScanProfileService extends KalturaServiceBase +{ + function __construct(KalturaClient $client = null) + { + parent::__construct($client); + } + + /** + * List virus scan profile objects by filter and pager + * + * @param KalturaVirusScanProfileFilter $filter + * @param KalturaFilterPager $pager + * @return KalturaVirusScanProfileListResponse + */ + function listAction(KalturaVirusScanProfileFilter $filter = null, KalturaFilterPager $pager = null) + { + $kparams = array(); + if ($filter !== null) + $this->client->addParam($kparams, "filter", $filter->toParams()); + if ($pager !== null) + $this->client->addParam($kparams, "pager", $pager->toParams()); + $this->client->queueServiceActionCall("virusscan_virusscanprofile", "list", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaVirusScanProfileListResponse"); + return $resultObject; + } + + /** + * Allows you to add an virus scan profile object and virus scan profile content associated with Kaltura object + * + * @param KalturaVirusScanProfile $virusScanProfile + * @return KalturaVirusScanProfile + */ + function add(KalturaVirusScanProfile $virusScanProfile) + { + $kparams = array(); + $this->client->addParam($kparams, "virusScanProfile", $virusScanProfile->toParams()); + $this->client->queueServiceActionCall("virusscan_virusscanprofile", "add", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaVirusScanProfile"); + return $resultObject; + } + + /** + * Retrieve an virus scan profile object by id + * + * @param int $virusScanProfileId + * @return KalturaVirusScanProfile + */ + function get($virusScanProfileId) + { + $kparams = array(); + $this->client->addParam($kparams, "virusScanProfileId", $virusScanProfileId); + $this->client->queueServiceActionCall("virusscan_virusscanprofile", "get", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaVirusScanProfile"); + return $resultObject; + } + + /** + * Update exisitng virus scan profile, it is possible to update the virus scan profile id too + * + * @param int $virusScanProfileId + * @param KalturaVirusScanProfile $virusScanProfile Id + * @return KalturaVirusScanProfile + */ + function update($virusScanProfileId, KalturaVirusScanProfile $virusScanProfile) + { + $kparams = array(); + $this->client->addParam($kparams, "virusScanProfileId", $virusScanProfileId); + $this->client->addParam($kparams, "virusScanProfile", $virusScanProfile->toParams()); + $this->client->queueServiceActionCall("virusscan_virusscanprofile", "update", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaVirusScanProfile"); + return $resultObject; + } + + /** + * Mark the virus scan profile as deleted + * + * @param int $virusScanProfileId + * @return KalturaVirusScanProfile + */ + function delete($virusScanProfileId) + { + $kparams = array(); + $this->client->addParam($kparams, "virusScanProfileId", $virusScanProfileId); + $this->client->queueServiceActionCall("virusscan_virusscanprofile", "delete", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaVirusScanProfile"); + return $resultObject; + } + + /** + * Scan flavor asset according to virus scan profile + * + * @param string $flavorAssetId + * @param int $virusScanProfileId + * @return int + */ + function scan($flavorAssetId, $virusScanProfileId = null) + { + $kparams = array(); + $this->client->addParam($kparams, "flavorAssetId", $flavorAssetId); + $this->client->addParam($kparams, "virusScanProfileId", $virusScanProfileId); + $this->client->queueServiceActionCall("virusscan_virusscanprofile", "scan", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "integer"); + return $resultObject; + } +} +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaVirusScanClientPlugin extends KalturaClientPlugin +{ + /** + * @var KalturaVirusScanProfileService + */ + public $virusScanProfile = null; + + protected function __construct(KalturaClient $client) + { + parent::__construct($client); + $this->virusScanProfile = new KalturaVirusScanProfileService($client); + } + + /** + * @return KalturaVirusScanClientPlugin + */ + public static function get(KalturaClient $client) + { + return new KalturaVirusScanClientPlugin($client); + } + + /** + * @return array + */ + public function getServices() + { + $services = array( + 'virusScanProfile' => $this->virusScanProfile, + ); + return $services; + } + + /** + * @return string + */ + public function getName() + { + return 'virusScan'; + } +} + diff --git a/local/kaltura/API/KalturaPlugins/KalturaWebexDropFolderClientPlugin.php b/local/kaltura/API/KalturaPlugins/KalturaWebexDropFolderClientPlugin.php new file mode 100644 index 0000000000000..b25e7eaec3a03 --- /dev/null +++ b/local/kaltura/API/KalturaPlugins/KalturaWebexDropFolderClientPlugin.php @@ -0,0 +1,292 @@ +. +// +// @ignore +// =================================================================================================== + +/** + * @package Kaltura + * @subpackage Client + */ +require_once(dirname(__FILE__) . "/../KalturaClientBase.php"); +require_once(dirname(__FILE__) . "/../KalturaEnums.php"); +require_once(dirname(__FILE__) . "/../KalturaTypes.php"); +require_once(dirname(__FILE__) . "/KalturaDropFolderClientPlugin.php"); +require_once(dirname(__FILE__) . "/KalturaMetadataClientPlugin.php"); + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaWebexDropFolderFileOrderBy +{ + const CREATED_AT_ASC = "+createdAt"; + const FILE_NAME_ASC = "+fileName"; + const FILE_SIZE_ASC = "+fileSize"; + const FILE_SIZE_LAST_SET_AT_ASC = "+fileSizeLastSetAt"; + const ID_ASC = "+id"; + const PARSED_FLAVOR_ASC = "+parsedFlavor"; + const PARSED_SLUG_ASC = "+parsedSlug"; + const UPDATED_AT_ASC = "+updatedAt"; + const CREATED_AT_DESC = "-createdAt"; + const FILE_NAME_DESC = "-fileName"; + const FILE_SIZE_DESC = "-fileSize"; + const FILE_SIZE_LAST_SET_AT_DESC = "-fileSizeLastSetAt"; + const ID_DESC = "-id"; + const PARSED_FLAVOR_DESC = "-parsedFlavor"; + const PARSED_SLUG_DESC = "-parsedSlug"; + const UPDATED_AT_DESC = "-updatedAt"; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaWebexDropFolderOrderBy +{ + const CREATED_AT_ASC = "+createdAt"; + const ID_ASC = "+id"; + const NAME_ASC = "+name"; + const UPDATED_AT_ASC = "+updatedAt"; + const CREATED_AT_DESC = "-createdAt"; + const ID_DESC = "-id"; + const NAME_DESC = "-name"; + const UPDATED_AT_DESC = "-updatedAt"; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaWebexDropFolder extends KalturaDropFolder +{ + /** + * + * + * @var string + */ + public $webexUserId = null; + + /** + * + * + * @var string + */ + public $webexPassword = null; + + /** + * + * + * @var int + */ + public $webexSiteId = null; + + /** + * + * + * @var string + */ + public $webexPartnerId = null; + + /** + * + * + * @var string + */ + public $webexServiceUrl = null; + + /** + * + * + * @var string + */ + public $webexHostIdMetadataFieldName = null; + + /** + * + * + * @var string + */ + public $categoriesMetadataFieldName = null; + + /** + * + * + * @var bool + */ + public $enforceEntitlement = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaWebexDropFolderFile extends KalturaDropFolderFile +{ + /** + * + * + * @var int + */ + public $recordingId = null; + + /** + * + * + * @var string + */ + public $webexHostId = null; + + /** + * + * + * @var string + */ + public $description = null; + + /** + * + * + * @var string + */ + public $confId = null; + + /** + * + * + * @var string + */ + public $contentUrl = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaWebexDropFolderContentProcessorJobData extends KalturaDropFolderContentProcessorJobData +{ + /** + * + * + * @var string + */ + public $description = null; + + /** + * + * + * @var string + */ + public $webexHostId = null; + + /** + * + * + * @var int + */ + public $dropFolderId = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +abstract class KalturaWebexDropFolderBaseFilter extends KalturaDropFolderFilter +{ + +} + +/** + * @package Kaltura + * @subpackage Client + */ +abstract class KalturaWebexDropFolderFileBaseFilter extends KalturaDropFolderFileFilter +{ + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaWebexDropFolderFileFilter extends KalturaWebexDropFolderFileBaseFilter +{ + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaWebexDropFolderFilter extends KalturaWebexDropFolderBaseFilter +{ + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaWebexDropFolderClientPlugin extends KalturaClientPlugin +{ + protected function __construct(KalturaClient $client) + { + parent::__construct($client); + } + + /** + * @return KalturaWebexDropFolderClientPlugin + */ + public static function get(KalturaClient $client) + { + return new KalturaWebexDropFolderClientPlugin($client); + } + + /** + * @return array + */ + public function getServices() + { + $services = array( + ); + return $services; + } + + /** + * @return string + */ + public function getName() + { + return 'WebexDropFolder'; + } +} + diff --git a/local/kaltura/API/KalturaPlugins/KalturaWidevineClientPlugin.php b/local/kaltura/API/KalturaPlugins/KalturaWidevineClientPlugin.php new file mode 100644 index 0000000000000..c674c6bf508bb --- /dev/null +++ b/local/kaltura/API/KalturaPlugins/KalturaWidevineClientPlugin.php @@ -0,0 +1,396 @@ +. +// +// @ignore +// =================================================================================================== + +/** + * @package Kaltura + * @subpackage Client + */ +require_once(dirname(__FILE__) . "/../KalturaClientBase.php"); +require_once(dirname(__FILE__) . "/../KalturaEnums.php"); +require_once(dirname(__FILE__) . "/../KalturaTypes.php"); +require_once(dirname(__FILE__) . "/KalturaDrmClientPlugin.php"); + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaWidevineRepositorySyncMode +{ + const MODIFY = 0; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaWidevineFlavorAssetOrderBy +{ + const CREATED_AT_ASC = "+createdAt"; + const DELETED_AT_ASC = "+deletedAt"; + const SIZE_ASC = "+size"; + const UPDATED_AT_ASC = "+updatedAt"; + const CREATED_AT_DESC = "-createdAt"; + const DELETED_AT_DESC = "-deletedAt"; + const SIZE_DESC = "-size"; + const UPDATED_AT_DESC = "-updatedAt"; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaWidevineFlavorParamsOrderBy +{ +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaWidevineFlavorParamsOutputOrderBy +{ +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaWidevineProfileOrderBy +{ + const ID_ASC = "+id"; + const NAME_ASC = "+name"; + const ID_DESC = "-id"; + const NAME_DESC = "-name"; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaWidevineProfile extends KalturaDrmProfile +{ + /** + * + * + * @var string + */ + public $key = null; + + /** + * + * + * @var string + */ + public $iv = null; + + /** + * + * + * @var string + */ + public $owner = null; + + /** + * + * + * @var string + */ + public $portal = null; + + /** + * + * + * @var int + */ + public $maxGop = null; + + /** + * + * + * @var string + */ + public $regServerHost = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaWidevineRepositorySyncJobData extends KalturaJobData +{ + /** + * + * + * @var KalturaWidevineRepositorySyncMode + */ + public $syncMode = null; + + /** + * + * + * @var string + */ + public $wvAssetIds = null; + + /** + * + * + * @var string + */ + public $modifiedAttributes = null; + + /** + * + * + * @var int + */ + public $monitorSyncCompletion = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaWidevineFlavorAsset extends KalturaFlavorAsset +{ + /** + * License distribution window start date + * + * + * @var int + */ + public $widevineDistributionStartDate = null; + + /** + * License distribution window end date + * + * + * @var int + */ + public $widevineDistributionEndDate = null; + + /** + * Widevine unique asset id + * + * + * @var int + */ + public $widevineAssetId = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaWidevineFlavorParams extends KalturaFlavorParams +{ + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaWidevineFlavorParamsOutput extends KalturaFlavorParamsOutput +{ + /** + * License distribution window start date + * + * + * @var int + */ + public $widevineDistributionStartDate = null; + + /** + * License distribution window end date + * + * + * @var int + */ + public $widevineDistributionEndDate = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +abstract class KalturaWidevineProfileBaseFilter extends KalturaDrmProfileFilter +{ + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaWidevineProfileFilter extends KalturaWidevineProfileBaseFilter +{ + +} + +/** + * @package Kaltura + * @subpackage Client + */ +abstract class KalturaWidevineFlavorAssetBaseFilter extends KalturaFlavorAssetFilter +{ + +} + +/** + * @package Kaltura + * @subpackage Client + */ +abstract class KalturaWidevineFlavorParamsBaseFilter extends KalturaFlavorParamsFilter +{ + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaWidevineFlavorAssetFilter extends KalturaWidevineFlavorAssetBaseFilter +{ + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaWidevineFlavorParamsFilter extends KalturaWidevineFlavorParamsBaseFilter +{ + +} + +/** + * @package Kaltura + * @subpackage Client + */ +abstract class KalturaWidevineFlavorParamsOutputBaseFilter extends KalturaFlavorParamsOutputFilter +{ + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaWidevineFlavorParamsOutputFilter extends KalturaWidevineFlavorParamsOutputBaseFilter +{ + +} + + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaWidevineDrmService extends KalturaServiceBase +{ + function __construct(KalturaClient $client = null) + { + parent::__construct($client); + } + + /** + * Get license for encrypted content playback + * + * @param string $flavorAssetId + * @param string $referrer 64base encoded + * @return string + */ + function getLicense($flavorAssetId, $referrer = null) + { + $kparams = array(); + $this->client->addParam($kparams, "flavorAssetId", $flavorAssetId); + $this->client->addParam($kparams, "referrer", $referrer); + $this->client->queueServiceActionCall("widevine_widevinedrm", "getLicense", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "string"); + return $resultObject; + } +} +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaWidevineClientPlugin extends KalturaClientPlugin +{ + /** + * @var KalturaWidevineDrmService + */ + public $widevineDrm = null; + + protected function __construct(KalturaClient $client) + { + parent::__construct($client); + $this->widevineDrm = new KalturaWidevineDrmService($client); + } + + /** + * @return KalturaWidevineClientPlugin + */ + public static function get(KalturaClient $client) + { + return new KalturaWidevineClientPlugin($client); + } + + /** + * @return array + */ + public function getServices() + { + $services = array( + 'widevineDrm' => $this->widevineDrm, + ); + return $services; + } + + /** + * @return string + */ + public function getName() + { + return 'widevine'; + } +} + diff --git a/local/kaltura/API/KalturaTypes.php b/local/kaltura/API/KalturaTypes.php new file mode 100644 index 0000000000000..0cde7474bf5f7 --- /dev/null +++ b/local/kaltura/API/KalturaTypes.php @@ -0,0 +1,16367 @@ +. +// +// @ignore +// =================================================================================================== + +/** + * @package Kaltura + * @subpackage Client + */ +require_once(dirname(__FILE__) . "/KalturaClientBase.php"); + +/** + * @package Kaltura + * @subpackage Client + */ +abstract class KalturaBaseRestriction extends KalturaObjectBase +{ + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaAccessControl extends KalturaObjectBase +{ + /** + * The id of the Access Control Profile + * + * + * @var int + * @readonly + */ + public $id = null; + + /** + * + * + * @var int + * @readonly + */ + public $partnerId = null; + + /** + * The name of the Access Control Profile + * + * + * @var string + */ + public $name = null; + + /** + * System name of the Access Control Profile + * + * + * @var string + */ + public $systemName = null; + + /** + * The description of the Access Control Profile + * + * + * @var string + */ + public $description = null; + + /** + * Creation date as Unix timestamp (In seconds) + * + * + * @var int + * @readonly + */ + public $createdAt = null; + + /** + * True if this Conversion Profile is the default + * + * + * @var KalturaNullableBoolean + */ + public $isDefault = null; + + /** + * Array of Access Control Restrictions + * + * + * @var array of KalturaBaseRestriction + */ + public $restrictions; + + /** + * Indicates that the access control profile is new and should be handled using KalturaAccessControlProfile object and accessControlProfile service + * + * + * @var bool + * @readonly + */ + public $containsUnsuportedRestrictions = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaContextTypeHolder extends KalturaObjectBase +{ + /** + * The type of the condition context + * + * + * @var KalturaContextType + */ + public $type = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaAccessControlContextTypeHolder extends KalturaContextTypeHolder +{ + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaAccessControlListResponse extends KalturaObjectBase +{ + /** + * + * + * @var array of KalturaAccessControl + * @readonly + */ + public $objects; + + /** + * + * + * @var int + * @readonly + */ + public $totalCount = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +abstract class KalturaRuleAction extends KalturaObjectBase +{ + /** + * The type of the action + * + * + * @var KalturaRuleActionType + * @readonly + */ + public $type = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +abstract class KalturaCondition extends KalturaObjectBase +{ + /** + * The type of the access control condition + * + * + * @var KalturaConditionType + * @readonly + */ + public $type = null; + + /** + * + * + * @var string + */ + public $description = null; + + /** + * + * + * @var bool + */ + public $not = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaRule extends KalturaObjectBase +{ + /** + * Message to be thrown to the player in case the rule is fulfilled + * + * + * @var string + */ + public $message = null; + + /** + * Actions to be performed by the player in case the rule is fulfilled + * + * + * @var array of KalturaRuleAction + */ + public $actions; + + /** + * Conditions to validate the rule + * + * + * @var array of KalturaCondition + */ + public $conditions; + + /** + * Indicates what contexts should be tested by this rule + * + * + * @var array of KalturaContextTypeHolder + */ + public $contexts; + + /** + * Indicates that this rule is enough and no need to continue checking the rest of the rules + * + * + * @var bool + */ + public $stopProcessing = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaAccessControlProfile extends KalturaObjectBase +{ + /** + * The id of the Access Control Profile + * + * + * @var int + * @readonly + */ + public $id = null; + + /** + * + * + * @var int + * @readonly + */ + public $partnerId = null; + + /** + * The name of the Access Control Profile + * + * + * @var string + */ + public $name = null; + + /** + * System name of the Access Control Profile + * + * + * @var string + */ + public $systemName = null; + + /** + * The description of the Access Control Profile + * + * + * @var string + */ + public $description = null; + + /** + * Creation time as Unix timestamp (In seconds) + * + * + * @var int + * @readonly + */ + public $createdAt = null; + + /** + * Update time as Unix timestamp (In seconds) + * + * + * @var int + * @readonly + */ + public $updatedAt = null; + + /** + * True if this access control profile is the partner default + * + * + * @var KalturaNullableBoolean + */ + public $isDefault = null; + + /** + * Array of access control rules + * + * + * @var array of KalturaRule + */ + public $rules; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaAccessControlProfileListResponse extends KalturaObjectBase +{ + /** + * + * + * @var array of KalturaAccessControlProfile + * @readonly + */ + public $objects; + + /** + * + * + * @var int + * @readonly + */ + public $totalCount = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaKeyValue extends KalturaObjectBase +{ + /** + * + * + * @var string + */ + public $key = null; + + /** + * + * + * @var string + */ + public $value = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaAccessControlScope extends KalturaObjectBase +{ + /** + * URL to be used to test domain conditions. + * + * + * @var string + */ + public $referrer = null; + + /** + * IP to be used to test geographic location conditions. + * + * + * @var string + */ + public $ip = null; + + /** + * Kaltura session to be used to test session and user conditions. + * + * + * @var string + */ + public $ks = null; + + /** + * Browser or client application to be used to test agent conditions. + * + * + * @var string + */ + public $userAgent = null; + + /** + * Unix timestamp (In seconds) to be used to test entry scheduling, keep null to use now. + * + * + * @var int + */ + public $time = null; + + /** + * Indicates what contexts should be tested. No contexts means any context. + * + * + * @var array of KalturaAccessControlContextTypeHolder + */ + public $contexts; + + /** + * Array of hashes to pass to the access control profile scope + * + * + * @var array of KalturaKeyValue + */ + public $hashes; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaAsset extends KalturaObjectBase +{ + /** + * The ID of the Flavor Asset + * + * + * @var string + * @readonly + */ + public $id = null; + + /** + * The entry ID of the Flavor Asset + * + * + * @var string + * @readonly + */ + public $entryId = null; + + /** + * + * + * @var int + * @readonly + */ + public $partnerId = null; + + /** + * The version of the Flavor Asset + * + * + * @var int + * @readonly + */ + public $version = null; + + /** + * The size (in KBytes) of the Flavor Asset + * + * + * @var int + * @readonly + */ + public $size = null; + + /** + * Tags used to identify the Flavor Asset in various scenarios + * + * + * @var string + */ + public $tags = null; + + /** + * The file extension + * + * + * @var string + * @insertonly + */ + public $fileExt = null; + + /** + * + * + * @var int + * @readonly + */ + public $createdAt = null; + + /** + * + * + * @var int + * @readonly + */ + public $updatedAt = null; + + /** + * + * + * @var int + * @readonly + */ + public $deletedAt = null; + + /** + * System description, error message, warnings and failure cause. + * + * + * @var string + * @readonly + */ + public $description = null; + + /** + * Partner private data + * + * + * @var string + */ + public $partnerData = null; + + /** + * Partner friendly description + * + * + * @var string + */ + public $partnerDescription = null; + + /** + * Comma separated list of source flavor params ids + * + * + * @var string + */ + public $actualSourceAssetParamsIds = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaString extends KalturaObjectBase +{ + /** + * + * + * @var string + */ + public $value = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaAssetParams extends KalturaObjectBase +{ + /** + * The id of the Flavor Params + * + * + * @var int + * @readonly + */ + public $id = null; + + /** + * + * + * @var int + * @readonly + */ + public $partnerId = null; + + /** + * The name of the Flavor Params + * + * + * @var string + */ + public $name = null; + + /** + * System name of the Flavor Params + * + * + * @var string + */ + public $systemName = null; + + /** + * The description of the Flavor Params + * + * + * @var string + */ + public $description = null; + + /** + * Creation date as Unix timestamp (In seconds) + * + * + * @var int + * @readonly + */ + public $createdAt = null; + + /** + * True if those Flavor Params are part of system defaults + * + * + * @var KalturaNullableBoolean + * @readonly + */ + public $isSystemDefault = null; + + /** + * The Flavor Params tags are used to identify the flavor for different usage (e.g. web, hd, mobile) + * + * + * @var string + */ + public $tags = null; + + /** + * Array of partner permisison names that required for using this asset params + * + * + * @var array of KalturaString + */ + public $requiredPermissions; + + /** + * Id of remote storage profile that used to get the source, zero indicates Kaltura data center + * + * + * @var int + */ + public $sourceRemoteStorageProfileId = null; + + /** + * Comma seperated ids of remote storage profiles that the flavor distributed to, the distribution done by the conversion engine + * + * + * @var int + */ + public $remoteStorageProfileIds = null; + + /** + * Media parser type to be used for post-conversion validation + * + * + * @var KalturaMediaParserType + */ + public $mediaParserType = null; + + /** + * Comma seperated ids of source flavor params this flavor is created from + * + * + * @var string + */ + public $sourceAssetParamsIds = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +abstract class KalturaResource extends KalturaObjectBase +{ + +} + +/** + * @package Kaltura + * @subpackage Client + */ +abstract class KalturaContentResource extends KalturaResource +{ + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaAssetParamsResourceContainer extends KalturaResource +{ + /** + * The content resource to associate with asset params + * + * + * @var KalturaContentResource + */ + public $resource; + + /** + * The asset params to associate with the reaource + * + * + * @var int + */ + public $assetParamsId = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +abstract class KalturaOperationAttributes extends KalturaObjectBase +{ + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaBaseEntry extends KalturaObjectBase +{ + /** + * Auto generated 10 characters alphanumeric string + * + * + * @var string + * @readonly + */ + public $id = null; + + /** + * Entry name (Min 1 chars) + * + * + * @var string + */ + public $name = null; + + /** + * Entry description + * + * + * @var string + */ + public $description = null; + + /** + * + * + * @var int + * @readonly + */ + public $partnerId = null; + + /** + * The ID of the user who is the owner of this entry + * + * + * @var string + */ + public $userId = null; + + /** + * The ID of the user who created this entry + * + * + * @var string + * @insertonly + */ + public $creatorId = null; + + /** + * Entry tags + * + * + * @var string + */ + public $tags = null; + + /** + * Entry admin tags can be updated only by administrators + * + * + * @var string + */ + public $adminTags = null; + + /** + * Categories with no entitlement that this entry belongs to. + * + * + * @var string + */ + public $categories = null; + + /** + * Categories Ids of categories with no entitlement that this entry belongs to + * + * + * @var string + */ + public $categoriesIds = null; + + /** + * + * + * @var KalturaEntryStatus + * @readonly + */ + public $status = null; + + /** + * Entry moderation status + * + * + * @var KalturaEntryModerationStatus + * @readonly + */ + public $moderationStatus = null; + + /** + * Number of moderation requests waiting for this entry + * + * + * @var int + * @readonly + */ + public $moderationCount = null; + + /** + * The type of the entry, this is auto filled by the derived entry object + * + * + * @var KalturaEntryType + */ + public $type = null; + + /** + * Entry creation date as Unix timestamp (In seconds) + * + * + * @var int + * @readonly + */ + public $createdAt = null; + + /** + * Entry update date as Unix timestamp (In seconds) + * + * + * @var int + * @readonly + */ + public $updatedAt = null; + + /** + * The calculated average rank. rank = totalRank / votes + * + * + * @var float + * @readonly + */ + public $rank = null; + + /** + * The sum of all rank values submitted to the baseEntry.anonymousRank action + * + * + * @var int + * @readonly + */ + public $totalRank = null; + + /** + * A count of all requests made to the baseEntry.anonymousRank action + * + * + * @var int + * @readonly + */ + public $votes = null; + + /** + * + * + * @var int + */ + public $groupId = null; + + /** + * Can be used to store various partner related data as a string + * + * + * @var string + */ + public $partnerData = null; + + /** + * Download URL for the entry + * + * + * @var string + * @readonly + */ + public $downloadUrl = null; + + /** + * Indexed search text for full text search + * + * + * @var string + * @readonly + */ + public $searchText = null; + + /** + * License type used for this entry + * + * + * @var KalturaLicenseType + */ + public $licenseType = null; + + /** + * Version of the entry data + * + * + * @var int + * @readonly + */ + public $version = null; + + /** + * Thumbnail URL + * + * + * @var string + * @insertonly + */ + public $thumbnailUrl = null; + + /** + * The Access Control ID assigned to this entry (null when not set, send -1 to remove) + * + * + * @var int + */ + public $accessControlId = null; + + /** + * Entry scheduling start date (null when not set, send -1 to remove) + * + * + * @var int + */ + public $startDate = null; + + /** + * Entry scheduling end date (null when not set, send -1 to remove) + * + * + * @var int + */ + public $endDate = null; + + /** + * Entry external reference id + * + * + * @var string + */ + public $referenceId = null; + + /** + * ID of temporary entry that will replace this entry when it's approved and ready for replacement + * + * + * @var string + * @readonly + */ + public $replacingEntryId = null; + + /** + * ID of the entry that will be replaced when the replacement approved and this entry is ready + * + * + * @var string + * @readonly + */ + public $replacedEntryId = null; + + /** + * Status of the replacement readiness and approval + * + * + * @var KalturaEntryReplacementStatus + * @readonly + */ + public $replacementStatus = null; + + /** + * Can be used to store various partner related data as a numeric value + * + * + * @var int + */ + public $partnerSortValue = null; + + /** + * Override the default ingestion profile + * + * + * @var int + */ + public $conversionProfileId = null; + + /** + * IF not empty, points to an entry ID the should replace this current entry's id. + * + * + * @var string + */ + public $redirectEntryId = null; + + /** + * ID of source root entry, used for clipped, skipped and cropped entries that created from another entry + * + * + * @var string + * @readonly + */ + public $rootEntryId = null; + + /** + * clipping, skipping and cropping attributes that used to create this entry + * + * + * @var array of KalturaOperationAttributes + */ + public $operationAttributes; + + /** + * list of user ids that are entitled to edit the entry (no server enforcement) The difference between entitledUsersEdit and entitledUsersPublish is applicative only + * + * + * @var string + */ + public $entitledUsersEdit = null; + + /** + * list of user ids that are entitled to publish the entry (no server enforcement) The difference between entitledUsersEdit and entitledUsersPublish is applicative only + * + * + * @var string + */ + public $entitledUsersPublish = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaBaseEntryListResponse extends KalturaObjectBase +{ + /** + * + * + * @var array of KalturaBaseEntry + * @readonly + */ + public $objects; + + /** + * + * + * @var int + * @readonly + */ + public $totalCount = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +abstract class KalturaBaseSyndicationFeed extends KalturaObjectBase +{ + /** + * + * + * @var string + * @readonly + */ + public $id = null; + + /** + * + * + * @var string + * @readonly + */ + public $feedUrl = null; + + /** + * + * + * @var int + * @readonly + */ + public $partnerId = null; + + /** + * link a playlist that will set what content the feed will include + * if empty, all content will be included in feed + * + * + * @var string + */ + public $playlistId = null; + + /** + * feed name + * + * + * @var string + */ + public $name = null; + + /** + * feed status + * + * + * @var KalturaSyndicationFeedStatus + * @readonly + */ + public $status = null; + + /** + * feed type + * + * + * @var KalturaSyndicationFeedType + * @insertonly + */ + public $type = null; + + /** + * Base URL for each video, on the partners site + * This is required by all syndication types. + * + * + * @var string + */ + public $landingPage = null; + + /** + * Creation date as Unix timestamp (In seconds) + * + * + * @var int + * @readonly + */ + public $createdAt = null; + + /** + * allow_embed tells google OR yahoo weather to allow embedding the video on google OR yahoo video results + * or just to provide a link to the landing page. + * it is applied on the video-player_loc property in the XML (google) + * and addes media-player tag (yahoo) + * + * + * @var bool + */ + public $allowEmbed = null; + + /** + * Select a uiconf ID as player skin to include in the kwidget url + * + * + * @var int + */ + public $playerUiconfId = null; + + /** + * + * + * @var int + */ + public $flavorParamId = null; + + /** + * + * + * @var bool + */ + public $transcodeExistingContent = null; + + /** + * + * + * @var bool + */ + public $addToDefaultConversionProfile = null; + + /** + * + * + * @var string + */ + public $categories = null; + + /** + * + * + * @var int + */ + public $storageId = null; + + /** + * + * + * @var KalturaSyndicationFeedEntriesOrderBy + */ + public $entriesOrderBy = null; + + /** + * Should enforce entitlement on feed entries + * + * + * @var bool + */ + public $enforceEntitlement = null; + + /** + * Set privacy context for search entries that assiged to private and public categories within a category privacy context. + * + * + * @var string + */ + public $privacyContext = null; + + /** + * Update date as Unix timestamp (In seconds) + * + * + * @var int + * @readonly + */ + public $updatedAt = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaBaseSyndicationFeedListResponse extends KalturaObjectBase +{ + /** + * + * + * @var array of KalturaBaseSyndicationFeed + * @readonly + */ + public $objects; + + /** + * + * + * @var int + * @readonly + */ + public $totalCount = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaBulkUploadPluginData extends KalturaObjectBase +{ + /** + * + * + * @var string + */ + public $field = null; + + /** + * + * + * @var string + */ + public $value = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaBulkUploadResult extends KalturaObjectBase +{ + /** + * The id of the result + * + * + * @var int + * @readonly + */ + public $id = null; + + /** + * The id of the parent job + * + * + * @var int + */ + public $bulkUploadJobId = null; + + /** + * The index of the line in the CSV + * + * + * @var int + */ + public $lineIndex = null; + + /** + * + * + * @var int + */ + public $partnerId = null; + + /** + * + * + * @var KalturaBulkUploadResultStatus + */ + public $status = null; + + /** + * + * + * @var KalturaBulkUploadAction + */ + public $action = null; + + /** + * + * + * @var string + */ + public $objectId = null; + + /** + * + * + * @var int + */ + public $objectStatus = null; + + /** + * + * + * @var KalturaBulkUploadResultObjectType + */ + public $bulkUploadResultObjectType = null; + + /** + * The data as recieved in the csv + * + * + * @var string + */ + public $rowData = null; + + /** + * + * + * @var string + */ + public $partnerData = null; + + /** + * + * + * @var string + */ + public $objectErrorDescription = null; + + /** + * + * + * @var array of KalturaBulkUploadPluginData + */ + public $pluginsData; + + /** + * + * + * @var string + */ + public $errorDescription = null; + + /** + * + * + * @var string + */ + public $errorCode = null; + + /** + * + * + * @var int + */ + public $errorType = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaBulkUpload extends KalturaObjectBase +{ + /** + * + * + * @var int + */ + public $id = null; + + /** + * + * + * @var string + */ + public $uploadedBy = null; + + /** + * + * + * @var string + */ + public $uploadedByUserId = null; + + /** + * + * + * @var int + */ + public $uploadedOn = null; + + /** + * + * + * @var int + */ + public $numOfEntries = null; + + /** + * + * + * @var KalturaBatchJobStatus + */ + public $status = null; + + /** + * + * + * @var string + */ + public $logFileUrl = null; + + /** + * + * + * @var string + */ + public $csvFileUrl = null; + + /** + * + * + * @var string + */ + public $bulkFileUrl = null; + + /** + * + * + * @var KalturaBulkUploadType + */ + public $bulkUploadType = null; + + /** + * + * + * @var array of KalturaBulkUploadResult + */ + public $results; + + /** + * + * + * @var string + */ + public $error = null; + + /** + * + * + * @var KalturaBatchJobErrorTypes + */ + public $errorType = null; + + /** + * + * + * @var int + */ + public $errorNumber = null; + + /** + * + * + * @var string + */ + public $fileName = null; + + /** + * + * + * @var string + */ + public $description = null; + + /** + * + * + * @var int + */ + public $numOfObjects = null; + + /** + * + * + * @var KalturaBulkUploadObjectType + */ + public $bulkUploadObjectType = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaBulkUploadListResponse extends KalturaObjectBase +{ + /** + * + * + * @var array of KalturaBulkUpload + * @readonly + */ + public $objects; + + /** + * + * + * @var int + * @readonly + */ + public $totalCount = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +abstract class KalturaBulkUploadObjectData extends KalturaObjectBase +{ + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaCEError extends KalturaObjectBase +{ + /** + * + * + * @var string + * @readonly + */ + public $id = null; + + /** + * + * + * @var int + */ + public $partnerId = null; + + /** + * + * + * @var string + */ + public $browser = null; + + /** + * + * + * @var string + */ + public $serverIp = null; + + /** + * + * + * @var string + */ + public $serverOs = null; + + /** + * + * + * @var string + */ + public $phpVersion = null; + + /** + * + * + * @var string + */ + public $ceAdminEmail = null; + + /** + * + * + * @var string + */ + public $type = null; + + /** + * + * + * @var string + */ + public $description = null; + + /** + * + * + * @var string + */ + public $data = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaCategory extends KalturaObjectBase +{ + /** + * The id of the Category + * + * + * @var int + * @readonly + */ + public $id = null; + + /** + * + * + * @var int + */ + public $parentId = null; + + /** + * + * + * @var int + * @readonly + */ + public $depth = null; + + /** + * + * + * @var int + * @readonly + */ + public $partnerId = null; + + /** + * The name of the Category. + * The following characters are not allowed: '<', '>', ',' + * + * + * @var string + */ + public $name = null; + + /** + * The full name of the Category + * + * + * @var string + * @readonly + */ + public $fullName = null; + + /** + * The full ids of the Category + * + * + * @var string + * @readonly + */ + public $fullIds = null; + + /** + * Number of entries in this Category (including child categories) + * + * + * @var int + * @readonly + */ + public $entriesCount = null; + + /** + * Creation date as Unix timestamp (In seconds) + * + * + * @var int + * @readonly + */ + public $createdAt = null; + + /** + * Update date as Unix timestamp (In seconds) + * + * + * @var int + * @readonly + */ + public $updatedAt = null; + + /** + * Category description + * + * + * @var string + */ + public $description = null; + + /** + * Category tags + * + * + * @var string + */ + public $tags = null; + + /** + * If category will be returned for list action. + * + * + * @var KalturaAppearInListType + */ + public $appearInList = null; + + /** + * defines the privacy of the entries that assigned to this category + * + * + * @var KalturaPrivacyType + */ + public $privacy = null; + + /** + * If Category members are inherited from parent category or set manualy. + * + * + * @var KalturaInheritanceType + */ + public $inheritanceType = null; + + /** + * Who can ask to join this category + * + * + * @var KalturaUserJoinPolicyType + * @readonly + */ + public $userJoinPolicy = null; + + /** + * Default permissionLevel for new users + * + * + * @var KalturaCategoryUserPermissionLevel + */ + public $defaultPermissionLevel = null; + + /** + * Category Owner (User id) + * + * + * @var string + */ + public $owner = null; + + /** + * Number of entries that belong to this category directly + * + * + * @var int + * @readonly + */ + public $directEntriesCount = null; + + /** + * Category external id, controlled and managed by the partner. + * + * + * @var string + */ + public $referenceId = null; + + /** + * who can assign entries to this category + * + * + * @var KalturaContributionPolicyType + */ + public $contributionPolicy = null; + + /** + * Number of active members for this category + * + * + * @var int + * @readonly + */ + public $membersCount = null; + + /** + * Number of pending members for this category + * + * + * @var int + * @readonly + */ + public $pendingMembersCount = null; + + /** + * Set privacy context for search entries that assiged to private and public categories. the entries will be private if the search context is set with those categories. + * + * + * @var string + */ + public $privacyContext = null; + + /** + * comma separated parents that defines a privacyContext for search + * + * + * @var string + * @readonly + */ + public $privacyContexts = null; + + /** + * Status + * + * + * @var KalturaCategoryStatus + * @readonly + */ + public $status = null; + + /** + * The category id that this category inherit its members and members permission (for contribution and join) + * + * + * @var int + * @readonly + */ + public $inheritedParentId = null; + + /** + * Can be used to store various partner related data as a numeric value + * + * + * @var int + */ + public $partnerSortValue = null; + + /** + * Can be used to store various partner related data as a string + * + * + * @var string + */ + public $partnerData = null; + + /** + * Enable client side applications to define how to sort the category child categories + * + * + * @var KalturaCategoryOrderBy + */ + public $defaultOrderBy = null; + + /** + * Number of direct children categories + * + * + * @var int + * @readonly + */ + public $directSubCategoriesCount = null; + + /** + * Moderation to add entries to this category by users that are not of permission level Manager or Moderator. + * + * + * @var KalturaNullableBoolean + */ + public $moderation = null; + + /** + * Nunber of pending moderation entries + * + * + * @var int + * @readonly + */ + public $pendingEntriesCount = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaCategoryEntry extends KalturaObjectBase +{ + /** + * + * + * @var int + */ + public $categoryId = null; + + /** + * entry id + * + * + * @var string + */ + public $entryId = null; + + /** + * Creation date as Unix timestamp (In seconds) + * + * + * @var int + * @readonly + */ + public $createdAt = null; + + /** + * The full ids of the Category + * + * + * @var string + * @readonly + */ + public $categoryFullIds = null; + + /** + * CategroyEntry status + * + * + * @var KalturaCategoryEntryStatus + * @readonly + */ + public $status = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaCategoryEntryListResponse extends KalturaObjectBase +{ + /** + * + * + * @var array of KalturaCategoryEntry + * @readonly + */ + public $objects; + + /** + * + * + * @var int + * @readonly + */ + public $totalCount = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaCategoryListResponse extends KalturaObjectBase +{ + /** + * + * + * @var array of KalturaCategory + * @readonly + */ + public $objects; + + /** + * + * + * @var int + * @readonly + */ + public $totalCount = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaCategoryUser extends KalturaObjectBase +{ + /** + * + * + * @var int + * @insertonly + */ + public $categoryId = null; + + /** + * User id + * + * + * @var string + * @insertonly + */ + public $userId = null; + + /** + * Partner id + * + * + * @var int + * @readonly + */ + public $partnerId = null; + + /** + * Permission level + * + * + * @var KalturaCategoryUserPermissionLevel + */ + public $permissionLevel = null; + + /** + * Status + * + * + * @var KalturaCategoryUserStatus + * @readonly + */ + public $status = null; + + /** + * CategoryUser creation date as Unix timestamp (In seconds) + * + * + * @var int + * @readonly + */ + public $createdAt = null; + + /** + * CategoryUser update date as Unix timestamp (In seconds) + * + * + * @var int + * @readonly + */ + public $updatedAt = null; + + /** + * Update method can be either manual or automatic to distinguish between manual operations (for example in KMC) on automatic - using bulk upload + * + * + * @var KalturaUpdateMethodType + */ + public $updateMethod = null; + + /** + * The full ids of the Category + * + * + * @var string + * @readonly + */ + public $categoryFullIds = null; + + /** + * Set of category-related permissions for the current category user. + * + * + * @var string + */ + public $permissionNames = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaCategoryUserListResponse extends KalturaObjectBase +{ + /** + * + * + * @var array of KalturaCategoryUser + * @readonly + */ + public $objects; + + /** + * + * + * @var int + * @readonly + */ + public $totalCount = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaClientNotification extends KalturaObjectBase +{ + /** + * The URL where the notification should be sent to + * + * + * @var string + */ + public $url = null; + + /** + * The serialized notification data to send + * + * + * @var string + */ + public $data = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +abstract class KalturaContext extends KalturaObjectBase +{ + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaContextDataResult extends KalturaObjectBase +{ + /** + * Array of messages as received from the rules that invalidated + * + * + * @var array of KalturaString + */ + public $messages; + + /** + * Array of actions as received from the rules that invalidated + * + * + * @var array of KalturaRuleAction + */ + public $actions; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaConversionAttribute extends KalturaObjectBase +{ + /** + * The id of the flavor params, set to null for source flavor + * + * + * @var int + */ + public $flavorParamsId = null; + + /** + * Attribute name + * + * + * @var string + */ + public $name = null; + + /** + * Attribute value + * + * + * @var string + */ + public $value = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaCropDimensions extends KalturaObjectBase +{ + /** + * Crop left point + * + * + * @var int + */ + public $left = null; + + /** + * Crop top point + * + * + * @var int + */ + public $top = null; + + /** + * Crop width + * + * + * @var int + */ + public $width = null; + + /** + * Crop height + * + * + * @var int + */ + public $height = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaConversionProfile extends KalturaObjectBase +{ + /** + * The id of the Conversion Profile + * + * + * @var int + * @readonly + */ + public $id = null; + + /** + * + * + * @var int + * @readonly + */ + public $partnerId = null; + + /** + * + * + * @var KalturaConversionProfileStatus + */ + public $status = null; + + /** + * + * + * @var KalturaConversionProfileType + * @insertonly + */ + public $type = null; + + /** + * The name of the Conversion Profile + * + * + * @var string + */ + public $name = null; + + /** + * System name of the Conversion Profile + * + * + * @var string + */ + public $systemName = null; + + /** + * Comma separated tags + * + * + * @var string + */ + public $tags = null; + + /** + * The description of the Conversion Profile + * + * + * @var string + */ + public $description = null; + + /** + * ID of the default entry to be used for template data + * + * + * @var string + */ + public $defaultEntryId = null; + + /** + * Creation date as Unix timestamp (In seconds) + * + * + * @var int + * @readonly + */ + public $createdAt = null; + + /** + * List of included flavor ids (comma separated) + * + * + * @var string + */ + public $flavorParamsIds = null; + + /** + * Indicates that this conversion profile is system default + * + * + * @var KalturaNullableBoolean + */ + public $isDefault = null; + + /** + * Indicates that this conversion profile is partner default + * + * + * @var bool + * @readonly + */ + public $isPartnerDefault = null; + + /** + * Cropping dimensions + * + * + * @var KalturaCropDimensions + */ + public $cropDimensions; + + /** + * Clipping start position (in miliseconds) + * + * + * @var int + */ + public $clipStart = null; + + /** + * Clipping duration (in miliseconds) + * + * + * @var int + */ + public $clipDuration = null; + + /** + * XSL to transform ingestion MRSS XML + * + * + * @var string + */ + public $xslTransformation = null; + + /** + * ID of default storage profile to be used for linked net-storage file syncs + * + * + * @var int + */ + public $storageProfileId = null; + + /** + * Media parser type to be used for extract media + * + * + * @var KalturaMediaParserType + */ + public $mediaParserType = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaConversionProfileAssetParams extends KalturaObjectBase +{ + /** + * The id of the conversion profile + * + * + * @var int + * @readonly + */ + public $conversionProfileId = null; + + /** + * The id of the asset params + * + * + * @var int + * @readonly + */ + public $assetParamsId = null; + + /** + * The ingestion origin of the asset params + * + * + * @var KalturaFlavorReadyBehaviorType + */ + public $readyBehavior = null; + + /** + * The ingestion origin of the asset params + * + * + * @var KalturaAssetParamsOrigin + */ + public $origin = null; + + /** + * Asset params system name + * + * + * @var string + */ + public $systemName = null; + + /** + * Starts conversion even if the decision layer reduced the configuration to comply with the source + * + * + * @var KalturaNullableBoolean + */ + public $forceNoneComplied = null; + + /** + * Specifies how to treat the flavor after conversion is finished + * + * + * @var KalturaAssetParamsDeletePolicy + */ + public $deletePolicy = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaConversionProfileAssetParamsListResponse extends KalturaObjectBase +{ + /** + * + * + * @var array of KalturaConversionProfileAssetParams + * @readonly + */ + public $objects; + + /** + * + * + * @var int + * @readonly + */ + public $totalCount = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaConversionProfileListResponse extends KalturaObjectBase +{ + /** + * + * + * @var array of KalturaConversionProfile + * @readonly + */ + public $objects; + + /** + * + * + * @var int + * @readonly + */ + public $totalCount = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaConvertCollectionFlavorData extends KalturaObjectBase +{ + /** + * + * + * @var string + */ + public $flavorAssetId = null; + + /** + * + * + * @var int + */ + public $flavorParamsOutputId = null; + + /** + * + * + * @var int + */ + public $readyBehavior = null; + + /** + * + * + * @var int + */ + public $videoBitrate = null; + + /** + * + * + * @var int + */ + public $audioBitrate = null; + + /** + * + * + * @var string + */ + public $destFileSyncLocalPath = null; + + /** + * + * + * @var string + */ + public $destFileSyncRemoteUrl = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaDataEntry extends KalturaBaseEntry +{ + /** + * The data of the entry + * + * + * @var string + */ + public $dataContent = null; + + /** + * indicator whether to return the object for get action with the dataContent field. + * + * + * @var bool + * @insertonly + */ + public $retrieveDataContentByGet = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaDataListResponse extends KalturaObjectBase +{ + /** + * + * + * @var array of KalturaDataEntry + * @readonly + */ + public $objects; + + /** + * + * + * @var int + * @readonly + */ + public $totalCount = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaEmailIngestionProfile extends KalturaObjectBase +{ + /** + * + * + * @var int + * @readonly + */ + public $id = null; + + /** + * + * + * @var string + */ + public $name = null; + + /** + * + * + * @var string + */ + public $description = null; + + /** + * + * + * @var string + */ + public $emailAddress = null; + + /** + * + * + * @var string + */ + public $mailboxId = null; + + /** + * + * + * @var int + * @readonly + */ + public $partnerId = null; + + /** + * + * + * @var int + */ + public $conversionProfile2Id = null; + + /** + * + * + * @var KalturaEntryModerationStatus + */ + public $moderationStatus = null; + + /** + * + * + * @var KalturaEmailIngestionProfileStatus + * @readonly + */ + public $status = null; + + /** + * + * + * @var string + * @readonly + */ + public $createdAt = null; + + /** + * + * + * @var string + */ + public $defaultCategory = null; + + /** + * + * + * @var string + */ + public $defaultUserId = null; + + /** + * + * + * @var string + */ + public $defaultTags = null; + + /** + * + * + * @var string + */ + public $defaultAdminTags = null; + + /** + * + * + * @var int + */ + public $maxAttachmentSizeKbytes = null; + + /** + * + * + * @var int + */ + public $maxAttachmentsPerMail = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +abstract class KalturaValue extends KalturaObjectBase +{ + /** + * + * + * @var string + */ + public $description = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaStringValue extends KalturaValue +{ + /** + * + * + * @var string + */ + public $value = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +abstract class KalturaObjectIdentifier extends KalturaObjectBase +{ + /** + * Comma separated string of enum values denoting which features of the item need to be included in the MRSS + * + * + * @var string + */ + public $extendedFeatures = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaExtendingItemMrssParameter extends KalturaObjectBase +{ + /** + * XPath for the extending item + * + * + * @var string + */ + public $xpath = null; + + /** + * Object identifier + * + * + * @var KalturaObjectIdentifier + */ + public $identifier; + + /** + * Mode of extension - append to MRSS or replace the xpath content. + * + * + * @var KalturaMrssExtensionMode + */ + public $extensionMode = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaPlayableEntry extends KalturaBaseEntry +{ + /** + * Number of plays + * + * + * @var int + * @readonly + */ + public $plays = null; + + /** + * Number of views + * + * + * @var int + * @readonly + */ + public $views = null; + + /** + * The last time the entry was played + * + * + * @var int + * @readonly + */ + public $lastPlayedAt = null; + + /** + * The width in pixels + * + * + * @var int + * @readonly + */ + public $width = null; + + /** + * The height in pixels + * + * + * @var int + * @readonly + */ + public $height = null; + + /** + * The duration in seconds + * + * + * @var int + * @readonly + */ + public $duration = null; + + /** + * The duration in miliseconds + * + * + * @var int + */ + public $msDuration = null; + + /** + * The duration type (short for 0-4 mins, medium for 4-20 mins, long for 20+ mins) + * + * + * @var KalturaDurationType + * @readonly + */ + public $durationType = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaMediaEntry extends KalturaPlayableEntry +{ + /** + * The media type of the entry + * + * + * @var KalturaMediaType + * @insertonly + */ + public $mediaType = null; + + /** + * Override the default conversion quality + * + * + * @var string + * @insertonly + */ + public $conversionQuality = null; + + /** + * The source type of the entry + * + * + * @var KalturaSourceType + * @insertonly + */ + public $sourceType = null; + + /** + * The search provider type used to import this entry + * + * + * @var KalturaSearchProviderType + * @insertonly + */ + public $searchProviderType = null; + + /** + * The ID of the media in the importing site + * + * + * @var string + * @insertonly + */ + public $searchProviderId = null; + + /** + * The user name used for credits + * + * + * @var string + */ + public $creditUserName = null; + + /** + * The URL for credits + * + * + * @var string + */ + public $creditUrl = null; + + /** + * The media date extracted from EXIF data (For images) as Unix timestamp (In seconds) + * + * + * @var int + * @readonly + */ + public $mediaDate = null; + + /** + * The URL used for playback. This is not the download URL. + * + * + * @var string + * @readonly + */ + public $dataUrl = null; + + /** + * Comma separated flavor params ids that exists for this media entry + * + * + * @var string + * @readonly + */ + public $flavorParamsIds = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaFeatureStatus extends KalturaObjectBase +{ + /** + * + * + * @var KalturaFeatureStatusType + */ + public $type = null; + + /** + * + * + * @var int + */ + public $value = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaFeatureStatusListResponse extends KalturaObjectBase +{ + /** + * + * + * @var array of KalturaFeatureStatus + * @readonly + */ + public $objects; + + /** + * + * + * @var int + * @readonly + */ + public $totalCount = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaFileAsset extends KalturaObjectBase +{ + /** + * + * + * @var int + * @readonly + */ + public $id = null; + + /** + * + * + * @var int + * @readonly + */ + public $partnerId = null; + + /** + * + * + * @var KalturaFileAssetObjectType + * @insertonly + */ + public $fileAssetObjectType = null; + + /** + * + * + * @var string + * @insertonly + */ + public $objectId = null; + + /** + * + * + * @var string + */ + public $name = null; + + /** + * + * + * @var string + */ + public $systemName = null; + + /** + * + * + * @var string + */ + public $fileExt = null; + + /** + * + * + * @var int + * @readonly + */ + public $version = null; + + /** + * + * + * @var int + * @readonly + */ + public $createdAt = null; + + /** + * + * + * @var int + * @readonly + */ + public $updatedAt = null; + + /** + * + * + * @var KalturaFileAssetStatus + * @readonly + */ + public $status = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaFileAssetListResponse extends KalturaObjectBase +{ + /** + * + * + * @var array of KalturaFileAsset + * @readonly + */ + public $objects; + + /** + * + * + * @var int + * @readonly + */ + public $totalCount = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +abstract class KalturaSearchItem extends KalturaObjectBase +{ + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaFilter extends KalturaObjectBase +{ + /** + * + * + * @var string + */ + public $orderBy = null; + + /** + * + * + * @var KalturaSearchItem + */ + public $advancedSearch; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaFilterPager extends KalturaObjectBase +{ + /** + * The number of objects to retrieve. (Default is 30, maximum page size is 500). + * + * + * @var int + */ + public $pageSize = null; + + /** + * The page number for which {pageSize} of objects should be retrieved (Default is 1). + * + * + * @var int + */ + public $pageIndex = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaFlavorAsset extends KalturaAsset +{ + /** + * The Flavor Params used to create this Flavor Asset + * + * + * @var int + * @insertonly + */ + public $flavorParamsId = null; + + /** + * The width of the Flavor Asset + * + * + * @var int + * @readonly + */ + public $width = null; + + /** + * The height of the Flavor Asset + * + * + * @var int + * @readonly + */ + public $height = null; + + /** + * The overall bitrate (in KBits) of the Flavor Asset + * + * + * @var int + * @readonly + */ + public $bitrate = null; + + /** + * The frame rate (in FPS) of the Flavor Asset + * + * + * @var float + * @readonly + */ + public $frameRate = null; + + /** + * True if this Flavor Asset is the original source + * + * + * @var bool + * @readonly + */ + public $isOriginal = null; + + /** + * True if this Flavor Asset is playable in KDP + * + * + * @var bool + * @readonly + */ + public $isWeb = null; + + /** + * The container format + * + * + * @var string + * @readonly + */ + public $containerFormat = null; + + /** + * The video codec + * + * + * @var string + * @readonly + */ + public $videoCodecId = null; + + /** + * The status of the Flavor Asset + * + * + * @var KalturaFlavorAssetStatus + * @readonly + */ + public $status = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaFlavorAssetListResponse extends KalturaObjectBase +{ + /** + * + * + * @var array of KalturaFlavorAsset + * @readonly + */ + public $objects; + + /** + * + * + * @var int + * @readonly + */ + public $totalCount = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaFlavorParams extends KalturaAssetParams +{ + /** + * The video codec of the Flavor Params + * + * + * @var KalturaVideoCodec + */ + public $videoCodec = null; + + /** + * The video bitrate (in KBits) of the Flavor Params + * + * + * @var int + */ + public $videoBitrate = null; + + /** + * The audio codec of the Flavor Params + * + * + * @var KalturaAudioCodec + */ + public $audioCodec = null; + + /** + * The audio bitrate (in KBits) of the Flavor Params + * + * + * @var int + */ + public $audioBitrate = null; + + /** + * The number of audio channels for "downmixing" + * + * + * @var int + */ + public $audioChannels = null; + + /** + * The audio sample rate of the Flavor Params + * + * + * @var int + */ + public $audioSampleRate = null; + + /** + * The desired width of the Flavor Params + * + * + * @var int + */ + public $width = null; + + /** + * The desired height of the Flavor Params + * + * + * @var int + */ + public $height = null; + + /** + * The frame rate of the Flavor Params + * + * + * @var int + */ + public $frameRate = null; + + /** + * The gop size of the Flavor Params + * + * + * @var int + */ + public $gopSize = null; + + /** + * The list of conversion engines (comma separated) + * + * + * @var string + */ + public $conversionEngines = null; + + /** + * The list of conversion engines extra params (separated with "|") + * + * + * @var string + */ + public $conversionEnginesExtraParams = null; + + /** + * + * + * @var bool + */ + public $twoPass = null; + + /** + * + * + * @var int + */ + public $deinterlice = null; + + /** + * + * + * @var int + */ + public $rotate = null; + + /** + * + * + * @var string + */ + public $operators = null; + + /** + * + * + * @var int + */ + public $engineVersion = null; + + /** + * The container format of the Flavor Params + * + * + * @var KalturaContainerFormat + */ + public $format = null; + + /** + * + * + * @var int + */ + public $aspectRatioProcessingMode = null; + + /** + * + * + * @var int + */ + public $forceFrameToMultiplication16 = null; + + /** + * + * + * @var int + */ + public $isGopInSec = null; + + /** + * + * + * @var int + */ + public $isAvoidVideoShrinkFramesizeToSource = null; + + /** + * + * + * @var int + */ + public $isAvoidVideoShrinkBitrateToSource = null; + + /** + * + * + * @var int + */ + public $isVideoFrameRateForLowBrAppleHls = null; + + /** + * + * + * @var float + */ + public $anamorphicPixels = null; + + /** + * + * + * @var int + */ + public $isAvoidForcedKeyFrames = null; + + /** + * + * + * @var int + */ + public $maxFrameRate = null; + + /** + * + * + * @var int + */ + public $videoConstantBitrate = null; + + /** + * + * + * @var int + */ + public $videoBitrateTolerance = null; + + /** + * + * + * @var int + */ + public $clipOffset = null; + + /** + * + * + * @var int + */ + public $clipDuration = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaFlavorAssetWithParams extends KalturaObjectBase +{ + /** + * The Flavor Asset (Can be null when there are params without asset) + * + * + * @var KalturaFlavorAsset + */ + public $flavorAsset; + + /** + * The Flavor Params + * + * + * @var KalturaFlavorParams + */ + public $flavorParams; + + /** + * The entry id + * + * + * @var string + */ + public $entryId = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaFlavorParamsListResponse extends KalturaObjectBase +{ + /** + * + * + * @var array of KalturaFlavorParams + * @readonly + */ + public $objects; + + /** + * + * + * @var int + * @readonly + */ + public $totalCount = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaFlavorParamsOutput extends KalturaFlavorParams +{ + /** + * + * + * @var int + */ + public $flavorParamsId = null; + + /** + * + * + * @var string + */ + public $commandLinesStr = null; + + /** + * + * + * @var string + */ + public $flavorParamsVersion = null; + + /** + * + * + * @var string + */ + public $flavorAssetId = null; + + /** + * + * + * @var string + */ + public $flavorAssetVersion = null; + + /** + * + * + * @var int + */ + public $readyBehavior = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaFlavorParamsOutputListResponse extends KalturaObjectBase +{ + /** + * + * + * @var array of KalturaFlavorParamsOutput + * @readonly + */ + public $objects; + + /** + * + * + * @var int + * @readonly + */ + public $totalCount = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +abstract class KalturaObject extends KalturaObjectBase +{ + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaJobData extends KalturaObjectBase +{ + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaLiveStreamConfiguration extends KalturaObjectBase +{ + /** + * + * + * @var KalturaPlaybackProtocol + */ + public $protocol = null; + + /** + * + * + * @var string + */ + public $url = null; + + /** + * + * + * @var string + */ + public $publishUrl = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +abstract class KalturaLiveEntry extends KalturaMediaEntry +{ + /** + * The message to be presented when the stream is offline + * + * + * @var string + */ + public $offlineMessage = null; + + /** + * Recording Status Enabled/Disabled + * + * + * @var KalturaRecordStatus + * @insertonly + */ + public $recordStatus = null; + + /** + * DVR Status Enabled/Disabled + * + * + * @var KalturaDVRStatus + * @insertonly + */ + public $dvrStatus = null; + + /** + * Window of time which the DVR allows for backwards scrubbing (in minutes) + * + * + * @var int + * @insertonly + */ + public $dvrWindow = null; + + /** + * Array of key value protocol->live stream url objects + * + * + * @var array of KalturaLiveStreamConfiguration + */ + public $liveStreamConfigurations; + + /** + * Recorded entry id + * + * + * @var string + */ + public $recordedEntryId = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaLiveChannel extends KalturaLiveEntry +{ + /** + * Playlist id to be played + * + * + * @var string + */ + public $playlistId = null; + + /** + * Indicates that the segments should be repeated for ever + * + * + * @var KalturaNullableBoolean + */ + public $repeat = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaLiveChannelListResponse extends KalturaObjectBase +{ + /** + * + * + * @var array of KalturaLiveChannel + * @readonly + */ + public $objects; + + /** + * + * + * @var int + * @readonly + */ + public $totalCount = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaLiveChannelSegment extends KalturaObjectBase +{ + /** + * Unique identifier + * + * + * @var string + * @readonly + */ + public $id = null; + + /** + * + * + * @var int + * @readonly + */ + public $partnerId = null; + + /** + * Segment creation date as Unix timestamp (In seconds) + * + * + * @var int + * @readonly + */ + public $createdAt = null; + + /** + * Segment update date as Unix timestamp (In seconds) + * + * + * @var int + * @readonly + */ + public $updatedAt = null; + + /** + * Segment name + * + * + * @var string + */ + public $name = null; + + /** + * Segment description + * + * + * @var string + */ + public $description = null; + + /** + * Segment tags + * + * + * @var string + */ + public $tags = null; + + /** + * Segment could be associated with the main stream, as additional stream or as overlay + * + * + * @var KalturaLiveChannelSegmentType + */ + public $type = null; + + /** + * + * + * @var KalturaLiveChannelSegmentStatus + * @readonly + */ + public $status = null; + + /** + * Live channel id + * + * + * @var string + */ + public $channelId = null; + + /** + * Entry id to be played + * + * + * @var string + */ + public $entryId = null; + + /** + * Segment start time trigger type + * + * + * @var KalturaLiveChannelSegmentTriggerType + */ + public $triggerType = null; + + /** + * Live channel segment that the trigger relates to + * + * + * @var string + */ + public $triggerSegmentId = null; + + /** + * Segment play start time, in mili-seconds, according to trigger type + * + * + * @var float + */ + public $startTime = null; + + /** + * Segment play duration time, in mili-seconds + * + * + * @var float + */ + public $duration = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaLiveChannelSegmentListResponse extends KalturaObjectBase +{ + /** + * + * + * @var array of KalturaLiveChannelSegment + * @readonly + */ + public $objects; + + /** + * + * + * @var int + * @readonly + */ + public $totalCount = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaLiveStreamBitrate extends KalturaObjectBase +{ + /** + * + * + * @var int + */ + public $bitrate = null; + + /** + * + * + * @var int + */ + public $width = null; + + /** + * + * + * @var int + */ + public $height = null; + + /** + * + * + * @var string + */ + public $tags = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaLiveStreamEntry extends KalturaLiveEntry +{ + /** + * The stream id as provided by the provider + * + * + * @var string + * @readonly + */ + public $streamRemoteId = null; + + /** + * The backup stream id as provided by the provider + * + * + * @var string + * @readonly + */ + public $streamRemoteBackupId = null; + + /** + * Array of supported bitrates + * + * + * @var array of KalturaLiveStreamBitrate + */ + public $bitrates; + + /** + * + * + * @var string + */ + public $primaryBroadcastingUrl = null; + + /** + * + * + * @var string + */ + public $secondaryBroadcastingUrl = null; + + /** + * + * + * @var string + */ + public $streamName = null; + + /** + * The stream url + * + * + * @var string + */ + public $streamUrl = null; + + /** + * HLS URL - URL for live stream playback on mobile device + * + * + * @var string + */ + public $hlsStreamUrl = null; + + /** + * URL Manager to handle the live stream URL (for instance, add token) + * + * + * @var string + */ + public $urlManager = null; + + /** + * The broadcast primary ip + * + * + * @var string + */ + public $encodingIP1 = null; + + /** + * The broadcast secondary ip + * + * + * @var string + */ + public $encodingIP2 = null; + + /** + * The broadcast password + * + * + * @var string + */ + public $streamPassword = null; + + /** + * The broadcast username + * + * + * @var string + * @readonly + */ + public $streamUsername = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaLiveStreamListResponse extends KalturaObjectBase +{ + /** + * + * + * @var array of KalturaLiveStreamEntry + * @readonly + */ + public $objects; + + /** + * + * + * @var int + * @readonly + */ + public $totalCount = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +abstract class KalturaBaseEntryBaseFilter extends KalturaFilter +{ + /** + * This filter should be in use for retrieving only a specific entry (identified by its entryId). + * + * + * @var string + */ + public $idEqual = null; + + /** + * This filter should be in use for retrieving few specific entries (string should include comma separated list of entryId strings). + * + * + * @var string + */ + public $idIn = null; + + /** + * + * + * @var string + */ + public $idNotIn = null; + + /** + * This filter should be in use for retrieving specific entries. It should include only one string to search for in entry names (no wildcards, spaces are treated as part of the string). + * + * + * @var string + */ + public $nameLike = null; + + /** + * This filter should be in use for retrieving specific entries. It could include few (comma separated) strings for searching in entry names, while applying an OR logic to retrieve entries that contain at least one input string (no wildcards, spaces are treated as part of the string). + * + * + * @var string + */ + public $nameMultiLikeOr = null; + + /** + * This filter should be in use for retrieving specific entries. It could include few (comma separated) strings for searching in entry names, while applying an AND logic to retrieve entries that contain all input strings (no wildcards, spaces are treated as part of the string). + * + * + * @var string + */ + public $nameMultiLikeAnd = null; + + /** + * This filter should be in use for retrieving entries with a specific name. + * + * + * @var string + */ + public $nameEqual = null; + + /** + * This filter should be in use for retrieving only entries which were uploaded by/assigned to users of a specific Kaltura Partner (identified by Partner ID). + * + * + * @var int + */ + public $partnerIdEqual = null; + + /** + * This filter should be in use for retrieving only entries within Kaltura network which were uploaded by/assigned to users of few Kaltura Partners (string should include comma separated list of PartnerIDs) + * + * + * @var string + */ + public $partnerIdIn = null; + + /** + * This filter parameter should be in use for retrieving only entries, uploaded by/assigned to a specific user (identified by user Id). + * + * + * @var string + */ + public $userIdEqual = null; + + /** + * + * + * @var string + */ + public $creatorIdEqual = null; + + /** + * This filter should be in use for retrieving specific entries. It should include only one string to search for in entry tags (no wildcards, spaces are treated as part of the string). + * + * + * @var string + */ + public $tagsLike = null; + + /** + * This filter should be in use for retrieving specific entries. It could include few (comma separated) strings for searching in entry tags, while applying an OR logic to retrieve entries that contain at least one input string (no wildcards, spaces are treated as part of the string). + * + * + * @var string + */ + public $tagsMultiLikeOr = null; + + /** + * This filter should be in use for retrieving specific entries. It could include few (comma separated) strings for searching in entry tags, while applying an AND logic to retrieve entries that contain all input strings (no wildcards, spaces are treated as part of the string). + * + * + * @var string + */ + public $tagsMultiLikeAnd = null; + + /** + * This filter should be in use for retrieving specific entries. It should include only one string to search for in entry tags set by an ADMIN user (no wildcards, spaces are treated as part of the string). + * + * + * @var string + */ + public $adminTagsLike = null; + + /** + * This filter should be in use for retrieving specific entries. It could include few (comma separated) strings for searching in entry tags, set by an ADMIN user, while applying an OR logic to retrieve entries that contain at least one input string (no wildcards, spaces are treated as part of the string). + * + * + * @var string + */ + public $adminTagsMultiLikeOr = null; + + /** + * This filter should be in use for retrieving specific entries. It could include few (comma separated) strings for searching in entry tags, set by an ADMIN user, while applying an AND logic to retrieve entries that contain all input strings (no wildcards, spaces are treated as part of the string). + * + * + * @var string + */ + public $adminTagsMultiLikeAnd = null; + + /** + * + * + * @var string + */ + public $categoriesMatchAnd = null; + + /** + * All entries within these categories or their child categories. + * + * + * @var string + */ + public $categoriesMatchOr = null; + + /** + * + * + * @var string + */ + public $categoriesNotContains = null; + + /** + * + * + * @var string + */ + public $categoriesIdsMatchAnd = null; + + /** + * All entries of the categories, excluding their child categories. + * To include entries of the child categories, use categoryAncestorIdIn, or categoriesMatchOr. + * + * + * @var string + */ + public $categoriesIdsMatchOr = null; + + /** + * + * + * @var string + */ + public $categoriesIdsNotContains = null; + + /** + * + * + * @var KalturaNullableBoolean + */ + public $categoriesIdsEmpty = null; + + /** + * This filter should be in use for retrieving only entries, at a specific { + * + * @var KalturaEntryStatus + */ + public $statusEqual = null; + + /** + * This filter should be in use for retrieving only entries, not at a specific { + * + * @var KalturaEntryStatus + */ + public $statusNotEqual = null; + + /** + * This filter should be in use for retrieving only entries, at few specific { + * + * @var string + */ + public $statusIn = null; + + /** + * This filter should be in use for retrieving only entries, not at few specific { + * + * @var string + */ + public $statusNotIn = null; + + /** + * + * + * @var KalturaEntryModerationStatus + */ + public $moderationStatusEqual = null; + + /** + * + * + * @var KalturaEntryModerationStatus + */ + public $moderationStatusNotEqual = null; + + /** + * + * + * @var string + */ + public $moderationStatusIn = null; + + /** + * + * + * @var string + */ + public $moderationStatusNotIn = null; + + /** + * + * + * @var KalturaEntryType + */ + public $typeEqual = null; + + /** + * This filter should be in use for retrieving entries of few { + * + * @var string + */ + public $typeIn = null; + + /** + * This filter parameter should be in use for retrieving only entries which were created at Kaltura system after a specific time/date (standard timestamp format). + * + * + * @var int + */ + public $createdAtGreaterThanOrEqual = null; + + /** + * This filter parameter should be in use for retrieving only entries which were created at Kaltura system before a specific time/date (standard timestamp format). + * + * + * @var int + */ + public $createdAtLessThanOrEqual = null; + + /** + * + * + * @var int + */ + public $updatedAtGreaterThanOrEqual = null; + + /** + * + * + * @var int + */ + public $updatedAtLessThanOrEqual = null; + + /** + * + * + * @var int + */ + public $totalRankLessThanOrEqual = null; + + /** + * + * + * @var int + */ + public $totalRankGreaterThanOrEqual = null; + + /** + * + * + * @var int + */ + public $groupIdEqual = null; + + /** + * This filter should be in use for retrieving specific entries while search match the input string within all of the following metadata attributes: name, description, tags, adminTags. + * + * + * @var string + */ + public $searchTextMatchAnd = null; + + /** + * This filter should be in use for retrieving specific entries while search match the input string within at least one of the following metadata attributes: name, description, tags, adminTags. + * + * + * @var string + */ + public $searchTextMatchOr = null; + + /** + * + * + * @var int + */ + public $accessControlIdEqual = null; + + /** + * + * + * @var string + */ + public $accessControlIdIn = null; + + /** + * + * + * @var int + */ + public $startDateGreaterThanOrEqual = null; + + /** + * + * + * @var int + */ + public $startDateLessThanOrEqual = null; + + /** + * + * + * @var int + */ + public $startDateGreaterThanOrEqualOrNull = null; + + /** + * + * + * @var int + */ + public $startDateLessThanOrEqualOrNull = null; + + /** + * + * + * @var int + */ + public $endDateGreaterThanOrEqual = null; + + /** + * + * + * @var int + */ + public $endDateLessThanOrEqual = null; + + /** + * + * + * @var int + */ + public $endDateGreaterThanOrEqualOrNull = null; + + /** + * + * + * @var int + */ + public $endDateLessThanOrEqualOrNull = null; + + /** + * + * + * @var string + */ + public $referenceIdEqual = null; + + /** + * + * + * @var string + */ + public $referenceIdIn = null; + + /** + * + * + * @var string + */ + public $replacingEntryIdEqual = null; + + /** + * + * + * @var string + */ + public $replacingEntryIdIn = null; + + /** + * + * + * @var string + */ + public $replacedEntryIdEqual = null; + + /** + * + * + * @var string + */ + public $replacedEntryIdIn = null; + + /** + * + * + * @var KalturaEntryReplacementStatus + */ + public $replacementStatusEqual = null; + + /** + * + * + * @var string + */ + public $replacementStatusIn = null; + + /** + * + * + * @var int + */ + public $partnerSortValueGreaterThanOrEqual = null; + + /** + * + * + * @var int + */ + public $partnerSortValueLessThanOrEqual = null; + + /** + * + * + * @var string + */ + public $redirectEntryIdEqual = null; + + /** + * + * + * @var string + */ + public $rootEntryIdEqual = null; + + /** + * + * + * @var string + */ + public $rootEntryIdIn = null; + + /** + * + * + * @var string + */ + public $tagsNameMultiLikeOr = null; + + /** + * + * + * @var string + */ + public $tagsAdminTagsMultiLikeOr = null; + + /** + * + * + * @var string + */ + public $tagsAdminTagsNameMultiLikeOr = null; + + /** + * + * + * @var string + */ + public $tagsNameMultiLikeAnd = null; + + /** + * + * + * @var string + */ + public $tagsAdminTagsMultiLikeAnd = null; + + /** + * + * + * @var string + */ + public $tagsAdminTagsNameMultiLikeAnd = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaBaseEntryFilter extends KalturaBaseEntryBaseFilter +{ + /** + * + * + * @var string + */ + public $freeText = null; + + /** + * + * + * @var KalturaNullableBoolean + */ + public $isRoot = null; + + /** + * + * + * @var string + */ + public $categoriesFullNameIn = null; + + /** + * All entries within this categoy or in child categories + * + * + * @var string + */ + public $categoryAncestorIdIn = null; + + /** + * The id of the original entry + * + * + * @var string + */ + public $redirectFromEntryId = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +abstract class KalturaPlayableEntryBaseFilter extends KalturaBaseEntryFilter +{ + /** + * + * + * @var int + */ + public $lastPlayedAtGreaterThanOrEqual = null; + + /** + * + * + * @var int + */ + public $lastPlayedAtLessThanOrEqual = null; + + /** + * + * + * @var int + */ + public $durationLessThan = null; + + /** + * + * + * @var int + */ + public $durationGreaterThan = null; + + /** + * + * + * @var int + */ + public $durationLessThanOrEqual = null; + + /** + * + * + * @var int + */ + public $durationGreaterThanOrEqual = null; + + /** + * + * + * @var string + */ + public $durationTypeMatchOr = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaPlayableEntryFilter extends KalturaPlayableEntryBaseFilter +{ + +} + +/** + * @package Kaltura + * @subpackage Client + */ +abstract class KalturaMediaEntryBaseFilter extends KalturaPlayableEntryFilter +{ + /** + * + * + * @var KalturaMediaType + */ + public $mediaTypeEqual = null; + + /** + * + * + * @var string + */ + public $mediaTypeIn = null; + + /** + * + * + * @var int + */ + public $mediaDateGreaterThanOrEqual = null; + + /** + * + * + * @var int + */ + public $mediaDateLessThanOrEqual = null; + + /** + * + * + * @var string + */ + public $flavorParamsIdsMatchOr = null; + + /** + * + * + * @var string + */ + public $flavorParamsIdsMatchAnd = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaMediaEntryFilter extends KalturaMediaEntryBaseFilter +{ + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaMediaEntryFilterForPlaylist extends KalturaMediaEntryFilter +{ + /** + * + * + * @var int + */ + public $limit = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaMediaInfo extends KalturaObjectBase +{ + /** + * The id of the media info + * + * + * @var int + * @readonly + */ + public $id = null; + + /** + * The id of the related flavor asset + * + * + * @var string + */ + public $flavorAssetId = null; + + /** + * The file size + * + * + * @var int + */ + public $fileSize = null; + + /** + * The container format + * + * + * @var string + */ + public $containerFormat = null; + + /** + * The container id + * + * + * @var string + */ + public $containerId = null; + + /** + * The container profile + * + * + * @var string + */ + public $containerProfile = null; + + /** + * The container duration + * + * + * @var int + */ + public $containerDuration = null; + + /** + * The container bit rate + * + * + * @var int + */ + public $containerBitRate = null; + + /** + * The video format + * + * + * @var string + */ + public $videoFormat = null; + + /** + * The video codec id + * + * + * @var string + */ + public $videoCodecId = null; + + /** + * The video duration + * + * + * @var int + */ + public $videoDuration = null; + + /** + * The video bit rate + * + * + * @var int + */ + public $videoBitRate = null; + + /** + * The video bit rate mode + * + * + * @var KalturaBitRateMode + */ + public $videoBitRateMode = null; + + /** + * The video width + * + * + * @var int + */ + public $videoWidth = null; + + /** + * The video height + * + * + * @var int + */ + public $videoHeight = null; + + /** + * The video frame rate + * + * + * @var float + */ + public $videoFrameRate = null; + + /** + * The video display aspect ratio (dar) + * + * + * @var float + */ + public $videoDar = null; + + /** + * + * + * @var int + */ + public $videoRotation = null; + + /** + * The audio format + * + * + * @var string + */ + public $audioFormat = null; + + /** + * The audio codec id + * + * + * @var string + */ + public $audioCodecId = null; + + /** + * The audio duration + * + * + * @var int + */ + public $audioDuration = null; + + /** + * The audio bit rate + * + * + * @var int + */ + public $audioBitRate = null; + + /** + * The audio bit rate mode + * + * + * @var KalturaBitRateMode + */ + public $audioBitRateMode = null; + + /** + * The number of audio channels + * + * + * @var int + */ + public $audioChannels = null; + + /** + * The audio sampling rate + * + * + * @var int + */ + public $audioSamplingRate = null; + + /** + * The audio resolution + * + * + * @var int + */ + public $audioResolution = null; + + /** + * The writing library + * + * + * @var string + */ + public $writingLib = null; + + /** + * The data as returned by the mediainfo command line + * + * + * @var string + */ + public $rawData = null; + + /** + * + * + * @var string + */ + public $multiStreamInfo = null; + + /** + * + * + * @var int + */ + public $scanType = null; + + /** + * + * + * @var string + */ + public $multiStream = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaMediaInfoListResponse extends KalturaObjectBase +{ + /** + * + * + * @var array of KalturaMediaInfo + * @readonly + */ + public $objects; + + /** + * + * + * @var int + * @readonly + */ + public $totalCount = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaMediaListResponse extends KalturaObjectBase +{ + /** + * + * + * @var array of KalturaMediaEntry + * @readonly + */ + public $objects; + + /** + * + * + * @var int + * @readonly + */ + public $totalCount = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaMediaServer extends KalturaObjectBase +{ + /** + * Unique identifier + * + * + * @var int + * @readonly + */ + public $id = null; + + /** + * Server data center id + * + * + * @var int + * @readonly + */ + public $dc = null; + + /** + * Server host name + * + * + * @var string + * @readonly + */ + public $hostname = null; + + /** + * Server first registration date as Unix timestamp (In seconds) + * + * + * @var int + * @readonly + */ + public $createdAt = null; + + /** + * Server last update date as Unix timestamp (In seconds) + * + * + * @var int + * @readonly + */ + public $updatedAt = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaMediaServerStatus extends KalturaObjectBase +{ + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaMixEntry extends KalturaPlayableEntry +{ + /** + * Indicates whether the user has submited a real thumbnail to the mix (Not the one that was generated automaticaly) + * + * + * @var bool + * @readonly + */ + public $hasRealThumbnail = null; + + /** + * The editor type used to edit the metadata + * + * + * @var KalturaEditorType + */ + public $editorType = null; + + /** + * The xml data of the mix + * + * + * @var string + */ + public $dataContent = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaMixListResponse extends KalturaObjectBase +{ + /** + * + * + * @var array of KalturaMixEntry + * @readonly + */ + public $objects; + + /** + * + * + * @var int + * @readonly + */ + public $totalCount = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaModerationFlag extends KalturaObjectBase +{ + /** + * Moderation flag id + * + * + * @var int + * @readonly + */ + public $id = null; + + /** + * + * + * @var int + * @readonly + */ + public $partnerId = null; + + /** + * The user id that added the moderation flag + * + * + * @var string + * @readonly + */ + public $userId = null; + + /** + * The type of the moderation flag (entry or user) + * + * + * @var KalturaModerationObjectType + * @readonly + */ + public $moderationObjectType = null; + + /** + * If moderation flag is set for entry, this is the flagged entry id + * + * + * @var string + */ + public $flaggedEntryId = null; + + /** + * If moderation flag is set for user, this is the flagged user id + * + * + * @var string + */ + public $flaggedUserId = null; + + /** + * The moderation flag status + * + * + * @var KalturaModerationFlagStatus + * @readonly + */ + public $status = null; + + /** + * The comment that was added to the flag + * + * + * @var string + */ + public $comments = null; + + /** + * + * + * @var KalturaModerationFlagType + */ + public $flagType = null; + + /** + * + * + * @var int + * @readonly + */ + public $createdAt = null; + + /** + * + * + * @var int + * @readonly + */ + public $updatedAt = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaModerationFlagListResponse extends KalturaObjectBase +{ + /** + * + * + * @var array of KalturaModerationFlag + * @readonly + */ + public $objects; + + /** + * + * + * @var int + * @readonly + */ + public $totalCount = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaPlayerDeliveryType extends KalturaObjectBase +{ + /** + * + * + * @var string + */ + public $id = null; + + /** + * + * + * @var string + */ + public $label = null; + + /** + * + * + * @var array of KalturaKeyValue + */ + public $flashvars; + + /** + * + * + * @var string + */ + public $minVersion = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaPlayerEmbedCodeType extends KalturaObjectBase +{ + /** + * + * + * @var string + */ + public $id = null; + + /** + * + * + * @var string + */ + public $label = null; + + /** + * + * + * @var bool + */ + public $entryOnly = null; + + /** + * + * + * @var string + */ + public $minVersion = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaPartner extends KalturaObjectBase +{ + /** + * + * + * @var int + * @readonly + */ + public $id = null; + + /** + * + * + * @var string + */ + public $name = null; + + /** + * + * + * @var string + */ + public $website = null; + + /** + * + * + * @var string + */ + public $notificationUrl = null; + + /** + * + * + * @var int + */ + public $appearInSearch = null; + + /** + * + * + * @var int + * @readonly + */ + public $createdAt = null; + + /** + * deprecated - lastName and firstName replaces this field + * + * + * @var string + */ + public $adminName = null; + + /** + * + * + * @var string + */ + public $adminEmail = null; + + /** + * + * + * @var string + */ + public $description = null; + + /** + * + * + * @var KalturaCommercialUseType + */ + public $commercialUse = null; + + /** + * + * + * @var string + */ + public $landingPage = null; + + /** + * + * + * @var string + */ + public $userLandingPage = null; + + /** + * + * + * @var string + */ + public $contentCategories = null; + + /** + * + * + * @var KalturaPartnerType + */ + public $type = null; + + /** + * + * + * @var string + */ + public $phone = null; + + /** + * + * + * @var string + */ + public $describeYourself = null; + + /** + * + * + * @var bool + */ + public $adultContent = null; + + /** + * + * + * @var string + */ + public $defConversionProfileType = null; + + /** + * + * + * @var int + */ + public $notify = null; + + /** + * + * + * @var KalturaPartnerStatus + * @readonly + */ + public $status = null; + + /** + * + * + * @var int + */ + public $allowQuickEdit = null; + + /** + * + * + * @var int + */ + public $mergeEntryLists = null; + + /** + * + * + * @var string + */ + public $notificationsConfig = null; + + /** + * + * + * @var int + */ + public $maxUploadSize = null; + + /** + * + * + * @var int + * @readonly + */ + public $partnerPackage = null; + + /** + * + * + * @var string + * @readonly + */ + public $secret = null; + + /** + * + * + * @var string + * @readonly + */ + public $adminSecret = null; + + /** + * + * + * @var string + * @readonly + */ + public $cmsPassword = null; + + /** + * + * + * @var int + */ + public $allowMultiNotification = null; + + /** + * + * + * @var int + * @readonly + */ + public $adminLoginUsersQuota = null; + + /** + * + * + * @var string + */ + public $adminUserId = null; + + /** + * firstName and lastName replace the old (deprecated) adminName + * + * + * @var string + */ + public $firstName = null; + + /** + * lastName and firstName replace the old (deprecated) adminName + * + * + * @var string + */ + public $lastName = null; + + /** + * country code (2char) - this field is optional + * + * + * @var string + */ + public $country = null; + + /** + * state code (2char) - this field is optional + * + * + * @var string + */ + public $state = null; + + /** + * + * + * @var array of KalturaKeyValue + * @insertonly + */ + public $additionalParams; + + /** + * + * + * @var int + * @readonly + */ + public $publishersQuota = null; + + /** + * + * + * @var KalturaPartnerGroupType + * @readonly + */ + public $partnerGroupType = null; + + /** + * + * + * @var bool + * @readonly + */ + public $defaultEntitlementEnforcement = null; + + /** + * + * + * @var string + * @readonly + */ + public $defaultDeliveryType = null; + + /** + * + * + * @var string + * @readonly + */ + public $defaultEmbedCodeType = null; + + /** + * + * + * @var array of KalturaPlayerDeliveryType + * @readonly + */ + public $deliveryTypes; + + /** + * + * + * @var array of KalturaPlayerEmbedCodeType + * @readonly + */ + public $embedCodeTypes; + + /** + * + * + * @var int + * @readonly + */ + public $templatePartnerId = null; + + /** + * + * + * @var bool + * @readonly + */ + public $ignoreSeoLinks = null; + + /** + * + * + * @var string + * @readonly + */ + public $host = null; + + /** + * + * + * @var string + * @readonly + */ + public $cdnHost = null; + + /** + * + * + * @var string + * @readonly + */ + public $rtmpUrl = null; + + /** + * + * + * @var bool + * @readonly + */ + public $isFirstLogin = null; + + /** + * + * + * @var string + * @readonly + */ + public $logoutUrl = null; + + /** + * + * + * @var int + * @readonly + */ + public $partnerParentId = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaPartnerListResponse extends KalturaObjectBase +{ + /** + * + * + * @var array of KalturaPartner + * @readonly + */ + public $objects; + + /** + * + * + * @var int + * @readonly + */ + public $totalCount = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaPartnerStatistics extends KalturaObjectBase +{ + /** + * Package total allowed bandwidth and storage + * + * + * @var int + * @readonly + */ + public $packageBandwidthAndStorage = null; + + /** + * Partner total hosting in GB on the disk + * + * + * @var float + * @readonly + */ + public $hosting = null; + + /** + * Partner total bandwidth in GB + * + * + * @var float + * @readonly + */ + public $bandwidth = null; + + /** + * total usage in GB - including bandwidth and storage + * + * + * @var int + * @readonly + */ + public $usage = null; + + /** + * Percent of usage out of partner's package. if usage is 5GB and package is 10GB, this value will be 50 + * + * + * @var float + * @readonly + */ + public $usagePercent = null; + + /** + * date when partner reached the limit of his package (timestamp) + * + * + * @var int + * @readonly + */ + public $reachedLimitDate = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaPartnerUsage extends KalturaObjectBase +{ + /** + * Partner total hosting in GB on the disk + * + * + * @var float + * @readonly + */ + public $hostingGB = null; + + /** + * percent of usage out of partner's package. if usageGB is 5 and package is 10GB, this value will be 50 + * + * + * @var float + * @readonly + */ + public $Percent = null; + + /** + * package total BW - actually this is usage, which represents BW+storage + * + * + * @var int + * @readonly + */ + public $packageBW = null; + + /** + * total usage in GB - including bandwidth and storage + * + * + * @var float + * @readonly + */ + public $usageGB = null; + + /** + * date when partner reached the limit of his package (timestamp) + * + * + * @var int + * @readonly + */ + public $reachedLimitDate = null; + + /** + * a semi-colon separated list of comma-separated key-values to represent a usage graph. + * keys could be 1-12 for a year view (1,1.2;2,1.1;3,0.9;...;12,1.4;) + * keys could be 1-[28,29,30,31] depending on the requested month, for a daily view in a given month (1,0.4;2,0.2;...;31,0.1;) + * + * + * @var string + * @readonly + */ + public $usageGraph = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaPermission extends KalturaObjectBase +{ + /** + * + * + * @var int + * @readonly + */ + public $id = null; + + /** + * + * + * @var KalturaPermissionType + * @readonly + */ + public $type = null; + + /** + * + * + * @var string + */ + public $name = null; + + /** + * + * + * @var string + */ + public $friendlyName = null; + + /** + * + * + * @var string + */ + public $description = null; + + /** + * + * + * @var KalturaPermissionStatus + */ + public $status = null; + + /** + * + * + * @var int + * @readonly + */ + public $partnerId = null; + + /** + * + * + * @var string + */ + public $dependsOnPermissionNames = null; + + /** + * + * + * @var string + */ + public $tags = null; + + /** + * + * + * @var string + */ + public $permissionItemsIds = null; + + /** + * + * + * @var int + * @readonly + */ + public $createdAt = null; + + /** + * + * + * @var int + * @readonly + */ + public $updatedAt = null; + + /** + * + * + * @var string + */ + public $partnerGroup = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +abstract class KalturaPermissionItem extends KalturaObjectBase +{ + /** + * + * + * @var int + * @readonly + */ + public $id = null; + + /** + * + * + * @var KalturaPermissionItemType + * @readonly + */ + public $type = null; + + /** + * + * + * @var int + * @readonly + */ + public $partnerId = null; + + /** + * + * + * @var string + */ + public $tags = null; + + /** + * + * + * @var int + * @readonly + */ + public $createdAt = null; + + /** + * + * + * @var int + * @readonly + */ + public $updatedAt = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaPermissionItemListResponse extends KalturaObjectBase +{ + /** + * + * + * @var array of KalturaPermissionItem + * @readonly + */ + public $objects; + + /** + * + * + * @var int + * @readonly + */ + public $totalCount = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaPermissionListResponse extends KalturaObjectBase +{ + /** + * + * + * @var array of KalturaPermission + * @readonly + */ + public $objects; + + /** + * + * + * @var int + * @readonly + */ + public $totalCount = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaPlaylist extends KalturaBaseEntry +{ + /** + * Content of the playlist - + * XML if the playlistType is dynamic + * text if the playlistType is static + * url if the playlistType is mRss + * + * + * @var string + */ + public $playlistContent = null; + + /** + * + * + * @var array of KalturaMediaEntryFilterForPlaylist + */ + public $filters; + + /** + * Maximum count of results to be returned in playlist execution + * + * + * @var int + */ + public $totalResults = null; + + /** + * Type of playlist + * + * + * @var KalturaPlaylistType + */ + public $playlistType = null; + + /** + * Number of plays + * + * + * @var int + * @readonly + */ + public $plays = null; + + /** + * Number of views + * + * + * @var int + * @readonly + */ + public $views = null; + + /** + * The duration in seconds + * + * + * @var int + * @readonly + */ + public $duration = null; + + /** + * The url for this playlist + * + * + * @var string + * @readonly + */ + public $executeUrl = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaPlaylistListResponse extends KalturaObjectBase +{ + /** + * + * + * @var array of KalturaPlaylist + * @readonly + */ + public $objects; + + /** + * + * + * @var int + * @readonly + */ + public $totalCount = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaRemotePath extends KalturaObjectBase +{ + /** + * + * + * @var int + * @readonly + */ + public $storageProfileId = null; + + /** + * + * + * @var string + * @readonly + */ + public $uri = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaRemotePathListResponse extends KalturaObjectBase +{ + /** + * + * + * @var array of KalturaRemotePath + * @readonly + */ + public $objects; + + /** + * + * + * @var int + * @readonly + */ + public $totalCount = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaUrlResource extends KalturaContentResource +{ + /** + * Remote URL, FTP, HTTP or HTTPS + * + * + * @var string + */ + public $url = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaRemoteStorageResource extends KalturaUrlResource +{ + /** + * ID of storage profile to be associated with the created file sync, used for file serving URL composing. + * + * + * @var int + */ + public $storageProfileId = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaReportBaseTotal extends KalturaObjectBase +{ + /** + * + * + * @var string + */ + public $id = null; + + /** + * + * + * @var string + */ + public $data = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaReportGraph extends KalturaObjectBase +{ + /** + * + * + * @var string + */ + public $id = null; + + /** + * + * + * @var string + */ + public $data = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaReportInputBaseFilter extends KalturaObjectBase +{ + /** + * Start date as Unix timestamp (In seconds) + * + * + * @var int + */ + public $fromDate = null; + + /** + * End date as Unix timestamp (In seconds) + * + * + * @var int + */ + public $toDate = null; + + /** + * Start day as string (YYYYMMDD) + * + * + * @var string + */ + public $fromDay = null; + + /** + * End date as string (YYYYMMDD) + * + * + * @var string + */ + public $toDay = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaReportResponse extends KalturaObjectBase +{ + /** + * + * + * @var string + */ + public $columns = null; + + /** + * + * + * @var array of KalturaString + */ + public $results; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaReportTable extends KalturaObjectBase +{ + /** + * + * + * @var string + * @readonly + */ + public $header = null; + + /** + * + * + * @var string + * @readonly + */ + public $data = null; + + /** + * + * + * @var int + * @readonly + */ + public $totalCount = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaReportTotal extends KalturaObjectBase +{ + /** + * + * + * @var string + */ + public $header = null; + + /** + * + * + * @var string + */ + public $data = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaSearch extends KalturaObjectBase +{ + /** + * + * + * @var string + */ + public $keyWords = null; + + /** + * + * + * @var KalturaSearchProviderType + */ + public $searchSource = null; + + /** + * + * + * @var KalturaMediaType + */ + public $mediaType = null; + + /** + * Use this field to pass dynamic data for searching + * For example - if you set this field to "mymovies_$partner_id" + * The $partner_id will be automatically replcaed with your real partner Id + * + * + * @var string + */ + public $extraData = null; + + /** + * + * + * @var string + */ + public $authData = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaSearchAuthData extends KalturaObjectBase +{ + /** + * The authentication data that further should be used for search + * + * + * @var string + */ + public $authData = null; + + /** + * Login URL when user need to sign-in and authorize the search + * + * + * @var string + */ + public $loginUrl = null; + + /** + * Information when there was an error + * + * + * @var string + */ + public $message = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaSearchResult extends KalturaSearch +{ + /** + * + * + * @var string + */ + public $id = null; + + /** + * + * + * @var string + */ + public $title = null; + + /** + * + * + * @var string + */ + public $thumbUrl = null; + + /** + * + * + * @var string + */ + public $description = null; + + /** + * + * + * @var string + */ + public $tags = null; + + /** + * + * + * @var string + */ + public $url = null; + + /** + * + * + * @var string + */ + public $sourceLink = null; + + /** + * + * + * @var string + */ + public $credit = null; + + /** + * + * + * @var KalturaLicenseType + */ + public $licenseType = null; + + /** + * + * + * @var string + */ + public $flashPlaybackType = null; + + /** + * + * + * @var string + */ + public $fileExt = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaSearchResultResponse extends KalturaObjectBase +{ + /** + * + * + * @var array of KalturaSearchResult + * @readonly + */ + public $objects; + + /** + * + * + * @var bool + * @readonly + */ + public $needMediaInfo = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaSessionInfo extends KalturaObjectBase +{ + /** + * + * + * @var string + * @readonly + */ + public $ks = null; + + /** + * + * + * @var KalturaSessionType + * @readonly + */ + public $sessionType = null; + + /** + * + * + * @var int + * @readonly + */ + public $partnerId = null; + + /** + * + * + * @var string + * @readonly + */ + public $userId = null; + + /** + * + * + * @var int + * @readonly + */ + public $expiry = null; + + /** + * + * + * @var string + * @readonly + */ + public $privileges = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaSourceFileSyncDescriptor extends KalturaObjectBase +{ + /** + * + * + * @var string + */ + public $fileSyncLocalPath = null; + + /** + * The translated path as used by the scheduler + * + * + * @var string + */ + public $actualFileSyncLocalPath = null; + + /** + * + * + * @var string + */ + public $fileSyncRemoteUrl = null; + + /** + * + * + * @var string + */ + public $assetId = null; + + /** + * + * + * @var int + */ + public $assetParamsId = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaStartWidgetSessionResponse extends KalturaObjectBase +{ + /** + * + * + * @var int + * @readonly + */ + public $partnerId = null; + + /** + * + * + * @var string + * @readonly + */ + public $ks = null; + + /** + * + * + * @var string + * @readonly + */ + public $userId = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaStatsEvent extends KalturaObjectBase +{ + /** + * + * + * @var string + */ + public $clientVer = null; + + /** + * + * + * @var KalturaStatsEventType + */ + public $eventType = null; + + /** + * the client's timestamp of this event + * + * + * @var float + */ + public $eventTimestamp = null; + + /** + * a unique string generated by the client that will represent the client-side session: the primary component will pass it on to other components that sprout from it + * + * + * @var string + */ + public $sessionId = null; + + /** + * + * + * @var int + */ + public $partnerId = null; + + /** + * + * + * @var string + */ + public $entryId = null; + + /** + * the UV cookie - creates in the operational system and should be passed on ofr every event + * + * + * @var string + */ + public $uniqueViewer = null; + + /** + * + * + * @var string + */ + public $widgetId = null; + + /** + * + * + * @var int + */ + public $uiconfId = null; + + /** + * the partner's user id + * + * + * @var string + */ + public $userId = null; + + /** + * the timestamp along the video when the event happend + * + * + * @var int + */ + public $currentPoint = null; + + /** + * the duration of the video in milliseconds - will make it much faster than quering the db for each entry + * + * + * @var int + */ + public $duration = null; + + /** + * will be retrieved from the request of the user + * + * + * @var string + * @readonly + */ + public $userIp = null; + + /** + * the time in milliseconds the event took + * + * + * @var int + */ + public $processDuration = null; + + /** + * the id of the GUI control - will be used in the future to better understand what the user clicked + * + * + * @var string + */ + public $controlId = null; + + /** + * true if the user ever used seek in this session + * + * + * @var bool + */ + public $seek = null; + + /** + * timestamp of the new point on the timeline of the video after the user seeks + * + * + * @var int + */ + public $newPoint = null; + + /** + * the referrer of the client + * + * + * @var string + */ + public $referrer = null; + + /** + * will indicate if the event is thrown for the first video in the session + * + * + * @var bool + */ + public $isFirstInSession = null; + + /** + * kaltura application name + * + * + * @var string + */ + public $applicationId = null; + + /** + * + * + * @var int + */ + public $contextId = null; + + /** + * + * + * @var KalturaStatsFeatureType + */ + public $featureType = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaStatsKmcEvent extends KalturaObjectBase +{ + /** + * + * + * @var string + */ + public $clientVer = null; + + /** + * + * + * @var string + */ + public $kmcEventActionPath = null; + + /** + * + * + * @var KalturaStatsKmcEventType + */ + public $kmcEventType = null; + + /** + * the client's timestamp of this event + * + * + * @var float + */ + public $eventTimestamp = null; + + /** + * a unique string generated by the client that will represent the client-side session: the primary component will pass it on to other components that sprout from it + * + * + * @var string + */ + public $sessionId = null; + + /** + * + * + * @var int + */ + public $partnerId = null; + + /** + * + * + * @var string + */ + public $entryId = null; + + /** + * + * + * @var string + */ + public $widgetId = null; + + /** + * + * + * @var int + */ + public $uiconfId = null; + + /** + * the partner's user id + * + * + * @var string + */ + public $userId = null; + + /** + * will be retrieved from the request of the user + * + * + * @var string + * @readonly + */ + public $userIp = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaStorageProfile extends KalturaObjectBase +{ + /** + * + * + * @var int + * @readonly + */ + public $id = null; + + /** + * + * + * @var int + * @readonly + */ + public $createdAt = null; + + /** + * + * + * @var int + * @readonly + */ + public $updatedAt = null; + + /** + * + * + * @var int + * @readonly + */ + public $partnerId = null; + + /** + * + * + * @var string + */ + public $name = null; + + /** + * + * + * @var string + */ + public $systemName = null; + + /** + * + * + * @var string + */ + public $desciption = null; + + /** + * + * + * @var KalturaStorageProfileStatus + */ + public $status = null; + + /** + * + * + * @var KalturaStorageProfileProtocol + */ + public $protocol = null; + + /** + * + * + * @var string + */ + public $storageUrl = null; + + /** + * + * + * @var string + */ + public $storageBaseDir = null; + + /** + * + * + * @var string + */ + public $storageUsername = null; + + /** + * + * + * @var string + */ + public $storagePassword = null; + + /** + * + * + * @var bool + */ + public $storageFtpPassiveMode = null; + + /** + * + * + * @var string + */ + public $deliveryHttpBaseUrl = null; + + /** + * + * + * @var string + */ + public $deliveryHttpsBaseUrl = null; + + /** + * + * + * @var string + */ + public $deliveryRmpBaseUrl = null; + + /** + * + * + * @var string + */ + public $deliveryIisBaseUrl = null; + + /** + * + * + * @var int + */ + public $minFileSize = null; + + /** + * + * + * @var int + */ + public $maxFileSize = null; + + /** + * + * + * @var string + */ + public $flavorParamsIds = null; + + /** + * + * + * @var int + */ + public $maxConcurrentConnections = null; + + /** + * + * + * @var string + */ + public $pathManagerClass = null; + + /** + * + * + * @var array of KalturaKeyValue + */ + public $pathManagerParams; + + /** + * + * + * @var string + */ + public $urlManagerClass = null; + + /** + * + * + * @var array of KalturaKeyValue + */ + public $urlManagerParams; + + /** + * No need to create enum for temp field + * + * + * @var int + */ + public $trigger = null; + + /** + * Delivery Priority + * + * + * @var int + */ + public $deliveryPriority = null; + + /** + * + * + * @var KalturaStorageProfileDeliveryStatus + */ + public $deliveryStatus = null; + + /** + * + * + * @var string + */ + public $rtmpPrefix = null; + + /** + * + * + * @var KalturaStorageProfileReadyBehavior + */ + public $readyBehavior = null; + + /** + * Flag sugnifying that the storage exported content should be deleted when soure entry is deleted + * + * + * @var int + */ + public $allowAutoDelete = null; + + /** + * Indicates to the local file transfer manager to create a link to the file instead of copying it + * + * + * @var bool + */ + public $createFileLink = null; + + /** + * Holds storage profile export rules + * + * + * @var array of KalturaRule + */ + public $rules; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaStorageProfileListResponse extends KalturaObjectBase +{ + /** + * + * + * @var array of KalturaStorageProfile + * @readonly + */ + public $objects; + + /** + * + * + * @var int + * @readonly + */ + public $totalCount = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaSyndicationFeedEntryCount extends KalturaObjectBase +{ + /** + * the total count of entries that should appear in the feed without flavor filtering + * + * + * @var int + */ + public $totalEntryCount = null; + + /** + * count of entries that will appear in the feed (including all relevant filters) + * + * + * @var int + */ + public $actualEntryCount = null; + + /** + * count of entries that requires transcoding in order to be included in feed + * + * + * @var int + */ + public $requireTranscodingCount = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaThumbAsset extends KalturaAsset +{ + /** + * The Flavor Params used to create this Flavor Asset + * + * + * @var int + * @insertonly + */ + public $thumbParamsId = null; + + /** + * The width of the Flavor Asset + * + * + * @var int + * @readonly + */ + public $width = null; + + /** + * The height of the Flavor Asset + * + * + * @var int + * @readonly + */ + public $height = null; + + /** + * The status of the asset + * + * + * @var KalturaThumbAssetStatus + * @readonly + */ + public $status = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaThumbAssetListResponse extends KalturaObjectBase +{ + /** + * + * + * @var array of KalturaThumbAsset + * @readonly + */ + public $objects; + + /** + * + * + * @var int + * @readonly + */ + public $totalCount = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaThumbParams extends KalturaAssetParams +{ + /** + * + * + * @var KalturaThumbCropType + */ + public $cropType = null; + + /** + * + * + * @var int + */ + public $quality = null; + + /** + * + * + * @var int + */ + public $cropX = null; + + /** + * + * + * @var int + */ + public $cropY = null; + + /** + * + * + * @var int + */ + public $cropWidth = null; + + /** + * + * + * @var int + */ + public $cropHeight = null; + + /** + * + * + * @var float + */ + public $videoOffset = null; + + /** + * + * + * @var int + */ + public $width = null; + + /** + * + * + * @var int + */ + public $height = null; + + /** + * + * + * @var float + */ + public $scaleWidth = null; + + /** + * + * + * @var float + */ + public $scaleHeight = null; + + /** + * Hexadecimal value + * + * + * @var string + */ + public $backgroundColor = null; + + /** + * Id of the flavor params or the thumbnail params to be used as source for the thumbnail creation + * + * + * @var int + */ + public $sourceParamsId = null; + + /** + * The container format of the Flavor Params + * + * + * @var KalturaContainerFormat + */ + public $format = null; + + /** + * The image density (dpi) for example: 72 or 96 + * + * + * @var int + */ + public $density = null; + + /** + * Strip profiles and comments + * + * + * @var bool + */ + public $stripProfiles = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaThumbParamsListResponse extends KalturaObjectBase +{ + /** + * + * + * @var array of KalturaThumbParams + * @readonly + */ + public $objects; + + /** + * + * + * @var int + * @readonly + */ + public $totalCount = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaThumbParamsOutput extends KalturaThumbParams +{ + /** + * + * + * @var int + */ + public $thumbParamsId = null; + + /** + * + * + * @var string + */ + public $thumbParamsVersion = null; + + /** + * + * + * @var string + */ + public $thumbAssetId = null; + + /** + * + * + * @var string + */ + public $thumbAssetVersion = null; + + /** + * + * + * @var int + */ + public $rotate = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaThumbParamsOutputListResponse extends KalturaObjectBase +{ + /** + * + * + * @var array of KalturaThumbParamsOutput + * @readonly + */ + public $objects; + + /** + * + * + * @var int + * @readonly + */ + public $totalCount = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaThumbnailServeOptions extends KalturaObjectBase +{ + /** + * + * + * @var bool + */ + public $download = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaUiConf extends KalturaObjectBase +{ + /** + * + * + * @var int + * @readonly + */ + public $id = null; + + /** + * Name of the uiConf, this is not a primary key + * + * + * @var string + */ + public $name = null; + + /** + * + * + * @var string + */ + public $description = null; + + /** + * + * + * @var int + * @readonly + */ + public $partnerId = null; + + /** + * + * + * @var KalturaUiConfObjType + */ + public $objType = null; + + /** + * + * + * @var string + * @readonly + */ + public $objTypeAsString = null; + + /** + * + * + * @var int + */ + public $width = null; + + /** + * + * + * @var int + */ + public $height = null; + + /** + * + * + * @var string + */ + public $htmlParams = null; + + /** + * + * + * @var string + */ + public $swfUrl = null; + + /** + * + * + * @var string + * @readonly + */ + public $confFilePath = null; + + /** + * + * + * @var string + */ + public $confFile = null; + + /** + * + * + * @var string + */ + public $confFileFeatures = null; + + /** + * + * + * @var string + */ + public $config = null; + + /** + * + * + * @var string + */ + public $confVars = null; + + /** + * + * + * @var bool + */ + public $useCdn = null; + + /** + * + * + * @var string + */ + public $tags = null; + + /** + * + * + * @var string + */ + public $swfUrlVersion = null; + + /** + * Entry creation date as Unix timestamp (In seconds) + * + * + * @var int + * @readonly + */ + public $createdAt = null; + + /** + * Entry creation date as Unix timestamp (In seconds) + * + * + * @var int + * @readonly + */ + public $updatedAt = null; + + /** + * + * + * @var KalturaUiConfCreationMode + */ + public $creationMode = null; + + /** + * + * + * @var string + */ + public $html5Url = null; + + /** + * UiConf version + * + * + * @var string + * @readonly + */ + public $version = null; + + /** + * + * + * @var string + */ + public $partnerTags = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaUiConfListResponse extends KalturaObjectBase +{ + /** + * + * + * @var array of KalturaUiConf + * @readonly + */ + public $objects; + + /** + * + * + * @var int + * @readonly + */ + public $totalCount = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaUiConfTypeInfo extends KalturaObjectBase +{ + /** + * UiConf Type + * + * + * @var KalturaUiConfObjType + */ + public $type = null; + + /** + * Available versions + * + * + * @var array of KalturaString + */ + public $versions; + + /** + * The direcotry this type is saved at + * + * + * @var string + */ + public $directory = null; + + /** + * Filename for this UiConf type + * + * + * @var string + */ + public $filename = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaUploadResponse extends KalturaObjectBase +{ + /** + * + * + * @var string + */ + public $uploadTokenId = null; + + /** + * + * + * @var int + */ + public $fileSize = null; + + /** + * + * + * @var KalturaUploadErrorCode + */ + public $errorCode = null; + + /** + * + * + * @var string + */ + public $errorDescription = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaUploadToken extends KalturaObjectBase +{ + /** + * Upload token unique ID + * + * + * @var string + * @readonly + */ + public $id = null; + + /** + * Partner ID of the upload token + * + * + * @var int + * @readonly + */ + public $partnerId = null; + + /** + * User id for the upload token + * + * + * @var string + * @readonly + */ + public $userId = null; + + /** + * Status of the upload token + * + * + * @var KalturaUploadTokenStatus + * @readonly + */ + public $status = null; + + /** + * Name of the file for the upload token, can be empty when the upload token is created and will be updated internally after the file is uploaded + * + * + * @var string + * @insertonly + */ + public $fileName = null; + + /** + * File size in bytes, can be empty when the upload token is created and will be updated internally after the file is uploaded + * + * + * @var float + * @insertonly + */ + public $fileSize = null; + + /** + * Uploaded file size in bytes, can be used to identify how many bytes were uploaded before resuming + * + * + * @var float + * @readonly + */ + public $uploadedFileSize = null; + + /** + * Creation date as Unix timestamp (In seconds) + * + * + * @var int + * @readonly + */ + public $createdAt = null; + + /** + * Last update date as Unix timestamp (In seconds) + * + * + * @var int + * @readonly + */ + public $updatedAt = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaUploadTokenListResponse extends KalturaObjectBase +{ + /** + * + * + * @var array of KalturaUploadToken + * @readonly + */ + public $objects; + + /** + * + * + * @var int + * @readonly + */ + public $totalCount = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaUser extends KalturaObjectBase +{ + /** + * + * + * @var string + */ + public $id = null; + + /** + * + * + * @var int + * @readonly + */ + public $partnerId = null; + + /** + * + * + * @var string + */ + public $screenName = null; + + /** + * + * + * @var string + */ + public $fullName = null; + + /** + * + * + * @var string + */ + public $email = null; + + /** + * + * + * @var int + */ + public $dateOfBirth = null; + + /** + * + * + * @var string + */ + public $country = null; + + /** + * + * + * @var string + */ + public $state = null; + + /** + * + * + * @var string + */ + public $city = null; + + /** + * + * + * @var string + */ + public $zip = null; + + /** + * + * + * @var string + */ + public $thumbnailUrl = null; + + /** + * + * + * @var string + */ + public $description = null; + + /** + * + * + * @var string + */ + public $tags = null; + + /** + * Admin tags can be updated only by using an admin session + * + * + * @var string + */ + public $adminTags = null; + + /** + * + * + * @var KalturaGender + */ + public $gender = null; + + /** + * + * + * @var KalturaUserStatus + */ + public $status = null; + + /** + * Creation date as Unix timestamp (In seconds) + * + * + * @var int + * @readonly + */ + public $createdAt = null; + + /** + * Last update date as Unix timestamp (In seconds) + * + * + * @var int + * @readonly + */ + public $updatedAt = null; + + /** + * Can be used to store various partner related data as a string + * + * + * @var string + */ + public $partnerData = null; + + /** + * + * + * @var int + */ + public $indexedPartnerDataInt = null; + + /** + * + * + * @var string + */ + public $indexedPartnerDataString = null; + + /** + * + * + * @var int + * @readonly + */ + public $storageSize = null; + + /** + * + * + * @var string + * @insertonly + */ + public $password = null; + + /** + * + * + * @var string + */ + public $firstName = null; + + /** + * + * + * @var string + */ + public $lastName = null; + + /** + * + * + * @var bool + */ + public $isAdmin = null; + + /** + * + * + * @var KalturaLanguageCode + */ + public $language = null; + + /** + * + * + * @var int + * @readonly + */ + public $lastLoginTime = null; + + /** + * + * + * @var int + * @readonly + */ + public $statusUpdatedAt = null; + + /** + * + * + * @var int + * @readonly + */ + public $deletedAt = null; + + /** + * + * + * @var bool + * @readonly + */ + public $loginEnabled = null; + + /** + * + * + * @var string + */ + public $roleIds = null; + + /** + * + * + * @var string + * @readonly + */ + public $roleNames = null; + + /** + * + * + * @var bool + * @readonly + */ + public $isAccountOwner = null; + + /** + * + * + * @var string + */ + public $allowedPartnerIds = null; + + /** + * + * + * @var string + */ + public $allowedPartnerPackages = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaUserListResponse extends KalturaObjectBase +{ + /** + * + * + * @var array of KalturaUser + * @readonly + */ + public $objects; + + /** + * + * + * @var int + * @readonly + */ + public $totalCount = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaUserRole extends KalturaObjectBase +{ + /** + * + * + * @var int + * @readonly + */ + public $id = null; + + /** + * + * + * @var string + */ + public $name = null; + + /** + * + * + * @var string + */ + public $systemName = null; + + /** + * + * + * @var string + */ + public $description = null; + + /** + * + * + * @var KalturaUserRoleStatus + */ + public $status = null; + + /** + * + * + * @var int + * @readonly + */ + public $partnerId = null; + + /** + * + * + * @var string + */ + public $permissionNames = null; + + /** + * + * + * @var string + */ + public $tags = null; + + /** + * + * + * @var int + * @readonly + */ + public $createdAt = null; + + /** + * + * + * @var int + * @readonly + */ + public $updatedAt = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaUserRoleListResponse extends KalturaObjectBase +{ + /** + * + * + * @var array of KalturaUserRole + * @readonly + */ + public $objects; + + /** + * + * + * @var int + * @readonly + */ + public $totalCount = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaWidget extends KalturaObjectBase +{ + /** + * + * + * @var string + * @readonly + */ + public $id = null; + + /** + * + * + * @var string + */ + public $sourceWidgetId = null; + + /** + * + * + * @var string + * @readonly + */ + public $rootWidgetId = null; + + /** + * + * + * @var int + * @readonly + */ + public $partnerId = null; + + /** + * + * + * @var string + */ + public $entryId = null; + + /** + * + * + * @var int + */ + public $uiConfId = null; + + /** + * + * + * @var KalturaWidgetSecurityType + */ + public $securityType = null; + + /** + * + * + * @var int + */ + public $securityPolicy = null; + + /** + * + * + * @var int + * @readonly + */ + public $createdAt = null; + + /** + * + * + * @var int + * @readonly + */ + public $updatedAt = null; + + /** + * Can be used to store various partner related data as a string + * + * + * @var string + */ + public $partnerData = null; + + /** + * + * + * @var string + * @readonly + */ + public $widgetHTML = null; + + /** + * Should enforce entitlement on feed entries + * + * + * @var bool + */ + public $enforceEntitlement = null; + + /** + * Set privacy context for search entries that assiged to private and public categories within a category privacy context. + * + * + * @var string + */ + public $privacyContext = null; + + /** + * Addes the HTML5 script line to the widget's embed code + * + * + * @var bool + */ + public $addEmbedHtml5Support = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaWidgetListResponse extends KalturaObjectBase +{ + /** + * + * + * @var array of KalturaWidget + * @readonly + */ + public $objects; + + /** + * + * + * @var int + * @readonly + */ + public $totalCount = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +abstract class KalturaAccessControlBaseFilter extends KalturaFilter +{ + /** + * + * + * @var int + */ + public $idEqual = null; + + /** + * + * + * @var string + */ + public $idIn = null; + + /** + * + * + * @var string + */ + public $systemNameEqual = null; + + /** + * + * + * @var string + */ + public $systemNameIn = null; + + /** + * + * + * @var int + */ + public $createdAtGreaterThanOrEqual = null; + + /** + * + * + * @var int + */ + public $createdAtLessThanOrEqual = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaAccessControlBlockAction extends KalturaRuleAction +{ + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaAccessControlLimitFlavorsAction extends KalturaRuleAction +{ + /** + * Comma separated list of flavor ids + * + * + * @var string + */ + public $flavorParamsIds = null; + + /** + * + * + * @var bool + */ + public $isBlockedList = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaAccessControlPreviewAction extends KalturaRuleAction +{ + /** + * + * + * @var int + */ + public $limit = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +abstract class KalturaAccessControlProfileBaseFilter extends KalturaFilter +{ + /** + * + * + * @var int + */ + public $idEqual = null; + + /** + * + * + * @var string + */ + public $idIn = null; + + /** + * + * + * @var string + */ + public $systemNameEqual = null; + + /** + * + * + * @var string + */ + public $systemNameIn = null; + + /** + * + * + * @var int + */ + public $createdAtGreaterThanOrEqual = null; + + /** + * + * + * @var int + */ + public $createdAtLessThanOrEqual = null; + + /** + * + * + * @var int + */ + public $updatedAtGreaterThanOrEqual = null; + + /** + * + * + * @var int + */ + public $updatedAtLessThanOrEqual = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaAdminUser extends KalturaUser +{ + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaAmazonS3StorageProfile extends KalturaStorageProfile +{ + /** + * + * + * @var KalturaAmazonS3StorageProfileFilesPermissionLevel + */ + public $filesPermissionInS3 = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaApiActionPermissionItem extends KalturaPermissionItem +{ + /** + * + * + * @var string + */ + public $service = null; + + /** + * + * + * @var string + */ + public $action = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaApiParameterPermissionItem extends KalturaPermissionItem +{ + /** + * + * + * @var string + */ + public $object = null; + + /** + * + * + * @var string + */ + public $parameter = null; + + /** + * + * + * @var KalturaApiParameterPermissionItemAction + */ + public $action = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +abstract class KalturaAssetBaseFilter extends KalturaFilter +{ + /** + * + * + * @var string + */ + public $idEqual = null; + + /** + * + * + * @var string + */ + public $idIn = null; + + /** + * + * + * @var string + */ + public $entryIdEqual = null; + + /** + * + * + * @var string + */ + public $entryIdIn = null; + + /** + * + * + * @var int + */ + public $partnerIdEqual = null; + + /** + * + * + * @var string + */ + public $partnerIdIn = null; + + /** + * + * + * @var int + */ + public $sizeGreaterThanOrEqual = null; + + /** + * + * + * @var int + */ + public $sizeLessThanOrEqual = null; + + /** + * + * + * @var string + */ + public $tagsLike = null; + + /** + * + * + * @var string + */ + public $tagsMultiLikeOr = null; + + /** + * + * + * @var string + */ + public $tagsMultiLikeAnd = null; + + /** + * + * + * @var int + */ + public $createdAtGreaterThanOrEqual = null; + + /** + * + * + * @var int + */ + public $createdAtLessThanOrEqual = null; + + /** + * + * + * @var int + */ + public $updatedAtGreaterThanOrEqual = null; + + /** + * + * + * @var int + */ + public $updatedAtLessThanOrEqual = null; + + /** + * + * + * @var int + */ + public $deletedAtGreaterThanOrEqual = null; + + /** + * + * + * @var int + */ + public $deletedAtLessThanOrEqual = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +abstract class KalturaAssetParamsBaseFilter extends KalturaFilter +{ + /** + * + * + * @var string + */ + public $systemNameEqual = null; + + /** + * + * + * @var string + */ + public $systemNameIn = null; + + /** + * + * + * @var KalturaNullableBoolean + */ + public $isSystemDefaultEqual = null; + + /** + * + * + * @var string + */ + public $tagsEqual = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaAssetParamsOutput extends KalturaAssetParams +{ + /** + * + * + * @var int + */ + public $assetParamsId = null; + + /** + * + * + * @var string + */ + public $assetParamsVersion = null; + + /** + * + * + * @var string + */ + public $assetId = null; + + /** + * + * + * @var string + */ + public $assetVersion = null; + + /** + * + * + * @var int + */ + public $readyBehavior = null; + + /** + * The container format of the Flavor Params + * + * + * @var KalturaContainerFormat + */ + public $format = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaAssetPropertiesCompareCondition extends KalturaCondition +{ + /** + * Array of key/value objects that holds the property and the value to find and compare on an asset object + * + * + * @var array of KalturaKeyValue + */ + public $properties; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaAssetsParamsResourceContainers extends KalturaResource +{ + /** + * Array of resources associated with asset params ids + * + * + * @var array of KalturaAssetParamsResourceContainer + */ + public $resources; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaAuthenticatedCondition extends KalturaCondition +{ + /** + * The privelege needed to remove the restriction + * + * + * @var array of KalturaStringValue + */ + public $privileges; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +abstract class KalturaBaseSyndicationFeedBaseFilter extends KalturaFilter +{ + +} + +/** + * @package Kaltura + * @subpackage Client + */ +abstract class KalturaBatchJobBaseFilter extends KalturaFilter +{ + /** + * + * + * @var int + */ + public $idEqual = null; + + /** + * + * + * @var int + */ + public $idGreaterThanOrEqual = null; + + /** + * + * + * @var int + */ + public $partnerIdEqual = null; + + /** + * + * + * @var string + */ + public $partnerIdIn = null; + + /** + * + * + * @var string + */ + public $partnerIdNotIn = null; + + /** + * + * + * @var int + */ + public $createdAtGreaterThanOrEqual = null; + + /** + * + * + * @var int + */ + public $createdAtLessThanOrEqual = null; + + /** + * + * + * @var int + */ + public $updatedAtGreaterThanOrEqual = null; + + /** + * + * + * @var int + */ + public $updatedAtLessThanOrEqual = null; + + /** + * + * + * @var int + */ + public $executionAttemptsGreaterThanOrEqual = null; + + /** + * + * + * @var int + */ + public $executionAttemptsLessThanOrEqual = null; + + /** + * + * + * @var int + */ + public $lockVersionGreaterThanOrEqual = null; + + /** + * + * + * @var int + */ + public $lockVersionLessThanOrEqual = null; + + /** + * + * + * @var string + */ + public $entryIdEqual = null; + + /** + * + * + * @var KalturaBatchJobType + */ + public $jobTypeEqual = null; + + /** + * + * + * @var string + */ + public $jobTypeIn = null; + + /** + * + * + * @var string + */ + public $jobTypeNotIn = null; + + /** + * + * + * @var int + */ + public $jobSubTypeEqual = null; + + /** + * + * + * @var string + */ + public $jobSubTypeIn = null; + + /** + * + * + * @var string + */ + public $jobSubTypeNotIn = null; + + /** + * + * + * @var KalturaBatchJobStatus + */ + public $statusEqual = null; + + /** + * + * + * @var string + */ + public $statusIn = null; + + /** + * + * + * @var string + */ + public $statusNotIn = null; + + /** + * + * + * @var int + */ + public $priorityGreaterThanOrEqual = null; + + /** + * + * + * @var int + */ + public $priorityLessThanOrEqual = null; + + /** + * + * + * @var int + */ + public $priorityEqual = null; + + /** + * + * + * @var string + */ + public $priorityIn = null; + + /** + * + * + * @var string + */ + public $priorityNotIn = null; + + /** + * + * + * @var int + */ + public $batchVersionGreaterThanOrEqual = null; + + /** + * + * + * @var int + */ + public $batchVersionLessThanOrEqual = null; + + /** + * + * + * @var int + */ + public $batchVersionEqual = null; + + /** + * + * + * @var int + */ + public $queueTimeGreaterThanOrEqual = null; + + /** + * + * + * @var int + */ + public $queueTimeLessThanOrEqual = null; + + /** + * + * + * @var int + */ + public $finishTimeGreaterThanOrEqual = null; + + /** + * + * + * @var int + */ + public $finishTimeLessThanOrEqual = null; + + /** + * + * + * @var KalturaBatchJobErrorTypes + */ + public $errTypeEqual = null; + + /** + * + * + * @var string + */ + public $errTypeIn = null; + + /** + * + * + * @var string + */ + public $errTypeNotIn = null; + + /** + * + * + * @var int + */ + public $errNumberEqual = null; + + /** + * + * + * @var string + */ + public $errNumberIn = null; + + /** + * + * + * @var string + */ + public $errNumberNotIn = null; + + /** + * + * + * @var int + */ + public $estimatedEffortLessThan = null; + + /** + * + * + * @var int + */ + public $estimatedEffortGreaterThan = null; + + /** + * + * + * @var int + */ + public $urgencyLessThanOrEqual = null; + + /** + * + * + * @var int + */ + public $urgencyGreaterThanOrEqual = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaBooleanValue extends KalturaValue +{ + /** + * + * + * @var bool + */ + public $value = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaBulkDownloadJobData extends KalturaJobData +{ + /** + * Comma separated list of entry ids + * + * + * @var string + */ + public $entryIds = null; + + /** + * Flavor params id to use for conversion + * + * + * @var int + */ + public $flavorParamsId = null; + + /** + * The id of the requesting user + * + * + * @var string + */ + public $puserId = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +abstract class KalturaBulkUploadBaseFilter extends KalturaFilter +{ + /** + * + * + * @var int + */ + public $uploadedOnGreaterThanOrEqual = null; + + /** + * + * + * @var int + */ + public $uploadedOnLessThanOrEqual = null; + + /** + * + * + * @var int + */ + public $uploadedOnEqual = null; + + /** + * + * + * @var string + */ + public $statusIn = null; + + /** + * + * + * @var KalturaBatchJobStatus + */ + public $statusEqual = null; + + /** + * + * + * @var KalturaBulkUploadObjectType + */ + public $bulkUploadObjectTypeEqual = null; + + /** + * + * + * @var string + */ + public $bulkUploadObjectTypeIn = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaBulkUploadCategoryData extends KalturaBulkUploadObjectData +{ + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaBulkUploadCategoryEntryData extends KalturaBulkUploadObjectData +{ + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaBulkUploadCategoryUserData extends KalturaBulkUploadObjectData +{ + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaBulkUploadEntryData extends KalturaBulkUploadObjectData +{ + /** + * Selected profile id for all bulk entries + * + * + * @var int + */ + public $conversionProfileId = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaBulkUploadJobData extends KalturaJobData +{ + /** + * + * + * @var string + * @readonly + */ + public $userId = null; + + /** + * The screen name of the user + * + * + * @var string + * @readonly + */ + public $uploadedBy = null; + + /** + * Selected profile id for all bulk entries + * + * + * @var int + * @readonly + */ + public $conversionProfileId = null; + + /** + * Created by the API + * + * + * @var string + * @readonly + */ + public $resultsFileLocalPath = null; + + /** + * Created by the API + * + * + * @var string + * @readonly + */ + public $resultsFileUrl = null; + + /** + * Number of created entries + * + * + * @var int + * @readonly + */ + public $numOfEntries = null; + + /** + * Number of created objects + * + * + * @var int + * @readonly + */ + public $numOfObjects = null; + + /** + * The bulk upload file path + * + * + * @var string + * @readonly + */ + public $filePath = null; + + /** + * Type of object for bulk upload + * + * + * @var KalturaBulkUploadObjectType + * @readonly + */ + public $bulkUploadObjectType = null; + + /** + * Friendly name of the file, used to be recognized later in the logs. + * + * + * @var string + */ + public $fileName = null; + + /** + * Data pertaining to the objects being uploaded + * + * + * @var KalturaBulkUploadObjectData + * @readonly + */ + public $objectData; + + /** + * Type of bulk upload + * + * + * @var KalturaBulkUploadType + * @readonly + */ + public $type = null; + + /** + * Recipients of the email for bulk upload success/failure + * + * + * @var string + */ + public $emailRecipients = null; + + /** + * Number of objects that finished on error status + * + * + * @var int + */ + public $numOfErrorObjects = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaBulkUploadResultCategory extends KalturaBulkUploadResult +{ + /** + * + * + * @var string + */ + public $relativePath = null; + + /** + * + * + * @var string + */ + public $name = null; + + /** + * + * + * @var string + */ + public $referenceId = null; + + /** + * + * + * @var string + */ + public $description = null; + + /** + * + * + * @var string + */ + public $tags = null; + + /** + * + * + * @var int + */ + public $appearInList = null; + + /** + * + * + * @var int + */ + public $privacy = null; + + /** + * + * + * @var int + */ + public $inheritanceType = null; + + /** + * + * + * @var int + */ + public $userJoinPolicy = null; + + /** + * + * + * @var int + */ + public $defaultPermissionLevel = null; + + /** + * + * + * @var string + */ + public $owner = null; + + /** + * + * + * @var int + */ + public $contributionPolicy = null; + + /** + * + * + * @var int + */ + public $partnerSortValue = null; + + /** + * + * + * @var bool + */ + public $moderation = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaBulkUploadResultCategoryEntry extends KalturaBulkUploadResult +{ + /** + * + * + * @var int + */ + public $categoryId = null; + + /** + * + * + * @var string + */ + public $entryId = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaBulkUploadResultCategoryUser extends KalturaBulkUploadResult +{ + /** + * + * + * @var int + */ + public $categoryId = null; + + /** + * + * + * @var string + */ + public $categoryReferenceId = null; + + /** + * + * + * @var string + */ + public $userId = null; + + /** + * + * + * @var int + */ + public $permissionLevel = null; + + /** + * + * + * @var int + */ + public $updateMethod = null; + + /** + * + * + * @var int + */ + public $requiredObjectStatus = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaBulkUploadResultEntry extends KalturaBulkUploadResult +{ + /** + * + * + * @var string + */ + public $entryId = null; + + /** + * + * + * @var string + */ + public $title = null; + + /** + * + * + * @var string + */ + public $description = null; + + /** + * + * + * @var string + */ + public $tags = null; + + /** + * + * + * @var string + */ + public $url = null; + + /** + * + * + * @var string + */ + public $contentType = null; + + /** + * + * + * @var int + */ + public $conversionProfileId = null; + + /** + * + * + * @var int + */ + public $accessControlProfileId = null; + + /** + * + * + * @var string + */ + public $category = null; + + /** + * + * + * @var int + */ + public $scheduleStartDate = null; + + /** + * + * + * @var int + */ + public $scheduleEndDate = null; + + /** + * + * + * @var int + */ + public $entryStatus = null; + + /** + * + * + * @var string + */ + public $thumbnailUrl = null; + + /** + * + * + * @var bool + */ + public $thumbnailSaved = null; + + /** + * + * + * @var string + */ + public $sshPrivateKey = null; + + /** + * + * + * @var string + */ + public $sshPublicKey = null; + + /** + * + * + * @var string + */ + public $sshKeyPassphrase = null; + + /** + * + * + * @var string + */ + public $creatorId = null; + + /** + * + * + * @var string + */ + public $entitledUsersEdit = null; + + /** + * + * + * @var string + */ + public $entitledUsersPublish = null; + + /** + * + * + * @var string + */ + public $ownerId = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaBulkUploadResultUser extends KalturaBulkUploadResult +{ + /** + * + * + * @var string + */ + public $userId = null; + + /** + * + * + * @var string + */ + public $screenName = null; + + /** + * + * + * @var string + */ + public $email = null; + + /** + * + * + * @var string + */ + public $description = null; + + /** + * + * + * @var string + */ + public $tags = null; + + /** + * + * + * @var int + */ + public $dateOfBirth = null; + + /** + * + * + * @var string + */ + public $country = null; + + /** + * + * + * @var string + */ + public $state = null; + + /** + * + * + * @var string + */ + public $city = null; + + /** + * + * + * @var string + */ + public $zip = null; + + /** + * + * + * @var int + */ + public $gender = null; + + /** + * + * + * @var string + */ + public $firstName = null; + + /** + * + * + * @var string + */ + public $lastName = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaBulkUploadUserData extends KalturaBulkUploadObjectData +{ + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaCaptureThumbJobData extends KalturaJobData +{ + /** + * + * + * @var string + */ + public $srcFileSyncLocalPath = null; + + /** + * The translated path as used by the scheduler + * + * + * @var string + */ + public $actualSrcFileSyncLocalPath = null; + + /** + * + * + * @var string + */ + public $srcFileSyncRemoteUrl = null; + + /** + * + * + * @var int + */ + public $thumbParamsOutputId = null; + + /** + * + * + * @var string + */ + public $thumbAssetId = null; + + /** + * + * + * @var string + */ + public $srcAssetId = null; + + /** + * + * + * @var KalturaAssetType + */ + public $srcAssetType = null; + + /** + * + * + * @var string + */ + public $thumbPath = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +abstract class KalturaCategoryBaseFilter extends KalturaFilter +{ + /** + * + * + * @var int + */ + public $idEqual = null; + + /** + * + * + * @var string + */ + public $idIn = null; + + /** + * + * + * @var int + */ + public $parentIdEqual = null; + + /** + * + * + * @var string + */ + public $parentIdIn = null; + + /** + * + * + * @var int + */ + public $depthEqual = null; + + /** + * + * + * @var string + */ + public $fullNameEqual = null; + + /** + * + * + * @var string + */ + public $fullNameStartsWith = null; + + /** + * + * + * @var string + */ + public $fullNameIn = null; + + /** + * + * + * @var string + */ + public $fullIdsEqual = null; + + /** + * + * + * @var string + */ + public $fullIdsStartsWith = null; + + /** + * + * + * @var string + */ + public $fullIdsMatchOr = null; + + /** + * + * + * @var int + */ + public $createdAtGreaterThanOrEqual = null; + + /** + * + * + * @var int + */ + public $createdAtLessThanOrEqual = null; + + /** + * + * + * @var int + */ + public $updatedAtGreaterThanOrEqual = null; + + /** + * + * + * @var int + */ + public $updatedAtLessThanOrEqual = null; + + /** + * + * + * @var string + */ + public $tagsLike = null; + + /** + * + * + * @var string + */ + public $tagsMultiLikeOr = null; + + /** + * + * + * @var string + */ + public $tagsMultiLikeAnd = null; + + /** + * + * + * @var KalturaAppearInListType + */ + public $appearInListEqual = null; + + /** + * + * + * @var KalturaPrivacyType + */ + public $privacyEqual = null; + + /** + * + * + * @var string + */ + public $privacyIn = null; + + /** + * + * + * @var KalturaInheritanceType + */ + public $inheritanceTypeEqual = null; + + /** + * + * + * @var string + */ + public $inheritanceTypeIn = null; + + /** + * + * + * @var string + */ + public $referenceIdEqual = null; + + /** + * + * + * @var KalturaNullableBoolean + */ + public $referenceIdEmpty = null; + + /** + * + * + * @var KalturaContributionPolicyType + */ + public $contributionPolicyEqual = null; + + /** + * + * + * @var int + */ + public $membersCountGreaterThanOrEqual = null; + + /** + * + * + * @var int + */ + public $membersCountLessThanOrEqual = null; + + /** + * + * + * @var int + */ + public $pendingMembersCountGreaterThanOrEqual = null; + + /** + * + * + * @var int + */ + public $pendingMembersCountLessThanOrEqual = null; + + /** + * + * + * @var string + */ + public $privacyContextEqual = null; + + /** + * + * + * @var KalturaCategoryStatus + */ + public $statusEqual = null; + + /** + * + * + * @var string + */ + public $statusIn = null; + + /** + * + * + * @var int + */ + public $inheritedParentIdEqual = null; + + /** + * + * + * @var string + */ + public $inheritedParentIdIn = null; + + /** + * + * + * @var int + */ + public $partnerSortValueGreaterThanOrEqual = null; + + /** + * + * + * @var int + */ + public $partnerSortValueLessThanOrEqual = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaCategoryEntryAdvancedFilter extends KalturaSearchItem +{ + /** + * + * + * @var string + */ + public $categoriesMatchOr = null; + + /** + * + * + * @var string + */ + public $categoryEntryStatusIn = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +abstract class KalturaCategoryEntryBaseFilter extends KalturaFilter +{ + /** + * + * + * @var int + */ + public $categoryIdEqual = null; + + /** + * + * + * @var string + */ + public $categoryIdIn = null; + + /** + * + * + * @var string + */ + public $entryIdEqual = null; + + /** + * + * + * @var string + */ + public $entryIdIn = null; + + /** + * + * + * @var int + */ + public $createdAtGreaterThanOrEqual = null; + + /** + * + * + * @var int + */ + public $createdAtLessThanOrEqual = null; + + /** + * + * + * @var string + */ + public $categoryFullIdsStartsWith = null; + + /** + * + * + * @var KalturaCategoryEntryStatus + */ + public $statusEqual = null; + + /** + * + * + * @var string + */ + public $statusIn = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaCategoryIdentifier extends KalturaObjectIdentifier +{ + /** + * Identifier of the object + * + * + * @var KalturaCategoryIdentifierField + */ + public $identifier = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaCategoryUserAdvancedFilter extends KalturaSearchItem +{ + /** + * + * + * @var string + */ + public $memberIdEq = null; + + /** + * + * + * @var string + */ + public $memberIdIn = null; + + /** + * + * + * @var string + */ + public $memberPermissionsMatchOr = null; + + /** + * + * + * @var string + */ + public $memberPermissionsMatchAnd = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +abstract class KalturaCategoryUserBaseFilter extends KalturaFilter +{ + /** + * + * + * @var int + */ + public $categoryIdEqual = null; + + /** + * + * + * @var string + */ + public $categoryIdIn = null; + + /** + * + * + * @var string + */ + public $userIdEqual = null; + + /** + * + * + * @var string + */ + public $userIdIn = null; + + /** + * + * + * @var KalturaCategoryUserPermissionLevel + */ + public $permissionLevelEqual = null; + + /** + * + * + * @var string + */ + public $permissionLevelIn = null; + + /** + * + * + * @var KalturaCategoryUserStatus + */ + public $statusEqual = null; + + /** + * + * + * @var string + */ + public $statusIn = null; + + /** + * + * + * @var int + */ + public $createdAtGreaterThanOrEqual = null; + + /** + * + * + * @var int + */ + public $createdAtLessThanOrEqual = null; + + /** + * + * + * @var int + */ + public $updatedAtGreaterThanOrEqual = null; + + /** + * + * + * @var int + */ + public $updatedAtLessThanOrEqual = null; + + /** + * + * + * @var KalturaUpdateMethodType + */ + public $updateMethodEqual = null; + + /** + * + * + * @var string + */ + public $updateMethodIn = null; + + /** + * + * + * @var string + */ + public $categoryFullIdsStartsWith = null; + + /** + * + * + * @var string + */ + public $categoryFullIdsEqual = null; + + /** + * + * + * @var string + */ + public $permissionNamesMatchAnd = null; + + /** + * + * + * @var string + */ + public $permissionNamesMatchOr = null; + + /** + * + * + * @var string + */ + public $permissionNamesNotContains = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaClipAttributes extends KalturaOperationAttributes +{ + /** + * Offset in milliseconds + * + * + * @var int + */ + public $offset = null; + + /** + * Duration in milliseconds + * + * + * @var int + */ + public $duration = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaIntegerValue extends KalturaValue +{ + /** + * + * + * @var int + */ + public $value = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +abstract class KalturaCompareCondition extends KalturaCondition +{ + /** + * Value to evaluate against the field and operator + * + * + * @var KalturaIntegerValue + */ + public $value; + + /** + * Comparing operator + * + * + * @var KalturaSearchConditionComparison + */ + public $comparison = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +abstract class KalturaDataCenterContentResource extends KalturaContentResource +{ + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaConcatAttributes extends KalturaOperationAttributes +{ + /** + * The resource to be concatenated + * + * + * @var KalturaDataCenterContentResource + */ + public $resource; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaConcatJobData extends KalturaJobData +{ + /** + * Source files to be concatenated + * + * + * @var array of KalturaString + */ + public $srcFiles; + + /** + * Output file + * + * + * @var string + */ + public $destFilePath = null; + + /** + * Flavor asset to be ingested with the output + * + * + * @var string + */ + public $flavorAssetId = null; + + /** + * Clipping offset in seconds + * + * + * @var float + */ + public $offset = null; + + /** + * Clipping duration in seconds + * + * + * @var float + */ + public $duration = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +abstract class KalturaControlPanelCommandBaseFilter extends KalturaFilter +{ + /** + * + * + * @var int + */ + public $idEqual = null; + + /** + * + * + * @var string + */ + public $idIn = null; + + /** + * + * + * @var int + */ + public $createdAtGreaterThanOrEqual = null; + + /** + * + * + * @var int + */ + public $createdAtLessThanOrEqual = null; + + /** + * + * + * @var int + */ + public $createdByIdEqual = null; + + /** + * + * + * @var KalturaControlPanelCommandType + */ + public $typeEqual = null; + + /** + * + * + * @var string + */ + public $typeIn = null; + + /** + * + * + * @var KalturaControlPanelCommandTargetType + */ + public $targetTypeEqual = null; + + /** + * + * + * @var string + */ + public $targetTypeIn = null; + + /** + * + * + * @var KalturaControlPanelCommandStatus + */ + public $statusEqual = null; + + /** + * + * + * @var string + */ + public $statusIn = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaConvartableJobData extends KalturaJobData +{ + /** + * + * + * @var string + */ + public $srcFileSyncLocalPath = null; + + /** + * The translated path as used by the scheduler + * + * + * @var string + */ + public $actualSrcFileSyncLocalPath = null; + + /** + * + * + * @var string + */ + public $srcFileSyncRemoteUrl = null; + + /** + * + * + * @var array of KalturaSourceFileSyncDescriptor + */ + public $srcFileSyncs; + + /** + * + * + * @var int + */ + public $engineVersion = null; + + /** + * + * + * @var int + */ + public $flavorParamsOutputId = null; + + /** + * + * + * @var KalturaFlavorParamsOutput + */ + public $flavorParamsOutput; + + /** + * + * + * @var int + */ + public $mediaInfoId = null; + + /** + * + * + * @var int + */ + public $currentOperationSet = null; + + /** + * + * + * @var int + */ + public $currentOperationIndex = null; + + /** + * + * + * @var array of KalturaKeyValue + */ + public $pluginData; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +abstract class KalturaConversionProfileAssetParamsBaseFilter extends KalturaFilter +{ + /** + * + * + * @var int + */ + public $conversionProfileIdEqual = null; + + /** + * + * + * @var string + */ + public $conversionProfileIdIn = null; + + /** + * + * + * @var int + */ + public $assetParamsIdEqual = null; + + /** + * + * + * @var string + */ + public $assetParamsIdIn = null; + + /** + * + * + * @var KalturaFlavorReadyBehaviorType + */ + public $readyBehaviorEqual = null; + + /** + * + * + * @var string + */ + public $readyBehaviorIn = null; + + /** + * + * + * @var KalturaAssetParamsOrigin + */ + public $originEqual = null; + + /** + * + * + * @var string + */ + public $originIn = null; + + /** + * + * + * @var string + */ + public $systemNameEqual = null; + + /** + * + * + * @var string + */ + public $systemNameIn = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +abstract class KalturaConversionProfileBaseFilter extends KalturaFilter +{ + /** + * + * + * @var int + */ + public $idEqual = null; + + /** + * + * + * @var string + */ + public $idIn = null; + + /** + * + * + * @var KalturaConversionProfileStatus + */ + public $statusEqual = null; + + /** + * + * + * @var string + */ + public $statusIn = null; + + /** + * + * + * @var KalturaConversionProfileType + */ + public $typeEqual = null; + + /** + * + * + * @var string + */ + public $typeIn = null; + + /** + * + * + * @var string + */ + public $nameEqual = null; + + /** + * + * + * @var string + */ + public $systemNameEqual = null; + + /** + * + * + * @var string + */ + public $systemNameIn = null; + + /** + * + * + * @var string + */ + public $tagsMultiLikeOr = null; + + /** + * + * + * @var string + */ + public $tagsMultiLikeAnd = null; + + /** + * + * + * @var string + */ + public $defaultEntryIdEqual = null; + + /** + * + * + * @var string + */ + public $defaultEntryIdIn = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaConvertLiveSegmentJobData extends KalturaJobData +{ + /** + * Live stream entry id + * + * + * @var string + */ + public $entryId = null; + + /** + * Primary or secondary media server + * + * + * @var KalturaMediaServerIndex + */ + public $mediaServerIndex = null; + + /** + * The index of the file within the entry + * + * + * @var int + */ + public $fileIndex = null; + + /** + * The recorded live media + * + * + * @var string + */ + public $srcFilePath = null; + + /** + * The output file + * + * + * @var string + */ + public $destFilePath = null; + + /** + * Duration of the live entry including all recorded segments including the current + * + * + * @var float + */ + public $endTime = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaConvertProfileJobData extends KalturaJobData +{ + /** + * + * + * @var string + */ + public $inputFileSyncLocalPath = null; + + /** + * The height of last created thumbnail, will be used to comapare if this thumbnail is the best we can have + * + * + * @var int + */ + public $thumbHeight = null; + + /** + * The bit rate of last created thumbnail, will be used to comapare if this thumbnail is the best we can have + * + * + * @var int + */ + public $thumbBitrate = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaCopyPartnerJobData extends KalturaJobData +{ + /** + * Id of the partner to copy from + * + * + * @var int + */ + public $fromPartnerId = null; + + /** + * Id of the partner to copy to + * + * + * @var int + */ + public $toPartnerId = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaCountryRestriction extends KalturaBaseRestriction +{ + /** + * Country restriction type (Allow or deny) + * + * + * @var KalturaCountryRestrictionType + */ + public $countryRestrictionType = null; + + /** + * Comma separated list of country codes to allow to deny + * + * + * @var string + */ + public $countryList = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaDeleteFileJobData extends KalturaJobData +{ + /** + * + * + * @var string + */ + public $localFileSyncPath = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaDeleteJobData extends KalturaJobData +{ + /** + * The filter should return the list of objects that need to be deleted. + * + * + * @var KalturaFilter + */ + public $filter; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaDirectoryRestriction extends KalturaBaseRestriction +{ + /** + * Kaltura directory restriction type + * + * + * @var KalturaDirectoryRestrictionType + */ + public $directoryRestrictionType = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaCategoryUserFilter extends KalturaCategoryUserBaseFilter +{ + /** + * Return the list of categoryUser that are not inherited from parent category - only the direct categoryUsers. + * + * + * @var bool + */ + public $categoryDirectMembers = null; + + /** + * Free text search on user id or screen name + * + * + * @var string + */ + public $freeText = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +abstract class KalturaUserBaseFilter extends KalturaFilter +{ + /** + * + * + * @var int + */ + public $partnerIdEqual = null; + + /** + * + * + * @var string + */ + public $screenNameLike = null; + + /** + * + * + * @var string + */ + public $screenNameStartsWith = null; + + /** + * + * + * @var string + */ + public $emailLike = null; + + /** + * + * + * @var string + */ + public $emailStartsWith = null; + + /** + * + * + * @var string + */ + public $tagsMultiLikeOr = null; + + /** + * + * + * @var string + */ + public $tagsMultiLikeAnd = null; + + /** + * + * + * @var KalturaUserStatus + */ + public $statusEqual = null; + + /** + * + * + * @var string + */ + public $statusIn = null; + + /** + * + * + * @var int + */ + public $createdAtGreaterThanOrEqual = null; + + /** + * + * + * @var int + */ + public $createdAtLessThanOrEqual = null; + + /** + * + * + * @var string + */ + public $firstNameStartsWith = null; + + /** + * + * + * @var string + */ + public $lastNameStartsWith = null; + + /** + * + * + * @var KalturaNullableBoolean + */ + public $isAdminEqual = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaUserFilter extends KalturaUserBaseFilter +{ + /** + * + * + * @var string + */ + public $idOrScreenNameStartsWith = null; + + /** + * + * + * @var string + */ + public $idEqual = null; + + /** + * + * + * @var string + */ + public $idIn = null; + + /** + * + * + * @var KalturaNullableBoolean + */ + public $loginEnabledEqual = null; + + /** + * + * + * @var string + */ + public $roleIdEqual = null; + + /** + * + * + * @var string + */ + public $roleIdsEqual = null; + + /** + * + * + * @var string + */ + public $roleIdsIn = null; + + /** + * + * + * @var string + */ + public $firstNameOrLastNameStartsWith = null; + + /** + * Permission names filter expression + * + * + * @var string + */ + public $permissionNamesMultiLikeOr = null; + + /** + * Permission names filter expression + * + * + * @var string + */ + public $permissionNamesMultiLikeAnd = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaEntryContext extends KalturaContext +{ + /** + * The entry ID in the context of which the playlist should be built + * + * + * @var string + */ + public $entryId = null; + + /** + * Is this a redirected entry followup? + * + * + * @var KalturaNullableBoolean + */ + public $followEntryRedirect = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaEntryContextDataParams extends KalturaAccessControlScope +{ + /** + * Id of the current flavor. + * + * + * @var string + */ + public $flavorAssetId = null; + + /** + * The tags of the flavors that should be used for playback. + * + * + * @var string + */ + public $flavorTags = null; + + /** + * Playback streamer type: RTMP, HTTP, appleHttps, rtsp, sl. + * + * + * @var string + */ + public $streamerType = null; + + /** + * Protocol of the specific media object. + * + * + * @var string + */ + public $mediaProtocol = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaEntryContextDataResult extends KalturaContextDataResult +{ + /** + * + * + * @var bool + */ + public $isSiteRestricted = null; + + /** + * + * + * @var bool + */ + public $isCountryRestricted = null; + + /** + * + * + * @var bool + */ + public $isSessionRestricted = null; + + /** + * + * + * @var bool + */ + public $isIpAddressRestricted = null; + + /** + * + * + * @var bool + */ + public $isUserAgentRestricted = null; + + /** + * + * + * @var int + */ + public $previewLength = null; + + /** + * + * + * @var bool + */ + public $isScheduledNow = null; + + /** + * + * + * @var bool + */ + public $isAdmin = null; + + /** + * http/rtmp/hdnetwork + * + * + * @var string + */ + public $streamerType = null; + + /** + * http/https, rtmp/rtmpe + * + * + * @var string + */ + public $mediaProtocol = null; + + /** + * + * + * @var string + */ + public $storageProfilesXML = null; + + /** + * Array of messages as received from the access control rules that invalidated + * + * + * @var array of KalturaString + */ + public $accessControlMessages; + + /** + * Array of actions as received from the access control rules that invalidated + * + * + * @var array of KalturaRuleAction + */ + public $accessControlActions; + + /** + * Array of allowed flavor assets according to access control limitations and requested tags + * + * + * @var array of KalturaFlavorAsset + */ + public $flavorAssets; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaEntryIdentifier extends KalturaObjectIdentifier +{ + /** + * Identifier of the object + * + * + * @var KalturaEntryIdentifierField + */ + public $identifier = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +abstract class KalturaBooleanField extends KalturaBooleanValue +{ + +} + +/** + * @package Kaltura + * @subpackage Client + */ +abstract class KalturaFileAssetBaseFilter extends KalturaFilter +{ + /** + * + * + * @var int + */ + public $idEqual = null; + + /** + * + * + * @var string + */ + public $idIn = null; + + /** + * + * + * @var int + */ + public $partnerIdEqual = null; + + /** + * + * + * @var KalturaFileAssetObjectType + */ + public $fileAssetObjectTypeEqual = null; + + /** + * + * + * @var string + */ + public $objectIdEqual = null; + + /** + * + * + * @var string + */ + public $objectIdIn = null; + + /** + * + * + * @var int + */ + public $createdAtGreaterThanOrEqual = null; + + /** + * + * + * @var int + */ + public $createdAtLessThanOrEqual = null; + + /** + * + * + * @var int + */ + public $updatedAtGreaterThanOrEqual = null; + + /** + * + * + * @var int + */ + public $updatedAtLessThanOrEqual = null; + + /** + * + * + * @var KalturaFileAssetStatus + */ + public $statusEqual = null; + + /** + * + * + * @var string + */ + public $statusIn = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaFlattenJobData extends KalturaJobData +{ + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaGenericSyndicationFeed extends KalturaBaseSyndicationFeed +{ + /** + * feed description + * + * + * @var string + */ + public $feedDescription = null; + + /** + * feed landing page (i.e publisher website) + * + * + * @var string + */ + public $feedLandingPage = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaGoogleVideoSyndicationFeed extends KalturaBaseSyndicationFeed +{ + /** + * + * + * @var KalturaGoogleSyndicationFeedAdultValues + */ + public $adultContent = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaITunesSyndicationFeed extends KalturaBaseSyndicationFeed +{ + /** + * feed description + * + * + * @var string + */ + public $feedDescription = null; + + /** + * feed language + * + * + * @var string + */ + public $language = null; + + /** + * feed landing page (i.e publisher website) + * + * + * @var string + */ + public $feedLandingPage = null; + + /** + * author/publisher name + * + * + * @var string + */ + public $ownerName = null; + + /** + * publisher email + * + * + * @var string + */ + public $ownerEmail = null; + + /** + * podcast thumbnail + * + * + * @var string + */ + public $feedImageUrl = null; + + /** + * + * + * @var KalturaITunesSyndicationFeedCategories + * @readonly + */ + public $category = null; + + /** + * + * + * @var KalturaITunesSyndicationFeedAdultValues + */ + public $adultContent = null; + + /** + * + * + * @var string + */ + public $feedAuthor = null; + + /** + * true in case you want to enfore the palylist order on the + * + * + * @var KalturaNullableBoolean + */ + public $enforceOrder = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaImportJobData extends KalturaJobData +{ + /** + * + * + * @var string + */ + public $srcFileUrl = null; + + /** + * + * + * @var string + */ + public $destFileLocalPath = null; + + /** + * + * + * @var string + */ + public $flavorAssetId = null; + + /** + * + * + * @var int + */ + public $fileSize = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaIndexAdvancedFilter extends KalturaSearchItem +{ + /** + * + * + * @var int + */ + public $indexIdGreaterThan = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaIndexJobData extends KalturaJobData +{ + /** + * The filter should return the list of objects that need to be reindexed. + * + * + * @var KalturaFilter + */ + public $filter; + + /** + * Indicates the last id that reindexed, used when the batch crached, to re-run from the last crash point. + * + * + * @var int + */ + public $lastIndexId = null; + + /** + * Indicates that the object columns and attributes values should be recalculated before reindexed. + * + * + * @var bool + */ + public $shouldUpdate = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaIpAddressRestriction extends KalturaBaseRestriction +{ + /** + * Ip address restriction type (Allow or deny) + * + * + * @var KalturaIpAddressRestrictionType + */ + public $ipAddressRestrictionType = null; + + /** + * Comma separated list of ip address to allow to deny + * + * + * @var string + */ + public $ipAddressList = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaLimitFlavorsRestriction extends KalturaBaseRestriction +{ + /** + * Limit flavors restriction type (Allow or deny) + * + * + * @var KalturaLimitFlavorsRestrictionType + */ + public $limitFlavorsRestrictionType = null; + + /** + * Comma separated list of flavor params ids to allow to deny + * + * + * @var string + */ + public $flavorParamsIds = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +abstract class KalturaLiveChannelSegmentBaseFilter extends KalturaFilter +{ + /** + * + * + * @var int + */ + public $createdAtGreaterThanOrEqual = null; + + /** + * + * + * @var int + */ + public $createdAtLessThanOrEqual = null; + + /** + * + * + * @var int + */ + public $updatedAtGreaterThanOrEqual = null; + + /** + * + * + * @var int + */ + public $updatedAtLessThanOrEqual = null; + + /** + * + * + * @var KalturaLiveChannelSegmentStatus + */ + public $statusEqual = null; + + /** + * + * + * @var string + */ + public $statusIn = null; + + /** + * + * + * @var string + */ + public $channelIdEqual = null; + + /** + * + * + * @var string + */ + public $channelIdIn = null; + + /** + * + * + * @var float + */ + public $startTimeGreaterThanOrEqual = null; + + /** + * + * + * @var float + */ + public $startTimeLessThanOrEqual = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaMailJobData extends KalturaJobData +{ + /** + * + * + * @var KalturaMailType + */ + public $mailType = null; + + /** + * + * + * @var int + */ + public $mailPriority = null; + + /** + * + * + * @var KalturaMailJobStatus + */ + public $status = null; + + /** + * + * + * @var string + */ + public $recipientName = null; + + /** + * + * + * @var string + */ + public $recipientEmail = null; + + /** + * kuserId + * + * + * @var int + */ + public $recipientId = null; + + /** + * + * + * @var string + */ + public $fromName = null; + + /** + * + * + * @var string + */ + public $fromEmail = null; + + /** + * + * + * @var string + */ + public $bodyParams = null; + + /** + * + * + * @var string + */ + public $subjectParams = null; + + /** + * + * + * @var string + */ + public $templatePath = null; + + /** + * + * + * @var KalturaLanguageCode + */ + public $language = null; + + /** + * + * + * @var int + */ + public $campaignId = null; + + /** + * + * + * @var int + */ + public $minSendDate = null; + + /** + * + * + * @var bool + */ + public $isHtml = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +abstract class KalturaMatchCondition extends KalturaCondition +{ + /** + * + * + * @var array of KalturaStringValue + */ + public $values; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +abstract class KalturaMediaInfoBaseFilter extends KalturaFilter +{ + /** + * + * + * @var string + */ + public $flavorAssetIdEqual = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +abstract class KalturaMediaServerBaseFilter extends KalturaFilter +{ + /** + * + * + * @var int + */ + public $createdAtGreaterThanOrEqual = null; + + /** + * + * + * @var int + */ + public $createdAtLessThanOrEqual = null; + + /** + * + * + * @var int + */ + public $updatedAtGreaterThanOrEqual = null; + + /** + * + * + * @var int + */ + public $updatedAtLessThanOrEqual = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaMoveCategoryEntriesJobData extends KalturaJobData +{ + /** + * Source category id + * + * + * @var int + */ + public $srcCategoryId = null; + + /** + * Destination category id + * + * + * @var int + */ + public $destCategoryId = null; + + /** + * Saves the last category id that its entries moved completely + * In case of crash the batch will restart from that point + * + * + * @var int + */ + public $lastMovedCategoryId = null; + + /** + * Saves the last page index of the child categories filter pager + * In case of crash the batch will restart from that point + * + * + * @var int + */ + public $lastMovedCategoryPageIndex = null; + + /** + * Saves the last page index of the category entries filter pager + * In case of crash the batch will restart from that point + * + * + * @var int + */ + public $lastMovedCategoryEntryPageIndex = null; + + /** + * All entries from all child categories will be moved as well + * + * + * @var bool + */ + public $moveFromChildren = null; + + /** + * Entries won't be deleted from the source entry + * + * + * @var bool + */ + public $copyOnly = null; + + /** + * Destination categories fallback ids + * + * + * @var string + */ + public $destCategoryFullIds = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaNotificationJobData extends KalturaJobData +{ + /** + * + * + * @var string + */ + public $userId = null; + + /** + * + * + * @var KalturaNotificationType + */ + public $type = null; + + /** + * + * + * @var string + */ + public $typeAsString = null; + + /** + * + * + * @var string + */ + public $objectId = null; + + /** + * + * + * @var KalturaNotificationStatus + */ + public $status = null; + + /** + * + * + * @var string + */ + public $data = null; + + /** + * + * + * @var int + */ + public $numberOfAttempts = null; + + /** + * + * + * @var string + */ + public $notificationResult = null; + + /** + * + * + * @var KalturaNotificationObjectType + */ + public $objType = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +abstract class KalturaPartnerBaseFilter extends KalturaFilter +{ + /** + * + * + * @var int + */ + public $idEqual = null; + + /** + * + * + * @var string + */ + public $idIn = null; + + /** + * + * + * @var string + */ + public $idNotIn = null; + + /** + * + * + * @var string + */ + public $nameLike = null; + + /** + * + * + * @var string + */ + public $nameMultiLikeOr = null; + + /** + * + * + * @var string + */ + public $nameMultiLikeAnd = null; + + /** + * + * + * @var string + */ + public $nameEqual = null; + + /** + * + * + * @var KalturaPartnerStatus + */ + public $statusEqual = null; + + /** + * + * + * @var string + */ + public $statusIn = null; + + /** + * + * + * @var int + */ + public $partnerPackageEqual = null; + + /** + * + * + * @var int + */ + public $partnerPackageGreaterThanOrEqual = null; + + /** + * + * + * @var int + */ + public $partnerPackageLessThanOrEqual = null; + + /** + * + * + * @var KalturaPartnerGroupType + */ + public $partnerGroupTypeEqual = null; + + /** + * + * + * @var string + */ + public $partnerNameDescriptionWebsiteAdminNameAdminEmailLike = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +abstract class KalturaPermissionBaseFilter extends KalturaFilter +{ + /** + * + * + * @var int + */ + public $idEqual = null; + + /** + * + * + * @var string + */ + public $idIn = null; + + /** + * + * + * @var KalturaPermissionType + */ + public $typeEqual = null; + + /** + * + * + * @var string + */ + public $typeIn = null; + + /** + * + * + * @var string + */ + public $nameEqual = null; + + /** + * + * + * @var string + */ + public $nameIn = null; + + /** + * + * + * @var string + */ + public $friendlyNameLike = null; + + /** + * + * + * @var string + */ + public $descriptionLike = null; + + /** + * + * + * @var KalturaPermissionStatus + */ + public $statusEqual = null; + + /** + * + * + * @var string + */ + public $statusIn = null; + + /** + * + * + * @var int + */ + public $partnerIdEqual = null; + + /** + * + * + * @var string + */ + public $partnerIdIn = null; + + /** + * + * + * @var string + */ + public $dependsOnPermissionNamesMultiLikeOr = null; + + /** + * + * + * @var string + */ + public $dependsOnPermissionNamesMultiLikeAnd = null; + + /** + * + * + * @var string + */ + public $tagsMultiLikeOr = null; + + /** + * + * + * @var string + */ + public $tagsMultiLikeAnd = null; + + /** + * + * + * @var int + */ + public $createdAtGreaterThanOrEqual = null; + + /** + * + * + * @var int + */ + public $createdAtLessThanOrEqual = null; + + /** + * + * + * @var int + */ + public $updatedAtGreaterThanOrEqual = null; + + /** + * + * + * @var int + */ + public $updatedAtLessThanOrEqual = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +abstract class KalturaPermissionItemBaseFilter extends KalturaFilter +{ + /** + * + * + * @var int + */ + public $idEqual = null; + + /** + * + * + * @var string + */ + public $idIn = null; + + /** + * + * + * @var KalturaPermissionItemType + */ + public $typeEqual = null; + + /** + * + * + * @var string + */ + public $typeIn = null; + + /** + * + * + * @var int + */ + public $partnerIdEqual = null; + + /** + * + * + * @var string + */ + public $partnerIdIn = null; + + /** + * + * + * @var string + */ + public $tagsMultiLikeOr = null; + + /** + * + * + * @var string + */ + public $tagsMultiLikeAnd = null; + + /** + * + * + * @var int + */ + public $createdAtGreaterThanOrEqual = null; + + /** + * + * + * @var int + */ + public $createdAtLessThanOrEqual = null; + + /** + * + * + * @var int + */ + public $updatedAtGreaterThanOrEqual = null; + + /** + * + * + * @var int + */ + public $updatedAtLessThanOrEqual = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaProvisionJobData extends KalturaJobData +{ + /** + * + * + * @var string + */ + public $streamID = null; + + /** + * + * + * @var string + */ + public $backupStreamID = null; + + /** + * + * + * @var string + */ + public $rtmp = null; + + /** + * + * + * @var string + */ + public $encoderIP = null; + + /** + * + * + * @var string + */ + public $backupEncoderIP = null; + + /** + * + * + * @var string + */ + public $encoderPassword = null; + + /** + * + * + * @var string + */ + public $encoderUsername = null; + + /** + * + * + * @var int + */ + public $endDate = null; + + /** + * + * + * @var string + */ + public $returnVal = null; + + /** + * + * + * @var int + */ + public $mediaType = null; + + /** + * + * + * @var string + */ + public $primaryBroadcastingUrl = null; + + /** + * + * + * @var string + */ + public $secondaryBroadcastingUrl = null; + + /** + * + * + * @var string + */ + public $streamName = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +abstract class KalturaReportBaseFilter extends KalturaFilter +{ + /** + * + * + * @var int + */ + public $idEqual = null; + + /** + * + * + * @var string + */ + public $idIn = null; + + /** + * + * + * @var int + */ + public $partnerIdEqual = null; + + /** + * + * + * @var string + */ + public $partnerIdIn = null; + + /** + * + * + * @var string + */ + public $systemNameEqual = null; + + /** + * + * + * @var string + */ + public $systemNameIn = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaReportInputFilter extends KalturaReportInputBaseFilter +{ + /** + * Search keywords to filter objects + * + * + * @var string + */ + public $keywords = null; + + /** + * Search keywords in onjects tags + * + * + * @var bool + */ + public $searchInTags = null; + + /** + * Search keywords in onjects admin tags + * + * + * @var bool + */ + public $searchInAdminTags = null; + + /** + * Search onjects in specified categories + * + * + * @var string + */ + public $categories = null; + + /** + * Time zone offset in minutes + * + * + * @var int + */ + public $timeZoneOffset = null; + + /** + * Aggregated results according to interval + * + * + * @var KalturaReportInterval + */ + public $interval = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaSearchCondition extends KalturaSearchItem +{ + /** + * + * + * @var string + */ + public $field = null; + + /** + * + * + * @var string + */ + public $value = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaSearchOperator extends KalturaSearchItem +{ + /** + * + * + * @var KalturaSearchOperatorType + */ + public $type = null; + + /** + * + * + * @var array of KalturaSearchItem + */ + public $items; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaSessionRestriction extends KalturaBaseRestriction +{ + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaSiteRestriction extends KalturaBaseRestriction +{ + /** + * The site restriction type (allow or deny) + * + * + * @var KalturaSiteRestrictionType + */ + public $siteRestrictionType = null; + + /** + * Comma separated list of sites (domains) to allow or deny + * + * + * @var string + */ + public $siteList = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaStorageAddAction extends KalturaRuleAction +{ + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaStorageJobData extends KalturaJobData +{ + /** + * + * + * @var string + */ + public $serverUrl = null; + + /** + * + * + * @var string + */ + public $serverUsername = null; + + /** + * + * + * @var string + */ + public $serverPassword = null; + + /** + * + * + * @var bool + */ + public $ftpPassiveMode = null; + + /** + * + * + * @var string + */ + public $srcFileSyncLocalPath = null; + + /** + * + * + * @var string + */ + public $srcFileSyncId = null; + + /** + * + * + * @var string + */ + public $destFileSyncStoredPath = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +abstract class KalturaStorageProfileBaseFilter extends KalturaFilter +{ + /** + * + * + * @var int + */ + public $idEqual = null; + + /** + * + * + * @var string + */ + public $idIn = null; + + /** + * + * + * @var int + */ + public $createdAtGreaterThanOrEqual = null; + + /** + * + * + * @var int + */ + public $createdAtLessThanOrEqual = null; + + /** + * + * + * @var int + */ + public $updatedAtGreaterThanOrEqual = null; + + /** + * + * + * @var int + */ + public $updatedAtLessThanOrEqual = null; + + /** + * + * + * @var int + */ + public $partnerIdEqual = null; + + /** + * + * + * @var string + */ + public $partnerIdIn = null; + + /** + * + * + * @var string + */ + public $systemNameEqual = null; + + /** + * + * + * @var string + */ + public $systemNameIn = null; + + /** + * + * + * @var KalturaStorageProfileStatus + */ + public $statusEqual = null; + + /** + * + * + * @var string + */ + public $statusIn = null; + + /** + * + * + * @var KalturaStorageProfileProtocol + */ + public $protocolEqual = null; + + /** + * + * + * @var string + */ + public $protocolIn = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaTubeMogulSyndicationFeed extends KalturaBaseSyndicationFeed +{ + /** + * + * + * @var KalturaTubeMogulSyndicationFeedCategories + * @readonly + */ + public $category = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +abstract class KalturaUiConfBaseFilter extends KalturaFilter +{ + /** + * + * + * @var int + */ + public $idEqual = null; + + /** + * + * + * @var string + */ + public $idIn = null; + + /** + * + * + * @var string + */ + public $nameLike = null; + + /** + * + * + * @var int + */ + public $partnerIdEqual = null; + + /** + * + * + * @var string + */ + public $partnerIdIn = null; + + /** + * + * + * @var KalturaUiConfObjType + */ + public $objTypeEqual = null; + + /** + * + * + * @var string + */ + public $objTypeIn = null; + + /** + * + * + * @var string + */ + public $tagsMultiLikeOr = null; + + /** + * + * + * @var string + */ + public $tagsMultiLikeAnd = null; + + /** + * + * + * @var int + */ + public $createdAtGreaterThanOrEqual = null; + + /** + * + * + * @var int + */ + public $createdAtLessThanOrEqual = null; + + /** + * + * + * @var int + */ + public $updatedAtGreaterThanOrEqual = null; + + /** + * + * + * @var int + */ + public $updatedAtLessThanOrEqual = null; + + /** + * + * + * @var KalturaUiConfCreationMode + */ + public $creationModeEqual = null; + + /** + * + * + * @var string + */ + public $creationModeIn = null; + + /** + * + * + * @var string + */ + public $versionEqual = null; + + /** + * + * + * @var string + */ + public $versionMultiLikeOr = null; + + /** + * + * + * @var string + */ + public $versionMultiLikeAnd = null; + + /** + * + * + * @var string + */ + public $partnerTagsMultiLikeOr = null; + + /** + * + * + * @var string + */ + public $partnerTagsMultiLikeAnd = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +abstract class KalturaUploadTokenBaseFilter extends KalturaFilter +{ + /** + * + * + * @var string + */ + public $idEqual = null; + + /** + * + * + * @var string + */ + public $idIn = null; + + /** + * + * + * @var string + */ + public $userIdEqual = null; + + /** + * + * + * @var KalturaUploadTokenStatus + */ + public $statusEqual = null; + + /** + * + * + * @var string + */ + public $statusIn = null; + + /** + * + * + * @var string + */ + public $fileNameEqual = null; + + /** + * + * + * @var float + */ + public $fileSizeEqual = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaUserAgentRestriction extends KalturaBaseRestriction +{ + /** + * User agent restriction type (Allow or deny) + * + * + * @var KalturaUserAgentRestrictionType + */ + public $userAgentRestrictionType = null; + + /** + * A comma seperated list of user agent regular expressions + * + * + * @var string + */ + public $userAgentRegexList = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +abstract class KalturaUserLoginDataBaseFilter extends KalturaFilter +{ + /** + * + * + * @var string + */ + public $loginEmailEqual = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +abstract class KalturaUserRoleBaseFilter extends KalturaFilter +{ + /** + * + * + * @var int + */ + public $idEqual = null; + + /** + * + * + * @var string + */ + public $idIn = null; + + /** + * + * + * @var string + */ + public $nameEqual = null; + + /** + * + * + * @var string + */ + public $nameIn = null; + + /** + * + * + * @var string + */ + public $systemNameEqual = null; + + /** + * + * + * @var string + */ + public $systemNameIn = null; + + /** + * + * + * @var string + */ + public $descriptionLike = null; + + /** + * + * + * @var KalturaUserRoleStatus + */ + public $statusEqual = null; + + /** + * + * + * @var string + */ + public $statusIn = null; + + /** + * + * + * @var int + */ + public $partnerIdEqual = null; + + /** + * + * + * @var string + */ + public $partnerIdIn = null; + + /** + * + * + * @var string + */ + public $tagsMultiLikeOr = null; + + /** + * + * + * @var string + */ + public $tagsMultiLikeAnd = null; + + /** + * + * + * @var int + */ + public $createdAtGreaterThanOrEqual = null; + + /** + * + * + * @var int + */ + public $createdAtLessThanOrEqual = null; + + /** + * + * + * @var int + */ + public $updatedAtGreaterThanOrEqual = null; + + /** + * + * + * @var int + */ + public $updatedAtLessThanOrEqual = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +abstract class KalturaWidgetBaseFilter extends KalturaFilter +{ + /** + * + * + * @var string + */ + public $idEqual = null; + + /** + * + * + * @var string + */ + public $idIn = null; + + /** + * + * + * @var string + */ + public $sourceWidgetIdEqual = null; + + /** + * + * + * @var string + */ + public $rootWidgetIdEqual = null; + + /** + * + * + * @var int + */ + public $partnerIdEqual = null; + + /** + * + * + * @var string + */ + public $entryIdEqual = null; + + /** + * + * + * @var int + */ + public $uiConfIdEqual = null; + + /** + * + * + * @var int + */ + public $createdAtGreaterThanOrEqual = null; + + /** + * + * + * @var int + */ + public $createdAtLessThanOrEqual = null; + + /** + * + * + * @var int + */ + public $updatedAtGreaterThanOrEqual = null; + + /** + * + * + * @var int + */ + public $updatedAtLessThanOrEqual = null; + + /** + * + * + * @var string + */ + public $partnerDataLike = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaYahooSyndicationFeed extends KalturaBaseSyndicationFeed +{ + /** + * + * + * @var KalturaYahooSyndicationFeedCategories + * @readonly + */ + public $category = null; + + /** + * + * + * @var KalturaYahooSyndicationFeedAdultValues + */ + public $adultContent = null; + + /** + * feed description + * + * + * @var string + */ + public $feedDescription = null; + + /** + * feed landing page (i.e publisher website) + * + * + * @var string + */ + public $feedLandingPage = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaAccessControlFilter extends KalturaAccessControlBaseFilter +{ + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaAccessControlProfileFilter extends KalturaAccessControlProfileBaseFilter +{ + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaAkamaiProvisionJobData extends KalturaProvisionJobData +{ + /** + * + * + * @var string + */ + public $wsdlUsername = null; + + /** + * + * + * @var string + */ + public $wsdlPassword = null; + + /** + * + * + * @var string + */ + public $cpcode = null; + + /** + * + * + * @var string + */ + public $emailId = null; + + /** + * + * + * @var string + */ + public $primaryContact = null; + + /** + * + * + * @var string + */ + public $secondaryContact = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaAkamaiUniversalProvisionJobData extends KalturaProvisionJobData +{ + /** + * + * + * @var int + */ + public $streamId = null; + + /** + * + * + * @var string + */ + public $systemUserName = null; + + /** + * + * + * @var string + */ + public $systemPassword = null; + + /** + * + * + * @var string + */ + public $domainName = null; + + /** + * + * + * @var KalturaDVRStatus + */ + public $dvrEnabled = null; + + /** + * + * + * @var int + */ + public $dvrWindow = null; + + /** + * + * + * @var string + */ + public $primaryContact = null; + + /** + * + * + * @var string + */ + public $secondaryContact = null; + + /** + * + * + * @var KalturaAkamaiUniversalStreamType + */ + public $streamType = null; + + /** + * + * + * @var string + */ + public $notificationEmail = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaAssetFilter extends KalturaAssetBaseFilter +{ + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaAssetParamsFilter extends KalturaAssetParamsBaseFilter +{ + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaAssetResource extends KalturaContentResource +{ + /** + * ID of the source asset + * + * + * @var string + */ + public $assetId = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaBaseSyndicationFeedFilter extends KalturaBaseSyndicationFeedBaseFilter +{ + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaBatchJobFilter extends KalturaBatchJobBaseFilter +{ + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaBulkUploadFilter extends KalturaBulkUploadBaseFilter +{ + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaCategoryEntryFilter extends KalturaCategoryEntryBaseFilter +{ + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaCategoryFilter extends KalturaCategoryBaseFilter +{ + /** + * + * + * @var string + */ + public $freeText = null; + + /** + * + * + * @var string + */ + public $membersIn = null; + + /** + * + * + * @var string + */ + public $nameOrReferenceIdStartsWith = null; + + /** + * + * + * @var string + */ + public $managerEqual = null; + + /** + * + * + * @var string + */ + public $memberEqual = null; + + /** + * + * + * @var string + */ + public $fullNameStartsWithIn = null; + + /** + * not includes the category itself (only sub categories) + * + * + * @var string + */ + public $ancestorIdIn = null; + + /** + * + * + * @var string + */ + public $idOrInheritedParentIdIn = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaControlPanelCommandFilter extends KalturaControlPanelCommandBaseFilter +{ + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaConversionProfileFilter extends KalturaConversionProfileBaseFilter +{ + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaConversionProfileAssetParamsFilter extends KalturaConversionProfileAssetParamsBaseFilter +{ + /** + * + * + * @var KalturaConversionProfileFilter + */ + public $conversionProfileIdFilter; + + /** + * + * + * @var KalturaAssetParamsFilter + */ + public $assetParamsIdFilter; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaConvertCollectionJobData extends KalturaConvartableJobData +{ + /** + * + * + * @var string + */ + public $destDirLocalPath = null; + + /** + * + * + * @var string + */ + public $destDirRemoteUrl = null; + + /** + * + * + * @var string + */ + public $destFileName = null; + + /** + * + * + * @var string + */ + public $inputXmlLocalPath = null; + + /** + * + * + * @var string + */ + public $inputXmlRemoteUrl = null; + + /** + * + * + * @var string + */ + public $commandLinesStr = null; + + /** + * + * + * @var array of KalturaConvertCollectionFlavorData + */ + public $flavors; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaConvertJobData extends KalturaConvartableJobData +{ + /** + * + * + * @var string + */ + public $destFileSyncLocalPath = null; + + /** + * + * + * @var string + */ + public $destFileSyncRemoteUrl = null; + + /** + * + * + * @var string + */ + public $logFileSyncLocalPath = null; + + /** + * + * + * @var string + */ + public $logFileSyncRemoteUrl = null; + + /** + * + * + * @var string + */ + public $flavorAssetId = null; + + /** + * + * + * @var string + */ + public $remoteMediaId = null; + + /** + * + * + * @var string + */ + public $customData = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaCountryCondition extends KalturaMatchCondition +{ + /** + * The ip geo coder engine to be used + * + * + * @var KalturaGeoCoderType + */ + public $geoCoderType = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaEndUserReportInputFilter extends KalturaReportInputFilter +{ + /** + * + * + * @var string + */ + public $application = null; + + /** + * + * + * @var string + */ + public $userIds = null; + + /** + * + * + * @var string + */ + public $playbackContext = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaEntryResource extends KalturaContentResource +{ + /** + * ID of the source entry + * + * + * @var string + */ + public $entryId = null; + + /** + * ID of the source flavor params, set to null to use the source flavor + * + * + * @var int + */ + public $flavorParamsId = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaExtractMediaJobData extends KalturaConvartableJobData +{ + /** + * + * + * @var string + */ + public $flavorAssetId = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +abstract class KalturaIntegerField extends KalturaIntegerValue +{ + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaFieldCompareCondition extends KalturaCompareCondition +{ + /** + * Field to evaluate + * + * + * @var KalturaIntegerField + */ + public $field; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +abstract class KalturaStringField extends KalturaStringValue +{ + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaFieldMatchCondition extends KalturaMatchCondition +{ + /** + * Field to evaluate + * + * + * @var KalturaStringField + */ + public $field; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaFileSyncResource extends KalturaContentResource +{ + /** + * The object type of the file sync object + * + * + * @var int + */ + public $fileSyncObjectType = null; + + /** + * The object sub-type of the file sync object + * + * + * @var int + */ + public $objectSubType = null; + + /** + * The object id of the file sync object + * + * + * @var string + */ + public $objectId = null; + + /** + * The version of the file sync object + * + * + * @var string + */ + public $version = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaGenericXsltSyndicationFeed extends KalturaGenericSyndicationFeed +{ + /** + * + * + * @var string + */ + public $xslt = null; + + /** + * + * + * @var array of KalturaExtendingItemMrssParameter + */ + public $itemXpathsToExtend; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaIpAddressCondition extends KalturaMatchCondition +{ + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaLiveAsset extends KalturaFlavorAsset +{ + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaLiveChannelSegmentFilter extends KalturaLiveChannelSegmentBaseFilter +{ + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaLiveParams extends KalturaFlavorParams +{ + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaMediaFlavorParams extends KalturaFlavorParams +{ + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaMediaInfoFilter extends KalturaMediaInfoBaseFilter +{ + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaMediaServerFilter extends KalturaMediaServerBaseFilter +{ + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaOperationResource extends KalturaContentResource +{ + /** + * Only KalturaEntryResource and KalturaAssetResource are supported + * + * + * @var KalturaContentResource + */ + public $resource; + + /** + * + * + * @var array of KalturaOperationAttributes + */ + public $operationAttributes; + + /** + * ID of alternative asset params to be used instead of the system default flavor params + * + * + * @var int + */ + public $assetParamsId = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaPartnerFilter extends KalturaPartnerBaseFilter +{ + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaPermissionFilter extends KalturaPermissionBaseFilter +{ + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaPermissionItemFilter extends KalturaPermissionItemBaseFilter +{ + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaPostConvertJobData extends KalturaConvartableJobData +{ + /** + * + * + * @var string + */ + public $flavorAssetId = null; + + /** + * Indicates if a thumbnail should be created + * + * + * @var bool + */ + public $createThumb = null; + + /** + * The path of the created thumbnail + * + * + * @var string + */ + public $thumbPath = null; + + /** + * The position of the thumbnail in the media file + * + * + * @var int + */ + public $thumbOffset = null; + + /** + * The height of the movie, will be used to comapare if this thumbnail is the best we can have + * + * + * @var int + */ + public $thumbHeight = null; + + /** + * The bit rate of the movie, will be used to comapare if this thumbnail is the best we can have + * + * + * @var int + */ + public $thumbBitrate = null; + + /** + * + * + * @var string + */ + public $customData = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaPreviewRestriction extends KalturaSessionRestriction +{ + /** + * The preview restriction length + * + * + * @var int + */ + public $previewLength = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +abstract class KalturaRegexCondition extends KalturaMatchCondition +{ + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaRemoteStorageResources extends KalturaContentResource +{ + /** + * Array of remote stoage resources + * + * + * @var array of KalturaRemoteStorageResource + */ + public $resources; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaReportFilter extends KalturaReportBaseFilter +{ + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaSearchComparableCondition extends KalturaSearchCondition +{ + /** + * + * + * @var KalturaSearchConditionComparison + */ + public $comparison = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaSiteCondition extends KalturaMatchCondition +{ + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaSshImportJobData extends KalturaImportJobData +{ + /** + * + * + * @var string + */ + public $privateKey = null; + + /** + * + * + * @var string + */ + public $publicKey = null; + + /** + * + * + * @var string + */ + public $passPhrase = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaStorageDeleteJobData extends KalturaStorageJobData +{ + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaStorageExportJobData extends KalturaStorageJobData +{ + /** + * + * + * @var bool + */ + public $force = null; + + /** + * + * + * @var bool + */ + public $createLink = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaStorageProfileFilter extends KalturaStorageProfileBaseFilter +{ + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaStringResource extends KalturaContentResource +{ + /** + * Textual content + * + * + * @var string + */ + public $content = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaUiConfFilter extends KalturaUiConfBaseFilter +{ + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaUploadTokenFilter extends KalturaUploadTokenBaseFilter +{ + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaUserLoginDataFilter extends KalturaUserLoginDataBaseFilter +{ + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaUserRoleFilter extends KalturaUserRoleBaseFilter +{ + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaWidgetFilter extends KalturaWidgetBaseFilter +{ + +} + +/** + * @package Kaltura + * @subpackage Client + */ +abstract class KalturaAdminUserBaseFilter extends KalturaUserFilter +{ + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaAmazonS3StorageExportJobData extends KalturaStorageExportJobData +{ + /** + * + * + * @var KalturaAmazonS3StorageProfileFilesPermissionLevel + */ + public $filesPermissionInS3 = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +abstract class KalturaAmazonS3StorageProfileBaseFilter extends KalturaStorageProfileFilter +{ + +} + +/** + * @package Kaltura + * @subpackage Client + */ +abstract class KalturaApiActionPermissionItemBaseFilter extends KalturaPermissionItemFilter +{ + +} + +/** + * @package Kaltura + * @subpackage Client + */ +abstract class KalturaApiParameterPermissionItemBaseFilter extends KalturaPermissionItemFilter +{ + +} + +/** + * @package Kaltura + * @subpackage Client + */ +abstract class KalturaAssetParamsOutputBaseFilter extends KalturaAssetParamsFilter +{ + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaBatchJobFilterExt extends KalturaBatchJobFilter +{ + /** + * + * + * @var string + */ + public $jobTypeAndSubTypeIn = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaCountryContextField extends KalturaStringField +{ + /** + * The ip geo coder engine to be used + * + * + * @var KalturaGeoCoderType + */ + public $geoCoderType = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +abstract class KalturaDataEntryBaseFilter extends KalturaBaseEntryFilter +{ + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaEvalBooleanField extends KalturaBooleanField +{ + /** + * PHP code + * + * + * @var string + */ + public $code = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaEvalStringField extends KalturaStringField +{ + /** + * PHP code + * + * + * @var string + */ + public $code = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +abstract class KalturaFlavorAssetBaseFilter extends KalturaAssetFilter +{ + /** + * + * + * @var int + */ + public $flavorParamsIdEqual = null; + + /** + * + * + * @var string + */ + public $flavorParamsIdIn = null; + + /** + * + * + * @var KalturaFlavorAssetStatus + */ + public $statusEqual = null; + + /** + * + * + * @var string + */ + public $statusIn = null; + + /** + * + * + * @var string + */ + public $statusNotIn = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +abstract class KalturaFlavorParamsBaseFilter extends KalturaAssetParamsFilter +{ + /** + * + * + * @var KalturaContainerFormat + */ + public $formatEqual = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +abstract class KalturaGenericSyndicationFeedBaseFilter extends KalturaBaseSyndicationFeedFilter +{ + +} + +/** + * @package Kaltura + * @subpackage Client + */ +abstract class KalturaGoogleVideoSyndicationFeedBaseFilter extends KalturaBaseSyndicationFeedFilter +{ + +} + +/** + * @package Kaltura + * @subpackage Client + */ +abstract class KalturaITunesSyndicationFeedBaseFilter extends KalturaBaseSyndicationFeedFilter +{ + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaIpAddressContextField extends KalturaStringField +{ + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaMediaFlavorParamsOutput extends KalturaFlavorParamsOutput +{ + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaObjectIdField extends KalturaStringField +{ + +} + +/** + * @package Kaltura + * @subpackage Client + */ +abstract class KalturaPlaylistBaseFilter extends KalturaBaseEntryFilter +{ + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaServerFileResource extends KalturaDataCenterContentResource +{ + /** + * Full path to the local file + * + * + * @var string + */ + public $localFilePath = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaSshUrlResource extends KalturaUrlResource +{ + /** + * SSH private key + * + * + * @var string + */ + public $privateKey = null; + + /** + * SSH public key + * + * + * @var string + */ + public $publicKey = null; + + /** + * Passphrase for SSH keys + * + * + * @var string + */ + public $keyPassphrase = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +abstract class KalturaThumbAssetBaseFilter extends KalturaAssetFilter +{ + /** + * + * + * @var int + */ + public $thumbParamsIdEqual = null; + + /** + * + * + * @var string + */ + public $thumbParamsIdIn = null; + + /** + * + * + * @var KalturaThumbAssetStatus + */ + public $statusEqual = null; + + /** + * + * + * @var string + */ + public $statusIn = null; + + /** + * + * + * @var string + */ + public $statusNotIn = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +abstract class KalturaThumbParamsBaseFilter extends KalturaAssetParamsFilter +{ + /** + * + * + * @var KalturaContainerFormat + */ + public $formatEqual = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaTimeContextField extends KalturaIntegerField +{ + /** + * Time offset in seconds since current time + * + * + * @var int + */ + public $offset = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +abstract class KalturaTubeMogulSyndicationFeedBaseFilter extends KalturaBaseSyndicationFeedFilter +{ + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaUploadedFileTokenResource extends KalturaDataCenterContentResource +{ + /** + * Token that returned from upload.upload action or uploadToken.add action. + * + * + * @var string + */ + public $token = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaUserAgentCondition extends KalturaRegexCondition +{ + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaUserAgentContextField extends KalturaStringField +{ + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaUserEmailContextField extends KalturaStringField +{ + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaWebcamTokenResource extends KalturaDataCenterContentResource +{ + /** + * Token that returned from media server such as FMS or red5. + * + * + * @var string + */ + public $token = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +abstract class KalturaYahooSyndicationFeedBaseFilter extends KalturaBaseSyndicationFeedFilter +{ + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaAdminUserFilter extends KalturaAdminUserBaseFilter +{ + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaAmazonS3StorageProfileFilter extends KalturaAmazonS3StorageProfileBaseFilter +{ + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaApiActionPermissionItemFilter extends KalturaApiActionPermissionItemBaseFilter +{ + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaApiParameterPermissionItemFilter extends KalturaApiParameterPermissionItemBaseFilter +{ + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaAssetParamsOutputFilter extends KalturaAssetParamsOutputBaseFilter +{ + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaDataEntryFilter extends KalturaDataEntryBaseFilter +{ + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaFlavorAssetFilter extends KalturaFlavorAssetBaseFilter +{ + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaFlavorParamsFilter extends KalturaFlavorParamsBaseFilter +{ + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaGenericSyndicationFeedFilter extends KalturaGenericSyndicationFeedBaseFilter +{ + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaGoogleVideoSyndicationFeedFilter extends KalturaGoogleVideoSyndicationFeedBaseFilter +{ + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaITunesSyndicationFeedFilter extends KalturaITunesSyndicationFeedBaseFilter +{ + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaPlaylistFilter extends KalturaPlaylistBaseFilter +{ + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaThumbAssetFilter extends KalturaThumbAssetBaseFilter +{ + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaThumbParamsFilter extends KalturaThumbParamsBaseFilter +{ + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaTubeMogulSyndicationFeedFilter extends KalturaTubeMogulSyndicationFeedBaseFilter +{ + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaYahooSyndicationFeedFilter extends KalturaYahooSyndicationFeedBaseFilter +{ + +} + +/** + * @package Kaltura + * @subpackage Client + */ +abstract class KalturaFlavorParamsOutputBaseFilter extends KalturaFlavorParamsFilter +{ + /** + * + * + * @var int + */ + public $flavorParamsIdEqual = null; + + /** + * + * + * @var string + */ + public $flavorParamsVersionEqual = null; + + /** + * + * + * @var string + */ + public $flavorAssetIdEqual = null; + + /** + * + * + * @var string + */ + public $flavorAssetVersionEqual = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +abstract class KalturaGenericXsltSyndicationFeedBaseFilter extends KalturaGenericSyndicationFeedFilter +{ + +} + +/** + * @package Kaltura + * @subpackage Client + */ +abstract class KalturaLiveAssetBaseFilter extends KalturaFlavorAssetFilter +{ + +} + +/** + * @package Kaltura + * @subpackage Client + */ +abstract class KalturaLiveParamsBaseFilter extends KalturaFlavorParamsFilter +{ + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaLiveStreamAdminEntry extends KalturaLiveStreamEntry +{ + +} + +/** + * @package Kaltura + * @subpackage Client + */ +abstract class KalturaMediaFlavorParamsBaseFilter extends KalturaFlavorParamsFilter +{ + +} + +/** + * @package Kaltura + * @subpackage Client + */ +abstract class KalturaMixEntryBaseFilter extends KalturaPlayableEntryFilter +{ + +} + +/** + * @package Kaltura + * @subpackage Client + */ +abstract class KalturaThumbParamsOutputBaseFilter extends KalturaThumbParamsFilter +{ + /** + * + * + * @var int + */ + public $thumbParamsIdEqual = null; + + /** + * + * + * @var string + */ + public $thumbParamsVersionEqual = null; + + /** + * + * + * @var string + */ + public $thumbAssetIdEqual = null; + + /** + * + * + * @var string + */ + public $thumbAssetVersionEqual = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaFlavorParamsOutputFilter extends KalturaFlavorParamsOutputBaseFilter +{ + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaGenericXsltSyndicationFeedFilter extends KalturaGenericXsltSyndicationFeedBaseFilter +{ + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaLiveAssetFilter extends KalturaLiveAssetBaseFilter +{ + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaLiveParamsFilter extends KalturaLiveParamsBaseFilter +{ + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaMediaFlavorParamsFilter extends KalturaMediaFlavorParamsBaseFilter +{ + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaMixEntryFilter extends KalturaMixEntryBaseFilter +{ + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaThumbParamsOutputFilter extends KalturaThumbParamsOutputBaseFilter +{ + +} + +/** + * @package Kaltura + * @subpackage Client + */ +abstract class KalturaLiveEntryBaseFilter extends KalturaMediaEntryFilter +{ + +} + +/** + * @package Kaltura + * @subpackage Client + */ +abstract class KalturaMediaFlavorParamsOutputBaseFilter extends KalturaFlavorParamsOutputFilter +{ + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaLiveEntryFilter extends KalturaLiveEntryBaseFilter +{ + /** + * + * + * @var KalturaNullableBoolean + */ + public $isLive = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaMediaFlavorParamsOutputFilter extends KalturaMediaFlavorParamsOutputBaseFilter +{ + +} + +/** + * @package Kaltura + * @subpackage Client + */ +abstract class KalturaLiveChannelBaseFilter extends KalturaLiveEntryFilter +{ + +} + +/** + * @package Kaltura + * @subpackage Client + */ +abstract class KalturaLiveStreamEntryBaseFilter extends KalturaLiveEntryFilter +{ + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaLiveChannelFilter extends KalturaLiveChannelBaseFilter +{ + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaLiveStreamEntryFilter extends KalturaLiveStreamEntryBaseFilter +{ + +} + +/** + * @package Kaltura + * @subpackage Client + */ +abstract class KalturaLiveStreamAdminEntryBaseFilter extends KalturaLiveStreamEntryFilter +{ + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaLiveStreamAdminEntryFilter extends KalturaLiveStreamAdminEntryBaseFilter +{ + +} + diff --git a/local/kaltura/API/TestCode/DemoVideo.flv b/local/kaltura/API/TestCode/DemoVideo.flv new file mode 100644 index 0000000000000000000000000000000000000000..5e0c8341d21b2ef6bdf406eb4cf7c0d330baf2c0 GIT binary patch literal 512919 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 diff --git a/local/kaltura/API/TestCode/KalturaTestConfiguration.php b/local/kaltura/API/TestCode/KalturaTestConfiguration.php deleted file mode 100644 index d11930208dd85..0000000000000 --- a/local/kaltura/API/TestCode/KalturaTestConfiguration.php +++ /dev/null @@ -1,36 +0,0 @@ -. -// -// @ignore -// =================================================================================================== -class KalturaTestConfiguration -{ - const PARTNER_ID = 54321; - const SECRET = "YOUR_USER_SECRET"; - const ADMIN_SECRET = "YOUR_ADMIN_SECRET"; - const SERVICE_URL = "http://www.kaltura.com"; - const UPLOAD_FILE = "DemoVideo.flv"; -} diff --git a/local/kaltura/API/TestCode/TestMain.php b/local/kaltura/API/TestCode/TestMain.php deleted file mode 100644 index ea667b80325ac..0000000000000 --- a/local/kaltura/API/TestCode/TestMain.php +++ /dev/null @@ -1,137 +0,0 @@ -. -// -// @ignore -// =================================================================================================== -require_once(dirname(__FILE__) . '/../KalturaClient.php'); -require_once(dirname(__FILE__).DIRECTORY_SEPARATOR.'KalturaTestConfiguration.php'); - -class TestMain implements IKalturaLogger -{ - public function log($message) - { - echo date('Y-m-d H:i:s') . ' ' . $message . "\n"; - } - - public static function run() - { - $test = new TestMain(); - $test->listActions(); - $test->multiRequest(); - $test->add(); - echo "\nFinished running client library tests\n"; - } - - private function getKalturaClient($partnerId, $adminSecret, $isAdmin) - { - $kConfig = new KalturaConfiguration($partnerId); - $kConfig->serviceUrl = KalturaTestConfiguration::SERVICE_URL; - $kConfig->setLogger($this); - $client = new KalturaClient($kConfig); - - $userId = "SomeUser"; - $sessionType = ($isAdmin)? KalturaSessionType::ADMIN : KalturaSessionType::USER; - try - { - $ks = $client->generateSession($adminSecret, $userId, $sessionType, $partnerId); - $client->setKs($ks); - } - catch(Exception $ex) - { - die("could not start session - check configurations in KalturaTestConfiguration class"); - } - - return $client; - } - - public function listActions() - { - try - { - $client = $this->getKalturaClient(KalturaTestConfiguration::PARTNER_ID, KalturaTestConfiguration::ADMIN_SECRET, true); - $results = $client->media->listAction(); - $entry = $results->objects[0]; - echo "\nGot an entry: [{$entry->name}]"; - } - catch(Exception $ex) - { - die($ex->getMessage()); - } - } - - public function multiRequest() - { - try - { - $client = $this->getKalturaClient(KalturaTestConfiguration::PARTNER_ID, KalturaTestConfiguration::ADMIN_SECRET, true); - $client->startMultiRequest(); - $client->baseEntry->count(); - $client->partner->getInfo(); - $client->partner->getUsage(2011); - $multiRequest = $client->doMultiRequest(); - $partner = $multiRequest[1]; - if(!is_object($partner) || get_class($partner) != 'KalturaPartner') - { - throw new Exception("UNEXPECTED_RESULT"); - } - echo "\nGot Admin User email: [{$partner->adminEmail}]"; - } - catch(Exception $ex) - { - die($ex->getMessage()); - } - } - - public function add() - { - try - { - echo "\nUploading test video..."; - $client = $this->getKalturaClient(KalturaTestConfiguration::PARTNER_ID, KalturaTestConfiguration::ADMIN_SECRET, false); - $filePath = KalturaTestConfiguration::UPLOAD_FILE; - - $token = $client->baseEntry->upload($filePath); - $entry = new KalturaMediaEntry(); - $entry->name = "my upload entry"; - $entry->mediaType = KalturaMediaType::VIDEO; - $newEntry = $client->media->addFromUploadedFile($entry, $token); - echo "\nUploaded a new Video entry " . $newEntry->id; - $client->media->delete($newEntry->id); - try { - $entry = null; - $entry = $client->media->get($newEntry->id); - } catch (KalturaException $exApi) { - if ($entry == null) { - echo "\nDeleted the entry (" . $newEntry->id .") successfully!"; - } - } - } catch (KalturaException $ex) { - die($ex->getMessage()); - } - } -} - -TestMain::run(); diff --git a/local/kaltura/API/agpl.txt b/local/kaltura/API/agpl.txt deleted file mode 100644 index 94a9ed024d385..0000000000000 --- a/local/kaltura/API/agpl.txt +++ /dev/null @@ -1,674 +0,0 @@ - GNU GENERAL PUBLIC LICENSE - Version 3, 29 June 2007 - - Copyright (C) 2007 Free Software Foundation, Inc. - Everyone is permitted to copy and distribute verbatim copies - of this license document, but changing it is not allowed. - - Preamble - - The GNU General Public License is a free, copyleft license for -software and other kinds of works. - - The licenses for most software and other practical works are designed -to take away your freedom to share and change the works. By contrast, -the GNU General Public License is intended to guarantee your freedom to -share and change all versions of a program--to make sure it remains free -software for all its users. We, the Free Software Foundation, use the -GNU General Public License for most of our software; it applies also to -any other work released this way by its authors. You can apply it to -your programs, too. - - When we speak of free software, we are referring to freedom, not -price. Our General Public Licenses are designed to make sure that you -have the freedom to distribute copies of free software (and charge for -them if you wish), that you receive source code or can get it if you -want it, that you can change the software or use pieces of it in new -free programs, and that you know you can do these things. - - To protect your rights, we need to prevent others from denying you -these rights or asking you to surrender the rights. Therefore, you have -certain responsibilities if you distribute copies of the software, or if -you modify it: responsibilities to respect the freedom of others. - - For example, if you distribute copies of such a program, whether -gratis or for a fee, you must pass on to the recipients the same -freedoms that you received. You must make sure that they, too, receive -or can get the source code. And you must show them these terms so they -know their rights. - - Developers that use the GNU GPL protect your rights with two steps: -(1) assert copyright on the software, and (2) offer you this License -giving you legal permission to copy, distribute and/or modify it. - - For the developers' and authors' protection, the GPL clearly explains -that there is no warranty for this free software. For both users' and -authors' sake, the GPL requires that modified versions be marked as -changed, so that their problems will not be attributed erroneously to -authors of previous versions. - - Some devices are designed to deny users access to install or run -modified versions of the software inside them, although the manufacturer -can do so. This is fundamentally incompatible with the aim of -protecting users' freedom to change the software. The systematic -pattern of such abuse occurs in the area of products for individuals to -use, which is precisely where it is most unacceptable. Therefore, we -have designed this version of the GPL to prohibit the practice for those -products. If such problems arise substantially in other domains, we -stand ready to extend this provision to those domains in future versions -of the GPL, as needed to protect the freedom of users. - - Finally, every program is threatened constantly by software patents. -States should not allow patents to restrict development and use of -software on general-purpose computers, but in those that do, we wish to -avoid the special danger that patents applied to a free program could -make it effectively proprietary. To prevent this, the GPL assures that -patents cannot be used to render the program non-free. - - The precise terms and conditions for copying, distribution and -modification follow. - - TERMS AND CONDITIONS - - 0. Definitions. - - "This License" refers to version 3 of the GNU General Public License. - - "Copyright" also means copyright-like laws that apply to other kinds of -works, such as semiconductor masks. - - "The Program" refers to any copyrightable work licensed under this -License. Each licensee is addressed as "you". "Licensees" and -"recipients" may be individuals or organizations. - - To "modify" a work means to copy from or adapt all or part of the work -in a fashion requiring copyright permission, other than the making of an -exact copy. The resulting work is called a "modified version" of the -earlier work or a work "based on" the earlier work. - - A "covered work" means either the unmodified Program or a work based -on the Program. - - To "propagate" a work means to do anything with it that, without -permission, would make you directly or secondarily liable for -infringement under applicable copyright law, except executing it on a -computer or modifying a private copy. Propagation includes copying, -distribution (with or without modification), making available to the -public, and in some countries other activities as well. - - To "convey" a work means any kind of propagation that enables other -parties to make or receive copies. Mere interaction with a user through -a computer network, with no transfer of a copy, is not conveying. - - An interactive user interface displays "Appropriate Legal Notices" -to the extent that it includes a convenient and prominently visible -feature that (1) displays an appropriate copyright notice, and (2) -tells the user that there is no warranty for the work (except to the -extent that warranties are provided), that licensees may convey the -work under this License, and how to view a copy of this License. If -the interface presents a list of user commands or options, such as a -menu, a prominent item in the list meets this criterion. - - 1. Source Code. - - The "source code" for a work means the preferred form of the work -for making modifications to it. "Object code" means any non-source -form of a work. - - A "Standard Interface" means an interface that either is an official -standard defined by a recognized standards body, or, in the case of -interfaces specified for a particular programming language, one that -is widely used among developers working in that language. - - The "System Libraries" of an executable work include anything, other -than the work as a whole, that (a) is included in the normal form of -packaging a Major Component, but which is not part of that Major -Component, and (b) serves only to enable use of the work with that -Major Component, or to implement a Standard Interface for which an -implementation is available to the public in source code form. A -"Major Component", in this context, means a major essential component -(kernel, window system, and so on) of the specific operating system -(if any) on which the executable work runs, or a compiler used to -produce the work, or an object code interpreter used to run it. - - The "Corresponding Source" for a work in object code form means all -the source code needed to generate, install, and (for an executable -work) run the object code and to modify the work, including scripts to -control those activities. However, it does not include the work's -System Libraries, or general-purpose tools or generally available free -programs which are used unmodified in performing those activities but -which are not part of the work. For example, Corresponding Source -includes interface definition files associated with source files for -the work, and the source code for shared libraries and dynamically -linked subprograms that the work is specifically designed to require, -such as by intimate data communication or control flow between those -subprograms and other parts of the work. - - The Corresponding Source need not include anything that users -can regenerate automatically from other parts of the Corresponding -Source. - - The Corresponding Source for a work in source code form is that -same work. - - 2. Basic Permissions. - - All rights granted under this License are granted for the term of -copyright on the Program, and are irrevocable provided the stated -conditions are met. This License explicitly affirms your unlimited -permission to run the unmodified Program. The output from running a -covered work is covered by this License only if the output, given its -content, constitutes a covered work. This License acknowledges your -rights of fair use or other equivalent, as provided by copyright law. - - You may make, run and propagate covered works that you do not -convey, without conditions so long as your license otherwise remains -in force. You may convey covered works to others for the sole purpose -of having them make modifications exclusively for you, or provide you -with facilities for running those works, provided that you comply with -the terms of this License in conveying all material for which you do -not control copyright. Those thus making or running the covered works -for you must do so exclusively on your behalf, under your direction -and control, on terms that prohibit them from making any copies of -your copyrighted material outside their relationship with you. - - Conveying under any other circumstances is permitted solely under -the conditions stated below. Sublicensing is not allowed; section 10 -makes it unnecessary. - - 3. Protecting Users' Legal Rights From Anti-Circumvention Law. - - No covered work shall be deemed part of an effective technological -measure under any applicable law fulfilling obligations under article -11 of the WIPO copyright treaty adopted on 20 December 1996, or -similar laws prohibiting or restricting circumvention of such -measures. - - When you convey a covered work, you waive any legal power to forbid -circumvention of technological measures to the extent such circumvention -is effected by exercising rights under this License with respect to -the covered work, and you disclaim any intention to limit operation or -modification of the work as a means of enforcing, against the work's -users, your or third parties' legal rights to forbid circumvention of -technological measures. - - 4. Conveying Verbatim Copies. - - You may convey verbatim copies of the Program's source code as you -receive it, in any medium, provided that you conspicuously and -appropriately publish on each copy an appropriate copyright notice; -keep intact all notices stating that this License and any -non-permissive terms added in accord with section 7 apply to the code; -keep intact all notices of the absence of any warranty; and give all -recipients a copy of this License along with the Program. - - You may charge any price or no price for each copy that you convey, -and you may offer support or warranty protection for a fee. - - 5. Conveying Modified Source Versions. - - You may convey a work based on the Program, or the modifications to -produce it from the Program, in the form of source code under the -terms of section 4, provided that you also meet all of these conditions: - - a) The work must carry prominent notices stating that you modified - it, and giving a relevant date. - - b) The work must carry prominent notices stating that it is - released under this License and any conditions added under section - 7. This requirement modifies the requirement in section 4 to - "keep intact all notices". - - c) You must license the entire work, as a whole, under this - License to anyone who comes into possession of a copy. This - License will therefore apply, along with any applicable section 7 - additional terms, to the whole of the work, and all its parts, - regardless of how they are packaged. This License gives no - permission to license the work in any other way, but it does not - invalidate such permission if you have separately received it. - - d) If the work has interactive user interfaces, each must display - Appropriate Legal Notices; however, if the Program has interactive - interfaces that do not display Appropriate Legal Notices, your - work need not make them do so. - - A compilation of a covered work with other separate and independent -works, which are not by their nature extensions of the covered work, -and which are not combined with it such as to form a larger program, -in or on a volume of a storage or distribution medium, is called an -"aggregate" if the compilation and its resulting copyright are not -used to limit the access or legal rights of the compilation's users -beyond what the individual works permit. Inclusion of a covered work -in an aggregate does not cause this License to apply to the other -parts of the aggregate. - - 6. Conveying Non-Source Forms. - - You may convey a covered work in object code form under the terms -of sections 4 and 5, provided that you also convey the -machine-readable Corresponding Source under the terms of this License, -in one of these ways: - - a) Convey the object code in, or embodied in, a physical product - (including a physical distribution medium), accompanied by the - Corresponding Source fixed on a durable physical medium - customarily used for software interchange. - - b) Convey the object code in, or embodied in, a physical product - (including a physical distribution medium), accompanied by a - written offer, valid for at least three years and valid for as - long as you offer spare parts or customer support for that product - model, to give anyone who possesses the object code either (1) a - copy of the Corresponding Source for all the software in the - product that is covered by this License, on a durable physical - medium customarily used for software interchange, for a price no - more than your reasonable cost of physically performing this - conveying of source, or (2) access to copy the - Corresponding Source from a network server at no charge. - - c) Convey individual copies of the object code with a copy of the - written offer to provide the Corresponding Source. This - alternative is allowed only occasionally and noncommercially, and - only if you received the object code with such an offer, in accord - with subsection 6b. - - d) Convey the object code by offering access from a designated - place (gratis or for a charge), and offer equivalent access to the - Corresponding Source in the same way through the same place at no - further charge. You need not require recipients to copy the - Corresponding Source along with the object code. If the place to - copy the object code is a network server, the Corresponding Source - may be on a different server (operated by you or a third party) - that supports equivalent copying facilities, provided you maintain - clear directions next to the object code saying where to find the - Corresponding Source. Regardless of what server hosts the - Corresponding Source, you remain obligated to ensure that it is - available for as long as needed to satisfy these requirements. - - e) Convey the object code using peer-to-peer transmission, provided - you inform other peers where the object code and Corresponding - Source of the work are being offered to the general public at no - charge under subsection 6d. - - A separable portion of the object code, whose source code is excluded -from the Corresponding Source as a System Library, need not be -included in conveying the object code work. - - A "User Product" is either (1) a "consumer product", which means any -tangible personal property which is normally used for personal, family, -or household purposes, or (2) anything designed or sold for incorporation -into a dwelling. In determining whether a product is a consumer product, -doubtful cases shall be resolved in favor of coverage. For a particular -product received by a particular user, "normally used" refers to a -typical or common use of that class of product, regardless of the status -of the particular user or of the way in which the particular user -actually uses, or expects or is expected to use, the product. A product -is a consumer product regardless of whether the product has substantial -commercial, industrial or non-consumer uses, unless such uses represent -the only significant mode of use of the product. - - "Installation Information" for a User Product means any methods, -procedures, authorization keys, or other information required to install -and execute modified versions of a covered work in that User Product from -a modified version of its Corresponding Source. The information must -suffice to ensure that the continued functioning of the modified object -code is in no case prevented or interfered with solely because -modification has been made. - - If you convey an object code work under this section in, or with, or -specifically for use in, a User Product, and the conveying occurs as -part of a transaction in which the right of possession and use of the -User Product is transferred to the recipient in perpetuity or for a -fixed term (regardless of how the transaction is characterized), the -Corresponding Source conveyed under this section must be accompanied -by the Installation Information. But this requirement does not apply -if neither you nor any third party retains the ability to install -modified object code on the User Product (for example, the work has -been installed in ROM). - - The requirement to provide Installation Information does not include a -requirement to continue to provide support service, warranty, or updates -for a work that has been modified or installed by the recipient, or for -the User Product in which it has been modified or installed. Access to a -network may be denied when the modification itself materially and -adversely affects the operation of the network or violates the rules and -protocols for communication across the network. - - Corresponding Source conveyed, and Installation Information provided, -in accord with this section must be in a format that is publicly -documented (and with an implementation available to the public in -source code form), and must require no special password or key for -unpacking, reading or copying. - - 7. Additional Terms. - - "Additional permissions" are terms that supplement the terms of this -License by making exceptions from one or more of its conditions. -Additional permissions that are applicable to the entire Program shall -be treated as though they were included in this License, to the extent -that they are valid under applicable law. If additional permissions -apply only to part of the Program, that part may be used separately -under those permissions, but the entire Program remains governed by -this License without regard to the additional permissions. - - When you convey a copy of a covered work, you may at your option -remove any additional permissions from that copy, or from any part of -it. (Additional permissions may be written to require their own -removal in certain cases when you modify the work.) You may place -additional permissions on material, added by you to a covered work, -for which you have or can give appropriate copyright permission. - - Notwithstanding any other provision of this License, for material you -add to a covered work, you may (if authorized by the copyright holders of -that material) supplement the terms of this License with terms: - - a) Disclaiming warranty or limiting liability differently from the - terms of sections 15 and 16 of this License; or - - b) Requiring preservation of specified reasonable legal notices or - author attributions in that material or in the Appropriate Legal - Notices displayed by works containing it; or - - c) Prohibiting misrepresentation of the origin of that material, or - requiring that modified versions of such material be marked in - reasonable ways as different from the original version; or - - d) Limiting the use for publicity purposes of names of licensors or - authors of the material; or - - e) Declining to grant rights under trademark law for use of some - trade names, trademarks, or service marks; or - - f) Requiring indemnification of licensors and authors of that - material by anyone who conveys the material (or modified versions of - it) with contractual assumptions of liability to the recipient, for - any liability that these contractual assumptions directly impose on - those licensors and authors. - - All other non-permissive additional terms are considered "further -restrictions" within the meaning of section 10. If the Program as you -received it, or any part of it, contains a notice stating that it is -governed by this License along with a term that is a further -restriction, you may remove that term. If a license document contains -a further restriction but permits relicensing or conveying under this -License, you may add to a covered work material governed by the terms -of that license document, provided that the further restriction does -not survive such relicensing or conveying. - - If you add terms to a covered work in accord with this section, you -must place, in the relevant source files, a statement of the -additional terms that apply to those files, or a notice indicating -where to find the applicable terms. - - Additional terms, permissive or non-permissive, may be stated in the -form of a separately written license, or stated as exceptions; -the above requirements apply either way. - - 8. Termination. - - You may not propagate or modify a covered work except as expressly -provided under this License. Any attempt otherwise to propagate or -modify it is void, and will automatically terminate your rights under -this License (including any patent licenses granted under the third -paragraph of section 11). - - However, if you cease all violation of this License, then your -license from a particular copyright holder is reinstated (a) -provisionally, unless and until the copyright holder explicitly and -finally terminates your license, and (b) permanently, if the copyright -holder fails to notify you of the violation by some reasonable means -prior to 60 days after the cessation. - - Moreover, your license from a particular copyright holder is -reinstated permanently if the copyright holder notifies you of the -violation by some reasonable means, this is the first time you have -received notice of violation of this License (for any work) from that -copyright holder, and you cure the violation prior to 30 days after -your receipt of the notice. - - Termination of your rights under this section does not terminate the -licenses of parties who have received copies or rights from you under -this License. If your rights have been terminated and not permanently -reinstated, you do not qualify to receive new licenses for the same -material under section 10. - - 9. Acceptance Not Required for Having Copies. - - You are not required to accept this License in order to receive or -run a copy of the Program. Ancillary propagation of a covered work -occurring solely as a consequence of using peer-to-peer transmission -to receive a copy likewise does not require acceptance. However, -nothing other than this License grants you permission to propagate or -modify any covered work. These actions infringe copyright if you do -not accept this License. Therefore, by modifying or propagating a -covered work, you indicate your acceptance of this License to do so. - - 10. Automatic Licensing of Downstream Recipients. - - Each time you convey a covered work, the recipient automatically -receives a license from the original licensors, to run, modify and -propagate that work, subject to this License. You are not responsible -for enforcing compliance by third parties with this License. - - An "entity transaction" is a transaction transferring control of an -organization, or substantially all assets of one, or subdividing an -organization, or merging organizations. If propagation of a covered -work results from an entity transaction, each party to that -transaction who receives a copy of the work also receives whatever -licenses to the work the party's predecessor in interest had or could -give under the previous paragraph, plus a right to possession of the -Corresponding Source of the work from the predecessor in interest, if -the predecessor has it or can get it with reasonable efforts. - - You may not impose any further restrictions on the exercise of the -rights granted or affirmed under this License. For example, you may -not impose a license fee, royalty, or other charge for exercise of -rights granted under this License, and you may not initiate litigation -(including a cross-claim or counterclaim in a lawsuit) alleging that -any patent claim is infringed by making, using, selling, offering for -sale, or importing the Program or any portion of it. - - 11. Patents. - - A "contributor" is a copyright holder who authorizes use under this -License of the Program or a work on which the Program is based. The -work thus licensed is called the contributor's "contributor version". - - A contributor's "essential patent claims" are all patent claims -owned or controlled by the contributor, whether already acquired or -hereafter acquired, that would be infringed by some manner, permitted -by this License, of making, using, or selling its contributor version, -but do not include claims that would be infringed only as a -consequence of further modification of the contributor version. For -purposes of this definition, "control" includes the right to grant -patent sublicenses in a manner consistent with the requirements of -this License. - - Each contributor grants you a non-exclusive, worldwide, royalty-free -patent license under the contributor's essential patent claims, to -make, use, sell, offer for sale, import and otherwise run, modify and -propagate the contents of its contributor version. - - In the following three paragraphs, a "patent license" is any express -agreement or commitment, however denominated, not to enforce a patent -(such as an express permission to practice a patent or covenant not to -sue for patent infringement). To "grant" such a patent license to a -party means to make such an agreement or commitment not to enforce a -patent against the party. - - If you convey a covered work, knowingly relying on a patent license, -and the Corresponding Source of the work is not available for anyone -to copy, free of charge and under the terms of this License, through a -publicly available network server or other readily accessible means, -then you must either (1) cause the Corresponding Source to be so -available, or (2) arrange to deprive yourself of the benefit of the -patent license for this particular work, or (3) arrange, in a manner -consistent with the requirements of this License, to extend the patent -license to downstream recipients. "Knowingly relying" means you have -actual knowledge that, but for the patent license, your conveying the -covered work in a country, or your recipient's use of the covered work -in a country, would infringe one or more identifiable patents in that -country that you have reason to believe are valid. - - If, pursuant to or in connection with a single transaction or -arrangement, you convey, or propagate by procuring conveyance of, a -covered work, and grant a patent license to some of the parties -receiving the covered work authorizing them to use, propagate, modify -or convey a specific copy of the covered work, then the patent license -you grant is automatically extended to all recipients of the covered -work and works based on it. - - A patent license is "discriminatory" if it does not include within -the scope of its coverage, prohibits the exercise of, or is -conditioned on the non-exercise of one or more of the rights that are -specifically granted under this License. You may not convey a covered -work if you are a party to an arrangement with a third party that is -in the business of distributing software, under which you make payment -to the third party based on the extent of your activity of conveying -the work, and under which the third party grants, to any of the -parties who would receive the covered work from you, a discriminatory -patent license (a) in connection with copies of the covered work -conveyed by you (or copies made from those copies), or (b) primarily -for and in connection with specific products or compilations that -contain the covered work, unless you entered into that arrangement, -or that patent license was granted, prior to 28 March 2007. - - Nothing in this License shall be construed as excluding or limiting -any implied license or other defenses to infringement that may -otherwise be available to you under applicable patent law. - - 12. No Surrender of Others' Freedom. - - If conditions are imposed on you (whether by court order, agreement or -otherwise) that contradict the conditions of this License, they do not -excuse you from the conditions of this License. If you cannot convey a -covered work so as to satisfy simultaneously your obligations under this -License and any other pertinent obligations, then as a consequence you may -not convey it at all. For example, if you agree to terms that obligate you -to collect a royalty for further conveying from those to whom you convey -the Program, the only way you could satisfy both those terms and this -License would be to refrain entirely from conveying the Program. - - 13. Use with the GNU Affero General Public License. - - Notwithstanding any other provision of this License, you have -permission to link or combine any covered work with a work licensed -under version 3 of the GNU Affero General Public License into a single -combined work, and to convey the resulting work. The terms of this -License will continue to apply to the part which is the covered work, -but the special requirements of the GNU Affero General Public License, -section 13, concerning interaction through a network will apply to the -combination as such. - - 14. Revised Versions of this License. - - The Free Software Foundation may publish revised and/or new versions of -the GNU General Public License from time to time. Such new versions will -be similar in spirit to the present version, but may differ in detail to -address new problems or concerns. - - Each version is given a distinguishing version number. If the -Program specifies that a certain numbered version of the GNU General -Public License "or any later version" applies to it, you have the -option of following the terms and conditions either of that numbered -version or of any later version published by the Free Software -Foundation. If the Program does not specify a version number of the -GNU General Public License, you may choose any version ever published -by the Free Software Foundation. - - If the Program specifies that a proxy can decide which future -versions of the GNU General Public License can be used, that proxy's -public statement of acceptance of a version permanently authorizes you -to choose that version for the Program. - - Later license versions may give you additional or different -permissions. However, no additional obligations are imposed on any -author or copyright holder as a result of your choosing to follow a -later version. - - 15. Disclaimer of Warranty. - - THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY -APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT -HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY -OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, -THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM -IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF -ALL NECESSARY SERVICING, REPAIR OR CORRECTION. - - 16. Limitation of Liability. - - IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING -WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS -THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY -GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE -USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF -DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD -PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), -EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF -SUCH DAMAGES. - - 17. Interpretation of Sections 15 and 16. - - If the disclaimer of warranty and limitation of liability provided -above cannot be given local legal effect according to their terms, -reviewing courts shall apply local law that most closely approximates -an absolute waiver of all civil liability in connection with the -Program, unless a warranty or assumption of liability accompanies a -copy of the Program in return for a fee. - - END OF TERMS AND CONDITIONS - - How to Apply These Terms to Your New Programs - - If you develop a new program, and you want it to be of the greatest -possible use to the public, the best way to achieve this is to make it -free software which everyone can redistribute and change under these terms. - - To do so, attach the following notices to the program. It is safest -to attach them to the start of each source file to most effectively -state the exclusion of warranty; and each file should have at least -the "copyright" line and a pointer to where the full notice is found. - - - Copyright (C) - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - -Also add information on how to contact you by electronic and paper mail. - - If the program does terminal interaction, make it output a short -notice like this when it starts in an interactive mode: - - Copyright (C) - This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. - This is free software, and you are welcome to redistribute it - under certain conditions; type `show c' for details. - -The hypothetical commands `show w' and `show c' should show the appropriate -parts of the General Public License. Of course, your program's commands -might be different; for a GUI interface, you would use an "about box". - - You should also get your employer (if you work as a programmer) or school, -if any, to sign a "copyright disclaimer" for the program, if necessary. -For more information on this, and how to apply and follow the GNU GPL, see -. - - The GNU General Public License does not permit incorporating your program -into proprietary programs. If your program is a subroutine library, you -may consider it more useful to permit linking proprietary applications with -the library. If this is what you want to do, use the GNU Lesser General -Public License instead of this License. But first, please read -. diff --git a/local/kaltura/db/access.php b/local/kaltura/db/access.php deleted file mode 100644 index e1b21b000602b..0000000000000 --- a/local/kaltura/db/access.php +++ /dev/null @@ -1,39 +0,0 @@ -. - -/** - * Kaltura local plug-in access.php - * - * @package local_kaltura - * @author Remote-Learner.net Inc - * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later - * @copyright (C) 2014 Remote Learner.net Inc http://www.remote-learner.net - */ - -$capabilities = array( - 'local/kaltura:download_trace_logs' => array( - 'captype' => 'read', - 'contextlevel' => CONTEXT_SYSTEM, - 'archetypes' => array( - 'manager' => CAP_ALLOW, - ) - ), - 'local/kaltura:migrate_data' => array( - 'captype' => 'read', - 'contextlevel' => CONTEXT_SYSTEM, - 'archetypes' => array( - 'manager' => CAP_ALLOW, - ) - ), -); \ No newline at end of file diff --git a/local/kaltura/db/install.php b/local/kaltura/db/install.php deleted file mode 100644 index 422b09aef583b..0000000000000 --- a/local/kaltura/db/install.php +++ /dev/null @@ -1,595 +0,0 @@ -. - -/** - * Kaltura Post installation and migration code. - * - * @package local - * @subpackage kaltura - * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later - */ - -require_once(dirname(dirname(__FILE__)) . '/locallib.php'); - -if (!defined('MOODLE_INTERNAL')) { - die('Direct access to this script is forbidden.'); /// It must be included from a Moodle page -} - - - -function xmldb_local_kaltura_install() { - - // Copy plug configuration data - migrate_configuration_data(); - - // Create new Kaltura video resource/presentations from old resource types - migrate_resource_data(); - - - // Create new Kaltura video assignment from old assignment type and update all - // user data pertaining to that assignment - migrate_assignment_data(); - - return true; -} - -/** - * This function migrates old video assignment type data and creates new Kaltura - * video assignment modules from the old data. Updates the course modules table - * to refer to the newly created video assignment module. Updates the - * grade_items table to refer to the newly created assignment module. If grades - * are found in the grade_grades table, create a new video assignment submission - * record using the data from the old video assignment submission record and - * remove the old assignment submission data. Lastly the old assignment record - * is remove. - */ -function migrate_assignment_data() { - global $DB; - - $dbman = $DB->get_manager(); - $assign_table_exists = false; - $module_exists = false; - $rebuild_courses = array(); - - $table = new xmldb_table('assignment'); - if ($dbman->table_exists($table)) { - $assign_table_exists = true; - } - - if ($module = $DB->get_record('modules', array('name'=> 'kalvidassign'))) { - $module_exists = true; - } - - if ($assign_table_exists && $module_exists) { - - try { - //Check of the kalvidassign module exists and retrieve all old assignments - $module_table_exists = kalvidassign_exists($dbman); - - $params = array('assignmenttype' => 'kaltura'); - $old_assignments = $DB->get_records('assignment', $params); - - if (!empty($old_assignments)) { - - foreach ($old_assignments as $assignment) { - - $courseid = $assignment->course; - $rebuild_courses[$courseid] = $courseid; - $kalvidassign_obj = create_new_kalvidassign($assignment); - $kalvidassign_id = add_new_kalvidassign($kalvidassign_obj); - - if ($kalvidassign_id) { - - // Update calendar event - update_calendar_event($kalvidassign_id, $assignment->id); - - // update course modules record for the video assignment by - // setting it to point to the new kalvidassign instance - $old_assignment_cm = get_coursemodule_from_instance('assignment', $assignment->id); - - if (empty($old_assignment_cm)) { - continue; - } - - $cm = new stdClass(); - $cm->id = $old_assignment_cm->id; - $cm->module = $module->id; - $cm->instance = $kalvidassign_id; - - // Replace the old assignment type reference with a reference to the new - // assignment module - if ($DB->update_record('course_modules', $cm)) { - - $param = array('itemtype' => 'mod', - 'itemmodule' => 'assignment', - 'iteminstance' => $assignment->id); - - $grade_item = $DB->get_record('grade_items', $param); - - // If this assignment has a grade item then update the references to point to the new - // assignment module - if (!empty($grade_item)) { - - // Now update the grade_items record - $grade_item->itemmodule = 'kalvidassign'; - $grade_item->iteminstance = $kalvidassign_id; - - if ($DB->update_record('grade_items', $grade_item)) { - - $param = array('itemid' => $grade_item->id); - $grade_grades = $DB->get_records('grade_grades', $param, 'id,userid'); - - if (!empty($grade_grades)) { - - foreach ($grade_grades as $grade_grade) { - - $param = array('assignment' => $assignment->id, - 'userid' => $grade_grade->userid); - $assign_sub = $DB->get_record('assignment_submissions', $param); - - if (!empty($assign_sub) && !empty($assign_sub->data1)) { - - // Create new user assignment submission - create_new_kalvidassign_submission($kalvidassign_id, $assign_sub); - - // Remove old submission - $param = array('id' => $assign_sub->id); - $DB->delete_records('assignment_submissions',$param); - - } // end of if submission exists - - } // end of foreach loop grade_grades - - } // end of if empty grade_grades - - } // end of if update grade item failed - - } // end of if grade item exists - - // Delete old assignment record - $param = array('id' => $assignment->id); - $DB->delete_records('assignment', $param); - - } - - } - - } - } - } catch (Exception $exp) { - add_to_log(SITEID, 'local_kaltura', 'Data migration error', '', $exp->getMessage()); - } - - } - - foreach ($rebuild_courses as $courseid) { - rebuild_course_cache($courseid); - } - -} - -/** - * Updates the calendar event entry to refer to the new video assignment - * instance - * - * @param int - Id of new assignment instance - * @param int - Id of old assignment instance - */ -function update_calendar_event($new_assignment_id, $old_assignment_id) { - global $DB; - - $param = array('modulename' => 'assignment', - 'instance' => $old_assignment_id); - $event = $DB->get_record('event', $param); - - if (!empty($event)) { - $event->modulename = 'kalvidassign'; - $event->instance = $new_assignment_id; - - $DB->update_record('event', $event); - } -} - -/** - * This function migrates old resource data from the resource_old table and - * creates new kaltura video resource/presentations modules with the old data. - * Updates the course modules table to point to the new video - * resource/presentation modules. Removes old resource data from the - * resource_old table as well as from the resource table - * - */ -function migrate_resource_data() { - global $CFG, $DB; - - $dbman = $DB->get_manager(); - $module_table_exists = false; - $kalvidpres_exists = false; - $resource_old_exists = false; - - // Check if the mdl_resource_old table exists and has any entries. If so then we may have old resource activites to upgrade - $table = new xmldb_table('resource_old'); - if ($dbman->table_exists($table)) { - $resource_old_exists = true; - } - - // If resource old exists run through the upgrade steps to migrate the data into individual modules - if ($resource_old_exists) { - - // Check of the kalvidres module exists and include it's lib.php - $module_table_exists = kalvidres_exists($dbman); - - if ($module_table_exists) { - require_once($CFG->dirroot.'/mod/kalvidres/lib.php'); - } - - // Check of the kalvidpres module exists and include it's lib.php - $module_table_exists = kalvidpres_exists($dbman); - - if ($module_table_exists) { - require_once($CFG->dirroot.'/mod/kalvidpres/lib.php'); - } - - $params = array('migrated' => 0, - 'vr' => 'kalturavideo', - 'vp' => 'kalturaswfdoc'); - $sql = "SELECT * - FROM {resource_old} - WHERE migrated = :migrated - AND (type = :vr OR type = :vp)"; - - $kaltura_old_resources = $DB->get_records_sql($sql, $params); - - // If old resources have been found then we must convert them into new plugins - if (!empty($kaltura_old_resources)) { - - foreach ($kaltura_old_resources as $old_resource) { - - // If a kalture video resoruce is found - if (0 == strcmp('kalturavideo', $old_resource->type)) { - - // Get module information for the kaltura video resource and add a new instance - if (!$module = $DB->get_record('modules', array('name'=> 'kalvidres'))) { - continue; - } - - // Create an instance of the Kaltura video resource - $kalvidres_obj = create_new_kalvidres($old_resource); - $kalvidres_inst_id = kalvidres_add_instance($kalvidres_obj); - - // If add instance was successful - if ($kalvidres_inst_id) { - - // update course modules record for the video resourse by setting it to point to the new kalvidres instance - $cm = new stdClass(); - $cm->id = $old_resource->cmid; - $cm->module = $module->id; - $cm->instance = $kalvidres_inst_id; - - // If update successful remove references to the obsolete video resource - if (!is_null($old_resource->cmid) && $DB->update_record('course_modules', $cm)) { - - // Remove old instance of the resource/kalturavideo module from the resource table - $param = array('id' => $old_resource->id); - $DB->delete_records('resource', $param); - - // Remove the record of the old instance from the resource_old table - $DB->delete_records('resource_old', $param); - - } else { // Remove instance from module table - - $param = array('id' => $kalvidres_inst_id); - $DB->delete_records('kalvidres', $param); - } - } - - } else if (0 == strcmp('kalturaswfdoc', $old_resource->type)) { - // If Kaltura video presentation is found - - // Get module information for the kaltura video presention and add a new instance - if (!$module = $DB->get_record('modules', array('name'=> 'kalvidpres'))) { - continue; - } - - // Create an instance of the Kaltura video presentation - $kalvidpres_obj = create_new_kalvidpres($old_resource); - $kalvidpres_inst_id = kalvidpres_add_instance($kalvidpres_obj); - - // If add instance was successful - if ($kalvidpres_inst_id) { - - // update course modules record for the video presentation by setting it to point to the new kalvidres instance - $cm = new stdClass(); - $cm->id = $old_resource->cmid; - $cm->module = $module->id; - $cm->instance = $kalvidpres_inst_id; - - // If update successful remove references to the obsolete video resource - if ($DB->update_record('course_modules', $cm)) { - - // Remove old instance of the resource/kalturaswfdoc module from the resource table - $param = array('id' => $old_resource->id); - $DB->delete_records('resource', $param); - - // Remove the record of the old instance from the resource_old table - $DB->delete_records('resource_old', $param); - - } else { // Remove instance from module table - - $param = array('id' => $kalvidpres_inst_id); - $DB->delete_records('kalvidres', $param); - } - } - } - } - } - } -} - -/** - * Update Kaltura 1.9 configuration settings to 2.1 spec settings. - * This function also removes all of the old 1.9 player configurations - */ -function migrate_configuration_data() { - global $DB; - - $param = array('plugin' => 'block_kaltura'); - $records = $DB->get_records('config_plugins', $param); - $name_map = configuration_data_mapping(); - - if (empty($records)) { - return true; - } - - foreach ($records as $record) { - switch ($record->name) { - case 'kaltura_conn_server': - case 'kaltura_uri': - case 'kaltura_login': - case 'kaltura_password': - case 'kaltura_secret': - case 'kaltura_adminsecret': - case 'kaltura_partner_id': - - $name = $record->name; - - if (array_key_exists($name , $name_map)) { - - $record->plugin = 'local_kaltura'; - $record->name = $name_map[$name ]; - - $DB->update_record('config_plugins', $record); - } - - break; - default: - - $param = array ('id' => $record->id); - $DB->delete_records('config_plugins', $param); - break; - } - - } - -} - -/** - * Constructs and returns an array of Moodle 1.9 kaltura configuration name - * mappings where the key is the 1.9 configuraiton name and the value is the 2.1 - * configuration name - * - * @param - none - * @return array - array key 1.9 names, value 2.1 names - */ -function configuration_data_mapping() { - return array('kaltura_conn_server' => 'conn_server', - 'kaltura_uri' => 'uri', - 'kaltura_login' => 'login', - 'kaltura_password' => 'password', - 'kaltura_secret' => 'secret', - 'kaltura_adminsecret' => 'adminsecret', - 'kaltura_partner_id' => 'partner_id'); -} - -/** - * Adds a new instance of the kaltura video assignment - * - * @param object - a kaltura video assignment instance object - * @return int - id of the newly inserted record or false - */ -function add_new_kalvidassign($kalvidassign) { - global $DB; - - $id = $DB->insert_record('kalvidassign', $kalvidassign); - - return $id; -} - -/** - * Construct a kaltura video assignmentobject using parameters from a Moodle 1.9 - * kaltura video assignment type - * - * @param object - kaltura video assignment object (ver: Moodle 1.9) - * @return object - kaltura video assignment object (var: Moodle 2.1) - */ -function create_new_kalvidassign($old_assignment) { - - $kalvidassign = new stdClass(); - - $kalvidassign->course = $old_assignment->course; - $kalvidassign->name = $old_assignment->name; - $kalvidassign->intro = $old_assignment->intro; - $kalvidassign->introformat = $old_assignment->introformat; - $kalvidassign->timeavailable = $old_assignment->timeavailable; - $kalvidassign->timedue = $old_assignment->timedue; - $kalvidassign->preventlate = $old_assignment->preventlate; - $kalvidassign->resubmit = $old_assignment->resubmit; - $kalvidassign->emailteachers = $old_assignment->emailteachers; - $kalvidassign->grade = $old_assignment->grade; - $kalvidassign->timecreated = $old_assignment->timemodified; - - return $kalvidassign; -} - -/** - * Adds a new instance of the kaltura video assignment submission - * - * @param int - Id of the kaltura video assignment the submission is for - * @param object - old video assignment submission object - * - * @return int - id of the newly inserted record or false - */ -function create_new_kalvidassign_submission($kalvidassign_id, $old_assign_sub) { - global $DB; - - $kalvidassign_sub = new stdClass(); - $kalvidassign_sub->vidassignid = $kalvidassign_id; - $kalvidassign_sub->userid = $old_assign_sub->userid; - $kalvidassign_sub->entry_id = $old_assign_sub->data1; - $kalvidassign_sub->grade = $old_assign_sub->grade; - $kalvidassign_sub->submissioncomment = $old_assign_sub->submissioncomment; - $kalvidassign_sub->format = $old_assign_sub->format; - $kalvidassign_sub->teacher = $old_assign_sub->teacher; - $kalvidassign_sub->mailed = $old_assign_sub->mailed; - $kalvidassign_sub->timemarked = $old_assign_sub->timemarked; - $kalvidassign_sub->timecreated = $old_assign_sub->timecreated; - $kalvidassign_sub->timemodified = $old_assign_sub->timemodified; - - $id = $DB->insert_record('kalvidassign_submission', $kalvidassign_sub); - - return $id; -} - -/** - * Construct a kaltura video resource object using parameters from a Moodle 1.9 - * kaltura video resource - * - * @param object - kaltura video resource object (ver: Moodle 1.9) - * @return object - kaltura video resource object (var: Moodle 2.1) - */ -function create_new_kalvidres($old_resource) { - - $kalvidres = new stdClass(); - - $kalvidres->course = $old_resource->course; - $kalvidres->name = $old_resource->name; - $kalvidres->intro = $old_resource->intro; - $kalvidres->introformat = $old_resource->introformat; - $kalvidres->entry_id = $old_resource->alltext; - $kalvidres->video_title = $old_resource->name; - $kalvidres->uiconf_id = KALTURA_PLAYER_PLAYERREGULARDARK; - $kalvidres->widescreen = 0; - $kalvidres->height = 365; - $kalvidres->width = 400; - - return $kalvidres; -} - -/** - * Construct a kaltura video presentation object using parameters from a Moodle - * 1.9 kaltura video resource - * - * @param object - kaltura video presentation object (ver: Moodle 1.9) - * @return object - kaltura video presentation object (var: Moodle 2.1) - */ -function create_new_kalvidpres($old_resource) { - - $kalvidpres = new stdClass(); - - $kalvidpres->course = $old_resource->course; - $kalvidpres->name = $old_resource->name; - $kalvidpres->intro = $old_resource->intro; - $kalvidpres->introformat = $old_resource->introformat; - $kalvidpres->entry_id = $old_resource->alltext; - $kalvidpres->video_entry_id = $old_resource->alltext; - $kalvidpres->doc_entry_id = $old_resource->alltext; - $kalvidpres->video_title = $old_resource->name; - $kalvidpres->uiconf_id = KALTURA_PLAYER_PLAYERVIDEOPRESENTATION; - $kalvidpres->widescreen = 0; - $kalvidpres->height = 365; - $kalvidpres->width = 400; - - return $kalvidpres; -} - - -/** - * Check if the Kaltura video assignment table schema exists - * - * @para object - db manager - * @return bool - true if exists, else false - */ -function kalvidassign_exists($dbman) { - global $CFG; - - // Check of the Kaltura video resource plugin exists - $table = new xmldb_table('kalvidassign'); - - if (!$dbman->table_exists($table)) { - return false; - } - - if (!file_exists($CFG->dirroot.'/mod/kalvidassign/lib.php')) { - return false; - } - - return true; -} - -/** - * Check if the Kaltura video resource table schema exists - * - * @para object - db manager - * @return bool - true if exists, else false - */ -function kalvidres_exists($dbman) { - global $CFG; - - // Check of the Kaltura video resource plugin exists - $table = new xmldb_table('kalvidres'); - - if (!$dbman->table_exists($table)) { - return false; - } - - if (!file_exists($CFG->dirroot.'/mod/kalvidres/lib.php')) { - return false; - } - - return true; -} - -/** - * Check if the Kaltura video presentation table schema exists - * - * @para object - db manager - * @return bool - true if exists, else false - */ -function kalvidpres_exists($dbman) { - global $CFG; - - // Check of the Kaltura video pres plugin exists - $table = new xmldb_table('kalvidpres'); - - if (!$dbman->table_exists($table)) { - return false; - } - - if (!file_exists($CFG->dirroot.'/mod/kalvidpres/lib.php')) { - return false; - } - - return true; -} diff --git a/local/kaltura/db/install.xml b/local/kaltura/db/install.xml deleted file mode 100755 index 59ccf34885d6c..0000000000000 --- a/local/kaltura/db/install.xml +++ /dev/null @@ -1,25 +0,0 @@ - - - - - - - - - - - - - - - - - - - -
    -
    -
    \ No newline at end of file diff --git a/local/kaltura/db/upgrade.php b/local/kaltura/db/upgrade.php deleted file mode 100644 index e9504b672d08e..0000000000000 --- a/local/kaltura/db/upgrade.php +++ /dev/null @@ -1,67 +0,0 @@ -. - -/** - * Upgrade code containing changes to the plugin data table. - * - * @package local_kaltura - * @author Remote-Learner.net Inc - * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later - * @copyright (C) 2014 Remote Learner.net Inc http://www.remote-learner.net - */ -function xmldb_local_kaltura_upgrade($oldversion) { - global $CFG, $DB; - - require_once($CFG->dirroot.'/local/kaltura/locallib.php'); - - $dbman = $DB->get_manager(); - - if ($oldversion < 2014013000) { - // Because the plug-in is being upgraded we need to set the migration flag to true. - set_config('migration_yes', 1, KALTURA_PLUGIN_NAME); - - // Define table local_kaltura_log to be created. - $table = new xmldb_table('local_kaltura_log'); - - // Adding fields to table local_kaltura_log. - $table->add_field('id', XMLDB_TYPE_INTEGER, '10', null, XMLDB_NOTNULL, XMLDB_SEQUENCE, null); - $table->add_field('module', XMLDB_TYPE_CHAR, '50', null, XMLDB_NOTNULL, null, null); - $table->add_field('type', XMLDB_TYPE_CHAR, '3', null, XMLDB_NOTNULL, null, null); - $table->add_field('endpoint', XMLDB_TYPE_CHAR, '255', null, XMLDB_NOTNULL, null, null); - $table->add_field('data', XMLDB_TYPE_TEXT, null, null, XMLDB_NOTNULL, null, null); - $table->add_field('timecreated', XMLDB_TYPE_INTEGER, '20', null, XMLDB_NOTNULL, null, '0'); - - // Adding keys to table local_kaltura_log. - $table->add_key('primary', XMLDB_KEY_PRIMARY, array('id')); - - // Adding indexes to table local_kaltura_log. - $table->add_index('module_idx', XMLDB_INDEX_NOTUNIQUE, array('module')); - $table->add_index('timecreated_idx', XMLDB_INDEX_NOTUNIQUE, array('timecreated')); - - // Conditionally launch create table for local_kaltura_log. - if (!$dbman->table_exists($table)) { - $dbman->create_table($table); - } - - // Kaltura savepoint reached. - upgrade_plugin_savepoint(true, 2014013000, 'local', 'kaltura'); - } - - if ($oldversion < 2014013000.01) { - // Kaltura savepoint reached. - upgrade_plugin_savepoint(true, 2014013000.01, 'local', 'kaltura'); - } -} \ No newline at end of file diff --git a/local/kaltura/download_log.php b/local/kaltura/download_log.php deleted file mode 100644 index 4da167e24fbf1..0000000000000 --- a/local/kaltura/download_log.php +++ /dev/null @@ -1,103 +0,0 @@ -. - -/** - * Download Kaltura logs page. - * - * @package local_kaltura - * @author Remote-Learner.net Inc - * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later - * @copyright (C) 2014 Remote Learner.net Inc http://www.remote-learner.net - */ - -require_once('../../config.php'); -require_once($CFG->dirroot.'/local/kaltura/download_log_form.php'); - -global $DB; - -$url = new moodle_url('/mod/lti/instructor_edit_tool_type.php'); -$context = context_system::instance(); -$heading = get_string('download_logs_title', 'local_kaltura'); -$site = get_site(); - -$PAGE->navbar->add(get_string('administrationsite')); -$PAGE->navbar->add(get_string('plugins', 'admin')); -$PAGE->navbar->add(get_string('localplugins')); -$PAGE->navbar->add(get_string('pluginname', 'local_kaltura'), new moodle_url('/admin/settings.php', array('section' => 'local_kaltura'))); -$PAGE->navbar->add(get_string('download_logs_title', 'local_kaltura')); - -$PAGE->set_url($url); -$PAGE->set_context($context); - -$PAGE->set_context($context); -$PAGE->set_pagelayout('standard'); -$PAGE->set_pagetype('local-kaltura-download-log'); -$PAGE->set_title($heading); -$PAGE->set_heading($site->fullname); - -require_login(null, false); - -require_capability('local/kaltura:download_trace_logs', $context); - -$url = new moodle_url('/admin/settings.php', array('section' => 'local_kaltura')); -$downloadurl = new moodle_url('/local/kaltura/download_log.php'); - -$form = new local_kaltura_download_log_form(); -if ($data = $form->get_data()) { - // User hit cancel. Redirect them back to the settings page. - if (isset($data->cancel)) { - redirect($url); - } - - require_sesskey(); - - // User hit submit button. Check for records since the configured date. - if (isset($data->submitbutton)) { - $rs = $DB->get_recordset_select('local_kaltura_log', 'timecreated >= ?', array($data->logs_start_time), 'timecreated ASC'); - - // Check if the recordset contains any data. - if ($rs->valid()) { - header('Content-Type: text/csv; charset=utf-8'); - header('Content-Disposition: attachment; filename=kalturalogs.csv'); - - // create a file pointer connected to the output stream - $output = fopen('php://output', 'w'); - - // output the column headings - fputcsv($output, array('Request/Response', 'Time', 'Module', 'Endpoint', 'Data (JSON)')); - - foreach ($rs as $record) { - $record->data = json_encode(unserialize($record->data)); - fputcsv($output, array($record->type, userdate($record->timecreated), $record->module, $record->endpoint, $record->data)); - } - - $rs->close(); - die(); - } else { - notice(get_string('no_records', 'local_kaltura'), $downloadurl); - } - } - - if (isset($data->deletelogs)) { - $DB->delete_records_select('local_kaltura_log', 'id > 0'); - notice(get_string('records_deleted', 'local_kaltura'), $downloadurl); - } -} - -echo $OUTPUT->header(); -echo $OUTPUT->heading(get_string('download_logs_title', 'local_kaltura')); -$form->display(); -echo $OUTPUT->footer(); diff --git a/local/kaltura/download_log_form.php b/local/kaltura/download_log_form.php deleted file mode 100644 index 10d089d4d17a7..0000000000000 --- a/local/kaltura/download_log_form.php +++ /dev/null @@ -1,46 +0,0 @@ -. - -/** - * @package local_kaltura - * @author Remote-Learner.net Inc - * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later - * @copyright (C) 2014 Remote Learner.net Inc http://www.remote-learner.net - */ - -defined('MOODLE_INTERNAL') || die; - -require_once($CFG->libdir.'/formslib.php'); -/** - * Download Kaltura logs form class. - */ -class local_kaltura_download_log_form extends moodleform { - /** - * This function defines the elements on the form. - */ - public function definition() { - $mform =& $this->_form; - - $mform->addElement('header', 'setup', get_string('options')); - $mform->addElement('date_selector', 'logs_start_time', get_string('download_log_range', 'local_kaltura')); - - $buttonarray=array(); - $buttonarray[] =& $mform->createElement('submit', 'submitbutton', get_string('download')); - $buttonarray[] =& $mform->createElement('submit', 'cancel', get_string('cancel')); - $buttonarray[] =& $mform->createElement('submit', 'deletelogs', get_string('delete_logs', 'local_kaltura')); - $mform->addGroup($buttonarray, 'buttonar', '', array(' '), false); - } -} \ No newline at end of file diff --git a/local/kaltura/lang/en/local_kaltura.php b/local/kaltura/lang/en/local_kaltura.php deleted file mode 100644 index 32c1d7aba9e64..0000000000000 --- a/local/kaltura/lang/en/local_kaltura.php +++ /dev/null @@ -1,64 +0,0 @@ -. - -/** - * Kaltura language file. - * - * @package local_kaltura - * @author Remote-Learner.net Inc - * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later - * @copyright (C) 2014 Remote Learner.net Inc http://www.remote-learner.net - */ - -$string['admin_secret'] = 'Admin secret'; -$string['admin_secret_desc'] = 'Enter the admin secret for your account.'; -$string['cancelbtn'] = 'Cancel'; -$string['categories_created'] = 'Number of categories created:'; -$string['delete_logs'] = 'Purge all logs'; -$string['download_logs_title'] = 'Download logs'; -$string['download_log_range'] = 'Download logs newer than selected date'; -$string['entries_migrated'] = 'The number of entries migrated:'; -$string['insertbtn'] = 'Embed media'; -$string['invalid_url'] = 'Invalid URL'; -$string['kaf_configuration_hdr'] = 'KAF configuration'; -$string['kaf_uri'] = 'KAF URI'; -$string['kaf_uri_desc'] = 'Type in the server URI of your KAF instance.'; -$string['kaltura_course_reports'] = 'Kaltura Course Media Reports'; -$string['kaltura:download_trace_logs'] = 'Download Kaltura trace logs'; -$string['kaltura:migrate_data'] = 'Migrate Kaltura Data'; -$string['migration_cannot_connect'] = 'Error connecting to Kaltura.'; -$string['migration_complete_redirect'] = 'The migration has been completed.'; -$string['migration_has_stopped'] = 'Due to the large amounts of data only a portion of the migration was completed. The last known location has been saved and you may continue migrating your data.'; -$string['migration_header'] = 'Data migration'; -$string['migration_kaf_url_not_set'] = 'The KAF URI is not set. Please enter a KAF URI before starting the migration'; -$string['migration_not_started'] = 'Click the start/continue button to start the migration.'; -$string['migration_notice'] = 'Data from your account needs to be migrated in order to be used with this version of the plug-ins. Go to the
    Migration page to begin the process.'; -$string['migration_root_category_not_set'] = 'Unable to determine the root category id.'; -$string['migration_profile_id_not_set'] = 'Unable to determine the metadata profile id.'; -$string['migration_select_a_category'] = 'Select a KAF category to migrate to'; -$string['migration_start_continue'] = 'Start / Continue'; -$string['migration_start_over_redirect'] = 'The migration statistics and last known location has been restarted.'; -$string['migration_start_time'] = 'The migration was originally started at:'; -$string['missing_required_info'] = 'Warning: the Partner id or Admin secret is empty. The Kaltura plug-ins will not work.'; -$string['no_records'] = 'No records returned.'; -$string['original_kafcategory'] = 'The KAF category selected for migration.'; -$string['partner_id'] = 'Partner id'; -$string['partner_id_desc'] = 'Enter the partner id for your account.'; -$string['pluginname'] = 'Kaltura package libraries'; -$string['records_deleted'] = 'All Kaltura log records were deleted.'; -$string['server_uri'] = 'Server URI'; -$string['server_uri_desc'] = 'Type in the server URI you want to connect to. Otherwise just type in the default settings (This setting is used for migration purposes).'; -$string['startover'] = 'Restart migration'; -$string['trace_log'] = 'Enable trace logging'; -$string['trace_log_desc'] = 'If enabled, all requests and responses to and from Kaltura are logged. These logs can be used by Kaltura support to diagnose any problems encountered. Enabling this setting may affect Moodle performance. You may download a CSV file of the logs from here.'; diff --git a/local/kaltura/lib.php b/local/kaltura/lib.php deleted file mode 100644 index 4778a2c55e957..0000000000000 --- a/local/kaltura/lib.php +++ /dev/null @@ -1,24 +0,0 @@ -. - -/** - * Kaltura library file. - * - * @package local_kaltura - * @author Remote-Learner.net Inc - * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later - * @copyright (C) 2014 Remote Learner.net Inc http://www.remote-learner.net - */ \ No newline at end of file diff --git a/local/kaltura/locallib.php b/local/kaltura/locallib.php deleted file mode 100644 index 555188bed88f3..0000000000000 --- a/local/kaltura/locallib.php +++ /dev/null @@ -1,715 +0,0 @@ -. - -/** - * Kaltura local library of functions. - * - * @package local_kaltura - * @author Remote-Learner.net Inc - * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later - * @copyright (C) 2014 Remote Learner.net Inc http://www.remote-learner.net - */ - -if (!defined('MOODLE_INTERNAL')) { - die('Direct access to this script is forbidden.'); -} - -require_once($CFG->dirroot.'/mod/lti/locallib.php'); - -define('KALTURA_PLUGIN_NAME', 'local_kaltura'); -define('KALTURA_DEFAULT_URI', 'www.kaltura.com'); -define('KALTURA_REPORT_DEFAULT_URI', 'http://apps.kaltura.com/hosted_pages'); -define('KAF_MYMEDIA_MODULE', 'mymedia'); -define('KAF_MEDIAGALLERY_MODULE', 'coursegallery'); -define('KAF_BROWSE_EMBED_MODULE', 'browseembed'); -define('KAF_MYMEDIA_ENDPOINT', 'hosted/index/my-media'); -define('KAF_MEDIAGALLERY_ENDPOINT', 'hosted/index/course-gallery'); -define('KAF_BROWSE_EMBED_ENDPOINT', 'browseandembed/index/browseandembed'); -define('KALTURA_LOG_REQUEST', 'REQ'); -define('KALTURA_LOG_RESPONSE', 'RES'); -define('KALTURA_PANEL_HEIGHT', 580); -define('KALTURA_PANEL_WIDTH', 1100); -define('KALTURA_LTI_LEARNER_ROLE', 'Learner'); -define('KALTURA_LTI_INSTRUCTOR_ROLE', 'Instructor'); -define('KALTURA_LTI_ADMIN_ROLE', 'urn:lti:sysrole:ims/lis/Administrator'); -define('KALTURA_REPO_NAME', 'kaltura'); -// For KALTURA_URI_TOKEN -// 1. Do not use characters that are used in regular expressions like {}[]() -// 2. Moodle cleans up urls that look like relative links into complete urls by inserting $CFG->wwwroot -define('KALTURA_URI_TOKEN', 'kaltura-kaf-uri.com'); - -/** - * This function validates whether a requested KAF module is valid. - * @param string $module The name of the module. - * @return bool True if valid, otherwise false. - */ -function local_kaltura_validate_kaf_module_request($module) { - $valid = false; - - switch ($module) { - case KAF_MYMEDIA_MODULE: - $valid = true; - break; - case KAF_MEDIAGALLERY_MODULE: - $valid = true; - break; - case KAF_BROWSE_EMBED_MODULE: - $valid = true; - break; - } - return $valid; -} - -/** - * This function calls @see lti_get_launch_container() to an LTI launch container to display the content. - * @param bool $withblocks Set to true to dislay embed content with Moodle blocks. Otherwise set to false. - * @return int Container value - */ -function local_kaltura_get_lti_launch_container($withblocks = true) { - $lti = new stdClass(); - $container = 0; - - if (!empty($withblocks)) { - $lti->launchcontainer = LTI_LAUNCH_CONTAINER_EMBED; - $container = lti_get_launch_container($lti, array('launchcontainer' => LTI_LAUNCH_CONTAINER_EMBED)); - } else { - $lti->launchcontainer = LTI_LAUNCH_CONTAINER_EMBED_NO_BLOCKS; - $container = lti_get_launch_container($lti, array('launchcontainer' => LTI_LAUNCH_CONTAINER_EMBED_NO_BLOCKS)); - } - - return $container; -} - -/** - * This function validates the parameters to see if all of the requirements for the module are met. - * @param array $params An array of parameters - * @return bool true if valid, otherwise false - */ -function local_kaltura_validate_mymedia_required_params($params) { - $valid = true; - - $expectedkeys = array( - // The activity instance id - 'id' => '', - // The KAL module requested - 'module' => '', - 'course' => new stdClass(), - 'title' => '', - 'width' => '', - 'height' => '', - 'cmid' => '', - 'custom_publishdata' => '', - ); - - // Get keys that reside in both parameters and expectedkeys - $matchingkeys = array_intersect_key($params, $expectedkeys); - - // The number of keys in the result should equal the number of expectedkeys - if (count($expectedkeys) != count($matchingkeys)) { - return false; - } - - $invalid = !is_numeric($params['id']) || !is_numeric($params['width']) || !is_numeric($params['height']) || !is_numeric($params['cmid']) || !is_object($params['course']); - - if ($invalid) { - return false; - } - - return true; -} - -/** - * This function validates the parameters to see if all of the requirements for the module are met. - * @param array $params An array of parameters - * @return bool true if valid, otherwise false - */ -function local_kaltura_validate_mediagallery_required_params($params) { - $valid = true; - - $expectedkeys = array( - // The activity instance id - 'id' => '', - // The KAL module requested - 'module' => '', - 'course' => new stdClass(), - 'title' => '', - 'width' => '', - 'height' => '', - 'cmid' => '', - 'custom_publishdata' => '', - ); - - // Get keys that reside in both parameters and expectedkeys - $matchingkeys = array_intersect_key($params, $expectedkeys); - - // The number of keys in the result should equal the number of expectedkeys - if (count($expectedkeys) != count($matchingkeys)) { - return false; - } - - $invalid = !is_numeric($params['id']) || !is_numeric($params['width']) || !is_numeric($params['height']) || !is_numeric($params['cmid']) || !is_object($params['course']); - - if ($invalid) { - return false; - } - - return true; -} - -/** - * This function validates the parameters to see if all of the requirements for the module are met. - * @param array $params An array of parameters - * @return bool true if valid, otherwise false - */ -function local_kaltura_validate_browseembed_required_params($params) { - $valid = true; - - $expectedkeys = array( - // The activity instance id - 'id' => '', - // The KAL module requested - 'module' => '', - 'course' => new stdClass(), - 'title' => '', - 'width' => '', - 'height' => '', - 'cmid' => '', - 'custom_publishdata' => '', - ); - - // Get keys that reside in both parameters and expectedkeys - $matchingkeys = array_intersect_key($params, $expectedkeys); - - // The number of keys in the result should equal the number of expectedkeys - if (count($expectedkeys) != count($matchingkeys)) { - return false; - } - - $invalid = !is_numeric($params['id']) || !is_numeric($params['width']) || !is_numeric($params['height']) || !is_numeric($params['cmid']) || !is_object($params['course']); - - if ($invalid) { - return false; - } - - return true; -} - -/** - * This function returns the endpoint URL belonging to the module that was requested. - * @param string $module The name of the module being requested. - * @param string Part of the URL that makes up the endpoint pertaining to the module requested. - * @return string Part of the URL for the end point designated for the module. Otherwise an empty string. - */ -function local_kaltura_get_endpoint($module) { - switch ($module) { - case KAF_MYMEDIA_MODULE: - return KAF_MYMEDIA_ENDPOINT; - break; - case KAF_MEDIAGALLERY_MODULE: - return KAF_MEDIAGALLERY_ENDPOINT; - break; - case KAF_BROWSE_EMBED_MODULE: - return KAF_BROWSE_EMBED_ENDPOINT; - break; - } - return ''; -} - -/** - * This function replaces the KALTURA_TOKEN_URI in a source URL with KAF URI domain. - * @param string $url A url which need the kaf_uri added. - * @return string Returns url with added KAF URI domain. - */ -function local_kaltura_add_kaf_uri_token($url) { - $configsettings = local_kaltura_get_config(); - // For records that have been migrated from old kaf uri to token format by search and replace. - if (preg_match('/https?:\/\/'.KALTURA_URI_TOKEN.'/', $url)) { - $url = preg_replace('/https?:\/\/'.KALTURA_URI_TOKEN.'/', $configsettings->kaf_uri, $url); - } - return $url; -} - -/** - * This function formats and returns an object that will be passed to mod_lti locallib.php functions. - * @param array $ltirequest An array of parameters to be converted into a properly formatted mod_lti instance. - * @return object Returns an object that meets the requirements for use with mod_lti locallib.php functions. - */ -function local_kaltura_format_lti_instance_object($ltirequest) { - $configsettings = local_kaltura_get_config(); - - // Convert request parameters into mod_lti friendly format for consumption. - $lti = new stdClass(); - $lti->course = $ltirequest['course']->id; - $lti->id = $ltirequest['id']; - $lti->name = $ltirequest['title']; - $lti->intro = isset($ltirequest['intro']) ? $ltirequest['intro'] : ''; - $lti->instructorchoicesendname = LTI_SETTING_ALWAYS; - $lti->instructorchoicesendemailaddr = LTI_SETTING_ALWAYS; - $lti->custom_publishdata = ''; - $lti->instructorcustomparameters = ''; - $lti->instructorchoiceacceptgrades = LTI_SETTING_NEVER; - $lti->instructorchoiceallowroster = LTI_SETTING_NEVER; - $lti->resourcekey = $configsettings->partner_id; - $lti->password = $configsettings->adminsecret; - // The Kaltura tool URL includes the account partner id. - $newuri = $configsettings->kaf_uri; - $lti->toolurl = $newuri; - if (!preg_match('/\/$/',$newuri)) { - $lti->toolurl .= '/'; - } - $lti->toolurl .= local_kaltura_get_endpoint($ltirequest['module']); - // Do not force SSL. At the module level. - $lti->forcessl = 0; - $lti->cmid = $ltirequest['cmid']; - - // Check if a source URL was passed. This means that a plug-in has requested to view a media entry and not a KAF interface. - if (!isset($ltirequest['source']) || empty($ltirequest['source'])) { - // If the Moodle site is configured to use HTTPS then this property will be used. - $lti->securetool = 'https://'.local_kaltura_format_uri(trim($lti->toolurl)); - $lti->toolurl = 'http://'.local_kaltura_format_uri(trim($lti->toolurl)); - } else { - $url = local_kaltura_format_uri($ltirequest['source']); - // If the Moodle site is configured to use HTTPS then this property will be used. - $lti->securetool = 'https://'.trim($url); - $lti->toolurl = 'http://'.trim($url); - } - - return $lti; -} - -/** - * This function formats an array that is passed to mod_lti locallib.php functions. - * @param object $lti An object returned from @see local_kaltura_format_lti_instance_object(). - * @param bool $withblocks Set to true to display blocks. Otherwise false. - * @return array An array formatted for use by mod_lti locallib.php functions. - */ -function local_kaltura_format_typeconfig($lti, $withblocks = true) { - $typeconfig = array(); - $typeconfig['sendname'] = $lti->instructorchoicesendname; - $typeconfig['sendemailaddr'] = $lti->instructorchoicesendemailaddr; - $typeconfig['customparameters'] = $lti->instructorcustomparameters; - $typeconfig['acceptgrades'] = $lti->instructorchoiceacceptgrades; - $typeconfig['allowroster'] = $lti->instructorchoiceallowroster; - $typeconfig['launchcontainer'] = local_kaltura_get_lti_launch_container($withblocks); - return $typeconfig; -} - -/** - * This function is based off of the code from @see lti_view(). - * @param string $endpoint The URL to access the KAF LTI tool. - * @param string $params The signed parameters returned by @see lti_sign_parameters(). - */ -function local_kaltura_strip_querystring($endpoint, $params) { - $endpointurl = new moodle_url($endpoint); - $endpointparams = $endpointurl->params(); - - // Strip querystring params in endpoint url from $parms to avoid duplication. - if (!empty($endpointparams) && !empty($parms)) { - foreach (array_keys($endpointparams) as $paramname) { - if (isset($parms[$paramname])) { - unset($parms[$paramname]); - } - } - } -} - -/** - * This function converts an LTI request object into a properly formatted LTI request that can be consumed by Moodle's LTI local library. - * The function is modeled closely after @see lti_view(). The code was refactored because the original function relied too heavily on - * there being an LTI tool defined in the LTI activity instance table. - * @param array $ltirequest An array with parameters specifying some required information for an LTI launch. - * @param array $withblocks True if Moodle blocks are to be included on the page else false. - * @return string Returns HTML required to initiate an LTI launch. - */ -function local_kaltura_request_lti_launch($ltirequest, $withblocks = true) { - global $CFG, $USER; - - $requestparams = array(); - - $lti = local_kaltura_format_lti_instance_object($ltirequest); - - $typeconfig = local_kaltura_format_typeconfig($lti, $withblocks); - - // This line was taken from @see lti_add_type. - // Create a salt value to be used for signing passed data to extension services - // The outcome service uses the service salt on the instance. This can be used - // for communication with services not related to a specific LTI instance. - $lti->servicesalt = uniqid('', true); - - // If SSL is forced, use HTTPS. - $endpoint = $lti->toolurl; - if (lti_request_is_using_ssl()) { - $endpoint = $lti->securetool; - } - - $requestparams = lti_build_request((object) $lti, $typeconfig, $ltirequest['course']); - - // Moodle by default uses the Moodle user id. Overriding this parameter to user the Moodle username. - $requestparams['user_id'] = $USER->username; - - // This block of code is loosly based off code from @see lti_view(). - $urlparts = parse_url($CFG->wwwroot); - $requestparams['tool_consumer_instance_guid'] = $urlparts['host']; - - $returnurlparams['unsigned'] = '0'; - - // Add the return URL. We send the launch container along to help us avoid frames-within-frames when the user returns. - $url = new moodle_url('/local/kaltura/service.php', $returnurlparams); - $requestparams['launch_presentation_return_url'] = $url->out(false); - - $serviceurl = new moodle_url('/local/kaltura/service.php'); - $requestparams['lis_outcome_service_url'] = $serviceurl->out(false); - - // Add custom parameters - $requestparams['custom_publishdata'] = local_kaltura_get_kaf_publishing_data(); - - // Specific settings for video presentation requests. - if (isset($ltirequest['custom_disable_add_new'])) { - $requestparams['custom_disable_add_new'] = $ltirequest['custom_disable_add_new']; - } - - if (isset($ltirequest['custom_filter_type'])) { - $requestparams['custom_filter_type'] = $ltirequest['custom_filter_type']; - } - - $params = lti_sign_parameters($requestparams, $endpoint, 'POST', $lti->resourcekey, $lti->password); - - local_kaltura_strip_querystring($endpoint, $params); - - $debuglaunch = 0; - - $content = lti_post_launch_html($params, $endpoint, $debuglaunch); - - // Check if debugging is enabled. - $enablelogging = get_config(KALTURA_PLUGIN_NAME, 'enable_logging'); - if (!empty($enablelogging)) { - local_kaltura_log_data($ltirequest['module'], $endpoint, $params, true); - } - - return $content; -} - -/** - * Writes data to the log table. - * @param string $module The module where the request originated from. - * @param string $endpoint The URL the request went out to. - * @param array $data All parameters used to created the request. - * @param bool $request Set to true if this is a request. Set to false if it is a response. - * @return bool True if the log entry was created. Otherwise false. - */ -function local_kaltura_log_data($module, $endpoint, $data, $request = true) { - global $DB; - - if (!is_array($data)) { - return false; - } - - $record = new stdClass(); - $record->type = KALTURA_LOG_RESPONSE; - - // If this is a request being sent out, validate the module and make sure it is a supported module. - if (!empty($request)) { - // Validate whether the module is one that is supported. - if (!local_kaltura_validate_kaf_module_request($module)) { - return false; - } - - $record->type = KALTURA_LOG_REQUEST; - } - - $record->module = $module; - $record->timecreated = time(); - $record->endpoint = $endpoint; - $record->data = serialize($data); - $DB->insert_record('local_kaltura_log', $record); - - return true; -} - -/** - * This functions removes the HTTP protocol and the trailing slash from a URI. - * @param string $uri The URI to format. - * @return string The formatted URI with the protocol and trailing slash removed. - */ -function local_kaltura_format_uri($uri) { - $newuri = str_replace('https://', '', $uri); - $newuri = str_replace('http://', '', $newuri); - $newuri = str_replace('www.', '', $newuri); - $newuri = rtrim($newuri, '/'); - return $newuri; -} - -/** - * This function creates a JSON string of the courses the user is enrolled in and the LTI roles the user has in the course. - * The JSON string is cached in the user's session global for efficiency purposes. - * @return string A JSON data structure outlining the user's LTI roles in all of their enroled courses. - */ -function local_kaltura_get_kaf_publishing_data() { - global $USER, $SITE; - - $role = is_siteadmin($USER->id) ? KALTURA_LTI_ADMIN_ROLE : KALTURA_LTI_INSTRUCTOR_ROLE; - $json = new stdClass(); - $json->courses = array(); - $hascap = false; - - // If the user is not an admin then retrieve all of the user's enroled courses. - if (KALTURA_LTI_ADMIN_ROLE != $role) { - $courses = enrol_get_users_courses($USER->id, true, 'id,fullname', 'fullname ASC'); - } else { - // Calling refactored code that allows for a limit on the number of courses returned. - $courses = local_kaltura_get_user_capability_course('moodle/course:manageactivities', $USER->id, true, 'id,fullname', 'fullname ASC'); - } - - foreach ($courses as $course) { - if ($course->id === $SITE->id) { - // Don't want to include the site id in this list - continue; - } - - if (KALTURA_LTI_ADMIN_ROLE != $role) { - // Check if the user has the manage capability in the course. - $hascap = has_capability('moodle/course:manageactivities', context_course::instance($course->id), $USER->id, false); - $role = $hascap ? KALTURA_LTI_INSTRUCTOR_ROLE : KALTURA_LTI_LEARNER_ROLE; - } - - // The properties must be nameed "courseId", "courseName" and "roles". - $data = new stdClass(); - $data->courseId = $course->id; - $data->courseName = $course->fullname; - $data->roles = $role; - $json->courses[$course->id] = $data; - } - - // Return an array with no pre-defined keys to structure the JSON the way Kaltura needs it to be. - $json->courses = array_values($json->courses); - - return json_encode($json); -} - -/** - * NOTE: This function is refactored from @see get_user_capability_course() from accesslib.php. The difference is the ability to - * limit the number of records returned. - * - * This function gets the list of courses that this user has a particular capability in. - * It is still not very efficient. - * - * @param string $capability Capability in question. - * @param int $userid User ID or null for current user. - * @param bool $doanything True if 'doanything' is permitted (default). - * @param string $fieldsexceptid Leave blank if you only need 'id' in the course records; - * otherwise use a comma-separated list of the fields you require, not including id. - * @param string $orderby If set, use a comma-separated list of fields from course - * table with sql modifiers (DESC) if needed. - * @param string $limit Limit the set of data returned. - * @return array Array of courses, may have zero entries. Or false if query failed. - */ -function local_kaltura_get_user_capability_course($capability, $userid = null, $doanything = true, $fieldsexceptid = '', $orderby = '', $limit = 200) { - global $DB; - - // Convert fields list and ordering. - $fieldlist = ''; - if ($fieldsexceptid) { - $fields = explode(',', $fieldsexceptid); - foreach($fields as $field) { - $fieldlist .= ',c.'.$field; - } - } - if ($orderby) { - $fields = explode(',', $orderby); - $orderby = ''; - foreach($fields as $field) { - if ($orderby) { - $orderby .= ','; - } - $orderby .= 'c.'.$field; - } - $orderby = 'ORDER BY '.$orderby; - } - - // Obtain a list of everything relevant about all courses including context. - // Note the result can be used directly as a context (we are going to), the course - // fields are just appended. - - $contextpreload = context_helper::get_preload_record_columns_sql('x'); - - $courses = array(); - $sql = "SELECT c.id $fieldlist, $contextpreload - FROM {course} c - JOIN {context} x ON (c.id=x.instanceid - AND x.contextlevel=".CONTEXT_COURSE.") - $orderby"; - $rs = $DB->get_recordset_sql($sql, null, 0, $limit); - - // Check capability for each course in turn. - foreach ($rs as $course) { - context_helper::preload_from_record($course); - $context = context_course::instance($course->id); - if (has_capability($capability, $context, $userid, $doanything)) { - // We've got the capability. Make the record look like a course record - // and store it - $courses[] = $course; - } - } - $rs->close(); - return empty($courses) ? array() : $courses; -} - -/** - * This function gets the local configuration and sanitizes the settings. - * @return object Returns object containing configuration settings for kaltura local plugin. - */ -function local_kaltura_get_config() { - $configsettings = get_config(KALTURA_PLUGIN_NAME); - if (empty($configsettings->kaf_uri)) { - $configsettings->kaf_uri = ""; - } - // If a https url is needed for kaf_uri it should be entered into the kaf_uri setting as https://. - if (!empty($configsettings->kaf_uri) && !preg_match('#^https?://#', $configsettings->kaf_uri)) { - $configsettings->kaf_uri = 'http://'.$configsettings->kaf_uri; - } - return $configsettings; -} - -/** - * This functions checks if a URL contains the host name that is configiured for the plug-in. - * @param string $url The URL to validate. - * @return bool Returns true if the URL contains the configured host name. Otherwise false. - */ -function local_kaltura_url_contains_configured_hostname($url) { - $configuration = local_kaltura_get_config(); - $configuri = local_kaltura_format_uri($configuration->kaf_uri); - - if (empty($configuri)) { - return false; - } - $position = strpos($url, $configuri); - if (false === $position) { - return false; - } - - return true; -} - -/** - * This function returns the URL parameter with a protocol prefixed, if non was detected. http:// is used by default if no protocol is found. - * @param string $url The URL to verify. - * @return string Returns the URL with the protocol. An empty string is returned in the case of an exception being thrown. - */ -function local_kaltura_add_protocol_to_url($url) { - $newurl = ''; - if (0 === strpos($url, 'https://')) { - $newurl = $url; - } else if (0 === strpos($url, 'http://')) { - $newurl = $url; - } else { - $newurl = 'http://'.$url; - } - - try { - $newurl = validate_param($newurl, PARAM_URL); - } catch (invalid_parameter_exception $e) { - return ''; - } - - return $newurl; -} - -/** - * This function searlizes an object or array and base 64 encodes it for storage into a table. - * @param array|object $object An object or array. - * @return string A base 64 encoded string of the parameter. - */ -function local_kaltura_encode_object_for_storage($object) { - // Check if the parameter either an object or array of if it's empty. - $data = $object; - if (!is_array($data)) { - $data = (array) $data; - } - - if (empty($data) || (!is_array($object) && !is_object($object))) { - return ''; - } - - return base64_encode(serialize($object)); -} - -/** - * This function base 64 decodes and unsearlizes an object. - * @param string $object A base 64 encoded string. - * @return array|object An array or object. - */ -function local_kaltura_decode_object_for_storage($object) { - // Check if the parameter is empty. - if (empty($object)) { - return ''; - } - - return unserialize(base64_decode($object)); -} - -/** - * This function takes a KalturaMediaEntry or KalturaDataEntry object and converts it into a Moodle metadata object. - * @param KalturaMediaEntry $object A KalturaMediaEntry object - * @return object|bool A slimed down version of the KalturaMediaEntry object, with slightly different object property names. Or false if an error was found. - */ -function local_kaltura_convert_kaltura_base_entry_object($object) { - $metadata = new stdClass; - - if ($object instanceof KalturaMediaEntry) { - - $metadata->url = ''; - $metadata->dataurl = $object->dataUrl; - $metadata->width = $object->width; - $metadata->height = $object->height; - $metadata->entryid = $object->id; - $metadata->title = $object->name; - $metadata->thumbnailurl = $object->thumbnailUrl; - $metadata->duration = $object->duration; - $metadata->description = $object->description; - $metadata->createdat = $object->createdAt; - $metadata->owner = $object->creatorId; - $metadata->tags = $object->tags; - $metadata->showtitle = 'on'; - $metadata->showdescription = 'on'; - $metadata->showowner = 'on'; - $metadata->player = ''; - $metadata->size = ''; - } else if ($object instanceof KalturaDataEntry) { - - $metadata->url = ''; - $metadata->dataurl = ''; - $metadata->url = ''; - $metadata->width = 0; - $metadata->height = 0; - $metadata->entryid = $object->id; - $metadata->title = $object->name; - $metadata->thumbnailurl = $object->thumbnailUrl; - $metadata->duration = 0; - $metadata->description = $object->description; - $metadata->createdat = $object->createdAt; - $metadata->owner = $object->creatorId; - $metadata->tags = $object->tags; - $metadata->showtitle = 'on'; - $metadata->showdescription = 'on'; - $metadata->showowner = 'on'; - $metadata->player = ''; - $metadata->size = ''; - } else { - $metadata = false; - } - - return $metadata; -} \ No newline at end of file diff --git a/local/kaltura/migration.php b/local/kaltura/migration.php deleted file mode 100644 index 0d4cc51b72f86..0000000000000 --- a/local/kaltura/migration.php +++ /dev/null @@ -1,114 +0,0 @@ -. - -/** - * Migration page. - * - * @package local_kaltura - * @author Remote-Learner.net Inc - * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later - * @copyright (C) 2014 Remote Learner.net Inc http://www.remote-learner.net - */ - -require_once('../../config.php'); -require_once($CFG->dirroot.'/local/kaltura/migration_form.php'); -require_once('locallib.php'); -require_once('API/KalturaClient.php'); -require_once($CFG->libdir.'/xmldb/xmldb_object.php'); -require_once($CFG->libdir.'/xmldb/xmldb_table.php'); -require_once('migrationlib.php'); - -$url = new moodle_url('/local/kaltura/migration.php'); -$context = context_system::instance(); -$heading = get_string('migration_header', 'local_kaltura'); -$site = get_site(); - -$PAGE->navbar->add(get_string('administrationsite')); -$PAGE->navbar->add(get_string('plugins', 'admin')); -$PAGE->navbar->add(get_string('localplugins')); -$PAGE->navbar->add(get_string('pluginname', 'local_kaltura'), new moodle_url('/admin/settings.php', array('section' => 'local_kaltura'))); -$PAGE->navbar->add(get_string('migration_header', 'local_kaltura')); - -$PAGE->set_url($url); -$PAGE->set_context($context); - -$PAGE->set_pagelayout('standard'); -$PAGE->set_pagetype('local-kaltura-migration'); -$PAGE->set_title($heading); -$PAGE->set_heading($site->fullname); - -require_login(null, false); - -require_capability('local/kaltura:migrate_data', $context); - -$url = new moodle_url('/admin/settings.php', array('section' => 'local_kaltura')); - -$form = new local_kaltura_migration_form(); -$redirectmessage = ''; - -if ($data = $form->get_data()) { - // User hit cancel. Redirect them back to the settings page. - if (isset($data->cancel)) { - redirect($url); - } - - require_sesskey(); - $migrationstats = new local_kaltura_migration_progress(); - - // User hit submit button. Check for records since the configured date. - if (isset($data->submitbutton)) { - // Set the migration start time and initialize the KAF root category id. - if (0 == local_kaltura_migration_progress::get_migrationstarted()) { - local_kaltura_migration_progress::init_migrationstarted(); - local_kaltura_migration_progress::set_kafcategoryrootid($data->kafcategory); - } - - // An array mapping of old categories to new categories. - $cachedcategories = array(); - - // Migrate entries that belong to categories under the old rood category. - list($categoryentries, $cachedcategories) = local_kaltura_move_entries_to_kaf_category_tree($data->kafcategory, 1); - // Migrate entries that are associated with the old profile id and contain metadata. - $metadataentries = local_kaltura_move_metadata_entries_to_kaf_category_tree($data->kafcategory, 1); - $redirectmessage = get_string('migration_has_stopped', 'local_kaltura'); - - // Migrate video presentation entries. - local_kaltura_migrate_video_presentation_entries($data->kafcategory, $cachedcategories); - - // Update the Kaltura activities. - local_kaltura_update_activities(); - - // If both variables are null, then there is nother more to migrate. - if (is_null($categoryentries) && is_null($metadataentries)) { - // Hide migration is needed message on settings page. - set_config('migration_yes', 0, KALTURA_PLUGIN_NAME); - $redirectmessage = get_string('migration_complete_redirect', 'local_kaltura'); - } - } else if (isset($data->startover)) { - local_kaltura_migration_progress::reset_all(); - $redirectmessage = get_string('migration_start_over_redirect', 'local_kaltura'); - } - - $migrationurl = new moodle_url('/local/kaltura/migration.php'); - redirect($migrationurl, $redirectmessage, 5); -} - -local_kaltura_retrieve_repository_settings(); - -echo $OUTPUT->header(); -echo $OUTPUT->heading(get_string('migration_header', 'local_kaltura')); -$form->display(); -echo $OUTPUT->footer(); diff --git a/local/kaltura/migration_form.php b/local/kaltura/migration_form.php deleted file mode 100644 index c12ec9193908f..0000000000000 --- a/local/kaltura/migration_form.php +++ /dev/null @@ -1,77 +0,0 @@ -. - -/** - * Migrate data form. - * - * @package local_kaltura - * @author Remote-Learner.net Inc - * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later - * @copyright (C) 2014 Remote Learner.net Inc http://www.remote-learner.net - */ - -defined('MOODLE_INTERNAL') || die; - -require_once($CFG->libdir.'/formslib.php'); - -/** - * Download Kaltura logs form class. - */ -class local_kaltura_migration_form extends moodleform { - /** - * This function defines the elements on the form. - */ - public function definition() { - $mform =& $this->_form; - - $categories = local_kaltura_get_categories(); - $migrationstats = new local_kaltura_migration_progress(); - - $mform->addElement('header', 'setup', get_string('options')); - - // If was never started, print a status message, otherwise print the date the migration originally started. - $notstarted = get_string('migration_not_started', 'local_kaltura'); - $startedtimestamp = local_kaltura_migration_progress::get_migrationstarted(); - $datestarted = userdate($startedtimestamp); - $message = empty($startedtimestamp) ? $notstarted : $datestarted; - - // Print more stats on the current state of the migration. - $mform->addElement('static', 'migration_start_time', get_string('migration_start_time', 'local_kaltura'), $message); - $mform->addElement('static', 'entries_migrated', get_string('entries_migrated', 'local_kaltura'), local_kaltura_migration_progress::get_entriesmigrated()); - $mform->addElement('static', 'categories created', get_string('categories_created', 'local_kaltura'), local_kaltura_migration_progress::get_categoriescreated()); - - $buttonarray = array(); - - $mform->addElement('select', 'kafcategory', get_string('migration_select_a_category', 'local_kaltura'), $categories); - - $catid = local_kaltura_migration_progress::get_kafcategoryrootid(); - - // If the migration was started perviously, then prevent the user from chaning the migration category by disabling the drop down, but setting the default value. - $migrationstarted = local_kaltura_migration_progress::get_migrationstarted(); - if (!empty($migrationstarted) && !empty($catid) && isset($categories[$catid])) { - $mform->addElement('hidden', 'disabledropdown', $catid); - $mform->setType('disabledropdown', PARAM_INT); - - $mform->setDefault('kafcategory', $catid); - $mform->disabledIf('kafcategory', 'disabledropdown', 'eq', $catid); - } - - $buttonarray[] =& $mform->createElement('submit', 'submitbutton', get_string('migration_start_continue', 'local_kaltura')); - $buttonarray[] =& $mform->createElement('submit', 'startover', get_string('startover', 'local_kaltura')); - $buttonarray[] =& $mform->createElement('submit', 'cancel', get_string('back')); - $mform->addGroup($buttonarray, 'buttonar', '', array(' '), false); - } -} diff --git a/local/kaltura/migrationlib.php b/local/kaltura/migrationlib.php deleted file mode 100644 index 9410f20d79d05..0000000000000 --- a/local/kaltura/migrationlib.php +++ /dev/null @@ -1,1067 +0,0 @@ -. - -/** - * Kaltura migration functions. The migration consists of two parts. The first part is retrieving all Kaltura media entries that were created anytime before - * the current date; associate those entries to a different category structure used by the KAF instance. The second part is to look at the metadata for the - * Kaltura entry and associate the entry to a category structure used by the KAF instance. Some Kaltura entries may have been uploaded but never used within - * a Moodle course, so this is the reason why we must initially retrieve all entries by created date and not by Kaltura category . - * - * @package local_kaltura - * @author Remote-Learner.net Inc - * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later - * @copyright (C) 2014 Remote Learner.net Inc http://www.remote-learner.net - */ - -if (!defined('MOODLE_INTERNAL')) { - die('Direct access to this script is forbidden.'); -} - -/* This constant is used in the recursive functions as a hard stop flag. The recursive functions will not go any deeper than this value. */ -define('KALTURA_MIGRATION_HARD_STOP', 5); -/* Constants used for padding height and witch values when migrating kaltura entries for video resource, presentation and media assignment. */ -define('KALTURA_MIGRATION_HEIGHT_PADDING', 100); -define('KALTURA_MIGRATION_WIDTH_PADDING', 50); -define('KALTURA_MIGRATION_DEFAULT_HEIGHT', 285); -define('KALTURA_MIGRATION_DEFAULT_WIDTH', 400); - -/** - * This function creates a connection to Kaltura. - * @return KalturaConfiguration A Kaltura client object. - */ -function local_kaltura_get_kaltura_client() { - global $USER; - - static $client = null; - - if (!is_null($client)) { - return $client; - } - - $configsettings = get_config(KALTURA_PLUGIN_NAME); - $config = new KalturaConfiguration($configsettings->partner_id); - $client = new KalturaClient($config); - - try { - $ks = $client->generateSession($configsettings->adminsecret, $USER->id, KalturaSessionType::ADMIN, $configsettings->partner_id); - $client->setKs($ks); - } catch (Exception $ex) { - $url = new moodle_url('/admin/settings.php', array('section' => 'local_kaltura')); - notice(get_string('migration_cannot_connect', 'local_kaltura'), $url); - } - - return $client; -} - -/** - * This function validates that a root category and a profile id have set. The root category is then queried to find a category id. - */ -function local_kaltura_retrieve_repository_settings() { - $rootcategoryid = get_config(KALTURA_PLUGIN_NAME, 'migration_source_category'); - $metadataprofileid = get_config(KALTURA_PLUGIN_NAME, 'migration_metadata_profile_id'); - - // If the root category id configuration option is empty, try to retrieve the value from the repository config settings. - if (empty($rootcategoryid)) { - $rootcategoryid = get_config(KALTURA_REPO_NAME, 'rootcategory_id'); - - if (empty($rootcategoryid)) { - notice(get_string('migration_root_category_not_set', 'local_kaltura')); - } - - set_config('migration_source_category', $rootcategoryid, KALTURA_PLUGIN_NAME); - } - - // If the metdata profile id configuration option is empty, try to retrieve the value from the repository config settings. - if (empty($metadataprofileid)) { - $metadataprofileid = get_config(KALTURA_REPO_NAME, 'metadata_profile_id'); - - if (empty($metadataprofileid)) { - notice(get_string('migration_profile_id_not_set', 'local_kaltura')); - } - - set_config('migration_metadata_profile_id', $metadataprofileid, KALTURA_PLUGIN_NAME); - } -} - -/** - * This function returns an array of all of the Kaltura categories. - * - * @return array An array of Kaltura category names. - */ -function local_kaltura_get_categories() { - static $list = array(); - - $client = local_kaltura_get_kaltura_client(); - $filter = null; - $pager = null; - - if (empty($list)) { - // Get a list of Kaltura categories. - $result = $client->category->listAction($filter, $pager); - - if ($result instanceof KalturaCategoryListResponse && 0 < count($result->objects)) { - foreach ($result->objects as $category) { - $list[$category->id] = $category->name; - } - asort($list); - } - } - - return $list; -} - -/** - * This function retrieves all Kaltura entries that were created before a specified date; and moves the entries to the new KAF category location. - * @param int $targetparentcatid The root category id configured for the KAF instance. - * @param int $index The page number to return from the paged API output. - * @param int $numofentries The number of entries to return from the API with. - * @return array An array whose index is the Kaltura entry id and value is an array of Kaltura category ids. - */ -function local_kaltura_move_entries_to_kaf_category_tree($targetparentcatid, $index = 1, $numofentries = 100) { - // The timestamp used to retrieve Kaltura entries that were created by or before the date. - static $createdby = 0; - // Which page is currently being processed. - static $pageindex = 1; - // The Kaltura plug-in settings variables. - static $reposettings = null; - // An array whose id is Kaltura entry ids; and value is an array of Kaltura category ids the entry belongs to. - static $entries = null; - // An object whose properties are: id - the 'channels' category id, fullname - the full path of the category. - static $channelscategory = null; - // An array of cached old to new category mappings. array(old category id => new category id). - static $cachedcategories = array(); - // An array of categories that currently exist on Kaltura. This is used to quickly retrieve the name of the category via the category id. - // Ex. array(old category id => category name). - static $currentcategories = null; - static $stop = 0; - - if (is_null($currentcategories)) { - $currentcategories = local_kaltura_get_categories(); - } - - // Retrieve the repository settings. - if (is_null($reposettings)) { - $reposettings = get_config(KALTURA_PLUGIN_NAME); - } - - // Set the timestamp for Kaltura entries created before the created by value. - if (empty($createdby)) { - $time = local_kaltura_migration_progress::get_existingcategoryrun(); - $createdby = empty($time) ? time() : $time; - } - - $client = local_kaltura_get_kaltura_client(); - - // Set the channels category ID. - if (is_null($channelscategory)) { - $channelscategory = local_kaltura_get_channels_id($client, $targetparentcatid); - } - - $pageindex = $index; - - // Create a Kaltura base filter object. - $filter = new KalturaBaseEntryFilter(); - $filter->categoryAncestorIdIn = $reposettings->migration_source_category; - $filter->createdAtLessThanOrEqual = $createdby; - $filter->orderBy = KalturaBaseEntryOrderBy::CREATED_AT_DESC; - - // Set page size and the page index. - $pager = new KalturaFilterPager(); - $pager->pageSize = $numofentries; - $pager->pageIndex = $pageindex; - - // Retrieve the Kaltura entry objects. - $result = $client->baseEntry->listAction($filter, $pager); - - // If the request was successful and the number of entries returned was greater than zero, get the old category ids and assign the entries them to the new KAF categories. - if ($result instanceof KalturaBaseEntryListResponse) { - if (0 < count($result->objects)) { - // Populate the entries array with key: entry id and value: an array of category ids the entry belongs to. - $entries = local_kaltura_get_entry_categories($client, $reposettings->migration_source_category, $result->objects); - - // Iterate over the array of entries and check if the category the entry belongs to has also been created under the new target category. - $cachedcategories = local_kaltura_assign_entries_to_new_categories($client, $entries, $channelscategory, $cachedcategories, $currentcategories); - - $lastentry = end($result->objects); - local_kaltura_migration_progress::set_existingcategoryrun($lastentry->createdAt - 1); - } else { - return null; - } - } - - // Increment the page index. - $pageindex++; - $stop++; - - // Check if the hard stop condition has reached. - if (KALTURA_MIGRATION_HARD_STOP == $stop) { - return array($entries, $cachedcategories); - } - - // Recusive call to retrieve the next set of Kaltura entries. - return local_kaltura_move_entries_to_kaf_category_tree($targetparentcatid, $pageindex, $numofentries); -} - -/** - * This function retrieves all Kaltura entries, created before a specified date and containing profile metadata; and moves the entries to the new KAF category location. - * @param int $targetparentcatid The root category id configured for the KAF instance. - * @param int $index The page number to return from the paged API output. - * @param int $numofentries The number of entries to return from the API with. - * @return array An array whose index is the Kaltura entry id and value is an array of Kaltura category ids. - */ -function local_kaltura_move_metadata_entries_to_kaf_category_tree($targetparentcatid, $index = 1, $numofentries = 100) { - // The timestamp used to retrieve Kaltura entries that were created by or before the date. - static $createdby = 0; - // Which page is currently being processed. - static $pageindex = 1; - // The Kaltura plug-in settings variables. - static $reposettings = null; - // An array whose id is Kaltura entry ids; and value is an array of Kaltura category ids the entry belongs to. - static $entries = null; - // An object whose properties are: id - the 'channels' category id, fullname - the full path of the category. - static $channelscategory = null; - // An object whose properties are: id - the 'Shared Repository' category id, fullname - the full path of the category. - static $sharedrepocategory = null; - // An array of cached old to new category mappings. array(old category id => new category id). - static $cachedcategories = array(); - // An array of categories that currently exist on Kaltura. This is used to quickly retrieve the name of the category via the category id. - // Ex. array(old category id => category name). - static $currentcategories = null; - // A hard stop condition for the recursive method. - static $stop = 0; - - if (is_null($currentcategories)) { - $currentcategories = local_kaltura_get_categories(); - } - // Retrieve the repository settings. - if (is_null($reposettings)) { - $reposettings = get_config(KALTURA_PLUGIN_NAME); - } - - // Set the timestamp for Kaltura entries created before the created by value. - if (empty($createdby)) { - $time = local_kaltura_migration_progress::get_sharedcategoryrun(); - $createdby = empty($time) ? time() : $time; - } - - $client = local_kaltura_get_kaltura_client(); - - // Set the channels category ID. - if (is_null($channelscategory)) { - $channelscategory = local_kaltura_get_channels_id($client, $targetparentcatid); - } - - // Set the siteshared category ID. Using the channels category id as the parent. - if (is_null($sharedrepocategory)) { - $sharedrepocategory = local_kaltura_get_sharedrepo_id($client, $channelscategory->id, $targetparentcatid); - // Add the 'Shared Repository' category id to the array of cached categories. - $cachedcategories['sharedrepository'] = $sharedrepocategory->id; - } - - $pageindex = $index; - - // Retrieve all of the entries were created by a certain time and associated with a specific profile id. - $filter = new KalturaBaseEntryFilter(); - $filter->advancedSearch = new KalturaMetadataSearchItem(); - $filter->advancedSearch->type = KalturaSearchOperatorType::SEARCH_OR; - $filter->advancedSearch->metadataProfileId = $reposettings->migration_metadata_profile_id; - $filter->createdAtLessThanOrEqual = $createdby; - $filter->freeText = '*'; - $filter->orderBy = KalturaBaseEntryOrderBy::CREATED_AT_DESC; - - $pager = new KalturaFilterPager(); - $pager->pageSize = $numofentries; - $pager->pageIndex = $pageindex; - - $result = $client->baseEntry->listAction($filter, $pager); - - // If the request was successful and the number of entries returned was greater than zero, get the old category ids and assign the entries them to the new KAF categories. - if ($result instanceof KalturaBaseEntryListResponse) { - if (0 < count($result->objects)) { - // Populate the entries array with key: entry id and value: an array of category ids the entry belongs to. - list($entries, $currentcategories) = local_kaltura_get_entry_metadata($client, $result->objects, $reposettings->migration_metadata_profile_id, $currentcategories); - - // Iterate over the array of entries and check if the category the entry belongs to has also been created under the new target category. - $cachedcategories = local_kaltura_assign_entries_to_new_course_categories($client, $entries, $channelscategory, $cachedcategories, $currentcategories); - - // Get the date of the last processed entry and set the shared category run date. This allows the user to continue the migration exactly where the - // previous run left off. - $lastentry = end($result->objects); - local_kaltura_migration_progress::set_sharedcategoryrun($lastentry->createdAt - 1); - } else { - return null; - } - } - - // Increment the page index. - $pageindex++; - $stop++; - - // Check if the hard stop condition has reached. - if (KALTURA_MIGRATION_HARD_STOP == $stop) { - return $entries; - } - - // Recusive call to retrieve the next set of Kaltura entries. - return local_kaltura_move_metadata_entries_to_kaf_category_tree($targetparentcatid, $pageindex, $numofentries); -} - -/** - * This function assigns the Kaltura entries to the new KAF categories. - * Future TODO: Improve the progress tracking of this method, by inspecting the results of API calls and find entries that already existed but were part of a multi request. - * - * @param KalturaConfiguration $client A Kaltura client object. - * @param array $entries An array whose key is Kaltura entry ids and value is an array of category ids. - * @param int $parentcategory The 'channels' category object whose properties are id and fullname. - * @param array $cachedcategories An array of cateogires that have been created under the KAF root category. - * The array key is the category name and value is the category ids. - * @param array $currentcategories An array of current category ids and their names @see local_kaltura_get_categories() - * @return array An array of cateogires that have been created under the KAF root category. The array key is the category name and value is the category ids. - */ -function local_kaltura_assign_entries_to_new_categories($client, $entries, $parentcategory, $cachedcategories, $currentcategories) { - $newcategory = 0; - $counter = 1; - - foreach ($entries as $entryid => $entrycategories) { - foreach ($entrycategories as $oldcategoryid) { - // Check if the category exists in the cached categories. - if (isset($cachedcategories[$oldcategoryid])) { - // Check if the entry was already added to the 'InContext' category. If not then assign it to the category. - $filter = new KalturaCategoryEntryFilter(); - $filter->categoryIdEqual = $cachedcategories[$oldcategoryid]; - $filter->entryIdEqual = $entryid; - $pager = null; - $result = $client->categoryEntry->listAction($filter, $pager); - - if ($result instanceof KalturaCategoryEntryListResponse && 0 == $result->totalCount) { - // Assign the entry to the 'InContext' category. - $categoryentry = new KalturaCategoryEntry(); - $categoryentry->categoryId = $cachedcategories[$oldcategoryid]; - $categoryentry->entryId = $entryid; - $result = $client->categoryEntry->add($categoryentry); - - local_kaltura_migration_progress::increment_entriesmigrated(); - } - } else { - // Get the name of the old root category. - $oldrootcategoryname = $currentcategories[$oldcategoryid]; - - // Check if the category exists under the KAF root matching on the category name. - $filter = new KalturaCategoryFilter(); - $filter->parentIdEqual = $parentcategory->id; - $filter->fullNameEqual = "{$parentcategory->fullname}>{$oldrootcategoryname}"; - $pager = null; - $result = $client->category->listAction($filter, $pager); - - // Cache the result or create a new category and cache the result. - if ($result instanceof KalturaCategoryListResponse && 1 == $result->totalCount) { - // Start multi-request, this will send multiple API calls as one batch request. - $client->startMultiRequest(); - // Get the 'InContext' sub category. - $filter = new KalturaCategoryFilter(); - $filter->parentIdEqual = $result->objects[0]->id; - $pager = null; - $client->category->listAction($filter, $pager); - - // Assign the entry to the 'InContext' sub category. - $categoryentry = new KalturaCategoryEntry(); - $categoryentry->categoryId = '{1:result:objects:0:id}'; - $categoryentry->entryId = $entryid; - $client->categoryEntry->add($categoryentry); - - $multirequest = $client->doMultiRequest(); - - local_kaltura_migration_progress::increment_entriesmigrated(); - - // Cache the mappting between the old category id and the 'InContext' category id. - $cachedcategories[$oldcategoryid] = $multirequest[0]->objects[0]->id; - } else { - // Start multi-request, this will send multiple API calls as one batch request. - $client->startMultiRequest(); - - $category = new KalturaCategory(); - $category->parentId = $parentcategory->id; - $category->name = $oldrootcategoryname; - $category->moderation = KalturaNullableBoolean::TRUE_VALUE; - $client->category->add($category); - - // Create the 'InContext' category under the new category. - $category = new KalturaCategory(); - $category->name = 'InContext'; - $category->parentId = '{1:result:id}'; - $category->moderation = KalturaNullableBoolean::TRUE_VALUE; - $client->category->add($category); - - $categoryentry = new KalturaCategoryEntry(); - $categoryentry->categoryId = '{2:result:id}'; - $categoryentry->entryId = $entryid; - $client->categoryEntry->add($categoryentry); - - $multirequest = $client->doMultiRequest(); - - local_kaltura_migration_progress::increment_entriesmigrated(); - // Increment categories twice. Once for the course name, the other for the 'InContext'. - local_kaltura_migration_progress::increment_categoriescreated(); - local_kaltura_migration_progress::increment_categoriescreated(); - - // Cache the mappting between the old category id and the 'InContext' category id. - $cachedcategories[$oldcategoryid] = $multirequest[1]->id; - } - } - } - } - return $cachedcategories; -} - -/** - * This is a refactored function of @see local_kaltura_assign_entries_to_new_categories(). The difference is that this adds a Kaltura media to the category - * Kaltura course category and not the 'InContext' sub-category of the course category. - * Future TODO: Improve the progress tracking of this method, by inspecting the results of API calls and find entries that already existed but were part of a multi request. - * - * @param KalturaConfiguration $client A Kaltura client object. - * @param array $entries An array whose key is Kaltura entry ids and value is an array of category ids. - * @param int $parentcategory The 'channels' category object whose properties are id and fullname. - * @param array $cachedcategories An array of cateogires that have been created under the KAF root category. - * The array key is the category name and value is the category ids. - * @param array $currentcategories An array of current category ids and their names @see local_kaltura_get_categories() - * @return array An array of cateogires that have been created under the KAF root category. The array key is the category name and value is the category ids. - */ -function local_kaltura_assign_entries_to_new_course_categories($client, $entries, $parentcategory, $cachedcategories, $currentcategories) { - $newcategory = 0; - $counter = 1; - - // Check if $entries is an array. - if (!is_array($entries)) { - return $cachedcategories; - } - - foreach ($entries as $entryid => $entrycategories) { - foreach ($entrycategories as $oldcategoryid) { - // Check if the course category exists in the cached categories. - if (isset($cachedcategories[$oldcategoryid])) { - // Check if the entry was already added to the course category. If not then assign it to the category. - $filter = new KalturaCategoryEntryFilter(); - $filter->categoryIdEqual = $cachedcategories[$oldcategoryid]; - $filter->entryIdEqual = $entryid; - $pager = null; - $result = $client->categoryEntry->listAction($filter, $pager); - - if ($result instanceof KalturaCategoryEntryListResponse && 0 == $result->totalCount) { - // Assign the entry to the course category. - $categoryentry = new KalturaCategoryEntry(); - $categoryentry->categoryId = $cachedcategories[$oldcategoryid]; - $categoryentry->entryId = $entryid; - $client->categoryEntry->add($categoryentry); - - local_kaltura_migration_progress::increment_entriesmigrated(); - } - } else { - // Get the name of the old root category. - $oldrootcategoryname = $currentcategories[$oldcategoryid]; - - // Check if the category exists under the KAF root matching on the category name. - $filter = new KalturaCategoryFilter(); - $filter->parentIdEqual = $parentcategory->id; - $filter->fullNameEqual = "{$parentcategory->fullname}>{$oldrootcategoryname}"; - $pager = null; - $result = $client->category->listAction($filter, $pager); - - // Cache the result or create a new category and cache the result. - if ($result instanceof KalturaCategoryListResponse && 1 == $result->totalCount) { - - // Assign the entry to the course category. - $categoryentry = new KalturaCategoryEntry(); - $categoryentry->categoryId = $result->objects[0]->id; - $categoryentry->entryId = $entryid; - $categoryresult = $client->categoryEntry->add($categoryentry); - - // If the result is a KalturaCategoryEntry then cache the category id. - if ($categoryresult instanceof KalturaCategoryEntry) { - // Cache the mapping between the old category id and the course category id. - $cachedcategories[$oldcategoryid] = $categoryresult->categoryId; - - local_kaltura_migration_progress::increment_entriesmigrated(); - } - } else { - // Start multi-request, this will send multiple API calls as one batch request. - $client->startMultiRequest(); - - $category = new KalturaCategory(); - $category->parentId = $parentcategory->id; - $category->name = $oldrootcategoryname; - $category->moderation = KalturaNullableBoolean::TRUE_VALUE; - $client->category->add($category); - - // Add the Kaltura media to the new course category. - $categoryentry = new KalturaCategoryEntry(); - $categoryentry->categoryId = '{1:result:id}'; - $categoryentry->entryId = $entryid; - $client->categoryEntry->add($categoryentry); - - $multirequest = $client->doMultiRequest(); - - local_kaltura_migration_progress::increment_entriesmigrated(); - // Increment categories created. - local_kaltura_migration_progress::increment_categoriescreated(); - - // Cache the mappting between the old category id and the course category id. - $cachedcategories[$oldcategoryid] = $multirequest[0]->id; - } - } - } - } - return $cachedcategories; -} - -/** - * This function returns the 'channels' category id, using the KAF root category id as part of the filter. The 'channels' category is created - * automatically when the user creates a new KAF instance. This function only needs to determine the category id. It does not need to create it. - * @param KalturaConfiguration $client A Kaltura client object. - * @param int $rootcatid The KAF root category id. - * @return object|bool An object whose properties are id and fullname, or false it's not found. - */ -function local_kaltura_get_channels_id($client, $rootcatid) { - // Retrieve the array of categories and get the name of the parent category. - $catnames = local_kaltura_get_categories(); - $parentcatname = $catnames[$rootcatid]; - - $filter = new KalturaCategoryFilter(); - $filter->ancestorIdIn = $rootcatid; - $filter->fullNameStartsWith = "$parentcatname>site>channels"; - $pager = null; - $result = $client->category->listAction($filter, $pager); - - if ($result instanceof KalturaCategoryListResponse && 0 < $result->totalCount) { - $category = new stdClass(); - $category->id = $result->objects[0]->id; - $category->fullname = "$parentcatname>site>channels"; - return $category; - } else { - return false; - } -} - -/** - * This function returns the 'Shared Repository' category id, using the channels category id as part of the filter. If the the category doesn't exist - * then is must be created. - * @param KalturaConfiguration $client A Kaltura client object. - * @param int $channelsid The channels category id. - * @param int $rootcatid The KAF root category id. - * @return object|bool An object whose properties are id and fullname. - */ -function local_kaltura_get_sharedrepo_id($client, $channelsid, $rootcatid) { - // Retrieve the array of categories and get the name of the parent category. - $catnames = local_kaltura_get_categories(); - $parentcatname = $catnames[$rootcatid]; - $siterepocat = new stdClass(); - - $filter = new KalturaCategoryFilter(); - $filter->parentIdEqual = $channelsid; - $filter->fullNameStartsWith = "$parentcatname>site>channels>Shared Repository"; - $pager = null; - $result = $client->category->listAction($filter, $pager); - - // If he category already exists. - if ($result instanceof KalturaCategoryListResponse && 0 < $result->totalCount) { - $siterepocat->id = $result->objects[0]->id; - $siterepocat->fullname = $result->objects[0]->fullName; - return $siterepocat; - } else { - // Create 'Shared Repository' category. - $category = new KalturaCategory(); - $category->parentId = $channelsid; - $category->name = 'Shared Repository'; - $category->moderation = KalturaNullableBoolean::TRUE_VALUE; - $result = $client->category->add($category); - - if ($result instanceof KalturaCategory) { - $siterepocat->id = $result->id; - $siterepocat->fullname = $result->fullName; - } - - local_kaltura_migration_progress::increment_categoriescreated(); - - return $siterepocat; - } -} - -/** - * This function retreives the custom metadata associated with a Kaltura entry. - * @param KalturaConfiguration $client A Kaltura client object. - * @param KalturaBaseEntryListResponse $entrylist An array of Kaltura entry objects. - * @param int $profileid A profile id. - * @param array $currentcategories An array of current category ids and their names @see local_kaltura_get_categories() - * @return Array An array. The first index is an array of Kaltura entry ids array(kaltura entry id => array(categories)). The second index - * is an array of current courses that will need to be created array(old category id => old category name). - */ -function local_kaltura_get_entry_metadata($client, $entrylist, $profileid, $currentcategories) { - $entries = array(); - $categories = array(); - - // Start multi-request, this will send multiple API calls as one batch request. - $client->startMultiRequest(); - - // Iterate ver each entry. Add it to the entries array (setting the entryid as the key), then retrieve the categories the entry belongs to. - foreach ($entrylist as $entry) { - // Call an API function to return all of the categories the entry belongs to. - $entries[$entry->id] = array(); - - $filter = new KalturaMetadataFilter(); - $filter->metadataProfileIdEqual = $profileid; - $filter->metadataObjectTypeEqual = KalturaMetadataObjectType::ENTRY; - $filter->objectIdEqual = $entry->id; - $pager = null; - $metadataplugin = KalturaMetadataClientPlugin::get($client); - $metadataplugin->metadata->listAction($filter, $pager); - } - - $multirequest = $client->doMultiRequest(); - - if (is_array($multirequest)) { - foreach ($multirequest as $metadatalists) { - if (is_array($metadatalists->objects)) { - foreach ($metadatalists->objects as $entrymetadata) { - // Get the metadata XML. - $xml = new SimpleXMLElement($entrymetadata->xml); - if (isset($xml->CourseShare)) { - $tempcat = (array) $xml->CourseShare; - // Add each category to the current categories array, as it will be required by the @see local_kaltura_assign_entries_to_new_categories(). - // With course shared metadata, the category may not actually exist yet. So insert a place holder that can be easily referenced in later functions. - foreach ($tempcat as $categoryname) { - $currentcategories["cs_$categoryname"] = $categoryname; - $categories[] = "cs_$categoryname"; - } - } - - if (1 == $xml->SystemShare) { - $categories[] = 'sharedrepository'; - } - - $entries[$entrymetadata->objectId] = $categories; - $categories = array(); - } - } - } - } - return array($entries, $currentcategories); -} - -/** - * This function retrieves all of the categories belonging to a Kaltura entry. - * @param KalturaConfiguration $client A Kaltura client object. - * @param int $rootcategoryid The Kaltura root category id. - * @param KalturaBaseEntryListResponse $entrylist An array of Kaltura entry objects. - * @return array An array of Kaltura entry ids where the keys of the array are the Kaltura entry ids and the values are array of Kaltura category ids. - */ -function local_kaltura_get_entry_categories($client, $rootcateogryid, $entrylist) { - $entries = array(); - - // Start multi-request, this will send multiple API calls as one batch request. - $client->startMultiRequest(); - - // Iterate ver each entry. Add it to the entries array (setting the entryid as the key), then retrieve the categories the entry belongs to. - foreach ($entrylist as $entry) { - // Call an API function to return all of the categories the entry belongs to. - $entries[$entry->id] = array(); - - $catfilter = new KalturaCategoryEntryFilter(); - $catfilter->entryIdEqual = $entry->id; - $catpager = new KalturaFilterPager(); - // Category limit per entry is 32, 100 is a high-enough limit. - $catpager->pageSize = 100; - $catpager->pageIndex = 1; - $client->categoryEntry->listAction($catfilter, $catpager); - } - - // Send the batch API request. - $multirequest = $client->doMultiRequest(); - $categories = array(); - $entryid = ''; - - // Iterate over an array of KalturaCategoryEntryListResponse results and save the category ids. - if (is_array($multirequest)) { - foreach ($multirequest as $entrylist) { - // Iterate over an array of KalturaCategoryEntry results. - if (is_array($entrylist->objects)) { - foreach ($entrylist->objects as $entrycategory) { - // Check that the categoryFullIds has the root category in it. - if (false === strpos($entrycategory->categoryFullIds, $rootcateogryid)) { - continue; - } - // Entry Id gets set multiple times... - $entryid = $entrycategory->entryId; - $categories[] = $entrycategory->categoryId; - } - } - - // Save the array of categories to the array of entries. - $entries[$entryid] = $categories; - // Reset categories array to make way for a new entry. - $categories = array(); - } - } - - return $entries; -} - -/** - * This function updates records for Kaltura video resrouce, presentation and media assignments; by adding a source URL and padding the width and height. - */ -function local_kaltura_update_activities() { - global $CFG, $DB; - - $configsettings = get_config(KALTURA_PLUGIN_NAME); - $client = local_kaltura_get_kaltura_client(); - - // Check if the KAF URi is initialized. - if (!isset($configsettings->kaf_uri) || empty($configsettings->kaf_uri)) { - $url = new moodle_url('/admin/settings.php', array('section' => 'local_kaltura')); - notice(get_string('migration_kaf_url_not_set', 'local_kaltura'), $url); - } - - // Check if the table exists. - $table = new xmldb_table('kalvidres'); - - if ($DB->get_manager()->table_exists($table)) { - // Migrate Kaltura video resrouce entries. - $sql = 'SELECT * - FROM {kalvidres} - WHERE source IS NULL'; - $records = $DB->get_records_sql($sql); - - foreach ($records as $id => $record) { - if (!is_null($record->entry_id) && !empty($record->entry_id)) { - $source = local_kaltura_build_source_url($record->entry_id, $record->height, $record->width, $record->uiconf_id); - $record->source = $source; - $record->width = $record->width + KALTURA_MIGRATION_WIDTH_PADDING; - $record->height = $record->height + KALTURA_MIGRATION_HEIGHT_PADDING; - - try { - // Retrieve the Kaltura base entry object. - $kalentry = $client->baseEntry->get($record->entry_id); - } - catch(Exception $ex) { - // if from some reason we were not able to get the entry - lets make an empty object to use for empty metadata - // since this is for backward compatibility - we can ignore that for the sake of completing the migration - $kalentry = new stdClass(); - } - $newobject = local_kaltura_convert_kaltura_base_entry_object($kalentry); - // Searlize and base 64 encode the metadata. - $metadata = local_kaltura_encode_object_for_storage($newobject); - $record->metadata = $metadata; - - $DB->update_record('kalvidres', $record, true); - } - } - } - - $table = new xmldb_table('kalvidpres'); - - if ($DB->get_manager()->table_exists($table)) { - // Migrate Kaltura video resrouce entries. - $sql = 'SELECT * - FROM {kalvidpres} - WHERE source IS NULL'; - $records = $DB->get_records_sql($sql); - - foreach ($records as $id => $record) { - if (!is_null($record->entry_id) && !empty($record->entry_id)) { - $player = empty($configsettings->presentation) ? $configsettings->presentation_custom : $configsettings->presentation; - $source = local_kaltura_build_source_url($record->entry_id, $record->height, $record->width, $player); - $record->source = $source; - $record->width = $record->width + KALTURA_MIGRATION_WIDTH_PADDING; - $record->height = $record->height + KALTURA_MIGRATION_HEIGHT_PADDING; - - // Retrieve the Kaltura base entry object. - $kalentry = $client->baseEntry->get($record->entry_id); - $newobject = local_kaltura_convert_kaltura_base_entry_object($kalentry); - // Searlize and base 64 encode the metadata. - $metadata = local_kaltura_encode_object_for_storage($newobject); - $record->metadata = $metadata; - - $DB->update_record('kalvidpres', $record, true); - } - } - } - - $table = new xmldb_table('kalvidassign_submission'); - - if ($DB->get_manager()->table_exists($table)) { - // Migrate Kaltura video resrouce entries. - $sql = 'SELECT * - FROM {kalvidassign_submission} - WHERE source IS NULL'; - $records = $DB->get_records_sql($sql); - - foreach ($records as $id => $record) { - if (!is_null($record->entry_id) && !empty($record->entry_id)) { - - $height = $configsettings->kalvidassign_player_height; - $width = $configsettings->kalvidassign_player_width; - $player = empty($configsettings->player) ? $configsettings->player_custom : $configsettings->player; - - $source = local_kaltura_build_source_url($record->entry_id, $height, $width, $player); - $record->source = $source; - $record->width = $width + KALTURA_MIGRATION_WIDTH_PADDING; - $record->height = $height + KALTURA_MIGRATION_HEIGHT_PADDING; - - // Retrieve the Kaltura base entry object. - $kalentry = $client->baseEntry->get($record->entry_id); - $newobject = local_kaltura_convert_kaltura_base_entry_object($kalentry); - // Searlize and base 64 encode the metadata. - $metadata = local_kaltura_encode_object_for_storage($newobject); - $record->metadata = $metadata; - - $DB->update_record('kalvidassign_submission', $record, true); - } - } - } -} - -/** - * This function updates the name and adminTags property of a KalturaDataEntry (Video presentation). - * @param KalturaConfiguration $client A Kaltura client object. - * @param Array $entrylist A list of Kaltura entries, where the key is the entry id and the value is the video presentation activity name. - */ -function local_kaltura_update_video_presentation_entry($client, $entrylist) { - foreach ($entrylist as $entryid => $activityname) { - $vidpres = new KalturaBaseEntry(); - $vidpres->name = $activityname; - $vidpres->adminTags = 'presentation'; - $client->baseEntry->update($entryid, $vidpres); - } -} - -/** - * This function migrates video presentation entries to the new KAF standard by setting additional properties. - * @param int $kafcategory The KAF root category. - * @param array $cachedcategories An array of cateogires that have been created under the KAF root category. - * @return void. - */ -function local_kaltura_migrate_video_presentation_entries($kafcategory, $cachedcategories) { - global $DB; - - $table = new xmldb_table('kalvidpres'); - - // Check if the video presentation table exists. - if ($DB->get_manager()->table_exists($table)) { - // Retrieve all video presentation records that have not yet been migrated. - $sql = 'SELECT id,name,course,entry_id - FROM {kalvidpres} - WHERE source IS NULL'; - $vidpresrecs = $DB->get_records_sql($sql); - - if (empty($vidpresrecs)) { - return; - } - - // Get a Kaltura session. - $client = local_kaltura_get_kaltura_client(); - - // Get the KAF channels category object. - $channelscategory = local_kaltura_get_channels_id($client, $kafcategory); - - // Initialize arrays used to map video presentation entries to Kaltura categories. - $entrycategories = array(); - $entry = array(); - - // Populate arrays with the mapping data. - foreach ($vidpresrecs as $rec) { - $entrycategories[$rec->entry_id] = array($rec->course); - $entry[$rec->entry_id] = $rec->name; - - // Check if the mapping of a course category to a new category already exists then skip the rest of the loop. - if (isset($cachedcategories[$rec->course])) { - continue; - } - - $cachedcategories[$rec->course] = $rec->course; - } - - // Create KAF categories and add the entries to the categories. - local_kaltura_assign_entries_to_new_categories($client, $entrycategories, $channelscategory, array(), $cachedcategories); - - // Update the entry name and adminTag property for the video presentation object. - local_kaltura_update_video_presentation_entry($client, $entry); - } - - return; -} - -/** - * This function takes a Kaltura entry id height, width and uiconf_id and returns a source URL pointing to the entry. - * @param string $entryid The Kaltura entry id. - * @param int $height The entry height. - * @param int $width The entry width. - * @param int $uiconfid The Kaltura player id. - * @return string A source URL. - */ -function local_kaltura_build_source_url($entryid, $height, $width, $uiconfid) { - $newheight = empty($height) ? KALTURA_MIGRATION_DEFAULT_HEIGHT : $height; - $newwidth = empty($width) ? KALTURA_MIGRATION_DEFAULT_WIDTH : $width; - $url = 'http://'.KALTURA_URI_TOKEN."/browseandembed/index/media/entryid/{$entryid}/showDescription/true/showTitle/true/showTags/true/showDuration/true/showOwner/"; - $url .= "true/showUploadDate/false/playerSize/{$newwidth}x{$newheight}/playerSkin/{$uiconfid}/"; - return $url; -} - -/** - * This class keeps statistics on the last entries that were process, as well as how many categories were created. - * It is also used to allow the use to continue the migration from where it last left off. - */ -class local_kaltura_migration_progress { - /** @var int The timestamp used to retrieve Kaltura entries that were created on or before this date. */ - static protected $existingcategoryrun = 0; - /** @var int The timestamp used to retrieve Kaltura entries where the metadata was created on or before this date. */ - static protected $sharedcategoryrun = 0; - /** @var int The number of categories that have been created. */ - static protected $categoriescreated = 0; - /** @var int The number of entries that have been migrated. */ - static protected $entriesmigrated = 0; - /** @var int The date the migration originally started. */ - static protected $migrationstarted = 0; - /** @var int KAF root category id. */ - static protected $kafcategoryrootid = 0; - - /** - * Constructor initializes static properties. - */ - public function __construct() { - $config = get_config(KALTURA_PLUGIN_NAME); - self::$migrationstarted = (isset($config->migrationstarted) && !empty($config->migrationstarted)) ? $config->migrationstarted : 0; - self::$existingcategoryrun = isset($config->existingcategoryrun) ? $config->existingcategoryrun : 0; - self::$sharedcategoryrun = isset($config->sharedcategoryrun) ? $config->sharedcategoryrun : 0; - self::$categoriescreated = isset($config->categoriescreated) ? $config->categoriescreated : 0; - self::$entriesmigrated = isset($config->entriesmigrated) ? $config->entriesmigrated : 0; - self::$kafcategoryrootid = isset($config->kafcategoryrootid) ? $config->kafcategoryrootid : 0; - } - - /** - * Returns the timestamp value of the date created for the last entry that was processed. - * @return int Unix timestamp. - */ - static public function get_existingcategoryrun() { - return self::$existingcategoryrun; - } - - /** - * Set the timestamp value. - * @param int $data A unix timestamp. - */ - static public function set_existingcategoryrun($data) { - self::$existingcategoryrun = $data; - } - - /** - * Returns the timestampe value of the date created for the last entry metadata that was processed. - * @return int Unix timestamp. - */ - static public function get_sharedcategoryrun() { - return self::$sharedcategoryrun; - } - - /** - * Set the timestamp value. - * @param int $data A unix timestamp. - */ - static public function set_sharedcategoryrun($data) { - self::$sharedcategoryrun = $data; - } - - /** - * Returns the number of categories created. - * @return int Unix timestamp. - */ - static public function get_categoriescreated() { - return self::$categoriescreated; - } - - /** - * Increment categories created. - */ - static public function increment_categoriescreated() { - self::$categoriescreated++; - } - - /** - * Returns the number of entries that were migrated. - * @return int Unix timestamp. - */ - static public function get_entriesmigrated() { - return self::$entriesmigrated; - } - - /** - * Increment entries migrated. - */ - static public function increment_entriesmigrated() { - self::$entriesmigrated++; - } - - /** - * Returns the timestamp for the original date the migration was started. - * @return int Unix timestamp. - */ - static public function get_migrationstarted() { - return self::$migrationstarted; - } - - /** - * Sets the time the migration started time to now. - */ - static public function init_migrationstarted() { - self::$migrationstarted = time(); - } - - /** - * Returns the KAF root category id - * @return int Unix timestamp. - */ - static public function get_kafcategoryrootid() { - return self::$kafcategoryrootid; - } - - /** - * Sets the the KAF root category id. - * @param int $data a Kaltura category id. - */ - static public function set_kafcategoryrootid($data) { - self::$kafcategoryrootid = $data; - } - - /** - * Reset all stats to nothing. - */ - static public function reset_all() { - self::$migrationstarted = 0; - self::$entriesmigrated = 0; - self::$categoriescreated = 0; - self::$sharedcategoryrun = 0; - self::$existingcategoryrun = 0; - self::$kafcategoryrootid = 0; - } - - /** - * Destructor that saves static properties to the DB. - */ - public function __destruct() { - set_config('existingcategoryrun', self::$existingcategoryrun, KALTURA_PLUGIN_NAME); - set_config('sharedcategoryrun', self::$sharedcategoryrun, KALTURA_PLUGIN_NAME); - set_config('categoriescreated', self::$categoriescreated, KALTURA_PLUGIN_NAME); - set_config('entriesmigrated', self::$entriesmigrated, KALTURA_PLUGIN_NAME); - set_config('migrationstarted', self::$migrationstarted, KALTURA_PLUGIN_NAME); - set_config('kafcategoryrootid', self::$kafcategoryrootid, KALTURA_PLUGIN_NAME); - } -} diff --git a/local/kaltura/pix/icon.png b/local/kaltura/pix/icon.png deleted file mode 100644 index 615c31d68e7c309bb63b6098a4bfbcad17a0bd27..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1912 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 diff --git a/local/kaltura/pix/vidThumb.png b/local/kaltura/pix/vidThumb.png deleted file mode 100644 index cdf48281daab556c5b8885d8f4a304731376e125..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2404 zcmaJ@dpwhU8($;u5=l|cW}*_?J#yHb+H6W8=T_+5Y&V7-Z1-{qB_%?S4o)4Ul2ehQ z5l<+cJW|o)l&2C&8Zj%$@tvOZynnpC_vdrpzw7t=e81o8x_;O9k2~4Tb*rMhhCB=g zQ*_!!@{q3S($^gUmws=iSIhGc`E^bH%4i7|{qX82-U;!X4uxPB=W=l&;W27m71u%dq25V}9wZxm5;sF5p<3UNY z@fd-450c}LT+*E_Dj0&ecnl^YA_5&@hUV~sFjyQ8x1eEaY9d9L@T1reEz*R|*I!g1 zfqXiT$%U94HgZ9c7QhiewkT<(f49Km{*-0&e_WIF!Z49EE(VJR7Ft>ay14v*D2w$I z&4)a|f9n08!hEkNE{O2}`5Xa{E*)H;{z57)-hl_wAP&!q!wFlwMYmuM#Nh{XxJU<2 zbL1{2o56|Te@DBx;GNifh{mRaP9$5Dl#gaI8F)(zEE$Uf9I!+)0#+Ilv1T~3sW}<9 z*=jRjMKE3Dk~nk$3uHr!T*g0K(l5CSMqqKJnMojzxesJG@;EHy_lEJzU)MtTrQQ!N zU?&QRNEd4Uzl zvlQ)?L5Wqx7&18~p`$pjjc^=k6d!!CQI?w7ODy*+87)suPnuZufFUaq#P{hXlEnD| zYm+jb07sYk8lWnSG?(+Ui-=T&!jT3ygu)}5!DHcI0T`8A1zOANwFF8gCuQK9c4dO! z>gs1B6HF~~TrU>0s}dTvpWYeUldIZsW>Bx3Czu#|F*5Qz+$U;m5~|C7^qbZ31ic%6 z8;_Z)eU{vbz@Lwup4MEW4NrEzfGYP-@xbRe2MT8=QU|K`G?A$VOdV})W#UT8?#j98 zx!7BN1N&<)t(%XqKX80d@~yjD9lnYDqC53*{@&|r)i>n4t0^mBBCb83X;e$iQuH5% z=8WSiVXEt{l$30gCs3C@mc(|32fVqvap3gWYzF&7$t7etOOh$7uFctbM9CwBbSCALzWHuieEFP+n z8$So`1{AoqN^$aJ`FFO|jxY<_as(~%U;~^b?*?cjR9Ht;j7$&$L4;gQU7Z~cHw58Z zPrT(K^zFx1r*C4{23o{{=x-);B`WA^Gcie;H!` zaDGvv{rXB_%wqt&HK)vu4=&^^ZiZ5Je`_{00fFePBmo?Q%?C;du3!`pFe$a z4LI44Z|FBK6?b(x9%Ug;E;SLfgpe}3rl!-%M0F=SbjbH%KCd_Ic|Uik{?F@nr5`iC zXeMFHh`m99`3EWPy5c%wfX{`dw#&<6?A8pOift|JjZxe5C3Rb+ZlY7Nouf0< z<-3Ulct#cS(@S%!bjJ^|3SXReT|aR(D`-Si=jY8=+oaTmpSqz^PR(0?J~wV=CJJ~L z-O`Ei@+MQ&SHPHOgcRe83BudwK3E+u6WQq8ynk?sFf9;>lCe&>o7X8?QqdY*>4&zw zwJ#wuDSfvVihvkX~&eM6bUqo5e0y)2a@#Nf`j&MkBi4i>I zSlAh|dz*kR;u+Gfy(;S5U#M%@jgWn-oITqIf41alN=iy&ql4_4L*jii$(ZX6%M>H- zd7nU+bbQ`k>eFnD->yk~9+0J4Z%zH(k8O3A6fnf|uX<&-@>7bk_wr=B!+DN(0?+t( zVeM3po@KAm?)hz&7k2wENi3@Q@BvZIct)uFT6pv2v5xJDG^kcvV{hL;4`MGg^3hzs zVp6fuK^fh!nnkD{k4S;FsG^an4ZoL5d?!3Q{J*_;=C+0UpxWi0Z>D$shb?-5Y+?x< zpcyv3Ni$6@YIS!WZD(XQB. - -/** - * My Media display library - * - * @package local - * @subpackage mymedia - * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later - */ - - -if (!defined('MOODLE_INTERNAL')) { - die('Direct access to this script is forbidden.'); /// It must be included from a Moodle page -} - -require_once(dirname(dirname(dirname(__FILE__))) . '/lib/tablelib.php'); - -class local_kaltura_renderer extends plugin_renderer_base { - - /** - * Generate the HTML for the iframe - * - * @return string The HTML iframe - */ - public function render_recent_courses() { - $html = '

  • +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 |nwL4y0Tg5I#1)KOdi#El&Kkk| zp?YOO+PBlrl{&gz0XM0!E=5L?Qp_VQzA5-JZm)l3bZOt72#P7SP|~;nj%ixci(mB! z>|1w!1D3fM6aiKe0>X>*?%(7{HWn<8?$A1G;VQX{ZF8zmH}!2gH&=}Pxn5J7=MzCw zPj;4?8}>TQsfVCM6j6i!G(G>zA&7QAuJi1;p^`a*Ft#+9n;#}o(X1o$Hxm;(G_*&d?TTMp#Trd3W-GEjU>7VKe>2Jrj@<|h^rNwrHnU%;`Gizje$m|VK z!HnT?p=8Hwb-`-Av-nO@8{C>5^zvtn7@Aury+^gvDmOhGaIg6;C7!X!2J$Uocd-R> z2uO%<-y#RzRrXi+s-nJ2g5euk>H%u<=Ha=iSwS$Xr#pE~1C$MFofMPzV$Jaz?-L@q zQ7kmbe_4sZ6m)tvP(*Y%qoPm5R3#`G4pAkwQ$bb}2BDaCP-~|v?R4*es14R%yX1AD zIt0Iw4^&|5>PPl62}W~h zNDA6L`}EUsL3R%?Qs^0IOn2v}fv(g`;arr3Ier4&{ z0MnWJd>=C1RJTK-l-V5-U-v_9UNGqsP@aaynY>~J?6Bs0U?K+`m9zCHa<-eu^{m&d zvVRJ=X?c3_%o`ACzW4F2O;!1*5s51WBS{fR#cWrCy02w6zxV#Hit~$&_A#2O^#f z{G+xN$4c>fo!g`$SJWsFuKN?X7xyVe&v}mTzZJ~wyXJDAyBTw(vu91_*51+#ob}as zL#PCJEGrxQTn5jZnN~X`Q#|uye2M`@?ocJX=4Z5Mycd2O#qew?!YLFe9YbpZXOarW zCI|#5NN-lzVD-Sj;fqt{OY2Z+&vjTCDN159N|-|B@%xYUWeD<1AZ2Uj=^+2`%g}Ki z=n|7ui&1a)>fSQACRBYu_=teaYUmV&U??0TqJfEZ%$b*w$Zr&I%QG}-0#Eq?EUazM zGv9>j*kY|-WW!z5b8}9Wh|6zUrzFDGXPQ*Z>aQ&lENFTI51HT^J7Ad21?w4tfsha_ z=TlXl>N%w$fD*|N2#&&_PV4EInD}Cs^K)HVKm`Yrgo)nwddtW)AJ14tgG2VhFX7r| zjcI7v{QA2>G)Lz;6I}oB!k#*AD?;{CEcw1l-T>;dB~xQU^o5rB><(k6I1Wf?YG1E;QM!2~AFUjjw(IC>K!BC`T3=C?_}-H-^g)NqKZzCeu0Dv#m3zCG-t}WMh7uMa^g3E!(<=&y@8a~IpU3En>8co@r5V|Z4V1Y z(mc|fVWIii7>sVw*(?K#j(&p1wFwV3-@*#B%ccWK-FypW0&oO=>5ngvebTWRbP(dq z=B01Vs9|3&vhzdAP3x$-xPqc8)3{E{1jEK#?ri%cKz+IzUD;kB2lHK*r@U`RO7)~B zG!2-Dc$Bk6!{&CcHz@Ziv@QGs;Ljf&djGx=DkI`9PR3#}O`$+LY9*vU`UHKXtHlbF zm$*~4>iCuU5Ntzw=Vv96M3+$!`&iFP~{gm>|JaOu~f1xK0PVO zk7+aLf@*V6@F7X4Nq0ym z`LMZbeWy90r>ZwqBXh#ytnJ>UD2=)R9KE$}dE+^DIrk2y1dpyXgbZq1WNh38i;JZ` ztwim9R^HUVCYk>z;=v&}q7AlFYM^CZ9cx9ak+9;{cy<`;AcuKUcdYdY)extYI>cv? zb+m^25IbN}!R)A+g!(fWS98E=qe%;T=ZfH9?xBKG0Wdc3USHUhQN8x$IKORc=W;U% zatJEm9`Ae`by0s}DJZy46gYvK9bh^${HT}d6rYO9jXuyQn>~+P*sD~@!+=2RCYpw5 zbztKlYAnuvK@Lt+xRjy9Byu`6)8qV-|M)OrXJpckhiTQ<1wmNBhx5=t%~0G**z6{x z44FuKQ_XOxG
    "+iframe+"
    "; + } + + // If the panel has not yet been initialized. + if (null === this.panel) { + this.panel = new Y.Panel({ + srcNode : Y.Node.create('
    '), + headerContent : '', + bodyContent : this.panelbodycontent, + width : panelwidth, + height : panelheight+"px", + zIndex : 6, + centered : true, + modal : true, + visible : false, + render : true, + hideOn : [ + { + node : Y.one('input[id=closeltipanel]'), + eventName : 'click' + } + ] + }); + + this.panel.show(); + + // Listen to simulated click event send from local/kaltura/service.php + Y.one('input[id=closeltipanel]').on('click', this.lti_hide_panel_callback, this); + + // // Listen to when the panel is made visible or hidden + this.panel.after('visibleChange', this.lti_panel_visible_change_callback, this); + } else { + this.panel.show(); + } + }, + + /** + * Event handler callback for when a simulated click event is triggered on a specifc element. + */ + lti_hide_panel_callback : function() { + // hide the thumbnail image. + var imagenode = Y.one('img[id=video_thumbnail]'); + imagenode.setStyle('display', 'none'); + // Update the iframe element attributes + var iframenode = Y.one('iframe[id=contentframe]'); + iframenode.setAttribute('width', Y.one('input[id=width]').getAttribute('value')); + iframenode.setAttribute('height', Y.one('input[id=height]').getAttribute('value')); + iframenode.setStyle('display', 'inline'); + + // If the page is a Video presentation or resource execute a function to change the button caption KALDEV-579 + var element = Y.one('input[name=modulename]'); + + if (undefined !== element && ('kalvidres' === this.modulename || 'kalvidpres' === this.modulename)) { + this.lti_panel_change_add_media_button_caption(); + } + }, + + lti_panel_change_add_media_button_caption : function() { + // Need to find a better way of doing this. Change was made for KALDEV-579. + var buttoncaption = M.util.get_string('replace_video', this.modulename); + if (buttoncaption !== Y.one('#'+this.addvidbtnid).getAttribute('value')) { + Y.one('#'+this.addvidbtnid).setAttribute('value', buttoncaption); + } + }, + + /** + * Event handler callback for when the panel is made hidden or visible. + */ + lti_panel_visible_change_callback : function() { + this.panelvisible = this.panel.get('visible'); + + // If panel is visible, re-launch the LIT request so that the user sees the main page. Instead of the last page they visited. If the panel is not visible then + // set the content to an empty string; this prevents videos from the iframe from continuing to play after the panel was closed. + if (true === this.panelvisible) { + this.panel.set('bodyContent', this.panelbodycontent); + } else { + this.panel.set('bodyContent', ''); + } + } +}, +{ + NAME : 'moodle-local_kaltura-ltipanel', + ATTRS : { + addvidbtnid : { + value: '0' + }, + ltilaunchurl : { + value: '0' + }, + height : { + value: 0 + }, + width : { + value: 0 + }, + modulename : { + value: '' + } + } +}); + +/** + * This method calls the base class constructor. The primary difference between LTIPANELMEDIAASSIGNMENT and LTIPANEL is that + * LTIPANELMEDIAASSIGNMENT creates a node and appends it to the body tag of the page. The reason for this is due to an issue with the Moodle + * navbar covering up part of the YUI panel, if the panel markup is appended to a child element within the body tag. + * @method LTIPANELMEDIAASSIGNMENT + */ +var LTIPANELMEDIAASSIGNMENT = function() { + LTIPANELMEDIAASSIGNMENT.superclass.constructor.apply(this, arguments); +}; + +Y.extend(LTIPANELMEDIAASSIGNMENT, Y.Base, { + /** + * Contains the object tag needed to launch an LTI session. + * @property panelbodycontent + * @type {String} + * @default null + */ + panelbodycontent: null, + + /** + * Set to true if panel is visible, otherwise false. + * @property panelvisible + * @type {Boolean} + * @default null + */ + panelvisible: false, + + /** + * The panel object + * @property panel + * @type {Object} + * @default null + */ + panel: null, + + /** + * The panel height. + * @property panelheight + * @type {Integer} + * @default 0 + */ + panelheight: 0, + + /** + * The panel width. + * @property panelwidth + * @type {Integer} + * @default 0 + */ + panelwidth: 0, + + /** + * Init function for the checkboxselection module + * @property params + * @type {Object} + */ + init : function(params) { + // Check to make sure parameters are initialized + if ('0' === params.addvidbtnid || '0' === params.ltilaunchurl || 0 === params.courseid || 0 === params.height || 0 === params.width) { + return; + } + + var addvideobtn = Y.one('#'+params.addvidbtnid); + addvideobtn.on('click', this.open_panel_callback, this, params.ltilaunchurl, params.height, params.width); + }, + + /** + * Event handler callback for when the panel content is changed + * @property e + * @type {Object} + */ + open_panel_callback : function(e, url, height, width) { + this.panelheight = parseInt(height, 10) + 45; + this.panelwidth = parseInt(width, 10) + 23; + + this.panelbodycontent = ""; + + // If the panel has not yet been initialized. + if (null === this.panel) { + this.panel = new Y.Panel({ + srcNode : Y.Node.create('
    '), + headerContent : '', + bodyContent : this.panelbodycontent, + width : this.panelwidth+"px", + height : this.panelheight+"px", + zIndex : 6, + centered : true, + modal : true, + visible : false, + render : true, + hideOn : [ + { + node : Y.one('input[id=closeltipanel]'), + eventName : 'click' + } + ] + }); + + this.panel.show(); + + // Listen to simulated click event send from local/kaltura/service.php + Y.one('input[id=closeltipanel]').on('click', this.lti_hide_panel_callback, this); + + // Listen to when the panel is made visible or hidden + this.panel.after('visibleChange', this.lti_panel_visible_change_callback, this); + } else { + this.panel.show(); + } + }, + + /** + * Event handler callback for when a simulated click event is triggered on a specifc element. + */ + lti_hide_panel_callback : function() { + // Enable submit button + Y.one('input[id=submit_video]').removeAttribute('disabled'); + // hide the thumbnail image. + var imagenode = Y.one('img[id=video_thumbnail]'); + imagenode.setStyle('display', 'none'); + // Update the iframe element attributes + var iframenode = Y.one('iframe[id=contentframe]'); + iframenode.setAttribute('width', Y.one('input[id=width]').getAttribute('value')); + iframenode.setAttribute('height', Y.one('input[id=height]').getAttribute('value')); + iframenode.setStyle('display', 'inline'); + Y.one('#id_add_video').set('value', M.util.get_string('replacevideo', 'kalvidassign')); + }, + + /** + * Event handler callback for when the panel is made hidden or visible. + */ + lti_panel_visible_change_callback : function() { + this.panelvisible = this.panel.get('visible'); + + // If panel is visible, re-launch the LIT request so that the user sees the main page. Instead of the last page they visited. If the panel is not visible then + // set the content to an empty string; this prevents videos from the iframe from continuing to play after the panel was closed. + if (true === this.panelvisible) { + this.panel.set('bodyContent', this.panelbodycontent); + this.panel.set('height', this.panelheight); + this.panel.set('width', this.panelwidth); + this.panel.set('centered', true); + } else { + this.panel.set('bodyContent', ''); + } + } +}, +{ + NAME : 'moodle-local_kaltura-ltipanel', + ATTRS : { + addvidbtnid : { + value: '0' + }, + ltilaunchurl : { + value: '0' + }, + height : { + value: 0 + }, + width : { + value: 0 + } + } +}); + +/** + * This method calls the base class constructor. This module renders a Panel for viewing media from multiple sources. + * @method LTISUBMISSIONREVIEW + */ +var LTISUBMISSIONREVIEW = function() { + LTISUBMISSIONREVIEW.superclass.constructor.apply(this, arguments); +}; + +Y.extend(LTISUBMISSIONREVIEW, Y.Base, { + /** + * An instance of the ltimediaassignment class. + * @property ltimediaassignment + * @type {Object} + * @default null + */ + ltimediaassignment: null, + + + /** + * Init function for the checkboxselection module + * @property params + * @type {Object} + */ + init : function(ltimediaassignment) { + this.ltimediaassignment = ltimediaassignment; + Y.one('form[id=fastgrade]').delegate('click', this.review_submission, 'a[name=submission_source]', this); + }, + + /** + * Callback function for when a user clicks on the review submission link. + * @property e + * @type {Object} + */ + review_submission : function(e) { + e.preventDefault(); + var source, height, width; + // Test if the target is an anchor tag or img tag. + if (e.target.test('a')) { + source = e.target.getAttribute('href');alert(e.target); + height = e.target.ancestor('div[name=media_submission]').get('childNodes').filter('input[name=height]').get('value'); + width = e.target.ancestor('div[name=media_submission]').get('childNodes').filter('input[name=width]').get('value'); + } else { + source = e.target.ancestor('a[name=submission_source]').getAttribute('href'); + height = e.target.ancestor('div[name=media_submission]').get('childNodes').filter('input[name=height]').get('value'); + width = e.target.ancestor('div[name=media_submission]').get('childNodes').filter('input[name=width]').get('value'); + } + + this.ltimediaassignment.open_panel_callback(null, source, height, width); + } +}, +{ + NAME : 'moodle-local_kaltura-ltipanel' +}); + +M.local_kaltura = M.local_kaltura || {}; + +/** + * Entry point for ltipanel module + * @param string params additional parameters. + * @return object the ltipanel object + */ +M.local_kaltura.init = function(params) { + return new LTIPANEL(params); +}; + +/** + * Entry point for ltipanelmediaassignment module + * @param string params additional parameters. + * @return object the ltipanel object + */ +M.local_kaltura.initmediaassignment = function(params) { + return new LTIPANELMEDIAASSIGNMENT(params); +}; + +/** + * Entry point for ltipanelmediaassignment module + * @param string params additional parameters. + * @return object the ltipanel object + */ +M.local_kaltura.initreviewsubmission = function() { + var args = { + addvidbtnid: '0', + ltilaunchurl: '0', + courseid: 0, + height: 0, + width: 0 + }; + var mediaassignment = new LTIPANELMEDIAASSIGNMENT(args); + return new LTISUBMISSIONREVIEW(mediaassignment); +}; + + +}, '@VERSION@', {"requires": ["base", "node", "panel", "node-event-simulate"]}); diff --git a/local/kaltura/yui/build/moodle-local_kaltura-ltipanel/moodle-local_kaltura-ltipanel-min.js b/local/kaltura/yui/build/moodle-local_kaltura-ltipanel/moodle-local_kaltura-ltipanel-min.js new file mode 100644 index 0000000000000..eb0e818f3e2a6 --- /dev/null +++ b/local/kaltura/yui/build/moodle-local_kaltura-ltipanel/moodle-local_kaltura-ltipanel-min.js @@ -0,0 +1 @@ +YUI.add("moodle-local_kaltura-ltipanel",function(e,t){var n=function(){n.superclass.constructor.apply(this,arguments)};e.extend(n,e.Base,{panelbodycontent:null,panelvisible:!1,panel:null,modulename:null,addvidbtnid:null,init:function(t){if("0"===t.addvidbtnid||"0"===t.ltilaunchurl||0===t.courseid||0===t.height||0===t.width){alert("Some parameters were not initialized.");return}this.modulename=t.modulename,this.addvidbtnid=t.addvidbtnid;var n=e.one("#"+t.addvidbtnid);n.on("click",this.open_panel_callback,this,t.ltilaunchurl,t.height,t.width)},open_panel_callback:function(t,n,r,i){var s=parseInt(r,10)+45,o=parseInt(i,10)+23+"px";i+="px";if(e.UA.ipod!==0||e.UA.ipad!==0||e.UA.iphone!==0||e.UA.android!==0||e.UA.mobile!==null)o="80%",i="100%";var u="";this.panelbodycontent=u;if(e.UA.ipod!==0||e.UA.ipad!==0||e.UA.iphone!==0)this.panelbodycontent="
    "+u+"
    ";null===this.panel?(this.panel=new e.Panel({srcNode:e.Node.create('
    '),headerContent:"",bodyContent:this.panelbodycontent,width:o,height:s+"px",zIndex:6,centered:!0,modal:!0,visible:!1,render:!0,hideOn:[{node:e.one("input[id=closeltipanel]"),eventName:"click"}]}),this.panel.show(),e.one("input[id=closeltipanel]").on("click",this.lti_hide_panel_callback,this),this.panel.after("visibleChange",this.lti_panel_visible_change_callback,this)):this.panel.show()},lti_hide_panel_callback:function(){var t=e.one("img[id=video_thumbnail]");t.setStyle("display","none");var n=e.one("iframe[id=contentframe]");n.setAttribute("width",e.one("input[id=width]").getAttribute("value")),n.setAttribute("height",e.one("input[id=height]").getAttribute("value")),n.setStyle("display","inline");var r=e.one("input[name=modulename]");undefined!==r&&("kalvidres"===this.modulename||"kalvidpres"===this.modulename)&&this.lti_panel_change_add_media_button_caption()},lti_panel_change_add_media_button_caption:function(){var t=M.util.get_string("replace_video",this.modulename);t!==e.one("#"+this.addvidbtnid).getAttribute("value")&&e.one("#"+this.addvidbtnid).setAttribute("value",t)},lti_panel_visible_change_callback:function(){this.panelvisible=this.panel.get("visible"),!0===this.panelvisible?this.panel.set("bodyContent",this.panelbodycontent):this.panel.set("bodyContent","")}},{NAME:"moodle-local_kaltura-ltipanel",ATTRS:{addvidbtnid:{value:"0"},ltilaunchurl:{value:"0"},height:{value:0},width:{value:0},modulename:{value:""}}});var r=function(){r.superclass.constructor.apply(this,arguments)};e.extend(r,e.Base,{panelbodycontent:null,panelvisible:!1,panel:null,panelheight:0,panelwidth:0,init:function(t){if("0"===t.addvidbtnid||"0"===t.ltilaunchurl||0===t.courseid||0===t.height||0===t.width)return;var n=e.one("#"+t.addvidbtnid);n.on("click",this.open_panel_callback,this,t.ltilaunchurl,t.height,t.width)},open_panel_callback:function(t,n,r,i){this.panelheight=parseInt(r,10)+45,this.panelwidth=parseInt(i,10)+23,this.panelbodycontent="",null===this.panel?(this.panel=new e.Panel({srcNode:e.Node.create('
    '),headerContent:"",bodyContent:this.panelbodycontent,width:this.panelwidth+"px",height:this.panelheight+"px",zIndex:6,centered:!0,modal:!0,visible:!1,render:!0,hideOn:[{node:e.one("input[id=closeltipanel]"),eventName:"click"}]}),this.panel.show(),e.one("input[id=closeltipanel]").on("click",this.lti_hide_panel_callback,this),this.panel.after("visibleChange",this.lti_panel_visible_change_callback,this)):this.panel.show()},lti_hide_panel_callback:function(){e.one("input[id=submit_video]").removeAttribute("disabled");var t=e.one("img[id=video_thumbnail]");t.setStyle("display","none");var n=e.one("iframe[id=contentframe]");n.setAttribute("width",e.one("input[id=width]").getAttribute("value")),n.setAttribute("height",e.one("input[id=height]").getAttribute("value")),n.setStyle("display","inline"),e.one("#id_add_video").set("value",M.util.get_string("replacevideo","kalvidassign"))},lti_panel_visible_change_callback:function(){this.panelvisible=this.panel.get("visible"),!0===this.panelvisible?(this.panel.set("bodyContent",this.panelbodycontent),this.panel.set("height",this.panelheight),this.panel.set("width",this.panelwidth),this.panel.set("centered",!0)):this.panel.set("bodyContent","")}},{NAME:"moodle-local_kaltura-ltipanel",ATTRS:{addvidbtnid:{value:"0"},ltilaunchurl:{value:"0"},height:{value:0},width:{value:0}}});var i=function(){i.superclass.constructor.apply(this,arguments)};e.extend(i,e.Base,{ltimediaassignment:null,init:function(t){this.ltimediaassignment=t,e.one("form[id=fastgrade]").delegate("click",this.review_submission,"a[name=submission_source]",this)},review_submission:function(e){e.preventDefault();var t,n,r;e.target.test("a")?(t=e.target.getAttribute("href"),alert(e.target),n=e.target.ancestor("div[name=media_submission]").get("childNodes").filter("input[name=height]").get("value"),r=e.target.ancestor("div[name=media_submission]").get("childNodes").filter("input[name=width]").get("value")):(t=e.target.ancestor("a[name=submission_source]").getAttribute("href"),n=e.target.ancestor("div[name=media_submission]").get("childNodes").filter("input[name=height]").get("value"),r=e.target.ancestor("div[name=media_submission]").get("childNodes").filter("input[name=width]").get("value")),this.ltimediaassignment.open_panel_callback(null,t,n,r)}},{NAME:"moodle-local_kaltura-ltipanel"}),M.local_kaltura=M.local_kaltura||{},M.local_kaltura.init=function(e){return new n(e)},M.local_kaltura.initmediaassignment=function(e){return new r(e)},M.local_kaltura.initreviewsubmission=function(){var e={addvidbtnid:"0",ltilaunchurl:"0",courseid:0,height:0,width:0},t=new r(e);return new i(t)}},"@VERSION@",{requires:["base","node","panel","node-event-simulate"]}); diff --git a/local/kaltura/yui/build/moodle-local_kaltura-ltipanel/moodle-local_kaltura-ltipanel.js b/local/kaltura/yui/build/moodle-local_kaltura-ltipanel/moodle-local_kaltura-ltipanel.js new file mode 100644 index 0000000000000..951d31a0207aa --- /dev/null +++ b/local/kaltura/yui/build/moodle-local_kaltura-ltipanel/moodle-local_kaltura-ltipanel.js @@ -0,0 +1,472 @@ +YUI.add('moodle-local_kaltura-ltipanel', function (Y, NAME) { + +// This file is part of Moodle - http://moodle.org/ +// +// Moodle is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// Moodle is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with Moodle. If not, see . + +/** + * YUI module for displaying an LTI launch within a YUI panel. + * + * @package local_kaltura + * @author Remote-Learner.net Inc + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + * @copyright (C) 2014 Remote Learner.net Inc http://www.remote-learner.net + */ + + /** + * This method calls the base class constructor + * @method LTIPANEL + */ +var LTIPANEL = function() { + LTIPANEL.superclass.constructor.apply(this, arguments); +}; + +Y.extend(LTIPANEL, Y.Base, { + /** + * Contains the object tag needed to launch an LTI session. + * @property panelbodycontent + * @type {String} + * @default null + */ + panelbodycontent: null, + + /** + * Set to true if panel is visible, otherwise false. + * @property panelvisible + * @type {Boolean} + * @default null + */ + panelvisible: false, + + /** + * The panel object + * @property panel + * @type {Object} + * @default null + */ + panel: null, + + /** + * The name of the initiating module. + * @property modulename + * @type {String} + * @default null + */ + modulename: null, + + /** + * The id value of the add media button. + * @property addvidbtnid + * @type {String} + * @default null + */ + addvidbtnid: null, + + /** + * Init function for the checkboxselection module + * @property params + * @type {Object} + */ + init : function(params) { + // Check to make sure parameters are initialized + if ('0' === params.addvidbtnid || '0' === params.ltilaunchurl || 0 === params.courseid || 0 === params.height || 0 === params.width) { + alert('Some parameters were not initialized.'); + return; + } + + this.modulename = params.modulename; + this.addvidbtnid = params.addvidbtnid; + + var addvideobtn = Y.one('#'+params.addvidbtnid); + addvideobtn.on('click', this.open_panel_callback, this, params.ltilaunchurl, params.height, params.width); + }, + + /** + * Event handler callback for when the add video button is clicked. This function creates the a panel element. + * @property e + * @type {Object} + */ + open_panel_callback : function(e, url, height, width) { + var panelheight = parseInt(height, 10) + 45; + var panelwidth = parseInt(width, 10) + 23 + 'px'; + + width = width+'px'; + // Apply special width for mobile devices as requested by Kaltura. + if (Y.UA.ipod !== 0 || Y.UA.ipad !== 0 || Y.UA.iphone !== 0 || Y.UA.android !== 0 || Y.UA.mobile !== null) { + panelwidth = '80%'; + width = '100%'; + } + + var iframe = ""; + this.panelbodycontent = iframe; + if (Y.UA.ipod !== 0 || Y.UA.ipad !== 0 || Y.UA.iphone !== 0) { + // This outer div will constrain the iframe from overlapping over its content region on iOS devices. + this.panelbodycontent = "
    "+iframe+"
    "; + } + + // If the panel has not yet been initialized. + if (null === this.panel) { + this.panel = new Y.Panel({ + srcNode : Y.Node.create('
    '), + headerContent : '', + bodyContent : this.panelbodycontent, + width : panelwidth, + height : panelheight+"px", + zIndex : 6, + centered : true, + modal : true, + visible : false, + render : true, + hideOn : [ + { + node : Y.one('input[id=closeltipanel]'), + eventName : 'click' + } + ] + }); + + this.panel.show(); + + // Listen to simulated click event send from local/kaltura/service.php + Y.one('input[id=closeltipanel]').on('click', this.lti_hide_panel_callback, this); + + // // Listen to when the panel is made visible or hidden + this.panel.after('visibleChange', this.lti_panel_visible_change_callback, this); + } else { + this.panel.show(); + } + }, + + /** + * Event handler callback for when a simulated click event is triggered on a specifc element. + */ + lti_hide_panel_callback : function() { + // hide the thumbnail image. + var imagenode = Y.one('img[id=video_thumbnail]'); + imagenode.setStyle('display', 'none'); + // Update the iframe element attributes + var iframenode = Y.one('iframe[id=contentframe]'); + iframenode.setAttribute('width', Y.one('input[id=width]').getAttribute('value')); + iframenode.setAttribute('height', Y.one('input[id=height]').getAttribute('value')); + iframenode.setStyle('display', 'inline'); + + // If the page is a Video presentation or resource execute a function to change the button caption KALDEV-579 + var element = Y.one('input[name=modulename]'); + + if (undefined !== element && ('kalvidres' === this.modulename || 'kalvidpres' === this.modulename)) { + this.lti_panel_change_add_media_button_caption(); + } + }, + + lti_panel_change_add_media_button_caption : function() { + // Need to find a better way of doing this. Change was made for KALDEV-579. + var buttoncaption = M.util.get_string('replace_video', this.modulename); + if (buttoncaption !== Y.one('#'+this.addvidbtnid).getAttribute('value')) { + Y.one('#'+this.addvidbtnid).setAttribute('value', buttoncaption); + } + }, + + /** + * Event handler callback for when the panel is made hidden or visible. + */ + lti_panel_visible_change_callback : function() { + this.panelvisible = this.panel.get('visible'); + + // If panel is visible, re-launch the LIT request so that the user sees the main page. Instead of the last page they visited. If the panel is not visible then + // set the content to an empty string; this prevents videos from the iframe from continuing to play after the panel was closed. + if (true === this.panelvisible) { + this.panel.set('bodyContent', this.panelbodycontent); + } else { + this.panel.set('bodyContent', ''); + } + } +}, +{ + NAME : 'moodle-local_kaltura-ltipanel', + ATTRS : { + addvidbtnid : { + value: '0' + }, + ltilaunchurl : { + value: '0' + }, + height : { + value: 0 + }, + width : { + value: 0 + }, + modulename : { + value: '' + } + } +}); + +/** + * This method calls the base class constructor. The primary difference between LTIPANELMEDIAASSIGNMENT and LTIPANEL is that + * LTIPANELMEDIAASSIGNMENT creates a node and appends it to the body tag of the page. The reason for this is due to an issue with the Moodle + * navbar covering up part of the YUI panel, if the panel markup is appended to a child element within the body tag. + * @method LTIPANELMEDIAASSIGNMENT + */ +var LTIPANELMEDIAASSIGNMENT = function() { + LTIPANELMEDIAASSIGNMENT.superclass.constructor.apply(this, arguments); +}; + +Y.extend(LTIPANELMEDIAASSIGNMENT, Y.Base, { + /** + * Contains the object tag needed to launch an LTI session. + * @property panelbodycontent + * @type {String} + * @default null + */ + panelbodycontent: null, + + /** + * Set to true if panel is visible, otherwise false. + * @property panelvisible + * @type {Boolean} + * @default null + */ + panelvisible: false, + + /** + * The panel object + * @property panel + * @type {Object} + * @default null + */ + panel: null, + + /** + * The panel height. + * @property panelheight + * @type {Integer} + * @default 0 + */ + panelheight: 0, + + /** + * The panel width. + * @property panelwidth + * @type {Integer} + * @default 0 + */ + panelwidth: 0, + + /** + * Init function for the checkboxselection module + * @property params + * @type {Object} + */ + init : function(params) { + // Check to make sure parameters are initialized + if ('0' === params.addvidbtnid || '0' === params.ltilaunchurl || 0 === params.courseid || 0 === params.height || 0 === params.width) { + return; + } + + var addvideobtn = Y.one('#'+params.addvidbtnid); + addvideobtn.on('click', this.open_panel_callback, this, params.ltilaunchurl, params.height, params.width); + }, + + /** + * Event handler callback for when the panel content is changed + * @property e + * @type {Object} + */ + open_panel_callback : function(e, url, height, width) { + this.panelheight = parseInt(height, 10) + 45; + this.panelwidth = parseInt(width, 10) + 23; + + this.panelbodycontent = ""; + + // If the panel has not yet been initialized. + if (null === this.panel) { + this.panel = new Y.Panel({ + srcNode : Y.Node.create('
    '), + headerContent : '', + bodyContent : this.panelbodycontent, + width : this.panelwidth+"px", + height : this.panelheight+"px", + zIndex : 6, + centered : true, + modal : true, + visible : false, + render : true, + hideOn : [ + { + node : Y.one('input[id=closeltipanel]'), + eventName : 'click' + } + ] + }); + + this.panel.show(); + + // Listen to simulated click event send from local/kaltura/service.php + Y.one('input[id=closeltipanel]').on('click', this.lti_hide_panel_callback, this); + + // Listen to when the panel is made visible or hidden + this.panel.after('visibleChange', this.lti_panel_visible_change_callback, this); + } else { + this.panel.show(); + } + }, + + /** + * Event handler callback for when a simulated click event is triggered on a specifc element. + */ + lti_hide_panel_callback : function() { + // Enable submit button + Y.one('input[id=submit_video]').removeAttribute('disabled'); + // hide the thumbnail image. + var imagenode = Y.one('img[id=video_thumbnail]'); + imagenode.setStyle('display', 'none'); + // Update the iframe element attributes + var iframenode = Y.one('iframe[id=contentframe]'); + iframenode.setAttribute('width', Y.one('input[id=width]').getAttribute('value')); + iframenode.setAttribute('height', Y.one('input[id=height]').getAttribute('value')); + iframenode.setStyle('display', 'inline'); + Y.one('#id_add_video').set('value', M.util.get_string('replacevideo', 'kalvidassign')); + }, + + /** + * Event handler callback for when the panel is made hidden or visible. + */ + lti_panel_visible_change_callback : function() { + this.panelvisible = this.panel.get('visible'); + + // If panel is visible, re-launch the LIT request so that the user sees the main page. Instead of the last page they visited. If the panel is not visible then + // set the content to an empty string; this prevents videos from the iframe from continuing to play after the panel was closed. + if (true === this.panelvisible) { + this.panel.set('bodyContent', this.panelbodycontent); + this.panel.set('height', this.panelheight); + this.panel.set('width', this.panelwidth); + this.panel.set('centered', true); + } else { + this.panel.set('bodyContent', ''); + } + } +}, +{ + NAME : 'moodle-local_kaltura-ltipanel', + ATTRS : { + addvidbtnid : { + value: '0' + }, + ltilaunchurl : { + value: '0' + }, + height : { + value: 0 + }, + width : { + value: 0 + } + } +}); + +/** + * This method calls the base class constructor. This module renders a Panel for viewing media from multiple sources. + * @method LTISUBMISSIONREVIEW + */ +var LTISUBMISSIONREVIEW = function() { + LTISUBMISSIONREVIEW.superclass.constructor.apply(this, arguments); +}; + +Y.extend(LTISUBMISSIONREVIEW, Y.Base, { + /** + * An instance of the ltimediaassignment class. + * @property ltimediaassignment + * @type {Object} + * @default null + */ + ltimediaassignment: null, + + + /** + * Init function for the checkboxselection module + * @property params + * @type {Object} + */ + init : function(ltimediaassignment) { + this.ltimediaassignment = ltimediaassignment; + Y.one('form[id=fastgrade]').delegate('click', this.review_submission, 'a[name=submission_source]', this); + }, + + /** + * Callback function for when a user clicks on the review submission link. + * @property e + * @type {Object} + */ + review_submission : function(e) { + e.preventDefault(); + var source, height, width; + // Test if the target is an anchor tag or img tag. + if (e.target.test('a')) { + source = e.target.getAttribute('href');alert(e.target); + height = e.target.ancestor('div[name=media_submission]').get('childNodes').filter('input[name=height]').get('value'); + width = e.target.ancestor('div[name=media_submission]').get('childNodes').filter('input[name=width]').get('value'); + } else { + source = e.target.ancestor('a[name=submission_source]').getAttribute('href'); + height = e.target.ancestor('div[name=media_submission]').get('childNodes').filter('input[name=height]').get('value'); + width = e.target.ancestor('div[name=media_submission]').get('childNodes').filter('input[name=width]').get('value'); + } + + this.ltimediaassignment.open_panel_callback(null, source, height, width); + } +}, +{ + NAME : 'moodle-local_kaltura-ltipanel' +}); + +M.local_kaltura = M.local_kaltura || {}; + +/** + * Entry point for ltipanel module + * @param string params additional parameters. + * @return object the ltipanel object + */ +M.local_kaltura.init = function(params) { + return new LTIPANEL(params); +}; + +/** + * Entry point for ltipanelmediaassignment module + * @param string params additional parameters. + * @return object the ltipanel object + */ +M.local_kaltura.initmediaassignment = function(params) { + return new LTIPANELMEDIAASSIGNMENT(params); +}; + +/** + * Entry point for ltipanelmediaassignment module + * @param string params additional parameters. + * @return object the ltipanel object + */ +M.local_kaltura.initreviewsubmission = function() { + var args = { + addvidbtnid: '0', + ltilaunchurl: '0', + courseid: 0, + height: 0, + width: 0 + }; + var mediaassignment = new LTIPANELMEDIAASSIGNMENT(args); + return new LTISUBMISSIONREVIEW(mediaassignment); +}; + + +}, '@VERSION@', {"requires": ["base", "node", "panel", "node-event-simulate"]}); diff --git a/local/kaltura/yui/build/moodle-local_kaltura-ltiservice/moodle-local_kaltura-ltiservice-debug.js b/local/kaltura/yui/build/moodle-local_kaltura-ltiservice/moodle-local_kaltura-ltiservice-debug.js new file mode 100644 index 0000000000000..deb9ff66d966d --- /dev/null +++ b/local/kaltura/yui/build/moodle-local_kaltura-ltiservice/moodle-local_kaltura-ltiservice-debug.js @@ -0,0 +1,120 @@ +YUI.add('moodle-local_kaltura-ltiservice', function (Y, NAME) { + +// This file is part of Moodle - http://moodle.org/ +// +// Moodle is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// Moodle is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with Moodle. If not, see . + +/** + * YUI module for displaying an LTI launch within a YUI panel. + * + * @package local_kaltura + * @author Remote-Learner.net Inc + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + * @copyright (C) 2014 Remote Learner.net Inc http://www.remote-learner.net + */ + + /** + * This method calls the base class constructor + * @method LTISERVICE + */ +var LTISERVICE = function() { + LTISERVICE.superclass.constructor.apply(this, arguments); +}; + +Y.extend(LTISERVICE, Y.Base, { + /** + * Init function for triggering a custom event and setting attributes. Also checks whether optional elements exist in the parent window. + * @property params + * @type {Object} + */ + init : function(params) { + if (window.parent.document.getElementById('video_title')) { + Y.one(window.parent.document.getElementById('video_title')).setAttribute('value', params.title); + } + + if (window.parent.document.getElementById('entry_id')) { + Y.one(window.parent.document.getElementById('entry_id')).setAttribute('value', params.entryid); + } + + if (window.parent.document.getElementById('height')) { + Y.one(window.parent.document.getElementById('height')).setAttribute('value', params.height); + } + + if (window.parent.document.getElementById('width')) { + Y.one(window.parent.document.getElementById('width')).setAttribute('value', params.width); + } + + if (window.parent.document.getElementById('uiconf_id')) { + Y.one(window.parent.document.getElementById('uiconf_id')).setAttribute('value', '1'); + } + + if (window.parent.document.getElementById('widescreen')) { + Y.one(window.parent.document.getElementById('widescreen')).setAttribute('value', '1'); + } + + if (window.parent.document.getElementById('video_preview_frame')) { + Y.one(window.parent.document.getElementById('video_preview_frame')).setAttribute('src', decodeURIComponent(params.iframeurl)); + } else if (window.parent.document.getElementById('contentframe')) { + Y.one(window.parent.document.getElementById('contentframe')).setAttribute('src', decodeURIComponent(params.iframeurl)); + } + + // This element must exist. + Y.one(window.parent.document.getElementById('source')).setAttribute('value', decodeURIComponent(params.iframeurl)); + + if (window.parent.document.getElementById('metadata')) { + Y.one(window.parent.document.getElementById('metadata')).setAttribute('value', params.metadata); + } + + if (window.parent.document.getElementById('closeltipanel')) { + Y.one(window.parent.document.getElementById('closeltipanel')).simulate('click'); + } + } +}, +{ + NAME : 'moodle-local_kaltura-ltiservice', + ATTRS : { + iframeurl : { + value: '' + }, + width : { + value: '' + }, + height : { + value: '' + }, + entryid : { + value: '' + }, + title : { + value: '' + }, + metadata : { + value: '' + } + } + +}); +M.local_kaltura = M.local_kaltura || {}; + +/** + * Entry point for ltiservice module + * @param string params additional parameters. + * @return object the ltiservice object + */ +M.local_kaltura.init = function(params) { + return new LTISERVICE(params); +}; + + +}, '@VERSION@', {"requires": ["base", "node", "node-event-simulate"]}); diff --git a/local/kaltura/yui/build/moodle-local_kaltura-ltiservice/moodle-local_kaltura-ltiservice-min.js b/local/kaltura/yui/build/moodle-local_kaltura-ltiservice/moodle-local_kaltura-ltiservice-min.js new file mode 100644 index 0000000000000..f27d292082325 --- /dev/null +++ b/local/kaltura/yui/build/moodle-local_kaltura-ltiservice/moodle-local_kaltura-ltiservice-min.js @@ -0,0 +1 @@ +YUI.add("moodle-local_kaltura-ltiservice",function(e,t){var n=function(){n.superclass.constructor.apply(this,arguments)};e.extend(n,e.Base,{init:function(t){window.parent.document.getElementById("video_title")&&e.one(window.parent.document.getElementById("video_title")).setAttribute("value",t.title),window.parent.document.getElementById("entry_id")&&e.one(window.parent.document.getElementById("entry_id")).setAttribute("value",t.entryid),window.parent.document.getElementById("height")&&e.one(window.parent.document.getElementById("height")).setAttribute("value",t.height),window.parent.document.getElementById("width")&&e.one(window.parent.document.getElementById("width")).setAttribute("value",t.width),window.parent.document.getElementById("uiconf_id")&&e.one(window.parent.document.getElementById("uiconf_id")).setAttribute("value","1"),window.parent.document.getElementById("widescreen")&&e.one(window.parent.document.getElementById("widescreen")).setAttribute("value","1"),window.parent.document.getElementById("video_preview_frame")?e.one(window.parent.document.getElementById("video_preview_frame")).setAttribute("src",decodeURIComponent(t.iframeurl)):window.parent.document.getElementById("contentframe")&&e.one(window.parent.document.getElementById("contentframe")).setAttribute("src",decodeURIComponent(t.iframeurl)),e.one(window.parent.document.getElementById("source")).setAttribute("value",decodeURIComponent(t.iframeurl)),window.parent.document.getElementById("metadata")&&e.one(window.parent.document.getElementById("metadata")).setAttribute("value",t.metadata),window.parent.document.getElementById("closeltipanel")&&e.one(window.parent.document.getElementById("closeltipanel")).simulate("click")}},{NAME:"moodle-local_kaltura-ltiservice",ATTRS:{iframeurl:{value:""},width:{value:""},height:{value:""},entryid:{value:""},title:{value:""},metadata:{value:""}}}),M.local_kaltura=M.local_kaltura||{},M.local_kaltura.init=function(e){return new n(e)}},"@VERSION@",{requires:["base","node","node-event-simulate"]}); diff --git a/local/kaltura/yui/build/moodle-local_kaltura-ltiservice/moodle-local_kaltura-ltiservice.js b/local/kaltura/yui/build/moodle-local_kaltura-ltiservice/moodle-local_kaltura-ltiservice.js new file mode 100644 index 0000000000000..deb9ff66d966d --- /dev/null +++ b/local/kaltura/yui/build/moodle-local_kaltura-ltiservice/moodle-local_kaltura-ltiservice.js @@ -0,0 +1,120 @@ +YUI.add('moodle-local_kaltura-ltiservice', function (Y, NAME) { + +// This file is part of Moodle - http://moodle.org/ +// +// Moodle is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// Moodle is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with Moodle. If not, see . + +/** + * YUI module for displaying an LTI launch within a YUI panel. + * + * @package local_kaltura + * @author Remote-Learner.net Inc + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + * @copyright (C) 2014 Remote Learner.net Inc http://www.remote-learner.net + */ + + /** + * This method calls the base class constructor + * @method LTISERVICE + */ +var LTISERVICE = function() { + LTISERVICE.superclass.constructor.apply(this, arguments); +}; + +Y.extend(LTISERVICE, Y.Base, { + /** + * Init function for triggering a custom event and setting attributes. Also checks whether optional elements exist in the parent window. + * @property params + * @type {Object} + */ + init : function(params) { + if (window.parent.document.getElementById('video_title')) { + Y.one(window.parent.document.getElementById('video_title')).setAttribute('value', params.title); + } + + if (window.parent.document.getElementById('entry_id')) { + Y.one(window.parent.document.getElementById('entry_id')).setAttribute('value', params.entryid); + } + + if (window.parent.document.getElementById('height')) { + Y.one(window.parent.document.getElementById('height')).setAttribute('value', params.height); + } + + if (window.parent.document.getElementById('width')) { + Y.one(window.parent.document.getElementById('width')).setAttribute('value', params.width); + } + + if (window.parent.document.getElementById('uiconf_id')) { + Y.one(window.parent.document.getElementById('uiconf_id')).setAttribute('value', '1'); + } + + if (window.parent.document.getElementById('widescreen')) { + Y.one(window.parent.document.getElementById('widescreen')).setAttribute('value', '1'); + } + + if (window.parent.document.getElementById('video_preview_frame')) { + Y.one(window.parent.document.getElementById('video_preview_frame')).setAttribute('src', decodeURIComponent(params.iframeurl)); + } else if (window.parent.document.getElementById('contentframe')) { + Y.one(window.parent.document.getElementById('contentframe')).setAttribute('src', decodeURIComponent(params.iframeurl)); + } + + // This element must exist. + Y.one(window.parent.document.getElementById('source')).setAttribute('value', decodeURIComponent(params.iframeurl)); + + if (window.parent.document.getElementById('metadata')) { + Y.one(window.parent.document.getElementById('metadata')).setAttribute('value', params.metadata); + } + + if (window.parent.document.getElementById('closeltipanel')) { + Y.one(window.parent.document.getElementById('closeltipanel')).simulate('click'); + } + } +}, +{ + NAME : 'moodle-local_kaltura-ltiservice', + ATTRS : { + iframeurl : { + value: '' + }, + width : { + value: '' + }, + height : { + value: '' + }, + entryid : { + value: '' + }, + title : { + value: '' + }, + metadata : { + value: '' + } + } + +}); +M.local_kaltura = M.local_kaltura || {}; + +/** + * Entry point for ltiservice module + * @param string params additional parameters. + * @return object the ltiservice object + */ +M.local_kaltura.init = function(params) { + return new LTISERVICE(params); +}; + + +}, '@VERSION@', {"requires": ["base", "node", "node-event-simulate"]}); diff --git a/local/kaltura/yui/build/moodle-local_kaltura-ltitinymcepanel/moodle-local_kaltura-ltitinymcepanel-debug.js b/local/kaltura/yui/build/moodle-local_kaltura-ltitinymcepanel/moodle-local_kaltura-ltitinymcepanel-debug.js new file mode 100644 index 0000000000000..23a1c5c8ac664 --- /dev/null +++ b/local/kaltura/yui/build/moodle-local_kaltura-ltitinymcepanel/moodle-local_kaltura-ltitinymcepanel-debug.js @@ -0,0 +1,141 @@ +YUI.add('moodle-local_kaltura-ltitinymcepanel', function (Y, NAME) { + +// This file is part of Moodle - http://moodle.org/ +// +// Moodle is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// Moodle is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with Moodle. If not, see . + +/** + * YUI module for displaying an LTI launch within a YUI panel. + * + * @package local_kaltura + * @author Remote-Learner.net Inc + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + * @copyright (C) 2014 Remote Learner.net Inc http://www.remote-learner.net + */ + + /** + * This method calls the base class constructor + * @method LTITINYMCEPANEL + */ +var LTITINYMCEPANEL = function() { + LTITINYMCEPANEL.superclass.constructor.apply(this, arguments); +}; + +Y.extend(LTITINYMCEPANEL, Y.Base, { + /** + * The context id the editor was launched in. + * @property contextid + * @type {Integer} + * @default null + */ + contextid: 0, + + /** + * Init function for the checkboxselection module + * @property {Object} params Data to help initialize the YUI module. + */ + init : function(params) { + // Check to make sure parameters are initialized. + if ('' === params.insertbtnid || '' === params.ltilaunchurl || '' === params.objecttagheight || '' === params.objecttagid || '' === params.previewiframeid) { + alert('Some parameters were not initialized.'); + return; + } + + // Initialize the the browse when the window is initially rendered. + this.load_lti_content(params.ltilaunchurl, params.objecttagid, params.objecttagheight); + + // Disable the insert button since nothing has been selected yet. + Y.one('#'+params.insertbtnid).set('disabled', true); + + // Listen to simulated click event send from local/kaltura/service.php + Y.one('#closeltipanel').on('click', this.user_selected_video_callback, this, params.insertbtnid, params.objecttagid, params.previewiframeid, params.objecttagheight); + + if (null !== Y.one('#page-footer')) { + Y.one('#page-footer').setStyle('display', 'none'); + } + }, + + /** + * A funciton to load the LTI content. This is called when the YUI module is first initialized. + * @property {String} url LTI launch URL. + * @property {String} iframeid iframe tag id. + * @property {String} iframeheight iframe tag height. + */ + load_lti_content : function(url, iframeid, iframeheight) { + if (0 === this.contextid) { + this.contextid = Y.one('#lti_launch_context_id').get('value'); + } + + var content = ''; + Y.one('#'+iframeid).setContent(content); + }, + + /** + * This function serves as a call back method for when the closeltipanel div has been clicked. It means that the user has + * selected a video for embedding into the TinyMCE edotor. Enabling the insert button, removing the contents LTI launch element and + * adding content to the media preview element. + * @property {Object} e Event object. + * @property {String} insertbtnid Insert button id. + * @property {String} objecttagid Object tag id. + * @property {String} previewiframeid Preview iframe tag id. + * @property {String} height Height of the iframe. + */ + user_selected_video_callback : function(e, insertbtnid, objecttagid, previewiframeid, height) { + Y.one('#'+insertbtnid).setStyle('display', 'inline'); + Y.one('#'+insertbtnid).set('disabled', false); + Y.one('#'+objecttagid).setContent(''); + + var center = Y.Node.create('
    '); + var iframe = Y.Node.create(''); + iframe.setAttribute('width', Y.one('#width').get('value')+'px'); + iframe.setAttribute('height', height+'px'); + iframe.setAttribute('src', Y.one('#source').get('value')); + + center.append(iframe); + Y.one('#'+previewiframeid).append(center); + } +}, +{ + NAME : 'moodle-local_kaltura-ltitinymcepanel', + ATTRS : { + insertbtnid : { + value : '' + }, + ltilaunchurl : { + value : '' + }, + objecttagheight : { + value : '' + }, + objecttagid : { + value : '' + }, + previewiframeid : { + value : '' + } + } +}); +M.local_kaltura = M.local_kaltura || {}; + +/** + * Entry point for ltipanel module + * @param {Object} params Additional parameters. + * @return {Object} the ltipanel object + */ +M.local_kaltura.init = function(params) { + return new LTITINYMCEPANEL(params); +}; + + +}, '@VERSION@', {"requires": ["base", "node", "panel", "node-event-simulate"]}); diff --git a/local/kaltura/yui/build/moodle-local_kaltura-ltitinymcepanel/moodle-local_kaltura-ltitinymcepanel-min.js b/local/kaltura/yui/build/moodle-local_kaltura-ltitinymcepanel/moodle-local_kaltura-ltitinymcepanel-min.js new file mode 100644 index 0000000000000..24eaf342ca72c --- /dev/null +++ b/local/kaltura/yui/build/moodle-local_kaltura-ltitinymcepanel/moodle-local_kaltura-ltitinymcepanel-min.js @@ -0,0 +1 @@ +YUI.add("moodle-local_kaltura-ltitinymcepanel",function(e,t){var n=function(){n.superclass.constructor.apply(this,arguments)};e.extend(n,e.Base,{contextid:0,init:function(t){if(""===t.insertbtnid||""===t.ltilaunchurl||""===t.objecttagheight||""===t.objecttagid||""===t.previewiframeid){alert("Some parameters were not initialized.");return}this.load_lti_content(t.ltilaunchurl,t.objecttagid,t.objecttagheight),e.one("#"+t.insertbtnid).set("disabled",!0),e.one("#closeltipanel").on("click",this.user_selected_video_callback,this,t.insertbtnid,t.objecttagid,t.previewiframeid,t.objecttagheight),null!==e.one("#page-footer")&&e.one("#page-footer").setStyle("display","none")},load_lti_content:function(t,n,r){0===this.contextid&&(this.contextid=e.one("#lti_launch_context_id").get("value"));var i='';e.one("#"+n).setContent(i)},user_selected_video_callback:function(t,n,r,i,s){e.one("#"+n).setStyle("display","inline"),e.one("#"+n).set("disabled",!1),e.one("#"+r).setContent("");var o=e.Node.create("
    "),u=e.Node.create("");u.setAttribute("width",e.one("#width").get("value")+"px"),u.setAttribute("height",s+"px"),u.setAttribute("src",e.one("#source").get("value")),o.append(u),e.one("#"+i).append(o)}},{NAME:"moodle-local_kaltura-ltitinymcepanel",ATTRS:{insertbtnid:{value:""},ltilaunchurl:{value:""},objecttagheight:{value:""},objecttagid:{value:""},previewiframeid:{value:""}}}),M.local_kaltura=M.local_kaltura||{},M.local_kaltura.init=function(e){return new n(e)}},"@VERSION@",{requires:["base","node","panel","node-event-simulate"]}); diff --git a/local/kaltura/yui/build/moodle-local_kaltura-ltitinymcepanel/moodle-local_kaltura-ltitinymcepanel.js b/local/kaltura/yui/build/moodle-local_kaltura-ltitinymcepanel/moodle-local_kaltura-ltitinymcepanel.js new file mode 100644 index 0000000000000..23a1c5c8ac664 --- /dev/null +++ b/local/kaltura/yui/build/moodle-local_kaltura-ltitinymcepanel/moodle-local_kaltura-ltitinymcepanel.js @@ -0,0 +1,141 @@ +YUI.add('moodle-local_kaltura-ltitinymcepanel', function (Y, NAME) { + +// This file is part of Moodle - http://moodle.org/ +// +// Moodle is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// Moodle is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with Moodle. If not, see . + +/** + * YUI module for displaying an LTI launch within a YUI panel. + * + * @package local_kaltura + * @author Remote-Learner.net Inc + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + * @copyright (C) 2014 Remote Learner.net Inc http://www.remote-learner.net + */ + + /** + * This method calls the base class constructor + * @method LTITINYMCEPANEL + */ +var LTITINYMCEPANEL = function() { + LTITINYMCEPANEL.superclass.constructor.apply(this, arguments); +}; + +Y.extend(LTITINYMCEPANEL, Y.Base, { + /** + * The context id the editor was launched in. + * @property contextid + * @type {Integer} + * @default null + */ + contextid: 0, + + /** + * Init function for the checkboxselection module + * @property {Object} params Data to help initialize the YUI module. + */ + init : function(params) { + // Check to make sure parameters are initialized. + if ('' === params.insertbtnid || '' === params.ltilaunchurl || '' === params.objecttagheight || '' === params.objecttagid || '' === params.previewiframeid) { + alert('Some parameters were not initialized.'); + return; + } + + // Initialize the the browse when the window is initially rendered. + this.load_lti_content(params.ltilaunchurl, params.objecttagid, params.objecttagheight); + + // Disable the insert button since nothing has been selected yet. + Y.one('#'+params.insertbtnid).set('disabled', true); + + // Listen to simulated click event send from local/kaltura/service.php + Y.one('#closeltipanel').on('click', this.user_selected_video_callback, this, params.insertbtnid, params.objecttagid, params.previewiframeid, params.objecttagheight); + + if (null !== Y.one('#page-footer')) { + Y.one('#page-footer').setStyle('display', 'none'); + } + }, + + /** + * A funciton to load the LTI content. This is called when the YUI module is first initialized. + * @property {String} url LTI launch URL. + * @property {String} iframeid iframe tag id. + * @property {String} iframeheight iframe tag height. + */ + load_lti_content : function(url, iframeid, iframeheight) { + if (0 === this.contextid) { + this.contextid = Y.one('#lti_launch_context_id').get('value'); + } + + var content = ''; + Y.one('#'+iframeid).setContent(content); + }, + + /** + * This function serves as a call back method for when the closeltipanel div has been clicked. It means that the user has + * selected a video for embedding into the TinyMCE edotor. Enabling the insert button, removing the contents LTI launch element and + * adding content to the media preview element. + * @property {Object} e Event object. + * @property {String} insertbtnid Insert button id. + * @property {String} objecttagid Object tag id. + * @property {String} previewiframeid Preview iframe tag id. + * @property {String} height Height of the iframe. + */ + user_selected_video_callback : function(e, insertbtnid, objecttagid, previewiframeid, height) { + Y.one('#'+insertbtnid).setStyle('display', 'inline'); + Y.one('#'+insertbtnid).set('disabled', false); + Y.one('#'+objecttagid).setContent(''); + + var center = Y.Node.create('
    '); + var iframe = Y.Node.create(''); + iframe.setAttribute('width', Y.one('#width').get('value')+'px'); + iframe.setAttribute('height', height+'px'); + iframe.setAttribute('src', Y.one('#source').get('value')); + + center.append(iframe); + Y.one('#'+previewiframeid).append(center); + } +}, +{ + NAME : 'moodle-local_kaltura-ltitinymcepanel', + ATTRS : { + insertbtnid : { + value : '' + }, + ltilaunchurl : { + value : '' + }, + objecttagheight : { + value : '' + }, + objecttagid : { + value : '' + }, + previewiframeid : { + value : '' + } + } +}); +M.local_kaltura = M.local_kaltura || {}; + +/** + * Entry point for ltipanel module + * @param {Object} params Additional parameters. + * @return {Object} the ltipanel object + */ +M.local_kaltura.init = function(params) { + return new LTITINYMCEPANEL(params); +}; + + +}, '@VERSION@', {"requires": ["base", "node", "panel", "node-event-simulate"]}); diff --git a/local/kaltura/yui/src/build/moodle-local_kaltura-ltiservice/moodle-local_kaltura-ltiservice-debug.js b/local/kaltura/yui/src/build/moodle-local_kaltura-ltiservice/moodle-local_kaltura-ltiservice-debug.js new file mode 100644 index 0000000000000..3e316429bff2b --- /dev/null +++ b/local/kaltura/yui/src/build/moodle-local_kaltura-ltiservice/moodle-local_kaltura-ltiservice-debug.js @@ -0,0 +1,58 @@ +YUI.add('moodle-local_kaltura-ltiservice', function (Y, NAME) { + +// This file is part of Moodle - http://moodle.org/ +// +// Moodle is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// Moodle is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with Moodle. If not, see . + +/** + * YUI module for displaying an LTI launch within a YUI panel. + * + * @package local_kaltura + * @author Remote-Learner.net Inc + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + * @copyright (C) 2014 Remote Learner.net Inc http://www.remote-learner.net + */ + + /** + * This method calls the base class constructor + * @method LTISERVICE + */ +var LTISERVICE = function() { + LTISERVICE.superclass.constructor.apply(this, arguments); +}; + +Y.extend(LTISERVICE, Y.Base, { + /** + * Init function for the checkboxselection module + */ + init : function() { + alert('ltiservice'); + + } +}, +{ + NAME : 'moodle-local_kaltura-ltiservice' +}); +M.local_kaltura = M.local_kaltura || {}; + +/** + * Entry point for ltiservice module + * @param string params additional parameters. + * @return object the ltiservice object + */ +M.local_kaltura.init = function(params) { + return new LTISERVICE(params); +}; + +}, '@VERSION@', {"requires": ["base", "node"]}); diff --git a/local/kaltura/yui/src/build/moodle-local_kaltura-ltiservice/moodle-local_kaltura-ltiservice-min.js b/local/kaltura/yui/src/build/moodle-local_kaltura-ltiservice/moodle-local_kaltura-ltiservice-min.js new file mode 100644 index 0000000000000..aeb426ce7fab1 --- /dev/null +++ b/local/kaltura/yui/src/build/moodle-local_kaltura-ltiservice/moodle-local_kaltura-ltiservice-min.js @@ -0,0 +1 @@ +YUI.add("moodle-local_kaltura-ltiservice",function(e,t){var n=function(){n.superclass.constructor.apply(this,arguments)};e.extend(n,e.Base,{init:function(){alert("ltiservice")}},{NAME:"moodle-local_kaltura-ltiservice"}),M.local_kaltura=M.local_kaltura||{},M.local_kaltura.init=function(e){return new n(e)}},"@VERSION@",{requires:["base","node"]}); diff --git a/local/kaltura/yui/src/build/moodle-local_kaltura-ltiservice/moodle-local_kaltura-ltiservice.js b/local/kaltura/yui/src/build/moodle-local_kaltura-ltiservice/moodle-local_kaltura-ltiservice.js new file mode 100644 index 0000000000000..3e316429bff2b --- /dev/null +++ b/local/kaltura/yui/src/build/moodle-local_kaltura-ltiservice/moodle-local_kaltura-ltiservice.js @@ -0,0 +1,58 @@ +YUI.add('moodle-local_kaltura-ltiservice', function (Y, NAME) { + +// This file is part of Moodle - http://moodle.org/ +// +// Moodle is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// Moodle is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with Moodle. If not, see . + +/** + * YUI module for displaying an LTI launch within a YUI panel. + * + * @package local_kaltura + * @author Remote-Learner.net Inc + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + * @copyright (C) 2014 Remote Learner.net Inc http://www.remote-learner.net + */ + + /** + * This method calls the base class constructor + * @method LTISERVICE + */ +var LTISERVICE = function() { + LTISERVICE.superclass.constructor.apply(this, arguments); +}; + +Y.extend(LTISERVICE, Y.Base, { + /** + * Init function for the checkboxselection module + */ + init : function() { + alert('ltiservice'); + + } +}, +{ + NAME : 'moodle-local_kaltura-ltiservice' +}); +M.local_kaltura = M.local_kaltura || {}; + +/** + * Entry point for ltiservice module + * @param string params additional parameters. + * @return object the ltiservice object + */ +M.local_kaltura.init = function(params) { + return new LTISERVICE(params); +}; + +}, '@VERSION@', {"requires": ["base", "node"]}); diff --git a/local/kaltura/yui/src/lticontainer/build.json b/local/kaltura/yui/src/lticontainer/build.json new file mode 100644 index 0000000000000..cc70a98cbce94 --- /dev/null +++ b/local/kaltura/yui/src/lticontainer/build.json @@ -0,0 +1,10 @@ +{ + "name": "moodle-local_kaltura-lticontainer", + "builds": { + "moodle-local_kaltura-lticontainer": { + "jsfiles": [ + "lticontainer.js" + ] + } + } +} \ No newline at end of file diff --git a/local/kaltura/yui/src/lticontainer/js/lticontainer.js b/local/kaltura/yui/src/lticontainer/js/lticontainer.js new file mode 100644 index 0000000000000..bd1df15a2fa86 --- /dev/null +++ b/local/kaltura/yui/src/lticontainer/js/lticontainer.js @@ -0,0 +1,162 @@ +// This file is part of Moodle - http://moodle.org/ +// +// Moodle is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// Moodle is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with Moodle. If not, see . + +/** + * YUI module used to resize the LTI launch container. + * + * @package local_kaltura + * @author Remote-Learner.net Inc + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + * @copyright (C) 2014 Remote Learner.net Inc http://www.remote-learner.net + */ + +/** + * This method calls the base class constructor + * @method LTICONTAINER + */ +var LTICONTAINER = function() { + LTICONTAINER.superclass.constructor.apply(this, arguments); +}; + +Y.extend(LTICONTAINER, Y.Base, { + /** + * The last known height of the element. + * @property lastheight + * @type {Integer} + * @default null + */ + lastheight: null, + + /** + * Add padding to make the bottom of the iframe visible. The iframe wasn't visible on some themes. Probably because of border widths, etc. + * @property padding + * @type {Integer} + * @default 15 + */ + padding: 15, + + /** + * Height of window. + * @property viewportheight + * @type {Integer} + * @default 15 + */ + viewportheight: null, + + /** + * Height of the entire document. + * @property documentheight + * @type {Integer} + * @default null + */ + documentheight: null, + + /** + * Height of the body element. + * @property documentheight + * @type {Integer} + * @default null + */ + clientheight: null, + + /** + * User video width size selection. + * @property kalvidwidth + * @type {Integer} + * @default null + */ + kalvidwidth: null, + + /** + * The YUI node object for the iframe container. + * @property ltiframe + * @type {Object} + * @default null + */ + ltiframe: null, + + /** + * Init function for the checkboxselection module + * @property params + * @type {Object} + */ + init : function(params) { + var bodynode = Y.one('body[class~='+params.bodyclass+']'); + + this.lastheight = params.lastheight; + this.padding = params.padding; + this.viewportheight = bodynode.get('winHeight'); + this.documentheight = bodynode.get('docHeight'); + this.clientheight = bodynode.getDOMNode.clientHeight; + this.ltiframe = Y.one('#contentframe'); + this.kalvidwidth = params.kalvidwidth; + + this.resize(); + this.timer = Y.later(250, this, this.resize); + }, + + /** + * This function resizes the iframe height and width. + */ + resize : function() { + if (this.lastheight !== Math.min(this.documentheight, this.viewportheight)) { + var newheight = this.viewportheight - this.ltiframe.getY() - this.padding+"px"; + this.ltiframe.setStyle('height', newheight); + this.lastheight = Math.min(this.documentheight, this.viewportheight); + } + + var kalvidcontent = Y.one('#kalvid_content'); + if (kalvidcontent !== null) { + var maxwidth = kalvidcontent.get('offsetWidth'); + var allowedsize = maxwidth - this.padding; + + if (this.kalvidwidth !== null) { + // Double current user's video width selection as requested by Kaltura. + var newsize = this.kalvidwidth * 2; + + // If "newsize" if over allowed size then set it to the maximum allowed. + if (newsize > allowedsize) { + this.ltiframe.setStyle('width', allowedsize+'px'); + } else { + this.ltiframe.setStyle('width', newsize+'px'); + } + } + } + } +}, +{ + NAME : 'moodle-local_kaltura-lticontainer', + ATTRS : { + bodyclass : { + value : null + }, + lastheight : { + value : null + }, + padding: { + value : 15 + } + } +}); +M.local_kaltura = M.local_kaltura || {}; + +/** + * Entry point for lticontainer module + * @param string params additional parameters. + * @return object the lticontainer object + */ +M.local_kaltura.init = function(params) { + return new LTICONTAINER(params); +}; diff --git a/local/kaltura/yui/src/lticontainer/meta/lticontainer.json b/local/kaltura/yui/src/lticontainer/meta/lticontainer.json new file mode 100644 index 0000000000000..f3a5d478c89f3 --- /dev/null +++ b/local/kaltura/yui/src/lticontainer/meta/lticontainer.json @@ -0,0 +1,8 @@ +{ + "moodle-local_kaltura-lticontainer": { + "requires": [ + "base", + "node" + ] + } +} \ No newline at end of file diff --git a/local/kaltura/yui/src/ltipanel/build.json b/local/kaltura/yui/src/ltipanel/build.json new file mode 100644 index 0000000000000..037cdbe58b803 --- /dev/null +++ b/local/kaltura/yui/src/ltipanel/build.json @@ -0,0 +1,10 @@ +{ + "name": "moodle-local_kaltura-ltipanel", + "builds": { + "moodle-local_kaltura-ltipanel": { + "jsfiles": [ + "ltipanel.js" + ] + } + } +} diff --git a/local/kaltura/yui/src/ltipanel/js/ltipanel.js b/local/kaltura/yui/src/ltipanel/js/ltipanel.js new file mode 100644 index 0000000000000..2b6e75c14e548 --- /dev/null +++ b/local/kaltura/yui/src/ltipanel/js/ltipanel.js @@ -0,0 +1,467 @@ +// This file is part of Moodle - http://moodle.org/ +// +// Moodle is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// Moodle is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with Moodle. If not, see . + +/** + * YUI module for displaying an LTI launch within a YUI panel. + * + * @package local_kaltura + * @author Remote-Learner.net Inc + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + * @copyright (C) 2014 Remote Learner.net Inc http://www.remote-learner.net + */ + + /** + * This method calls the base class constructor + * @method LTIPANEL + */ +var LTIPANEL = function() { + LTIPANEL.superclass.constructor.apply(this, arguments); +}; + +Y.extend(LTIPANEL, Y.Base, { + /** + * Contains the object tag needed to launch an LTI session. + * @property panelbodycontent + * @type {String} + * @default null + */ + panelbodycontent: null, + + /** + * Set to true if panel is visible, otherwise false. + * @property panelvisible + * @type {Boolean} + * @default null + */ + panelvisible: false, + + /** + * The panel object + * @property panel + * @type {Object} + * @default null + */ + panel: null, + + /** + * The name of the initiating module. + * @property modulename + * @type {String} + * @default null + */ + modulename: null, + + /** + * The id value of the add media button. + * @property addvidbtnid + * @type {String} + * @default null + */ + addvidbtnid: null, + + /** + * Init function for the checkboxselection module + * @property params + * @type {Object} + */ + init : function(params) { + // Check to make sure parameters are initialized + if ('0' === params.addvidbtnid || '0' === params.ltilaunchurl || 0 === params.courseid || 0 === params.height || 0 === params.width) { + alert('Some parameters were not initialized.'); + return; + } + + this.modulename = params.modulename; + this.addvidbtnid = params.addvidbtnid; + + var addvideobtn = Y.one('#'+params.addvidbtnid); + addvideobtn.on('click', this.open_panel_callback, this, params.ltilaunchurl, params.height, params.width); + }, + + /** + * Event handler callback for when the add video button is clicked. This function creates the a panel element. + * @property e + * @type {Object} + */ + open_panel_callback : function(e, url, height, width) { + var panelheight = parseInt(height, 10) + 45; + var panelwidth = parseInt(width, 10) + 23 + 'px'; + + width = width+'px'; + // Apply special width for mobile devices as requested by Kaltura. + if (Y.UA.ipod !== 0 || Y.UA.ipad !== 0 || Y.UA.iphone !== 0 || Y.UA.android !== 0 || Y.UA.mobile !== null) { + panelwidth = '80%'; + width = '100%'; + } + + var iframe = ""; + this.panelbodycontent = iframe; + if (Y.UA.ipod !== 0 || Y.UA.ipad !== 0 || Y.UA.iphone !== 0) { + // This outer div will constrain the iframe from overlapping over its content region on iOS devices. + this.panelbodycontent = "
    "+iframe+"
    "; + } + + // If the panel has not yet been initialized. + if (null === this.panel) { + this.panel = new Y.Panel({ + srcNode : Y.Node.create('
    '), + headerContent : '', + bodyContent : this.panelbodycontent, + width : panelwidth, + height : panelheight+"px", + zIndex : 6, + centered : true, + modal : true, + visible : false, + render : true, + hideOn : [ + { + node : Y.one('input[id=closeltipanel]'), + eventName : 'click' + } + ] + }); + + this.panel.show(); + + // Listen to simulated click event send from local/kaltura/service.php + Y.one('input[id=closeltipanel]').on('click', this.lti_hide_panel_callback, this); + + // // Listen to when the panel is made visible or hidden + this.panel.after('visibleChange', this.lti_panel_visible_change_callback, this); + } else { + this.panel.show(); + } + }, + + /** + * Event handler callback for when a simulated click event is triggered on a specifc element. + */ + lti_hide_panel_callback : function() { + // hide the thumbnail image. + var imagenode = Y.one('img[id=video_thumbnail]'); + imagenode.setStyle('display', 'none'); + // Update the iframe element attributes + var iframenode = Y.one('iframe[id=contentframe]'); + iframenode.setAttribute('width', Y.one('input[id=width]').getAttribute('value')); + iframenode.setAttribute('height', Y.one('input[id=height]').getAttribute('value')); + iframenode.setStyle('display', 'inline'); + + // If the page is a Video presentation or resource execute a function to change the button caption KALDEV-579 + var element = Y.one('input[name=modulename]'); + + if (undefined !== element && ('kalvidres' === this.modulename || 'kalvidpres' === this.modulename)) { + this.lti_panel_change_add_media_button_caption(); + } + }, + + lti_panel_change_add_media_button_caption : function() { + // Need to find a better way of doing this. Change was made for KALDEV-579. + var buttoncaption = M.util.get_string('replace_video', this.modulename); + if (buttoncaption !== Y.one('#'+this.addvidbtnid).getAttribute('value')) { + Y.one('#'+this.addvidbtnid).setAttribute('value', buttoncaption); + } + }, + + /** + * Event handler callback for when the panel is made hidden or visible. + */ + lti_panel_visible_change_callback : function() { + this.panelvisible = this.panel.get('visible'); + + // If panel is visible, re-launch the LIT request so that the user sees the main page. Instead of the last page they visited. If the panel is not visible then + // set the content to an empty string; this prevents videos from the iframe from continuing to play after the panel was closed. + if (true === this.panelvisible) { + this.panel.set('bodyContent', this.panelbodycontent); + } else { + this.panel.set('bodyContent', ''); + } + } +}, +{ + NAME : 'moodle-local_kaltura-ltipanel', + ATTRS : { + addvidbtnid : { + value: '0' + }, + ltilaunchurl : { + value: '0' + }, + height : { + value: 0 + }, + width : { + value: 0 + }, + modulename : { + value: '' + } + } +}); + +/** + * This method calls the base class constructor. The primary difference between LTIPANELMEDIAASSIGNMENT and LTIPANEL is that + * LTIPANELMEDIAASSIGNMENT creates a node and appends it to the body tag of the page. The reason for this is due to an issue with the Moodle + * navbar covering up part of the YUI panel, if the panel markup is appended to a child element within the body tag. + * @method LTIPANELMEDIAASSIGNMENT + */ +var LTIPANELMEDIAASSIGNMENT = function() { + LTIPANELMEDIAASSIGNMENT.superclass.constructor.apply(this, arguments); +}; + +Y.extend(LTIPANELMEDIAASSIGNMENT, Y.Base, { + /** + * Contains the object tag needed to launch an LTI session. + * @property panelbodycontent + * @type {String} + * @default null + */ + panelbodycontent: null, + + /** + * Set to true if panel is visible, otherwise false. + * @property panelvisible + * @type {Boolean} + * @default null + */ + panelvisible: false, + + /** + * The panel object + * @property panel + * @type {Object} + * @default null + */ + panel: null, + + /** + * The panel height. + * @property panelheight + * @type {Integer} + * @default 0 + */ + panelheight: 0, + + /** + * The panel width. + * @property panelwidth + * @type {Integer} + * @default 0 + */ + panelwidth: 0, + + /** + * Init function for the checkboxselection module + * @property params + * @type {Object} + */ + init : function(params) { + // Check to make sure parameters are initialized + if ('0' === params.addvidbtnid || '0' === params.ltilaunchurl || 0 === params.courseid || 0 === params.height || 0 === params.width) { + return; + } + + var addvideobtn = Y.one('#'+params.addvidbtnid); + addvideobtn.on('click', this.open_panel_callback, this, params.ltilaunchurl, params.height, params.width); + }, + + /** + * Event handler callback for when the panel content is changed + * @property e + * @type {Object} + */ + open_panel_callback : function(e, url, height, width) { + this.panelheight = parseInt(height, 10) + 45; + this.panelwidth = parseInt(width, 10) + 23; + + this.panelbodycontent = ""; + + // If the panel has not yet been initialized. + if (null === this.panel) { + this.panel = new Y.Panel({ + srcNode : Y.Node.create('
    '), + headerContent : '', + bodyContent : this.panelbodycontent, + width : this.panelwidth+"px", + height : this.panelheight+"px", + zIndex : 6, + centered : true, + modal : true, + visible : false, + render : true, + hideOn : [ + { + node : Y.one('input[id=closeltipanel]'), + eventName : 'click' + } + ] + }); + + this.panel.show(); + + // Listen to simulated click event send from local/kaltura/service.php + Y.one('input[id=closeltipanel]').on('click', this.lti_hide_panel_callback, this); + + // Listen to when the panel is made visible or hidden + this.panel.after('visibleChange', this.lti_panel_visible_change_callback, this); + } else { + this.panel.show(); + } + }, + + /** + * Event handler callback for when a simulated click event is triggered on a specifc element. + */ + lti_hide_panel_callback : function() { + // Enable submit button + Y.one('input[id=submit_video]').removeAttribute('disabled'); + // hide the thumbnail image. + var imagenode = Y.one('img[id=video_thumbnail]'); + imagenode.setStyle('display', 'none'); + // Update the iframe element attributes + var iframenode = Y.one('iframe[id=contentframe]'); + iframenode.setAttribute('width', Y.one('input[id=width]').getAttribute('value')); + iframenode.setAttribute('height', Y.one('input[id=height]').getAttribute('value')); + iframenode.setStyle('display', 'inline'); + Y.one('#id_add_video').set('value', M.util.get_string('replacevideo', 'kalvidassign')); + }, + + /** + * Event handler callback for when the panel is made hidden or visible. + */ + lti_panel_visible_change_callback : function() { + this.panelvisible = this.panel.get('visible'); + + // If panel is visible, re-launch the LIT request so that the user sees the main page. Instead of the last page they visited. If the panel is not visible then + // set the content to an empty string; this prevents videos from the iframe from continuing to play after the panel was closed. + if (true === this.panelvisible) { + this.panel.set('bodyContent', this.panelbodycontent); + this.panel.set('height', this.panelheight); + this.panel.set('width', this.panelwidth); + this.panel.set('centered', true); + } else { + this.panel.set('bodyContent', ''); + } + } +}, +{ + NAME : 'moodle-local_kaltura-ltipanel', + ATTRS : { + addvidbtnid : { + value: '0' + }, + ltilaunchurl : { + value: '0' + }, + height : { + value: 0 + }, + width : { + value: 0 + } + } +}); + +/** + * This method calls the base class constructor. This module renders a Panel for viewing media from multiple sources. + * @method LTISUBMISSIONREVIEW + */ +var LTISUBMISSIONREVIEW = function() { + LTISUBMISSIONREVIEW.superclass.constructor.apply(this, arguments); +}; + +Y.extend(LTISUBMISSIONREVIEW, Y.Base, { + /** + * An instance of the ltimediaassignment class. + * @property ltimediaassignment + * @type {Object} + * @default null + */ + ltimediaassignment: null, + + + /** + * Init function for the checkboxselection module + * @property params + * @type {Object} + */ + init : function(ltimediaassignment) { + this.ltimediaassignment = ltimediaassignment; + Y.one('form[id=fastgrade]').delegate('click', this.review_submission, 'a[name=submission_source]', this); + }, + + /** + * Callback function for when a user clicks on the review submission link. + * @property e + * @type {Object} + */ + review_submission : function(e) { + e.preventDefault(); + var source, height, width; + // Test if the target is an anchor tag or img tag. + if (e.target.test('a')) { + source = e.target.getAttribute('href'); + height = e.target.ancestor('div[name=media_submission]').get('childNodes').filter('input[name=height]').get('value'); + width = e.target.ancestor('div[name=media_submission]').get('childNodes').filter('input[name=width]').get('value'); + } else { + source = e.target.ancestor('a[name=submission_source]').getAttribute('href'); + height = e.target.ancestor('div[name=media_submission]').get('childNodes').filter('input[name=height]').get('value'); + width = e.target.ancestor('div[name=media_submission]').get('childNodes').filter('input[name=width]').get('value'); + } + + this.ltimediaassignment.open_panel_callback(null, source, height, width); + } +}, +{ + NAME : 'moodle-local_kaltura-ltipanel' +}); + +M.local_kaltura = M.local_kaltura || {}; + +/** + * Entry point for ltipanel module + * @param string params additional parameters. + * @return object the ltipanel object + */ +M.local_kaltura.init = function(params) { + return new LTIPANEL(params); +}; + +/** + * Entry point for ltipanelmediaassignment module + * @param string params additional parameters. + * @return object the ltipanel object + */ +M.local_kaltura.initmediaassignment = function(params) { + return new LTIPANELMEDIAASSIGNMENT(params); +}; + +/** + * Entry point for ltipanelmediaassignment module + * @param string params additional parameters. + * @return object the ltipanel object + */ +M.local_kaltura.initreviewsubmission = function() { + var args = { + addvidbtnid: '0', + ltilaunchurl: '0', + courseid: 0, + height: 0, + width: 0 + }; + var mediaassignment = new LTIPANELMEDIAASSIGNMENT(args); + return new LTISUBMISSIONREVIEW(mediaassignment); +}; diff --git a/local/kaltura/yui/src/ltipanel/meta/ltipanel.json b/local/kaltura/yui/src/ltipanel/meta/ltipanel.json new file mode 100644 index 0000000000000..c6fd71178cfe7 --- /dev/null +++ b/local/kaltura/yui/src/ltipanel/meta/ltipanel.json @@ -0,0 +1,10 @@ +{ + "moodle-local_kaltura-ltipanel": { + "requires": [ + "base", + "node", + "panel", + "node-event-simulate" + ] + } +} diff --git a/local/kaltura/yui/src/ltiservice/build.json b/local/kaltura/yui/src/ltiservice/build.json new file mode 100644 index 0000000000000..a6512cc4eb485 --- /dev/null +++ b/local/kaltura/yui/src/ltiservice/build.json @@ -0,0 +1,10 @@ +{ + "name": "moodle-local_kaltura-ltiservice", + "builds": { + "moodle-local_kaltura-ltiservice": { + "jsfiles": [ + "ltiservice.js" + ] + } + } +} diff --git a/local/kaltura/yui/src/ltiservice/js/ltiservice.js b/local/kaltura/yui/src/ltiservice/js/ltiservice.js new file mode 100644 index 0000000000000..5f017e53ae8d5 --- /dev/null +++ b/local/kaltura/yui/src/ltiservice/js/ltiservice.js @@ -0,0 +1,115 @@ +// This file is part of Moodle - http://moodle.org/ +// +// Moodle is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// Moodle is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with Moodle. If not, see . + +/** + * YUI module for displaying an LTI launch within a YUI panel. + * + * @package local_kaltura + * @author Remote-Learner.net Inc + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + * @copyright (C) 2014 Remote Learner.net Inc http://www.remote-learner.net + */ + + /** + * This method calls the base class constructor + * @method LTISERVICE + */ +var LTISERVICE = function() { + LTISERVICE.superclass.constructor.apply(this, arguments); +}; + +Y.extend(LTISERVICE, Y.Base, { + /** + * Init function for triggering a custom event and setting attributes. Also checks whether optional elements exist in the parent window. + * @property params + * @type {Object} + */ + init : function(params) { + if (window.parent.document.getElementById('video_title')) { + Y.one(window.parent.document.getElementById('video_title')).setAttribute('value', params.title); + } + + if (window.parent.document.getElementById('entry_id')) { + Y.one(window.parent.document.getElementById('entry_id')).setAttribute('value', params.entryid); + } + + if (window.parent.document.getElementById('height')) { + Y.one(window.parent.document.getElementById('height')).setAttribute('value', params.height); + } + + if (window.parent.document.getElementById('width')) { + Y.one(window.parent.document.getElementById('width')).setAttribute('value', params.width); + } + + if (window.parent.document.getElementById('uiconf_id')) { + Y.one(window.parent.document.getElementById('uiconf_id')).setAttribute('value', '1'); + } + + if (window.parent.document.getElementById('widescreen')) { + Y.one(window.parent.document.getElementById('widescreen')).setAttribute('value', '1'); + } + + if (window.parent.document.getElementById('video_preview_frame')) { + Y.one(window.parent.document.getElementById('video_preview_frame')).setAttribute('src', decodeURIComponent(params.iframeurl)); + } else if (window.parent.document.getElementById('contentframe')) { + Y.one(window.parent.document.getElementById('contentframe')).setAttribute('src', decodeURIComponent(params.iframeurl)); + } + + // This element must exist. + Y.one(window.parent.document.getElementById('source')).setAttribute('value', decodeURIComponent(params.iframeurl)); + + if (window.parent.document.getElementById('metadata')) { + Y.one(window.parent.document.getElementById('metadata')).setAttribute('value', params.metadata); + } + + if (window.parent.document.getElementById('closeltipanel')) { + Y.one(window.parent.document.getElementById('closeltipanel')).simulate('click'); + } + } +}, +{ + NAME : 'moodle-local_kaltura-ltiservice', + ATTRS : { + iframeurl : { + value: '' + }, + width : { + value: '' + }, + height : { + value: '' + }, + entryid : { + value: '' + }, + title : { + value: '' + }, + metadata : { + value: '' + } + } + +}); +M.local_kaltura = M.local_kaltura || {}; + +/** + * Entry point for ltiservice module + * @param string params additional parameters. + * @return object the ltiservice object + */ +M.local_kaltura.init = function(params) { + return new LTISERVICE(params); +}; diff --git a/local/kaltura/yui/src/ltiservice/meta/ltiservice.json b/local/kaltura/yui/src/ltiservice/meta/ltiservice.json new file mode 100644 index 0000000000000..0252ffd4bbf59 --- /dev/null +++ b/local/kaltura/yui/src/ltiservice/meta/ltiservice.json @@ -0,0 +1,9 @@ +{ + "moodle-local_kaltura-ltiservice": { + "requires": [ + "base", + "node", + "node-event-simulate" + ] + } +} \ No newline at end of file diff --git a/local/kaltura/yui/src/ltitinymcepanel/build.json b/local/kaltura/yui/src/ltitinymcepanel/build.json new file mode 100644 index 0000000000000..c74304ce7f21e --- /dev/null +++ b/local/kaltura/yui/src/ltitinymcepanel/build.json @@ -0,0 +1,10 @@ +{ + "name": "moodle-local_kaltura-ltitinymcepanel", + "builds": { + "moodle-local_kaltura-ltitinymcepanel": { + "jsfiles": [ + "ltitinymcepanel.js" + ] + } + } +} diff --git a/local/kaltura/yui/src/ltitinymcepanel/js/ltitinymcepanel.js b/local/kaltura/yui/src/ltitinymcepanel/js/ltitinymcepanel.js new file mode 100644 index 0000000000000..d3ce263a58c80 --- /dev/null +++ b/local/kaltura/yui/src/ltitinymcepanel/js/ltitinymcepanel.js @@ -0,0 +1,136 @@ +// This file is part of Moodle - http://moodle.org/ +// +// Moodle is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// Moodle is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with Moodle. If not, see . + +/** + * YUI module for displaying an LTI launch within a YUI panel. + * + * @package local_kaltura + * @author Remote-Learner.net Inc + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + * @copyright (C) 2014 Remote Learner.net Inc http://www.remote-learner.net + */ + + /** + * This method calls the base class constructor + * @method LTITINYMCEPANEL + */ +var LTITINYMCEPANEL = function() { + LTITINYMCEPANEL.superclass.constructor.apply(this, arguments); +}; + +Y.extend(LTITINYMCEPANEL, Y.Base, { + /** + * The context id the editor was launched in. + * @property contextid + * @type {Integer} + * @default null + */ + contextid: 0, + + /** + * Init function for the checkboxselection module + * @property {Object} params Data to help initialize the YUI module. + */ + init : function(params) { + // Check to make sure parameters are initialized. + if ('' === params.insertbtnid || '' === params.ltilaunchurl || '' === params.objecttagheight || '' === params.objecttagid || '' === params.previewiframeid) { + alert('Some parameters were not initialized.'); + return; + } + + // Initialize the the browse when the window is initially rendered. + this.load_lti_content(params.ltilaunchurl, params.objecttagid, params.objecttagheight); + + // Disable the insert button since nothing has been selected yet. + Y.one('#'+params.insertbtnid).set('disabled', true); + + // Listen to simulated click event send from local/kaltura/service.php + Y.one('#closeltipanel').on('click', this.user_selected_video_callback, this, params.insertbtnid, params.objecttagid, params.previewiframeid, params.objecttagheight); + + if (null !== Y.one('#page-footer')) { + Y.one('#page-footer').setStyle('display', 'none'); + } + }, + + /** + * A funciton to load the LTI content. This is called when the YUI module is first initialized. + * @property {String} url LTI launch URL. + * @property {String} iframeid iframe tag id. + * @property {String} iframeheight iframe tag height. + */ + load_lti_content : function(url, iframeid, iframeheight) { + if (0 === this.contextid) { + this.contextid = Y.one('#lti_launch_context_id').get('value'); + } + + var content = ''; + Y.one('#'+iframeid).setContent(content); + }, + + /** + * This function serves as a call back method for when the closeltipanel div has been clicked. It means that the user has + * selected a video for embedding into the TinyMCE edotor. Enabling the insert button, removing the contents LTI launch element and + * adding content to the media preview element. + * @property {Object} e Event object. + * @property {String} insertbtnid Insert button id. + * @property {String} objecttagid Object tag id. + * @property {String} previewiframeid Preview iframe tag id. + * @property {String} height Height of the iframe. + */ + user_selected_video_callback : function(e, insertbtnid, objecttagid, previewiframeid, height) { + Y.one('#'+insertbtnid).setStyle('display', 'inline'); + Y.one('#'+insertbtnid).set('disabled', false); + Y.one('#'+objecttagid).setContent(''); + + var center = Y.Node.create('
    '); + var iframe = Y.Node.create(''); + iframe.setAttribute('width', Y.one('#width').get('value')+'px'); + iframe.setAttribute('height', height+'px'); + iframe.setAttribute('src', Y.one('#source').get('value')); + + center.append(iframe); + Y.one('#'+previewiframeid).append(center); + } +}, +{ + NAME : 'moodle-local_kaltura-ltitinymcepanel', + ATTRS : { + insertbtnid : { + value : '' + }, + ltilaunchurl : { + value : '' + }, + objecttagheight : { + value : '' + }, + objecttagid : { + value : '' + }, + previewiframeid : { + value : '' + } + } +}); +M.local_kaltura = M.local_kaltura || {}; + +/** + * Entry point for ltipanel module + * @param {Object} params Additional parameters. + * @return {Object} the ltipanel object + */ +M.local_kaltura.init = function(params) { + return new LTITINYMCEPANEL(params); +}; diff --git a/local/kaltura/yui/src/ltitinymcepanel/meta/ltitinymcepanel.json b/local/kaltura/yui/src/ltitinymcepanel/meta/ltitinymcepanel.json new file mode 100644 index 0000000000000..4d0cc2d1ded4a --- /dev/null +++ b/local/kaltura/yui/src/ltitinymcepanel/meta/ltitinymcepanel.json @@ -0,0 +1,10 @@ +{ + "moodle-local_kaltura-ltitinymcepanel": { + "requires": [ + "base", + "node", + "panel", + "node-event-simulate" + ] + } +} diff --git a/local/kalturamediagallery/db/access.php b/local/kalturamediagallery/db/access.php new file mode 100644 index 0000000000000..50efff4815640 --- /dev/null +++ b/local/kalturamediagallery/db/access.php @@ -0,0 +1,37 @@ +. + +/** + * Kaltura media gallery capabilities. + * + * @package local_kalturamediagallery + * @author Remote-Learner.net Inc + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + * @copyright (C) 2014 Remote Learner.net Inc http://www.remote-learner.net + */ + +$capabilities = array( + 'local/kalturamediagallery:view' => array( + 'captype' => 'read', + 'contextlevel' => CONTEXT_COURSE, + 'archetypes' => array( + 'student' => CAP_ALLOW, + 'editingteacher' => CAP_ALLOW, + 'teacher' => CAP_ALLOW, + 'manager' => CAP_ALLOW + ) + ), +); \ No newline at end of file diff --git a/local/kalturamediagallery/index.php b/local/kalturamediagallery/index.php new file mode 100644 index 0000000000000..4771fb78168a0 --- /dev/null +++ b/local/kalturamediagallery/index.php @@ -0,0 +1,78 @@ +. + +/** + * Kaltura media gallery main viewing page. + * + * @package local_kalturamediagallery + * @author Remote-Learner.net Inc + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + * @copyright (C) 2014 Remote Learner.net Inc http://www.remote-learner.net + */ + +require_once(dirname(dirname(dirname(__FILE__))).'/config.php'); + +global $USER, $PAGE; + +require_login(); +$courseid = required_param('courseid', PARAM_INT); + +$context = context_course::instance($courseid); +require_capability('local/kalturamediagallery:view', $context); + +$mediagallery = get_string('heading_mediagallery', 'local_kalturamediagallery'); + +$course = get_course($courseid); + +$PAGE->set_context($context); +$PAGE->set_course($course); +$site = get_site(); +$header = format_string($site->shortname).": $mediagallery"; + +$PAGE->navbar->add(get_string('nav_mediagallery', 'local_kalturamediagallery')); + +$PAGE->set_url('/local/kalturamediagallery/index.php', array('courseid' => $courseid)); +$PAGE->set_pagetype('kalturamediagallery-index'); +$PAGE->set_pagelayout('standard'); +$PAGE->set_title($header); +$PAGE->set_heading($header); + +$pageclass = 'kaltura-mediagallery-body'; +$PAGE->add_body_class($pageclass); + +echo $OUTPUT->header(); + +// Request the launch content with an iframe tag. +$attr = array( + 'id' => 'contentframe', + 'height' => '600px', + 'width' => '100%', + 'allowfullscreen' => 'true', + 'webkitallowfullscreen' => 'true', + 'mozallowfullscreen' => 'true', + 'src' => 'lti_launch.php?courseid='.$courseid +); +echo html_writer::tag('iframe', '', $attr); + +// Require a YUI module to make the iframe tag be as large as possible. +$params = array( + 'bodyclass' => $pageclass, + 'lastheight' => null, + 'padding' => 15 +); +$PAGE->requires->yui_module('moodle-local_kaltura-lticontainer', 'M.local_kaltura.init', array($params), null, true); + +echo $OUTPUT->footer(); \ No newline at end of file diff --git a/local/kalturamediagallery/lang/en/local_kalturamediagallery.php b/local/kalturamediagallery/lang/en/local_kalturamediagallery.php new file mode 100644 index 0000000000000..f6a979f53fa31 --- /dev/null +++ b/local/kalturamediagallery/lang/en/local_kalturamediagallery.php @@ -0,0 +1,31 @@ +. + +/** + * Kaltura media gallery language file. + * + * @package local_kalturamediagallery + * @author Remote-Learner.net Inc + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + * @copyright (C) 2014 Remote Learner.net Inc http://www.remote-learner.net + */ + +$string['heading_mediagallery'] = 'Kaltura Media Gallery'; +$string['invalid_launch_parameters'] = 'Invalid launch parameters'; +$string['kalturamediagallery:view'] = 'View Kaltura Media Gallery'; +$string['nav_mediagallery'] = 'Kaltura Media Gallery'; +$string['nav_mediagallery_page'] = 'Kaltura Media Gallery'; +$string['pluginname'] = 'Kaltura Media Gallery'; \ No newline at end of file diff --git a/local/kalturamediagallery/lib.php b/local/kalturamediagallery/lib.php new file mode 100644 index 0000000000000..ad648814f0506 --- /dev/null +++ b/local/kalturamediagallery/lib.php @@ -0,0 +1,72 @@ +. + +/** + * Kaltura media gallery lib script. + * + * @package local_kalturamediagallery + * @author Remote-Learner.net Inc + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + * @copyright (C) 2014 Remote Learner.net Inc http://www.remote-learner.net + */ + +/** + * This function adds Kaltura media gallery link to the navigation block. The code ensures that the Kaltura media gallery link is only displayed in the 'Current courses' + * menu true. In addition it check if the current context is one that is below the course context. + * @param global_navigation $navigation a global_navigation object + * @return void + */ +function local_kalturamediagallery_extends_navigation($navigation) { + global $USER, $PAGE, $DB; + + if (empty($USER->id)) { + return; + } + + // When on the admin-index page, first check if the capability exists. + // This is to cover the edge case on the Plugins check page, where a check for the capability is performed before the capability has been added to the Moodle mdl_capabilities + // table. + if ('admin-index' === $PAGE->pagetype) { + $exists = $DB->record_exists('capabilities', array('name' => 'local/kalturamediagallery:view')); + + if (!$exists) { + return; + } + } + + // Check the current page context. If the context is not of a course or module then we are in another area of Moodle and return void. + $context = context::instance_by_id($PAGE->context->id); + $isvalidcontext = ($context instanceof context_course || $context instanceof context_module) ? true : false; + if (!$isvalidcontext) { + return; + } + + // If the context if a module then get the parent context. + $coursecontext = null; + if ($context instanceof context_module) { + $coursecontext = $context->get_course_context(); + } else { + $coursecontext = $context; + } + + $mycoursesnode = $navigation->find('currentcourse', $navigation::TYPE_ROOTNODE); + + if (empty($mycoursesnode) || !has_capability('local/kalturamediagallery:view', $coursecontext, $USER)) { + return; + } + + $name = get_string('nav_mediagallery', 'local_kalturamediagallery'); + $url = new moodle_url('/local/kalturamediagallery/index.php', array('courseid' => $coursecontext->instanceid)); + $kalmedgalnode = $mycoursesnode->add($name, $url, navigation_node::NODETYPE_LEAF, $name, 'kalcrsgal'); +} \ No newline at end of file diff --git a/local/kalturamediagallery/lti_launch.php b/local/kalturamediagallery/lti_launch.php new file mode 100644 index 0000000000000..ac873e5e48903 --- /dev/null +++ b/local/kalturamediagallery/lti_launch.php @@ -0,0 +1,53 @@ +. + +/** + * Kaltura media gallery LTI launch page. + * + * @package local_kalturamediagallery + * @author Remote-Learner.net Inc + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + * @copyright (C) 2014 Remote Learner.net Inc http://www.remote-learner.net + */ + +require_once(dirname(dirname(dirname(__FILE__))).'/config.php'); +require_once(dirname(dirname(dirname(__FILE__))).'/local/kaltura/locallib.php'); + +global $USER; + +require_login(); +$courseid = required_param('courseid', PARAM_INT); + +$context = context_course::instance($courseid); +require_capability('local/kalturamediagallery:view', $context); +$course = get_course($courseid); + +$launch = array(); +$launch['id'] = 1; +$launch['cmid'] = 0; +$launch['title'] = 'Kaltura media gallery'; +$launch['module'] = KAF_MEDIAGALLERY_MODULE; +$launch['course'] = $course; +$launch['width'] = '300'; +$launch['height'] = '300'; +$launch['custom_publishdata'] = ''; + +if (local_kaltura_validate_mediagallery_required_params($launch)) { + $content = local_kaltura_request_lti_launch($launch); + echo $content; +} else { + echo get_string('invalid_launch_parameters', 'local_kalturamediagallery'); +} \ No newline at end of file diff --git a/local/kalturamediagallery/version.php b/local/kalturamediagallery/version.php new file mode 100644 index 0000000000000..9c42ae7c8da6e --- /dev/null +++ b/local/kalturamediagallery/version.php @@ -0,0 +1,36 @@ +. + +/** + * Kaltura media gallery version file. + * + * @package local_kalturamediagallery + * @author Remote-Learner.net Inc + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + * @copyright (C) 2014 Remote Learner.net Inc http://www.remote-learner.net + */ + +if (!defined('MOODLE_INTERNAL')) { + die('Direct access to this script is forbidden.'); +} + +$plugin->version = 2014013000; +$plugin->component = 'local_kalturamediagallery'; +$plugin->release = 'Kaltura release 4.0.00 (RL: TBD)'; +$plugin->requires = 2013051400; +$plugin->maturity = MATURITY_STABLE; +$plugin->dependencies = array( + 'local_kaltura' => 2014013000 +); diff --git a/local/mymedia/db/access.php b/local/mymedia/db/access.php new file mode 100644 index 0000000000000..93392131941f4 --- /dev/null +++ b/local/mymedia/db/access.php @@ -0,0 +1,34 @@ +. + +/** + * My Media capabilities. + * + * @package local_mymedia + * @author Remote-Learner.net Inc + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + * @copyright (C) 2014 Remote Learner.net Inc http://www.remote-learner.net + */ + +$capabilities = array( + 'local/mymedia:view' => array( + 'captype' => 'read', + 'contextlevel' => CONTEXT_USER, + 'archetypes' => array( + 'user' => CAP_ALLOW + ) + ), +); \ No newline at end of file diff --git a/local/mymedia/lang/en/local_mymedia.php b/local/mymedia/lang/en/local_mymedia.php new file mode 100644 index 0000000000000..4920ca2654615 --- /dev/null +++ b/local/mymedia/lang/en/local_mymedia.php @@ -0,0 +1,30 @@ +. + +/** + * My Media language file. + * + * @package local_mymedia + * @author Remote-Learner.net Inc + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + * @copyright (C) 2014 Remote Learner.net Inc http://www.remote-learner.net + */ + +$string['heading_mymedia'] = 'My Media'; +$string['invalid_launch_parameters'] = 'Invalid launch parameters'; +$string['mymedia:view'] = 'View My Media page'; +$string['nav_mymedia'] = 'My Media'; +$string['pluginname'] = 'My Media'; \ No newline at end of file diff --git a/local/mymedia/lib.php b/local/mymedia/lib.php new file mode 100644 index 0000000000000..cc1e2c5e1eab3 --- /dev/null +++ b/local/mymedia/lib.php @@ -0,0 +1,56 @@ +. + +/** + * Kaltura my media library script + * + * @package local_mymedia + * @author Remote-Learner.net Inc + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + * @copyright (C) 2014 Remote Learner.net Inc http://www.remote-learner.net + */ + +/** + * This function adds my media links to the navigation block + * @param global_navigation $navigation a global_navigation object + * @return void + */ +function local_mymedia_extends_navigation($navigation) { + global $USER, $DB, $PAGE; + + if (empty($USER->id)) { + return; + } + + // When on the admin-index page, first check if the capability exists. + // This is to cover the edge case on the Plugins check page, where a check for the capability is performed before the capability has been added to the Moodle mdl_capabilities + // table. + if ('admin-index' === $PAGE->pagetype) { + $exists = $DB->record_exists('capabilities', array('name' => 'local/mymedia:view')); + + if (!$exists) { + return; + } + } + + $nodehome = $navigation->get('home'); + $context = context_user::instance($USER->id); + + if (empty($nodehome) || !has_capability('local/mymedia:view', $context, $USER)) { + return; + } + + $mymedia = get_string('nav_mymedia', 'local_mymedia'); + $nodemymedia = $nodehome->add($mymedia, new moodle_url('/local/mymedia/mymedia.php'), navigation_node::NODETYPE_LEAF, $mymedia, 'mymedia'); +} \ No newline at end of file diff --git a/local/mymedia/lti_launch.php b/local/mymedia/lti_launch.php new file mode 100644 index 0000000000000..2f8942319b5f9 --- /dev/null +++ b/local/mymedia/lti_launch.php @@ -0,0 +1,51 @@ +. + +/** + * My Media LTI launch page. + * + * @package local_mymedia + * @author Remote-Learner.net Inc + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + * @copyright (C) 2014 Remote Learner.net Inc http://www.remote-learner.net + */ + +require_once(dirname(dirname(dirname(__FILE__))).'/config.php'); +require_once(dirname(dirname(dirname(__FILE__))).'/local/kaltura/locallib.php'); + +global $USER; + +require_login(); + +$context = context_user::instance($USER->id); +require_capability('local/mymedia:view', $context); + +$launch = array(); +$launch['id'] = 1; +$launch['cmid'] = 0; +$launch['title'] = 'My Media'; +$launch['module'] = KAF_MYMEDIA_MODULE; +$launch['course'] = $PAGE->course; +$launch['width'] = '300'; +$launch['height'] = '300'; +$launch['custom_publishdata'] = ''; + +if (local_kaltura_validate_mymedia_required_params($launch)) { + $content = local_kaltura_request_lti_launch($launch); + echo $content; +} else { + echo get_string('invalid_launch_parameters', 'local_mymedia'); +} \ No newline at end of file diff --git a/local/mymedia/mymedia.php b/local/mymedia/mymedia.php new file mode 100644 index 0000000000000..4cf43fde8f437 --- /dev/null +++ b/local/mymedia/mymedia.php @@ -0,0 +1,71 @@ +. + +/** + * My Media main viewing page. + * + * @package local_mymedia + * @author Remote-Learner.net Inc + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + * @copyright (C) 2014 Remote Learner.net Inc http://www.remote-learner.net + */ + +require_once(dirname(dirname(dirname(__FILE__))).'/config.php'); + +global $USER; + +require_login(); + +$context = context_user::instance($USER->id); +require_capability('local/mymedia:view', $context); + +$mymedia = get_string('heading_mymedia', 'local_mymedia'); +$PAGE->set_context(context_system::instance()); +$site = get_site(); +$header = format_string($site->shortname).": $mymedia"; + +$PAGE->set_url('/local/mymedia/mymedia.php'); +$PAGE->set_pagetype('mymedia-index'); +$PAGE->set_pagelayout('standard'); +$PAGE->set_title($header); +$PAGE->set_heading($header); + +$pageclass = 'kaltura-mediagallery-body'; +$PAGE->add_body_class($pageclass); + +echo $OUTPUT->header(); + +// Request the launch content with an iframe tag. +$attr = array( + 'id' => 'contentframe', + 'height' => '600px', + 'width' => '100%', + 'allowfullscreen' => 'true', + 'webkitallowfullscreen' => 'true', + 'mozallowfullscreen' => 'true', + 'src' => 'lti_launch.php' +); +echo html_writer::tag('iframe', '', $attr); + +// Require a YUI module to make the iframe tag be as large as possible. +$params = array( + 'bodyclass' => $pageclass, + 'lastheight' => null, + 'padding' => 15 +); +$PAGE->requires->yui_module('moodle-local_kaltura-lticontainer', 'M.local_kaltura.init', array($params), null, true); + +echo $OUTPUT->footer(); diff --git a/local/mymedia/renderer.php b/local/mymedia/renderer.php new file mode 100644 index 0000000000000..77bd5ee4fa547 --- /dev/null +++ b/local/mymedia/renderer.php @@ -0,0 +1,924 @@ +. + +/** + * My Media display library + * + * @package local_mymedia + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + */ + + +if (!defined('MOODLE_INTERNAL')) { + die('Direct access to this script is forbidden.'); /// It must be included from a Moodle page +} + +require_once(dirname(dirname(dirname(__FILE__))) . '/lib/tablelib.php'); + +class local_mymedia_renderer extends plugin_renderer_base { + + /** + * This function outputs a table layout for display videos + * + * @param array - array of Kaltura video entry objects + * + * @return HTML markup + */ + public function create_vidoes_table($video_list = array()) { + global $OUTPUT; + + $output = ''; + $max_columns = 3; + + $table = new html_table(); + + $table->id = 'mymedia_vidoes'; + $table->size = array('25%', '25%', '25%'); + $table->colclasses = array('mymedia column 1', 'mymedia column 2', 'mymedia column 3'); + + $table->align = array('center', 'center', 'center'); + $table->data = array(); + + $i = 0; + $x = 0; + $data = array(); + + foreach ($video_list as $key => $video) { + + if (KalturaEntryStatus::READY == $video->status) { + $data[] = $this->create_video_entry_markup($video); + } else { + $data[] = $this->create_video_entry_markup($video, false); + } + + + // When the max number of columns is reached, add the data to the table object + if ($max_columns == count($data)) { + + $table->data[] = $data; + $table->rowclasses[] = 'row_' . $i; + $data = array(); + $i++; + + } else if ($x == count($video_list) -1 ) { + + $left_over_cells = $max_columns - count($data); + + // Add some extra cells to make the table symetrical + if ($left_over_cells) { + for ($t = 1; $t <= $left_over_cells; $t++) { + $data[] = ''; + } + } + $table->data[] = $data; + $table->rowclasses[] = 'row_' . $i; + + } + + $x++; + } + + $attr = array('style' => 'overflow:auto;overflow-y:hidden'); + $output .= html_writer::start_tag('center'); + $output .= html_writer::start_tag('div', $attr); + $output .= html_writer::table($table); + $output .= html_writer::end_tag('div'); + $output .= html_writer::end_tag('center'); + + echo $output; + } + + /** + * This function creates HTML markup used to sort the video listing. + * + * @return HTML Markup for sorting pulldown. + */ + public function create_sort_option() { + global $CFG, $SESSION; + + $recent = null; + $old = null; + $nameasc = null; + $namedesc = null; + $sorturl = $CFG->wwwroot.'/local/mymedia/mymedia.php?sort='; + + if (isset($SESSION->mymediasort) && !empty($SESSION->mymediasort)) { + $sort = $SESSION->mymediasort; + if ($sort == 'recent') { + $recent = "selected"; + } else if ($sort == 'old') { + $old = "selected"; + } else if ($sort == 'name_asc') { + $nameasc = "selected"; + } else if ($sort == 'name_desc') { + $namedesc = "selected"; + } else { + $recent = "selected"; + } + } else { + $recent = "selected"; + } + + $sort = html_writer::tag('label', get_string('sortby', 'local_mymedia').':'); + $sort .= html_writer::start_tag('select', array('id' => 'mymediasort')); + $sort .= html_writer::tag('option', get_string('mostrecent', 'local_mymedia'), array('value' => $sorturl.'recent', 'selected' => $recent)); + $sort .= html_writer::tag('option', get_string('oldest', 'local_mymedia'), array('value' => $sorturl.'old', 'selected' => $old)); + $sort .= html_writer::tag('option', get_string('medianameasc', 'local_mymedia'), array('value' => $sorturl.'name_asc', 'selected' => $nameasc)); + $sort .= html_writer::tag('option', get_string('medianamedesc', 'local_mymedia'), array('value' => $sorturl.'name_desc', 'selected' => $namedesc)); + $sort .= html_writer::end_tag('select'); + + return $sort; + } + + public function create_options_table_upper($page, $partner_id = '', $login_session = '') { + global $USER; + + $output = ''; + + $attr = array('border' => 0, 'width' => '100%', + 'class' => 'mymedia upper paging upload search'); + $output .= html_writer::start_tag('table', $attr); + + $attr = array('class' => 'mymedia upper row_0 upload search'); + $output .= html_writer::start_tag('tr', $attr); + + $attr = array('colspan' => 3, 'align' => 'right', + 'class' => 'mymedia upper col_0'); + $output .= html_writer::start_tag('td', $attr); + + $upload = ''; + $simple_search = ''; + $screenrec = ''; + $enable_ksr = get_config(KALTURA_PLUGIN_NAME, 'enable_screen_recorder'); + + $context = get_context_instance(CONTEXT_USER, $USER->id); + + if (has_capability('local/mymedia:upload', $context, $USER)) { + $upload = $this->create_upload_markup(); + } + + if ($enable_ksr && has_capability('local/mymedia:screenrecorder', $context, $USER)) { + $screenrec = $this->create_screenrecorder_markup($partner_id, $login_session); + } + + if (has_capability('local/mymedia:search', $context, $USER)) { + $simple_search = $this->create_search_markup(); + } + + $output .= $upload . '  ' . $screenrec . $simple_search; + + $output .= html_writer::end_tag('td'); + + $output .= html_writer::end_tag('tr'); + + $attr = array('class' => 'mymedia upper row_1 paging'); + $output .= html_writer::start_tag('tr', $attr); + + $attr = array('colspan' => 3, 'align' => 'center', + 'class' => 'mymedia upper col_0'); + $output .= html_writer::start_tag('td', $attr); + + if (!empty($page)) { + $output .= $this->create_sort_option(); + $output .= $page; + } + + $output .= html_writer::end_tag('td'); + + $output .= html_writer::end_tag('tr'); + + $output .= html_writer::end_tag('table'); + + return $output; + } + + public function create_options_table_lower($page) { + global $USER; + + $output = ''; + + $attr = array('border' => 0, 'width' => '100%'); + $output .= html_writer::start_tag('table', $attr); + + $output .= html_writer::start_tag('tr'); + + $attr = array('colspan' => 3, 'align' => 'center'); + $output .= html_writer::start_tag('td', $attr); + + $output .= $page; + + $output .= html_writer::end_tag('td'); + + $output .= html_writer::end_tag('tr'); + + $output .= html_writer::end_tag('table'); + + return $output; + } + + /** + * This function creates HTML markup used to display the video name + * + * @param string - name of video + * @return HTML markup + */ + public function create_video_name_markup($name) { + + $output = ''; + $attr = array('class' => 'mymedia video name', + 'title' => $name); + + $output .= html_writer::start_tag('div', $attr); + $output .= html_writer::tag('label', $name); + $output .= html_writer::end_tag('div'); + + return $output; + } + + /** + * This function creates HTML markup used to display the video thumbnail + * + * @param string - thumbnail URL + * @param string - alternate text + * + * @param HTML markup + */ + public function create_video_thumbnail_markup($url, $alt) { + + $output = ''; + $attr = array('class' => 'mymedia video thumbnail'); + + $output .= html_writer::start_tag('div', $attr); + + $attr = array('src' => $url . '/width/150/height/100/type/3', + 'alt' => $alt, + 'height' => 100, + 'width' => 150, + 'title' => $alt); + + $output .= html_writer::empty_tag('img', $attr); + + $output .= html_writer::end_tag('div'); + + return $output; + } + + public function create_video_created_markup($date) { + + $output = ''; + $attr = array('class' => 'mymedia video created', + 'title' => userdate($date)); + + $output .= html_writer::start_tag('div', $attr); + $output .= html_writer::tag('label', userdate($date)); + $output .= html_writer::end_tag('div'); + + return $output; + } + + public function create_video_preview_link_markup() { + + $output = ''; + + $attr = array('class' => 'mymedia video preview container'); + $output .= html_writer::start_tag('span', $attr); + + $attr = array('class' => 'mymedia video preview', + 'href' => '#', + 'title' => get_string('preview_link', 'local_mymedia') + ); + + $output .= html_writer::start_tag('a', $attr); + $output .= get_string('preview_link', 'local_mymedia'); + $output .= html_writer::end_tag('a'); + + $output .= html_writer::end_tag('span'); + + return $output; + } + + public function create_video_share_link_markup() { + + $output = ''; + + $attr = array('class' => 'mymedia video share container'); + $output .= html_writer::start_tag('span', $attr); + + $attr = array('class' => 'mymedia video share', + 'href' => '#', + 'title' => get_string('share_link', 'local_mymedia') + ); + + $output .= html_writer::start_tag('a', $attr); + $output .= get_string('share_link', 'local_mymedia'); + $output .= html_writer::end_tag('a'); + + $output .= html_writer::end_tag('span'); + + return $output; + } + + public function create_video_edit_link_markup() { + + $output = ''; + + $attr = array('class' => 'mymedia video edit container'); + $output .= html_writer::start_tag('span', $attr); + + $attr = array('class' => 'mymedia video edit', + 'href' => '#', + 'title' => get_string('edit_link', 'local_mymedia') + ); + + $output .= html_writer::start_tag('a', $attr); + $output .= get_string('edit_link', 'local_mymedia'); + $output .= html_writer::end_tag('a'); + + $output .= html_writer::end_tag('span'); + + return $output; + } + + public function create_video_clip_link_markup() { + + $output = ''; + + $attr = array('class' => 'mymedia video clip container'); + $output .= html_writer::start_tag('span', $attr); + + $attr = array('class' => 'mymedia video clip', + 'href' => '#', + ); + + $output .= html_writer::start_tag('a', $attr); + $output .= get_string('clip_link', 'local_mymedia'); + $output .= html_writer::end_tag('a'); + + $output .= html_writer::end_tag('span'); + + return $output; + } + + public function create_video_delete_link_markup($entry) { + + global $CFG; + + $output = ''; + + $attr = array('class' => 'mymedia video delete container'); + $output .= html_writer::start_tag('span', $attr); + + $attr = array('class' => 'mymedia video delete', + 'href' => new moodle_url($CFG->wwwroot . '/local/mymedia/delete_video.php', array('entry_id' => $entry->id)) + ); + + $output .= html_writer::start_tag('a', $attr); + $output .= get_string('delete_link', 'local_mymedia'); + $output .= html_writer::end_tag('a'); + + $output .= html_writer::end_tag('span'); + + return $output; + } + + /** + * This function creates HTML markup for a video entry + * + * @param obj - Kaltura video object + */ + public function create_video_entry_markup($entry, $entry_ready = true) { + + global $USER; + + $output = ''; + + $attr = array('class' => 'mymedia video entry', + 'id' => $entry->id); + + $output .= html_writer::start_tag('div', $attr); + + if ($entry_ready) { + + $output .= $this->create_video_name_markup($entry->name); + + $output .= $this->create_video_thumbnail_markup($entry->thumbnailUrl, + $entry->name); + } else { + + $output .= $this->create_video_name_markup($entry->name . ' (' . + get_string('converting', 'local_mymedia') . ')'); + + $output .= $this->create_video_thumbnail_markup($entry->thumbnailUrl, + $entry->name); + } + + + $output .= $this->create_video_created_markup($entry->createdAt); + + $attr = array('class' => 'mymedia video action bar', + 'id' => $entry->id . '_action'); + + $output .= html_writer::start_tag('div', $attr); + + $context = context_user::instance($USER->id); + + $output .= $this->create_video_preview_link_markup(); + $output .= '  '; + + if (has_capability('local/mymedia:editmetadata', $context, $USER)) { + $output .= $this->create_video_edit_link_markup(); + $output .= '  '; + } + + if (local_mymedia_check_capability('local/mymedia:sharesite') || local_mymedia_check_capability('local/mymedia:sharecourse')) { + $output .= $this->create_video_share_link_markup(); + } + +/* + if (has_capability('local/mymedia:delete', $context, $USER)) { + $output .= $this->create_video_delete_link_markup($entry); + } +*/ + $output .= html_writer::end_tag('div'); + + $output .= html_writer::end_tag('div'); + + // Add entry to cache + $entries = new KalturaStaticEntries(); + KalturaStaticEntries::addEntryObject($entry); + return $output; + + } + + /** + * Displays the YUI panel markup used to display embedded video markup + * + * @return string - HTML markup + */ + public function video_details_markup($courses) { + $output = ''; + + $attr = array('id' => 'id_video_details', + 'class' => 'video_details'); + $output .= html_writer::start_tag('div', $attr); + + $attr = array('class' => 'hd'); + $output .= html_writer::tag('div', get_string('details', 'local_mymedia'), $attr); + + $attr = array('class' => 'bd'); + $output .= html_writer::tag('div', $this->video_details_tabs_markup($courses), $attr); + + + $attr = array('id' => 'id_video_details_save', + 'type' => 'submit', + 'value' => get_string('save', 'local_mymedia')); + + $button = html_writer::empty_tag('input', $attr); + + $attr = array('class' => 'ft'); + $output .= html_writer::tag('div', "
    $button
    ", $attr); + + $output .= html_writer::end_tag('div'); + + return $output; + + } + + /** + * This function returns YUI TabView HTML markup + * + * @param none + * @return string - HTML markup + */ + public function video_details_tabs_markup($courses) { + + $output = ''; + + $attr = array('id' => 'id_video_details_tab'); + + $output .= html_writer::start_tag('div', $attr); + + $output .= html_writer::start_tag('ul'); + + $attr = array('href' => '#preview', + 'title' => get_string('tab_preview', 'local_mymedia')); + $element = html_writer::tag('a', get_string('tab_preview', 'local_mymedia'), $attr); + $output .= html_writer::tag('li', $element); + + + $attr = array('href' => '#metadata', + 'title' => get_string('tab_metadata', 'local_mymedia')); + $element = html_writer::tag('a', get_string('tab_metadata', 'local_mymedia'), $attr); + $output .= html_writer::tag('li', $element); + + $attr = array('href' => '#share', + 'title' => get_string('tab_share', 'local_mymedia')); + $element = html_writer::tag('a', get_string('tab_share', 'local_mymedia'), $attr); + $output .= html_writer::tag('li', $element); + + $output .= html_writer::end_tag('ul'); + + $output .= html_writer::start_tag('div'); + + $attr = array('id' => 'preview'); + $output .= html_writer::tag('div', '', $attr); + + $attr = array('id' => 'metadata'); + $output .= html_writer::tag('div', $this->video_metadata_form(), $attr); + + $attr = array('id' => 'share'); + $output .= html_writer::tag('div', $this->enrolled_course_share_markup($courses), $attr); + + $output .= html_writer::end_tag('div'); + + $output .= html_writer::end_tag('div'); + + return $output; + } + + /** + * This function outputs the video edit metadata elements + * + * @param none + * @return string - HTML markup + */ + public function video_metadata_form() { + $output = ''; + + + $attr = array('id' => 'mymedia_video_metadata_table', + 'class' => 'mymedia video metadata_table', + 'border' => 0); + + $output .= html_writer::start_tag('table', $attr); + + $output .= html_writer::start_tag('tr'); + + $output .= html_writer::start_tag('td'); + + $output .= html_writer::tag('label', get_string('metadata_video_name', 'local_mymedia')); + + $output .= html_writer::end_tag('td'); + + // Add video name text field + $attr = array('type' => 'text', + 'size' => 35, + 'maxlength' => 100, + 'id' => 'metadata_video_name', + 'name' => 'video_name', + 'class' => 'mymedia video name metadata', + 'title' => get_string('metadata_video_name', 'local_mymedia')); + + $output .= html_writer::start_tag('td'); + + $output .= html_writer::empty_tag('input', $attr); + + $output .= html_writer::end_tag('td'); + + $output .= html_writer::end_tag('tr'); + $output .= html_writer::start_tag('tr'); + + $output .= html_writer::start_tag('td'); + + $output .= html_writer::tag('label', get_string('metadata_video_tags', 'local_mymedia')); + + $output .= html_writer::end_tag('td'); + + // Add video tags text field + $attr = array('type' => 'text', + 'size' => 35, + 'maxlength' => 100, + 'id' => 'metadata_video_tags', + 'name' => 'video_tags', + 'class' => 'mymedia video tags metadata', + 'title' => get_string('metadata_video_tags', 'local_mymedia')); + + $output .= html_writer::start_tag('td'); + + $output .= html_writer::empty_tag('input', $attr); + + $output .= html_writer::end_tag('td'); + + $output .= html_writer::end_tag('tr'); + $output .= html_writer::start_tag('tr'); + + $output .= html_writer::start_tag('td'); + + $output .= html_writer::tag('label', get_string('metadata_video_desc', 'local_mymedia')); + + $output .= html_writer::end_tag('td'); + + // Add description text area + $attr = array('rows' => '7', + 'cols' => '35', + 'id' => 'metadata_video_desc', + 'name' => 'video_desc', + 'class' => 'mymedia video desc metadata', + 'title' => get_string('metadata_video_desc', 'local_mymedia')); + + $output .= html_writer::start_tag('td'); + + $output .= html_writer::tag('textarea', '', $attr); + + // Add hidden element + $attr = array('type' => 'hidden', + 'id' => 'metadata_entry_id', + 'name' => 'metadata_entry_id'); + + $output .= html_writer::empty_tag('input', $attr); + + $output .= html_writer::end_tag('td'); + + + $output .= html_writer::end_tag('tr'); + + $output .= html_writer::end_tag('table'); + + return $output; + + } + + /** + * This function prints a global share checkbox and a list of courses as + * checkboxes + * + * @param array - array of courses (minimum id and fullname fields) + */ + public function enrolled_course_share_markup($courses) { + + // Print beginning of div container + $attr = array('id' => 'mymedia_course_list', + 'class' => 'mymedia course list checkboxes', + ); + + $output = html_writer::start_tag('div', $attr); + + // Print site share checkbox + $attr = array('type' => 'checkbox', + 'name' => 'site_share', + 'class' => 'mymedia course checkbox site_share', + 'id' => 'site_share', + 'value' => '1', + 'title' => get_string('site_share', 'local_mymedia')); + + $output .= html_writer::empty_tag('input', $attr); + + $output .= ' ' . get_string('site_share', 'local_mymedia') . '

    '; + + + // Print check all checkbox + if (!empty($courses)) { + $attr = array('type' => 'checkbox', + 'name' => 'check_all_courses', + 'class' => 'mymedia course checkbox checkall', + 'id' => 'check_all', + 'value' => '0', + 'title' => get_string('check_all', 'local_mymedia')); + + $output .= html_writer::empty_tag('input', $attr); + + $output .= ' ' . get_string('check_all', 'local_mymedia') . '
    '; + } + + // Print beginning of table + $attr = array('border' => 0, + 'class' => 'mymedia course checkbox table', + 'id' => 'mymedia_courses_table'); + + $output .= html_writer::start_tag('table', $attr); + + + // Print courses and table cols/rows + $attr = array('type' => 'checkbox', + 'name' => 'enrolled_courses', + 'class' => 'mymedia course chexkbox'); + + $row_attr = array('class' => 'mymedia course checkbox table row'); + $col_attr = array('class' => 'mymedia course checkbox table col checkbox'); + $col2_attr = array('class' => 'mymedia course checkbox table col name'); + foreach ($courses as $course) { + + $checkbox_name = $course->fullname; + $attr['value'] = $course->id; + $attr['title'] = $checkbox_name; + + $checkbox = html_writer::empty_tag('input', $attr); + + $output .= html_writer::start_tag('tr', $row_attr); + + $output .= html_writer::tag('td', $checkbox, $col_attr); + + $output .= html_writer::tag('td', $checkbox_name, $col2_attr); + + $output .= html_writer::end_tag('tr'); + } + + $output .= html_writer::end_tag('table'); + + $output .= html_writer::end_tag('div'); + + return $output; + + } + + public function create_simple_dialog_markup() { + + $attr = array('id' => 'mymedia_simple_dialog'); + $output = html_writer::start_tag('div'); + + $attr = array('class' => 'hd'); + $output .= html_writer::tag('div', '', $attr); + + $attr = array('class' => 'bd'); + $output .= html_writer::tag('div', '', $attr); + + $output .= html_writer::end_tag('div'); + + // tabindex -1 is required in order for the focus event to be capture + // amongst all browsers + $attr = array('id' => 'notification', + 'class' => 'mymedia notification', + 'tabindex' => '-1'); + $output .= html_writer::tag('div', '', $attr); + + return $output; + } + + public function create_kcw_panel_markup() { + + $output = ''; + + $attr = array('id' => 'kcw_panel'); + $output .= html_writer::start_tag('div', $attr); + + $attr = array('class' => 'hd'); + $output .= html_writer::tag('div', '', $attr); + + $attr = array('class' => 'bd'); + $output .= html_writer::tag('div', '', $attr); + + $output .= html_writer::end_tag('div'); + + return $output; + } + + public function create_search_markup() { + global $SESSION; + + $attr = array('id' => 'simple_search_container', + 'class' => 'mymedia simple search container'); + + $output = html_writer::start_tag('span', $attr); + + $attr = array('method' => 'post', + 'action' => new moodle_url('/local/mymedia/mymedia.php'), + 'class' => 'mymedia search form'); + + $output .= html_writer::start_tag('form', $attr); + + $default_value = (isset($SESSION->mymedia) && !empty($SESSION->mymedia)) ? $SESSION->mymedia : ''; + $attr = array('type' => 'text', + 'id' => 'simple_search', + 'class' => 'mymedia simple search', + 'name' => 'simple_search_name', + 'value' => $default_value, + 'title' => get_string('search_text_tooltip', 'local_mymedia')); + + $output .= html_writer::empty_tag('input', $attr); + + $attr = array('type' => 'hidden', + 'id' => 'sesskey_id', + 'name' => 'sesskey', + 'value' => sesskey()); + + $output .= html_writer::empty_tag('input', $attr); + + $output .= '  '; + + $attr = array('type' => 'submit', + 'id' => 'simple_search_btn', + 'name' => 'simple_search_btn_name', + 'value' => get_string('search', 'local_mymedia'), + 'class' => 'mymedia simple search button', + 'title' => get_string('search', 'local_mymedia')); + + $output .= html_writer::empty_tag('input', $attr); + + $attr = array('type' => 'submit', + 'id' => 'clear_simple_search_btn', + 'name' => 'clear_simple_search_btn_name', + 'value' => get_string('search_clear', 'local_mymedia'), + 'class' => 'mymedia simple search button clear', + 'title' => get_string('search_clear', 'local_mymedia')); + + $output .= html_writer::empty_tag('input', $attr); + + $output .= html_writer::end_tag('form'); + + $output .= html_writer::end_tag('span'); + + return $output; + } + + public function create_upload_markup() { + + $attr = array('id' => 'upload_btn_container', + 'class' => 'mymedia upload button container'); + + $output = html_writer::start_tag('span', $attr); + + $attr = array('id' => 'upload_btn', + 'class' => 'mymedia upload button', + 'value' => get_string('upload', 'local_mymedia'), + 'type' => 'button', + 'title' => get_string('upload', 'local_mymedia')); + + $output .= html_writer::empty_tag('input', $attr); + + $output .= html_writer::end_tag('span'); + + return $output; + + } + + public function create_loading_screen_markup() { + + $attr = array('id' => 'wait'); + $output = html_writer::start_tag('div', $attr); + + $attr = array('class' => 'hd'); + $output .= html_writer::tag('div', '', $attr); + + $attr = array('class' => 'bd'); + + $output .= html_writer::tag('div', '', $attr); + + $output .= html_writer::end_tag('div'); + + return $output; + } + + /** + * Generate the screen recorder button markup. + * + * @param int $partner_id The Kaltura partner ID + * @param string $login_session The Kaltura session + * @return string HTML Markup for screen recorder button + */ + public function create_screenrecorder_markup($partner_id, $login_session) { + + $attr = array('id' => 'screenrecorder_btn_container', + 'class' => 'mymedia screenrecorder button container'); + + $output = html_writer::start_tag('span', $attr); + + $attr = array('id' => 'scr_btn', + 'class' => 'mymedia screenrecorder button', + 'value' => get_string('screenrecorder', 'local_mymedia'), + 'type' => 'button', + 'title' => get_string('screenrecorder', 'local_mymedia'), + 'onclick' => "document.getElementById('progress_bar_container').style.visibility = 'visible';". + "document.getElementById('slider_border').style.borderStyle = 'none';". + "document.getElementById('loading_text').innerHTML = '".get_string('checkingforjava', 'local_mymedia')."';". + "kalturaScreenRecord.setDetectResultErrorMessageElementId('loading_text');". + "kalturaScreenRecord.setDetectTextJavaDisabled('".get_string('javanotenabled', 'local_mymedia')."');". + "kalturaScreenRecord.setDetectTextmacLionNeedsInstall('".get_string('javanotenabled', 'local_mymedia')."');". + "kalturaScreenRecord.setDetectTextjavaNotDetected('".get_string('javanotenabled', 'local_mymedia')."');". + "kalturaScreenRecord.startCallBack.detection_in_progress = true;". + "kalturaScreenRecord.startCallBack.detection_process = setTimeout('kalturaScreenRecord.clearDetectionFlagAndDisplayError()', 30000);". + "kalturaScreenRecord.startKsr('{$partner_id}', '{$login_session}', 'true');" + ); + + $output .= html_writer::empty_tag('input', $attr); + + $output .= html_writer::end_tag('span'); + + // Add progress bar + $attr = array('id' => 'progress_bar'); + $progress_bar = html_writer::tag('span', '', $attr); + + $attr = array('id' => 'slider_border'); + $slider_border = html_writer::tag('div', $progress_bar, $attr); + + $attr = array('id' => 'loading_text'); + $loading_text = html_writer::tag('div', get_string('checkingforjava', 'local_mymedia'), $attr); + + $attr = array('id' => 'progress_bar_container'); + $output = $output . html_writer::tag('span', $slider_border . $loading_text, $attr); + + return $output; + + } +} diff --git a/local/mymedia/version.php b/local/mymedia/version.php new file mode 100644 index 0000000000000..8a4c755ae05d2 --- /dev/null +++ b/local/mymedia/version.php @@ -0,0 +1,35 @@ +. + +/** + * My Media version file. + * + * @package local_mymedia + * @author Remote-Learner.net Inc + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + * @copyright (C) 2014 Remote Learner.net Inc http://www.remote-learner.net + */ + +if (!defined('MOODLE_INTERNAL')) { + die('Direct access to this script is forbidden.'); +} + +$plugin->version = 2014023000; +$plugin->component = 'local_mymedia'; +$plugin->release = 'Kaltura release 4.0.00 (RL: TBD)'; +$plugin->requires = 2013111801; +$plugin->maturity = MATURITY_STABLE; +$plugin->dependencies = array( + 'local_kaltura' => 2014013000 +); \ No newline at end of file diff --git a/mod/kalvidassign/backup/moodle2/backup_kalvidassign_activity_task.class.php b/mod/kalvidassign/backup/moodle2/backup_kalvidassign_activity_task.class.php new file mode 100644 index 0000000000000..f2b8e7517b095 --- /dev/null +++ b/mod/kalvidassign/backup/moodle2/backup_kalvidassign_activity_task.class.php @@ -0,0 +1,67 @@ +. + +/** + * Kaltura video assignment backup activity task class. + * + * @package mod_kalvidassign + * @author Remote-Learner.net Inc + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + * @copyright (C) 2014 Remote Learner.net Inc http://www.remote-learner.net + */ + +require_once($CFG->dirroot.'/mod/kalvidassign/backup/moodle2/backup_kalvidassign_stepslib.php'); +require_once($CFG->dirroot.'/mod/kalvidassign/backup/moodle2/backup_kalvidassign_settingslib.php'); + +/** + * kalvidassign backup task that provides all the settings and steps to perform one + * complete backup of the activity + */ +class backup_kalvidassign_activity_task extends backup_activity_task { + + /** + * Define (add) particular settings this activity can have. + */ + protected function define_my_settings() { + // No particular settings for this activity. + } + + /** + * Define (add) particular steps this activity can have. + */ + protected function define_my_steps() { + // Choice only has one structure step. + $this->add_step(new backup_kalvidassign_activity_structure_step('kalvidassign_structure', 'kalvidassign.xml')); + } + + /** + * Code the transformations to perform in the activity in + * order to get transportable (encoded) links. + */ + static public function encode_content_links($content) { + global $CFG; + + $base = preg_quote($CFG->wwwroot, '/'); + + // Link to the list of kalvidassigns. + $search="/(".$base."\/mod\/kalvidassign\/index.php\?id\=)([0-9]+)/"; + $content= preg_replace($search, '$@KALVIDASSIGNINDEX*$2@$', $content); + + // Link to kalvidassign view by moduleid. + $search="/(".$base."\/mod\/kalvidassign\/view.php\?id\=)([0-9]+)/"; + $content= preg_replace($search, '$@KALVIDASSIGNVIEWBYID*$2@$', $content); + + return $content; + } +} \ No newline at end of file diff --git a/mod/kalvidassign/backup/moodle2/backup_kalvidassign_settingslib.php b/mod/kalvidassign/backup/moodle2/backup_kalvidassign_settingslib.php new file mode 100644 index 0000000000000..6bf1022679e88 --- /dev/null +++ b/mod/kalvidassign/backup/moodle2/backup_kalvidassign_settingslib.php @@ -0,0 +1,26 @@ +. + +/** + * Kaltura backup settingslib script. + * + * @package mod_kalvidassign + * @author Remote-Learner.net Inc + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + * @copyright (C) 2014 Remote Learner.net Inc http://www.remote-learner.net + */ + + // This activity has no particular settings but the inherited from the generic + // backup_activity_task so here there isn't any class definition, like the ones + // existing in /backup/moodle2/backup_settingslib.php (activities section) \ No newline at end of file diff --git a/mod/kalvidassign/backup/moodle2/backup_kalvidassign_stepslib.php b/mod/kalvidassign/backup/moodle2/backup_kalvidassign_stepslib.php new file mode 100644 index 0000000000000..91561e26a05c8 --- /dev/null +++ b/mod/kalvidassign/backup/moodle2/backup_kalvidassign_stepslib.php @@ -0,0 +1,99 @@ +. + +/** + * Kaltura video assignment backup stepslib script. + * + * @package mod_kalvidassign + * @author Remote-Learner.net Inc + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + * @copyright (C) 2014 Remote Learner.net Inc http://www.remote-learner.net + */ + +/** + * Define all the backup steps that will be used by the backup_kalvidassign_activity_task + */ + +/** + * Define the complete kalvidassign structure for backup, with file and id annotations + */ +class backup_kalvidassign_activity_structure_step extends backup_activity_structure_step { + + /** + * This function defines the structure used to backup the activity. + * @return backup_nested_element The $activitystructure wrapped by the common 'activity' element. + */ + protected function define_structure() { + + // To know if we are including userinfo. + $userinfo = $this->get_setting_value('userinfo'); + + // Define each element separated. + $columns = array( + 'course', + 'name', + 'intro', + 'introformat', + 'timeavailable', + 'timedue', + 'preventlate', + 'resubmit', + 'emailteachers', + 'grade', + 'timecreated', + 'timemodified' + ); + $kalvidassign = new backup_nested_element('kalvidassign', array('id'), $columns); + + $issues = new backup_nested_element('submissions'); + + $columns = array( + 'userid', + 'entry_id', + 'source', + 'width', + 'height', + 'grade', + 'submissioncomment', + 'format', + 'teacher', + 'mailed', + 'timemarked', + 'timecreated', + 'timemodified' + ); + $issue = new backup_nested_element('submission', array('id'), $columns); + + // Build the tree. + $kalvidassign->add_child($issues); + $issues->add_child($issue); + + // Define sources. + $kalvidassign->set_source_table('kalvidassign', array('id' => backup::VAR_ACTIVITYID)); + + // All the rest of elements only happen if we are including user info. + if ($userinfo) { + $issue->set_source_table('kalvidassign_submission', array('vidassignid' => backup::VAR_PARENTID)); + } + + // Annotate the user id's where required. + $issue->annotate_ids('user', 'userid'); + + // Annotate the file areas in use. + $issue->annotate_files('mod_kalvidassign', 'submission', 'id'); + + // Return the root element, wrapped into standard activity structure. + return $this->prepare_activity_structure($kalvidassign); + } +} \ No newline at end of file diff --git a/mod/kalvidassign/backup/moodle2/restore_kalvidassign_activity_task.class.php b/mod/kalvidassign/backup/moodle2/restore_kalvidassign_activity_task.class.php new file mode 100644 index 0000000000000..0ed52df4f50bb --- /dev/null +++ b/mod/kalvidassign/backup/moodle2/restore_kalvidassign_activity_task.class.php @@ -0,0 +1,109 @@ +. + +/** + * Kaltura video assignment restore activity task class script. + * + * @package mod_kalvidassign + * @author Remote-Learner.net Inc + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + * @copyright (C) 2014 Remote Learner.net Inc http://www.remote-learner.net + */ + +defined('MOODLE_INTERNAL') || die(); + +require_once($CFG->dirroot.'/mod/kalvidassign/backup/moodle2/restore_kalvidassign_stepslib.php'); + +/** + * kalvidassign restore task that provides all the settings and steps to perform one + * complete restore of the activity. + */ +class restore_kalvidassign_activity_task extends restore_activity_task { + + /** + * Define (add) particular settings this activity can have. + */ + protected function define_my_settings() { + // No particular settings for this activity. + } + + /** + * Define (add) particular steps this activity can have. + */ + protected function define_my_steps() { + // Certificate only has one structure step. + $this->add_step(new restore_kalvidassign_activity_structure_step('kalvidassign_structure', 'kalvidassign.xml')); + } + + /** + * Define the contents in the activity that must be + * processed by the link decoder. + */ + static public function define_decode_contents() { + $contents = array(); + + $contents[] = new restore_decode_content('kalvidassign', array('intro'), 'kalvidassign'); + + return $contents; + } + + /** + * Define the decoding rules for links belonging + * to the activity to be executed by the link decoder. + */ + static public function define_decode_rules() { + $rules = array(); + + $rules[] = new restore_decode_rule('KALVIDASSIGNVIEWBYID', '/mod/kalvidassign/view.php?id=$1', 'course_module'); + $rules[] = new restore_decode_rule('KALVIDASSIGNINDEX', '/mod/kalvidassign/index.php?id=$1', 'course'); + + return $rules; + + } + + /** + * Define the restore log rules that will be applied + * by the {@link restore_logs_processor} when restoring + * kalvidassign logs. It must return one array + * of {@link restore_log_rule} objects. + */ + static public function define_restore_log_rules() { + $rules = array(); + + $rules[] = new restore_log_rule('kalvidassign', 'add', 'view.php?id={course_module}', '{kalvidassign}'); + $rules[] = new restore_log_rule('kalvidassign', 'update', 'view.php?id={course_module}', '{kalvidassign}'); + $rules[] = new restore_log_rule('kalvidassign', 'view', 'view.php?id={course_module}', '{kalvidassign}'); + + return $rules; + } + + /** + * Define the restore log rules that will be applied + * by the {@link restore_logs_processor} when restoring + * course logs. It must return one array + * of {@link restore_log_rule} objects. + * + * Note this rules are applied when restoring course logs + * by the restore final task, but are defined here at + * activity level. All them are rules not linked to any module instance (cmid = 0). + */ + static public function define_restore_log_rules_for_course() { + $rules = array(); + + // Fix old wrong uses (missing extension) + $rules[] = new restore_log_rule('kalvidassign', 'view all', 'index.php?id={course}', null); + + return $rules; + } +} \ No newline at end of file diff --git a/mod/kalvidassign/backup/moodle2/restore_kalvidassign_stepslib.php b/mod/kalvidassign/backup/moodle2/restore_kalvidassign_stepslib.php new file mode 100644 index 0000000000000..a32272af6603e --- /dev/null +++ b/mod/kalvidassign/backup/moodle2/restore_kalvidassign_stepslib.php @@ -0,0 +1,82 @@ +. + +/** + * Kaltura video assignment restore stepslib script. + * + * @package mod_kalvidassign + * @author Remote-Learner.net Inc + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + * @copyright (C) 2014 Remote Learner.net Inc http://www.remote-learner.net + */ + +/** + * Define all the restore steps that will be used by the restore_kalvidassign_activity_task + */ + +/** + * Structure step to restore one kalvidassign activity. + */ +class restore_kalvidassign_activity_structure_step extends restore_activity_structure_step { + + protected function define_structure() { + + $paths = array(); + $userinfo = $this->get_setting_value('userinfo'); + + $paths[] = new restore_path_element('kalvidassign', '/activity/kalvidassign'); + + if ($userinfo) { + $paths[] = new restore_path_element('kalvidassign_submission', '/activity/kalvidassign/submissions/submission'); + } + + // Return the paths wrapped into standard activity structure. + return $this->prepare_activity_structure($paths); + } + + protected function process_kalvidassign($data) { + global $DB; + + $data = (object)$data; + $oldid = $data->id; + $data->course = $this->get_courseid(); + + $data->timemodified = $this->apply_date_offset($data->timemodified); + + // insert the kalvidassign record. + $newitemid = $DB->insert_record('kalvidassign', $data); + // immediately after inserting "activity" record, call this. + $this->apply_activity_instance($newitemid); + } + + protected function process_kalvidassign_submission($data) { + global $DB; + + $data = (object)$data; + $oldid = $data->id; + + $data->vidassignid = $this->get_new_parentid('kalvidassign'); + $data->userid = $this->get_mappingid('user', $data->userid); + $data->timecreated = $this->apply_date_offset($data->timecreated); + + $newitemid = $DB->insert_record('kalvidassign_submission', $data); + $this->set_mapping('kalvidassign_submission', $oldid, $newitemid); + } + + + protected function after_execute() { + // Add kalvidassign related files, no need to match by itemname (just internally handled context). + $this->add_related_files('mod_kalvidassign', 'submission', 'kalvidassign_submission'); + } +} diff --git a/mod/kalvidassign/db/access.php b/mod/kalvidassign/db/access.php new file mode 100644 index 0000000000000..2c849c6f7849b --- /dev/null +++ b/mod/kalvidassign/db/access.php @@ -0,0 +1,55 @@ +. + +/** + * Kaltura video assignment access script. + * + * @package mod_kalvidassign + * @author Remote-Learner.net Inc + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + * @copyright (C) 2014 Remote Learner.net Inc http://www.remote-learner.net + */ + +$capabilities = array( + + 'mod/kalvidassign:addinstance' => array( + 'riskbitmask' => RISK_XSS, + 'captype' => 'write', + 'contextlevel' => CONTEXT_COURSE, + 'archetypes' => array( + 'editingteacher' => CAP_ALLOW, + 'manager' => CAP_ALLOW + ), + 'clonepermissionsfrom' => 'moodle/course:manageactivities' + ), + + 'mod/kalvidassign:gradesubmission' => array( + 'captype' => 'write', + 'contextlevel' => CONTEXT_MODULE, + 'archetypes' => array( + 'teacher' => CAP_ALLOW, + 'editingteacher' => CAP_ALLOW, + 'manager' => CAP_ALLOW, + ) + ), + + 'mod/kalvidassign:submit' => array( + + 'captype' => 'write', + 'contextlevel' => CONTEXT_MODULE, + 'archetypes' => array( + 'student' => CAP_ALLOW + ) + ), +); \ No newline at end of file diff --git a/mod/kalvidassign/db/install.xml b/mod/kalvidassign/db/install.xml new file mode 100755 index 0000000000000..38705673b142f --- /dev/null +++ b/mod/kalvidassign/db/install.xml @@ -0,0 +1,60 @@ + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    +
    \ No newline at end of file diff --git a/mod/kalvidassign/db/log.php b/mod/kalvidassign/db/log.php new file mode 100644 index 0000000000000..4cbc9949e2b30 --- /dev/null +++ b/mod/kalvidassign/db/log.php @@ -0,0 +1,32 @@ +. + +/** + * Kaltura video assignment log script. + * + * @package mod_kalvidassign + * @author Remote-Learner.net Inc + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + * @copyright (C) 2014 Remote Learner.net Inc http://www.remote-learner.net + */ + + +defined('MOODLE_INTERNAL') || die(); + +$logs = array( + array('module' => 'kalvidassign', 'action' => 'add', 'mtable' => 'kalvidassign', 'field' => 'name'), + array('module' => 'kalvidassign', 'action' => 'update', 'mtable' => 'kalvidassign', 'field' =>' name'), + array('module' => 'kalvidassign', 'action' => 'view', 'mtable' => 'kalvidassign', 'field' => 'name'), + array('module' => 'kalvidassign', 'action' => 'delete', 'mtable' => 'kalvidassign', 'field' => 'name') +); \ No newline at end of file diff --git a/mod/kalvidassign/db/messages.php b/mod/kalvidassign/db/messages.php new file mode 100644 index 0000000000000..ceeb90aaefde9 --- /dev/null +++ b/mod/kalvidassign/db/messages.php @@ -0,0 +1,26 @@ +. + +/** + * Kaltura video assignment messages script. + * + * @package mod_kalvidassign + * @author Remote-Learner.net Inc + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + * @copyright (C) 2014 Remote Learner.net Inc http://www.remote-learner.net + */ + +$messageproviders = array( + 'kalvidassign_updates' => array() +); \ No newline at end of file diff --git a/mod/kalvidassign/db/upgrade.php b/mod/kalvidassign/db/upgrade.php new file mode 100644 index 0000000000000..2d47d9c7a7c97 --- /dev/null +++ b/mod/kalvidassign/db/upgrade.php @@ -0,0 +1,89 @@ +. + +/** + * Kaltura video assignment upgrade script. + * + * @package mod_kalvidassign + * @author Remote-Learner.net Inc + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + * @copyright (C) 2014 Remote Learner.net Inc http://www.remote-learner.net + */ + +function xmldb_kalvidassign_upgrade($oldversion) { + global $CFG, $DB; + + $dbman = $DB->get_manager(); + + if ($oldversion < 2011091301) { + + // Changing type of field intro on table kalvidassign to text + $table = new xmldb_table('kalvidassign'); + $field = new xmldb_field('intro', XMLDB_TYPE_TEXT, 'small', null, null, null, null, 'name'); + + // Launch change of type for field intro + $dbman->change_field_type($table, $field); + + // kalvidassign savepoint reached + upgrade_mod_savepoint(true, 2011091301, 'kalvidassign'); + } + + if ($oldversion < 2014013000) { + + // Define field source to be added to kalvidassign_submission. + $table = new xmldb_table('kalvidassign_submission'); + $field = new xmldb_field('source', XMLDB_TYPE_TEXT, null, null, null, null, null, 'entry_id'); + + // Conditionally launch add field source. + if (!$dbman->field_exists($table, $field)) { + $dbman->add_field($table, $field); + } + + // Define field width to be added to kalvidassign_submission. + $field = new xmldb_field('width', XMLDB_TYPE_INTEGER, '10', null, null, null, '0', 'source'); + + // Conditionally launch add field width. + if (!$dbman->field_exists($table, $field)) { + $dbman->add_field($table, $field); + } + + // Define field height to be added to kalvidassign_submission. + $field = new xmldb_field('height', XMLDB_TYPE_INTEGER, '10', null, null, null, '0', 'width'); + + // Conditionally launch add field height. + if (!$dbman->field_exists($table, $field)) { + $dbman->add_field($table, $field); + } + + // Kalvidassign savepoint reached. + upgrade_mod_savepoint(true, 2014013000, 'kalvidassign'); + } + + if ($oldversion < 2014023000.01) { + + // Define field metadata to be added to kalvidassign_submission. + $table = new xmldb_table('kalvidassign_submission'); + $field = new xmldb_field('metadata', XMLDB_TYPE_TEXT, null, null, null, null, null, 'timemarked'); + + // Conditionally launch add field metadata. + if (!$dbman->field_exists($table, $field)) { + $dbman->add_field($table, $field); + } + + // Kalvidassign savepoint reached. + upgrade_mod_savepoint(true, 2014023000.01, 'kalvidassign'); + } + + return true; +} \ No newline at end of file diff --git a/mod/kalvidassign/grade_preferences_form.php b/mod/kalvidassign/grade_preferences_form.php new file mode 100644 index 0000000000000..85c3bad005f69 --- /dev/null +++ b/mod/kalvidassign/grade_preferences_form.php @@ -0,0 +1,124 @@ +. + +/** + * Kaltura grade preferences form. + * + * @package mod_kalvidassign + * @author Remote-Learner.net Inc + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + * @copyright (C) 2014 Remote Learner.net Inc http://www.remote-learner.net + */ + +if (!defined('MOODLE_INTERNAL')) { + die('Direct access to this script is forbidden.'); +} + +require_once(dirname(dirname(dirname(__FILE__))).'/course/moodleform_mod.php'); +require_once(dirname(__FILE__).'/locallib.php'); +require_once($CFG->libdir.'/formslib.php'); + +class kalvidassign_gradepreferences_form extends moodleform { + /** + * This function defines all of the elements displayed on the grade preferences form. + */ + public function definition() { + global $CFG, $COURSE, $USER; + + $mform =& $this->_form; + + $mform->addElement('hidden', 'cmid', $this->_customdata['cmid']); + $mform->setType('cmid', PARAM_INT); + + $mform->addElement('header', 'kal_vid_subm_hdr', get_string('optionalsettings', 'kalvidassign')); + + $context = context_module::instance($this->_customdata['cmid']); + + $group_opt = array(); + $groups = array(); + + // If the user doesn't have access to all group print the groups they have access to + if (!has_capability('moodle/site:accessallgroups', $context)) { + + // Determine the groups mode + switch($this->_customdata['groupmode']) { + case NOGROUPS: + // No groups, do nothing + break; + case SEPARATEGROUPS: + $groups = groups_get_all_groups($COURSE->id, $USER->id); + break; + case VISIBLEGROUPS: + $groups = groups_get_all_groups($COURSE->id); + break; + } + + $group_opt[0] = get_string('all', 'mod_kalvidassign'); + + foreach ($groups as $group_obj) { + $group_opt[$group_obj->id] = $group_obj->name; + } + + } else { + $groups = groups_get_all_groups($COURSE->id); + + $group_opt[0] = get_string('all', 'mod_kalvidassign'); + + foreach ($groups as $group_obj) { + $group_opt[$group_obj->id] = $group_obj->name; + } + + } + + $mform->addElement('select', 'group_filter', get_string('group_filter', 'mod_kalvidassign'), $group_opt); + + $filters = array( + KALASSIGN_ALL => get_string('all', 'kalvidassign'), + KALASSIGN_REQ_GRADING => get_string('reqgrading', 'kalvidassign'), + KALASSIGN_SUBMITTED => get_string('submitted', 'kalvidassign') + ); + + $mform->addElement('select', 'filter', get_string('show'), $filters); + $mform->addHelpButton('filter', 'show', 'kalvidassign'); + + $mform->addElement('text', 'perpage', get_string('pagesize', 'kalvidassign'), array('size' => 3, 'maxlength' => 3)); + $mform->setType('perpage', PARAM_INT); + $mform->addHelpButton('perpage', 'pagesize', 'kalvidassign'); + + $mform->addElement('checkbox', 'quickgrade', get_string('quickgrade', 'kalvidassign')); + $mform->setDefault('quickgrade', ''); + $mform->addHelpButton('quickgrade', 'quickgrade', 'kalvidassign'); + + $savepref = get_string('savepref', 'kalvidassign'); + + $mform->addElement('submit', 'savepref', $savepref); + } + + /** + * This funciton validates te submitted data. + * @param array $data array of ("fieldname"=>value) of submitted data + * @param array $files array of uploaded files "element_name"=>tmp_file_path + * @return array of "element_name"=>"error_description" if there are errors, + * or an empty array if everything is OK (true allowed for backwards compatibility too). + */ + public function validation($data, $files) { + $errors = parent::validation($data, $files); + + if (0 == (int) $data['perpage']) { + $errors['perpage'] = get_string('invalidperpage', 'kalvidassign'); + } + + return $errors; + } +} \ No newline at end of file diff --git a/mod/kalvidassign/grade_submissions.php b/mod/kalvidassign/grade_submissions.php new file mode 100644 index 0000000000000..1026bea5238f9 --- /dev/null +++ b/mod/kalvidassign/grade_submissions.php @@ -0,0 +1,208 @@ +. + +/** + * Kaltura grade submission script. + * + * @package mod_kalvidassign + * @author Remote-Learner.net Inc + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + * @copyright (C) 2014 Remote Learner.net Inc http://www.remote-learner.net + */ + +require_once(dirname(dirname(dirname(__FILE__))).'/config.php'); +require_once(dirname(__FILE__).'/lib.php'); +require_once(dirname(__FILE__).'/renderer.php'); +require_once(dirname(__FILE__).'/locallib.php'); +require_once(dirname(__FILE__).'/grade_preferences_form.php'); + +$id = required_param('cmid', PARAM_INT); // Course Module ID +$mode = optional_param('mode', 0, PARAM_TEXT); +$tifirst = optional_param('tifirst', '', PARAM_TEXT); +$tilast = optional_param('tilast', '', PARAM_TEXT); +$page = optional_param('page', 0, PARAM_INT); + +$url = new moodle_url('/mod/kalvidassign/grade_submissions.php'); +$url->param('cmid', $id); + +if (!empty($mode)) { + if (!confirm_sesskey()) { + print_error('confirmsesskeybad', 'error'); + } +} + +list($cm, $course, $kalvidassignobj) = kalvidassign_validate_cmid($id); + +require_login($course->id, false, $cm); + +global $PAGE, $OUTPUT, $USER; + +$currentcrumb = get_string('singlesubmissionheader', 'kalvidassign'); +$PAGE->set_url($url); +$PAGE->set_title(format_string($kalvidassignobj->name)); +$PAGE->set_heading($course->fullname); +$PAGE->navbar->add($currentcrumb); + +$renderer = $PAGE->get_renderer('mod_kalvidassign'); +$courseid = $PAGE->context->get_course_context(false); + +echo $OUTPUT->header(); + +require_capability('mod/kalvidassign:gradesubmission', context_module::instance($cm->id)); + +add_to_log($course->id, 'kalvidassign', 'view submissions page', 'grade_submissions.php?cmid='.$cm->id, $kalvidassignobj->id, $cm->id); + +$prefform = new kalvidassign_gradepreferences_form(null, array('cmid' => $cm->id, 'groupmode' => $cm->groupmode)); +$data = null; + +if ($data = $prefform->get_data()) { + set_user_preference('kalvidassign_group_filter', $data->group_filter); + + set_user_preference('kalvidassign_filter', $data->filter); + + if ($data->perpage > 0) { + set_user_preference('kalvidassign_perpage', $data->perpage); + } + + if (isset($data->quickgrade)) { + set_user_preference('kalvidassign_quickgrade', $data->quickgrade); + } else { + set_user_preference('kalvidassign_quickgrade', '0'); + } + +} + +if (empty($data)) { + $data = new stdClass(); +} + +$data->filter = get_user_preferences('kalvidassign_filter', 0); +$data->perpage = get_user_preferences('kalvidassign_perpage', 10); +$data->quickgrade = get_user_preferences('kalvidassign_quickgrade', 0); +$data->group_filter = get_user_preferences('kalvidassign_group_filter', 0); + +$gradedata = data_submitted(); + +// Check if fast grading was passed to the form and process the data +if (!empty($gradedata->mode)) { + + $usersubmission = array(); + $time = time(); + $updated = false; + + foreach ($gradedata->users as $userid => $val) { + + $param = array('vidassignid' => $kalvidassignobj->id, 'userid' => $userid); + + $usersubmissions = $DB->get_record('kalvidassign_submission', $param); + + if ($usersubmissions) { + + if (array_key_exists($userid, $gradedata->menu)) { + + // Update grade + if (($gradedata->menu[$userid] != $usersubmissions->grade)) { + + $usersubmissions->grade = $gradedata->menu[$userid]; + $usersubmissions->timemarked = $time; + $usersubmissions->teacher = $USER->id; + + $updated = true; + } + } + + if (array_key_exists($userid, $gradedata->submissioncomment)) { + + if (0 != strcmp($usersubmissions->submissioncomment, $gradedata->submissioncomment[$userid])) { + $usersubmissions->submissioncomment = $gradedata->submissioncomment[$userid]; + + $updated = true; + + } + } + + // trigger grade event + if ($DB->update_record('kalvidassign_submission', $usersubmissions)) { + + $grade = new stdClass(); + $grade->userid = $userid; + $grade = kalvidassign_get_submission_grade_object($kalvidassignobj->id, $userid); + + $kalvidassignobj->cmidnumber = $cm->idnumber; + + kalvidassign_grade_item_update($kalvidassignobj, $grade); + + // Add to log only if updating. + add_to_log($kalvidassignobj->course, 'kalvidassign', 'update grades', 'grade_submissions.php?cmid='.$cm->id, $cm->id); + + } + + } else { + // No user submission however the instructor has submitted grade data + $usersubmissions = new stdClass(); + $usersubmissions->vidassignid = $cm->instance; + $usersubmissions->userid = $userid; + $usersubmissions->entry_id = ''; + $usersubmissions->teacher = $USER->id; + $usersubmissions->timemarked = $time; + + // Need to prevent completely empty submissions from getting entered + // into the video submissions' table + // Check for unchanged grade value and an empty feedback value + $emptygrade = array_key_exists($userid, $gradedata->menu) && '-1' == $gradedata->menu[$userid]; + + $emptycomment = array_key_exists($userid, $gradedata->submissioncomment) && empty($gradedata->submissioncomment[$userid]); + + if ($emptygrade && $emptycomment ) { + continue; + } + + if (array_key_exists($userid, $gradedata->menu)) { + $usersubmissions->grade = $gradedata->menu[$userid]; + } + + if (array_key_exists($userid, $gradedata->submissioncomment)) { + $usersubmissions->submissioncomment = $gradedata->submissioncomment[$userid]; + } + + // trigger grade event + if ($DB->insert_record('kalvidassign_submission', $usersubmissions)) { + + $grade = new stdClass(); + $grade->userid = $userid; + $grade = kalvidassign_get_submission_grade_object($kalvidassignobj->id, $userid); + + $kalvidassignobj->cmidnumber = $cm->idnumber; + + kalvidassign_grade_item_update($kalvidassignobj, $grade); + + // Add to log only if updating + add_to_log($kalvidassignobj->course, 'kalvidassign', 'update grades', 'grade_submissions.php?cmid='.$cm->id, $cm->id); + + } + + } + + $updated = false; + } +} + +$renderer->display_submissions_table($cm, $data->group_filter, $data->filter, $data->perpage, $data->quickgrade, $tifirst, $tilast, $page); + +$prefform->set_data($data); +$prefform->display(); + +$PAGE->requires->yui_module('moodle-local_kaltura-ltipanel', 'M.local_kaltura.initreviewsubmission'); + +echo $OUTPUT->footer(); \ No newline at end of file diff --git a/mod/kalvidassign/index.php b/mod/kalvidassign/index.php new file mode 100644 index 0000000000000..440d715f2e5c4 --- /dev/null +++ b/mod/kalvidassign/index.php @@ -0,0 +1,48 @@ +. + +/** + * Kaltura index script. + * + * @package mod_kalvidassign + * @author Remote-Learner.net Inc + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + * @copyright (C) 2014 Remote Learner.net Inc http://www.remote-learner.net + */ + +require_once("../../config.php"); +require_once($CFG->dirroot.'/local/kaltura/locallib.php'); +require_once($CFG->dirroot.'/mod/kalvidassign/locallib.php'); + +$id = required_param('id', PARAM_INT); // Course ID. + +$course = $DB->get_record('course', array('id' => $id), '*', MUST_EXIST); + +require_login($course); + +global $SESSION, $CFG; + +$strplural = get_string("modulenameplural", "mod_kalvidassign"); +$PAGE->set_url('/mod/kalvidassign/index.php', array('id' => $id)); +$PAGE->set_pagelayout('incourse'); +$PAGE->navbar->add($strplural); +$PAGE->set_title($strplural); +$PAGE->set_heading($course->fullname); + +echo $OUTPUT->header(); + +$renderer = $PAGE->get_renderer('mod_kalvidassign'); +$renderer->display_kalvidassignments_table($course); + +echo $OUTPUT->footer(); diff --git a/mod/kalvidassign/lang/en/kalvidassign.php b/mod/kalvidassign/lang/en/kalvidassign.php new file mode 100644 index 0000000000000..9b2633fb116ac --- /dev/null +++ b/mod/kalvidassign/lang/en/kalvidassign.php @@ -0,0 +1,115 @@ +. + +/** + * Kaltura video assignment language file. + * + * @package mod_kalvidassign + * @author Remote-Learner.net Inc + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + * @copyright (C) 2014 Remote Learner.net Inc http://www.remote-learner.net + */ + +$string['activity_not_migrated'] = 'This activity has not yet been migrated to use the new Kaltura instance.'; +$string['modulenameplural'] = 'Kaltura Media Assignments'; +$string['modulename'] = 'Kaltura Media Assignment'; +$string['modulename_help'] = 'The Kaltura Media Assignment enables a teacher to create assignments that require students to upload and submit Kaltura videos. Teachers can grade student submissions and provide feedback.'; +$string['name'] = 'Name'; +$string['availabledate'] = 'Available from'; +$string['duedate'] = 'Due Date'; +$string['preventlate'] = 'Prevent late submissions'; +$string['allowdeleting'] = 'Allow resubmitting'; +$string['allowdeleting_help'] = 'If enabled, students may replace submitted videos. Whether it is possible to submit after the due date is controlled by the \'Prevent late submissions\' setting'; +$string['emailteachers'] = 'Email alerts to teachers'; +$string['emailteachers_help'] = 'If enabled, teachers receive email notification whenever students add or update an assignment submission. Only teachers who are able to grade the particular assignment are notified. So, for example, if the course uses separate groups, teachers restricted to particular groups won\'t receive notification about students in other groups.'; +$string['invalidid'] = 'Invalid ID'; +$string['invalid_launch_parameters'] = 'Invalid launch parameters'; +$string['pluginadministration'] = 'Kaltura Media Assignment'; +$string['addvideo'] = 'Add media submission'; +$string['submitvideo'] = 'Submit media'; +$string['replacevideo'] = 'Replace media'; +$string['previewvideo'] = 'Preview'; +$string['gradesubmission'] = 'Grade submissions'; +$string['numberofsubmissions'] = 'Number of submissions: {$a}'; +$string['assignmentexpired'] = 'Submission cancelled. The assignment due date has passed'; +$string['assignmentsubmitted'] = 'Success, your assignment has been submitted'; +$string['emptyentryid'] = 'Video assignment was not submitted correctly. Please try to resubmit.'; +$string['deleteallsubmissions'] = 'Delete all video submissions'; +$string['fullname'] = 'Name'; +$string['grade'] = 'Grade'; +$string['submissioncomment'] = 'Comment'; +$string['timemodified'] = 'Last modified (Submission)'; +$string['grademodified'] = 'Last modified (Grade)'; +$string['finalgrade'] = 'Final grade'; +$string['status'] = 'Status'; +$string['optionalsettings'] = 'Optional settings'; +$string['savepref'] = 'Save preferences'; +$string['all'] = 'All'; +$string['reqgrading'] = 'Require grading'; +$string['submitted'] = 'Submitted'; +$string['pagesize'] = 'Submissions shown per page'; +$string['pagesize_help'] = 'Set the number of assignment to display per page'; +$string['show'] = 'Show'; +$string['show_help'] = "If filter is set to 'All' then all student submissions will be displayed; even if the student didn't submit anything. If set to 'Require grading' only submissions that has not been graded or submissions that were updated by the student after it was graded will be shown. If set to 'Submitted' only students who submitted a video assignment."; +$string['quickgrade'] = 'Allow quick grade'; +$string['quickgrade_help'] = 'If enabled, multiple assignments can be graded on one page. Add grades and comments then click the "Save all my feedback" button to save all changes for that page.'; +$string['invalidperpage'] = 'Enter a number greater than zero'; +$string['savefeedback'] = 'Save feedback'; +$string['submission'] = 'Submission'; +$string['grades'] = 'Grades'; +$string['feedback'] = 'Feedback'; +$string['singlesubmissionheader'] = 'Grade submission'; +$string['singlegrade'] = 'Add help text'; +$string['singlegrade_help'] = 'Add help text'; +$string['late'] = '{$a} late'; +$string['early'] = '{$a} early'; +$string['lastgrade'] = 'Last grade'; +$string['savedchanges'] = 'Changed Saved'; +$string['save'] = 'Save Changes'; +$string['cancel'] = 'Close'; +$string['checkconversionstatus'] = 'Check video conversion status'; +$string['pluginname'] = 'Kaltura Media Assignment'; +$string['video_converting'] = 'The video is still converting. Please check the status of the video at a later time.'; +$string['emailteachermail'] = '{$a->username} has updated their assignment submission +for \'{$a->assignment}\' at {$a->timeupdated} + +It is available here: + + {$a->url}'; +$string['emailteachermailhtml'] = '{$a->username} has updated their assignment submission +for \'{$a->assignment}\' at {$a->timeupdated}

    +It is available on the web site.'; +$string['messageprovider:kalvidassign_updates'] = 'Kaltura Media assignment notifications'; +$string['video_preview_header'] = 'Submission preview'; +$string['kalvidassign:gradesubmission'] = 'Grade video submissions'; +$string['kalvidassign:addinstance'] = 'Add a Kaltura Media Assignment'; +$string['kalvidassign:submit'] = 'Submit videos'; +$string['grade_video_not_cache'] = 'This video may still be in the process of converting...'; +$string['noenrolledstudents'] = 'No students are enrolled in the course'; +$string['group_filter'] = 'Group Filter'; +$string['use_screen_recorder'] = 'Record screen'; +$string['use_kcw'] = 'Upload media or record from webcam'; +$string['scr_loading'] = 'Loading...'; +$string['reviewvideo'] = 'Review submission'; +$string['kalvidassign:screenrecorder'] = 'Screen recorder'; +$string['checkingforjava'] = 'Checking for Java'; +$string['javanotenabled'] = 'Failed to detect Java, please make sure you have the latest version of Java installed and enabled and then try again.'; +$string['cannotdisplaythumbnail'] = 'Unable to display thumbnail'; +$string['noassignments'] = 'No Kaltura video assignments found in the course'; +$string['submitted'] = 'Submitted'; +$string['nosubmission'] = 'No submission'; +$string['nosubmissions'] = 'No submissions'; +$string['viewsubmission'] = 'View submission'; +$string['failedtoinsertsubmission'] = 'Failed to insert submission record.'; +$string['video_thumbnail'] = 'Video thumbnail'; \ No newline at end of file diff --git a/mod/kalvidassign/lib.php b/mod/kalvidassign/lib.php new file mode 100644 index 0000000000000..b37a7365fd736 --- /dev/null +++ b/mod/kalvidassign/lib.php @@ -0,0 +1,395 @@ +. + +/** + * Kaltura video assignment main library script. + * + * @package mod_kalvidassign + * @author Remote-Learner.net Inc + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + * @copyright (C) 2014 Remote Learner.net Inc http://www.remote-learner.net + */ + +if (!defined('MOODLE_INTERNAL')) { + die('Direct access to this script is forbidden.'); +} + +/* Include eventslib.php */ +require_once($CFG->libdir.'/eventslib.php'); +/* Include calendar/lib.php */ +require_once($CFG->dirroot.'/calendar/lib.php'); + +/** + * Given an object containing all the necessary data, + * (defined by the form in mod_form.php) this function + * will create a new instance and return the id number + * of the new instance. + * + * @param object $kalvidassign An object from the form in mod_form.php + * @return int The id of the newly inserted kalvidassign record + */ +function kalvidassign_add_instance($kalvidassign) { + global $DB; + + $kalvidassign->timecreated = time(); + + $kalvidassign->id = $DB->insert_record('kalvidassign', $kalvidassign); + + if ($kalvidassign->timedue) { + $event = new stdClass(); + $event->name = $kalvidassign->name; + $event->description = format_module_intro('kalvidassign', $kalvidassign, $kalvidassign->coursemodule); + $event->courseid = $kalvidassign->course; + $event->groupid = 0; + $event->userid = 0; + $event->modulename = 'kalvidassign'; + $event->instance = $kalvidassign->id; + $event->eventtype = 'due'; + $event->timestart = $kalvidassign->timedue; + $event->timeduration = 0; + + calendar_event::create($event); + } + + kalvidassign_grade_item_update($kalvidassign); + + return $kalvidassign->id; +} + +/** + * Given an object containing all the necessary data, + * (defined by the form in mod_form.php) this function + * will update an existing instance with new data. + * + * @param object $kalvidassign An object from the form in mod_form.php + * @return bool Returns true on success, otherwise false. + */ +function kalvidassign_update_instance($kalvidassign) { + global $DB; + + $kalvidassign->timemodified = time(); + $kalvidassign->id = $kalvidassign->instance; + + $updated = $DB->update_record('kalvidassign', $kalvidassign); + + if ($kalvidassign->timedue) { + $event = new stdClass(); + + if ($event->id = $DB->get_field('event', 'id', array('modulename' => 'kalvidassign', 'instance' => $kalvidassign->id))) { + + $event->name = $kalvidassign->name; + $event->description = format_module_intro('kalvidassign', $kalvidassign, $kalvidassign->coursemodule); + $event->timestart = $kalvidassign->timedue; + + $calendarevent = calendar_event::load($event->id); + $calendarevent->update($event); + } else { + $event = new stdClass(); + $event->name = $kalvidassign->name; + $event->description = format_module_intro('kalvidassign', $kalvidassign, $kalvidassign->coursemodule); + $event->courseid = $kalvidassign->course; + $event->groupid = 0; + $event->userid = 0; + $event->modulename = 'kalvidassign'; + $event->instance = $kalvidassign->id; + $event->eventtype = 'due'; + $event->timestart = $kalvidassign->timedue; + $event->timeduration = 0; + + calendar_event::create($event); + } + } else { + $DB->delete_records('event', array('modulename' => 'kalvidassign', 'instance' => $kalvidassign->id)); + } + + if ($updated) { + kalvidassign_grade_item_update($kalvidassign); + } + + return $updated; +} + +/** + * Given an ID of an instance of this module, + * this function will permanently delete the instance + * and any data that depends on it. + * + * @param int $id Id of the module instance + * @return bool True on success, else false. + */ +function kalvidassign_delete_instance($id) { + global $DB; + + $result = true; + + if (! $kalvidassign = $DB->get_record('kalvidassign', array('id' => $id))) { + return false; + } + + if (! $DB->delete_records('kalvidassign_submission', array('vidassignid' => $kalvidassign->id))) { + $result = false; + } + + if (! $DB->delete_records('event', array('modulename' => 'kalvidassign', 'instance' => $kalvidassign->id))) { + $result = false; + } + + if (! $DB->delete_records('kalvidassign', array('id' => $kalvidassign->id))) { + $result = false; + } + + kalvidassign_grade_item_delete($kalvidassign); + + return $result; +} + +/** + * Return a small object with summary information about what a + * user has done with a given particular instance of this module + * Used for user activity reports. + * $return->time = the time they did it + * $return->info = a short text description + * + * @return object Returns time and info properties. + */ +function kalvidassign_user_outline($course, $user, $mod, $kalvidassign) { + $return = new stdClass; + $return->time = 0; + $return->info = ''; + return $return; +} + + +/** + * Print a detailed representation of what a user has done with + * a given particular instance of this module, for user activity reports. + * + * @return boolean always return true. + */ +function kalvidassign_user_complete($course, $user, $mod, $kalvidassign) { + return true; +} + +/** + * Given a course and a time, this module should find recent activity + * that has occurred in kalvidassign activities and print it out. + * Return true if there was output, or false is there was none. + * + * @return boolean Always returns false. + */ +function kalvidassign_print_recent_activity($course, $viewfullnames, $timestart) { + return false; +} + + +/** + * Must return an array of users who are participants for a given instance + * of kalvidassign. Must include every user involved in the instance, + * independient of his role (student, teacher, admin...). The returned objects + * must contain at least id property. See other modules as example. + * + * @param int $kalvidassign ID of an instance of this module + * @return bool Always returns false. + */ +function kalvidassign_get_participants($kalvidassignid) { + return false; +} + + +/** + * This function returns if a scale is being used by one kalvidassign + * if it has support for grading and scales. Commented code should be + * modified if necessary. See forum, glossary or journal modules + * as reference. + * + * @param int $kalvidassign id ID of an instance of this module + * @return bool Returns false as scales are not supportd by this module. + */ +function kalvidassign_scale_used($kalvidassignid, $scaleid) { + return false; +} + +/** + * Checks if scale is being used by any instance of kalvidassign. + * This function was added in 1.9 + * + * This is used to find out if scale used anywhere + * @param int $scaleid The scale id. + * @return bool True if the scale is used by any kalvidassign + */ +function kalvidassign_scale_used_anywhere($scaleid) { + global $DB; + + $param = array('grade' => -$scaleid); + if ($scaleid and $DB->record_exists('kalvidassign', $param)) { + return true; + } else { + return false; + } +} + +/** + * @param string $feature FEATURE_xx constant for requested feature + * @return mixed True if module supports feature, null if doesn't know + */ +function kalvidassign_supports($feature) { + switch($feature) { + case FEATURE_GROUPS: + return true; + break; + case FEATURE_GROUPINGS: + return true; + break; + case FEATURE_GROUPMEMBERSONLY: + return true; + break; + case FEATURE_MOD_INTRO: + return true; + break; + case FEATURE_COMPLETION_TRACKS_VIEWS: + return true; + break; + case FEATURE_GRADE_HAS_GRADE: + return true; + break; + case FEATURE_GRADE_OUTCOMES: + return true; + break; + case FEATURE_BACKUP_MOODLE2: + return true; + break; + default: + return null; + break; + } +} + +/** + * Create/update grade item for given kaltura video assignment + * + * @global object + * @param object kalvidassign object with extra cmidnumber + * @param mixed optional array/object of grade(s); 'reset' means reset grades in gradebook + * @return int, 0 if ok, error code otherwise + */ +function kalvidassign_grade_item_update($kalvidassign, $grades = null) { + require_once(dirname(dirname(dirname(__FILE__))).'/lib/gradelib.php'); + + $params = array('itemname' => $kalvidassign->name, 'idnumber' => $kalvidassign->cmidnumber); + + if ($kalvidassign->grade > 0) { + $params['gradetype'] = GRADE_TYPE_VALUE; + $params['grademax'] = $kalvidassign->grade; + $params['grademin'] = 0; + + } else if ($kalvidassign->grade < 0) { + $params['gradetype'] = GRADE_TYPE_SCALE; + $params['scaleid'] = -$kalvidassign->grade; + + } else { + $params['gradetype'] = GRADE_TYPE_TEXT; + } + + if ($grades === 'reset') { + $params['reset'] = true; + $grades = null; + } + + return grade_update('mod/kalvidassign', $kalvidassign->course, 'mod', 'kalvidassign', $kalvidassign->id, 0, $grades, $params); +} + +/** + * Removes all grades from gradebook + * + * @global object + * @param int $courseid + * @param string optional type + */ +function kalvidassign_reset_gradebook($courseid, $type = '') { + global $DB; + + $sql = "SELECT l.*, cm.idnumber as cmidnumber, l.course as courseid + FROM {kalvidassign} l, {course_modules} cm, {modules} m + WHERE m.name = 'kalvidassign' AND m.id = cm.module AND cm.instance = l.id AND l.course = :course"; + + $params = array ('course' => $courseid); + + if ($kalvisassigns = $DB->get_records_sql($sql, $params)) { + + foreach ($kalvisassigns as $kalvisassign) { + kalvidassign_grade_item_update($kalvisassign, 'reset'); + } + } +} + +/** + * Actual implementation of the reset course functionality, delete all the + * kaltura video submissions attempts for course $data->courseid. + * + * @global stdClass + * @global object + * @param object $data the data submitted from the reset course. + * @return array status array + */ +function kalvidassign_reset_userdata($data) { + global $DB; + + $componentstr = get_string('modulenameplural', 'kalvidassign'); + $status = array(); + + if (!empty($data->reset_kalvidassign)) { + $kalvidassignsql = "SELECT l.id + FROM {kalvidassign} l + WHERE l.course=:course"; + + $params = array ("course" => $data->courseid); + $DB->delete_records_select('kalvidassign_submission', "vidassignid IN ($kalvidassignsql)", $params); + + // remove all grades from gradebook + if (empty($data->reset_gradebook_grades)) { + kalvidassign_reset_gradebook($data->courseid); + } + + $status[] = array('component' => $componentstr, 'item' => get_string('deleteallsubmissions', 'kalvidassign'), 'error' => false); + } + + // updating dates - shift may be negative too + if ($data->timeshift) { + shift_course_mod_dates('kalvidassign', array('timedue', 'timeavailable'), $data->timeshift, $data->courseid); + $status[] = array('component' => $componentstr, 'item' => get_string('datechanged'), 'error' => false); + } + + return $status; +} + +/** + * This functions deletes a grade item. + * @param object $kalvidassign a Kaltura video assignment data object. + * @return int Returns GRADE_UPDATE_OK, GRADE_UPDATE_FAILED, GRADE_UPDATE_MULTIPLE or GRADE_UPDATE_ITEM_LOCKED. + */ +function kalvidassign_grade_item_delete($kalvidassign) { + global $CFG; + require_once($CFG->libdir.'/gradelib.php'); + return grade_update('mod/kalvidassign', $kalvidassign->course, 'mod', 'kalvidassign', $kalvidassign->id, 0, null, array('deleted' => 1)); +} + +/** + * Function to be run periodically according to the moodle cron + * + * Finds all assignment notifications that have yet to be mailed out, and mails them. + * @return bool Returns false as the this module doesn't support cron jobs + */ +function kalvidassign_cron () { + return false; +} \ No newline at end of file diff --git a/mod/kalvidassign/locallib.php b/mod/kalvidassign/locallib.php new file mode 100644 index 0000000000000..b003b070e1259 --- /dev/null +++ b/mod/kalvidassign/locallib.php @@ -0,0 +1,356 @@ +. + +/** + * Kaltura video assignment locallib script. + * + * @package mod_kalvidassign + * @author Remote-Learner.net Inc + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + * @copyright (C) 2014 Remote Learner.net Inc http://www.remote-learner.net + */ + +/** + * This function returns true if the assignment submission period is over + * + * @param kalvidassign obj + * + * @return bool - true if assignment submission period is over else false + */ + +define('KALASSIGN_ALL', 0); +define('KALASSIGN_REQ_GRADING', 1); +define('KALASSIGN_SUBMITTED', 2); + +require_once(dirname(dirname(dirname(__FILE__))).'/lib/gradelib.php'); +require_once($CFG->dirroot.'/mod/kalvidassign/renderable.php'); +require_once(dirname(dirname(dirname(__FILE__))).'/local/kaltura/locallib.php'); + +/** + * Check if the assignment submission end date has passed or if late submissions + * are prohibited + * + * @param object - Kaltura instance video assignment object + * @return bool - true if expired, otherwise false + */ +function kalvidassign_assignemnt_submission_expired($kalvidassign) { + $expired = false; + + if ($kalvidassign->preventlate) { + $expired = (0 != $kalvidassign->timedue) && (time() > $kalvidassign->timedue); + } + + return $expired; +} + +/** + * Retrieve a list of users who have submitted assignments + * + * @param int $kalvidassignid The assignment id. + * @param string $filter Filter results by assignments that have been submitted or + * assignment that need to be graded or no filter at all. + * @return mixed collection of users or false. + */ +function kalvidassign_get_submissions($kalvidassignid, $filter = '') { + global $DB; + + $where = ''; + switch ($filter) { + case KALASSIGN_SUBMITTED: + $where = ' timemodified > 0 AND '; + break; + case KALASSIGN_REQ_GRADING: + $where = ' timemarked < timemodified AND '; + break; + } + + $param = array('instanceid' => $kalvidassignid); + $where .= ' vidassignid = :instanceid'; + + // Reordering the fields returned to make it easier to use in the grade_get_grades function. + $columns = 'userid,vidassignid,entry_id,grade,submissioncomment,format,teacher,mailed,timemarked,timecreated,timemodified,source,width,height'; + $records = $DB->get_records_select('kalvidassign_submission', $where, $param, 'timemodified DESC', $columns); + + if (empty($records)) { + return false; + } + + return $records; +} + +/** + * This function retrives the user's submission record. + * @param int $kalvidassignid The activity instance id. + * @param int $userid The user id. + * @return object A data object consisting of the user's submission. + */ +function kalvidassign_get_submission($kalvidassignid, $userid) { + global $DB; + + $param = array('instanceid' => $kalvidassignid, 'userid' => $userid); + $where = ''; + $where .= ' vidassignid = :instanceid AND userid = :userid'; + + // Reordering the fields returned to make it easier to use in the grade_get_grades function. + $columns = 'userid,id,vidassignid,entry_id,grade,submissioncomment,format,teacher,mailed,timemarked,timecreated,timemodified,source,width,height'; + $record = $DB->get_record_select('kalvidassign_submission', $where, $param, '*'); + + if (empty($record)) { + return false; + } + + return $record; + +} + +/** + * This function retrieves the submission grade object. + * @param int $instanceid The activity instance id. + * @param int $userid The user id. + * @return object A data object consisting of the user's submission. + */ +function kalvidassign_get_submission_grade_object($instanceid, $userid) { + global $DB; + + $param = array('kvid' => $instanceid, 'userid' => $userid); + + $sql = "SELECT u.id, u.id AS userid, s.grade AS rawgrade, s.submissioncomment AS feedback, s.format AS feedbackformat, + s.teacher AS usermodified, s.timemarked AS dategraded, s.timemodified AS datesubmitted + FROM {user} u, {kalvidassign_submission} s + WHERE u.id = s.userid AND s.vidassignid = :kvid + AND u.id = :userid"; + + $data = $DB->get_record_sql($sql, $param); + + if (-1 == $data->rawgrade) { + $data->rawgrade = null; + } + + return $data; +} + +/** + * This function validates the course module id and returns the course module object, course object and activity instance object. + * @return array an array with the following values array(course module object, $course object, activity instance object). + */ +function kalvidassign_validate_cmid ($cmid) { + global $DB; + + if (!$cm = get_coursemodule_from_id('kalvidassign', $cmid)) { + print_error('invalidcoursemodule'); + } + + if (!$course = $DB->get_record('course', array('id' => $cm->course))) { + print_error('coursemisconf'); + } + + if (!$kalvidassignobj = $DB->get_record('kalvidassign', array('id' => $cm->instance))) { + print_error('invalidid', 'kalvidassign'); + } + + return array($cm, $course, $kalvidassignobj); +} + +/** + * This function returns HTML markup to signify a submission was late. + * @return string HTML markup + */ +function kalvidassign_display_lateness($timesubmitted, $timedue) { + if (!$timedue) { + return ''; + } + $time = $timedue - $timesubmitted; + if ($time < 0) { + $timetext = get_string('late', 'kalvidassign', format_time($time)); + return ' ('.$timetext.')'; + } else { + $timetext = get_string('early', 'kalvidassign', format_time($time)); + return ' ('.$timetext.')'; + } +} + +/** + * Alerts teachers by email of new or changed assignments that need grading + * + * First checks whether the option to email teachers is set for this assignment. + * Sends an email to ALL teachers in the course (or in the group if using separate groups). + * Uses the methods kalvidassign_email_teachers_text() and kalvidassign_email_teachers_html() to construct the content. + * + * @global object + * @global object + * @param object $cm Kaltura video assignment course module object. + * @param string $name Name of the video assignment instance. + * @param object $submission The submission that has changed. + * @param object $context The context object. + * @return void + */ +function kalvidassign_email_teachers($cm, $name, $submission, $context) { + global $CFG, $DB; + + $user = $DB->get_record('user', array('id'=>$submission->userid)); + + if ($teachers = kalvidassign_get_graders($cm, $user, $context)) { + + $strassignments = get_string('modulenameplural', 'kalvidassign'); + $strassignment = get_string('modulename', 'kalvidassign'); + $strsubmitted = get_string('submitted', 'kalvidassign'); + + foreach ($teachers as $teacher) { + $info = new stdClass(); + $info->username = fullname($user, true); + $info->assignment = format_string($name, true); + $info->url = $CFG->wwwroot.'/mod/kalvidassign/grade_submissions.php?cmid='.$cm->id; + $info->timeupdated = strftime('%c', $submission->timemodified); + $info->courseid = $cm->course; + $info->cmid = $cm->id; + + $postsubject = $strsubmitted.': '.$user->username.' -> '.$name; + $posttext = kalvidassign_email_teachers_text($info); + $posthtml = ($teacher->mailformat == 1) ? kalvidassign_email_teachers_html($info) : ''; + + $eventdata = new stdClass(); + $eventdata->modulename = 'kalvidassign'; + $eventdata->userfrom = $user; + $eventdata->userto = $teacher; + $eventdata->subject = $postsubject; + $eventdata->fullmessage = $posttext; + $eventdata->fullmessageformat = FORMAT_PLAIN; + $eventdata->fullmessagehtml = $posthtml; + $eventdata->smallmessage = $postsubject; + + $eventdata->name = 'kalvidassign_updates'; + $eventdata->component = 'mod_kalvidassign'; + $eventdata->notification = 1; + $eventdata->contexturl = $info->url; + $eventdata->contexturlname = $info->assignment; + + message_send($eventdata); + } + } +} + +/** + * Returns a list of teachers that should be grading given submission. + * + * @param object $cm Kaltura video assignment course module object. + * @param object $user The Moodle user object. + * @param object $context A context object. + * @return array An array of grading userids + */ +function kalvidassign_get_graders($cm, $user, $context) { + // Potential graders. + $potgraders = get_users_by_capability($context, 'mod/kalvidassign:gradesubmission', '', '', '', '', '', '', false, false); + + $graders = array(); + // Separate groups are being used. + if (groups_get_activity_groupmode($cm) == SEPARATEGROUPS) { + // Try to find all groups. + if ($groups = groups_get_all_groups($cm->course, $user->id)) { + foreach ($groups as $group) { + foreach ($potgraders as $t) { + if ($t->id == $user->id) { + continue; // do not send self + } + if (groups_is_member($group->id, $t->id)) { + $graders[$t->id] = $t; + } + } + } + } else { + // user not in group, try to find graders without group + foreach ($potgraders as $t) { + if ($t->id == $user->id) { + // do not send self. + continue; + } + // ugly hack. + if (!groups_get_all_groups($cm->course, $t->id)) { + $graders[$t->id] = $t; + } + } + } + } else { + foreach ($potgraders as $t) { + if ($t->id == $user->id) { + // do not send self. + continue; + } + $graders[$t->id] = $t; + } + } + return $graders; +} + +/** + * Creates the text content for emails to teachers + * + * @param $info object The info used by the 'emailteachermail' language string + * @return string + */ +function kalvidassign_email_teachers_text($info) { + global $DB; + + $param = array('id' => $info->courseid); + $course = $DB->get_record('course', $param); + $posttext = ''; + + if (!empty($course)) { + $posttext = format_string($course->shortname, true, $course->id).' -> '.get_string('modulenameplural', 'kalvidassign').' -> '; + $posttext .= format_string($info->assignment, true, $course->id)."\n"; + $posttext .= '---------------------------------------------------------------------'."\n"; + $posttext .= get_string("emailteachermail", "kalvidassign", $info)."\n"; + $posttext .= "\n---------------------------------------------------------------------\n"; + } + + return $posttext; +} + +/** + * Creates the html content for emails to teachers + * + * @param object $info The info used by the 'emailteachermailhtml' language string + * @return string + */ +function kalvidassign_email_teachers_html($info) { + global $CFG, $DB; + + $param = array('id' => $info->courseid); + $course = $DB->get_record('course', $param); + $posthtml = ''; + + if (!empty($course)) { + $posthtml .= html_writer::start_tag('p'); + $attr = array('href' => new moodle_url('/course/view.php', array('id' => $course->id))); + $posthtml .= html_writer::tag('a', format_string($course->shortname, true, $course->id), $attr); + $posthtml .= '->'; + $attr = array('href' => new moodle_url('/mod/kalvidassign/view.php', array('id' => $info->cmid))); + $posthtml .= html_writer::tag('a', format_string($info->assignment, true, $course->id), $attr); + $posthtml .= html_writer::end_tag('p'); + $posthtml .= html_writer::start_tag('hr'); + $posthtml .= html_writer::tag('p', get_string('emailteachermailhtml', 'kalvidassign', $info)); + $posthtml .= html_writer::end_tag('hr'); + } + return $posthtml; +} + +/** + * This function retrieves a list of enrolled users with the capability to submit to the activity. + * @return array An array of user objects. + */ +function kalvidassign_get_assignment_students($cm) { + $context = context_module::instance($cm->id); + $users = get_enrolled_users($context, 'mod/kalvidassign:submit', 0, 'u.id'); + + return $users; +} \ No newline at end of file diff --git a/mod/kalvidassign/lti_launch.php b/mod/kalvidassign/lti_launch.php new file mode 100644 index 0000000000000..d312fbbd2a617 --- /dev/null +++ b/mod/kalvidassign/lti_launch.php @@ -0,0 +1,67 @@ +. + +/** + * Kaltura video assignment LTI launch script. + * + * @package mod_kalvidassign + * @author Remote-Learner.net Inc + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + * @copyright (C) 2014 Remote Learner.net Inc http://www.remote-learner.net + */ + +require_once(dirname(dirname(dirname(__FILE__))).'/config.php'); +require_once(dirname(dirname(dirname(__FILE__))).'/local/kaltura/locallib.php'); + +global $USER; + +require_login(); +$courseid = required_param('courseid', PARAM_INT); +$cmid = required_param('cmid', PARAM_INT); +$height = required_param('height', PARAM_INT); +$width = required_param('width', PARAM_INT); +$withblocks = optional_param('withblocks', 0, PARAM_INT); +$source = optional_param('source', '', PARAM_URL); + +$context = context_course::instance($courseid); +require_capability('mod/kalvidassign:submit', $context); +$course = get_course($courseid); + +$launch = array(); +$launch['id'] = 1; +$launch['cmid'] = $cmid; +$launch['title'] = 'Kaltura video assignment'; +$launch['module'] = KAF_BROWSE_EMBED_MODULE; +$launch['course'] = $course; +$launch['width'] = $width; +$launch['height'] = $height; +$launch['custom_publishdata'] = ''; + +$source = $source = local_kaltura_add_kaf_uri_token($source); + +if (false === local_kaltura_url_contains_configured_hostname($source) && !empty($source)) { + echo get_string('invalid_source_parameter', 'mod_kalvidres'); + die; +} else { + $launch['source'] = urldecode($source); +} + +if (local_kaltura_validate_browseembed_required_params($launch)) { + $content = local_kaltura_request_lti_launch($launch, $withblocks); + echo $content; +} else { + echo get_string('invalid_launch_parameters', 'mod_kalvidassign'); +} \ No newline at end of file diff --git a/mod/kalvidassign/mod_form.php b/mod/kalvidassign/mod_form.php new file mode 100644 index 0000000000000..fd767cc1b1764 --- /dev/null +++ b/mod/kalvidassign/mod_form.php @@ -0,0 +1,78 @@ +. + +/** + * Kaltura video assignment mod_form script. + * + * @package mod_kalvidassign + * @author Remote-Learner.net Inc + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + * @copyright (C) 2014 Remote Learner.net Inc http://www.remote-learner.net + */ + +if (!defined('MOODLE_INTERNAL')) { + die('Direct access to this script is forbidden.'); +} + +require_once(dirname(dirname(dirname(__FILE__))).'/course/moodleform_mod.php'); + +class mod_kalvidassign_mod_form extends moodleform_mod { + /** + * Definition function for the form. + */ + public function definition() { + global $CFG, $COURSE; + + $mform =& $this->_form; + + $mform->addElement('hidden', 'course', $COURSE->id); + + $mform->addElement('header', 'general', get_string('general', 'form')); + + $mform->addElement('text', 'name', get_string('name', 'kalvidassign'), array('size' => '64')); + + if (!empty($CFG->formatstringstriptags)) { + $mform->setType('name', PARAM_TEXT); + } else { + $mform->setType('name', PARAM_CLEANHTML); + } + $mform->addRule('name', null, 'required', null, 'client'); + + $this->add_intro_editor(false); + + $mform->addElement('date_time_selector', 'timeavailable', get_string('availabledate', 'kalvidassign'), array('optional' => true)); + $mform->setDefault('timeavailable', time()); + $mform->addElement('date_time_selector', 'timedue', get_string('duedate', 'kalvidassign'), array('optional' => true)); + $mform->setDefault('timedue', time()+7*24*3600); + + $ynoptions = array( 0 => get_string('no'), 1 => get_string('yes')); + + $mform->addElement('select', 'preventlate', get_string('preventlate', 'kalvidassign'), $ynoptions); + $mform->setDefault('preventlate', 0); + + $mform->addElement('select', 'resubmit', get_string('allowdeleting', 'kalvidassign'), $ynoptions); + $mform->addHelpButton('resubmit', 'allowdeleting', 'kalvidassign'); + $mform->setDefault('resubmit', 0); + + $mform->addElement('select', 'emailteachers', get_string('emailteachers', 'kalvidassign'), $ynoptions); + $mform->addHelpButton('emailteachers', 'emailteachers', 'kalvidassign'); + $mform->setDefault('emailteachers', 0); + + $this->standard_grading_coursemodule_elements(); + + $this->standard_coursemodule_elements(); + + $this->add_action_buttons(); + } +} \ No newline at end of file diff --git a/mod/kalvidassign/pix/icon.gif b/mod/kalvidassign/pix/icon.gif new file mode 100644 index 0000000000000000000000000000000000000000..550df5db8c43d778c40a1290f1d3a724d0e88133 GIT binary patch literal 128 zcmZ?wbhEHb6krfwSoEKPf#I&Pahh>jn(@rE0|yTL|Np+Z^fq{iV2gnAh z6kuRrcJ. + +/** + * Kaltura video assignment renderable script. + * + * @package mod_kalvidassign + * @author Remote-Learner.net Inc + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + * @copyright (C) 2014 Remote Learner.net Inc http://www.remote-learner.net + */ + +defined('MOODLE_INTERNAL') || die(); + +/** + * Renderable course index summary + */ +class kalvidassign_course_index_summary implements renderable { + /** @var array assignments A list of course module info and submission counts or statuses */ + public $assignments = array(); + /** @var boolean usesections Does this course format support sections? */ + public $usesections = false; + /** @var string courseformat The current course format name */ + public $courseformatname = ''; + + /** + * constructor + * + * @param $usesections boolean True if this course format uses sections + * @param $courseformatname string The id of this course format + */ + public function __construct($usesections, $courseformatname) { + $this->usesections = $usesections; + $this->courseformatname = $courseformatname; + } + + /** + * Add a row of data to display on the course index page + * + * @param int $cmid The course module id for generating a link + * @param string $cmname The course module name for generating a link + * @param string $sectionname The name of the course section (only if $usesections is true) + * @param int $timedue The due date for the assignment - may be 0 if no duedate + * @param string $submissioninfo A string with either the number of submitted assignments, or the + * status of the current users submission depending on capabilities. + * @param string $gradeinfo The current users grade if they have been graded and it is not hidden. + */ + public function add_assign_info($cmid, $cmname, $sectionname, $timedue, $submissioninfo, $gradeinfo) { + $this->assignments[] = array( + 'cmid' => $cmid, + 'cmname' => $cmname, + 'sectionname' => $sectionname, + 'timedue' => $timedue, + 'submissioninfo' => $submissioninfo, + 'gradeinfo' => $gradeinfo + ); + } +} diff --git a/mod/kalvidassign/renderer.php b/mod/kalvidassign/renderer.php new file mode 100644 index 0000000000000..eb1dfe321febc --- /dev/null +++ b/mod/kalvidassign/renderer.php @@ -0,0 +1,1127 @@ +. + +/** + * Kaltura video assignment renderer script. + * + * @package mod_kalvidassign + * @author Remote-Learner.net Inc + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + * @copyright (C) 2014 Remote Learner.net Inc http://www.remote-learner.net + */ + +if (!defined('MOODLE_INTERNAL')) { + die('Direct access to this script is forbidden.'); +} + +require_once(dirname(dirname(dirname(__FILE__))).'/lib/tablelib.php'); +require_once(dirname(dirname(dirname(__FILE__))).'/lib/moodlelib.php'); +require_once(dirname(dirname(dirname(__FILE__))).'/local/kaltura/locallib.php'); + +/** + * Table class for displaying video submissions for grading + */ +class submissions_table extends table_sql { + /* @var bool Set to true if a quick grade form needs to be rendered. */ + public $quickgrade; + /* @var object An object returned from @see grade_get_grades(). */ + public $gradinginfo; + /* @var int The course module instnace id. */ + public $cminstance; + /* @var int The maximum grade point set for the activity instance. */ + public $grademax; + /* @var int The number of columns of the quick grade textarea element. */ + public $cols = 20; + /* @var int The number of rows of the quick grade textarea element. */ + public $rows = 4; + /* @var string The first initial of the first name filter. */ + public $tifirst; + /* @var string The first initial of the last name filter. */ + public $tilast; + /* @var int The current page number. */ + public $page; + + /** + * Constructor function for the submissions table class. + * @param int $uniqueid Unique id. + * @param int $cm Course module id. + * @param object $gradinginfo An object returned from @see grade_get_grades(). + * @param bool $quickgrade Set to true if a quick grade form needs to be rendered. + * @param string $tifirst The first initial of the first name filter. + * @param string $tilast The first initial of the first name filter. + * @param int $page The current page number. + */ + public function __construct($uniqueid, $cm, $gradinginfo, $quickgrade = false, $tifirst = '', $tilast = '', $page = 0) { + global $DB; + + parent::__construct($uniqueid); + + $this->quickgrade = $quickgrade; + $this->gradinginfo = $gradinginfo; + + $instance = $DB->get_record('kalvidassign', array('id' => $cm->instance), 'id,grade'); + + $instance->cmid = $cm->id; + + $this->cminstance = $instance; + + $this->grademax = $this->gradinginfo->items[0]->grademax; + + $this->tifirst = $tifirst; + $this->tilast = $tilast; + $this->page = $page; + } + + /** + * The function renders the picture column. + * @param object $data information about the current row being rendered. + * @return string HTML markup. + */ + public function col_picture($data) { + global $OUTPUT; + + $user = new stdClass(); + $user->id = $data->id; + $user->picture = $data->picture; + $user->imagealt = $data->imagealt; + $user->firstname = $data->firstname; + $user->lastname = $data->lastname; + $user->email = $data->email; + $user->alternatename = $data->alternatename; + $user->middlename = $data->middlename; + $user->firstnamephonetic = $data->firstnamephonetic; + $user->lastnamephonetic = $data->lastnamephonetic; + + $output = $OUTPUT->user_picture($user); + + $attr = array('type' => 'hidden', 'name' => 'users['.$data->id.']', 'value' => $data->id); + $output .= html_writer::empty_tag('input', $attr); + + return $output; + } + + /** + * The function renders the select grade column. + * @param object $data information about the current row being rendered. + * @return string HTML markup. + */ + public function col_selectgrade($data) { + global $CFG; + + $output = ''; + $finalgrade = false; + + if (array_key_exists($data->id, $this->gradinginfo->items[0]->grades)) { + + $finalgrade = $this->gradinginfo->items[0]->grades[$data->id]; + + if ($CFG->enableoutcomes) { + + $finalgrade->formatted_grade = $this->gradinginfo->items[0]->grades[$data->id]->str_grade; + } else { + + // Equation taken from mod/assignment/lib.php display_submissions() + $finalgrade->formatted_grade = round($finalgrade->grade, 2).' / '.round($this->grademax, 2); + } + } + + if (!is_bool($finalgrade) && ($finalgrade->locked || $finalgrade->overridden) ) { + + $locked_overridden = 'locked'; + + if ($finalgrade->overridden) { + $locked_overridden = 'overridden'; + } + $attr = array('id' => 'g'.$data->id, 'class' => $locked_overridden); + + $output = html_writer::tag('div', $finalgrade->formatted_grade, $attr); + + } else if (!empty($this->quickgrade)) { + + $attributes = array(); + + $grades_menu = make_grades_menu($this->cminstance->grade); + + $default = array(-1 => get_string('nograde')); + + $grade = null; + + if (!empty($data->timemarked)) { + $grade = $data->grade; + } + + $output = html_writer::select($grades_menu, 'menu['.$data->id.']', $grade, $default, $attributes); + + } else { + + $output = get_string('nograde'); + + if (!empty($data->timemarked)) { + $output = $this->display_grade($data->grade); + } + } + + return $output; + } + + /** + * The function renders the submissions comment column. + * @param object $data information about the current row being rendered. + * @return string HTML markup. + */ + public function col_submissioncomment($data) { + global $OUTPUT; + + $output = ''; + $finalgrade = false; + + if (array_key_exists($data->id, $this->gradinginfo->items[0]->grades)) { + $finalgrade = $this->gradinginfo->items[0]->grades[$data->id]; + } + + if ( (!is_bool($finalgrade) && ($finalgrade->locked || $finalgrade->overridden)) ) { + + $output = shorten_text(strip_tags($data->submissioncomment), 15); + + } else if (!empty($this->quickgrade)) { + + $param = array( + 'id' => 'comments_'.$data->submitid, + 'rows' => $this->rows, + 'cols' => $this->cols, + 'name' => 'submissioncomment['.$data->id.']'); + + $output .= html_writer::start_tag('textarea', $param); + $output .= $data->submissioncomment; + $output .= html_writer::end_tag('textarea'); + + } else { + $output = shorten_text(strip_tags($data->submissioncomment), 15); + } + + return $output; + } + + /** + * The function renders the grade marked column. + * @param object $data information about the current row being rendered. + * @return string HTML markup. + */ + public function col_grademarked($data) { + + $output = ''; + + if (!empty($data->timemarked)) { + $output = userdate($data->timemarked); + } + + return $output; + } + + /** + * The function renders the time modified column. + * @param object $data information about the current row being rendered. + * @return string HTML markup. + */ + public function col_timemodified($data) { + $data->source = local_kaltura_add_kaf_uri_token($data->source); + $attr = array('name' => 'media_submission'); + $output = html_writer::start_tag('div', $attr); + + $attr = array('id' => 'ts'.$data->id); + + $date_modified = $data->timemodified; + $date_modified = is_null($date_modified) || empty($data->timemodified) ? '' : userdate($date_modified); + + $output .= html_writer::tag('div', $date_modified, $attr); + + $output .= html_writer::empty_tag('br'); + + // If the metadata property is empty only display an anchor tag. Otherwise display a thumbnail image. + if (!empty($data->entry_id)) { + + // Decode the additional video metadata. + $metadata = local_kaltura_decode_object_for_storage($data->metadata); + + // Check if the metadata thumbnailurl property is empty. If not then display the thumbnail. Otherwise display a text link. + if (!empty($metadata->thumbnailurl) && !is_null($metadata->thumbnailurl)) { + + $output .= html_writer::start_tag('center'); + $metadata = local_kaltura_decode_object_for_storage($data->metadata); + + $attr = array('src' => $metadata->thumbnailurl, 'class' => 'kalsubthumb'); + $thumbnail = html_writer::empty_tag('img', $attr); + + $attr = array('name' => 'submission_source', 'href' => local_kaltura_add_kaf_uri_token($data->source), 'class' => 'kalsubthumbanchor'); + $output .= html_writer::tag('a', $thumbnail, $attr); + $output .= html_writer::end_tag('center'); + + } else { + + $output .= html_writer::start_tag('center'); + $attr = array('name' => 'submission_source', 'href' => local_kaltura_add_kaf_uri_token($data->source), 'class' => 'kalsubanchor'); + $output .= html_writer::tag('a', get_string('viewsubmission', 'kalvidassign'), $attr); + $output .= html_writer::end_tag('center'); + } + } + + // Display hidden elements. + if (!empty($data->entry_id)) { + $attr = array('type' => 'hidden', 'name' => 'width', 'value' => $data->width); + $output .= html_writer::empty_tag('input', $attr); + + $attr = array('type' => 'hidden', 'name' => 'height', 'value' => $data->height); + $output .= html_writer::empty_tag('input', $attr); + } + + $output .= html_writer::end_tag('div'); + return $output; + } + + /** + * The function renders the grade column. + * @param object $data information about the current row being rendered. + * @return string HTML markup. + */ + public function col_grade($data) { + $finalgrade = false; + + if (array_key_exists($data->id, $this->gradinginfo->items[0]->grades)) { + $finalgrade = $this->gradinginfo->items[0]->grades[$data->id]; + } + + $finalgrade = (!is_bool($finalgrade)) ? $finalgrade->str_grade : '-'; + + $attr = array('id' => 'finalgrade_'.$data->id); + $output = html_writer::tag('span', $finalgrade, $attr); + + return $output; + } + + /** + * The function renders the time marked column. + * @param object $data information about the current row being rendered. + * @return string HTML markup. + */ + public function col_timemarked($data) { + $output = '-'; + + if (0 < $data->timemarked) { + + $attr = array('id' => 'tt'.$data->id); + $output = html_writer::tag('div', userdate($data->timemarked), $attr); + + } else { + $otuput = '-'; + } + + return $output; + } + + /** + * The function renders the submission status column. + * @param object $data information about the current row being rendered. + * @return string HTML markup. + */ + public function col_status($data) { + global $OUTPUT, $CFG; + + require_once(dirname(dirname(dirname(__FILE__))).'/lib/weblib.php'); + + $url = new moodle_url('/mod/kalvidassign/single_submission.php', array('cmid' => $this->cminstance->cmid, 'userid' => $data->id, 'sesskey' => sesskey())); + + if (!empty($this->tifirst)) { + $url->param('tifirst', $this->tifirst); + } + + if (!empty($this->tilast)) { + $url->param('tilast', $this->tilast); + } + + if (!empty($this->page)) { + $url->param('page', $this->page); + } + + $buttontext = ''; + if ($data->timemarked > 0) { + $class = 's1'; + $buttontext = get_string('update'); + } else { + $class = 's0'; + $buttontext = get_string('grade'); + } + + $attr = array('id' => 'up'.$data->id, + 'class' => $class); + + $output = html_writer::link($url, $buttontext, $attr); + + return $output; + } + + /** + * Return a grade in user-friendly form, whether it's a scale or not + * + * @global object + * @param mixed $grade + * @return string User-friendly representation of grade + * + * TODO: Move this to locallib.php + */ + public function display_grade($grade) { + global $DB; + + // Cache scales for each assignment - they might have different scales!! + static $kalscalegrades = array(); + + // Normal number + if ($this->cminstance->grade >= 0) { + if ($grade == -1) { + return '-'; + } else { + return $grade.' / '.$this->cminstance->grade; + } + + } else { + // Scale + if (empty($kalscalegrades[$this->cminstance->id])) { + + if ($scale = $DB->get_record('scale', array('id'=>-($this->cminstance->grade)))) { + + $kalscalegrades[$this->cminstance->id] = make_menu_from_list($scale->scale); + } else { + + return '-'; + } + } + + if (isset($kalscalegrades[$this->cminstance->id][$grade])) { + return $kalscalegrades[$this->cminstance->id][$grade]; + } + return '-'; + } + } +} + +/** + * This class renders the submission pages. + */ +class mod_kalvidassign_renderer extends plugin_renderer_base { + /** + * The function displays information about the assignment settings. + * @param object $data information about the current row being rendered. + * @return string HTML markup. + */ + public function display_mod_info($kalvideoobj, $context) { + global $DB; + $html = ''; + + if (!empty($kalvideoobj->timeavailable)) { + $html .= html_writer::start_tag('p'); + $html .= html_writer::tag('b', get_string('availabledate', 'kalvidassign').': '); + $html .= userdate($kalvideoobj->timeavailable); + $html .= html_writer::end_tag('p'); + } + + if (!empty($kalvideoobj->timedue)) { + $html .= html_writer::start_tag('p'); + $html .= html_writer::tag('b', get_string('duedate', 'kalvidassign').': '); + $html .= userdate($kalvideoobj->timedue); + $html .= html_writer::end_tag('p'); + } + + // Display a count of the numuber of submissions + if (has_capability('mod/kalvidassign:gradesubmission', $context)) { + + $param = array('vidassignid' => $kalvideoobj->id, 'timecreated' => 0, 'timemodified' => 0); + + $csql = "SELECT COUNT(*) + FROM {kalvidassign_submission} + WHERE vidassignid = :vidassignid + AND (timecreated > :timecreated OR timemodified > :timemodified) "; + + $count = $DB->count_records_sql($csql, $param); + + if ($count) { + $html .= html_writer::start_tag('p'); + $html .= get_string('numberofsubmissions', 'kalvidassign', $count); + $html .= html_writer::end_tag('p'); + } + + } + + return $html; + } + + /** + * This function returns HTML markup to render a form and submission buttons. + * @param object $cm A course module object. + * @param int $userid The current user id. + * @param bool $disablesubmit Set to true to disable the submit button. + * @return string Returns HTML markup. + */ + public function display_student_submit_buttons($cm, $userid, $disablesubmit = false) { + $html = ''; + + $target = new moodle_url('/mod/kalvidassign/submission.php'); + + $attr = array('method' => 'POST', 'action' => $target); + + $html .= html_writer::start_tag('form', $attr); + + $attr = array( + 'type' => 'hidden', + 'name' => 'entry_id', + 'id' => 'entry_id', + 'value' => '' + ); + + $html .= html_writer::empty_tag('input', $attr); + + $attr = array( + 'type' => 'hidden', + 'name' => 'cmid', + 'value' => $cm->id + ); + $html .= html_writer::empty_tag('input', $attr); + + $attr = array( + 'type' => 'hidden', + 'name' => 'sesskey', + 'value' => sesskey() + ); + $html .= html_writer::empty_tag('input', $attr); + + $html .= html_writer::empty_tag('input', array('type' => 'hidden', 'id' => 'width', 'name' => 'width', 'value' => 0)); + $html .= html_writer::empty_tag('input', array('type' => 'hidden', 'id' => 'height', 'name' => 'height', 'value' => 0)); + $html .= html_writer::empty_tag('input', array('type' => 'hidden', 'id' => 'source', 'name' => 'source', 'value' => 0)); + $html .= html_writer::empty_tag('input', array('type' => 'hidden', 'id' => 'metadata', 'name' => 'metadata', 'value' => 0)); + + $html .= html_writer::start_tag('center'); + + $attr = array( + 'type' => 'button', + 'id' => 'id_add_video', + 'name' => 'add_video', + 'value' => get_string('addvideo', 'kalvidassign') + ); + + if ($disablesubmit) { + $attr['disabled'] = 'disabled'; + } + + $html .= html_writer::empty_tag('input', $attr); + + $html .= ' '; + + $attr = array( + 'type' => 'submit', + 'name' => 'submit_video', + 'id' => 'submit_video', + 'disabled' => 'disabled', + 'value' => get_string('submitvideo', 'kalvidassign')); + + $html .= html_writer::empty_tag('input', $attr); + + $html .= html_writer::end_tag('center'); + + $html .= html_writer::end_tag('form'); + + return $html; + } + + /** + * This function returns HTML markup to render a form and submission buttons. + * @param object $cm A course module object. + * @param int $userid The current user id. + * @param bool $disablesubmit Set to true to disable the submit button. + * @return string Returns HTML markup. + */ + public function display_student_resubmit_buttons($cm, $userid, $disablesubmit = false) { + global $DB; + + $param = array('vidassignid' => $cm->instance, 'userid' => $userid); + $submissionrec = $DB->get_record('kalvidassign_submission', $param); + + $html = ''; + + $target = new moodle_url('/mod/kalvidassign/submission.php'); + + $attr = array('method' => 'POST', 'action' => $target); + + $html .= html_writer::start_tag('form', $attr); + + $attr = array( + 'type' => 'hidden', + 'name' => 'cmid', + 'value' => $cm->id + ); + + $html .= html_writer::empty_tag('input', $attr); + + $attr = array( + 'type' => 'hidden', + 'name' => 'entry_id', + 'id' => 'entry_id', + 'value' => $submissionrec->entry_id + ); + + $html .= html_writer::empty_tag('input', $attr); + + $attr = array( + 'type' => 'hidden', + 'name' => 'sesskey', + 'value' => sesskey() + ); + + $html .= html_writer::empty_tag('input', $attr); + + $html .= html_writer::empty_tag('input', array('type' => 'hidden', 'id' => 'width', 'name' => 'width', 'value' => 0)); + $html .= html_writer::empty_tag('input', array('type' => 'hidden', 'id' => 'height', 'name' => 'height', 'value' => 0)); + $html .= html_writer::empty_tag('input', array('type' => 'hidden', 'id' => 'source', 'name' => 'source', 'value' => 0)); + $html .= html_writer::empty_tag('input', array('type' => 'hidden', 'id' => 'metadata', 'name' => 'metadata', 'value' => 0)); + + $html .= html_writer::start_tag('center'); + + // Add submit and review buttons. + $attr = array( + 'type' => 'button', + 'name' => 'add_video', + 'id' => 'id_add_video', + 'value' => get_string('replacevideo', 'kalvidassign') + ); + + if ($disablesubmit) { + $attr['disabled'] = 'disabled'; + } + + $html .= html_writer::empty_tag('input', $attr); + + $html .= '  '; + + $attr = array( + 'type' => 'submit', + 'id' => 'submit_video', + 'name' => 'submit_video', + 'disabled' => 'disabled', + 'value' => get_string('submitvideo', 'kalvidassign') + ); + + if ($disablesubmit) { + $attr['disabled'] = 'disabled'; + } + + $html .= html_writer::empty_tag('input', $attr); + + $html .= html_writer::end_tag('center'); + + $html .= html_writer::end_tag('form'); + + return $html; + } + + /** + * This function returns HTML markup to render a form and submission buttons. + * @param object $cm A course module object. + * @param int $userid The current user id. + * @param bool $disablesubmit Set to true to disable the submit button. + * @return string Returns HTML markup. + */ + public function display_instructor_buttons($cm, $userid) { + $html = ''; + + $target = new moodle_url('/mod/kalvidassign/grade_submissions.php'); + + $attr = array('method' => 'POST', 'action' => $target); + + $html .= html_writer::start_tag('form', $attr); + + $html .= html_writer::start_tag('center'); + + $attr = array('type' => 'hidden', + 'name' => 'sesskey', + 'value' => sesskey()); + $html .= html_writer::empty_tag('input', $attr); + + $attr = array('type' => 'hidden', + 'name' => 'cmid', + 'value' => $cm->id); + $html .= html_writer::empty_tag('input', $attr); + + $attr = array('type' => 'submit', + 'name' => 'grade_submissions', + 'value' => get_string('gradesubmission', 'kalvidassign')); + + $html .= html_writer::empty_tag('input', $attr); + + $html .= html_writer::end_tag('center'); + + $html .= html_writer::end_tag('form'); + + return $html; + } + + /** + * This function returns HTML markup to render a the submissions table + * @param object $cm A course module object. + * @param int $groupfilter The group id to filter against. + * @param string $filter Filter users who have submitted, submitted and graded or everyone. + * @param int $perpage The number of submissions to display on a page. + * @param bool $quickgrade True if the quick grade table needs to be rendered, otherwsie false. + * @param string $tifirst The first initial of the first name. + * @param string $tilast The first initial of the last name. + * @param int $page The current page to render. + * @return string Returns HTML markup. + */ + public function display_submissions_table($cm, $groupfilter = 0, $filter = 'all', $perpage, $quickgrade = false, $tifirst = '', $tilast = '', $page = 0) { + + global $DB, $OUTPUT, $COURSE, $USER; + + // Get a list of users who have submissions and retrieve grade data for those users. + $users = kalvidassign_get_submissions($cm->instance, $filter); + + $define_columns = array('picture', 'fullname', 'selectgrade', 'submissioncomment', 'timemodified', 'timemarked', 'status', 'grade'); + + if (empty($users)) { + $users = array(); + } + + $entryids = array(); + + foreach ($users as $usersubmission) { + $entryids[$usersubmission->entry_id] = $usersubmission->entry_id; + } + + // Compare student who have submitted to the assignment with students who are + // currently enrolled in the course + $students = kalvidassign_get_assignment_students($cm); + $users = array_intersect(array_keys($users), array_keys($students)); + + if (empty($users)) { + echo html_writer::tag('p', get_string('noenrolledstudents', 'kalvidassign')); + return; + } + + $gradinginfo = grade_get_grades($cm->course, 'mod', 'kalvidassign', $cm->instance, $users); + + $where = ''; + switch ($filter) { + case KALASSIGN_SUBMITTED: + $where = ' kvs.timemodified > 0 AND '; + break; + case KALASSIGN_REQ_GRADING: + $where = ' kvs.timemarked < kvs.timemodified AND '; + break; + } + + // Determine logic needed for groups mode + $param = array(); + $groupswhere = ''; + $groupscolumn = ''; + $groupsjoin = ''; + $groups = array(); + $groupids = ''; + $context = context_course::instance($COURSE->id); + + // Get all groups that the user belongs to, check if the user has capability to access all groups + if (!has_capability('moodle/site:accessallgroups', $context, $USER->id)) { + $groups = groups_get_all_groups($COURSE->id, $USER->id); + + if (empty($groups)) { + $message = get_string('nosubmissions', 'kalvidassign'); + echo html_writer::tag('center', $message); + return; + } + } else { + $groups = groups_get_all_groups($COURSE->id); + } + + // Create a comma separated list of group ids + foreach ($groups as $group) { + $groupids .= $group->id.','; + } + + $groupids = rtrim($groupids, ','); + + switch (groups_get_activity_groupmode($cm)) { + case NOGROUPS: + // No groups, do nothing + break; + case SEPARATEGROUPS: + // If separate groups, but displaying all users then we must display only users + // who are in the same group as the current user + if (0 == $groupfilter) { + $groupscolumn = ', gm.groupid '; + $groupsjoin = ' RIGHT JOIN {groups_members} gm ON gm.userid = u.id RIGHT JOIN {groups} g ON g.id = gm.groupid '; + + $param['courseid'] = $cm->course; + $groupswhere .= ' AND g.courseid = :courseid '; + + $param['groupid'] = $groupfilter; + $groupswhere .= ' AND g.id IN ('.$groupids.') '; + + } + + case VISIBLEGROUPS: + // if visible groups but displaying a specific group then we must display users within + // that group, if displaying all groups then display all users in the course + if (0 != $groupfilter) { + + $groupscolumn = ', gm.groupid '; + $groupsjoin = ' RIGHT JOIN {groups_members} gm ON gm.userid = u.id RIGHT JOIN {groups} g ON g.id = gm.groupid '; + + $param['courseid'] = $cm->course; + $groupswhere .= ' AND g.courseid = :courseid '; + + $param['groupid'] = $groupfilter; + $groupswhere .= ' AND gm.groupid = :groupid '; + + } + break; + } + + $table = new submissions_table('kal_vid_submit_table', $cm, $gradinginfo, $quickgrade, $tifirst, $tilast, $page); + + // In order for the sortable first and last names to work. User ID has to be the first column returned and must be + // returned as id. Otherwise the table will display links to user profiles that are incorrect or do not exist + $columns = user_picture::fields('u').', kvs.id AS submitid, '; + $columns .= ' kvs.grade, kvs.submissioncomment, kvs.timemodified, kvs.entry_id, kvs.source, kvs.width, kvs.height, kvs.timemarked, '; + $columns .= 'kvs.metadata, 1 AS status, 1 AS selectgrade'.$groupscolumn; + $where .= ' u.deleted = 0 AND u.id IN ('.implode(',', $users).') '.$groupswhere; + + $param['instanceid'] = $cm->instance; + $from = "{user} u LEFT JOIN {kalvidassign_submission} kvs ON kvs.userid = u.id AND kvs.vidassignid = :instanceid ".$groupsjoin; + + $baseurl = new moodle_url('/mod/kalvidassign/grade_submissions.php', array('cmid' => $cm->id)); + + $col1 = get_string('fullname', 'kalvidassign'); + $col2 = get_string('grade', 'kalvidassign'); + $col3 = get_string('submissioncomment', 'kalvidassign'); + $col4 = get_string('timemodified', 'kalvidassign'); + $col5 = get_string('grademodified', 'kalvidassign'); + $col6 = get_string('status', 'kalvidassign'); + $col7 = get_string('finalgrade', 'kalvidassign'); + + $table->set_sql($columns, $from, $where, $param); + $table->define_baseurl($baseurl); + $table->collapsible(true); + + $table->define_columns($define_columns); + $table->define_headers(array('', $col1, $col2, $col3, $col4, $col5, $col6, $col7)); + + echo html_writer::start_tag('center'); + + $attributes = array('action' => new moodle_url('grade_submissions.php'), 'id' => 'fastgrade', 'method' => 'post'); + echo html_writer::start_tag('form', $attributes); + + $attributes = array('type' => 'hidden', 'name' => 'cmid', 'value' => $cm->id); + echo html_writer::empty_tag('input', $attributes); + + $attributes['name'] = 'mode'; + $attributes['value'] = 'fastgrade'; + + echo html_writer::empty_tag('input', $attributes); + + $attributes['name'] = 'sesskey'; + $attributes['value'] = sesskey(); + + echo html_writer::empty_tag('input', $attributes); + + $table->out($perpage, true); + + if ($quickgrade) { + $attributes = array('type' => 'submit', 'name' => 'save_feedback', 'value' => get_string('savefeedback', 'kalvidassign')); + + echo html_writer::empty_tag('input', $attributes); + } + + echo html_writer::end_tag('form'); + + echo html_writer::end_tag('center'); + + echo html_writer::empty_tag('input', array('id' => 'closeltipanel', 'type' => 'hidden')); + } + + /** + * Displays the assignments listing table. + * + * @param object $course The course odject. + */ + public function display_kalvidassignments_table($course) { + global $CFG, $DB, $PAGE, $OUTPUT, $USER; + + echo html_writer::start_tag('center'); + + $strplural = get_string('modulenameplural', 'kalvidassign'); + + if (!$cms = get_coursemodules_in_course('kalvidassign', $course->id, 'm.timedue')) { + echo get_string('noassignments', 'mod_kalvidassign'); + echo $OUTPUT->continue_button($CFG->wwwroot.'/course/view.php?id='.$course->id); + } + + $strsectionname = get_string('sectionname', 'format_'.$course->format); + $usesections = course_format_uses_sections($course->format); + $modinfo = get_fast_modinfo($course); + + if ($usesections) { + $sections = $modinfo->get_section_info_all(); + } + $courseindexsummary = new kalvidassign_course_index_summary($usesections, $strsectionname); + + $timenow = time(); + $currentsection = ''; + $assignmentcount = 0; + + foreach ($modinfo->instances['kalvidassign'] as $cm) { + if (!$cm->uservisible) { + continue; + } + + $assignmentcount++; + $timedue = $cms[$cm->id]->timedue; + + $sectionname = ''; + if ($usesections && $cm->sectionnum) { + $sectionname = get_section_name($course, $sections[$cm->sectionnum]); + } + + $submitted = ''; + $context = context_module::instance($cm->id); + + if (has_capability('mod/kalvidassign:gradesubmission', $context)) { + $submitted = $DB->count_records('kalvidassign_submission', array('vidassignid' => $cm->instance)); + } else if (has_capability('mod/kalvidassign:submit', $context)) { + if ($DB->count_records('kalvidassign_submission', array('vidassignid' => $cm->instance, 'userid' => $USER->id)) > 0) { + $submitted = get_string('submitted', 'mod_kalvidassign'); + } else { + $submitted = get_string('nosubmission', 'mod_kalvidassign'); + } + } + + $gradinginfo = grade_get_grades($course->id, 'mod', 'kalvidassign', $cm->instance, $USER->id); + if (isset($gradinginfo->items[0]->grades[$USER->id]) && !$gradinginfo->items[0]->grades[$USER->id]->hidden ) { + $grade = $gradinginfo->items[0]->grades[$USER->id]->str_grade; + } else { + $grade = '-'; + } + + $courseindexsummary->add_assign_info($cm->id, $cm->name, $sectionname, $timedue, $submitted, $grade); + } + + if ($assignmentcount > 0) { + $pagerenderer = $PAGE->get_renderer('mod_kalvidassign'); + echo $pagerenderer->render($courseindexsummary); + } + + echo html_writer::end_tag('center'); + } + + /** + * This function displays HTML markup needed by the ltipanel YUI module to display a popup window containing the LTI launch. + * @param object $submission A Kaltura video assignment video submission table object. + * @param int $courseid The course id. + * @param int $cmid The ccourse module id. + * @return string HTML markup. + */ + public function display_video_container_markup($submission, $courseid, $cmid) { + $source = new moodle_url('/local/kaltura/pix/vidThumb.png'); + $alt = get_string('video_thumbnail', 'mod_kalvidassign'); + $title = get_string('video_thumbnail', 'mod_kalvidassign'); + $iframe = ''; + $url = null; + + $attr = array( + 'id' => 'video_thumbnail', + 'src' => $source->out(), + 'alt' => $alt, + 'title' => $title + ); + + // If the submission object contains a source URL then display the video as part of an LTI launch. + if (!empty($submission->source)) { + $attr['style'] = 'display:none'; + + $params = array( + 'courseid' => $courseid, + 'height' => $submission->height, + 'width' => $submission->width, + 'withblocks' => 0, + 'source' => local_kaltura_add_kaf_uri_token($submission->source), + 'cmid' => $cmid + ); + $url = new moodle_url('/mod/kalvidassign/lti_launch.php', $params); + } + + $output = html_writer::empty_tag('img', $attr); + + $params = array( + 'id' => 'contentframe', + 'src' => ($url instanceof moodle_url) ? $url->out(false) : '', + 'allowfullscreen' => "true", + 'webkitallowfullscreen' => "true", + 'mozallowfullscreen' => "true", + 'height' => '100%', + 'width' => !empty($submission->width) ? $submission->width : '' + ); + + if (empty($submission->source)) { + $params['style'] = 'display:none'; + } + + $iframe = html_writer::tag('iframe', '', $params); + + $output .= html_writer::tag('center', $iframe); + $output .= html_writer::empty_tag('input', array('type' => 'hidden', 'id' => 'closeltipanel', 'value' => 0)); + + return $output; + } + + /** + * Display the feedback to the student + * + * This default method prints the teacher picture and name, date when marked, + * grade and teacher submissioncomment. + * + * @global object + * @global object + * @global object + * @param object $submission The submission object or NULL in which case it will be loaded + * + * TODO: correct documentation for this function + */ + public function display_grade_feedback($kalvidassign, $context) { + global $USER, $CFG, $DB, $OUTPUT; + + require_once($CFG->libdir.'/gradelib.php'); + + // Check if the user is enrolled to the coruse and can submit to the assignment + if (!is_enrolled($context, $USER, 'mod/kalvidassign:submit')) { + // can not submit assignments -> no feedback + return; + } + + // Get the user's submission obj + $gradinginfo = grade_get_grades($kalvidassign->course, 'mod', 'kalvidassign', $kalvidassign->id, $USER->id); + + $item = $gradinginfo->items[0]; + $grade = $item->grades[$USER->id]; + + // Hidden or error. + if ($grade->hidden or $grade->grade === false) { + return; + } + + // Nothing to show yet. + if ($grade->grade === null and empty($grade->str_feedback)) { + return; + } + + $gradedate = $grade->dategraded; + $gradeby = $grade->usermodified; + + // We need the teacher info + if (!$teacher = $DB->get_record('user', array('id'=>$gradeby))) { + print_error('cannotfindteacher'); + } + + // Print the feedback + echo $OUTPUT->heading(get_string('feedbackfromteacher', 'assignment', fullname($teacher))); + + echo ''; + + echo ''; + echo ''; + echo ''; + echo ''; + + echo ''; + echo ''; + echo ''; + + echo ''; + } + + /** + * Render a course index summary. + * + * @param kalvidassign_course_index_summary $indexsummary Structure for index summary. + * @return string HTML for assignments summary table + */ + public function render_kalvidassign_course_index_summary(kalvidassign_course_index_summary $indexsummary) { + $strplural = get_string('modulenameplural', 'kalvidassign'); + $strsectionname = $indexsummary->courseformatname; + $strduedate = get_string('duedate', 'kalvidassign'); + $strsubmission = get_string('submission', 'kalvidassign'); + $strgrade = get_string('grade'); + + $table = new html_table(); + if ($indexsummary->usesections) { + $table->head = array ($strsectionname, $strplural, $strduedate, $strsubmission, $strgrade); + $table->align = array ('left', 'left', 'center', 'right', 'right'); + } else { + $table->head = array ($strplural, $strduedate, $strsubmission, $strgrade); + $table->align = array ('left', 'left', 'center', 'right'); + } + $table->data = array(); + + $currentsection = ''; + foreach ($indexsummary->assignments as $info) { + $params = array('id' => $info['cmid']); + $link = html_writer::link(new moodle_url('/mod/kalvidassign/view.php', $params), $info['cmname']); + $due = $info['timedue'] ? userdate($info['timedue']) : '-'; + + $printsection = ''; + if ($indexsummary->usesections) { + if ($info['sectionname'] !== $currentsection) { + if ($info['sectionname']) { + $printsection = $info['sectionname']; + } + if ($currentsection !== '') { + $table->data[] = 'hr'; + } + $currentsection = $info['sectionname']; + } + } + + if ($indexsummary->usesections) { + $row = array($printsection, $link, $due, $info['submissioninfo'], $info['gradeinfo']); + } else { + $row = array($link, $due, $info['submissioninfo'], $info['gradeinfo']); + } + $table->data[] = $row; + } + + return html_writer::table($table); + } +} \ No newline at end of file diff --git a/mod/kalvidassign/single_submission.php b/mod/kalvidassign/single_submission.php new file mode 100644 index 0000000000000..8d23288ce9be8 --- /dev/null +++ b/mod/kalvidassign/single_submission.php @@ -0,0 +1,222 @@ +. + +/** + * Kaltura video assignment single submission script. + * + * @package mod_kalvidassign + * @author Remote-Learner.net Inc + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + * @copyright (C) 2014 Remote Learner.net Inc http://www.remote-learner.net + */ + +require_once(dirname(dirname(dirname(__FILE__))).'/config.php'); +require_once(dirname(__FILE__).'/lib.php'); +require_once(dirname(__FILE__).'/renderer.php'); +require_once(dirname(__FILE__).'/locallib.php'); +require_once(dirname(__FILE__).'/single_submission_form.php'); + +$id = required_param('cmid', PARAM_INT); +$userid = required_param('userid', PARAM_INT); +$tifirst = optional_param('tifirst', '', PARAM_TEXT); +$tilast = optional_param('tilast', '', PARAM_TEXT); +$page = optional_param('page', 0, PARAM_INT); + + +list($cm, $course, $kalvidassignobj) = kalvidassign_validate_cmid($id); + +require_login($course->id, false, $cm); + +if (!confirm_sesskey()) { + print_error('confirmsesskeybad', 'error'); +} + +global $CFG, $PAGE, $OUTPUT, $USER; + +$url = new moodle_url('/mod/kalvidassign/single_submission.php'); +$url->params(array('cmid' => $id, 'userid' => $userid)); + +$context = context_module::instance($cm->id); + +$PAGE->set_url($url); +$PAGE->set_title(format_string($kalvidassignobj->name)); +$PAGE->set_heading($course->fullname); +$PAGE->set_context($context); + +$previousurl = new moodle_url('/mod/kalvidassign/grade_submissions.php', array('cmid' => $cm->id, 'tifirst' => $tifirst, 'tilast' => $tilast, 'page' => $page)); +$prevousurlstring = get_string('singlesubmissionheader', 'kalvidassign'); +$PAGE->navbar->add($prevousurlstring, $previousurl); +$PAGE->requires->css('/local/kaltura/styles.css'); + +require_capability('mod/kalvidassign:gradesubmission', $context); + +add_to_log($course->id, 'kalvidassign', 'view submission page', 'single_submission.php?id='.$cm->id, $kalvidassignobj->id, $cm->id); + +// Get a single submission record +$submission = kalvidassign_get_submission($cm->instance, $userid); + +// Get the submission user and the time they submitted the video +$param = array('id' => $userid); +$user = $DB->get_record('user', $param); + +$submissionuserpic = $OUTPUT->user_picture($user); +$submissionmodified = ' - '; +$datestringlate = ' - '; +$datestring = ' - '; + +$submissionuserinfo = fullname($user); + +// Get grading information +$gradinginfo = grade_get_grades($cm->course, 'mod', 'kalvidassign', $cm->instance, array($userid)); +$gradingdisabled = $gradinginfo->items[0]->grades[$userid]->locked || $gradinginfo->items[0]->grades[$userid]->overridden; + +// Get marking teacher information and the time the submission was marked +$teacher = ''; +if (!empty($submission)) { + $datestringlate = kalvidassign_display_lateness($submission->timemodified, $kalvidassignobj->timedue); + $submissionmodified = userdate($submission->timemodified); + $datestring = userdate($submission->timemarked)."  (".format_time(time() - $submission->timemarked).")"; + + $submissionuserinfo .= '
    '.$submissionmodified.$datestringlate; + + $param = array('id' => $submission->teacher); + $teacher = $DB->get_record('user', $param); +} + +$markingteacherpic = ''; +$markingtreacherinfo = ''; + +if (!empty($teacher)) { + $markingteacherpic = $OUTPUT->user_picture($teacher); + $markingtreacherinfo = fullname($teacher).'
    '.$datestring; +} + +// Setup form data +$formdata = new stdClass(); +$formdata->submissionuserpic = $submissionuserpic; +$formdata->submissionuserinfo = $submissionuserinfo; +$formdata->markingteacherpic = $markingteacherpic; +$formdata->markingteacherinfo = $markingtreacherinfo; +$formdata->grading_info = $gradinginfo; +$formdata->gradingdisabled = $gradingdisabled; +$formdata->cm = $cm; +$formdata->context = $context; +$formdata->cminstance = $kalvidassignobj; +$formdata->submission = $submission; +$formdata->userid = $userid; +$formdata->enableoutcomes = $CFG->enableoutcomes; +$formdata->submissioncomment_editor = array('text' => $submission->submissioncomment, 'format' => FORMAT_HTML); +$formdata->tifirst = $tifirst; +$formdata->tilast = $tilast; +$formdata->page = $page; + +$submissionform = new kalvidassign_singlesubmission_form(null, $formdata); + +if ($submissionform->is_cancelled()) { + redirect($previousurl); +} else if ($submitted_data = $submissionform->get_data()) { + + if (!isset($submitted_data->cancel) && isset($submitted_data->xgrade) && isset($submitted_data->submissioncomment_editor)) { + + // Flag used when an instructor is about to grade a user who does not have + // a submittion (see KALDEV-126) + $updategrade = true; + + if ($submission) { + + $submissionchanged = strcmp($submission->submissioncomment, $submitted_data->submissioncomment_editor['text']); + if ($submission->grade == $submitted_data->xgrade && $submissionchanged) { + + $updategrade = false; + } else { + $submission->grade = $submitted_data->xgrade; + $submission->submissioncomment = $submitted_data->submissioncomment_editor['text']; + $submission->format = $submitted_data->submissioncomment_editor['format']; + $submission->timemarked = time(); + $submission->teacher = $USER->id; + $DB->update_record('kalvidassign_submission', $submission); + } + + } else { + + // Check for unchanged values + if ('-1' == $submitted_data->xgrade && empty($submitted_data->submissioncomment_editor['text'])) { + + $updategrade = false; + } else { + + $submission = new stdClass(); + $submission->vidassignid = $cm->instance; + $submission->userid = $userid; + $submission->grade = $submitted_data->xgrade; + $submission->submissioncomment = $submitted_data->submissioncomment_editor['text']; + $submission->format = $submitted_data->submissioncomment_editor['format']; + $submission->timemarked = time(); + $submission->teacher = $USER->id; + + $DB->insert_record('kalvidassign_submission', $submission); + } + } + + if ($updategrade) { + $kalvidassignobj->cmidnumber = $cm->idnumber; + + $gradeobj = kalvidassign_get_submission_grade_object($kalvidassignobj->id, $userid); + + kalvidassign_grade_item_update($kalvidassignobj, $gradeobj); + + // Add to log. + add_to_log($kalvidassignobj->course, 'kalvidassign', 'update grades', 'grade_submissions.php?cmid='.$cm->id, $cm->id); + + } + + // Handle outcome data + if (!empty($CFG->enableoutcomes)) { + require_once($CFG->libdir.'/gradelib.php'); + + $data = array(); + $gradinginfo = grade_get_grades($course->id, 'mod', 'kalvidassign', $kalvidassignobj->id, $userid); + + if (!empty($gradinginfo->outcomes)) { + foreach ($gradinginfo->outcomes as $n => $old) { + $name = 'outcome_'.$n; + if (isset($submitted_data->{$name}[$userid]) and + $old->grades[$userid]->grade != $submitted_data->{$name}[$userid]) { + + $data[$n] = $submitted_data->{$name}[$userid]; + } + } + } + + if (count($data) > 0) { + grade_update_outcomes('mod/kalvidassign', $course->id, 'mod', 'kalvidassign', $kalvidassignobj->id, $userid, $data); + } + } + + } + + redirect($previousurl); + +} + +$pageheading = get_string('gradesubmission', 'kalvidassign'); + +echo $OUTPUT->header(); +echo $OUTPUT->heading($pageheading.': '.fullname($user)); + +$submissionform->set_data($formdata); + +$submissionform->display(); + +echo $OUTPUT->footer(); \ No newline at end of file diff --git a/mod/kalvidassign/single_submission_form.php b/mod/kalvidassign/single_submission_form.php new file mode 100644 index 0000000000000..bd24bb35c7fb1 --- /dev/null +++ b/mod/kalvidassign/single_submission_form.php @@ -0,0 +1,209 @@ +. + +/** + * Kaltura video assignment single submission form. + * + * @package mod_kalvidassign + * @author Remote-Learner.net Inc + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + * @copyright (C) 2014 Remote Learner.net Inc http://www.remote-learner.net + */ + +if (!defined('MOODLE_INTERNAL')) { + die('Direct access to this script is forbidden.'); +} + +require_once(dirname(dirname(dirname(__FILE__))).'/course/moodleform_mod.php'); + +class kalvidassign_singlesubmission_form extends moodleform { + + /** + * This function defines the forums elments that are to be displayed + */ + public function definition() { + global $CFG, $PAGE; + + $mform =& $this->_form; + + $cm = $this->_customdata->cm; + $userid = $this->_customdata->userid; + + $mform->addElement('hidden', 'cmid', $cm->id); + $mform->setType('cmid', PARAM_INT); + $mform->addelement('hidden', 'userid', $userid); + $mform->setType('userid', PARAM_INT); + $mform->addElement('hidden', 'tifirst', $this->_customdata->tifirst); + $mform->setType('tifirst', PARAM_TEXT); + $mform->addElement('hidden', 'tilast', $this->_customdata->tilast); + $mform->setType('tilast', PARAM_TEXT); + $mform->addElement('hidden', 'page', $this->_customdata->page); + $mform->setType('page', PARAM_INT); + + /* Submission section */ + $mform->addElement('header', 'single_submission_1', get_string('submission', 'kalvidassign')); + + $mform->addelement('static', 'submittinguser', $this->_customdata->submissionuserpic, $this->_customdata->submissionuserinfo); + + /* Video preview */ + $mform->addElement('header', 'single_submission_2', get_string('previewvideo', 'kalvidassign')); + + $submission = $this->_customdata->submission; + $gradinginfo = $this->_customdata->grading_info; + $entryobject = ''; + $timemodified = ''; + + if (!empty($submission->entry_id) && !empty($submission->source)) { + $attr = array( + 'src' => local_kaltura_add_kaf_uri_token($submission->source), + 'height' => $submission->height, + 'width' => $submission->width, + 'allowfullscreen' => "true", + 'webkitallowfullscreen' => "true", + 'mozallowfullscreen' => "true" + ); + $mform->addElement('html', html_writer::tag('iframe', '', $attr)); + } + + /* Grades section */ + $mform->addElement('header', 'single_submission_3', get_string('grades', 'kalvidassign')); + + $attributes = array(); + + if ($this->_customdata->gradingdisabled || $this->_customdata->gradingdisabled) { + $attributes['disabled'] = 'disabled'; + } + + $grademenu = make_grades_menu($this->_customdata->cminstance->grade); + $grademenu['-1'] = get_string('nograde'); + + $mform->addElement('select', 'xgrade', get_string('grade').':', $grademenu, $attributes); + + if (isset($submission->grade)) { + $mform->setDefault('xgrade', $this->_customdata->submission->grade ); + } else { + $mform->setDefault('xgrade', '-1' ); + } + + $mform->setType('xgrade', PARAM_INT); + + if (!empty($this->_customdata->enableoutcomes) && !empty($gradinginfo)) { + + foreach ($gradinginfo->outcomes as $n => $outcome) { + + $options = make_grades_menu(-$outcome->scaleid); + + if (array_key_exists($this->_customdata->userid, $outcome->grades) && + $outcome->grades[$this->_customdata->userid]->locked) { + + $options[0] = get_string('nooutcome', 'grades'); + echo $options[$outcome->grades[$this->_customdata->userid]->grade]; + + } else { + + $options[''] = get_string('nooutcome', 'grades'); + $attributes = array('id' => 'menuoutcome_'.$n ); + $mform->addElement('select', 'outcome_'.$n.'['.$this->_customdata->userid.']', $outcome->name.':', $options, $attributes ); + $mform->setType('outcome_'.$n.'['.$this->_customdata->userid.']', PARAM_INT); + + if (array_key_exists($this->_customdata->userid, $outcome->grades)) { + $mform->setDefault('outcome_'.$n.'['.$this->_customdata->userid.']', $outcome->grades[$this->_customdata->userid]->grade ); + } + } + } + } + + if (has_capability('gradereport/grader:view', $this->_customdata->context) && has_capability('moodle/grade:viewall', $this->_customdata->context)) { + + if (empty($gradinginfo) || !array_key_exists($this->_customdata->userid, $gradinginfo->items[0]->grades)) { + + $grade = ' - '; + + } else if (0 != strcmp('-', $gradinginfo->items[0]->grades[$this->_customdata->userid]->str_grade)) { + + $grade = ''; + $grade .= $this->_customdata->grading_info->items[0]->grades[$this->_customdata->userid]->str_grade.''; + } else { + + $grade = $this->_customdata->grading_info->items[0]->grades[$this->_customdata->userid]->str_grade; + } + + } else { + + $grade = $this->_customdata->grading_info->items[0]->grades[$this->_customdata->userid]->str_grade; + + } + + $mform->addElement('static', 'finalgrade', get_string('currentgrade', 'assignment').':', $grade); + $mform->setType('finalgrade', PARAM_INT); + + /* Feedback section */ + $mform->addElement('header', 'single_submission_4', get_string('feedback', 'kalvidassign')); + + if (!empty($this->_customdata->gradingdisabled)) { + + if (array_key_exists($this->_customdata->userid, $gradinginfo->items[0]->grades)) { + $mform->addElement('static', 'disabledfeedback', ' ', $gradinginfo->items[0]->grades[$this->_customdata->userid]->str_feedback ); + } else { + $mform->addElement('static', 'disabledfeedback', ' ', '' ); + } + + } else { + + $mform->addElement('editor', 'submissioncomment_editor', get_string('feedback', 'kalvidassign').':', null, $this->get_editor_options() ); + $mform->setType('submissioncomment_editor', PARAM_RAW); + + } + + /* Marked section */ + $mform->addElement('header', 'single_submission_5', get_string('lastgrade', 'kalvidassign')); + + $mform->addElement('static', 'markingteacher', $this->_customdata->markingteacherpic, $this->_customdata->markingteacherinfo); + + $this->add_action_buttons(); + } + + /** + * This function sets the text editor format. + * @param object|array $data object or array of default values + * @return void + */ + public function set_data($data) { + + if (!isset($data->submission->format)) { + $data->textformat = FORMAT_HTML; + } else { + $data->textformat = $data->submission->format; + } + + $editoroptions = $this->get_editor_options(); + + return parent::set_data($data); + + } + + /** + * This function gets the editor options. + * @return array An array of editor options. + */ + protected function get_editor_options() { + $editoroptions = array(); + $editoroptions['component'] = 'mod_kalvidassign'; + $editoroptions['noclean'] = false; + $editoroptions['maxfiles'] = 0; + $editoroptions['context'] = $this->_customdata->context; + + return $editoroptions; + } +} diff --git a/mod/kalvidassign/styles.css b/mod/kalvidassign/styles.css new file mode 100644 index 0000000000000..5bf863558203d --- /dev/null +++ b/mod/kalvidassign/styles.css @@ -0,0 +1,53 @@ +#page-mod-kalvidassign-single_submission #page #page-header .navbar { + display:none; +} + + +#page-mod-kalvidassign-single_submission #page #page-content { + min-width: 500px; +} + + +#page-mod-kalvidassign-single_submission #page #page-content #region-main-box { + left:1px; + width:180%; +} + +#page-mod-kalvidassign-view .feedback { + border: 1px solid #DDDDDD; + margin:10px auto; +} + +#page-mod-kalvidassign-view .feedback .grade { + text-align: right; + font-weight: bold; +} + +#page-mod-kalvidassign-view .feedback .topic { + border-color: #DDDDDD; + border-style: solid; + border-width: 0 0 1px; + padding: 4px; +} + +#page-mod-kalvidassign-view .feedback .topic .fullname { + font-weight: bold; +} + +#slider_border { + width: 10%; + height: 18px; + border: 1px solid #000000; + overflow: hidden; +} + +#id_add_video { + float: none; +} + +#video_thumbnail { + display: block; + margin-left: auto; + margin-right: auto; + margin-bottom: 5px; +} \ No newline at end of file diff --git a/mod/kalvidassign/submission.php b/mod/kalvidassign/submission.php new file mode 100644 index 0000000000000..6166272c7c874 --- /dev/null +++ b/mod/kalvidassign/submission.php @@ -0,0 +1,147 @@ +. + +/** + * Kaltura video assignment submission script. + * + * @package mod_kalvidassign + * @author Remote-Learner.net Inc + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + * @copyright (C) 2014 Remote Learner.net Inc http://www.remote-learner.net + */ + +require_once(dirname(dirname(dirname(__FILE__))).'/config.php'); +require_once(dirname(__FILE__).'/locallib.php'); + +if (!confirm_sesskey()) { + print_error('confirmsesskeybad', 'error'); +} + +$entryid = required_param('entry_id', PARAM_TEXT); +$source = required_param('source', PARAM_URL); +$cmid = required_param('cmid', PARAM_INT); +$width = required_param('width', PARAM_TEXT); +$height = required_param('height', PARAM_TEXT); +$metadata = required_param('metadata', PARAM_TEXT); + +global $USER, $OUTPUT, $DB, $PAGE; + +$urlparts = parse_url($source); +if (!empty($urlparts['path'])) { + $source = 'http://'.KALTURA_URI_TOKEN.$urlparts['path']; +} + +if (! $cm = get_coursemodule_from_id('kalvidassign', $cmid)) { + print_error('invalidcoursemodule'); +} + +if (! $course = $DB->get_record('course', array('id' => $cm->course))) { + print_error('coursemisconf'); +} + +if (! $kalvidassignobj = $DB->get_record('kalvidassign', array('id' => $cm->instance))) { + print_error('invalidid', 'kalvidassign'); +} + +require_course_login($course->id, true, $cm); + +$PAGE->set_url('/mod/kalvidassign/view.php', array('id' => $course->id)); +$PAGE->set_title(format_string($kalvidassignobj->name)); +$PAGE->set_heading($course->fullname); + + +if (kalvidassign_assignemnt_submission_expired($kalvidassignobj)) { + print_error('assignmentexpired', 'kalvidassign', 'course/view.php?id='.$course->id); +} + +echo $OUTPUT->header(); + +if (empty($entryid)) { + print_error('emptyentryid', 'kalvidassign', new moodle_url('/mod/kalvidassign/view.php', array('id' => $cm->id))); +} + +$param = array('vidassignid' => $kalvidassignobj->id, 'userid' => $USER->id); +$submission = $DB->get_record('kalvidassign_submission', $param); + +$time = time(); +$url = new moodle_url('/mod/kalvidassign/view.php', array('id' => $cm->id)); + +if ($submission) { + $submission->entry_id = $entryid; + $submission->source = $source; + $submission->width = $width; + $submission->height = $height; + $submission->timemodified = $time; + $submission->metadata = $metadata; + + if (0 == $submission->timecreated) { + $submission->timecreated = $time; + } + + if ($DB->update_record('kalvidassign_submission', $submission)) { + + $message = get_string('assignmentsubmitted', 'kalvidassign'); + $continue = get_string('continue'); + + echo $OUTPUT->notification($message, 'notifysuccess'); + + echo html_writer::start_tag('center'); + + echo $OUTPUT->single_button($url, $continue, 'post'); + echo html_writer::end_tag('center'); + + add_to_log($course->id, 'kalvidassign', 'submit', 'view.php?id='.$cm->id, $kalvidassignobj->id, $cm->id); + } else { + notice(get_string('failedtoinsertsubmission', 'kalvidassign'), $url, $course); + } + +} else { + $submission = new stdClass(); + $submission->entry_id = $entryid; + $submission->userid = $USER->id; + $submission->vidassignid = $kalvidassignobj->id; + $submission->grade = -1; + $submission->source = $source; + $submission->width = $width; + $submission->height = $height; + $submission->metadata = $metadata; + $submission->timecreated = $time; + $submission->timemodified = $time; + + if ($DB->insert_record('kalvidassign_submission', $submission)) { + + $message = get_string('assignmentsubmitted', 'kalvidassign'); + $continue = get_string('continue'); + + echo $OUTPUT->notification($message, 'notifysuccess'); + + echo html_writer::start_tag('center'); + + echo $OUTPUT->single_button($url, $continue, 'post'); + echo html_writer::end_tag('center'); + + } else { + notice(get_string('failedtoinsertsubmission', 'kalvidassign'), $url, $course); + } + +} + +$context = $PAGE->context; + +// Email an alert to the teacher +if ($kalvidassignobj->emailteachers) { + kalvidassign_email_teachers($cm, $kalvidassignobj->name, $submission, $context); +} + +echo $OUTPUT->footer(); diff --git a/mod/kalvidassign/tests/locallib_test.php b/mod/kalvidassign/tests/locallib_test.php new file mode 100644 index 0000000000000..c44c157096ad1 --- /dev/null +++ b/mod/kalvidassign/tests/locallib_test.php @@ -0,0 +1,77 @@ +. + +/** + * Moodle course unit test for Kaltura + * + * @package mod_kalvidassign + * @author Remote-Learner Inc + * @copyright (C) 2008-2014 http://www.remote-learner.net + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + */ + +defined('MOODLE_INTERNAL') || die(); + +global $CFG; + +require_once($CFG->dirroot.'/mod/kalvidassign/locallib.php'); + +/** + * @group mod_kalvidassign + */ +class locallib_testcase extends advanced_testcase { + /** + * This function tests output from kalvidassign_get_player_dimensions() + */ + public function test_kalvidassign_get_player_dimensions_return_defaults() { + $this->resetAfterTest(true); + + $result = kalvidassign_get_player_dimensions(); + + $this->assertCount(2, $result); + $this->assertEquals(400, $result[0]); + $this->assertEquals(365, $result[1]); + } + + /** + * This function tests output from kalvidassign_get_player_dimensions() + */ + public function test_kalvidassign_get_player_dimensions_return_configured_results() { + $this->resetAfterTest(true); + + set_config('kalvidassign_player_width', 500, 'local_kaltura'); + set_config('kalvidassign_player_height', 500, 'local_kaltura'); + + $result = kalvidassign_get_player_dimensions(); + + $this->assertCount(2, $result); + $this->assertEquals('500', $result[0]); + $this->assertEquals('500', $result[1]); + } + + /** + * This function tests output from kalvidassign_get_player_dimensions() + */ + public function test_kalvidassign_get_player_dimensions_return_default_results_when_empty() { + $this->resetAfterTest(true); + + $result = kalvidassign_get_player_dimensions(); + + set_config('kalvidassign_player_width', '', 'local_kaltura'); + set_config('kalvidassign_player_height', '', 'local_kaltura'); + $this->assertCount(2, $result); + $this->assertEquals(400, $result[0]); + $this->assertEquals(365, $result[1]); + } +} \ No newline at end of file diff --git a/mod/kalvidassign/version.php b/mod/kalvidassign/version.php new file mode 100644 index 0000000000000..03f25342f33c6 --- /dev/null +++ b/mod/kalvidassign/version.php @@ -0,0 +1,36 @@ +. + +/** + * Kaltura version script + * + * @package mod_kalvidassign + * @author Remote-Learner.net Inc + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + * @copyright (C) 2014 Remote Learner.net Inc http://www.remote-learner.net + */ + +if (!defined('MOODLE_INTERNAL')) { + die('Direct access to this script is forbidden.'); +} + +$module->version = 2014023000.01; +$module->component = 'mod_kalvidassign'; +$module->release = 'Kaltura release 4.0.00 (RL: TBD)'; +$module->requires = 2013111801; +$module->cron = 0; +$module->maturity = MATURITY_STABLE; +$module->dependencies = array( + 'local_kaltura' => 2014023000.01, +); diff --git a/mod/kalvidassign/view.php b/mod/kalvidassign/view.php new file mode 100644 index 0000000000000..6823bfa56679d --- /dev/null +++ b/mod/kalvidassign/view.php @@ -0,0 +1,138 @@ +. + +/** + * Kaltura video assignment view script. + * + * @package mod_kalvidassign + * @author Remote-Learner.net Inc + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + * @copyright (C) 2014 Remote Learner.net Inc http://www.remote-learner.net + */ + +require_once(dirname(dirname(dirname(__FILE__))).'/config.php'); +require_once(dirname(dirname(dirname(__FILE__))).'/local/kaltura/locallib.php'); +require_once(dirname(__FILE__).'/locallib.php'); + +$id = optional_param('id', 0, PARAM_INT); + +// Retrieve module instance. +if (empty($id)) { + print_error('invalidid', 'kalvidassign'); +} + +if (!empty($id)) { + list($cm, $course, $kalvidassign) = kalvidassign_validate_cmid($id); +} + +require_course_login($course->id, true, $cm); + +global $SESSION, $CFG; + +$PAGE->set_url('/mod/kalvidassign/view.php', array('id' => $id)); +$PAGE->set_title(format_string($kalvidassign->name)); +$PAGE->set_heading($course->fullname); +$pageclass = 'kaltura-kalvidassign-body'; +$PAGE->add_body_class($pageclass); + +$context = context_module::instance($cm->id); + +add_to_log($course->id, 'kalvidassign', 'view assignment details', 'view.php?id='.$cm->id, $kalvidassign->id, $cm->id); + +// Update 'viewed' state if required by completion system +$completion = new completion_info($course); +$completion->set_module_viewed($cm); + +$PAGE->requires->css('/mod/kalvidassign/styles.css'); +$PAGE->requires->css('/local/kaltura/styles.css'); +echo $OUTPUT->header(); + +$renderer = $PAGE->get_renderer('mod_kalvidassign'); + +echo $OUTPUT->box_start('generalbox'); + +echo $renderer->display_mod_info($kalvidassign, $context); + +echo format_module_intro('kalvidassign', $kalvidassign, $cm->id); +echo $OUTPUT->box_end(); + +$disabled = false; +$url = ''; +$width = 0; +$height = 0; + +if (!has_capability('mod/kalvidassign:gradesubmission', $context)) { + + $param = array('vidassignid' => $kalvidassign->id, 'userid' => $USER->id); + $submission = $DB->get_record('kalvidassign_submission', $param); + + // If the entry_id field is not empty but the source field is empty, then the data for this activity has not yet been migrated. + if (!empty($submission->entry_id) && empty($submission->source)) { + notice(get_string('activity_not_migrated', 'kalvidassign'), new moodle_url('/course/view.php', array('id' => $course->id))); + } + + echo $renderer->display_video_container_markup($submission, $course->id, $cm->id); + + if (kalvidassign_assignemnt_submission_expired($kalvidassign)) { + $disabled = true; + } + + if (empty($submission->entry_id) && empty($submission->timecreated)) { + + echo $renderer->display_student_submit_buttons($cm, $USER->id, $disabled); + + echo $renderer->display_grade_feedback($kalvidassign, $context); + } else { + + if ($disabled || !$kalvidassign->resubmit) { + $disabled = true; + } + + echo $renderer->display_student_resubmit_buttons($cm, $USER->id, $disabled); + + echo $renderer->display_grade_feedback($kalvidassign, $context); + } + + $params = array( + 'withblocks' => 0, + 'courseid' => $course->id, + 'width' => KALTURA_PANEL_WIDTH, + 'height' => KALTURA_PANEL_HEIGHT, + 'cmid' => $cm->id + ); + + $url = new moodle_url('/mod/kalvidassign/lti_launch.php', $params); + + $params = array( + 'addvidbtnid' => 'id_add_video', + 'ltilaunchurl' => $url->out(false), + 'height' => KALTURA_PANEL_HEIGHT, + 'width' => KALTURA_PANEL_WIDTH + ); + + $PAGE->requires->yui_module('moodle-local_kaltura-ltipanel', 'M.local_kaltura.initmediaassignment', array($params), null, true); + + // Require a YUI module to make the object tag be as large as possible. + $params = array( + 'bodyclass' => $pageclass, + 'lastheight' => null, + 'padding' => 15 + ); + $PAGE->requires->yui_module('moodle-local_kaltura-lticontainer', 'M.local_kaltura.init', array($params), null, true); + $PAGE->requires->string_for_js('replacevideo', 'kalvidassign'); +} else { + echo $renderer->display_instructor_buttons($cm, $USER->id); +} + +echo $OUTPUT->footer(); \ No newline at end of file diff --git a/mod/kalvidpres/backup/moodle2/backup_kalvidpres_activity_task.class.php b/mod/kalvidpres/backup/moodle2/backup_kalvidpres_activity_task.class.php new file mode 100644 index 0000000000000..7dd685bb2ad72 --- /dev/null +++ b/mod/kalvidpres/backup/moodle2/backup_kalvidpres_activity_task.class.php @@ -0,0 +1,67 @@ +. + +/** + * Kaltura video presentation activity task file. + * + * @package mod_kalvidpres + * @author Remote-Learner.net Inc + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + * @copyright (C) 2014 Remote Learner.net Inc http://www.remote-learner.net + */ + +require_once($CFG->dirroot.'/mod/kalvidpres/backup/moodle2/backup_kalvidpres_stepslib.php'); +require_once($CFG->dirroot.'/mod/kalvidpres/backup/moodle2/backup_kalvidpres_settingslib.php'); + +/** + * kalvidpres backup task that provides all the settings and steps to perform one + * complete backup of the activity + */ +class backup_kalvidpres_activity_task extends backup_activity_task { + + /** + * Define (add) particular settings this activity can have + */ + protected function define_my_settings() { + // No particular settings for this activity + } + + /** + * Define (add) particular steps this activity can have + */ + protected function define_my_steps() { + // Choice only has one structure step + $this->add_step(new backup_kalvidpres_activity_structure_step('kalvidpres_structure', 'kalvidpres.xml')); + } + + /** + * Code the transformations to perform in the activity in + * order to get transportable (encoded) links + */ + static public function encode_content_links($content) { + global $CFG; + + $base = preg_quote($CFG->wwwroot, "/"); + + // Link to the list of kalvidpress + $search="/(".$base."\/mod\/kalvidpres\/index.php\?id\=)([0-9]+)/"; + $content= preg_replace($search, '$@KALVIDPRESINDEX*$2@$', $content); + + // Link to kalvidpres view by moduleid + $search="/(".$base."\/mod\/kalvidpres\/view.php\?id\=)([0-9]+)/"; + $content= preg_replace($search, '$@KALVIDPRESVIEWBYID*$2@$', $content); + + return $content; + } +} diff --git a/mod/kalvidpres/backup/moodle2/backup_kalvidpres_settingslib.php b/mod/kalvidpres/backup/moodle2/backup_kalvidpres_settingslib.php new file mode 100644 index 0000000000000..ac43a542065fa --- /dev/null +++ b/mod/kalvidpres/backup/moodle2/backup_kalvidpres_settingslib.php @@ -0,0 +1,26 @@ +. + +/** + * Kaltura video presentation settingslib file. + * + * @package mod_kalvidpres + * @author Remote-Learner.net Inc + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + * @copyright (C) 2014 Remote Learner.net Inc http://www.remote-learner.net + */ + + // This activity has no particular settings but the inherited from the generic + // backup_activity_task so here there isn't any class definition, like the ones + // existing in /backup/moodle2/backup_settingslib.php (activities section) diff --git a/mod/kalvidpres/backup/moodle2/backup_kalvidpres_stepslib.php b/mod/kalvidpres/backup/moodle2/backup_kalvidpres_stepslib.php new file mode 100644 index 0000000000000..3f7935d090f17 --- /dev/null +++ b/mod/kalvidpres/backup/moodle2/backup_kalvidpres_stepslib.php @@ -0,0 +1,47 @@ +. + +/** + * Kaltura video presentation stepslib file. + * + * @package mod_kalvidpres + * @author Remote-Learner.net Inc + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + * @copyright (C) 2014 Remote Learner.net Inc http://www.remote-learner.net + */ + +/** + * Define all the backup steps that will be used by the backup_kalvidpres_activity_task + */ + +/** + * Define the complete kalvidpres structure for backup, with file and id annotations + */ +class backup_kalvidpres_activity_structure_step extends backup_activity_structure_step { + + protected function define_structure() { + + // Define each element separated + $kalvidpres = new backup_nested_element('kalvidpres', array('id'), array( + 'name', 'intro', 'introformat', 'entry_id', 'video_entry_id', 'doc_entry_id', + 'video_title', 'uiconf_id', 'widescreen', 'height', 'width', 'source', 'timemodified', + 'timecreated')); + + // Define sources + $kalvidpres->set_source_table('kalvidpres', array('id' => backup::VAR_ACTIVITYID)); + + // Return the root element, wrapped into standard activity structure + return $this->prepare_activity_structure($kalvidpres); + } +} diff --git a/mod/kalvidpres/backup/moodle2/backup_kalvidres_activity_task.class.php b/mod/kalvidpres/backup/moodle2/backup_kalvidres_activity_task.class.php new file mode 100644 index 0000000000000..a73ff6be762a0 --- /dev/null +++ b/mod/kalvidpres/backup/moodle2/backup_kalvidres_activity_task.class.php @@ -0,0 +1,66 @@ +. + +/** + * Kaltura video resource backup activity tasks script. + * + * @package mod_kalvidres + * @author Remote-Learner.net Inc + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + * @copyright (C) 2014 Remote Learner.net Inc http://www.remote-learner.net + */ + +require_once($CFG->dirroot.'/mod/kalvidres/backup/moodle2/backup_kalvidres_stepslib.php'); +require_once($CFG->dirroot.'/mod/kalvidres/backup/moodle2/backup_kalvidres_settingslib.php'); + +/** + * kalvidres backup task that provides all the settings and steps to perform one + * complete backup of the activity + */ +class backup_kalvidres_activity_task extends backup_activity_task { + /** + * Define (add) particular settings this activity can have + */ + protected function define_my_settings() { + // No particular settings for this activity + } + + /** + * Define (add) particular steps this activity can have + */ + protected function define_my_steps() { + // Choice only has one structure step + $this->add_step(new backup_kalvidres_activity_structure_step('kalvidres_structure', 'kalvidres.xml')); + } + + /** + * Code the transformations to perform in the activity in + * order to get transportable (encoded) links + */ + static public function encode_content_links($content) { + global $CFG; + + $base = preg_quote($CFG->wwwroot, "/"); + + // Link to the list of kalvidress + $search="/(".$base."\/mod\/kalvidres\/index.php\?id\=)([0-9]+)/"; + $content= preg_replace($search, '$@KALVIDRESINDEX*$2@$', $content); + + // Link to kalvidres view by moduleid + $search="/(".$base."\/mod\/kalvidres\/view.php\?id\=)([0-9]+)/"; + $content= preg_replace($search, '$@KALVIDRESVIEWBYID*$2@$', $content); + + return $content; + } +} diff --git a/mod/kalvidpres/backup/moodle2/backup_kalvidres_settingslib.php b/mod/kalvidpres/backup/moodle2/backup_kalvidres_settingslib.php new file mode 100644 index 0000000000000..d42bab7691745 --- /dev/null +++ b/mod/kalvidpres/backup/moodle2/backup_kalvidres_settingslib.php @@ -0,0 +1,26 @@ +. + +/** + * Kaltura video resource backup settingslib script. + * + * @package mod_kalvidres + * @author Remote-Learner.net Inc + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + * @copyright (C) 2014 Remote Learner.net Inc http://www.remote-learner.net + */ + + // This activity has no particular settings but the inherited from the generic + // backup_activity_task so here there isn't any class definition, like the ones + // existing in /backup/moodle2/backup_settingslib.php (activities section) diff --git a/mod/kalvidpres/backup/moodle2/backup_kalvidres_stepslib.php b/mod/kalvidpres/backup/moodle2/backup_kalvidres_stepslib.php new file mode 100644 index 0000000000000..ae532446cc14f --- /dev/null +++ b/mod/kalvidpres/backup/moodle2/backup_kalvidres_stepslib.php @@ -0,0 +1,46 @@ +. + +/** + * Kaltura video resource backup stepslib script. + * + * @package mod_kalvidres + * @author Remote-Learner.net Inc + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + * @copyright (C) 2014 Remote Learner.net Inc http://www.remote-learner.net + */ + +/** + * Define all the backup steps that will be used by the backup_kalvidres_activity_task + */ + +/** + * Define the complete kalvidres structure for backup, with file and id annotations + */ +class backup_kalvidres_activity_structure_step extends backup_activity_structure_step { + + protected function define_structure() { + + // Define each element separated + $kalvidres = new backup_nested_element('kalvidres', array('id'), array( + 'name', 'intro', 'introformat', 'entry_id', 'video_title', + 'uiconf_id', 'widescreen', 'height', 'width', 'source', 'timemodified', 'timecreated')); + + // Define sources + $kalvidres->set_source_table('kalvidres', array('id' => backup::VAR_ACTIVITYID)); + + // Return the root element, wrapped into standard activity structure + return $this->prepare_activity_structure($kalvidres); + } +} diff --git a/mod/kalvidpres/backup/moodle2/restore_kalvidpres_activity_task.class.php b/mod/kalvidpres/backup/moodle2/restore_kalvidpres_activity_task.class.php new file mode 100644 index 0000000000000..850da925d0bb1 --- /dev/null +++ b/mod/kalvidpres/backup/moodle2/restore_kalvidpres_activity_task.class.php @@ -0,0 +1,107 @@ +. + +/** + * Kaltura video presentation activity task file. + * + * @package mod_kalvidpres + * @author Remote-Learner.net Inc + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + * @copyright (C) 2014 Remote Learner.net Inc http://www.remote-learner.net + */ + +defined('MOODLE_INTERNAL') || die(); + +require_once($CFG->dirroot.'/mod/kalvidpres/backup/moodle2/restore_kalvidpres_stepslib.php'); + +/** + * kalvidpres restore task that provides all the settings and steps to perform one + * complete restore of the activity + */ +class restore_kalvidpres_activity_task extends restore_activity_task { + + /** + * Define (add) particular settings this activity can have + */ + protected function define_my_settings() { + // No particular settings for this activity + } + + /** + * Define (add) particular steps this activity can have + */ + protected function define_my_steps() { + // Certificate only has one structure step + $this->add_step(new restore_kalvidpres_activity_structure_step('kalvidpres_structure', 'kalvidpres.xml')); + } + + /** + * Define the contents in the activity that must be + * processed by the link decoder + */ + static public function define_decode_contents() { + $contents = array(); + + $contents[] = new restore_decode_content('kalvidpres', array('intro'), 'kalvidpres'); + + return $contents; + } + + /** + * Define the decoding rules for links belonging + * to the activity to be executed by the link decoder + */ + static public function define_decode_rules() { + $rules = array(); + + $rules[] = new restore_decode_rule('KALVIDPRESVIEWBYID', '/mod/kalvidpres/view.php?id=$1', 'course_module'); + $rules[] = new restore_decode_rule('KALVIDPRESINDEX', '/mod/kalvidpres/index.php?id=$1', 'course'); + + return $rules; + + } + + /** + * Define the restore log rules that will be applied + * by the {@link restore_logs_processor} when restoring + * kalvidpres logs. It must return one array + * of {@link restore_log_rule} objects + */ + static public function define_restore_log_rules() { + $rules = array(); + + $rules[] = new restore_log_rule('kalvidpres', 'view', 'view.php?id={course_module}', '{kalvidpres}'); + + return $rules; + } + + /** + * Define the restore log rules that will be applied + * by the {@link restore_logs_processor} when restoring + * course logs. It must return one array + * of {@link restore_log_rule} objects + * + * Note this rules are applied when restoring course logs + * by the restore final task, but are defined here at + * activity level. All them are rules not linked to any module instance (cmid = 0) + */ + static public function define_restore_log_rules_for_course() { + $rules = array(); + + // Fix old wrong uses (missing extension) + $rules[] = new restore_log_rule('kalvidpres', 'view all', 'index.php?id={course}', null); + + return $rules; + } +} diff --git a/mod/kalvidpres/backup/moodle2/restore_kalvidpres_stepslib.php b/mod/kalvidpres/backup/moodle2/restore_kalvidpres_stepslib.php new file mode 100644 index 0000000000000..a74cc417ea761 --- /dev/null +++ b/mod/kalvidpres/backup/moodle2/restore_kalvidpres_stepslib.php @@ -0,0 +1,62 @@ +. + +/** + * Kaltura video presentation stepslib file. + * + * @package mod_kalvidpres + * @author Remote-Learner.net Inc + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + * @copyright (C) 2014 Remote Learner.net Inc http://www.remote-learner.net + */ + +/** + * Define all the restore steps that will be used by the restore_kalvidpres_activity_task + */ + +/** + * Structure step to restore one kalvidpres activity + */ +class restore_kalvidpres_activity_structure_step extends restore_activity_structure_step { + + protected function define_structure() { + + $paths = array(); + + $paths[] = new restore_path_element('kalvidpres', '/activity/kalvidpres'); + + // Return the paths wrapped into standard activity structure + return $this->prepare_activity_structure($paths); + } + + protected function process_kalvidpres($data) { + global $DB; + + $data = (object)$data; + $oldid = $data->id; + $data->course = $this->get_courseid(); + + $data->timemodified = $this->apply_date_offset($data->timemodified); + + // insert the kalvidpres record + $newitemid = $DB->insert_record('kalvidpres', $data); + // immediately after inserting "activity" record, call this + $this->apply_activity_instance($newitemid); + } + + protected function after_execute() { + // Add kalvidpres related files, no need to match by itemname (just internally handled context) + $this->add_related_files('mod_kalvidpres', 'intro', null); + } +} diff --git a/mod/kalvidpres/backup/moodle2/restore_kalvidres_activity_task.class.php b/mod/kalvidpres/backup/moodle2/restore_kalvidres_activity_task.class.php new file mode 100644 index 0000000000000..fbd26b2b83f26 --- /dev/null +++ b/mod/kalvidpres/backup/moodle2/restore_kalvidres_activity_task.class.php @@ -0,0 +1,107 @@ +. + +/** + * Kaltura video resource restore activity tasks script. + * + * @package mod_kalvidres + * @author Remote-Learner.net Inc + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + * @copyright (C) 2014 Remote Learner.net Inc http://www.remote-learner.net + */ + +defined('MOODLE_INTERNAL') || die(); + +require_once($CFG->dirroot.'/mod/kalvidres/backup/moodle2/restore_kalvidres_stepslib.php'); + +/** + * kalvidres restore task that provides all the settings and steps to perform one + * complete restore of the activity + */ +class restore_kalvidres_activity_task extends restore_activity_task { + + /** + * Define (add) particular settings this activity can have + */ + protected function define_my_settings() { + // No particular settings for this activity + } + + /** + * Define (add) particular steps this activity can have + */ + protected function define_my_steps() { + // Certificate only has one structure step + $this->add_step(new restore_kalvidres_activity_structure_step('kalvidres_structure', 'kalvidres.xml')); + } + + /** + * Define the contents in the activity that must be + * processed by the link decoder + */ + static public function define_decode_contents() { + $contents = array(); + + $contents[] = new restore_decode_content('kalvidres', array('intro'), 'kalvidres'); + + return $contents; + } + + /** + * Define the decoding rules for links belonging + * to the activity to be executed by the link decoder + */ + static public function define_decode_rules() { + $rules = array(); + + $rules[] = new restore_decode_rule('KALVIDRESVIEWBYID', '/mod/kalvidres/view.php?id=$1', 'course_module'); + $rules[] = new restore_decode_rule('KALVIDRESINDEX', '/mod/kalvidres/index.php?id=$1', 'course'); + + return $rules; + + } + + /** + * Define the restore log rules that will be applied + * by the {@link restore_logs_processor} when restoring + * kalvidres logs. It must return one array + * of {@link restore_log_rule} objects + */ + static public function define_restore_log_rules() { + $rules = array(); + + $rules[] = new restore_log_rule('kalvidres', 'view', 'view.php?id={course_module}', '{kalvidres}'); + + return $rules; + } + + /** + * Define the restore log rules that will be applied + * by the {@link restore_logs_processor} when restoring + * course logs. It must return one array + * of {@link restore_log_rule} objects + * + * Note this rules are applied when restoring course logs + * by the restore final task, but are defined here at + * activity level. All them are rules not linked to any module instance (cmid = 0) + */ + static public function define_restore_log_rules_for_course() { + $rules = array(); + + // Fix old wrong uses (missing extension) + $rules[] = new restore_log_rule('kalvidres', 'view all', 'index.php?id={course}', null); + + return $rules; + } +} diff --git a/mod/kalvidpres/backup/moodle2/restore_kalvidres_stepslib.php b/mod/kalvidpres/backup/moodle2/restore_kalvidres_stepslib.php new file mode 100644 index 0000000000000..9aaac8a0bfbc5 --- /dev/null +++ b/mod/kalvidpres/backup/moodle2/restore_kalvidres_stepslib.php @@ -0,0 +1,62 @@ +. + +/** + * Kaltura video resource restore stepslib script. + * + * @package mod_kalvidres + * @author Remote-Learner.net Inc + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + * @copyright (C) 2014 Remote Learner.net Inc http://www.remote-learner.net + */ + +/** + * Define all the restore steps that will be used by the restore_kalvidres_activity_task + */ + +/** + * Structure step to restore one kalvidres activity + */ +class restore_kalvidres_activity_structure_step extends restore_activity_structure_step { + + protected function define_structure() { + + $paths = array(); + + $paths[] = new restore_path_element('kalvidres', '/activity/kalvidres'); + + // Return the paths wrapped into standard activity structure + return $this->prepare_activity_structure($paths); + } + + protected function process_kalvidres($data) { + global $DB; + + $data = (object)$data; + $oldid = $data->id; + $data->course = $this->get_courseid(); + + $data->timemodified = $this->apply_date_offset($data->timemodified); + + // insert the kalvidres record + $newitemid = $DB->insert_record('kalvidres', $data); + // immediately after inserting "activity" record, call this + $this->apply_activity_instance($newitemid); + } + + protected function after_execute() { + // Add kalvidres related files, no need to match by itemname (just internally handled context) + $this->add_related_files('mod_kalvidres', 'intro', null); + } +} diff --git a/mod/kalvidpres/db/access.php b/mod/kalvidpres/db/access.php new file mode 100644 index 0000000000000..60eeb6e594a8b --- /dev/null +++ b/mod/kalvidpres/db/access.php @@ -0,0 +1,36 @@ +. + +/** + * Kaltura video presentation access file. + * + * @package mod_kalvidpres + * @author Remote-Learner.net Inc + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + * @copyright (C) 2014 Remote Learner.net Inc http://www.remote-learner.net + */ + +$capabilities = array( + + 'mod/kalvidpres:addinstance' => array( + 'riskbitmask' => RISK_XSS, + 'captype' => 'write', + 'contextlevel' => CONTEXT_COURSE, + 'archetypes' => array( + 'editingteacher' => CAP_ALLOW, + 'manager' => CAP_ALLOW + ), + 'clonepermissionsfrom' => 'moodle/course:manageactivities' + ), +); diff --git a/mod/kalvidpres/db/install.xml b/mod/kalvidpres/db/install.xml new file mode 100644 index 0000000000000..3b038ac03a336 --- /dev/null +++ b/mod/kalvidpres/db/install.xml @@ -0,0 +1,36 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    +
    \ No newline at end of file diff --git a/mod/kalvidpres/db/log.php b/mod/kalvidpres/db/log.php new file mode 100644 index 0000000000000..e40a56b2a5788 --- /dev/null +++ b/mod/kalvidpres/db/log.php @@ -0,0 +1,31 @@ +. + +/** + * Kaltura video presentation log file. + * + * @package mod_kalvidpres + * @author Remote-Learner.net Inc + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + * @copyright (C) 2014 Remote Learner.net Inc http://www.remote-learner.net + */ + + +defined('MOODLE_INTERNAL') || die(); + +global $DB; + +$logs = array( + array('module' => 'kalvidpres', 'action' => 'view', 'mtable' => 'kalvidpres', 'field' => 'name'), +); \ No newline at end of file diff --git a/mod/kalvidpres/db/upgrade.php b/mod/kalvidpres/db/upgrade.php new file mode 100644 index 0000000000000..7baa10eb234c1 --- /dev/null +++ b/mod/kalvidpres/db/upgrade.php @@ -0,0 +1,96 @@ +. + +/** + * Kaltura video presentation upgrade file. + * + * @package mod_kalvidpres + * @author Remote-Learner.net Inc + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + * @copyright (C) 2014 Remote Learner.net Inc http://www.remote-learner.net + */ + +function xmldb_kalvidpres_upgrade($oldversion) { + global $CFG, $DB; + + $dbman = $DB->get_manager(); + + if ($oldversion < 2011111112) { + + // Changing type of field intro on table kalvidpres to text + $table = new xmldb_table('kalvidpres'); + $field = new xmldb_field('intro', XMLDB_TYPE_TEXT, 'small', null, null, null, null, 'name'); + + // Launch change of type for field intro + $dbman->change_field_type($table, $field); + + // kalvidpres savepoint reached + upgrade_mod_savepoint(true, 2011111112, 'kalvidpres'); + } + + if ($oldversion < 2012010301) { + + // Define index doc_entry_id_idx (not unique) to be dropped form kalvidpres + $table = new xmldb_table('kalvidpres'); + $index = new xmldb_index('doc_entry_id_idx', XMLDB_INDEX_UNIQUE, array('doc_entry_id')); + + // Conditionally launch drop index doc_entry_id_idx + if ($dbman->index_exists($table, $index)) { + $dbman->drop_index($table, $index); + } + + // Define index doc_entry_id_idx (not unique) to be added to kalvidpres + $index = new xmldb_index('doc_entry_id_idx', XMLDB_INDEX_NOTUNIQUE, array('doc_entry_id')); + + // Conditionally launch add index doc_entry_id_idx + if (!$dbman->index_exists($table, $index)) { + $dbman->add_index($table, $index); + } + + // kalvidpres savepoint reached + upgrade_mod_savepoint(true, 2012010301, 'kalvidpres'); + } + + if ($oldversion < 2014013000) { + + // Define field source to be added to kalvidpres. + $table = new xmldb_table('kalvidpres'); + $field = new xmldb_field('source', XMLDB_TYPE_TEXT, null, null, null, null, null, 'width'); + + // Conditionally launch add field source. + if (!$dbman->field_exists($table, $field)) { + $dbman->add_field($table, $field); + } + + // Kalvidpres savepoint reached. + upgrade_mod_savepoint(true, 2014013000, 'kalvidpres'); + } + + if ($oldversion < 2014023000.01) { + + // Define field metadata to be added to kalvidpres. + $table = new xmldb_table('kalvidpres'); + $field = new xmldb_field('metadata', XMLDB_TYPE_TEXT, null, null, null, null, null, 'source'); + + // Conditionally launch add field metadata. + if (!$dbman->field_exists($table, $field)) { + $dbman->add_field($table, $field); + } + + // Kalvidassign savepoint reached. + upgrade_mod_savepoint(true, 2014023000.01, 'kalvidpres'); + } + + return true; +} \ No newline at end of file diff --git a/mod/kalvidpres/lang/en/kalvidpres.php b/mod/kalvidpres/lang/en/kalvidpres.php new file mode 100644 index 0000000000000..da00347ea75cc --- /dev/null +++ b/mod/kalvidpres/lang/en/kalvidpres.php @@ -0,0 +1,36 @@ +. + +/** + * Kaltura video presentation language file. + * + * @package mod_kalvidpres + * @author Remote-Learner.net Inc + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + * @copyright (C) 2014 Remote Learner.net Inc http://www.remote-learner.net + */ + +$string['modulenameplural'] = 'Kaltura Video Presentation'; +$string['modulename'] = 'Kaltura Video Presentation'; +$string['modulename_help'] = 'The Kaltura Video Presentation enables a teacher to create a resource using a Kaltura video.'; +$string['pluginadministration'] = 'Kaltura Video Presentation'; +$string['pluginname'] = 'Kaltura Video Presentation'; +$string['name'] = 'Name'; +$string['novidsource'] = 'No media content found. You must add media content in order to save a video presentation.'; +$string['video_hdr'] = 'Video'; +$string['add_video'] = 'Add media'; +$string['invalidid'] = 'Invalid ID'; +$string['invalid_source_parameter'] = 'Invalid source parameter'; +$string['replace_video'] = 'Replace media'; +$string['kalvidpres:addinstance'] = 'Add a Kaltura Video Presentation'; diff --git a/mod/kalvidpres/lang/en/kalvidres.php b/mod/kalvidpres/lang/en/kalvidres.php new file mode 100644 index 0000000000000..8fcff45e8d121 --- /dev/null +++ b/mod/kalvidpres/lang/en/kalvidres.php @@ -0,0 +1,36 @@ +. + +/** + * Kaltura video resource language file. + * + * @package mod_kalvidres + * @author Remote-Learner.net Inc + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + * @copyright (C) 2014 Remote Learner.net Inc http://www.remote-learner.net + */ +$string['modulenameplural'] = 'Kaltura Video Resource'; +$string['modulename'] = 'Kaltura Video Resource'; +$string['modulename_help'] = 'The Kaltura Video Resource enables a teacher to create a resource using a Kaltura video.'; +$string['pluginadministration'] = 'Kaltura Video Resource'; +$string['pluginname'] = 'Kaltura Video Resource'; +$string['name'] = 'Name'; +$string['novidsource'] = 'No media content found. You must add media content in order to save a video resource.'; +$string['video_hdr'] = 'Video'; +$string['add_video'] = 'Add media'; +$string['invalidid'] = 'Invalid ID'; +$string['invalid_launch_parameters'] = 'Invalid launch parameters'; +$string['invalid_source_parameter'] = 'Invalid source parameter'; +$string['replace_video'] = 'Replace media'; +$string['kalvidres:addinstance'] = 'Add a Kaltura Video Resource'; diff --git a/mod/kalvidpres/lib.php b/mod/kalvidpres/lib.php new file mode 100644 index 0000000000000..02a16f008a7de --- /dev/null +++ b/mod/kalvidpres/lib.php @@ -0,0 +1,199 @@ +. + +/** + * Kaltura video presentation main library file. + * + * @package mod_kalvidpres + * @author Remote-Learner.net Inc + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + * @copyright (C) 2014 Remote Learner.net Inc http://www.remote-learner.net + */ + +if (!defined('MOODLE_INTERNAL')) { + die('Direct access to this script is forbidden.'); +} + +/** + * Given an object containing all the necessary data, + * (defined by the form in mod_form.php) this function + * will create a new instance and return the id number + * of the new instance. + * + * @param object $kalvidpres An object from the form in mod_form.php + * @return int The id of the newly inserted kalvidassign record + */ +function kalvidpres_add_instance($kalvidpres) { + global $DB, $CFG; + require_once($CFG->dirroot.'/local/kaltura/locallib.php'); + + $kalvidpres->timecreated = time(); + + $urlparts = parse_url($kalvidpres->source); + if (!empty($urlparts['path'])) { + $kalvidpres->source = 'http://'.KALTURA_URI_TOKEN.$urlparts['path']; + } + + $kalvidpres->id = $DB->insert_record('kalvidpres', $kalvidpres); + + return $kalvidpres->id; +} + +/** + * Given an object containing all the necessary data, + * (defined by the form in mod_form.php) this function + * will update an existing instance with new data. + * + * @param object $kalvidpres An object from the form in mod_form.php + * @return boolean Success/Fail + */ +function kalvidpres_update_instance($kalvidpres) { + global $DB, $CFG; + require_once($CFG->dirroot.'/local/kaltura/locallib.php'); + + $kalvidpres->timemodified = time(); + $kalvidpres->id = $kalvidpres->instance; + + $urlparts = parse_url($kalvidpres->source); + if (!empty($urlparts['path'])) { + $kalvidpres->source = 'http://'.KALTURA_URI_TOKEN.$urlparts['path']; + } + + $updated = $DB->update_record('kalvidpres', $kalvidpres); + + return $updated; +} + +/** + * Given an ID of an instance of this module, + * this function will permanently delete the instance + * and any data that depends on it. + * + * @param int $id Id of the module instance + * @return boolean Success/Failure + */ +function kalvidpres_delete_instance($id) { + global $DB; + + if (! $kalvidpres = $DB->get_record('kalvidpres', array('id' => $id))) { + return false; + } + + $DB->delete_records('kalvidpres', array('id' => $kalvidpres->id)); + + return true; +} + +/** + * Return a small object with summary information about what a + * user has done with a given particular instance of this module + * Used for user activity reports. + * $return->time = the time they did it + * $return->info = a short text description + * + * @return null + * @todo Finish documenting this function + */ +function kalvidpres_user_outline($course, $user, $mod, $kalvidpres) { + $return = new stdClass; + $return->time = 0; + $return->info = ''; + return $return; +} + +/** + * Print a detailed representation of what a user has done with + * a given particular instance of this module, for user activity reports. + * + * @return boolean + * @todo Finish documenting this function + */ +function kalvidpres_user_complete($course, $user, $mod, $kalvidpres) { + return true; +} + +/** + * Given a course and a time, this module should find recent activity + * that has occurred in kalvidpres activities and print it out. + * Return true if there was output, or false is there was none. + * + * @return boolean + * @todo Finish documenting this function + */ +function kalvidpres_print_recent_activity($course, $viewfullnames, $timestart) { + return false; +} + +/** + * Function to be run periodically according to the moodle cron + * This function searches for things that need to be done, such + * as sending out mail, toggling flags etc ... + * + * @return boolean + */ +function kalvidpres_cron () { + return false; +} + +/** + * Must return an array of users who are participants for a given instance + * of kalvidpres. Must include every user involved in the instance, independient + * of his role (student, teacher, admin...). The returned objects must contain + * at least id property. See other modules as example. + * + * @param int $kalvidpres ID of an instance of this module + * @return boolean|array false if no participants, array of objects otherwise + */ +function kalvidpres_get_participants($kalvidpresid) { + return false; +} + +/** + * @param string $feature FEATURE_xx constant for requested feature + * @return mixed True if module supports feature, null if doesn't know + */ +function kalvidpres_supports($feature) { + switch($feature) { + case FEATURE_MOD_ARCHETYPE: + return MOD_ARCHETYPE_RESOURCE; + break; + case FEATURE_GROUPS: + return true; + break; + case FEATURE_GROUPINGS: + return true; + break; + case FEATURE_GROUPMEMBERSONLY: + return true; + break; + case FEATURE_MOD_INTRO: + return true; + break; + case FEATURE_COMPLETION_TRACKS_VIEWS: + return false; + break; + case FEATURE_GRADE_HAS_GRADE: + return false; + break; + case FEATURE_GRADE_OUTCOMES: + return false; + break; + case FEATURE_BACKUP_MOODLE2: + return true; + break; + default: + return null; + break; + } +} diff --git a/mod/kalvidpres/locallib.php b/mod/kalvidpres/locallib.php new file mode 100644 index 0000000000000..19e48829b9620 --- /dev/null +++ b/mod/kalvidpres/locallib.php @@ -0,0 +1,33 @@ +. + +/** + * Kaltura video presentation locallib + * + * @package mod + * @subpackage kalvidpres + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + */ + +if (!defined('MOODLE_INTERNAL')) { + die('Direct access to this script is forbidden.'); /// It must be included from a Moodle page +} + +function kalvidpres_get_pres_properties() { + return array('width' => '780', + 'height' => '400', + 'uiconf_id' => local_kaltura_get_player_uiconf('presentation'), + 'video_title' => 'Video presentation'); +} + diff --git a/mod/kalvidpres/lti_launch.php b/mod/kalvidpres/lti_launch.php new file mode 100644 index 0000000000000..f729eabc5ebba --- /dev/null +++ b/mod/kalvidpres/lti_launch.php @@ -0,0 +1,74 @@ +. + +/** + * Kaltura video presentation LTI launch page. + * + * @package mod_kalvidpres + * @author Remote-Learner.net Inc + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + * @copyright (C) 2014 Remote Learner.net Inc http://www.remote-learner.net + */ + +require_once(dirname(dirname(dirname(__FILE__))).'/config.php'); +require_once(dirname(dirname(dirname(__FILE__))).'/local/kaltura/locallib.php'); + +global $USER; + +require_login(); +$courseid = required_param('courseid', PARAM_INT); +$height = required_param('height', PARAM_INT); +$width = required_param('width', PARAM_INT); +$withblocks = optional_param('withblocks', 0, PARAM_INT); +$source = optional_param('source', '', PARAM_URL); + +$context = context_course::instance($courseid); + +// If the user isn't a teacher or they are not enrolled in the course context then return with an error. +if (!has_capability('mod/kalvidpres:addinstance', $context) && is_guest($context)) { + echo get_string('nocapabilitytousethisservice', 'error'); + die(); +} + +$course = get_course($courseid); + +$launch = array(); +$launch['id'] = 1; +$launch['cmid'] = 0; +$launch['title'] = 'Kaltura video presentation'; +$launch['module'] = KAF_BROWSE_EMBED_MODULE; +$launch['course'] = $course; +$launch['width'] = $width; +$launch['height'] = $height; +$launch['custom_publishdata'] = ''; +$launch['custom_disable_add_new'] = 'yes'; +$launch['custom_filter_type'] = 'VideoPresentations'; + +$source = local_kaltura_add_kaf_uri_token($source); + +if (false === local_kaltura_url_contains_configured_hostname($source) && !empty($source)) { + echo get_string('invalid_source_parameter', 'mod_kalvidpres'); + die; +} else { + $launch['source'] = urldecode($source); +} + +if (local_kaltura_validate_browseembed_required_params($launch)) { + $content = local_kaltura_request_lti_launch($launch, $withblocks); + echo $content; +} else { + echo get_string('invalid_launch_parameters', 'mod_kalvidpres'); +} diff --git a/mod/kalvidpres/mod_form.php b/mod/kalvidpres/mod_form.php new file mode 100644 index 0000000000000..54137b888935c --- /dev/null +++ b/mod/kalvidpres/mod_form.php @@ -0,0 +1,261 @@ +. + +/** + * Kaltura video presentation formslib class. + * + * @package mod_kalvidpres + * @author Remote-Learner.net Inc + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + * @copyright (C) 2014 Remote Learner.net Inc http://www.remote-learner.net + */ + +if (!defined('MOODLE_INTERNAL')) { + die('Direct access to this script is forbidden.'); +} + +require_once(dirname(dirname(dirname(__FILE__))).'/course/moodleform_mod.php'); +require_once(dirname(dirname(dirname(__FILE__))).'/local/kaltura/locallib.php'); + +class mod_kalvidpres_mod_form extends moodleform_mod { + /** @var string Part of the id for the add video button. */ + protected $addvideobutton = 'add_video'; + + /** + * Forms lib definition function + */ + public function definition() { + global $CFG, $COURSE, $PAGE; + + $PAGE->requires->css('/mod/kalvidpres/styles.css'); + $pageclass = 'kaltura-kalvidpres-body'; + $PAGE->add_body_class($pageclass); + + $params = array( + 'withblocks' => 0, + 'courseid' => $COURSE->id, + 'width' => KALTURA_PANEL_WIDTH, + 'height' => KALTURA_PANEL_HEIGHT + ); + + $url = new moodle_url('/mod/kalvidpres/lti_launch.php', $params); + + $params = array( + 'addvidbtnid' => 'id_'.$this->addvideobutton, + 'ltilaunchurl' => $url->out(), + 'height' => KALTURA_PANEL_HEIGHT, + 'width' => KALTURA_PANEL_WIDTH, + 'modulename' => 'kalvidpres' + ); + + $PAGE->requires->yui_module('moodle-local_kaltura-ltipanel', 'M.local_kaltura.init', array($params), null, true); + // Make replace media language string available to the YUI modules + $PAGE->requires->string_for_js('replace_video', 'kalvidpres'); + + // Require a YUI module to make the object tag be as large as possible. + $params = array( + 'bodyclass' => $pageclass, + 'lastheight' => null, + 'padding' => 15 + ); + $PAGE->requires->yui_module('moodle-local_kaltura-lticontainer', 'M.local_kaltura.init', array($params), null, true); + + $mform =& $this->_form; + + // This line is needed to avoid a PHP warning when the form is submitted. + // Because this value is set as the default for one of the formslib elements. + $uiconf_id = ''; + + /* Hidden fields */ + $attr = array('id' => 'entry_id'); + $mform->addElement('hidden', 'entry_id', '', $attr); + $mform->setType('entry_id', PARAM_NOTAGS); + + $attr = array('id' => 'source'); + $mform->addElement('hidden', 'source', '', $attr); + $mform->setType('source', PARAM_URL); + + $attr = array('id' => 'video_title'); + $mform->addElement('hidden', 'video_title', 'x', $attr); + $mform->setType('video_title', PARAM_TEXT); + + $attr = array('id' => 'uiconf_id'); + $mform->addElement('hidden', 'uiconf_id', '', $attr); + $mform->setDefault('uiconf_id', $uiconf_id); + $mform->setType('uiconf_id', PARAM_INT); + + $attr = array('id' => 'video_entry_id'); + $mform->addElement('hidden', 'video_entry_id', '', $attr); + $mform->setDefault('video_entry_id', 'x'); + $mform->setType('video_entry_id', PARAM_INT); + + $attr = array('id' => 'doc_entry_id'); + $mform->addElement('hidden', 'doc_entry_id', '', $attr); + $mform->setDefault('doc_entry_id', 'x'); + $mform->setType('doc_entry_id', PARAM_INT); + + $attr = array('id' => 'widescreen'); + $mform->addElement('hidden', 'widescreen', 'x', $attr); + $mform->setDefault('widescreen', 0); + $mform->setType('widescreen', PARAM_INT); + + $attr = array('id' => 'height'); + $mform->addElement('hidden', 'height', '', $attr); + $mform->setDefault('height', '365'); + $mform->setType('height', PARAM_TEXT); + + $attr = array('id' => 'width'); + $mform->addElement('hidden', 'width', '', $attr); + $mform->setDefault('width', '400'); + $mform->setType('width', PARAM_TEXT); + + $attr = array('id' => 'metadata'); + $mform->addElement('hidden', 'metadata', '', $attr); + $mform->setType('metadata', PARAM_TEXT); + + $mform->addElement('header', 'general', get_string('general', 'form')); + + $mform->addElement('text', 'name', get_string('name', 'kalvidpres'), array('size' => '64')); + + if (!empty($CFG->formatstringstriptags)) { + $mform->setType('name', PARAM_TEXT); + } else { + $mform->setType('name', PARAM_CLEANHTML); + } + + $mform->addRule('name', null, 'required', null, 'client'); + + $this->add_intro_editor(false); + + $mform->addElement('header', 'video', get_string('video_hdr', 'kalvidpres')); + $this->add_video_definition($mform); + + $this->standard_coursemodule_elements(); + + $this->add_action_buttons(); + + $mform->addElement('html', html_writer::empty_tag('input', array('type' => 'hidden', 'id' => 'closeltipanel', 'value' => 0))); + } + + /** + * This function adds the video thumbnail element and buttons to the form. + * @param MoodleQuickForm $mform An instance of MoodleQuickForm used to add elements to the form. + */ + private function add_video_definition($mform) { + $addinstance = empty($this->current->entry_id) ? true : false; + + $thumbnail = $this->get_thumbnail_markup(!$addinstance); + + $videopreview = $this->get_iframe_video_preview_markup($addinstance); + + $mform->addElement('static', 'add_video_thumb', ' ', $thumbnail); + $mform->addElement('static', 'add_video_preview', ' ', $videopreview); + + $videogroup = array(); + if ($addinstance) { + $videogroup[] =& $mform->createElement('button', $this->addvideobutton, get_string('add_video', 'kalvidpres')); + } else { + $videogroup[] =& $mform->createElement('button', $this->addvideobutton, get_string('replace_video', 'kalvidpres')); + } + + $mform->addGroup($videogroup, 'video_group', ' ', ' ', false); + } + + /** + * This functions returns the markup to display a thumbnail image. + * @param bool $hide Set to true to hide it, otherwise false. When set to hide the thumbnail markup is still rendered + * but the display style is set to none. The reason for this is that the YUI module uses the img tag to place the iframe just below it. + * As well as to hide the image tag when a new video is selected. + * @return string Returns an image element markup. + */ + private function get_thumbnail_markup($hide = false) { + $source = new moodle_url('/local/kaltura/pix/vidThumb.png'); + $alt = get_string('add_video', 'kalvidpres'); + $title = get_string('add_video', 'kalvidpres'); + + $attr = array( + 'id' => 'video_thumbnail', + 'src' => $source->out(), + 'alt' => $alt, + 'title' => $title + ); + + if ($hide) { + $attr['style'] = 'display:none'; + } + + $output = html_writer::empty_tag('img', $attr); + + return $output; + } + + /** + * This functions returns iframe markup for displaying the video preview interface. + * @param bool $hide True to hide the element, otherwise false. + * @return string Returns an iframe markup + */ + private function get_iframe_video_preview_markup($hide = true) { + $width = empty($this->current->width) ? '0px' : $this->current->width.'px'; + $height = empty($this->current->height) ? 'opx' : $this->current->height.'px'; + $source = empty($this->current->source) ? '' : $this->current->source; + + $params = array( + 'id' => 'contentframe', + 'src' => $source, + 'height' => $height, + 'width' => $width, + 'allowfullscreen' => 'true', + 'webkitallowfullscreen' => 'true', + 'mozallowfullscreen' => 'true' + ); + + if ($hide) { + $params['style'] = 'display:none'; + } + + // If the source attribute is not empty, initiate an LTI launch to avoid having ACL issues when another user with permissions edits the module. + // This also assists with full screen functionality on some mobile devices. + if (!empty($source)) { + $ltiparams = array( + 'courseid' => $this->current->course, + 'height' => $height, + 'width' => $width, + 'withblocks' => 0, + 'source' => $source + ); + + $url = new moodle_url('/mod/kalvidpres/lti_launch.php', $ltiparams); + $params['src'] = $url->out(false); + } + + return html_writer::tag('iframe', '', $params); + } + + /** + * This function validates the form on save. + * + * @param array $data Array of form values + * @param array $files Array of files + * @return array $errors Array of error messages + */ + public function validation($data, $files) { + $errors = array(); + + if (empty($data['source'])) { + $errors['add_video_thumb'] = get_string('novidsource', 'kalvidpres'); + } + + return $errors; + } +} diff --git a/mod/kalvidpres/pix/icon.gif b/mod/kalvidpres/pix/icon.gif new file mode 100644 index 0000000000000000000000000000000000000000..550df5db8c43d778c40a1290f1d3a724d0e88133 GIT binary patch literal 128 zcmZ?wbhEHb6krfwSoEKPf#I&Pahh>jn(@rE0|yTL|Np+Z^fq{iV2gnAh z6kuRrcJ. + +/** + * Kaltura video presentation renderer file. + * + * @package mod_kalvidpres + * @author Remote-Learner.net Inc + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + * @copyright (C) 2014 Remote Learner.net Inc http://www.remote-learner.net + */ + +if (!defined('MOODLE_INTERNAL')) { + die('Direct access to this script is forbidden.'); +} + +require_once(dirname(dirname(dirname(__FILE__))).'/local/kaltura/locallib.php'); + +class mod_kalvidpres_renderer extends plugin_renderer_base { + /** + * This function displays the iframe markup. + * @param object $kalvidpres A Kaltura video resrouce instance object. + * @param int $courseid A course id. + * @return string HTML markup. + */ + public function display_iframe($kalvidpres, $courseid) { + $params = array( + 'courseid' => $courseid, + 'height' => $kalvidpres->height, + 'width' => $kalvidpres->width, + 'withblocks' => 0, + 'source' => $kalvidpres->source + ); + $url = new moodle_url('/mod/kalvidpres/lti_launch.php', $params); + + $attr = array( + 'id' => 'contentframe', + 'height' => '100%', + 'width' => $kalvidpres->width, + 'src' => $url->out(false), + 'allowfullscreen' => 'true', + 'webkitallowfullscreen' => 'true', + 'mozallowfullscreen' => 'true' + ); + + $output = html_writer::tag('iframe', '', $attr); + $output = html_writer::tag('div', $output, array('id' => 'kalvid_content')); + return $output; + } +} diff --git a/mod/kalvidpres/styles.css b/mod/kalvidpres/styles.css new file mode 100644 index 0000000000000..7951a285376b4 --- /dev/null +++ b/mod/kalvidpres/styles.css @@ -0,0 +1,38 @@ +#id_add_video { + float: left; +} + +#id_video_preview { + float: left; + margin-left: 5px; +} + +#slider_border { + width: 100%; + height: 18px; + border: 1px solid #000000; + overflow: hidden; +} + +#progress_bar { + float: left; + height: 18px; + width: 0%; + /*border-right: 1px solid #000000;*/ + background: #00FF00; +} + +#loading_text { + position: relative; + top: -18px; + font-weight: bold; + left: 12px; +} + +#kalvid_content { + text-align: center; +} + +#id_video #video_thumbnail { + float: left; +} diff --git a/mod/kalvidpres/version.php b/mod/kalvidpres/version.php new file mode 100644 index 0000000000000..8ff8cb3ea3343 --- /dev/null +++ b/mod/kalvidpres/version.php @@ -0,0 +1,36 @@ +. + +/** + * Kaltura video presentation version file. + * + * @package mod_kalvidpres + * @author Remote-Learner.net Inc + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + * @copyright (C) 2014 Remote Learner.net Inc http://www.remote-learner.net + */ + +if (!defined('MOODLE_INTERNAL')) { + die('Direct access to this script is forbidden.'); +} + +$module->version = 2014023000.01; +$module->component = 'mod_kalvidpres'; +$module->release = 'Kaltura release 4.0.00 (RL: TBD)'; +$module->requires = 2013051400; +$module->cron = 0; +$module->maturity = MATURITY_STABLE; +$module->dependencies = array( + 'local_kaltura' => 2014023000.01 +); \ No newline at end of file diff --git a/mod/kalvidpres/view.php b/mod/kalvidpres/view.php new file mode 100644 index 0000000000000..e8497e1c97449 --- /dev/null +++ b/mod/kalvidpres/view.php @@ -0,0 +1,86 @@ +. + +/** + * Kaltura video presentation view page. + * + * @package mod_kalvidpres + * @author Remote-Learner.net Inc + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + * @copyright (C) 2014 Remote Learner.net Inc http://www.remote-learner.net + */ + +require_once(dirname(dirname(dirname(__FILE__))).'/config.php'); + +$id = optional_param('id', 0, PARAM_INT); + +// Retrieve module instance. +if (empty($id)) { + print_error('invalidid', 'kalvidpres'); +} + +if (!empty($id)) { + + if (!$cm = get_coursemodule_from_id('kalvidpres', $id)) { + print_error('invalidcoursemodule'); + } + + if (!$course = $DB->get_record('course', array('id' => $cm->course))) { + print_error('coursemisconf'); + } + + if (!$kalvidpres = $DB->get_record('kalvidpres', array("id" => $cm->instance))) { + print_error('invalidid', 'kalvidpres'); + } +} + +require_course_login($course->id, true, $cm); + +global $SESSION, $CFG; + +$PAGE->set_url('/mod/kalvidpres/view.php', array('id' => $id)); +$PAGE->set_title(format_string($kalvidpres->name)); +$PAGE->set_heading($course->fullname); +$pageclass = 'kaltura-kalvidpres-body'; +$PAGE->add_body_class($pageclass); + +$context = $PAGE->context; + +add_to_log($course->id, 'kalvidpres', 'view video resource', 'view.php?id='.$cm->id, $kalvidpres->id, $cm->id); + +$completion = new completion_info($course); +$completion->set_module_viewed($cm); + +echo $OUTPUT->header(); + +$renderer = $PAGE->get_renderer('mod_kalvidpres'); + +echo $OUTPUT->box_start('generalbox'); + +echo format_module_intro('kalvidpres', $kalvidpres, $cm->id); + +echo $OUTPUT->box_end(); + +// Require a YUI module to make the object tag be as large as possible. +$params = array( + 'bodyclass' => $pageclass, + 'lastheight' => null, + 'padding' => 15, + 'kalvidwidth' => $kalvidpres->width +); +$PAGE->requires->yui_module('moodle-local_kaltura-lticontainer', 'M.local_kaltura.init', array($params), null, true); + +echo $renderer->display_iframe($kalvidpres, $course->id); + +echo $OUTPUT->footer(); diff --git a/mod/kalvidres/backup/moodle2/backup_kalvidres_activity_task.class.php b/mod/kalvidres/backup/moodle2/backup_kalvidres_activity_task.class.php new file mode 100644 index 0000000000000..a73ff6be762a0 --- /dev/null +++ b/mod/kalvidres/backup/moodle2/backup_kalvidres_activity_task.class.php @@ -0,0 +1,66 @@ +. + +/** + * Kaltura video resource backup activity tasks script. + * + * @package mod_kalvidres + * @author Remote-Learner.net Inc + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + * @copyright (C) 2014 Remote Learner.net Inc http://www.remote-learner.net + */ + +require_once($CFG->dirroot.'/mod/kalvidres/backup/moodle2/backup_kalvidres_stepslib.php'); +require_once($CFG->dirroot.'/mod/kalvidres/backup/moodle2/backup_kalvidres_settingslib.php'); + +/** + * kalvidres backup task that provides all the settings and steps to perform one + * complete backup of the activity + */ +class backup_kalvidres_activity_task extends backup_activity_task { + /** + * Define (add) particular settings this activity can have + */ + protected function define_my_settings() { + // No particular settings for this activity + } + + /** + * Define (add) particular steps this activity can have + */ + protected function define_my_steps() { + // Choice only has one structure step + $this->add_step(new backup_kalvidres_activity_structure_step('kalvidres_structure', 'kalvidres.xml')); + } + + /** + * Code the transformations to perform in the activity in + * order to get transportable (encoded) links + */ + static public function encode_content_links($content) { + global $CFG; + + $base = preg_quote($CFG->wwwroot, "/"); + + // Link to the list of kalvidress + $search="/(".$base."\/mod\/kalvidres\/index.php\?id\=)([0-9]+)/"; + $content= preg_replace($search, '$@KALVIDRESINDEX*$2@$', $content); + + // Link to kalvidres view by moduleid + $search="/(".$base."\/mod\/kalvidres\/view.php\?id\=)([0-9]+)/"; + $content= preg_replace($search, '$@KALVIDRESVIEWBYID*$2@$', $content); + + return $content; + } +} diff --git a/mod/kalvidres/backup/moodle2/backup_kalvidres_settingslib.php b/mod/kalvidres/backup/moodle2/backup_kalvidres_settingslib.php new file mode 100644 index 0000000000000..d42bab7691745 --- /dev/null +++ b/mod/kalvidres/backup/moodle2/backup_kalvidres_settingslib.php @@ -0,0 +1,26 @@ +. + +/** + * Kaltura video resource backup settingslib script. + * + * @package mod_kalvidres + * @author Remote-Learner.net Inc + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + * @copyright (C) 2014 Remote Learner.net Inc http://www.remote-learner.net + */ + + // This activity has no particular settings but the inherited from the generic + // backup_activity_task so here there isn't any class definition, like the ones + // existing in /backup/moodle2/backup_settingslib.php (activities section) diff --git a/mod/kalvidres/backup/moodle2/backup_kalvidres_stepslib.php b/mod/kalvidres/backup/moodle2/backup_kalvidres_stepslib.php new file mode 100644 index 0000000000000..ae532446cc14f --- /dev/null +++ b/mod/kalvidres/backup/moodle2/backup_kalvidres_stepslib.php @@ -0,0 +1,46 @@ +. + +/** + * Kaltura video resource backup stepslib script. + * + * @package mod_kalvidres + * @author Remote-Learner.net Inc + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + * @copyright (C) 2014 Remote Learner.net Inc http://www.remote-learner.net + */ + +/** + * Define all the backup steps that will be used by the backup_kalvidres_activity_task + */ + +/** + * Define the complete kalvidres structure for backup, with file and id annotations + */ +class backup_kalvidres_activity_structure_step extends backup_activity_structure_step { + + protected function define_structure() { + + // Define each element separated + $kalvidres = new backup_nested_element('kalvidres', array('id'), array( + 'name', 'intro', 'introformat', 'entry_id', 'video_title', + 'uiconf_id', 'widescreen', 'height', 'width', 'source', 'timemodified', 'timecreated')); + + // Define sources + $kalvidres->set_source_table('kalvidres', array('id' => backup::VAR_ACTIVITYID)); + + // Return the root element, wrapped into standard activity structure + return $this->prepare_activity_structure($kalvidres); + } +} diff --git a/mod/kalvidres/backup/moodle2/restore_kalvidres_activity_task.class.php b/mod/kalvidres/backup/moodle2/restore_kalvidres_activity_task.class.php new file mode 100644 index 0000000000000..fbd26b2b83f26 --- /dev/null +++ b/mod/kalvidres/backup/moodle2/restore_kalvidres_activity_task.class.php @@ -0,0 +1,107 @@ +. + +/** + * Kaltura video resource restore activity tasks script. + * + * @package mod_kalvidres + * @author Remote-Learner.net Inc + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + * @copyright (C) 2014 Remote Learner.net Inc http://www.remote-learner.net + */ + +defined('MOODLE_INTERNAL') || die(); + +require_once($CFG->dirroot.'/mod/kalvidres/backup/moodle2/restore_kalvidres_stepslib.php'); + +/** + * kalvidres restore task that provides all the settings and steps to perform one + * complete restore of the activity + */ +class restore_kalvidres_activity_task extends restore_activity_task { + + /** + * Define (add) particular settings this activity can have + */ + protected function define_my_settings() { + // No particular settings for this activity + } + + /** + * Define (add) particular steps this activity can have + */ + protected function define_my_steps() { + // Certificate only has one structure step + $this->add_step(new restore_kalvidres_activity_structure_step('kalvidres_structure', 'kalvidres.xml')); + } + + /** + * Define the contents in the activity that must be + * processed by the link decoder + */ + static public function define_decode_contents() { + $contents = array(); + + $contents[] = new restore_decode_content('kalvidres', array('intro'), 'kalvidres'); + + return $contents; + } + + /** + * Define the decoding rules for links belonging + * to the activity to be executed by the link decoder + */ + static public function define_decode_rules() { + $rules = array(); + + $rules[] = new restore_decode_rule('KALVIDRESVIEWBYID', '/mod/kalvidres/view.php?id=$1', 'course_module'); + $rules[] = new restore_decode_rule('KALVIDRESINDEX', '/mod/kalvidres/index.php?id=$1', 'course'); + + return $rules; + + } + + /** + * Define the restore log rules that will be applied + * by the {@link restore_logs_processor} when restoring + * kalvidres logs. It must return one array + * of {@link restore_log_rule} objects + */ + static public function define_restore_log_rules() { + $rules = array(); + + $rules[] = new restore_log_rule('kalvidres', 'view', 'view.php?id={course_module}', '{kalvidres}'); + + return $rules; + } + + /** + * Define the restore log rules that will be applied + * by the {@link restore_logs_processor} when restoring + * course logs. It must return one array + * of {@link restore_log_rule} objects + * + * Note this rules are applied when restoring course logs + * by the restore final task, but are defined here at + * activity level. All them are rules not linked to any module instance (cmid = 0) + */ + static public function define_restore_log_rules_for_course() { + $rules = array(); + + // Fix old wrong uses (missing extension) + $rules[] = new restore_log_rule('kalvidres', 'view all', 'index.php?id={course}', null); + + return $rules; + } +} diff --git a/mod/kalvidres/backup/moodle2/restore_kalvidres_stepslib.php b/mod/kalvidres/backup/moodle2/restore_kalvidres_stepslib.php new file mode 100644 index 0000000000000..9aaac8a0bfbc5 --- /dev/null +++ b/mod/kalvidres/backup/moodle2/restore_kalvidres_stepslib.php @@ -0,0 +1,62 @@ +. + +/** + * Kaltura video resource restore stepslib script. + * + * @package mod_kalvidres + * @author Remote-Learner.net Inc + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + * @copyright (C) 2014 Remote Learner.net Inc http://www.remote-learner.net + */ + +/** + * Define all the restore steps that will be used by the restore_kalvidres_activity_task + */ + +/** + * Structure step to restore one kalvidres activity + */ +class restore_kalvidres_activity_structure_step extends restore_activity_structure_step { + + protected function define_structure() { + + $paths = array(); + + $paths[] = new restore_path_element('kalvidres', '/activity/kalvidres'); + + // Return the paths wrapped into standard activity structure + return $this->prepare_activity_structure($paths); + } + + protected function process_kalvidres($data) { + global $DB; + + $data = (object)$data; + $oldid = $data->id; + $data->course = $this->get_courseid(); + + $data->timemodified = $this->apply_date_offset($data->timemodified); + + // insert the kalvidres record + $newitemid = $DB->insert_record('kalvidres', $data); + // immediately after inserting "activity" record, call this + $this->apply_activity_instance($newitemid); + } + + protected function after_execute() { + // Add kalvidres related files, no need to match by itemname (just internally handled context) + $this->add_related_files('mod_kalvidres', 'intro', null); + } +} diff --git a/mod/kalvidres/db/access.php b/mod/kalvidres/db/access.php new file mode 100644 index 0000000000000..93d5f0e2e163a --- /dev/null +++ b/mod/kalvidres/db/access.php @@ -0,0 +1,35 @@ +. + +/** + * Kaltura video resource accesslib. + * + * @package mod_kalvidres + * @author Remote-Learner.net Inc + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + * @copyright (C) 2014 Remote Learner.net Inc http://www.remote-learner.net + */ + +$capabilities = array( + 'mod/kalvidres:addinstance' => array( + 'riskbitmask' => RISK_XSS, + 'captype' => 'write', + 'contextlevel' => CONTEXT_COURSE, + 'archetypes' => array( + 'editingteacher' => CAP_ALLOW, + 'manager' => CAP_ALLOW + ), + 'clonepermissionsfrom' => 'moodle/course:manageactivities' + ), + ); \ No newline at end of file diff --git a/mod/kalvidres/db/install.xml b/mod/kalvidres/db/install.xml new file mode 100644 index 0000000000000..4da7c9abe95c3 --- /dev/null +++ b/mod/kalvidres/db/install.xml @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    +
    \ No newline at end of file diff --git a/mod/kalvidres/db/log.php b/mod/kalvidres/db/log.php new file mode 100644 index 0000000000000..2006b3cb7e043 --- /dev/null +++ b/mod/kalvidres/db/log.php @@ -0,0 +1,28 @@ +. + +/** + * Kaltura video resource log file. + * + * @package mod_kalvidres + * @author Remote-Learner.net Inc + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + * @copyright (C) 2014 Remote Learner.net Inc http://www.remote-learner.net + */ + +defined('MOODLE_INTERNAL') || die(); + +$logs = array( + array('module' => 'kalvidres', 'action' => 'view', 'mtable' => 'kalvidres', 'field' => 'name'), +); diff --git a/mod/kalvidres/db/upgrade.php b/mod/kalvidres/db/upgrade.php new file mode 100644 index 0000000000000..39060dc9059e8 --- /dev/null +++ b/mod/kalvidres/db/upgrade.php @@ -0,0 +1,71 @@ +get_manager(); + + if ($oldversion < 2011110702) { + + // Changing type of field intro on table kalvidres to text. + $table = new xmldb_table('kalvidres'); + $field = new xmldb_field('intro', XMLDB_TYPE_TEXT, 'small', null, null, null, null, 'name'); + + // Launch change of type for field intro. + $dbman->change_field_type($table, $field); + + // Kalvidres savepoint reached. + upgrade_mod_savepoint(true, 2011110702, 'kalvidres'); + } + + if ($oldversion < 2014013000) { + + // Define field source to be added to kalvidres. + $table = new xmldb_table('kalvidres'); + $field = new xmldb_field('source', XMLDB_TYPE_TEXT, null, null, null, null, null, 'width'); + + // Conditionally launch add field source. + if (!$dbman->field_exists($table, $field)) { + $dbman->add_field($table, $field); + } + + // Kalvidres savepoint reached. + upgrade_mod_savepoint(true, 2014013000, 'kalvidres'); + } + + if ($oldversion < 2014023000.01) { + + // Define field metadata to be added to kalvidres. + $table = new xmldb_table('kalvidres'); + $field = new xmldb_field('metadata', XMLDB_TYPE_TEXT, null, null, null, null, null, 'source'); + + // Conditionally launch add field metadata. + if (!$dbman->field_exists($table, $field)) { + $dbman->add_field($table, $field); + } + + // Kalvidassign savepoint reached. + upgrade_mod_savepoint(true, 2014023000.01, 'kalvidres'); + } + + return true; +} \ No newline at end of file diff --git a/mod/kalvidres/lang/en/kalvidres.php b/mod/kalvidres/lang/en/kalvidres.php new file mode 100644 index 0000000000000..8fcff45e8d121 --- /dev/null +++ b/mod/kalvidres/lang/en/kalvidres.php @@ -0,0 +1,36 @@ +. + +/** + * Kaltura video resource language file. + * + * @package mod_kalvidres + * @author Remote-Learner.net Inc + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + * @copyright (C) 2014 Remote Learner.net Inc http://www.remote-learner.net + */ +$string['modulenameplural'] = 'Kaltura Video Resource'; +$string['modulename'] = 'Kaltura Video Resource'; +$string['modulename_help'] = 'The Kaltura Video Resource enables a teacher to create a resource using a Kaltura video.'; +$string['pluginadministration'] = 'Kaltura Video Resource'; +$string['pluginname'] = 'Kaltura Video Resource'; +$string['name'] = 'Name'; +$string['novidsource'] = 'No media content found. You must add media content in order to save a video resource.'; +$string['video_hdr'] = 'Video'; +$string['add_video'] = 'Add media'; +$string['invalidid'] = 'Invalid ID'; +$string['invalid_launch_parameters'] = 'Invalid launch parameters'; +$string['invalid_source_parameter'] = 'Invalid source parameter'; +$string['replace_video'] = 'Replace media'; +$string['kalvidres:addinstance'] = 'Add a Kaltura Video Resource'; diff --git a/mod/kalvidres/lib.php b/mod/kalvidres/lib.php new file mode 100644 index 0000000000000..62b1f782c6f8b --- /dev/null +++ b/mod/kalvidres/lib.php @@ -0,0 +1,199 @@ +. + +/** + * Kaltura video resource library script. + * + * @package mod_kalvidres + * @author Remote-Learner.net Inc + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + * @copyright (C) 2014 Remote Learner.net Inc http://www.remote-learner.net + */ + +if (!defined('MOODLE_INTERNAL')) { + die('Direct access to this script is forbidden.'); +} + +/** + * Given an object containing all the necessary data, + * (defined by the form in mod_form.php) this function + * will create a new instance and return the id number + * of the new instance. + * + * @param object $kalvidres An object from the form in mod_form.php + * @return int The id of the newly inserted kalvidassign record + */ +function kalvidres_add_instance($kalvidres) { + global $DB, $CFG; + require_once($CFG->dirroot.'/local/kaltura/locallib.php'); + + $kalvidres->timecreated = time(); + + $urlparts = parse_url($kalvidres->source); + if (!empty($urlparts['path'])) { + $kalvidres->source = 'http://'.KALTURA_URI_TOKEN.$urlparts['path']; + } + $kalvidres->id = $DB->insert_record('kalvidres', $kalvidres); + + return $kalvidres->id; +} + +/** + * Given an object containing all the necessary data, + * (defined by the form in mod_form.php) this function + * will update an existing instance with new data. + * + * @param object $kalvidres An object from the form in mod_form.php + * @return boolean Success/Fail + */ +function kalvidres_update_instance($kalvidres) { + global $DB, $CFG; + require_once($CFG->dirroot.'/local/kaltura/locallib.php'); + + $kalvidres->timemodified = time(); + $kalvidres->id = $kalvidres->instance; + $urlparts = parse_url($kalvidres->source); + if (!empty($urlparts['path'])) { + $kalvidres->source = 'http://'.KALTURA_URI_TOKEN.$urlparts['path']; + } + + $updated = $DB->update_record('kalvidres', $kalvidres); + + return $updated; +} + +/** + * Given an ID of an instance of this module, + * this function will permanently delete the instance + * and any data that depends on it. + * + * @param int $id Id of the module instance + * @return boolean Success/Failure + */ +function kalvidres_delete_instance($id) { + global $DB; + + if (! $kalvidres = $DB->get_record('kalvidres', array('id' => $id))) { + return false; + } + + $DB->delete_records('kalvidres', array('id' => $kalvidres->id)); + + return true; +} + +/** + * Return a small object with summary information about what a + * user has done with a given particular instance of this module + * Used for user activity reports. + * $return->time = the time they did it + * $return->info = a short text description + * + * @return null + * @todo Finish documenting this function + */ +function kalvidres_user_outline($course, $user, $mod, $kalvidres) { + $return = new stdClass; + $return->time = 0; + $return->info = ''; + return $return; +} + +/** + * Print a detailed representation of what a user has done with + * a given particular instance of this module, for user activity reports. + * + * @return boolean + * @todo Finish documenting this function + */ +function kalvidres_user_complete($course, $user, $mod, $kalvidres) { + return true; +} + +/** + * Given a course and a time, this module should find recent activity + * that has occurred in kalvidres activities and print it out. + * Return true if there was output, or false is there was none. + * + * @return boolean + * @todo Finish documenting this function + */ +function kalvidres_print_recent_activity($course, $viewfullnames, $timestart) { + // TODO: finish this function + return false; // True if anything was printed, otherwise false +} + +/** + * Function to be run periodically according to the moodle cron + * This function searches for things that need to be done, such + * as sending out mail, toggling flags etc ... + * + * @return boolean + */ +function kalvidres_cron () { + return false; +} + +/** + * Must return an array of users who are participants for a given instance + * of kalvidres. Must include every user involved in the instance, independient + * of his role (student, teacher, admin...). The returned objects must contain + * at least id property. See other modules as example. + * + * @param int $kalvidres ID of an instance of this module + * @return boolean|array false if no participants, array of objects otherwise + */ +function kalvidres_get_participants($kalvidresid) { + // TODO: finish this function + return false; +} + +/** + * @param string $feature FEATURE_xx constant for requested feature + * @return mixed True if module supports feature, null if doesn't know + */ +function kalvidres_supports($feature) { + switch($feature) { + case FEATURE_MOD_ARCHETYPE: + return MOD_ARCHETYPE_RESOURCE; + break; + case FEATURE_GROUPS: + return true; + break; + case FEATURE_GROUPINGS: + return true; + break; + case FEATURE_GROUPMEMBERSONLY: + return true; + break; + case FEATURE_MOD_INTRO: + return true; + break; + case FEATURE_COMPLETION_TRACKS_VIEWS: + return false; + break; + case FEATURE_GRADE_HAS_GRADE: + return false; + break; + case FEATURE_GRADE_OUTCOMES: + return false; + break; + case FEATURE_BACKUP_MOODLE2: + return true; + break; + default: + return null; + break; + } +} diff --git a/mod/kalvidres/lti_launch.php b/mod/kalvidres/lti_launch.php new file mode 100644 index 0000000000000..7655931c53d36 --- /dev/null +++ b/mod/kalvidres/lti_launch.php @@ -0,0 +1,73 @@ +. + +/** + * Kaltura video resource LTI launch page. + * + * @package mod_kalvidres + * @author Remote-Learner.net Inc + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + * @copyright (C) 2014 Remote Learner.net Inc http://www.remote-learner.net + */ + +require_once(dirname(dirname(dirname(__FILE__))).'/config.php'); +require_once(dirname(dirname(dirname(__FILE__))).'/local/kaltura/locallib.php'); + +global $USER; + +require_login(); + +$courseid = required_param('courseid', PARAM_INT); +$height = required_param('height', PARAM_INT); +$width = required_param('width', PARAM_INT); +$withblocks = optional_param('withblocks', 0, PARAM_INT); +$source = optional_param('source', '', PARAM_URL); + +$context = context_course::instance($courseid); + +// If the user isn't a teacher or they are not enrolled in the course context then return with an error. +if (!has_capability('mod/kalvidres:addinstance', $context) && is_guest($context)) { + echo get_string('nocapabilitytousethisservice', 'error'); + die(); +} + +$course = get_course($courseid); + +$launch = array(); +$launch['id'] = 1; +$launch['cmid'] = 0; +$launch['title'] = 'Kaltura video resource'; +$launch['module'] = KAF_BROWSE_EMBED_MODULE; +$launch['course'] = $course; +$launch['width'] = $width; +$launch['height'] = $height; +$launch['custom_publishdata'] = ''; + +$source = local_kaltura_add_kaf_uri_token($source); + +if (false === local_kaltura_url_contains_configured_hostname($source) && !empty($source)) { + echo get_string('invalid_source_parameter', 'mod_kalvidres'); + die; +} else { + $launch['source'] = urldecode($source); +} + +if (local_kaltura_validate_browseembed_required_params($launch)) { + $content = local_kaltura_request_lti_launch($launch, $withblocks); + echo $content; +} else { + echo get_string('invalid_launch_parameters', 'mod_kalvidres'); +} diff --git a/mod/kalvidres/mod_form.php b/mod/kalvidres/mod_form.php new file mode 100644 index 0000000000000..c82a6e01b73bc --- /dev/null +++ b/mod/kalvidres/mod_form.php @@ -0,0 +1,251 @@ +. + +/** + * Kaltura video resource formslib class. + * + * @package mod_kalvidres + * @author Remote-Learner.net Inc + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + * @copyright (C) 2014 Remote Learner.net Inc http://www.remote-learner.net + */ + +if (!defined('MOODLE_INTERNAL')) { + die('Direct access to this script is forbidden.'); +} + +require_once(dirname(dirname(dirname(__FILE__))).'/course/moodleform_mod.php'); +require_once(dirname(dirname(dirname(__FILE__))).'/local/kaltura/locallib.php'); + +class mod_kalvidres_mod_form extends moodleform_mod { + /** @var string Part of the id for the add video button. */ + protected $addvideobutton = 'add_video'; + + /** + * Forms lib definition function + */ + public function definition() { + global $CFG, $COURSE, $PAGE; + + $PAGE->requires->css('/mod/kalvidres/styles.css'); + $pageclass = 'kaltura-kalvidres-body'; + $PAGE->add_body_class($pageclass); + + $params = array( + 'withblocks' => 0, + 'courseid' => $COURSE->id, + 'width' => KALTURA_PANEL_WIDTH, + 'height' => KALTURA_PANEL_HEIGHT + ); + + $url = new moodle_url('/mod/kalvidres/lti_launch.php', $params); + + $params = array( + 'addvidbtnid' => 'id_'.$this->addvideobutton, + 'ltilaunchurl' => $url->out(), + 'height' => KALTURA_PANEL_HEIGHT, + 'width' => KALTURA_PANEL_WIDTH, + 'modulename' => 'kalvidres' + ); + + $PAGE->requires->yui_module('moodle-local_kaltura-ltipanel', 'M.local_kaltura.init', array($params), null, true); + // Make replace media language string available to the YUI modules + $PAGE->requires->string_for_js('replace_video', 'kalvidres'); + + // Require a YUI module to make the object tag be as large as possible. + $params = array( + 'bodyclass' => $pageclass, + 'lastheight' => null, + 'padding' => 15 + ); + $PAGE->requires->yui_module('moodle-local_kaltura-lticontainer', 'M.local_kaltura.init', array($params), null, true); + + $mform =& $this->_form; + + // This line is needed to avoid a PHP warning when the form is submitted. + // Because this value is set as the default for one of the formslib elements. + $uiconf_id = ''; + + /* Hidden fields */ + $attr = array('id' => 'entry_id'); + $mform->addElement('hidden', 'entry_id', '', $attr); + $mform->setType('entry_id', PARAM_NOTAGS); + + $attr = array('id' => 'source'); + $mform->addElement('hidden', 'source', '', $attr); + $mform->setType('source', PARAM_URL); + + $attr = array('id' => 'video_title'); + $mform->addElement('hidden', 'video_title', 'x', $attr); + $mform->setType('video_title', PARAM_TEXT); + + $attr = array('id' => 'uiconf_id'); + $mform->addElement('hidden', 'uiconf_id', '', $attr); + $mform->setDefault('uiconf_id', $uiconf_id); + $mform->setType('uiconf_id', PARAM_INT); + + $attr = array('id' => 'widescreen'); + $mform->addElement('hidden', 'widescreen', 'x', $attr); + $mform->setDefault('widescreen', 0); + $mform->setType('widescreen', PARAM_INT); + + $attr = array('id' => 'height'); + $mform->addElement('hidden', 'height', '', $attr); + $mform->setDefault('height', '365'); + $mform->setType('height', PARAM_TEXT); + + $attr = array('id' => 'width'); + $mform->addElement('hidden', 'width', '', $attr); + $mform->setDefault('width', '400'); + $mform->setType('width', PARAM_TEXT); + + $attr = array('id' => 'metadata'); + $mform->addElement('hidden', 'metadata', '', $attr); + $mform->setType('metadata', PARAM_TEXT); + + $mform->addElement('header', 'general', get_string('general', 'form')); + + $mform->addElement('text', 'name', get_string('name', 'kalvidres'), array('size' => '64')); + + if (!empty($CFG->formatstringstriptags)) { + $mform->setType('name', PARAM_TEXT); + } else { + $mform->setType('name', PARAM_CLEANHTML); + } + + $mform->addRule('name', null, 'required', null, 'client'); + + $this->add_intro_editor(false); + + $mform->addElement('header', 'video', get_string('video_hdr', 'kalvidres')); + $this->add_video_definition($mform); + + $this->standard_coursemodule_elements(); + + $this->add_action_buttons(); + + $mform->addElement('html', html_writer::empty_tag('input', array('type' => 'hidden', 'id' => 'closeltipanel', 'value' => 0))); + } + + /** + * This function adds the video thumbnail element and buttons to the form. + * @param MoodleQuickForm $mform An instance of MoodleQuickForm used to add elements to the form. + */ + private function add_video_definition($mform) { + $addinstance = empty($this->current->entry_id) ? true : false; + + $thumbnail = $this->get_thumbnail_markup(!$addinstance); + + $videopreview = $this->get_iframe_video_preview_markup($addinstance); + + $mform->addElement('static', 'add_video_thumb', ' ', $thumbnail); + $mform->addElement('static', 'add_video_preview', ' ', $videopreview); + + $videogroup = array(); + if ($addinstance) { + $videogroup[] =& $mform->createElement('button', $this->addvideobutton, get_string('add_video', 'kalvidres')); + } else { + $videogroup[] =& $mform->createElement('button', $this->addvideobutton, get_string('replace_video', 'kalvidres')); + } + + $mform->addGroup($videogroup, 'video_group', ' ', ' ', false); + } + + /** + * This functions returns the markup to display a thumbnail image. + * @param bool $hide Set to true to hide it, otherwise false. When set to hide the thumbnail markup is still rendered + * but the display style is set to none. The reason for this is that the YUI module uses the img tag to place the iframe just below it. + * As well as to hide the image tag when a new video is selected. + * @return string Returns an image element markup. + */ + private function get_thumbnail_markup($hide = false) { + $source = new moodle_url('/local/kaltura/pix/vidThumb.png'); + $alt = get_string('add_video', 'kalvidres'); + $title = get_string('add_video', 'kalvidres'); + + $attr = array( + 'id' => 'video_thumbnail', + 'src' => $source->out(), + 'alt' => $alt, + 'title' => $title + ); + + if ($hide) { + $attr['style'] = 'display:none'; + } + + $output = html_writer::empty_tag('img', $attr); + + return $output; + } + + /** + * This functions returns iframe markup for displaying the video preview interface. + * @param bool $hide True to hide the element, otherwise false. + * @return string Returns an iframe markup + */ + private function get_iframe_video_preview_markup($hide = true) { + $width = empty($this->current->width) ? '0px' : $this->current->width.'px'; + $height = empty($this->current->height) ? 'opx' : $this->current->height.'px'; + $source = empty($this->current->source) ? '' : $this->current->source; + + $params = array( + 'id' => 'contentframe', + 'src' => $source, + 'height' => $height, + 'width' => $width, + 'allowfullscreen' => 'true', + 'webkitallowfullscreen' => 'true', + 'mozallowfullscreen' => 'true' + ); + + if ($hide) { + $params['style'] = 'display:none'; + } + + // If the source attribute is not empty, initiate an LTI launch to avoid having ACL issues when another user with permissions edits the module. + // This also assists with full screen functionality on some mobile devices. + if (!empty($source)) { + $ltiparams = array( + 'courseid' => $this->current->course, + 'height' => $height, + 'width' => $width, + 'withblocks' => 0, + 'source' => $source + ); + + $url = new moodle_url('/mod/kalvidres/lti_launch.php', $ltiparams); + $params['src'] = $url->out(false); + } + + return html_writer::tag('iframe', '', $params); + } + + /** + * This function validates the form on save. + * + * @param array $data Array of form values + * @param array $files Array of files + * @return array $errors Array of error messages + */ + public function validation($data, $files) { + $errors = array(); + + if (empty($data['source'])) { + $errors['add_video_thumb'] = get_string('novidsource', 'kalvidres'); + } + + return $errors; + } +} diff --git a/mod/kalvidres/pix/icon.gif b/mod/kalvidres/pix/icon.gif new file mode 100644 index 0000000000000000000000000000000000000000..550df5db8c43d778c40a1290f1d3a724d0e88133 GIT binary patch literal 128 zcmZ?wbhEHb6krfwSoEKPf#I&Pahh>jn(@rE0|yTL|Np+Z^fq{iV2gnAh z6kuRrcJ. + +/** + * Kaltura video resource renderer file. + * + * @package mod_kalvidres + * @author Remote-Learner.net Inc + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + * @copyright (C) 2014 Remote Learner.net Inc http://www.remote-learner.net + */ + +if (!defined('MOODLE_INTERNAL')) { + die('Direct access to this script is forbidden.'); +} + +require_once(dirname(dirname(dirname(__FILE__))).'/local/kaltura/locallib.php'); + +class mod_kalvidres_renderer extends plugin_renderer_base { + /** + * This function displays the title of the video in bold. + * @param string $title The title of the video. + * @return string HTML markup. + */ + public function display_mod_info($title) { + $output = ''; + + $attr = array('for' => 'video_name'); + $output .= html_writer::start_tag('b'); + $output .= html_writer::tag('div', $title); + $output .= html_writer::end_tag('b'); + $output .= html_writer::empty_tag('br'); + + return $output; + } + + /** + * This function displays the iframe markup. + * @param object $kalvidres A Kaltura video resrouce instance object. + * @param int $courseid A course id. + * @return string HTML markup. + */ + public function display_iframe($kalvidres, $courseid) { + $params = array( + 'courseid' => $courseid, + 'height' => $kalvidres->height, + 'width' => $kalvidres->width, + 'withblocks' => 0, + 'source' => $kalvidres->source + ); + $url = new moodle_url('/mod/kalvidres/lti_launch.php', $params); + + $attr = array( + 'id' => 'contentframe', + 'height' => '100%', + 'width' => $kalvidres->width, + 'src' => $url->out(false), + 'allowfullscreen' => 'true', + 'webkitallowfullscreen' => 'true', + 'mozallowfullscreen' => 'true' + ); + + $output = html_writer::tag('iframe', '', $attr); + $output = html_writer::tag('center', $output); + return $output; + } +} \ No newline at end of file diff --git a/mod/kalvidres/styles.css b/mod/kalvidres/styles.css new file mode 100644 index 0000000000000..129e37c40e949 --- /dev/null +++ b/mod/kalvidres/styles.css @@ -0,0 +1,34 @@ +#id_add_video { + float: left; +} + +#id_video_properties, #id_video_preview { + float: left; + margin-left: 5px; +} + +#slider_border { + width: 100%; + height: 18px; + border: 1px solid #000000; + overflow: hidden; +} + +#progress_bar { + float: left; + height: 18px; + width: 0%; + /*border-right: 1px solid #000000;*/ + background: #00FF00; +} + +#loading_text { + position: relative; + top: -18px; + font-weight: bold; + left: 12px; +} + +#id_video #video_thumbnail { + float: left; +} diff --git a/mod/kalvidres/version.php b/mod/kalvidres/version.php new file mode 100644 index 0000000000000..1fbda03a3c4fa --- /dev/null +++ b/mod/kalvidres/version.php @@ -0,0 +1,36 @@ +. + +/** + * Kaltura video resource version file. + * + * @package mod_kalvidres + * @author Remote-Learner.net Inc + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + * @copyright (C) 2014 Remote Learner.net Inc http://www.remote-learner.net + */ + +if (!defined('MOODLE_INTERNAL')) { + die('Direct access to this script is forbidden.'); +} + +$module->version = 2014023000.01; +$module->component = 'mod_kalvidres'; +$module->release = 'Kaltura release 4.0.00 (RL: TBD)'; +$module->requires = 2013111801; +$module->cron = 0; +$module->maturity = MATURITY_STABLE; +$module->dependencies = array( + 'local_kaltura' => 2014013000.01 +); \ No newline at end of file diff --git a/mod/kalvidres/view.php b/mod/kalvidres/view.php new file mode 100644 index 0000000000000..bb09dfb86b244 --- /dev/null +++ b/mod/kalvidres/view.php @@ -0,0 +1,86 @@ +. + +/** + * Kaltura video resource view page. + * + * @package mod_kalvidres + * @author Remote-Learner.net Inc + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + * @copyright (C) 2014 Remote Learner.net Inc http://www.remote-learner.net + */ + +require_once(dirname(dirname(dirname(__FILE__))).'/config.php'); + +$id = optional_param('id', 0, PARAM_INT); + +// Retrieve module instance. +if (empty($id)) { + print_error('invalidid', 'kalvidres'); +} + +if (!empty($id)) { + + if (!$cm = get_coursemodule_from_id('kalvidres', $id)) { + print_error('invalidcoursemodule'); + } + + if (!$course = $DB->get_record('course', array('id' => $cm->course))) { + print_error('coursemisconf'); + } + + if (!$kalvidres = $DB->get_record('kalvidres', array("id" => $cm->instance))) { + print_error('invalidid', 'kalvidres'); + } +} + +require_course_login($course->id, true, $cm); + +global $SESSION, $CFG; + +$PAGE->set_url('/mod/kalvidres/view.php', array('id' => $id)); +$PAGE->set_title(format_string($kalvidres->name)); +$PAGE->set_heading($course->fullname); +$pageclass = 'kaltura-kalvidres-body'; +$PAGE->add_body_class($pageclass); + +$context = $PAGE->context; + +add_to_log($course->id, 'kalvidres', 'view video resource', 'view.php?id='.$cm->id, $kalvidres->id, $cm->id); + +$completion = new completion_info($course); +$completion->set_module_viewed($cm); + +echo $OUTPUT->header(); + +$description = format_module_intro('kalvidres', $kalvidres, $cm->id); +if (!empty($description)) { + echo $OUTPUT->box_start('generalbox'); + echo $description; + echo $OUTPUT->box_end(); +} + +$renderer = $PAGE->get_renderer('mod_kalvidres'); + +// Require a YUI module to make the object tag be as large as possible. +$params = array( + 'bodyclass' => $pageclass, + 'lastheight' => null, + 'padding' => 15 +); +$PAGE->requires->yui_module('moodle-local_kaltura-lticontainer', 'M.local_kaltura.init', array($params), null, true); + +echo $renderer->display_iframe($kalvidres, $course->id); + +echo $OUTPUT->footer(); From a8ea8ebd4d6711600deea7cbd8b482f15cd0ae40 Mon Sep 17 00:00:00 2001 From: Gonen Radai Date: Tue, 7 Oct 2014 12:35:20 +0300 Subject: [PATCH 005/326] 2.7 support + KMS-4401 fix --- .gitignore | 1 + .../lang/en/atto_kalturamedia.php | 32 ++++ lib/editor/atto/plugins/kalturamedia/lib.php | 35 ++++ .../atto/plugins/kalturamedia/ltibrowse.php | 79 ++++++++ .../atto/plugins/kalturamedia/pix/icon.png | Bin 0 -> 1912 bytes .../atto/plugins/kalturamedia/version.php | 29 +++ .../moodle-atto_kalturamedia-button-debug.js | 180 ++++++++++++++++++ .../moodle-atto_kalturamedia-button-min.js | 180 ++++++++++++++++++ .../moodle-atto_kalturamedia-button.js | 180 ++++++++++++++++++ .../kalturamedia/yui/src/button/build.json | 10 + .../kalturamedia/yui/src/button/js/button.js | 164 ++++++++++++++++ .../yui/src/button/meta/button.json | 7 + local/kaltura/attobsepreview.php | 49 +++++ local/kaltura/locallib.php | 8 +- local/kaltura/service.php | 16 +- 15 files changed, 966 insertions(+), 4 deletions(-) create mode 100644 .gitignore create mode 100644 lib/editor/atto/plugins/kalturamedia/lang/en/atto_kalturamedia.php create mode 100644 lib/editor/atto/plugins/kalturamedia/lib.php create mode 100644 lib/editor/atto/plugins/kalturamedia/ltibrowse.php create mode 100644 lib/editor/atto/plugins/kalturamedia/pix/icon.png create mode 100644 lib/editor/atto/plugins/kalturamedia/version.php create mode 100644 lib/editor/atto/plugins/kalturamedia/yui/build/moodle-atto_kalturamedia-button/moodle-atto_kalturamedia-button-debug.js create mode 100644 lib/editor/atto/plugins/kalturamedia/yui/build/moodle-atto_kalturamedia-button/moodle-atto_kalturamedia-button-min.js create mode 100644 lib/editor/atto/plugins/kalturamedia/yui/build/moodle-atto_kalturamedia-button/moodle-atto_kalturamedia-button.js create mode 100644 lib/editor/atto/plugins/kalturamedia/yui/src/button/build.json create mode 100644 lib/editor/atto/plugins/kalturamedia/yui/src/button/js/button.js create mode 100644 lib/editor/atto/plugins/kalturamedia/yui/src/button/meta/button.json create mode 100644 local/kaltura/attobsepreview.php diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000000000..53a5344128433 --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +/nbproject diff --git a/lib/editor/atto/plugins/kalturamedia/lang/en/atto_kalturamedia.php b/lib/editor/atto/plugins/kalturamedia/lang/en/atto_kalturamedia.php new file mode 100644 index 0000000000000..9c522f0f95a1e --- /dev/null +++ b/lib/editor/atto/plugins/kalturamedia/lang/en/atto_kalturamedia.php @@ -0,0 +1,32 @@ +. + +/** + * Strings for component 'atto_media', language 'en'. + * + * @package atto_media + * @copyright 2013 Damyon Wiese + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + */ + +require_once(dirname(dirname(dirname(dirname(dirname(dirname(dirname(dirname(__FILE__)))))))).'/config.php'); +require_once($CFG->dirroot.'/local/kaltura/locallib.php'); + + +$string['pluginname'] = 'Kaltura Media'; +$string['popuptitle'] = 'Select Media'; +$string['embedbuttontext'] = 'Embed'; +$string['kalturauritoken'] = KALTURA_URI_TOKEN; diff --git a/lib/editor/atto/plugins/kalturamedia/lib.php b/lib/editor/atto/plugins/kalturamedia/lib.php new file mode 100644 index 0000000000000..9e400ac92e3b6 --- /dev/null +++ b/lib/editor/atto/plugins/kalturamedia/lib.php @@ -0,0 +1,35 @@ +. + +/** + * Atto text editor integration version file. + * + * @package atto_media + * @copyright 2013 Damyon Wiese + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + */ + +/** + * Initialise the js strings required for this plugin + */ +function atto_kalturamedia_strings_for_js() { + global $PAGE; + + $PAGE->requires->strings_for_js(array('popuptitle', + 'embedbuttontext', + 'kalturauritoken',), + 'atto_kalturamedia'); +} diff --git a/lib/editor/atto/plugins/kalturamedia/ltibrowse.php b/lib/editor/atto/plugins/kalturamedia/ltibrowse.php new file mode 100644 index 0000000000000..2d2ef8a834982 --- /dev/null +++ b/lib/editor/atto/plugins/kalturamedia/ltibrowse.php @@ -0,0 +1,79 @@ +. + +/** + * Kaltura media LTI launch page. + * + * @package tinymce_kalturamedia + * @author Remote-Learner.net Inc + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + * @copyright (C) 2014 Remote Learner.net Inc http://www.remote-learner.net + */ + +error_reporting(E_ALL); +require_once(dirname(dirname(dirname(dirname(dirname(dirname(__FILE__)))))).'/config.php'); +require_once($CFG->dirroot.'/local/kaltura/locallib.php'); +//require_once('renderer.php'); + +global $PAGE, $USER; + +require_login(); + +$contextid = required_param('contextid', PARAM_INT); +$height = required_param('height', PARAM_INT); +$width = required_param('width', PARAM_INT); +$withblocks = optional_param('withblocks', 0, PARAM_INT); + +$context = context::instance_by_id($contextid); + +$launch = array(); +$course = 0; + +if ($context instanceof context_course) { + $course = get_course($context->instanceid); + +} else if ($context instanceof context_system || $context instanceof context_coursecat) { + $course = get_course(1); +} else { + // Find parent context + $parentcontexts = $context->get_parent_contexts(false); + + foreach ($parentcontexts as $ctx) { + if ($ctx instanceof context_course) { + $course = get_course($ctx->instanceid); + break; + } else if ($ctx instanceof context_system || $ctx instanceof context_coursecat) { + $course = get_course(1); + break; + } + } +} + +$launch['id'] = 1; +$launch['cmid'] = 0; +$launch['title'] = 'Kaltura media'; +$launch['module'] = KAF_BROWSE_EMBED_MODULE; +$launch['course'] = $course; +$launch['width'] = $width; +$launch['height'] = $height; +$launch['custom_publishdata'] = ''; + +if (local_kaltura_validate_browseembed_required_params($launch)) { + $content = local_kaltura_request_lti_launch($launch, $withblocks, $editor = 'atto'); + echo $content; +} else { + echo get_string('invalid_launch_parameters', 'mod_kalvidres'); +} diff --git a/lib/editor/atto/plugins/kalturamedia/pix/icon.png b/lib/editor/atto/plugins/kalturamedia/pix/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..615c31d68e7c309bb63b6098a4bfbcad17a0bd27 GIT binary patch literal 1912 zcmaJ?X;c$u6b)e!Lqt5r4Hw2yt5C8NvXr2K5P}krB?WO~NCt=|nK&6t5U{wRsDPp( zR?%wJiY!$?i@2c(3R)M`atMkdM+;Q}i;AF#zjX4L3#Hi6(Z+o*#S%V7+Nf#XzKA=r8LA_%CILNJ0OW5{&A zaJ)*o3WdW~1%)eCEm!cB;B0Te%P7DFG%yAMMvYpl7Z`=$fUW>vTaM`Zc7Vh+(|~Rp~Gl zq6I99Pz;iQ2|+y5PbFw{Uu3oV&)0-s7~Kfz=u8^JQqmw$Ci{P=M)L)&$3o$+`TnP{ zK0Hwe(?elBl7K4k#>GyvgwhFoQ5eDyG#o+HgSR+89>EZOJfZ`9!#F^MN~=T+`T?{| zCJ4~#F-WU`1H?iQ=hIXwrGUfr3A}9OI!cd z=D{P}JC@}a)8d;iwuiO2*HPTmCMRbA|5iEz#G-JcX?mDLU|1Z*+iZT+^mgoASKDP{ z4l2mxwi?gzn_07RPgV;LjT%l)AJ6uWeXvDXGAwrDsBv*)IWOR}p!MoYnwt}nPqbhD zYdmWsxINRvngY9>r;s!V(s|xYYYGTLv*}CGn>~3W@4w#Z+oz)}N#PRQH{Cw#X}uWs%&oK3G&W zrd@jC-qCJ!P76VPyX17^qFsk~<`>#T%ZbFwLMh~yQTc0DdpJ1<+OR+Q>EEt5BvrrI z`u&i_jXC3D|L%u9!RDX8+qT#-s`tc_?0~zqR&5UrR^#`8IqCH|nR(0xBfEKl-lost zDzZAZ)!b{^yX;2PZbnyXh1&n_;v}NZ^znO_iyzMhCmroJ?`Qfm-?C#f4tIgAP?fH& z-Y$;{2R4@XC$|;F1e+g+&@Og%Uplq6W>OAaQtEx9$2eQ7>fCFLzwxMope`v~GZ%X% z@jf#ddb->y<@Cs0MOyspuCy#^)AM;-c1QwW(M90}wvH*;Rf!!R{xH2MTW!}&&Xw-I z<@kFui4uM9jdLh(#rgDIQB{KZ11*7Nh;}g&5G}>lvZx>Nh);W@7U@3=*b0-$I%r@>AimMyQx{zYnmtb zfgdD)K8UEj-1eiB;RuPtJNny!1P5DxdC1JL@|HTa7Rx-BEF2cUt+D1LapjCCuI6~7 zZ%r$^IdRR)wx+s-mld5vx2axH&5DMnMSyjF>E`^pVCqC`bl;P)tYY>oiCxk3Ddo_~ zOQV~bvwE(6<5DUuUi>EQW+4CYf&CF4tvwY->WLf6-Y*+|X2IMn^ZHcp)=clMRvQS4 zxoeK+uX_1P&^2*%1Q^1w8v?6y21*Xh)|. + +/** + * Atto text editor integration version file. + * + * @package atto_media + * @copyright 2013 Damyon Wiese + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + */ + +defined('MOODLE_INTERNAL') || die(); + +$plugin->version = 2014051200; // The current plugin version (Date: YYYYMMDDXX). +$plugin->requires = 2014050800; // Requires this Moodle version. +$plugin->component = 'atto_kalturamedia'; // Full name of the plugin (used for diagnostics). diff --git a/lib/editor/atto/plugins/kalturamedia/yui/build/moodle-atto_kalturamedia-button/moodle-atto_kalturamedia-button-debug.js b/lib/editor/atto/plugins/kalturamedia/yui/build/moodle-atto_kalturamedia-button/moodle-atto_kalturamedia-button-debug.js new file mode 100644 index 0000000000000..137364f4df924 --- /dev/null +++ b/lib/editor/atto/plugins/kalturamedia/yui/build/moodle-atto_kalturamedia-button/moodle-atto_kalturamedia-button-debug.js @@ -0,0 +1,180 @@ +YUI.add('moodle-atto_kalturamedia-button', function (Y, NAME) { + +// This file is part of Moodle - http://moodle.org/ +// +// Moodle is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// Moodle is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with Moodle. If not, see . + +/* + * @package atto_kalturamedia + * @copyright 2Kaltura + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + */ + +/** + * @module moodle-atto_kalturamedia-button + */ + +/** + * Atto text editor kalturamedia plugin. + * + * @namespace M.atto_kalturamedia + * @class button + * @extends M.editor_atto.EditorPlugin + */ + +var COMPONENTNAME = 'atto_kalturamedia', + CSS = { + URLINPUT: 'atto_kalturamedia_urlentry', + NAMEINPUT: 'atto_kalturamedia_nameentry' + }, + SELECTORS = { + URLINPUT: '.' + CSS.URLINPUT, + NAMEINPUT: '.' + CSS.NAMEINPUT + }; + +Y.namespace('M.atto_kalturamedia').Button = Y.Base.create('button', Y.M.editor_atto.EditorPlugin, [], { + _currentSelection: null, + + initializer: function() { + this.addButton({ + //icon: 'e/icon', + iconurl: M.cfg.wwwroot + '/lib/editor/atto/plugins/kalturamedia/pix/icon.png', + title: 'Kaltura', + buttonName: 'Kaltura', + callback: this._kalturamedia + }); + }, + _kalturamedia: function(){ + this._currentSelection = this.get('host').getSelection(); + if (this._currentSelection === false) { + return; + } + + var dialogue = this.getDialogue({ + headerContent: M.util.get_string('popuptitle', COMPONENTNAME), + focusAfterHide: true, + width: '800px', + focusOnShowSelector: SELECTORS.URLINPUT + }); + + var iframe = Y.Node.create(''); + // We set the height here because otherwise it is really small. That might not look + // very nice on mobile devices, but we considered that enough for now. + iframe.setStyles({ + height: '600px', + border: 'none', + width: '100%' + }); + + var embedButton = Y.Node.create(''); + embedButton.setAttribute('id', 'KalturaMediaSubmit'); + embedButton.setAttribute('disabled', 'disabled'); + embedButton.setHTML(M.util.get_string('embedbuttontext', COMPONENTNAME)); + embedButton.hide(); + embedButton.on('click', this.embedItem, this); + + iframe.setAttribute('src', this._getIframeURL()); + + var containter = Y.Node.create('
    '); + containter.append(iframe); + containter.append(embedButton); + // Set the dialogue content, and then show the dialogue. + dialogue.set('bodyContent', containter) + .show(); + }, + + _getIframeURL: function() { + + var args = Y.mix({ + elementid: this.get('host').get('elementid'), + contextid: this._getCourseId(), + height: '600px', + width: '800px' + }, + this.get('area')); + return M.cfg.wwwroot + '/lib/editor/atto/plugins/kalturamedia/ltibrowse.php?' + + Y.QueryString.stringify(args); + }, + + _getCourseId: function() { + var courseId; + var bodyClasses = document.getElementsByTagName('body')[0].className; + var classes = bodyClasses.split(' '); + for(i in classes) + { + if(classes[i].indexOf('course-') > -1) + { + var parts = classes[i].split('-'); + courseId = parts[1]; + } + } + + return courseId; + }, + + embedItem: function(what) { + var dialogue = this.getDialogue({ + focusAfterHide: null + }); + + data = Y.one('#KalturaMediaSubmit')._getDataAttributes(); + embedInfo = {}; + for(param in data) + { + var isEmbedInfo = param.split('-'); + if(isEmbedInfo[0] == 'embedinfo') + { + embedInfo[isEmbedInfo[1]] = data[param]; + } + } + + var token = M.util.get_string('kalturauritoken', COMPONENTNAME); //'kaltura-kaf-uri.com'; // TODO - replace this to come from lang or something more dynamic (PHP) + var url = ''; + var parser = document.createElement('a'); + parser.href = embedInfo.url; + var basePathName = parser.pathname; + // IE fix because parser.pathname does not return with trailing slash + if(basePathName.indexOf('/') != 0) + { + basePathName = '/' + basePathName; + } + url = token + basePathName + parser.search; + + var content = 'tinymce-kalturamedia-embed||'+embedInfo.title+'||'+embedInfo.width+'||'+embedInfo.height+''; + + host = this.get('host'); + host.setSelection(this._currentSelection); + host.insertContentAtFocusPoint(content); + this.markUpdated(); + dialogue.set('bodyContent', "").hide(); + + } + +} +); + + +}, '@VERSION@', {"requires": ["moodle-editor_atto-plugin"]}); + +function kaltura_atto_embed_callback(data) +{ + var button = Y.one('#KalturaMediaSubmit'); + for(param in data) + { + var attributeName = 'data-embedinfo-'+param; + button.setAttribute(attributeName, data[param]); + } + button.removeAttribute('disabled'); + button.show(); +} \ No newline at end of file diff --git a/lib/editor/atto/plugins/kalturamedia/yui/build/moodle-atto_kalturamedia-button/moodle-atto_kalturamedia-button-min.js b/lib/editor/atto/plugins/kalturamedia/yui/build/moodle-atto_kalturamedia-button/moodle-atto_kalturamedia-button-min.js new file mode 100644 index 0000000000000..137364f4df924 --- /dev/null +++ b/lib/editor/atto/plugins/kalturamedia/yui/build/moodle-atto_kalturamedia-button/moodle-atto_kalturamedia-button-min.js @@ -0,0 +1,180 @@ +YUI.add('moodle-atto_kalturamedia-button', function (Y, NAME) { + +// This file is part of Moodle - http://moodle.org/ +// +// Moodle is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// Moodle is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with Moodle. If not, see . + +/* + * @package atto_kalturamedia + * @copyright 2Kaltura + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + */ + +/** + * @module moodle-atto_kalturamedia-button + */ + +/** + * Atto text editor kalturamedia plugin. + * + * @namespace M.atto_kalturamedia + * @class button + * @extends M.editor_atto.EditorPlugin + */ + +var COMPONENTNAME = 'atto_kalturamedia', + CSS = { + URLINPUT: 'atto_kalturamedia_urlentry', + NAMEINPUT: 'atto_kalturamedia_nameentry' + }, + SELECTORS = { + URLINPUT: '.' + CSS.URLINPUT, + NAMEINPUT: '.' + CSS.NAMEINPUT + }; + +Y.namespace('M.atto_kalturamedia').Button = Y.Base.create('button', Y.M.editor_atto.EditorPlugin, [], { + _currentSelection: null, + + initializer: function() { + this.addButton({ + //icon: 'e/icon', + iconurl: M.cfg.wwwroot + '/lib/editor/atto/plugins/kalturamedia/pix/icon.png', + title: 'Kaltura', + buttonName: 'Kaltura', + callback: this._kalturamedia + }); + }, + _kalturamedia: function(){ + this._currentSelection = this.get('host').getSelection(); + if (this._currentSelection === false) { + return; + } + + var dialogue = this.getDialogue({ + headerContent: M.util.get_string('popuptitle', COMPONENTNAME), + focusAfterHide: true, + width: '800px', + focusOnShowSelector: SELECTORS.URLINPUT + }); + + var iframe = Y.Node.create(''); + // We set the height here because otherwise it is really small. That might not look + // very nice on mobile devices, but we considered that enough for now. + iframe.setStyles({ + height: '600px', + border: 'none', + width: '100%' + }); + + var embedButton = Y.Node.create(''); + embedButton.setAttribute('id', 'KalturaMediaSubmit'); + embedButton.setAttribute('disabled', 'disabled'); + embedButton.setHTML(M.util.get_string('embedbuttontext', COMPONENTNAME)); + embedButton.hide(); + embedButton.on('click', this.embedItem, this); + + iframe.setAttribute('src', this._getIframeURL()); + + var containter = Y.Node.create('
    '); + containter.append(iframe); + containter.append(embedButton); + // Set the dialogue content, and then show the dialogue. + dialogue.set('bodyContent', containter) + .show(); + }, + + _getIframeURL: function() { + + var args = Y.mix({ + elementid: this.get('host').get('elementid'), + contextid: this._getCourseId(), + height: '600px', + width: '800px' + }, + this.get('area')); + return M.cfg.wwwroot + '/lib/editor/atto/plugins/kalturamedia/ltibrowse.php?' + + Y.QueryString.stringify(args); + }, + + _getCourseId: function() { + var courseId; + var bodyClasses = document.getElementsByTagName('body')[0].className; + var classes = bodyClasses.split(' '); + for(i in classes) + { + if(classes[i].indexOf('course-') > -1) + { + var parts = classes[i].split('-'); + courseId = parts[1]; + } + } + + return courseId; + }, + + embedItem: function(what) { + var dialogue = this.getDialogue({ + focusAfterHide: null + }); + + data = Y.one('#KalturaMediaSubmit')._getDataAttributes(); + embedInfo = {}; + for(param in data) + { + var isEmbedInfo = param.split('-'); + if(isEmbedInfo[0] == 'embedinfo') + { + embedInfo[isEmbedInfo[1]] = data[param]; + } + } + + var token = M.util.get_string('kalturauritoken', COMPONENTNAME); //'kaltura-kaf-uri.com'; // TODO - replace this to come from lang or something more dynamic (PHP) + var url = ''; + var parser = document.createElement('a'); + parser.href = embedInfo.url; + var basePathName = parser.pathname; + // IE fix because parser.pathname does not return with trailing slash + if(basePathName.indexOf('/') != 0) + { + basePathName = '/' + basePathName; + } + url = token + basePathName + parser.search; + + var content = 'tinymce-kalturamedia-embed||'+embedInfo.title+'||'+embedInfo.width+'||'+embedInfo.height+''; + + host = this.get('host'); + host.setSelection(this._currentSelection); + host.insertContentAtFocusPoint(content); + this.markUpdated(); + dialogue.set('bodyContent', "").hide(); + + } + +} +); + + +}, '@VERSION@', {"requires": ["moodle-editor_atto-plugin"]}); + +function kaltura_atto_embed_callback(data) +{ + var button = Y.one('#KalturaMediaSubmit'); + for(param in data) + { + var attributeName = 'data-embedinfo-'+param; + button.setAttribute(attributeName, data[param]); + } + button.removeAttribute('disabled'); + button.show(); +} \ No newline at end of file diff --git a/lib/editor/atto/plugins/kalturamedia/yui/build/moodle-atto_kalturamedia-button/moodle-atto_kalturamedia-button.js b/lib/editor/atto/plugins/kalturamedia/yui/build/moodle-atto_kalturamedia-button/moodle-atto_kalturamedia-button.js new file mode 100644 index 0000000000000..137364f4df924 --- /dev/null +++ b/lib/editor/atto/plugins/kalturamedia/yui/build/moodle-atto_kalturamedia-button/moodle-atto_kalturamedia-button.js @@ -0,0 +1,180 @@ +YUI.add('moodle-atto_kalturamedia-button', function (Y, NAME) { + +// This file is part of Moodle - http://moodle.org/ +// +// Moodle is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// Moodle is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with Moodle. If not, see . + +/* + * @package atto_kalturamedia + * @copyright 2Kaltura + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + */ + +/** + * @module moodle-atto_kalturamedia-button + */ + +/** + * Atto text editor kalturamedia plugin. + * + * @namespace M.atto_kalturamedia + * @class button + * @extends M.editor_atto.EditorPlugin + */ + +var COMPONENTNAME = 'atto_kalturamedia', + CSS = { + URLINPUT: 'atto_kalturamedia_urlentry', + NAMEINPUT: 'atto_kalturamedia_nameentry' + }, + SELECTORS = { + URLINPUT: '.' + CSS.URLINPUT, + NAMEINPUT: '.' + CSS.NAMEINPUT + }; + +Y.namespace('M.atto_kalturamedia').Button = Y.Base.create('button', Y.M.editor_atto.EditorPlugin, [], { + _currentSelection: null, + + initializer: function() { + this.addButton({ + //icon: 'e/icon', + iconurl: M.cfg.wwwroot + '/lib/editor/atto/plugins/kalturamedia/pix/icon.png', + title: 'Kaltura', + buttonName: 'Kaltura', + callback: this._kalturamedia + }); + }, + _kalturamedia: function(){ + this._currentSelection = this.get('host').getSelection(); + if (this._currentSelection === false) { + return; + } + + var dialogue = this.getDialogue({ + headerContent: M.util.get_string('popuptitle', COMPONENTNAME), + focusAfterHide: true, + width: '800px', + focusOnShowSelector: SELECTORS.URLINPUT + }); + + var iframe = Y.Node.create(''); + // We set the height here because otherwise it is really small. That might not look + // very nice on mobile devices, but we considered that enough for now. + iframe.setStyles({ + height: '600px', + border: 'none', + width: '100%' + }); + + var embedButton = Y.Node.create(''); + embedButton.setAttribute('id', 'KalturaMediaSubmit'); + embedButton.setAttribute('disabled', 'disabled'); + embedButton.setHTML(M.util.get_string('embedbuttontext', COMPONENTNAME)); + embedButton.hide(); + embedButton.on('click', this.embedItem, this); + + iframe.setAttribute('src', this._getIframeURL()); + + var containter = Y.Node.create('
    '); + containter.append(iframe); + containter.append(embedButton); + // Set the dialogue content, and then show the dialogue. + dialogue.set('bodyContent', containter) + .show(); + }, + + _getIframeURL: function() { + + var args = Y.mix({ + elementid: this.get('host').get('elementid'), + contextid: this._getCourseId(), + height: '600px', + width: '800px' + }, + this.get('area')); + return M.cfg.wwwroot + '/lib/editor/atto/plugins/kalturamedia/ltibrowse.php?' + + Y.QueryString.stringify(args); + }, + + _getCourseId: function() { + var courseId; + var bodyClasses = document.getElementsByTagName('body')[0].className; + var classes = bodyClasses.split(' '); + for(i in classes) + { + if(classes[i].indexOf('course-') > -1) + { + var parts = classes[i].split('-'); + courseId = parts[1]; + } + } + + return courseId; + }, + + embedItem: function(what) { + var dialogue = this.getDialogue({ + focusAfterHide: null + }); + + data = Y.one('#KalturaMediaSubmit')._getDataAttributes(); + embedInfo = {}; + for(param in data) + { + var isEmbedInfo = param.split('-'); + if(isEmbedInfo[0] == 'embedinfo') + { + embedInfo[isEmbedInfo[1]] = data[param]; + } + } + + var token = M.util.get_string('kalturauritoken', COMPONENTNAME); //'kaltura-kaf-uri.com'; // TODO - replace this to come from lang or something more dynamic (PHP) + var url = ''; + var parser = document.createElement('a'); + parser.href = embedInfo.url; + var basePathName = parser.pathname; + // IE fix because parser.pathname does not return with trailing slash + if(basePathName.indexOf('/') != 0) + { + basePathName = '/' + basePathName; + } + url = token + basePathName + parser.search; + + var content = 'tinymce-kalturamedia-embed||'+embedInfo.title+'||'+embedInfo.width+'||'+embedInfo.height+''; + + host = this.get('host'); + host.setSelection(this._currentSelection); + host.insertContentAtFocusPoint(content); + this.markUpdated(); + dialogue.set('bodyContent', "").hide(); + + } + +} +); + + +}, '@VERSION@', {"requires": ["moodle-editor_atto-plugin"]}); + +function kaltura_atto_embed_callback(data) +{ + var button = Y.one('#KalturaMediaSubmit'); + for(param in data) + { + var attributeName = 'data-embedinfo-'+param; + button.setAttribute(attributeName, data[param]); + } + button.removeAttribute('disabled'); + button.show(); +} \ No newline at end of file diff --git a/lib/editor/atto/plugins/kalturamedia/yui/src/button/build.json b/lib/editor/atto/plugins/kalturamedia/yui/src/button/build.json new file mode 100644 index 0000000000000..c49f677801d08 --- /dev/null +++ b/lib/editor/atto/plugins/kalturamedia/yui/src/button/build.json @@ -0,0 +1,10 @@ +{ + "name": "moodle-atto_kalturamedia-button", + "builds": { + "moodle-atto_kalturamedia-button": { + "jsfiles": [ + "button.js" + ] + } + } +} diff --git a/lib/editor/atto/plugins/kalturamedia/yui/src/button/js/button.js b/lib/editor/atto/plugins/kalturamedia/yui/src/button/js/button.js new file mode 100644 index 0000000000000..5f59411fd2c41 --- /dev/null +++ b/lib/editor/atto/plugins/kalturamedia/yui/src/button/js/button.js @@ -0,0 +1,164 @@ +// This file is part of Moodle - http://moodle.org/ +// +// Moodle is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// Moodle is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with Moodle. If not, see . + +/* + * @package atto_kalturamedia + * @copyright 2013 Damyon Wiese + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + */ + +/** + * @module moodle-atto_kalturamedia-button + */ + +/** + * Atto text editor kalturamedia plugin. + * + * @namespace M.atto_kalturamedia + * @class button + * @extends M.editor_atto.EditorPlugin + */ + + +var COMPONENTNAME = 'atto_kalturamedia', + CSS = { + URLINPUT: 'atto_kalturamedia_urlentry', + NAMEINPUT: 'atto_kalturamedia_nameentry' + }, + SELECTORS = { + URLINPUT: '.' + CSS.URLINPUT, + NAMEINPUT: '.' + CSS.NAMEINPUT + }; + +Y.namespace('M.atto_kalturamedia').Button = Y.Base.create('button', Y.M.editor_atto.EditorPlugin, [], { + _currentSelection: null, + + initializer: function() { + this.addButton({ + //icon: 'e/icon', + iconurl: M.cfg.wwwroot + '/lib/editor/atto/plugins/kalturamedia/pix/icon.png', + title: 'Kaltura', + buttonName: 'Kaltura', + callback: this._kalturamedia + }); + }, + _kalturamedia: function(){ + this._currentSelection = this.get('host').getSelection(); + if (this._currentSelection === false) { + return; + } + + var dialogue = this.getDialogue({ + headerContent: M.util.get_string('popuptitle', COMPONENTNAME), + focusAfterHide: true, + width: '800px', + focusOnShowSelector: SELECTORS.URLINPUT + }); + + var iframe = Y.Node.create(''); + // We set the height here because otherwise it is really small. That might not look + // very nice on mobile devices, but we considered that enough for now. + iframe.setStyles({ + height: '600px', + border: 'none', + width: '100%' + }); + + var embedButton = Y.Node.create(''); + embedButton.setAttribute('id', 'KalturaMediaSubmit'); + embedButton.setAttribute('disabled', 'disabled'); + embedButton.setHTML(M.util.get_string('embedbuttontext', COMPONENTNAME)); + embedButton.hide(); + embedButton.on('click', this.embedItem, this); + + iframe.setAttribute('src', this._getIframeURL()); + + var containter = Y.Node.create('
    '); + containter.append(iframe); + containter.append(embedButton); + // Set the dialogue content, and then show the dialogue. + dialogue.set('bodyContent', containter) + .show(); + }, + + _getIframeURL: function() { + + var args = Y.mix({ + elementid: this.get('host').get('elementid'), + contextid: this._getCourseId(), + height: '600px', + width: '800px' + }, + this.get('area')); + return M.cfg.wwwroot + '/lib/editor/atto/plugins/kalturamedia/ltibrowse.php?' + + Y.QueryString.stringify(args); + }, + + _getCourseId: function() { + var courseId; + var bodyClasses = document.getElementsByTagName('body')[0].className; + var classes = bodyClasses.split(' '); + for(i in classes) + { + if(classes[i].indexOf('course-') > -1) + { + var parts = classes[i].split('-'); + courseId = parts[1]; + } + } + + return courseId; + }, + + embedItem: function(what) { + var dialogue = this.getDialogue({ + focusAfterHide: null + }); + + data = Y.one('#KalturaMediaSubmit')._getDataAttributes(); + embedInfo = {}; + for(param in data) + { + var isEmbedInfo = param.split('-'); + if(isEmbedInfo[0] == 'embedinfo') + { + embedInfo[isEmbedInfo[1]] = data[param]; + } + } + + var token = M.util.get_string('kalturauritoken', COMPONENTNAME); //'kaltura-kaf-uri.com'; // TODO - replace this to come from lang or something more dynamic (PHP) + var url = ''; + var parser = document.createElement('a'); + parser.href = embedInfo.url; + var basePathName = parser.pathname; + // IE fix because parser.pathname does not return with trailing slash + if(basePathName.indexOf('/') != 0) + { + basePathName = '/' + basePathName; + } + url = token + basePathName + parser.search; + + var content = 'tinymce-kalturamedia-embed||'+embedInfo.title+'||'+embedInfo.width+'||'+embedInfo.height+''; + + host = this.get('host'); + host.setSelection(this._currentSelection); + host.insertContentAtFocusPoint(content); + this.markUpdated(); + dialogue.set('bodyContent', "").hide(); + + } + +} +); diff --git a/lib/editor/atto/plugins/kalturamedia/yui/src/button/meta/button.json b/lib/editor/atto/plugins/kalturamedia/yui/src/button/meta/button.json new file mode 100644 index 0000000000000..60494a632d901 --- /dev/null +++ b/lib/editor/atto/plugins/kalturamedia/yui/src/button/meta/button.json @@ -0,0 +1,7 @@ +{ + "moodle-atto_kalturamedia-button": { + "requires": [ + "moodle-editor_atto-plugin" + ] + } +} diff --git a/local/kaltura/attobsepreview.php b/local/kaltura/attobsepreview.php new file mode 100644 index 0000000000000..f1a8f37dd0b8d --- /dev/null +++ b/local/kaltura/attobsepreview.php @@ -0,0 +1,49 @@ +. + +/** + * Kaltura LTI service script used receive data sent from the Kaltura content provider. + * + * @package local_kaltura + * @author Remote-Learner.net Inc + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + * @copyright (C) 2014 Remote Learner.net Inc http://www.remote-learner.net + */ + +$PAGE->set_pagelayout('embedded'); +echo $OUTPUT->header(); +$playurl = urldecode($url); +?> +

    Preview

    +
    + diff --git a/local/kaltura/locallib.php b/local/kaltura/locallib.php index 555188bed88f3..4b3cff351d5c4 100644 --- a/local/kaltura/locallib.php +++ b/local/kaltura/locallib.php @@ -334,8 +334,13 @@ function local_kaltura_strip_querystring($endpoint, $params) { * @param array $withblocks True if Moodle blocks are to be included on the page else false. * @return string Returns HTML required to initiate an LTI launch. */ -function local_kaltura_request_lti_launch($ltirequest, $withblocks = true) { +function local_kaltura_request_lti_launch($ltirequest, $withblocks = true, $editor = null) { global $CFG, $USER; + + if(is_null($editor)) + { + $editor = 'tinymce'; + } $requestparams = array(); @@ -365,6 +370,7 @@ function local_kaltura_request_lti_launch($ltirequest, $withblocks = true) { $requestparams['tool_consumer_instance_guid'] = $urlparts['host']; $returnurlparams['unsigned'] = '0'; + $returnurlparams['editor'] = $editor; // Add the return URL. We send the launch container along to help us avoid frames-within-frames when the user returns. $url = new moodle_url('/local/kaltura/service.php', $returnurlparams); diff --git a/local/kaltura/service.php b/local/kaltura/service.php index e5afcdfd684c9..2763c3d90ad88 100644 --- a/local/kaltura/service.php +++ b/local/kaltura/service.php @@ -48,6 +48,8 @@ $showowner = optional_param('showOwner', '', PARAM_TEXT); $player = optional_param('player', '', PARAM_TEXT); $size = optional_param('size', '', PARAM_TEXT); +$editor = optional_param('editor', 'tinymce', PARAM_TEXT); + $serviceurl = new moodle_url('/local/kaltura/service.php'); @@ -94,8 +96,16 @@ 'entryid' => $entryid, 'title' => $title, 'metadata' => $metadata, + 'editor' => $editor, ); -$PAGE->requires->yui_module('moodle-local_kaltura-ltiservice', 'M.local_kaltura.init', array($params)); +if($editor == 'atto') +{ + require_once('attobsepreview.php'); +} +else +{ + $PAGE->requires->yui_module('moodle-local_kaltura-ltiservice', 'M.local_kaltura.init', array($params)); -echo $OUTPUT->header(); -echo $OUTPUT->footer(); \ No newline at end of file + echo $OUTPUT->header(); + echo $OUTPUT->footer(); +} \ No newline at end of file From a0ec42838fca0cc10728e6ee401855dd5a2127e4 Mon Sep 17 00:00:00 2001 From: Gonen Radai Date: Mon, 13 Oct 2014 16:08:50 +0300 Subject: [PATCH 006/326] KMS-4408 fix for LTI launch in grading process --- mod/kalvidassign/lti_launch_grade.php | 67 +++++++++++++++++++++ mod/kalvidassign/renderer.php | 26 +++++++- mod/kalvidassign/single_submission_form.php | 21 ++++++- 3 files changed, 111 insertions(+), 3 deletions(-) create mode 100644 mod/kalvidassign/lti_launch_grade.php diff --git a/mod/kalvidassign/lti_launch_grade.php b/mod/kalvidassign/lti_launch_grade.php new file mode 100644 index 0000000000000..2faea00152189 --- /dev/null +++ b/mod/kalvidassign/lti_launch_grade.php @@ -0,0 +1,67 @@ +. + +/** + * Kaltura video assignment LTI launch script. + * + * @package mod_kalvidassign + * @author Remote-Learner.net Inc + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + * @copyright (C) 2014 Remote Learner.net Inc http://www.remote-learner.net + */ + +require_once(dirname(dirname(dirname(__FILE__))).'/config.php'); +require_once(dirname(dirname(dirname(__FILE__))).'/local/kaltura/locallib.php'); + +global $USER; + +require_login(); +$courseid = required_param('courseid', PARAM_INT); +$cmid = required_param('cmid', PARAM_INT); +$height = required_param('height', PARAM_INT); +$width = required_param('width', PARAM_INT); +$withblocks = optional_param('withblocks', 0, PARAM_INT); +$source = required_param('source', PARAM_TEXT); + +$context = context_course::instance($courseid); +require_capability('mod/kalvidassign:gradesubmission', $context); +$course = get_course($courseid); + +$launch = array(); +$launch['id'] = 1; +$launch['cmid'] = $cmid; +$launch['title'] = 'Kaltura video assignment'; +$launch['module'] = KAF_BROWSE_EMBED_MODULE; +$launch['course'] = $course; +$launch['width'] = $width; +$launch['height'] = $height; +$launch['custom_publishdata'] = ''; + +$source = $source = local_kaltura_add_kaf_uri_token($source); + +if (false === local_kaltura_url_contains_configured_hostname($source) && !empty($source)) { + echo get_string('invalid_source_parameter', 'mod_kalvidres'); + die; +} else { + $launch['source'] = urldecode($source); +} + +if (local_kaltura_validate_browseembed_required_params($launch)) { + $content = local_kaltura_request_lti_launch($launch, $withblocks); + echo $content; +} else { + echo get_string('invalid_launch_parameters', 'mod_kalvidassign'); +} \ No newline at end of file diff --git a/mod/kalvidassign/renderer.php b/mod/kalvidassign/renderer.php index eb1dfe321febc..c6038f40c57e4 100644 --- a/mod/kalvidassign/renderer.php +++ b/mod/kalvidassign/renderer.php @@ -51,6 +51,8 @@ class submissions_table extends table_sql { public $tilast; /* @var int The current page number. */ public $page; + /* @var int The current course ID */ + public $courseId; /** * Constructor function for the submissions table class. @@ -71,6 +73,8 @@ public function __construct($uniqueid, $cm, $gradinginfo, $quickgrade = false, $ $this->gradinginfo = $gradinginfo; $instance = $DB->get_record('kalvidassign', array('id' => $cm->instance), 'id,grade'); + + $this->courseId = $cm->course; $instance->cmid = $cm->id; @@ -263,14 +267,14 @@ public function col_timemodified($data) { $attr = array('src' => $metadata->thumbnailurl, 'class' => 'kalsubthumb'); $thumbnail = html_writer::empty_tag('img', $attr); - $attr = array('name' => 'submission_source', 'href' => local_kaltura_add_kaf_uri_token($data->source), 'class' => 'kalsubthumbanchor'); + $attr = array('name' => 'submission_source', 'href' => $this->_generateLtiLaunchLink($data->source, $data), 'class' => 'kalsubthumbanchor'); $output .= html_writer::tag('a', $thumbnail, $attr); $output .= html_writer::end_tag('center'); } else { $output .= html_writer::start_tag('center'); - $attr = array('name' => 'submission_source', 'href' => local_kaltura_add_kaf_uri_token($data->source), 'class' => 'kalsubanchor'); + $attr = array('name' => 'submission_source', 'href' => $this->_generateLtiLaunchLink($data->source, $data), 'class' => 'kalsubanchor'); $output .= html_writer::tag('a', get_string('viewsubmission', 'kalvidassign'), $attr); $output .= html_writer::end_tag('center'); } @@ -412,6 +416,24 @@ public function display_grade($grade) { return '-'; } } + + private function _generateLtiLaunchLink($source, $data) + { + $cmid = $data->id; + + $width = 485; + $height = 450; + if(isset($data->height) && isset($data->width)) + { + $width = $data->width; + $height = $data->height; + } + $realSource = local_kaltura_add_kaf_uri_token($source); + $hashedSource = base64_encode($realSource); + + $target = new moodle_url('/mod/kalvidassign/lti_launch_grade.php?cmid='.$cmid.'&source='.urlencode($source).'&height='.$height.'&width='.$width.'&courseid='.$this->courseId); + return $target; + } } /** diff --git a/mod/kalvidassign/single_submission_form.php b/mod/kalvidassign/single_submission_form.php index bd24bb35c7fb1..521d0165a146b 100644 --- a/mod/kalvidassign/single_submission_form.php +++ b/mod/kalvidassign/single_submission_form.php @@ -66,7 +66,7 @@ public function definition() { if (!empty($submission->entry_id) && !empty($submission->source)) { $attr = array( - 'src' => local_kaltura_add_kaf_uri_token($submission->source), + 'src' => $this->_generateLtiLaunchLink($submission->source, $submission), 'height' => $submission->height, 'width' => $submission->width, 'allowfullscreen' => "true", @@ -206,4 +206,23 @@ protected function get_editor_options() { return $editoroptions; } + + private function _generateLtiLaunchLink($source, $data) + { + $cmid = $this->_customdata->cm->id; + $courseId = $this->_customdata->cm->course; + + $width = 485; + $height = 450; + if(isset($data->height) && isset($data->width)) + { + $width = $data->width; + $height = $data->height; + } + $realSource = local_kaltura_add_kaf_uri_token($source); + $hashedSource = base64_encode($realSource); + + $target = new moodle_url('/mod/kalvidassign/lti_launch_grade.php?cmid='.$cmid.'&source='.urlencode($source).'&height='.$height.'&width='.$width.'&courseid='.$courseId); + return $target; + } } From 92b5858234a4a17eba643bab2c970194f8c0c77d Mon Sep 17 00:00:00 2001 From: Gonen Radai Date: Mon, 13 Oct 2014 16:15:24 +0300 Subject: [PATCH 007/326] KMS-4406 fix for string in assignment submission with teacher's feedback --- mod/kalvidassign/lang/en/kalvidassign.php | 3 ++- mod/kalvidassign/renderer.php | 2 +- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/mod/kalvidassign/lang/en/kalvidassign.php b/mod/kalvidassign/lang/en/kalvidassign.php index 9b2633fb116ac..bf4f8819fd7a2 100644 --- a/mod/kalvidassign/lang/en/kalvidassign.php +++ b/mod/kalvidassign/lang/en/kalvidassign.php @@ -112,4 +112,5 @@ $string['nosubmissions'] = 'No submissions'; $string['viewsubmission'] = 'View submission'; $string['failedtoinsertsubmission'] = 'Failed to insert submission record.'; -$string['video_thumbnail'] = 'Video thumbnail'; \ No newline at end of file +$string['video_thumbnail'] = 'Video thumbnail'; +$string['feedbackfromteacher'] = 'Feedback From Teacher'; \ No newline at end of file diff --git a/mod/kalvidassign/renderer.php b/mod/kalvidassign/renderer.php index c6038f40c57e4..c0c7279f9ddae 100644 --- a/mod/kalvidassign/renderer.php +++ b/mod/kalvidassign/renderer.php @@ -1058,7 +1058,7 @@ public function display_grade_feedback($kalvidassign, $context) { } // Print the feedback - echo $OUTPUT->heading(get_string('feedbackfromteacher', 'assignment', fullname($teacher))); + echo $OUTPUT->heading(get_string('feedbackfromteacher', 'kalvidassign', fullname($teacher))); echo ''; From c128bdd0a467d2cce948e49b30a74f3e395ca633 Mon Sep 17 00:00:00 2001 From: Gonen Radai Date: Mon, 13 Oct 2014 16:28:05 +0300 Subject: [PATCH 008/326] KMS-4400 fix for BSE width to 1112px --- .../moodle-atto_kalturamedia-button-debug.js | 4 ++-- .../moodle-atto_kalturamedia-button-min.js | 4 ++-- .../moodle-atto_kalturamedia-button.js | 4 ++-- .../atto/plugins/kalturamedia/yui/src/button/js/button.js | 4 ++-- 4 files changed, 8 insertions(+), 8 deletions(-) diff --git a/lib/editor/atto/plugins/kalturamedia/yui/build/moodle-atto_kalturamedia-button/moodle-atto_kalturamedia-button-debug.js b/lib/editor/atto/plugins/kalturamedia/yui/build/moodle-atto_kalturamedia-button/moodle-atto_kalturamedia-button-debug.js index 137364f4df924..d7b4d78820c06 100644 --- a/lib/editor/atto/plugins/kalturamedia/yui/build/moodle-atto_kalturamedia-button/moodle-atto_kalturamedia-button-debug.js +++ b/lib/editor/atto/plugins/kalturamedia/yui/build/moodle-atto_kalturamedia-button/moodle-atto_kalturamedia-button-debug.js @@ -64,7 +64,7 @@ Y.namespace('M.atto_kalturamedia').Button = Y.Base.create('button', Y.M.editor_a var dialogue = this.getDialogue({ headerContent: M.util.get_string('popuptitle', COMPONENTNAME), focusAfterHide: true, - width: '800px', + width: '1112px', focusOnShowSelector: SELECTORS.URLINPUT }); @@ -100,7 +100,7 @@ Y.namespace('M.atto_kalturamedia').Button = Y.Base.create('button', Y.M.editor_a elementid: this.get('host').get('elementid'), contextid: this._getCourseId(), height: '600px', - width: '800px' + width: '1112px' }, this.get('area')); return M.cfg.wwwroot + '/lib/editor/atto/plugins/kalturamedia/ltibrowse.php?' + diff --git a/lib/editor/atto/plugins/kalturamedia/yui/build/moodle-atto_kalturamedia-button/moodle-atto_kalturamedia-button-min.js b/lib/editor/atto/plugins/kalturamedia/yui/build/moodle-atto_kalturamedia-button/moodle-atto_kalturamedia-button-min.js index 137364f4df924..d7b4d78820c06 100644 --- a/lib/editor/atto/plugins/kalturamedia/yui/build/moodle-atto_kalturamedia-button/moodle-atto_kalturamedia-button-min.js +++ b/lib/editor/atto/plugins/kalturamedia/yui/build/moodle-atto_kalturamedia-button/moodle-atto_kalturamedia-button-min.js @@ -64,7 +64,7 @@ Y.namespace('M.atto_kalturamedia').Button = Y.Base.create('button', Y.M.editor_a var dialogue = this.getDialogue({ headerContent: M.util.get_string('popuptitle', COMPONENTNAME), focusAfterHide: true, - width: '800px', + width: '1112px', focusOnShowSelector: SELECTORS.URLINPUT }); @@ -100,7 +100,7 @@ Y.namespace('M.atto_kalturamedia').Button = Y.Base.create('button', Y.M.editor_a elementid: this.get('host').get('elementid'), contextid: this._getCourseId(), height: '600px', - width: '800px' + width: '1112px' }, this.get('area')); return M.cfg.wwwroot + '/lib/editor/atto/plugins/kalturamedia/ltibrowse.php?' + diff --git a/lib/editor/atto/plugins/kalturamedia/yui/build/moodle-atto_kalturamedia-button/moodle-atto_kalturamedia-button.js b/lib/editor/atto/plugins/kalturamedia/yui/build/moodle-atto_kalturamedia-button/moodle-atto_kalturamedia-button.js index 137364f4df924..d7b4d78820c06 100644 --- a/lib/editor/atto/plugins/kalturamedia/yui/build/moodle-atto_kalturamedia-button/moodle-atto_kalturamedia-button.js +++ b/lib/editor/atto/plugins/kalturamedia/yui/build/moodle-atto_kalturamedia-button/moodle-atto_kalturamedia-button.js @@ -64,7 +64,7 @@ Y.namespace('M.atto_kalturamedia').Button = Y.Base.create('button', Y.M.editor_a var dialogue = this.getDialogue({ headerContent: M.util.get_string('popuptitle', COMPONENTNAME), focusAfterHide: true, - width: '800px', + width: '1112px', focusOnShowSelector: SELECTORS.URLINPUT }); @@ -100,7 +100,7 @@ Y.namespace('M.atto_kalturamedia').Button = Y.Base.create('button', Y.M.editor_a elementid: this.get('host').get('elementid'), contextid: this._getCourseId(), height: '600px', - width: '800px' + width: '1112px' }, this.get('area')); return M.cfg.wwwroot + '/lib/editor/atto/plugins/kalturamedia/ltibrowse.php?' + diff --git a/lib/editor/atto/plugins/kalturamedia/yui/src/button/js/button.js b/lib/editor/atto/plugins/kalturamedia/yui/src/button/js/button.js index 5f59411fd2c41..347c6904102b4 100644 --- a/lib/editor/atto/plugins/kalturamedia/yui/src/button/js/button.js +++ b/lib/editor/atto/plugins/kalturamedia/yui/src/button/js/button.js @@ -63,7 +63,7 @@ Y.namespace('M.atto_kalturamedia').Button = Y.Base.create('button', Y.M.editor_a var dialogue = this.getDialogue({ headerContent: M.util.get_string('popuptitle', COMPONENTNAME), focusAfterHide: true, - width: '800px', + width: '1112px', focusOnShowSelector: SELECTORS.URLINPUT }); @@ -99,7 +99,7 @@ Y.namespace('M.atto_kalturamedia').Button = Y.Base.create('button', Y.M.editor_a elementid: this.get('host').get('elementid'), contextid: this._getCourseId(), height: '600px', - width: '800px' + width: '1112px' }, this.get('area')); return M.cfg.wwwroot + '/lib/editor/atto/plugins/kalturamedia/ltibrowse.php?' + From 4362ade2ebfb7d64f1b63f08ba9c51ff0fc82532 Mon Sep 17 00:00:00 2001 From: Gonen Radai Date: Mon, 13 Oct 2014 17:01:21 +0300 Subject: [PATCH 009/326] KMS-4431 MR review fix for missing BREAK statement --- mod/kalvidassign/renderer.php | 1 + 1 file changed, 1 insertion(+) diff --git a/mod/kalvidassign/renderer.php b/mod/kalvidassign/renderer.php index c0c7279f9ddae..6f35b6e725f13 100644 --- a/mod/kalvidassign/renderer.php +++ b/mod/kalvidassign/renderer.php @@ -794,6 +794,7 @@ public function display_submissions_table($cm, $groupfilter = 0, $filter = 'all' $groupswhere .= ' AND g.id IN ('.$groupids.') '; } + break; case VISIBLEGROUPS: // if visible groups but displaying a specific group then we must display users within From f9bf7add108a8c0d9dd5ac7a1210afbffa626055 Mon Sep 17 00:00:00 2001 From: Gonen Radai Date: Mon, 13 Oct 2014 17:04:21 +0300 Subject: [PATCH 010/326] KMS-4431 MR review removed unnecessary files --- .../backup_kalvidres_activity_task.class.php | 66 ----------- .../moodle2/backup_kalvidres_settingslib.php | 26 ----- .../moodle2/backup_kalvidres_stepslib.php | 46 -------- .../restore_kalvidres_activity_task.class.php | 107 ------------------ .../moodle2/restore_kalvidres_stepslib.php | 62 ---------- 5 files changed, 307 deletions(-) delete mode 100644 mod/kalvidpres/backup/moodle2/backup_kalvidres_activity_task.class.php delete mode 100644 mod/kalvidpres/backup/moodle2/backup_kalvidres_settingslib.php delete mode 100644 mod/kalvidpres/backup/moodle2/backup_kalvidres_stepslib.php delete mode 100644 mod/kalvidpres/backup/moodle2/restore_kalvidres_activity_task.class.php delete mode 100644 mod/kalvidpres/backup/moodle2/restore_kalvidres_stepslib.php diff --git a/mod/kalvidpres/backup/moodle2/backup_kalvidres_activity_task.class.php b/mod/kalvidpres/backup/moodle2/backup_kalvidres_activity_task.class.php deleted file mode 100644 index a73ff6be762a0..0000000000000 --- a/mod/kalvidpres/backup/moodle2/backup_kalvidres_activity_task.class.php +++ /dev/null @@ -1,66 +0,0 @@ -. - -/** - * Kaltura video resource backup activity tasks script. - * - * @package mod_kalvidres - * @author Remote-Learner.net Inc - * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later - * @copyright (C) 2014 Remote Learner.net Inc http://www.remote-learner.net - */ - -require_once($CFG->dirroot.'/mod/kalvidres/backup/moodle2/backup_kalvidres_stepslib.php'); -require_once($CFG->dirroot.'/mod/kalvidres/backup/moodle2/backup_kalvidres_settingslib.php'); - -/** - * kalvidres backup task that provides all the settings and steps to perform one - * complete backup of the activity - */ -class backup_kalvidres_activity_task extends backup_activity_task { - /** - * Define (add) particular settings this activity can have - */ - protected function define_my_settings() { - // No particular settings for this activity - } - - /** - * Define (add) particular steps this activity can have - */ - protected function define_my_steps() { - // Choice only has one structure step - $this->add_step(new backup_kalvidres_activity_structure_step('kalvidres_structure', 'kalvidres.xml')); - } - - /** - * Code the transformations to perform in the activity in - * order to get transportable (encoded) links - */ - static public function encode_content_links($content) { - global $CFG; - - $base = preg_quote($CFG->wwwroot, "/"); - - // Link to the list of kalvidress - $search="/(".$base."\/mod\/kalvidres\/index.php\?id\=)([0-9]+)/"; - $content= preg_replace($search, '$@KALVIDRESINDEX*$2@$', $content); - - // Link to kalvidres view by moduleid - $search="/(".$base."\/mod\/kalvidres\/view.php\?id\=)([0-9]+)/"; - $content= preg_replace($search, '$@KALVIDRESVIEWBYID*$2@$', $content); - - return $content; - } -} diff --git a/mod/kalvidpres/backup/moodle2/backup_kalvidres_settingslib.php b/mod/kalvidpres/backup/moodle2/backup_kalvidres_settingslib.php deleted file mode 100644 index d42bab7691745..0000000000000 --- a/mod/kalvidpres/backup/moodle2/backup_kalvidres_settingslib.php +++ /dev/null @@ -1,26 +0,0 @@ -. - -/** - * Kaltura video resource backup settingslib script. - * - * @package mod_kalvidres - * @author Remote-Learner.net Inc - * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later - * @copyright (C) 2014 Remote Learner.net Inc http://www.remote-learner.net - */ - - // This activity has no particular settings but the inherited from the generic - // backup_activity_task so here there isn't any class definition, like the ones - // existing in /backup/moodle2/backup_settingslib.php (activities section) diff --git a/mod/kalvidpres/backup/moodle2/backup_kalvidres_stepslib.php b/mod/kalvidpres/backup/moodle2/backup_kalvidres_stepslib.php deleted file mode 100644 index ae532446cc14f..0000000000000 --- a/mod/kalvidpres/backup/moodle2/backup_kalvidres_stepslib.php +++ /dev/null @@ -1,46 +0,0 @@ -. - -/** - * Kaltura video resource backup stepslib script. - * - * @package mod_kalvidres - * @author Remote-Learner.net Inc - * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later - * @copyright (C) 2014 Remote Learner.net Inc http://www.remote-learner.net - */ - -/** - * Define all the backup steps that will be used by the backup_kalvidres_activity_task - */ - -/** - * Define the complete kalvidres structure for backup, with file and id annotations - */ -class backup_kalvidres_activity_structure_step extends backup_activity_structure_step { - - protected function define_structure() { - - // Define each element separated - $kalvidres = new backup_nested_element('kalvidres', array('id'), array( - 'name', 'intro', 'introformat', 'entry_id', 'video_title', - 'uiconf_id', 'widescreen', 'height', 'width', 'source', 'timemodified', 'timecreated')); - - // Define sources - $kalvidres->set_source_table('kalvidres', array('id' => backup::VAR_ACTIVITYID)); - - // Return the root element, wrapped into standard activity structure - return $this->prepare_activity_structure($kalvidres); - } -} diff --git a/mod/kalvidpres/backup/moodle2/restore_kalvidres_activity_task.class.php b/mod/kalvidpres/backup/moodle2/restore_kalvidres_activity_task.class.php deleted file mode 100644 index fbd26b2b83f26..0000000000000 --- a/mod/kalvidpres/backup/moodle2/restore_kalvidres_activity_task.class.php +++ /dev/null @@ -1,107 +0,0 @@ -. - -/** - * Kaltura video resource restore activity tasks script. - * - * @package mod_kalvidres - * @author Remote-Learner.net Inc - * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later - * @copyright (C) 2014 Remote Learner.net Inc http://www.remote-learner.net - */ - -defined('MOODLE_INTERNAL') || die(); - -require_once($CFG->dirroot.'/mod/kalvidres/backup/moodle2/restore_kalvidres_stepslib.php'); - -/** - * kalvidres restore task that provides all the settings and steps to perform one - * complete restore of the activity - */ -class restore_kalvidres_activity_task extends restore_activity_task { - - /** - * Define (add) particular settings this activity can have - */ - protected function define_my_settings() { - // No particular settings for this activity - } - - /** - * Define (add) particular steps this activity can have - */ - protected function define_my_steps() { - // Certificate only has one structure step - $this->add_step(new restore_kalvidres_activity_structure_step('kalvidres_structure', 'kalvidres.xml')); - } - - /** - * Define the contents in the activity that must be - * processed by the link decoder - */ - static public function define_decode_contents() { - $contents = array(); - - $contents[] = new restore_decode_content('kalvidres', array('intro'), 'kalvidres'); - - return $contents; - } - - /** - * Define the decoding rules for links belonging - * to the activity to be executed by the link decoder - */ - static public function define_decode_rules() { - $rules = array(); - - $rules[] = new restore_decode_rule('KALVIDRESVIEWBYID', '/mod/kalvidres/view.php?id=$1', 'course_module'); - $rules[] = new restore_decode_rule('KALVIDRESINDEX', '/mod/kalvidres/index.php?id=$1', 'course'); - - return $rules; - - } - - /** - * Define the restore log rules that will be applied - * by the {@link restore_logs_processor} when restoring - * kalvidres logs. It must return one array - * of {@link restore_log_rule} objects - */ - static public function define_restore_log_rules() { - $rules = array(); - - $rules[] = new restore_log_rule('kalvidres', 'view', 'view.php?id={course_module}', '{kalvidres}'); - - return $rules; - } - - /** - * Define the restore log rules that will be applied - * by the {@link restore_logs_processor} when restoring - * course logs. It must return one array - * of {@link restore_log_rule} objects - * - * Note this rules are applied when restoring course logs - * by the restore final task, but are defined here at - * activity level. All them are rules not linked to any module instance (cmid = 0) - */ - static public function define_restore_log_rules_for_course() { - $rules = array(); - - // Fix old wrong uses (missing extension) - $rules[] = new restore_log_rule('kalvidres', 'view all', 'index.php?id={course}', null); - - return $rules; - } -} diff --git a/mod/kalvidpres/backup/moodle2/restore_kalvidres_stepslib.php b/mod/kalvidpres/backup/moodle2/restore_kalvidres_stepslib.php deleted file mode 100644 index 9aaac8a0bfbc5..0000000000000 --- a/mod/kalvidpres/backup/moodle2/restore_kalvidres_stepslib.php +++ /dev/null @@ -1,62 +0,0 @@ -. - -/** - * Kaltura video resource restore stepslib script. - * - * @package mod_kalvidres - * @author Remote-Learner.net Inc - * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later - * @copyright (C) 2014 Remote Learner.net Inc http://www.remote-learner.net - */ - -/** - * Define all the restore steps that will be used by the restore_kalvidres_activity_task - */ - -/** - * Structure step to restore one kalvidres activity - */ -class restore_kalvidres_activity_structure_step extends restore_activity_structure_step { - - protected function define_structure() { - - $paths = array(); - - $paths[] = new restore_path_element('kalvidres', '/activity/kalvidres'); - - // Return the paths wrapped into standard activity structure - return $this->prepare_activity_structure($paths); - } - - protected function process_kalvidres($data) { - global $DB; - - $data = (object)$data; - $oldid = $data->id; - $data->course = $this->get_courseid(); - - $data->timemodified = $this->apply_date_offset($data->timemodified); - - // insert the kalvidres record - $newitemid = $DB->insert_record('kalvidres', $data); - // immediately after inserting "activity" record, call this - $this->apply_activity_instance($newitemid); - } - - protected function after_execute() { - // Add kalvidres related files, no need to match by itemname (just internally handled context) - $this->add_related_files('mod_kalvidres', 'intro', null); - } -} From 0a82063ec2146db9d8692c625c7017d38dd7821b Mon Sep 17 00:00:00 2001 From: Gonen Radai Date: Mon, 13 Oct 2014 17:05:34 +0300 Subject: [PATCH 011/326] KMS-4431 MR review removed unnecessary files --- mod/kalvidpres/lang/en/kalvidres.php | 36 ---------------------------- 1 file changed, 36 deletions(-) delete mode 100644 mod/kalvidpres/lang/en/kalvidres.php diff --git a/mod/kalvidpres/lang/en/kalvidres.php b/mod/kalvidpres/lang/en/kalvidres.php deleted file mode 100644 index 8fcff45e8d121..0000000000000 --- a/mod/kalvidpres/lang/en/kalvidres.php +++ /dev/null @@ -1,36 +0,0 @@ -. - -/** - * Kaltura video resource language file. - * - * @package mod_kalvidres - * @author Remote-Learner.net Inc - * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later - * @copyright (C) 2014 Remote Learner.net Inc http://www.remote-learner.net - */ -$string['modulenameplural'] = 'Kaltura Video Resource'; -$string['modulename'] = 'Kaltura Video Resource'; -$string['modulename_help'] = 'The Kaltura Video Resource enables a teacher to create a resource using a Kaltura video.'; -$string['pluginadministration'] = 'Kaltura Video Resource'; -$string['pluginname'] = 'Kaltura Video Resource'; -$string['name'] = 'Name'; -$string['novidsource'] = 'No media content found. You must add media content in order to save a video resource.'; -$string['video_hdr'] = 'Video'; -$string['add_video'] = 'Add media'; -$string['invalidid'] = 'Invalid ID'; -$string['invalid_launch_parameters'] = 'Invalid launch parameters'; -$string['invalid_source_parameter'] = 'Invalid source parameter'; -$string['replace_video'] = 'Replace media'; -$string['kalvidres:addinstance'] = 'Add a Kaltura Video Resource'; From 933bd42230dbdf828c92844dd2f7b499bc3e0e92 Mon Sep 17 00:00:00 2001 From: Gonen Radai Date: Mon, 13 Oct 2014 17:09:20 +0300 Subject: [PATCH 012/326] KMS-4431 MR review removed unused function that also has a reference to an undefined function --- mod/kalvidpres/locallib.php | 7 ------- 1 file changed, 7 deletions(-) diff --git a/mod/kalvidpres/locallib.php b/mod/kalvidpres/locallib.php index 19e48829b9620..79088dbc9d314 100644 --- a/mod/kalvidpres/locallib.php +++ b/mod/kalvidpres/locallib.php @@ -24,10 +24,3 @@ die('Direct access to this script is forbidden.'); /// It must be included from a Moodle page } -function kalvidpres_get_pres_properties() { - return array('width' => '780', - 'height' => '400', - 'uiconf_id' => local_kaltura_get_player_uiconf('presentation'), - 'video_title' => 'Video presentation'); -} - From cda774045ea6fc87db679ba117f27e274c066219 Mon Sep 17 00:00:00 2001 From: Gonen Radai Date: Tue, 14 Oct 2014 09:00:07 +0300 Subject: [PATCH 013/326] KMS-4431 MR review removed irrelevant unit test --- mod/kalvidassign/tests/locallib_test.php | 77 ------------------------ 1 file changed, 77 deletions(-) delete mode 100644 mod/kalvidassign/tests/locallib_test.php diff --git a/mod/kalvidassign/tests/locallib_test.php b/mod/kalvidassign/tests/locallib_test.php deleted file mode 100644 index c44c157096ad1..0000000000000 --- a/mod/kalvidassign/tests/locallib_test.php +++ /dev/null @@ -1,77 +0,0 @@ -. - -/** - * Moodle course unit test for Kaltura - * - * @package mod_kalvidassign - * @author Remote-Learner Inc - * @copyright (C) 2008-2014 http://www.remote-learner.net - * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later - */ - -defined('MOODLE_INTERNAL') || die(); - -global $CFG; - -require_once($CFG->dirroot.'/mod/kalvidassign/locallib.php'); - -/** - * @group mod_kalvidassign - */ -class locallib_testcase extends advanced_testcase { - /** - * This function tests output from kalvidassign_get_player_dimensions() - */ - public function test_kalvidassign_get_player_dimensions_return_defaults() { - $this->resetAfterTest(true); - - $result = kalvidassign_get_player_dimensions(); - - $this->assertCount(2, $result); - $this->assertEquals(400, $result[0]); - $this->assertEquals(365, $result[1]); - } - - /** - * This function tests output from kalvidassign_get_player_dimensions() - */ - public function test_kalvidassign_get_player_dimensions_return_configured_results() { - $this->resetAfterTest(true); - - set_config('kalvidassign_player_width', 500, 'local_kaltura'); - set_config('kalvidassign_player_height', 500, 'local_kaltura'); - - $result = kalvidassign_get_player_dimensions(); - - $this->assertCount(2, $result); - $this->assertEquals('500', $result[0]); - $this->assertEquals('500', $result[1]); - } - - /** - * This function tests output from kalvidassign_get_player_dimensions() - */ - public function test_kalvidassign_get_player_dimensions_return_default_results_when_empty() { - $this->resetAfterTest(true); - - $result = kalvidassign_get_player_dimensions(); - - set_config('kalvidassign_player_width', '', 'local_kaltura'); - set_config('kalvidassign_player_height', '', 'local_kaltura'); - $this->assertCount(2, $result); - $this->assertEquals(400, $result[0]); - $this->assertEquals(365, $result[1]); - } -} \ No newline at end of file From dff8e5be5abd31299592718aff6ccbb5671be452 Mon Sep 17 00:00:00 2001 From: Gonen Radai Date: Tue, 14 Oct 2014 12:20:56 +0300 Subject: [PATCH 014/326] escape single quotes to not break JS code --- local/kaltura/attobsepreview.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/local/kaltura/attobsepreview.php b/local/kaltura/attobsepreview.php index f1a8f37dd0b8d..f89851480dd23 100644 --- a/local/kaltura/attobsepreview.php +++ b/local/kaltura/attobsepreview.php @@ -39,7 +39,7 @@ parent.kaltura_atto_embed_callback(data); var iframe = Y.Node.create(''); iframe.setAttribute('src', ''); - iframe.setAttribute('alt', ''); + iframe.setAttribute('alt', ''); iframe.setStyles({ height: 'px', border: 'none', From 6c5848f1906362c79086e4795a72ea056df10f18 Mon Sep 17 00:00:00 2001 From: Gonen Radai Date: Tue, 14 Oct 2014 12:21:41 +0300 Subject: [PATCH 015/326] escape single quotes to not break JS code --- local/kaltura/attobsepreview.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/local/kaltura/attobsepreview.php b/local/kaltura/attobsepreview.php index f89851480dd23..86e909d3b272b 100644 --- a/local/kaltura/attobsepreview.php +++ b/local/kaltura/attobsepreview.php @@ -34,7 +34,7 @@ 'url': "", 'width': , 'height': , - 'title': "" + 'title': "" }; parent.kaltura_atto_embed_callback(data); var iframe = Y.Node.create(''); From 3f8079cc878821785fb6f38a7027a78fa9257c4e Mon Sep 17 00:00:00 2001 From: Gonen Radai Date: Tue, 14 Oct 2014 13:03:40 +0300 Subject: [PATCH 016/326] fix order of width/height parameters (moodle plugin review) --- filter/kaltura/filter.php | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/filter/kaltura/filter.php b/filter/kaltura/filter.php index 99db0494d09b9..8d3ceeb09ca78 100644 --- a/filter/kaltura/filter.php +++ b/filter/kaltura/filter.php @@ -165,6 +165,9 @@ function filter_kaltura_callback($link) { if (14 == count($link) && $newurl == $kafuri) { // Get the height and width of the iframe. $properties = explode('||', $link[13]); + + $width = $properties[2]; + $height = $properties[3]; if (4 != count($properties)) { return $link[0]; @@ -172,13 +175,13 @@ function filter_kaltura_callback($link) { $source = filter_kaltura::$kafuri.'/browseandembed/index/media/entryid/'.$link[2].'/showDescription/'.$link[4].'/showTitle/'.$link[5]; $source .= '/showTags/'.$link[6].'/showDuration/'.$link[7].'/showOwner/'.$link[8].'/showUploadDate/'.$link[9]; - $source .= '/playerSize/'.$properties[3].'x'.$properties[2].'/playerSkin/'.$link[12]; + $source .= '/playerSize/'.$width.'x'.$height.'/playerSkin/'.$link[12]; // Iniitate an LTI launch. $params = array( 'courseid' => filter_kaltura::$pagecontext->instanceid, - 'height' => $properties[2], - 'width' => $properties[3], + 'height' => $height, + 'width' => $width, 'withblocks' => 0, 'source' => $source ); @@ -186,8 +189,8 @@ function filter_kaltura_callback($link) { $attr = array( 'id' => 'contentframe', - 'height' => $properties[2], - 'width' => $properties[3], + 'height' => $height, + 'width' => $width, 'allowfullscreen' => 'true', 'webkitallowfullscreen' => 'true', 'mozallowfullscreen' => 'true', From 98e81f88ad0395a370cf375411f45c43e80dc088 Mon Sep 17 00:00:00 2001 From: Gonen Radai Date: Sun, 19 Oct 2014 20:50:31 +0300 Subject: [PATCH 017/326] remove error reporting --- lib/editor/atto/plugins/kalturamedia/ltibrowse.php | 1 - 1 file changed, 1 deletion(-) diff --git a/lib/editor/atto/plugins/kalturamedia/ltibrowse.php b/lib/editor/atto/plugins/kalturamedia/ltibrowse.php index 2d2ef8a834982..12edb80055453 100644 --- a/lib/editor/atto/plugins/kalturamedia/ltibrowse.php +++ b/lib/editor/atto/plugins/kalturamedia/ltibrowse.php @@ -23,7 +23,6 @@ * @copyright (C) 2014 Remote Learner.net Inc http://www.remote-learner.net */ -error_reporting(E_ALL); require_once(dirname(dirname(dirname(dirname(dirname(dirname(__FILE__)))))).'/config.php'); require_once($CFG->dirroot.'/local/kaltura/locallib.php'); //require_once('renderer.php'); From 482e2a9c8a3f76725d74c416b84c80953e2f7ca1 Mon Sep 17 00:00:00 2001 From: Gonen Radai Date: Sun, 19 Oct 2014 21:00:02 +0300 Subject: [PATCH 018/326] move use of const in lang to be JS param --- .../atto/plugins/kalturamedia/lang/en/atto_kalturamedia.php | 1 - lib/editor/atto/plugins/kalturamedia/lib.php | 4 ++++ .../moodle-atto_kalturamedia-button-debug.js | 4 ++-- .../moodle-atto_kalturamedia-button-min.js | 4 ++-- .../moodle-atto_kalturamedia-button.js | 4 ++-- .../atto/plugins/kalturamedia/yui/src/button/js/button.js | 2 +- 6 files changed, 11 insertions(+), 8 deletions(-) diff --git a/lib/editor/atto/plugins/kalturamedia/lang/en/atto_kalturamedia.php b/lib/editor/atto/plugins/kalturamedia/lang/en/atto_kalturamedia.php index 9c522f0f95a1e..d546d8991d2cd 100644 --- a/lib/editor/atto/plugins/kalturamedia/lang/en/atto_kalturamedia.php +++ b/lib/editor/atto/plugins/kalturamedia/lang/en/atto_kalturamedia.php @@ -29,4 +29,3 @@ $string['pluginname'] = 'Kaltura Media'; $string['popuptitle'] = 'Select Media'; $string['embedbuttontext'] = 'Embed'; -$string['kalturauritoken'] = KALTURA_URI_TOKEN; diff --git a/lib/editor/atto/plugins/kalturamedia/lib.php b/lib/editor/atto/plugins/kalturamedia/lib.php index 9e400ac92e3b6..70e668ea3ecf6 100644 --- a/lib/editor/atto/plugins/kalturamedia/lib.php +++ b/lib/editor/atto/plugins/kalturamedia/lib.php @@ -33,3 +33,7 @@ function atto_kalturamedia_strings_for_js() { 'kalturauritoken',), 'atto_kalturamedia'); } + +function atto_kalturamedia_params_for_js() { + return array('kalturauritoken' => KALTURA_URI_TOKEN); +} diff --git a/lib/editor/atto/plugins/kalturamedia/yui/build/moodle-atto_kalturamedia-button/moodle-atto_kalturamedia-button-debug.js b/lib/editor/atto/plugins/kalturamedia/yui/build/moodle-atto_kalturamedia-button/moodle-atto_kalturamedia-button-debug.js index d7b4d78820c06..cd8d2daa8978d 100644 --- a/lib/editor/atto/plugins/kalturamedia/yui/build/moodle-atto_kalturamedia-button/moodle-atto_kalturamedia-button-debug.js +++ b/lib/editor/atto/plugins/kalturamedia/yui/build/moodle-atto_kalturamedia-button/moodle-atto_kalturamedia-button-debug.js @@ -139,7 +139,7 @@ Y.namespace('M.atto_kalturamedia').Button = Y.Base.create('button', Y.M.editor_a } } - var token = M.util.get_string('kalturauritoken', COMPONENTNAME); //'kaltura-kaf-uri.com'; // TODO - replace this to come from lang or something more dynamic (PHP) + var token = this.get('kalturauritoken'); var url = ''; var parser = document.createElement('a'); parser.href = embedInfo.url; @@ -177,4 +177,4 @@ function kaltura_atto_embed_callback(data) } button.removeAttribute('disabled'); button.show(); -} \ No newline at end of file +} diff --git a/lib/editor/atto/plugins/kalturamedia/yui/build/moodle-atto_kalturamedia-button/moodle-atto_kalturamedia-button-min.js b/lib/editor/atto/plugins/kalturamedia/yui/build/moodle-atto_kalturamedia-button/moodle-atto_kalturamedia-button-min.js index d7b4d78820c06..cd8d2daa8978d 100644 --- a/lib/editor/atto/plugins/kalturamedia/yui/build/moodle-atto_kalturamedia-button/moodle-atto_kalturamedia-button-min.js +++ b/lib/editor/atto/plugins/kalturamedia/yui/build/moodle-atto_kalturamedia-button/moodle-atto_kalturamedia-button-min.js @@ -139,7 +139,7 @@ Y.namespace('M.atto_kalturamedia').Button = Y.Base.create('button', Y.M.editor_a } } - var token = M.util.get_string('kalturauritoken', COMPONENTNAME); //'kaltura-kaf-uri.com'; // TODO - replace this to come from lang or something more dynamic (PHP) + var token = this.get('kalturauritoken'); var url = ''; var parser = document.createElement('a'); parser.href = embedInfo.url; @@ -177,4 +177,4 @@ function kaltura_atto_embed_callback(data) } button.removeAttribute('disabled'); button.show(); -} \ No newline at end of file +} diff --git a/lib/editor/atto/plugins/kalturamedia/yui/build/moodle-atto_kalturamedia-button/moodle-atto_kalturamedia-button.js b/lib/editor/atto/plugins/kalturamedia/yui/build/moodle-atto_kalturamedia-button/moodle-atto_kalturamedia-button.js index d7b4d78820c06..cd8d2daa8978d 100644 --- a/lib/editor/atto/plugins/kalturamedia/yui/build/moodle-atto_kalturamedia-button/moodle-atto_kalturamedia-button.js +++ b/lib/editor/atto/plugins/kalturamedia/yui/build/moodle-atto_kalturamedia-button/moodle-atto_kalturamedia-button.js @@ -139,7 +139,7 @@ Y.namespace('M.atto_kalturamedia').Button = Y.Base.create('button', Y.M.editor_a } } - var token = M.util.get_string('kalturauritoken', COMPONENTNAME); //'kaltura-kaf-uri.com'; // TODO - replace this to come from lang or something more dynamic (PHP) + var token = this.get('kalturauritoken'); var url = ''; var parser = document.createElement('a'); parser.href = embedInfo.url; @@ -177,4 +177,4 @@ function kaltura_atto_embed_callback(data) } button.removeAttribute('disabled'); button.show(); -} \ No newline at end of file +} diff --git a/lib/editor/atto/plugins/kalturamedia/yui/src/button/js/button.js b/lib/editor/atto/plugins/kalturamedia/yui/src/button/js/button.js index 347c6904102b4..835d4f017f6ec 100644 --- a/lib/editor/atto/plugins/kalturamedia/yui/src/button/js/button.js +++ b/lib/editor/atto/plugins/kalturamedia/yui/src/button/js/button.js @@ -138,7 +138,7 @@ Y.namespace('M.atto_kalturamedia').Button = Y.Base.create('button', Y.M.editor_a } } - var token = M.util.get_string('kalturauritoken', COMPONENTNAME); //'kaltura-kaf-uri.com'; // TODO - replace this to come from lang or something more dynamic (PHP) + var token = this.get('kalturauritoken'); var url = ''; var parser = document.createElement('a'); parser.href = embedInfo.url; From 1db84c750274a40f9a4414e21fb01372cd8262a2 Mon Sep 17 00:00:00 2001 From: Gonen Radai Date: Mon, 20 Oct 2014 17:07:42 +0300 Subject: [PATCH 019/326] added missing string that was removed in assignment module in 2.7 --- mod/kalvidassign/lang/en/kalvidassign.php | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/mod/kalvidassign/lang/en/kalvidassign.php b/mod/kalvidassign/lang/en/kalvidassign.php index bf4f8819fd7a2..fd816785a4d47 100644 --- a/mod/kalvidassign/lang/en/kalvidassign.php +++ b/mod/kalvidassign/lang/en/kalvidassign.php @@ -113,4 +113,5 @@ $string['viewsubmission'] = 'View submission'; $string['failedtoinsertsubmission'] = 'Failed to insert submission record.'; $string['video_thumbnail'] = 'Video thumbnail'; -$string['feedbackfromteacher'] = 'Feedback From Teacher'; \ No newline at end of file +$string['feedbackfromteacher'] = 'Feedback From Teacher'; +$string['currentgrade'] = 'Current grade in gradebook'; \ No newline at end of file From 6db2d9147d6b20c2e5469ce757cef3899b2384c7 Mon Sep 17 00:00:00 2001 From: Gonen Radai Date: Mon, 20 Oct 2014 17:09:25 +0300 Subject: [PATCH 020/326] added missing string that was removed in assignment module in 2.7 --- mod/kalvidassign/single_submission_form.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mod/kalvidassign/single_submission_form.php b/mod/kalvidassign/single_submission_form.php index 521d0165a146b..4b4a0260c0a39 100644 --- a/mod/kalvidassign/single_submission_form.php +++ b/mod/kalvidassign/single_submission_form.php @@ -145,7 +145,7 @@ public function definition() { } - $mform->addElement('static', 'finalgrade', get_string('currentgrade', 'assignment').':', $grade); + $mform->addElement('static', 'finalgrade', get_string('currentgrade', 'kalvidassign').':', $grade); $mform->setType('finalgrade', PARAM_INT); /* Feedback section */ From ee1d7a90cc5b2b66ef4b572e0556c39ed8a2d599 Mon Sep 17 00:00:00 2001 From: Gonen Radai Date: Tue, 21 Oct 2014 13:52:01 +0300 Subject: [PATCH 021/326] KMS-4571 fix for BSE error due to wrong context ID value --- lib/editor/atto/plugins/kalturamedia/lib.php | 18 +++++++++++---- .../moodle-atto_kalturamedia-button-debug.js | 22 +++++++++++++++++-- .../moodle-atto_kalturamedia-button-min.js | 22 +++++++++++++++++-- .../moodle-atto_kalturamedia-button.js | 22 +++++++++++++++++-- .../kalturamedia/yui/src/button/js/button.js | 22 +++++++++++++++++-- 5 files changed, 94 insertions(+), 12 deletions(-) diff --git a/lib/editor/atto/plugins/kalturamedia/lib.php b/lib/editor/atto/plugins/kalturamedia/lib.php index 70e668ea3ecf6..85240ab4ec771 100644 --- a/lib/editor/atto/plugins/kalturamedia/lib.php +++ b/lib/editor/atto/plugins/kalturamedia/lib.php @@ -29,11 +29,21 @@ function atto_kalturamedia_strings_for_js() { global $PAGE; $PAGE->requires->strings_for_js(array('popuptitle', - 'embedbuttontext', - 'kalturauritoken',), + 'embedbuttontext',), 'atto_kalturamedia'); } -function atto_kalturamedia_params_for_js() { - return array('kalturauritoken' => KALTURA_URI_TOKEN); +function atto_kalturamedia_params_for_js($elementid, $options, $fpoptions) { + global $CFG; + require_once($CFG->dirroot.'/local/kaltura/locallib.php'); + + $context = $options['context']; + if (!$context) { + $context = context_system::instance(); + } + + return array( + 'kalturauritoken' => KALTURA_URI_TOKEN, + 'contextid' => $context->id, + ); } diff --git a/lib/editor/atto/plugins/kalturamedia/yui/build/moodle-atto_kalturamedia-button/moodle-atto_kalturamedia-button-debug.js b/lib/editor/atto/plugins/kalturamedia/yui/build/moodle-atto_kalturamedia-button/moodle-atto_kalturamedia-button-debug.js index cd8d2daa8978d..c1c28e27e0dae 100644 --- a/lib/editor/atto/plugins/kalturamedia/yui/build/moodle-atto_kalturamedia-button/moodle-atto_kalturamedia-button-debug.js +++ b/lib/editor/atto/plugins/kalturamedia/yui/build/moodle-atto_kalturamedia-button/moodle-atto_kalturamedia-button-debug.js @@ -98,7 +98,7 @@ Y.namespace('M.atto_kalturamedia').Button = Y.Base.create('button', Y.M.editor_a var args = Y.mix({ elementid: this.get('host').get('elementid'), - contextid: this._getCourseId(), + contextid: this.get('contextid'), height: '600px', width: '1112px' }, @@ -161,7 +161,25 @@ Y.namespace('M.atto_kalturamedia').Button = Y.Base.create('button', Y.M.editor_a } -} +} , { + ATTRS: { + /** + * The contextid to use when generating this preview. + * + * @attribute contextid + * @type String + */ + contextid: { + value: null + }, + + /** + * Kaltura URI token to be placed in content for filter to catch. this is merely a placeholder to pass a CONST value into JS. + */ + kalturauritoken: { + value: null + } + }} ); diff --git a/lib/editor/atto/plugins/kalturamedia/yui/build/moodle-atto_kalturamedia-button/moodle-atto_kalturamedia-button-min.js b/lib/editor/atto/plugins/kalturamedia/yui/build/moodle-atto_kalturamedia-button/moodle-atto_kalturamedia-button-min.js index cd8d2daa8978d..c1c28e27e0dae 100644 --- a/lib/editor/atto/plugins/kalturamedia/yui/build/moodle-atto_kalturamedia-button/moodle-atto_kalturamedia-button-min.js +++ b/lib/editor/atto/plugins/kalturamedia/yui/build/moodle-atto_kalturamedia-button/moodle-atto_kalturamedia-button-min.js @@ -98,7 +98,7 @@ Y.namespace('M.atto_kalturamedia').Button = Y.Base.create('button', Y.M.editor_a var args = Y.mix({ elementid: this.get('host').get('elementid'), - contextid: this._getCourseId(), + contextid: this.get('contextid'), height: '600px', width: '1112px' }, @@ -161,7 +161,25 @@ Y.namespace('M.atto_kalturamedia').Button = Y.Base.create('button', Y.M.editor_a } -} +} , { + ATTRS: { + /** + * The contextid to use when generating this preview. + * + * @attribute contextid + * @type String + */ + contextid: { + value: null + }, + + /** + * Kaltura URI token to be placed in content for filter to catch. this is merely a placeholder to pass a CONST value into JS. + */ + kalturauritoken: { + value: null + } + }} ); diff --git a/lib/editor/atto/plugins/kalturamedia/yui/build/moodle-atto_kalturamedia-button/moodle-atto_kalturamedia-button.js b/lib/editor/atto/plugins/kalturamedia/yui/build/moodle-atto_kalturamedia-button/moodle-atto_kalturamedia-button.js index cd8d2daa8978d..c1c28e27e0dae 100644 --- a/lib/editor/atto/plugins/kalturamedia/yui/build/moodle-atto_kalturamedia-button/moodle-atto_kalturamedia-button.js +++ b/lib/editor/atto/plugins/kalturamedia/yui/build/moodle-atto_kalturamedia-button/moodle-atto_kalturamedia-button.js @@ -98,7 +98,7 @@ Y.namespace('M.atto_kalturamedia').Button = Y.Base.create('button', Y.M.editor_a var args = Y.mix({ elementid: this.get('host').get('elementid'), - contextid: this._getCourseId(), + contextid: this.get('contextid'), height: '600px', width: '1112px' }, @@ -161,7 +161,25 @@ Y.namespace('M.atto_kalturamedia').Button = Y.Base.create('button', Y.M.editor_a } -} +} , { + ATTRS: { + /** + * The contextid to use when generating this preview. + * + * @attribute contextid + * @type String + */ + contextid: { + value: null + }, + + /** + * Kaltura URI token to be placed in content for filter to catch. this is merely a placeholder to pass a CONST value into JS. + */ + kalturauritoken: { + value: null + } + }} ); diff --git a/lib/editor/atto/plugins/kalturamedia/yui/src/button/js/button.js b/lib/editor/atto/plugins/kalturamedia/yui/src/button/js/button.js index 835d4f017f6ec..8d50cdcebb330 100644 --- a/lib/editor/atto/plugins/kalturamedia/yui/src/button/js/button.js +++ b/lib/editor/atto/plugins/kalturamedia/yui/src/button/js/button.js @@ -97,7 +97,7 @@ Y.namespace('M.atto_kalturamedia').Button = Y.Base.create('button', Y.M.editor_a var args = Y.mix({ elementid: this.get('host').get('elementid'), - contextid: this._getCourseId(), + contextid: this.get('contextid'), height: '600px', width: '1112px' }, @@ -160,5 +160,23 @@ Y.namespace('M.atto_kalturamedia').Button = Y.Base.create('button', Y.M.editor_a } -} +} , { + ATTRS: { + /** + * The contextid to use when generating this preview. + * + * @attribute contextid + * @type String + */ + contextid: { + value: null + }, + + /** + * Kaltura URI token to be placed in content for filter to catch. this is merely a placeholder to pass a CONST value into JS. + */ + kalturauritoken: { + value: null + } + }} ); From 5f531ae21b72e9c8a22b6b66ebeaa31199081a8e Mon Sep 17 00:00:00 2001 From: Gonen Radai Date: Tue, 21 Oct 2014 14:53:52 +0300 Subject: [PATCH 022/326] increase version number --- filter/kaltura/version.php | 6 +++--- local/kaltura/version.php | 4 ++-- local/kalturamediagallery/version.php | 6 +++--- local/mymedia/version.php | 6 +++--- mod/kalvidassign/version.php | 6 +++--- mod/kalvidpres/version.php | 6 +++--- mod/kalvidres/version.php | 6 +++--- 7 files changed, 20 insertions(+), 20 deletions(-) diff --git a/filter/kaltura/version.php b/filter/kaltura/version.php index bb8a56eccd35f..e1d47ec4415ce 100644 --- a/filter/kaltura/version.php +++ b/filter/kaltura/version.php @@ -24,10 +24,10 @@ */ defined('MOODLE_INTERNAL') || die(); -$plugin->version = 2014023000; -$plugin->release = 'Kaltura release 4.0.00 (RL: TBD)'; +$plugin->version = 2014102100; +$plugin->release = 'Kaltura release 4.0.01'; $plugin->requires = 2013111801; $plugin->maturity = MATURITY_STABLE; $plugin->dependencies = array( - 'local_kaltura' => 2014013000 + 'local_kaltura' => 2014102100 ); diff --git a/local/kaltura/version.php b/local/kaltura/version.php index 95414570b1ef2..91274c4f64634 100644 --- a/local/kaltura/version.php +++ b/local/kaltura/version.php @@ -25,8 +25,8 @@ die('Direct access to this script is forbidden.'); } -$plugin->version = 2014023000.01; +$plugin->version = 2014102100; $plugin->component = 'local_kaltura'; -$plugin->release = 'Kaltura release 4.0.00 (RL: TBD)'; +$plugin->release = 'Kaltura release 4.0.01'; $plugin->requires = 2013111801; $plugin->maturity = MATURITY_STABLE; diff --git a/local/kalturamediagallery/version.php b/local/kalturamediagallery/version.php index 9c42ae7c8da6e..f09d7dd895c7d 100644 --- a/local/kalturamediagallery/version.php +++ b/local/kalturamediagallery/version.php @@ -26,11 +26,11 @@ die('Direct access to this script is forbidden.'); } -$plugin->version = 2014013000; +$plugin->version = 2014102100; $plugin->component = 'local_kalturamediagallery'; -$plugin->release = 'Kaltura release 4.0.00 (RL: TBD)'; +$plugin->release = 'Kaltura release 4.0.01'; $plugin->requires = 2013051400; $plugin->maturity = MATURITY_STABLE; $plugin->dependencies = array( - 'local_kaltura' => 2014013000 + 'local_kaltura' => 2014102100 ); diff --git a/local/mymedia/version.php b/local/mymedia/version.php index 8a4c755ae05d2..a1b8ae5046fed 100644 --- a/local/mymedia/version.php +++ b/local/mymedia/version.php @@ -25,11 +25,11 @@ die('Direct access to this script is forbidden.'); } -$plugin->version = 2014023000; +$plugin->version = 2014102100; $plugin->component = 'local_mymedia'; -$plugin->release = 'Kaltura release 4.0.00 (RL: TBD)'; +$plugin->release = 'Kaltura release 4.0.01'; $plugin->requires = 2013111801; $plugin->maturity = MATURITY_STABLE; $plugin->dependencies = array( - 'local_kaltura' => 2014013000 + 'local_kaltura' => 2014102100 ); \ No newline at end of file diff --git a/mod/kalvidassign/version.php b/mod/kalvidassign/version.php index 03f25342f33c6..533ef868171bf 100644 --- a/mod/kalvidassign/version.php +++ b/mod/kalvidassign/version.php @@ -25,12 +25,12 @@ die('Direct access to this script is forbidden.'); } -$module->version = 2014023000.01; +$module->version = 2014102100; $module->component = 'mod_kalvidassign'; -$module->release = 'Kaltura release 4.0.00 (RL: TBD)'; +$module->release = 'Kaltura release 4.0.01'; $module->requires = 2013111801; $module->cron = 0; $module->maturity = MATURITY_STABLE; $module->dependencies = array( - 'local_kaltura' => 2014023000.01, + 'local_kaltura' => 2014102100, ); diff --git a/mod/kalvidpres/version.php b/mod/kalvidpres/version.php index 8ff8cb3ea3343..f8c27e9b1e61f 100644 --- a/mod/kalvidpres/version.php +++ b/mod/kalvidpres/version.php @@ -25,12 +25,12 @@ die('Direct access to this script is forbidden.'); } -$module->version = 2014023000.01; +$module->version = 2014102100; $module->component = 'mod_kalvidpres'; -$module->release = 'Kaltura release 4.0.00 (RL: TBD)'; +$module->release = 'Kaltura release 4.0.01'; $module->requires = 2013051400; $module->cron = 0; $module->maturity = MATURITY_STABLE; $module->dependencies = array( - 'local_kaltura' => 2014023000.01 + 'local_kaltura' => 2014102100 ); \ No newline at end of file diff --git a/mod/kalvidres/version.php b/mod/kalvidres/version.php index 1fbda03a3c4fa..cb2b662a5ca0e 100644 --- a/mod/kalvidres/version.php +++ b/mod/kalvidres/version.php @@ -25,12 +25,12 @@ die('Direct access to this script is forbidden.'); } -$module->version = 2014023000.01; +$module->version = 2014102100; $module->component = 'mod_kalvidres'; -$module->release = 'Kaltura release 4.0.00 (RL: TBD)'; +$module->release = 'Kaltura release 4.0.01'; $module->requires = 2013111801; $module->cron = 0; $module->maturity = MATURITY_STABLE; $module->dependencies = array( - 'local_kaltura' => 2014013000.01 + 'local_kaltura' => 2014102100 ); \ No newline at end of file From 69b727c48a1550f413bb1719728e47ac82bd8ac5 Mon Sep 17 00:00:00 2001 From: Gonen Radai Date: Tue, 21 Oct 2014 14:54:27 +0300 Subject: [PATCH 023/326] increase version number --- lib/editor/atto/plugins/kalturamedia/version.php | 6 +++++- lib/editor/tinymce/plugins/kalturamedia/version.php | 5 +++-- 2 files changed, 8 insertions(+), 3 deletions(-) diff --git a/lib/editor/atto/plugins/kalturamedia/version.php b/lib/editor/atto/plugins/kalturamedia/version.php index c2f9ad44b6c9a..396e99ebaeca9 100644 --- a/lib/editor/atto/plugins/kalturamedia/version.php +++ b/lib/editor/atto/plugins/kalturamedia/version.php @@ -24,6 +24,10 @@ defined('MOODLE_INTERNAL') || die(); -$plugin->version = 2014051200; // The current plugin version (Date: YYYYMMDDXX). +$plugin->version = 2014102100; // The current plugin version (Date: YYYYMMDDXX). +$plugin->release = 'Kaltura release 4.0.01'; $plugin->requires = 2014050800; // Requires this Moodle version. $plugin->component = 'atto_kalturamedia'; // Full name of the plugin (used for diagnostics). +$plugin->dependencies = array( + 'local_kaltura' => 2014102100 +); \ No newline at end of file diff --git a/lib/editor/tinymce/plugins/kalturamedia/version.php b/lib/editor/tinymce/plugins/kalturamedia/version.php index 2a118b2d2b73a..6c75bc6f62c92 100644 --- a/lib/editor/tinymce/plugins/kalturamedia/version.php +++ b/lib/editor/tinymce/plugins/kalturamedia/version.php @@ -23,11 +23,12 @@ defined('MOODLE_INTERNAL') || die(); -$plugin->version = 2014023000; +$plugin->version = 2014102100; +$plugin->release = 'Kaltura release 4.0.01'; // Required Moodle version. $plugin->requires = 2013111801; // Full name of the plugin (used for diagnostics). $plugin->component = 'tinymce_kalturamedia'; $plugin->dependencies = array( - 'local_kaltura' => 2014013000 + 'local_kaltura' => 2014102100 ); From 0c8443ae0908235569576d47bf0daa1a5aaa0d53 Mon Sep 17 00:00:00 2001 From: Gonen Radai Date: Tue, 21 Oct 2014 14:54:42 +0300 Subject: [PATCH 024/326] increase version number --- local/kaltura/db/upgrade.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/local/kaltura/db/upgrade.php b/local/kaltura/db/upgrade.php index e8de2b0d4c236..95553bc4c3cf9 100644 --- a/local/kaltura/db/upgrade.php +++ b/local/kaltura/db/upgrade.php @@ -60,8 +60,8 @@ function xmldb_local_kaltura_upgrade($oldversion) { upgrade_plugin_savepoint(true, 2014023000, 'local', 'kaltura'); } - if ($oldversion < 2014023000.01) { + if ($oldversion < 2014102100) { // Kaltura savepoint reached. - upgrade_plugin_savepoint(true, 2014023000.01, 'local', 'kaltura'); + upgrade_plugin_savepoint(true, 2014102100, 'local', 'kaltura'); } } \ No newline at end of file From ff9951ec89b40402af4fc0bbc2ae2e7d39caf5cf Mon Sep 17 00:00:00 2001 From: Gonen Radai Date: Tue, 28 Oct 2014 09:39:00 +0200 Subject: [PATCH 025/326] KMS-4703 fixed incorrect button tooltip --- .../moodle-atto_kalturamedia-button-debug.js | 2 -- .../moodle-atto_kalturamedia-button-min.js | 2 -- .../moodle-atto_kalturamedia-button.js | 2 -- .../atto/plugins/kalturamedia/yui/src/button/js/button.js | 2 -- 4 files changed, 8 deletions(-) diff --git a/lib/editor/atto/plugins/kalturamedia/yui/build/moodle-atto_kalturamedia-button/moodle-atto_kalturamedia-button-debug.js b/lib/editor/atto/plugins/kalturamedia/yui/build/moodle-atto_kalturamedia-button/moodle-atto_kalturamedia-button-debug.js index c1c28e27e0dae..552a4f464b6ef 100644 --- a/lib/editor/atto/plugins/kalturamedia/yui/build/moodle-atto_kalturamedia-button/moodle-atto_kalturamedia-button-debug.js +++ b/lib/editor/atto/plugins/kalturamedia/yui/build/moodle-atto_kalturamedia-button/moodle-atto_kalturamedia-button-debug.js @@ -50,8 +50,6 @@ Y.namespace('M.atto_kalturamedia').Button = Y.Base.create('button', Y.M.editor_a this.addButton({ //icon: 'e/icon', iconurl: M.cfg.wwwroot + '/lib/editor/atto/plugins/kalturamedia/pix/icon.png', - title: 'Kaltura', - buttonName: 'Kaltura', callback: this._kalturamedia }); }, diff --git a/lib/editor/atto/plugins/kalturamedia/yui/build/moodle-atto_kalturamedia-button/moodle-atto_kalturamedia-button-min.js b/lib/editor/atto/plugins/kalturamedia/yui/build/moodle-atto_kalturamedia-button/moodle-atto_kalturamedia-button-min.js index c1c28e27e0dae..552a4f464b6ef 100644 --- a/lib/editor/atto/plugins/kalturamedia/yui/build/moodle-atto_kalturamedia-button/moodle-atto_kalturamedia-button-min.js +++ b/lib/editor/atto/plugins/kalturamedia/yui/build/moodle-atto_kalturamedia-button/moodle-atto_kalturamedia-button-min.js @@ -50,8 +50,6 @@ Y.namespace('M.atto_kalturamedia').Button = Y.Base.create('button', Y.M.editor_a this.addButton({ //icon: 'e/icon', iconurl: M.cfg.wwwroot + '/lib/editor/atto/plugins/kalturamedia/pix/icon.png', - title: 'Kaltura', - buttonName: 'Kaltura', callback: this._kalturamedia }); }, diff --git a/lib/editor/atto/plugins/kalturamedia/yui/build/moodle-atto_kalturamedia-button/moodle-atto_kalturamedia-button.js b/lib/editor/atto/plugins/kalturamedia/yui/build/moodle-atto_kalturamedia-button/moodle-atto_kalturamedia-button.js index c1c28e27e0dae..552a4f464b6ef 100644 --- a/lib/editor/atto/plugins/kalturamedia/yui/build/moodle-atto_kalturamedia-button/moodle-atto_kalturamedia-button.js +++ b/lib/editor/atto/plugins/kalturamedia/yui/build/moodle-atto_kalturamedia-button/moodle-atto_kalturamedia-button.js @@ -50,8 +50,6 @@ Y.namespace('M.atto_kalturamedia').Button = Y.Base.create('button', Y.M.editor_a this.addButton({ //icon: 'e/icon', iconurl: M.cfg.wwwroot + '/lib/editor/atto/plugins/kalturamedia/pix/icon.png', - title: 'Kaltura', - buttonName: 'Kaltura', callback: this._kalturamedia }); }, diff --git a/lib/editor/atto/plugins/kalturamedia/yui/src/button/js/button.js b/lib/editor/atto/plugins/kalturamedia/yui/src/button/js/button.js index 8d50cdcebb330..729532b17f30f 100644 --- a/lib/editor/atto/plugins/kalturamedia/yui/src/button/js/button.js +++ b/lib/editor/atto/plugins/kalturamedia/yui/src/button/js/button.js @@ -49,8 +49,6 @@ Y.namespace('M.atto_kalturamedia').Button = Y.Base.create('button', Y.M.editor_a this.addButton({ //icon: 'e/icon', iconurl: M.cfg.wwwroot + '/lib/editor/atto/plugins/kalturamedia/pix/icon.png', - title: 'Kaltura', - buttonName: 'Kaltura', callback: this._kalturamedia }); }, From bda100c1146704c816567f8bb72af15c1f942f87 Mon Sep 17 00:00:00 2001 From: Gonen Radai Date: Tue, 28 Oct 2014 09:47:09 +0200 Subject: [PATCH 026/326] KMS-4704 changed version number --- filter/kaltura/version.php | 6 +++--- lib/editor/atto/plugins/kalturamedia/version.php | 6 +++--- lib/editor/tinymce/plugins/kalturamedia/version.php | 6 +++--- local/kaltura/version.php | 4 ++-- local/kalturamediagallery/version.php | 6 +++--- local/mymedia/version.php | 8 ++++---- mod/kalvidassign/version.php | 6 +++--- mod/kalvidpres/version.php | 8 ++++---- mod/kalvidres/version.php | 8 ++++---- 9 files changed, 29 insertions(+), 29 deletions(-) diff --git a/filter/kaltura/version.php b/filter/kaltura/version.php index e1d47ec4415ce..ae260019bdf52 100644 --- a/filter/kaltura/version.php +++ b/filter/kaltura/version.php @@ -24,10 +24,10 @@ */ defined('MOODLE_INTERNAL') || die(); -$plugin->version = 2014102100; +$plugin->version = 2014102807; $plugin->release = 'Kaltura release 4.0.01'; -$plugin->requires = 2013111801; +$plugin->requires = 2014050800; $plugin->maturity = MATURITY_STABLE; $plugin->dependencies = array( - 'local_kaltura' => 2014102100 + 'local_kaltura' => 2014102807 ); diff --git a/lib/editor/atto/plugins/kalturamedia/version.php b/lib/editor/atto/plugins/kalturamedia/version.php index 396e99ebaeca9..a90f281e55df4 100644 --- a/lib/editor/atto/plugins/kalturamedia/version.php +++ b/lib/editor/atto/plugins/kalturamedia/version.php @@ -24,10 +24,10 @@ defined('MOODLE_INTERNAL') || die(); -$plugin->version = 2014102100; // The current plugin version (Date: YYYYMMDDXX). +$plugin->version = 2014102807; // The current plugin version (Date: YYYYMMDDXX). $plugin->release = 'Kaltura release 4.0.01'; $plugin->requires = 2014050800; // Requires this Moodle version. $plugin->component = 'atto_kalturamedia'; // Full name of the plugin (used for diagnostics). $plugin->dependencies = array( - 'local_kaltura' => 2014102100 -); \ No newline at end of file + 'local_kaltura' => 2014102807 +); diff --git a/lib/editor/tinymce/plugins/kalturamedia/version.php b/lib/editor/tinymce/plugins/kalturamedia/version.php index 6c75bc6f62c92..15729168e52b7 100644 --- a/lib/editor/tinymce/plugins/kalturamedia/version.php +++ b/lib/editor/tinymce/plugins/kalturamedia/version.php @@ -23,12 +23,12 @@ defined('MOODLE_INTERNAL') || die(); -$plugin->version = 2014102100; +$plugin->version = 2014102807; $plugin->release = 'Kaltura release 4.0.01'; // Required Moodle version. -$plugin->requires = 2013111801; +$plugin->requires = 2014050800; // Full name of the plugin (used for diagnostics). $plugin->component = 'tinymce_kalturamedia'; $plugin->dependencies = array( - 'local_kaltura' => 2014102100 + 'local_kaltura' => 2014102807 ); diff --git a/local/kaltura/version.php b/local/kaltura/version.php index 91274c4f64634..2289d815a9cf7 100644 --- a/local/kaltura/version.php +++ b/local/kaltura/version.php @@ -25,8 +25,8 @@ die('Direct access to this script is forbidden.'); } -$plugin->version = 2014102100; +$plugin->version = 2014102807; $plugin->component = 'local_kaltura'; $plugin->release = 'Kaltura release 4.0.01'; -$plugin->requires = 2013111801; +$plugin->requires = 2014050800; $plugin->maturity = MATURITY_STABLE; diff --git a/local/kalturamediagallery/version.php b/local/kalturamediagallery/version.php index f09d7dd895c7d..c91a7f27b8a67 100644 --- a/local/kalturamediagallery/version.php +++ b/local/kalturamediagallery/version.php @@ -26,11 +26,11 @@ die('Direct access to this script is forbidden.'); } -$plugin->version = 2014102100; +$plugin->version = 2014102807; $plugin->component = 'local_kalturamediagallery'; $plugin->release = 'Kaltura release 4.0.01'; -$plugin->requires = 2013051400; +$plugin->requires = 2014050800; $plugin->maturity = MATURITY_STABLE; $plugin->dependencies = array( - 'local_kaltura' => 2014102100 + 'local_kaltura' => 2014102807 ); diff --git a/local/mymedia/version.php b/local/mymedia/version.php index a1b8ae5046fed..ace9b8a44233d 100644 --- a/local/mymedia/version.php +++ b/local/mymedia/version.php @@ -25,11 +25,11 @@ die('Direct access to this script is forbidden.'); } -$plugin->version = 2014102100; +$plugin->version = 2014102807; $plugin->component = 'local_mymedia'; $plugin->release = 'Kaltura release 4.0.01'; -$plugin->requires = 2013111801; +$plugin->requires = 2014050800; $plugin->maturity = MATURITY_STABLE; $plugin->dependencies = array( - 'local_kaltura' => 2014102100 -); \ No newline at end of file + 'local_kaltura' => 2014102807 +); diff --git a/mod/kalvidassign/version.php b/mod/kalvidassign/version.php index 533ef868171bf..1ecd8264fba0a 100644 --- a/mod/kalvidassign/version.php +++ b/mod/kalvidassign/version.php @@ -25,12 +25,12 @@ die('Direct access to this script is forbidden.'); } -$module->version = 2014102100; +$module->version = 2014102807; $module->component = 'mod_kalvidassign'; $module->release = 'Kaltura release 4.0.01'; -$module->requires = 2013111801; +$module->requires = 2014050800; $module->cron = 0; $module->maturity = MATURITY_STABLE; $module->dependencies = array( - 'local_kaltura' => 2014102100, + 'local_kaltura' => 2014102807, ); diff --git a/mod/kalvidpres/version.php b/mod/kalvidpres/version.php index f8c27e9b1e61f..0d55bdec887da 100644 --- a/mod/kalvidpres/version.php +++ b/mod/kalvidpres/version.php @@ -25,12 +25,12 @@ die('Direct access to this script is forbidden.'); } -$module->version = 2014102100; +$module->version = 2014102807; $module->component = 'mod_kalvidpres'; $module->release = 'Kaltura release 4.0.01'; -$module->requires = 2013051400; +$module->requires = 2014050800; $module->cron = 0; $module->maturity = MATURITY_STABLE; $module->dependencies = array( - 'local_kaltura' => 2014102100 -); \ No newline at end of file + 'local_kaltura' => 2014102807 +); diff --git a/mod/kalvidres/version.php b/mod/kalvidres/version.php index cb2b662a5ca0e..5a37ef1ebf5a0 100644 --- a/mod/kalvidres/version.php +++ b/mod/kalvidres/version.php @@ -25,12 +25,12 @@ die('Direct access to this script is forbidden.'); } -$module->version = 2014102100; +$module->version = 2014102807; $module->component = 'mod_kalvidres'; $module->release = 'Kaltura release 4.0.01'; -$module->requires = 2013111801; +$module->requires = 2014050800; $module->cron = 0; $module->maturity = MATURITY_STABLE; $module->dependencies = array( - 'local_kaltura' => 2014102100 -); \ No newline at end of file + 'local_kaltura' => 2014102807 +); From 169cdbc648750840a980a0e60f211fe749f2d84a Mon Sep 17 00:00:00 2001 From: Gonen Radai Date: Tue, 28 Oct 2014 09:53:03 +0200 Subject: [PATCH 027/326] KMS-4704 changed version number --- local/kaltura/db/upgrade.php | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/local/kaltura/db/upgrade.php b/local/kaltura/db/upgrade.php index 95553bc4c3cf9..9665acaf7e341 100644 --- a/local/kaltura/db/upgrade.php +++ b/local/kaltura/db/upgrade.php @@ -57,11 +57,11 @@ function xmldb_local_kaltura_upgrade($oldversion) { } // Kaltura savepoint reached. - upgrade_plugin_savepoint(true, 2014023000, 'local', 'kaltura'); + upgrade_plugin_savepoint(true, 2014102807, 'local', 'kaltura'); } - if ($oldversion < 2014102100) { + if ($oldversion < 2014102807) { // Kaltura savepoint reached. - upgrade_plugin_savepoint(true, 2014102100, 'local', 'kaltura'); + upgrade_plugin_savepoint(true, 2014102807, 'local', 'kaltura'); } } \ No newline at end of file From ee9ddad252601b7ff9d20ce598580b585dcfaeb1 Mon Sep 17 00:00:00 2001 From: Gonen Radai Date: Wed, 29 Oct 2014 17:31:55 +0200 Subject: [PATCH 028/326] added script to easily make package for moodle.org --- createPackage.sh | 10 ++++++++++ 1 file changed, 10 insertions(+) create mode 100755 createPackage.sh diff --git a/createPackage.sh b/createPackage.sh new file mode 100755 index 0000000000000..cbceb42db3665 --- /dev/null +++ b/createPackage.sh @@ -0,0 +1,10 @@ +#!/bin/bash + +BRANCH=`git branch | grep '*' |awk -F _ '{print $2}'` +VER=`cat local/kaltura/version.php |grep '>version' | awk '{print $3}' | awk -F ";" '{print $1}'` + +echo "Generaating package for Kaltura_Video_Package_moodle"$BRANCH"_"$VER".zip\n" + +FILENAME="Kaltura_Video_Package_moodle"$BRANCH"_"$VER".zip" + +zip -r $FILENAME lib filter mod local From 031c1788dca62e80b58fecf3f6017bc0f8c48a21 Mon Sep 17 00:00:00 2001 From: Gonen Radai Date: Thu, 18 Dec 2014 11:37:36 +0200 Subject: [PATCH 029/326] KMS-5210 - fix upgrade version save issue --- local/kaltura/db/upgrade.php | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/local/kaltura/db/upgrade.php b/local/kaltura/db/upgrade.php index 9665acaf7e341..1e1098dbe93be 100644 --- a/local/kaltura/db/upgrade.php +++ b/local/kaltura/db/upgrade.php @@ -25,10 +25,12 @@ function xmldb_local_kaltura_upgrade($oldversion) { global $CFG, $DB; + $savePointDone = false; require_once($CFG->dirroot.'/local/kaltura/locallib.php'); $dbman = $DB->get_manager(); + // plugin in any version below this is 3.x and requires migration if ($oldversion < 2014023000) { // Because the plug-in is being upgraded we need to set the migration flag to true. set_config('migration_yes', 1, KALTURA_PLUGIN_NAME); @@ -58,10 +60,12 @@ function xmldb_local_kaltura_upgrade($oldversion) { // Kaltura savepoint reached. upgrade_plugin_savepoint(true, 2014102807, 'local', 'kaltura'); + $savePointDone = true; } - if ($oldversion < 2014102807) { + if (!$savePointDone && $oldversion < 2014102807) { // Kaltura savepoint reached. upgrade_plugin_savepoint(true, 2014102807, 'local', 'kaltura'); } -} \ No newline at end of file + return true; +} From b5c2379577640f5d977dc8a743b357af241a35ea Mon Sep 17 00:00:00 2001 From: Gonen Radai Date: Thu, 18 Dec 2014 11:50:17 +0200 Subject: [PATCH 030/326] advanced version number --- local/kaltura/db/upgrade.php | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/local/kaltura/db/upgrade.php b/local/kaltura/db/upgrade.php index 1e1098dbe93be..ba449100b00fd 100644 --- a/local/kaltura/db/upgrade.php +++ b/local/kaltura/db/upgrade.php @@ -59,13 +59,13 @@ function xmldb_local_kaltura_upgrade($oldversion) { } // Kaltura savepoint reached. - upgrade_plugin_savepoint(true, 2014102807, 'local', 'kaltura'); + upgrade_plugin_savepoint(true, 2014121807, 'local', 'kaltura'); $savePointDone = true; } - if (!$savePointDone && $oldversion < 2014102807) { + if (!$savePointDone && $oldversion < 2014121807) { // Kaltura savepoint reached. - upgrade_plugin_savepoint(true, 2014102807, 'local', 'kaltura'); + upgrade_plugin_savepoint(true, 2014121807, 'local', 'kaltura'); } return true; } From 5eb227da5f6cc1391f01918c971ebe55a5d81a59 Mon Sep 17 00:00:00 2001 From: Gonen Radai Date: Thu, 18 Dec 2014 12:39:50 +0200 Subject: [PATCH 031/326] advanced all plugins to the same version number --- filter/kaltura/version.php | 4 ++-- lib/editor/atto/plugins/kalturamedia/version.php | 4 ++-- lib/editor/tinymce/plugins/kalturamedia/version.php | 4 ++-- local/kaltura/version.php | 2 +- local/kalturamediagallery/version.php | 4 ++-- local/mymedia/version.php | 4 ++-- mod/kalvidassign/version.php | 4 ++-- mod/kalvidpres/version.php | 4 ++-- mod/kalvidres/version.php | 4 ++-- 9 files changed, 17 insertions(+), 17 deletions(-) diff --git a/filter/kaltura/version.php b/filter/kaltura/version.php index ae260019bdf52..0594cc40fd927 100644 --- a/filter/kaltura/version.php +++ b/filter/kaltura/version.php @@ -24,10 +24,10 @@ */ defined('MOODLE_INTERNAL') || die(); -$plugin->version = 2014102807; +$plugin->version = 2014121807; $plugin->release = 'Kaltura release 4.0.01'; $plugin->requires = 2014050800; $plugin->maturity = MATURITY_STABLE; $plugin->dependencies = array( - 'local_kaltura' => 2014102807 + 'local_kaltura' => 2014121807 ); diff --git a/lib/editor/atto/plugins/kalturamedia/version.php b/lib/editor/atto/plugins/kalturamedia/version.php index a90f281e55df4..034cc76de0a23 100644 --- a/lib/editor/atto/plugins/kalturamedia/version.php +++ b/lib/editor/atto/plugins/kalturamedia/version.php @@ -24,10 +24,10 @@ defined('MOODLE_INTERNAL') || die(); -$plugin->version = 2014102807; // The current plugin version (Date: YYYYMMDDXX). +$plugin->version = 2014121807; // The current plugin version (Date: YYYYMMDDXX). $plugin->release = 'Kaltura release 4.0.01'; $plugin->requires = 2014050800; // Requires this Moodle version. $plugin->component = 'atto_kalturamedia'; // Full name of the plugin (used for diagnostics). $plugin->dependencies = array( - 'local_kaltura' => 2014102807 + 'local_kaltura' => 2014121807 ); diff --git a/lib/editor/tinymce/plugins/kalturamedia/version.php b/lib/editor/tinymce/plugins/kalturamedia/version.php index 15729168e52b7..d8f2f585336b8 100644 --- a/lib/editor/tinymce/plugins/kalturamedia/version.php +++ b/lib/editor/tinymce/plugins/kalturamedia/version.php @@ -23,12 +23,12 @@ defined('MOODLE_INTERNAL') || die(); -$plugin->version = 2014102807; +$plugin->version = 2014121807; $plugin->release = 'Kaltura release 4.0.01'; // Required Moodle version. $plugin->requires = 2014050800; // Full name of the plugin (used for diagnostics). $plugin->component = 'tinymce_kalturamedia'; $plugin->dependencies = array( - 'local_kaltura' => 2014102807 + 'local_kaltura' => 2014121807 ); diff --git a/local/kaltura/version.php b/local/kaltura/version.php index 2289d815a9cf7..5f0e226d4440a 100644 --- a/local/kaltura/version.php +++ b/local/kaltura/version.php @@ -25,7 +25,7 @@ die('Direct access to this script is forbidden.'); } -$plugin->version = 2014102807; +$plugin->version = 2014121807; $plugin->component = 'local_kaltura'; $plugin->release = 'Kaltura release 4.0.01'; $plugin->requires = 2014050800; diff --git a/local/kalturamediagallery/version.php b/local/kalturamediagallery/version.php index c91a7f27b8a67..0b72fb97e6a6e 100644 --- a/local/kalturamediagallery/version.php +++ b/local/kalturamediagallery/version.php @@ -26,11 +26,11 @@ die('Direct access to this script is forbidden.'); } -$plugin->version = 2014102807; +$plugin->version = 2014121807; $plugin->component = 'local_kalturamediagallery'; $plugin->release = 'Kaltura release 4.0.01'; $plugin->requires = 2014050800; $plugin->maturity = MATURITY_STABLE; $plugin->dependencies = array( - 'local_kaltura' => 2014102807 + 'local_kaltura' => 2014121807 ); diff --git a/local/mymedia/version.php b/local/mymedia/version.php index ace9b8a44233d..e5d566f66f8e6 100644 --- a/local/mymedia/version.php +++ b/local/mymedia/version.php @@ -25,11 +25,11 @@ die('Direct access to this script is forbidden.'); } -$plugin->version = 2014102807; +$plugin->version = 2014121807; $plugin->component = 'local_mymedia'; $plugin->release = 'Kaltura release 4.0.01'; $plugin->requires = 2014050800; $plugin->maturity = MATURITY_STABLE; $plugin->dependencies = array( - 'local_kaltura' => 2014102807 + 'local_kaltura' => 2014121807 ); diff --git a/mod/kalvidassign/version.php b/mod/kalvidassign/version.php index 1ecd8264fba0a..14f6011b58a7d 100644 --- a/mod/kalvidassign/version.php +++ b/mod/kalvidassign/version.php @@ -25,12 +25,12 @@ die('Direct access to this script is forbidden.'); } -$module->version = 2014102807; +$module->version = 2014121807; $module->component = 'mod_kalvidassign'; $module->release = 'Kaltura release 4.0.01'; $module->requires = 2014050800; $module->cron = 0; $module->maturity = MATURITY_STABLE; $module->dependencies = array( - 'local_kaltura' => 2014102807, + 'local_kaltura' => 2014121807, ); diff --git a/mod/kalvidpres/version.php b/mod/kalvidpres/version.php index 0d55bdec887da..75f610711e4cf 100644 --- a/mod/kalvidpres/version.php +++ b/mod/kalvidpres/version.php @@ -25,12 +25,12 @@ die('Direct access to this script is forbidden.'); } -$module->version = 2014102807; +$module->version = 2014121807; $module->component = 'mod_kalvidpres'; $module->release = 'Kaltura release 4.0.01'; $module->requires = 2014050800; $module->cron = 0; $module->maturity = MATURITY_STABLE; $module->dependencies = array( - 'local_kaltura' => 2014102807 + 'local_kaltura' => 2014121807 ); diff --git a/mod/kalvidres/version.php b/mod/kalvidres/version.php index 5a37ef1ebf5a0..e70b7a87df570 100644 --- a/mod/kalvidres/version.php +++ b/mod/kalvidres/version.php @@ -25,12 +25,12 @@ die('Direct access to this script is forbidden.'); } -$module->version = 2014102807; +$module->version = 2014121807; $module->component = 'mod_kalvidres'; $module->release = 'Kaltura release 4.0.01'; $module->requires = 2014050800; $module->cron = 0; $module->maturity = MATURITY_STABLE; $module->dependencies = array( - 'local_kaltura' => 2014102807 + 'local_kaltura' => 2014121807 ); From 0dd15194fa60da9f7a084717735e768ba61c7e55 Mon Sep 17 00:00:00 2001 From: Gonen Radai Date: Thu, 8 Jan 2015 18:04:45 +0200 Subject: [PATCH 032/326] do not allow to migrate into a root category which is missing the KAF structure --- local/kaltura/migration.php | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/local/kaltura/migration.php b/local/kaltura/migration.php index 0d4cc51b72f86..fff43c292c8c9 100644 --- a/local/kaltura/migration.php +++ b/local/kaltura/migration.php @@ -70,6 +70,11 @@ // User hit submit button. Check for records since the configured date. if (isset($data->submitbutton)) { + if(local_kaltura_get_channels_id(local_kaltura_get_kaltura_client(), $data->kafcategory) === false) + { + $url = new moodle_url('/admin/settings.php', array('section' => 'local_kaltura')); + notice("Selected target root category does not have a KAF structure (subcategory '>site>channels' is missing)", $url); + } // Set the migration start time and initialize the KAF root category id. if (0 == local_kaltura_migration_progress::get_migrationstarted()) { local_kaltura_migration_progress::init_migrationstarted(); From ef2a77ea6cdfe0ecae9415ecb3415cd2a8f35146 Mon Sep 17 00:00:00 2001 From: Gonen Radai Date: Wed, 7 Jan 2015 16:52:33 +0200 Subject: [PATCH 033/326] SUP-3493 SUP-3519 and SUP-3517 fixes to migration issues --- local/kaltura/migrationlib.php | 89 +++++++++++++++++++++++++++++----- 1 file changed, 77 insertions(+), 12 deletions(-) diff --git a/local/kaltura/migrationlib.php b/local/kaltura/migrationlib.php index 9410f20d79d05..0f04793223a23 100644 --- a/local/kaltura/migrationlib.php +++ b/local/kaltura/migrationlib.php @@ -78,7 +78,8 @@ function local_kaltura_retrieve_repository_settings() { $rootcategoryid = get_config(KALTURA_REPO_NAME, 'rootcategory_id'); if (empty($rootcategoryid)) { - notice(get_string('migration_root_category_not_set', 'local_kaltura')); + //notice(get_string('migration_root_category_not_set', 'local_kaltura')); + set_config('migration_source_category', -1, KALTURA_PLUGIN_NAME); } set_config('migration_source_category', $rootcategoryid, KALTURA_PLUGIN_NAME); @@ -89,7 +90,8 @@ function local_kaltura_retrieve_repository_settings() { $metadataprofileid = get_config(KALTURA_REPO_NAME, 'metadata_profile_id'); if (empty($metadataprofileid)) { - notice(get_string('migration_profile_id_not_set', 'local_kaltura')); + //notice(get_string('migration_profile_id_not_set', 'local_kaltura')); + set_config('migration_metadata_profile_id', -1, KALTURA_PLUGIN_NAME); } set_config('migration_metadata_profile_id', $metadataprofileid, KALTURA_PLUGIN_NAME); @@ -131,6 +133,12 @@ function local_kaltura_get_categories() { * @return array An array whose index is the Kaltura entry id and value is an array of Kaltura category ids. */ function local_kaltura_move_entries_to_kaf_category_tree($targetparentcatid, $index = 1, $numofentries = 100) { + $rootcategoryid = get_config(KALTURA_PLUGIN_NAME, 'migration_source_category'); + if($rootcategoryid === -1) + { + // skip this part of the migration - repository was never configured in previous version + return true; + } // The timestamp used to retrieve Kaltura entries that were created by or before the date. static $createdby = 0; // Which page is currently being processed. @@ -223,6 +231,12 @@ function local_kaltura_move_entries_to_kaf_category_tree($targetparentcatid, $in * @return array An array whose index is the Kaltura entry id and value is an array of Kaltura category ids. */ function local_kaltura_move_metadata_entries_to_kaf_category_tree($targetparentcatid, $index = 1, $numofentries = 100) { + $metadataprofileid = get_config(KALTURA_PLUGIN_NAME, 'migration_metadata_profile_id'); + if($metadataprofileid === -1) + { + // skip this part of the migration - repository was never configured in previous version + return true; + } // The timestamp used to retrieve Kaltura entries that were created by or before the date. static $createdby = 0; // Which page is currently being processed. @@ -351,8 +365,13 @@ function local_kaltura_assign_entries_to_new_categories($client, $entries, $pare $categoryentry = new KalturaCategoryEntry(); $categoryentry->categoryId = $cachedcategories[$oldcategoryid]; $categoryentry->entryId = $entryid; - $result = $client->categoryEntry->add($categoryentry); - + try{ + $result = $client->categoryEntry->add($categoryentry); + } catch (Exception $ex) { + local_kaltura_log_data("Kalturamigration", + 'local_kaltura_assign_entries_to_new_categories - failed adding entry to category '.$ex->getCode(), + array($categoryentry->entryId, $categoryentry->categoryId), false); + } local_kaltura_migration_progress::increment_entriesmigrated(); } } else { @@ -464,7 +483,13 @@ function local_kaltura_assign_entries_to_new_course_categories($client, $entries $categoryentry = new KalturaCategoryEntry(); $categoryentry->categoryId = $cachedcategories[$oldcategoryid]; $categoryentry->entryId = $entryid; - $client->categoryEntry->add($categoryentry); + try{ + $client->categoryEntry->add($categoryentry); + } catch (Exception $ex) { + local_kaltura_log_data("Kalturamigration", + 'local_kaltura_assign_entries_to_new_categories - failed adding entry to category '.$ex->getCode(), + array($categoryentry->entryId, $categoryentry->categoryId), false); + } local_kaltura_migration_progress::increment_entriesmigrated(); } @@ -486,7 +511,14 @@ function local_kaltura_assign_entries_to_new_course_categories($client, $entries $categoryentry = new KalturaCategoryEntry(); $categoryentry->categoryId = $result->objects[0]->id; $categoryentry->entryId = $entryid; - $categoryresult = $client->categoryEntry->add($categoryentry); + try{ + $categoryresult = $client->categoryEntry->add($categoryentry); + } catch (Exception $ex) { + local_kaltura_log_data("Kalturamigration", + 'local_kaltura_assign_entries_to_new_categories - failed adding entry to category '.$ex->getCode(), + array($categoryentry->entryId, $categoryentry->categoryId), false); + $categoryresult = null; + } // If the result is a KalturaCategoryEntry then cache the category id. if ($categoryresult instanceof KalturaCategoryEntry) { @@ -585,7 +617,18 @@ function local_kaltura_get_sharedrepo_id($client, $channelsid, $rootcatid) { $category->parentId = $channelsid; $category->name = 'Shared Repository'; $category->moderation = KalturaNullableBoolean::TRUE_VALUE; - $result = $client->category->add($category); + try { + $result = $client->category->add($category); + } catch (Exception $ex) { + if($ex->getCode() == 'DUPLICATE_CATEGORY') + { + // nothing to do - category exists is a good thing + } + else { + throw $ex; + } + } + if ($result instanceof KalturaCategory) { $siterepocat->id = $result->id; @@ -785,8 +828,15 @@ function local_kaltura_update_activities() { $record->width = $record->width + KALTURA_MIGRATION_WIDTH_PADDING; $record->height = $record->height + KALTURA_MIGRATION_HEIGHT_PADDING; - // Retrieve the Kaltura base entry object. - $kalentry = $client->baseEntry->get($record->entry_id); + try { + // Retrieve the Kaltura base entry object. + $kalentry = $client->baseEntry->get($record->entry_id); + } + catch(Exception $ex) { + // if from some reason we were not able to get the entry - lets make an empty object to use for empty metadata + // since this is for backward compatibility - we can ignore that for the sake of completing the migration + $kalentry = new stdClass(); + } $newobject = local_kaltura_convert_kaltura_base_entry_object($kalentry); // Searlize and base 64 encode the metadata. $metadata = local_kaltura_encode_object_for_storage($newobject); @@ -818,8 +868,15 @@ function local_kaltura_update_activities() { $record->width = $width + KALTURA_MIGRATION_WIDTH_PADDING; $record->height = $height + KALTURA_MIGRATION_HEIGHT_PADDING; - // Retrieve the Kaltura base entry object. - $kalentry = $client->baseEntry->get($record->entry_id); + try { + // Retrieve the Kaltura base entry object. + $kalentry = $client->baseEntry->get($record->entry_id); + } + catch(Exception $ex) { + // if from some reason we were not able to get the entry - lets make an empty object to use for empty metadata + // since this is for backward compatibility - we can ignore that for the sake of completing the migration + $kalentry = new stdClass(); + } $newobject = local_kaltura_convert_kaltura_base_entry_object($kalentry); // Searlize and base 64 encode the metadata. $metadata = local_kaltura_encode_object_for_storage($newobject); @@ -841,7 +898,15 @@ function local_kaltura_update_video_presentation_entry($client, $entrylist) { $vidpres = new KalturaBaseEntry(); $vidpres->name = $activityname; $vidpres->adminTags = 'presentation'; - $client->baseEntry->update($entryid, $vidpres); + try + { + $client->baseEntry->update($entryid, $vidpres); + } + catch(Exception $ex){ + local_kaltura_log_data("Kalturamigration", + 'local_kaltura_update_video_presentation_entry - failed updating data with tag '.$ex->getCode(), + array($entryid), false); + } } } From 4caf902f870190eecb6d2f171f86dbb03b0df0b4 Mon Sep 17 00:00:00 2001 From: Gonen Radai Date: Thu, 8 Jan 2015 18:04:07 +0200 Subject: [PATCH 034/326] SUP-3517 fixed issue of repository never been enabled in V3 --- local/kaltura/migrationlib.php | 114 +++++++++++++++++++++++++++++++++ 1 file changed, 114 insertions(+) diff --git a/local/kaltura/migrationlib.php b/local/kaltura/migrationlib.php index 0f04793223a23..64ccda80d9d88 100644 --- a/local/kaltura/migrationlib.php +++ b/local/kaltura/migrationlib.php @@ -566,6 +566,13 @@ function local_kaltura_assign_entries_to_new_course_categories($client, $entries * @return object|bool An object whose properties are id and fullname, or false it's not found. */ function local_kaltura_get_channels_id($client, $rootcatid) { + static $channelsCategoryObj = null; + + if(!is_null($channelsCategoryObj)) + { + return $channelsCategoryObj; + } + // Retrieve the array of categories and get the name of the parent category. $catnames = local_kaltura_get_categories(); $parentcatname = $catnames[$rootcatid]; @@ -580,6 +587,8 @@ function local_kaltura_get_channels_id($client, $rootcatid) { $category = new stdClass(); $category->id = $result->objects[0]->id; $category->fullname = "$parentcatname>site>channels"; + + $channelsCategoryObj = $category; return $category; } else { return false; @@ -795,6 +804,7 @@ function local_kaltura_update_activities() { try { // Retrieve the Kaltura base entry object. $kalentry = $client->baseEntry->get($record->entry_id); + local_kaltura_set_activity_entry_to_incontext($record->entry_id, $record->course); } catch(Exception $ex) { // if from some reason we were not able to get the entry - lets make an empty object to use for empty metadata @@ -831,6 +841,7 @@ function local_kaltura_update_activities() { try { // Retrieve the Kaltura base entry object. $kalentry = $client->baseEntry->get($record->entry_id); + local_kaltura_set_activity_entry_to_incontext($record->entry_id, $record->course); } catch(Exception $ex) { // if from some reason we were not able to get the entry - lets make an empty object to use for empty metadata @@ -868,9 +879,18 @@ function local_kaltura_update_activities() { $record->width = $width + KALTURA_MIGRATION_WIDTH_PADDING; $record->height = $height + KALTURA_MIGRATION_HEIGHT_PADDING; + + $assignmentSql = 'SELECT * FROM {kalvidassign} WHERE id = '.$record->vidassignid; + $assignmentRecords = $DB->get_records_sql($assignmentSql); + try { // Retrieve the Kaltura base entry object. $kalentry = $client->baseEntry->get($record->entry_id); + if(isset($assignmentRecords[$record->vidassignid])) + { + $assignmentRecord = $assignmentRecords[$record->vidassignid]; + local_kaltura_set_activity_entry_to_incontext($record->entry_id, $assignmentRecord->course); + } } catch(Exception $ex) { // if from some reason we were not able to get the entry - lets make an empty object to use for empty metadata @@ -888,6 +908,100 @@ function local_kaltura_update_activities() { } } +/** + * This function makes sure that the entry of activity (assignment submission, resource, video-presentation resource) is assigned to the InContext category or the respective course. + * This function is used in order to bridge the gap in cases where the moodle kaltura repository + * was disabled in V3, or was enabled after resources have already been created which would make those resources to not be in the old category tree. + * + * @param string $entryId + * @param string $courseId + */ +function local_kaltura_set_activity_entry_to_incontext($entryId, $courseId) +{ + $client = local_kaltura_get_kaltura_client(); + $channelCatData = local_kaltura_get_channels_id($client, local_kaltura_migration_progress::get_kafcategoryrootid()); + + $inContextCategoryName = $channelCatData->fullname . '>'. $courseId . '>InContext'; + + // check if the course channel and its InContext categories exists for the given course ID + $filter = new KalturaCategoryFilter(); + + $filter->fullNameStartsWith = $channelCatData->fullname . '>'. $courseId; + + try + { + $result = $client->category->listAction($filter); + } + catch(Exception $ex) + { + // write to log? + } + + $inContextCategoryId = null; + $courseCategoryId = null; + foreach($result->objects as $category) + { + if($category->fullName == $inContextCategoryName) + { + $inContextCategoryId = $category->id; + } + if($category->fullName == $filter->fullNameStartsWith) + { + $courseCategoryId = $category->id; + } + } + + // if not - create the missing categories (channels>{courseID} and channels>{courseID}>InContext) + if(is_null($inContextCategoryId)) + { + $isMultiRequest = false; + if(is_null($courseCategoryId)) + { + $client->startMultiRequest(); + $isMultiRequest = true; + $courseCategory = new KalturaCategory(); + $courseCategory->parentId = $channelCatData->id; + $courseCategory->name = $courseId; + + $client->category->add($courseCategory); + $courseCategoryId = '{1:result:id}'; + } + + $inContextCategory = new KalturaCategory(); + $inContextCategory->parentId = $courseCategoryId; + $inContextCategory->name = 'InContext'; + + $res = $client->category->add($inContextCategory); + + if($isMultiRequest) + { + $multiResponse = $client->doMultiRequest(); + if(isset($multiResponse[1]) && $multiResponse[1] instanceof KalturaCategory) + { + $inContextCategoryId = $multiResponse[1]->id; + } + } + } + + // assign the entry to the InContext category + if(is_null($inContextCategoryId)) + { + throw new Exception("Failed getting/creating InContext category for course $courseId with response objects of single-req: ".print_r($res, true). " and multi-req: ".print_r($multiResponse, true) ); + } + + $categoryEntry = new KalturaCategoryEntry(); + $categoryEntry->entryId = $entryId; + $categoryEntry->categoryId = $inContextCategoryId; + + try + { + $client->categoryEntry->add($categoryEntry); + } catch (Exception $ex) { + // write to log? + throw $ex; + } +} + /** * This function updates the name and adminTags property of a KalturaDataEntry (Video presentation). * @param KalturaConfiguration $client A Kaltura client object. From cb7e33aad6fadb8ea817f327cbd6325d3b434491 Mon Sep 17 00:00:00 2001 From: Gonen Radai Date: Sun, 18 Jan 2015 12:48:27 +0200 Subject: [PATCH 035/326] making sure is defined (MR) --- local/kaltura/locallib.php | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/local/kaltura/locallib.php b/local/kaltura/locallib.php index 4b3cff351d5c4..862c5d4109117 100644 --- a/local/kaltura/locallib.php +++ b/local/kaltura/locallib.php @@ -27,6 +27,8 @@ die('Direct access to this script is forbidden.'); } +global $CFG; // should be defined in config.php + require_once($CFG->dirroot.'/mod/lti/locallib.php'); define('KALTURA_PLUGIN_NAME', 'local_kaltura'); @@ -718,4 +720,4 @@ function local_kaltura_convert_kaltura_base_entry_object($object) { } return $metadata; -} \ No newline at end of file +} From 6fbf1b9f895123dfcb45b782e5945d02c3c2a527 Mon Sep 17 00:00:00 2001 From: Gonen Radai Date: Mon, 19 Jan 2015 16:58:24 +0200 Subject: [PATCH 036/326] KMS-5543 fixed issue of second migration not setting activity entries to InContext because source field is not NULL anymore --- local/kaltura/migration.php | 1 + local/kaltura/migrationlib.php | 87 +++++++++++++++++++++++++++++----- 2 files changed, 76 insertions(+), 12 deletions(-) diff --git a/local/kaltura/migration.php b/local/kaltura/migration.php index fff43c292c8c9..e25659cd896ca 100644 --- a/local/kaltura/migration.php +++ b/local/kaltura/migration.php @@ -95,6 +95,7 @@ // Update the Kaltura activities. local_kaltura_update_activities(); + local_kaltura_set_activities_entries_to_categories(); // If both variables are null, then there is nother more to migrate. if (is_null($categoryentries) && is_null($metadataentries)) { diff --git a/local/kaltura/migrationlib.php b/local/kaltura/migrationlib.php index 64ccda80d9d88..e9cdefd18ee0d 100644 --- a/local/kaltura/migrationlib.php +++ b/local/kaltura/migrationlib.php @@ -804,7 +804,6 @@ function local_kaltura_update_activities() { try { // Retrieve the Kaltura base entry object. $kalentry = $client->baseEntry->get($record->entry_id); - local_kaltura_set_activity_entry_to_incontext($record->entry_id, $record->course); } catch(Exception $ex) { // if from some reason we were not able to get the entry - lets make an empty object to use for empty metadata @@ -841,7 +840,6 @@ function local_kaltura_update_activities() { try { // Retrieve the Kaltura base entry object. $kalentry = $client->baseEntry->get($record->entry_id); - local_kaltura_set_activity_entry_to_incontext($record->entry_id, $record->course); } catch(Exception $ex) { // if from some reason we were not able to get the entry - lets make an empty object to use for empty metadata @@ -879,18 +877,9 @@ function local_kaltura_update_activities() { $record->width = $width + KALTURA_MIGRATION_WIDTH_PADDING; $record->height = $height + KALTURA_MIGRATION_HEIGHT_PADDING; - - $assignmentSql = 'SELECT * FROM {kalvidassign} WHERE id = '.$record->vidassignid; - $assignmentRecords = $DB->get_records_sql($assignmentSql); - try { // Retrieve the Kaltura base entry object. $kalentry = $client->baseEntry->get($record->entry_id); - if(isset($assignmentRecords[$record->vidassignid])) - { - $assignmentRecord = $assignmentRecords[$record->vidassignid]; - local_kaltura_set_activity_entry_to_incontext($record->entry_id, $assignmentRecord->course); - } } catch(Exception $ex) { // if from some reason we were not able to get the entry - lets make an empty object to use for empty metadata @@ -908,6 +897,73 @@ function local_kaltura_update_activities() { } } +/** + * This function makes sure that allactivity entries are also assigned to the right category in KAF structure. + */ +function local_kaltura_set_activities_entries_to_categories() { + global $CFG, $DB; + + $configsettings = get_config(KALTURA_PLUGIN_NAME); + + // Check if the KAF URi is initialized. + if (!isset($configsettings->kaf_uri) || empty($configsettings->kaf_uri)) { + $url = new moodle_url('/admin/settings.php', array('section' => 'local_kaltura')); + notice(get_string('migration_kaf_url_not_set', 'local_kaltura'), $url); + } + + // Check if the table exists. + $table = new xmldb_table('kalvidres'); + + if ($DB->get_manager()->table_exists($table)) { + // Migrate Kaltura video resrouce entries. + $sql = 'SELECT * + FROM {kalvidres}'; + $records = $DB->get_records_sql($sql); + + foreach ($records as $id => $record) { + if (!is_null($record->entry_id) && !empty($record->entry_id)) { + local_kaltura_set_activity_entry_to_incontext($record->entry_id, $record->course); + } + } + } + + $table = new xmldb_table('kalvidpres'); + + if ($DB->get_manager()->table_exists($table)) { + // Migrate Kaltura video resrouce entries. + $sql = 'SELECT * + FROM {kalvidpres}'; + $records = $DB->get_records_sql($sql); + + foreach ($records as $id => $record) { + if (!is_null($record->entry_id) && !empty($record->entry_id)) { + local_kaltura_set_activity_entry_to_incontext($record->entry_id, $record->course); + } + } + } + + $table = new xmldb_table('kalvidassign_submission'); + + if ($DB->get_manager()->table_exists($table)) { + // Migrate Kaltura video resrouce entries. + $sql = 'SELECT * + FROM {kalvidassign_submission}'; + $records = $DB->get_records_sql($sql); + + foreach ($records as $id => $record) { + if (!is_null($record->entry_id) && !empty($record->entry_id)) { + $assignmentSql = 'SELECT * FROM {kalvidassign} WHERE id = '.$record->vidassignid; + $assignmentRecords = $DB->get_records_sql($assignmentSql); + if(isset($assignmentRecords[$record->vidassignid])) + { + $assignmentRecord = $assignmentRecords[$record->vidassignid]; + local_kaltura_set_activity_entry_to_incontext($record->entry_id, $assignmentRecord->course); + } + } + } + } +} + /** * This function makes sure that the entry of activity (assignment submission, resource, video-presentation resource) is assigned to the InContext category or the respective course. * This function is used in order to bridge the gap in cases where the moodle kaltura repository @@ -998,7 +1054,14 @@ function local_kaltura_set_activity_entry_to_incontext($entryId, $courseId) $client->categoryEntry->add($categoryEntry); } catch (Exception $ex) { // write to log? - throw $ex; + if($ex->getCode() == 'CATEGORY_ENTRY_ALREADY_EXISTS') + { + // do nothing. this is OK. + } + else + { + throw $ex; + } } } From eeefc8ed0a3bf4e0bb84a714b05b385c15dde068 Mon Sep 17 00:00:00 2001 From: gonenradai Date: Mon, 19 Jan 2015 17:14:56 +0200 Subject: [PATCH 037/326] advanced minor version of release --- local/kaltura/version.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/local/kaltura/version.php b/local/kaltura/version.php index 5f0e226d4440a..4a10459a4a5e3 100644 --- a/local/kaltura/version.php +++ b/local/kaltura/version.php @@ -27,6 +27,6 @@ $plugin->version = 2014121807; $plugin->component = 'local_kaltura'; -$plugin->release = 'Kaltura release 4.0.01'; +$plugin->release = 'Kaltura release 4.0.02'; $plugin->requires = 2014050800; $plugin->maturity = MATURITY_STABLE; From cf3bc0c4fb5a43a8d3b7bcb3ccfb519d6840e813 Mon Sep 17 00:00:00 2001 From: gonenradai Date: Mon, 19 Jan 2015 17:15:02 +0200 Subject: [PATCH 038/326] advanced minor version of release --- local/mymedia/version.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/local/mymedia/version.php b/local/mymedia/version.php index e5d566f66f8e6..fb3d73ef7bf10 100644 --- a/local/mymedia/version.php +++ b/local/mymedia/version.php @@ -27,7 +27,7 @@ $plugin->version = 2014121807; $plugin->component = 'local_mymedia'; -$plugin->release = 'Kaltura release 4.0.01'; +$plugin->release = 'Kaltura release 4.0.02'; $plugin->requires = 2014050800; $plugin->maturity = MATURITY_STABLE; $plugin->dependencies = array( From 3e5fb431a1361397edb001ebb393170d628491b1 Mon Sep 17 00:00:00 2001 From: gonenradai Date: Mon, 19 Jan 2015 17:15:08 +0200 Subject: [PATCH 039/326] advanced minor version of release --- filter/kaltura/version.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/filter/kaltura/version.php b/filter/kaltura/version.php index 0594cc40fd927..6db3579c3c95b 100644 --- a/filter/kaltura/version.php +++ b/filter/kaltura/version.php @@ -25,7 +25,7 @@ defined('MOODLE_INTERNAL') || die(); $plugin->version = 2014121807; -$plugin->release = 'Kaltura release 4.0.01'; +$plugin->release = 'Kaltura release 4.0.02'; $plugin->requires = 2014050800; $plugin->maturity = MATURITY_STABLE; $plugin->dependencies = array( From 440a782193fa7177aef9182b1eb12bc94f951d24 Mon Sep 17 00:00:00 2001 From: gonenradai Date: Mon, 19 Jan 2015 17:15:14 +0200 Subject: [PATCH 040/326] advanced minor version of release --- local/kalturamediagallery/version.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/local/kalturamediagallery/version.php b/local/kalturamediagallery/version.php index 0b72fb97e6a6e..8a13f97a1fbb6 100644 --- a/local/kalturamediagallery/version.php +++ b/local/kalturamediagallery/version.php @@ -28,7 +28,7 @@ $plugin->version = 2014121807; $plugin->component = 'local_kalturamediagallery'; -$plugin->release = 'Kaltura release 4.0.01'; +$plugin->release = 'Kaltura release 4.0.02'; $plugin->requires = 2014050800; $plugin->maturity = MATURITY_STABLE; $plugin->dependencies = array( From 4d541120614106799b859580d7e3ab55defb2265 Mon Sep 17 00:00:00 2001 From: gonenradai Date: Mon, 19 Jan 2015 17:15:20 +0200 Subject: [PATCH 041/326] advanced minor version of release --- mod/kalvidassign/version.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mod/kalvidassign/version.php b/mod/kalvidassign/version.php index 14f6011b58a7d..8173939ca7460 100644 --- a/mod/kalvidassign/version.php +++ b/mod/kalvidassign/version.php @@ -27,7 +27,7 @@ $module->version = 2014121807; $module->component = 'mod_kalvidassign'; -$module->release = 'Kaltura release 4.0.01'; +$module->release = 'Kaltura release 4.0.02'; $module->requires = 2014050800; $module->cron = 0; $module->maturity = MATURITY_STABLE; From 9245fade30c1dcccc65b5577886e22852f1fee0e Mon Sep 17 00:00:00 2001 From: gonenradai Date: Mon, 19 Jan 2015 17:15:26 +0200 Subject: [PATCH 042/326] advanced minor version of release --- lib/editor/atto/plugins/kalturamedia/version.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/editor/atto/plugins/kalturamedia/version.php b/lib/editor/atto/plugins/kalturamedia/version.php index 034cc76de0a23..17c7dd5880da4 100644 --- a/lib/editor/atto/plugins/kalturamedia/version.php +++ b/lib/editor/atto/plugins/kalturamedia/version.php @@ -25,7 +25,7 @@ defined('MOODLE_INTERNAL') || die(); $plugin->version = 2014121807; // The current plugin version (Date: YYYYMMDDXX). -$plugin->release = 'Kaltura release 4.0.01'; +$plugin->release = 'Kaltura release 4.0.02'; $plugin->requires = 2014050800; // Requires this Moodle version. $plugin->component = 'atto_kalturamedia'; // Full name of the plugin (used for diagnostics). $plugin->dependencies = array( From dee859ae8848a8658c5d61ad9df8eff4ba5cb4a7 Mon Sep 17 00:00:00 2001 From: gonenradai Date: Mon, 19 Jan 2015 17:15:31 +0200 Subject: [PATCH 043/326] advanced minor version of release --- lib/editor/tinymce/plugins/kalturamedia/version.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/editor/tinymce/plugins/kalturamedia/version.php b/lib/editor/tinymce/plugins/kalturamedia/version.php index d8f2f585336b8..c0fdf4b5adcb5 100644 --- a/lib/editor/tinymce/plugins/kalturamedia/version.php +++ b/lib/editor/tinymce/plugins/kalturamedia/version.php @@ -24,7 +24,7 @@ defined('MOODLE_INTERNAL') || die(); $plugin->version = 2014121807; -$plugin->release = 'Kaltura release 4.0.01'; +$plugin->release = 'Kaltura release 4.0.02'; // Required Moodle version. $plugin->requires = 2014050800; // Full name of the plugin (used for diagnostics). From c0f49ef93d63ce6108ab6356c2d886630d681a0b Mon Sep 17 00:00:00 2001 From: gonenradai Date: Mon, 19 Jan 2015 17:15:37 +0200 Subject: [PATCH 044/326] advanced minor version of release --- mod/kalvidres/version.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mod/kalvidres/version.php b/mod/kalvidres/version.php index e70b7a87df570..c151af5473b61 100644 --- a/mod/kalvidres/version.php +++ b/mod/kalvidres/version.php @@ -27,7 +27,7 @@ $module->version = 2014121807; $module->component = 'mod_kalvidres'; -$module->release = 'Kaltura release 4.0.01'; +$module->release = 'Kaltura release 4.0.02'; $module->requires = 2014050800; $module->cron = 0; $module->maturity = MATURITY_STABLE; From 145fd913f5ce123ca85640060159fd6e1c56eb56 Mon Sep 17 00:00:00 2001 From: gonenradai Date: Mon, 19 Jan 2015 17:15:43 +0200 Subject: [PATCH 045/326] advanced minor version of release --- mod/kalvidpres/version.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mod/kalvidpres/version.php b/mod/kalvidpres/version.php index 75f610711e4cf..b756199545792 100644 --- a/mod/kalvidpres/version.php +++ b/mod/kalvidpres/version.php @@ -27,7 +27,7 @@ $module->version = 2014121807; $module->component = 'mod_kalvidpres'; -$module->release = 'Kaltura release 4.0.01'; +$module->release = 'Kaltura release 4.0.02'; $module->requires = 2014050800; $module->cron = 0; $module->maturity = MATURITY_STABLE; From d4aa259ff0d09354c63cbcdd3a99b67bbd08601f Mon Sep 17 00:00:00 2001 From: Gonen Radai Date: Sun, 25 Jan 2015 11:34:18 +0200 Subject: [PATCH 046/326] change all throws to log only and added new log function dedicated for migration --- local/kaltura/migrationlib.php | 109 ++++++++++++++++++++++++++++----- 1 file changed, 92 insertions(+), 17 deletions(-) diff --git a/local/kaltura/migrationlib.php b/local/kaltura/migrationlib.php index e9cdefd18ee0d..bc874af67538d 100644 --- a/local/kaltura/migrationlib.php +++ b/local/kaltura/migrationlib.php @@ -66,10 +66,33 @@ function local_kaltura_get_kaltura_client() { return $client; } + +/** + * Writes data to the log table. + * @param string $method The method where the log originated from. + * @param array $data relevant information to be written to log. + */ +function local_kaltura_migration_log_data($method, $data = null) { + global $DB; + + $record = new stdClass(); + $record->type = 'MIG'; + $record->module = 'Kalturamigration'; + $record->timecreated = time(); + $record->endpoint = $method; + $record->data = serialize($data); + $DB->insert_record('local_kaltura_log', $record); + + return true; +} + /** * This function validates that a root category and a profile id have set. The root category is then queried to find a category id. */ function local_kaltura_retrieve_repository_settings() { + local_kaltura_migration_log_data(__FUNCTION__, array( + 'getting repository settings', + )); $rootcategoryid = get_config(KALTURA_PLUGIN_NAME, 'migration_source_category'); $metadataprofileid = get_config(KALTURA_PLUGIN_NAME, 'migration_metadata_profile_id'); @@ -121,7 +144,9 @@ function local_kaltura_get_categories() { asort($list); } } - + + local_kaltura_migration_log_data(__FUNCTION__, $list); + return $list; } @@ -368,9 +393,14 @@ function local_kaltura_assign_entries_to_new_categories($client, $entries, $pare try{ $result = $client->categoryEntry->add($categoryentry); } catch (Exception $ex) { - local_kaltura_log_data("Kalturamigration", - 'local_kaltura_assign_entries_to_new_categories - failed adding entry to category '.$ex->getCode(), - array($categoryentry->entryId, $categoryentry->categoryId), false); + local_kaltura_migration_log_data(__FUNCTION__, array( + "failed adding entry to category", + $categoryentry->entryId, + $categoryentry->categoryId, + $ex->getCode(), + $ex->getMessage(), + base64_encode($ex->getTraceAsString()), + )); } local_kaltura_migration_progress::increment_entriesmigrated(); } @@ -486,9 +516,14 @@ function local_kaltura_assign_entries_to_new_course_categories($client, $entries try{ $client->categoryEntry->add($categoryentry); } catch (Exception $ex) { - local_kaltura_log_data("Kalturamigration", - 'local_kaltura_assign_entries_to_new_categories - failed adding entry to category '.$ex->getCode(), - array($categoryentry->entryId, $categoryentry->categoryId), false); + local_kaltura_migration_log_data(__FUNCTION__, array( + "failed adding entry to category line: ".__LINE__, + $categoryentry->entryId, + $categoryentry->categoryId, + $ex->getCode(), + $ex->getMessage(), + base64_encode($ex->getTraceAsString()), + )); } local_kaltura_migration_progress::increment_entriesmigrated(); @@ -514,9 +549,14 @@ function local_kaltura_assign_entries_to_new_course_categories($client, $entries try{ $categoryresult = $client->categoryEntry->add($categoryentry); } catch (Exception $ex) { - local_kaltura_log_data("Kalturamigration", - 'local_kaltura_assign_entries_to_new_categories - failed adding entry to category '.$ex->getCode(), - array($categoryentry->entryId, $categoryentry->categoryId), false); + local_kaltura_migration_log_data(__FUNCTION__, array( + "failed adding entry to category line: ".__LINE__, + $categoryentry->entryId, + $categoryentry->categoryId, + $ex->getCode(), + $ex->getMessage(), + base64_encode($ex->getTraceAsString()), + )); $categoryresult = null; } @@ -631,10 +671,24 @@ function local_kaltura_get_sharedrepo_id($client, $channelsid, $rootcatid) { } catch (Exception $ex) { if($ex->getCode() == 'DUPLICATE_CATEGORY') { + local_kaltura_migration_log_data(__FUNCTION__, array( + "category already exists", + $category, + $ex->getCode(), + $ex->getMessage(), + base64_encode($ex->getTraceAsString()), + )); // nothing to do - category exists is a good thing } else { - throw $ex; + local_kaltura_migration_log_data(__FUNCTION__, array( + "failed adding category", + $category, + $ex->getCode(), + $ex->getMessage(), + base64_encode($ex->getTraceAsString()), + )); + //throw $ex; // not throwing exception. always writing to log. } } @@ -806,6 +860,7 @@ function local_kaltura_update_activities() { $kalentry = $client->baseEntry->get($record->entry_id); } catch(Exception $ex) { + local_kaltura_migration_log_data(__FUNCTION__, array("could not get entry", $record->entry_id, $ex->getCode(), $ex->getMessage())); // if from some reason we were not able to get the entry - lets make an empty object to use for empty metadata // since this is for backward compatibility - we can ignore that for the sake of completing the migration $kalentry = new stdClass(); @@ -842,6 +897,7 @@ function local_kaltura_update_activities() { $kalentry = $client->baseEntry->get($record->entry_id); } catch(Exception $ex) { + local_kaltura_migration_log_data(__FUNCTION__, array("could not get entry", $record->entry_id, $ex->getCode(), $ex->getMessage())); // if from some reason we were not able to get the entry - lets make an empty object to use for empty metadata // since this is for backward compatibility - we can ignore that for the sake of completing the migration $kalentry = new stdClass(); @@ -882,6 +938,7 @@ function local_kaltura_update_activities() { $kalentry = $client->baseEntry->get($record->entry_id); } catch(Exception $ex) { + local_kaltura_migration_log_data(__FUNCTION__, array("could not get entry", $record->entry_id, $ex->getCode(), $ex->getMessage())); // if from some reason we were not able to get the entry - lets make an empty object to use for empty metadata // since this is for backward compatibility - we can ignore that for the sake of completing the migration $kalentry = new stdClass(); @@ -990,7 +1047,7 @@ function local_kaltura_set_activity_entry_to_incontext($entryId, $courseId) } catch(Exception $ex) { - // write to log? + local_kaltura_migration_log_data(__FUNCTION__, array("could not list categories", $record->entry_id, $ex->getCode(), $ex->getMessage())); } $inContextCategoryId = null; @@ -1056,11 +1113,25 @@ function local_kaltura_set_activity_entry_to_incontext($entryId, $courseId) // write to log? if($ex->getCode() == 'CATEGORY_ENTRY_ALREADY_EXISTS') { - // do nothing. this is OK. + local_kaltura_migration_log_data(__FUNCTION__, array( + "failed edding entry to category - already exists", + $categoryEntry->entryId, + $categoryEntry->categoryId, + $ex->getCode(), + $ex->getMessage(), + $ex->getTraceAsString(), + )); } else { - throw $ex; + local_kaltura_migration_log_data(__FUNCTION__, array( + "failed edding entry to category - reason unexpected", + $categoryEntry->entryId, + $categoryEntry->categoryId, + $ex->getCode(), + $ex->getMessage(), + $ex->getTraceAsString(), + )); } } } @@ -1080,9 +1151,13 @@ function local_kaltura_update_video_presentation_entry($client, $entrylist) { $client->baseEntry->update($entryid, $vidpres); } catch(Exception $ex){ - local_kaltura_log_data("Kalturamigration", - 'local_kaltura_update_video_presentation_entry - failed updating data with tag '.$ex->getCode(), - array($entryid), false); + local_kaltura_migration_log_data(__FUNCTION__, array( + "failed updating data with tag", + $entryid, + $ex->getCode(), + $ex->getMessage(), + base64_encode($ex->getTraceAsString()), + )); } } } From 5a561f5a97a45b480c2739f1097d65b3da4c3fb6 Mon Sep 17 00:00:00 2001 From: Gonen Radai Date: Sun, 25 Jan 2015 11:35:23 +0200 Subject: [PATCH 047/326] advanced version --- filter/kaltura/version.php | 6 +++--- lib/editor/atto/plugins/kalturamedia/version.php | 6 +++--- lib/editor/tinymce/plugins/kalturamedia/version.php | 6 +++--- local/kaltura/db/upgrade.php | 6 +++--- local/kaltura/version.php | 4 ++-- local/kalturamediagallery/version.php | 6 +++--- local/mymedia/version.php | 6 +++--- mod/kalvidassign/version.php | 6 +++--- mod/kalvidpres/version.php | 6 +++--- mod/kalvidres/version.php | 6 +++--- 10 files changed, 29 insertions(+), 29 deletions(-) diff --git a/filter/kaltura/version.php b/filter/kaltura/version.php index 6db3579c3c95b..0a289131feca1 100644 --- a/filter/kaltura/version.php +++ b/filter/kaltura/version.php @@ -24,10 +24,10 @@ */ defined('MOODLE_INTERNAL') || die(); -$plugin->version = 2014121807; -$plugin->release = 'Kaltura release 4.0.02'; +$plugin->version = 2015012507; +$plugin->release = 'Kaltura release 4.0.03'; $plugin->requires = 2014050800; $plugin->maturity = MATURITY_STABLE; $plugin->dependencies = array( - 'local_kaltura' => 2014121807 + 'local_kaltura' => 2015012507 ); diff --git a/lib/editor/atto/plugins/kalturamedia/version.php b/lib/editor/atto/plugins/kalturamedia/version.php index 17c7dd5880da4..96cac1891c7cb 100644 --- a/lib/editor/atto/plugins/kalturamedia/version.php +++ b/lib/editor/atto/plugins/kalturamedia/version.php @@ -24,10 +24,10 @@ defined('MOODLE_INTERNAL') || die(); -$plugin->version = 2014121807; // The current plugin version (Date: YYYYMMDDXX). -$plugin->release = 'Kaltura release 4.0.02'; +$plugin->version = 2015012507; // The current plugin version (Date: YYYYMMDDXX). +$plugin->release = 'Kaltura release 4.0.03'; $plugin->requires = 2014050800; // Requires this Moodle version. $plugin->component = 'atto_kalturamedia'; // Full name of the plugin (used for diagnostics). $plugin->dependencies = array( - 'local_kaltura' => 2014121807 + 'local_kaltura' => 2015012507 ); diff --git a/lib/editor/tinymce/plugins/kalturamedia/version.php b/lib/editor/tinymce/plugins/kalturamedia/version.php index c0fdf4b5adcb5..b3dce95c4553a 100644 --- a/lib/editor/tinymce/plugins/kalturamedia/version.php +++ b/lib/editor/tinymce/plugins/kalturamedia/version.php @@ -23,12 +23,12 @@ defined('MOODLE_INTERNAL') || die(); -$plugin->version = 2014121807; -$plugin->release = 'Kaltura release 4.0.02'; +$plugin->version = 2015012507; +$plugin->release = 'Kaltura release 4.0.03'; // Required Moodle version. $plugin->requires = 2014050800; // Full name of the plugin (used for diagnostics). $plugin->component = 'tinymce_kalturamedia'; $plugin->dependencies = array( - 'local_kaltura' => 2014121807 + 'local_kaltura' => 2015012507 ); diff --git a/local/kaltura/db/upgrade.php b/local/kaltura/db/upgrade.php index ba449100b00fd..73b11f7e3dda9 100644 --- a/local/kaltura/db/upgrade.php +++ b/local/kaltura/db/upgrade.php @@ -59,13 +59,13 @@ function xmldb_local_kaltura_upgrade($oldversion) { } // Kaltura savepoint reached. - upgrade_plugin_savepoint(true, 2014121807, 'local', 'kaltura'); + upgrade_plugin_savepoint(true, 2015012507, 'local', 'kaltura'); $savePointDone = true; } - if (!$savePointDone && $oldversion < 2014121807) { + if (!$savePointDone && $oldversion < 2015012507) { // Kaltura savepoint reached. - upgrade_plugin_savepoint(true, 2014121807, 'local', 'kaltura'); + upgrade_plugin_savepoint(true, 2015012507, 'local', 'kaltura'); } return true; } diff --git a/local/kaltura/version.php b/local/kaltura/version.php index 4a10459a4a5e3..cfeb8738d2309 100644 --- a/local/kaltura/version.php +++ b/local/kaltura/version.php @@ -25,8 +25,8 @@ die('Direct access to this script is forbidden.'); } -$plugin->version = 2014121807; +$plugin->version = 2015012507; $plugin->component = 'local_kaltura'; -$plugin->release = 'Kaltura release 4.0.02'; +$plugin->release = 'Kaltura release 4.0.03'; $plugin->requires = 2014050800; $plugin->maturity = MATURITY_STABLE; diff --git a/local/kalturamediagallery/version.php b/local/kalturamediagallery/version.php index 8a13f97a1fbb6..890669610ecd9 100644 --- a/local/kalturamediagallery/version.php +++ b/local/kalturamediagallery/version.php @@ -26,11 +26,11 @@ die('Direct access to this script is forbidden.'); } -$plugin->version = 2014121807; +$plugin->version = 2015012507; $plugin->component = 'local_kalturamediagallery'; -$plugin->release = 'Kaltura release 4.0.02'; +$plugin->release = 'Kaltura release 4.0.03'; $plugin->requires = 2014050800; $plugin->maturity = MATURITY_STABLE; $plugin->dependencies = array( - 'local_kaltura' => 2014121807 + 'local_kaltura' => 2015012507 ); diff --git a/local/mymedia/version.php b/local/mymedia/version.php index fb3d73ef7bf10..7df217fa42027 100644 --- a/local/mymedia/version.php +++ b/local/mymedia/version.php @@ -25,11 +25,11 @@ die('Direct access to this script is forbidden.'); } -$plugin->version = 2014121807; +$plugin->version = 2015012507; $plugin->component = 'local_mymedia'; -$plugin->release = 'Kaltura release 4.0.02'; +$plugin->release = 'Kaltura release 4.0.03'; $plugin->requires = 2014050800; $plugin->maturity = MATURITY_STABLE; $plugin->dependencies = array( - 'local_kaltura' => 2014121807 + 'local_kaltura' => 2015012507 ); diff --git a/mod/kalvidassign/version.php b/mod/kalvidassign/version.php index 8173939ca7460..c060ed5646378 100644 --- a/mod/kalvidassign/version.php +++ b/mod/kalvidassign/version.php @@ -25,12 +25,12 @@ die('Direct access to this script is forbidden.'); } -$module->version = 2014121807; +$module->version = 2015012507; $module->component = 'mod_kalvidassign'; -$module->release = 'Kaltura release 4.0.02'; +$module->release = 'Kaltura release 4.0.03'; $module->requires = 2014050800; $module->cron = 0; $module->maturity = MATURITY_STABLE; $module->dependencies = array( - 'local_kaltura' => 2014121807, + 'local_kaltura' => 2015012507, ); diff --git a/mod/kalvidpres/version.php b/mod/kalvidpres/version.php index b756199545792..06af5ed8e37a8 100644 --- a/mod/kalvidpres/version.php +++ b/mod/kalvidpres/version.php @@ -25,12 +25,12 @@ die('Direct access to this script is forbidden.'); } -$module->version = 2014121807; +$module->version = 2015012507; $module->component = 'mod_kalvidpres'; -$module->release = 'Kaltura release 4.0.02'; +$module->release = 'Kaltura release 4.0.03'; $module->requires = 2014050800; $module->cron = 0; $module->maturity = MATURITY_STABLE; $module->dependencies = array( - 'local_kaltura' => 2014121807 + 'local_kaltura' => 2015012507 ); diff --git a/mod/kalvidres/version.php b/mod/kalvidres/version.php index c151af5473b61..e9fa08c148ab9 100644 --- a/mod/kalvidres/version.php +++ b/mod/kalvidres/version.php @@ -25,12 +25,12 @@ die('Direct access to this script is forbidden.'); } -$module->version = 2014121807; +$module->version = 2015012507; $module->component = 'mod_kalvidres'; -$module->release = 'Kaltura release 4.0.02'; +$module->release = 'Kaltura release 4.0.03'; $module->requires = 2014050800; $module->cron = 0; $module->maturity = MATURITY_STABLE; $module->dependencies = array( - 'local_kaltura' => 2014121807 + 'local_kaltura' => 2015012507 ); From 0022b05815a40683d9fd46e1980d9dad5308f78c Mon Sep 17 00:00:00 2001 From: Gonen Radai Date: Sun, 25 Jan 2015 11:35:50 +0200 Subject: [PATCH 048/326] added script to easily advance version numbers --- incrementVersion.sh | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+) create mode 100755 incrementVersion.sh diff --git a/incrementVersion.sh b/incrementVersion.sh new file mode 100755 index 0000000000000..5df8131e19db9 --- /dev/null +++ b/incrementVersion.sh @@ -0,0 +1,26 @@ +#!/bin/bash + +EXPECTED_ARGS=4 + +if [ $# -ne $EXPECTED_ARGS ]; then + echo "Missing arguments!" + printf "Usage: \n \t$0 {existing build number} {new biuld number} {existing release number} {new release number}" + printf "\nExample: \n \t$0 2014102807 2015012507 4.0.02 4.0.03\n\n" + exit 1; +fi + + +EXISTING_BUILD_NUMBER=$1 +NEW_BUILD_NUMBER=$2 +EXISTING_RELEASE_NUMBER=$3 +NEW_RELEASE_NUMBER=$4 + +FILES=`grep $EXISTING_BUILD_NUMBER ./* -R -l` + +for filename in $FILES; do + echo $filename + sed -i "" -e "s/$EXISTING_BUILD_NUMBER/$NEW_BUILD_NUMBER/g" $filename + sed -i "" -e "s/$EXISTING_RELEASE_NUMBER/$NEW_RELEASE_NUMBER/g" $filename +done + +git status From 3367e1f10a8d9f629aa2343a473e1270d5ababc9 Mon Sep 17 00:00:00 2001 From: Gonen Radai Date: Sun, 25 Jan 2015 17:06:46 +0200 Subject: [PATCH 049/326] set category ID in case of single request, and avoid 'throw' on error --- local/kaltura/migrationlib.php | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/local/kaltura/migrationlib.php b/local/kaltura/migrationlib.php index bc874af67538d..137594991da74 100644 --- a/local/kaltura/migrationlib.php +++ b/local/kaltura/migrationlib.php @@ -1094,12 +1094,21 @@ function local_kaltura_set_activity_entry_to_incontext($entryId, $courseId) $inContextCategoryId = $multiResponse[1]->id; } } + else + { + $inContextCategoryId = $res->id; + } } // assign the entry to the InContext category if(is_null($inContextCategoryId)) { - throw new Exception("Failed getting/creating InContext category for course $courseId with response objects of single-req: ".print_r($res, true). " and multi-req: ".print_r($multiResponse, true) ); + local_kaltura_migration_log_data(__FUNCTION__, array( + 'Failed getting/creating InContext category for course', + $courseId, + 'single request response: '.base64_encode(print_r($res, true)), + 'multi request response: '. base64_encode(print_r($multiResponse, true)), + )); } $categoryEntry = new KalturaCategoryEntry(); From b3da351397e781d592c7b61396f575590569f7c0 Mon Sep 17 00:00:00 2001 From: Gonen Radai Date: Thu, 5 Feb 2015 15:25:36 +0200 Subject: [PATCH 050/326] added patch for 2.8 support to add resource_link_id which is not set by moodle from some reason --- local/kaltura/locallib.php | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/local/kaltura/locallib.php b/local/kaltura/locallib.php index 862c5d4109117..5f17cb0472c20 100644 --- a/local/kaltura/locallib.php +++ b/local/kaltura/locallib.php @@ -363,6 +363,10 @@ function local_kaltura_request_lti_launch($ltirequest, $withblocks = true, $edit } $requestparams = lti_build_request((object) $lti, $typeconfig, $ltirequest['course']); + if(!isset($requestparams['resource_link_id'])) // fix to moodle 2.8 issue where this function (lti_build_request) does not set resource_link_id value + { + $requestparams['resource_link_id'] = $lti->id; + } // Moodle by default uses the Moodle user id. Overriding this parameter to user the Moodle username. $requestparams['user_id'] = $USER->username; From 8db166aa4f0e0c81488093b7a82561dfed2d530a Mon Sep 17 00:00:00 2001 From: Gonen Radai Date: Thu, 5 Feb 2015 15:28:19 +0200 Subject: [PATCH 051/326] increment build version to indicate moodle 2.8 --- filter/kaltura/version.php | 4 ++-- lib/editor/atto/plugins/kalturamedia/version.php | 4 ++-- lib/editor/tinymce/plugins/kalturamedia/version.php | 4 ++-- local/kaltura/db/upgrade.php | 6 +++--- local/kaltura/version.php | 2 +- local/kalturamediagallery/version.php | 4 ++-- local/mymedia/version.php | 4 ++-- mod/kalvidassign/version.php | 4 ++-- mod/kalvidpres/version.php | 4 ++-- mod/kalvidres/version.php | 4 ++-- 10 files changed, 20 insertions(+), 20 deletions(-) diff --git a/filter/kaltura/version.php b/filter/kaltura/version.php index 0a289131feca1..4e29bd9fc05b8 100644 --- a/filter/kaltura/version.php +++ b/filter/kaltura/version.php @@ -24,10 +24,10 @@ */ defined('MOODLE_INTERNAL') || die(); -$plugin->version = 2015012507; +$plugin->version = 2015020508; $plugin->release = 'Kaltura release 4.0.03'; $plugin->requires = 2014050800; $plugin->maturity = MATURITY_STABLE; $plugin->dependencies = array( - 'local_kaltura' => 2015012507 + 'local_kaltura' => 2015020508 ); diff --git a/lib/editor/atto/plugins/kalturamedia/version.php b/lib/editor/atto/plugins/kalturamedia/version.php index 96cac1891c7cb..65d51e10715a4 100644 --- a/lib/editor/atto/plugins/kalturamedia/version.php +++ b/lib/editor/atto/plugins/kalturamedia/version.php @@ -24,10 +24,10 @@ defined('MOODLE_INTERNAL') || die(); -$plugin->version = 2015012507; // The current plugin version (Date: YYYYMMDDXX). +$plugin->version = 2015020508; // The current plugin version (Date: YYYYMMDDXX). $plugin->release = 'Kaltura release 4.0.03'; $plugin->requires = 2014050800; // Requires this Moodle version. $plugin->component = 'atto_kalturamedia'; // Full name of the plugin (used for diagnostics). $plugin->dependencies = array( - 'local_kaltura' => 2015012507 + 'local_kaltura' => 2015020508 ); diff --git a/lib/editor/tinymce/plugins/kalturamedia/version.php b/lib/editor/tinymce/plugins/kalturamedia/version.php index b3dce95c4553a..ef8cda38eca78 100644 --- a/lib/editor/tinymce/plugins/kalturamedia/version.php +++ b/lib/editor/tinymce/plugins/kalturamedia/version.php @@ -23,12 +23,12 @@ defined('MOODLE_INTERNAL') || die(); -$plugin->version = 2015012507; +$plugin->version = 2015020508; $plugin->release = 'Kaltura release 4.0.03'; // Required Moodle version. $plugin->requires = 2014050800; // Full name of the plugin (used for diagnostics). $plugin->component = 'tinymce_kalturamedia'; $plugin->dependencies = array( - 'local_kaltura' => 2015012507 + 'local_kaltura' => 2015020508 ); diff --git a/local/kaltura/db/upgrade.php b/local/kaltura/db/upgrade.php index 73b11f7e3dda9..a6c73b49255be 100644 --- a/local/kaltura/db/upgrade.php +++ b/local/kaltura/db/upgrade.php @@ -59,13 +59,13 @@ function xmldb_local_kaltura_upgrade($oldversion) { } // Kaltura savepoint reached. - upgrade_plugin_savepoint(true, 2015012507, 'local', 'kaltura'); + upgrade_plugin_savepoint(true, 2015020508, 'local', 'kaltura'); $savePointDone = true; } - if (!$savePointDone && $oldversion < 2015012507) { + if (!$savePointDone && $oldversion < 2015020508) { // Kaltura savepoint reached. - upgrade_plugin_savepoint(true, 2015012507, 'local', 'kaltura'); + upgrade_plugin_savepoint(true, 2015020508, 'local', 'kaltura'); } return true; } diff --git a/local/kaltura/version.php b/local/kaltura/version.php index cfeb8738d2309..7ff5151f76af9 100644 --- a/local/kaltura/version.php +++ b/local/kaltura/version.php @@ -25,7 +25,7 @@ die('Direct access to this script is forbidden.'); } -$plugin->version = 2015012507; +$plugin->version = 2015020508; $plugin->component = 'local_kaltura'; $plugin->release = 'Kaltura release 4.0.03'; $plugin->requires = 2014050800; diff --git a/local/kalturamediagallery/version.php b/local/kalturamediagallery/version.php index 890669610ecd9..3cbc2e1a787f9 100644 --- a/local/kalturamediagallery/version.php +++ b/local/kalturamediagallery/version.php @@ -26,11 +26,11 @@ die('Direct access to this script is forbidden.'); } -$plugin->version = 2015012507; +$plugin->version = 2015020508; $plugin->component = 'local_kalturamediagallery'; $plugin->release = 'Kaltura release 4.0.03'; $plugin->requires = 2014050800; $plugin->maturity = MATURITY_STABLE; $plugin->dependencies = array( - 'local_kaltura' => 2015012507 + 'local_kaltura' => 2015020508 ); diff --git a/local/mymedia/version.php b/local/mymedia/version.php index 7df217fa42027..b4296dd3474b7 100644 --- a/local/mymedia/version.php +++ b/local/mymedia/version.php @@ -25,11 +25,11 @@ die('Direct access to this script is forbidden.'); } -$plugin->version = 2015012507; +$plugin->version = 2015020508; $plugin->component = 'local_mymedia'; $plugin->release = 'Kaltura release 4.0.03'; $plugin->requires = 2014050800; $plugin->maturity = MATURITY_STABLE; $plugin->dependencies = array( - 'local_kaltura' => 2015012507 + 'local_kaltura' => 2015020508 ); diff --git a/mod/kalvidassign/version.php b/mod/kalvidassign/version.php index c060ed5646378..629cd498940f1 100644 --- a/mod/kalvidassign/version.php +++ b/mod/kalvidassign/version.php @@ -25,12 +25,12 @@ die('Direct access to this script is forbidden.'); } -$module->version = 2015012507; +$module->version = 2015020508; $module->component = 'mod_kalvidassign'; $module->release = 'Kaltura release 4.0.03'; $module->requires = 2014050800; $module->cron = 0; $module->maturity = MATURITY_STABLE; $module->dependencies = array( - 'local_kaltura' => 2015012507, + 'local_kaltura' => 2015020508, ); diff --git a/mod/kalvidpres/version.php b/mod/kalvidpres/version.php index 06af5ed8e37a8..521c3cdf9249f 100644 --- a/mod/kalvidpres/version.php +++ b/mod/kalvidpres/version.php @@ -25,12 +25,12 @@ die('Direct access to this script is forbidden.'); } -$module->version = 2015012507; +$module->version = 2015020508; $module->component = 'mod_kalvidpres'; $module->release = 'Kaltura release 4.0.03'; $module->requires = 2014050800; $module->cron = 0; $module->maturity = MATURITY_STABLE; $module->dependencies = array( - 'local_kaltura' => 2015012507 + 'local_kaltura' => 2015020508 ); diff --git a/mod/kalvidres/version.php b/mod/kalvidres/version.php index e9fa08c148ab9..718853636eaf9 100644 --- a/mod/kalvidres/version.php +++ b/mod/kalvidres/version.php @@ -25,12 +25,12 @@ die('Direct access to this script is forbidden.'); } -$module->version = 2015012507; +$module->version = 2015020508; $module->component = 'mod_kalvidres'; $module->release = 'Kaltura release 4.0.03'; $module->requires = 2014050800; $module->cron = 0; $module->maturity = MATURITY_STABLE; $module->dependencies = array( - 'local_kaltura' => 2015012507 + 'local_kaltura' => 2015020508 ); From b46a7aa938ea25330bc1011e4c2e4911b04a00de Mon Sep 17 00:00:00 2001 From: Gonen Radai Date: Wed, 11 Feb 2015 14:34:38 +0200 Subject: [PATCH 052/326] SUP-3539 change value of cmid to be actual cmid and not user ID --- mod/kalvidassign/renderer.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mod/kalvidassign/renderer.php b/mod/kalvidassign/renderer.php index 6f35b6e725f13..c7950e64cd149 100644 --- a/mod/kalvidassign/renderer.php +++ b/mod/kalvidassign/renderer.php @@ -419,7 +419,7 @@ public function display_grade($grade) { private function _generateLtiLaunchLink($source, $data) { - $cmid = $data->id; + $cmid = $this->cminstance->cmid; $width = 485; $height = 450; From e10a85eee01813b7093d52de702737a2da88a07b Mon Sep 17 00:00:00 2001 From: Gonen Radai Date: Wed, 11 Feb 2015 14:37:21 +0200 Subject: [PATCH 053/326] KMS-6000 remove calls to deprected add_to_log --- mod/kalvidassign/grade_submissions.php | 8 -------- mod/kalvidassign/single_submission.php | 5 ----- mod/kalvidassign/submission.php | 1 - mod/kalvidassign/view.php | 2 -- mod/kalvidpres/view.php | 2 -- mod/kalvidres/view.php | 2 -- 6 files changed, 20 deletions(-) diff --git a/mod/kalvidassign/grade_submissions.php b/mod/kalvidassign/grade_submissions.php index 1026bea5238f9..20de117ffb7f4 100644 --- a/mod/kalvidassign/grade_submissions.php +++ b/mod/kalvidassign/grade_submissions.php @@ -61,8 +61,6 @@ require_capability('mod/kalvidassign:gradesubmission', context_module::instance($cm->id)); -add_to_log($course->id, 'kalvidassign', 'view submissions page', 'grade_submissions.php?cmid='.$cm->id, $kalvidassignobj->id, $cm->id); - $prefform = new kalvidassign_gradepreferences_form(null, array('cmid' => $cm->id, 'groupmode' => $cm->groupmode)); $data = null; @@ -143,9 +141,6 @@ kalvidassign_grade_item_update($kalvidassignobj, $grade); - // Add to log only if updating. - add_to_log($kalvidassignobj->course, 'kalvidassign', 'update grades', 'grade_submissions.php?cmid='.$cm->id, $cm->id); - } } else { @@ -187,9 +182,6 @@ kalvidassign_grade_item_update($kalvidassignobj, $grade); - // Add to log only if updating - add_to_log($kalvidassignobj->course, 'kalvidassign', 'update grades', 'grade_submissions.php?cmid='.$cm->id, $cm->id); - } } diff --git a/mod/kalvidassign/single_submission.php b/mod/kalvidassign/single_submission.php index 8d23288ce9be8..dddf616311076 100644 --- a/mod/kalvidassign/single_submission.php +++ b/mod/kalvidassign/single_submission.php @@ -61,8 +61,6 @@ require_capability('mod/kalvidassign:gradesubmission', $context); -add_to_log($course->id, 'kalvidassign', 'view submission page', 'single_submission.php?id='.$cm->id, $kalvidassignobj->id, $cm->id); - // Get a single submission record $submission = kalvidassign_get_submission($cm->instance, $userid); @@ -176,9 +174,6 @@ kalvidassign_grade_item_update($kalvidassignobj, $gradeobj); - // Add to log. - add_to_log($kalvidassignobj->course, 'kalvidassign', 'update grades', 'grade_submissions.php?cmid='.$cm->id, $cm->id); - } // Handle outcome data diff --git a/mod/kalvidassign/submission.php b/mod/kalvidassign/submission.php index 6166272c7c874..8d0af333895dc 100644 --- a/mod/kalvidassign/submission.php +++ b/mod/kalvidassign/submission.php @@ -101,7 +101,6 @@ echo $OUTPUT->single_button($url, $continue, 'post'); echo html_writer::end_tag('center'); - add_to_log($course->id, 'kalvidassign', 'submit', 'view.php?id='.$cm->id, $kalvidassignobj->id, $cm->id); } else { notice(get_string('failedtoinsertsubmission', 'kalvidassign'), $url, $course); } diff --git a/mod/kalvidassign/view.php b/mod/kalvidassign/view.php index 6823bfa56679d..fa3a40d918889 100644 --- a/mod/kalvidassign/view.php +++ b/mod/kalvidassign/view.php @@ -48,8 +48,6 @@ $context = context_module::instance($cm->id); -add_to_log($course->id, 'kalvidassign', 'view assignment details', 'view.php?id='.$cm->id, $kalvidassign->id, $cm->id); - // Update 'viewed' state if required by completion system $completion = new completion_info($course); $completion->set_module_viewed($cm); diff --git a/mod/kalvidpres/view.php b/mod/kalvidpres/view.php index e8497e1c97449..270d05b7031ff 100644 --- a/mod/kalvidpres/view.php +++ b/mod/kalvidpres/view.php @@ -57,8 +57,6 @@ $context = $PAGE->context; -add_to_log($course->id, 'kalvidpres', 'view video resource', 'view.php?id='.$cm->id, $kalvidpres->id, $cm->id); - $completion = new completion_info($course); $completion->set_module_viewed($cm); diff --git a/mod/kalvidres/view.php b/mod/kalvidres/view.php index bb09dfb86b244..c80d143892055 100644 --- a/mod/kalvidres/view.php +++ b/mod/kalvidres/view.php @@ -57,8 +57,6 @@ $context = $PAGE->context; -add_to_log($course->id, 'kalvidres', 'view video resource', 'view.php?id='.$cm->id, $kalvidres->id, $cm->id); - $completion = new completion_info($course); $completion->set_module_viewed($cm); From 6d3367d65fb99d2da504dc79532229ccc64b22d0 Mon Sep 17 00:00:00 2001 From: Gonen Radai Date: Wed, 11 Feb 2015 14:42:55 +0200 Subject: [PATCH 054/326] KMS-6000 replace calls to deprected get_context_instance with context_xxx::instance(...) --- local/kaltura/test.php | 2 +- local/mymedia/renderer.php | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/local/kaltura/test.php b/local/kaltura/test.php index 57e28944542d5..faa03e5325084 100644 --- a/local/kaltura/test.php +++ b/local/kaltura/test.php @@ -7,7 +7,7 @@ require_login(); -$context = get_context_instance(CONTEXT_SYSTEM); +$context = context_system::instance(); $url = new moodle_url('/local/kaltura/test.php'); diff --git a/local/mymedia/renderer.php b/local/mymedia/renderer.php index 77bd5ee4fa547..3ccd1bc20d67a 100644 --- a/local/mymedia/renderer.php +++ b/local/mymedia/renderer.php @@ -163,7 +163,7 @@ public function create_options_table_upper($page, $partner_id = '', $login_sessi $screenrec = ''; $enable_ksr = get_config(KALTURA_PLUGIN_NAME, 'enable_screen_recorder'); - $context = get_context_instance(CONTEXT_USER, $USER->id); + $context = context_user::instance($USER->id); if (has_capability('local/mymedia:upload', $context, $USER)) { $upload = $this->create_upload_markup(); From 662d526bfeb2481274cd8d4803dcbc07f2039d6e Mon Sep 17 00:00:00 2001 From: Gonen Radai Date: Wed, 11 Feb 2015 14:45:08 +0200 Subject: [PATCH 055/326] advanced version numbers --- filter/kaltura/version.php | 6 +++--- lib/editor/atto/plugins/kalturamedia/version.php | 6 +++--- lib/editor/tinymce/plugins/kalturamedia/version.php | 6 +++--- local/kaltura/db/upgrade.php | 6 +++--- local/kaltura/version.php | 4 ++-- local/kalturamediagallery/version.php | 6 +++--- local/mymedia/version.php | 6 +++--- mod/kalvidassign/version.php | 6 +++--- mod/kalvidpres/version.php | 6 +++--- mod/kalvidres/version.php | 6 +++--- 10 files changed, 29 insertions(+), 29 deletions(-) diff --git a/filter/kaltura/version.php b/filter/kaltura/version.php index 4e29bd9fc05b8..1271b03b4394f 100644 --- a/filter/kaltura/version.php +++ b/filter/kaltura/version.php @@ -24,10 +24,10 @@ */ defined('MOODLE_INTERNAL') || die(); -$plugin->version = 2015020508; -$plugin->release = 'Kaltura release 4.0.03'; +$plugin->version = 2015021108; +$plugin->release = 'Kaltura release 4.0.04'; $plugin->requires = 2014050800; $plugin->maturity = MATURITY_STABLE; $plugin->dependencies = array( - 'local_kaltura' => 2015020508 + 'local_kaltura' => 2015021108 ); diff --git a/lib/editor/atto/plugins/kalturamedia/version.php b/lib/editor/atto/plugins/kalturamedia/version.php index 65d51e10715a4..19f5a8265e7c5 100644 --- a/lib/editor/atto/plugins/kalturamedia/version.php +++ b/lib/editor/atto/plugins/kalturamedia/version.php @@ -24,10 +24,10 @@ defined('MOODLE_INTERNAL') || die(); -$plugin->version = 2015020508; // The current plugin version (Date: YYYYMMDDXX). -$plugin->release = 'Kaltura release 4.0.03'; +$plugin->version = 2015021108; // The current plugin version (Date: YYYYMMDDXX). +$plugin->release = 'Kaltura release 4.0.04'; $plugin->requires = 2014050800; // Requires this Moodle version. $plugin->component = 'atto_kalturamedia'; // Full name of the plugin (used for diagnostics). $plugin->dependencies = array( - 'local_kaltura' => 2015020508 + 'local_kaltura' => 2015021108 ); diff --git a/lib/editor/tinymce/plugins/kalturamedia/version.php b/lib/editor/tinymce/plugins/kalturamedia/version.php index ef8cda38eca78..7d1e6e1dfa0a9 100644 --- a/lib/editor/tinymce/plugins/kalturamedia/version.php +++ b/lib/editor/tinymce/plugins/kalturamedia/version.php @@ -23,12 +23,12 @@ defined('MOODLE_INTERNAL') || die(); -$plugin->version = 2015020508; -$plugin->release = 'Kaltura release 4.0.03'; +$plugin->version = 2015021108; +$plugin->release = 'Kaltura release 4.0.04'; // Required Moodle version. $plugin->requires = 2014050800; // Full name of the plugin (used for diagnostics). $plugin->component = 'tinymce_kalturamedia'; $plugin->dependencies = array( - 'local_kaltura' => 2015020508 + 'local_kaltura' => 2015021108 ); diff --git a/local/kaltura/db/upgrade.php b/local/kaltura/db/upgrade.php index a6c73b49255be..4fbcd4342587c 100644 --- a/local/kaltura/db/upgrade.php +++ b/local/kaltura/db/upgrade.php @@ -59,13 +59,13 @@ function xmldb_local_kaltura_upgrade($oldversion) { } // Kaltura savepoint reached. - upgrade_plugin_savepoint(true, 2015020508, 'local', 'kaltura'); + upgrade_plugin_savepoint(true, 2015021108, 'local', 'kaltura'); $savePointDone = true; } - if (!$savePointDone && $oldversion < 2015020508) { + if (!$savePointDone && $oldversion < 2015021108) { // Kaltura savepoint reached. - upgrade_plugin_savepoint(true, 2015020508, 'local', 'kaltura'); + upgrade_plugin_savepoint(true, 2015021108, 'local', 'kaltura'); } return true; } diff --git a/local/kaltura/version.php b/local/kaltura/version.php index 7ff5151f76af9..1bed36abb546e 100644 --- a/local/kaltura/version.php +++ b/local/kaltura/version.php @@ -25,8 +25,8 @@ die('Direct access to this script is forbidden.'); } -$plugin->version = 2015020508; +$plugin->version = 2015021108; $plugin->component = 'local_kaltura'; -$plugin->release = 'Kaltura release 4.0.03'; +$plugin->release = 'Kaltura release 4.0.04'; $plugin->requires = 2014050800; $plugin->maturity = MATURITY_STABLE; diff --git a/local/kalturamediagallery/version.php b/local/kalturamediagallery/version.php index 3cbc2e1a787f9..9a0f6e6f5cbc3 100644 --- a/local/kalturamediagallery/version.php +++ b/local/kalturamediagallery/version.php @@ -26,11 +26,11 @@ die('Direct access to this script is forbidden.'); } -$plugin->version = 2015020508; +$plugin->version = 2015021108; $plugin->component = 'local_kalturamediagallery'; -$plugin->release = 'Kaltura release 4.0.03'; +$plugin->release = 'Kaltura release 4.0.04'; $plugin->requires = 2014050800; $plugin->maturity = MATURITY_STABLE; $plugin->dependencies = array( - 'local_kaltura' => 2015020508 + 'local_kaltura' => 2015021108 ); diff --git a/local/mymedia/version.php b/local/mymedia/version.php index b4296dd3474b7..c819a71a00758 100644 --- a/local/mymedia/version.php +++ b/local/mymedia/version.php @@ -25,11 +25,11 @@ die('Direct access to this script is forbidden.'); } -$plugin->version = 2015020508; +$plugin->version = 2015021108; $plugin->component = 'local_mymedia'; -$plugin->release = 'Kaltura release 4.0.03'; +$plugin->release = 'Kaltura release 4.0.04'; $plugin->requires = 2014050800; $plugin->maturity = MATURITY_STABLE; $plugin->dependencies = array( - 'local_kaltura' => 2015020508 + 'local_kaltura' => 2015021108 ); diff --git a/mod/kalvidassign/version.php b/mod/kalvidassign/version.php index 629cd498940f1..dfd69a6385944 100644 --- a/mod/kalvidassign/version.php +++ b/mod/kalvidassign/version.php @@ -25,12 +25,12 @@ die('Direct access to this script is forbidden.'); } -$module->version = 2015020508; +$module->version = 2015021108; $module->component = 'mod_kalvidassign'; -$module->release = 'Kaltura release 4.0.03'; +$module->release = 'Kaltura release 4.0.04'; $module->requires = 2014050800; $module->cron = 0; $module->maturity = MATURITY_STABLE; $module->dependencies = array( - 'local_kaltura' => 2015020508, + 'local_kaltura' => 2015021108, ); diff --git a/mod/kalvidpres/version.php b/mod/kalvidpres/version.php index 521c3cdf9249f..6bbbf0a815234 100644 --- a/mod/kalvidpres/version.php +++ b/mod/kalvidpres/version.php @@ -25,12 +25,12 @@ die('Direct access to this script is forbidden.'); } -$module->version = 2015020508; +$module->version = 2015021108; $module->component = 'mod_kalvidpres'; -$module->release = 'Kaltura release 4.0.03'; +$module->release = 'Kaltura release 4.0.04'; $module->requires = 2014050800; $module->cron = 0; $module->maturity = MATURITY_STABLE; $module->dependencies = array( - 'local_kaltura' => 2015020508 + 'local_kaltura' => 2015021108 ); diff --git a/mod/kalvidres/version.php b/mod/kalvidres/version.php index 718853636eaf9..5388f57522efa 100644 --- a/mod/kalvidres/version.php +++ b/mod/kalvidres/version.php @@ -25,12 +25,12 @@ die('Direct access to this script is forbidden.'); } -$module->version = 2015020508; +$module->version = 2015021108; $module->component = 'mod_kalvidres'; -$module->release = 'Kaltura release 4.0.03'; +$module->release = 'Kaltura release 4.0.04'; $module->requires = 2014050800; $module->cron = 0; $module->maturity = MATURITY_STABLE; $module->dependencies = array( - 'local_kaltura' => 2015020508 + 'local_kaltura' => 2015021108 ); From 79e8712ac7ad648d74efb9ffd5ca775d3ed5eb69 Mon Sep 17 00:00:00 2001 From: Barry Oosthuizen Date: Thu, 19 Feb 2015 09:42:45 +0000 Subject: [PATCH 056/326] Fix #18 $showdescription optional_param in local/kaltura/service.php is duplicated Define $showduration instead --- local/kaltura/service.php | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/local/kaltura/service.php b/local/kaltura/service.php index 2763c3d90ad88..ae4fb92a27709 100644 --- a/local/kaltura/service.php +++ b/local/kaltura/service.php @@ -44,7 +44,7 @@ $showtitle = optional_param('showTitle', '', PARAM_TEXT); $showdescription = optional_param('showDescription', '', PARAM_TEXT); $showtags = optional_param('showTags', '', PARAM_TEXT); -$showdescription = optional_param('showDuration', '', PARAM_TEXT); +$showduration = optional_param('showDuration', '', PARAM_TEXT); $showowner = optional_param('showOwner', '', PARAM_TEXT); $player = optional_param('player', '', PARAM_TEXT); $size = optional_param('size', '', PARAM_TEXT); @@ -81,6 +81,7 @@ $metadata->tags = $tags; $metadata->showtitle = $showtitle; $metadata->showdescription = $showdescription; +$metadata->showduration = $showduration; $metadata->showowner = $showowner; $metadata->player = $player; $metadata->size = $size; From 11258f5feae6b1dd44fa5c33c22bc426b800d459 Mon Sep 17 00:00:00 2001 From: Barry Oosthuizen Date: Thu, 19 Feb 2015 10:37:42 +0000 Subject: [PATCH 057/326] Fix issue #22. Delete unused variables. --- mod/kalvidassign/single_submission_form.php | 2 -- 1 file changed, 2 deletions(-) diff --git a/mod/kalvidassign/single_submission_form.php b/mod/kalvidassign/single_submission_form.php index 4b4a0260c0a39..5fed3ccf15805 100644 --- a/mod/kalvidassign/single_submission_form.php +++ b/mod/kalvidassign/single_submission_form.php @@ -219,8 +219,6 @@ private function _generateLtiLaunchLink($source, $data) $width = $data->width; $height = $data->height; } - $realSource = local_kaltura_add_kaf_uri_token($source); - $hashedSource = base64_encode($realSource); $target = new moodle_url('/mod/kalvidassign/lti_launch_grade.php?cmid='.$cmid.'&source='.urlencode($source).'&height='.$height.'&width='.$width.'&courseid='.$courseId); return $target; From 463328c0f4f3c081b5d4fd04943d6787263f0cb2 Mon Sep 17 00:00:00 2001 From: Barry Oosthuizen Date: Thu, 19 Feb 2015 09:41:32 +0000 Subject: [PATCH 058/326] Fix #19 Missing language strings in local/kaltura Define and use new language strings. --- local/kaltura/attobsepreview.php | 3 ++- local/kaltura/download_log.php | 3 ++- local/kaltura/lang/en/local_kaltura.php | 6 ++++++ 3 files changed, 10 insertions(+), 2 deletions(-) diff --git a/local/kaltura/attobsepreview.php b/local/kaltura/attobsepreview.php index 86e909d3b272b..5049919869348 100644 --- a/local/kaltura/attobsepreview.php +++ b/local/kaltura/attobsepreview.php @@ -26,8 +26,9 @@ $PAGE->set_pagelayout('embedded'); echo $OUTPUT->header(); $playurl = urldecode($url); + +echo html_writer::tag('h2', get_string('preview', 'local_kaltura')); ?> -

    Preview

    \ No newline at end of file diff --git a/lib/editor/atto/plugins/kalturamedia/yui/build/moodle-atto_kalturamedia-button/moodle-atto_kalturamedia-button-debug.js b/lib/editor/atto/plugins/kalturamedia/yui/build/moodle-atto_kalturamedia-button/moodle-atto_kalturamedia-button-debug.js index f8db21e362cf9..578c3c61551f7 100644 --- a/lib/editor/atto/plugins/kalturamedia/yui/build/moodle-atto_kalturamedia-button/moodle-atto_kalturamedia-button-debug.js +++ b/lib/editor/atto/plugins/kalturamedia/yui/build/moodle-atto_kalturamedia-button/moodle-atto_kalturamedia-button-debug.js @@ -45,7 +45,7 @@ var COMPONENTNAME = 'atto_kalturamedia', Y.namespace('M.atto_kalturamedia').Button = Y.Base.create('button', Y.M.editor_atto.EditorPlugin, [], { _currentSelection: null, - panel: null, + embedWindow: null, initializer: function() { this.addButton({ @@ -60,50 +60,25 @@ Y.namespace('M.atto_kalturamedia').Button = Y.Base.create('button', Y.M.editor_a return; } - var embedButton = "'); embedButton.setAttribute('id', 'KalturaMediaSubmit'); embedButton.setAttribute('disabled', 'disabled'); - embedButton.setHTML("Embed"); + embedButton.setHTML(""); embedButton.hide(); Y.one("#kalturaMediaSubmitButton").append(embedButton); function kaltura_atto_embed_callback(data) diff --git a/lib/editor/atto/plugins/kalturamedia/yui/build/moodle-atto_kalturamedia-button/moodle-atto_kalturamedia-button-debug.js b/lib/editor/atto/plugins/kalturamedia/yui/build/moodle-atto_kalturamedia-button/moodle-atto_kalturamedia-button-debug.js index 578c3c61551f7..5527bb5d3a07d 100644 --- a/lib/editor/atto/plugins/kalturamedia/yui/build/moodle-atto_kalturamedia-button/moodle-atto_kalturamedia-button-debug.js +++ b/lib/editor/atto/plugins/kalturamedia/yui/build/moodle-atto_kalturamedia-button/moodle-atto_kalturamedia-button-debug.js @@ -70,7 +70,7 @@ Y.namespace('M.atto_kalturamedia').Button = Y.Base.create('button', Y.M.editor_a var left = ((width / 2) - (w / 2)) + dualScreenLeft; var top = ((height / 2) - (h / 2)) + dualScreenTop; - var newWindow = window.open(this._getIframeURL(), "Browse and Embed", 'scrollbars=no, width=' + w + ', height=' + h + ', top=' + top + ', left=' + left); + var newWindow = window.open(this._getIframeURL(), M.util.get_string("browse_and_embed", COMPONENTNAME), 'scrollbars=no, width=' + w + ', height=' + h + ', top=' + top + ', left=' + left); newWindow.buttonJs = this; diff --git a/lib/editor/atto/plugins/kalturamedia/yui/build/moodle-atto_kalturamedia-button/moodle-atto_kalturamedia-button-min.js b/lib/editor/atto/plugins/kalturamedia/yui/build/moodle-atto_kalturamedia-button/moodle-atto_kalturamedia-button-min.js index 437c27da3ae14..733bc9195c297 100644 --- a/lib/editor/atto/plugins/kalturamedia/yui/build/moodle-atto_kalturamedia-button/moodle-atto_kalturamedia-button-min.js +++ b/lib/editor/atto/plugins/kalturamedia/yui/build/moodle-atto_kalturamedia-button/moodle-atto_kalturamedia-button-min.js @@ -1 +1 @@ -YUI.add("moodle-atto_kalturamedia-button",function(e,t){var n={URLINPUT:"atto_kalturamedia_urlentry",NAMEINPUT:"atto_kalturamedia_nameentry"};({URLINPUT:"."+n.URLINPUT,NAMEINPUT:"."+n.NAMEINPUT});e.namespace("M.atto_kalturamedia").Button=e.Base.create("button",e.M.editor_atto.EditorPlugin,[],{_currentSelection:null,embedWindow:null,initializer:function(){this.addButton({iconurl:M.cfg.wwwroot+"/lib/editor/atto/plugins/kalturamedia/pix/icon.png",callback:this._kalturamedia})},_kalturamedia:function(){if(this._currentSelection=this.get("host").getSelection(),this._currentSelection!==!1){var e=1200,t=700,i=void 0!=window.screenLeft?window.screenLeft:screen.left,n=void 0!=window.screenTop?window.screenTop:screen.top,o=window.innerWidth?window.innerWidth:document.documentElement.clientWidth?document.documentElement.clientWidth:screen.width,r=window.innerHeight?window.innerHeight:document.documentElement.clientHeight?document.documentElement.clientHeight:screen.height,a=o/2-e/2+i,d=r/2-t/2+n,l=window.open(this._getIframeURL(),"Browse and Embed","scrollbars=no, width="+e+", height="+t+", top="+d+", left="+a);l.buttonJs=this,window.focus&&l.focus(),this.embedWindow=l}},_getIframeURL:function(){var t=e.mix({elementid:this.get("host").get("elementid"),contextid:this.get("contextid"),height:"600px",width:"1112px"},this.get("area"));return M.cfg.wwwroot+"/lib/editor/atto/plugins/kalturamedia/ltibrowse_container.php?"+e.QueryString.stringify(t)},_getCourseId:function(){var e,t=document.getElementsByTagName("body")[0].className,n=t.split(" ");for(i in n)if(n[i].indexOf("course-")>-1){var o=n[i].split("-");e=o[1]}return e},_replaceKafUriWithToken:function(e,t,i){return e=this._removeProtocolFromUrl(e),t=this._removeProtocolFromUrl(t),e.replace(t,i)},_removeProtocolFromUrl:function(e){return e.replace(/^https?:\/\//,"")},embedItem:function(e,t){embedInfo={};for(param in t){var i=param.split("-");"embedinfo"==i[0]&&(embedInfo[i[1]]=t[param])}var n=this.get("kalturauritoken"),o=this.get("kafuri"),r=embedInfo.url,a=this._replaceKafUriWithToken(r,o,n),d=document.createElement("a");d.href=r,a+=d.search;var l='tinymce-kalturamedia-embed||'+embedInfo.title+"||"+embedInfo.width+"||"+embedInfo.height+"";host=this.get("host"),host.setSelection(this._currentSelection),host.insertContentAtFocusPoint(l),this.markUpdated(),this.embedWindow.close()}},{ATTRS:{contextid:{value:null},kalturauritoken:{value:null},kafuri:{value:null}}})},"@VERSION@",{requires:["moodle-editor_atto-plugin"]}); \ No newline at end of file +YUI.add("moodle-atto_kalturamedia-button",function(e,t){var n="atto_kalturamedia",o={URLINPUT:"atto_kalturamedia_urlentry",NAMEINPUT:"atto_kalturamedia_nameentry"};({URLINPUT:"."+o.URLINPUT,NAMEINPUT:"."+o.NAMEINPUT});e.namespace("M.atto_kalturamedia").Button=e.Base.create("button",e.M.editor_atto.EditorPlugin,[],{_currentSelection:null,embedWindow:null,initializer:function(){this.addButton({iconurl:M.cfg.wwwroot+"/lib/editor/atto/plugins/kalturamedia/pix/icon.png",callback:this._kalturamedia})},_kalturamedia:function(){if(this._currentSelection=this.get("host").getSelection(),this._currentSelection!==!1){var e=1200,t=700,i=void 0!=window.screenLeft?window.screenLeft:screen.left,o=void 0!=window.screenTop?window.screenTop:screen.top,r=window.innerWidth?window.innerWidth:document.documentElement.clientWidth?document.documentElement.clientWidth:screen.width,a=window.innerHeight?window.innerHeight:document.documentElement.clientHeight?document.documentElement.clientHeight:screen.height,l=r/2-e/2+i,d=a/2-t/2+o,u=window.open(this._getIframeURL(),M.util.get_string("browse_and_embed",n),"scrollbars=no, width="+e+", height="+t+", top="+d+", left="+l);u.buttonJs=this,window.focus&&u.focus(),this.embedWindow=u}},_getIframeURL:function(){var t=e.mix({elementid:this.get("host").get("elementid"),contextid:this.get("contextid"),height:"600px",width:"1112px"},this.get("area"));return M.cfg.wwwroot+"/lib/editor/atto/plugins/kalturamedia/ltibrowse_container.php?"+e.QueryString.stringify(t)},_getCourseId:function(){var e,t=document.getElementsByTagName("body")[0].className,n=t.split(" ");for(i in n)if(n[i].indexOf("course-")>-1){var o=n[i].split("-");e=o[1]}return e},_replaceKafUriWithToken:function(e,t,i){return e=this._removeProtocolFromUrl(e),t=this._removeProtocolFromUrl(t),e.replace(t,i)},_removeProtocolFromUrl:function(e){return e.replace(/^https?:\/\//,"")},embedItem:function(e,t){embedInfo={};for(param in t){var i=param.split("-");"embedinfo"==i[0]&&(embedInfo[i[1]]=t[param])}var n=this.get("kalturauritoken"),o=this.get("kafuri"),r=embedInfo.url,a=this._replaceKafUriWithToken(r,o,n),l=document.createElement("a");l.href=r,a+=l.search;var d='tinymce-kalturamedia-embed||'+embedInfo.title+"||"+embedInfo.width+"||"+embedInfo.height+"";host=this.get("host"),host.setSelection(this._currentSelection),host.insertContentAtFocusPoint(d),this.markUpdated(),this.embedWindow.close()}},{ATTRS:{contextid:{value:null},kalturauritoken:{value:null},kafuri:{value:null}}})},"@VERSION@",{requires:["moodle-editor_atto-plugin"]}); \ No newline at end of file diff --git a/lib/editor/atto/plugins/kalturamedia/yui/build/moodle-atto_kalturamedia-button/moodle-atto_kalturamedia-button.js b/lib/editor/atto/plugins/kalturamedia/yui/build/moodle-atto_kalturamedia-button/moodle-atto_kalturamedia-button.js index 578c3c61551f7..5527bb5d3a07d 100644 --- a/lib/editor/atto/plugins/kalturamedia/yui/build/moodle-atto_kalturamedia-button/moodle-atto_kalturamedia-button.js +++ b/lib/editor/atto/plugins/kalturamedia/yui/build/moodle-atto_kalturamedia-button/moodle-atto_kalturamedia-button.js @@ -70,7 +70,7 @@ Y.namespace('M.atto_kalturamedia').Button = Y.Base.create('button', Y.M.editor_a var left = ((width / 2) - (w / 2)) + dualScreenLeft; var top = ((height / 2) - (h / 2)) + dualScreenTop; - var newWindow = window.open(this._getIframeURL(), "Browse and Embed", 'scrollbars=no, width=' + w + ', height=' + h + ', top=' + top + ', left=' + left); + var newWindow = window.open(this._getIframeURL(), M.util.get_string("browse_and_embed", COMPONENTNAME), 'scrollbars=no, width=' + w + ', height=' + h + ', top=' + top + ', left=' + left); newWindow.buttonJs = this; diff --git a/lib/editor/atto/plugins/kalturamedia/yui/src/button/js/button.js b/lib/editor/atto/plugins/kalturamedia/yui/src/button/js/button.js index fea39b6889cda..5527bb5d3a07d 100644 --- a/lib/editor/atto/plugins/kalturamedia/yui/src/button/js/button.js +++ b/lib/editor/atto/plugins/kalturamedia/yui/src/button/js/button.js @@ -70,7 +70,7 @@ Y.namespace('M.atto_kalturamedia').Button = Y.Base.create('button', Y.M.editor_a var left = ((width / 2) - (w / 2)) + dualScreenLeft; var top = ((height / 2) - (h / 2)) + dualScreenTop; - var newWindow = window.open(this._getIframeURL(), "Browse and Embed", 'scrollbars=no, width=' + w + ', height=' + h + ', top=' + top + ', left=' + left); + var newWindow = window.open(this._getIframeURL(), M.util.get_string("browse_and_embed", COMPONENTNAME), 'scrollbars=no, width=' + w + ', height=' + h + ', top=' + top + ', left=' + left); newWindow.buttonJs = this; @@ -178,3 +178,5 @@ Y.namespace('M.atto_kalturamedia').Button = Y.Base.create('button', Y.M.editor_a }, '@VERSION@', {"requires": ["moodle-editor_atto-plugin"]}); + + From f7aeb0d222c044b1f20d6ec84d39673524d7eef4 Mon Sep 17 00:00:00 2001 From: Muli Dayan Date: Tue, 29 Mar 2016 14:58:16 +0300 Subject: [PATCH 099/326] KMS-10965 fix translations - tinymce --- .../plugins/kalturamedia/lang/en/tinymce_kalturamedia.php | 1 + .../tinymce/plugins/kalturamedia/tinymce/editor_plugin.js | 2 +- lib/editor/tinymce/plugins/kalturamedia/tinymce/renderer.php | 2 +- 3 files changed, 3 insertions(+), 2 deletions(-) diff --git a/lib/editor/tinymce/plugins/kalturamedia/lang/en/tinymce_kalturamedia.php b/lib/editor/tinymce/plugins/kalturamedia/lang/en/tinymce_kalturamedia.php index b2f2b7d51943f..bfcf1ebc93665 100644 --- a/lib/editor/tinymce/plugins/kalturamedia/lang/en/tinymce_kalturamedia.php +++ b/lib/editor/tinymce/plugins/kalturamedia/lang/en/tinymce_kalturamedia.php @@ -26,3 +26,4 @@ $string['kalturamedia:desc'] = 'Embed Kaltura Media'; $string['kalturamedia:insertbtn'] = 'Insert media'; $string['kalturamedia:cancelbtn'] = 'Cancel'; +$string['kalturamedia:bse'] = 'Browse and Embed'; diff --git a/lib/editor/tinymce/plugins/kalturamedia/tinymce/editor_plugin.js b/lib/editor/tinymce/plugins/kalturamedia/tinymce/editor_plugin.js index 61998f2d29412..4f657586aa44f 100644 --- a/lib/editor/tinymce/plugins/kalturamedia/tinymce/editor_plugin.js +++ b/lib/editor/tinymce/plugins/kalturamedia/tinymce/editor_plugin.js @@ -50,7 +50,7 @@ var left = ((width / 2) - (w / 2)) + dualScreenLeft; var top = ((height / 2) - (h / 2)) + dualScreenTop; - var newWindow = window.open(ltiUrl, "Browse and Embed", 'scrollbars=no, width=' + w + ', height=' + h + ', top=' + top + ', left=' + left); + var newWindow = window.open(ltiUrl, tinyMCE.activeEditor.getLang('kalturamedia.bse', "Browse and Embed"), 'scrollbars=no, width=' + w + ', height=' + h + ', top=' + top + ', left=' + left); if (window.focus) { newWindow.focus(); diff --git a/lib/editor/tinymce/plugins/kalturamedia/tinymce/renderer.php b/lib/editor/tinymce/plugins/kalturamedia/tinymce/renderer.php index 7b9354af7b02f..d4747c358c4f6 100644 --- a/lib/editor/tinymce/plugins/kalturamedia/tinymce/renderer.php +++ b/lib/editor/tinymce/plugins/kalturamedia/tinymce/renderer.php @@ -69,7 +69,7 @@ function tinymce_kalturamedia_preview_embed_form() { 'name' => 'cancel', // Using the language string from the local plug-in. TODO: figure out how to access the TinyMCE language strings. 'value' => get_string('cancelbtn', 'local_kaltura'), - 'onclick' => 'ed.myPanel.destroy();' + 'onclick' => 'ed.newWindow.close();' ); $cancelbutton = html_writer::empty_tag('input', $param); $cancelbuttondiv = html_writer::tag('div', $cancelbutton, array('style' => 'float: right')); From 357a7daa6af248ceee890446674db8f1b3af54ae Mon Sep 17 00:00:00 2001 From: Muli Dayan Date: Tue, 29 Mar 2016 15:08:16 +0300 Subject: [PATCH 100/326] KMS-10965 increment version --- filter/kaltura/version.php | 6 +++--- lib/editor/atto/plugins/kalturamedia/version.php | 6 +++--- lib/editor/tinymce/plugins/kalturamedia/version.php | 6 +++--- local/kaltura/db/upgrade.php | 6 +++--- local/kaltura/version.php | 4 ++-- local/kalturamediagallery/version.php | 6 +++--- local/mymedia/version.php | 6 +++--- mod/kalvidassign/version.php | 6 +++--- mod/kalvidpres/version.php | 6 +++--- mod/kalvidres/version.php | 6 +++--- 10 files changed, 29 insertions(+), 29 deletions(-) diff --git a/filter/kaltura/version.php b/filter/kaltura/version.php index ee93988686656..2cab3d5ec0056 100644 --- a/filter/kaltura/version.php +++ b/filter/kaltura/version.php @@ -24,11 +24,11 @@ */ defined('MOODLE_INTERNAL') || die(); -$plugin->version = 2015120930; //version date YYYYMMDDXX 10 represent 3.0 for future option to moodle use 2 digit version +$plugin->version = 2016032930; //version date YYYYMMDDXX 10 represent 3.0 for future option to moodle use 2 digit version $plugin->component = 'filter_kaltura'; -$plugin->release = 'Kaltura release 4.0.08'; +$plugin->release = 'Kaltura release 4.0.09'; $plugin->requires = 2014050800; $plugin->maturity = MATURITY_STABLE; $plugin->dependencies = array( - 'local_kaltura' => 2015120930 + 'local_kaltura' => 2016032930 ); diff --git a/lib/editor/atto/plugins/kalturamedia/version.php b/lib/editor/atto/plugins/kalturamedia/version.php index 1184081ac5d1a..a32645125dc16 100644 --- a/lib/editor/atto/plugins/kalturamedia/version.php +++ b/lib/editor/atto/plugins/kalturamedia/version.php @@ -24,10 +24,10 @@ defined('MOODLE_INTERNAL') || die(); -$plugin->version = 2015120930; // The current plugin version (Date: YYYYMMDDXX). -$plugin->release = 'Kaltura release 4.0.08'; +$plugin->version = 2016032930; // The current plugin version (Date: YYYYMMDDXX). +$plugin->release = 'Kaltura release 4.0.09'; $plugin->requires = 2014050800; // Requires this Moodle version. $plugin->component = 'atto_kalturamedia'; // Full name of the plugin (used for diagnostics). $plugin->dependencies = array( - 'local_kaltura' => 2015120930 + 'local_kaltura' => 2016032930 ); diff --git a/lib/editor/tinymce/plugins/kalturamedia/version.php b/lib/editor/tinymce/plugins/kalturamedia/version.php index 6b1702bb0751d..9f809766131de 100644 --- a/lib/editor/tinymce/plugins/kalturamedia/version.php +++ b/lib/editor/tinymce/plugins/kalturamedia/version.php @@ -23,12 +23,12 @@ defined('MOODLE_INTERNAL') || die(); -$plugin->version = 2015120930; -$plugin->release = 'Kaltura release 4.0.08'; +$plugin->version = 2016032930; +$plugin->release = 'Kaltura release 4.0.09'; // Required Moodle version. $plugin->requires = 2014050800; // Full name of the plugin (used for diagnostics). $plugin->component = 'tinymce_kalturamedia'; $plugin->dependencies = array( - 'local_kaltura' => 2015120930 + 'local_kaltura' => 2016032930 ); diff --git a/local/kaltura/db/upgrade.php b/local/kaltura/db/upgrade.php index 3a5b9e55b0b76..12eba24aed854 100644 --- a/local/kaltura/db/upgrade.php +++ b/local/kaltura/db/upgrade.php @@ -59,13 +59,13 @@ function xmldb_local_kaltura_upgrade($oldversion) { } // Kaltura savepoint reached. - upgrade_plugin_savepoint(true, 2015120930, 'local', 'kaltura'); + upgrade_plugin_savepoint(true, 2016032930, 'local', 'kaltura'); $savePointDone = true; } - if (!$savePointDone && $oldversion < 2015120930) { + if (!$savePointDone && $oldversion < 2016032930) { // Kaltura savepoint reached. - upgrade_plugin_savepoint(true, 2015120930, 'local', 'kaltura'); + upgrade_plugin_savepoint(true, 2016032930, 'local', 'kaltura'); } return true; } diff --git a/local/kaltura/version.php b/local/kaltura/version.php index fdca221ce0191..7089da41aa5b4 100644 --- a/local/kaltura/version.php +++ b/local/kaltura/version.php @@ -25,8 +25,8 @@ die('Direct access to this script is forbidden.'); } -$plugin->version = 2015120930; +$plugin->version = 2016032930; $plugin->component = 'local_kaltura'; -$plugin->release = 'Kaltura release 4.0.08'; +$plugin->release = 'Kaltura release 4.0.09'; $plugin->requires = 2014050800; $plugin->maturity = MATURITY_STABLE; diff --git a/local/kalturamediagallery/version.php b/local/kalturamediagallery/version.php index 640c9d92f3e4c..fd5cd45c9a015 100644 --- a/local/kalturamediagallery/version.php +++ b/local/kalturamediagallery/version.php @@ -26,11 +26,11 @@ die('Direct access to this script is forbidden.'); } -$plugin->version = 2015120930; +$plugin->version = 2016032930; $plugin->component = 'local_kalturamediagallery'; -$plugin->release = 'Kaltura release 4.0.08'; +$plugin->release = 'Kaltura release 4.0.09'; $plugin->requires = 2014050800; $plugin->maturity = MATURITY_STABLE; $plugin->dependencies = array( - 'local_kaltura' => 2015120930 + 'local_kaltura' => 2016032930 ); diff --git a/local/mymedia/version.php b/local/mymedia/version.php index 6f1c04e60d099..d48ecd174c594 100644 --- a/local/mymedia/version.php +++ b/local/mymedia/version.php @@ -25,11 +25,11 @@ die('Direct access to this script is forbidden.'); } -$plugin->version = 2015120930; +$plugin->version = 2016032930; $plugin->component = 'local_mymedia'; -$plugin->release = 'Kaltura release 4.0.08'; +$plugin->release = 'Kaltura release 4.0.09'; $plugin->requires = 2014050800; $plugin->maturity = MATURITY_STABLE; $plugin->dependencies = array( - 'local_kaltura' => 2015120930 + 'local_kaltura' => 2016032930 ); diff --git a/mod/kalvidassign/version.php b/mod/kalvidassign/version.php index 4634ada6cb71d..e3af9c81fc5fd 100644 --- a/mod/kalvidassign/version.php +++ b/mod/kalvidassign/version.php @@ -25,12 +25,12 @@ die('Direct access to this script is forbidden.'); } -$plugin->version = 2015120930; +$plugin->version = 2016032930; $plugin->component = 'mod_kalvidassign'; -$plugin->release = 'Kaltura release 4.0.08'; +$plugin->release = 'Kaltura release 4.0.09'; $plugin->requires = 2014050800; $plugin->cron = 0; $plugin->maturity = MATURITY_STABLE; $plugin->dependencies = array( - 'local_kaltura' => 2015120930, + 'local_kaltura' => 2016032930, ); diff --git a/mod/kalvidpres/version.php b/mod/kalvidpres/version.php index d3fccca26c2a9..b14362ac4cc8f 100644 --- a/mod/kalvidpres/version.php +++ b/mod/kalvidpres/version.php @@ -25,12 +25,12 @@ die('Direct access to this script is forbidden.'); } -$plugin->version = 2015120930; +$plugin->version = 2016032930; $plugin->component = 'mod_kalvidpres'; -$plugin->release = 'Kaltura release 4.0.08'; +$plugin->release = 'Kaltura release 4.0.09'; $plugin->requires = 2014050800; $plugin->cron = 0; $plugin->maturity = MATURITY_STABLE; $plugin->dependencies = array( - 'local_kaltura' => 2015120930 + 'local_kaltura' => 2016032930 ); diff --git a/mod/kalvidres/version.php b/mod/kalvidres/version.php index 8d489026cf1cf..18ca035e3b971 100644 --- a/mod/kalvidres/version.php +++ b/mod/kalvidres/version.php @@ -25,12 +25,12 @@ die('Direct access to this script is forbidden.'); } -$plugin->version = 2015120930; +$plugin->version = 2016032930; $plugin->component = 'mod_kalvidres'; -$plugin->release = 'Kaltura release 4.0.08'; +$plugin->release = 'Kaltura release 4.0.09'; $plugin->requires = 2014050800; $plugin->cron = 0; $plugin->maturity = MATURITY_STABLE; $plugin->dependencies = array( - 'local_kaltura' => 2015120930 + 'local_kaltura' => 2016032930 ); From 62dd59b5e4955b7f125ad90fe5dcd9a55b66a61c Mon Sep 17 00:00:00 2001 From: Omri Katz Date: Mon, 2 May 2016 13:45:27 +0300 Subject: [PATCH 101/326] SUP-8116 change submission feedback even if no grade was provided --- mod/kalvidassign/single_submission.php | 15 +++++++-------- 1 file changed, 7 insertions(+), 8 deletions(-) diff --git a/mod/kalvidassign/single_submission.php b/mod/kalvidassign/single_submission.php index 95097c3250f21..df13ef47be4e8 100644 --- a/mod/kalvidassign/single_submission.php +++ b/mod/kalvidassign/single_submission.php @@ -141,17 +141,16 @@ $submissionchanged = strcmp($submission->submissioncomment, $submitted_data->submissioncomment_editor['text']); if ($submission->grade == $submitted_data->xgrade && $submissionchanged) { - $updategrade = false; - } else { - $submission->grade = $submitted_data->xgrade; - $submission->submissioncomment = $submitted_data->submissioncomment_editor['text']; - $submission->format = $submitted_data->submissioncomment_editor['format']; - $submission->timemarked = time(); - $submission->teacher = $USER->id; + } + if ($submissionchanged || $updategrade) { + $submission->grade = $submitted_data->xgrade; + $submission->submissioncomment = $submitted_data->submissioncomment_editor['text']; + $submission->format = $submitted_data->submissioncomment_editor['format']; + $submission->timemarked = time(); + $submission->teacher = $USER->id; $DB->update_record('kalvidassign_submission', $submission); } - } else { // Check for unchanged values From fc22a1f141aaf5499c1abcb6b49a653deac20295 Mon Sep 17 00:00:00 2001 From: Muli Dayan Date: Wed, 25 May 2016 12:49:03 +0300 Subject: [PATCH 102/326] KMS-11337 send all standard lti params --- local/kaltura/locallib.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/local/kaltura/locallib.php b/local/kaltura/locallib.php index 7f833dc7e6399..f9cd3ff0751fa 100644 --- a/local/kaltura/locallib.php +++ b/local/kaltura/locallib.php @@ -362,7 +362,7 @@ function local_kaltura_request_lti_launch($ltirequest, $withblocks = true, $edit $endpoint = $lti->securetool; } - $requestparams = lti_build_request((object) $lti, $typeconfig, $ltirequest['course']); + $requestparams = array_merge(lti_build_standard_request((object) $lti, null, false), lti_build_request((object) $lti, $typeconfig, $ltirequest['course'])); if(!isset($requestparams['resource_link_id'])) // fix to moodle 2.8 issue where this function (lti_build_request) does not set resource_link_id value { $requestparams['resource_link_id'] = $lti->id; From a82cbd18959b71f4cf42b8a6b56adcddd69e8ade Mon Sep 17 00:00:00 2001 From: Muli Dayan Date: Thu, 26 May 2016 10:51:10 +0300 Subject: [PATCH 103/326] KMS-4100 add lti launch for preview pages --- local/kaltura/bsepreview_ltilaunch.php | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) create mode 100644 local/kaltura/bsepreview_ltilaunch.php diff --git a/local/kaltura/bsepreview_ltilaunch.php b/local/kaltura/bsepreview_ltilaunch.php new file mode 100644 index 0000000000000..1456031265638 --- /dev/null +++ b/local/kaltura/bsepreview_ltilaunch.php @@ -0,0 +1,23 @@ +dirroot.'/local/kaltura/locallib.php'); + +require_login(); + +global $PAGE; + +$playurl = required_param('playurl', PARAM_URL); + +$launch = array(); +$launch['id'] = 1; +$launch['cmid'] = 0; +$launch['title'] = 'Browse and Embed - Preview Entry'; +$launch['module'] = KAF_BROWSE_EMBED_MODULE; +$launch['course'] = $PAGE->course; +$launch['width'] = '300'; +$launch['height'] = '300'; +$launch['custom_publishdata'] = ''; +$launch['source'] = $playurl; +echo local_kaltura_request_lti_launch($launch, false); + +?> \ No newline at end of file From f2a185ab9e0451f9c1e532a39cf775aced9aab23 Mon Sep 17 00:00:00 2001 From: Muli Dayan Date: Thu, 26 May 2016 10:52:12 +0300 Subject: [PATCH 104/326] KMS-4100 make atto use the new lti launcher --- local/kaltura/attobsepreview.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/local/kaltura/attobsepreview.php b/local/kaltura/attobsepreview.php index 5049919869348..d84960117969c 100644 --- a/local/kaltura/attobsepreview.php +++ b/local/kaltura/attobsepreview.php @@ -39,7 +39,7 @@ }; parent.kaltura_atto_embed_callback(data); var iframe = Y.Node.create(''); - iframe.setAttribute('src', ''); + iframe.setAttribute('src', ''); iframe.setAttribute('alt', ''); iframe.setStyles({ height: 'px', From 62c00a12bd7c60605fb07f4809af4f9d0ca12782 Mon Sep 17 00:00:00 2001 From: Muli Dayan Date: Thu, 26 May 2016 10:53:29 +0300 Subject: [PATCH 105/326] KMS-4100 make tinymce use the new lti launcher --- local/kaltura/service.php | 2 ++ local/kaltura/yui/src/ltiservice/js/ltiservice.js | 6 +++--- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/local/kaltura/service.php b/local/kaltura/service.php index ae4fb92a27709..24664df459940 100644 --- a/local/kaltura/service.php +++ b/local/kaltura/service.php @@ -90,6 +90,7 @@ $PAGE->set_url($serviceurl); $PAGE->set_context(context_system::instance()); +$previewltilaunchurl = new moodle_url('/local/kaltura/bsepreview_ltilaunch.php?playurl=' . urlencode($url)); $params = array( 'iframeurl' => urlencode($url), 'width' => $width, @@ -98,6 +99,7 @@ 'title' => $title, 'metadata' => $metadata, 'editor' => $editor, + 'previewltilauncher' => $previewltilaunchurl->out(), ); if($editor == 'atto') { diff --git a/local/kaltura/yui/src/ltiservice/js/ltiservice.js b/local/kaltura/yui/src/ltiservice/js/ltiservice.js index fcd3e01bade70..2e1a7ce6ca656 100644 --- a/local/kaltura/yui/src/ltiservice/js/ltiservice.js +++ b/local/kaltura/yui/src/ltiservice/js/ltiservice.js @@ -65,15 +65,15 @@ Y.extend(LTISERVICE, Y.Base, { } if (documentElement.getElementById('video_preview_frame')) { - Y.one(documentElement.getElementById('video_preview_frame')).setAttribute('src', decodeURIComponent(params.iframeurl)); + Y.one(documentElement.getElementById('video_preview_frame')).setAttribute('src', params.previewltilauncher); } else if (documentElement.getElementById('contentframe')) { - Y.one(documentElement.getElementById('contentframe')).setAttribute('src', decodeURIComponent(params.iframeurl)); + Y.one(documentElement.getElementById('contentframe')).setAttribute('src', params.previewltilauncher); Y.one(documentElement.getElementById('contentframe')).setStyle('width', params.width + 'px'); Y.one(documentElement.getElementById('contentframe')).setStyle('height', params.height + 'px'); } // This element must exist. - Y.one(documentElement.getElementById('source')).setAttribute('value', decodeURIComponent(params.iframeurl)); + Y.one(documentElement.getElementById('source')).setAttribute('value', params.previewltilauncher); if (documentElement.getElementById('metadata')) { Y.one(documentElement.getElementById('metadata')).setAttribute('value', params.metadata); From 639f2abb7540fab8926e0520390f8dd69df3eae7 Mon Sep 17 00:00:00 2001 From: Muli Dayan Date: Thu, 26 May 2016 10:53:55 +0300 Subject: [PATCH 106/326] KMS-4100 update YUI compiled files --- .../moodle-local_kaltura-ltiservice-debug.js | 6 +++--- .../moodle-local_kaltura-ltiservice-min.js | 2 +- .../moodle-local_kaltura-ltiservice.js | 6 +++--- 3 files changed, 7 insertions(+), 7 deletions(-) diff --git a/local/kaltura/yui/build/moodle-local_kaltura-ltiservice/moodle-local_kaltura-ltiservice-debug.js b/local/kaltura/yui/build/moodle-local_kaltura-ltiservice/moodle-local_kaltura-ltiservice-debug.js index fcd3e01bade70..2e1a7ce6ca656 100644 --- a/local/kaltura/yui/build/moodle-local_kaltura-ltiservice/moodle-local_kaltura-ltiservice-debug.js +++ b/local/kaltura/yui/build/moodle-local_kaltura-ltiservice/moodle-local_kaltura-ltiservice-debug.js @@ -65,15 +65,15 @@ Y.extend(LTISERVICE, Y.Base, { } if (documentElement.getElementById('video_preview_frame')) { - Y.one(documentElement.getElementById('video_preview_frame')).setAttribute('src', decodeURIComponent(params.iframeurl)); + Y.one(documentElement.getElementById('video_preview_frame')).setAttribute('src', params.previewltilauncher); } else if (documentElement.getElementById('contentframe')) { - Y.one(documentElement.getElementById('contentframe')).setAttribute('src', decodeURIComponent(params.iframeurl)); + Y.one(documentElement.getElementById('contentframe')).setAttribute('src', params.previewltilauncher); Y.one(documentElement.getElementById('contentframe')).setStyle('width', params.width + 'px'); Y.one(documentElement.getElementById('contentframe')).setStyle('height', params.height + 'px'); } // This element must exist. - Y.one(documentElement.getElementById('source')).setAttribute('value', decodeURIComponent(params.iframeurl)); + Y.one(documentElement.getElementById('source')).setAttribute('value', params.previewltilauncher); if (documentElement.getElementById('metadata')) { Y.one(documentElement.getElementById('metadata')).setAttribute('value', params.metadata); diff --git a/local/kaltura/yui/build/moodle-local_kaltura-ltiservice/moodle-local_kaltura-ltiservice-min.js b/local/kaltura/yui/build/moodle-local_kaltura-ltiservice/moodle-local_kaltura-ltiservice-min.js index 761e0ee674d0a..1b62a2a5a8e78 100644 --- a/local/kaltura/yui/build/moodle-local_kaltura-ltiservice/moodle-local_kaltura-ltiservice-min.js +++ b/local/kaltura/yui/build/moodle-local_kaltura-ltiservice/moodle-local_kaltura-ltiservice-min.js @@ -1 +1 @@ -YUI.add("moodle-local_kaltura-ltiservice",function(e,t){var n=function(){n.superclass.constructor.apply(this,arguments)};e.extend(n,e.Base,{init:function(t){var n=window.opener?window.opener.parent.document:window.parent.document;n.getElementById("video_title")&&e.one(n.getElementById("video_title")).setAttribute("value",t.title),n.getElementById("entry_id")&&e.one(n.getElementById("entry_id")).setAttribute("value",t.entryid),n.getElementById("height")&&e.one(n.getElementById("height")).setAttribute("value",t.height),n.getElementById("width")&&e.one(n.getElementById("width")).setAttribute("value",t.width),n.getElementById("uiconf_id")&&e.one(n.getElementById("uiconf_id")).setAttribute("value","1"),n.getElementById("widescreen")&&e.one(n.getElementById("widescreen")).setAttribute("value","1"),n.getElementById("video_preview_frame")?e.one(n.getElementById("video_preview_frame")).setAttribute("src",decodeURIComponent(t.iframeurl)):n.getElementById("contentframe")&&(e.one(n.getElementById("contentframe")).setAttribute("src",decodeURIComponent(t.iframeurl)),e.one(n.getElementById("contentframe")).setStyle("width",t.width+"px"),e.one(n.getElementById("contentframe")).setStyle("height",t.height+"px")),e.one(n.getElementById("source")).setAttribute("value",decodeURIComponent(t.iframeurl)),n.getElementById("metadata")&&e.one(n.getElementById("metadata")).setAttribute("value",t.metadata),n.getElementById("closeltipanel")&&e.one(n.getElementById("closeltipanel")).simulate("click"),n.body.dispatchEvent(n.body.myEvent)}},{NAME:"moodle-local_kaltura-ltiservice",ATTRS:{iframeurl:{value:""},width:{value:""},height:{value:""},entryid:{value:""},title:{value:""},metadata:{value:""}}}),M.local_kaltura=M.local_kaltura||{},M.local_kaltura.init=function(e){return new n(e)}},"@VERSION@",{requires:["base","node","node-event-simulate"]}); \ No newline at end of file +YUI.add("moodle-local_kaltura-ltiservice",function(e,t){var n=function(){n.superclass.constructor.apply(this,arguments)};e.extend(n,e.Base,{init:function(t){var n=window.opener?window.opener.parent.document:window.parent.document;n.getElementById("video_title")&&e.one(n.getElementById("video_title")).setAttribute("value",t.title),n.getElementById("entry_id")&&e.one(n.getElementById("entry_id")).setAttribute("value",t.entryid),n.getElementById("height")&&e.one(n.getElementById("height")).setAttribute("value",t.height),n.getElementById("width")&&e.one(n.getElementById("width")).setAttribute("value",t.width),n.getElementById("uiconf_id")&&e.one(n.getElementById("uiconf_id")).setAttribute("value","1"),n.getElementById("widescreen")&&e.one(n.getElementById("widescreen")).setAttribute("value","1"),n.getElementById("video_preview_frame")?e.one(n.getElementById("video_preview_frame")).setAttribute("src",t.previewltilauncher):n.getElementById("contentframe")&&(e.one(n.getElementById("contentframe")).setAttribute("src",t.previewltilauncher),e.one(n.getElementById("contentframe")).setStyle("width",t.width+"px"),e.one(n.getElementById("contentframe")).setStyle("height",t.height+"px")),e.one(n.getElementById("source")).setAttribute("value",t.previewltilauncher),n.getElementById("metadata")&&e.one(n.getElementById("metadata")).setAttribute("value",t.metadata),n.getElementById("closeltipanel")&&e.one(n.getElementById("closeltipanel")).simulate("click"),n.body.dispatchEvent(n.body.myEvent)}},{NAME:"moodle-local_kaltura-ltiservice",ATTRS:{iframeurl:{value:""},width:{value:""},height:{value:""},entryid:{value:""},title:{value:""},metadata:{value:""}}}),M.local_kaltura=M.local_kaltura||{},M.local_kaltura.init=function(e){return new n(e)}},"@VERSION@",{requires:["base","node","node-event-simulate"]}); \ No newline at end of file diff --git a/local/kaltura/yui/build/moodle-local_kaltura-ltiservice/moodle-local_kaltura-ltiservice.js b/local/kaltura/yui/build/moodle-local_kaltura-ltiservice/moodle-local_kaltura-ltiservice.js index fcd3e01bade70..2e1a7ce6ca656 100644 --- a/local/kaltura/yui/build/moodle-local_kaltura-ltiservice/moodle-local_kaltura-ltiservice.js +++ b/local/kaltura/yui/build/moodle-local_kaltura-ltiservice/moodle-local_kaltura-ltiservice.js @@ -65,15 +65,15 @@ Y.extend(LTISERVICE, Y.Base, { } if (documentElement.getElementById('video_preview_frame')) { - Y.one(documentElement.getElementById('video_preview_frame')).setAttribute('src', decodeURIComponent(params.iframeurl)); + Y.one(documentElement.getElementById('video_preview_frame')).setAttribute('src', params.previewltilauncher); } else if (documentElement.getElementById('contentframe')) { - Y.one(documentElement.getElementById('contentframe')).setAttribute('src', decodeURIComponent(params.iframeurl)); + Y.one(documentElement.getElementById('contentframe')).setAttribute('src', params.previewltilauncher); Y.one(documentElement.getElementById('contentframe')).setStyle('width', params.width + 'px'); Y.one(documentElement.getElementById('contentframe')).setStyle('height', params.height + 'px'); } // This element must exist. - Y.one(documentElement.getElementById('source')).setAttribute('value', decodeURIComponent(params.iframeurl)); + Y.one(documentElement.getElementById('source')).setAttribute('value', params.previewltilauncher); if (documentElement.getElementById('metadata')) { Y.one(documentElement.getElementById('metadata')).setAttribute('value', params.metadata); From 9d5661905df99612fbf5025d8a2acae52aee8c67 Mon Sep 17 00:00:00 2001 From: Muli Dayan Date: Thu, 26 May 2016 11:45:52 +0300 Subject: [PATCH 107/326] KMS-4100 make sure we're launching lti only in tiny mce's preview page --- .../moodle-local_kaltura-ltiservice-debug.js | 4 ++-- .../moodle-local_kaltura-ltiservice-min.js | 2 +- .../moodle-local_kaltura-ltiservice.js | 4 ++-- local/kaltura/yui/src/ltiservice/js/ltiservice.js | 4 ++-- 4 files changed, 7 insertions(+), 7 deletions(-) diff --git a/local/kaltura/yui/build/moodle-local_kaltura-ltiservice/moodle-local_kaltura-ltiservice-debug.js b/local/kaltura/yui/build/moodle-local_kaltura-ltiservice/moodle-local_kaltura-ltiservice-debug.js index 2e1a7ce6ca656..b950f1d5f184b 100644 --- a/local/kaltura/yui/build/moodle-local_kaltura-ltiservice/moodle-local_kaltura-ltiservice-debug.js +++ b/local/kaltura/yui/build/moodle-local_kaltura-ltiservice/moodle-local_kaltura-ltiservice-debug.js @@ -67,13 +67,13 @@ Y.extend(LTISERVICE, Y.Base, { if (documentElement.getElementById('video_preview_frame')) { Y.one(documentElement.getElementById('video_preview_frame')).setAttribute('src', params.previewltilauncher); } else if (documentElement.getElementById('contentframe')) { - Y.one(documentElement.getElementById('contentframe')).setAttribute('src', params.previewltilauncher); + Y.one(documentElement.getElementById('contentframe')).setAttribute('src', decodeURIComponent(params.iframeurl)); Y.one(documentElement.getElementById('contentframe')).setStyle('width', params.width + 'px'); Y.one(documentElement.getElementById('contentframe')).setStyle('height', params.height + 'px'); } // This element must exist. - Y.one(documentElement.getElementById('source')).setAttribute('value', params.previewltilauncher); + Y.one(documentElement.getElementById('source')).setAttribute('value', decodeURIComponent(params.iframeurl)); if (documentElement.getElementById('metadata')) { Y.one(documentElement.getElementById('metadata')).setAttribute('value', params.metadata); diff --git a/local/kaltura/yui/build/moodle-local_kaltura-ltiservice/moodle-local_kaltura-ltiservice-min.js b/local/kaltura/yui/build/moodle-local_kaltura-ltiservice/moodle-local_kaltura-ltiservice-min.js index 1b62a2a5a8e78..7ea40ce5f2abb 100644 --- a/local/kaltura/yui/build/moodle-local_kaltura-ltiservice/moodle-local_kaltura-ltiservice-min.js +++ b/local/kaltura/yui/build/moodle-local_kaltura-ltiservice/moodle-local_kaltura-ltiservice-min.js @@ -1 +1 @@ -YUI.add("moodle-local_kaltura-ltiservice",function(e,t){var n=function(){n.superclass.constructor.apply(this,arguments)};e.extend(n,e.Base,{init:function(t){var n=window.opener?window.opener.parent.document:window.parent.document;n.getElementById("video_title")&&e.one(n.getElementById("video_title")).setAttribute("value",t.title),n.getElementById("entry_id")&&e.one(n.getElementById("entry_id")).setAttribute("value",t.entryid),n.getElementById("height")&&e.one(n.getElementById("height")).setAttribute("value",t.height),n.getElementById("width")&&e.one(n.getElementById("width")).setAttribute("value",t.width),n.getElementById("uiconf_id")&&e.one(n.getElementById("uiconf_id")).setAttribute("value","1"),n.getElementById("widescreen")&&e.one(n.getElementById("widescreen")).setAttribute("value","1"),n.getElementById("video_preview_frame")?e.one(n.getElementById("video_preview_frame")).setAttribute("src",t.previewltilauncher):n.getElementById("contentframe")&&(e.one(n.getElementById("contentframe")).setAttribute("src",t.previewltilauncher),e.one(n.getElementById("contentframe")).setStyle("width",t.width+"px"),e.one(n.getElementById("contentframe")).setStyle("height",t.height+"px")),e.one(n.getElementById("source")).setAttribute("value",t.previewltilauncher),n.getElementById("metadata")&&e.one(n.getElementById("metadata")).setAttribute("value",t.metadata),n.getElementById("closeltipanel")&&e.one(n.getElementById("closeltipanel")).simulate("click"),n.body.dispatchEvent(n.body.myEvent)}},{NAME:"moodle-local_kaltura-ltiservice",ATTRS:{iframeurl:{value:""},width:{value:""},height:{value:""},entryid:{value:""},title:{value:""},metadata:{value:""}}}),M.local_kaltura=M.local_kaltura||{},M.local_kaltura.init=function(e){return new n(e)}},"@VERSION@",{requires:["base","node","node-event-simulate"]}); \ No newline at end of file +YUI.add("moodle-local_kaltura-ltiservice",function(e,t){var n=function(){n.superclass.constructor.apply(this,arguments)};e.extend(n,e.Base,{init:function(t){var n=window.opener?window.opener.parent.document:window.parent.document;n.getElementById("video_title")&&e.one(n.getElementById("video_title")).setAttribute("value",t.title),n.getElementById("entry_id")&&e.one(n.getElementById("entry_id")).setAttribute("value",t.entryid),n.getElementById("height")&&e.one(n.getElementById("height")).setAttribute("value",t.height),n.getElementById("width")&&e.one(n.getElementById("width")).setAttribute("value",t.width),n.getElementById("uiconf_id")&&e.one(n.getElementById("uiconf_id")).setAttribute("value","1"),n.getElementById("widescreen")&&e.one(n.getElementById("widescreen")).setAttribute("value","1"),n.getElementById("video_preview_frame")?e.one(n.getElementById("video_preview_frame")).setAttribute("src",t.previewltilauncher):n.getElementById("contentframe")&&(e.one(n.getElementById("contentframe")).setAttribute("src",decodeURIComponent(t.iframeurl)),e.one(n.getElementById("contentframe")).setStyle("width",t.width+"px"),e.one(n.getElementById("contentframe")).setStyle("height",t.height+"px")),e.one(n.getElementById("source")).setAttribute("value",decodeURIComponent(t.iframeurl)),n.getElementById("metadata")&&e.one(n.getElementById("metadata")).setAttribute("value",t.metadata),n.getElementById("closeltipanel")&&e.one(n.getElementById("closeltipanel")).simulate("click"),n.body.dispatchEvent(n.body.myEvent)}},{NAME:"moodle-local_kaltura-ltiservice",ATTRS:{iframeurl:{value:""},width:{value:""},height:{value:""},entryid:{value:""},title:{value:""},metadata:{value:""}}}),M.local_kaltura=M.local_kaltura||{},M.local_kaltura.init=function(e){return new n(e)}},"@VERSION@",{requires:["base","node","node-event-simulate"]}); \ No newline at end of file diff --git a/local/kaltura/yui/build/moodle-local_kaltura-ltiservice/moodle-local_kaltura-ltiservice.js b/local/kaltura/yui/build/moodle-local_kaltura-ltiservice/moodle-local_kaltura-ltiservice.js index 2e1a7ce6ca656..b950f1d5f184b 100644 --- a/local/kaltura/yui/build/moodle-local_kaltura-ltiservice/moodle-local_kaltura-ltiservice.js +++ b/local/kaltura/yui/build/moodle-local_kaltura-ltiservice/moodle-local_kaltura-ltiservice.js @@ -67,13 +67,13 @@ Y.extend(LTISERVICE, Y.Base, { if (documentElement.getElementById('video_preview_frame')) { Y.one(documentElement.getElementById('video_preview_frame')).setAttribute('src', params.previewltilauncher); } else if (documentElement.getElementById('contentframe')) { - Y.one(documentElement.getElementById('contentframe')).setAttribute('src', params.previewltilauncher); + Y.one(documentElement.getElementById('contentframe')).setAttribute('src', decodeURIComponent(params.iframeurl)); Y.one(documentElement.getElementById('contentframe')).setStyle('width', params.width + 'px'); Y.one(documentElement.getElementById('contentframe')).setStyle('height', params.height + 'px'); } // This element must exist. - Y.one(documentElement.getElementById('source')).setAttribute('value', params.previewltilauncher); + Y.one(documentElement.getElementById('source')).setAttribute('value', decodeURIComponent(params.iframeurl)); if (documentElement.getElementById('metadata')) { Y.one(documentElement.getElementById('metadata')).setAttribute('value', params.metadata); diff --git a/local/kaltura/yui/src/ltiservice/js/ltiservice.js b/local/kaltura/yui/src/ltiservice/js/ltiservice.js index 2e1a7ce6ca656..b950f1d5f184b 100644 --- a/local/kaltura/yui/src/ltiservice/js/ltiservice.js +++ b/local/kaltura/yui/src/ltiservice/js/ltiservice.js @@ -67,13 +67,13 @@ Y.extend(LTISERVICE, Y.Base, { if (documentElement.getElementById('video_preview_frame')) { Y.one(documentElement.getElementById('video_preview_frame')).setAttribute('src', params.previewltilauncher); } else if (documentElement.getElementById('contentframe')) { - Y.one(documentElement.getElementById('contentframe')).setAttribute('src', params.previewltilauncher); + Y.one(documentElement.getElementById('contentframe')).setAttribute('src', decodeURIComponent(params.iframeurl)); Y.one(documentElement.getElementById('contentframe')).setStyle('width', params.width + 'px'); Y.one(documentElement.getElementById('contentframe')).setStyle('height', params.height + 'px'); } // This element must exist. - Y.one(documentElement.getElementById('source')).setAttribute('value', params.previewltilauncher); + Y.one(documentElement.getElementById('source')).setAttribute('value', decodeURIComponent(params.iframeurl)); if (documentElement.getElementById('metadata')) { Y.one(documentElement.getElementById('metadata')).setAttribute('value', params.metadata); From 6dfe3e6f1481af934830e135bfbcd9b8bf9f86ba Mon Sep 17 00:00:00 2001 From: Muli Dayan Date: Thu, 26 May 2016 12:09:44 +0300 Subject: [PATCH 108/326] KMS-4100 source parameter should depend on whether we are previewing a video or watching it --- .../moodle-local_kaltura-ltiservice-debug.js | 8 +++++--- .../moodle-local_kaltura-ltiservice-min.js | 2 +- .../moodle-local_kaltura-ltiservice.js | 8 +++++--- local/kaltura/yui/src/ltiservice/js/ltiservice.js | 8 +++++--- 4 files changed, 16 insertions(+), 10 deletions(-) diff --git a/local/kaltura/yui/build/moodle-local_kaltura-ltiservice/moodle-local_kaltura-ltiservice-debug.js b/local/kaltura/yui/build/moodle-local_kaltura-ltiservice/moodle-local_kaltura-ltiservice-debug.js index b950f1d5f184b..988c8faf6dbd3 100644 --- a/local/kaltura/yui/build/moodle-local_kaltura-ltiservice/moodle-local_kaltura-ltiservice-debug.js +++ b/local/kaltura/yui/build/moodle-local_kaltura-ltiservice/moodle-local_kaltura-ltiservice-debug.js @@ -64,16 +64,18 @@ Y.extend(LTISERVICE, Y.Base, { Y.one(documentElement.getElementById('widescreen')).setAttribute('value', '1'); } + var sourceUrl = decodeURIComponent(params.iframeurl); if (documentElement.getElementById('video_preview_frame')) { - Y.one(documentElement.getElementById('video_preview_frame')).setAttribute('src', params.previewltilauncher); + sourceUrl = params.previewltilauncher; + Y.one(documentElement.getElementById('video_preview_frame')).setAttribute('src', sourceUrl); } else if (documentElement.getElementById('contentframe')) { - Y.one(documentElement.getElementById('contentframe')).setAttribute('src', decodeURIComponent(params.iframeurl)); + Y.one(documentElement.getElementById('contentframe')).setAttribute('src', sourceUrl); Y.one(documentElement.getElementById('contentframe')).setStyle('width', params.width + 'px'); Y.one(documentElement.getElementById('contentframe')).setStyle('height', params.height + 'px'); } // This element must exist. - Y.one(documentElement.getElementById('source')).setAttribute('value', decodeURIComponent(params.iframeurl)); + Y.one(documentElement.getElementById('source')).setAttribute('value', sourceUrl); if (documentElement.getElementById('metadata')) { Y.one(documentElement.getElementById('metadata')).setAttribute('value', params.metadata); diff --git a/local/kaltura/yui/build/moodle-local_kaltura-ltiservice/moodle-local_kaltura-ltiservice-min.js b/local/kaltura/yui/build/moodle-local_kaltura-ltiservice/moodle-local_kaltura-ltiservice-min.js index 7ea40ce5f2abb..0c6e86f1a8ca1 100644 --- a/local/kaltura/yui/build/moodle-local_kaltura-ltiservice/moodle-local_kaltura-ltiservice-min.js +++ b/local/kaltura/yui/build/moodle-local_kaltura-ltiservice/moodle-local_kaltura-ltiservice-min.js @@ -1 +1 @@ -YUI.add("moodle-local_kaltura-ltiservice",function(e,t){var n=function(){n.superclass.constructor.apply(this,arguments)};e.extend(n,e.Base,{init:function(t){var n=window.opener?window.opener.parent.document:window.parent.document;n.getElementById("video_title")&&e.one(n.getElementById("video_title")).setAttribute("value",t.title),n.getElementById("entry_id")&&e.one(n.getElementById("entry_id")).setAttribute("value",t.entryid),n.getElementById("height")&&e.one(n.getElementById("height")).setAttribute("value",t.height),n.getElementById("width")&&e.one(n.getElementById("width")).setAttribute("value",t.width),n.getElementById("uiconf_id")&&e.one(n.getElementById("uiconf_id")).setAttribute("value","1"),n.getElementById("widescreen")&&e.one(n.getElementById("widescreen")).setAttribute("value","1"),n.getElementById("video_preview_frame")?e.one(n.getElementById("video_preview_frame")).setAttribute("src",t.previewltilauncher):n.getElementById("contentframe")&&(e.one(n.getElementById("contentframe")).setAttribute("src",decodeURIComponent(t.iframeurl)),e.one(n.getElementById("contentframe")).setStyle("width",t.width+"px"),e.one(n.getElementById("contentframe")).setStyle("height",t.height+"px")),e.one(n.getElementById("source")).setAttribute("value",decodeURIComponent(t.iframeurl)),n.getElementById("metadata")&&e.one(n.getElementById("metadata")).setAttribute("value",t.metadata),n.getElementById("closeltipanel")&&e.one(n.getElementById("closeltipanel")).simulate("click"),n.body.dispatchEvent(n.body.myEvent)}},{NAME:"moodle-local_kaltura-ltiservice",ATTRS:{iframeurl:{value:""},width:{value:""},height:{value:""},entryid:{value:""},title:{value:""},metadata:{value:""}}}),M.local_kaltura=M.local_kaltura||{},M.local_kaltura.init=function(e){return new n(e)}},"@VERSION@",{requires:["base","node","node-event-simulate"]}); \ No newline at end of file +YUI.add("moodle-local_kaltura-ltiservice",function(e,t){var n=function(){n.superclass.constructor.apply(this,arguments)};e.extend(n,e.Base,{init:function(t){var n=window.opener?window.opener.parent.document:window.parent.document;n.getElementById("video_title")&&e.one(n.getElementById("video_title")).setAttribute("value",t.title),n.getElementById("entry_id")&&e.one(n.getElementById("entry_id")).setAttribute("value",t.entryid),n.getElementById("height")&&e.one(n.getElementById("height")).setAttribute("value",t.height),n.getElementById("width")&&e.one(n.getElementById("width")).setAttribute("value",t.width),n.getElementById("uiconf_id")&&e.one(n.getElementById("uiconf_id")).setAttribute("value","1"),n.getElementById("widescreen")&&e.one(n.getElementById("widescreen")).setAttribute("value","1");var l=decodeURIComponent(t.iframeurl);n.getElementById("video_preview_frame")?(l=t.previewltilauncher,e.one(n.getElementById("video_preview_frame")).setAttribute("src",l)):n.getElementById("contentframe")&&(e.one(n.getElementById("contentframe")).setAttribute("src",l),e.one(n.getElementById("contentframe")).setStyle("width",t.width+"px"),e.one(n.getElementById("contentframe")).setStyle("height",t.height+"px")),e.one(n.getElementById("source")).setAttribute("value",l),n.getElementById("metadata")&&e.one(n.getElementById("metadata")).setAttribute("value",t.metadata),n.getElementById("closeltipanel")&&e.one(n.getElementById("closeltipanel")).simulate("click"),n.body.dispatchEvent(n.body.myEvent)}},{NAME:"moodle-local_kaltura-ltiservice",ATTRS:{iframeurl:{value:""},width:{value:""},height:{value:""},entryid:{value:""},title:{value:""},metadata:{value:""}}}),M.local_kaltura=M.local_kaltura||{},M.local_kaltura.init=function(e){return new n(e)}},"@VERSION@",{requires:["base","node","node-event-simulate"]}); \ No newline at end of file diff --git a/local/kaltura/yui/build/moodle-local_kaltura-ltiservice/moodle-local_kaltura-ltiservice.js b/local/kaltura/yui/build/moodle-local_kaltura-ltiservice/moodle-local_kaltura-ltiservice.js index b950f1d5f184b..988c8faf6dbd3 100644 --- a/local/kaltura/yui/build/moodle-local_kaltura-ltiservice/moodle-local_kaltura-ltiservice.js +++ b/local/kaltura/yui/build/moodle-local_kaltura-ltiservice/moodle-local_kaltura-ltiservice.js @@ -64,16 +64,18 @@ Y.extend(LTISERVICE, Y.Base, { Y.one(documentElement.getElementById('widescreen')).setAttribute('value', '1'); } + var sourceUrl = decodeURIComponent(params.iframeurl); if (documentElement.getElementById('video_preview_frame')) { - Y.one(documentElement.getElementById('video_preview_frame')).setAttribute('src', params.previewltilauncher); + sourceUrl = params.previewltilauncher; + Y.one(documentElement.getElementById('video_preview_frame')).setAttribute('src', sourceUrl); } else if (documentElement.getElementById('contentframe')) { - Y.one(documentElement.getElementById('contentframe')).setAttribute('src', decodeURIComponent(params.iframeurl)); + Y.one(documentElement.getElementById('contentframe')).setAttribute('src', sourceUrl); Y.one(documentElement.getElementById('contentframe')).setStyle('width', params.width + 'px'); Y.one(documentElement.getElementById('contentframe')).setStyle('height', params.height + 'px'); } // This element must exist. - Y.one(documentElement.getElementById('source')).setAttribute('value', decodeURIComponent(params.iframeurl)); + Y.one(documentElement.getElementById('source')).setAttribute('value', sourceUrl); if (documentElement.getElementById('metadata')) { Y.one(documentElement.getElementById('metadata')).setAttribute('value', params.metadata); diff --git a/local/kaltura/yui/src/ltiservice/js/ltiservice.js b/local/kaltura/yui/src/ltiservice/js/ltiservice.js index b950f1d5f184b..988c8faf6dbd3 100644 --- a/local/kaltura/yui/src/ltiservice/js/ltiservice.js +++ b/local/kaltura/yui/src/ltiservice/js/ltiservice.js @@ -64,16 +64,18 @@ Y.extend(LTISERVICE, Y.Base, { Y.one(documentElement.getElementById('widescreen')).setAttribute('value', '1'); } + var sourceUrl = decodeURIComponent(params.iframeurl); if (documentElement.getElementById('video_preview_frame')) { - Y.one(documentElement.getElementById('video_preview_frame')).setAttribute('src', params.previewltilauncher); + sourceUrl = params.previewltilauncher; + Y.one(documentElement.getElementById('video_preview_frame')).setAttribute('src', sourceUrl); } else if (documentElement.getElementById('contentframe')) { - Y.one(documentElement.getElementById('contentframe')).setAttribute('src', decodeURIComponent(params.iframeurl)); + Y.one(documentElement.getElementById('contentframe')).setAttribute('src', sourceUrl); Y.one(documentElement.getElementById('contentframe')).setStyle('width', params.width + 'px'); Y.one(documentElement.getElementById('contentframe')).setStyle('height', params.height + 'px'); } // This element must exist. - Y.one(documentElement.getElementById('source')).setAttribute('value', decodeURIComponent(params.iframeurl)); + Y.one(documentElement.getElementById('source')).setAttribute('value', sourceUrl); if (documentElement.getElementById('metadata')) { Y.one(documentElement.getElementById('metadata')).setAttribute('value', params.metadata); From 468f6e9ed0ed8f065b7de563bef4d6354140c8be Mon Sep 17 00:00:00 2001 From: Muli Dayan Date: Thu, 26 May 2016 12:40:13 +0300 Subject: [PATCH 109/326] KMS-4100 use the correct value for source url --- .../moodle-local_kaltura-ltiservice-debug.js | 10 ++++------ .../moodle-local_kaltura-ltiservice-min.js | 2 +- .../moodle-local_kaltura-ltiservice.js | 10 ++++------ .../moodle-local_kaltura-ltitinymcepanel-debug.js | 2 +- .../moodle-local_kaltura-ltitinymcepanel-min.js | 2 +- .../moodle-local_kaltura-ltitinymcepanel.js | 2 +- local/kaltura/yui/src/ltiservice/js/ltiservice.js | 10 ++++------ .../yui/src/ltitinymcepanel/js/ltitinymcepanel.js | 2 +- 8 files changed, 17 insertions(+), 23 deletions(-) diff --git a/local/kaltura/yui/build/moodle-local_kaltura-ltiservice/moodle-local_kaltura-ltiservice-debug.js b/local/kaltura/yui/build/moodle-local_kaltura-ltiservice/moodle-local_kaltura-ltiservice-debug.js index 988c8faf6dbd3..2f37f0205c69e 100644 --- a/local/kaltura/yui/build/moodle-local_kaltura-ltiservice/moodle-local_kaltura-ltiservice-debug.js +++ b/local/kaltura/yui/build/moodle-local_kaltura-ltiservice/moodle-local_kaltura-ltiservice-debug.js @@ -64,19 +64,17 @@ Y.extend(LTISERVICE, Y.Base, { Y.one(documentElement.getElementById('widescreen')).setAttribute('value', '1'); } - var sourceUrl = decodeURIComponent(params.iframeurl); if (documentElement.getElementById('video_preview_frame')) { - sourceUrl = params.previewltilauncher; - Y.one(documentElement.getElementById('video_preview_frame')).setAttribute('src', sourceUrl); + Y.one(documentElement.getElementById('video_preview_frame')).setAttribute('src', params.previewltilauncher); } else if (documentElement.getElementById('contentframe')) { - Y.one(documentElement.getElementById('contentframe')).setAttribute('src', sourceUrl); + Y.one(documentElement.getElementById('contentframe')).setAttribute('src', decodeURIComponent(params.iframeurl)); Y.one(documentElement.getElementById('contentframe')).setStyle('width', params.width + 'px'); Y.one(documentElement.getElementById('contentframe')).setStyle('height', params.height + 'px'); } // This element must exist. - Y.one(documentElement.getElementById('source')).setAttribute('value', sourceUrl); - + Y.one(documentElement.getElementById('source')).setAttribute('value', decodeURIComponent(params.iframeurl)); + if (documentElement.getElementById('metadata')) { Y.one(documentElement.getElementById('metadata')).setAttribute('value', params.metadata); } diff --git a/local/kaltura/yui/build/moodle-local_kaltura-ltiservice/moodle-local_kaltura-ltiservice-min.js b/local/kaltura/yui/build/moodle-local_kaltura-ltiservice/moodle-local_kaltura-ltiservice-min.js index 0c6e86f1a8ca1..7ea40ce5f2abb 100644 --- a/local/kaltura/yui/build/moodle-local_kaltura-ltiservice/moodle-local_kaltura-ltiservice-min.js +++ b/local/kaltura/yui/build/moodle-local_kaltura-ltiservice/moodle-local_kaltura-ltiservice-min.js @@ -1 +1 @@ -YUI.add("moodle-local_kaltura-ltiservice",function(e,t){var n=function(){n.superclass.constructor.apply(this,arguments)};e.extend(n,e.Base,{init:function(t){var n=window.opener?window.opener.parent.document:window.parent.document;n.getElementById("video_title")&&e.one(n.getElementById("video_title")).setAttribute("value",t.title),n.getElementById("entry_id")&&e.one(n.getElementById("entry_id")).setAttribute("value",t.entryid),n.getElementById("height")&&e.one(n.getElementById("height")).setAttribute("value",t.height),n.getElementById("width")&&e.one(n.getElementById("width")).setAttribute("value",t.width),n.getElementById("uiconf_id")&&e.one(n.getElementById("uiconf_id")).setAttribute("value","1"),n.getElementById("widescreen")&&e.one(n.getElementById("widescreen")).setAttribute("value","1");var l=decodeURIComponent(t.iframeurl);n.getElementById("video_preview_frame")?(l=t.previewltilauncher,e.one(n.getElementById("video_preview_frame")).setAttribute("src",l)):n.getElementById("contentframe")&&(e.one(n.getElementById("contentframe")).setAttribute("src",l),e.one(n.getElementById("contentframe")).setStyle("width",t.width+"px"),e.one(n.getElementById("contentframe")).setStyle("height",t.height+"px")),e.one(n.getElementById("source")).setAttribute("value",l),n.getElementById("metadata")&&e.one(n.getElementById("metadata")).setAttribute("value",t.metadata),n.getElementById("closeltipanel")&&e.one(n.getElementById("closeltipanel")).simulate("click"),n.body.dispatchEvent(n.body.myEvent)}},{NAME:"moodle-local_kaltura-ltiservice",ATTRS:{iframeurl:{value:""},width:{value:""},height:{value:""},entryid:{value:""},title:{value:""},metadata:{value:""}}}),M.local_kaltura=M.local_kaltura||{},M.local_kaltura.init=function(e){return new n(e)}},"@VERSION@",{requires:["base","node","node-event-simulate"]}); \ No newline at end of file +YUI.add("moodle-local_kaltura-ltiservice",function(e,t){var n=function(){n.superclass.constructor.apply(this,arguments)};e.extend(n,e.Base,{init:function(t){var n=window.opener?window.opener.parent.document:window.parent.document;n.getElementById("video_title")&&e.one(n.getElementById("video_title")).setAttribute("value",t.title),n.getElementById("entry_id")&&e.one(n.getElementById("entry_id")).setAttribute("value",t.entryid),n.getElementById("height")&&e.one(n.getElementById("height")).setAttribute("value",t.height),n.getElementById("width")&&e.one(n.getElementById("width")).setAttribute("value",t.width),n.getElementById("uiconf_id")&&e.one(n.getElementById("uiconf_id")).setAttribute("value","1"),n.getElementById("widescreen")&&e.one(n.getElementById("widescreen")).setAttribute("value","1"),n.getElementById("video_preview_frame")?e.one(n.getElementById("video_preview_frame")).setAttribute("src",t.previewltilauncher):n.getElementById("contentframe")&&(e.one(n.getElementById("contentframe")).setAttribute("src",decodeURIComponent(t.iframeurl)),e.one(n.getElementById("contentframe")).setStyle("width",t.width+"px"),e.one(n.getElementById("contentframe")).setStyle("height",t.height+"px")),e.one(n.getElementById("source")).setAttribute("value",decodeURIComponent(t.iframeurl)),n.getElementById("metadata")&&e.one(n.getElementById("metadata")).setAttribute("value",t.metadata),n.getElementById("closeltipanel")&&e.one(n.getElementById("closeltipanel")).simulate("click"),n.body.dispatchEvent(n.body.myEvent)}},{NAME:"moodle-local_kaltura-ltiservice",ATTRS:{iframeurl:{value:""},width:{value:""},height:{value:""},entryid:{value:""},title:{value:""},metadata:{value:""}}}),M.local_kaltura=M.local_kaltura||{},M.local_kaltura.init=function(e){return new n(e)}},"@VERSION@",{requires:["base","node","node-event-simulate"]}); \ No newline at end of file diff --git a/local/kaltura/yui/build/moodle-local_kaltura-ltiservice/moodle-local_kaltura-ltiservice.js b/local/kaltura/yui/build/moodle-local_kaltura-ltiservice/moodle-local_kaltura-ltiservice.js index 988c8faf6dbd3..2f37f0205c69e 100644 --- a/local/kaltura/yui/build/moodle-local_kaltura-ltiservice/moodle-local_kaltura-ltiservice.js +++ b/local/kaltura/yui/build/moodle-local_kaltura-ltiservice/moodle-local_kaltura-ltiservice.js @@ -64,19 +64,17 @@ Y.extend(LTISERVICE, Y.Base, { Y.one(documentElement.getElementById('widescreen')).setAttribute('value', '1'); } - var sourceUrl = decodeURIComponent(params.iframeurl); if (documentElement.getElementById('video_preview_frame')) { - sourceUrl = params.previewltilauncher; - Y.one(documentElement.getElementById('video_preview_frame')).setAttribute('src', sourceUrl); + Y.one(documentElement.getElementById('video_preview_frame')).setAttribute('src', params.previewltilauncher); } else if (documentElement.getElementById('contentframe')) { - Y.one(documentElement.getElementById('contentframe')).setAttribute('src', sourceUrl); + Y.one(documentElement.getElementById('contentframe')).setAttribute('src', decodeURIComponent(params.iframeurl)); Y.one(documentElement.getElementById('contentframe')).setStyle('width', params.width + 'px'); Y.one(documentElement.getElementById('contentframe')).setStyle('height', params.height + 'px'); } // This element must exist. - Y.one(documentElement.getElementById('source')).setAttribute('value', sourceUrl); - + Y.one(documentElement.getElementById('source')).setAttribute('value', decodeURIComponent(params.iframeurl)); + if (documentElement.getElementById('metadata')) { Y.one(documentElement.getElementById('metadata')).setAttribute('value', params.metadata); } diff --git a/local/kaltura/yui/build/moodle-local_kaltura-ltitinymcepanel/moodle-local_kaltura-ltitinymcepanel-debug.js b/local/kaltura/yui/build/moodle-local_kaltura-ltitinymcepanel/moodle-local_kaltura-ltitinymcepanel-debug.js index fba9a2eaccc13..28522c7fd2dfa 100644 --- a/local/kaltura/yui/build/moodle-local_kaltura-ltitinymcepanel/moodle-local_kaltura-ltitinymcepanel-debug.js +++ b/local/kaltura/yui/build/moodle-local_kaltura-ltitinymcepanel/moodle-local_kaltura-ltitinymcepanel-debug.js @@ -101,7 +101,7 @@ Y.extend(LTITINYMCEPANEL, Y.Base, { var iframe = Y.Node.create(''); iframe.setAttribute('width', Y.one('#width').get('value')+'px'); iframe.setAttribute('height', height+'px'); - iframe.setAttribute('src', Y.one('#source').get('value')); + iframe.setAttribute('src', Y.one('#video_preview_frame').getAttribute('src')); center.append(iframe); Y.one('#'+previewiframeid).append(center); diff --git a/local/kaltura/yui/build/moodle-local_kaltura-ltitinymcepanel/moodle-local_kaltura-ltitinymcepanel-min.js b/local/kaltura/yui/build/moodle-local_kaltura-ltitinymcepanel/moodle-local_kaltura-ltitinymcepanel-min.js index 24eaf342ca72c..96e218e0fa125 100644 --- a/local/kaltura/yui/build/moodle-local_kaltura-ltitinymcepanel/moodle-local_kaltura-ltitinymcepanel-min.js +++ b/local/kaltura/yui/build/moodle-local_kaltura-ltitinymcepanel/moodle-local_kaltura-ltitinymcepanel-min.js @@ -1 +1 @@ -YUI.add("moodle-local_kaltura-ltitinymcepanel",function(e,t){var n=function(){n.superclass.constructor.apply(this,arguments)};e.extend(n,e.Base,{contextid:0,init:function(t){if(""===t.insertbtnid||""===t.ltilaunchurl||""===t.objecttagheight||""===t.objecttagid||""===t.previewiframeid){alert("Some parameters were not initialized.");return}this.load_lti_content(t.ltilaunchurl,t.objecttagid,t.objecttagheight),e.one("#"+t.insertbtnid).set("disabled",!0),e.one("#closeltipanel").on("click",this.user_selected_video_callback,this,t.insertbtnid,t.objecttagid,t.previewiframeid,t.objecttagheight),null!==e.one("#page-footer")&&e.one("#page-footer").setStyle("display","none")},load_lti_content:function(t,n,r){0===this.contextid&&(this.contextid=e.one("#lti_launch_context_id").get("value"));var i='';e.one("#"+n).setContent(i)},user_selected_video_callback:function(t,n,r,i,s){e.one("#"+n).setStyle("display","inline"),e.one("#"+n).set("disabled",!1),e.one("#"+r).setContent("");var o=e.Node.create("
    "),u=e.Node.create("");u.setAttribute("width",e.one("#width").get("value")+"px"),u.setAttribute("height",s+"px"),u.setAttribute("src",e.one("#source").get("value")),o.append(u),e.one("#"+i).append(o)}},{NAME:"moodle-local_kaltura-ltitinymcepanel",ATTRS:{insertbtnid:{value:""},ltilaunchurl:{value:""},objecttagheight:{value:""},objecttagid:{value:""},previewiframeid:{value:""}}}),M.local_kaltura=M.local_kaltura||{},M.local_kaltura.init=function(e){return new n(e)}},"@VERSION@",{requires:["base","node","panel","node-event-simulate"]}); +var LTITINYMCEPANEL=function(){LTITINYMCEPANEL.superclass.constructor.apply(this,arguments)};Y.extend(LTITINYMCEPANEL,Y.Base,{contextid:0,init:function(e){return""===e.insertbtnid||""===e.ltilaunchurl||""===e.objecttagheight||""===e.objecttagid||""===e.previewiframeid?void alert("Some parameters were not initialized."):(this.load_lti_content(e.ltilaunchurl,e.objecttagid,e.objecttagheight),Y.one("#"+e.insertbtnid).set("disabled",!0),Y.one("#closeltipanel").on("click",this.user_selected_video_callback,this,e.insertbtnid,e.objecttagid,e.previewiframeid,e.objecttagheight),void(null!==Y.one("#page-footer")&&Y.one("#page-footer").setStyle("display","none")))},load_lti_content:function(e,t,i){0===this.contextid&&(this.contextid=Y.one("#lti_launch_context_id").get("value"));var n='';Y.one("#"+t).setContent(n)},user_selected_video_callback:function(e,t,i,n,a){Y.one("#"+t).setStyle("display","inline"),Y.one("#"+t).set("disabled",!1),Y.one("#"+i).setContent("");var l=Y.Node.create("
    "),o=Y.Node.create("");o.setAttribute("width",Y.one("#width").get("value")+"px"),o.setAttribute("height",a+"px"),o.setAttribute("src",Y.one("#video_preview_frame").getAttribute("src")),l.append(o),Y.one("#"+n).append(l)}},{NAME:"moodle-local_kaltura-ltitinymcepanel",ATTRS:{insertbtnid:{value:""},ltilaunchurl:{value:""},objecttagheight:{value:""},objecttagid:{value:""},previewiframeid:{value:""}}}),M.local_kaltura=M.local_kaltura||{},M.local_kaltura.init=function(e){return new LTITINYMCEPANEL(e)}; \ No newline at end of file diff --git a/local/kaltura/yui/build/moodle-local_kaltura-ltitinymcepanel/moodle-local_kaltura-ltitinymcepanel.js b/local/kaltura/yui/build/moodle-local_kaltura-ltitinymcepanel/moodle-local_kaltura-ltitinymcepanel.js index 23a1c5c8ac664..4ee485172048b 100644 --- a/local/kaltura/yui/build/moodle-local_kaltura-ltitinymcepanel/moodle-local_kaltura-ltitinymcepanel.js +++ b/local/kaltura/yui/build/moodle-local_kaltura-ltitinymcepanel/moodle-local_kaltura-ltitinymcepanel.js @@ -100,7 +100,7 @@ Y.extend(LTITINYMCEPANEL, Y.Base, { var iframe = Y.Node.create(''); iframe.setAttribute('width', Y.one('#width').get('value')+'px'); iframe.setAttribute('height', height+'px'); - iframe.setAttribute('src', Y.one('#source').get('value')); + iframe.setAttribute('src', Y.one('#video_preview_frame').getAttribute('src')); center.append(iframe); Y.one('#'+previewiframeid).append(center); diff --git a/local/kaltura/yui/src/ltiservice/js/ltiservice.js b/local/kaltura/yui/src/ltiservice/js/ltiservice.js index 988c8faf6dbd3..2f37f0205c69e 100644 --- a/local/kaltura/yui/src/ltiservice/js/ltiservice.js +++ b/local/kaltura/yui/src/ltiservice/js/ltiservice.js @@ -64,19 +64,17 @@ Y.extend(LTISERVICE, Y.Base, { Y.one(documentElement.getElementById('widescreen')).setAttribute('value', '1'); } - var sourceUrl = decodeURIComponent(params.iframeurl); if (documentElement.getElementById('video_preview_frame')) { - sourceUrl = params.previewltilauncher; - Y.one(documentElement.getElementById('video_preview_frame')).setAttribute('src', sourceUrl); + Y.one(documentElement.getElementById('video_preview_frame')).setAttribute('src', params.previewltilauncher); } else if (documentElement.getElementById('contentframe')) { - Y.one(documentElement.getElementById('contentframe')).setAttribute('src', sourceUrl); + Y.one(documentElement.getElementById('contentframe')).setAttribute('src', decodeURIComponent(params.iframeurl)); Y.one(documentElement.getElementById('contentframe')).setStyle('width', params.width + 'px'); Y.one(documentElement.getElementById('contentframe')).setStyle('height', params.height + 'px'); } // This element must exist. - Y.one(documentElement.getElementById('source')).setAttribute('value', sourceUrl); - + Y.one(documentElement.getElementById('source')).setAttribute('value', decodeURIComponent(params.iframeurl)); + if (documentElement.getElementById('metadata')) { Y.one(documentElement.getElementById('metadata')).setAttribute('value', params.metadata); } diff --git a/local/kaltura/yui/src/ltitinymcepanel/js/ltitinymcepanel.js b/local/kaltura/yui/src/ltitinymcepanel/js/ltitinymcepanel.js index d3ce263a58c80..aac4684f492fd 100644 --- a/local/kaltura/yui/src/ltitinymcepanel/js/ltitinymcepanel.js +++ b/local/kaltura/yui/src/ltitinymcepanel/js/ltitinymcepanel.js @@ -98,7 +98,7 @@ Y.extend(LTITINYMCEPANEL, Y.Base, { var iframe = Y.Node.create(''); iframe.setAttribute('width', Y.one('#width').get('value')+'px'); iframe.setAttribute('height', height+'px'); - iframe.setAttribute('src', Y.one('#source').get('value')); + iframe.setAttribute('src', Y.one('#video_preview_frame').getAttribute('src')); center.append(iframe); Y.one('#'+previewiframeid).append(center); From b9f26de8b218382a9ee01271693be0f254a462a6 Mon Sep 17 00:00:00 2001 From: Muli Dayan Date: Thu, 26 May 2016 15:30:07 +0300 Subject: [PATCH 110/326] KMS-10750 add allowfullscreen attribute to iframes in preview pages --- lib/editor/atto/plugins/kalturamedia/ltibrowse_container.php | 2 +- local/kaltura/attobsepreview.php | 1 + .../moodle-local_kaltura-ltitinymcepanel-debug.js | 2 +- .../moodle-local_kaltura-ltitinymcepanel-min.js | 2 +- .../moodle-local_kaltura-ltitinymcepanel.js | 1 + local/kaltura/yui/src/ltitinymcepanel/js/ltitinymcepanel.js | 1 + 6 files changed, 6 insertions(+), 3 deletions(-) diff --git a/lib/editor/atto/plugins/kalturamedia/ltibrowse_container.php b/lib/editor/atto/plugins/kalturamedia/ltibrowse_container.php index 71f903f21ffb4..5219a57aaf21a 100644 --- a/lib/editor/atto/plugins/kalturamedia/ltibrowse_container.php +++ b/lib/editor/atto/plugins/kalturamedia/ltibrowse_container.php @@ -9,7 +9,7 @@ ?> -
    \ No newline at end of file diff --git a/lib/editor/atto/plugins/kalturamedia/yui/build/moodle-atto_kalturamedia-button/moodle-atto_kalturamedia-button-debug.js b/lib/editor/atto/plugins/kalturamedia/yui/build/moodle-atto_kalturamedia-button/moodle-atto_kalturamedia-button-debug.js index 5527bb5d3a07d..1c88496364bb0 100644 --- a/lib/editor/atto/plugins/kalturamedia/yui/build/moodle-atto_kalturamedia-button/moodle-atto_kalturamedia-button-debug.js +++ b/lib/editor/atto/plugins/kalturamedia/yui/build/moodle-atto_kalturamedia-button/moodle-atto_kalturamedia-button-debug.js @@ -72,7 +72,7 @@ Y.namespace('M.atto_kalturamedia').Button = Y.Base.create('button', Y.M.editor_a var top = ((height / 2) - (h / 2)) + dualScreenTop; var newWindow = window.open(this._getIframeURL(), M.util.get_string("browse_and_embed", COMPONENTNAME), 'scrollbars=no, width=' + w + ', height=' + h + ', top=' + top + ', left=' + left); - newWindow.buttonJs = this; + window.buttonJs = this; if (window.focus) { newWindow.focus(); diff --git a/lib/editor/atto/plugins/kalturamedia/yui/build/moodle-atto_kalturamedia-button/moodle-atto_kalturamedia-button-min.js b/lib/editor/atto/plugins/kalturamedia/yui/build/moodle-atto_kalturamedia-button/moodle-atto_kalturamedia-button-min.js index 733bc9195c297..3c897523c0a23 100644 --- a/lib/editor/atto/plugins/kalturamedia/yui/build/moodle-atto_kalturamedia-button/moodle-atto_kalturamedia-button-min.js +++ b/lib/editor/atto/plugins/kalturamedia/yui/build/moodle-atto_kalturamedia-button/moodle-atto_kalturamedia-button-min.js @@ -1 +1 @@ -YUI.add("moodle-atto_kalturamedia-button",function(e,t){var n="atto_kalturamedia",o={URLINPUT:"atto_kalturamedia_urlentry",NAMEINPUT:"atto_kalturamedia_nameentry"};({URLINPUT:"."+o.URLINPUT,NAMEINPUT:"."+o.NAMEINPUT});e.namespace("M.atto_kalturamedia").Button=e.Base.create("button",e.M.editor_atto.EditorPlugin,[],{_currentSelection:null,embedWindow:null,initializer:function(){this.addButton({iconurl:M.cfg.wwwroot+"/lib/editor/atto/plugins/kalturamedia/pix/icon.png",callback:this._kalturamedia})},_kalturamedia:function(){if(this._currentSelection=this.get("host").getSelection(),this._currentSelection!==!1){var e=1200,t=700,i=void 0!=window.screenLeft?window.screenLeft:screen.left,o=void 0!=window.screenTop?window.screenTop:screen.top,r=window.innerWidth?window.innerWidth:document.documentElement.clientWidth?document.documentElement.clientWidth:screen.width,a=window.innerHeight?window.innerHeight:document.documentElement.clientHeight?document.documentElement.clientHeight:screen.height,l=r/2-e/2+i,d=a/2-t/2+o,u=window.open(this._getIframeURL(),M.util.get_string("browse_and_embed",n),"scrollbars=no, width="+e+", height="+t+", top="+d+", left="+l);u.buttonJs=this,window.focus&&u.focus(),this.embedWindow=u}},_getIframeURL:function(){var t=e.mix({elementid:this.get("host").get("elementid"),contextid:this.get("contextid"),height:"600px",width:"1112px"},this.get("area"));return M.cfg.wwwroot+"/lib/editor/atto/plugins/kalturamedia/ltibrowse_container.php?"+e.QueryString.stringify(t)},_getCourseId:function(){var e,t=document.getElementsByTagName("body")[0].className,n=t.split(" ");for(i in n)if(n[i].indexOf("course-")>-1){var o=n[i].split("-");e=o[1]}return e},_replaceKafUriWithToken:function(e,t,i){return e=this._removeProtocolFromUrl(e),t=this._removeProtocolFromUrl(t),e.replace(t,i)},_removeProtocolFromUrl:function(e){return e.replace(/^https?:\/\//,"")},embedItem:function(e,t){embedInfo={};for(param in t){var i=param.split("-");"embedinfo"==i[0]&&(embedInfo[i[1]]=t[param])}var n=this.get("kalturauritoken"),o=this.get("kafuri"),r=embedInfo.url,a=this._replaceKafUriWithToken(r,o,n),l=document.createElement("a");l.href=r,a+=l.search;var d='tinymce-kalturamedia-embed||'+embedInfo.title+"||"+embedInfo.width+"||"+embedInfo.height+"";host=this.get("host"),host.setSelection(this._currentSelection),host.insertContentAtFocusPoint(d),this.markUpdated(),this.embedWindow.close()}},{ATTRS:{contextid:{value:null},kalturauritoken:{value:null},kafuri:{value:null}}})},"@VERSION@",{requires:["moodle-editor_atto-plugin"]}); \ No newline at end of file +YUI.add("moodle-atto_kalturamedia-button",function(e,t){var n="atto_kalturamedia",o={URLINPUT:"atto_kalturamedia_urlentry",NAMEINPUT:"atto_kalturamedia_nameentry"};({URLINPUT:"."+o.URLINPUT,NAMEINPUT:"."+o.NAMEINPUT});e.namespace("M.atto_kalturamedia").Button=e.Base.create("button",e.M.editor_atto.EditorPlugin,[],{_currentSelection:null,embedWindow:null,initializer:function(){this.addButton({iconurl:M.cfg.wwwroot+"/lib/editor/atto/plugins/kalturamedia/pix/icon.png",callback:this._kalturamedia})},_kalturamedia:function(){if(this._currentSelection=this.get("host").getSelection(),this._currentSelection!==!1){var e=1200,t=700,i=void 0!=window.screenLeft?window.screenLeft:screen.left,o=void 0!=window.screenTop?window.screenTop:screen.top,r=window.innerWidth?window.innerWidth:document.documentElement.clientWidth?document.documentElement.clientWidth:screen.width,a=window.innerHeight?window.innerHeight:document.documentElement.clientHeight?document.documentElement.clientHeight:screen.height,d=r/2-e/2+i,l=a/2-t/2+o,u=window.open(this._getIframeURL(),M.util.get_string("browse_and_embed",n),"scrollbars=no, width="+e+", height="+t+", top="+l+", left="+d);window.buttonJs=this,window.focus&&u.focus(),this.embedWindow=u}},_getIframeURL:function(){var t=e.mix({elementid:this.get("host").get("elementid"),contextid:this.get("contextid"),height:"600px",width:"1112px"},this.get("area"));return M.cfg.wwwroot+"/lib/editor/atto/plugins/kalturamedia/ltibrowse_container.php?"+e.QueryString.stringify(t)},_getCourseId:function(){var e,t=document.getElementsByTagName("body")[0].className,n=t.split(" ");for(i in n)if(n[i].indexOf("course-")>-1){var o=n[i].split("-");e=o[1]}return e},_replaceKafUriWithToken:function(e,t,i){return e=this._removeProtocolFromUrl(e),t=this._removeProtocolFromUrl(t),e.replace(t,i)},_removeProtocolFromUrl:function(e){return e.replace(/^https?:\/\//,"")},embedItem:function(e,t){embedInfo={};for(param in t){var i=param.split("-");"embedinfo"==i[0]&&(embedInfo[i[1]]=t[param])}var n=this.get("kalturauritoken"),o=this.get("kafuri"),r=embedInfo.url,a=this._replaceKafUriWithToken(r,o,n),d=document.createElement("a");d.href=r,a+=d.search;var l='tinymce-kalturamedia-embed||'+embedInfo.title+"||"+embedInfo.width+"||"+embedInfo.height+"";host=this.get("host"),host.setSelection(this._currentSelection),host.insertContentAtFocusPoint(l),this.markUpdated(),this.embedWindow.close()}},{ATTRS:{contextid:{value:null},kalturauritoken:{value:null},kafuri:{value:null}}})},"@VERSION@",{requires:["moodle-editor_atto-plugin"]}); \ No newline at end of file diff --git a/lib/editor/atto/plugins/kalturamedia/yui/build/moodle-atto_kalturamedia-button/moodle-atto_kalturamedia-button.js b/lib/editor/atto/plugins/kalturamedia/yui/build/moodle-atto_kalturamedia-button/moodle-atto_kalturamedia-button.js index 5527bb5d3a07d..1c88496364bb0 100644 --- a/lib/editor/atto/plugins/kalturamedia/yui/build/moodle-atto_kalturamedia-button/moodle-atto_kalturamedia-button.js +++ b/lib/editor/atto/plugins/kalturamedia/yui/build/moodle-atto_kalturamedia-button/moodle-atto_kalturamedia-button.js @@ -72,7 +72,7 @@ Y.namespace('M.atto_kalturamedia').Button = Y.Base.create('button', Y.M.editor_a var top = ((height / 2) - (h / 2)) + dualScreenTop; var newWindow = window.open(this._getIframeURL(), M.util.get_string("browse_and_embed", COMPONENTNAME), 'scrollbars=no, width=' + w + ', height=' + h + ', top=' + top + ', left=' + left); - newWindow.buttonJs = this; + window.buttonJs = this; if (window.focus) { newWindow.focus(); diff --git a/lib/editor/atto/plugins/kalturamedia/yui/src/button/js/button.js b/lib/editor/atto/plugins/kalturamedia/yui/src/button/js/button.js index 5527bb5d3a07d..1c88496364bb0 100644 --- a/lib/editor/atto/plugins/kalturamedia/yui/src/button/js/button.js +++ b/lib/editor/atto/plugins/kalturamedia/yui/src/button/js/button.js @@ -72,7 +72,7 @@ Y.namespace('M.atto_kalturamedia').Button = Y.Base.create('button', Y.M.editor_a var top = ((height / 2) - (h / 2)) + dualScreenTop; var newWindow = window.open(this._getIframeURL(), M.util.get_string("browse_and_embed", COMPONENTNAME), 'scrollbars=no, width=' + w + ', height=' + h + ', top=' + top + ', left=' + left); - newWindow.buttonJs = this; + window.buttonJs = this; if (window.focus) { newWindow.focus(); From 6ca1e91ff536d2b337d09d08bce30c1b63542546 Mon Sep 17 00:00:00 2001 From: Muli Dayan Date: Sun, 19 Jun 2016 18:46:40 +0300 Subject: [PATCH 117/326] KMS-11871 remove 'this' --- .../atto/plugins/kalturamedia/ltibrowse_container.php | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/lib/editor/atto/plugins/kalturamedia/ltibrowse_container.php b/lib/editor/atto/plugins/kalturamedia/ltibrowse_container.php index 2148cbb4744fc..ce156d187972d 100644 --- a/lib/editor/atto/plugins/kalturamedia/ltibrowse_container.php +++ b/lib/editor/atto/plugins/kalturamedia/ltibrowse_container.php @@ -13,7 +13,7 @@
    \ No newline at end of file + From 70ec4f89f6e9b3a83a1f68036a1e9789aad81fb2 Mon Sep 17 00:00:00 2001 From: Muli Dayan Date: Mon, 27 Jun 2016 08:55:29 +0300 Subject: [PATCH 118/326] bump version - 4.0.10 --- filter/kaltura/version.php | 6 +++--- lib/editor/atto/plugins/kalturamedia/version.php | 6 +++--- lib/editor/tinymce/plugins/kalturamedia/version.php | 6 +++--- local/kaltura/db/upgrade.php | 6 +++--- local/kaltura/version.php | 4 ++-- local/kalturamediagallery/version.php | 6 +++--- local/mymedia/version.php | 6 +++--- mod/kalvidassign/version.php | 6 +++--- mod/kalvidpres/version.php | 6 +++--- mod/kalvidres/version.php | 6 +++--- 10 files changed, 29 insertions(+), 29 deletions(-) diff --git a/filter/kaltura/version.php b/filter/kaltura/version.php index 203445c57527d..a12f860debc3a 100644 --- a/filter/kaltura/version.php +++ b/filter/kaltura/version.php @@ -24,11 +24,11 @@ */ defined('MOODLE_INTERNAL') || die(); -$plugin->version = 2016061330; //version date YYYYMMDDXX 10 represent 3.0 for future option to moodle use 2 digit version +$plugin->version = 2016062730; //version date YYYYMMDDXX 10 represent 3.0 for future option to moodle use 2 digit version $plugin->component = 'filter_kaltura'; -$plugin->release = 'Kaltura release 4.0.09'; +$plugin->release = 'Kaltura release 4.0.10'; $plugin->requires = 2014050800; $plugin->maturity = MATURITY_STABLE; $plugin->dependencies = array( - 'local_kaltura' => 2016061330 + 'local_kaltura' => 2016062730 ); diff --git a/lib/editor/atto/plugins/kalturamedia/version.php b/lib/editor/atto/plugins/kalturamedia/version.php index d60e71a154fc2..c59fe0d86ed9a 100644 --- a/lib/editor/atto/plugins/kalturamedia/version.php +++ b/lib/editor/atto/plugins/kalturamedia/version.php @@ -24,10 +24,10 @@ defined('MOODLE_INTERNAL') || die(); -$plugin->version = 2016061330; // The current plugin version (Date: YYYYMMDDXX). -$plugin->release = 'Kaltura release 4.0.09'; +$plugin->version = 2016062730; // The current plugin version (Date: YYYYMMDDXX). +$plugin->release = 'Kaltura release 4.0.10'; $plugin->requires = 2014050800; // Requires this Moodle version. $plugin->component = 'atto_kalturamedia'; // Full name of the plugin (used for diagnostics). $plugin->dependencies = array( - 'local_kaltura' => 2016061330 + 'local_kaltura' => 2016062730 ); diff --git a/lib/editor/tinymce/plugins/kalturamedia/version.php b/lib/editor/tinymce/plugins/kalturamedia/version.php index f73c80095c1fd..0e28ff2400a20 100644 --- a/lib/editor/tinymce/plugins/kalturamedia/version.php +++ b/lib/editor/tinymce/plugins/kalturamedia/version.php @@ -23,12 +23,12 @@ defined('MOODLE_INTERNAL') || die(); -$plugin->version = 2016061330; -$plugin->release = 'Kaltura release 4.0.09'; +$plugin->version = 2016062730; +$plugin->release = 'Kaltura release 4.0.10'; // Required Moodle version. $plugin->requires = 2014050800; // Full name of the plugin (used for diagnostics). $plugin->component = 'tinymce_kalturamedia'; $plugin->dependencies = array( - 'local_kaltura' => 2016061330 + 'local_kaltura' => 2016062730 ); diff --git a/local/kaltura/db/upgrade.php b/local/kaltura/db/upgrade.php index b4cd0468bcd3b..5e032022a4c2d 100644 --- a/local/kaltura/db/upgrade.php +++ b/local/kaltura/db/upgrade.php @@ -59,11 +59,11 @@ function xmldb_local_kaltura_upgrade($oldversion) { } // Kaltura savepoint reached. - upgrade_plugin_savepoint(true, 2016061330, 'local', 'kaltura'); + upgrade_plugin_savepoint(true, 2016062730, 'local', 'kaltura'); $savePointDone = true; } - if (!$savePointDone && $oldversion < 2016061330) { + if (!$savePointDone && $oldversion < 2016062730) { if($dbman->table_exists('local_kaltura_log') && $dbman->field_exists('local_kaltura_log', 'endpoint')) { $table = new xmldb_table('local_kaltura_log'); $updatedFieldSchema = new xmldb_field('endpoint', XMLDB_TYPE_TEXT, null, null, XMLDB_NOTNULL, null, null, null); @@ -71,7 +71,7 @@ function xmldb_local_kaltura_upgrade($oldversion) { } // Kaltura savepoint reached. - upgrade_plugin_savepoint(true, 2016061330, 'local', 'kaltura'); + upgrade_plugin_savepoint(true, 2016062730, 'local', 'kaltura'); } return true; } diff --git a/local/kaltura/version.php b/local/kaltura/version.php index 36d1138f29a18..3f96160dd30fe 100644 --- a/local/kaltura/version.php +++ b/local/kaltura/version.php @@ -25,8 +25,8 @@ die('Direct access to this script is forbidden.'); } -$plugin->version = 2016061330; +$plugin->version = 2016062730; $plugin->component = 'local_kaltura'; -$plugin->release = 'Kaltura release 4.0.09'; +$plugin->release = 'Kaltura release 4.0.10'; $plugin->requires = 2014050800; $plugin->maturity = MATURITY_STABLE; diff --git a/local/kalturamediagallery/version.php b/local/kalturamediagallery/version.php index 0cedd0d80e819..9da5fcf647be4 100644 --- a/local/kalturamediagallery/version.php +++ b/local/kalturamediagallery/version.php @@ -26,11 +26,11 @@ die('Direct access to this script is forbidden.'); } -$plugin->version = 2016061330; +$plugin->version = 2016062730; $plugin->component = 'local_kalturamediagallery'; -$plugin->release = 'Kaltura release 4.0.09'; +$plugin->release = 'Kaltura release 4.0.10'; $plugin->requires = 2014050800; $plugin->maturity = MATURITY_STABLE; $plugin->dependencies = array( - 'local_kaltura' => 2016061330 + 'local_kaltura' => 2016062730 ); diff --git a/local/mymedia/version.php b/local/mymedia/version.php index 159e26295a037..51fca27987d49 100644 --- a/local/mymedia/version.php +++ b/local/mymedia/version.php @@ -25,11 +25,11 @@ die('Direct access to this script is forbidden.'); } -$plugin->version = 2016061330; +$plugin->version = 2016062730; $plugin->component = 'local_mymedia'; -$plugin->release = 'Kaltura release 4.0.09'; +$plugin->release = 'Kaltura release 4.0.10'; $plugin->requires = 2014050800; $plugin->maturity = MATURITY_STABLE; $plugin->dependencies = array( - 'local_kaltura' => 2016061330 + 'local_kaltura' => 2016062730 ); diff --git a/mod/kalvidassign/version.php b/mod/kalvidassign/version.php index 262c45a19ff44..732b60f2c706e 100644 --- a/mod/kalvidassign/version.php +++ b/mod/kalvidassign/version.php @@ -25,12 +25,12 @@ die('Direct access to this script is forbidden.'); } -$plugin->version = 2016061330; +$plugin->version = 2016062730; $plugin->component = 'mod_kalvidassign'; -$plugin->release = 'Kaltura release 4.0.09'; +$plugin->release = 'Kaltura release 4.0.10'; $plugin->requires = 2014050800; $plugin->cron = 0; $plugin->maturity = MATURITY_STABLE; $plugin->dependencies = array( - 'local_kaltura' => 2016061330, + 'local_kaltura' => 2016062730, ); diff --git a/mod/kalvidpres/version.php b/mod/kalvidpres/version.php index 18ba4647c95ba..b393704037f5d 100644 --- a/mod/kalvidpres/version.php +++ b/mod/kalvidpres/version.php @@ -25,12 +25,12 @@ die('Direct access to this script is forbidden.'); } -$plugin->version = 2016061330; +$plugin->version = 2016062730; $plugin->component = 'mod_kalvidpres'; -$plugin->release = 'Kaltura release 4.0.09'; +$plugin->release = 'Kaltura release 4.0.10'; $plugin->requires = 2014050800; $plugin->cron = 0; $plugin->maturity = MATURITY_STABLE; $plugin->dependencies = array( - 'local_kaltura' => 2016061330 + 'local_kaltura' => 2016062730 ); diff --git a/mod/kalvidres/version.php b/mod/kalvidres/version.php index 1fb2aada72b2e..f144b0b9e8ec8 100644 --- a/mod/kalvidres/version.php +++ b/mod/kalvidres/version.php @@ -25,12 +25,12 @@ die('Direct access to this script is forbidden.'); } -$plugin->version = 2016061330; +$plugin->version = 2016062730; $plugin->component = 'mod_kalvidres'; -$plugin->release = 'Kaltura release 4.0.09'; +$plugin->release = 'Kaltura release 4.0.10'; $plugin->requires = 2014050800; $plugin->cron = 0; $plugin->maturity = MATURITY_STABLE; $plugin->dependencies = array( - 'local_kaltura' => 2016061330 + 'local_kaltura' => 2016062730 ); From 196dc10e08e39fea887f5af97fb64533761934c6 Mon Sep 17 00:00:00 2001 From: Muli Dayan Date: Wed, 6 Jul 2016 14:45:15 +0300 Subject: [PATCH 119/326] KMS-11965 set scrollbars to yes --- .../moodle-local_kaltura-ltipanel-debug.js | 2 +- .../moodle-local_kaltura-ltipanel-min.js | 2 +- .../moodle-local_kaltura-ltipanel.js | 2 +- local/kaltura/yui/src/ltipanel/js/ltipanel.js | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/local/kaltura/yui/build/moodle-local_kaltura-ltipanel/moodle-local_kaltura-ltipanel-debug.js b/local/kaltura/yui/build/moodle-local_kaltura-ltipanel/moodle-local_kaltura-ltipanel-debug.js index 240bb75e4a8e0..63b6efd242196 100644 --- a/local/kaltura/yui/build/moodle-local_kaltura-ltipanel/moodle-local_kaltura-ltipanel-debug.js +++ b/local/kaltura/yui/build/moodle-local_kaltura-ltipanel/moodle-local_kaltura-ltipanel-debug.js @@ -84,7 +84,7 @@ Y.extend(LTIPANEL, Y.Base, { var left = ((width / 2) - (w / 2)) + dualScreenLeft; var top = ((height / 2) - (h / 2)) + dualScreenTop; - var bsePopup = window.open(url, M.util.get_string("browse_and_embed", "local_kaltura"), 'scrollbars=no, width=' + w + ', height=' + h + ', top=' + top + ', left=' + left); + var bsePopup = window.open(url, M.util.get_string("browse_and_embed", "local_kaltura"), 'scrollbars=yes, width=' + w + ', height=' + h + ', top=' + top + ', left=' + left); if (window.focus) { bsePopup.focus(); diff --git a/local/kaltura/yui/build/moodle-local_kaltura-ltipanel/moodle-local_kaltura-ltipanel-min.js b/local/kaltura/yui/build/moodle-local_kaltura-ltipanel/moodle-local_kaltura-ltipanel-min.js index aa2cbb3d10a27..0b130567d31a1 100644 --- a/local/kaltura/yui/build/moodle-local_kaltura-ltipanel/moodle-local_kaltura-ltipanel-min.js +++ b/local/kaltura/yui/build/moodle-local_kaltura-ltipanel/moodle-local_kaltura-ltipanel-min.js @@ -1 +1 @@ -YUI.add("moodle-local_kaltura-ltipanel",function(e,t){var i=function(){i.superclass.constructor.apply(this,arguments)};e.extend(i,e.Base,{modulename:null,addvidbtnid:null,init:function(t){if("0"===t.addvidbtnid||"0"===t.ltilaunchurl||0===t.courseid||0===t.height||0===t.width)return void alert("Some parameters were not initialized.");this.modulename=t.modulename,this.addvidbtnid=t.addvidbtnid;var i=e.one("#"+t.addvidbtnid);i.on("click",this.open_bse_popup_callback,this,t.ltilaunchurl,t.height,t.width)},open_bse_popup_callback:function(e,t,i,n){var d=1200,a=700,o=void 0!=window.screenLeft?window.screenLeft:screen.left,l=void 0!=window.screenTop?window.screenTop:screen.top,n=window.innerWidth?window.innerWidth:document.documentElement.clientWidth?document.documentElement.clientWidth:screen.width,i=window.innerHeight?window.innerHeight:document.documentElement.clientHeight?document.documentElement.clientHeight:screen.height,u=n/2-d/2+o,s=i/2-a/2+l,c=window.open(t,M.util.get_string("browse_and_embed","local_kaltura"),"scrollbars=no, width="+d+", height="+a+", top="+s+", left="+u);window.focus&&c.focus(),document.body.bsePopup=c;var r=new Event("entrySelected");document.body.myEvent=r,document.body.addEventListener("entrySelected",this.close_popup_callback.bind(this),!1)},close_popup_callback:function(){var t=e.one("img[id=video_thumbnail]");t.setStyle("display","none");var i=e.one("iframe[id=contentframe]");i.setAttribute("width",e.one("input[id=width]").getAttribute("value")),i.setAttribute("height",e.one("input[id=height]").getAttribute("value")),i.setStyle("display","inline");var n=e.one("input[name=modulename]");void 0===n||"kalvidres"!==this.modulename&&"kalvidpres"!==this.modulename||this.lti_panel_change_add_media_button_caption(),document.body.bsePopup.close()},lti_panel_change_add_media_button_caption:function(){var t=M.util.get_string("replace_video",this.modulename);t!==e.one("#"+this.addvidbtnid).getAttribute("value")&&e.one("#"+this.addvidbtnid).setAttribute("value",t)}},{NAME:"moodle-local_kaltura-ltipanel",ATTRS:{addvidbtnid:{value:"0"},ltilaunchurl:{value:"0"},height:{value:0},width:{value:0},modulename:{value:""}}});var n=function(){n.superclass.constructor.apply(this,arguments)};e.extend(n,e.Base,{init:function(t){if("0"!==t.addvidbtnid&&"0"!==t.ltilaunchurl&&0!==t.courseid&&0!==t.height&&0!==t.width){var i=e.one("#"+t.addvidbtnid);i.on("click",this.open_bse_popup_callback,this,t.ltilaunchurl,t.height,t.width)}},open_bse_popup_callback:function(e,t,i,n){var d=1200,a=700,o=void 0!=window.screenLeft?window.screenLeft:screen.left,l=void 0!=window.screenTop?window.screenTop:screen.top,n=window.innerWidth?window.innerWidth:document.documentElement.clientWidth?document.documentElement.clientWidth:screen.width,i=window.innerHeight?window.innerHeight:document.documentElement.clientHeight?document.documentElement.clientHeight:screen.height,u=n/2-d/2+o,s=i/2-a/2+l,c=window.open(t,M.util.get_string("browse_and_embed","local_kaltura"),"scrollbars=no, width="+d+", height="+a+", top="+s+", left="+u);window.focus&&c.focus(),document.body.bsePopup=c;var r=new Event("entrySelected");document.body.myEvent=r,document.body.addEventListener("entrySelected",this.close_popup_callback.bind(this))},close_popup_callback:function(){e.one("input[id=submit_video]").removeAttribute("disabled");var t=e.one("img[id=video_thumbnail]");t.setStyle("display","none");var i=e.one("iframe[id=contentframe]");i.setAttribute("width",e.one("input[id=width]").getAttribute("value")),i.setAttribute("height",e.one("input[id=height]").getAttribute("value")),i.setStyle("display","inline"),e.one("#id_add_video").set("value",M.util.get_string("replacevideo","kalvidassign")),document.body.bsePopup.close()}},{NAME:"moodle-local_kaltura-ltipanel",ATTRS:{addvidbtnid:{value:"0"},ltilaunchurl:{value:"0"},height:{value:0},width:{value:0}}});var d=function(){d.superclass.constructor.apply(this,arguments)};e.extend(d,e.Base,{ltimediaassignment:null,init:function(t){this.ltimediaassignment=t,e.one("form[id=fastgrade]").delegate("click",this.review_submission,"a[name=submission_source]",this)},review_submission:function(e){e.preventDefault();var t,i,n;e.target.test("a")?(t=e.target.getAttribute("href"),i=e.target.ancestor("div[name=media_submission]").get("childNodes").filter("input[name=height]").get("value"),n=e.target.ancestor("div[name=media_submission]").get("childNodes").filter("input[name=width]").get("value")):(t=e.target.ancestor("a[name=submission_source]").getAttribute("href"),i=e.target.ancestor("div[name=media_submission]").get("childNodes").filter("input[name=height]").get("value"),n=e.target.ancestor("div[name=media_submission]").get("childNodes").filter("input[name=width]").get("value")),this.ltimediaassignment.open_bse_popup_callback(null,t,i,n)}},{NAME:"moodle-local_kaltura-ltipanel"}),M.local_kaltura=M.local_kaltura||{},M.local_kaltura.init=function(e){return new i(e)},M.local_kaltura.initmediaassignment=function(e){return new n(e)},M.local_kaltura.initreviewsubmission=function(){var e={addvidbtnid:"0",ltilaunchurl:"0",courseid:0,height:0,width:0},t=new n(e);return new d(t)}},"@VERSION@",{requires:["base","node","panel","node-event-simulate"]}); \ No newline at end of file +YUI.add("moodle-local_kaltura-ltipanel",function(e,t){var i=function(){i.superclass.constructor.apply(this,arguments)};e.extend(i,e.Base,{modulename:null,addvidbtnid:null,init:function(t){if("0"===t.addvidbtnid||"0"===t.ltilaunchurl||0===t.courseid||0===t.height||0===t.width)return void alert("Some parameters were not initialized.");this.modulename=t.modulename,this.addvidbtnid=t.addvidbtnid;var i=e.one("#"+t.addvidbtnid);i.on("click",this.open_bse_popup_callback,this,t.ltilaunchurl,t.height,t.width)},open_bse_popup_callback:function(e,t,i,n){var d=1200,a=700,o=void 0!=window.screenLeft?window.screenLeft:screen.left,l=void 0!=window.screenTop?window.screenTop:screen.top,n=window.innerWidth?window.innerWidth:document.documentElement.clientWidth?document.documentElement.clientWidth:screen.width,i=window.innerHeight?window.innerHeight:document.documentElement.clientHeight?document.documentElement.clientHeight:screen.height,u=n/2-d/2+o,s=i/2-a/2+l,c=window.open(t,M.util.get_string("browse_and_embed","local_kaltura"),"scrollbars=yes, width="+d+", height="+a+", top="+s+", left="+u);window.focus&&c.focus(),document.body.bsePopup=c;var r=new Event("entrySelected");document.body.myEvent=r,document.body.addEventListener("entrySelected",this.close_popup_callback.bind(this),!1)},close_popup_callback:function(){var t=e.one("img[id=video_thumbnail]");t.setStyle("display","none");var i=e.one("iframe[id=contentframe]");i.setAttribute("width",e.one("input[id=width]").getAttribute("value")),i.setAttribute("height",e.one("input[id=height]").getAttribute("value")),i.setStyle("display","inline");var n=e.one("input[name=modulename]");void 0===n||"kalvidres"!==this.modulename&&"kalvidpres"!==this.modulename||this.lti_panel_change_add_media_button_caption(),document.body.bsePopup.close()},lti_panel_change_add_media_button_caption:function(){var t=M.util.get_string("replace_video",this.modulename);t!==e.one("#"+this.addvidbtnid).getAttribute("value")&&e.one("#"+this.addvidbtnid).setAttribute("value",t)}},{NAME:"moodle-local_kaltura-ltipanel",ATTRS:{addvidbtnid:{value:"0"},ltilaunchurl:{value:"0"},height:{value:0},width:{value:0},modulename:{value:""}}});var n=function(){n.superclass.constructor.apply(this,arguments)};e.extend(n,e.Base,{init:function(t){if("0"!==t.addvidbtnid&&"0"!==t.ltilaunchurl&&0!==t.courseid&&0!==t.height&&0!==t.width){var i=e.one("#"+t.addvidbtnid);i.on("click",this.open_bse_popup_callback,this,t.ltilaunchurl,t.height,t.width)}},open_bse_popup_callback:function(e,t,i,n){var d=1200,a=700,o=void 0!=window.screenLeft?window.screenLeft:screen.left,l=void 0!=window.screenTop?window.screenTop:screen.top,n=window.innerWidth?window.innerWidth:document.documentElement.clientWidth?document.documentElement.clientWidth:screen.width,i=window.innerHeight?window.innerHeight:document.documentElement.clientHeight?document.documentElement.clientHeight:screen.height,u=n/2-d/2+o,s=i/2-a/2+l,c=window.open(t,M.util.get_string("browse_and_embed","local_kaltura"),"scrollbars=no, width="+d+", height="+a+", top="+s+", left="+u);window.focus&&c.focus(),document.body.bsePopup=c;var r=new Event("entrySelected");document.body.myEvent=r,document.body.addEventListener("entrySelected",this.close_popup_callback.bind(this))},close_popup_callback:function(){e.one("input[id=submit_video]").removeAttribute("disabled");var t=e.one("img[id=video_thumbnail]");t.setStyle("display","none");var i=e.one("iframe[id=contentframe]");i.setAttribute("width",e.one("input[id=width]").getAttribute("value")),i.setAttribute("height",e.one("input[id=height]").getAttribute("value")),i.setStyle("display","inline"),e.one("#id_add_video").set("value",M.util.get_string("replacevideo","kalvidassign")),document.body.bsePopup.close()}},{NAME:"moodle-local_kaltura-ltipanel",ATTRS:{addvidbtnid:{value:"0"},ltilaunchurl:{value:"0"},height:{value:0},width:{value:0}}});var d=function(){d.superclass.constructor.apply(this,arguments)};e.extend(d,e.Base,{ltimediaassignment:null,init:function(t){this.ltimediaassignment=t,e.one("form[id=fastgrade]").delegate("click",this.review_submission,"a[name=submission_source]",this)},review_submission:function(e){e.preventDefault();var t,i,n;e.target.test("a")?(t=e.target.getAttribute("href"),i=e.target.ancestor("div[name=media_submission]").get("childNodes").filter("input[name=height]").get("value"),n=e.target.ancestor("div[name=media_submission]").get("childNodes").filter("input[name=width]").get("value")):(t=e.target.ancestor("a[name=submission_source]").getAttribute("href"),i=e.target.ancestor("div[name=media_submission]").get("childNodes").filter("input[name=height]").get("value"),n=e.target.ancestor("div[name=media_submission]").get("childNodes").filter("input[name=width]").get("value")),this.ltimediaassignment.open_bse_popup_callback(null,t,i,n)}},{NAME:"moodle-local_kaltura-ltipanel"}),M.local_kaltura=M.local_kaltura||{},M.local_kaltura.init=function(e){return new i(e)},M.local_kaltura.initmediaassignment=function(e){return new n(e)},M.local_kaltura.initreviewsubmission=function(){var e={addvidbtnid:"0",ltilaunchurl:"0",courseid:0,height:0,width:0},t=new n(e);return new d(t)}},"@VERSION@",{requires:["base","node","panel","node-event-simulate"]}); \ No newline at end of file diff --git a/local/kaltura/yui/build/moodle-local_kaltura-ltipanel/moodle-local_kaltura-ltipanel.js b/local/kaltura/yui/build/moodle-local_kaltura-ltipanel/moodle-local_kaltura-ltipanel.js index 240bb75e4a8e0..63b6efd242196 100644 --- a/local/kaltura/yui/build/moodle-local_kaltura-ltipanel/moodle-local_kaltura-ltipanel.js +++ b/local/kaltura/yui/build/moodle-local_kaltura-ltipanel/moodle-local_kaltura-ltipanel.js @@ -84,7 +84,7 @@ Y.extend(LTIPANEL, Y.Base, { var left = ((width / 2) - (w / 2)) + dualScreenLeft; var top = ((height / 2) - (h / 2)) + dualScreenTop; - var bsePopup = window.open(url, M.util.get_string("browse_and_embed", "local_kaltura"), 'scrollbars=no, width=' + w + ', height=' + h + ', top=' + top + ', left=' + left); + var bsePopup = window.open(url, M.util.get_string("browse_and_embed", "local_kaltura"), 'scrollbars=yes, width=' + w + ', height=' + h + ', top=' + top + ', left=' + left); if (window.focus) { bsePopup.focus(); diff --git a/local/kaltura/yui/src/ltipanel/js/ltipanel.js b/local/kaltura/yui/src/ltipanel/js/ltipanel.js index 240bb75e4a8e0..63b6efd242196 100644 --- a/local/kaltura/yui/src/ltipanel/js/ltipanel.js +++ b/local/kaltura/yui/src/ltipanel/js/ltipanel.js @@ -84,7 +84,7 @@ Y.extend(LTIPANEL, Y.Base, { var left = ((width / 2) - (w / 2)) + dualScreenLeft; var top = ((height / 2) - (h / 2)) + dualScreenTop; - var bsePopup = window.open(url, M.util.get_string("browse_and_embed", "local_kaltura"), 'scrollbars=no, width=' + w + ', height=' + h + ', top=' + top + ', left=' + left); + var bsePopup = window.open(url, M.util.get_string("browse_and_embed", "local_kaltura"), 'scrollbars=yes, width=' + w + ', height=' + h + ', top=' + top + ', left=' + left); if (window.focus) { bsePopup.focus(); From 0f9c746347c00e30416347cff2d58cc769628cfa Mon Sep 17 00:00:00 2001 From: Muli Dayan Date: Wed, 6 Jul 2016 16:09:50 +0300 Subject: [PATCH 120/326] add browse and embed string to English language --- local/kaltura/lang/en/local_kaltura.php | 1 + 1 file changed, 1 insertion(+) diff --git a/local/kaltura/lang/en/local_kaltura.php b/local/kaltura/lang/en/local_kaltura.php index 6a1f4566c77b0..dff70a487d809 100644 --- a/local/kaltura/lang/en/local_kaltura.php +++ b/local/kaltura/lang/en/local_kaltura.php @@ -70,3 +70,4 @@ $string['time'] = 'Time'; $string['trace_log'] = 'Enable trace logging'; $string['trace_log_desc'] = 'If enabled, all requests and responses to and from Kaltura are logged. These logs can be used by Kaltura support to diagnose any problems encountered. Enabling this setting may affect Moodle performance. You may download a CSV file of the logs from here.'; +$string['browse_and_embed'] = 'Browse and Embed'; \ No newline at end of file From 1f025029c41ca61ea3230174f2921ece90b15cc0 Mon Sep 17 00:00:00 2001 From: Muli Dayan Date: Wed, 6 Jul 2016 16:14:29 +0300 Subject: [PATCH 121/326] bump build number - 2016070630 --- filter/kaltura/version.php | 4 ++-- lib/editor/atto/plugins/kalturamedia/version.php | 4 ++-- lib/editor/tinymce/plugins/kalturamedia/version.php | 4 ++-- local/kaltura/db/upgrade.php | 6 +++--- local/kaltura/version.php | 2 +- local/kalturamediagallery/version.php | 4 ++-- local/mymedia/version.php | 4 ++-- mod/kalvidassign/version.php | 4 ++-- mod/kalvidpres/version.php | 4 ++-- mod/kalvidres/version.php | 4 ++-- 10 files changed, 20 insertions(+), 20 deletions(-) diff --git a/filter/kaltura/version.php b/filter/kaltura/version.php index a12f860debc3a..ed464217cbb18 100644 --- a/filter/kaltura/version.php +++ b/filter/kaltura/version.php @@ -24,11 +24,11 @@ */ defined('MOODLE_INTERNAL') || die(); -$plugin->version = 2016062730; //version date YYYYMMDDXX 10 represent 3.0 for future option to moodle use 2 digit version +$plugin->version = 2016070630; //version date YYYYMMDDXX 10 represent 3.0 for future option to moodle use 2 digit version $plugin->component = 'filter_kaltura'; $plugin->release = 'Kaltura release 4.0.10'; $plugin->requires = 2014050800; $plugin->maturity = MATURITY_STABLE; $plugin->dependencies = array( - 'local_kaltura' => 2016062730 + 'local_kaltura' => 2016070630 ); diff --git a/lib/editor/atto/plugins/kalturamedia/version.php b/lib/editor/atto/plugins/kalturamedia/version.php index c59fe0d86ed9a..ffb98d83ff7c2 100644 --- a/lib/editor/atto/plugins/kalturamedia/version.php +++ b/lib/editor/atto/plugins/kalturamedia/version.php @@ -24,10 +24,10 @@ defined('MOODLE_INTERNAL') || die(); -$plugin->version = 2016062730; // The current plugin version (Date: YYYYMMDDXX). +$plugin->version = 2016070630; // The current plugin version (Date: YYYYMMDDXX). $plugin->release = 'Kaltura release 4.0.10'; $plugin->requires = 2014050800; // Requires this Moodle version. $plugin->component = 'atto_kalturamedia'; // Full name of the plugin (used for diagnostics). $plugin->dependencies = array( - 'local_kaltura' => 2016062730 + 'local_kaltura' => 2016070630 ); diff --git a/lib/editor/tinymce/plugins/kalturamedia/version.php b/lib/editor/tinymce/plugins/kalturamedia/version.php index 0e28ff2400a20..b8544b15d4da9 100644 --- a/lib/editor/tinymce/plugins/kalturamedia/version.php +++ b/lib/editor/tinymce/plugins/kalturamedia/version.php @@ -23,12 +23,12 @@ defined('MOODLE_INTERNAL') || die(); -$plugin->version = 2016062730; +$plugin->version = 2016070630; $plugin->release = 'Kaltura release 4.0.10'; // Required Moodle version. $plugin->requires = 2014050800; // Full name of the plugin (used for diagnostics). $plugin->component = 'tinymce_kalturamedia'; $plugin->dependencies = array( - 'local_kaltura' => 2016062730 + 'local_kaltura' => 2016070630 ); diff --git a/local/kaltura/db/upgrade.php b/local/kaltura/db/upgrade.php index 5e032022a4c2d..a6d7201b9ca8f 100644 --- a/local/kaltura/db/upgrade.php +++ b/local/kaltura/db/upgrade.php @@ -59,11 +59,11 @@ function xmldb_local_kaltura_upgrade($oldversion) { } // Kaltura savepoint reached. - upgrade_plugin_savepoint(true, 2016062730, 'local', 'kaltura'); + upgrade_plugin_savepoint(true, 2016070630, 'local', 'kaltura'); $savePointDone = true; } - if (!$savePointDone && $oldversion < 2016062730) { + if (!$savePointDone && $oldversion < 2016070630) { if($dbman->table_exists('local_kaltura_log') && $dbman->field_exists('local_kaltura_log', 'endpoint')) { $table = new xmldb_table('local_kaltura_log'); $updatedFieldSchema = new xmldb_field('endpoint', XMLDB_TYPE_TEXT, null, null, XMLDB_NOTNULL, null, null, null); @@ -71,7 +71,7 @@ function xmldb_local_kaltura_upgrade($oldversion) { } // Kaltura savepoint reached. - upgrade_plugin_savepoint(true, 2016062730, 'local', 'kaltura'); + upgrade_plugin_savepoint(true, 2016070630, 'local', 'kaltura'); } return true; } diff --git a/local/kaltura/version.php b/local/kaltura/version.php index 3f96160dd30fe..6ae85ff3efbbf 100644 --- a/local/kaltura/version.php +++ b/local/kaltura/version.php @@ -25,7 +25,7 @@ die('Direct access to this script is forbidden.'); } -$plugin->version = 2016062730; +$plugin->version = 2016070630; $plugin->component = 'local_kaltura'; $plugin->release = 'Kaltura release 4.0.10'; $plugin->requires = 2014050800; diff --git a/local/kalturamediagallery/version.php b/local/kalturamediagallery/version.php index 9da5fcf647be4..804dc832c7a60 100644 --- a/local/kalturamediagallery/version.php +++ b/local/kalturamediagallery/version.php @@ -26,11 +26,11 @@ die('Direct access to this script is forbidden.'); } -$plugin->version = 2016062730; +$plugin->version = 2016070630; $plugin->component = 'local_kalturamediagallery'; $plugin->release = 'Kaltura release 4.0.10'; $plugin->requires = 2014050800; $plugin->maturity = MATURITY_STABLE; $plugin->dependencies = array( - 'local_kaltura' => 2016062730 + 'local_kaltura' => 2016070630 ); diff --git a/local/mymedia/version.php b/local/mymedia/version.php index 51fca27987d49..92da0b731fae6 100644 --- a/local/mymedia/version.php +++ b/local/mymedia/version.php @@ -25,11 +25,11 @@ die('Direct access to this script is forbidden.'); } -$plugin->version = 2016062730; +$plugin->version = 2016070630; $plugin->component = 'local_mymedia'; $plugin->release = 'Kaltura release 4.0.10'; $plugin->requires = 2014050800; $plugin->maturity = MATURITY_STABLE; $plugin->dependencies = array( - 'local_kaltura' => 2016062730 + 'local_kaltura' => 2016070630 ); diff --git a/mod/kalvidassign/version.php b/mod/kalvidassign/version.php index 732b60f2c706e..45ea136c09056 100644 --- a/mod/kalvidassign/version.php +++ b/mod/kalvidassign/version.php @@ -25,12 +25,12 @@ die('Direct access to this script is forbidden.'); } -$plugin->version = 2016062730; +$plugin->version = 2016070630; $plugin->component = 'mod_kalvidassign'; $plugin->release = 'Kaltura release 4.0.10'; $plugin->requires = 2014050800; $plugin->cron = 0; $plugin->maturity = MATURITY_STABLE; $plugin->dependencies = array( - 'local_kaltura' => 2016062730, + 'local_kaltura' => 2016070630, ); diff --git a/mod/kalvidpres/version.php b/mod/kalvidpres/version.php index b393704037f5d..a2e7ed2dd8725 100644 --- a/mod/kalvidpres/version.php +++ b/mod/kalvidpres/version.php @@ -25,12 +25,12 @@ die('Direct access to this script is forbidden.'); } -$plugin->version = 2016062730; +$plugin->version = 2016070630; $plugin->component = 'mod_kalvidpres'; $plugin->release = 'Kaltura release 4.0.10'; $plugin->requires = 2014050800; $plugin->cron = 0; $plugin->maturity = MATURITY_STABLE; $plugin->dependencies = array( - 'local_kaltura' => 2016062730 + 'local_kaltura' => 2016070630 ); diff --git a/mod/kalvidres/version.php b/mod/kalvidres/version.php index f144b0b9e8ec8..6de5589932254 100644 --- a/mod/kalvidres/version.php +++ b/mod/kalvidres/version.php @@ -25,12 +25,12 @@ die('Direct access to this script is forbidden.'); } -$plugin->version = 2016062730; +$plugin->version = 2016070630; $plugin->component = 'mod_kalvidres'; $plugin->release = 'Kaltura release 4.0.10'; $plugin->requires = 2014050800; $plugin->cron = 0; $plugin->maturity = MATURITY_STABLE; $plugin->dependencies = array( - 'local_kaltura' => 2016062730 + 'local_kaltura' => 2016070630 ); From 77578831b25a91e9d48dd7fbf0d6b0db72c06f34 Mon Sep 17 00:00:00 2001 From: Muli Dayan Date: Thu, 7 Jul 2016 13:45:45 +0300 Subject: [PATCH 122/326] KMS-11965 polyfill CustomEvent for IE --- local/kaltura/yui/src/ltipanel/js/ltipanel.js | 40 ++++++++++++++++--- .../yui/src/ltiservice/js/ltiservice.js | 2 +- 2 files changed, 36 insertions(+), 6 deletions(-) diff --git a/local/kaltura/yui/src/ltipanel/js/ltipanel.js b/local/kaltura/yui/src/ltipanel/js/ltipanel.js index 63b6efd242196..5a7c876a0de62 100644 --- a/local/kaltura/yui/src/ltipanel/js/ltipanel.js +++ b/local/kaltura/yui/src/ltipanel/js/ltipanel.js @@ -91,11 +91,27 @@ Y.extend(LTIPANEL, Y.Base, { } document.body.bsePopup = bsePopup; - var entrySelectedEvent = new Event('entrySelected'); - document.body.myEvent = entrySelectedEvent; + var entrySelectedEvent = this.createEntrySelectedEvent(); + document.body.entrySelectedEvent = entrySelectedEvent; document.body.addEventListener('entrySelected', this.close_popup_callback.bind(this), false); }, + createEntrySelectedEvent: function() { + var entrySelectedEvent; + if(typeof window.CustomEvent === 'function') { + entrySelectedEvent = new CustomEvent('entrySelected'); + } + else { + // ie >= 9 + entrySelectedEvent = document.createEvent('CustomEvent'); + entrySelectedEvent.initCustomEvent('entrySelected', false, false, {}); + } + + return entrySelectedEvent; + }, + + + /** * Event handler callback for when a simulated click event is triggered on a specifc element. */ @@ -197,9 +213,23 @@ Y.extend(LTIPANELMEDIAASSIGNMENT, Y.Base, { } document.body.bsePopup = bsePopup; - var entrySelectedEvent = new Event('entrySelected'); - document.body.myEvent = entrySelectedEvent; - document.body.addEventListener('entrySelected', this.close_popup_callback.bind(this)); + var entrySelectedEvent = this.createEntrySelectedEvent(); + document.body.entrySelectedEvent = entrySelectedEvent; + document.body.addEventListener('entrySelected', this.close_popup_callback.bind(this), false); + }, + + createEntrySelectedEvent: function() { + var entrySelectedEvent; + if(typeof window.CustomEvent === 'function') { + entrySelectedEvent = new CustomEvent('entrySelected'); + } + else { + // ie >= 9 + entrySelectedEvent = document.createEvent('CustomEvent'); + entrySelectedEvent.initCustomEvent('entrySelected', false, false, {}); + } + + return entrySelectedEvent; }, close_popup_callback: function() { diff --git a/local/kaltura/yui/src/ltiservice/js/ltiservice.js b/local/kaltura/yui/src/ltiservice/js/ltiservice.js index 2f37f0205c69e..c0a22b6b09790 100644 --- a/local/kaltura/yui/src/ltiservice/js/ltiservice.js +++ b/local/kaltura/yui/src/ltiservice/js/ltiservice.js @@ -83,7 +83,7 @@ Y.extend(LTISERVICE, Y.Base, { Y.one(documentElement.getElementById('closeltipanel')).simulate('click'); } - documentElement.body.dispatchEvent(documentElement.body.myEvent); + documentElement.body.dispatchEvent(documentElement.body.entrySelectedEvent); } }, { From 049ed4e3b154fe0cb5b9bae7fa25a52e9febcc8a Mon Sep 17 00:00:00 2001 From: Muli Dayan Date: Thu, 7 Jul 2016 13:47:02 +0300 Subject: [PATCH 123/326] KMS-11965 build source js files --- .../moodle-local_kaltura-ltipanel-debug.js | 40 ++++++++++++++++--- .../moodle-local_kaltura-ltipanel-min.js | 2 +- .../moodle-local_kaltura-ltipanel.js | 40 ++++++++++++++++--- .../moodle-local_kaltura-ltiservice-debug.js | 5 ++- .../moodle-local_kaltura-ltiservice-min.js | 2 +- .../moodle-local_kaltura-ltiservice.js | 2 +- 6 files changed, 77 insertions(+), 14 deletions(-) diff --git a/local/kaltura/yui/build/moodle-local_kaltura-ltipanel/moodle-local_kaltura-ltipanel-debug.js b/local/kaltura/yui/build/moodle-local_kaltura-ltipanel/moodle-local_kaltura-ltipanel-debug.js index 63b6efd242196..5a7c876a0de62 100644 --- a/local/kaltura/yui/build/moodle-local_kaltura-ltipanel/moodle-local_kaltura-ltipanel-debug.js +++ b/local/kaltura/yui/build/moodle-local_kaltura-ltipanel/moodle-local_kaltura-ltipanel-debug.js @@ -91,11 +91,27 @@ Y.extend(LTIPANEL, Y.Base, { } document.body.bsePopup = bsePopup; - var entrySelectedEvent = new Event('entrySelected'); - document.body.myEvent = entrySelectedEvent; + var entrySelectedEvent = this.createEntrySelectedEvent(); + document.body.entrySelectedEvent = entrySelectedEvent; document.body.addEventListener('entrySelected', this.close_popup_callback.bind(this), false); }, + createEntrySelectedEvent: function() { + var entrySelectedEvent; + if(typeof window.CustomEvent === 'function') { + entrySelectedEvent = new CustomEvent('entrySelected'); + } + else { + // ie >= 9 + entrySelectedEvent = document.createEvent('CustomEvent'); + entrySelectedEvent.initCustomEvent('entrySelected', false, false, {}); + } + + return entrySelectedEvent; + }, + + + /** * Event handler callback for when a simulated click event is triggered on a specifc element. */ @@ -197,9 +213,23 @@ Y.extend(LTIPANELMEDIAASSIGNMENT, Y.Base, { } document.body.bsePopup = bsePopup; - var entrySelectedEvent = new Event('entrySelected'); - document.body.myEvent = entrySelectedEvent; - document.body.addEventListener('entrySelected', this.close_popup_callback.bind(this)); + var entrySelectedEvent = this.createEntrySelectedEvent(); + document.body.entrySelectedEvent = entrySelectedEvent; + document.body.addEventListener('entrySelected', this.close_popup_callback.bind(this), false); + }, + + createEntrySelectedEvent: function() { + var entrySelectedEvent; + if(typeof window.CustomEvent === 'function') { + entrySelectedEvent = new CustomEvent('entrySelected'); + } + else { + // ie >= 9 + entrySelectedEvent = document.createEvent('CustomEvent'); + entrySelectedEvent.initCustomEvent('entrySelected', false, false, {}); + } + + return entrySelectedEvent; }, close_popup_callback: function() { diff --git a/local/kaltura/yui/build/moodle-local_kaltura-ltipanel/moodle-local_kaltura-ltipanel-min.js b/local/kaltura/yui/build/moodle-local_kaltura-ltipanel/moodle-local_kaltura-ltipanel-min.js index 0b130567d31a1..7f62e64cedc5a 100644 --- a/local/kaltura/yui/build/moodle-local_kaltura-ltipanel/moodle-local_kaltura-ltipanel-min.js +++ b/local/kaltura/yui/build/moodle-local_kaltura-ltipanel/moodle-local_kaltura-ltipanel-min.js @@ -1 +1 @@ -YUI.add("moodle-local_kaltura-ltipanel",function(e,t){var i=function(){i.superclass.constructor.apply(this,arguments)};e.extend(i,e.Base,{modulename:null,addvidbtnid:null,init:function(t){if("0"===t.addvidbtnid||"0"===t.ltilaunchurl||0===t.courseid||0===t.height||0===t.width)return void alert("Some parameters were not initialized.");this.modulename=t.modulename,this.addvidbtnid=t.addvidbtnid;var i=e.one("#"+t.addvidbtnid);i.on("click",this.open_bse_popup_callback,this,t.ltilaunchurl,t.height,t.width)},open_bse_popup_callback:function(e,t,i,n){var d=1200,a=700,o=void 0!=window.screenLeft?window.screenLeft:screen.left,l=void 0!=window.screenTop?window.screenTop:screen.top,n=window.innerWidth?window.innerWidth:document.documentElement.clientWidth?document.documentElement.clientWidth:screen.width,i=window.innerHeight?window.innerHeight:document.documentElement.clientHeight?document.documentElement.clientHeight:screen.height,u=n/2-d/2+o,s=i/2-a/2+l,c=window.open(t,M.util.get_string("browse_and_embed","local_kaltura"),"scrollbars=yes, width="+d+", height="+a+", top="+s+", left="+u);window.focus&&c.focus(),document.body.bsePopup=c;var r=new Event("entrySelected");document.body.myEvent=r,document.body.addEventListener("entrySelected",this.close_popup_callback.bind(this),!1)},close_popup_callback:function(){var t=e.one("img[id=video_thumbnail]");t.setStyle("display","none");var i=e.one("iframe[id=contentframe]");i.setAttribute("width",e.one("input[id=width]").getAttribute("value")),i.setAttribute("height",e.one("input[id=height]").getAttribute("value")),i.setStyle("display","inline");var n=e.one("input[name=modulename]");void 0===n||"kalvidres"!==this.modulename&&"kalvidpres"!==this.modulename||this.lti_panel_change_add_media_button_caption(),document.body.bsePopup.close()},lti_panel_change_add_media_button_caption:function(){var t=M.util.get_string("replace_video",this.modulename);t!==e.one("#"+this.addvidbtnid).getAttribute("value")&&e.one("#"+this.addvidbtnid).setAttribute("value",t)}},{NAME:"moodle-local_kaltura-ltipanel",ATTRS:{addvidbtnid:{value:"0"},ltilaunchurl:{value:"0"},height:{value:0},width:{value:0},modulename:{value:""}}});var n=function(){n.superclass.constructor.apply(this,arguments)};e.extend(n,e.Base,{init:function(t){if("0"!==t.addvidbtnid&&"0"!==t.ltilaunchurl&&0!==t.courseid&&0!==t.height&&0!==t.width){var i=e.one("#"+t.addvidbtnid);i.on("click",this.open_bse_popup_callback,this,t.ltilaunchurl,t.height,t.width)}},open_bse_popup_callback:function(e,t,i,n){var d=1200,a=700,o=void 0!=window.screenLeft?window.screenLeft:screen.left,l=void 0!=window.screenTop?window.screenTop:screen.top,n=window.innerWidth?window.innerWidth:document.documentElement.clientWidth?document.documentElement.clientWidth:screen.width,i=window.innerHeight?window.innerHeight:document.documentElement.clientHeight?document.documentElement.clientHeight:screen.height,u=n/2-d/2+o,s=i/2-a/2+l,c=window.open(t,M.util.get_string("browse_and_embed","local_kaltura"),"scrollbars=no, width="+d+", height="+a+", top="+s+", left="+u);window.focus&&c.focus(),document.body.bsePopup=c;var r=new Event("entrySelected");document.body.myEvent=r,document.body.addEventListener("entrySelected",this.close_popup_callback.bind(this))},close_popup_callback:function(){e.one("input[id=submit_video]").removeAttribute("disabled");var t=e.one("img[id=video_thumbnail]");t.setStyle("display","none");var i=e.one("iframe[id=contentframe]");i.setAttribute("width",e.one("input[id=width]").getAttribute("value")),i.setAttribute("height",e.one("input[id=height]").getAttribute("value")),i.setStyle("display","inline"),e.one("#id_add_video").set("value",M.util.get_string("replacevideo","kalvidassign")),document.body.bsePopup.close()}},{NAME:"moodle-local_kaltura-ltipanel",ATTRS:{addvidbtnid:{value:"0"},ltilaunchurl:{value:"0"},height:{value:0},width:{value:0}}});var d=function(){d.superclass.constructor.apply(this,arguments)};e.extend(d,e.Base,{ltimediaassignment:null,init:function(t){this.ltimediaassignment=t,e.one("form[id=fastgrade]").delegate("click",this.review_submission,"a[name=submission_source]",this)},review_submission:function(e){e.preventDefault();var t,i,n;e.target.test("a")?(t=e.target.getAttribute("href"),i=e.target.ancestor("div[name=media_submission]").get("childNodes").filter("input[name=height]").get("value"),n=e.target.ancestor("div[name=media_submission]").get("childNodes").filter("input[name=width]").get("value")):(t=e.target.ancestor("a[name=submission_source]").getAttribute("href"),i=e.target.ancestor("div[name=media_submission]").get("childNodes").filter("input[name=height]").get("value"),n=e.target.ancestor("div[name=media_submission]").get("childNodes").filter("input[name=width]").get("value")),this.ltimediaassignment.open_bse_popup_callback(null,t,i,n)}},{NAME:"moodle-local_kaltura-ltipanel"}),M.local_kaltura=M.local_kaltura||{},M.local_kaltura.init=function(e){return new i(e)},M.local_kaltura.initmediaassignment=function(e){return new n(e)},M.local_kaltura.initreviewsubmission=function(){var e={addvidbtnid:"0",ltilaunchurl:"0",courseid:0,height:0,width:0},t=new n(e);return new d(t)}},"@VERSION@",{requires:["base","node","panel","node-event-simulate"]}); \ No newline at end of file +YUI.add("moodle-local_kaltura-ltipanel",function(e,t){var n=function(){n.superclass.constructor.apply(this,arguments)};e.extend(n,e.Base,{modulename:null,addvidbtnid:null,init:function(t){if("0"===t.addvidbtnid||"0"===t.ltilaunchurl||0===t.courseid||0===t.height||0===t.width)return void alert("Some parameters were not initialized.");this.modulename=t.modulename,this.addvidbtnid=t.addvidbtnid;var n=e.one("#"+t.addvidbtnid);n.on("click",this.open_bse_popup_callback,this,t.ltilaunchurl,t.height,t.width)},open_bse_popup_callback:function(e,t,n,i){var d=1200,o=700,a=void 0!=window.screenLeft?window.screenLeft:screen.left,l=void 0!=window.screenTop?window.screenTop:screen.top,i=window.innerWidth?window.innerWidth:document.documentElement.clientWidth?document.documentElement.clientWidth:screen.width,n=window.innerHeight?window.innerHeight:document.documentElement.clientHeight?document.documentElement.clientHeight:screen.height,u=i/2-d/2+a,s=n/2-o/2+l,c=window.open(t,M.util.get_string("browse_and_embed","local_kaltura"),"scrollbars=yes, width="+d+", height="+o+", top="+s+", left="+u);window.focus&&c.focus(),document.body.bsePopup=c;var r=this.createEntrySelectedEvent();document.body.entrySelectedEvent=r,document.body.addEventListener("entrySelected",this.close_popup_callback.bind(this),!1)},createEntrySelectedEvent:function(){var e;return"function"==typeof window.CustomEvent?e=new CustomEvent("entrySelected"):(e=document.createEvent("CustomEvent"),e.initCustomEvent("entrySelected",!1,!1,{})),e},close_popup_callback:function(){var t=e.one("img[id=video_thumbnail]");t.setStyle("display","none");var n=e.one("iframe[id=contentframe]");n.setAttribute("width",e.one("input[id=width]").getAttribute("value")),n.setAttribute("height",e.one("input[id=height]").getAttribute("value")),n.setStyle("display","inline");var i=e.one("input[name=modulename]");void 0===i||"kalvidres"!==this.modulename&&"kalvidpres"!==this.modulename||this.lti_panel_change_add_media_button_caption(),document.body.bsePopup.close()},lti_panel_change_add_media_button_caption:function(){var t=M.util.get_string("replace_video",this.modulename);t!==e.one("#"+this.addvidbtnid).getAttribute("value")&&e.one("#"+this.addvidbtnid).setAttribute("value",t)}},{NAME:"moodle-local_kaltura-ltipanel",ATTRS:{addvidbtnid:{value:"0"},ltilaunchurl:{value:"0"},height:{value:0},width:{value:0},modulename:{value:""}}});var i=function(){i.superclass.constructor.apply(this,arguments)};e.extend(i,e.Base,{init:function(t){if("0"!==t.addvidbtnid&&"0"!==t.ltilaunchurl&&0!==t.courseid&&0!==t.height&&0!==t.width){var n=e.one("#"+t.addvidbtnid);n.on("click",this.open_bse_popup_callback,this,t.ltilaunchurl,t.height,t.width)}},open_bse_popup_callback:function(e,t,n,i){var d=1200,o=700,a=void 0!=window.screenLeft?window.screenLeft:screen.left,l=void 0!=window.screenTop?window.screenTop:screen.top,i=window.innerWidth?window.innerWidth:document.documentElement.clientWidth?document.documentElement.clientWidth:screen.width,n=window.innerHeight?window.innerHeight:document.documentElement.clientHeight?document.documentElement.clientHeight:screen.height,u=i/2-d/2+a,s=n/2-o/2+l,c=window.open(t,M.util.get_string("browse_and_embed","local_kaltura"),"scrollbars=no, width="+d+", height="+o+", top="+s+", left="+u);window.focus&&c.focus(),document.body.bsePopup=c;var r=this.createEntrySelectedEvent();document.body.entrySelectedEvent=r,document.body.addEventListener("entrySelected",this.close_popup_callback.bind(this),!1)},createEntrySelectedEvent:function(){var e;return"function"==typeof window.CustomEvent?e=new CustomEvent("entrySelected"):(e=document.createEvent("CustomEvent"),e.initCustomEvent("entrySelected",!1,!1,{})),e},close_popup_callback:function(){e.one("input[id=submit_video]").removeAttribute("disabled");var t=e.one("img[id=video_thumbnail]");t.setStyle("display","none");var n=e.one("iframe[id=contentframe]");n.setAttribute("width",e.one("input[id=width]").getAttribute("value")),n.setAttribute("height",e.one("input[id=height]").getAttribute("value")),n.setStyle("display","inline"),e.one("#id_add_video").set("value",M.util.get_string("replacevideo","kalvidassign")),document.body.bsePopup.close()}},{NAME:"moodle-local_kaltura-ltipanel",ATTRS:{addvidbtnid:{value:"0"},ltilaunchurl:{value:"0"},height:{value:0},width:{value:0}}});var d=function(){d.superclass.constructor.apply(this,arguments)};e.extend(d,e.Base,{ltimediaassignment:null,init:function(t){this.ltimediaassignment=t,e.one("form[id=fastgrade]").delegate("click",this.review_submission,"a[name=submission_source]",this)},review_submission:function(e){e.preventDefault();var t,n,i;e.target.test("a")?(t=e.target.getAttribute("href"),n=e.target.ancestor("div[name=media_submission]").get("childNodes").filter("input[name=height]").get("value"),i=e.target.ancestor("div[name=media_submission]").get("childNodes").filter("input[name=width]").get("value")):(t=e.target.ancestor("a[name=submission_source]").getAttribute("href"),n=e.target.ancestor("div[name=media_submission]").get("childNodes").filter("input[name=height]").get("value"),i=e.target.ancestor("div[name=media_submission]").get("childNodes").filter("input[name=width]").get("value")),this.ltimediaassignment.open_bse_popup_callback(null,t,n,i)}},{NAME:"moodle-local_kaltura-ltipanel"}),M.local_kaltura=M.local_kaltura||{},M.local_kaltura.init=function(e){return new n(e)},M.local_kaltura.initmediaassignment=function(e){return new i(e)},M.local_kaltura.initreviewsubmission=function(){var e={addvidbtnid:"0",ltilaunchurl:"0",courseid:0,height:0,width:0},t=new i(e);return new d(t)}},"@VERSION@",{requires:["base","node","panel","node-event-simulate"]}); \ No newline at end of file diff --git a/local/kaltura/yui/build/moodle-local_kaltura-ltipanel/moodle-local_kaltura-ltipanel.js b/local/kaltura/yui/build/moodle-local_kaltura-ltipanel/moodle-local_kaltura-ltipanel.js index 63b6efd242196..5a7c876a0de62 100644 --- a/local/kaltura/yui/build/moodle-local_kaltura-ltipanel/moodle-local_kaltura-ltipanel.js +++ b/local/kaltura/yui/build/moodle-local_kaltura-ltipanel/moodle-local_kaltura-ltipanel.js @@ -91,11 +91,27 @@ Y.extend(LTIPANEL, Y.Base, { } document.body.bsePopup = bsePopup; - var entrySelectedEvent = new Event('entrySelected'); - document.body.myEvent = entrySelectedEvent; + var entrySelectedEvent = this.createEntrySelectedEvent(); + document.body.entrySelectedEvent = entrySelectedEvent; document.body.addEventListener('entrySelected', this.close_popup_callback.bind(this), false); }, + createEntrySelectedEvent: function() { + var entrySelectedEvent; + if(typeof window.CustomEvent === 'function') { + entrySelectedEvent = new CustomEvent('entrySelected'); + } + else { + // ie >= 9 + entrySelectedEvent = document.createEvent('CustomEvent'); + entrySelectedEvent.initCustomEvent('entrySelected', false, false, {}); + } + + return entrySelectedEvent; + }, + + + /** * Event handler callback for when a simulated click event is triggered on a specifc element. */ @@ -197,9 +213,23 @@ Y.extend(LTIPANELMEDIAASSIGNMENT, Y.Base, { } document.body.bsePopup = bsePopup; - var entrySelectedEvent = new Event('entrySelected'); - document.body.myEvent = entrySelectedEvent; - document.body.addEventListener('entrySelected', this.close_popup_callback.bind(this)); + var entrySelectedEvent = this.createEntrySelectedEvent(); + document.body.entrySelectedEvent = entrySelectedEvent; + document.body.addEventListener('entrySelected', this.close_popup_callback.bind(this), false); + }, + + createEntrySelectedEvent: function() { + var entrySelectedEvent; + if(typeof window.CustomEvent === 'function') { + entrySelectedEvent = new CustomEvent('entrySelected'); + } + else { + // ie >= 9 + entrySelectedEvent = document.createEvent('CustomEvent'); + entrySelectedEvent.initCustomEvent('entrySelected', false, false, {}); + } + + return entrySelectedEvent; }, close_popup_callback: function() { diff --git a/local/kaltura/yui/build/moodle-local_kaltura-ltiservice/moodle-local_kaltura-ltiservice-debug.js b/local/kaltura/yui/build/moodle-local_kaltura-ltiservice/moodle-local_kaltura-ltiservice-debug.js index 2f37f0205c69e..3b457805e4842 100644 --- a/local/kaltura/yui/build/moodle-local_kaltura-ltiservice/moodle-local_kaltura-ltiservice-debug.js +++ b/local/kaltura/yui/build/moodle-local_kaltura-ltiservice/moodle-local_kaltura-ltiservice-debug.js @@ -39,6 +39,9 @@ Y.extend(LTISERVICE, Y.Base, { * @type {Object} */ init : function(params) { + +debugger; + var documentElement = window.opener ? window.opener.parent.document : window.parent.document; if (documentElement.getElementById('video_title')) { Y.one(documentElement.getElementById('video_title')).setAttribute('value', params.title); @@ -83,7 +86,7 @@ Y.extend(LTISERVICE, Y.Base, { Y.one(documentElement.getElementById('closeltipanel')).simulate('click'); } - documentElement.body.dispatchEvent(documentElement.body.myEvent); + documentElement.body.dispatchEvent(documentElement.body.entrySelectedEvent); } }, { diff --git a/local/kaltura/yui/build/moodle-local_kaltura-ltiservice/moodle-local_kaltura-ltiservice-min.js b/local/kaltura/yui/build/moodle-local_kaltura-ltiservice/moodle-local_kaltura-ltiservice-min.js index 7ea40ce5f2abb..7de72c43ac503 100644 --- a/local/kaltura/yui/build/moodle-local_kaltura-ltiservice/moodle-local_kaltura-ltiservice-min.js +++ b/local/kaltura/yui/build/moodle-local_kaltura-ltiservice/moodle-local_kaltura-ltiservice-min.js @@ -1 +1 @@ -YUI.add("moodle-local_kaltura-ltiservice",function(e,t){var n=function(){n.superclass.constructor.apply(this,arguments)};e.extend(n,e.Base,{init:function(t){var n=window.opener?window.opener.parent.document:window.parent.document;n.getElementById("video_title")&&e.one(n.getElementById("video_title")).setAttribute("value",t.title),n.getElementById("entry_id")&&e.one(n.getElementById("entry_id")).setAttribute("value",t.entryid),n.getElementById("height")&&e.one(n.getElementById("height")).setAttribute("value",t.height),n.getElementById("width")&&e.one(n.getElementById("width")).setAttribute("value",t.width),n.getElementById("uiconf_id")&&e.one(n.getElementById("uiconf_id")).setAttribute("value","1"),n.getElementById("widescreen")&&e.one(n.getElementById("widescreen")).setAttribute("value","1"),n.getElementById("video_preview_frame")?e.one(n.getElementById("video_preview_frame")).setAttribute("src",t.previewltilauncher):n.getElementById("contentframe")&&(e.one(n.getElementById("contentframe")).setAttribute("src",decodeURIComponent(t.iframeurl)),e.one(n.getElementById("contentframe")).setStyle("width",t.width+"px"),e.one(n.getElementById("contentframe")).setStyle("height",t.height+"px")),e.one(n.getElementById("source")).setAttribute("value",decodeURIComponent(t.iframeurl)),n.getElementById("metadata")&&e.one(n.getElementById("metadata")).setAttribute("value",t.metadata),n.getElementById("closeltipanel")&&e.one(n.getElementById("closeltipanel")).simulate("click"),n.body.dispatchEvent(n.body.myEvent)}},{NAME:"moodle-local_kaltura-ltiservice",ATTRS:{iframeurl:{value:""},width:{value:""},height:{value:""},entryid:{value:""},title:{value:""},metadata:{value:""}}}),M.local_kaltura=M.local_kaltura||{},M.local_kaltura.init=function(e){return new n(e)}},"@VERSION@",{requires:["base","node","node-event-simulate"]}); \ No newline at end of file +YUI.add("moodle-local_kaltura-ltiservice",function(e,t){var n=function(){n.superclass.constructor.apply(this,arguments)};e.extend(n,e.Base,{init:function(t){var n=window.opener?window.opener.parent.document:window.parent.document;n.getElementById("video_title")&&e.one(n.getElementById("video_title")).setAttribute("value",t.title),n.getElementById("entry_id")&&e.one(n.getElementById("entry_id")).setAttribute("value",t.entryid),n.getElementById("height")&&e.one(n.getElementById("height")).setAttribute("value",t.height),n.getElementById("width")&&e.one(n.getElementById("width")).setAttribute("value",t.width),n.getElementById("uiconf_id")&&e.one(n.getElementById("uiconf_id")).setAttribute("value","1"),n.getElementById("widescreen")&&e.one(n.getElementById("widescreen")).setAttribute("value","1"),n.getElementById("video_preview_frame")?e.one(n.getElementById("video_preview_frame")).setAttribute("src",t.previewltilauncher):n.getElementById("contentframe")&&(e.one(n.getElementById("contentframe")).setAttribute("src",decodeURIComponent(t.iframeurl)),e.one(n.getElementById("contentframe")).setStyle("width",t.width+"px"),e.one(n.getElementById("contentframe")).setStyle("height",t.height+"px")),e.one(n.getElementById("source")).setAttribute("value",decodeURIComponent(t.iframeurl)),n.getElementById("metadata")&&e.one(n.getElementById("metadata")).setAttribute("value",t.metadata),n.getElementById("closeltipanel")&&e.one(n.getElementById("closeltipanel")).simulate("click"),n.body.dispatchEvent(n.body.entrySelectedEvent)}},{NAME:"moodle-local_kaltura-ltiservice",ATTRS:{iframeurl:{value:""},width:{value:""},height:{value:""},entryid:{value:""},title:{value:""},metadata:{value:""}}}),M.local_kaltura=M.local_kaltura||{},M.local_kaltura.init=function(e){return new n(e)}},"@VERSION@",{requires:["base","node","node-event-simulate"]}); \ No newline at end of file diff --git a/local/kaltura/yui/build/moodle-local_kaltura-ltiservice/moodle-local_kaltura-ltiservice.js b/local/kaltura/yui/build/moodle-local_kaltura-ltiservice/moodle-local_kaltura-ltiservice.js index 2f37f0205c69e..c0a22b6b09790 100644 --- a/local/kaltura/yui/build/moodle-local_kaltura-ltiservice/moodle-local_kaltura-ltiservice.js +++ b/local/kaltura/yui/build/moodle-local_kaltura-ltiservice/moodle-local_kaltura-ltiservice.js @@ -83,7 +83,7 @@ Y.extend(LTISERVICE, Y.Base, { Y.one(documentElement.getElementById('closeltipanel')).simulate('click'); } - documentElement.body.dispatchEvent(documentElement.body.myEvent); + documentElement.body.dispatchEvent(documentElement.body.entrySelectedEvent); } }, { From 10cb1bdff78cc0a92aace41a149bb3a36b9b0e05 Mon Sep 17 00:00:00 2001 From: Muli Dayan Date: Thu, 7 Jul 2016 13:47:36 +0300 Subject: [PATCH 124/326] KMS-11965 remove unused hidden element --- mod/kalvidassign/renderer.php | 3 --- mod/kalvidpres/mod_form.php | 2 -- mod/kalvidres/mod_form.php | 2 -- 3 files changed, 7 deletions(-) diff --git a/mod/kalvidassign/renderer.php b/mod/kalvidassign/renderer.php index c94b710dbef54..7844bef176ebe 100644 --- a/mod/kalvidassign/renderer.php +++ b/mod/kalvidassign/renderer.php @@ -914,8 +914,6 @@ public function display_submissions_table($cm, $groupfilter = 0, $filter = 'all' echo html_writer::end_tag('form'); echo html_writer::end_tag('center'); - - echo html_writer::empty_tag('input', array('id' => 'closeltipanel', 'type' => 'hidden')); } /** @@ -1047,7 +1045,6 @@ public function display_video_container_markup($submission, $courseid, $cmid) { $iframe = html_writer::tag('iframe', '', $params); $output .= html_writer::tag('center', $iframe); - $output .= html_writer::empty_tag('input', array('type' => 'hidden', 'id' => 'closeltipanel', 'value' => 0)); return $output; } diff --git a/mod/kalvidpres/mod_form.php b/mod/kalvidpres/mod_form.php index a07373c9481fd..84ff1976d3e78 100644 --- a/mod/kalvidpres/mod_form.php +++ b/mod/kalvidpres/mod_form.php @@ -144,8 +144,6 @@ public function definition() { $this->standard_coursemodule_elements(); $this->add_action_buttons(); - - $mform->addElement('html', html_writer::empty_tag('input', array('type' => 'hidden', 'id' => 'closeltipanel', 'value' => 0))); } /** diff --git a/mod/kalvidres/mod_form.php b/mod/kalvidres/mod_form.php index 9f8a382697f59..ae7db3ede2440 100644 --- a/mod/kalvidres/mod_form.php +++ b/mod/kalvidres/mod_form.php @@ -136,8 +136,6 @@ public function definition() { $this->standard_coursemodule_elements(); $this->add_action_buttons(); - - $mform->addElement('html', html_writer::empty_tag('input', array('type' => 'hidden', 'id' => 'closeltipanel', 'value' => 0))); } /** From 02a3fb9cfd1cb2a7b5f929eceb507c1be3d73bd6 Mon Sep 17 00:00:00 2001 From: Muli Dayan Date: Thu, 7 Jul 2016 15:06:28 +0300 Subject: [PATCH 125/326] KMS-11965 remove debugger --- .../moodle-local_kaltura-ltiservice-debug.js | 3 --- 1 file changed, 3 deletions(-) diff --git a/local/kaltura/yui/build/moodle-local_kaltura-ltiservice/moodle-local_kaltura-ltiservice-debug.js b/local/kaltura/yui/build/moodle-local_kaltura-ltiservice/moodle-local_kaltura-ltiservice-debug.js index 3b457805e4842..c0a22b6b09790 100644 --- a/local/kaltura/yui/build/moodle-local_kaltura-ltiservice/moodle-local_kaltura-ltiservice-debug.js +++ b/local/kaltura/yui/build/moodle-local_kaltura-ltiservice/moodle-local_kaltura-ltiservice-debug.js @@ -39,9 +39,6 @@ Y.extend(LTISERVICE, Y.Base, { * @type {Object} */ init : function(params) { - -debugger; - var documentElement = window.opener ? window.opener.parent.document : window.parent.document; if (documentElement.getElementById('video_title')) { Y.one(documentElement.getElementById('video_title')).setAttribute('value', params.title); From 4554e3c551aa7056db14dd5a339fd62b28a88007 Mon Sep 17 00:00:00 2001 From: Muli Dayan Date: Thu, 7 Jul 2016 15:14:16 +0300 Subject: [PATCH 126/326] bump build - 2016070730 --- filter/kaltura/version.php | 4 ++-- lib/editor/atto/plugins/kalturamedia/version.php | 4 ++-- lib/editor/tinymce/plugins/kalturamedia/version.php | 4 ++-- local/kaltura/db/upgrade.php | 6 +++--- local/kaltura/version.php | 2 +- local/kalturamediagallery/version.php | 4 ++-- local/mymedia/version.php | 4 ++-- mod/kalvidassign/version.php | 4 ++-- mod/kalvidpres/version.php | 4 ++-- mod/kalvidres/version.php | 4 ++-- 10 files changed, 20 insertions(+), 20 deletions(-) diff --git a/filter/kaltura/version.php b/filter/kaltura/version.php index ed464217cbb18..1b3ae14c9117d 100644 --- a/filter/kaltura/version.php +++ b/filter/kaltura/version.php @@ -24,11 +24,11 @@ */ defined('MOODLE_INTERNAL') || die(); -$plugin->version = 2016070630; //version date YYYYMMDDXX 10 represent 3.0 for future option to moodle use 2 digit version +$plugin->version = 2016070730; //version date YYYYMMDDXX 10 represent 3.0 for future option to moodle use 2 digit version $plugin->component = 'filter_kaltura'; $plugin->release = 'Kaltura release 4.0.10'; $plugin->requires = 2014050800; $plugin->maturity = MATURITY_STABLE; $plugin->dependencies = array( - 'local_kaltura' => 2016070630 + 'local_kaltura' => 2016070730 ); diff --git a/lib/editor/atto/plugins/kalturamedia/version.php b/lib/editor/atto/plugins/kalturamedia/version.php index ffb98d83ff7c2..a8e4b99890358 100644 --- a/lib/editor/atto/plugins/kalturamedia/version.php +++ b/lib/editor/atto/plugins/kalturamedia/version.php @@ -24,10 +24,10 @@ defined('MOODLE_INTERNAL') || die(); -$plugin->version = 2016070630; // The current plugin version (Date: YYYYMMDDXX). +$plugin->version = 2016070730; // The current plugin version (Date: YYYYMMDDXX). $plugin->release = 'Kaltura release 4.0.10'; $plugin->requires = 2014050800; // Requires this Moodle version. $plugin->component = 'atto_kalturamedia'; // Full name of the plugin (used for diagnostics). $plugin->dependencies = array( - 'local_kaltura' => 2016070630 + 'local_kaltura' => 2016070730 ); diff --git a/lib/editor/tinymce/plugins/kalturamedia/version.php b/lib/editor/tinymce/plugins/kalturamedia/version.php index b8544b15d4da9..b6a177ec93400 100644 --- a/lib/editor/tinymce/plugins/kalturamedia/version.php +++ b/lib/editor/tinymce/plugins/kalturamedia/version.php @@ -23,12 +23,12 @@ defined('MOODLE_INTERNAL') || die(); -$plugin->version = 2016070630; +$plugin->version = 2016070730; $plugin->release = 'Kaltura release 4.0.10'; // Required Moodle version. $plugin->requires = 2014050800; // Full name of the plugin (used for diagnostics). $plugin->component = 'tinymce_kalturamedia'; $plugin->dependencies = array( - 'local_kaltura' => 2016070630 + 'local_kaltura' => 2016070730 ); diff --git a/local/kaltura/db/upgrade.php b/local/kaltura/db/upgrade.php index a6d7201b9ca8f..73f53f472a996 100644 --- a/local/kaltura/db/upgrade.php +++ b/local/kaltura/db/upgrade.php @@ -59,11 +59,11 @@ function xmldb_local_kaltura_upgrade($oldversion) { } // Kaltura savepoint reached. - upgrade_plugin_savepoint(true, 2016070630, 'local', 'kaltura'); + upgrade_plugin_savepoint(true, 2016070730, 'local', 'kaltura'); $savePointDone = true; } - if (!$savePointDone && $oldversion < 2016070630) { + if (!$savePointDone && $oldversion < 2016070730) { if($dbman->table_exists('local_kaltura_log') && $dbman->field_exists('local_kaltura_log', 'endpoint')) { $table = new xmldb_table('local_kaltura_log'); $updatedFieldSchema = new xmldb_field('endpoint', XMLDB_TYPE_TEXT, null, null, XMLDB_NOTNULL, null, null, null); @@ -71,7 +71,7 @@ function xmldb_local_kaltura_upgrade($oldversion) { } // Kaltura savepoint reached. - upgrade_plugin_savepoint(true, 2016070630, 'local', 'kaltura'); + upgrade_plugin_savepoint(true, 2016070730, 'local', 'kaltura'); } return true; } diff --git a/local/kaltura/version.php b/local/kaltura/version.php index 6ae85ff3efbbf..fdc2459fe4e5e 100644 --- a/local/kaltura/version.php +++ b/local/kaltura/version.php @@ -25,7 +25,7 @@ die('Direct access to this script is forbidden.'); } -$plugin->version = 2016070630; +$plugin->version = 2016070730; $plugin->component = 'local_kaltura'; $plugin->release = 'Kaltura release 4.0.10'; $plugin->requires = 2014050800; diff --git a/local/kalturamediagallery/version.php b/local/kalturamediagallery/version.php index 804dc832c7a60..8ac0aece59ca2 100644 --- a/local/kalturamediagallery/version.php +++ b/local/kalturamediagallery/version.php @@ -26,11 +26,11 @@ die('Direct access to this script is forbidden.'); } -$plugin->version = 2016070630; +$plugin->version = 2016070730; $plugin->component = 'local_kalturamediagallery'; $plugin->release = 'Kaltura release 4.0.10'; $plugin->requires = 2014050800; $plugin->maturity = MATURITY_STABLE; $plugin->dependencies = array( - 'local_kaltura' => 2016070630 + 'local_kaltura' => 2016070730 ); diff --git a/local/mymedia/version.php b/local/mymedia/version.php index 92da0b731fae6..54195f5995217 100644 --- a/local/mymedia/version.php +++ b/local/mymedia/version.php @@ -25,11 +25,11 @@ die('Direct access to this script is forbidden.'); } -$plugin->version = 2016070630; +$plugin->version = 2016070730; $plugin->component = 'local_mymedia'; $plugin->release = 'Kaltura release 4.0.10'; $plugin->requires = 2014050800; $plugin->maturity = MATURITY_STABLE; $plugin->dependencies = array( - 'local_kaltura' => 2016070630 + 'local_kaltura' => 2016070730 ); diff --git a/mod/kalvidassign/version.php b/mod/kalvidassign/version.php index 45ea136c09056..d2901b116da99 100644 --- a/mod/kalvidassign/version.php +++ b/mod/kalvidassign/version.php @@ -25,12 +25,12 @@ die('Direct access to this script is forbidden.'); } -$plugin->version = 2016070630; +$plugin->version = 2016070730; $plugin->component = 'mod_kalvidassign'; $plugin->release = 'Kaltura release 4.0.10'; $plugin->requires = 2014050800; $plugin->cron = 0; $plugin->maturity = MATURITY_STABLE; $plugin->dependencies = array( - 'local_kaltura' => 2016070630, + 'local_kaltura' => 2016070730, ); diff --git a/mod/kalvidpres/version.php b/mod/kalvidpres/version.php index a2e7ed2dd8725..29c37afbecf0a 100644 --- a/mod/kalvidpres/version.php +++ b/mod/kalvidpres/version.php @@ -25,12 +25,12 @@ die('Direct access to this script is forbidden.'); } -$plugin->version = 2016070630; +$plugin->version = 2016070730; $plugin->component = 'mod_kalvidpres'; $plugin->release = 'Kaltura release 4.0.10'; $plugin->requires = 2014050800; $plugin->cron = 0; $plugin->maturity = MATURITY_STABLE; $plugin->dependencies = array( - 'local_kaltura' => 2016070630 + 'local_kaltura' => 2016070730 ); diff --git a/mod/kalvidres/version.php b/mod/kalvidres/version.php index 6de5589932254..048659145d30a 100644 --- a/mod/kalvidres/version.php +++ b/mod/kalvidres/version.php @@ -25,12 +25,12 @@ die('Direct access to this script is forbidden.'); } -$plugin->version = 2016070630; +$plugin->version = 2016070730; $plugin->component = 'mod_kalvidres'; $plugin->release = 'Kaltura release 4.0.10'; $plugin->requires = 2014050800; $plugin->cron = 0; $plugin->maturity = MATURITY_STABLE; $plugin->dependencies = array( - 'local_kaltura' => 2016070630 + 'local_kaltura' => 2016070730 ); From 54f854d4db39945bd2b8b3b8ada470da42327a89 Mon Sep 17 00:00:00 2001 From: Muli Dayan Date: Mon, 28 Nov 2016 09:49:07 +0200 Subject: [PATCH 127/326] KMS-11623 set video presentations module as a 'system' module, rather than a resource --- mod/kalvidpres/lib.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mod/kalvidpres/lib.php b/mod/kalvidpres/lib.php index c4c76f76e0ca2..6cc246b5c4352 100644 --- a/mod/kalvidpres/lib.php +++ b/mod/kalvidpres/lib.php @@ -157,7 +157,7 @@ function kalvidpres_get_participants($kalvidpresid) { function kalvidpres_supports($feature) { switch($feature) { case FEATURE_MOD_ARCHETYPE: - return MOD_ARCHETYPE_RESOURCE; + return MOD_ARCHETYPE_SYSTEM; case FEATURE_GROUPS: return true; case FEATURE_GROUPINGS: From ac5755c702391cd3748bdddd9c1ff0d50f18f6de Mon Sep 17 00:00:00 2001 From: Muli Dayan Date: Thu, 1 Dec 2016 12:40:05 +0200 Subject: [PATCH 128/326] KMS-13221 update the kaltura embed icons for moodle's wysiwyg editors --- .../atto/plugins/kalturamedia/pix/icon.png | Bin 1912 -> 568 bytes .../tinymce/plugins/kalturamedia/pix/icon.png | Bin 1912 -> 568 bytes local/kaltura/pix/icon.png | Bin 1912 -> 568 bytes 3 files changed, 0 insertions(+), 0 deletions(-) diff --git a/lib/editor/atto/plugins/kalturamedia/pix/icon.png b/lib/editor/atto/plugins/kalturamedia/pix/icon.png index 615c31d68e7c309bb63b6098a4bfbcad17a0bd27..8d5961396d8247414890957ccf89d82797381495 100644 GIT binary patch delta 543 zcmV+)0^t4l4!8u6B!32COGiWi{{a60|De66lK=n!32;bRa{vGf6951U69E94oEQKA z00(qQO+^Rb3;_xy7Pf5LCIA2d#Ysd#R5;6h(m!ZZQ4|L7-+KvSiXe)U!L-_n3Qd<5 zM5PWQ2vQuRgS^$jid_WT#lb0b5S^qgqK+YzKt-hBpRHYkLw^tv1u-}Xf;w1&fxbBS zUX7;dfeYszzVqGhocjf~iTC|S_G2864}W^s-U<`iKBjROnO=ZRg1874-qpP#gOcdf7#`b=1=FxKR>?zzt7HuqLQN*zhHG`NXg#8JpkERN(S7H{c)6W|M`n&rYmE^2I&gdNResAC-?Nj1Wid~r3CiyC)QpES#b zN4cocrC=wXV86-HpQ%04g*D3sxu`LZ8>zu0-|;6VN7t~XTI;euq_PtwY2HEbm#Fjh h0{z%XNf^>d^WQx7jBfdtPBZ`j002ovPDHLkV1ig}`iKAk literal 1912 zcmaJ?X;c$u6b)e!Lqt5r4Hw2yt5C8NvXr2K5P}krB?WO~NCt=|nK&6t5U{wRsDPp( zR?%wJiY!$?i@2c(3R)M`atMkdM+;Q}i;AF#zjX4L3#Hi6(Z+o*#S%V7+Nf#XzKA=r8LA_%CILNJ0OW5{&A zaJ)*o3WdW~1%)eCEm!cB;B0Te%P7DFG%yAMMvYpl7Z`=$fUW>vTaM`Zc7Vh+(|~Rp~Gl zq6I99Pz;iQ2|+y5PbFw{Uu3oV&)0-s7~Kfz=u8^JQqmw$Ci{P=M)L)&$3o$+`TnP{ zK0Hwe(?elBl7K4k#>GyvgwhFoQ5eDyG#o+HgSR+89>EZOJfZ`9!#F^MN~=T+`T?{| zCJ4~#F-WU`1H?iQ=hIXwrGUfr3A}9OI!cd z=D{P}JC@}a)8d;iwuiO2*HPTmCMRbA|5iEz#G-JcX?mDLU|1Z*+iZT+^mgoASKDP{ z4l2mxwi?gzn_07RPgV;LjT%l)AJ6uWeXvDXGAwrDsBv*)IWOR}p!MoYnwt}nPqbhD zYdmWsxINRvngY9>r;s!V(s|xYYYGTLv*}CGn>~3W@4w#Z+oz)}N#PRQH{Cw#X}uWs%&oK3G&W zrd@jC-qCJ!P76VPyX17^qFsk~<`>#T%ZbFwLMh~yQTc0DdpJ1<+OR+Q>EEt5BvrrI z`u&i_jXC3D|L%u9!RDX8+qT#-s`tc_?0~zqR&5UrR^#`8IqCH|nR(0xBfEKl-lost zDzZAZ)!b{^yX;2PZbnyXh1&n_;v}NZ^znO_iyzMhCmroJ?`Qfm-?C#f4tIgAP?fH& z-Y$;{2R4@XC$|;F1e+g+&@Og%Uplq6W>OAaQtEx9$2eQ7>fCFLzwxMope`v~GZ%X% z@jf#ddb->y<@Cs0MOyspuCy#^)AM;-c1QwW(M90}wvH*;Rf!!R{xH2MTW!}&&Xw-I z<@kFui4uM9jdLh(#rgDIQB{KZ11*7Nh;}g&5G}>lvZx>Nh);W@7U@3=*b0-$I%r@>AimMyQx{zYnmtb zfgdD)K8UEj-1eiB;RuPtJNny!1P5DxdC1JL@|HTa7Rx-BEF2cUt+D1LapjCCuI6~7 zZ%r$^IdRR)wx+s-mld5vx2axH&5DMnMSyjF>E`^pVCqC`bl;P)tYY>oiCxk3Ddo_~ zOQV~bvwE(6<5DUuUi>EQW+4CYf&CF4tvwY->WLf6-Y*+|X2IMn^ZHcp)=clMRvQS4 zxoeK+uX_1P&^2*%1Q^1w8v?6y21*Xh)|74-qpP#gOcdf7#`b=1=FxKR>?zzt7HuqLQN*zhHG`NXg#8JpkERN(S7H{c)6W|M`n&rYmE^2I&gdNResAC-?Nj1Wid~r3CiyC)QpES#b zN4cocrC=wXV86-HpQ%04g*D3sxu`LZ8>zu0-|;6VN7t~XTI;euq_PtwY2HEbm#Fjh h0{z%XNf^>d^WQx7jBfdtPBZ`j002ovPDHLkV1ig}`iKAk literal 1912 zcmaJ?X;c$u6b)e!Lqt5r4Hw2yt5C8NvXr2K5P}krB?WO~NCt=|nK&6t5U{wRsDPp( zR?%wJiY!$?i@2c(3R)M`atMkdM+;Q}i;AF#zjX4L3#Hi6(Z+o*#S%V7+Nf#XzKA=r8LA_%CILNJ0OW5{&A zaJ)*o3WdW~1%)eCEm!cB;B0Te%P7DFG%yAMMvYpl7Z`=$fUW>vTaM`Zc7Vh+(|~Rp~Gl zq6I99Pz;iQ2|+y5PbFw{Uu3oV&)0-s7~Kfz=u8^JQqmw$Ci{P=M)L)&$3o$+`TnP{ zK0Hwe(?elBl7K4k#>GyvgwhFoQ5eDyG#o+HgSR+89>EZOJfZ`9!#F^MN~=T+`T?{| zCJ4~#F-WU`1H?iQ=hIXwrGUfr3A}9OI!cd z=D{P}JC@}a)8d;iwuiO2*HPTmCMRbA|5iEz#G-JcX?mDLU|1Z*+iZT+^mgoASKDP{ z4l2mxwi?gzn_07RPgV;LjT%l)AJ6uWeXvDXGAwrDsBv*)IWOR}p!MoYnwt}nPqbhD zYdmWsxINRvngY9>r;s!V(s|xYYYGTLv*}CGn>~3W@4w#Z+oz)}N#PRQH{Cw#X}uWs%&oK3G&W zrd@jC-qCJ!P76VPyX17^qFsk~<`>#T%ZbFwLMh~yQTc0DdpJ1<+OR+Q>EEt5BvrrI z`u&i_jXC3D|L%u9!RDX8+qT#-s`tc_?0~zqR&5UrR^#`8IqCH|nR(0xBfEKl-lost zDzZAZ)!b{^yX;2PZbnyXh1&n_;v}NZ^znO_iyzMhCmroJ?`Qfm-?C#f4tIgAP?fH& z-Y$;{2R4@XC$|;F1e+g+&@Og%Uplq6W>OAaQtEx9$2eQ7>fCFLzwxMope`v~GZ%X% z@jf#ddb->y<@Cs0MOyspuCy#^)AM;-c1QwW(M90}wvH*;Rf!!R{xH2MTW!}&&Xw-I z<@kFui4uM9jdLh(#rgDIQB{KZ11*7Nh;}g&5G}>lvZx>Nh);W@7U@3=*b0-$I%r@>AimMyQx{zYnmtb zfgdD)K8UEj-1eiB;RuPtJNny!1P5DxdC1JL@|HTa7Rx-BEF2cUt+D1LapjCCuI6~7 zZ%r$^IdRR)wx+s-mld5vx2axH&5DMnMSyjF>E`^pVCqC`bl;P)tYY>oiCxk3Ddo_~ zOQV~bvwE(6<5DUuUi>EQW+4CYf&CF4tvwY->WLf6-Y*+|X2IMn^ZHcp)=clMRvQS4 zxoeK+uX_1P&^2*%1Q^1w8v?6y21*Xh)|74-qpP#gOcdf7#`b=1=FxKR>?zzt7HuqLQN*zhHG`NXg#8JpkERN(S7H{c)6W|M`n&rYmE^2I&gdNResAC-?Nj1Wid~r3CiyC)QpES#b zN4cocrC=wXV86-HpQ%04g*D3sxu`LZ8>zu0-|;6VN7t~XTI;euq_PtwY2HEbm#Fjh h0{z%XNf^>d^WQx7jBfdtPBZ`j002ovPDHLkV1ig}`iKAk literal 1912 zcmaJ?X;c$u6b)e!Lqt5r4Hw2yt5C8NvXr2K5P}krB?WO~NCt=|nK&6t5U{wRsDPp( zR?%wJiY!$?i@2c(3R)M`atMkdM+;Q}i;AF#zjX4L3#Hi6(Z+o*#S%V7+Nf#XzKA=r8LA_%CILNJ0OW5{&A zaJ)*o3WdW~1%)eCEm!cB;B0Te%P7DFG%yAMMvYpl7Z`=$fUW>vTaM`Zc7Vh+(|~Rp~Gl zq6I99Pz;iQ2|+y5PbFw{Uu3oV&)0-s7~Kfz=u8^JQqmw$Ci{P=M)L)&$3o$+`TnP{ zK0Hwe(?elBl7K4k#>GyvgwhFoQ5eDyG#o+HgSR+89>EZOJfZ`9!#F^MN~=T+`T?{| zCJ4~#F-WU`1H?iQ=hIXwrGUfr3A}9OI!cd z=D{P}JC@}a)8d;iwuiO2*HPTmCMRbA|5iEz#G-JcX?mDLU|1Z*+iZT+^mgoASKDP{ z4l2mxwi?gzn_07RPgV;LjT%l)AJ6uWeXvDXGAwrDsBv*)IWOR}p!MoYnwt}nPqbhD zYdmWsxINRvngY9>r;s!V(s|xYYYGTLv*}CGn>~3W@4w#Z+oz)}N#PRQH{Cw#X}uWs%&oK3G&W zrd@jC-qCJ!P76VPyX17^qFsk~<`>#T%ZbFwLMh~yQTc0DdpJ1<+OR+Q>EEt5BvrrI z`u&i_jXC3D|L%u9!RDX8+qT#-s`tc_?0~zqR&5UrR^#`8IqCH|nR(0xBfEKl-lost zDzZAZ)!b{^yX;2PZbnyXh1&n_;v}NZ^znO_iyzMhCmroJ?`Qfm-?C#f4tIgAP?fH& z-Y$;{2R4@XC$|;F1e+g+&@Og%Uplq6W>OAaQtEx9$2eQ7>fCFLzwxMope`v~GZ%X% z@jf#ddb->y<@Cs0MOyspuCy#^)AM;-c1QwW(M90}wvH*;Rf!!R{xH2MTW!}&&Xw-I z<@kFui4uM9jdLh(#rgDIQB{KZ11*7Nh;}g&5G}>lvZx>Nh);W@7U@3=*b0-$I%r@>AimMyQx{zYnmtb zfgdD)K8UEj-1eiB;RuPtJNny!1P5DxdC1JL@|HTa7Rx-BEF2cUt+D1LapjCCuI6~7 zZ%r$^IdRR)wx+s-mld5vx2axH&5DMnMSyjF>E`^pVCqC`bl;P)tYY>oiCxk3Ddo_~ zOQV~bvwE(6<5DUuUi>EQW+4CYf&CF4tvwY->WLf6-Y*+|X2IMn^ZHcp)=clMRvQS4 zxoeK+uX_1P&^2*%1Q^1w8v?6y21*Xh)| Date: Thu, 1 Dec 2016 12:58:56 +0200 Subject: [PATCH 129/326] KMS-13221 update the kaltura icon for tinymce --- .../plugins/kalturamedia/tinymce/editor_plugin.js | 2 +- .../plugins/kalturamedia/tinymce/img/icon.gif | Bin 575 -> 0 bytes 2 files changed, 1 insertion(+), 1 deletion(-) delete mode 100644 lib/editor/tinymce/plugins/kalturamedia/tinymce/img/icon.gif diff --git a/lib/editor/tinymce/plugins/kalturamedia/tinymce/editor_plugin.js b/lib/editor/tinymce/plugins/kalturamedia/tinymce/editor_plugin.js index 4f657586aa44f..99e6efc1a06e3 100644 --- a/lib/editor/tinymce/plugins/kalturamedia/tinymce/editor_plugin.js +++ b/lib/editor/tinymce/plugins/kalturamedia/tinymce/editor_plugin.js @@ -64,7 +64,7 @@ ed.addButton('kalturamedia', { title : 'kalturamedia.desc', cmd : 'mcekalturamedia', - image : url+'/img/icon.gif' + image : url+'/img/icon.png' }); }, diff --git a/lib/editor/tinymce/plugins/kalturamedia/tinymce/img/icon.gif b/lib/editor/tinymce/plugins/kalturamedia/tinymce/img/icon.gif deleted file mode 100644 index b32189b87d2ce8ab896659db755c9773d521696f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 575 zcmZ?wbhEHb6krfwIOfXmk4^hGr{NoZ^Zz`Wzj=+n@*95;H2Ep0^FhSqkD&g0F_WJn zIv>T1zl!U9me6}EW%6H5mmzC5L-rhoytxed(;4z-GUU%QAI|6;!XD@FdV;{CguYttpu^_MMnTs2v9)AHC2 z?Hvyd{$FGGf1Tm~O@?oG82;R0{C}U}{}YD)Lk%eY6Lc<0O)N=GQ7F$W$xv|j^bKH8 z{K>+|#Zb?n!vF-Jh+<%GZ>Vo-mThipZ&qru>uBcTZj!5aXi{m@ZDQf8SDsw2)}f Date: Thu, 1 Dec 2016 13:01:11 +0200 Subject: [PATCH 130/326] update plugin version to 4.0.11 --- filter/kaltura/version.php | 6 +++--- lib/editor/atto/plugins/kalturamedia/version.php | 6 +++--- lib/editor/tinymce/plugins/kalturamedia/version.php | 6 +++--- local/kaltura/db/upgrade.php | 6 +++--- local/kaltura/version.php | 4 ++-- local/kalturamediagallery/version.php | 6 +++--- local/mymedia/version.php | 6 +++--- mod/kalvidassign/version.php | 6 +++--- mod/kalvidpres/version.php | 6 +++--- mod/kalvidres/version.php | 6 +++--- 10 files changed, 29 insertions(+), 29 deletions(-) diff --git a/filter/kaltura/version.php b/filter/kaltura/version.php index 1b3ae14c9117d..641fd5b98bc4d 100644 --- a/filter/kaltura/version.php +++ b/filter/kaltura/version.php @@ -24,11 +24,11 @@ */ defined('MOODLE_INTERNAL') || die(); -$plugin->version = 2016070730; //version date YYYYMMDDXX 10 represent 3.0 for future option to moodle use 2 digit version +$plugin->version = 2016120130; //version date YYYYMMDDXX 10 represent 3.0 for future option to moodle use 2 digit version $plugin->component = 'filter_kaltura'; -$plugin->release = 'Kaltura release 4.0.10'; +$plugin->release = 'Kaltura release 4.0.11'; $plugin->requires = 2014050800; $plugin->maturity = MATURITY_STABLE; $plugin->dependencies = array( - 'local_kaltura' => 2016070730 + 'local_kaltura' => 2016120130 ); diff --git a/lib/editor/atto/plugins/kalturamedia/version.php b/lib/editor/atto/plugins/kalturamedia/version.php index a8e4b99890358..3453bb8051e35 100644 --- a/lib/editor/atto/plugins/kalturamedia/version.php +++ b/lib/editor/atto/plugins/kalturamedia/version.php @@ -24,10 +24,10 @@ defined('MOODLE_INTERNAL') || die(); -$plugin->version = 2016070730; // The current plugin version (Date: YYYYMMDDXX). -$plugin->release = 'Kaltura release 4.0.10'; +$plugin->version = 2016120130; // The current plugin version (Date: YYYYMMDDXX). +$plugin->release = 'Kaltura release 4.0.11'; $plugin->requires = 2014050800; // Requires this Moodle version. $plugin->component = 'atto_kalturamedia'; // Full name of the plugin (used for diagnostics). $plugin->dependencies = array( - 'local_kaltura' => 2016070730 + 'local_kaltura' => 2016120130 ); diff --git a/lib/editor/tinymce/plugins/kalturamedia/version.php b/lib/editor/tinymce/plugins/kalturamedia/version.php index b6a177ec93400..bfb38ddeef1a9 100644 --- a/lib/editor/tinymce/plugins/kalturamedia/version.php +++ b/lib/editor/tinymce/plugins/kalturamedia/version.php @@ -23,12 +23,12 @@ defined('MOODLE_INTERNAL') || die(); -$plugin->version = 2016070730; -$plugin->release = 'Kaltura release 4.0.10'; +$plugin->version = 2016120130; +$plugin->release = 'Kaltura release 4.0.11'; // Required Moodle version. $plugin->requires = 2014050800; // Full name of the plugin (used for diagnostics). $plugin->component = 'tinymce_kalturamedia'; $plugin->dependencies = array( - 'local_kaltura' => 2016070730 + 'local_kaltura' => 2016120130 ); diff --git a/local/kaltura/db/upgrade.php b/local/kaltura/db/upgrade.php index 73f53f472a996..23d9a558ce292 100644 --- a/local/kaltura/db/upgrade.php +++ b/local/kaltura/db/upgrade.php @@ -59,11 +59,11 @@ function xmldb_local_kaltura_upgrade($oldversion) { } // Kaltura savepoint reached. - upgrade_plugin_savepoint(true, 2016070730, 'local', 'kaltura'); + upgrade_plugin_savepoint(true, 2016120130, 'local', 'kaltura'); $savePointDone = true; } - if (!$savePointDone && $oldversion < 2016070730) { + if (!$savePointDone && $oldversion < 2016120130) { if($dbman->table_exists('local_kaltura_log') && $dbman->field_exists('local_kaltura_log', 'endpoint')) { $table = new xmldb_table('local_kaltura_log'); $updatedFieldSchema = new xmldb_field('endpoint', XMLDB_TYPE_TEXT, null, null, XMLDB_NOTNULL, null, null, null); @@ -71,7 +71,7 @@ function xmldb_local_kaltura_upgrade($oldversion) { } // Kaltura savepoint reached. - upgrade_plugin_savepoint(true, 2016070730, 'local', 'kaltura'); + upgrade_plugin_savepoint(true, 2016120130, 'local', 'kaltura'); } return true; } diff --git a/local/kaltura/version.php b/local/kaltura/version.php index fdc2459fe4e5e..9bd063215f802 100644 --- a/local/kaltura/version.php +++ b/local/kaltura/version.php @@ -25,8 +25,8 @@ die('Direct access to this script is forbidden.'); } -$plugin->version = 2016070730; +$plugin->version = 2016120130; $plugin->component = 'local_kaltura'; -$plugin->release = 'Kaltura release 4.0.10'; +$plugin->release = 'Kaltura release 4.0.11'; $plugin->requires = 2014050800; $plugin->maturity = MATURITY_STABLE; diff --git a/local/kalturamediagallery/version.php b/local/kalturamediagallery/version.php index 8ac0aece59ca2..f062a75c4822a 100644 --- a/local/kalturamediagallery/version.php +++ b/local/kalturamediagallery/version.php @@ -26,11 +26,11 @@ die('Direct access to this script is forbidden.'); } -$plugin->version = 2016070730; +$plugin->version = 2016120130; $plugin->component = 'local_kalturamediagallery'; -$plugin->release = 'Kaltura release 4.0.10'; +$plugin->release = 'Kaltura release 4.0.11'; $plugin->requires = 2014050800; $plugin->maturity = MATURITY_STABLE; $plugin->dependencies = array( - 'local_kaltura' => 2016070730 + 'local_kaltura' => 2016120130 ); diff --git a/local/mymedia/version.php b/local/mymedia/version.php index 54195f5995217..6492478bee5fd 100644 --- a/local/mymedia/version.php +++ b/local/mymedia/version.php @@ -25,11 +25,11 @@ die('Direct access to this script is forbidden.'); } -$plugin->version = 2016070730; +$plugin->version = 2016120130; $plugin->component = 'local_mymedia'; -$plugin->release = 'Kaltura release 4.0.10'; +$plugin->release = 'Kaltura release 4.0.11'; $plugin->requires = 2014050800; $plugin->maturity = MATURITY_STABLE; $plugin->dependencies = array( - 'local_kaltura' => 2016070730 + 'local_kaltura' => 2016120130 ); diff --git a/mod/kalvidassign/version.php b/mod/kalvidassign/version.php index d2901b116da99..5eedee14c8851 100644 --- a/mod/kalvidassign/version.php +++ b/mod/kalvidassign/version.php @@ -25,12 +25,12 @@ die('Direct access to this script is forbidden.'); } -$plugin->version = 2016070730; +$plugin->version = 2016120130; $plugin->component = 'mod_kalvidassign'; -$plugin->release = 'Kaltura release 4.0.10'; +$plugin->release = 'Kaltura release 4.0.11'; $plugin->requires = 2014050800; $plugin->cron = 0; $plugin->maturity = MATURITY_STABLE; $plugin->dependencies = array( - 'local_kaltura' => 2016070730, + 'local_kaltura' => 2016120130, ); diff --git a/mod/kalvidpres/version.php b/mod/kalvidpres/version.php index 29c37afbecf0a..e2bb5ece70584 100644 --- a/mod/kalvidpres/version.php +++ b/mod/kalvidpres/version.php @@ -25,12 +25,12 @@ die('Direct access to this script is forbidden.'); } -$plugin->version = 2016070730; +$plugin->version = 2016120130; $plugin->component = 'mod_kalvidpres'; -$plugin->release = 'Kaltura release 4.0.10'; +$plugin->release = 'Kaltura release 4.0.11'; $plugin->requires = 2014050800; $plugin->cron = 0; $plugin->maturity = MATURITY_STABLE; $plugin->dependencies = array( - 'local_kaltura' => 2016070730 + 'local_kaltura' => 2016120130 ); diff --git a/mod/kalvidres/version.php b/mod/kalvidres/version.php index 048659145d30a..f8143d6c735c2 100644 --- a/mod/kalvidres/version.php +++ b/mod/kalvidres/version.php @@ -25,12 +25,12 @@ die('Direct access to this script is forbidden.'); } -$plugin->version = 2016070730; +$plugin->version = 2016120130; $plugin->component = 'mod_kalvidres'; -$plugin->release = 'Kaltura release 4.0.10'; +$plugin->release = 'Kaltura release 4.0.11'; $plugin->requires = 2014050800; $plugin->cron = 0; $plugin->maturity = MATURITY_STABLE; $plugin->dependencies = array( - 'local_kaltura' => 2016070730 + 'local_kaltura' => 2016120130 ); From f495227c11fe0e861b1ce7a864114c7e045d6927 Mon Sep 17 00:00:00 2001 From: Muli Dayan Date: Thu, 22 Dec 2016 17:16:18 +0200 Subject: [PATCH 131/326] adjust plugin build number to match moodle version --- filter/kaltura/version.php | 4 ++-- lib/editor/atto/plugins/kalturamedia/version.php | 4 ++-- lib/editor/tinymce/plugins/kalturamedia/version.php | 4 ++-- local/kaltura/version.php | 2 +- local/kalturamediagallery/version.php | 4 ++-- local/mymedia/version.php | 4 ++-- mod/kalvidassign/version.php | 4 ++-- mod/kalvidpres/version.php | 4 ++-- mod/kalvidres/version.php | 4 ++-- 9 files changed, 17 insertions(+), 17 deletions(-) diff --git a/filter/kaltura/version.php b/filter/kaltura/version.php index 641fd5b98bc4d..38a0c3cbb3834 100644 --- a/filter/kaltura/version.php +++ b/filter/kaltura/version.php @@ -24,11 +24,11 @@ */ defined('MOODLE_INTERNAL') || die(); -$plugin->version = 2016120130; //version date YYYYMMDDXX 10 represent 3.0 for future option to moodle use 2 digit version +$plugin->version = 2016122231; //version date YYYYMMDDXX 10 represent 3.0 for future option to moodle use 2 digit version $plugin->component = 'filter_kaltura'; $plugin->release = 'Kaltura release 4.0.11'; $plugin->requires = 2014050800; $plugin->maturity = MATURITY_STABLE; $plugin->dependencies = array( - 'local_kaltura' => 2016120130 + 'local_kaltura' => 2016122231 ); diff --git a/lib/editor/atto/plugins/kalturamedia/version.php b/lib/editor/atto/plugins/kalturamedia/version.php index 3453bb8051e35..bffa4bfdff673 100644 --- a/lib/editor/atto/plugins/kalturamedia/version.php +++ b/lib/editor/atto/plugins/kalturamedia/version.php @@ -24,10 +24,10 @@ defined('MOODLE_INTERNAL') || die(); -$plugin->version = 2016120130; // The current plugin version (Date: YYYYMMDDXX). +$plugin->version = 2016122231; // The current plugin version (Date: YYYYMMDDXX). $plugin->release = 'Kaltura release 4.0.11'; $plugin->requires = 2014050800; // Requires this Moodle version. $plugin->component = 'atto_kalturamedia'; // Full name of the plugin (used for diagnostics). $plugin->dependencies = array( - 'local_kaltura' => 2016120130 + 'local_kaltura' => 2016122231 ); diff --git a/lib/editor/tinymce/plugins/kalturamedia/version.php b/lib/editor/tinymce/plugins/kalturamedia/version.php index bfb38ddeef1a9..09d17cd35de77 100644 --- a/lib/editor/tinymce/plugins/kalturamedia/version.php +++ b/lib/editor/tinymce/plugins/kalturamedia/version.php @@ -23,12 +23,12 @@ defined('MOODLE_INTERNAL') || die(); -$plugin->version = 2016120130; +$plugin->version = 2016122231; $plugin->release = 'Kaltura release 4.0.11'; // Required Moodle version. $plugin->requires = 2014050800; // Full name of the plugin (used for diagnostics). $plugin->component = 'tinymce_kalturamedia'; $plugin->dependencies = array( - 'local_kaltura' => 2016120130 + 'local_kaltura' => 2016122231 ); diff --git a/local/kaltura/version.php b/local/kaltura/version.php index 9bd063215f802..179a7df54ac57 100644 --- a/local/kaltura/version.php +++ b/local/kaltura/version.php @@ -25,7 +25,7 @@ die('Direct access to this script is forbidden.'); } -$plugin->version = 2016120130; +$plugin->version = 2016122231; $plugin->component = 'local_kaltura'; $plugin->release = 'Kaltura release 4.0.11'; $plugin->requires = 2014050800; diff --git a/local/kalturamediagallery/version.php b/local/kalturamediagallery/version.php index f062a75c4822a..bde9145740774 100644 --- a/local/kalturamediagallery/version.php +++ b/local/kalturamediagallery/version.php @@ -26,11 +26,11 @@ die('Direct access to this script is forbidden.'); } -$plugin->version = 2016120130; +$plugin->version = 2016122231; $plugin->component = 'local_kalturamediagallery'; $plugin->release = 'Kaltura release 4.0.11'; $plugin->requires = 2014050800; $plugin->maturity = MATURITY_STABLE; $plugin->dependencies = array( - 'local_kaltura' => 2016120130 + 'local_kaltura' => 2016122231 ); diff --git a/local/mymedia/version.php b/local/mymedia/version.php index 6492478bee5fd..90bfe54988a10 100644 --- a/local/mymedia/version.php +++ b/local/mymedia/version.php @@ -25,11 +25,11 @@ die('Direct access to this script is forbidden.'); } -$plugin->version = 2016120130; +$plugin->version = 2016122231; $plugin->component = 'local_mymedia'; $plugin->release = 'Kaltura release 4.0.11'; $plugin->requires = 2014050800; $plugin->maturity = MATURITY_STABLE; $plugin->dependencies = array( - 'local_kaltura' => 2016120130 + 'local_kaltura' => 2016122231 ); diff --git a/mod/kalvidassign/version.php b/mod/kalvidassign/version.php index 5eedee14c8851..8fac07f3b61b5 100644 --- a/mod/kalvidassign/version.php +++ b/mod/kalvidassign/version.php @@ -25,12 +25,12 @@ die('Direct access to this script is forbidden.'); } -$plugin->version = 2016120130; +$plugin->version = 2016122231; $plugin->component = 'mod_kalvidassign'; $plugin->release = 'Kaltura release 4.0.11'; $plugin->requires = 2014050800; $plugin->cron = 0; $plugin->maturity = MATURITY_STABLE; $plugin->dependencies = array( - 'local_kaltura' => 2016120130, + 'local_kaltura' => 2016122231, ); diff --git a/mod/kalvidpres/version.php b/mod/kalvidpres/version.php index e2bb5ece70584..5b90da708ff34 100644 --- a/mod/kalvidpres/version.php +++ b/mod/kalvidpres/version.php @@ -25,12 +25,12 @@ die('Direct access to this script is forbidden.'); } -$plugin->version = 2016120130; +$plugin->version = 2016122231; $plugin->component = 'mod_kalvidpres'; $plugin->release = 'Kaltura release 4.0.11'; $plugin->requires = 2014050800; $plugin->cron = 0; $plugin->maturity = MATURITY_STABLE; $plugin->dependencies = array( - 'local_kaltura' => 2016120130 + 'local_kaltura' => 2016122231 ); diff --git a/mod/kalvidres/version.php b/mod/kalvidres/version.php index f8143d6c735c2..1c55c08af2d2c 100644 --- a/mod/kalvidres/version.php +++ b/mod/kalvidres/version.php @@ -25,12 +25,12 @@ die('Direct access to this script is forbidden.'); } -$plugin->version = 2016120130; +$plugin->version = 2016122231; $plugin->component = 'mod_kalvidres'; $plugin->release = 'Kaltura release 4.0.11'; $plugin->requires = 2014050800; $plugin->cron = 0; $plugin->maturity = MATURITY_STABLE; $plugin->dependencies = array( - 'local_kaltura' => 2016120130 + 'local_kaltura' => 2016122231 ); From daec7697989251524e192f15ad44e03a62bbe6cc Mon Sep 17 00:00:00 2001 From: Muli Dayan Date: Thu, 22 Dec 2016 17:17:38 +0200 Subject: [PATCH 132/326] adjust plugin build number to match moodle version (moodle 3.2) --- filter/kaltura/version.php | 4 ++-- lib/editor/atto/plugins/kalturamedia/version.php | 4 ++-- lib/editor/tinymce/plugins/kalturamedia/version.php | 4 ++-- local/kaltura/version.php | 2 +- local/kalturamediagallery/version.php | 4 ++-- local/mymedia/version.php | 4 ++-- mod/kalvidassign/version.php | 4 ++-- mod/kalvidpres/version.php | 4 ++-- mod/kalvidres/version.php | 4 ++-- 9 files changed, 17 insertions(+), 17 deletions(-) diff --git a/filter/kaltura/version.php b/filter/kaltura/version.php index 38a0c3cbb3834..fa81ca8aa3a6b 100644 --- a/filter/kaltura/version.php +++ b/filter/kaltura/version.php @@ -24,11 +24,11 @@ */ defined('MOODLE_INTERNAL') || die(); -$plugin->version = 2016122231; //version date YYYYMMDDXX 10 represent 3.0 for future option to moodle use 2 digit version +$plugin->version = 2016122232; //version date YYYYMMDDXX 10 represent 3.0 for future option to moodle use 2 digit version $plugin->component = 'filter_kaltura'; $plugin->release = 'Kaltura release 4.0.11'; $plugin->requires = 2014050800; $plugin->maturity = MATURITY_STABLE; $plugin->dependencies = array( - 'local_kaltura' => 2016122231 + 'local_kaltura' => 2016122232 ); diff --git a/lib/editor/atto/plugins/kalturamedia/version.php b/lib/editor/atto/plugins/kalturamedia/version.php index bffa4bfdff673..140fb7ae116e1 100644 --- a/lib/editor/atto/plugins/kalturamedia/version.php +++ b/lib/editor/atto/plugins/kalturamedia/version.php @@ -24,10 +24,10 @@ defined('MOODLE_INTERNAL') || die(); -$plugin->version = 2016122231; // The current plugin version (Date: YYYYMMDDXX). +$plugin->version = 2016122232; // The current plugin version (Date: YYYYMMDDXX). $plugin->release = 'Kaltura release 4.0.11'; $plugin->requires = 2014050800; // Requires this Moodle version. $plugin->component = 'atto_kalturamedia'; // Full name of the plugin (used for diagnostics). $plugin->dependencies = array( - 'local_kaltura' => 2016122231 + 'local_kaltura' => 2016122232 ); diff --git a/lib/editor/tinymce/plugins/kalturamedia/version.php b/lib/editor/tinymce/plugins/kalturamedia/version.php index 09d17cd35de77..2e00d3f29d318 100644 --- a/lib/editor/tinymce/plugins/kalturamedia/version.php +++ b/lib/editor/tinymce/plugins/kalturamedia/version.php @@ -23,12 +23,12 @@ defined('MOODLE_INTERNAL') || die(); -$plugin->version = 2016122231; +$plugin->version = 2016122232; $plugin->release = 'Kaltura release 4.0.11'; // Required Moodle version. $plugin->requires = 2014050800; // Full name of the plugin (used for diagnostics). $plugin->component = 'tinymce_kalturamedia'; $plugin->dependencies = array( - 'local_kaltura' => 2016122231 + 'local_kaltura' => 2016122232 ); diff --git a/local/kaltura/version.php b/local/kaltura/version.php index 179a7df54ac57..7fade9b47cf5e 100644 --- a/local/kaltura/version.php +++ b/local/kaltura/version.php @@ -25,7 +25,7 @@ die('Direct access to this script is forbidden.'); } -$plugin->version = 2016122231; +$plugin->version = 2016122232; $plugin->component = 'local_kaltura'; $plugin->release = 'Kaltura release 4.0.11'; $plugin->requires = 2014050800; diff --git a/local/kalturamediagallery/version.php b/local/kalturamediagallery/version.php index bde9145740774..a759ff8d3f24f 100644 --- a/local/kalturamediagallery/version.php +++ b/local/kalturamediagallery/version.php @@ -26,11 +26,11 @@ die('Direct access to this script is forbidden.'); } -$plugin->version = 2016122231; +$plugin->version = 2016122232; $plugin->component = 'local_kalturamediagallery'; $plugin->release = 'Kaltura release 4.0.11'; $plugin->requires = 2014050800; $plugin->maturity = MATURITY_STABLE; $plugin->dependencies = array( - 'local_kaltura' => 2016122231 + 'local_kaltura' => 2016122232 ); diff --git a/local/mymedia/version.php b/local/mymedia/version.php index 90bfe54988a10..62e6b3676fc08 100644 --- a/local/mymedia/version.php +++ b/local/mymedia/version.php @@ -25,11 +25,11 @@ die('Direct access to this script is forbidden.'); } -$plugin->version = 2016122231; +$plugin->version = 2016122232; $plugin->component = 'local_mymedia'; $plugin->release = 'Kaltura release 4.0.11'; $plugin->requires = 2014050800; $plugin->maturity = MATURITY_STABLE; $plugin->dependencies = array( - 'local_kaltura' => 2016122231 + 'local_kaltura' => 2016122232 ); diff --git a/mod/kalvidassign/version.php b/mod/kalvidassign/version.php index 8fac07f3b61b5..7d508d549fe67 100644 --- a/mod/kalvidassign/version.php +++ b/mod/kalvidassign/version.php @@ -25,12 +25,12 @@ die('Direct access to this script is forbidden.'); } -$plugin->version = 2016122231; +$plugin->version = 2016122232; $plugin->component = 'mod_kalvidassign'; $plugin->release = 'Kaltura release 4.0.11'; $plugin->requires = 2014050800; $plugin->cron = 0; $plugin->maturity = MATURITY_STABLE; $plugin->dependencies = array( - 'local_kaltura' => 2016122231, + 'local_kaltura' => 2016122232, ); diff --git a/mod/kalvidpres/version.php b/mod/kalvidpres/version.php index 5b90da708ff34..576a40abd56a3 100644 --- a/mod/kalvidpres/version.php +++ b/mod/kalvidpres/version.php @@ -25,12 +25,12 @@ die('Direct access to this script is forbidden.'); } -$plugin->version = 2016122231; +$plugin->version = 2016122232; $plugin->component = 'mod_kalvidpres'; $plugin->release = 'Kaltura release 4.0.11'; $plugin->requires = 2014050800; $plugin->cron = 0; $plugin->maturity = MATURITY_STABLE; $plugin->dependencies = array( - 'local_kaltura' => 2016122231 + 'local_kaltura' => 2016122232 ); diff --git a/mod/kalvidres/version.php b/mod/kalvidres/version.php index 1c55c08af2d2c..1f86a19d8416b 100644 --- a/mod/kalvidres/version.php +++ b/mod/kalvidres/version.php @@ -25,12 +25,12 @@ die('Direct access to this script is forbidden.'); } -$plugin->version = 2016122231; +$plugin->version = 2016122232; $plugin->component = 'mod_kalvidres'; $plugin->release = 'Kaltura release 4.0.11'; $plugin->requires = 2014050800; $plugin->cron = 0; $plugin->maturity = MATURITY_STABLE; $plugin->dependencies = array( - 'local_kaltura' => 2016122231 + 'local_kaltura' => 2016122232 ); From 7f2e08782792bc34d2c276be1b3bd5e8b46006b5 Mon Sep 17 00:00:00 2001 From: Stefan Topfstedt Date: Tue, 6 Jun 2017 15:15:08 -0700 Subject: [PATCH 133/326] moved pix directory to a location where loader can find it. --- .../plugins/kalturamedia/{ => tinymce}/pix/icon.png | Bin 1 file changed, 0 insertions(+), 0 deletions(-) rename lib/editor/tinymce/plugins/kalturamedia/{ => tinymce}/pix/icon.png (100%) diff --git a/lib/editor/tinymce/plugins/kalturamedia/pix/icon.png b/lib/editor/tinymce/plugins/kalturamedia/tinymce/pix/icon.png similarity index 100% rename from lib/editor/tinymce/plugins/kalturamedia/pix/icon.png rename to lib/editor/tinymce/plugins/kalturamedia/tinymce/pix/icon.png From 2248c5261443a10b9e444cde9ec2389e770c787a Mon Sep 17 00:00:00 2001 From: Stefan Topfstedt Date: Tue, 6 Jun 2017 15:15:50 -0700 Subject: [PATCH 134/326] corrected path from img to pix. --- .../tinymce/plugins/kalturamedia/tinymce/editor_plugin.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/editor/tinymce/plugins/kalturamedia/tinymce/editor_plugin.js b/lib/editor/tinymce/plugins/kalturamedia/tinymce/editor_plugin.js index 99e6efc1a06e3..ecc4001ceaeb7 100644 --- a/lib/editor/tinymce/plugins/kalturamedia/tinymce/editor_plugin.js +++ b/lib/editor/tinymce/plugins/kalturamedia/tinymce/editor_plugin.js @@ -64,7 +64,7 @@ ed.addButton('kalturamedia', { title : 'kalturamedia.desc', cmd : 'mcekalturamedia', - image : url+'/img/icon.png' + image : url+'/pix/icon.png' }); }, From a477a2509aaae6a83367ecd64a4a59d210564ece Mon Sep 17 00:00:00 2001 From: Danny Jung Date: Fri, 7 Apr 2017 16:35:02 -0700 Subject: [PATCH 135/326] Fix URLs for event logs. --- mod/kalvidassign/classes/event/assignment_details_viewed.php | 2 +- mod/kalvidassign/classes/event/assignment_submitted.php | 2 +- .../classes/event/grade_submissions_page_viewed.php | 2 +- mod/kalvidassign/classes/event/grades_updated.php | 2 +- .../classes/event/single_submission_page_viewed.php | 2 +- mod/kalvidpres/classes/event/video_resource_viewed.php | 2 +- mod/kalvidres/classes/event/video_resource_viewed.php | 2 +- 7 files changed, 7 insertions(+), 7 deletions(-) diff --git a/mod/kalvidassign/classes/event/assignment_details_viewed.php b/mod/kalvidassign/classes/event/assignment_details_viewed.php index b8a10dfe81126..4597acc7ae6d7 100644 --- a/mod/kalvidassign/classes/event/assignment_details_viewed.php +++ b/mod/kalvidassign/classes/event/assignment_details_viewed.php @@ -49,7 +49,7 @@ public function get_description() { } public function get_url() { - return new \moodle_url('view.php', array('cmid' => $this->contextinstanceid)); + return new \moodle_url('/mod/kalvidassign/view.php', array('cmid' => $this->contextinstanceid)); } public function get_legacy_logdata() { diff --git a/mod/kalvidassign/classes/event/assignment_submitted.php b/mod/kalvidassign/classes/event/assignment_submitted.php index 69c08c0fec757..12fe04410aa17 100644 --- a/mod/kalvidassign/classes/event/assignment_submitted.php +++ b/mod/kalvidassign/classes/event/assignment_submitted.php @@ -49,7 +49,7 @@ public function get_description() { } public function get_url() { - return new \moodle_url('view.php', array('cmid' => $this->contextinstanceid)); + return new \moodle_url('/mod/kalvidassign/view.php', array('cmid' => $this->contextinstanceid)); } public function get_legacy_logdata() { diff --git a/mod/kalvidassign/classes/event/grade_submissions_page_viewed.php b/mod/kalvidassign/classes/event/grade_submissions_page_viewed.php index 9c787437d1c7e..e247bb49e7348 100644 --- a/mod/kalvidassign/classes/event/grade_submissions_page_viewed.php +++ b/mod/kalvidassign/classes/event/grade_submissions_page_viewed.php @@ -49,7 +49,7 @@ public function get_description() { } public function get_url() { - return new \moodle_url('grade_submissions.php', array('cmid' => $this->contextinstanceid)); + return new \moodle_url('/mod/kalvidassign/grade_submissions.php', array('cmid' => $this->contextinstanceid)); } public function get_legacy_logdata() { diff --git a/mod/kalvidassign/classes/event/grades_updated.php b/mod/kalvidassign/classes/event/grades_updated.php index 2b633b0a17f35..e837b1edbf221 100644 --- a/mod/kalvidassign/classes/event/grades_updated.php +++ b/mod/kalvidassign/classes/event/grades_updated.php @@ -51,7 +51,7 @@ public function get_description() { } public function get_url() { - return new \moodle_url('grade_submissions.php', array('cmid' => $this->contextinstanceid)); + return new \moodle_url('/mod/kalvidassign/grade_submissions.php', array('cmid' => $this->contextinstanceid)); } public function get_legacy_logdata() { diff --git a/mod/kalvidassign/classes/event/single_submission_page_viewed.php b/mod/kalvidassign/classes/event/single_submission_page_viewed.php index 70596f7582df0..b622819ce3549 100644 --- a/mod/kalvidassign/classes/event/single_submission_page_viewed.php +++ b/mod/kalvidassign/classes/event/single_submission_page_viewed.php @@ -49,7 +49,7 @@ public function get_description() { } public function get_url() { - return new \moodle_url('single_submission.php', array('cmid' => $this->contextinstanceid)); + return new \moodle_url('/mod/kalvidassign/single_submission.php', array('cmid' => $this->contextinstanceid)); } public function get_legacy_logdata() { diff --git a/mod/kalvidpres/classes/event/video_resource_viewed.php b/mod/kalvidpres/classes/event/video_resource_viewed.php index cd3b8f5d38c7f..a4381dc5deb2a 100644 --- a/mod/kalvidpres/classes/event/video_resource_viewed.php +++ b/mod/kalvidpres/classes/event/video_resource_viewed.php @@ -48,7 +48,7 @@ public function get_description() { } public function get_url() { - return new \moodle_url('view.php', array('id' => $this->contextinstanceid)); + return new \moodle_url('/mod/kalvidpres/view.php', array('id' => $this->contextinstanceid)); } public function get_legacy_logdata() { diff --git a/mod/kalvidres/classes/event/video_resource_viewed.php b/mod/kalvidres/classes/event/video_resource_viewed.php index 89a842fa0d5e4..22c77be006a50 100644 --- a/mod/kalvidres/classes/event/video_resource_viewed.php +++ b/mod/kalvidres/classes/event/video_resource_viewed.php @@ -48,7 +48,7 @@ public function get_description() { } public function get_url() { - return new \moodle_url('view.php', array('id' => $this->contextinstanceid)); + return new \moodle_url('/mod/kalvidres/view.php', array('id' => $this->contextinstanceid)); } public function get_legacy_logdata() { From 6c09f702332ce76718f21761852c30f660866e02 Mon Sep 17 00:00:00 2001 From: Muli Dayan Date: Wed, 7 Jun 2017 12:41:55 +0300 Subject: [PATCH 136/326] KMS-14002 use moodle's message object instead of stdClass --- mod/kalvidassign/locallib.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mod/kalvidassign/locallib.php b/mod/kalvidassign/locallib.php index b003b070e1259..3e4d7fd576f1f 100644 --- a/mod/kalvidassign/locallib.php +++ b/mod/kalvidassign/locallib.php @@ -219,7 +219,7 @@ function kalvidassign_email_teachers($cm, $name, $submission, $context) { $posttext = kalvidassign_email_teachers_text($info); $posthtml = ($teacher->mailformat == 1) ? kalvidassign_email_teachers_html($info) : ''; - $eventdata = new stdClass(); + $eventdata = new \core\message\message(); $eventdata->modulename = 'kalvidassign'; $eventdata->userfrom = $user; $eventdata->userto = $teacher; From d19b64ea5801d09f2406a0e45ebcadb23cb4f79e Mon Sep 17 00:00:00 2001 From: Muli Dayan Date: Thu, 8 Jun 2017 16:26:04 +0300 Subject: [PATCH 137/326] Refactor filter callback function: 1. Init default values (for #2). 2. Remove duplicated code from each if and consolidate it. 3. Remove 'contentframe' ID from iframe attribute, use class instead (in order to avoid ID duplication in case the player is embedded more than once in the same page). 4. Wrap the iframe with a container, in order to make the player responsive and maintain aspect ratio. --- filter/kaltura/filter.php | 79 +++++++++++++++------------------------ 1 file changed, 30 insertions(+), 49 deletions(-) diff --git a/filter/kaltura/filter.php b/filter/kaltura/filter.php index e6c53b47d48c2..6e86980014e3d 100644 --- a/filter/kaltura/filter.php +++ b/filter/kaltura/filter.php @@ -161,11 +161,16 @@ function filter_kaltura_callback($link) { $newurl = preg_replace('#https?://#','',$newurl); $kafuri = preg_replace('#https?://#', '', filter_kaltura::$kafuri); + + $width = filter_kaltura::$defaultwidth; + $height = filter_kaltura::$defaultheight; + $source = ''; + // Convert KAF URI anchor tags into iframe markup. if (14 == count($link) && $newurl == $kafuri) { // Get the height and width of the iframe. $properties = explode('||', $link[13]); - + $width = $properties[2]; $height = $properties[3]; @@ -176,61 +181,37 @@ function filter_kaltura_callback($link) { $source = filter_kaltura::$kafuri.'/browseandembed/index/media/entryid/'.$link[2].'/showDescription/'.$link[4].'/showTitle/'.$link[5]; $source .= '/showTags/'.$link[6].'/showDuration/'.$link[7].'/showOwner/'.$link[8].'/showUploadDate/'.$link[9]; $source .= '/playerSize/'.$width.'x'.$height.'/playerSkin/'.$link[12]; - - // Iniitate an LTI launch. - $params = array( - 'courseid' => filter_kaltura::$pagecontext->instanceid, - 'height' => $height, - 'width' => $width, - 'withblocks' => 0, - 'source' => $source - ); - $url = new moodle_url('/filter/kaltura/lti_launch.php', $params); - - $attr = array( - 'id' => 'contentframe', - 'height' => $height, - 'width' => $width, - 'allowfullscreen' => 'true', - 'webkitallowfullscreen' => 'true', - 'mozallowfullscreen' => 'true', - 'src' => $url->out(false), - 'frameborder' => '0' - ); - - $newtext = html_writer::tag('iframe', '', $attr); } // Convert v3 anchor tags into iframe markup. if (7 == count($link) && $link[1] == filter_kaltura::$apiurl) { $source = filter_kaltura::$kafuri.'/browseandembed/index/media/entryid/'.$link[4].'/playerSize/'; $source .= filter_kaltura::$defaultwidth.'x'.filter_kaltura::$defaultheight.'/playerSkin/'.$link[3]; + } - // Iniitate an LTI launch. - $params = array( - 'courseid' => filter_kaltura::$pagecontext->instanceid, - 'height' => filter_kaltura::$defaultheight, - 'width' => filter_kaltura::$defaultwidth, - 'withblocks' => 0, - 'source' => $source - ); - - $url = new moodle_url('/filter/kaltura/lti_launch.php', $params); - - $attr = array( - 'id' => 'contentframe', - 'height' => filter_kaltura::$defaultheight, - 'width' => filter_kaltura::$defaultwidth, - 'allowfullscreen' => 'true', - 'webkitallowfullscreen' => 'true', - 'mozallowfullscreen' => 'true', - 'src' => $url->out(false), - 'frameborder' => '0' - ); - - $newtext = html_writer::tag('iframe', '', $attr); + $params = array( + 'courseid' => filter_kaltura::$pagecontext->instanceid, + 'height' => $height, + 'width' => $width, + 'withblocks' => 0, + 'source' => $source - } + ); + + $url = new moodle_url('/filter/kaltura/lti_launch.php', $params); + + $iframe = html_writer::tag('iframe', '', array( + 'width' => $width, + 'height' => $height, + 'class' => 'kaltura-player-iframe', + 'allowfullscreen' => 'true', + 'src' => $url->out(false), + 'frameborder' => '0' + )); + + $iframeContainer = html_writer::tag('div', $iframe, array( + 'class' => 'kaltura-player-container' + )); - return $newtext; + return $iframeContainer; } From b51a42656550e000fa58fa6cede5f762c6f653ad Mon Sep 17 00:00:00 2001 From: Muli Dayan Date: Thu, 8 Jun 2017 16:35:19 +0300 Subject: [PATCH 138/326] KMS-14061 remove unused code --- filter/kaltura/filter.php | 3 --- 1 file changed, 3 deletions(-) diff --git a/filter/kaltura/filter.php b/filter/kaltura/filter.php index 6e86980014e3d..de0633223d2ec 100644 --- a/filter/kaltura/filter.php +++ b/filter/kaltura/filter.php @@ -147,9 +147,6 @@ public function filter($text, array $options = array()) { * @return string Kaltura embed video markup. */ function filter_kaltura_callback($link) { - global $CFG; - $newtext = $link[0]; - $newurl = $link[1]; if (!empty($newurl)) { // Check to see if token is being used in url and replace with kaf_uri. From b65972b43f3fe20562430bed582c2d1a663b274e Mon Sep 17 00:00:00 2001 From: Muli Dayan Date: Thu, 8 Jun 2017 16:37:34 +0300 Subject: [PATCH 139/326] KMS-14061 add CSS file for player --- filter/kaltura/styles.css | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) create mode 100644 filter/kaltura/styles.css diff --git a/filter/kaltura/styles.css b/filter/kaltura/styles.css new file mode 100644 index 0000000000000..bbbe71861d187 --- /dev/null +++ b/filter/kaltura/styles.css @@ -0,0 +1,20 @@ +@media (max-width: 767px) { + .kaltura-player-container { + width: 100%; + position: relative; + /* aspect ratio - 16:9 */ + padding-top: 56.25%; + /* player's control bar */ + padding-bottom: 30px; + } + + .kaltura-player-iframe { + position: absolute; + width: 100%; + height: 100%; + top: 0; + left: 0; + right: 0; + bottom: 0; + } +} \ No newline at end of file From 401ad51529d96e705c54e66a0a286a673c8c1833 Mon Sep 17 00:00:00 2001 From: Muli Dayan Date: Sun, 11 Jun 2017 12:37:33 +0300 Subject: [PATCH 140/326] fix php error - missing parameter on lti object --- local/kaltura/locallib.php | 1 + 1 file changed, 1 insertion(+) diff --git a/local/kaltura/locallib.php b/local/kaltura/locallib.php index e17b2b53b07df..ba149dc5b6abf 100644 --- a/local/kaltura/locallib.php +++ b/local/kaltura/locallib.php @@ -266,6 +266,7 @@ function local_kaltura_format_lti_instance_object($ltirequest) { $lti->instructorchoiceallowroster = LTI_SETTING_NEVER; $lti->resourcekey = $configsettings->partner_id; $lti->password = $configsettings->adminsecret; + $lti->introformat = FORMAT_MOODLE; // The Kaltura tool URL includes the account partner id. $newuri = $configsettings->kaf_uri; $lti->toolurl = $newuri; From f254c1b0991f3be562c28ed5a6e2fa2898658266 Mon Sep 17 00:00:00 2001 From: Muli Dayan Date: Sun, 11 Jun 2017 14:44:47 +0300 Subject: [PATCH 141/326] KMS-14061 wrap kaltura player iframe and make it responsive for mobile devices --- mod/kalvidassign/renderer.php | 7 +++++-- mod/kalvidres/mod_form.php | 11 +++++++++-- mod/kalvidres/renderer.php | 10 +++++++--- 3 files changed, 21 insertions(+), 7 deletions(-) diff --git a/mod/kalvidassign/renderer.php b/mod/kalvidassign/renderer.php index 7844bef176ebe..979d0f382ca6c 100644 --- a/mod/kalvidassign/renderer.php +++ b/mod/kalvidassign/renderer.php @@ -1001,7 +1001,6 @@ public function display_video_container_markup($submission, $courseid, $cmid) { $source = new moodle_url('/local/kaltura/pix/vidThumb.png'); $alt = get_string('video_thumbnail', 'mod_kalvidassign'); $title = get_string('video_thumbnail', 'mod_kalvidassign'); - $iframe = ''; $url = null; $attr = array( @@ -1030,6 +1029,7 @@ public function display_video_container_markup($submission, $courseid, $cmid) { $params = array( 'id' => 'contentframe', + 'class' => 'kaltura-player-iframe', 'src' => ($url instanceof moodle_url) ? $url->out(false) : '', 'allowfullscreen' => "true", 'webkitallowfullscreen' => "true", @@ -1043,8 +1043,11 @@ public function display_video_container_markup($submission, $courseid, $cmid) { } $iframe = html_writer::tag('iframe', '', $params); + $iframeContainer = html_writer::tag('div', $iframe, array( + 'class' => 'kaltura-player-container' + )); - $output .= html_writer::tag('center', $iframe); + $output .= $iframeContainer; return $output; } diff --git a/mod/kalvidres/mod_form.php b/mod/kalvidres/mod_form.php index ae7db3ede2440..7ded17a305098 100644 --- a/mod/kalvidres/mod_form.php +++ b/mod/kalvidres/mod_form.php @@ -150,7 +150,7 @@ private function add_video_definition($mform) { $videopreview = $this->get_iframe_video_preview_markup($addinstance); $mform->addElement('static', 'add_video_thumb', ' ', $thumbnail); - $mform->addElement('static', 'add_video_preview', ' ', $videopreview); + $mform->addElement('html', $videopreview); $videogroup = array(); if ($addinstance) { @@ -202,6 +202,7 @@ private function get_iframe_video_preview_markup($hide = true) { $params = array( 'id' => 'contentframe', + 'class' => 'kaltura-player-iframe', 'src' => $source, 'height' => $height, 'width' => $width, @@ -229,7 +230,13 @@ private function get_iframe_video_preview_markup($hide = true) { $params['src'] = $url->out(false); } - return html_writer::tag('iframe', '', $params); + $iframe = html_writer::tag('iframe', '', $params); + + $iframeContainer = html_writer::tag('div', $iframe, array( + 'class' => 'kaltura-player-container' + )); + + return $iframeContainer; } /** diff --git a/mod/kalvidres/renderer.php b/mod/kalvidres/renderer.php index daeb24e99a13f..af43b5efb00e2 100644 --- a/mod/kalvidres/renderer.php +++ b/mod/kalvidres/renderer.php @@ -63,6 +63,7 @@ public function display_iframe($kalvidres, $courseid) { $attr = array( 'id' => 'contentframe', + 'class' => 'kaltura-player-iframe', 'height' => '100%', 'width' => $kalvidres->width, 'src' => $url->out(false), @@ -71,8 +72,11 @@ public function display_iframe($kalvidres, $courseid) { 'mozallowfullscreen' => 'true' ); - $output = html_writer::tag('iframe', '', $attr); - $output = html_writer::tag('center', $output); - return $output; + $iframe = html_writer::tag('iframe', '', $attr); + $iframeContainer = html_writer::tag('div', $iframe, array( + 'class' => 'kaltura-player-container' + )); + + return $iframeContainer; } } \ No newline at end of file From 6136064766fd7705379385453e7915de513627e7 Mon Sep 17 00:00:00 2001 From: Muli Dayan Date: Sun, 11 Jun 2017 14:45:52 +0300 Subject: [PATCH 142/326] KMS-14061 move CSS to global kaltura plugin --- filter/kaltura/styles.css | 20 -------------------- local/kaltura/styles.css | 23 ++++++++++++++++++++++- 2 files changed, 22 insertions(+), 21 deletions(-) delete mode 100644 filter/kaltura/styles.css diff --git a/filter/kaltura/styles.css b/filter/kaltura/styles.css deleted file mode 100644 index bbbe71861d187..0000000000000 --- a/filter/kaltura/styles.css +++ /dev/null @@ -1,20 +0,0 @@ -@media (max-width: 767px) { - .kaltura-player-container { - width: 100%; - position: relative; - /* aspect ratio - 16:9 */ - padding-top: 56.25%; - /* player's control bar */ - padding-bottom: 30px; - } - - .kaltura-player-iframe { - position: absolute; - width: 100%; - height: 100%; - top: 0; - left: 0; - right: 0; - bottom: 0; - } -} \ No newline at end of file diff --git a/local/kaltura/styles.css b/local/kaltura/styles.css index 588bf360a6ddb..5de54bd6efc86 100644 --- a/local/kaltura/styles.css +++ b/local/kaltura/styles.css @@ -1,4 +1,4 @@ -iframe#contentframe { +#contentframe { border-style: none; } @@ -8,3 +8,24 @@ iframe#contentframe { height: 100%; width: 100%; } + +@media (max-width: 767px) { + .kaltura-player-container { + width: 100%; + position: relative; + /* aspect ratio - 16:9 */ + padding-top: 56.25%; + /* player's control bar */ + padding-bottom: 30px; + } + + .kaltura-player-iframe { + position: absolute; + width: 100% !important; + height: 100% !important; + top: 0; + left: 0; + right: 0; + bottom: 0; + } +} \ No newline at end of file From 944e7ebd53959d5b2e53512e1ae375fe816290b0 Mon Sep 17 00:00:00 2001 From: Muli Dayan Date: Sun, 11 Jun 2017 14:46:42 +0300 Subject: [PATCH 143/326] KMS-14061 remove deprecated 'allow full screen' attributes --- mod/kalvidassign/renderer.php | 6 ++---- mod/kalvidres/mod_form.php | 4 +--- mod/kalvidres/renderer.php | 2 -- 3 files changed, 3 insertions(+), 9 deletions(-) diff --git a/mod/kalvidassign/renderer.php b/mod/kalvidassign/renderer.php index 979d0f382ca6c..18d0ea55c6cac 100644 --- a/mod/kalvidassign/renderer.php +++ b/mod/kalvidassign/renderer.php @@ -1012,7 +1012,7 @@ public function display_video_container_markup($submission, $courseid, $cmid) { // If the submission object contains a source URL then display the video as part of an LTI launch. if (!empty($submission->source)) { - $attr['style'] = 'display:none'; + $attr['style'] = 'display: none'; $params = array( 'courseid' => $courseid, @@ -1032,14 +1032,12 @@ public function display_video_container_markup($submission, $courseid, $cmid) { 'class' => 'kaltura-player-iframe', 'src' => ($url instanceof moodle_url) ? $url->out(false) : '', 'allowfullscreen' => "true", - 'webkitallowfullscreen' => "true", - 'mozallowfullscreen' => "true", 'height' => '100%', 'width' => !empty($submission->width) ? $submission->width : '' ); if (empty($submission->source)) { - $params['style'] = 'display:none'; + $params['style'] = 'display: none'; } $iframe = html_writer::tag('iframe', '', $params); diff --git a/mod/kalvidres/mod_form.php b/mod/kalvidres/mod_form.php index 7ded17a305098..a5edf4781bca0 100644 --- a/mod/kalvidres/mod_form.php +++ b/mod/kalvidres/mod_form.php @@ -207,12 +207,10 @@ private function get_iframe_video_preview_markup($hide = true) { 'height' => $height, 'width' => $width, 'allowfullscreen' => 'true', - 'webkitallowfullscreen' => 'true', - 'mozallowfullscreen' => 'true' ); if ($hide) { - $params['style'] = 'display:none'; + $params['style'] = 'display: none'; } // If the source attribute is not empty, initiate an LTI launch to avoid having ACL issues when another user with permissions edits the module. diff --git a/mod/kalvidres/renderer.php b/mod/kalvidres/renderer.php index af43b5efb00e2..53fb773ec5e93 100644 --- a/mod/kalvidres/renderer.php +++ b/mod/kalvidres/renderer.php @@ -68,8 +68,6 @@ public function display_iframe($kalvidres, $courseid) { 'width' => $kalvidres->width, 'src' => $url->out(false), 'allowfullscreen' => 'true', - 'webkitallowfullscreen' => 'true', - 'mozallowfullscreen' => 'true' ); $iframe = html_writer::tag('iframe', '', $attr); From 813f865211ba53df95713d2b53ed0e3b9ed2ced3 Mon Sep 17 00:00:00 2001 From: Muli Dayan Date: Sun, 11 Jun 2017 14:47:53 +0300 Subject: [PATCH 144/326] KMS-14061 remove deprecated 'allow full screen' attributes --- local/kalturamediagallery/index.php | 2 -- local/mymedia/mymedia.php | 2 -- mod/kalvidassign/single_submission_form.php | 2 -- mod/kalvidpres/mod_form.php | 2 -- mod/kalvidpres/renderer.php | 2 -- 5 files changed, 10 deletions(-) diff --git a/local/kalturamediagallery/index.php b/local/kalturamediagallery/index.php index 4771fb78168a0..1bd86a9bde323 100644 --- a/local/kalturamediagallery/index.php +++ b/local/kalturamediagallery/index.php @@ -61,8 +61,6 @@ 'height' => '600px', 'width' => '100%', 'allowfullscreen' => 'true', - 'webkitallowfullscreen' => 'true', - 'mozallowfullscreen' => 'true', 'src' => 'lti_launch.php?courseid='.$courseid ); echo html_writer::tag('iframe', '', $attr); diff --git a/local/mymedia/mymedia.php b/local/mymedia/mymedia.php index 4cf43fde8f437..f4967e1021630 100644 --- a/local/mymedia/mymedia.php +++ b/local/mymedia/mymedia.php @@ -54,8 +54,6 @@ 'height' => '600px', 'width' => '100%', 'allowfullscreen' => 'true', - 'webkitallowfullscreen' => 'true', - 'mozallowfullscreen' => 'true', 'src' => 'lti_launch.php' ); echo html_writer::tag('iframe', '', $attr); diff --git a/mod/kalvidassign/single_submission_form.php b/mod/kalvidassign/single_submission_form.php index 5fed3ccf15805..95ac829237dc7 100644 --- a/mod/kalvidassign/single_submission_form.php +++ b/mod/kalvidassign/single_submission_form.php @@ -70,8 +70,6 @@ public function definition() { 'height' => $submission->height, 'width' => $submission->width, 'allowfullscreen' => "true", - 'webkitallowfullscreen' => "true", - 'mozallowfullscreen' => "true" ); $mform->addElement('html', html_writer::tag('iframe', '', $attr)); } diff --git a/mod/kalvidpres/mod_form.php b/mod/kalvidpres/mod_form.php index 84ff1976d3e78..93bb1b35fc487 100644 --- a/mod/kalvidpres/mod_form.php +++ b/mod/kalvidpres/mod_form.php @@ -214,8 +214,6 @@ private function get_iframe_video_preview_markup($hide = true) { 'height' => $height, 'width' => $width, 'allowfullscreen' => 'true', - 'webkitallowfullscreen' => 'true', - 'mozallowfullscreen' => 'true' ); if ($hide) { diff --git a/mod/kalvidpres/renderer.php b/mod/kalvidpres/renderer.php index 9b488a946fef8..df0c0677eb514 100644 --- a/mod/kalvidpres/renderer.php +++ b/mod/kalvidpres/renderer.php @@ -50,8 +50,6 @@ public function display_iframe($kalvidpres, $courseid) { 'width' => $kalvidpres->width, 'src' => $url->out(false), 'allowfullscreen' => 'true', - 'webkitallowfullscreen' => 'true', - 'mozallowfullscreen' => 'true' ); $output = html_writer::tag('iframe', '', $attr); From a78ac3bb3771cfdcd3810d2213187110951a04d2 Mon Sep 17 00:00:00 2001 From: Muli Dayan Date: Sun, 11 Jun 2017 14:49:10 +0300 Subject: [PATCH 145/326] KMS-14061 remove unnecessary build files in source folder --- .../moodle-local_kaltura-ltiservice-debug.js | 58 ------------------- .../moodle-local_kaltura-ltiservice-min.js | 1 - .../moodle-local_kaltura-ltiservice.js | 58 ------------------- 3 files changed, 117 deletions(-) delete mode 100644 local/kaltura/yui/src/build/moodle-local_kaltura-ltiservice/moodle-local_kaltura-ltiservice-debug.js delete mode 100644 local/kaltura/yui/src/build/moodle-local_kaltura-ltiservice/moodle-local_kaltura-ltiservice-min.js delete mode 100644 local/kaltura/yui/src/build/moodle-local_kaltura-ltiservice/moodle-local_kaltura-ltiservice.js diff --git a/local/kaltura/yui/src/build/moodle-local_kaltura-ltiservice/moodle-local_kaltura-ltiservice-debug.js b/local/kaltura/yui/src/build/moodle-local_kaltura-ltiservice/moodle-local_kaltura-ltiservice-debug.js deleted file mode 100644 index 3e316429bff2b..0000000000000 --- a/local/kaltura/yui/src/build/moodle-local_kaltura-ltiservice/moodle-local_kaltura-ltiservice-debug.js +++ /dev/null @@ -1,58 +0,0 @@ -YUI.add('moodle-local_kaltura-ltiservice', function (Y, NAME) { - -// This file is part of Moodle - http://moodle.org/ -// -// Moodle is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// Moodle is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with Moodle. If not, see . - -/** - * YUI module for displaying an LTI launch within a YUI panel. - * - * @package local_kaltura - * @author Remote-Learner.net Inc - * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later - * @copyright (C) 2014 Remote Learner.net Inc http://www.remote-learner.net - */ - - /** - * This method calls the base class constructor - * @method LTISERVICE - */ -var LTISERVICE = function() { - LTISERVICE.superclass.constructor.apply(this, arguments); -}; - -Y.extend(LTISERVICE, Y.Base, { - /** - * Init function for the checkboxselection module - */ - init : function() { - alert('ltiservice'); - - } -}, -{ - NAME : 'moodle-local_kaltura-ltiservice' -}); -M.local_kaltura = M.local_kaltura || {}; - -/** - * Entry point for ltiservice module - * @param string params additional parameters. - * @return object the ltiservice object - */ -M.local_kaltura.init = function(params) { - return new LTISERVICE(params); -}; - -}, '@VERSION@', {"requires": ["base", "node"]}); diff --git a/local/kaltura/yui/src/build/moodle-local_kaltura-ltiservice/moodle-local_kaltura-ltiservice-min.js b/local/kaltura/yui/src/build/moodle-local_kaltura-ltiservice/moodle-local_kaltura-ltiservice-min.js deleted file mode 100644 index aeb426ce7fab1..0000000000000 --- a/local/kaltura/yui/src/build/moodle-local_kaltura-ltiservice/moodle-local_kaltura-ltiservice-min.js +++ /dev/null @@ -1 +0,0 @@ -YUI.add("moodle-local_kaltura-ltiservice",function(e,t){var n=function(){n.superclass.constructor.apply(this,arguments)};e.extend(n,e.Base,{init:function(){alert("ltiservice")}},{NAME:"moodle-local_kaltura-ltiservice"}),M.local_kaltura=M.local_kaltura||{},M.local_kaltura.init=function(e){return new n(e)}},"@VERSION@",{requires:["base","node"]}); diff --git a/local/kaltura/yui/src/build/moodle-local_kaltura-ltiservice/moodle-local_kaltura-ltiservice.js b/local/kaltura/yui/src/build/moodle-local_kaltura-ltiservice/moodle-local_kaltura-ltiservice.js deleted file mode 100644 index 3e316429bff2b..0000000000000 --- a/local/kaltura/yui/src/build/moodle-local_kaltura-ltiservice/moodle-local_kaltura-ltiservice.js +++ /dev/null @@ -1,58 +0,0 @@ -YUI.add('moodle-local_kaltura-ltiservice', function (Y, NAME) { - -// This file is part of Moodle - http://moodle.org/ -// -// Moodle is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// Moodle is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with Moodle. If not, see . - -/** - * YUI module for displaying an LTI launch within a YUI panel. - * - * @package local_kaltura - * @author Remote-Learner.net Inc - * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later - * @copyright (C) 2014 Remote Learner.net Inc http://www.remote-learner.net - */ - - /** - * This method calls the base class constructor - * @method LTISERVICE - */ -var LTISERVICE = function() { - LTISERVICE.superclass.constructor.apply(this, arguments); -}; - -Y.extend(LTISERVICE, Y.Base, { - /** - * Init function for the checkboxselection module - */ - init : function() { - alert('ltiservice'); - - } -}, -{ - NAME : 'moodle-local_kaltura-ltiservice' -}); -M.local_kaltura = M.local_kaltura || {}; - -/** - * Entry point for ltiservice module - * @param string params additional parameters. - * @return object the ltiservice object - */ -M.local_kaltura.init = function(params) { - return new LTISERVICE(params); -}; - -}, '@VERSION@', {"requires": ["base", "node"]}); From c73bfb31bee29043f7c33fe30d28396ae7bfcd38 Mon Sep 17 00:00:00 2001 From: Muli Dayan Date: Sun, 11 Jun 2017 14:49:36 +0300 Subject: [PATCH 146/326] KMS-14061 fix YUI source files --- local/kaltura/yui/src/ltipanel/js/ltipanel.js | 5 ----- local/kaltura/yui/src/ltiservice/js/ltiservice.js | 5 ----- 2 files changed, 10 deletions(-) diff --git a/local/kaltura/yui/src/ltipanel/js/ltipanel.js b/local/kaltura/yui/src/ltipanel/js/ltipanel.js index 5a7c876a0de62..8c235c9429e45 100644 --- a/local/kaltura/yui/src/ltipanel/js/ltipanel.js +++ b/local/kaltura/yui/src/ltipanel/js/ltipanel.js @@ -1,5 +1,3 @@ -YUI.add('moodle-local_kaltura-ltipanel', function (Y, NAME) { - // This file is part of Moodle - http://moodle.org/ // // Moodle is free software: you can redistribute it and/or modify @@ -355,6 +353,3 @@ M.local_kaltura.initreviewsubmission = function() { var mediaassignment = new LTIPANELMEDIAASSIGNMENT(args); return new LTISUBMISSIONREVIEW(mediaassignment); }; - - -}, '@VERSION@', {"requires": ["base", "node", "panel", "node-event-simulate"]}); diff --git a/local/kaltura/yui/src/ltiservice/js/ltiservice.js b/local/kaltura/yui/src/ltiservice/js/ltiservice.js index c0a22b6b09790..41e1a5686fa27 100644 --- a/local/kaltura/yui/src/ltiservice/js/ltiservice.js +++ b/local/kaltura/yui/src/ltiservice/js/ltiservice.js @@ -1,5 +1,3 @@ -YUI.add('moodle-local_kaltura-ltiservice', function (Y, NAME) { - // This file is part of Moodle - http://moodle.org/ // // Moodle is free software: you can redistribute it and/or modify @@ -120,6 +118,3 @@ M.local_kaltura = M.local_kaltura || {}; M.local_kaltura.init = function(params) { return new LTISERVICE(params); }; - - -}, '@VERSION@', {"requires": ["base", "node", "node-event-simulate"]}); From b741780f701838dec4cd199faf6da25ec18cce9e Mon Sep 17 00:00:00 2001 From: Muli Dayan Date: Mon, 12 Jun 2017 08:31:26 +0300 Subject: [PATCH 147/326] increment version - moodle 3.2 --- filter/kaltura/version.php | 4 ++-- lib/editor/atto/plugins/kalturamedia/version.php | 4 ++-- lib/editor/tinymce/plugins/kalturamedia/version.php | 4 ++-- local/kaltura/version.php | 2 +- local/kalturamediagallery/version.php | 4 ++-- local/mymedia/version.php | 4 ++-- mod/kalvidassign/version.php | 4 ++-- mod/kalvidpres/version.php | 4 ++-- mod/kalvidres/version.php | 4 ++-- 9 files changed, 17 insertions(+), 17 deletions(-) diff --git a/filter/kaltura/version.php b/filter/kaltura/version.php index fa81ca8aa3a6b..231380850d53a 100644 --- a/filter/kaltura/version.php +++ b/filter/kaltura/version.php @@ -24,11 +24,11 @@ */ defined('MOODLE_INTERNAL') || die(); -$plugin->version = 2016122232; //version date YYYYMMDDXX 10 represent 3.0 for future option to moodle use 2 digit version +$plugin->version = 2017061232; //version date YYYYMMDDXX 10 represent 3.0 for future option to moodle use 2 digit version $plugin->component = 'filter_kaltura'; $plugin->release = 'Kaltura release 4.0.11'; $plugin->requires = 2014050800; $plugin->maturity = MATURITY_STABLE; $plugin->dependencies = array( - 'local_kaltura' => 2016122232 + 'local_kaltura' => 2017061232 ); diff --git a/lib/editor/atto/plugins/kalturamedia/version.php b/lib/editor/atto/plugins/kalturamedia/version.php index 140fb7ae116e1..d976989064892 100644 --- a/lib/editor/atto/plugins/kalturamedia/version.php +++ b/lib/editor/atto/plugins/kalturamedia/version.php @@ -24,10 +24,10 @@ defined('MOODLE_INTERNAL') || die(); -$plugin->version = 2016122232; // The current plugin version (Date: YYYYMMDDXX). +$plugin->version = 2017061232; // The current plugin version (Date: YYYYMMDDXX). $plugin->release = 'Kaltura release 4.0.11'; $plugin->requires = 2014050800; // Requires this Moodle version. $plugin->component = 'atto_kalturamedia'; // Full name of the plugin (used for diagnostics). $plugin->dependencies = array( - 'local_kaltura' => 2016122232 + 'local_kaltura' => 2017061232 ); diff --git a/lib/editor/tinymce/plugins/kalturamedia/version.php b/lib/editor/tinymce/plugins/kalturamedia/version.php index 2e00d3f29d318..e1b8b12f911ab 100644 --- a/lib/editor/tinymce/plugins/kalturamedia/version.php +++ b/lib/editor/tinymce/plugins/kalturamedia/version.php @@ -23,12 +23,12 @@ defined('MOODLE_INTERNAL') || die(); -$plugin->version = 2016122232; +$plugin->version = 2017061232; $plugin->release = 'Kaltura release 4.0.11'; // Required Moodle version. $plugin->requires = 2014050800; // Full name of the plugin (used for diagnostics). $plugin->component = 'tinymce_kalturamedia'; $plugin->dependencies = array( - 'local_kaltura' => 2016122232 + 'local_kaltura' => 2017061232 ); diff --git a/local/kaltura/version.php b/local/kaltura/version.php index 7fade9b47cf5e..d8d22fb2f289a 100644 --- a/local/kaltura/version.php +++ b/local/kaltura/version.php @@ -25,7 +25,7 @@ die('Direct access to this script is forbidden.'); } -$plugin->version = 2016122232; +$plugin->version = 2017061232; $plugin->component = 'local_kaltura'; $plugin->release = 'Kaltura release 4.0.11'; $plugin->requires = 2014050800; diff --git a/local/kalturamediagallery/version.php b/local/kalturamediagallery/version.php index a759ff8d3f24f..43c56c66b7c04 100644 --- a/local/kalturamediagallery/version.php +++ b/local/kalturamediagallery/version.php @@ -26,11 +26,11 @@ die('Direct access to this script is forbidden.'); } -$plugin->version = 2016122232; +$plugin->version = 2017061232; $plugin->component = 'local_kalturamediagallery'; $plugin->release = 'Kaltura release 4.0.11'; $plugin->requires = 2014050800; $plugin->maturity = MATURITY_STABLE; $plugin->dependencies = array( - 'local_kaltura' => 2016122232 + 'local_kaltura' => 2017061232 ); diff --git a/local/mymedia/version.php b/local/mymedia/version.php index 62e6b3676fc08..be8dccfe2cd7b 100644 --- a/local/mymedia/version.php +++ b/local/mymedia/version.php @@ -25,11 +25,11 @@ die('Direct access to this script is forbidden.'); } -$plugin->version = 2016122232; +$plugin->version = 2017061232; $plugin->component = 'local_mymedia'; $plugin->release = 'Kaltura release 4.0.11'; $plugin->requires = 2014050800; $plugin->maturity = MATURITY_STABLE; $plugin->dependencies = array( - 'local_kaltura' => 2016122232 + 'local_kaltura' => 2017061232 ); diff --git a/mod/kalvidassign/version.php b/mod/kalvidassign/version.php index 7d508d549fe67..9d72ffc16bb3b 100644 --- a/mod/kalvidassign/version.php +++ b/mod/kalvidassign/version.php @@ -25,12 +25,12 @@ die('Direct access to this script is forbidden.'); } -$plugin->version = 2016122232; +$plugin->version = 2017061232; $plugin->component = 'mod_kalvidassign'; $plugin->release = 'Kaltura release 4.0.11'; $plugin->requires = 2014050800; $plugin->cron = 0; $plugin->maturity = MATURITY_STABLE; $plugin->dependencies = array( - 'local_kaltura' => 2016122232, + 'local_kaltura' => 2017061232, ); diff --git a/mod/kalvidpres/version.php b/mod/kalvidpres/version.php index 576a40abd56a3..f1754ff97249a 100644 --- a/mod/kalvidpres/version.php +++ b/mod/kalvidpres/version.php @@ -25,12 +25,12 @@ die('Direct access to this script is forbidden.'); } -$plugin->version = 2016122232; +$plugin->version = 2017061232; $plugin->component = 'mod_kalvidpres'; $plugin->release = 'Kaltura release 4.0.11'; $plugin->requires = 2014050800; $plugin->cron = 0; $plugin->maturity = MATURITY_STABLE; $plugin->dependencies = array( - 'local_kaltura' => 2016122232 + 'local_kaltura' => 2017061232 ); diff --git a/mod/kalvidres/version.php b/mod/kalvidres/version.php index 1f86a19d8416b..44b4ddbc53e2a 100644 --- a/mod/kalvidres/version.php +++ b/mod/kalvidres/version.php @@ -25,12 +25,12 @@ die('Direct access to this script is forbidden.'); } -$plugin->version = 2016122232; +$plugin->version = 2017061232; $plugin->component = 'mod_kalvidres'; $plugin->release = 'Kaltura release 4.0.11'; $plugin->requires = 2014050800; $plugin->cron = 0; $plugin->maturity = MATURITY_STABLE; $plugin->dependencies = array( - 'local_kaltura' => 2016122232 + 'local_kaltura' => 2017061232 ); From c424768871132f6ebedc057c5980a7c10e229f03 Mon Sep 17 00:00:00 2001 From: Muli Dayan Date: Mon, 12 Jun 2017 15:07:44 +0300 Subject: [PATCH 148/326] KMS-14058 create a new kaltura media gallery block --- .../block_kalturamediagallery.php | 58 +++++++++++++++++++ blocks/kalturamediagallery/db/access.php | 41 +++++++++++++ .../lang/en/block_kalturamediagallery.php | 19 ++++++ blocks/kalturamediagallery/version.php | 24 ++++++++ 4 files changed, 142 insertions(+) create mode 100644 blocks/kalturamediagallery/block_kalturamediagallery.php create mode 100644 blocks/kalturamediagallery/db/access.php create mode 100644 blocks/kalturamediagallery/lang/en/block_kalturamediagallery.php create mode 100644 blocks/kalturamediagallery/version.php diff --git a/blocks/kalturamediagallery/block_kalturamediagallery.php b/blocks/kalturamediagallery/block_kalturamediagallery.php new file mode 100644 index 0000000000000..e02d5c4ae634d --- /dev/null +++ b/blocks/kalturamediagallery/block_kalturamediagallery.php @@ -0,0 +1,58 @@ +title = get_string('pluginname', 'local_kalturamediagallery'); + } + + function get_content() { + if(!is_null($this->content)) { + return $this->content; + } + + $this->content = new stdClass(); + $this->content->text = ''; + $this->content->footer = ''; + + if($context = $this->getCourseContext()) { + $this->content->text = $this->getKalturaMediaGalleryLink($context->instanceid); + } + + return $this->content; + } + + function applicable_formats() + { + return array( + 'course-view' => true + ); + } + + private function getKalturaMediaGalleryLink($courseId) { + $mediaGalleryUrl = new moodle_url('/local/kalturamediagallery/index.php', array( + 'courseid' => $courseId + )); + + $link = html_writer::tag('a', get_string('nav_mediagallery', 'local_kalturamediagallery'), array( + 'href' => $mediaGalleryUrl->out(false) + )); + + return $link; + } + + private function getCourseContext() { + // Check the current page context. If the context is not of a course or module then return false. + $context = context::instance_by_id($this->page->context->id); + $isCourseContext = $context instanceof context_course; + if (!$isCourseContext) { + return false; + } + + // If the context if a module then get the parent context. + $courseContext = ($context instanceof context_module) ? $context->get_course_context() : $context; + + return $courseContext; + } +} \ No newline at end of file diff --git a/blocks/kalturamediagallery/db/access.php b/blocks/kalturamediagallery/db/access.php new file mode 100644 index 0000000000000..8fe8c28742274 --- /dev/null +++ b/blocks/kalturamediagallery/db/access.php @@ -0,0 +1,41 @@ +. + +defined('MOODLE_INTERNAL') || die(); + +$capabilities = array( + 'block/kalturamediagallery:myaddinstance' => array( + 'captype' => 'write', + 'contextlevel' => CONTEXT_SYSTEM, + 'archetypes' => array( + 'user' => CAP_PROHIBIT + ), + + 'clonepermissionsfrom' => 'moodle/my:manageblocks' + ), + + 'block/kalturamediagallery:addinstance' => array( + 'riskbitmask' => RISK_SPAM | RISK_XSS, + 'captype' => 'write', + 'contextlevel' => CONTEXT_BLOCK, + 'archetypes' => array( + 'editingteacher' => CAP_ALLOW, + 'manager' => CAP_ALLOW + ), + + 'clonepermissionsfrom' => 'moodle/site:manageblocks' + ), +); diff --git a/blocks/kalturamediagallery/lang/en/block_kalturamediagallery.php b/blocks/kalturamediagallery/lang/en/block_kalturamediagallery.php new file mode 100644 index 0000000000000..686cf4ad8c0e2 --- /dev/null +++ b/blocks/kalturamediagallery/lang/en/block_kalturamediagallery.php @@ -0,0 +1,19 @@ +. + +$string['pluginname'] = 'Kaltura Media Gallery'; +$string['kalturamediagallery:addinstance'] = 'Add a new Kaltura Media Gallery block'; +$string['kalturamediagallery:myaddinstance'] = 'Add a new Kaltura Media Gallery block to Dashboard'; \ No newline at end of file diff --git a/blocks/kalturamediagallery/version.php b/blocks/kalturamediagallery/version.php new file mode 100644 index 0000000000000..c5acfc8e38fd8 --- /dev/null +++ b/blocks/kalturamediagallery/version.php @@ -0,0 +1,24 @@ +. + +defined('MOODLE_INTERNAL') || die(); + +$plugin->version = 2017061232; +$plugin->release = 'Kaltura release 4.0.11'; +$plugin->requires = 2014050800; +$plugin->component = 'block_kalturamediagallery'; +$plugin->dependencies = array( + 'local_kaltura' => 2017061232, + 'local_kalturamediagallery' => 2017061232 +); From e961829c2d08ec669ef62255ca75b72cc0b15b4b Mon Sep 17 00:00:00 2001 From: Muli Dayan Date: Tue, 13 Jun 2017 10:16:23 +0300 Subject: [PATCH 149/326] KMS-14000 - add 'kaltura media gallery' to 'current course' node and under the current course in 'my courses' --- local/kalturamediagallery/lib.php | 28 ++++++++++++++++++++++------ 1 file changed, 22 insertions(+), 6 deletions(-) diff --git a/local/kalturamediagallery/lib.php b/local/kalturamediagallery/lib.php index a63e243906328..be172247025e5 100644 --- a/local/kalturamediagallery/lib.php +++ b/local/kalturamediagallery/lib.php @@ -60,13 +60,29 @@ function local_kalturamediagallery_extend_navigation($navigation) { $coursecontext = $context; } - $mycoursesnode = $navigation->find('currentcourse', $navigation::TYPE_ROOTNODE); - - if (empty($mycoursesnode) || !has_capability('local/kalturamediagallery:view', $coursecontext, $USER)) { + if(!has_capability('local/kalturamediagallery:view', $coursecontext, $USER)) { return; } - $name = get_string('nav_mediagallery', 'local_kalturamediagallery'); - $url = new moodle_url('/local/kalturamediagallery/index.php', array('courseid' => $coursecontext->instanceid)); - $kalmedgalnode = $mycoursesnode->add($name, $url, navigation_node::NODETYPE_LEAF, $name, 'kalcrsgal'); + $mediaGalleryLinkName = get_string('nav_mediagallery', 'local_kalturamediagallery'); + $linkUrl = new moodle_url('/local/kalturamediagallery/index.php', array('courseid' => $coursecontext->instanceid)); + + $currentCourseNode = $navigation->find('currentcourse', $navigation::TYPE_ROOTNODE); + if (isNodeNotEmpty($currentCourseNode)) { + // we have a 'current course' node, add the link to it. + $currentCourseNode->add($mediaGalleryLinkName, $linkUrl, navigation_node::NODETYPE_LEAF, $mediaGalleryLinkName, 'kalturacoursegallerylink-currentcourse'); + } + + $myCoursesNode = $navigation->find('mycourses', $navigation::TYPE_ROOTNODE); + if(isNodeNotEmpty($myCoursesNode)) { + $currentCourseInMyCourses = $myCoursesNode->find($coursecontext->instanceid, navigation_node::TYPE_COURSE); + if($currentCourseInMyCourses) { + // we found the current course in "my courses node", add the link to it. + $currentCourseInMyCourses->add($mediaGalleryLinkName, $linkUrl, navigation_node::NODETYPE_LEAF, $mediaGalleryLinkName, 'kalturacoursegallerylink-mycourses'); + } + } +} + +function isNodeNotEmpty(navigation_node $node) { + return $node !== false && $node->has_children(); } \ No newline at end of file From 684a978ce8a89998eeed560ab4f87c5252d3883a Mon Sep 17 00:00:00 2001 From: Phil Lello Date: Thu, 30 Jun 2016 18:45:49 +0100 Subject: [PATCH 150/326] Add setting to pick kalturamediagallery link location. This patch adds a configuration setting to choose whether the Kaltura Media Gallery link is displayed in the Navigation block (default) or Course Settings. --- .../lang/en/local_kalturamediagallery.php | 7 ++- local/kalturamediagallery/lib.php | 31 +++++++++- local/kalturamediagallery/settings.php | 60 +++++++++++++++++++ 3 files changed, 96 insertions(+), 2 deletions(-) create mode 100644 local/kalturamediagallery/settings.php diff --git a/local/kalturamediagallery/lang/en/local_kalturamediagallery.php b/local/kalturamediagallery/lang/en/local_kalturamediagallery.php index f6a979f53fa31..51a7412202c4e 100644 --- a/local/kalturamediagallery/lang/en/local_kalturamediagallery.php +++ b/local/kalturamediagallery/lang/en/local_kalturamediagallery.php @@ -28,4 +28,9 @@ $string['kalturamediagallery:view'] = 'View Kaltura Media Gallery'; $string['nav_mediagallery'] = 'Kaltura Media Gallery'; $string['nav_mediagallery_page'] = 'Kaltura Media Gallery'; -$string['pluginname'] = 'Kaltura Media Gallery'; \ No newline at end of file +$string['pluginname'] = 'Kaltura Media Gallery'; +$string['setting_heading_desc'] = 'Settings'; +$string['link_location'] = 'Link location'; +$string['link_location_desc'] = 'Choose where mediagallery link is displayed'; +$string['link_location_navigation'] = 'Navigation block'; +$string['link_location_course_settings'] = 'Course settings'; diff --git a/local/kalturamediagallery/lib.php b/local/kalturamediagallery/lib.php index a63e243906328..b0e6c79bab58b 100644 --- a/local/kalturamediagallery/lib.php +++ b/local/kalturamediagallery/lib.php @@ -21,6 +21,8 @@ * @copyright (C) 2014 Remote Learner.net Inc http://www.remote-learner.net */ +define('LOCAL_KALTURAMEDIAGALLERY_LINK_LOCATION_NAVIGATION_BLOCK', 0); +define('LOCAL_KALTURAMEDIAGALLERY_LINK_LOCATION_COURSE_SETTINGS', 1); /** * This function adds Kaltura media gallery link to the navigation block. The code ensures that the Kaltura media gallery link is only displayed in the 'Current courses' * menu true. In addition it check if the current context is one that is below the course context. @@ -30,6 +32,12 @@ function local_kalturamediagallery_extend_navigation($navigation) { global $USER, $PAGE, $DB; + // Either a set value of 0 or an unset value means hook into navigation block. + if (!empty(get_config('local_kalturamediagallery', 'link_location'))) + { + return; + } + if (empty($USER->id)) { return; } @@ -69,4 +77,25 @@ function local_kalturamediagallery_extend_navigation($navigation) { $name = get_string('nav_mediagallery', 'local_kalturamediagallery'); $url = new moodle_url('/local/kalturamediagallery/index.php', array('courseid' => $coursecontext->instanceid)); $kalmedgalnode = $mycoursesnode->add($name, $url, navigation_node::NODETYPE_LEAF, $name, 'kalcrsgal'); -} \ No newline at end of file +} + +function local_kalturamediagallery_extend_navigation_course(navigation_node $parent, stdClass $course, context_course $context) { + global $USER; + + if (get_config('local_kalturamediagallery', 'link_location') != LOCAL_KALTURAMEDIAGALLERY_LINK_LOCATION_COURSE_SETTINGS) + { + return; + } + + if (empty($USER->id)) { + return; + } + + if (!has_capability('local/kalturamediagallery:view', $context, $USER)) { + return; + } + + $name = get_string('nav_mediagallery', 'local_kalturamediagallery'); + $url = new moodle_url('/local/kalturamediagallery/index.php', array('courseid' => $course->id)); + $kalmedgalnode = $parent->add($name, $url, navigation_node::NODETYPE_LEAF, $name, 'kalcrsgal'); +} diff --git a/local/kalturamediagallery/settings.php b/local/kalturamediagallery/settings.php new file mode 100644 index 0000000000000..48c5388d7e5e5 --- /dev/null +++ b/local/kalturamediagallery/settings.php @@ -0,0 +1,60 @@ +. + +/* + * @package local + * @subpackage kalturamediagallery + * @copyright 2016 Queen Mary University of London + * @author Phil Lello + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + * + */ + +defined('MOODLE_INTERNAL') || die('Invalid access'); + +global $CFG; +require_once $CFG->dirroot. '/local/kalturamediagallery/lib.php'; + +if ($hassiteconfig) { + $settings = new admin_settingpage( + 'local_kalturamediagallery', + get_string('pluginname', 'local_kalturamediagallery') + ); + + //heading + $setting = new admin_setting_heading( + 'heading', + '', get_string('setting_heading_desc', 'local_kalturamediagallery') + ); + $setting->plugin = 'local_kalturamediagallery'; + $settings->add($setting); + + //link location + $setting = new admin_setting_configselect( + 'link_location', + get_string('link_location', 'local_kalturamediagallery'), + get_string('link_location_desc', 'local_kalturamediagallery'), + LOCAL_KALTURAMEDIAGALLERY_LINK_LOCATION_NAVIGATION_BLOCK, + array( + LOCAL_KALTURAMEDIAGALLERY_LINK_LOCATION_NAVIGATION_BLOCK => get_string('link_location_navigation', 'local_kalturamediagallery'), + LOCAL_KALTURAMEDIAGALLERY_LINK_LOCATION_COURSE_SETTINGS => get_string('link_location_course_settings', 'local_kalturamediagallery'), + ) + ); + $setting->plugin = 'local_kalturamediagallery'; + $settings->add($setting); + + $ADMIN->add('localplugins', $settings); +} From 561b54bab1c7e074a1555fbfa818c5d3a4a1961e Mon Sep 17 00:00:00 2001 From: Muli Dayan Date: Tue, 13 Jun 2017 15:54:05 +0300 Subject: [PATCH 151/326] KMS-14003 add kaltura icon and combine return condition to one if --- local/kalturamediagallery/lib.php | 16 +++++----------- pix/kaltura_icon.png | Bin 0 -> 568 bytes 2 files changed, 5 insertions(+), 11 deletions(-) create mode 100644 pix/kaltura_icon.png diff --git a/local/kalturamediagallery/lib.php b/local/kalturamediagallery/lib.php index b0e6c79bab58b..1cf04b4553a08 100644 --- a/local/kalturamediagallery/lib.php +++ b/local/kalturamediagallery/lib.php @@ -82,20 +82,14 @@ function local_kalturamediagallery_extend_navigation($navigation) { function local_kalturamediagallery_extend_navigation_course(navigation_node $parent, stdClass $course, context_course $context) { global $USER; - if (get_config('local_kalturamediagallery', 'link_location') != LOCAL_KALTURAMEDIAGALLERY_LINK_LOCATION_COURSE_SETTINGS) - { - return; - } - - if (empty($USER->id)) { - return; - } - - if (!has_capability('local/kalturamediagallery:view', $context, $USER)) { + if (get_config('local_kalturamediagallery', 'link_location') != LOCAL_KALTURAMEDIAGALLERY_LINK_LOCATION_COURSE_SETTINGS + || empty($USER->id) + || !has_capability('local/kalturamediagallery:view', $context, $USER)) { return; } $name = get_string('nav_mediagallery', 'local_kalturamediagallery'); $url = new moodle_url('/local/kalturamediagallery/index.php', array('courseid' => $course->id)); - $kalmedgalnode = $parent->add($name, $url, navigation_node::NODETYPE_LEAF, $name, 'kalcrsgal'); + $icon = new image_icon('kaltura_icon', $name); + $parent->add($name, $url, navigation_node::NODETYPE_LEAF, $name, 'kalturamediagallery-settings', $icon); } diff --git a/pix/kaltura_icon.png b/pix/kaltura_icon.png new file mode 100644 index 0000000000000000000000000000000000000000..8d5961396d8247414890957ccf89d82797381495 GIT binary patch literal 568 zcmV-80>}M{P)@20mVr~ zK~y-)ebPT@Q&AKK@ZWn0Vu~P&lfkswiV97a7DS~EA_!6(q=UTG!HQi3+r_~tbP%1S zEuxMgl|V(L;GeBsgF_Gz1u-}Xf;w1&fxbBSUX7;dfeYszzVqGhocjf~iTC|S_G286 z4}W^s-U<`iKBjROnO=ZRg18NRWoGto?xLFU_@Tyr?v3|xSwn~!0QX6tFzHe6yh1i_I_{X(Q@zX zDcnRBZ7gL`#IX)FgP2Y3`;xO8UvV14Ni&=av4Wwbap+fj#}F(}T;0G)^d-$qznTj; zlwb#Ose7nu?Tl(|<^OWCT)5pV7Z#GdhZC!{VZ6jq$WJVe3&10xz9V1CK!j*h+HIs`PcT%4;%Y{d|sL`chC!S!x$ Date: Wed, 14 Jun 2017 12:25:23 +0300 Subject: [PATCH 152/326] KMS-12344 change atto button title text to 'Embed Kaltura Media' --- .../atto/plugins/kalturamedia/lang/en/atto_kalturamedia.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/editor/atto/plugins/kalturamedia/lang/en/atto_kalturamedia.php b/lib/editor/atto/plugins/kalturamedia/lang/en/atto_kalturamedia.php index 3b90f3c35fb3c..f8cd34c94870b 100644 --- a/lib/editor/atto/plugins/kalturamedia/lang/en/atto_kalturamedia.php +++ b/lib/editor/atto/plugins/kalturamedia/lang/en/atto_kalturamedia.php @@ -26,7 +26,7 @@ require_once($CFG->dirroot.'/local/kaltura/locallib.php'); -$string['pluginname'] = 'Kaltura Media'; +$string['pluginname'] = 'Embed Kaltura Media'; $string['popuptitle'] = 'Select Media'; $string['embedbuttontext'] = 'Embed'; $string['browse_and_embed'] = 'Browse and Embed'; From 86f5dd9f415e80656daeb98d154333ea1f299abc Mon Sep 17 00:00:00 2001 From: Muli Dayan Date: Wed, 14 Jun 2017 12:33:49 +0300 Subject: [PATCH 153/326] KMS-12344 fix atto icon --- .../kalturamedia/yui/src/button/js/button.js | 17 +++++------------ 1 file changed, 5 insertions(+), 12 deletions(-) diff --git a/lib/editor/atto/plugins/kalturamedia/yui/src/button/js/button.js b/lib/editor/atto/plugins/kalturamedia/yui/src/button/js/button.js index 1c88496364bb0..2776f28cf895b 100644 --- a/lib/editor/atto/plugins/kalturamedia/yui/src/button/js/button.js +++ b/lib/editor/atto/plugins/kalturamedia/yui/src/button/js/button.js @@ -1,5 +1,3 @@ -YUI.add('moodle-atto_kalturamedia-button', function (Y, NAME) { - // This file is part of Moodle - http://moodle.org/ // // Moodle is free software: you can redistribute it and/or modify @@ -46,13 +44,13 @@ var COMPONENTNAME = 'atto_kalturamedia', Y.namespace('M.atto_kalturamedia').Button = Y.Base.create('button', Y.M.editor_atto.EditorPlugin, [], { _currentSelection: null, embedWindow: null, - + initializer: function() { this.addButton({ - //icon: 'e/icon', - iconurl: M.cfg.wwwroot + '/lib/editor/atto/plugins/kalturamedia/pix/icon.png', - callback: this._kalturamedia - }); + icon: 'icon', + iconComponent: COMPONENTNAME, + callback: this._kalturamedia + }); }, _kalturamedia: function() { this._currentSelection = this.get('host').getSelection(); @@ -175,8 +173,3 @@ Y.namespace('M.atto_kalturamedia').Button = Y.Base.create('button', Y.M.editor_a } }} ); - - -}, '@VERSION@', {"requires": ["moodle-editor_atto-plugin"]}); - - From 006359e8544a1bc7a7c337920fa7235b119534b2 Mon Sep 17 00:00:00 2001 From: Muli Dayan Date: Wed, 14 Jun 2017 12:34:44 +0300 Subject: [PATCH 154/326] KMS-12344 fix atto icon - compiled sources --- .../moodle-atto_kalturamedia-button-debug.js | 12 +++++------- .../moodle-atto_kalturamedia-button-min.js | 2 +- .../moodle-atto_kalturamedia-button.js | 12 +++++------- 3 files changed, 11 insertions(+), 15 deletions(-) diff --git a/lib/editor/atto/plugins/kalturamedia/yui/build/moodle-atto_kalturamedia-button/moodle-atto_kalturamedia-button-debug.js b/lib/editor/atto/plugins/kalturamedia/yui/build/moodle-atto_kalturamedia-button/moodle-atto_kalturamedia-button-debug.js index 1c88496364bb0..7f7258ea39c03 100644 --- a/lib/editor/atto/plugins/kalturamedia/yui/build/moodle-atto_kalturamedia-button/moodle-atto_kalturamedia-button-debug.js +++ b/lib/editor/atto/plugins/kalturamedia/yui/build/moodle-atto_kalturamedia-button/moodle-atto_kalturamedia-button-debug.js @@ -46,13 +46,13 @@ var COMPONENTNAME = 'atto_kalturamedia', Y.namespace('M.atto_kalturamedia').Button = Y.Base.create('button', Y.M.editor_atto.EditorPlugin, [], { _currentSelection: null, embedWindow: null, - + initializer: function() { this.addButton({ - //icon: 'e/icon', - iconurl: M.cfg.wwwroot + '/lib/editor/atto/plugins/kalturamedia/pix/icon.png', - callback: this._kalturamedia - }); + icon: 'icon', + iconComponent: COMPONENTNAME, + callback: this._kalturamedia + }); }, _kalturamedia: function() { this._currentSelection = this.get('host').getSelection(); @@ -178,5 +178,3 @@ Y.namespace('M.atto_kalturamedia').Button = Y.Base.create('button', Y.M.editor_a }, '@VERSION@', {"requires": ["moodle-editor_atto-plugin"]}); - - diff --git a/lib/editor/atto/plugins/kalturamedia/yui/build/moodle-atto_kalturamedia-button/moodle-atto_kalturamedia-button-min.js b/lib/editor/atto/plugins/kalturamedia/yui/build/moodle-atto_kalturamedia-button/moodle-atto_kalturamedia-button-min.js index 3c897523c0a23..792f3b3ea19be 100644 --- a/lib/editor/atto/plugins/kalturamedia/yui/build/moodle-atto_kalturamedia-button/moodle-atto_kalturamedia-button-min.js +++ b/lib/editor/atto/plugins/kalturamedia/yui/build/moodle-atto_kalturamedia-button/moodle-atto_kalturamedia-button-min.js @@ -1 +1 @@ -YUI.add("moodle-atto_kalturamedia-button",function(e,t){var n="atto_kalturamedia",o={URLINPUT:"atto_kalturamedia_urlentry",NAMEINPUT:"atto_kalturamedia_nameentry"};({URLINPUT:"."+o.URLINPUT,NAMEINPUT:"."+o.NAMEINPUT});e.namespace("M.atto_kalturamedia").Button=e.Base.create("button",e.M.editor_atto.EditorPlugin,[],{_currentSelection:null,embedWindow:null,initializer:function(){this.addButton({iconurl:M.cfg.wwwroot+"/lib/editor/atto/plugins/kalturamedia/pix/icon.png",callback:this._kalturamedia})},_kalturamedia:function(){if(this._currentSelection=this.get("host").getSelection(),this._currentSelection!==!1){var e=1200,t=700,i=void 0!=window.screenLeft?window.screenLeft:screen.left,o=void 0!=window.screenTop?window.screenTop:screen.top,r=window.innerWidth?window.innerWidth:document.documentElement.clientWidth?document.documentElement.clientWidth:screen.width,a=window.innerHeight?window.innerHeight:document.documentElement.clientHeight?document.documentElement.clientHeight:screen.height,d=r/2-e/2+i,l=a/2-t/2+o,u=window.open(this._getIframeURL(),M.util.get_string("browse_and_embed",n),"scrollbars=no, width="+e+", height="+t+", top="+l+", left="+d);window.buttonJs=this,window.focus&&u.focus(),this.embedWindow=u}},_getIframeURL:function(){var t=e.mix({elementid:this.get("host").get("elementid"),contextid:this.get("contextid"),height:"600px",width:"1112px"},this.get("area"));return M.cfg.wwwroot+"/lib/editor/atto/plugins/kalturamedia/ltibrowse_container.php?"+e.QueryString.stringify(t)},_getCourseId:function(){var e,t=document.getElementsByTagName("body")[0].className,n=t.split(" ");for(i in n)if(n[i].indexOf("course-")>-1){var o=n[i].split("-");e=o[1]}return e},_replaceKafUriWithToken:function(e,t,i){return e=this._removeProtocolFromUrl(e),t=this._removeProtocolFromUrl(t),e.replace(t,i)},_removeProtocolFromUrl:function(e){return e.replace(/^https?:\/\//,"")},embedItem:function(e,t){embedInfo={};for(param in t){var i=param.split("-");"embedinfo"==i[0]&&(embedInfo[i[1]]=t[param])}var n=this.get("kalturauritoken"),o=this.get("kafuri"),r=embedInfo.url,a=this._replaceKafUriWithToken(r,o,n),d=document.createElement("a");d.href=r,a+=d.search;var l='tinymce-kalturamedia-embed||'+embedInfo.title+"||"+embedInfo.width+"||"+embedInfo.height+"";host=this.get("host"),host.setSelection(this._currentSelection),host.insertContentAtFocusPoint(l),this.markUpdated(),this.embedWindow.close()}},{ATTRS:{contextid:{value:null},kalturauritoken:{value:null},kafuri:{value:null}}})},"@VERSION@",{requires:["moodle-editor_atto-plugin"]}); \ No newline at end of file +YUI.add("moodle-atto_kalturamedia-button",function(e,t){var n="atto_kalturamedia",r={URLINPUT:"atto_kalturamedia_urlentry",NAMEINPUT:"atto_kalturamedia_nameentry"},s={URLINPUT:"."+r.URLINPUT,NAMEINPUT:"."+r.NAMEINPUT};e.namespace("M.atto_kalturamedia").Button=e.Base.create("button",e.M.editor_atto.EditorPlugin,[],{_currentSelection:null,embedWindow:null,initializer:function(){this.addButton({icon:"icon",iconComponent:n,callback:this._kalturamedia})},_kalturamedia:function(){this._currentSelection=this.get("host").getSelection();if(this._currentSelection===!1)return;var e=1200,t=700,r=window.screenLeft!=undefined?window.screenLeft:screen.left,i=window.screenTop!=undefined?window.screenTop:screen.top,s=window.innerWidth?window.innerWidth:document.documentElement.clientWidth?document.documentElement.clientWidth:screen.width,o=window.innerHeight?window.innerHeight:document.documentElement.clientHeight?document.documentElement.clientHeight:screen.height,u=s/2-e/2+r,a=o/2-t/2+i,f=window.open(this._getIframeURL(),M.util.get_string("browse_and_embed",n),"scrollbars=no, width="+e+", height="+t+", top="+a+", left="+u);window.buttonJs=this,window.focus&&f.focus(),this.embedWindow=f},_getIframeURL:function(){var t=e.mix({elementid:this.get("host").get("elementid"),contextid:this.get("contextid"),height:"600px",width:"1112px"},this.get("area"));return M.cfg.wwwroot+"/lib/editor/atto/plugins/kalturamedia/ltibrowse_container.php?"+e.QueryString.stringify(t)},_getCourseId:function(){var e,t=document.getElementsByTagName("body")[0].className,n=t.split(" ");for(i in n)if(n[i].indexOf("course-")>-1){var r=n[i].split("-");e=r[1]}return e},_replaceKafUriWithToken:function(e,t,n){return e=this._removeProtocolFromUrl(e),t=this._removeProtocolFromUrl(t),e.replace(t,n)},_removeProtocolFromUrl:function(e){return e.replace(/^https?:\/\//,"")},embedItem:function(e,t){embedInfo={};for(param in t){var n=param.split("-");n[0]=="embedinfo"&&(embedInfo[n[1]]=t[param])}var r=this.get("kalturauritoken"),i=this.get("kafuri"),s=embedInfo.url,o=this._replaceKafUriWithToken(s,i,r),u=document.createElement("a");u.href=s,o+=u.search;var a='tinymce-kalturamedia-embed||'+embedInfo.title+"||"+embedInfo.width+"||"+embedInfo.height+"";host=this.get("host"),host.setSelection(this._currentSelection),host.insertContentAtFocusPoint(a),this.markUpdated(),this.embedWindow.close()}},{ATTRS:{contextid:{value:null},kalturauritoken:{value:null},kafuri:{value:null}}})},"@VERSION@",{requires:["moodle-editor_atto-plugin"]}); diff --git a/lib/editor/atto/plugins/kalturamedia/yui/build/moodle-atto_kalturamedia-button/moodle-atto_kalturamedia-button.js b/lib/editor/atto/plugins/kalturamedia/yui/build/moodle-atto_kalturamedia-button/moodle-atto_kalturamedia-button.js index 1c88496364bb0..7f7258ea39c03 100644 --- a/lib/editor/atto/plugins/kalturamedia/yui/build/moodle-atto_kalturamedia-button/moodle-atto_kalturamedia-button.js +++ b/lib/editor/atto/plugins/kalturamedia/yui/build/moodle-atto_kalturamedia-button/moodle-atto_kalturamedia-button.js @@ -46,13 +46,13 @@ var COMPONENTNAME = 'atto_kalturamedia', Y.namespace('M.atto_kalturamedia').Button = Y.Base.create('button', Y.M.editor_atto.EditorPlugin, [], { _currentSelection: null, embedWindow: null, - + initializer: function() { this.addButton({ - //icon: 'e/icon', - iconurl: M.cfg.wwwroot + '/lib/editor/atto/plugins/kalturamedia/pix/icon.png', - callback: this._kalturamedia - }); + icon: 'icon', + iconComponent: COMPONENTNAME, + callback: this._kalturamedia + }); }, _kalturamedia: function() { this._currentSelection = this.get('host').getSelection(); @@ -178,5 +178,3 @@ Y.namespace('M.atto_kalturamedia').Button = Y.Base.create('button', Y.M.editor_a }, '@VERSION@', {"requires": ["moodle-editor_atto-plugin"]}); - - From 6a0829445303ce4e5cd554dc80a4fdb2337c4658 Mon Sep 17 00:00:00 2001 From: Muli Dayan Date: Wed, 14 Jun 2017 12:44:18 +0300 Subject: [PATCH 155/326] version bump - 4.0.12, 2017061432 --- blocks/kalturamediagallery/version.php | 8 ++++---- filter/kaltura/version.php | 6 +++--- lib/editor/atto/plugins/kalturamedia/version.php | 6 +++--- lib/editor/tinymce/plugins/kalturamedia/version.php | 6 +++--- local/kaltura/version.php | 4 ++-- local/kalturamediagallery/version.php | 6 +++--- local/mymedia/version.php | 6 +++--- mod/kalvidassign/version.php | 6 +++--- mod/kalvidpres/version.php | 6 +++--- mod/kalvidres/version.php | 6 +++--- 10 files changed, 30 insertions(+), 30 deletions(-) diff --git a/blocks/kalturamediagallery/version.php b/blocks/kalturamediagallery/version.php index c5acfc8e38fd8..6efafd72371b4 100644 --- a/blocks/kalturamediagallery/version.php +++ b/blocks/kalturamediagallery/version.php @@ -14,11 +14,11 @@ defined('MOODLE_INTERNAL') || die(); -$plugin->version = 2017061232; -$plugin->release = 'Kaltura release 4.0.11'; +$plugin->version = 2017061432; +$plugin->release = 'Kaltura release 4.0.12'; $plugin->requires = 2014050800; $plugin->component = 'block_kalturamediagallery'; $plugin->dependencies = array( - 'local_kaltura' => 2017061232, - 'local_kalturamediagallery' => 2017061232 + 'local_kaltura' => 2017061432, + 'local_kalturamediagallery' => 2017061432 ); diff --git a/filter/kaltura/version.php b/filter/kaltura/version.php index 231380850d53a..3d7c4409df6d3 100644 --- a/filter/kaltura/version.php +++ b/filter/kaltura/version.php @@ -24,11 +24,11 @@ */ defined('MOODLE_INTERNAL') || die(); -$plugin->version = 2017061232; //version date YYYYMMDDXX 10 represent 3.0 for future option to moodle use 2 digit version +$plugin->version = 2017061432; //version date YYYYMMDDXX 10 represent 3.0 for future option to moodle use 2 digit version $plugin->component = 'filter_kaltura'; -$plugin->release = 'Kaltura release 4.0.11'; +$plugin->release = 'Kaltura release 4.0.12'; $plugin->requires = 2014050800; $plugin->maturity = MATURITY_STABLE; $plugin->dependencies = array( - 'local_kaltura' => 2017061232 + 'local_kaltura' => 2017061432 ); diff --git a/lib/editor/atto/plugins/kalturamedia/version.php b/lib/editor/atto/plugins/kalturamedia/version.php index d976989064892..227a793465400 100644 --- a/lib/editor/atto/plugins/kalturamedia/version.php +++ b/lib/editor/atto/plugins/kalturamedia/version.php @@ -24,10 +24,10 @@ defined('MOODLE_INTERNAL') || die(); -$plugin->version = 2017061232; // The current plugin version (Date: YYYYMMDDXX). -$plugin->release = 'Kaltura release 4.0.11'; +$plugin->version = 2017061432; // The current plugin version (Date: YYYYMMDDXX). +$plugin->release = 'Kaltura release 4.0.12'; $plugin->requires = 2014050800; // Requires this Moodle version. $plugin->component = 'atto_kalturamedia'; // Full name of the plugin (used for diagnostics). $plugin->dependencies = array( - 'local_kaltura' => 2017061232 + 'local_kaltura' => 2017061432 ); diff --git a/lib/editor/tinymce/plugins/kalturamedia/version.php b/lib/editor/tinymce/plugins/kalturamedia/version.php index e1b8b12f911ab..8553a0e0b835d 100644 --- a/lib/editor/tinymce/plugins/kalturamedia/version.php +++ b/lib/editor/tinymce/plugins/kalturamedia/version.php @@ -23,12 +23,12 @@ defined('MOODLE_INTERNAL') || die(); -$plugin->version = 2017061232; -$plugin->release = 'Kaltura release 4.0.11'; +$plugin->version = 2017061432; +$plugin->release = 'Kaltura release 4.0.12'; // Required Moodle version. $plugin->requires = 2014050800; // Full name of the plugin (used for diagnostics). $plugin->component = 'tinymce_kalturamedia'; $plugin->dependencies = array( - 'local_kaltura' => 2017061232 + 'local_kaltura' => 2017061432 ); diff --git a/local/kaltura/version.php b/local/kaltura/version.php index d8d22fb2f289a..d42976ae449e9 100644 --- a/local/kaltura/version.php +++ b/local/kaltura/version.php @@ -25,8 +25,8 @@ die('Direct access to this script is forbidden.'); } -$plugin->version = 2017061232; +$plugin->version = 2017061432; $plugin->component = 'local_kaltura'; -$plugin->release = 'Kaltura release 4.0.11'; +$plugin->release = 'Kaltura release 4.0.12'; $plugin->requires = 2014050800; $plugin->maturity = MATURITY_STABLE; diff --git a/local/kalturamediagallery/version.php b/local/kalturamediagallery/version.php index 43c56c66b7c04..6c92954b895ef 100644 --- a/local/kalturamediagallery/version.php +++ b/local/kalturamediagallery/version.php @@ -26,11 +26,11 @@ die('Direct access to this script is forbidden.'); } -$plugin->version = 2017061232; +$plugin->version = 2017061432; $plugin->component = 'local_kalturamediagallery'; -$plugin->release = 'Kaltura release 4.0.11'; +$plugin->release = 'Kaltura release 4.0.12'; $plugin->requires = 2014050800; $plugin->maturity = MATURITY_STABLE; $plugin->dependencies = array( - 'local_kaltura' => 2017061232 + 'local_kaltura' => 2017061432 ); diff --git a/local/mymedia/version.php b/local/mymedia/version.php index be8dccfe2cd7b..26f9c08c6c276 100644 --- a/local/mymedia/version.php +++ b/local/mymedia/version.php @@ -25,11 +25,11 @@ die('Direct access to this script is forbidden.'); } -$plugin->version = 2017061232; +$plugin->version = 2017061432; $plugin->component = 'local_mymedia'; -$plugin->release = 'Kaltura release 4.0.11'; +$plugin->release = 'Kaltura release 4.0.12'; $plugin->requires = 2014050800; $plugin->maturity = MATURITY_STABLE; $plugin->dependencies = array( - 'local_kaltura' => 2017061232 + 'local_kaltura' => 2017061432 ); diff --git a/mod/kalvidassign/version.php b/mod/kalvidassign/version.php index 9d72ffc16bb3b..d45ff238462bc 100644 --- a/mod/kalvidassign/version.php +++ b/mod/kalvidassign/version.php @@ -25,12 +25,12 @@ die('Direct access to this script is forbidden.'); } -$plugin->version = 2017061232; +$plugin->version = 2017061432; $plugin->component = 'mod_kalvidassign'; -$plugin->release = 'Kaltura release 4.0.11'; +$plugin->release = 'Kaltura release 4.0.12'; $plugin->requires = 2014050800; $plugin->cron = 0; $plugin->maturity = MATURITY_STABLE; $plugin->dependencies = array( - 'local_kaltura' => 2017061232, + 'local_kaltura' => 2017061432, ); diff --git a/mod/kalvidpres/version.php b/mod/kalvidpres/version.php index f1754ff97249a..3bff853a87d0f 100644 --- a/mod/kalvidpres/version.php +++ b/mod/kalvidpres/version.php @@ -25,12 +25,12 @@ die('Direct access to this script is forbidden.'); } -$plugin->version = 2017061232; +$plugin->version = 2017061432; $plugin->component = 'mod_kalvidpres'; -$plugin->release = 'Kaltura release 4.0.11'; +$plugin->release = 'Kaltura release 4.0.12'; $plugin->requires = 2014050800; $plugin->cron = 0; $plugin->maturity = MATURITY_STABLE; $plugin->dependencies = array( - 'local_kaltura' => 2017061232 + 'local_kaltura' => 2017061432 ); diff --git a/mod/kalvidres/version.php b/mod/kalvidres/version.php index 44b4ddbc53e2a..19dea6edd32ee 100644 --- a/mod/kalvidres/version.php +++ b/mod/kalvidres/version.php @@ -25,12 +25,12 @@ die('Direct access to this script is forbidden.'); } -$plugin->version = 2017061232; +$plugin->version = 2017061432; $plugin->component = 'mod_kalvidres'; -$plugin->release = 'Kaltura release 4.0.11'; +$plugin->release = 'Kaltura release 4.0.12'; $plugin->requires = 2014050800; $plugin->cron = 0; $plugin->maturity = MATURITY_STABLE; $plugin->dependencies = array( - 'local_kaltura' => 2017061232 + 'local_kaltura' => 2017061432 ); From 2e03b8c78ad48ae38dff4b60795e21cff9e69fa5 Mon Sep 17 00:00:00 2001 From: Muli Dayan Date: Wed, 14 Jun 2017 15:21:17 +0300 Subject: [PATCH 156/326] KMS-14060 add 'my media' to users navigation drawer --- local/mymedia/lib.php | 1 + 1 file changed, 1 insertion(+) diff --git a/local/mymedia/lib.php b/local/mymedia/lib.php index 516a684d61291..ad8473d1a2186 100644 --- a/local/mymedia/lib.php +++ b/local/mymedia/lib.php @@ -53,4 +53,5 @@ function local_mymedia_extend_navigation($navigation) { $mymedia = get_string('nav_mymedia', 'local_mymedia'); $nodemymedia = $nodehome->add($mymedia, new moodle_url('/local/mymedia/mymedia.php'), navigation_node::NODETYPE_LEAF, $mymedia, 'mymedia'); + $nodemymedia->showinflatnavigation = true; } \ No newline at end of file From eaf4107921d364ee7be10639c6e0c019c592ad37 Mon Sep 17 00:00:00 2001 From: Muli Dayan Date: Wed, 14 Jun 2017 15:23:34 +0300 Subject: [PATCH 157/326] version bump - 4.1, 2017061432 --- blocks/kalturamediagallery/version.php | 2 +- filter/kaltura/version.php | 2 +- lib/editor/atto/plugins/kalturamedia/version.php | 2 +- lib/editor/tinymce/plugins/kalturamedia/version.php | 2 +- local/kaltura/version.php | 2 +- local/kalturamediagallery/version.php | 2 +- local/mymedia/version.php | 2 +- mod/kalvidassign/version.php | 2 +- mod/kalvidpres/version.php | 2 +- mod/kalvidres/version.php | 2 +- 10 files changed, 10 insertions(+), 10 deletions(-) diff --git a/blocks/kalturamediagallery/version.php b/blocks/kalturamediagallery/version.php index 6efafd72371b4..64992f3c2fc5d 100644 --- a/blocks/kalturamediagallery/version.php +++ b/blocks/kalturamediagallery/version.php @@ -15,7 +15,7 @@ defined('MOODLE_INTERNAL') || die(); $plugin->version = 2017061432; -$plugin->release = 'Kaltura release 4.0.12'; +$plugin->release = 'Kaltura release 4.1'; $plugin->requires = 2014050800; $plugin->component = 'block_kalturamediagallery'; $plugin->dependencies = array( diff --git a/filter/kaltura/version.php b/filter/kaltura/version.php index 3d7c4409df6d3..6a76e6a28a5a0 100644 --- a/filter/kaltura/version.php +++ b/filter/kaltura/version.php @@ -26,7 +26,7 @@ $plugin->version = 2017061432; //version date YYYYMMDDXX 10 represent 3.0 for future option to moodle use 2 digit version $plugin->component = 'filter_kaltura'; -$plugin->release = 'Kaltura release 4.0.12'; +$plugin->release = 'Kaltura release 4.1'; $plugin->requires = 2014050800; $plugin->maturity = MATURITY_STABLE; $plugin->dependencies = array( diff --git a/lib/editor/atto/plugins/kalturamedia/version.php b/lib/editor/atto/plugins/kalturamedia/version.php index 227a793465400..902953e2f8435 100644 --- a/lib/editor/atto/plugins/kalturamedia/version.php +++ b/lib/editor/atto/plugins/kalturamedia/version.php @@ -25,7 +25,7 @@ defined('MOODLE_INTERNAL') || die(); $plugin->version = 2017061432; // The current plugin version (Date: YYYYMMDDXX). -$plugin->release = 'Kaltura release 4.0.12'; +$plugin->release = 'Kaltura release 4.1'; $plugin->requires = 2014050800; // Requires this Moodle version. $plugin->component = 'atto_kalturamedia'; // Full name of the plugin (used for diagnostics). $plugin->dependencies = array( diff --git a/lib/editor/tinymce/plugins/kalturamedia/version.php b/lib/editor/tinymce/plugins/kalturamedia/version.php index 8553a0e0b835d..8158d5955b23d 100644 --- a/lib/editor/tinymce/plugins/kalturamedia/version.php +++ b/lib/editor/tinymce/plugins/kalturamedia/version.php @@ -24,7 +24,7 @@ defined('MOODLE_INTERNAL') || die(); $plugin->version = 2017061432; -$plugin->release = 'Kaltura release 4.0.12'; +$plugin->release = 'Kaltura release 4.1'; // Required Moodle version. $plugin->requires = 2014050800; // Full name of the plugin (used for diagnostics). diff --git a/local/kaltura/version.php b/local/kaltura/version.php index d42976ae449e9..fe7f7c6e48b7d 100644 --- a/local/kaltura/version.php +++ b/local/kaltura/version.php @@ -27,6 +27,6 @@ $plugin->version = 2017061432; $plugin->component = 'local_kaltura'; -$plugin->release = 'Kaltura release 4.0.12'; +$plugin->release = 'Kaltura release 4.1'; $plugin->requires = 2014050800; $plugin->maturity = MATURITY_STABLE; diff --git a/local/kalturamediagallery/version.php b/local/kalturamediagallery/version.php index 6c92954b895ef..4e6620e6222eb 100644 --- a/local/kalturamediagallery/version.php +++ b/local/kalturamediagallery/version.php @@ -28,7 +28,7 @@ $plugin->version = 2017061432; $plugin->component = 'local_kalturamediagallery'; -$plugin->release = 'Kaltura release 4.0.12'; +$plugin->release = 'Kaltura release 4.1'; $plugin->requires = 2014050800; $plugin->maturity = MATURITY_STABLE; $plugin->dependencies = array( diff --git a/local/mymedia/version.php b/local/mymedia/version.php index 26f9c08c6c276..8076bf653a208 100644 --- a/local/mymedia/version.php +++ b/local/mymedia/version.php @@ -27,7 +27,7 @@ $plugin->version = 2017061432; $plugin->component = 'local_mymedia'; -$plugin->release = 'Kaltura release 4.0.12'; +$plugin->release = 'Kaltura release 4.1'; $plugin->requires = 2014050800; $plugin->maturity = MATURITY_STABLE; $plugin->dependencies = array( diff --git a/mod/kalvidassign/version.php b/mod/kalvidassign/version.php index d45ff238462bc..309ad7d8bee10 100644 --- a/mod/kalvidassign/version.php +++ b/mod/kalvidassign/version.php @@ -27,7 +27,7 @@ $plugin->version = 2017061432; $plugin->component = 'mod_kalvidassign'; -$plugin->release = 'Kaltura release 4.0.12'; +$plugin->release = 'Kaltura release 4.1'; $plugin->requires = 2014050800; $plugin->cron = 0; $plugin->maturity = MATURITY_STABLE; diff --git a/mod/kalvidpres/version.php b/mod/kalvidpres/version.php index 3bff853a87d0f..1087ddcd5c536 100644 --- a/mod/kalvidpres/version.php +++ b/mod/kalvidpres/version.php @@ -27,7 +27,7 @@ $plugin->version = 2017061432; $plugin->component = 'mod_kalvidpres'; -$plugin->release = 'Kaltura release 4.0.12'; +$plugin->release = 'Kaltura release 4.1'; $plugin->requires = 2014050800; $plugin->cron = 0; $plugin->maturity = MATURITY_STABLE; diff --git a/mod/kalvidres/version.php b/mod/kalvidres/version.php index 19dea6edd32ee..affd5e8cb1706 100644 --- a/mod/kalvidres/version.php +++ b/mod/kalvidres/version.php @@ -27,7 +27,7 @@ $plugin->version = 2017061432; $plugin->component = 'mod_kalvidres'; -$plugin->release = 'Kaltura release 4.0.12'; +$plugin->release = 'Kaltura release 4.1'; $plugin->requires = 2014050800; $plugin->cron = 0; $plugin->maturity = MATURITY_STABLE; From f09ddbeec13606b13afc7ac350e8efc27118b77a Mon Sep 17 00:00:00 2001 From: Muli Dayan Date: Wed, 21 Jun 2017 09:32:34 +0300 Subject: [PATCH 158/326] KMS-14003 use pix_icon for backward compatibility --- local/kalturamediagallery/lib.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/local/kalturamediagallery/lib.php b/local/kalturamediagallery/lib.php index 8a86afbe3d348..d0c620cab43df 100644 --- a/local/kalturamediagallery/lib.php +++ b/local/kalturamediagallery/lib.php @@ -101,7 +101,7 @@ function local_kalturamediagallery_extend_navigation_course(navigation_node $par $name = get_string('nav_mediagallery', 'local_kalturamediagallery'); $url = new moodle_url('/local/kalturamediagallery/index.php', array('courseid' => $course->id)); - $icon = new image_icon('kaltura_icon', $name); + $icon = new pix_icon('kaltura_icon', $name); $parent->add($name, $url, navigation_node::NODETYPE_LEAF, $name, 'kalturamediagallery-settings', $icon); } From bd82cdc19eec2bd90afdb829f61c83780f7d354b Mon Sep 17 00:00:00 2001 From: Muli Dayan Date: Wed, 21 Jun 2017 09:51:17 +0300 Subject: [PATCH 159/326] increment version - moodle 3.2 --- blocks/kalturamediagallery/version.php | 6 +++--- filter/kaltura/version.php | 4 ++-- lib/editor/atto/plugins/kalturamedia/version.php | 4 ++-- lib/editor/tinymce/plugins/kalturamedia/version.php | 4 ++-- local/kaltura/version.php | 2 +- local/kalturamediagallery/version.php | 4 ++-- local/mymedia/version.php | 4 ++-- mod/kalvidassign/version.php | 4 ++-- mod/kalvidpres/version.php | 4 ++-- mod/kalvidres/version.php | 4 ++-- 10 files changed, 20 insertions(+), 20 deletions(-) diff --git a/blocks/kalturamediagallery/version.php b/blocks/kalturamediagallery/version.php index 64992f3c2fc5d..f679ace485ebd 100644 --- a/blocks/kalturamediagallery/version.php +++ b/blocks/kalturamediagallery/version.php @@ -14,11 +14,11 @@ defined('MOODLE_INTERNAL') || die(); -$plugin->version = 2017061432; +$plugin->version = 2017062132; $plugin->release = 'Kaltura release 4.1'; $plugin->requires = 2014050800; $plugin->component = 'block_kalturamediagallery'; $plugin->dependencies = array( - 'local_kaltura' => 2017061432, - 'local_kalturamediagallery' => 2017061432 + 'local_kaltura' => 2017062132, + 'local_kalturamediagallery' => 2017062132 ); diff --git a/filter/kaltura/version.php b/filter/kaltura/version.php index 6a76e6a28a5a0..e6456bf5f6757 100644 --- a/filter/kaltura/version.php +++ b/filter/kaltura/version.php @@ -24,11 +24,11 @@ */ defined('MOODLE_INTERNAL') || die(); -$plugin->version = 2017061432; //version date YYYYMMDDXX 10 represent 3.0 for future option to moodle use 2 digit version +$plugin->version = 2017062132; //version date YYYYMMDDXX 10 represent 3.0 for future option to moodle use 2 digit version $plugin->component = 'filter_kaltura'; $plugin->release = 'Kaltura release 4.1'; $plugin->requires = 2014050800; $plugin->maturity = MATURITY_STABLE; $plugin->dependencies = array( - 'local_kaltura' => 2017061432 + 'local_kaltura' => 2017062132 ); diff --git a/lib/editor/atto/plugins/kalturamedia/version.php b/lib/editor/atto/plugins/kalturamedia/version.php index 902953e2f8435..8340c4e0639b6 100644 --- a/lib/editor/atto/plugins/kalturamedia/version.php +++ b/lib/editor/atto/plugins/kalturamedia/version.php @@ -24,10 +24,10 @@ defined('MOODLE_INTERNAL') || die(); -$plugin->version = 2017061432; // The current plugin version (Date: YYYYMMDDXX). +$plugin->version = 2017062132; // The current plugin version (Date: YYYYMMDDXX). $plugin->release = 'Kaltura release 4.1'; $plugin->requires = 2014050800; // Requires this Moodle version. $plugin->component = 'atto_kalturamedia'; // Full name of the plugin (used for diagnostics). $plugin->dependencies = array( - 'local_kaltura' => 2017061432 + 'local_kaltura' => 2017062132 ); diff --git a/lib/editor/tinymce/plugins/kalturamedia/version.php b/lib/editor/tinymce/plugins/kalturamedia/version.php index 8158d5955b23d..4c82b05886ea6 100644 --- a/lib/editor/tinymce/plugins/kalturamedia/version.php +++ b/lib/editor/tinymce/plugins/kalturamedia/version.php @@ -23,12 +23,12 @@ defined('MOODLE_INTERNAL') || die(); -$plugin->version = 2017061432; +$plugin->version = 2017062132; $plugin->release = 'Kaltura release 4.1'; // Required Moodle version. $plugin->requires = 2014050800; // Full name of the plugin (used for diagnostics). $plugin->component = 'tinymce_kalturamedia'; $plugin->dependencies = array( - 'local_kaltura' => 2017061432 + 'local_kaltura' => 2017062132 ); diff --git a/local/kaltura/version.php b/local/kaltura/version.php index fe7f7c6e48b7d..45d761aa092e4 100644 --- a/local/kaltura/version.php +++ b/local/kaltura/version.php @@ -25,7 +25,7 @@ die('Direct access to this script is forbidden.'); } -$plugin->version = 2017061432; +$plugin->version = 2017062132; $plugin->component = 'local_kaltura'; $plugin->release = 'Kaltura release 4.1'; $plugin->requires = 2014050800; diff --git a/local/kalturamediagallery/version.php b/local/kalturamediagallery/version.php index 4e6620e6222eb..3b82fc342733d 100644 --- a/local/kalturamediagallery/version.php +++ b/local/kalturamediagallery/version.php @@ -26,11 +26,11 @@ die('Direct access to this script is forbidden.'); } -$plugin->version = 2017061432; +$plugin->version = 2017062132; $plugin->component = 'local_kalturamediagallery'; $plugin->release = 'Kaltura release 4.1'; $plugin->requires = 2014050800; $plugin->maturity = MATURITY_STABLE; $plugin->dependencies = array( - 'local_kaltura' => 2017061432 + 'local_kaltura' => 2017062132 ); diff --git a/local/mymedia/version.php b/local/mymedia/version.php index 8076bf653a208..648538b2382cc 100644 --- a/local/mymedia/version.php +++ b/local/mymedia/version.php @@ -25,11 +25,11 @@ die('Direct access to this script is forbidden.'); } -$plugin->version = 2017061432; +$plugin->version = 2017062132; $plugin->component = 'local_mymedia'; $plugin->release = 'Kaltura release 4.1'; $plugin->requires = 2014050800; $plugin->maturity = MATURITY_STABLE; $plugin->dependencies = array( - 'local_kaltura' => 2017061432 + 'local_kaltura' => 2017062132 ); diff --git a/mod/kalvidassign/version.php b/mod/kalvidassign/version.php index 309ad7d8bee10..f10565ec35bcf 100644 --- a/mod/kalvidassign/version.php +++ b/mod/kalvidassign/version.php @@ -25,12 +25,12 @@ die('Direct access to this script is forbidden.'); } -$plugin->version = 2017061432; +$plugin->version = 2017062132; $plugin->component = 'mod_kalvidassign'; $plugin->release = 'Kaltura release 4.1'; $plugin->requires = 2014050800; $plugin->cron = 0; $plugin->maturity = MATURITY_STABLE; $plugin->dependencies = array( - 'local_kaltura' => 2017061432, + 'local_kaltura' => 2017062132, ); diff --git a/mod/kalvidpres/version.php b/mod/kalvidpres/version.php index 1087ddcd5c536..3ba7ec61e5033 100644 --- a/mod/kalvidpres/version.php +++ b/mod/kalvidpres/version.php @@ -25,12 +25,12 @@ die('Direct access to this script is forbidden.'); } -$plugin->version = 2017061432; +$plugin->version = 2017062132; $plugin->component = 'mod_kalvidpres'; $plugin->release = 'Kaltura release 4.1'; $plugin->requires = 2014050800; $plugin->cron = 0; $plugin->maturity = MATURITY_STABLE; $plugin->dependencies = array( - 'local_kaltura' => 2017061432 + 'local_kaltura' => 2017062132 ); diff --git a/mod/kalvidres/version.php b/mod/kalvidres/version.php index affd5e8cb1706..8a438d0f00db7 100644 --- a/mod/kalvidres/version.php +++ b/mod/kalvidres/version.php @@ -25,12 +25,12 @@ die('Direct access to this script is forbidden.'); } -$plugin->version = 2017061432; +$plugin->version = 2017062132; $plugin->component = 'mod_kalvidres'; $plugin->release = 'Kaltura release 4.1'; $plugin->requires = 2014050800; $plugin->cron = 0; $plugin->maturity = MATURITY_STABLE; $plugin->dependencies = array( - 'local_kaltura' => 2017061432 + 'local_kaltura' => 2017062132 ); From 5058f5bb2cd5034e697a119d75fccff54b5238e2 Mon Sep 17 00:00:00 2001 From: Muli Dayan Date: Wed, 21 Jun 2017 10:31:15 +0300 Subject: [PATCH 160/326] KMS-14392 add scroller in media assignment lti window --- .../moodle-local_kaltura-ltipanel-debug.js | 2 +- .../moodle-local_kaltura-ltipanel-min.js | 2 +- .../moodle-local_kaltura-ltipanel.js | 2 +- local/kaltura/yui/src/ltipanel/js/ltipanel.js | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/local/kaltura/yui/build/moodle-local_kaltura-ltipanel/moodle-local_kaltura-ltipanel-debug.js b/local/kaltura/yui/build/moodle-local_kaltura-ltipanel/moodle-local_kaltura-ltipanel-debug.js index 5a7c876a0de62..4451fa1e59c0e 100644 --- a/local/kaltura/yui/build/moodle-local_kaltura-ltipanel/moodle-local_kaltura-ltipanel-debug.js +++ b/local/kaltura/yui/build/moodle-local_kaltura-ltipanel/moodle-local_kaltura-ltipanel-debug.js @@ -206,7 +206,7 @@ Y.extend(LTIPANELMEDIAASSIGNMENT, Y.Base, { var left = ((width / 2) - (w / 2)) + dualScreenLeft; var top = ((height / 2) - (h / 2)) + dualScreenTop; - var bsePopup = window.open(url, M.util.get_string("browse_and_embed", "local_kaltura"), 'scrollbars=no, width=' + w + ', height=' + h + ', top=' + top + ', left=' + left); + var bsePopup = window.open(url, M.util.get_string("browse_and_embed", "local_kaltura"), 'scrollbars=yes, width=' + w + ', height=' + h + ', top=' + top + ', left=' + left); if (window.focus) { bsePopup.focus(); diff --git a/local/kaltura/yui/build/moodle-local_kaltura-ltipanel/moodle-local_kaltura-ltipanel-min.js b/local/kaltura/yui/build/moodle-local_kaltura-ltipanel/moodle-local_kaltura-ltipanel-min.js index 7f62e64cedc5a..cb1d91570385c 100644 --- a/local/kaltura/yui/build/moodle-local_kaltura-ltipanel/moodle-local_kaltura-ltipanel-min.js +++ b/local/kaltura/yui/build/moodle-local_kaltura-ltipanel/moodle-local_kaltura-ltipanel-min.js @@ -1 +1 @@ -YUI.add("moodle-local_kaltura-ltipanel",function(e,t){var n=function(){n.superclass.constructor.apply(this,arguments)};e.extend(n,e.Base,{modulename:null,addvidbtnid:null,init:function(t){if("0"===t.addvidbtnid||"0"===t.ltilaunchurl||0===t.courseid||0===t.height||0===t.width)return void alert("Some parameters were not initialized.");this.modulename=t.modulename,this.addvidbtnid=t.addvidbtnid;var n=e.one("#"+t.addvidbtnid);n.on("click",this.open_bse_popup_callback,this,t.ltilaunchurl,t.height,t.width)},open_bse_popup_callback:function(e,t,n,i){var d=1200,o=700,a=void 0!=window.screenLeft?window.screenLeft:screen.left,l=void 0!=window.screenTop?window.screenTop:screen.top,i=window.innerWidth?window.innerWidth:document.documentElement.clientWidth?document.documentElement.clientWidth:screen.width,n=window.innerHeight?window.innerHeight:document.documentElement.clientHeight?document.documentElement.clientHeight:screen.height,u=i/2-d/2+a,s=n/2-o/2+l,c=window.open(t,M.util.get_string("browse_and_embed","local_kaltura"),"scrollbars=yes, width="+d+", height="+o+", top="+s+", left="+u);window.focus&&c.focus(),document.body.bsePopup=c;var r=this.createEntrySelectedEvent();document.body.entrySelectedEvent=r,document.body.addEventListener("entrySelected",this.close_popup_callback.bind(this),!1)},createEntrySelectedEvent:function(){var e;return"function"==typeof window.CustomEvent?e=new CustomEvent("entrySelected"):(e=document.createEvent("CustomEvent"),e.initCustomEvent("entrySelected",!1,!1,{})),e},close_popup_callback:function(){var t=e.one("img[id=video_thumbnail]");t.setStyle("display","none");var n=e.one("iframe[id=contentframe]");n.setAttribute("width",e.one("input[id=width]").getAttribute("value")),n.setAttribute("height",e.one("input[id=height]").getAttribute("value")),n.setStyle("display","inline");var i=e.one("input[name=modulename]");void 0===i||"kalvidres"!==this.modulename&&"kalvidpres"!==this.modulename||this.lti_panel_change_add_media_button_caption(),document.body.bsePopup.close()},lti_panel_change_add_media_button_caption:function(){var t=M.util.get_string("replace_video",this.modulename);t!==e.one("#"+this.addvidbtnid).getAttribute("value")&&e.one("#"+this.addvidbtnid).setAttribute("value",t)}},{NAME:"moodle-local_kaltura-ltipanel",ATTRS:{addvidbtnid:{value:"0"},ltilaunchurl:{value:"0"},height:{value:0},width:{value:0},modulename:{value:""}}});var i=function(){i.superclass.constructor.apply(this,arguments)};e.extend(i,e.Base,{init:function(t){if("0"!==t.addvidbtnid&&"0"!==t.ltilaunchurl&&0!==t.courseid&&0!==t.height&&0!==t.width){var n=e.one("#"+t.addvidbtnid);n.on("click",this.open_bse_popup_callback,this,t.ltilaunchurl,t.height,t.width)}},open_bse_popup_callback:function(e,t,n,i){var d=1200,o=700,a=void 0!=window.screenLeft?window.screenLeft:screen.left,l=void 0!=window.screenTop?window.screenTop:screen.top,i=window.innerWidth?window.innerWidth:document.documentElement.clientWidth?document.documentElement.clientWidth:screen.width,n=window.innerHeight?window.innerHeight:document.documentElement.clientHeight?document.documentElement.clientHeight:screen.height,u=i/2-d/2+a,s=n/2-o/2+l,c=window.open(t,M.util.get_string("browse_and_embed","local_kaltura"),"scrollbars=no, width="+d+", height="+o+", top="+s+", left="+u);window.focus&&c.focus(),document.body.bsePopup=c;var r=this.createEntrySelectedEvent();document.body.entrySelectedEvent=r,document.body.addEventListener("entrySelected",this.close_popup_callback.bind(this),!1)},createEntrySelectedEvent:function(){var e;return"function"==typeof window.CustomEvent?e=new CustomEvent("entrySelected"):(e=document.createEvent("CustomEvent"),e.initCustomEvent("entrySelected",!1,!1,{})),e},close_popup_callback:function(){e.one("input[id=submit_video]").removeAttribute("disabled");var t=e.one("img[id=video_thumbnail]");t.setStyle("display","none");var n=e.one("iframe[id=contentframe]");n.setAttribute("width",e.one("input[id=width]").getAttribute("value")),n.setAttribute("height",e.one("input[id=height]").getAttribute("value")),n.setStyle("display","inline"),e.one("#id_add_video").set("value",M.util.get_string("replacevideo","kalvidassign")),document.body.bsePopup.close()}},{NAME:"moodle-local_kaltura-ltipanel",ATTRS:{addvidbtnid:{value:"0"},ltilaunchurl:{value:"0"},height:{value:0},width:{value:0}}});var d=function(){d.superclass.constructor.apply(this,arguments)};e.extend(d,e.Base,{ltimediaassignment:null,init:function(t){this.ltimediaassignment=t,e.one("form[id=fastgrade]").delegate("click",this.review_submission,"a[name=submission_source]",this)},review_submission:function(e){e.preventDefault();var t,n,i;e.target.test("a")?(t=e.target.getAttribute("href"),n=e.target.ancestor("div[name=media_submission]").get("childNodes").filter("input[name=height]").get("value"),i=e.target.ancestor("div[name=media_submission]").get("childNodes").filter("input[name=width]").get("value")):(t=e.target.ancestor("a[name=submission_source]").getAttribute("href"),n=e.target.ancestor("div[name=media_submission]").get("childNodes").filter("input[name=height]").get("value"),i=e.target.ancestor("div[name=media_submission]").get("childNodes").filter("input[name=width]").get("value")),this.ltimediaassignment.open_bse_popup_callback(null,t,n,i)}},{NAME:"moodle-local_kaltura-ltipanel"}),M.local_kaltura=M.local_kaltura||{},M.local_kaltura.init=function(e){return new n(e)},M.local_kaltura.initmediaassignment=function(e){return new i(e)},M.local_kaltura.initreviewsubmission=function(){var e={addvidbtnid:"0",ltilaunchurl:"0",courseid:0,height:0,width:0},t=new i(e);return new d(t)}},"@VERSION@",{requires:["base","node","panel","node-event-simulate"]}); \ No newline at end of file +YUI.add("moodle-local_kaltura-ltipanel",function(e,t){var n=function(){n.superclass.constructor.apply(this,arguments)};e.extend(n,e.Base,{modulename:null,addvidbtnid:null,init:function(t){if("0"===t.addvidbtnid||"0"===t.ltilaunchurl||0===t.courseid||0===t.height||0===t.width){alert("Some parameters were not initialized.");return}this.modulename=t.modulename,this.addvidbtnid=t.addvidbtnid;var n=e.one("#"+t.addvidbtnid);n.on("click",this.open_bse_popup_callback,this,t.ltilaunchurl,t.height,t.width)},open_bse_popup_callback:function(e,t,n,r){var i=1200,s=700,o=window.screenLeft!=undefined?window.screenLeft:screen.left,u=window.screenTop!=undefined?window.screenTop:screen.top,r=window.innerWidth?window.innerWidth:document.documentElement.clientWidth?document.documentElement.clientWidth:screen.width,n=window.innerHeight?window.innerHeight:document.documentElement.clientHeight?document.documentElement.clientHeight:screen.height,a=r/2-i/2+o,f=n/2-s/2+u,l=window.open(t,M.util.get_string("browse_and_embed","local_kaltura"),"scrollbars=yes, width="+i+", height="+s+", top="+f+", left="+a);window.focus&&l.focus(),document.body.bsePopup=l;var c=this.createEntrySelectedEvent();document.body.entrySelectedEvent=c,document.body.addEventListener("entrySelected",this.close_popup_callback.bind(this),!1)},createEntrySelectedEvent:function(){var e;return typeof window.CustomEvent=="function"?e=new CustomEvent("entrySelected"):(e=document.createEvent("CustomEvent"),e.initCustomEvent("entrySelected",!1,!1,{})),e},close_popup_callback:function(){var t=e.one("img[id=video_thumbnail]");t.setStyle("display","none");var n=e.one("iframe[id=contentframe]");n.setAttribute("width",e.one("input[id=width]").getAttribute("value")),n.setAttribute("height",e.one("input[id=height]").getAttribute("value")),n.setStyle("display","inline");var r=e.one("input[name=modulename]");undefined!==r&&("kalvidres"===this.modulename||"kalvidpres"===this.modulename)&&this.lti_panel_change_add_media_button_caption(),document.body.bsePopup.close()},lti_panel_change_add_media_button_caption:function(){var t=M.util.get_string("replace_video",this.modulename);t!==e.one("#"+this.addvidbtnid).getAttribute("value")&&e.one("#"+this.addvidbtnid).setAttribute("value",t)}},{NAME:"moodle-local_kaltura-ltipanel",ATTRS:{addvidbtnid:{value:"0"},ltilaunchurl:{value:"0"},height:{value:0},width:{value:0},modulename:{value:""}}});var r=function(){r.superclass.constructor.apply(this,arguments)};e.extend(r,e.Base,{init:function(t){if("0"===t.addvidbtnid||"0"===t.ltilaunchurl||0===t.courseid||0===t.height||0===t.width)return;var n=e.one("#"+t.addvidbtnid);n.on("click",this.open_bse_popup_callback,this,t.ltilaunchurl,t.height,t.width)},open_bse_popup_callback:function(e,t,n,r){var i=1200,s=700,o=window.screenLeft!=undefined?window.screenLeft:screen.left,u=window.screenTop!=undefined?window.screenTop:screen.top,r=window.innerWidth?window.innerWidth:document.documentElement.clientWidth?document.documentElement.clientWidth:screen.width,n=window.innerHeight?window.innerHeight:document.documentElement.clientHeight?document.documentElement.clientHeight:screen.height,a=r/2-i/2+o,f=n/2-s/2+u,l=window.open(t,M.util.get_string("browse_and_embed","local_kaltura"),"scrollbars=yes, width="+i+", height="+s+", top="+f+", left="+a);window.focus&&l.focus(),document.body.bsePopup=l;var c=this.createEntrySelectedEvent();document.body.entrySelectedEvent=c,document.body.addEventListener("entrySelected",this.close_popup_callback.bind(this),!1)},createEntrySelectedEvent:function(){var e;return typeof window.CustomEvent=="function"?e=new CustomEvent("entrySelected"):(e=document.createEvent("CustomEvent"),e.initCustomEvent("entrySelected",!1,!1,{})),e},close_popup_callback:function(){e.one("input[id=submit_video]").removeAttribute("disabled");var t=e.one("img[id=video_thumbnail]");t.setStyle("display","none");var n=e.one("iframe[id=contentframe]");n.setAttribute("width",e.one("input[id=width]").getAttribute("value")),n.setAttribute("height",e.one("input[id=height]").getAttribute("value")),n.setStyle("display","inline"),e.one("#id_add_video").set("value",M.util.get_string("replacevideo","kalvidassign")),document.body.bsePopup.close()}},{NAME:"moodle-local_kaltura-ltipanel",ATTRS:{addvidbtnid:{value:"0"},ltilaunchurl:{value:"0"},height:{value:0},width:{value:0}}});var i=function(){i.superclass.constructor.apply(this,arguments)};e.extend(i,e.Base,{ltimediaassignment:null,init:function(t){this.ltimediaassignment=t,e.one("form[id=fastgrade]").delegate("click",this.review_submission,"a[name=submission_source]",this)},review_submission:function(e){e.preventDefault();var t,n,r;e.target.test("a")?(t=e.target.getAttribute("href"),n=e.target.ancestor("div[name=media_submission]").get("childNodes").filter("input[name=height]").get("value"),r=e.target.ancestor("div[name=media_submission]").get("childNodes").filter("input[name=width]").get("value")):(t=e.target.ancestor("a[name=submission_source]").getAttribute("href"),n=e.target.ancestor("div[name=media_submission]").get("childNodes").filter("input[name=height]").get("value"),r=e.target.ancestor("div[name=media_submission]").get("childNodes").filter("input[name=width]").get("value")),this.ltimediaassignment.open_bse_popup_callback(null,t,n,r)}},{NAME:"moodle-local_kaltura-ltipanel"}),M.local_kaltura=M.local_kaltura||{},M.local_kaltura.init=function(e){return new n(e)},M.local_kaltura.initmediaassignment=function(e){return new r(e)},M.local_kaltura.initreviewsubmission=function(){var e={addvidbtnid:"0",ltilaunchurl:"0",courseid:0,height:0,width:0},t=new r(e);return new i(t)}},"@VERSION@",{requires:["base","node","panel","node-event-simulate"]}); diff --git a/local/kaltura/yui/build/moodle-local_kaltura-ltipanel/moodle-local_kaltura-ltipanel.js b/local/kaltura/yui/build/moodle-local_kaltura-ltipanel/moodle-local_kaltura-ltipanel.js index 5a7c876a0de62..4451fa1e59c0e 100644 --- a/local/kaltura/yui/build/moodle-local_kaltura-ltipanel/moodle-local_kaltura-ltipanel.js +++ b/local/kaltura/yui/build/moodle-local_kaltura-ltipanel/moodle-local_kaltura-ltipanel.js @@ -206,7 +206,7 @@ Y.extend(LTIPANELMEDIAASSIGNMENT, Y.Base, { var left = ((width / 2) - (w / 2)) + dualScreenLeft; var top = ((height / 2) - (h / 2)) + dualScreenTop; - var bsePopup = window.open(url, M.util.get_string("browse_and_embed", "local_kaltura"), 'scrollbars=no, width=' + w + ', height=' + h + ', top=' + top + ', left=' + left); + var bsePopup = window.open(url, M.util.get_string("browse_and_embed", "local_kaltura"), 'scrollbars=yes, width=' + w + ', height=' + h + ', top=' + top + ', left=' + left); if (window.focus) { bsePopup.focus(); diff --git a/local/kaltura/yui/src/ltipanel/js/ltipanel.js b/local/kaltura/yui/src/ltipanel/js/ltipanel.js index 8c235c9429e45..09004e5a2fdfd 100644 --- a/local/kaltura/yui/src/ltipanel/js/ltipanel.js +++ b/local/kaltura/yui/src/ltipanel/js/ltipanel.js @@ -204,7 +204,7 @@ Y.extend(LTIPANELMEDIAASSIGNMENT, Y.Base, { var left = ((width / 2) - (w / 2)) + dualScreenLeft; var top = ((height / 2) - (h / 2)) + dualScreenTop; - var bsePopup = window.open(url, M.util.get_string("browse_and_embed", "local_kaltura"), 'scrollbars=no, width=' + w + ', height=' + h + ', top=' + top + ', left=' + left); + var bsePopup = window.open(url, M.util.get_string("browse_and_embed", "local_kaltura"), 'scrollbars=yes, width=' + w + ', height=' + h + ', top=' + top + ', left=' + left); if (window.focus) { bsePopup.focus(); From 85cb7c4e78cbd6789bd31804323be17dd0b4a1e9 Mon Sep 17 00:00:00 2001 From: Muli Dayan Date: Sun, 25 Jun 2017 16:56:15 +0300 Subject: [PATCH 161/326] increment version - moodle 3.3 --- blocks/kalturamediagallery/version.php | 6 +++--- filter/kaltura/version.php | 4 ++-- lib/editor/atto/plugins/kalturamedia/version.php | 4 ++-- lib/editor/tinymce/plugins/kalturamedia/version.php | 4 ++-- local/kaltura/version.php | 2 +- local/kalturamediagallery/version.php | 4 ++-- local/mymedia/version.php | 4 ++-- mod/kalvidassign/version.php | 4 ++-- mod/kalvidpres/version.php | 4 ++-- mod/kalvidres/version.php | 4 ++-- 10 files changed, 20 insertions(+), 20 deletions(-) diff --git a/blocks/kalturamediagallery/version.php b/blocks/kalturamediagallery/version.php index f679ace485ebd..c6863013a3fbf 100644 --- a/blocks/kalturamediagallery/version.php +++ b/blocks/kalturamediagallery/version.php @@ -14,11 +14,11 @@ defined('MOODLE_INTERNAL') || die(); -$plugin->version = 2017062132; +$plugin->version = 2017062533; $plugin->release = 'Kaltura release 4.1'; $plugin->requires = 2014050800; $plugin->component = 'block_kalturamediagallery'; $plugin->dependencies = array( - 'local_kaltura' => 2017062132, - 'local_kalturamediagallery' => 2017062132 + 'local_kaltura' => 2017062533, + 'local_kalturamediagallery' => 2017062533 ); diff --git a/filter/kaltura/version.php b/filter/kaltura/version.php index e6456bf5f6757..b026d8e41b768 100644 --- a/filter/kaltura/version.php +++ b/filter/kaltura/version.php @@ -24,11 +24,11 @@ */ defined('MOODLE_INTERNAL') || die(); -$plugin->version = 2017062132; //version date YYYYMMDDXX 10 represent 3.0 for future option to moodle use 2 digit version +$plugin->version = 2017062533; //version date YYYYMMDDXX 10 represent 3.0 for future option to moodle use 2 digit version $plugin->component = 'filter_kaltura'; $plugin->release = 'Kaltura release 4.1'; $plugin->requires = 2014050800; $plugin->maturity = MATURITY_STABLE; $plugin->dependencies = array( - 'local_kaltura' => 2017062132 + 'local_kaltura' => 2017062533 ); diff --git a/lib/editor/atto/plugins/kalturamedia/version.php b/lib/editor/atto/plugins/kalturamedia/version.php index 8340c4e0639b6..6f20b85d85ef6 100644 --- a/lib/editor/atto/plugins/kalturamedia/version.php +++ b/lib/editor/atto/plugins/kalturamedia/version.php @@ -24,10 +24,10 @@ defined('MOODLE_INTERNAL') || die(); -$plugin->version = 2017062132; // The current plugin version (Date: YYYYMMDDXX). +$plugin->version = 2017062533; // The current plugin version (Date: YYYYMMDDXX). $plugin->release = 'Kaltura release 4.1'; $plugin->requires = 2014050800; // Requires this Moodle version. $plugin->component = 'atto_kalturamedia'; // Full name of the plugin (used for diagnostics). $plugin->dependencies = array( - 'local_kaltura' => 2017062132 + 'local_kaltura' => 2017062533 ); diff --git a/lib/editor/tinymce/plugins/kalturamedia/version.php b/lib/editor/tinymce/plugins/kalturamedia/version.php index 4c82b05886ea6..43bc4fc246697 100644 --- a/lib/editor/tinymce/plugins/kalturamedia/version.php +++ b/lib/editor/tinymce/plugins/kalturamedia/version.php @@ -23,12 +23,12 @@ defined('MOODLE_INTERNAL') || die(); -$plugin->version = 2017062132; +$plugin->version = 2017062533; $plugin->release = 'Kaltura release 4.1'; // Required Moodle version. $plugin->requires = 2014050800; // Full name of the plugin (used for diagnostics). $plugin->component = 'tinymce_kalturamedia'; $plugin->dependencies = array( - 'local_kaltura' => 2017062132 + 'local_kaltura' => 2017062533 ); diff --git a/local/kaltura/version.php b/local/kaltura/version.php index 45d761aa092e4..cdb9c0cf6bbf8 100644 --- a/local/kaltura/version.php +++ b/local/kaltura/version.php @@ -25,7 +25,7 @@ die('Direct access to this script is forbidden.'); } -$plugin->version = 2017062132; +$plugin->version = 2017062533; $plugin->component = 'local_kaltura'; $plugin->release = 'Kaltura release 4.1'; $plugin->requires = 2014050800; diff --git a/local/kalturamediagallery/version.php b/local/kalturamediagallery/version.php index 3b82fc342733d..0ceece86d273d 100644 --- a/local/kalturamediagallery/version.php +++ b/local/kalturamediagallery/version.php @@ -26,11 +26,11 @@ die('Direct access to this script is forbidden.'); } -$plugin->version = 2017062132; +$plugin->version = 2017062533; $plugin->component = 'local_kalturamediagallery'; $plugin->release = 'Kaltura release 4.1'; $plugin->requires = 2014050800; $plugin->maturity = MATURITY_STABLE; $plugin->dependencies = array( - 'local_kaltura' => 2017062132 + 'local_kaltura' => 2017062533 ); diff --git a/local/mymedia/version.php b/local/mymedia/version.php index 648538b2382cc..a57d6633bfd66 100644 --- a/local/mymedia/version.php +++ b/local/mymedia/version.php @@ -25,11 +25,11 @@ die('Direct access to this script is forbidden.'); } -$plugin->version = 2017062132; +$plugin->version = 2017062533; $plugin->component = 'local_mymedia'; $plugin->release = 'Kaltura release 4.1'; $plugin->requires = 2014050800; $plugin->maturity = MATURITY_STABLE; $plugin->dependencies = array( - 'local_kaltura' => 2017062132 + 'local_kaltura' => 2017062533 ); diff --git a/mod/kalvidassign/version.php b/mod/kalvidassign/version.php index f10565ec35bcf..733eb4da7fe8c 100644 --- a/mod/kalvidassign/version.php +++ b/mod/kalvidassign/version.php @@ -25,12 +25,12 @@ die('Direct access to this script is forbidden.'); } -$plugin->version = 2017062132; +$plugin->version = 2017062533; $plugin->component = 'mod_kalvidassign'; $plugin->release = 'Kaltura release 4.1'; $plugin->requires = 2014050800; $plugin->cron = 0; $plugin->maturity = MATURITY_STABLE; $plugin->dependencies = array( - 'local_kaltura' => 2017062132, + 'local_kaltura' => 2017062533, ); diff --git a/mod/kalvidpres/version.php b/mod/kalvidpres/version.php index 3ba7ec61e5033..6e5817af64f1e 100644 --- a/mod/kalvidpres/version.php +++ b/mod/kalvidpres/version.php @@ -25,12 +25,12 @@ die('Direct access to this script is forbidden.'); } -$plugin->version = 2017062132; +$plugin->version = 2017062533; $plugin->component = 'mod_kalvidpres'; $plugin->release = 'Kaltura release 4.1'; $plugin->requires = 2014050800; $plugin->cron = 0; $plugin->maturity = MATURITY_STABLE; $plugin->dependencies = array( - 'local_kaltura' => 2017062132 + 'local_kaltura' => 2017062533 ); diff --git a/mod/kalvidres/version.php b/mod/kalvidres/version.php index 8a438d0f00db7..127b9a8400b65 100644 --- a/mod/kalvidres/version.php +++ b/mod/kalvidres/version.php @@ -25,12 +25,12 @@ die('Direct access to this script is forbidden.'); } -$plugin->version = 2017062132; +$plugin->version = 2017062533; $plugin->component = 'mod_kalvidres'; $plugin->release = 'Kaltura release 4.1'; $plugin->requires = 2014050800; $plugin->cron = 0; $plugin->maturity = MATURITY_STABLE; $plugin->dependencies = array( - 'local_kaltura' => 2017062132 + 'local_kaltura' => 2017062533 ); From 9193f0901da581a652495d3cbf676e0bcadff874 Mon Sep 17 00:00:00 2001 From: Muli Dayan Date: Sun, 25 Jun 2017 17:01:45 +0300 Subject: [PATCH 162/326] include blocks and pix directories in the createPackage script --- createPackage.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/createPackage.sh b/createPackage.sh index cbceb42db3665..8be6b33c80633 100755 --- a/createPackage.sh +++ b/createPackage.sh @@ -7,4 +7,4 @@ echo "Generaating package for Kaltura_Video_Package_moodle"$BRANCH"_"$VER".zip\n FILENAME="Kaltura_Video_Package_moodle"$BRANCH"_"$VER".zip" -zip -r $FILENAME lib filter mod local +zip -r $FILENAME lib filter mod local blocks pix From 692db12d0990ea6513fe7b42eaf192b8bbfd0813 Mon Sep 17 00:00:00 2001 From: Bell Date: Mon, 14 Aug 2017 11:46:02 +0300 Subject: [PATCH 163/326] Sup-11579 media gallery link was not present in navigation bar (#155) * SUP-11579 Mediagallery was not visible in courses the user was able to access, but not enrolled in. fixed by adding the a check for not enrolled and able to access. * SUP-11579 fix comment * SUP-11579 changed link identifier --- local/kalturamediagallery/lib.php | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/local/kalturamediagallery/lib.php b/local/kalturamediagallery/lib.php index d0c620cab43df..df85c16c37231 100644 --- a/local/kalturamediagallery/lib.php +++ b/local/kalturamediagallery/lib.php @@ -84,10 +84,19 @@ function local_kalturamediagallery_extend_navigation($navigation) { if(isNodeNotEmpty($myCoursesNode)) { $currentCourseInMyCourses = $myCoursesNode->find($coursecontext->instanceid, navigation_node::TYPE_COURSE); if($currentCourseInMyCourses) { - // we found the current course in "my courses node", add the link to it. + // we found the current course in 'my courses' node, add the link to it. $currentCourseInMyCourses->add($mediaGalleryLinkName, $linkUrl, navigation_node::NODETYPE_LEAF, $mediaGalleryLinkName, 'kalturacoursegallerylink-mycourses'); } } + + $coursesNode = $navigation->find('courses', $navigation::TYPE_ROOTNODE); + if (isNodeNotEmpty($coursesNode)) { + $currentCourseInCourses = $coursesNode->find($coursecontext->instanceid, navigation_node::TYPE_COURSE); + if ($coursesNode) { + // we found the current course in the 'courses' node, add the link to it. + $currentCourseInCourses->add($mediaGalleryLinkName, $linkUrl, navigation_node::NODETYPE_LEAF, $mediaGalleryLinkName, 'kalturacoursegallerylink-allcourses'); + } + } } function local_kalturamediagallery_extend_navigation_course(navigation_node $parent, stdClass $course, context_course $context) { From 4ff3759c6895d5979151114fa78d532ae03e9584 Mon Sep 17 00:00:00 2001 From: Muli Dayan Date: Mon, 14 Aug 2017 11:52:46 +0300 Subject: [PATCH 164/326] increment version - moodle 3.3 --- blocks/kalturamediagallery/version.php | 8 ++++---- filter/kaltura/version.php | 6 +++--- lib/editor/atto/plugins/kalturamedia/version.php | 6 +++--- lib/editor/tinymce/plugins/kalturamedia/version.php | 6 +++--- local/kaltura/version.php | 4 ++-- local/kalturamediagallery/version.php | 6 +++--- local/mymedia/version.php | 6 +++--- mod/kalvidassign/version.php | 6 +++--- mod/kalvidpres/version.php | 6 +++--- mod/kalvidres/version.php | 6 +++--- 10 files changed, 30 insertions(+), 30 deletions(-) diff --git a/blocks/kalturamediagallery/version.php b/blocks/kalturamediagallery/version.php index c6863013a3fbf..5d3afadcfd1d3 100644 --- a/blocks/kalturamediagallery/version.php +++ b/blocks/kalturamediagallery/version.php @@ -14,11 +14,11 @@ defined('MOODLE_INTERNAL') || die(); -$plugin->version = 2017062533; -$plugin->release = 'Kaltura release 4.1'; +$plugin->version = 2017081433; +$plugin->release = 'Kaltura release 4.1.1'; $plugin->requires = 2014050800; $plugin->component = 'block_kalturamediagallery'; $plugin->dependencies = array( - 'local_kaltura' => 2017062533, - 'local_kalturamediagallery' => 2017062533 + 'local_kaltura' => 2017081433, + 'local_kalturamediagallery' => 2017081433 ); diff --git a/filter/kaltura/version.php b/filter/kaltura/version.php index b026d8e41b768..074ca35e89ff8 100644 --- a/filter/kaltura/version.php +++ b/filter/kaltura/version.php @@ -24,11 +24,11 @@ */ defined('MOODLE_INTERNAL') || die(); -$plugin->version = 2017062533; //version date YYYYMMDDXX 10 represent 3.0 for future option to moodle use 2 digit version +$plugin->version = 2017081433; //version date YYYYMMDDXX 10 represent 3.0 for future option to moodle use 2 digit version $plugin->component = 'filter_kaltura'; -$plugin->release = 'Kaltura release 4.1'; +$plugin->release = 'Kaltura release 4.1.1'; $plugin->requires = 2014050800; $plugin->maturity = MATURITY_STABLE; $plugin->dependencies = array( - 'local_kaltura' => 2017062533 + 'local_kaltura' => 2017081433 ); diff --git a/lib/editor/atto/plugins/kalturamedia/version.php b/lib/editor/atto/plugins/kalturamedia/version.php index 6f20b85d85ef6..b7a508c922a63 100644 --- a/lib/editor/atto/plugins/kalturamedia/version.php +++ b/lib/editor/atto/plugins/kalturamedia/version.php @@ -24,10 +24,10 @@ defined('MOODLE_INTERNAL') || die(); -$plugin->version = 2017062533; // The current plugin version (Date: YYYYMMDDXX). -$plugin->release = 'Kaltura release 4.1'; +$plugin->version = 2017081433; // The current plugin version (Date: YYYYMMDDXX). +$plugin->release = 'Kaltura release 4.1.1'; $plugin->requires = 2014050800; // Requires this Moodle version. $plugin->component = 'atto_kalturamedia'; // Full name of the plugin (used for diagnostics). $plugin->dependencies = array( - 'local_kaltura' => 2017062533 + 'local_kaltura' => 2017081433 ); diff --git a/lib/editor/tinymce/plugins/kalturamedia/version.php b/lib/editor/tinymce/plugins/kalturamedia/version.php index 43bc4fc246697..f18d6ecc96705 100644 --- a/lib/editor/tinymce/plugins/kalturamedia/version.php +++ b/lib/editor/tinymce/plugins/kalturamedia/version.php @@ -23,12 +23,12 @@ defined('MOODLE_INTERNAL') || die(); -$plugin->version = 2017062533; -$plugin->release = 'Kaltura release 4.1'; +$plugin->version = 2017081433; +$plugin->release = 'Kaltura release 4.1.1'; // Required Moodle version. $plugin->requires = 2014050800; // Full name of the plugin (used for diagnostics). $plugin->component = 'tinymce_kalturamedia'; $plugin->dependencies = array( - 'local_kaltura' => 2017062533 + 'local_kaltura' => 2017081433 ); diff --git a/local/kaltura/version.php b/local/kaltura/version.php index cdb9c0cf6bbf8..7f9c00afb7417 100644 --- a/local/kaltura/version.php +++ b/local/kaltura/version.php @@ -25,8 +25,8 @@ die('Direct access to this script is forbidden.'); } -$plugin->version = 2017062533; +$plugin->version = 2017081433; $plugin->component = 'local_kaltura'; -$plugin->release = 'Kaltura release 4.1'; +$plugin->release = 'Kaltura release 4.1.1'; $plugin->requires = 2014050800; $plugin->maturity = MATURITY_STABLE; diff --git a/local/kalturamediagallery/version.php b/local/kalturamediagallery/version.php index 0ceece86d273d..9c713bffa47d4 100644 --- a/local/kalturamediagallery/version.php +++ b/local/kalturamediagallery/version.php @@ -26,11 +26,11 @@ die('Direct access to this script is forbidden.'); } -$plugin->version = 2017062533; +$plugin->version = 2017081433; $plugin->component = 'local_kalturamediagallery'; -$plugin->release = 'Kaltura release 4.1'; +$plugin->release = 'Kaltura release 4.1.1'; $plugin->requires = 2014050800; $plugin->maturity = MATURITY_STABLE; $plugin->dependencies = array( - 'local_kaltura' => 2017062533 + 'local_kaltura' => 2017081433 ); diff --git a/local/mymedia/version.php b/local/mymedia/version.php index a57d6633bfd66..75a022d44f2a1 100644 --- a/local/mymedia/version.php +++ b/local/mymedia/version.php @@ -25,11 +25,11 @@ die('Direct access to this script is forbidden.'); } -$plugin->version = 2017062533; +$plugin->version = 2017081433; $plugin->component = 'local_mymedia'; -$plugin->release = 'Kaltura release 4.1'; +$plugin->release = 'Kaltura release 4.1.1'; $plugin->requires = 2014050800; $plugin->maturity = MATURITY_STABLE; $plugin->dependencies = array( - 'local_kaltura' => 2017062533 + 'local_kaltura' => 2017081433 ); diff --git a/mod/kalvidassign/version.php b/mod/kalvidassign/version.php index 733eb4da7fe8c..812949252f79f 100644 --- a/mod/kalvidassign/version.php +++ b/mod/kalvidassign/version.php @@ -25,12 +25,12 @@ die('Direct access to this script is forbidden.'); } -$plugin->version = 2017062533; +$plugin->version = 2017081433; $plugin->component = 'mod_kalvidassign'; -$plugin->release = 'Kaltura release 4.1'; +$plugin->release = 'Kaltura release 4.1.1'; $plugin->requires = 2014050800; $plugin->cron = 0; $plugin->maturity = MATURITY_STABLE; $plugin->dependencies = array( - 'local_kaltura' => 2017062533, + 'local_kaltura' => 2017081433, ); diff --git a/mod/kalvidpres/version.php b/mod/kalvidpres/version.php index 6e5817af64f1e..fab88011a30b8 100644 --- a/mod/kalvidpres/version.php +++ b/mod/kalvidpres/version.php @@ -25,12 +25,12 @@ die('Direct access to this script is forbidden.'); } -$plugin->version = 2017062533; +$plugin->version = 2017081433; $plugin->component = 'mod_kalvidpres'; -$plugin->release = 'Kaltura release 4.1'; +$plugin->release = 'Kaltura release 4.1.1'; $plugin->requires = 2014050800; $plugin->cron = 0; $plugin->maturity = MATURITY_STABLE; $plugin->dependencies = array( - 'local_kaltura' => 2017062533 + 'local_kaltura' => 2017081433 ); diff --git a/mod/kalvidres/version.php b/mod/kalvidres/version.php index 127b9a8400b65..35784070d6445 100644 --- a/mod/kalvidres/version.php +++ b/mod/kalvidres/version.php @@ -25,12 +25,12 @@ die('Direct access to this script is forbidden.'); } -$plugin->version = 2017062533; +$plugin->version = 2017081433; $plugin->component = 'mod_kalvidres'; -$plugin->release = 'Kaltura release 4.1'; +$plugin->release = 'Kaltura release 4.1.1'; $plugin->requires = 2014050800; $plugin->cron = 0; $plugin->maturity = MATURITY_STABLE; $plugin->dependencies = array( - 'local_kaltura' => 2017062533 + 'local_kaltura' => 2017081433 ); From c861c9e0e1a6f881c9df17b0917a269421daa78c Mon Sep 17 00:00:00 2001 From: Bell Levin Date: Tue, 29 Aug 2017 11:21:10 +0300 Subject: [PATCH 165/326] SUP-11579 changing a name of a variable due to faulty previous fix --- local/kalturamediagallery/lib.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/local/kalturamediagallery/lib.php b/local/kalturamediagallery/lib.php index df85c16c37231..946b42402d8b3 100644 --- a/local/kalturamediagallery/lib.php +++ b/local/kalturamediagallery/lib.php @@ -92,7 +92,7 @@ function local_kalturamediagallery_extend_navigation($navigation) { $coursesNode = $navigation->find('courses', $navigation::TYPE_ROOTNODE); if (isNodeNotEmpty($coursesNode)) { $currentCourseInCourses = $coursesNode->find($coursecontext->instanceid, navigation_node::TYPE_COURSE); - if ($coursesNode) { + if ($currentCourseInCourses) { // we found the current course in the 'courses' node, add the link to it. $currentCourseInCourses->add($mediaGalleryLinkName, $linkUrl, navigation_node::NODETYPE_LEAF, $mediaGalleryLinkName, 'kalturacoursegallerylink-allcourses'); } From b3276ab07529df663c85fc95b8891b0a4a3e3cc4 Mon Sep 17 00:00:00 2001 From: Muli Dayan Date: Mon, 4 Sep 2017 08:52:13 +0300 Subject: [PATCH 166/326] increment version - moodle 3.3 --- blocks/kalturamediagallery/version.php | 6 +++--- filter/kaltura/version.php | 4 ++-- lib/editor/atto/plugins/kalturamedia/version.php | 4 ++-- lib/editor/tinymce/plugins/kalturamedia/version.php | 4 ++-- local/kaltura/version.php | 2 +- local/kalturamediagallery/version.php | 4 ++-- local/mymedia/version.php | 4 ++-- mod/kalvidassign/version.php | 4 ++-- mod/kalvidpres/version.php | 4 ++-- mod/kalvidres/version.php | 4 ++-- 10 files changed, 20 insertions(+), 20 deletions(-) diff --git a/blocks/kalturamediagallery/version.php b/blocks/kalturamediagallery/version.php index 5d3afadcfd1d3..bf8506f343b54 100644 --- a/blocks/kalturamediagallery/version.php +++ b/blocks/kalturamediagallery/version.php @@ -14,11 +14,11 @@ defined('MOODLE_INTERNAL') || die(); -$plugin->version = 2017081433; +$plugin->version = 2017090433; $plugin->release = 'Kaltura release 4.1.1'; $plugin->requires = 2014050800; $plugin->component = 'block_kalturamediagallery'; $plugin->dependencies = array( - 'local_kaltura' => 2017081433, - 'local_kalturamediagallery' => 2017081433 + 'local_kaltura' => 2017090433, + 'local_kalturamediagallery' => 2017090433 ); diff --git a/filter/kaltura/version.php b/filter/kaltura/version.php index 074ca35e89ff8..6f6fb66753743 100644 --- a/filter/kaltura/version.php +++ b/filter/kaltura/version.php @@ -24,11 +24,11 @@ */ defined('MOODLE_INTERNAL') || die(); -$plugin->version = 2017081433; //version date YYYYMMDDXX 10 represent 3.0 for future option to moodle use 2 digit version +$plugin->version = 2017090433; //version date YYYYMMDDXX 10 represent 3.0 for future option to moodle use 2 digit version $plugin->component = 'filter_kaltura'; $plugin->release = 'Kaltura release 4.1.1'; $plugin->requires = 2014050800; $plugin->maturity = MATURITY_STABLE; $plugin->dependencies = array( - 'local_kaltura' => 2017081433 + 'local_kaltura' => 2017090433 ); diff --git a/lib/editor/atto/plugins/kalturamedia/version.php b/lib/editor/atto/plugins/kalturamedia/version.php index b7a508c922a63..5cda8ed051614 100644 --- a/lib/editor/atto/plugins/kalturamedia/version.php +++ b/lib/editor/atto/plugins/kalturamedia/version.php @@ -24,10 +24,10 @@ defined('MOODLE_INTERNAL') || die(); -$plugin->version = 2017081433; // The current plugin version (Date: YYYYMMDDXX). +$plugin->version = 2017090433; // The current plugin version (Date: YYYYMMDDXX). $plugin->release = 'Kaltura release 4.1.1'; $plugin->requires = 2014050800; // Requires this Moodle version. $plugin->component = 'atto_kalturamedia'; // Full name of the plugin (used for diagnostics). $plugin->dependencies = array( - 'local_kaltura' => 2017081433 + 'local_kaltura' => 2017090433 ); diff --git a/lib/editor/tinymce/plugins/kalturamedia/version.php b/lib/editor/tinymce/plugins/kalturamedia/version.php index f18d6ecc96705..86a452f4a5929 100644 --- a/lib/editor/tinymce/plugins/kalturamedia/version.php +++ b/lib/editor/tinymce/plugins/kalturamedia/version.php @@ -23,12 +23,12 @@ defined('MOODLE_INTERNAL') || die(); -$plugin->version = 2017081433; +$plugin->version = 2017090433; $plugin->release = 'Kaltura release 4.1.1'; // Required Moodle version. $plugin->requires = 2014050800; // Full name of the plugin (used for diagnostics). $plugin->component = 'tinymce_kalturamedia'; $plugin->dependencies = array( - 'local_kaltura' => 2017081433 + 'local_kaltura' => 2017090433 ); diff --git a/local/kaltura/version.php b/local/kaltura/version.php index 7f9c00afb7417..c46e638745ee9 100644 --- a/local/kaltura/version.php +++ b/local/kaltura/version.php @@ -25,7 +25,7 @@ die('Direct access to this script is forbidden.'); } -$plugin->version = 2017081433; +$plugin->version = 2017090433; $plugin->component = 'local_kaltura'; $plugin->release = 'Kaltura release 4.1.1'; $plugin->requires = 2014050800; diff --git a/local/kalturamediagallery/version.php b/local/kalturamediagallery/version.php index 9c713bffa47d4..35c292aba3d87 100644 --- a/local/kalturamediagallery/version.php +++ b/local/kalturamediagallery/version.php @@ -26,11 +26,11 @@ die('Direct access to this script is forbidden.'); } -$plugin->version = 2017081433; +$plugin->version = 2017090433; $plugin->component = 'local_kalturamediagallery'; $plugin->release = 'Kaltura release 4.1.1'; $plugin->requires = 2014050800; $plugin->maturity = MATURITY_STABLE; $plugin->dependencies = array( - 'local_kaltura' => 2017081433 + 'local_kaltura' => 2017090433 ); diff --git a/local/mymedia/version.php b/local/mymedia/version.php index 75a022d44f2a1..52112cd3d9415 100644 --- a/local/mymedia/version.php +++ b/local/mymedia/version.php @@ -25,11 +25,11 @@ die('Direct access to this script is forbidden.'); } -$plugin->version = 2017081433; +$plugin->version = 2017090433; $plugin->component = 'local_mymedia'; $plugin->release = 'Kaltura release 4.1.1'; $plugin->requires = 2014050800; $plugin->maturity = MATURITY_STABLE; $plugin->dependencies = array( - 'local_kaltura' => 2017081433 + 'local_kaltura' => 2017090433 ); diff --git a/mod/kalvidassign/version.php b/mod/kalvidassign/version.php index 812949252f79f..eb82a24d0f103 100644 --- a/mod/kalvidassign/version.php +++ b/mod/kalvidassign/version.php @@ -25,12 +25,12 @@ die('Direct access to this script is forbidden.'); } -$plugin->version = 2017081433; +$plugin->version = 2017090433; $plugin->component = 'mod_kalvidassign'; $plugin->release = 'Kaltura release 4.1.1'; $plugin->requires = 2014050800; $plugin->cron = 0; $plugin->maturity = MATURITY_STABLE; $plugin->dependencies = array( - 'local_kaltura' => 2017081433, + 'local_kaltura' => 2017090433, ); diff --git a/mod/kalvidpres/version.php b/mod/kalvidpres/version.php index fab88011a30b8..96c58c3474178 100644 --- a/mod/kalvidpres/version.php +++ b/mod/kalvidpres/version.php @@ -25,12 +25,12 @@ die('Direct access to this script is forbidden.'); } -$plugin->version = 2017081433; +$plugin->version = 2017090433; $plugin->component = 'mod_kalvidpres'; $plugin->release = 'Kaltura release 4.1.1'; $plugin->requires = 2014050800; $plugin->cron = 0; $plugin->maturity = MATURITY_STABLE; $plugin->dependencies = array( - 'local_kaltura' => 2017081433 + 'local_kaltura' => 2017090433 ); diff --git a/mod/kalvidres/version.php b/mod/kalvidres/version.php index 35784070d6445..538868e1e487c 100644 --- a/mod/kalvidres/version.php +++ b/mod/kalvidres/version.php @@ -25,12 +25,12 @@ die('Direct access to this script is forbidden.'); } -$plugin->version = 2017081433; +$plugin->version = 2017090433; $plugin->component = 'mod_kalvidres'; $plugin->release = 'Kaltura release 4.1.1'; $plugin->requires = 2014050800; $plugin->cron = 0; $plugin->maturity = MATURITY_STABLE; $plugin->dependencies = array( - 'local_kaltura' => 2017081433 + 'local_kaltura' => 2017090433 ); From 39ef3de68854152682ef4ed77029f6d24bb1000f Mon Sep 17 00:00:00 2001 From: alon ainbinder Date: Wed, 6 Dec 2017 10:11:42 +0200 Subject: [PATCH 167/326] version bump --- blocks/kalturamediagallery/version.php | 6 +++--- filter/kaltura/version.php | 4 ++-- lib/editor/atto/plugins/kalturamedia/version.php | 4 ++-- lib/editor/tinymce/plugins/kalturamedia/version.php | 4 ++-- local/kaltura/version.php | 2 +- local/kalturamediagallery/version.php | 4 ++-- local/mymedia/version.php | 4 ++-- mod/kalvidassign/version.php | 4 ++-- mod/kalvidpres/version.php | 4 ++-- mod/kalvidres/version.php | 4 ++-- 10 files changed, 20 insertions(+), 20 deletions(-) diff --git a/blocks/kalturamediagallery/version.php b/blocks/kalturamediagallery/version.php index bf8506f343b54..f1291c5f3bb33 100644 --- a/blocks/kalturamediagallery/version.php +++ b/blocks/kalturamediagallery/version.php @@ -14,11 +14,11 @@ defined('MOODLE_INTERNAL') || die(); -$plugin->version = 2017090433; +$plugin->version = 2017120634; $plugin->release = 'Kaltura release 4.1.1'; $plugin->requires = 2014050800; $plugin->component = 'block_kalturamediagallery'; $plugin->dependencies = array( - 'local_kaltura' => 2017090433, - 'local_kalturamediagallery' => 2017090433 + 'local_kaltura' => 2017120634, + 'local_kalturamediagallery' => 2017120634 ); diff --git a/filter/kaltura/version.php b/filter/kaltura/version.php index 6f6fb66753743..c8678331943b2 100644 --- a/filter/kaltura/version.php +++ b/filter/kaltura/version.php @@ -24,11 +24,11 @@ */ defined('MOODLE_INTERNAL') || die(); -$plugin->version = 2017090433; //version date YYYYMMDDXX 10 represent 3.0 for future option to moodle use 2 digit version +$plugin->version = 2017120634; //version date YYYYMMDDXX 10 represent 3.0 for future option to moodle use 2 digit version $plugin->component = 'filter_kaltura'; $plugin->release = 'Kaltura release 4.1.1'; $plugin->requires = 2014050800; $plugin->maturity = MATURITY_STABLE; $plugin->dependencies = array( - 'local_kaltura' => 2017090433 + 'local_kaltura' => 2017120634 ); diff --git a/lib/editor/atto/plugins/kalturamedia/version.php b/lib/editor/atto/plugins/kalturamedia/version.php index 5cda8ed051614..8806956167165 100644 --- a/lib/editor/atto/plugins/kalturamedia/version.php +++ b/lib/editor/atto/plugins/kalturamedia/version.php @@ -24,10 +24,10 @@ defined('MOODLE_INTERNAL') || die(); -$plugin->version = 2017090433; // The current plugin version (Date: YYYYMMDDXX). +$plugin->version = 2017120634; // The current plugin version (Date: YYYYMMDDXX). $plugin->release = 'Kaltura release 4.1.1'; $plugin->requires = 2014050800; // Requires this Moodle version. $plugin->component = 'atto_kalturamedia'; // Full name of the plugin (used for diagnostics). $plugin->dependencies = array( - 'local_kaltura' => 2017090433 + 'local_kaltura' => 2017120634 ); diff --git a/lib/editor/tinymce/plugins/kalturamedia/version.php b/lib/editor/tinymce/plugins/kalturamedia/version.php index 86a452f4a5929..f03c0043ccc12 100644 --- a/lib/editor/tinymce/plugins/kalturamedia/version.php +++ b/lib/editor/tinymce/plugins/kalturamedia/version.php @@ -23,12 +23,12 @@ defined('MOODLE_INTERNAL') || die(); -$plugin->version = 2017090433; +$plugin->version = 2017120634; $plugin->release = 'Kaltura release 4.1.1'; // Required Moodle version. $plugin->requires = 2014050800; // Full name of the plugin (used for diagnostics). $plugin->component = 'tinymce_kalturamedia'; $plugin->dependencies = array( - 'local_kaltura' => 2017090433 + 'local_kaltura' => 2017120634 ); diff --git a/local/kaltura/version.php b/local/kaltura/version.php index c46e638745ee9..cd1344959af06 100644 --- a/local/kaltura/version.php +++ b/local/kaltura/version.php @@ -25,7 +25,7 @@ die('Direct access to this script is forbidden.'); } -$plugin->version = 2017090433; +$plugin->version = 2017120634; $plugin->component = 'local_kaltura'; $plugin->release = 'Kaltura release 4.1.1'; $plugin->requires = 2014050800; diff --git a/local/kalturamediagallery/version.php b/local/kalturamediagallery/version.php index 35c292aba3d87..7606dbe23f28f 100644 --- a/local/kalturamediagallery/version.php +++ b/local/kalturamediagallery/version.php @@ -26,11 +26,11 @@ die('Direct access to this script is forbidden.'); } -$plugin->version = 2017090433; +$plugin->version = 2017120634; $plugin->component = 'local_kalturamediagallery'; $plugin->release = 'Kaltura release 4.1.1'; $plugin->requires = 2014050800; $plugin->maturity = MATURITY_STABLE; $plugin->dependencies = array( - 'local_kaltura' => 2017090433 + 'local_kaltura' => 2017120634 ); diff --git a/local/mymedia/version.php b/local/mymedia/version.php index 52112cd3d9415..288af032b003e 100644 --- a/local/mymedia/version.php +++ b/local/mymedia/version.php @@ -25,11 +25,11 @@ die('Direct access to this script is forbidden.'); } -$plugin->version = 2017090433; +$plugin->version = 2017120634; $plugin->component = 'local_mymedia'; $plugin->release = 'Kaltura release 4.1.1'; $plugin->requires = 2014050800; $plugin->maturity = MATURITY_STABLE; $plugin->dependencies = array( - 'local_kaltura' => 2017090433 + 'local_kaltura' => 2017120634 ); diff --git a/mod/kalvidassign/version.php b/mod/kalvidassign/version.php index eb82a24d0f103..89d4e8c483a04 100644 --- a/mod/kalvidassign/version.php +++ b/mod/kalvidassign/version.php @@ -25,12 +25,12 @@ die('Direct access to this script is forbidden.'); } -$plugin->version = 2017090433; +$plugin->version = 2017120634; $plugin->component = 'mod_kalvidassign'; $plugin->release = 'Kaltura release 4.1.1'; $plugin->requires = 2014050800; $plugin->cron = 0; $plugin->maturity = MATURITY_STABLE; $plugin->dependencies = array( - 'local_kaltura' => 2017090433, + 'local_kaltura' => 2017120634, ); diff --git a/mod/kalvidpres/version.php b/mod/kalvidpres/version.php index 96c58c3474178..cb6f8a2bacfb3 100644 --- a/mod/kalvidpres/version.php +++ b/mod/kalvidpres/version.php @@ -25,12 +25,12 @@ die('Direct access to this script is forbidden.'); } -$plugin->version = 2017090433; +$plugin->version = 2017120634; $plugin->component = 'mod_kalvidpres'; $plugin->release = 'Kaltura release 4.1.1'; $plugin->requires = 2014050800; $plugin->cron = 0; $plugin->maturity = MATURITY_STABLE; $plugin->dependencies = array( - 'local_kaltura' => 2017090433 + 'local_kaltura' => 2017120634 ); diff --git a/mod/kalvidres/version.php b/mod/kalvidres/version.php index 538868e1e487c..03d9dc1cac426 100644 --- a/mod/kalvidres/version.php +++ b/mod/kalvidres/version.php @@ -25,12 +25,12 @@ die('Direct access to this script is forbidden.'); } -$plugin->version = 2017090433; +$plugin->version = 2017120634; $plugin->component = 'mod_kalvidres'; $plugin->release = 'Kaltura release 4.1.1'; $plugin->requires = 2014050800; $plugin->cron = 0; $plugin->maturity = MATURITY_STABLE; $plugin->dependencies = array( - 'local_kaltura' => 2017090433 + 'local_kaltura' => 2017120634 ); From 3c5f74f059cc96e833c493d5731b99088a218b31 Mon Sep 17 00:00:00 2001 From: Muli Dayan Date: Sun, 27 May 2018 10:33:47 +0300 Subject: [PATCH 168/326] KMS-17117 update client libs; remove all plugins except metadata; remove test code --- local/kaltura/API/KalturaClient.php | 8347 -------- local/kaltura/API/KalturaClientBase.php | 1228 -- local/kaltura/API/KalturaEnums.php | 3213 --- ...nersWatermarkAccessControlClientPlugin.php | 84 - .../KalturaAdCuePointClientPlugin.php | 253 - .../KalturaAnnotationClientPlugin.php | 450 - .../KalturaAsperaClientPlugin.php | 113 - .../KalturaAttachmentClientPlugin.php | 435 - .../KalturaAuditClientPlugin.php | 893 - .../KalturaBulkUploadClientPlugin.php | 187 - .../KalturaBulkUploadCsvClientPlugin.php | 113 - .../KalturaBulkUploadFilterClientPlugin.php | 101 - .../KalturaBulkUploadXmlClientPlugin.php | 85 - .../KalturaCaptionClientPlugin.php | 771 - .../KalturaCaptionSearchClientPlugin.php | 325 - .../KalturaCodeCuePointClientPlugin.php | 237 - ...KalturaContentDistributionClientPlugin.php | 3454 ---- .../KalturaCuePointClientPlugin.php | 640 - .../KalturaDocumentClientPlugin.php | 944 - .../KalturaPlugins/KalturaDrmClientPlugin.php | 434 - .../KalturaDropFolderClientPlugin.php | 1777 -- ...uraDropFolderXmlBulkUploadClientPlugin.php | 86 - .../KalturaEmailNotificationClientPlugin.php | 630 - .../KalturaEventNotificationClientPlugin.php | 790 - .../KalturaExternalMediaClientPlugin.php | 363 - .../KalturaFileSyncClientPlugin.php | 338 - .../KalturaHttpNotificationClientPlugin.php | 624 - .../KalturaKontikiClientPlugin.php | 177 - .../KalturaLikeClientPlugin.php | 153 - .../KalturaMetadataClientPlugin.php | 1566 -- .../KalturaMultiCentersClientPlugin.php | 119 - .../KalturaShortLinkClientPlugin.php | 476 - .../KalturaTagSearchClientPlugin.php | 320 - .../KalturaVarConsoleClientPlugin.php | 398 - .../KalturaVelocixClientPlugin.php | 105 - .../KalturaVirusScanClientPlugin.php | 545 - .../KalturaWebexDropFolderClientPlugin.php | 292 - .../KalturaWidevineClientPlugin.php | 396 - local/kaltura/API/KalturaTypes.php | 16367 ---------------- local/kaltura/API/TestCode/DemoVideo.flv | Bin 512919 -> 0 bytes .../API/TestCode/KalturaTestConfiguration.php | 36 - local/kaltura/API/TestCode/TestMain.php | 137 - local/kaltura/API/agpl.txt | 674 - 43 files changed, 48676 deletions(-) delete mode 100644 local/kaltura/API/KalturaClient.php delete mode 100644 local/kaltura/API/KalturaClientBase.php delete mode 100644 local/kaltura/API/KalturaEnums.php delete mode 100644 local/kaltura/API/KalturaPlugins/KalturaAbcScreenersWatermarkAccessControlClientPlugin.php delete mode 100644 local/kaltura/API/KalturaPlugins/KalturaAdCuePointClientPlugin.php delete mode 100644 local/kaltura/API/KalturaPlugins/KalturaAnnotationClientPlugin.php delete mode 100644 local/kaltura/API/KalturaPlugins/KalturaAsperaClientPlugin.php delete mode 100644 local/kaltura/API/KalturaPlugins/KalturaAttachmentClientPlugin.php delete mode 100644 local/kaltura/API/KalturaPlugins/KalturaAuditClientPlugin.php delete mode 100644 local/kaltura/API/KalturaPlugins/KalturaBulkUploadClientPlugin.php delete mode 100644 local/kaltura/API/KalturaPlugins/KalturaBulkUploadCsvClientPlugin.php delete mode 100644 local/kaltura/API/KalturaPlugins/KalturaBulkUploadFilterClientPlugin.php delete mode 100644 local/kaltura/API/KalturaPlugins/KalturaBulkUploadXmlClientPlugin.php delete mode 100644 local/kaltura/API/KalturaPlugins/KalturaCaptionClientPlugin.php delete mode 100644 local/kaltura/API/KalturaPlugins/KalturaCaptionSearchClientPlugin.php delete mode 100644 local/kaltura/API/KalturaPlugins/KalturaCodeCuePointClientPlugin.php delete mode 100644 local/kaltura/API/KalturaPlugins/KalturaContentDistributionClientPlugin.php delete mode 100644 local/kaltura/API/KalturaPlugins/KalturaCuePointClientPlugin.php delete mode 100644 local/kaltura/API/KalturaPlugins/KalturaDocumentClientPlugin.php delete mode 100644 local/kaltura/API/KalturaPlugins/KalturaDrmClientPlugin.php delete mode 100644 local/kaltura/API/KalturaPlugins/KalturaDropFolderClientPlugin.php delete mode 100644 local/kaltura/API/KalturaPlugins/KalturaDropFolderXmlBulkUploadClientPlugin.php delete mode 100644 local/kaltura/API/KalturaPlugins/KalturaEmailNotificationClientPlugin.php delete mode 100644 local/kaltura/API/KalturaPlugins/KalturaEventNotificationClientPlugin.php delete mode 100644 local/kaltura/API/KalturaPlugins/KalturaExternalMediaClientPlugin.php delete mode 100644 local/kaltura/API/KalturaPlugins/KalturaFileSyncClientPlugin.php delete mode 100644 local/kaltura/API/KalturaPlugins/KalturaHttpNotificationClientPlugin.php delete mode 100644 local/kaltura/API/KalturaPlugins/KalturaKontikiClientPlugin.php delete mode 100644 local/kaltura/API/KalturaPlugins/KalturaLikeClientPlugin.php delete mode 100644 local/kaltura/API/KalturaPlugins/KalturaMetadataClientPlugin.php delete mode 100644 local/kaltura/API/KalturaPlugins/KalturaMultiCentersClientPlugin.php delete mode 100644 local/kaltura/API/KalturaPlugins/KalturaShortLinkClientPlugin.php delete mode 100644 local/kaltura/API/KalturaPlugins/KalturaTagSearchClientPlugin.php delete mode 100644 local/kaltura/API/KalturaPlugins/KalturaVarConsoleClientPlugin.php delete mode 100644 local/kaltura/API/KalturaPlugins/KalturaVelocixClientPlugin.php delete mode 100644 local/kaltura/API/KalturaPlugins/KalturaVirusScanClientPlugin.php delete mode 100644 local/kaltura/API/KalturaPlugins/KalturaWebexDropFolderClientPlugin.php delete mode 100644 local/kaltura/API/KalturaPlugins/KalturaWidevineClientPlugin.php delete mode 100644 local/kaltura/API/KalturaTypes.php delete mode 100644 local/kaltura/API/TestCode/DemoVideo.flv delete mode 100644 local/kaltura/API/TestCode/KalturaTestConfiguration.php delete mode 100644 local/kaltura/API/TestCode/TestMain.php delete mode 100644 local/kaltura/API/agpl.txt diff --git a/local/kaltura/API/KalturaClient.php b/local/kaltura/API/KalturaClient.php deleted file mode 100644 index 45294c8ad090a..0000000000000 --- a/local/kaltura/API/KalturaClient.php +++ /dev/null @@ -1,8347 +0,0 @@ -. -// -// @ignore -// =================================================================================================== - -/** - * @package Kaltura - * @subpackage Client - */ -require_once(dirname(__FILE__) . "/KalturaClientBase.php"); -require_once(dirname(__FILE__) . "/KalturaEnums.php"); -require_once(dirname(__FILE__) . "/KalturaTypes.php"); - - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaAccessControlProfileService extends KalturaServiceBase -{ - function __construct(KalturaClient $client = null) - { - parent::__construct($client); - } - - /** - * Add new access control profile - * - * @param KalturaAccessControlProfile $accessControlProfile - * @return KalturaAccessControlProfile - */ - function add(KalturaAccessControlProfile $accessControlProfile) - { - $kparams = array(); - $this->client->addParam($kparams, "accessControlProfile", $accessControlProfile->toParams()); - $this->client->queueServiceActionCall("accesscontrolprofile", "add", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaAccessControlProfile"); - return $resultObject; - } - - /** - * Get access control profile by id - * - * @param int $id - * @return KalturaAccessControlProfile - */ - function get($id) - { - $kparams = array(); - $this->client->addParam($kparams, "id", $id); - $this->client->queueServiceActionCall("accesscontrolprofile", "get", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaAccessControlProfile"); - return $resultObject; - } - - /** - * Update access control profile by id - * - * @param int $id - * @param KalturaAccessControlProfile $accessControlProfile - * @return KalturaAccessControlProfile - */ - function update($id, KalturaAccessControlProfile $accessControlProfile) - { - $kparams = array(); - $this->client->addParam($kparams, "id", $id); - $this->client->addParam($kparams, "accessControlProfile", $accessControlProfile->toParams()); - $this->client->queueServiceActionCall("accesscontrolprofile", "update", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaAccessControlProfile"); - return $resultObject; - } - - /** - * Delete access control profile by id - * - * @param int $id - * @return - */ - function delete($id) - { - $kparams = array(); - $this->client->addParam($kparams, "id", $id); - $this->client->queueServiceActionCall("accesscontrolprofile", "delete", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "null"); - return $resultObject; - } - - /** - * List access control profiles by filter and pager - * - * @param KalturaAccessControlProfileFilter $filter - * @param KalturaFilterPager $pager - * @return KalturaAccessControlProfileListResponse - */ - function listAction(KalturaAccessControlProfileFilter $filter = null, KalturaFilterPager $pager = null) - { - $kparams = array(); - if ($filter !== null) - $this->client->addParam($kparams, "filter", $filter->toParams()); - if ($pager !== null) - $this->client->addParam($kparams, "pager", $pager->toParams()); - $this->client->queueServiceActionCall("accesscontrolprofile", "list", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaAccessControlProfileListResponse"); - return $resultObject; - } -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaAccessControlService extends KalturaServiceBase -{ - function __construct(KalturaClient $client = null) - { - parent::__construct($client); - } - - /** - * Add new Access Control Profile - * - * @param KalturaAccessControl $accessControl - * @return KalturaAccessControl - */ - function add(KalturaAccessControl $accessControl) - { - $kparams = array(); - $this->client->addParam($kparams, "accessControl", $accessControl->toParams()); - $this->client->queueServiceActionCall("accesscontrol", "add", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaAccessControl"); - return $resultObject; - } - - /** - * Get Access Control Profile by id - * - * @param int $id - * @return KalturaAccessControl - */ - function get($id) - { - $kparams = array(); - $this->client->addParam($kparams, "id", $id); - $this->client->queueServiceActionCall("accesscontrol", "get", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaAccessControl"); - return $resultObject; - } - - /** - * Update Access Control Profile by id - * - * @param int $id - * @param KalturaAccessControl $accessControl - * @return KalturaAccessControl - */ - function update($id, KalturaAccessControl $accessControl) - { - $kparams = array(); - $this->client->addParam($kparams, "id", $id); - $this->client->addParam($kparams, "accessControl", $accessControl->toParams()); - $this->client->queueServiceActionCall("accesscontrol", "update", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaAccessControl"); - return $resultObject; - } - - /** - * Delete Access Control Profile by id - * - * @param int $id - * @return - */ - function delete($id) - { - $kparams = array(); - $this->client->addParam($kparams, "id", $id); - $this->client->queueServiceActionCall("accesscontrol", "delete", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "null"); - return $resultObject; - } - - /** - * List Access Control Profiles by filter and pager - * - * @param KalturaAccessControlFilter $filter - * @param KalturaFilterPager $pager - * @return KalturaAccessControlListResponse - */ - function listAction(KalturaAccessControlFilter $filter = null, KalturaFilterPager $pager = null) - { - $kparams = array(); - if ($filter !== null) - $this->client->addParam($kparams, "filter", $filter->toParams()); - if ($pager !== null) - $this->client->addParam($kparams, "pager", $pager->toParams()); - $this->client->queueServiceActionCall("accesscontrol", "list", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaAccessControlListResponse"); - return $resultObject; - } -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaAdminUserService extends KalturaServiceBase -{ - function __construct(KalturaClient $client = null) - { - parent::__construct($client); - } - - /** - * Update admin user password and email - * - * @param string $email - * @param string $password - * @param string $newEmail Optional, provide only when you want to update the email - * @param string $newPassword - * @return KalturaAdminUser - */ - function updatePassword($email, $password, $newEmail = "", $newPassword = "") - { - $kparams = array(); - $this->client->addParam($kparams, "email", $email); - $this->client->addParam($kparams, "password", $password); - $this->client->addParam($kparams, "newEmail", $newEmail); - $this->client->addParam($kparams, "newPassword", $newPassword); - $this->client->queueServiceActionCall("adminuser", "updatePassword", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaAdminUser"); - return $resultObject; - } - - /** - * Reset admin user password and send it to the users email address - * - * @param string $email - * @return - */ - function resetPassword($email) - { - $kparams = array(); - $this->client->addParam($kparams, "email", $email); - $this->client->queueServiceActionCall("adminuser", "resetPassword", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "null"); - return $resultObject; - } - - /** - * Get an admin session using admin email and password (Used for login to the KMC application) - * - * @param string $email - * @param string $password - * @param int $partnerId - * @return string - */ - function login($email, $password, $partnerId = null) - { - $kparams = array(); - $this->client->addParam($kparams, "email", $email); - $this->client->addParam($kparams, "password", $password); - $this->client->addParam($kparams, "partnerId", $partnerId); - $this->client->queueServiceActionCall("adminuser", "login", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "string"); - return $resultObject; - } - - /** - * Set initial users password - * - * @param string $hashKey - * @param string $newPassword New password to set - * @return - */ - function setInitialPassword($hashKey, $newPassword) - { - $kparams = array(); - $this->client->addParam($kparams, "hashKey", $hashKey); - $this->client->addParam($kparams, "newPassword", $newPassword); - $this->client->queueServiceActionCall("adminuser", "setInitialPassword", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "null"); - return $resultObject; - } -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaBaseEntryService extends KalturaServiceBase -{ - function __construct(KalturaClient $client = null) - { - parent::__construct($client); - } - - /** - * Generic add entry, should be used when the uploaded entry type is not known. - * - * @param KalturaBaseEntry $entry - * @param string $type - * @return KalturaBaseEntry - */ - function add(KalturaBaseEntry $entry, $type = null) - { - $kparams = array(); - $this->client->addParam($kparams, "entry", $entry->toParams()); - $this->client->addParam($kparams, "type", $type); - $this->client->queueServiceActionCall("baseentry", "add", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaBaseEntry"); - return $resultObject; - } - - /** - * Attach content resource to entry in status NO_MEDIA - * - * @param string $entryId - * @param KalturaResource $resource - * @return KalturaBaseEntry - */ - function addContent($entryId, KalturaResource $resource) - { - $kparams = array(); - $this->client->addParam($kparams, "entryId", $entryId); - $this->client->addParam($kparams, "resource", $resource->toParams()); - $this->client->queueServiceActionCall("baseentry", "addContent", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaBaseEntry"); - return $resultObject; - } - - /** - * Generic add entry using an uploaded file, should be used when the uploaded entry type is not known. - * - * @param KalturaBaseEntry $entry - * @param string $uploadTokenId - * @param string $type - * @return KalturaBaseEntry - */ - function addFromUploadedFile(KalturaBaseEntry $entry, $uploadTokenId, $type = null) - { - $kparams = array(); - $this->client->addParam($kparams, "entry", $entry->toParams()); - $this->client->addParam($kparams, "uploadTokenId", $uploadTokenId); - $this->client->addParam($kparams, "type", $type); - $this->client->queueServiceActionCall("baseentry", "addFromUploadedFile", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaBaseEntry"); - return $resultObject; - } - - /** - * Get base entry by ID. - * - * @param string $entryId Entry id - * @param int $version Desired version of the data - * @return KalturaBaseEntry - */ - function get($entryId, $version = -1) - { - $kparams = array(); - $this->client->addParam($kparams, "entryId", $entryId); - $this->client->addParam($kparams, "version", $version); - $this->client->queueServiceActionCall("baseentry", "get", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaBaseEntry"); - return $resultObject; - } - - /** - * Get remote storage existing paths for the asset. - * - * @param string $entryId - * @return KalturaRemotePathListResponse - */ - function getRemotePaths($entryId) - { - $kparams = array(); - $this->client->addParam($kparams, "entryId", $entryId); - $this->client->queueServiceActionCall("baseentry", "getRemotePaths", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaRemotePathListResponse"); - return $resultObject; - } - - /** - * Update base entry. Only the properties that were set will be updated. - * - * @param string $entryId Entry id to update - * @param KalturaBaseEntry $baseEntry Base entry metadata to update - * @return KalturaBaseEntry - */ - function update($entryId, KalturaBaseEntry $baseEntry) - { - $kparams = array(); - $this->client->addParam($kparams, "entryId", $entryId); - $this->client->addParam($kparams, "baseEntry", $baseEntry->toParams()); - $this->client->queueServiceActionCall("baseentry", "update", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaBaseEntry"); - return $resultObject; - } - - /** - * Update the content resource associated with the entry. - * - * @param string $entryId Entry id to update - * @param KalturaResource $resource Resource to be used to replace entry content - * @param int $conversionProfileId The conversion profile id to be used on the entry - * @return KalturaBaseEntry - */ - function updateContent($entryId, KalturaResource $resource, $conversionProfileId = null) - { - $kparams = array(); - $this->client->addParam($kparams, "entryId", $entryId); - $this->client->addParam($kparams, "resource", $resource->toParams()); - $this->client->addParam($kparams, "conversionProfileId", $conversionProfileId); - $this->client->queueServiceActionCall("baseentry", "updateContent", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaBaseEntry"); - return $resultObject; - } - - /** - * Get an array of KalturaBaseEntry objects by a comma-separated list of ids. - * - * @param string $entryIds Comma separated string of entry ids - * @return array - */ - function getByIds($entryIds) - { - $kparams = array(); - $this->client->addParam($kparams, "entryIds", $entryIds); - $this->client->queueServiceActionCall("baseentry", "getByIds", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "array"); - return $resultObject; - } - - /** - * Delete an entry. - * - * @param string $entryId Entry id to delete - * @return - */ - function delete($entryId) - { - $kparams = array(); - $this->client->addParam($kparams, "entryId", $entryId); - $this->client->queueServiceActionCall("baseentry", "delete", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "null"); - return $resultObject; - } - - /** - * List base entries by filter with paging support. - * - * @param KalturaBaseEntryFilter $filter Entry filter - * @param KalturaFilterPager $pager Pager - * @return KalturaBaseEntryListResponse - */ - function listAction(KalturaBaseEntryFilter $filter = null, KalturaFilterPager $pager = null) - { - $kparams = array(); - if ($filter !== null) - $this->client->addParam($kparams, "filter", $filter->toParams()); - if ($pager !== null) - $this->client->addParam($kparams, "pager", $pager->toParams()); - $this->client->queueServiceActionCall("baseentry", "list", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaBaseEntryListResponse"); - return $resultObject; - } - - /** - * List base entries by filter according to reference id - * - * @param string $refId Entry Reference ID - * @param KalturaFilterPager $pager Pager - * @return KalturaBaseEntryListResponse - */ - function listByReferenceId($refId, KalturaFilterPager $pager = null) - { - $kparams = array(); - $this->client->addParam($kparams, "refId", $refId); - if ($pager !== null) - $this->client->addParam($kparams, "pager", $pager->toParams()); - $this->client->queueServiceActionCall("baseentry", "listByReferenceId", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaBaseEntryListResponse"); - return $resultObject; - } - - /** - * Count base entries by filter. - * - * @param KalturaBaseEntryFilter $filter Entry filter - * @return int - */ - function count(KalturaBaseEntryFilter $filter = null) - { - $kparams = array(); - if ($filter !== null) - $this->client->addParam($kparams, "filter", $filter->toParams()); - $this->client->queueServiceActionCall("baseentry", "count", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "integer"); - return $resultObject; - } - - /** - * Upload a file to Kaltura, that can be used to create an entry. - * - * @param file $fileData The file data - * @return string - */ - function upload($fileData) - { - $kparams = array(); - $kfiles = array(); - $this->client->addParam($kfiles, "fileData", $fileData); - $this->client->queueServiceActionCall("baseentry", "upload", $kparams, $kfiles); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "string"); - return $resultObject; - } - - /** - * Update entry thumbnail using a raw jpeg file. - * - * @param string $entryId Media entry id - * @param file $fileData Jpeg file data - * @return KalturaBaseEntry - */ - function updateThumbnailJpeg($entryId, $fileData) - { - $kparams = array(); - $this->client->addParam($kparams, "entryId", $entryId); - $kfiles = array(); - $this->client->addParam($kfiles, "fileData", $fileData); - $this->client->queueServiceActionCall("baseentry", "updateThumbnailJpeg", $kparams, $kfiles); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaBaseEntry"); - return $resultObject; - } - - /** - * Update entry thumbnail using url. - * - * @param string $entryId Media entry id - * @param string $url File url - * @return KalturaBaseEntry - */ - function updateThumbnailFromUrl($entryId, $url) - { - $kparams = array(); - $this->client->addParam($kparams, "entryId", $entryId); - $this->client->addParam($kparams, "url", $url); - $this->client->queueServiceActionCall("baseentry", "updateThumbnailFromUrl", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaBaseEntry"); - return $resultObject; - } - - /** - * Update entry thumbnail from a different entry by a specified time offset (in seconds). - * - * @param string $entryId Media entry id - * @param string $sourceEntryId Media entry id - * @param int $timeOffset Time offset (in seconds) - * @return KalturaBaseEntry - */ - function updateThumbnailFromSourceEntry($entryId, $sourceEntryId, $timeOffset) - { - $kparams = array(); - $this->client->addParam($kparams, "entryId", $entryId); - $this->client->addParam($kparams, "sourceEntryId", $sourceEntryId); - $this->client->addParam($kparams, "timeOffset", $timeOffset); - $this->client->queueServiceActionCall("baseentry", "updateThumbnailFromSourceEntry", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaBaseEntry"); - return $resultObject; - } - - /** - * Flag inappropriate entry for moderation. - * - * @param KalturaModerationFlag $moderationFlag - * @return - */ - function flag(KalturaModerationFlag $moderationFlag) - { - $kparams = array(); - $this->client->addParam($kparams, "moderationFlag", $moderationFlag->toParams()); - $this->client->queueServiceActionCall("baseentry", "flag", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "null"); - return $resultObject; - } - - /** - * Reject the entry and mark the pending flags (if any) as moderated (this will make the entry non-playable). - * - * @param string $entryId - * @return - */ - function reject($entryId) - { - $kparams = array(); - $this->client->addParam($kparams, "entryId", $entryId); - $this->client->queueServiceActionCall("baseentry", "reject", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "null"); - return $resultObject; - } - - /** - * Approve the entry and mark the pending flags (if any) as moderated (this will make the entry playable). - * - * @param string $entryId - * @return - */ - function approve($entryId) - { - $kparams = array(); - $this->client->addParam($kparams, "entryId", $entryId); - $this->client->queueServiceActionCall("baseentry", "approve", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "null"); - return $resultObject; - } - - /** - * List all pending flags for the entry. - * - * @param string $entryId - * @param KalturaFilterPager $pager - * @return KalturaModerationFlagListResponse - */ - function listFlags($entryId, KalturaFilterPager $pager = null) - { - $kparams = array(); - $this->client->addParam($kparams, "entryId", $entryId); - if ($pager !== null) - $this->client->addParam($kparams, "pager", $pager->toParams()); - $this->client->queueServiceActionCall("baseentry", "listFlags", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaModerationFlagListResponse"); - return $resultObject; - } - - /** - * Anonymously rank an entry, no validation is done on duplicate rankings. - * - * @param string $entryId - * @param int $rank - * @return - */ - function anonymousRank($entryId, $rank) - { - $kparams = array(); - $this->client->addParam($kparams, "entryId", $entryId); - $this->client->addParam($kparams, "rank", $rank); - $this->client->queueServiceActionCall("baseentry", "anonymousRank", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "null"); - return $resultObject; - } - - /** - * This action delivers entry-related data, based on the user's context: access control, restriction, playback format and storage information. - * - * @param string $entryId - * @param KalturaEntryContextDataParams $contextDataParams - * @return KalturaEntryContextDataResult - */ - function getContextData($entryId, KalturaEntryContextDataParams $contextDataParams) - { - $kparams = array(); - $this->client->addParam($kparams, "entryId", $entryId); - $this->client->addParam($kparams, "contextDataParams", $contextDataParams->toParams()); - $this->client->queueServiceActionCall("baseentry", "getContextData", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaEntryContextDataResult"); - return $resultObject; - } - - /** - * - * - * @param string $entryId - * @param int $storageProfileId - * @return KalturaBaseEntry - */ - function export($entryId, $storageProfileId) - { - $kparams = array(); - $this->client->addParam($kparams, "entryId", $entryId); - $this->client->addParam($kparams, "storageProfileId", $storageProfileId); - $this->client->queueServiceActionCall("baseentry", "export", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaBaseEntry"); - return $resultObject; - } - - /** - * Index an entry by id. - * - * @param string $id - * @param bool $shouldUpdate - * @return int - */ - function index($id, $shouldUpdate = true) - { - $kparams = array(); - $this->client->addParam($kparams, "id", $id); - $this->client->addParam($kparams, "shouldUpdate", $shouldUpdate); - $this->client->queueServiceActionCall("baseentry", "index", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "integer"); - return $resultObject; - } - - /** - * Clone an entry with optional attributes to apply to the clone - * - * @param string $entryId Id of entry to clone - * @return KalturaBaseEntry - */ - function cloneAction($entryId) - { - $kparams = array(); - $this->client->addParam($kparams, "entryId", $entryId); - $this->client->queueServiceActionCall("baseentry", "clone", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaBaseEntry"); - return $resultObject; - } -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaBulkUploadService extends KalturaServiceBase -{ - function __construct(KalturaClient $client = null) - { - parent::__construct($client); - } - - /** - * Add new bulk upload batch job - Conversion profile id can be specified in the API or in the CSV file, the one in the CSV file will be stronger. - If no conversion profile was specified, partner's default will be used - * - * @param int $conversionProfileId Convertion profile id to use for converting the current bulk (-1 to use partner's default) - * @param file $csvFileData Bulk upload file - * @param string $bulkUploadType - * @param string $uploadedBy - * @param string $fileName Friendly name of the file, used to be recognized later in the logs. - * @return KalturaBulkUpload - */ - function add($conversionProfileId, $csvFileData, $bulkUploadType = null, $uploadedBy = null, $fileName = null) - { - $kparams = array(); - $this->client->addParam($kparams, "conversionProfileId", $conversionProfileId); - $kfiles = array(); - $this->client->addParam($kfiles, "csvFileData", $csvFileData); - $this->client->addParam($kparams, "bulkUploadType", $bulkUploadType); - $this->client->addParam($kparams, "uploadedBy", $uploadedBy); - $this->client->addParam($kparams, "fileName", $fileName); - $this->client->queueServiceActionCall("bulkupload", "add", $kparams, $kfiles); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaBulkUpload"); - return $resultObject; - } - - /** - * Get bulk upload batch job by id - * - * @param bigint $id - * @return KalturaBulkUpload - */ - function get($id) - { - $kparams = array(); - $this->client->addParam($kparams, "id", $id); - $this->client->queueServiceActionCall("bulkupload", "get", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaBulkUpload"); - return $resultObject; - } - - /** - * List bulk upload batch jobs - * - * @param KalturaFilterPager $pager - * @return KalturaBulkUploadListResponse - */ - function listAction(KalturaFilterPager $pager = null) - { - $kparams = array(); - if ($pager !== null) - $this->client->addParam($kparams, "pager", $pager->toParams()); - $this->client->queueServiceActionCall("bulkupload", "list", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaBulkUploadListResponse"); - return $resultObject; - } - - /** - * Serve action returan the original file. - * - * @param bigint $id Job id - * @return file - */ - function serve($id) - { - $kparams = array(); - $this->client->addParam($kparams, "id", $id); - $this->client->queueServiceActionCall("bulkupload", "serve", $kparams); - if(!$this->client->getDestinationPath() && !$this->client->getReturnServedResult()) - return $this->client->getServeUrl(); - return $this->client->doQueue(); - } - - /** - * ServeLog action returan the original file. - * - * @param bigint $id Job id - * @return file - */ - function serveLog($id) - { - $kparams = array(); - $this->client->addParam($kparams, "id", $id); - $this->client->queueServiceActionCall("bulkupload", "serveLog", $kparams); - if(!$this->client->getDestinationPath() && !$this->client->getReturnServedResult()) - return $this->client->getServeUrl(); - return $this->client->doQueue(); - } - - /** - * Aborts the bulk upload and all its child jobs - * - * @param bigint $id Job id - * @return KalturaBulkUpload - */ - function abort($id) - { - $kparams = array(); - $this->client->addParam($kparams, "id", $id); - $this->client->queueServiceActionCall("bulkupload", "abort", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaBulkUpload"); - return $resultObject; - } -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaCategoryEntryService extends KalturaServiceBase -{ - function __construct(KalturaClient $client = null) - { - parent::__construct($client); - } - - /** - * Add new CategoryEntry - * - * @param KalturaCategoryEntry $categoryEntry - * @return KalturaCategoryEntry - */ - function add(KalturaCategoryEntry $categoryEntry) - { - $kparams = array(); - $this->client->addParam($kparams, "categoryEntry", $categoryEntry->toParams()); - $this->client->queueServiceActionCall("categoryentry", "add", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaCategoryEntry"); - return $resultObject; - } - - /** - * Delete CategoryEntry - * - * @param string $entryId - * @param int $categoryId - * @return - */ - function delete($entryId, $categoryId) - { - $kparams = array(); - $this->client->addParam($kparams, "entryId", $entryId); - $this->client->addParam($kparams, "categoryId", $categoryId); - $this->client->queueServiceActionCall("categoryentry", "delete", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "null"); - return $resultObject; - } - - /** - * List all categoryEntry - * - * @param KalturaCategoryEntryFilter $filter - * @param KalturaFilterPager $pager - * @return KalturaCategoryEntryListResponse - */ - function listAction(KalturaCategoryEntryFilter $filter = null, KalturaFilterPager $pager = null) - { - $kparams = array(); - if ($filter !== null) - $this->client->addParam($kparams, "filter", $filter->toParams()); - if ($pager !== null) - $this->client->addParam($kparams, "pager", $pager->toParams()); - $this->client->queueServiceActionCall("categoryentry", "list", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaCategoryEntryListResponse"); - return $resultObject; - } - - /** - * Index CategoryEntry by Id - * - * @param string $entryId - * @param int $categoryId - * @param bool $shouldUpdate - * @return int - */ - function index($entryId, $categoryId, $shouldUpdate = true) - { - $kparams = array(); - $this->client->addParam($kparams, "entryId", $entryId); - $this->client->addParam($kparams, "categoryId", $categoryId); - $this->client->addParam($kparams, "shouldUpdate", $shouldUpdate); - $this->client->queueServiceActionCall("categoryentry", "index", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "integer"); - return $resultObject; - } - - /** - * Activate CategoryEntry when it is pending moderation - * - * @param string $entryId - * @param int $categoryId - * @return - */ - function activate($entryId, $categoryId) - { - $kparams = array(); - $this->client->addParam($kparams, "entryId", $entryId); - $this->client->addParam($kparams, "categoryId", $categoryId); - $this->client->queueServiceActionCall("categoryentry", "activate", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "null"); - return $resultObject; - } - - /** - * Activate CategoryEntry when it is pending moderation - * - * @param string $entryId - * @param int $categoryId - * @return - */ - function reject($entryId, $categoryId) - { - $kparams = array(); - $this->client->addParam($kparams, "entryId", $entryId); - $this->client->addParam($kparams, "categoryId", $categoryId); - $this->client->queueServiceActionCall("categoryentry", "reject", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "null"); - return $resultObject; - } -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaCategoryService extends KalturaServiceBase -{ - function __construct(KalturaClient $client = null) - { - parent::__construct($client); - } - - /** - * Add new Category - * - * @param KalturaCategory $category - * @return KalturaCategory - */ - function add(KalturaCategory $category) - { - $kparams = array(); - $this->client->addParam($kparams, "category", $category->toParams()); - $this->client->queueServiceActionCall("category", "add", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaCategory"); - return $resultObject; - } - - /** - * Get Category by id - * - * @param int $id - * @return KalturaCategory - */ - function get($id) - { - $kparams = array(); - $this->client->addParam($kparams, "id", $id); - $this->client->queueServiceActionCall("category", "get", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaCategory"); - return $resultObject; - } - - /** - * Update Category - * - * @param int $id - * @param KalturaCategory $category - * @return KalturaCategory - */ - function update($id, KalturaCategory $category) - { - $kparams = array(); - $this->client->addParam($kparams, "id", $id); - $this->client->addParam($kparams, "category", $category->toParams()); - $this->client->queueServiceActionCall("category", "update", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaCategory"); - return $resultObject; - } - - /** - * Delete a Category - * - * @param int $id - * @param int $moveEntriesToParentCategory - * @return - */ - function delete($id, $moveEntriesToParentCategory = 1) - { - $kparams = array(); - $this->client->addParam($kparams, "id", $id); - $this->client->addParam($kparams, "moveEntriesToParentCategory", $moveEntriesToParentCategory); - $this->client->queueServiceActionCall("category", "delete", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "null"); - return $resultObject; - } - - /** - * List all categories - * - * @param KalturaCategoryFilter $filter - * @param KalturaFilterPager $pager - * @return KalturaCategoryListResponse - */ - function listAction(KalturaCategoryFilter $filter = null, KalturaFilterPager $pager = null) - { - $kparams = array(); - if ($filter !== null) - $this->client->addParam($kparams, "filter", $filter->toParams()); - if ($pager !== null) - $this->client->addParam($kparams, "pager", $pager->toParams()); - $this->client->queueServiceActionCall("category", "list", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaCategoryListResponse"); - return $resultObject; - } - - /** - * Index Category by id - * - * @param int $id - * @param bool $shouldUpdate - * @return int - */ - function index($id, $shouldUpdate = true) - { - $kparams = array(); - $this->client->addParam($kparams, "id", $id); - $this->client->addParam($kparams, "shouldUpdate", $shouldUpdate); - $this->client->queueServiceActionCall("category", "index", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "integer"); - return $resultObject; - } - - /** - * Move categories that belong to the same parent category to a target categroy - enabled only for ks with disable entitlement - * - * @param string $categoryIds - * @param int $targetCategoryParentId - * @return KalturaCategoryListResponse - */ - function move($categoryIds, $targetCategoryParentId) - { - $kparams = array(); - $this->client->addParam($kparams, "categoryIds", $categoryIds); - $this->client->addParam($kparams, "targetCategoryParentId", $targetCategoryParentId); - $this->client->queueServiceActionCall("category", "move", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaCategoryListResponse"); - return $resultObject; - } - - /** - * Unlock categories - * - * @return - */ - function unlockCategories() - { - $kparams = array(); - $this->client->queueServiceActionCall("category", "unlockCategories", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "null"); - return $resultObject; - } - - /** - * - * - * @param file $fileData - * @param KalturaBulkUploadJobData $bulkUploadData - * @param KalturaBulkUploadCategoryData $bulkUploadCategoryData - * @return KalturaBulkUpload - */ - function addFromBulkUpload($fileData, KalturaBulkUploadJobData $bulkUploadData = null, KalturaBulkUploadCategoryData $bulkUploadCategoryData = null) - { - $kparams = array(); - $kfiles = array(); - $this->client->addParam($kfiles, "fileData", $fileData); - if ($bulkUploadData !== null) - $this->client->addParam($kparams, "bulkUploadData", $bulkUploadData->toParams()); - if ($bulkUploadCategoryData !== null) - $this->client->addParam($kparams, "bulkUploadCategoryData", $bulkUploadCategoryData->toParams()); - $this->client->queueServiceActionCall("category", "addFromBulkUpload", $kparams, $kfiles); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaBulkUpload"); - return $resultObject; - } -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaCategoryUserService extends KalturaServiceBase -{ - function __construct(KalturaClient $client = null) - { - parent::__construct($client); - } - - /** - * Add new CategoryUser - * - * @param KalturaCategoryUser $categoryUser - * @return KalturaCategoryUser - */ - function add(KalturaCategoryUser $categoryUser) - { - $kparams = array(); - $this->client->addParam($kparams, "categoryUser", $categoryUser->toParams()); - $this->client->queueServiceActionCall("categoryuser", "add", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaCategoryUser"); - return $resultObject; - } - - /** - * Get CategoryUser by id - * - * @param int $categoryId - * @param string $userId - * @return KalturaCategoryUser - */ - function get($categoryId, $userId) - { - $kparams = array(); - $this->client->addParam($kparams, "categoryId", $categoryId); - $this->client->addParam($kparams, "userId", $userId); - $this->client->queueServiceActionCall("categoryuser", "get", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaCategoryUser"); - return $resultObject; - } - - /** - * Update CategoryUser by id - * - * @param int $categoryId - * @param string $userId - * @param KalturaCategoryUser $categoryUser - * @param bool $override - to override manual changes - * @return KalturaCategoryUser - */ - function update($categoryId, $userId, KalturaCategoryUser $categoryUser, $override = false) - { - $kparams = array(); - $this->client->addParam($kparams, "categoryId", $categoryId); - $this->client->addParam($kparams, "userId", $userId); - $this->client->addParam($kparams, "categoryUser", $categoryUser->toParams()); - $this->client->addParam($kparams, "override", $override); - $this->client->queueServiceActionCall("categoryuser", "update", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaCategoryUser"); - return $resultObject; - } - - /** - * Delete a CategoryUser - * - * @param int $categoryId - * @param string $userId - * @return - */ - function delete($categoryId, $userId) - { - $kparams = array(); - $this->client->addParam($kparams, "categoryId", $categoryId); - $this->client->addParam($kparams, "userId", $userId); - $this->client->queueServiceActionCall("categoryuser", "delete", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "null"); - return $resultObject; - } - - /** - * Activate CategoryUser - * - * @param int $categoryId - * @param string $userId - * @return KalturaCategoryUser - */ - function activate($categoryId, $userId) - { - $kparams = array(); - $this->client->addParam($kparams, "categoryId", $categoryId); - $this->client->addParam($kparams, "userId", $userId); - $this->client->queueServiceActionCall("categoryuser", "activate", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaCategoryUser"); - return $resultObject; - } - - /** - * Reject CategoryUser - * - * @param int $categoryId - * @param string $userId - * @return KalturaCategoryUser - */ - function deactivate($categoryId, $userId) - { - $kparams = array(); - $this->client->addParam($kparams, "categoryId", $categoryId); - $this->client->addParam($kparams, "userId", $userId); - $this->client->queueServiceActionCall("categoryuser", "deactivate", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaCategoryUser"); - return $resultObject; - } - - /** - * List all categories - * - * @param KalturaCategoryUserFilter $filter - * @param KalturaFilterPager $pager - * @return KalturaCategoryUserListResponse - */ - function listAction(KalturaCategoryUserFilter $filter = null, KalturaFilterPager $pager = null) - { - $kparams = array(); - if ($filter !== null) - $this->client->addParam($kparams, "filter", $filter->toParams()); - if ($pager !== null) - $this->client->addParam($kparams, "pager", $pager->toParams()); - $this->client->queueServiceActionCall("categoryuser", "list", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaCategoryUserListResponse"); - return $resultObject; - } - - /** - * Copy all memeber from parent category - * - * @param int $categoryId - * @return - */ - function copyFromCategory($categoryId) - { - $kparams = array(); - $this->client->addParam($kparams, "categoryId", $categoryId); - $this->client->queueServiceActionCall("categoryuser", "copyFromCategory", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "null"); - return $resultObject; - } - - /** - * Index CategoryUser by userid and category id - * - * @param string $userId - * @param int $categoryId - * @param bool $shouldUpdate - * @return int - */ - function index($userId, $categoryId, $shouldUpdate = true) - { - $kparams = array(); - $this->client->addParam($kparams, "userId", $userId); - $this->client->addParam($kparams, "categoryId", $categoryId); - $this->client->addParam($kparams, "shouldUpdate", $shouldUpdate); - $this->client->queueServiceActionCall("categoryuser", "index", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "integer"); - return $resultObject; - } - - /** - * - * - * @param file $fileData - * @param KalturaBulkUploadJobData $bulkUploadData - * @param KalturaBulkUploadCategoryUserData $bulkUploadCategoryUserData - * @return KalturaBulkUpload - */ - function addFromBulkUpload($fileData, KalturaBulkUploadJobData $bulkUploadData = null, KalturaBulkUploadCategoryUserData $bulkUploadCategoryUserData = null) - { - $kparams = array(); - $kfiles = array(); - $this->client->addParam($kfiles, "fileData", $fileData); - if ($bulkUploadData !== null) - $this->client->addParam($kparams, "bulkUploadData", $bulkUploadData->toParams()); - if ($bulkUploadCategoryUserData !== null) - $this->client->addParam($kparams, "bulkUploadCategoryUserData", $bulkUploadCategoryUserData->toParams()); - $this->client->queueServiceActionCall("categoryuser", "addFromBulkUpload", $kparams, $kfiles); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaBulkUpload"); - return $resultObject; - } -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaConversionProfileAssetParamsService extends KalturaServiceBase -{ - function __construct(KalturaClient $client = null) - { - parent::__construct($client); - } - - /** - * Lists asset parmas of conversion profile by ID - * - * @param KalturaConversionProfileAssetParamsFilter $filter - * @param KalturaFilterPager $pager - * @return KalturaConversionProfileAssetParamsListResponse - */ - function listAction(KalturaConversionProfileAssetParamsFilter $filter = null, KalturaFilterPager $pager = null) - { - $kparams = array(); - if ($filter !== null) - $this->client->addParam($kparams, "filter", $filter->toParams()); - if ($pager !== null) - $this->client->addParam($kparams, "pager", $pager->toParams()); - $this->client->queueServiceActionCall("conversionprofileassetparams", "list", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaConversionProfileAssetParamsListResponse"); - return $resultObject; - } - - /** - * Update asset parmas of conversion profile by ID - * - * @param int $conversionProfileId - * @param int $assetParamsId - * @param KalturaConversionProfileAssetParams $conversionProfileAssetParams - * @return KalturaConversionProfileAssetParams - */ - function update($conversionProfileId, $assetParamsId, KalturaConversionProfileAssetParams $conversionProfileAssetParams) - { - $kparams = array(); - $this->client->addParam($kparams, "conversionProfileId", $conversionProfileId); - $this->client->addParam($kparams, "assetParamsId", $assetParamsId); - $this->client->addParam($kparams, "conversionProfileAssetParams", $conversionProfileAssetParams->toParams()); - $this->client->queueServiceActionCall("conversionprofileassetparams", "update", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaConversionProfileAssetParams"); - return $resultObject; - } -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaConversionProfileService extends KalturaServiceBase -{ - function __construct(KalturaClient $client = null) - { - parent::__construct($client); - } - - /** - * Set Conversion Profile to be the partner default - * - * @param int $id - * @return KalturaConversionProfile - */ - function setAsDefault($id) - { - $kparams = array(); - $this->client->addParam($kparams, "id", $id); - $this->client->queueServiceActionCall("conversionprofile", "setAsDefault", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaConversionProfile"); - return $resultObject; - } - - /** - * Get the partner's default conversion profile - * - * @param string $type - * @return KalturaConversionProfile - */ - function getDefault($type = null) - { - $kparams = array(); - $this->client->addParam($kparams, "type", $type); - $this->client->queueServiceActionCall("conversionprofile", "getDefault", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaConversionProfile"); - return $resultObject; - } - - /** - * Add new Conversion Profile - * - * @param KalturaConversionProfile $conversionProfile - * @return KalturaConversionProfile - */ - function add(KalturaConversionProfile $conversionProfile) - { - $kparams = array(); - $this->client->addParam($kparams, "conversionProfile", $conversionProfile->toParams()); - $this->client->queueServiceActionCall("conversionprofile", "add", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaConversionProfile"); - return $resultObject; - } - - /** - * Get Conversion Profile by ID - * - * @param int $id - * @return KalturaConversionProfile - */ - function get($id) - { - $kparams = array(); - $this->client->addParam($kparams, "id", $id); - $this->client->queueServiceActionCall("conversionprofile", "get", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaConversionProfile"); - return $resultObject; - } - - /** - * Update Conversion Profile by ID - * - * @param int $id - * @param KalturaConversionProfile $conversionProfile - * @return KalturaConversionProfile - */ - function update($id, KalturaConversionProfile $conversionProfile) - { - $kparams = array(); - $this->client->addParam($kparams, "id", $id); - $this->client->addParam($kparams, "conversionProfile", $conversionProfile->toParams()); - $this->client->queueServiceActionCall("conversionprofile", "update", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaConversionProfile"); - return $resultObject; - } - - /** - * Delete Conversion Profile by ID - * - * @param int $id - * @return - */ - function delete($id) - { - $kparams = array(); - $this->client->addParam($kparams, "id", $id); - $this->client->queueServiceActionCall("conversionprofile", "delete", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "null"); - return $resultObject; - } - - /** - * List Conversion Profiles by filter with paging support - * - * @param KalturaConversionProfileFilter $filter - * @param KalturaFilterPager $pager - * @return KalturaConversionProfileListResponse - */ - function listAction(KalturaConversionProfileFilter $filter = null, KalturaFilterPager $pager = null) - { - $kparams = array(); - if ($filter !== null) - $this->client->addParam($kparams, "filter", $filter->toParams()); - if ($pager !== null) - $this->client->addParam($kparams, "pager", $pager->toParams()); - $this->client->queueServiceActionCall("conversionprofile", "list", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaConversionProfileListResponse"); - return $resultObject; - } -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaDataService extends KalturaServiceBase -{ - function __construct(KalturaClient $client = null) - { - parent::__construct($client); - } - - /** - * Adds a new data entry - * - * @param KalturaDataEntry $dataEntry Data entry - * @return KalturaDataEntry - */ - function add(KalturaDataEntry $dataEntry) - { - $kparams = array(); - $this->client->addParam($kparams, "dataEntry", $dataEntry->toParams()); - $this->client->queueServiceActionCall("data", "add", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaDataEntry"); - return $resultObject; - } - - /** - * Get data entry by ID. - * - * @param string $entryId Data entry id - * @param int $version Desired version of the data - * @return KalturaDataEntry - */ - function get($entryId, $version = -1) - { - $kparams = array(); - $this->client->addParam($kparams, "entryId", $entryId); - $this->client->addParam($kparams, "version", $version); - $this->client->queueServiceActionCall("data", "get", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaDataEntry"); - return $resultObject; - } - - /** - * Update data entry. Only the properties that were set will be updated. - * - * @param string $entryId Data entry id to update - * @param KalturaDataEntry $documentEntry Data entry metadata to update - * @return KalturaDataEntry - */ - function update($entryId, KalturaDataEntry $documentEntry) - { - $kparams = array(); - $this->client->addParam($kparams, "entryId", $entryId); - $this->client->addParam($kparams, "documentEntry", $documentEntry->toParams()); - $this->client->queueServiceActionCall("data", "update", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaDataEntry"); - return $resultObject; - } - - /** - * Delete a data entry. - * - * @param string $entryId Data entry id to delete - * @return - */ - function delete($entryId) - { - $kparams = array(); - $this->client->addParam($kparams, "entryId", $entryId); - $this->client->queueServiceActionCall("data", "delete", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "null"); - return $resultObject; - } - - /** - * List data entries by filter with paging support. - * - * @param KalturaDataEntryFilter $filter Document entry filter - * @param KalturaFilterPager $pager Pager - * @return KalturaDataListResponse - */ - function listAction(KalturaDataEntryFilter $filter = null, KalturaFilterPager $pager = null) - { - $kparams = array(); - if ($filter !== null) - $this->client->addParam($kparams, "filter", $filter->toParams()); - if ($pager !== null) - $this->client->addParam($kparams, "pager", $pager->toParams()); - $this->client->queueServiceActionCall("data", "list", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaDataListResponse"); - return $resultObject; - } - - /** - * Serve action returan the file from dataContent field. - * - * @param string $entryId Data entry id - * @param int $version Desired version of the data - * @param bool $forceProxy Force to get the content without redirect - * @return file - */ - function serve($entryId, $version = -1, $forceProxy = false) - { - $kparams = array(); - $this->client->addParam($kparams, "entryId", $entryId); - $this->client->addParam($kparams, "version", $version); - $this->client->addParam($kparams, "forceProxy", $forceProxy); - $this->client->queueServiceActionCall("data", "serve", $kparams); - if(!$this->client->getDestinationPath() && !$this->client->getReturnServedResult()) - return $this->client->getServeUrl(); - return $this->client->doQueue(); - } -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaDocumentService extends KalturaServiceBase -{ - function __construct(KalturaClient $client = null) - { - parent::__construct($client); - } - - /** - * Add new document entry after the specific document file was uploaded and the upload token id exists - * - * @param KalturaDocumentEntry $documentEntry Document entry metadata - * @param string $uploadTokenId Upload token id - * @return KalturaDocumentEntry - */ - function addFromUploadedFile(KalturaDocumentEntry $documentEntry, $uploadTokenId) - { - $kparams = array(); - $this->client->addParam($kparams, "documentEntry", $documentEntry->toParams()); - $this->client->addParam($kparams, "uploadTokenId", $uploadTokenId); - $this->client->queueServiceActionCall("document", "addFromUploadedFile", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaDocumentEntry"); - return $resultObject; - } - - /** - * Copy entry into new entry - * - * @param string $sourceEntryId Document entry id to copy from - * @param KalturaDocumentEntry $documentEntry Document entry metadata - * @param int $sourceFlavorParamsId The flavor to be used as the new entry source, source flavor will be used if not specified - * @return KalturaDocumentEntry - */ - function addFromEntry($sourceEntryId, KalturaDocumentEntry $documentEntry = null, $sourceFlavorParamsId = null) - { - $kparams = array(); - $this->client->addParam($kparams, "sourceEntryId", $sourceEntryId); - if ($documentEntry !== null) - $this->client->addParam($kparams, "documentEntry", $documentEntry->toParams()); - $this->client->addParam($kparams, "sourceFlavorParamsId", $sourceFlavorParamsId); - $this->client->queueServiceActionCall("document", "addFromEntry", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaDocumentEntry"); - return $resultObject; - } - - /** - * Copy flavor asset into new entry - * - * @param string $sourceFlavorAssetId Flavor asset id to be used as the new entry source - * @param KalturaDocumentEntry $documentEntry Document entry metadata - * @return KalturaDocumentEntry - */ - function addFromFlavorAsset($sourceFlavorAssetId, KalturaDocumentEntry $documentEntry = null) - { - $kparams = array(); - $this->client->addParam($kparams, "sourceFlavorAssetId", $sourceFlavorAssetId); - if ($documentEntry !== null) - $this->client->addParam($kparams, "documentEntry", $documentEntry->toParams()); - $this->client->queueServiceActionCall("document", "addFromFlavorAsset", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaDocumentEntry"); - return $resultObject; - } - - /** - * Convert entry - * - * @param string $entryId Document entry id - * @param int $conversionProfileId - * @param array $dynamicConversionAttributes - * @return int - */ - function convert($entryId, $conversionProfileId = null, array $dynamicConversionAttributes = null) - { - $kparams = array(); - $this->client->addParam($kparams, "entryId", $entryId); - $this->client->addParam($kparams, "conversionProfileId", $conversionProfileId); - if ($dynamicConversionAttributes !== null) - foreach($dynamicConversionAttributes as $index => $obj) - { - $this->client->addParam($kparams, "dynamicConversionAttributes:$index", $obj->toParams()); - } - $this->client->queueServiceActionCall("document", "convert", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "integer"); - return $resultObject; - } - - /** - * Get document entry by ID. - * - * @param string $entryId Document entry id - * @param int $version Desired version of the data - * @return KalturaDocumentEntry - */ - function get($entryId, $version = -1) - { - $kparams = array(); - $this->client->addParam($kparams, "entryId", $entryId); - $this->client->addParam($kparams, "version", $version); - $this->client->queueServiceActionCall("document", "get", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaDocumentEntry"); - return $resultObject; - } - - /** - * Update document entry. Only the properties that were set will be updated. - * - * @param string $entryId Document entry id to update - * @param KalturaDocumentEntry $documentEntry Document entry metadata to update - * @return KalturaDocumentEntry - */ - function update($entryId, KalturaDocumentEntry $documentEntry) - { - $kparams = array(); - $this->client->addParam($kparams, "entryId", $entryId); - $this->client->addParam($kparams, "documentEntry", $documentEntry->toParams()); - $this->client->queueServiceActionCall("document", "update", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaDocumentEntry"); - return $resultObject; - } - - /** - * Delete a document entry. - * - * @param string $entryId Document entry id to delete - * @return - */ - function delete($entryId) - { - $kparams = array(); - $this->client->addParam($kparams, "entryId", $entryId); - $this->client->queueServiceActionCall("document", "delete", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "null"); - return $resultObject; - } - - /** - * List document entries by filter with paging support. - * - * @param KalturaDocumentEntryFilter $filter Document entry filter - * @param KalturaFilterPager $pager Pager - * @return KalturaDocumentListResponse - */ - function listAction(KalturaDocumentEntryFilter $filter = null, KalturaFilterPager $pager = null) - { - $kparams = array(); - if ($filter !== null) - $this->client->addParam($kparams, "filter", $filter->toParams()); - if ($pager !== null) - $this->client->addParam($kparams, "pager", $pager->toParams()); - $this->client->queueServiceActionCall("document", "list", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaDocumentListResponse"); - return $resultObject; - } - - /** - * Upload a document file to Kaltura, then the file can be used to create a document entry. - * - * @param file $fileData The file data - * @return string - */ - function upload($fileData) - { - $kparams = array(); - $kfiles = array(); - $this->client->addParam($kfiles, "fileData", $fileData); - $this->client->queueServiceActionCall("document", "upload", $kparams, $kfiles); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "string"); - return $resultObject; - } - - /** - * This will queue a batch job for converting the document file to swf - Returns the URL where the new swf will be available - * - * @param string $entryId - * @return string - */ - function convertPptToSwf($entryId) - { - $kparams = array(); - $this->client->addParam($kparams, "entryId", $entryId); - $this->client->queueServiceActionCall("document", "convertPptToSwf", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "string"); - return $resultObject; - } - - /** - * Serves the file content - * - * @param string $entryId Document entry id - * @param string $flavorAssetId Flavor asset id - * @param bool $forceProxy Force to get the content without redirect - * @return file - */ - function serve($entryId, $flavorAssetId = null, $forceProxy = false) - { - $kparams = array(); - $this->client->addParam($kparams, "entryId", $entryId); - $this->client->addParam($kparams, "flavorAssetId", $flavorAssetId); - $this->client->addParam($kparams, "forceProxy", $forceProxy); - $this->client->queueServiceActionCall("document", "serve", $kparams); - if(!$this->client->getDestinationPath() && !$this->client->getReturnServedResult()) - return $this->client->getServeUrl(); - return $this->client->doQueue(); - } - - /** - * Serves the file content - * - * @param string $entryId Document entry id - * @param string $flavorParamsId Flavor params id - * @param bool $forceProxy Force to get the content without redirect - * @return file - */ - function serveByFlavorParamsId($entryId, $flavorParamsId = null, $forceProxy = false) - { - $kparams = array(); - $this->client->addParam($kparams, "entryId", $entryId); - $this->client->addParam($kparams, "flavorParamsId", $flavorParamsId); - $this->client->addParam($kparams, "forceProxy", $forceProxy); - $this->client->queueServiceActionCall("document", "serveByFlavorParamsId", $kparams); - if(!$this->client->getDestinationPath() && !$this->client->getReturnServedResult()) - return $this->client->getServeUrl(); - return $this->client->doQueue(); - } - - /** - * Replace content associated with the given document entry. - * - * @param string $entryId Document entry id to update - * @param KalturaResource $resource Resource to be used to replace entry doc content - * @param int $conversionProfileId The conversion profile id to be used on the entry - * @return KalturaDocumentEntry - */ - function updateContent($entryId, KalturaResource $resource, $conversionProfileId = null) - { - $kparams = array(); - $this->client->addParam($kparams, "entryId", $entryId); - $this->client->addParam($kparams, "resource", $resource->toParams()); - $this->client->addParam($kparams, "conversionProfileId", $conversionProfileId); - $this->client->queueServiceActionCall("document", "updateContent", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaDocumentEntry"); - return $resultObject; - } - - /** - * Approves document replacement - * - * @param string $entryId Document entry id to replace - * @return KalturaDocumentEntry - */ - function approveReplace($entryId) - { - $kparams = array(); - $this->client->addParam($kparams, "entryId", $entryId); - $this->client->queueServiceActionCall("document", "approveReplace", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaDocumentEntry"); - return $resultObject; - } - - /** - * Cancels document replacement - * - * @param string $entryId Document entry id to cancel - * @return KalturaDocumentEntry - */ - function cancelReplace($entryId) - { - $kparams = array(); - $this->client->addParam($kparams, "entryId", $entryId); - $this->client->queueServiceActionCall("document", "cancelReplace", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaDocumentEntry"); - return $resultObject; - } -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaEmailIngestionProfileService extends KalturaServiceBase -{ - function __construct(KalturaClient $client = null) - { - parent::__construct($client); - } - - /** - * EmailIngestionProfile Add action allows you to add a EmailIngestionProfile to Kaltura DB - * - * @param KalturaEmailIngestionProfile $EmailIP Mandatory input parameter of type KalturaEmailIngestionProfile - * @return KalturaEmailIngestionProfile - */ - function add(KalturaEmailIngestionProfile $EmailIP) - { - $kparams = array(); - $this->client->addParam($kparams, "EmailIP", $EmailIP->toParams()); - $this->client->queueServiceActionCall("emailingestionprofile", "add", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaEmailIngestionProfile"); - return $resultObject; - } - - /** - * Retrieve a EmailIngestionProfile by email address - * - * @param string $emailAddress - * @return KalturaEmailIngestionProfile - */ - function getByEmailAddress($emailAddress) - { - $kparams = array(); - $this->client->addParam($kparams, "emailAddress", $emailAddress); - $this->client->queueServiceActionCall("emailingestionprofile", "getByEmailAddress", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaEmailIngestionProfile"); - return $resultObject; - } - - /** - * Retrieve a EmailIngestionProfile by id - * - * @param int $id - * @return KalturaEmailIngestionProfile - */ - function get($id) - { - $kparams = array(); - $this->client->addParam($kparams, "id", $id); - $this->client->queueServiceActionCall("emailingestionprofile", "get", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaEmailIngestionProfile"); - return $resultObject; - } - - /** - * Update an existing EmailIngestionProfile - * - * @param int $id - * @param KalturaEmailIngestionProfile $EmailIP - * @return KalturaEmailIngestionProfile - */ - function update($id, KalturaEmailIngestionProfile $EmailIP) - { - $kparams = array(); - $this->client->addParam($kparams, "id", $id); - $this->client->addParam($kparams, "EmailIP", $EmailIP->toParams()); - $this->client->queueServiceActionCall("emailingestionprofile", "update", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaEmailIngestionProfile"); - return $resultObject; - } - - /** - * Delete an existing EmailIngestionProfile - * - * @param int $id - * @return - */ - function delete($id) - { - $kparams = array(); - $this->client->addParam($kparams, "id", $id); - $this->client->queueServiceActionCall("emailingestionprofile", "delete", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "null"); - return $resultObject; - } - - /** - * Add KalturaMediaEntry from email ingestion - * - * @param KalturaMediaEntry $mediaEntry Media entry metadata - * @param string $uploadTokenId Upload token id - * @param int $emailProfId - * @param string $fromAddress - * @param string $emailMsgId - * @return KalturaMediaEntry - */ - function addMediaEntry(KalturaMediaEntry $mediaEntry, $uploadTokenId, $emailProfId, $fromAddress, $emailMsgId) - { - $kparams = array(); - $this->client->addParam($kparams, "mediaEntry", $mediaEntry->toParams()); - $this->client->addParam($kparams, "uploadTokenId", $uploadTokenId); - $this->client->addParam($kparams, "emailProfId", $emailProfId); - $this->client->addParam($kparams, "fromAddress", $fromAddress); - $this->client->addParam($kparams, "emailMsgId", $emailMsgId); - $this->client->queueServiceActionCall("emailingestionprofile", "addMediaEntry", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaMediaEntry"); - return $resultObject; - } -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaFileAssetService extends KalturaServiceBase -{ - function __construct(KalturaClient $client = null) - { - parent::__construct($client); - } - - /** - * Add new file asset - * - * @param KalturaFileAsset $fileAsset - * @return KalturaFileAsset - */ - function add(KalturaFileAsset $fileAsset) - { - $kparams = array(); - $this->client->addParam($kparams, "fileAsset", $fileAsset->toParams()); - $this->client->queueServiceActionCall("fileasset", "add", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaFileAsset"); - return $resultObject; - } - - /** - * Get file asset by id - * - * @param int $id - * @return KalturaFileAsset - */ - function get($id) - { - $kparams = array(); - $this->client->addParam($kparams, "id", $id); - $this->client->queueServiceActionCall("fileasset", "get", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaFileAsset"); - return $resultObject; - } - - /** - * Update file asset by id - * - * @param int $id - * @param KalturaFileAsset $fileAsset - * @return KalturaFileAsset - */ - function update($id, KalturaFileAsset $fileAsset) - { - $kparams = array(); - $this->client->addParam($kparams, "id", $id); - $this->client->addParam($kparams, "fileAsset", $fileAsset->toParams()); - $this->client->queueServiceActionCall("fileasset", "update", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaFileAsset"); - return $resultObject; - } - - /** - * Delete file asset by id - * - * @param int $id - * @return - */ - function delete($id) - { - $kparams = array(); - $this->client->addParam($kparams, "id", $id); - $this->client->queueServiceActionCall("fileasset", "delete", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "null"); - return $resultObject; - } - - /** - * Serve file asset by id - * - * @param int $id - * @return file - */ - function serve($id) - { - $kparams = array(); - $this->client->addParam($kparams, "id", $id); - $this->client->queueServiceActionCall("fileasset", "serve", $kparams); - if(!$this->client->getDestinationPath() && !$this->client->getReturnServedResult()) - return $this->client->getServeUrl(); - return $this->client->doQueue(); - } - - /** - * Set content of file asset - * - * @param string $id - * @param KalturaContentResource $contentResource - * @return KalturaFileAsset - */ - function setContent($id, KalturaContentResource $contentResource) - { - $kparams = array(); - $this->client->addParam($kparams, "id", $id); - $this->client->addParam($kparams, "contentResource", $contentResource->toParams()); - $this->client->queueServiceActionCall("fileasset", "setContent", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaFileAsset"); - return $resultObject; - } - - /** - * List file assets by filter and pager - * - * @param KalturaFileAssetFilter $filter - * @param KalturaFilterPager $pager - * @return KalturaFileAssetListResponse - */ - function listAction(KalturaFileAssetFilter $filter, KalturaFilterPager $pager = null) - { - $kparams = array(); - $this->client->addParam($kparams, "filter", $filter->toParams()); - if ($pager !== null) - $this->client->addParam($kparams, "pager", $pager->toParams()); - $this->client->queueServiceActionCall("fileasset", "list", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaFileAssetListResponse"); - return $resultObject; - } -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaFlavorAssetService extends KalturaServiceBase -{ - function __construct(KalturaClient $client = null) - { - parent::__construct($client); - } - - /** - * Add flavor asset - * - * @param string $entryId - * @param KalturaFlavorAsset $flavorAsset - * @return KalturaFlavorAsset - */ - function add($entryId, KalturaFlavorAsset $flavorAsset) - { - $kparams = array(); - $this->client->addParam($kparams, "entryId", $entryId); - $this->client->addParam($kparams, "flavorAsset", $flavorAsset->toParams()); - $this->client->queueServiceActionCall("flavorasset", "add", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaFlavorAsset"); - return $resultObject; - } - - /** - * Update flavor asset - * - * @param string $id - * @param KalturaFlavorAsset $flavorAsset - * @return KalturaFlavorAsset - */ - function update($id, KalturaFlavorAsset $flavorAsset) - { - $kparams = array(); - $this->client->addParam($kparams, "id", $id); - $this->client->addParam($kparams, "flavorAsset", $flavorAsset->toParams()); - $this->client->queueServiceActionCall("flavorasset", "update", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaFlavorAsset"); - return $resultObject; - } - - /** - * Update content of flavor asset - * - * @param string $id - * @param KalturaContentResource $contentResource - * @return KalturaFlavorAsset - */ - function setContent($id, KalturaContentResource $contentResource) - { - $kparams = array(); - $this->client->addParam($kparams, "id", $id); - $this->client->addParam($kparams, "contentResource", $contentResource->toParams()); - $this->client->queueServiceActionCall("flavorasset", "setContent", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaFlavorAsset"); - return $resultObject; - } - - /** - * Get Flavor Asset by ID - * - * @param string $id - * @return KalturaFlavorAsset - */ - function get($id) - { - $kparams = array(); - $this->client->addParam($kparams, "id", $id); - $this->client->queueServiceActionCall("flavorasset", "get", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaFlavorAsset"); - return $resultObject; - } - - /** - * Get Flavor Assets for Entry - * - * @param string $entryId - * @return array - */ - function getByEntryId($entryId) - { - $kparams = array(); - $this->client->addParam($kparams, "entryId", $entryId); - $this->client->queueServiceActionCall("flavorasset", "getByEntryId", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "array"); - return $resultObject; - } - - /** - * List Flavor Assets by filter and pager - * - * @param KalturaAssetFilter $filter - * @param KalturaFilterPager $pager - * @return KalturaFlavorAssetListResponse - */ - function listAction(KalturaAssetFilter $filter = null, KalturaFilterPager $pager = null) - { - $kparams = array(); - if ($filter !== null) - $this->client->addParam($kparams, "filter", $filter->toParams()); - if ($pager !== null) - $this->client->addParam($kparams, "pager", $pager->toParams()); - $this->client->queueServiceActionCall("flavorasset", "list", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaFlavorAssetListResponse"); - return $resultObject; - } - - /** - * Get web playable Flavor Assets for Entry - * - * @param string $entryId - * @return array - */ - function getWebPlayableByEntryId($entryId) - { - $kparams = array(); - $this->client->addParam($kparams, "entryId", $entryId); - $this->client->queueServiceActionCall("flavorasset", "getWebPlayableByEntryId", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "array"); - return $resultObject; - } - - /** - * Add and convert new Flavor Asset for Entry with specific Flavor Params - * - * @param string $entryId - * @param int $flavorParamsId - * @param int $priority - * @return - */ - function convert($entryId, $flavorParamsId, $priority = 0) - { - $kparams = array(); - $this->client->addParam($kparams, "entryId", $entryId); - $this->client->addParam($kparams, "flavorParamsId", $flavorParamsId); - $this->client->addParam($kparams, "priority", $priority); - $this->client->queueServiceActionCall("flavorasset", "convert", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "null"); - return $resultObject; - } - - /** - * Reconvert Flavor Asset by ID - * - * @param string $id Flavor Asset ID - * @return - */ - function reconvert($id) - { - $kparams = array(); - $this->client->addParam($kparams, "id", $id); - $this->client->queueServiceActionCall("flavorasset", "reconvert", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "null"); - return $resultObject; - } - - /** - * Delete Flavor Asset by ID - * - * @param string $id - * @return - */ - function delete($id) - { - $kparams = array(); - $this->client->addParam($kparams, "id", $id); - $this->client->queueServiceActionCall("flavorasset", "delete", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "null"); - return $resultObject; - } - - /** - * Get download URL for the asset - * - * @param string $id - * @param int $storageId - * @param bool $forceProxy - * @return string - */ - function getUrl($id, $storageId = null, $forceProxy = false) - { - $kparams = array(); - $this->client->addParam($kparams, "id", $id); - $this->client->addParam($kparams, "storageId", $storageId); - $this->client->addParam($kparams, "forceProxy", $forceProxy); - $this->client->queueServiceActionCall("flavorasset", "getUrl", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "string"); - return $resultObject; - } - - /** - * Get remote storage existing paths for the asset - * - * @param string $id - * @return KalturaRemotePathListResponse - */ - function getRemotePaths($id) - { - $kparams = array(); - $this->client->addParam($kparams, "id", $id); - $this->client->queueServiceActionCall("flavorasset", "getRemotePaths", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaRemotePathListResponse"); - return $resultObject; - } - - /** - * Get download URL for the Flavor Asset - * - * @param string $id - * @param bool $useCdn - * @return string - */ - function getDownloadUrl($id, $useCdn = false) - { - $kparams = array(); - $this->client->addParam($kparams, "id", $id); - $this->client->addParam($kparams, "useCdn", $useCdn); - $this->client->queueServiceActionCall("flavorasset", "getDownloadUrl", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "string"); - return $resultObject; - } - - /** - * Get Flavor Asset with the relevant Flavor Params (Flavor Params can exist without Flavor Asset & vice versa) - * - * @param string $entryId - * @return array - */ - function getFlavorAssetsWithParams($entryId) - { - $kparams = array(); - $this->client->addParam($kparams, "entryId", $entryId); - $this->client->queueServiceActionCall("flavorasset", "getFlavorAssetsWithParams", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "array"); - return $resultObject; - } - - /** - * Manually export an asset - * - * @param string $assetId - * @param int $storageProfileId - * @return KalturaFlavorAsset - */ - function export($assetId, $storageProfileId) - { - $kparams = array(); - $this->client->addParam($kparams, "assetId", $assetId); - $this->client->addParam($kparams, "storageProfileId", $storageProfileId); - $this->client->queueServiceActionCall("flavorasset", "export", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaFlavorAsset"); - return $resultObject; - } - - /** - * Set a given flavor as the original flavor - * - * @param string $assetId - * @return - */ - function setAsSource($assetId) - { - $kparams = array(); - $this->client->addParam($kparams, "assetId", $assetId); - $this->client->queueServiceActionCall("flavorasset", "setAsSource", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "null"); - return $resultObject; - } -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaFlavorParamsOutputService extends KalturaServiceBase -{ - function __construct(KalturaClient $client = null) - { - parent::__construct($client); - } - - /** - * Get flavor params output object by ID - * - * @param int $id - * @return KalturaFlavorParamsOutput - */ - function get($id) - { - $kparams = array(); - $this->client->addParam($kparams, "id", $id); - $this->client->queueServiceActionCall("flavorparamsoutput", "get", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaFlavorParamsOutput"); - return $resultObject; - } - - /** - * List flavor params output objects by filter and pager - * - * @param KalturaFlavorParamsOutputFilter $filter - * @param KalturaFilterPager $pager - * @return KalturaFlavorParamsOutputListResponse - */ - function listAction(KalturaFlavorParamsOutputFilter $filter = null, KalturaFilterPager $pager = null) - { - $kparams = array(); - if ($filter !== null) - $this->client->addParam($kparams, "filter", $filter->toParams()); - if ($pager !== null) - $this->client->addParam($kparams, "pager", $pager->toParams()); - $this->client->queueServiceActionCall("flavorparamsoutput", "list", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaFlavorParamsOutputListResponse"); - return $resultObject; - } -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaFlavorParamsService extends KalturaServiceBase -{ - function __construct(KalturaClient $client = null) - { - parent::__construct($client); - } - - /** - * Add new Flavor Params - * - * @param KalturaFlavorParams $flavorParams - * @return KalturaFlavorParams - */ - function add(KalturaFlavorParams $flavorParams) - { - $kparams = array(); - $this->client->addParam($kparams, "flavorParams", $flavorParams->toParams()); - $this->client->queueServiceActionCall("flavorparams", "add", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaFlavorParams"); - return $resultObject; - } - - /** - * Get Flavor Params by ID - * - * @param int $id - * @return KalturaFlavorParams - */ - function get($id) - { - $kparams = array(); - $this->client->addParam($kparams, "id", $id); - $this->client->queueServiceActionCall("flavorparams", "get", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaFlavorParams"); - return $resultObject; - } - - /** - * Update Flavor Params by ID - * - * @param int $id - * @param KalturaFlavorParams $flavorParams - * @return KalturaFlavorParams - */ - function update($id, KalturaFlavorParams $flavorParams) - { - $kparams = array(); - $this->client->addParam($kparams, "id", $id); - $this->client->addParam($kparams, "flavorParams", $flavorParams->toParams()); - $this->client->queueServiceActionCall("flavorparams", "update", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaFlavorParams"); - return $resultObject; - } - - /** - * Delete Flavor Params by ID - * - * @param int $id - * @return - */ - function delete($id) - { - $kparams = array(); - $this->client->addParam($kparams, "id", $id); - $this->client->queueServiceActionCall("flavorparams", "delete", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "null"); - return $resultObject; - } - - /** - * List Flavor Params by filter with paging support (By default - all system default params will be listed too) - * - * @param KalturaFlavorParamsFilter $filter - * @param KalturaFilterPager $pager - * @return KalturaFlavorParamsListResponse - */ - function listAction(KalturaFlavorParamsFilter $filter = null, KalturaFilterPager $pager = null) - { - $kparams = array(); - if ($filter !== null) - $this->client->addParam($kparams, "filter", $filter->toParams()); - if ($pager !== null) - $this->client->addParam($kparams, "pager", $pager->toParams()); - $this->client->queueServiceActionCall("flavorparams", "list", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaFlavorParamsListResponse"); - return $resultObject; - } - - /** - * Get Flavor Params by Conversion Profile ID - * - * @param int $conversionProfileId - * @return array - */ - function getByConversionProfileId($conversionProfileId) - { - $kparams = array(); - $this->client->addParam($kparams, "conversionProfileId", $conversionProfileId); - $this->client->queueServiceActionCall("flavorparams", "getByConversionProfileId", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "array"); - return $resultObject; - } -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaLiveChannelSegmentService extends KalturaServiceBase -{ - function __construct(KalturaClient $client = null) - { - parent::__construct($client); - } - - /** - * Add new live channel segment - * - * @param KalturaLiveChannelSegment $liveChannelSegment - * @return KalturaLiveChannelSegment - */ - function add(KalturaLiveChannelSegment $liveChannelSegment) - { - $kparams = array(); - $this->client->addParam($kparams, "liveChannelSegment", $liveChannelSegment->toParams()); - $this->client->queueServiceActionCall("livechannelsegment", "add", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaLiveChannelSegment"); - return $resultObject; - } - - /** - * Get live channel segment by id - * - * @param int $id - * @return KalturaLiveChannelSegment - */ - function get($id) - { - $kparams = array(); - $this->client->addParam($kparams, "id", $id); - $this->client->queueServiceActionCall("livechannelsegment", "get", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaLiveChannelSegment"); - return $resultObject; - } - - /** - * Update live channel segment by id - * - * @param int $id - * @param KalturaLiveChannelSegment $liveChannelSegment - * @return KalturaLiveChannelSegment - */ - function update($id, KalturaLiveChannelSegment $liveChannelSegment) - { - $kparams = array(); - $this->client->addParam($kparams, "id", $id); - $this->client->addParam($kparams, "liveChannelSegment", $liveChannelSegment->toParams()); - $this->client->queueServiceActionCall("livechannelsegment", "update", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaLiveChannelSegment"); - return $resultObject; - } - - /** - * Delete live channel segment by id - * - * @param int $id - * @return - */ - function delete($id) - { - $kparams = array(); - $this->client->addParam($kparams, "id", $id); - $this->client->queueServiceActionCall("livechannelsegment", "delete", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "null"); - return $resultObject; - } - - /** - * List live channel segments by filter and pager - * - * @param KalturaLiveChannelSegmentFilter $filter - * @param KalturaFilterPager $pager - * @return KalturaLiveChannelSegmentListResponse - */ - function listAction(KalturaLiveChannelSegmentFilter $filter = null, KalturaFilterPager $pager = null) - { - $kparams = array(); - if ($filter !== null) - $this->client->addParam($kparams, "filter", $filter->toParams()); - if ($pager !== null) - $this->client->addParam($kparams, "pager", $pager->toParams()); - $this->client->queueServiceActionCall("livechannelsegment", "list", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaLiveChannelSegmentListResponse"); - return $resultObject; - } -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaLiveChannelService extends KalturaServiceBase -{ - function __construct(KalturaClient $client = null) - { - parent::__construct($client); - } - - /** - * Adds new live channel. - * - * @param KalturaLiveChannel $liveChannel Live channel metadata - * @return KalturaLiveChannel - */ - function add(KalturaLiveChannel $liveChannel) - { - $kparams = array(); - $this->client->addParam($kparams, "liveChannel", $liveChannel->toParams()); - $this->client->queueServiceActionCall("livechannel", "add", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaLiveChannel"); - return $resultObject; - } - - /** - * Get live channel by ID. - * - * @param string $id Live channel id - * @return KalturaLiveChannel - */ - function get($id) - { - $kparams = array(); - $this->client->addParam($kparams, "id", $id); - $this->client->queueServiceActionCall("livechannel", "get", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaLiveChannel"); - return $resultObject; - } - - /** - * Update live channel. Only the properties that were set will be updated. - * - * @param string $id Live channel id to update - * @param KalturaLiveChannel $liveChannel Live channel metadata to update - * @return KalturaLiveChannel - */ - function update($id, KalturaLiveChannel $liveChannel) - { - $kparams = array(); - $this->client->addParam($kparams, "id", $id); - $this->client->addParam($kparams, "liveChannel", $liveChannel->toParams()); - $this->client->queueServiceActionCall("livechannel", "update", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaLiveChannel"); - return $resultObject; - } - - /** - * Delete a live channel. - * - * @param string $id Live channel id to delete - * @return - */ - function delete($id) - { - $kparams = array(); - $this->client->addParam($kparams, "id", $id); - $this->client->queueServiceActionCall("livechannel", "delete", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "null"); - return $resultObject; - } - - /** - * List live channels by filter with paging support. - * - * @param KalturaLiveChannelFilter $filter Live channel filter - * @param KalturaFilterPager $pager Pager - * @return KalturaLiveChannelListResponse - */ - function listAction(KalturaLiveChannelFilter $filter = null, KalturaFilterPager $pager = null) - { - $kparams = array(); - if ($filter !== null) - $this->client->addParam($kparams, "filter", $filter->toParams()); - if ($pager !== null) - $this->client->addParam($kparams, "pager", $pager->toParams()); - $this->client->queueServiceActionCall("livechannel", "list", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaLiveChannelListResponse"); - return $resultObject; - } - - /** - * Delivering the status of a live channel (on-air/offline) - * - * @param string $id ID of the live channel - * @return bool - */ - function isLive($id) - { - $kparams = array(); - $this->client->addParam($kparams, "id", $id); - $this->client->queueServiceActionCall("livechannel", "isLive", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $resultObject = (bool) $resultObject; - return $resultObject; - } - - /** - * Append recorded video to live entry - * - * @param string $entryId Live entry id - * @param int $mediaServerIndex - * @param KalturaServerFileResource $resource - * @param float $duration - * @return - */ - function appendRecording($entryId, $mediaServerIndex, KalturaServerFileResource $resource, $duration) - { - $kparams = array(); - $this->client->addParam($kparams, "entryId", $entryId); - $this->client->addParam($kparams, "mediaServerIndex", $mediaServerIndex); - $this->client->addParam($kparams, "resource", $resource->toParams()); - $this->client->addParam($kparams, "duration", $duration); - $this->client->queueServiceActionCall("livechannel", "appendRecording", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "null"); - return $resultObject; - } - - /** - * Register media server to live entry - * - * @param string $entryId Live entry id - * @param string $hostname Media server host name - * @param int $mediaServerIndex Media server index primary / secondary - * @return KalturaLiveEntry - */ - function registerMediaServer($entryId, $hostname, $mediaServerIndex) - { - $kparams = array(); - $this->client->addParam($kparams, "entryId", $entryId); - $this->client->addParam($kparams, "hostname", $hostname); - $this->client->addParam($kparams, "mediaServerIndex", $mediaServerIndex); - $this->client->queueServiceActionCall("livechannel", "registerMediaServer", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaLiveEntry"); - return $resultObject; - } - - /** - * Unregister media server from live entry - * - * @param string $entryId Live entry id - * @param string $hostname Media server host name - * @param int $mediaServerIndex Media server index primary / secondary - * @return KalturaLiveEntry - */ - function unregisterMediaServer($entryId, $hostname, $mediaServerIndex) - { - $kparams = array(); - $this->client->addParam($kparams, "entryId", $entryId); - $this->client->addParam($kparams, "hostname", $hostname); - $this->client->addParam($kparams, "mediaServerIndex", $mediaServerIndex); - $this->client->queueServiceActionCall("livechannel", "unregisterMediaServer", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaLiveEntry"); - return $resultObject; - } - - /** - * Validates all registered media servers - * - * @param string $entryId Live entry id - * @return - */ - function validateRegisteredMediaServers($entryId) - { - $kparams = array(); - $this->client->addParam($kparams, "entryId", $entryId); - $this->client->queueServiceActionCall("livechannel", "validateRegisteredMediaServers", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "null"); - return $resultObject; - } -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaLiveStreamService extends KalturaServiceBase -{ - function __construct(KalturaClient $client = null) - { - parent::__construct($client); - } - - /** - * Adds new live stream entry. - The entry will be queued for provision. - * - * @param KalturaLiveStreamEntry $liveStreamEntry Live stream entry metadata - * @param string $sourceType Live stream source type - * @return KalturaLiveStreamEntry - */ - function add(KalturaLiveStreamEntry $liveStreamEntry, $sourceType = null) - { - $kparams = array(); - $this->client->addParam($kparams, "liveStreamEntry", $liveStreamEntry->toParams()); - $this->client->addParam($kparams, "sourceType", $sourceType); - $this->client->queueServiceActionCall("livestream", "add", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaLiveStreamEntry"); - return $resultObject; - } - - /** - * Get live stream entry by ID. - * - * @param string $entryId Live stream entry id - * @param int $version Desired version of the data - * @return KalturaLiveStreamEntry - */ - function get($entryId, $version = -1) - { - $kparams = array(); - $this->client->addParam($kparams, "entryId", $entryId); - $this->client->addParam($kparams, "version", $version); - $this->client->queueServiceActionCall("livestream", "get", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaLiveStreamEntry"); - return $resultObject; - } - - /** - * Authenticate live-stream entry against stream token and partner limitations - * - * @param string $entryId Live stream entry id - * @param string $token Live stream broadcasting token - * @return KalturaLiveStreamEntry - */ - function authenticate($entryId, $token) - { - $kparams = array(); - $this->client->addParam($kparams, "entryId", $entryId); - $this->client->addParam($kparams, "token", $token); - $this->client->queueServiceActionCall("livestream", "authenticate", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaLiveStreamEntry"); - return $resultObject; - } - - /** - * Update live stream entry. Only the properties that were set will be updated. - * - * @param string $entryId Live stream entry id to update - * @param KalturaLiveStreamEntry $liveStreamEntry Live stream entry metadata to update - * @return KalturaLiveStreamEntry - */ - function update($entryId, KalturaLiveStreamEntry $liveStreamEntry) - { - $kparams = array(); - $this->client->addParam($kparams, "entryId", $entryId); - $this->client->addParam($kparams, "liveStreamEntry", $liveStreamEntry->toParams()); - $this->client->queueServiceActionCall("livestream", "update", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaLiveStreamEntry"); - return $resultObject; - } - - /** - * Delete a live stream entry. - * - * @param string $entryId Live stream entry id to delete - * @return - */ - function delete($entryId) - { - $kparams = array(); - $this->client->addParam($kparams, "entryId", $entryId); - $this->client->queueServiceActionCall("livestream", "delete", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "null"); - return $resultObject; - } - - /** - * List live stream entries by filter with paging support. - * - * @param KalturaLiveStreamEntryFilter $filter Live stream entry filter - * @param KalturaFilterPager $pager Pager - * @return KalturaLiveStreamListResponse - */ - function listAction(KalturaLiveStreamEntryFilter $filter = null, KalturaFilterPager $pager = null) - { - $kparams = array(); - if ($filter !== null) - $this->client->addParam($kparams, "filter", $filter->toParams()); - if ($pager !== null) - $this->client->addParam($kparams, "pager", $pager->toParams()); - $this->client->queueServiceActionCall("livestream", "list", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaLiveStreamListResponse"); - return $resultObject; - } - - /** - * Update live stream entry thumbnail using a raw jpeg file - * - * @param string $entryId Live stream entry id - * @param file $fileData Jpeg file data - * @return KalturaLiveStreamEntry - */ - function updateOfflineThumbnailJpeg($entryId, $fileData) - { - $kparams = array(); - $this->client->addParam($kparams, "entryId", $entryId); - $kfiles = array(); - $this->client->addParam($kfiles, "fileData", $fileData); - $this->client->queueServiceActionCall("livestream", "updateOfflineThumbnailJpeg", $kparams, $kfiles); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaLiveStreamEntry"); - return $resultObject; - } - - /** - * Update entry thumbnail using url - * - * @param string $entryId Live stream entry id - * @param string $url File url - * @return KalturaLiveStreamEntry - */ - function updateOfflineThumbnailFromUrl($entryId, $url) - { - $kparams = array(); - $this->client->addParam($kparams, "entryId", $entryId); - $this->client->addParam($kparams, "url", $url); - $this->client->queueServiceActionCall("livestream", "updateOfflineThumbnailFromUrl", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaLiveStreamEntry"); - return $resultObject; - } - - /** - * Delivering the status of a live stream (on-air/offline) if it is possible - * - * @param string $id ID of the live stream - * @param string $protocol Protocol of the stream to test. - * @return bool - */ - function isLive($id, $protocol) - { - $kparams = array(); - $this->client->addParam($kparams, "id", $id); - $this->client->addParam($kparams, "protocol", $protocol); - $this->client->queueServiceActionCall("livestream", "isLive", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $resultObject = (bool) $resultObject; - return $resultObject; - } - - /** - * Append recorded video to live entry - * - * @param string $entryId Live entry id - * @param int $mediaServerIndex - * @param KalturaServerFileResource $resource - * @param float $duration - * @return - */ - function appendRecording($entryId, $mediaServerIndex, KalturaServerFileResource $resource, $duration) - { - $kparams = array(); - $this->client->addParam($kparams, "entryId", $entryId); - $this->client->addParam($kparams, "mediaServerIndex", $mediaServerIndex); - $this->client->addParam($kparams, "resource", $resource->toParams()); - $this->client->addParam($kparams, "duration", $duration); - $this->client->queueServiceActionCall("livestream", "appendRecording", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "null"); - return $resultObject; - } - - /** - * Register media server to live entry - * - * @param string $entryId Live entry id - * @param string $hostname Media server host name - * @param int $mediaServerIndex Media server index primary / secondary - * @return KalturaLiveEntry - */ - function registerMediaServer($entryId, $hostname, $mediaServerIndex) - { - $kparams = array(); - $this->client->addParam($kparams, "entryId", $entryId); - $this->client->addParam($kparams, "hostname", $hostname); - $this->client->addParam($kparams, "mediaServerIndex", $mediaServerIndex); - $this->client->queueServiceActionCall("livestream", "registerMediaServer", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaLiveEntry"); - return $resultObject; - } - - /** - * Unregister media server from live entry - * - * @param string $entryId Live entry id - * @param string $hostname Media server host name - * @param int $mediaServerIndex Media server index primary / secondary - * @return KalturaLiveEntry - */ - function unregisterMediaServer($entryId, $hostname, $mediaServerIndex) - { - $kparams = array(); - $this->client->addParam($kparams, "entryId", $entryId); - $this->client->addParam($kparams, "hostname", $hostname); - $this->client->addParam($kparams, "mediaServerIndex", $mediaServerIndex); - $this->client->queueServiceActionCall("livestream", "unregisterMediaServer", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaLiveEntry"); - return $resultObject; - } - - /** - * Validates all registered media servers - * - * @param string $entryId Live entry id - * @return - */ - function validateRegisteredMediaServers($entryId) - { - $kparams = array(); - $this->client->addParam($kparams, "entryId", $entryId); - $this->client->queueServiceActionCall("livestream", "validateRegisteredMediaServers", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "null"); - return $resultObject; - } -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaMediaInfoService extends KalturaServiceBase -{ - function __construct(KalturaClient $client = null) - { - parent::__construct($client); - } - - /** - * List media info objects by filter and pager - * - * @param KalturaMediaInfoFilter $filter - * @param KalturaFilterPager $pager - * @return KalturaMediaInfoListResponse - */ - function listAction(KalturaMediaInfoFilter $filter = null, KalturaFilterPager $pager = null) - { - $kparams = array(); - if ($filter !== null) - $this->client->addParam($kparams, "filter", $filter->toParams()); - if ($pager !== null) - $this->client->addParam($kparams, "pager", $pager->toParams()); - $this->client->queueServiceActionCall("mediainfo", "list", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaMediaInfoListResponse"); - return $resultObject; - } -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaMediaServerService extends KalturaServiceBase -{ - function __construct(KalturaClient $client = null) - { - parent::__construct($client); - } - - /** - * Get media server by hostname - * - * @param string $hostname - * @return KalturaMediaServer - */ - function get($hostname) - { - $kparams = array(); - $this->client->addParam($kparams, "hostname", $hostname); - $this->client->queueServiceActionCall("mediaserver", "get", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaMediaServer"); - return $resultObject; - } - - /** - * Update media server status - * - * @param string $hostname - * @param KalturaMediaServerStatus $mediaServerStatus - * @return KalturaMediaServer - */ - function reportStatus($hostname, KalturaMediaServerStatus $mediaServerStatus) - { - $kparams = array(); - $this->client->addParam($kparams, "hostname", $hostname); - $this->client->addParam($kparams, "mediaServerStatus", $mediaServerStatus->toParams()); - $this->client->queueServiceActionCall("mediaserver", "reportStatus", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaMediaServer"); - return $resultObject; - } -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaMediaService extends KalturaServiceBase -{ - function __construct(KalturaClient $client = null) - { - parent::__construct($client); - } - - /** - * Add entry - * - * @param KalturaMediaEntry $entry - * @return KalturaMediaEntry - */ - function add(KalturaMediaEntry $entry) - { - $kparams = array(); - $this->client->addParam($kparams, "entry", $entry->toParams()); - $this->client->queueServiceActionCall("media", "add", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaMediaEntry"); - return $resultObject; - } - - /** - * Add content to media entry which is not yet associated with content (therefore is in status NO_CONTENT). - If the requirement is to replace the entry's associated content, use action updateContent. - * - * @param string $entryId - * @param KalturaResource $resource - * @return KalturaMediaEntry - */ - function addContent($entryId, KalturaResource $resource = null) - { - $kparams = array(); - $this->client->addParam($kparams, "entryId", $entryId); - if ($resource !== null) - $this->client->addParam($kparams, "resource", $resource->toParams()); - $this->client->queueServiceActionCall("media", "addContent", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaMediaEntry"); - return $resultObject; - } - - /** - * Adds new media entry by importing an HTTP or FTP URL. - The entry will be queued for import and then for conversion. - * - * @param KalturaMediaEntry $mediaEntry Media entry metadata - * @param string $url An HTTP or FTP URL - * @return KalturaMediaEntry - */ - function addFromUrl(KalturaMediaEntry $mediaEntry, $url) - { - $kparams = array(); - $this->client->addParam($kparams, "mediaEntry", $mediaEntry->toParams()); - $this->client->addParam($kparams, "url", $url); - $this->client->queueServiceActionCall("media", "addFromUrl", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaMediaEntry"); - return $resultObject; - } - - /** - * Adds new media entry by importing the media file from a search provider. - This action should be used with the search service result. - * - * @param KalturaMediaEntry $mediaEntry Media entry metadata - * @param KalturaSearchResult $searchResult Result object from search service - * @return KalturaMediaEntry - */ - function addFromSearchResult(KalturaMediaEntry $mediaEntry = null, KalturaSearchResult $searchResult = null) - { - $kparams = array(); - if ($mediaEntry !== null) - $this->client->addParam($kparams, "mediaEntry", $mediaEntry->toParams()); - if ($searchResult !== null) - $this->client->addParam($kparams, "searchResult", $searchResult->toParams()); - $this->client->queueServiceActionCall("media", "addFromSearchResult", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaMediaEntry"); - return $resultObject; - } - - /** - * Add new entry after the specific media file was uploaded and the upload token id exists - * - * @param KalturaMediaEntry $mediaEntry Media entry metadata - * @param string $uploadTokenId Upload token id - * @return KalturaMediaEntry - */ - function addFromUploadedFile(KalturaMediaEntry $mediaEntry, $uploadTokenId) - { - $kparams = array(); - $this->client->addParam($kparams, "mediaEntry", $mediaEntry->toParams()); - $this->client->addParam($kparams, "uploadTokenId", $uploadTokenId); - $this->client->queueServiceActionCall("media", "addFromUploadedFile", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaMediaEntry"); - return $resultObject; - } - - /** - * Add new entry after the file was recored on the server and the token id exists - * - * @param KalturaMediaEntry $mediaEntry Media entry metadata - * @param string $webcamTokenId Token id for the recored webcam file - * @return KalturaMediaEntry - */ - function addFromRecordedWebcam(KalturaMediaEntry $mediaEntry, $webcamTokenId) - { - $kparams = array(); - $this->client->addParam($kparams, "mediaEntry", $mediaEntry->toParams()); - $this->client->addParam($kparams, "webcamTokenId", $webcamTokenId); - $this->client->queueServiceActionCall("media", "addFromRecordedWebcam", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaMediaEntry"); - return $resultObject; - } - - /** - * Copy entry into new entry - * - * @param string $sourceEntryId Media entry id to copy from - * @param KalturaMediaEntry $mediaEntry Media entry metadata - * @param int $sourceFlavorParamsId The flavor to be used as the new entry source, source flavor will be used if not specified - * @return KalturaMediaEntry - */ - function addFromEntry($sourceEntryId, KalturaMediaEntry $mediaEntry = null, $sourceFlavorParamsId = null) - { - $kparams = array(); - $this->client->addParam($kparams, "sourceEntryId", $sourceEntryId); - if ($mediaEntry !== null) - $this->client->addParam($kparams, "mediaEntry", $mediaEntry->toParams()); - $this->client->addParam($kparams, "sourceFlavorParamsId", $sourceFlavorParamsId); - $this->client->queueServiceActionCall("media", "addFromEntry", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaMediaEntry"); - return $resultObject; - } - - /** - * Copy flavor asset into new entry - * - * @param string $sourceFlavorAssetId Flavor asset id to be used as the new entry source - * @param KalturaMediaEntry $mediaEntry Media entry metadata - * @return KalturaMediaEntry - */ - function addFromFlavorAsset($sourceFlavorAssetId, KalturaMediaEntry $mediaEntry = null) - { - $kparams = array(); - $this->client->addParam($kparams, "sourceFlavorAssetId", $sourceFlavorAssetId); - if ($mediaEntry !== null) - $this->client->addParam($kparams, "mediaEntry", $mediaEntry->toParams()); - $this->client->queueServiceActionCall("media", "addFromFlavorAsset", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaMediaEntry"); - return $resultObject; - } - - /** - * Convert entry - * - * @param string $entryId Media entry id - * @param int $conversionProfileId - * @param array $dynamicConversionAttributes - * @return int - */ - function convert($entryId, $conversionProfileId = null, array $dynamicConversionAttributes = null) - { - $kparams = array(); - $this->client->addParam($kparams, "entryId", $entryId); - $this->client->addParam($kparams, "conversionProfileId", $conversionProfileId); - if ($dynamicConversionAttributes !== null) - foreach($dynamicConversionAttributes as $index => $obj) - { - $this->client->addParam($kparams, "dynamicConversionAttributes:$index", $obj->toParams()); - } - $this->client->queueServiceActionCall("media", "convert", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "integer"); - return $resultObject; - } - - /** - * Get media entry by ID. - * - * @param string $entryId Media entry id - * @param int $version Desired version of the data - * @return KalturaMediaEntry - */ - function get($entryId, $version = -1) - { - $kparams = array(); - $this->client->addParam($kparams, "entryId", $entryId); - $this->client->addParam($kparams, "version", $version); - $this->client->queueServiceActionCall("media", "get", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaMediaEntry"); - return $resultObject; - } - - /** - * Get MRSS by entry id - XML will return as an escaped string - * - * @param string $entryId Entry id - * @param array $extendingItemsArray - * @return string - */ - function getMrss($entryId, array $extendingItemsArray = null) - { - $kparams = array(); - $this->client->addParam($kparams, "entryId", $entryId); - if ($extendingItemsArray !== null) - foreach($extendingItemsArray as $index => $obj) - { - $this->client->addParam($kparams, "extendingItemsArray:$index", $obj->toParams()); - } - $this->client->queueServiceActionCall("media", "getMrss", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "string"); - return $resultObject; - } - - /** - * Update media entry. Only the properties that were set will be updated. - * - * @param string $entryId Media entry id to update - * @param KalturaMediaEntry $mediaEntry Media entry metadata to update - * @return KalturaMediaEntry - */ - function update($entryId, KalturaMediaEntry $mediaEntry) - { - $kparams = array(); - $this->client->addParam($kparams, "entryId", $entryId); - $this->client->addParam($kparams, "mediaEntry", $mediaEntry->toParams()); - $this->client->queueServiceActionCall("media", "update", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaMediaEntry"); - return $resultObject; - } - - /** - * Replace content associated with the media entry. - * - * @param string $entryId Media entry id to update - * @param KalturaResource $resource Resource to be used to replace entry media content - * @param int $conversionProfileId The conversion profile id to be used on the entry - * @return KalturaMediaEntry - */ - function updateContent($entryId, KalturaResource $resource, $conversionProfileId = null) - { - $kparams = array(); - $this->client->addParam($kparams, "entryId", $entryId); - $this->client->addParam($kparams, "resource", $resource->toParams()); - $this->client->addParam($kparams, "conversionProfileId", $conversionProfileId); - $this->client->queueServiceActionCall("media", "updateContent", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaMediaEntry"); - return $resultObject; - } - - /** - * Delete a media entry. - * - * @param string $entryId Media entry id to delete - * @return - */ - function delete($entryId) - { - $kparams = array(); - $this->client->addParam($kparams, "entryId", $entryId); - $this->client->queueServiceActionCall("media", "delete", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "null"); - return $resultObject; - } - - /** - * Approves media replacement - * - * @param string $entryId Media entry id to replace - * @return KalturaMediaEntry - */ - function approveReplace($entryId) - { - $kparams = array(); - $this->client->addParam($kparams, "entryId", $entryId); - $this->client->queueServiceActionCall("media", "approveReplace", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaMediaEntry"); - return $resultObject; - } - - /** - * Cancels media replacement - * - * @param string $entryId Media entry id to cancel - * @return KalturaMediaEntry - */ - function cancelReplace($entryId) - { - $kparams = array(); - $this->client->addParam($kparams, "entryId", $entryId); - $this->client->queueServiceActionCall("media", "cancelReplace", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaMediaEntry"); - return $resultObject; - } - - /** - * List media entries by filter with paging support. - * - * @param KalturaMediaEntryFilter $filter Media entry filter - * @param KalturaFilterPager $pager Pager - * @return KalturaMediaListResponse - */ - function listAction(KalturaMediaEntryFilter $filter = null, KalturaFilterPager $pager = null) - { - $kparams = array(); - if ($filter !== null) - $this->client->addParam($kparams, "filter", $filter->toParams()); - if ($pager !== null) - $this->client->addParam($kparams, "pager", $pager->toParams()); - $this->client->queueServiceActionCall("media", "list", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaMediaListResponse"); - return $resultObject; - } - - /** - * Count media entries by filter. - * - * @param KalturaMediaEntryFilter $filter Media entry filter - * @return int - */ - function count(KalturaMediaEntryFilter $filter = null) - { - $kparams = array(); - if ($filter !== null) - $this->client->addParam($kparams, "filter", $filter->toParams()); - $this->client->queueServiceActionCall("media", "count", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "integer"); - return $resultObject; - } - - /** - * Upload a media file to Kaltura, then the file can be used to create a media entry. - * - * @param file $fileData The file data - * @return string - */ - function upload($fileData) - { - $kparams = array(); - $kfiles = array(); - $this->client->addParam($kfiles, "fileData", $fileData); - $this->client->queueServiceActionCall("media", "upload", $kparams, $kfiles); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "string"); - return $resultObject; - } - - /** - * Update media entry thumbnail by a specified time offset (In seconds) - If flavor params id not specified, source flavor will be used by default - * - * @param string $entryId Media entry id - * @param int $timeOffset Time offset (in seconds) - * @param int $flavorParamsId The flavor params id to be used - * @return KalturaMediaEntry - */ - function updateThumbnail($entryId, $timeOffset, $flavorParamsId = null) - { - $kparams = array(); - $this->client->addParam($kparams, "entryId", $entryId); - $this->client->addParam($kparams, "timeOffset", $timeOffset); - $this->client->addParam($kparams, "flavorParamsId", $flavorParamsId); - $this->client->queueServiceActionCall("media", "updateThumbnail", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaMediaEntry"); - return $resultObject; - } - - /** - * Update media entry thumbnail from a different entry by a specified time offset (In seconds) - If flavor params id not specified, source flavor will be used by default - * - * @param string $entryId Media entry id - * @param string $sourceEntryId Media entry id - * @param int $timeOffset Time offset (in seconds) - * @param int $flavorParamsId The flavor params id to be used - * @return KalturaMediaEntry - */ - function updateThumbnailFromSourceEntry($entryId, $sourceEntryId, $timeOffset, $flavorParamsId = null) - { - $kparams = array(); - $this->client->addParam($kparams, "entryId", $entryId); - $this->client->addParam($kparams, "sourceEntryId", $sourceEntryId); - $this->client->addParam($kparams, "timeOffset", $timeOffset); - $this->client->addParam($kparams, "flavorParamsId", $flavorParamsId); - $this->client->queueServiceActionCall("media", "updateThumbnailFromSourceEntry", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaMediaEntry"); - return $resultObject; - } - - /** - * Update media entry thumbnail using a raw jpeg file - * - * @param string $entryId Media entry id - * @param file $fileData Jpeg file data - * @return KalturaMediaEntry - */ - function updateThumbnailJpeg($entryId, $fileData) - { - $kparams = array(); - $this->client->addParam($kparams, "entryId", $entryId); - $kfiles = array(); - $this->client->addParam($kfiles, "fileData", $fileData); - $this->client->queueServiceActionCall("media", "updateThumbnailJpeg", $kparams, $kfiles); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaMediaEntry"); - return $resultObject; - } - - /** - * Update entry thumbnail using url - * - * @param string $entryId Media entry id - * @param string $url File url - * @return KalturaBaseEntry - */ - function updateThumbnailFromUrl($entryId, $url) - { - $kparams = array(); - $this->client->addParam($kparams, "entryId", $entryId); - $this->client->addParam($kparams, "url", $url); - $this->client->queueServiceActionCall("media", "updateThumbnailFromUrl", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaBaseEntry"); - return $resultObject; - } - - /** - * Request a new conversion job, this can be used to convert the media entry to a different format - * - * @param string $entryId Media entry id - * @param string $fileFormat Format to convert - * @return int - */ - function requestConversion($entryId, $fileFormat) - { - $kparams = array(); - $this->client->addParam($kparams, "entryId", $entryId); - $this->client->addParam($kparams, "fileFormat", $fileFormat); - $this->client->queueServiceActionCall("media", "requestConversion", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "integer"); - return $resultObject; - } - - /** - * Flag inappropriate media entry for moderation - * - * @param KalturaModerationFlag $moderationFlag - * @return - */ - function flag(KalturaModerationFlag $moderationFlag) - { - $kparams = array(); - $this->client->addParam($kparams, "moderationFlag", $moderationFlag->toParams()); - $this->client->queueServiceActionCall("media", "flag", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "null"); - return $resultObject; - } - - /** - * Reject the media entry and mark the pending flags (if any) as moderated (this will make the entry non playable) - * - * @param string $entryId - * @return - */ - function reject($entryId) - { - $kparams = array(); - $this->client->addParam($kparams, "entryId", $entryId); - $this->client->queueServiceActionCall("media", "reject", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "null"); - return $resultObject; - } - - /** - * Approve the media entry and mark the pending flags (if any) as moderated (this will make the entry playable) - * - * @param string $entryId - * @return - */ - function approve($entryId) - { - $kparams = array(); - $this->client->addParam($kparams, "entryId", $entryId); - $this->client->queueServiceActionCall("media", "approve", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "null"); - return $resultObject; - } - - /** - * List all pending flags for the media entry - * - * @param string $entryId - * @param KalturaFilterPager $pager - * @return KalturaModerationFlagListResponse - */ - function listFlags($entryId, KalturaFilterPager $pager = null) - { - $kparams = array(); - $this->client->addParam($kparams, "entryId", $entryId); - if ($pager !== null) - $this->client->addParam($kparams, "pager", $pager->toParams()); - $this->client->queueServiceActionCall("media", "listFlags", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaModerationFlagListResponse"); - return $resultObject; - } - - /** - * Anonymously rank a media entry, no validation is done on duplicate rankings - * - * @param string $entryId - * @param int $rank - * @return - */ - function anonymousRank($entryId, $rank) - { - $kparams = array(); - $this->client->addParam($kparams, "entryId", $entryId); - $this->client->addParam($kparams, "rank", $rank); - $this->client->queueServiceActionCall("media", "anonymousRank", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "null"); - return $resultObject; - } - - /** - * Add new bulk upload batch job - Conversion profile id can be specified in the API or in the CSV file, the one in the CSV file will be stronger. - If no conversion profile was specified, partner's default will be used - * - * @param file $fileData - * @param KalturaBulkUploadJobData $bulkUploadData - * @param KalturaBulkUploadEntryData $bulkUploadEntryData - * @return KalturaBulkUpload - */ - function bulkUploadAdd($fileData, KalturaBulkUploadJobData $bulkUploadData = null, KalturaBulkUploadEntryData $bulkUploadEntryData = null) - { - $kparams = array(); - $kfiles = array(); - $this->client->addParam($kfiles, "fileData", $fileData); - if ($bulkUploadData !== null) - $this->client->addParam($kparams, "bulkUploadData", $bulkUploadData->toParams()); - if ($bulkUploadEntryData !== null) - $this->client->addParam($kparams, "bulkUploadEntryData", $bulkUploadEntryData->toParams()); - $this->client->queueServiceActionCall("media", "bulkUploadAdd", $kparams, $kfiles); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaBulkUpload"); - return $resultObject; - } -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaMixingService extends KalturaServiceBase -{ - function __construct(KalturaClient $client = null) - { - parent::__construct($client); - } - - /** - * Adds a new mix. - If the dataContent is null, a default timeline will be created. - * - * @param KalturaMixEntry $mixEntry Mix entry metadata - * @return KalturaMixEntry - */ - function add(KalturaMixEntry $mixEntry) - { - $kparams = array(); - $this->client->addParam($kparams, "mixEntry", $mixEntry->toParams()); - $this->client->queueServiceActionCall("mixing", "add", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaMixEntry"); - return $resultObject; - } - - /** - * Get mix entry by id. - * - * @param string $entryId Mix entry id - * @param int $version Desired version of the data - * @return KalturaMixEntry - */ - function get($entryId, $version = -1) - { - $kparams = array(); - $this->client->addParam($kparams, "entryId", $entryId); - $this->client->addParam($kparams, "version", $version); - $this->client->queueServiceActionCall("mixing", "get", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaMixEntry"); - return $resultObject; - } - - /** - * Update mix entry. Only the properties that were set will be updated. - * - * @param string $entryId Mix entry id to update - * @param KalturaMixEntry $mixEntry Mix entry metadata to update - * @return KalturaMixEntry - */ - function update($entryId, KalturaMixEntry $mixEntry) - { - $kparams = array(); - $this->client->addParam($kparams, "entryId", $entryId); - $this->client->addParam($kparams, "mixEntry", $mixEntry->toParams()); - $this->client->queueServiceActionCall("mixing", "update", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaMixEntry"); - return $resultObject; - } - - /** - * Delete a mix entry. - * - * @param string $entryId Mix entry id to delete - * @return - */ - function delete($entryId) - { - $kparams = array(); - $this->client->addParam($kparams, "entryId", $entryId); - $this->client->queueServiceActionCall("mixing", "delete", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "null"); - return $resultObject; - } - - /** - * List entries by filter with paging support. - Return parameter is an array of mix entries. - * - * @param KalturaMixEntryFilter $filter Mix entry filter - * @param KalturaFilterPager $pager Pager - * @return KalturaMixListResponse - */ - function listAction(KalturaMixEntryFilter $filter = null, KalturaFilterPager $pager = null) - { - $kparams = array(); - if ($filter !== null) - $this->client->addParam($kparams, "filter", $filter->toParams()); - if ($pager !== null) - $this->client->addParam($kparams, "pager", $pager->toParams()); - $this->client->queueServiceActionCall("mixing", "list", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaMixListResponse"); - return $resultObject; - } - - /** - * Count mix entries by filter. - * - * @param KalturaMediaEntryFilter $filter Media entry filter - * @return int - */ - function count(KalturaMediaEntryFilter $filter = null) - { - $kparams = array(); - if ($filter !== null) - $this->client->addParam($kparams, "filter", $filter->toParams()); - $this->client->queueServiceActionCall("mixing", "count", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "integer"); - return $resultObject; - } - - /** - * Clones an existing mix. - * - * @param string $entryId Mix entry id to clone - * @return KalturaMixEntry - */ - function cloneAction($entryId) - { - $kparams = array(); - $this->client->addParam($kparams, "entryId", $entryId); - $this->client->queueServiceActionCall("mixing", "clone", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaMixEntry"); - return $resultObject; - } - - /** - * Appends a media entry to a the end of the mix timeline, this will save the mix timeline as a new version. - * - * @param string $mixEntryId Mix entry to append to its timeline - * @param string $mediaEntryId Media entry to append to the timeline - * @return KalturaMixEntry - */ - function appendMediaEntry($mixEntryId, $mediaEntryId) - { - $kparams = array(); - $this->client->addParam($kparams, "mixEntryId", $mixEntryId); - $this->client->addParam($kparams, "mediaEntryId", $mediaEntryId); - $this->client->queueServiceActionCall("mixing", "appendMediaEntry", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaMixEntry"); - return $resultObject; - } - - /** - * Get the mixes in which the media entry is included - * - * @param string $mediaEntryId - * @return array - */ - function getMixesByMediaId($mediaEntryId) - { - $kparams = array(); - $this->client->addParam($kparams, "mediaEntryId", $mediaEntryId); - $this->client->queueServiceActionCall("mixing", "getMixesByMediaId", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "array"); - return $resultObject; - } - - /** - * Get all ready media entries that exist in the given mix id - * - * @param string $mixId - * @param int $version Desired version to get the data from - * @return array - */ - function getReadyMediaEntries($mixId, $version = -1) - { - $kparams = array(); - $this->client->addParam($kparams, "mixId", $mixId); - $this->client->addParam($kparams, "version", $version); - $this->client->queueServiceActionCall("mixing", "getReadyMediaEntries", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "array"); - return $resultObject; - } - - /** - * Anonymously rank a mix entry, no validation is done on duplicate rankings - * - * @param string $entryId - * @param int $rank - * @return - */ - function anonymousRank($entryId, $rank) - { - $kparams = array(); - $this->client->addParam($kparams, "entryId", $entryId); - $this->client->addParam($kparams, "rank", $rank); - $this->client->queueServiceActionCall("mixing", "anonymousRank", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "null"); - return $resultObject; - } -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaNotificationService extends KalturaServiceBase -{ - function __construct(KalturaClient $client = null) - { - parent::__construct($client); - } - - /** - * Return the notifications for a specific entry id and type - * - * @param string $entryId - * @param int $type - * @return KalturaClientNotification - */ - function getClientNotification($entryId, $type) - { - $kparams = array(); - $this->client->addParam($kparams, "entryId", $entryId); - $this->client->addParam($kparams, "type", $type); - $this->client->queueServiceActionCall("notification", "getClientNotification", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaClientNotification"); - return $resultObject; - } -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaPartnerService extends KalturaServiceBase -{ - function __construct(KalturaClient $client = null) - { - parent::__construct($client); - } - - /** - * Create a new Partner object - * - * @param KalturaPartner $partner - * @param string $cmsPassword - * @param int $templatePartnerId - * @param bool $silent - * @return KalturaPartner - */ - function register(KalturaPartner $partner, $cmsPassword = "", $templatePartnerId = null, $silent = false) - { - $kparams = array(); - $this->client->addParam($kparams, "partner", $partner->toParams()); - $this->client->addParam($kparams, "cmsPassword", $cmsPassword); - $this->client->addParam($kparams, "templatePartnerId", $templatePartnerId); - $this->client->addParam($kparams, "silent", $silent); - $this->client->queueServiceActionCall("partner", "register", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaPartner"); - return $resultObject; - } - - /** - * Update details and settings of an existing partner - * - * @param KalturaPartner $partner - * @param bool $allowEmpty - * @return KalturaPartner - */ - function update(KalturaPartner $partner, $allowEmpty = false) - { - $kparams = array(); - $this->client->addParam($kparams, "partner", $partner->toParams()); - $this->client->addParam($kparams, "allowEmpty", $allowEmpty); - $this->client->queueServiceActionCall("partner", "update", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaPartner"); - return $resultObject; - } - - /** - * Retrieve partner object by Id - * - * @param int $id - * @return KalturaPartner - */ - function get($id = null) - { - $kparams = array(); - $this->client->addParam($kparams, "id", $id); - $this->client->queueServiceActionCall("partner", "get", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaPartner"); - return $resultObject; - } - - /** - * Retrieve partner secret and admin secret - * - * @param int $partnerId - * @param string $adminEmail - * @param string $cmsPassword - * @return KalturaPartner - */ - function getSecrets($partnerId, $adminEmail, $cmsPassword) - { - $kparams = array(); - $this->client->addParam($kparams, "partnerId", $partnerId); - $this->client->addParam($kparams, "adminEmail", $adminEmail); - $this->client->addParam($kparams, "cmsPassword", $cmsPassword); - $this->client->queueServiceActionCall("partner", "getSecrets", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaPartner"); - return $resultObject; - } - - /** - * Retrieve all info attributed to the partner - This action expects no parameters. It returns information for the current KS partnerId. - * - * @return KalturaPartner - */ - function getInfo() - { - $kparams = array(); - $this->client->queueServiceActionCall("partner", "getInfo", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaPartner"); - return $resultObject; - } - - /** - * Get usage statistics for a partner - Calculation is done according to partner's package - Additional data returned is a graph points of streaming usage in a timeframe - The resolution can be "days" or "months" - * - * @param int $year - * @param int $month - * @param string $resolution - * @return KalturaPartnerUsage - */ - function getUsage($year = "", $month = 1, $resolution = null) - { - $kparams = array(); - $this->client->addParam($kparams, "year", $year); - $this->client->addParam($kparams, "month", $month); - $this->client->addParam($kparams, "resolution", $resolution); - $this->client->queueServiceActionCall("partner", "getUsage", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaPartnerUsage"); - return $resultObject; - } - - /** - * Get usage statistics for a partner - Calculation is done according to partner's package - * - * @return KalturaPartnerStatistics - */ - function getStatistics() - { - $kparams = array(); - $this->client->queueServiceActionCall("partner", "getStatistics", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaPartnerStatistics"); - return $resultObject; - } - - /** - * Retrieve a list of partner objects which the current user is allowed to access. - * - * @param KalturaPartnerFilter $partnerFilter - * @param KalturaFilterPager $pager - * @return KalturaPartnerListResponse - */ - function listPartnersForUser(KalturaPartnerFilter $partnerFilter = null, KalturaFilterPager $pager = null) - { - $kparams = array(); - if ($partnerFilter !== null) - $this->client->addParam($kparams, "partnerFilter", $partnerFilter->toParams()); - if ($pager !== null) - $this->client->addParam($kparams, "pager", $pager->toParams()); - $this->client->queueServiceActionCall("partner", "listPartnersForUser", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaPartnerListResponse"); - return $resultObject; - } - - /** - * List partners by filter with paging support - Current implementation will only list the sub partners of the partner initiating the api call (using the current KS). - This action is only partially implemented to support listing sub partners of a VAR partner. - * - * @param KalturaPartnerFilter $filter - * @param KalturaFilterPager $pager - * @return KalturaPartnerListResponse - */ - function listAction(KalturaPartnerFilter $filter = null, KalturaFilterPager $pager = null) - { - $kparams = array(); - if ($filter !== null) - $this->client->addParam($kparams, "filter", $filter->toParams()); - if ($pager !== null) - $this->client->addParam($kparams, "pager", $pager->toParams()); - $this->client->queueServiceActionCall("partner", "list", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaPartnerListResponse"); - return $resultObject; - } - - /** - * List partner's current processes' statuses - * - * @return KalturaFeatureStatusListResponse - */ - function listFeatureStatus() - { - $kparams = array(); - $this->client->queueServiceActionCall("partner", "listFeatureStatus", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaFeatureStatusListResponse"); - return $resultObject; - } - - /** - * Count partner's existing sub-publishers (count includes the partner itself). - * - * @param KalturaPartnerFilter $filter - * @return int - */ - function count(KalturaPartnerFilter $filter = null) - { - $kparams = array(); - if ($filter !== null) - $this->client->addParam($kparams, "filter", $filter->toParams()); - $this->client->queueServiceActionCall("partner", "count", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "integer"); - return $resultObject; - } -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaPermissionItemService extends KalturaServiceBase -{ - function __construct(KalturaClient $client = null) - { - parent::__construct($client); - } - - /** - * Adds a new permission item object to the account. - This action is available only to Kaltura system administrators. - * - * @param KalturaPermissionItem $permissionItem The new permission item - * @return KalturaPermissionItem - */ - function add(KalturaPermissionItem $permissionItem) - { - $kparams = array(); - $this->client->addParam($kparams, "permissionItem", $permissionItem->toParams()); - $this->client->queueServiceActionCall("permissionitem", "add", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaPermissionItem"); - return $resultObject; - } - - /** - * Retrieves a permission item object using its ID. - * - * @param int $permissionItemId The permission item's unique identifier - * @return KalturaPermissionItem - */ - function get($permissionItemId) - { - $kparams = array(); - $this->client->addParam($kparams, "permissionItemId", $permissionItemId); - $this->client->queueServiceActionCall("permissionitem", "get", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaPermissionItem"); - return $resultObject; - } - - /** - * Updates an existing permission item object. - This action is available only to Kaltura system administrators. - * - * @param int $permissionItemId The permission item's unique identifier - * @param KalturaPermissionItem $permissionItem Id The permission item's unique identifier - * @return KalturaPermissionItem - */ - function update($permissionItemId, KalturaPermissionItem $permissionItem) - { - $kparams = array(); - $this->client->addParam($kparams, "permissionItemId", $permissionItemId); - $this->client->addParam($kparams, "permissionItem", $permissionItem->toParams()); - $this->client->queueServiceActionCall("permissionitem", "update", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaPermissionItem"); - return $resultObject; - } - - /** - * Deletes an existing permission item object. - This action is available only to Kaltura system administrators. - * - * @param int $permissionItemId The permission item's unique identifier - * @return KalturaPermissionItem - */ - function delete($permissionItemId) - { - $kparams = array(); - $this->client->addParam($kparams, "permissionItemId", $permissionItemId); - $this->client->queueServiceActionCall("permissionitem", "delete", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaPermissionItem"); - return $resultObject; - } - - /** - * Lists permission item objects that are associated with an account. - * - * @param KalturaPermissionItemFilter $filter A filter used to exclude specific types of permission items - * @param KalturaFilterPager $pager A limit for the number of records to display on a page - * @return KalturaPermissionItemListResponse - */ - function listAction(KalturaPermissionItemFilter $filter = null, KalturaFilterPager $pager = null) - { - $kparams = array(); - if ($filter !== null) - $this->client->addParam($kparams, "filter", $filter->toParams()); - if ($pager !== null) - $this->client->addParam($kparams, "pager", $pager->toParams()); - $this->client->queueServiceActionCall("permissionitem", "list", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaPermissionItemListResponse"); - return $resultObject; - } -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaPermissionService extends KalturaServiceBase -{ - function __construct(KalturaClient $client = null) - { - parent::__construct($client); - } - - /** - * Adds a new permission object to the account. - * - * @param KalturaPermission $permission The new permission - * @return KalturaPermission - */ - function add(KalturaPermission $permission) - { - $kparams = array(); - $this->client->addParam($kparams, "permission", $permission->toParams()); - $this->client->queueServiceActionCall("permission", "add", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaPermission"); - return $resultObject; - } - - /** - * Retrieves a permission object using its ID. - * - * @param string $permissionName The name assigned to the permission - * @return KalturaPermission - */ - function get($permissionName) - { - $kparams = array(); - $this->client->addParam($kparams, "permissionName", $permissionName); - $this->client->queueServiceActionCall("permission", "get", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaPermission"); - return $resultObject; - } - - /** - * Updates an existing permission object. - * - * @param string $permissionName The name assigned to the permission - * @param KalturaPermission $permission Name The name assigned to the permission - * @return KalturaPermission - */ - function update($permissionName, KalturaPermission $permission) - { - $kparams = array(); - $this->client->addParam($kparams, "permissionName", $permissionName); - $this->client->addParam($kparams, "permission", $permission->toParams()); - $this->client->queueServiceActionCall("permission", "update", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaPermission"); - return $resultObject; - } - - /** - * Deletes an existing permission object. - * - * @param string $permissionName The name assigned to the permission - * @return KalturaPermission - */ - function delete($permissionName) - { - $kparams = array(); - $this->client->addParam($kparams, "permissionName", $permissionName); - $this->client->queueServiceActionCall("permission", "delete", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaPermission"); - return $resultObject; - } - - /** - * Lists permission objects that are associated with an account. - Blocked permissions are listed unless you use a filter to exclude them. - Blocked permissions are listed unless you use a filter to exclude them. - * - * @param KalturaPermissionFilter $filter A filter used to exclude specific types of permissions - * @param KalturaFilterPager $pager A limit for the number of records to display on a page - * @return KalturaPermissionListResponse - */ - function listAction(KalturaPermissionFilter $filter = null, KalturaFilterPager $pager = null) - { - $kparams = array(); - if ($filter !== null) - $this->client->addParam($kparams, "filter", $filter->toParams()); - if ($pager !== null) - $this->client->addParam($kparams, "pager", $pager->toParams()); - $this->client->queueServiceActionCall("permission", "list", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaPermissionListResponse"); - return $resultObject; - } - - /** - * Retrieves a list of permissions that apply to the current KS. - * - * @return string - */ - function getCurrentPermissions() - { - $kparams = array(); - $this->client->queueServiceActionCall("permission", "getCurrentPermissions", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "string"); - return $resultObject; - } -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaPlaylistService extends KalturaServiceBase -{ - function __construct(KalturaClient $client = null) - { - parent::__construct($client); - } - - /** - * Add new playlist - Note that all entries used in a playlist will become public and may appear in KalturaNetwork - * - * @param KalturaPlaylist $playlist - * @param bool $updateStats Indicates that the playlist statistics attributes should be updated synchronously now - * @return KalturaPlaylist - */ - function add(KalturaPlaylist $playlist, $updateStats = false) - { - $kparams = array(); - $this->client->addParam($kparams, "playlist", $playlist->toParams()); - $this->client->addParam($kparams, "updateStats", $updateStats); - $this->client->queueServiceActionCall("playlist", "add", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaPlaylist"); - return $resultObject; - } - - /** - * Retrieve a playlist - * - * @param string $id - * @param int $version Desired version of the data - * @return KalturaPlaylist - */ - function get($id, $version = -1) - { - $kparams = array(); - $this->client->addParam($kparams, "id", $id); - $this->client->addParam($kparams, "version", $version); - $this->client->queueServiceActionCall("playlist", "get", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaPlaylist"); - return $resultObject; - } - - /** - * Update existing playlist - Note - you cannot change playlist type. updated playlist must be of the same type. - * - * @param string $id - * @param KalturaPlaylist $playlist - * @param bool $updateStats - * @return KalturaPlaylist - */ - function update($id, KalturaPlaylist $playlist, $updateStats = false) - { - $kparams = array(); - $this->client->addParam($kparams, "id", $id); - $this->client->addParam($kparams, "playlist", $playlist->toParams()); - $this->client->addParam($kparams, "updateStats", $updateStats); - $this->client->queueServiceActionCall("playlist", "update", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaPlaylist"); - return $resultObject; - } - - /** - * Delete existing playlist - * - * @param string $id - * @return - */ - function delete($id) - { - $kparams = array(); - $this->client->addParam($kparams, "id", $id); - $this->client->queueServiceActionCall("playlist", "delete", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "null"); - return $resultObject; - } - - /** - * Clone an existing playlist - * - * @param string $id Id of the playlist to clone - * @param KalturaPlaylist $newPlaylist Parameters defined here will override the ones in the cloned playlist - * @return KalturaPlaylist - */ - function cloneAction($id, KalturaPlaylist $newPlaylist = null) - { - $kparams = array(); - $this->client->addParam($kparams, "id", $id); - if ($newPlaylist !== null) - $this->client->addParam($kparams, "newPlaylist", $newPlaylist->toParams()); - $this->client->queueServiceActionCall("playlist", "clone", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaPlaylist"); - return $resultObject; - } - - /** - * List available playlists - * - * @param KalturaPlaylistFilter $filter - * @param KalturaFilterPager $pager - * @return KalturaPlaylistListResponse - */ - function listAction(KalturaPlaylistFilter $filter = null, KalturaFilterPager $pager = null) - { - $kparams = array(); - if ($filter !== null) - $this->client->addParam($kparams, "filter", $filter->toParams()); - if ($pager !== null) - $this->client->addParam($kparams, "pager", $pager->toParams()); - $this->client->queueServiceActionCall("playlist", "list", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaPlaylistListResponse"); - return $resultObject; - } - - /** - * Retrieve playlist for playing purpose - * - * @param string $id - * @param string $detailed - * @param KalturaContext $playlistContext - * @param KalturaMediaEntryFilterForPlaylist $filter - * @return array - */ - function execute($id, $detailed = "", KalturaContext $playlistContext = null, KalturaMediaEntryFilterForPlaylist $filter = null) - { - $kparams = array(); - $this->client->addParam($kparams, "id", $id); - $this->client->addParam($kparams, "detailed", $detailed); - if ($playlistContext !== null) - $this->client->addParam($kparams, "playlistContext", $playlistContext->toParams()); - if ($filter !== null) - $this->client->addParam($kparams, "filter", $filter->toParams()); - $this->client->queueServiceActionCall("playlist", "execute", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "array"); - return $resultObject; - } - - /** - * Retrieve playlist for playing purpose, based on content - * - * @param int $playlistType - * @param string $playlistContent - * @param string $detailed - * @return array - */ - function executeFromContent($playlistType, $playlistContent, $detailed = "") - { - $kparams = array(); - $this->client->addParam($kparams, "playlistType", $playlistType); - $this->client->addParam($kparams, "playlistContent", $playlistContent); - $this->client->addParam($kparams, "detailed", $detailed); - $this->client->queueServiceActionCall("playlist", "executeFromContent", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "array"); - return $resultObject; - } - - /** - * Revrieve playlist for playing purpose, based on media entry filters - * - * @param array $filters - * @param int $totalResults - * @param string $detailed - * @return array - */ - function executeFromFilters(array $filters, $totalResults, $detailed = "") - { - $kparams = array(); - foreach($filters as $index => $obj) - { - $this->client->addParam($kparams, "filters:$index", $obj->toParams()); - } - $this->client->addParam($kparams, "totalResults", $totalResults); - $this->client->addParam($kparams, "detailed", $detailed); - $this->client->queueServiceActionCall("playlist", "executeFromFilters", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "array"); - return $resultObject; - } - - /** - * Retrieve playlist statistics - * - * @param int $playlistType - * @param string $playlistContent - * @return KalturaPlaylist - */ - function getStatsFromContent($playlistType, $playlistContent) - { - $kparams = array(); - $this->client->addParam($kparams, "playlistType", $playlistType); - $this->client->addParam($kparams, "playlistContent", $playlistContent); - $this->client->queueServiceActionCall("playlist", "getStatsFromContent", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaPlaylist"); - return $resultObject; - } -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaReportService extends KalturaServiceBase -{ - function __construct(KalturaClient $client = null) - { - parent::__construct($client); - } - - /** - * Report getGraphs action allows to get a graph data for a specific report. - * - * @param int $reportType - * @param KalturaReportInputFilter $reportInputFilter - * @param string $dimension - * @param string $objectIds - one ID or more (separated by ',') of specific objects to query - * @return array - */ - function getGraphs($reportType, KalturaReportInputFilter $reportInputFilter, $dimension = null, $objectIds = null) - { - $kparams = array(); - $this->client->addParam($kparams, "reportType", $reportType); - $this->client->addParam($kparams, "reportInputFilter", $reportInputFilter->toParams()); - $this->client->addParam($kparams, "dimension", $dimension); - $this->client->addParam($kparams, "objectIds", $objectIds); - $this->client->queueServiceActionCall("report", "getGraphs", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "array"); - return $resultObject; - } - - /** - * Report getTotal action allows to get a graph data for a specific report. - * - * @param int $reportType - * @param KalturaReportInputFilter $reportInputFilter - * @param string $objectIds - one ID or more (separated by ',') of specific objects to query - * @return KalturaReportTotal - */ - function getTotal($reportType, KalturaReportInputFilter $reportInputFilter, $objectIds = null) - { - $kparams = array(); - $this->client->addParam($kparams, "reportType", $reportType); - $this->client->addParam($kparams, "reportInputFilter", $reportInputFilter->toParams()); - $this->client->addParam($kparams, "objectIds", $objectIds); - $this->client->queueServiceActionCall("report", "getTotal", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaReportTotal"); - return $resultObject; - } - - /** - * Report getBaseTotal action allows to get a the total base for storage reports - * - * @param int $reportType - * @param KalturaReportInputFilter $reportInputFilter - * @param string $objectIds - one ID or more (separated by ',') of specific objects to query - * @return array - */ - function getBaseTotal($reportType, KalturaReportInputFilter $reportInputFilter, $objectIds = null) - { - $kparams = array(); - $this->client->addParam($kparams, "reportType", $reportType); - $this->client->addParam($kparams, "reportInputFilter", $reportInputFilter->toParams()); - $this->client->addParam($kparams, "objectIds", $objectIds); - $this->client->queueServiceActionCall("report", "getBaseTotal", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "array"); - return $resultObject; - } - - /** - * Report getTable action allows to get a graph data for a specific report. - * - * @param int $reportType - * @param KalturaReportInputFilter $reportInputFilter - * @param KalturaFilterPager $pager - * @param string $order - * @param string $objectIds - one ID or more (separated by ',') of specific objects to query - * @return KalturaReportTable - */ - function getTable($reportType, KalturaReportInputFilter $reportInputFilter, KalturaFilterPager $pager, $order = null, $objectIds = null) - { - $kparams = array(); - $this->client->addParam($kparams, "reportType", $reportType); - $this->client->addParam($kparams, "reportInputFilter", $reportInputFilter->toParams()); - $this->client->addParam($kparams, "pager", $pager->toParams()); - $this->client->addParam($kparams, "order", $order); - $this->client->addParam($kparams, "objectIds", $objectIds); - $this->client->queueServiceActionCall("report", "getTable", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaReportTable"); - return $resultObject; - } - - /** - * Will create a Csv file for the given report and return the URL to access it - * - * @param string $reportTitle The title of the report to display at top of CSV - * @param string $reportText The text of the filter of the report - * @param string $headers The headers of the columns - a map between the enumerations on the server side and the their display text - * @param int $reportType - * @param KalturaReportInputFilter $reportInputFilter - * @param string $dimension - * @param KalturaFilterPager $pager - * @param string $order - * @param string $objectIds - one ID or more (separated by ',') of specific objects to query - * @return string - */ - function getUrlForReportAsCsv($reportTitle, $reportText, $headers, $reportType, KalturaReportInputFilter $reportInputFilter, $dimension = null, KalturaFilterPager $pager = null, $order = null, $objectIds = null) - { - $kparams = array(); - $this->client->addParam($kparams, "reportTitle", $reportTitle); - $this->client->addParam($kparams, "reportText", $reportText); - $this->client->addParam($kparams, "headers", $headers); - $this->client->addParam($kparams, "reportType", $reportType); - $this->client->addParam($kparams, "reportInputFilter", $reportInputFilter->toParams()); - $this->client->addParam($kparams, "dimension", $dimension); - if ($pager !== null) - $this->client->addParam($kparams, "pager", $pager->toParams()); - $this->client->addParam($kparams, "order", $order); - $this->client->addParam($kparams, "objectIds", $objectIds); - $this->client->queueServiceActionCall("report", "getUrlForReportAsCsv", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "string"); - return $resultObject; - } - - /** - * - * - * @param int $id - * @param array $params - * @return KalturaReportResponse - */ - function execute($id, array $params = null) - { - $kparams = array(); - $this->client->addParam($kparams, "id", $id); - if ($params !== null) - foreach($params as $index => $obj) - { - $this->client->addParam($kparams, "params:$index", $obj->toParams()); - } - $this->client->queueServiceActionCall("report", "execute", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaReportResponse"); - return $resultObject; - } - - /** - * - * - * @param int $id - * @param array $params - * @return file - */ - function getCsv($id, array $params = null) - { - $kparams = array(); - $this->client->addParam($kparams, "id", $id); - if ($params !== null) - foreach($params as $index => $obj) - { - $this->client->addParam($kparams, "params:$index", $obj->toParams()); - } - $this->client->queueServiceActionCall("report", "getCsv", $kparams); - if(!$this->client->getDestinationPath() && !$this->client->getReturnServedResult()) - return $this->client->getServeUrl(); - return $this->client->doQueue(); - } - - /** - * Returns report CSV file executed by string params with the following convention: param1=value1;param2=value2 - * - * @param int $id - * @param string $params - * @return file - */ - function getCsvFromStringParams($id, $params = null) - { - $kparams = array(); - $this->client->addParam($kparams, "id", $id); - $this->client->addParam($kparams, "params", $params); - $this->client->queueServiceActionCall("report", "getCsvFromStringParams", $kparams); - if(!$this->client->getDestinationPath() && !$this->client->getReturnServedResult()) - return $this->client->getServeUrl(); - return $this->client->doQueue(); - } -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaSchemaService extends KalturaServiceBase -{ - function __construct(KalturaClient $client = null) - { - parent::__construct($client); - } - - /** - * Serves the requested XSD according to the type and name. - * - * @param string $type - * @return file - */ - function serve($type) - { - $kparams = array(); - $this->client->addParam($kparams, "type", $type); - $this->client->queueServiceActionCall("schema", "serve", $kparams); - if(!$this->client->getDestinationPath() && !$this->client->getReturnServedResult()) - return $this->client->getServeUrl(); - return $this->client->doQueue(); - } -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaSearchService extends KalturaServiceBase -{ - function __construct(KalturaClient $client = null) - { - parent::__construct($client); - } - - /** - * Search for media in one of the supported media providers - * - * @param KalturaSearch $search A KalturaSearch object contains the search keywords, media provider and media type - * @param KalturaFilterPager $pager - * @return KalturaSearchResultResponse - */ - function search(KalturaSearch $search, KalturaFilterPager $pager = null) - { - $kparams = array(); - $this->client->addParam($kparams, "search", $search->toParams()); - if ($pager !== null) - $this->client->addParam($kparams, "pager", $pager->toParams()); - $this->client->queueServiceActionCall("search", "search", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaSearchResultResponse"); - return $resultObject; - } - - /** - * Retrieve extra information about media found in search action - Some providers return only part of the fields needed to create entry from, use this action to get the rest of the fields. - * - * @param KalturaSearchResult $searchResult KalturaSearchResult object extends KalturaSearch and has all fields required for media:add - * @return KalturaSearchResult - */ - function getMediaInfo(KalturaSearchResult $searchResult) - { - $kparams = array(); - $this->client->addParam($kparams, "searchResult", $searchResult->toParams()); - $this->client->queueServiceActionCall("search", "getMediaInfo", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaSearchResult"); - return $resultObject; - } - - /** - * Search for media given a specific URL - Kaltura supports a searchURL action on some of the media providers. - This action will return a KalturaSearchResult object based on a given URL (assuming the media provider is supported) - * - * @param int $mediaType - * @param string $url - * @return KalturaSearchResult - */ - function searchUrl($mediaType, $url) - { - $kparams = array(); - $this->client->addParam($kparams, "mediaType", $mediaType); - $this->client->addParam($kparams, "url", $url); - $this->client->queueServiceActionCall("search", "searchUrl", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaSearchResult"); - return $resultObject; - } - - /** - * - * - * @param int $searchSource - * @param string $userName - * @param string $password - * @return KalturaSearchAuthData - */ - function externalLogin($searchSource, $userName, $password) - { - $kparams = array(); - $this->client->addParam($kparams, "searchSource", $searchSource); - $this->client->addParam($kparams, "userName", $userName); - $this->client->addParam($kparams, "password", $password); - $this->client->queueServiceActionCall("search", "externalLogin", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaSearchAuthData"); - return $resultObject; - } -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaSessionService extends KalturaServiceBase -{ - function __construct(KalturaClient $client = null) - { - parent::__construct($client); - } - - /** - * Start a session with Kaltura's server. - The result KS is the session key that you should pass to all services that requires a ticket. - * - * @param string $secret Remember to provide the correct secret according to the sessionType you want - * @param string $userId - * @param int $type Regular session or Admin session - * @param int $partnerId - * @param int $expiry KS expiry time in seconds - * @param string $privileges - * @return string - */ - function start($secret, $userId = "", $type = 0, $partnerId = null, $expiry = 86400, $privileges = null) - { - $kparams = array(); - $this->client->addParam($kparams, "secret", $secret); - $this->client->addParam($kparams, "userId", $userId); - $this->client->addParam($kparams, "type", $type); - $this->client->addParam($kparams, "partnerId", $partnerId); - $this->client->addParam($kparams, "expiry", $expiry); - $this->client->addParam($kparams, "privileges", $privileges); - $this->client->queueServiceActionCall("session", "start", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "string"); - return $resultObject; - } - - /** - * End a session with the Kaltura server, making the current KS invalid. - * - * @return - */ - function end() - { - $kparams = array(); - $this->client->queueServiceActionCall("session", "end", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "null"); - return $resultObject; - } - - /** - * Start an impersonated session with Kaltura's server. - The result KS is the session key that you should pass to all services that requires a ticket. - * - * @param string $secret - should be the secret (admin or user) of the original partnerId (not impersonatedPartnerId). - * @param int $impersonatedPartnerId - * @param string $userId - impersonated userId - * @param int $type - * @param int $partnerId - * @param int $expiry KS expiry time in seconds - * @param string $privileges - * @return string - */ - function impersonate($secret, $impersonatedPartnerId, $userId = "", $type = 0, $partnerId = null, $expiry = 86400, $privileges = null) - { - $kparams = array(); - $this->client->addParam($kparams, "secret", $secret); - $this->client->addParam($kparams, "impersonatedPartnerId", $impersonatedPartnerId); - $this->client->addParam($kparams, "userId", $userId); - $this->client->addParam($kparams, "type", $type); - $this->client->addParam($kparams, "partnerId", $partnerId); - $this->client->addParam($kparams, "expiry", $expiry); - $this->client->addParam($kparams, "privileges", $privileges); - $this->client->queueServiceActionCall("session", "impersonate", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "string"); - return $resultObject; - } - - /** - * Start an impersonated session with Kaltura's server. - The result KS info contains the session key that you should pass to all services that requires a ticket. - Type, expiry and privileges won't be changed if they're not set - * - * @param string $session The old KS of the impersonated partner - * @param int $type Type of the new KS - * @param int $expiry Expiry time in seconds of the new KS - * @param string $privileges Privileges of the new KS - * @return KalturaSessionInfo - */ - function impersonateByKs($session, $type = null, $expiry = null, $privileges = null) - { - $kparams = array(); - $this->client->addParam($kparams, "session", $session); - $this->client->addParam($kparams, "type", $type); - $this->client->addParam($kparams, "expiry", $expiry); - $this->client->addParam($kparams, "privileges", $privileges); - $this->client->queueServiceActionCall("session", "impersonateByKs", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaSessionInfo"); - return $resultObject; - } - - /** - * Parse session key and return its info - * - * @param string $session The KS to be parsed, keep it empty to use current session. - * @return KalturaSessionInfo - */ - function get($session = null) - { - $kparams = array(); - $this->client->addParam($kparams, "session", $session); - $this->client->queueServiceActionCall("session", "get", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaSessionInfo"); - return $resultObject; - } - - /** - * Start a session for Kaltura's flash widgets - * - * @param string $widgetId - * @param int $expiry - * @return KalturaStartWidgetSessionResponse - */ - function startWidgetSession($widgetId, $expiry = 86400) - { - $kparams = array(); - $this->client->addParam($kparams, "widgetId", $widgetId); - $this->client->addParam($kparams, "expiry", $expiry); - $this->client->queueServiceActionCall("session", "startWidgetSession", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaStartWidgetSessionResponse"); - return $resultObject; - } -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaStatsService extends KalturaServiceBase -{ - function __construct(KalturaClient $client = null) - { - parent::__construct($client); - } - - /** - * Will write to the event log a single line representing the event - client version - will help interprete the line structure. different client versions might have slightly different data/data formats in the line -event_id - number is the row number in yuval's excel -datetime - same format as MySql's datetime - can change and should reflect the time zone -session id - can be some big random number or guid -partner id -entry id -unique viewer -widget id -ui_conf id -uid - the puser id as set by the ppartner -current point - in milliseconds -duration - milliseconds -user ip -process duration - in milliseconds -control id -seek -new point -referrer - - - KalturaStatsEvent $event - * - * @param KalturaStatsEvent $event - * @return bool - */ - function collect(KalturaStatsEvent $event) - { - $kparams = array(); - $this->client->addParam($kparams, "event", $event->toParams()); - $this->client->queueServiceActionCall("stats", "collect", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $resultObject = (bool) $resultObject; - return $resultObject; - } - - /** - * Will collect the kmcEvent sent form the KMC client - // this will actually be an empty function because all events will be sent using GET and will anyway be logged in the apache log - * - * @param KalturaStatsKmcEvent $kmcEvent - * @return - */ - function kmcCollect(KalturaStatsKmcEvent $kmcEvent) - { - $kparams = array(); - $this->client->addParam($kparams, "kmcEvent", $kmcEvent->toParams()); - $this->client->queueServiceActionCall("stats", "kmcCollect", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "null"); - return $resultObject; - } - - /** - * - * - * @param KalturaCEError $kalturaCEError - * @return KalturaCEError - */ - function reportKceError(KalturaCEError $kalturaCEError) - { - $kparams = array(); - $this->client->addParam($kparams, "kalturaCEError", $kalturaCEError->toParams()); - $this->client->queueServiceActionCall("stats", "reportKceError", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaCEError"); - return $resultObject; - } - - /** - * Use this action to report errors to the kaltura server. - * - * @param string $errorCode - * @param string $errorMessage - * @return - */ - function reportError($errorCode, $errorMessage) - { - $kparams = array(); - $this->client->addParam($kparams, "errorCode", $errorCode); - $this->client->addParam($kparams, "errorMessage", $errorMessage); - $this->client->queueServiceActionCall("stats", "reportError", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "null"); - return $resultObject; - } -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaStorageProfileService extends KalturaServiceBase -{ - function __construct(KalturaClient $client = null) - { - parent::__construct($client); - } - - /** - * Adds a storage profile to the Kaltura DB. - * - * @param KalturaStorageProfile $storageProfile - * @return KalturaStorageProfile - */ - function add(KalturaStorageProfile $storageProfile) - { - $kparams = array(); - $this->client->addParam($kparams, "storageProfile", $storageProfile->toParams()); - $this->client->queueServiceActionCall("storageprofile", "add", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaStorageProfile"); - return $resultObject; - } - - /** - * - * - * @param int $storageId - * @param int $status - * @return - */ - function updateStatus($storageId, $status) - { - $kparams = array(); - $this->client->addParam($kparams, "storageId", $storageId); - $this->client->addParam($kparams, "status", $status); - $this->client->queueServiceActionCall("storageprofile", "updateStatus", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "null"); - return $resultObject; - } - - /** - * Get storage profile by id - * - * @param int $storageProfileId - * @return KalturaStorageProfile - */ - function get($storageProfileId) - { - $kparams = array(); - $this->client->addParam($kparams, "storageProfileId", $storageProfileId); - $this->client->queueServiceActionCall("storageprofile", "get", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaStorageProfile"); - return $resultObject; - } - - /** - * Update storage profile by id - * - * @param int $storageProfileId - * @param KalturaStorageProfile $storageProfile Id - * @return KalturaStorageProfile - */ - function update($storageProfileId, KalturaStorageProfile $storageProfile) - { - $kparams = array(); - $this->client->addParam($kparams, "storageProfileId", $storageProfileId); - $this->client->addParam($kparams, "storageProfile", $storageProfile->toParams()); - $this->client->queueServiceActionCall("storageprofile", "update", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaStorageProfile"); - return $resultObject; - } - - /** - * - * - * @param KalturaStorageProfileFilter $filter - * @param KalturaFilterPager $pager - * @return KalturaStorageProfileListResponse - */ - function listAction(KalturaStorageProfileFilter $filter = null, KalturaFilterPager $pager = null) - { - $kparams = array(); - if ($filter !== null) - $this->client->addParam($kparams, "filter", $filter->toParams()); - if ($pager !== null) - $this->client->addParam($kparams, "pager", $pager->toParams()); - $this->client->queueServiceActionCall("storageprofile", "list", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaStorageProfileListResponse"); - return $resultObject; - } -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaSyndicationFeedService extends KalturaServiceBase -{ - function __construct(KalturaClient $client = null) - { - parent::__construct($client); - } - - /** - * Add new Syndication Feed - * - * @param KalturaBaseSyndicationFeed $syndicationFeed - * @return KalturaBaseSyndicationFeed - */ - function add(KalturaBaseSyndicationFeed $syndicationFeed) - { - $kparams = array(); - $this->client->addParam($kparams, "syndicationFeed", $syndicationFeed->toParams()); - $this->client->queueServiceActionCall("syndicationfeed", "add", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaBaseSyndicationFeed"); - return $resultObject; - } - - /** - * Get Syndication Feed by ID - * - * @param string $id - * @return KalturaBaseSyndicationFeed - */ - function get($id) - { - $kparams = array(); - $this->client->addParam($kparams, "id", $id); - $this->client->queueServiceActionCall("syndicationfeed", "get", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaBaseSyndicationFeed"); - return $resultObject; - } - - /** - * Update Syndication Feed by ID - * - * @param string $id - * @param KalturaBaseSyndicationFeed $syndicationFeed - * @return KalturaBaseSyndicationFeed - */ - function update($id, KalturaBaseSyndicationFeed $syndicationFeed) - { - $kparams = array(); - $this->client->addParam($kparams, "id", $id); - $this->client->addParam($kparams, "syndicationFeed", $syndicationFeed->toParams()); - $this->client->queueServiceActionCall("syndicationfeed", "update", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaBaseSyndicationFeed"); - return $resultObject; - } - - /** - * Delete Syndication Feed by ID - * - * @param string $id - * @return - */ - function delete($id) - { - $kparams = array(); - $this->client->addParam($kparams, "id", $id); - $this->client->queueServiceActionCall("syndicationfeed", "delete", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "null"); - return $resultObject; - } - - /** - * List Syndication Feeds by filter with paging support - * - * @param KalturaBaseSyndicationFeedFilter $filter - * @param KalturaFilterPager $pager - * @return KalturaBaseSyndicationFeedListResponse - */ - function listAction(KalturaBaseSyndicationFeedFilter $filter = null, KalturaFilterPager $pager = null) - { - $kparams = array(); - if ($filter !== null) - $this->client->addParam($kparams, "filter", $filter->toParams()); - if ($pager !== null) - $this->client->addParam($kparams, "pager", $pager->toParams()); - $this->client->queueServiceActionCall("syndicationfeed", "list", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaBaseSyndicationFeedListResponse"); - return $resultObject; - } - - /** - * Get entry count for a syndication feed - * - * @param string $feedId - * @return KalturaSyndicationFeedEntryCount - */ - function getEntryCount($feedId) - { - $kparams = array(); - $this->client->addParam($kparams, "feedId", $feedId); - $this->client->queueServiceActionCall("syndicationfeed", "getEntryCount", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaSyndicationFeedEntryCount"); - return $resultObject; - } - - /** - * Request conversion for all entries that doesnt have the required flavor param - returns a comma-separated ids of conversion jobs - * - * @param string $feedId - * @return string - */ - function requestConversion($feedId) - { - $kparams = array(); - $this->client->addParam($kparams, "feedId", $feedId); - $this->client->queueServiceActionCall("syndicationfeed", "requestConversion", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "string"); - return $resultObject; - } -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaSystemService extends KalturaServiceBase -{ - function __construct(KalturaClient $client = null) - { - parent::__construct($client); - } - - /** - * - * - * @return bool - */ - function ping() - { - $kparams = array(); - $this->client->queueServiceActionCall("system", "ping", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $resultObject = (bool) $resultObject; - return $resultObject; - } - - /** - * - * - * @return bool - */ - function pingDatabase() - { - $kparams = array(); - $this->client->queueServiceActionCall("system", "pingDatabase", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $resultObject = (bool) $resultObject; - return $resultObject; - } - - /** - * - * - * @return int - */ - function getTime() - { - $kparams = array(); - $this->client->queueServiceActionCall("system", "getTime", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "integer"); - return $resultObject; - } -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaThumbAssetService extends KalturaServiceBase -{ - function __construct(KalturaClient $client = null) - { - parent::__construct($client); - } - - /** - * Add thumbnail asset - * - * @param string $entryId - * @param KalturaThumbAsset $thumbAsset - * @return KalturaThumbAsset - */ - function add($entryId, KalturaThumbAsset $thumbAsset) - { - $kparams = array(); - $this->client->addParam($kparams, "entryId", $entryId); - $this->client->addParam($kparams, "thumbAsset", $thumbAsset->toParams()); - $this->client->queueServiceActionCall("thumbasset", "add", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaThumbAsset"); - return $resultObject; - } - - /** - * Update content of thumbnail asset - * - * @param string $id - * @param KalturaContentResource $contentResource - * @return KalturaThumbAsset - */ - function setContent($id, KalturaContentResource $contentResource) - { - $kparams = array(); - $this->client->addParam($kparams, "id", $id); - $this->client->addParam($kparams, "contentResource", $contentResource->toParams()); - $this->client->queueServiceActionCall("thumbasset", "setContent", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaThumbAsset"); - return $resultObject; - } - - /** - * Update thumbnail asset - * - * @param string $id - * @param KalturaThumbAsset $thumbAsset - * @return KalturaThumbAsset - */ - function update($id, KalturaThumbAsset $thumbAsset) - { - $kparams = array(); - $this->client->addParam($kparams, "id", $id); - $this->client->addParam($kparams, "thumbAsset", $thumbAsset->toParams()); - $this->client->queueServiceActionCall("thumbasset", "update", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaThumbAsset"); - return $resultObject; - } - - /** - * Serves thumbnail by entry id and thumnail params id - * - * @param string $entryId - * @param int $thumbParamId If not set, default thumbnail will be used. - * @return file - */ - function serveByEntryId($entryId, $thumbParamId = null) - { - $kparams = array(); - $this->client->addParam($kparams, "entryId", $entryId); - $this->client->addParam($kparams, "thumbParamId", $thumbParamId); - $this->client->queueServiceActionCall("thumbasset", "serveByEntryId", $kparams); - if(!$this->client->getDestinationPath() && !$this->client->getReturnServedResult()) - return $this->client->getServeUrl(); - return $this->client->doQueue(); - } - - /** - * Serves thumbnail by its id - * - * @param string $thumbAssetId - * @param int $version - * @param KalturaThumbParams $thumbParams - * @param KalturaThumbnailServeOptions $options - * @return file - */ - function serve($thumbAssetId, $version = null, KalturaThumbParams $thumbParams = null, KalturaThumbnailServeOptions $options = null) - { - $kparams = array(); - $this->client->addParam($kparams, "thumbAssetId", $thumbAssetId); - $this->client->addParam($kparams, "version", $version); - if ($thumbParams !== null) - $this->client->addParam($kparams, "thumbParams", $thumbParams->toParams()); - if ($options !== null) - $this->client->addParam($kparams, "options", $options->toParams()); - $this->client->queueServiceActionCall("thumbasset", "serve", $kparams); - if(!$this->client->getDestinationPath() && !$this->client->getReturnServedResult()) - return $this->client->getServeUrl(); - return $this->client->doQueue(); - } - - /** - * Tags the thumbnail as DEFAULT_THUMB and removes that tag from all other thumbnail assets of the entry. - Create a new file sync link on the entry thumbnail that points to the thumbnail asset file sync. - * - * @param string $thumbAssetId - * @return - */ - function setAsDefault($thumbAssetId) - { - $kparams = array(); - $this->client->addParam($kparams, "thumbAssetId", $thumbAssetId); - $this->client->queueServiceActionCall("thumbasset", "setAsDefault", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "null"); - return $resultObject; - } - - /** - * - * - * @param string $entryId - * @param int $destThumbParamsId Indicate the id of the ThumbParams to be generate this thumbnail by - * @return KalturaThumbAsset - */ - function generateByEntryId($entryId, $destThumbParamsId) - { - $kparams = array(); - $this->client->addParam($kparams, "entryId", $entryId); - $this->client->addParam($kparams, "destThumbParamsId", $destThumbParamsId); - $this->client->queueServiceActionCall("thumbasset", "generateByEntryId", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaThumbAsset"); - return $resultObject; - } - - /** - * - * - * @param string $entryId - * @param KalturaThumbParams $thumbParams - * @param string $sourceAssetId Id of the source asset (flavor or thumbnail) to be used as source for the thumbnail generation - * @return KalturaThumbAsset - */ - function generate($entryId, KalturaThumbParams $thumbParams, $sourceAssetId = null) - { - $kparams = array(); - $this->client->addParam($kparams, "entryId", $entryId); - $this->client->addParam($kparams, "thumbParams", $thumbParams->toParams()); - $this->client->addParam($kparams, "sourceAssetId", $sourceAssetId); - $this->client->queueServiceActionCall("thumbasset", "generate", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaThumbAsset"); - return $resultObject; - } - - /** - * - * - * @param string $thumbAssetId - * @return KalturaThumbAsset - */ - function regenerate($thumbAssetId) - { - $kparams = array(); - $this->client->addParam($kparams, "thumbAssetId", $thumbAssetId); - $this->client->queueServiceActionCall("thumbasset", "regenerate", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaThumbAsset"); - return $resultObject; - } - - /** - * - * - * @param string $thumbAssetId - * @return KalturaThumbAsset - */ - function get($thumbAssetId) - { - $kparams = array(); - $this->client->addParam($kparams, "thumbAssetId", $thumbAssetId); - $this->client->queueServiceActionCall("thumbasset", "get", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaThumbAsset"); - return $resultObject; - } - - /** - * - * - * @param string $entryId - * @return array - */ - function getByEntryId($entryId) - { - $kparams = array(); - $this->client->addParam($kparams, "entryId", $entryId); - $this->client->queueServiceActionCall("thumbasset", "getByEntryId", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "array"); - return $resultObject; - } - - /** - * List Thumbnail Assets by filter and pager - * - * @param KalturaAssetFilter $filter - * @param KalturaFilterPager $pager - * @return KalturaThumbAssetListResponse - */ - function listAction(KalturaAssetFilter $filter = null, KalturaFilterPager $pager = null) - { - $kparams = array(); - if ($filter !== null) - $this->client->addParam($kparams, "filter", $filter->toParams()); - if ($pager !== null) - $this->client->addParam($kparams, "pager", $pager->toParams()); - $this->client->queueServiceActionCall("thumbasset", "list", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaThumbAssetListResponse"); - return $resultObject; - } - - /** - * - * - * @param string $entryId - * @param string $url - * @return KalturaThumbAsset - */ - function addFromUrl($entryId, $url) - { - $kparams = array(); - $this->client->addParam($kparams, "entryId", $entryId); - $this->client->addParam($kparams, "url", $url); - $this->client->queueServiceActionCall("thumbasset", "addFromUrl", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaThumbAsset"); - return $resultObject; - } - - /** - * - * - * @param string $entryId - * @param file $fileData - * @return KalturaThumbAsset - */ - function addFromImage($entryId, $fileData) - { - $kparams = array(); - $this->client->addParam($kparams, "entryId", $entryId); - $kfiles = array(); - $this->client->addParam($kfiles, "fileData", $fileData); - $this->client->queueServiceActionCall("thumbasset", "addFromImage", $kparams, $kfiles); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaThumbAsset"); - return $resultObject; - } - - /** - * - * - * @param string $thumbAssetId - * @return - */ - function delete($thumbAssetId) - { - $kparams = array(); - $this->client->addParam($kparams, "thumbAssetId", $thumbAssetId); - $this->client->queueServiceActionCall("thumbasset", "delete", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "null"); - return $resultObject; - } - - /** - * Get download URL for the asset - * - * @param string $id - * @param int $storageId - * @param KalturaThumbParams $thumbParams - * @return string - */ - function getUrl($id, $storageId = null, KalturaThumbParams $thumbParams = null) - { - $kparams = array(); - $this->client->addParam($kparams, "id", $id); - $this->client->addParam($kparams, "storageId", $storageId); - if ($thumbParams !== null) - $this->client->addParam($kparams, "thumbParams", $thumbParams->toParams()); - $this->client->queueServiceActionCall("thumbasset", "getUrl", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "string"); - return $resultObject; - } - - /** - * Get remote storage existing paths for the asset - * - * @param string $id - * @return KalturaRemotePathListResponse - */ - function getRemotePaths($id) - { - $kparams = array(); - $this->client->addParam($kparams, "id", $id); - $this->client->queueServiceActionCall("thumbasset", "getRemotePaths", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaRemotePathListResponse"); - return $resultObject; - } -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaThumbParamsOutputService extends KalturaServiceBase -{ - function __construct(KalturaClient $client = null) - { - parent::__construct($client); - } - - /** - * Get thumb params output object by ID - * - * @param int $id - * @return KalturaThumbParamsOutput - */ - function get($id) - { - $kparams = array(); - $this->client->addParam($kparams, "id", $id); - $this->client->queueServiceActionCall("thumbparamsoutput", "get", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaThumbParamsOutput"); - return $resultObject; - } - - /** - * List thumb params output objects by filter and pager - * - * @param KalturaThumbParamsOutputFilter $filter - * @param KalturaFilterPager $pager - * @return KalturaThumbParamsOutputListResponse - */ - function listAction(KalturaThumbParamsOutputFilter $filter = null, KalturaFilterPager $pager = null) - { - $kparams = array(); - if ($filter !== null) - $this->client->addParam($kparams, "filter", $filter->toParams()); - if ($pager !== null) - $this->client->addParam($kparams, "pager", $pager->toParams()); - $this->client->queueServiceActionCall("thumbparamsoutput", "list", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaThumbParamsOutputListResponse"); - return $resultObject; - } -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaThumbParamsService extends KalturaServiceBase -{ - function __construct(KalturaClient $client = null) - { - parent::__construct($client); - } - - /** - * Add new Thumb Params - * - * @param KalturaThumbParams $thumbParams - * @return KalturaThumbParams - */ - function add(KalturaThumbParams $thumbParams) - { - $kparams = array(); - $this->client->addParam($kparams, "thumbParams", $thumbParams->toParams()); - $this->client->queueServiceActionCall("thumbparams", "add", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaThumbParams"); - return $resultObject; - } - - /** - * Get Thumb Params by ID - * - * @param int $id - * @return KalturaThumbParams - */ - function get($id) - { - $kparams = array(); - $this->client->addParam($kparams, "id", $id); - $this->client->queueServiceActionCall("thumbparams", "get", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaThumbParams"); - return $resultObject; - } - - /** - * Update Thumb Params by ID - * - * @param int $id - * @param KalturaThumbParams $thumbParams - * @return KalturaThumbParams - */ - function update($id, KalturaThumbParams $thumbParams) - { - $kparams = array(); - $this->client->addParam($kparams, "id", $id); - $this->client->addParam($kparams, "thumbParams", $thumbParams->toParams()); - $this->client->queueServiceActionCall("thumbparams", "update", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaThumbParams"); - return $resultObject; - } - - /** - * Delete Thumb Params by ID - * - * @param int $id - * @return - */ - function delete($id) - { - $kparams = array(); - $this->client->addParam($kparams, "id", $id); - $this->client->queueServiceActionCall("thumbparams", "delete", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "null"); - return $resultObject; - } - - /** - * List Thumb Params by filter with paging support (By default - all system default params will be listed too) - * - * @param KalturaThumbParamsFilter $filter - * @param KalturaFilterPager $pager - * @return KalturaThumbParamsListResponse - */ - function listAction(KalturaThumbParamsFilter $filter = null, KalturaFilterPager $pager = null) - { - $kparams = array(); - if ($filter !== null) - $this->client->addParam($kparams, "filter", $filter->toParams()); - if ($pager !== null) - $this->client->addParam($kparams, "pager", $pager->toParams()); - $this->client->queueServiceActionCall("thumbparams", "list", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaThumbParamsListResponse"); - return $resultObject; - } - - /** - * Get Thumb Params by Conversion Profile ID - * - * @param int $conversionProfileId - * @return array - */ - function getByConversionProfileId($conversionProfileId) - { - $kparams = array(); - $this->client->addParam($kparams, "conversionProfileId", $conversionProfileId); - $this->client->queueServiceActionCall("thumbparams", "getByConversionProfileId", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "array"); - return $resultObject; - } -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaUiConfService extends KalturaServiceBase -{ - function __construct(KalturaClient $client = null) - { - parent::__construct($client); - } - - /** - * UIConf Add action allows you to add a UIConf to Kaltura DB - * - * @param KalturaUiConf $uiConf Mandatory input parameter of type KalturaUiConf - * @return KalturaUiConf - */ - function add(KalturaUiConf $uiConf) - { - $kparams = array(); - $this->client->addParam($kparams, "uiConf", $uiConf->toParams()); - $this->client->queueServiceActionCall("uiconf", "add", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaUiConf"); - return $resultObject; - } - - /** - * Update an existing UIConf - * - * @param int $id - * @param KalturaUiConf $uiConf - * @return KalturaUiConf - */ - function update($id, KalturaUiConf $uiConf) - { - $kparams = array(); - $this->client->addParam($kparams, "id", $id); - $this->client->addParam($kparams, "uiConf", $uiConf->toParams()); - $this->client->queueServiceActionCall("uiconf", "update", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaUiConf"); - return $resultObject; - } - - /** - * Retrieve a UIConf by id - * - * @param int $id - * @return KalturaUiConf - */ - function get($id) - { - $kparams = array(); - $this->client->addParam($kparams, "id", $id); - $this->client->queueServiceActionCall("uiconf", "get", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaUiConf"); - return $resultObject; - } - - /** - * Delete an existing UIConf - * - * @param int $id - * @return - */ - function delete($id) - { - $kparams = array(); - $this->client->addParam($kparams, "id", $id); - $this->client->queueServiceActionCall("uiconf", "delete", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "null"); - return $resultObject; - } - - /** - * Clone an existing UIConf - * - * @param int $id - * @return KalturaUiConf - */ - function cloneAction($id) - { - $kparams = array(); - $this->client->addParam($kparams, "id", $id); - $this->client->queueServiceActionCall("uiconf", "clone", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaUiConf"); - return $resultObject; - } - - /** - * Retrieve a list of available template UIConfs - * - * @param KalturaUiConfFilter $filter - * @param KalturaFilterPager $pager - * @return KalturaUiConfListResponse - */ - function listTemplates(KalturaUiConfFilter $filter = null, KalturaFilterPager $pager = null) - { - $kparams = array(); - if ($filter !== null) - $this->client->addParam($kparams, "filter", $filter->toParams()); - if ($pager !== null) - $this->client->addParam($kparams, "pager", $pager->toParams()); - $this->client->queueServiceActionCall("uiconf", "listTemplates", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaUiConfListResponse"); - return $resultObject; - } - - /** - * Retrieve a list of available UIConfs - * - * @param KalturaUiConfFilter $filter - * @param KalturaFilterPager $pager - * @return KalturaUiConfListResponse - */ - function listAction(KalturaUiConfFilter $filter = null, KalturaFilterPager $pager = null) - { - $kparams = array(); - if ($filter !== null) - $this->client->addParam($kparams, "filter", $filter->toParams()); - if ($pager !== null) - $this->client->addParam($kparams, "pager", $pager->toParams()); - $this->client->queueServiceActionCall("uiconf", "list", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaUiConfListResponse"); - return $resultObject; - } - - /** - * Retrieve a list of all available versions by object type - * - * @return array - */ - function getAvailableTypes() - { - $kparams = array(); - $this->client->queueServiceActionCall("uiconf", "getAvailableTypes", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "array"); - return $resultObject; - } -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaUploadService extends KalturaServiceBase -{ - function __construct(KalturaClient $client = null) - { - parent::__construct($client); - } - - /** - * - * - * @param file $fileData The file data - * @return string - */ - function upload($fileData) - { - $kparams = array(); - $kfiles = array(); - $this->client->addParam($kfiles, "fileData", $fileData); - $this->client->queueServiceActionCall("upload", "upload", $kparams, $kfiles); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "string"); - return $resultObject; - } - - /** - * - * - * @param string $fileName - * @return KalturaUploadResponse - */ - function getUploadedFileTokenByFileName($fileName) - { - $kparams = array(); - $this->client->addParam($kparams, "fileName", $fileName); - $this->client->queueServiceActionCall("upload", "getUploadedFileTokenByFileName", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaUploadResponse"); - return $resultObject; - } -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaUploadTokenService extends KalturaServiceBase -{ - function __construct(KalturaClient $client = null) - { - parent::__construct($client); - } - - /** - * Adds new upload token to upload a file - * - * @param KalturaUploadToken $uploadToken - * @return KalturaUploadToken - */ - function add(KalturaUploadToken $uploadToken = null) - { - $kparams = array(); - if ($uploadToken !== null) - $this->client->addParam($kparams, "uploadToken", $uploadToken->toParams()); - $this->client->queueServiceActionCall("uploadtoken", "add", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaUploadToken"); - return $resultObject; - } - - /** - * Get upload token by id - * - * @param string $uploadTokenId - * @return KalturaUploadToken - */ - function get($uploadTokenId) - { - $kparams = array(); - $this->client->addParam($kparams, "uploadTokenId", $uploadTokenId); - $this->client->queueServiceActionCall("uploadtoken", "get", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaUploadToken"); - return $resultObject; - } - - /** - * Upload a file using the upload token id, returns an error on failure (an exception will be thrown when using one of the Kaltura clients) - * - * @param string $uploadTokenId - * @param file $fileData - * @param bool $resume - * @param bool $finalChunk - * @param float $resumeAt - * @return KalturaUploadToken - */ - function upload($uploadTokenId, $fileData, $resume = false, $finalChunk = true, $resumeAt = -1) - { - $kparams = array(); - $this->client->addParam($kparams, "uploadTokenId", $uploadTokenId); - $kfiles = array(); - $this->client->addParam($kfiles, "fileData", $fileData); - $this->client->addParam($kparams, "resume", $resume); - $this->client->addParam($kparams, "finalChunk", $finalChunk); - $this->client->addParam($kparams, "resumeAt", $resumeAt); - $this->client->queueServiceActionCall("uploadtoken", "upload", $kparams, $kfiles); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaUploadToken"); - return $resultObject; - } - - /** - * Deletes the upload token by upload token id - * - * @param string $uploadTokenId - * @return - */ - function delete($uploadTokenId) - { - $kparams = array(); - $this->client->addParam($kparams, "uploadTokenId", $uploadTokenId); - $this->client->queueServiceActionCall("uploadtoken", "delete", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "null"); - return $resultObject; - } - - /** - * List upload token by filter with pager support. - When using a user session the service will be restricted to users objects only. - * - * @param KalturaUploadTokenFilter $filter - * @param KalturaFilterPager $pager - * @return KalturaUploadTokenListResponse - */ - function listAction(KalturaUploadTokenFilter $filter = null, KalturaFilterPager $pager = null) - { - $kparams = array(); - if ($filter !== null) - $this->client->addParam($kparams, "filter", $filter->toParams()); - if ($pager !== null) - $this->client->addParam($kparams, "pager", $pager->toParams()); - $this->client->queueServiceActionCall("uploadtoken", "list", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaUploadTokenListResponse"); - return $resultObject; - } -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaUserRoleService extends KalturaServiceBase -{ - function __construct(KalturaClient $client = null) - { - parent::__construct($client); - } - - /** - * Adds a new user role object to the account. - * - * @param KalturaUserRole $userRole A new role - * @return KalturaUserRole - */ - function add(KalturaUserRole $userRole) - { - $kparams = array(); - $this->client->addParam($kparams, "userRole", $userRole->toParams()); - $this->client->queueServiceActionCall("userrole", "add", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaUserRole"); - return $resultObject; - } - - /** - * Retrieves a user role object using its ID. - * - * @param int $userRoleId The user role's unique identifier - * @return KalturaUserRole - */ - function get($userRoleId) - { - $kparams = array(); - $this->client->addParam($kparams, "userRoleId", $userRoleId); - $this->client->queueServiceActionCall("userrole", "get", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaUserRole"); - return $resultObject; - } - - /** - * Updates an existing user role object. - * - * @param int $userRoleId The user role's unique identifier - * @param KalturaUserRole $userRole Id The user role's unique identifier - * @return KalturaUserRole - */ - function update($userRoleId, KalturaUserRole $userRole) - { - $kparams = array(); - $this->client->addParam($kparams, "userRoleId", $userRoleId); - $this->client->addParam($kparams, "userRole", $userRole->toParams()); - $this->client->queueServiceActionCall("userrole", "update", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaUserRole"); - return $resultObject; - } - - /** - * Deletes an existing user role object. - * - * @param int $userRoleId The user role's unique identifier - * @return KalturaUserRole - */ - function delete($userRoleId) - { - $kparams = array(); - $this->client->addParam($kparams, "userRoleId", $userRoleId); - $this->client->queueServiceActionCall("userrole", "delete", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaUserRole"); - return $resultObject; - } - - /** - * Lists user role objects that are associated with an account. - Blocked user roles are listed unless you use a filter to exclude them. - Deleted user roles are not listed unless you use a filter to include them. - * - * @param KalturaUserRoleFilter $filter A filter used to exclude specific types of user roles - * @param KalturaFilterPager $pager A limit for the number of records to display on a page - * @return KalturaUserRoleListResponse - */ - function listAction(KalturaUserRoleFilter $filter = null, KalturaFilterPager $pager = null) - { - $kparams = array(); - if ($filter !== null) - $this->client->addParam($kparams, "filter", $filter->toParams()); - if ($pager !== null) - $this->client->addParam($kparams, "pager", $pager->toParams()); - $this->client->queueServiceActionCall("userrole", "list", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaUserRoleListResponse"); - return $resultObject; - } - - /** - * Creates a new user role object that is a duplicate of an existing role. - * - * @param int $userRoleId The user role's unique identifier - * @return KalturaUserRole - */ - function cloneAction($userRoleId) - { - $kparams = array(); - $this->client->addParam($kparams, "userRoleId", $userRoleId); - $this->client->queueServiceActionCall("userrole", "clone", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaUserRole"); - return $resultObject; - } -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaUserService extends KalturaServiceBase -{ - function __construct(KalturaClient $client = null) - { - parent::__construct($client); - } - - /** - * Adds a new user to an existing account in the Kaltura database. - Input param $id is the unique identifier in the partner's system. - * - * @param KalturaUser $user The new user - * @return KalturaUser - */ - function add(KalturaUser $user) - { - $kparams = array(); - $this->client->addParam($kparams, "user", $user->toParams()); - $this->client->queueServiceActionCall("user", "add", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaUser"); - return $resultObject; - } - - /** - * Updates an existing user object. - You can also use this action to update the userId. - * - * @param string $userId The user's unique identifier in the partner's system - * @param KalturaUser $user Id The user's unique identifier in the partner's system - * @return KalturaUser - */ - function update($userId, KalturaUser $user) - { - $kparams = array(); - $this->client->addParam($kparams, "userId", $userId); - $this->client->addParam($kparams, "user", $user->toParams()); - $this->client->queueServiceActionCall("user", "update", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaUser"); - return $resultObject; - } - - /** - * Retrieves a user object for a specified user ID. - * - * @param string $userId The user's unique identifier in the partner's system - * @return KalturaUser - */ - function get($userId = null) - { - $kparams = array(); - $this->client->addParam($kparams, "userId", $userId); - $this->client->queueServiceActionCall("user", "get", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaUser"); - return $resultObject; - } - - /** - * Retrieves a user object for a user's login ID and partner ID. - A login ID is the email address used by a user to log into the system. - * - * @param string $loginId The user's email address that identifies the user for login - * @return KalturaUser - */ - function getByLoginId($loginId) - { - $kparams = array(); - $this->client->addParam($kparams, "loginId", $loginId); - $this->client->queueServiceActionCall("user", "getByLoginId", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaUser"); - return $resultObject; - } - - /** - * Deletes a user from a partner account. - * - * @param string $userId The user's unique identifier in the partner's system - * @return KalturaUser - */ - function delete($userId) - { - $kparams = array(); - $this->client->addParam($kparams, "userId", $userId); - $this->client->queueServiceActionCall("user", "delete", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaUser"); - return $resultObject; - } - - /** - * Lists user objects that are associated with an account. - Blocked users are listed unless you use a filter to exclude them. - Deleted users are not listed unless you use a filter to include them. - * - * @param KalturaUserFilter $filter A filter used to exclude specific types of users - * @param KalturaFilterPager $pager A limit for the number of records to display on a page - * @return KalturaUserListResponse - */ - function listAction(KalturaUserFilter $filter = null, KalturaFilterPager $pager = null) - { - $kparams = array(); - if ($filter !== null) - $this->client->addParam($kparams, "filter", $filter->toParams()); - if ($pager !== null) - $this->client->addParam($kparams, "pager", $pager->toParams()); - $this->client->queueServiceActionCall("user", "list", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaUserListResponse"); - return $resultObject; - } - - /** - * Notifies that a user is banned from an account. - * - * @param string $userId The user's unique identifier in the partner's system - * @return - */ - function notifyBan($userId) - { - $kparams = array(); - $this->client->addParam($kparams, "userId", $userId); - $this->client->queueServiceActionCall("user", "notifyBan", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "null"); - return $resultObject; - } - - /** - * Logs a user into a partner account with a partner ID, a partner user ID (puser), and a user password. - * - * @param int $partnerId The identifier of the partner account - * @param string $userId The user's unique identifier in the partner's system - * @param string $password The user's password - * @param int $expiry The requested time (in seconds) before the generated KS expires (By default, a KS expires after 24 hours). - * @param string $privileges Special privileges - * @return string - */ - function login($partnerId, $userId, $password, $expiry = 86400, $privileges = "*") - { - $kparams = array(); - $this->client->addParam($kparams, "partnerId", $partnerId); - $this->client->addParam($kparams, "userId", $userId); - $this->client->addParam($kparams, "password", $password); - $this->client->addParam($kparams, "expiry", $expiry); - $this->client->addParam($kparams, "privileges", $privileges); - $this->client->queueServiceActionCall("user", "login", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "string"); - return $resultObject; - } - - /** - * Logs a user into a partner account with a user login ID and a user password. - * - * @param string $loginId The user's email address that identifies the user for login - * @param string $password The user's password - * @param int $partnerId The identifier of the partner account - * @param int $expiry The requested time (in seconds) before the generated KS expires (By default, a KS expires after 24 hours). - * @param string $privileges Special privileges - * @return string - */ - function loginByLoginId($loginId, $password, $partnerId = null, $expiry = 86400, $privileges = "*") - { - $kparams = array(); - $this->client->addParam($kparams, "loginId", $loginId); - $this->client->addParam($kparams, "password", $password); - $this->client->addParam($kparams, "partnerId", $partnerId); - $this->client->addParam($kparams, "expiry", $expiry); - $this->client->addParam($kparams, "privileges", $privileges); - $this->client->queueServiceActionCall("user", "loginByLoginId", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "string"); - return $resultObject; - } - - /** - * Updates a user's login data: email, password, name. - * - * @param string $oldLoginId The user's current email address that identified the user for login - * @param string $password The user's current email address that identified the user for login - * @param string $newLoginId Optional, The user's email address that will identify the user for login - * @param string $newPassword Optional, The user's new password - * @param string $newFirstName Optional, The user's new first name - * @param string $newLastName Optional, The user's new last name - * @return - */ - function updateLoginData($oldLoginId, $password, $newLoginId = "", $newPassword = "", $newFirstName = null, $newLastName = null) - { - $kparams = array(); - $this->client->addParam($kparams, "oldLoginId", $oldLoginId); - $this->client->addParam($kparams, "password", $password); - $this->client->addParam($kparams, "newLoginId", $newLoginId); - $this->client->addParam($kparams, "newPassword", $newPassword); - $this->client->addParam($kparams, "newFirstName", $newFirstName); - $this->client->addParam($kparams, "newLastName", $newLastName); - $this->client->queueServiceActionCall("user", "updateLoginData", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "null"); - return $resultObject; - } - - /** - * Reset user's password and send the user an email to generate a new one. - * - * @param string $email The user's email address (login email) - * @return - */ - function resetPassword($email) - { - $kparams = array(); - $this->client->addParam($kparams, "email", $email); - $this->client->queueServiceActionCall("user", "resetPassword", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "null"); - return $resultObject; - } - - /** - * Set initial users password - * - * @param string $hashKey The hash key used to identify the user (retrieved by email) - * @param string $newPassword The new password to set for the user - * @return - */ - function setInitialPassword($hashKey, $newPassword) - { - $kparams = array(); - $this->client->addParam($kparams, "hashKey", $hashKey); - $this->client->addParam($kparams, "newPassword", $newPassword); - $this->client->queueServiceActionCall("user", "setInitialPassword", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "null"); - return $resultObject; - } - - /** - * Enables a user to log into a partner account using an email address and a password - * - * @param string $userId The user's unique identifier in the partner's system - * @param string $loginId The user's email address that identifies the user for login - * @param string $password The user's password - * @return KalturaUser - */ - function enableLogin($userId, $loginId, $password = null) - { - $kparams = array(); - $this->client->addParam($kparams, "userId", $userId); - $this->client->addParam($kparams, "loginId", $loginId); - $this->client->addParam($kparams, "password", $password); - $this->client->queueServiceActionCall("user", "enableLogin", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaUser"); - return $resultObject; - } - - /** - * Disables a user's ability to log into a partner account using an email address and a password. - You may use either a userId or a loginId parameter for this action. - * - * @param string $userId The user's unique identifier in the partner's system - * @param string $loginId The user's email address that identifies the user for login - * @return KalturaUser - */ - function disableLogin($userId = null, $loginId = null) - { - $kparams = array(); - $this->client->addParam($kparams, "userId", $userId); - $this->client->addParam($kparams, "loginId", $loginId); - $this->client->queueServiceActionCall("user", "disableLogin", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaUser"); - return $resultObject; - } - - /** - * Index an entry by id. - * - * @param string $id - * @param bool $shouldUpdate - * @return string - */ - function index($id, $shouldUpdate = true) - { - $kparams = array(); - $this->client->addParam($kparams, "id", $id); - $this->client->addParam($kparams, "shouldUpdate", $shouldUpdate); - $this->client->queueServiceActionCall("user", "index", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "string"); - return $resultObject; - } - - /** - * - * - * @param file $fileData - * @param KalturaBulkUploadJobData $bulkUploadData - * @param KalturaBulkUploadUserData $bulkUploadUserData - * @return KalturaBulkUpload - */ - function addFromBulkUpload($fileData, KalturaBulkUploadJobData $bulkUploadData = null, KalturaBulkUploadUserData $bulkUploadUserData = null) - { - $kparams = array(); - $kfiles = array(); - $this->client->addParam($kfiles, "fileData", $fileData); - if ($bulkUploadData !== null) - $this->client->addParam($kparams, "bulkUploadData", $bulkUploadData->toParams()); - if ($bulkUploadUserData !== null) - $this->client->addParam($kparams, "bulkUploadUserData", $bulkUploadUserData->toParams()); - $this->client->queueServiceActionCall("user", "addFromBulkUpload", $kparams, $kfiles); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaBulkUpload"); - return $resultObject; - } - - /** - * Action which checks whther user login - * - * @param KalturaUserLoginDataFilter $filter - * @return bool - */ - function checkLoginDataExists(KalturaUserLoginDataFilter $filter) - { - $kparams = array(); - $this->client->addParam($kparams, "filter", $filter->toParams()); - $this->client->queueServiceActionCall("user", "checkLoginDataExists", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $resultObject = (bool) $resultObject; - return $resultObject; - } -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaWidgetService extends KalturaServiceBase -{ - function __construct(KalturaClient $client = null) - { - parent::__construct($client); - } - - /** - * Add new widget, can be attached to entry or kshow - SourceWidget is ignored. - * - * @param KalturaWidget $widget - * @return KalturaWidget - */ - function add(KalturaWidget $widget) - { - $kparams = array(); - $this->client->addParam($kparams, "widget", $widget->toParams()); - $this->client->queueServiceActionCall("widget", "add", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaWidget"); - return $resultObject; - } - - /** - * Update exisiting widget - * - * @param string $id - * @param KalturaWidget $widget - * @return KalturaWidget - */ - function update($id, KalturaWidget $widget) - { - $kparams = array(); - $this->client->addParam($kparams, "id", $id); - $this->client->addParam($kparams, "widget", $widget->toParams()); - $this->client->queueServiceActionCall("widget", "update", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaWidget"); - return $resultObject; - } - - /** - * Get widget by id - * - * @param string $id - * @return KalturaWidget - */ - function get($id) - { - $kparams = array(); - $this->client->addParam($kparams, "id", $id); - $this->client->queueServiceActionCall("widget", "get", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaWidget"); - return $resultObject; - } - - /** - * Add widget based on existing widget. - Must provide valid sourceWidgetId - * - * @param KalturaWidget $widget - * @return KalturaWidget - */ - function cloneAction(KalturaWidget $widget) - { - $kparams = array(); - $this->client->addParam($kparams, "widget", $widget->toParams()); - $this->client->queueServiceActionCall("widget", "clone", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaWidget"); - return $resultObject; - } - - /** - * Retrieve a list of available widget depends on the filter given - * - * @param KalturaWidgetFilter $filter - * @param KalturaFilterPager $pager - * @return KalturaWidgetListResponse - */ - function listAction(KalturaWidgetFilter $filter = null, KalturaFilterPager $pager = null) - { - $kparams = array(); - if ($filter !== null) - $this->client->addParam($kparams, "filter", $filter->toParams()); - if ($pager !== null) - $this->client->addParam($kparams, "pager", $pager->toParams()); - $this->client->queueServiceActionCall("widget", "list", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaWidgetListResponse"); - return $resultObject; - } -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaXInternalService extends KalturaServiceBase -{ - function __construct(KalturaClient $client = null) - { - parent::__construct($client); - } - - /** - * Creates new download job for multiple entry ids (comma separated), an email will be sent when the job is done - This sevice support the following entries: - - MediaEntry - - Video will be converted using the flavor params id - - Audio will be downloaded as MP3 - - Image will be downloaded as Jpeg - - MixEntry will be flattened using the flavor params id - - Other entry types are not supported - Returns the admin email that the email message will be sent to - * - * @param string $entryIds Comma separated list of entry ids - * @param string $flavorParamsId - * @return string - */ - function xAddBulkDownload($entryIds, $flavorParamsId = "") - { - $kparams = array(); - $this->client->addParam($kparams, "entryIds", $entryIds); - $this->client->addParam($kparams, "flavorParamsId", $flavorParamsId); - $this->client->queueServiceActionCall("xinternal", "xAddBulkDownload", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "string"); - return $resultObject; - } -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaClient extends KalturaClientBase -{ - /** - * @var string - */ - protected $apiVersion = '3.1.6'; - - /** - * Manage access control profiles - * @var KalturaAccessControlProfileService - */ - public $accessControlProfile = null; - - /** - * Add & Manage Access Controls - * @var KalturaAccessControlService - */ - public $accessControl = null; - - /** - * Manage details for the administrative user - * @var KalturaAdminUserService - */ - public $adminUser = null; - - /** - * Base Entry Service - * @var KalturaBaseEntryService - */ - public $baseEntry = null; - - /** - * Bulk upload service is used to upload & manage bulk uploads using CSV files. - * This service manages only entry bulk uploads. - * @var KalturaBulkUploadService - */ - public $bulkUpload = null; - - /** - * Add & Manage CategoryEntry - assign entry to category - * @var KalturaCategoryEntryService - */ - public $categoryEntry = null; - - /** - * Add & Manage Categories - * @var KalturaCategoryService - */ - public $category = null; - - /** - * Add & Manage CategoryUser - membership of a user in a category - * @var KalturaCategoryUserService - */ - public $categoryUser = null; - - /** - * Manage the connection between Conversion Profiles and Asset Params - * @var KalturaConversionProfileAssetParamsService - */ - public $conversionProfileAssetParams = null; - - /** - * Add & Manage Conversion Profiles - * @var KalturaConversionProfileService - */ - public $conversionProfile = null; - - /** - * Data service lets you manage data content (textual content) - * @var KalturaDataService - */ - public $data = null; - - /** - * Document service - * @var KalturaDocumentService - */ - public $document = null; - - /** - * EmailIngestionProfile service lets you manage email ingestion profile records - * @var KalturaEmailIngestionProfileService - */ - public $EmailIngestionProfile = null; - - /** - * Manage file assets - * @var KalturaFileAssetService - */ - public $fileAsset = null; - - /** - * Retrieve information and invoke actions on Flavor Asset - * @var KalturaFlavorAssetService - */ - public $flavorAsset = null; - - /** - * Flavor Params Output service - * @var KalturaFlavorParamsOutputService - */ - public $flavorParamsOutput = null; - - /** - * Add & Manage Flavor Params - * @var KalturaFlavorParamsService - */ - public $flavorParams = null; - - /** - * Manage live channel segments - * @var KalturaLiveChannelSegmentService - */ - public $liveChannelSegment = null; - - /** - * Live Channel service lets you manage live channels - * @var KalturaLiveChannelService - */ - public $liveChannel = null; - - /** - * Live Stream service lets you manage live stream entries - * @var KalturaLiveStreamService - */ - public $liveStream = null; - - /** - * Media Info service - * @var KalturaMediaInfoService - */ - public $mediaInfo = null; - - /** - * Manage media servers - * @var KalturaMediaServerService - */ - public $mediaServer = null; - - /** - * Media service lets you upload and manage media files (images / videos & audio) - * @var KalturaMediaService - */ - public $media = null; - - /** - * A Mix is an XML unique format invented by Kaltura, it allows the user to create a mix of videos and images, in and out points, transitions, text overlays, soundtrack, effects and much more... - * Mixing service lets you create a new mix, manage its metadata and make basic manipulations. - * @var KalturaMixingService - */ - public $mixing = null; - - /** - * Notification Service - * @var KalturaNotificationService - */ - public $notification = null; - - /** - * Partner service allows you to change/manage your partner personal details and settings as well - * @var KalturaPartnerService - */ - public $partner = null; - - /** - * PermissionItem service lets you create and manage permission items - * @var KalturaPermissionItemService - */ - public $permissionItem = null; - - /** - * Permission service lets you create and manage user permissions - * @var KalturaPermissionService - */ - public $permission = null; - - /** - * Playlist service lets you create,manage and play your playlists - * Playlists could be static (containing a fixed list of entries) or dynamic (baseed on a filter) - * @var KalturaPlaylistService - */ - public $playlist = null; - - /** - * Api for getting reports data by the report type and some inputFilter - * @var KalturaReportService - */ - public $report = null; - - /** - * Expose the schema definitions for syndication MRSS, bulk upload XML and other schema types. - * @var KalturaSchemaService - */ - public $schema = null; - - /** - * Search service allows you to search for media in various media providers - * This service is being used mostly by the CW component - * @var KalturaSearchService - */ - public $search = null; - - /** - * Session service - * @var KalturaSessionService - */ - public $session = null; - - /** - * Stats Service - * @var KalturaStatsService - */ - public $stats = null; - - /** - * Storage Profiles service - * @var KalturaStorageProfileService - */ - public $storageProfile = null; - - /** - * Add & Manage Syndication Feeds - * @var KalturaSyndicationFeedService - */ - public $syndicationFeed = null; - - /** - * System service is used for internal system helpers & to retrieve system level information - * @var KalturaSystemService - */ - public $system = null; - - /** - * Retrieve information and invoke actions on Thumb Asset - * @var KalturaThumbAssetService - */ - public $thumbAsset = null; - - /** - * Thumbnail Params Output service - * @var KalturaThumbParamsOutputService - */ - public $thumbParamsOutput = null; - - /** - * Add & Manage Thumb Params - * @var KalturaThumbParamsService - */ - public $thumbParams = null; - - /** - * UiConf service lets you create and manage your UIConfs for the various flash components - * This service is used by the KMC-ApplicationStudio - * @var KalturaUiConfService - */ - public $uiConf = null; - - /** - * - * @var KalturaUploadService - */ - public $upload = null; - - /** - * - * @var KalturaUploadTokenService - */ - public $uploadToken = null; - - /** - * UserRole service lets you create and manage user roles - * @var KalturaUserRoleService - */ - public $userRole = null; - - /** - * Manage partner users on Kaltura's side - * The userId in kaltura is the unique Id in the partner's system, and the [partnerId,Id] couple are unique key in kaltura's DB - * @var KalturaUserService - */ - public $user = null; - - /** - * Widget service for full widget management - * @var KalturaWidgetService - */ - public $widget = null; - - /** - * Internal Service is used for actions that are used internally in Kaltura applications and might be changed in the future without any notice. - * @var KalturaXInternalService - */ - public $xInternal = null; - - /** - * Kaltura client constructor - * - * @param KalturaConfiguration $config - */ - public function __construct(KalturaConfiguration $config) - { - parent::__construct($config); - - $this->accessControlProfile = new KalturaAccessControlProfileService($this); - $this->accessControl = new KalturaAccessControlService($this); - $this->adminUser = new KalturaAdminUserService($this); - $this->baseEntry = new KalturaBaseEntryService($this); - $this->bulkUpload = new KalturaBulkUploadService($this); - $this->categoryEntry = new KalturaCategoryEntryService($this); - $this->category = new KalturaCategoryService($this); - $this->categoryUser = new KalturaCategoryUserService($this); - $this->conversionProfileAssetParams = new KalturaConversionProfileAssetParamsService($this); - $this->conversionProfile = new KalturaConversionProfileService($this); - $this->data = new KalturaDataService($this); - $this->document = new KalturaDocumentService($this); - $this->EmailIngestionProfile = new KalturaEmailIngestionProfileService($this); - $this->fileAsset = new KalturaFileAssetService($this); - $this->flavorAsset = new KalturaFlavorAssetService($this); - $this->flavorParamsOutput = new KalturaFlavorParamsOutputService($this); - $this->flavorParams = new KalturaFlavorParamsService($this); - $this->liveChannelSegment = new KalturaLiveChannelSegmentService($this); - $this->liveChannel = new KalturaLiveChannelService($this); - $this->liveStream = new KalturaLiveStreamService($this); - $this->mediaInfo = new KalturaMediaInfoService($this); - $this->mediaServer = new KalturaMediaServerService($this); - $this->media = new KalturaMediaService($this); - $this->mixing = new KalturaMixingService($this); - $this->notification = new KalturaNotificationService($this); - $this->partner = new KalturaPartnerService($this); - $this->permissionItem = new KalturaPermissionItemService($this); - $this->permission = new KalturaPermissionService($this); - $this->playlist = new KalturaPlaylistService($this); - $this->report = new KalturaReportService($this); - $this->schema = new KalturaSchemaService($this); - $this->search = new KalturaSearchService($this); - $this->session = new KalturaSessionService($this); - $this->stats = new KalturaStatsService($this); - $this->storageProfile = new KalturaStorageProfileService($this); - $this->syndicationFeed = new KalturaSyndicationFeedService($this); - $this->system = new KalturaSystemService($this); - $this->thumbAsset = new KalturaThumbAssetService($this); - $this->thumbParamsOutput = new KalturaThumbParamsOutputService($this); - $this->thumbParams = new KalturaThumbParamsService($this); - $this->uiConf = new KalturaUiConfService($this); - $this->upload = new KalturaUploadService($this); - $this->uploadToken = new KalturaUploadTokenService($this); - $this->userRole = new KalturaUserRoleService($this); - $this->user = new KalturaUserService($this); - $this->widget = new KalturaWidgetService($this); - $this->xInternal = new KalturaXInternalService($this); - } - -} - diff --git a/local/kaltura/API/KalturaClientBase.php b/local/kaltura/API/KalturaClientBase.php deleted file mode 100644 index aff941328d669..0000000000000 --- a/local/kaltura/API/KalturaClientBase.php +++ /dev/null @@ -1,1228 +0,0 @@ -. -// -// @ignore -// =================================================================================================== - -/** - * @package Kaltura - * @subpackage Client - */ -class MultiRequestSubResult implements ArrayAccess -{ - function __construct($value) - { - $this->value = $value; - } - - function __toString() - { - return '{' . $this->value . '}'; - } - - function __get($name) - { - return new MultiRequestSubResult($this->value . ':' . $name); - } - - public function offsetExists($offset) - { - return true; - } - - public function offsetGet($offset) - { - return new MultiRequestSubResult($this->value . ':' . $offset); - } - - public function offsetSet($offset, $value) - { - } - - public function offsetUnset($offset) - { - } -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaNull -{ - private static $instance; - - private function __construct() - { - - } - - public static function getInstance() - { - if (!isset(self::$instance)) { - $c = __CLASS__; - self::$instance = new $c(); - } - return self::$instance; - } - - function __toString() - { - return ''; - } - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaClientBase -{ - const KALTURA_SERVICE_FORMAT_JSON = 1; - const KALTURA_SERVICE_FORMAT_XML = 2; - const KALTURA_SERVICE_FORMAT_PHP = 3; - - // KS V2 constants - const RANDOM_SIZE = 16; - - const FIELD_EXPIRY = '_e'; - const FIELD_TYPE = '_t'; - const FIELD_USER = '_u'; - - const METHOD_POST = 'POST'; - const METHOD_GET = 'GET'; - - /** - * @var string - */ - protected $apiVersion = null; - - /** - * @var KalturaConfiguration - */ - protected $config; - - /** - * @var string - */ - private $ks; - - /** - * @var boolean - */ - private $shouldLog = false; - - /** - * @var bool - */ - private $isMultiRequest = false; - - /** - * @var unknown_type - */ - private $callsQueue = array(); - - /** - * Array of all plugin services - * - * @var array - */ - protected $pluginServices = array(); - - /** - * @var Array of response headers - */ - private $responseHeaders = array(); - - /** - * path to save served results - * @var string - */ - protected $destinationPath = null; - - /** - * return served results without unserializing them - * @var boolean - */ - protected $returnServedResult = null; - - public function __get($serviceName) - { - if(isset($this->pluginServices[$serviceName])) - return $this->pluginServices[$serviceName]; - - return null; - } - - /** - * Kaltura client constructor - * - * @param KalturaConfiguration $config - */ - public function __construct(KalturaConfiguration $config) - { - $this->config = $config; - - $logger = $this->config->getLogger(); - if ($logger) - { - $this->shouldLog = true; - } - - // load all plugins - $pluginsFolder = realpath(dirname(__FILE__)) . '/KalturaPlugins'; - if(is_dir($pluginsFolder)) - { - $dir = dir($pluginsFolder); - while (false !== $fileName = $dir->read()) - { - $matches = null; - if(preg_match('/^([^.]+).php$/', $fileName, $matches)) - { - require_once("$pluginsFolder/$fileName"); - - $pluginClass = $matches[1]; - if(!class_exists($pluginClass) || !in_array('IKalturaClientPlugin', class_implements($pluginClass))) - continue; - - $plugin = call_user_func(array($pluginClass, 'get'), $this); - if(!($plugin instanceof IKalturaClientPlugin)) - continue; - - $pluginName = $plugin->getName(); - $services = $plugin->getServices(); - foreach($services as $serviceName => $service) - { - $service->setClient($this); - $this->pluginServices[$serviceName] = $service; - } - } - } - } - } - - /* Store response headers into array */ - public function readHeader($ch, $string) - { - array_push($this->responseHeaders, $string); - return strlen($string); - } - - /* Retrive response headers */ - public function getResponseHeaders() - { - return $this->responseHeaders; - } - - public function getServeUrl() - { - if (count($this->callsQueue) != 1) - return null; - - $params = array(); - $files = array(); - $this->log("service url: [" . $this->config->serviceUrl . "]"); - - // append the basic params - $this->addParam($params, "apiVersion", $this->apiVersion); - $this->addParam($params, "format", $this->config->format); - $this->addParam($params, "clientTag", $this->config->clientTag); - - $call = $this->callsQueue[0]; - $this->resetRequest(); - - $params = array_merge($params, $call->params); - $signature = $this->signature($params); - $this->addParam($params, "kalsig", $signature); - - $url = $this->config->serviceUrl . "/api_v3/index.php?service={$call->service}&action={$call->action}"; - $url .= '&' . http_build_query($params); - $this->log("Returned url [$url]"); - return $url; - } - - public function queueServiceActionCall($service, $action, $params = array(), $files = array()) - { - // in start session partner id is optional (default -1). if partner id was not set, use the one in the config - if ((!isset($params["partnerId"]) || $params["partnerId"] === -1) && !is_null($this->config->partnerId)) - $params["partnerId"] = $this->config->partnerId; - - $this->addParam($params, "ks", $this->ks); - - $call = new KalturaServiceActionCall($service, $action, $params, $files); - $this->callsQueue[] = $call; - } - - protected function resetRequest() - { - $this->destinationPath = null; - $this->returnServedResult = false; - $this->isMultiRequest = false; - $this->callsQueue = array(); - } - - /** - * Call all API service that are in queue - * - * @return unknown - */ - public function doQueue() - { - if($this->isMultiRequest && ($this->destinationPath || $this->returnServedResult)) - { - $this->resetRequest(); - throw new KalturaClientException("Downloading files is not supported as part of multi-request.", KalturaClientException::ERROR_DOWNLOAD_IN_MULTIREQUEST); - } - - if (count($this->callsQueue) == 0) - { - $this->resetRequest(); - return null; - } - - $startTime = microtime(true); - - $params = array(); - $files = array(); - $this->log("service url: [" . $this->config->serviceUrl . "]"); - - // append the basic params - $this->addParam($params, "apiVersion", $this->apiVersion); - $this->addParam($params, "format", $this->config->format); - $this->addParam($params, "clientTag", $this->config->clientTag); - $this->addParam($params, "ignoreNull", true); - - $url = $this->config->serviceUrl."/api_v3/index.php?service="; - if ($this->isMultiRequest) - { - $url .= "multirequest"; - $i = 1; - foreach ($this->callsQueue as $call) - { - $callParams = $call->getParamsForMultiRequest($i); - $callFiles = $call->getFilesForMultiRequest($i); - $params = array_merge($params, $callParams); - $files = array_merge($files, $callFiles); - $i++; - } - } - else - { - $call = $this->callsQueue[0]; - $url .= $call->service."&action=".$call->action; - $params = array_merge($params, $call->params); - $files = $call->files; - } - - $signature = $this->signature($params); - $this->addParam($params, "kalsig", $signature); - - try - { - list($postResult, $error) = $this->doHttpRequest($url, $params, $files); - } - catch(Exception $e) - { - $this->resetRequest(); - throw $e; - } - - if ($error) - { - $this->resetRequest(); - throw new KalturaClientException($error, KalturaClientException::ERROR_GENERIC); - } - else - { - // print server debug info to log - $serverName = null; - $serverSession = null; - foreach ($this->responseHeaders as $curHeader) - { - $splittedHeader = explode(':', $curHeader, 2); - if ($splittedHeader[0] == 'X-Me') - $serverName = trim($splittedHeader[1]); - else if ($splittedHeader[0] == 'X-Kaltura-Session') - $serverSession = trim($splittedHeader[1]); - } - if (!is_null($serverName) || !is_null($serverSession)) - $this->log("server: [{$serverName}], session: [{$serverSession}]"); - - $this->log("result (serialized): " . $postResult); - - if($this->returnServedResult) - { - $result = $postResult; - } - elseif($this->destinationPath) - { - if(!$postResult) - { - $this->resetRequest(); - throw new KalturaClientException("failed to download file", KalturaClientException::ERROR_READ_FAILED); - } - } - elseif ($this->config->format == self::KALTURA_SERVICE_FORMAT_PHP) - { - $result = @unserialize($postResult); - - if ($result === false && serialize(false) !== $postResult) - { - $this->resetRequest(); - throw new KalturaClientException("failed to unserialize server result\n$postResult", KalturaClientException::ERROR_UNSERIALIZE_FAILED); - } - $dump = print_r($result, true); - $this->log("result (object dump): " . $dump); - } - else - { - $this->resetRequest(); - throw new KalturaClientException("unsupported format: $postResult", KalturaClientException::ERROR_FORMAT_NOT_SUPPORTED); - } - } - $this->resetRequest(); - - $endTime = microtime (true); - - $this->log("execution time for [".$url."]: [" . ($endTime - $startTime) . "]"); - - return $result; - } - - /** - * Sign array of parameters - * - * @param array $params - * @return string - */ - private function signature($params) - { - ksort($params); - $str = ""; - foreach ($params as $k => $v) - { - $str .= $k.$v; - } - return md5($str); - } - - /** - * Send http request by using curl (if available) or php stream_context - * - * @param string $url - * @param parameters $params - * @return array of result and error - */ - protected function doHttpRequest($url, $params = array(), $files = array()) - { - if (function_exists('curl_init')) - return $this->doCurl($url, $params, $files); - - if($this->destinationPath || $this->returnServedResult) - throw new KalturaClientException("Downloading files is not supported with stream context http request, please use curl.", KalturaClientException::ERROR_DOWNLOAD_NOT_SUPPORTED); - - return $this->doPostRequest($url, $params, $files); - } - - /** - * Curl HTTP POST Request - * - * @param string $url - * @param array $params - * @param array $files - * @return array of result and error - */ - private function doCurl($url, $params = array(), $files = array()) - { - $opt = http_build_query($params, null, "&"); - // Force POST in case we have files - if(count($files) > 0) { - $this->config->method = self::METHOD_POST; - } - // Check for GET and append params to url - if( $this->config->method == self::METHOD_GET ) { - $url = $url . '&' . $opt; - } - $this->responseHeaders = array(); - $cookies = array(); - $ch = curl_init(); - curl_setopt($ch, CURLOPT_URL, $url); - if( $this->config->method == self::METHOD_POST ) { - curl_setopt($ch, CURLOPT_POST, 1); - if (count($files) > 0) - { - foreach($files as &$file) - $file = "@".$file; // let curl know its a file - curl_setopt($ch, CURLOPT_POSTFIELDS, array_merge($params, $files)); - } - else - { - $this->log("curl: $url&$opt"); - curl_setopt($ch, CURLOPT_POSTFIELDS, $opt); - } - } - curl_setopt($ch, CURLOPT_ENCODING, 'gzip,deflate'); - curl_setopt($ch, CURLOPT_USERAGENT, $this->config->userAgent); - if (count($files) > 0) - curl_setopt($ch, CURLOPT_TIMEOUT, 0); - else - curl_setopt($ch, CURLOPT_TIMEOUT, $this->config->curlTimeout); - - if ($this->config->startZendDebuggerSession === true) - { - $zendDebuggerParams = $this->getZendDebuggerParams($url); - $cookies = array_merge($cookies, $zendDebuggerParams); - } - - if (count($cookies) > 0) - { - $cookiesStr = http_build_query($cookies, null, '; '); - curl_setopt($ch, CURLOPT_COOKIE, $cookiesStr); - } - - if (isset($this->config->proxyHost)) { - curl_setopt($ch, CURLOPT_HTTPPROXYTUNNEL, true); - curl_setopt($ch, CURLOPT_PROXY, $this->config->proxyHost); - if (isset($this->config->proxyPort)) { - curl_setopt($ch, CURLOPT_PROXYPORT, $this->config->proxyPort); - } - if (isset($this->config->proxyUser)) { - curl_setopt($ch, CURLOPT_PROXYUSERPWD, $this->config->proxyUser.':'.$this->config->proxyPassword); - } - if (isset($this->config->proxyType) && $this->config->proxyType === 'SOCKS5') { - curl_setopt($ch, CURLOPT_PROXYTYPE, CURLPROXY_SOCKS5); - } - } - - // Set SSL verification - if(!$this->getConfig()->verifySSL) - { - curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); - curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 2); - } - elseif($this->getConfig()->sslCertificatePath) - { - curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, true); - curl_setopt($ch, CURLOPT_CAINFO, $this->getConfig()->sslCertificatePath); - } - - // Set custom headers - curl_setopt($ch, CURLOPT_HTTPHEADER, $this->config->requestHeaders ); - - // Save response headers - curl_setopt($ch, CURLOPT_HEADERFUNCTION, array($this, 'readHeader') ); - - $destinationResource = null; - if($this->destinationPath) - { - $destinationResource = fopen($this->destinationPath, "wb"); - curl_setopt($ch, CURLOPT_FILE, $destinationResource); - } - else - { - curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); - } - - $result = curl_exec($ch); - - if($destinationResource) - fclose($destinationResource); - - $curlError = curl_error($ch); - curl_close($ch); - return array($result, $curlError); - } - - /** - * HTTP stream context request - * - * @param string $url - * @param array $params - * @return array of result and error - */ - private function doPostRequest($url, $params = array(), $files = array()) - { - if (count($files) > 0) - throw new KalturaClientException("Uploading files is not supported with stream context http request, please use curl.", KalturaClientException::ERROR_UPLOAD_NOT_SUPPORTED); - - $formattedData = http_build_query($params , "", "&"); - $this->log("post: $url&$formattedData"); - - $params = array('http' => array( - "method" => "POST", - "User-Agent: " . $this->config->userAgent . "\r\n". - "Accept-language: en\r\n". - "Content-type: application/x-www-form-urlencoded\r\n", - "content" => $formattedData - )); - - if (isset($this->config->proxyType) && $this->config->proxyType === 'SOCKS5') { - throw new KalturaClientException("Cannot use SOCKS5 without curl installed.", KalturaClientException::ERROR_CONNECTION_FAILED); - } - if (isset($this->config->proxyHost)) { - $proxyhost = 'tcp://' . $this->config->proxyHost; - if (isset($this->config->proxyPort)) { - $proxyhost = $proxyhost . ":" . $this->config->proxyPort; - } - $params['http']['proxy'] = $proxyhost; - $params['http']['request_fulluri'] = true; - if (isset($this->config->proxyUser)) { - $auth = base64_encode($this->config->proxyUser.':'.$this->config->proxyPassword); - $params['http']['header'] = 'Proxy-Authorization: Basic ' . $auth; - } - } - - $ctx = stream_context_create($params); - $fp = @fopen($url, 'rb', false, $ctx); - if (!$fp) { - $phpErrorMsg = ""; - throw new KalturaClientException("Problem with $url, $phpErrorMsg", KalturaClientException::ERROR_CONNECTION_FAILED); - } - $response = @stream_get_contents($fp); - if ($response === false) { - throw new KalturaClientException("Problem reading data from $url, $phpErrorMsg", KalturaClientException::ERROR_READ_FAILED); - } - return array($response, ''); - } - - /** - * @return string - */ - public function getKs() - { - return $this->ks; - } - - /** - * @param string $ks - */ - public function setKs($ks) - { - $this->ks = $ks; - } - - /** - * @param boolean $returnServedResult - */ - public function setReturnServedResult($returnServedResult) - { - $this->returnServedResult = $returnServedResult; - } - - /** - * @return boolean - */ - public function getReturnServedResult() - { - return $this->returnServedResult; - } - - /** - * @param string $destinationPath - */ - public function setDestinationPath($destinationPath) - { - $this->destinationPath = $destinationPath; - } - - /** - * @return string - */ - public function getDestinationPath() - { - return $this->destinationPath; - } - - /** - * @return KalturaConfiguration - */ - public function getConfig() - { - return $this->config; - } - - /** - * @param KalturaConfiguration $config - */ - public function setConfig(KalturaConfiguration $config) - { - $this->config = $config; - - $logger = $this->config->getLogger(); - if ($logger instanceof IKalturaLogger) - { - $this->shouldLog = true; - } - } - - /** - * Add parameter to array of parameters that is passed by reference - * - * @param arrat $params - * @param string $paramName - * @param string $paramValue - */ - public function addParam(&$params, $paramName, $paramValue) - { - if ($paramValue === null) - return; - - if ($paramValue instanceof KalturaNull) { - $params[$paramName . '__null'] = ''; - return; - } - - if(is_object($paramValue) && $paramValue instanceof KalturaObjectBase) - { - $this->addParam($params, "$paramName:objectType", get_class($paramValue)); - foreach($paramValue as $prop => $val) - $this->addParam($params, "$paramName:$prop", $val); - - return; - } - - if(!is_array($paramValue)) - { - $params[$paramName] = (string)$paramValue; - return; - } - - if ($paramValue) - { - foreach($paramValue as $subParamName => $subParamValue) - $this->addParam($params, "$paramName:$subParamName", $subParamValue); - } - else - { - $this->addParam($params, "$paramName:-", ""); - } - } - - /** - * Validate the result object and throw exception if its an error - * - * @param object $resultObject - */ - public function throwExceptionIfError($resultObject) - { - if ($this->isError($resultObject)) - { - throw new KalturaException($resultObject["message"], $resultObject["code"]); - } - } - - /** - * Checks whether the result object is an error - * - * @param object $resultObject - */ - public function isError($resultObject) - { - return (is_array($resultObject) && isset($resultObject["message"]) && isset($resultObject["code"])); - } - - /** - * Validate that the passed object type is of the expected type - * - * @param any $resultObject - * @param string $objectType - */ - public function validateObjectType($resultObject, $objectType) - { - if (is_object($resultObject)) - { - if (!($resultObject instanceof $objectType)) - throw new KalturaClientException("Invalid object type", KalturaClientException::ERROR_INVALID_OBJECT_TYPE); - } - else if (gettype($resultObject) !== "NULL" && gettype($resultObject) !== $objectType) - { - throw new KalturaClientException("Invalid object type", KalturaClientException::ERROR_INVALID_OBJECT_TYPE); - } - } - - public function startMultiRequest() - { - $this->isMultiRequest = true; - } - - public function doMultiRequest() - { - return $this->doQueue(); - } - - public function isMultiRequest() - { - return $this->isMultiRequest; - } - - public function getMultiRequestQueueSize() - { - return count($this->callsQueue); - } - - public function getMultiRequestResult() - { - return new MultiRequestSubResult($this->getMultiRequestQueueSize() . ':result'); - } - - /** - * @param string $msg - */ - protected function log($msg) - { - if ($this->shouldLog) - $this->config->getLogger()->log($msg); - } - - /** - * Return a list of parameter used to a new start debug on the destination server api - * @link http://kb.zend.com/index.php?View=entry&EntryID=434 - * @param $url - */ - protected function getZendDebuggerParams($url) - { - $params = array(); - $passThruParams = array('debug_host', - 'debug_fastfile', - 'debug_port', - 'start_debug', - 'send_debug_header', - 'send_sess_end', - 'debug_jit', - 'debug_stop', - 'use_remote'); - - foreach($passThruParams as $param) - { - if (isset($_COOKIE[$param])) - $params[$param] = $_COOKIE[$param]; - } - - $params['original_url'] = $url; - $params['debug_session_id'] = microtime(true); // to create a new debug session - - return $params; - } - - public function generateSession($adminSecretForSigning, $userId, $type, $partnerId, $expiry = 86400, $privileges = '') - { - $rand = rand(0, 32000); - $expiry = time()+$expiry; - $fields = array ( - $partnerId , - $partnerId , - $expiry , - $type, - $rand , - $userId , - $privileges - ); - $info = implode ( ";" , $fields ); - - $signature = $this->hash ( $adminSecretForSigning , $info ); - $strToHash = $signature . "|" . $info ; - $encoded_str = base64_encode( $strToHash ); - - return $encoded_str; - } - - public static function generateSessionV2($adminSecretForSigning, $userId, $type, $partnerId, $expiry, $privileges) - { - // build fields array - $fields = array(); - foreach (explode(',', $privileges) as $privilege) - { - $privilege = trim($privilege); - if (!$privilege) - continue; - if ($privilege == '*') - $privilege = 'all:*'; - $splittedPrivilege = explode(':', $privilege, 2); - if (count($splittedPrivilege) > 1) - $fields[$splittedPrivilege[0]] = $splittedPrivilege[1]; - else - $fields[$splittedPrivilege[0]] = ''; - } - $fields[self::FIELD_EXPIRY] = time() + $expiry; - $fields[self::FIELD_TYPE] = $type; - $fields[self::FIELD_USER] = $userId; - - // build fields string - $fieldsStr = http_build_query($fields, '', '&'); - $rand = ''; - for ($i = 0; $i < self::RANDOM_SIZE; $i++) - $rand .= chr(rand(0, 0xff)); - $fieldsStr = $rand . $fieldsStr; - $fieldsStr = sha1($fieldsStr, true) . $fieldsStr; - - // encrypt and encode - $encryptedFields = self::aesEncrypt($adminSecretForSigning, $fieldsStr); - $decodedKs = "v2|{$partnerId}|" . $encryptedFields; - return str_replace(array('+', '/'), array('-', '_'), base64_encode($decodedKs)); - } - - protected static function aesEncrypt($key, $message) - { - return mcrypt_encrypt( - MCRYPT_RIJNDAEL_128, - substr(sha1($key, true), 0, 16), - $message, - MCRYPT_MODE_CBC, - str_repeat("\0", 16) // no need for an IV since we add a random string to the message anyway - ); - } - - private function hash ( $salt , $str ) - { - return sha1($salt.$str); - } - - /** - * @return KalturaNull - */ - public static function getKalturaNullValue() - { - - return KalturaNull::getInstance(); - } - -} - -/** - * @package Kaltura - * @subpackage Client - */ -interface IKalturaClientPlugin -{ - /** - * @return KalturaClientPlugin - */ - public static function get(KalturaClient $client); - - /** - * @return array - */ - public function getServices(); - - /** - * @return string - */ - public function getName(); -} - -/** - * @package Kaltura - * @subpackage Client - */ -abstract class KalturaClientPlugin implements IKalturaClientPlugin -{ - protected function __construct(KalturaClient $client) - { - - } -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaServiceActionCall -{ - /** - * @var string - */ - public $service; - - /** - * @var string - */ - public $action; - - - /** - * @var array - */ - public $params; - - /** - * @var array - */ - public $files; - - /** - * Contruct new Kaltura service action call, if params array contain sub arrays (for objects), it will be flattened - * - * @param string $service - * @param string $action - * @param array $params - * @param array $files - */ - public function __construct($service, $action, $params = array(), $files = array()) - { - $this->service = $service; - $this->action = $action; - $this->params = $this->parseParams($params); - $this->files = $files; - } - - /** - * Parse params array and sub arrays (for objects) - * - * @param array $params - */ - public function parseParams(array $params) - { - $newParams = array(); - foreach($params as $key => $val) - { - if (is_array($val)) - { - $newParams[$key] = $this->parseParams($val); - } - else - { - $newParams[$key] = $val; - } - } - return $newParams; - } - - /** - * Return the parameters for a multi request - * - * @param int $multiRequestIndex - */ - public function getParamsForMultiRequest($multiRequestIndex) - { - $multiRequestParams = array(); - $multiRequestParams[$multiRequestIndex.":service"] = $this->service; - $multiRequestParams[$multiRequestIndex.":action"] = $this->action; - foreach($this->params as $key => $val) - { - $multiRequestParams[$multiRequestIndex.":".$key] = $val; - } - return $multiRequestParams; - } - - /** - * Return the parameters for a multi request - * - * @param int $multiRequestIndex - */ - public function getFilesForMultiRequest($multiRequestIndex) - { - $multiRequestParams = array(); - foreach($this->files as $key => $val) - { - $multiRequestParams[$multiRequestIndex.":".$key] = $val; - } - return $multiRequestParams; - } -} - -/** - * Abstract base class for all client services - * - * @package Kaltura - * @subpackage Client - */ -abstract class KalturaServiceBase -{ - /** - * @var KalturaClient - */ - protected $client; - - /** - * Initialize the service keeping reference to the KalturaClient - * - * @param KalturaClient $client - */ - public function __construct(KalturaClient $client = null) - { - $this->client = $client; - } - - /** - * @param KalturaClient $client - */ - public function setClient(KalturaClient $client) - { - $this->client = $client; - } -} - -/** - * Abstract base class for all client objects - * - * @package Kaltura - * @subpackage Client - */ -abstract class KalturaObjectBase -{ - public function __construct($params = array()) - { - foreach ($params as $key => $value) - { - if (!property_exists($this, $key)) - throw new KalturaClientException("property [{$key}] does not exist on object [".get_class($this)."]", KalturaClientException::ERROR_INVALID_OBJECT_FIELD); - $this->$key = $value; - } - } - - protected function addIfNotNull(&$params, $paramName, $paramValue) - { - if ($paramValue !== null) - { - if($paramValue instanceof KalturaObjectBase) - { - $params[$paramName] = $paramValue->toParams(); - } - else - { - $params[$paramName] = $paramValue; - } - } - } - - public function toParams() - { - $params = array(); - $params["objectType"] = get_class($this); - foreach($this as $prop => $val) - { - $this->addIfNotNull($params, $prop, $val); - } - return $params; - } -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaException extends Exception -{ - public function __construct($message, $code) - { - $this->code = $code; - parent::__construct($message); - } -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaClientException extends Exception -{ - const ERROR_GENERIC = -1; - const ERROR_UNSERIALIZE_FAILED = -2; - const ERROR_FORMAT_NOT_SUPPORTED = -3; - const ERROR_UPLOAD_NOT_SUPPORTED = -4; - const ERROR_CONNECTION_FAILED = -5; - const ERROR_READ_FAILED = -6; - const ERROR_INVALID_PARTNER_ID = -7; - const ERROR_INVALID_OBJECT_TYPE = -8; - const ERROR_INVALID_OBJECT_FIELD = -9; - const ERROR_DOWNLOAD_NOT_SUPPORTED = -10; - const ERROR_DOWNLOAD_IN_MULTIREQUEST = -11; -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaConfiguration -{ - private $logger; - - public $serviceUrl = "http://www.kaltura.com/"; - public $partnerId = null; - public $format = 3; - public $clientTag = "php5:14-01-16"; - public $curlTimeout = 120; - public $userAgent = ''; - public $startZendDebuggerSession = false; - public $proxyHost = null; - public $proxyPort = null; - public $proxyType = 'HTTP'; - public $proxyUser = null; - public $proxyPassword = ''; - public $verifySSL = true; - public $sslCertificatePath = null; - public $requestHeaders = array(); - public $method = KalturaClientBase::METHOD_POST; - - - - - /** - * Constructs new Kaltura configuration object - * - */ - public function __construct($partnerId = -1) - { - if (!is_null($partnerId) && !is_numeric($partnerId)) - throw new KalturaClientException("Invalid partner id", KalturaClientException::ERROR_INVALID_PARTNER_ID); - - $this->partnerId = $partnerId; - } - - /** - * Set logger to get kaltura client debug logs - * - * @param IKalturaLogger $log - */ - public function setLogger(IKalturaLogger $log) - { - $this->logger = $log; - } - - /** - * Gets the logger (Internal client use) - * - * @return IKalturaLogger - */ - public function getLogger() - { - return $this->logger; - } -} - -/** - * Implement to get Kaltura Client logs - * - * @package Kaltura - * @subpackage Client - */ -interface IKalturaLogger -{ - function log($msg); -} - - diff --git a/local/kaltura/API/KalturaEnums.php b/local/kaltura/API/KalturaEnums.php deleted file mode 100644 index cefdffdc8e79e..0000000000000 --- a/local/kaltura/API/KalturaEnums.php +++ /dev/null @@ -1,3213 +0,0 @@ -. -// -// @ignore -// =================================================================================================== - -/** - * @package Kaltura - * @subpackage Client - */ -require_once(dirname(__FILE__) . "/KalturaClientBase.php"); - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaAppearInListType -{ - const PARTNER_ONLY = 1; - const CATEGORY_MEMBERS_ONLY = 3; -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaAssetParamsDeletePolicy -{ - const KEEP = 0; - const DELETE = 1; -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaAssetParamsOrigin -{ - const CONVERT = 0; - const INGEST = 1; - const CONVERT_WHEN_MISSING = 2; -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaAssetStatus -{ - const ERROR = -1; - const QUEUED = 0; - const READY = 2; - const DELETED = 3; - const IMPORTING = 7; - const EXPORTING = 9; -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaBatchJobErrorTypes -{ - const APP = 0; - const RUNTIME = 1; - const HTTP = 2; - const CURL = 3; - const KALTURA_API = 4; - const KALTURA_CLIENT = 5; -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaBatchJobStatus -{ - const PENDING = 0; - const QUEUED = 1; - const PROCESSING = 2; - const PROCESSED = 3; - const MOVEFILE = 4; - const FINISHED = 5; - const FAILED = 6; - const ABORTED = 7; - const ALMOST_DONE = 8; - const RETRY = 9; - const FATAL = 10; - const DONT_PROCESS = 11; - const FINISHED_PARTIALLY = 12; -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaBitRateMode -{ - const CBR = 1; - const VBR = 2; -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaCategoryEntryStatus -{ - const PENDING = 1; - const ACTIVE = 2; - const DELETED = 3; - const REJECTED = 4; -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaCategoryStatus -{ - const UPDATING = 1; - const ACTIVE = 2; - const DELETED = 3; - const PURGED = 4; -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaCategoryUserPermissionLevel -{ - const MANAGER = 0; - const MODERATOR = 1; - const CONTRIBUTOR = 2; - const MEMBER = 3; - const NONE = 4; -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaCategoryUserStatus -{ - const ACTIVE = 1; - const PENDING = 2; - const NOT_ACTIVE = 3; - const DELETED = 4; -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaCommercialUseType -{ - const NON_COMMERCIAL_USE = 0; - const COMMERCIAL_USE = 1; -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaContributionPolicyType -{ - const ALL = 1; - const MEMBERS_WITH_CONTRIBUTION_PERMISSION = 2; -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaControlPanelCommandStatus -{ - const PENDING = 1; - const HANDLED = 2; - const DONE = 3; - const FAILED = 4; -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaControlPanelCommandTargetType -{ - const DATA_CENTER = 1; - const SCHEDULER = 2; - const JOB_TYPE = 3; - const JOB = 4; - const BATCH = 5; -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaControlPanelCommandType -{ - const KILL = 4; -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaCountryRestrictionType -{ - const RESTRICT_COUNTRY_LIST = 0; - const ALLOW_COUNTRY_LIST = 1; -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaDVRStatus -{ - const DISABLED = 0; - const ENABLED = 1; -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaDirectoryRestrictionType -{ - const DONT_DISPLAY = 0; - const DISPLAY_WITH_LINK = 1; -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaEditorType -{ - const SIMPLE = 1; - const ADVANCED = 2; -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaEmailIngestionProfileStatus -{ - const INACTIVE = 0; - const ACTIVE = 1; -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaEntryModerationStatus -{ - const PENDING_MODERATION = 1; - const APPROVED = 2; - const REJECTED = 3; - const FLAGGED_FOR_REVIEW = 5; - const AUTO_APPROVED = 6; -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaFeatureStatusType -{ - const LOCK_CATEGORY = 1; - const CATEGORY = 2; - const CATEGORY_ENTRY = 3; - const ENTRY = 4; - const CATEGORY_USER = 5; - const USER = 6; -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaFlavorAssetStatus -{ - const ERROR = -1; - const QUEUED = 0; - const CONVERTING = 1; - const READY = 2; - const DELETED = 3; - const NOT_APPLICABLE = 4; - const TEMP = 5; - const WAIT_FOR_CONVERT = 6; - const IMPORTING = 7; - const VALIDATING = 8; - const EXPORTING = 9; -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaFlavorReadyBehaviorType -{ - const NO_IMPACT = 0; - const INHERIT_FLAVOR_PARAMS = 0; - const REQUIRED = 1; - const OPTIONAL = 2; -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaGender -{ - const UNKNOWN = 0; - const MALE = 1; - const FEMALE = 2; -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaInheritanceType -{ - const INHERIT = 1; - const MANUAL = 2; -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaIpAddressRestrictionType -{ - const RESTRICT_LIST = 0; - const ALLOW_LIST = 1; -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaLicenseType -{ - const UNKNOWN = -1; - const NONE = 0; - const COPYRIGHTED = 1; - const PUBLIC_DOMAIN = 2; - const CREATIVECOMMONS_ATTRIBUTION = 3; - const CREATIVECOMMONS_ATTRIBUTION_SHARE_ALIKE = 4; - const CREATIVECOMMONS_ATTRIBUTION_NO_DERIVATIVES = 5; - const CREATIVECOMMONS_ATTRIBUTION_NON_COMMERCIAL = 6; - const CREATIVECOMMONS_ATTRIBUTION_NON_COMMERCIAL_SHARE_ALIKE = 7; - const CREATIVECOMMONS_ATTRIBUTION_NON_COMMERCIAL_NO_DERIVATIVES = 8; - const GFDL = 9; - const GPL = 10; - const AFFERO_GPL = 11; - const LGPL = 12; - const BSD = 13; - const APACHE = 14; - const MOZILLA = 15; -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaLimitFlavorsRestrictionType -{ - const RESTRICT_LIST = 0; - const ALLOW_LIST = 1; -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaMailJobStatus -{ - const PENDING = 1; - const SENT = 2; - const ERROR = 3; - const QUEUED = 4; -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaMediaServerIndex -{ - const PRIMARY = 0; - const SECONDARY = 1; -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaMediaType -{ - const VIDEO = 1; - const IMAGE = 2; - const AUDIO = 5; - const LIVE_STREAM_FLASH = 201; - const LIVE_STREAM_WINDOWS_MEDIA = 202; - const LIVE_STREAM_REAL_MEDIA = 203; - const LIVE_STREAM_QUICKTIME = 204; -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaModerationFlagType -{ - const SEXUAL_CONTENT = 1; - const VIOLENT_REPULSIVE = 2; - const HARMFUL_DANGEROUS = 3; - const SPAM_COMMERCIALS = 4; - const COPYRIGHT = 5; - const TERMS_OF_USE_VIOLATION = 6; -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaMrssExtensionMode -{ - const APPEND = 1; - const REPLACE = 2; -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaNotificationObjectType -{ - const ENTRY = 1; - const KSHOW = 2; - const USER = 3; - const BATCH_JOB = 4; -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaNotificationStatus -{ - const PENDING = 1; - const SENT = 2; - const ERROR = 3; - const SHOULD_RESEND = 4; - const ERROR_RESENDING = 5; - const SENT_SYNCH = 6; - const QUEUED = 7; -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaNotificationType -{ - const ENTRY_ADD = 1; - const ENTR_UPDATE_PERMISSIONS = 2; - const ENTRY_DELETE = 3; - const ENTRY_BLOCK = 4; - const ENTRY_UPDATE = 5; - const ENTRY_UPDATE_THUMBNAIL = 6; - const ENTRY_UPDATE_MODERATION = 7; - const USER_ADD = 21; - const USER_BANNED = 26; -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaNullableBoolean -{ - const NULL_VALUE = -1; - const FALSE_VALUE = 0; - const TRUE_VALUE = 1; -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaPartnerGroupType -{ - const PUBLISHER = 1; - const VAR_GROUP = 2; - const GROUP = 3; - const TEMPLATE = 4; -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaPartnerStatus -{ - const ACTIVE = 1; - const BLOCKED = 2; - const FULL_BLOCK = 3; -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaPartnerType -{ - const KMC = 1; - const WIKI = 100; - const WORDPRESS = 101; - const DRUPAL = 102; - const DEKIWIKI = 103; - const MOODLE = 104; - const COMMUNITY_EDITION = 105; - const JOOMLA = 106; - const BLACKBOARD = 107; - const SAKAI = 108; - const ADMIN_CONSOLE = 109; -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaPermissionStatus -{ - const ACTIVE = 1; - const BLOCKED = 2; - const DELETED = 3; -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaPermissionType -{ - const NORMAL = 1; - const SPECIAL_FEATURE = 2; - const PLUGIN = 3; - const PARTNER_GROUP = 4; -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaPlaylistType -{ - const STATIC_LIST = 3; - const DYNAMIC = 10; - const EXTERNAL = 101; -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaPrivacyType -{ - const ALL = 1; - const AUTHENTICATED_USERS = 2; - const MEMBERS_ONLY = 3; -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaRecordStatus -{ - const DISABLED = 0; - const ENABLED = 1; -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaReportType -{ - const TOP_CONTENT = 1; - const CONTENT_DROPOFF = 2; - const CONTENT_INTERACTIONS = 3; - const MAP_OVERLAY = 4; - const TOP_CONTRIBUTORS = 5; - const TOP_SYNDICATION = 6; - const CONTENT_CONTRIBUTIONS = 7; - const USER_ENGAGEMENT = 11; - const SPEFICIC_USER_ENGAGEMENT = 12; - const USER_TOP_CONTENT = 13; - const USER_CONTENT_DROPOFF = 14; - const USER_CONTENT_INTERACTIONS = 15; - const APPLICATIONS = 16; - const USER_USAGE = 17; - const SPECIFIC_USER_USAGE = 18; - const VAR_USAGE = 19; - const TOP_CREATORS = 20; - const PLATFORMS = 21; - const OPERATION_SYSTEM = 22; - const BROWSERS = 23; - const PARTNER_USAGE = 201; -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaResponseType -{ - const RESPONSE_TYPE_JSON = 1; - const RESPONSE_TYPE_XML = 2; - const RESPONSE_TYPE_PHP = 3; - const RESPONSE_TYPE_PHP_ARRAY = 4; - const RESPONSE_TYPE_HTML = 7; - const RESPONSE_TYPE_MRSS = 8; - const RESPONSE_TYPE_JSONP = 9; -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaSearchOperatorType -{ - const SEARCH_AND = 1; - const SEARCH_OR = 2; -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaSearchProviderType -{ - const FLICKR = 3; - const YOUTUBE = 4; - const MYSPACE = 7; - const PHOTOBUCKET = 8; - const JAMENDO = 9; - const CCMIXTER = 10; - const NYPL = 11; - const CURRENT = 12; - const MEDIA_COMMONS = 13; - const KALTURA = 20; - const KALTURA_USER_CLIPS = 21; - const ARCHIVE_ORG = 22; - const KALTURA_PARTNER = 23; - const METACAFE = 24; - const SEARCH_PROXY = 28; - const PARTNER_SPECIFIC = 100; -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaSessionType -{ - const USER = 0; - const ADMIN = 2; -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaSiteRestrictionType -{ - const RESTRICT_SITE_LIST = 0; - const ALLOW_SITE_LIST = 1; -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaStatsEventType -{ - const WIDGET_LOADED = 1; - const MEDIA_LOADED = 2; - const PLAY = 3; - const PLAY_REACHED_25 = 4; - const PLAY_REACHED_50 = 5; - const PLAY_REACHED_75 = 6; - const PLAY_REACHED_100 = 7; - const OPEN_EDIT = 8; - const OPEN_VIRAL = 9; - const OPEN_DOWNLOAD = 10; - const OPEN_REPORT = 11; - const BUFFER_START = 12; - const BUFFER_END = 13; - const OPEN_FULL_SCREEN = 14; - const CLOSE_FULL_SCREEN = 15; - const REPLAY = 16; - const SEEK = 17; - const OPEN_UPLOAD = 18; - const SAVE_PUBLISH = 19; - const CLOSE_EDITOR = 20; - const PRE_BUMPER_PLAYED = 21; - const POST_BUMPER_PLAYED = 22; - const BUMPER_CLICKED = 23; - const PREROLL_STARTED = 24; - const MIDROLL_STARTED = 25; - const POSTROLL_STARTED = 26; - const OVERLAY_STARTED = 27; - const PREROLL_CLICKED = 28; - const MIDROLL_CLICKED = 29; - const POSTROLL_CLICKED = 30; - const OVERLAY_CLICKED = 31; - const PREROLL_25 = 32; - const PREROLL_50 = 33; - const PREROLL_75 = 34; - const MIDROLL_25 = 35; - const MIDROLL_50 = 36; - const MIDROLL_75 = 37; - const POSTROLL_25 = 38; - const POSTROLL_50 = 39; - const POSTROLL_75 = 40; -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaStatsFeatureType -{ - const NONE = 0; - const RELATED = 1; -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaStatsKmcEventType -{ - const CONTENT_PAGE_VIEW = 1001; - const CONTENT_ADD_PLAYLIST = 1010; - const CONTENT_EDIT_PLAYLIST = 1011; - const CONTENT_DELETE_PLAYLIST = 1012; - const CONTENT_EDIT_ENTRY = 1013; - const CONTENT_CHANGE_THUMBNAIL = 1014; - const CONTENT_ADD_TAGS = 1015; - const CONTENT_REMOVE_TAGS = 1016; - const CONTENT_ADD_ADMIN_TAGS = 1017; - const CONTENT_REMOVE_ADMIN_TAGS = 1018; - const CONTENT_DOWNLOAD = 1019; - const CONTENT_APPROVE_MODERATION = 1020; - const CONTENT_REJECT_MODERATION = 1021; - const CONTENT_BULK_UPLOAD = 1022; - const CONTENT_ADMIN_KCW_UPLOAD = 1023; - const ACCOUNT_CHANGE_PARTNER_INFO = 1030; - const ACCOUNT_CHANGE_LOGIN_INFO = 1031; - const ACCOUNT_CONTACT_US_USAGE = 1032; - const ACCOUNT_UPDATE_SERVER_SETTINGS = 1033; - const ACCOUNT_ACCOUNT_OVERVIEW = 1034; - const ACCOUNT_ACCESS_CONTROL = 1035; - const ACCOUNT_TRANSCODING_SETTINGS = 1036; - const ACCOUNT_ACCOUNT_UPGRADE = 1037; - const ACCOUNT_SAVE_SERVER_SETTINGS = 1038; - const ACCOUNT_ACCESS_CONTROL_DELETE = 1039; - const ACCOUNT_SAVE_TRANSCODING_SETTINGS = 1040; - const LOGIN = 1041; - const DASHBOARD_IMPORT_CONTENT = 1042; - const DASHBOARD_UPDATE_CONTENT = 1043; - const DASHBOARD_ACCOUNT_CONTACT_US = 1044; - const DASHBOARD_VIEW_REPORTS = 1045; - const DASHBOARD_EMBED_PLAYER = 1046; - const DASHBOARD_EMBED_PLAYLIST = 1047; - const DASHBOARD_CUSTOMIZE_PLAYERS = 1048; - const APP_STUDIO_NEW_PLAYER_SINGLE_VIDEO = 1050; - const APP_STUDIO_NEW_PLAYER_PLAYLIST = 1051; - const APP_STUDIO_NEW_PLAYER_MULTI_TAB_PLAYLIST = 1052; - const APP_STUDIO_EDIT_PLAYER_SINGLE_VIDEO = 1053; - const APP_STUDIO_EDIT_PLAYER_PLAYLIST = 1054; - const APP_STUDIO_EDIT_PLAYER_MULTI_TAB_PLAYLIST = 1055; - const APP_STUDIO_DUPLICATE_PLAYER = 1056; - const CONTENT_CONTENT_GO_TO_PAGE = 1057; - const CONTENT_DELETE_ITEM = 1058; - const CONTENT_DELETE_MIX = 1059; - const REPORTS_AND_ANALYTICS_BANDWIDTH_USAGE_TAB = 1070; - const REPORTS_AND_ANALYTICS_CONTENT_REPORTS_TAB = 1071; - const REPORTS_AND_ANALYTICS_USERS_AND_COMMUNITY_REPORTS_TAB = 1072; - const REPORTS_AND_ANALYTICS_TOP_CONTRIBUTORS = 1073; - const REPORTS_AND_ANALYTICS_MAP_OVERLAYS = 1074; - const REPORTS_AND_ANALYTICS_TOP_SYNDICATIONS = 1075; - const REPORTS_AND_ANALYTICS_TOP_CONTENT = 1076; - const REPORTS_AND_ANALYTICS_CONTENT_DROPOFF = 1077; - const REPORTS_AND_ANALYTICS_CONTENT_INTERACTIONS = 1078; - const REPORTS_AND_ANALYTICS_CONTENT_CONTRIBUTIONS = 1079; - const REPORTS_AND_ANALYTICS_VIDEO_DRILL_DOWN = 1080; - const REPORTS_AND_ANALYTICS_CONTENT_DRILL_DOWN_INTERACTION = 1081; - const REPORTS_AND_ANALYTICS_CONTENT_CONTRIBUTIONS_DRILLDOWN = 1082; - const REPORTS_AND_ANALYTICS_VIDEO_DRILL_DOWN_DROPOFF = 1083; - const REPORTS_AND_ANALYTICS_MAP_OVERLAYS_DRILLDOWN = 1084; - const REPORTS_AND_ANALYTICS_TOP_SYNDICATIONS_DRILL_DOWN = 1085; - const REPORTS_AND_ANALYTICS_BANDWIDTH_USAGE_VIEW_MONTHLY = 1086; - const REPORTS_AND_ANALYTICS_BANDWIDTH_USAGE_VIEW_YEARLY = 1087; - const CONTENT_ENTRY_DRILLDOWN = 1088; - const CONTENT_OPEN_PREVIEW_AND_EMBED = 1089; -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaStorageProfileDeliveryStatus -{ - const ACTIVE = 1; - const BLOCKED = 2; -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaStorageProfileReadyBehavior -{ - const NO_IMPACT = 0; - const REQUIRED = 1; -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaStorageProfileStatus -{ - const DISABLED = 1; - const AUTOMATIC = 2; - const MANUAL = 3; -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaSyndicationFeedStatus -{ - const DELETED = -1; - const ACTIVE = 1; -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaSyndicationFeedType -{ - const GOOGLE_VIDEO = 1; - const YAHOO = 2; - const ITUNES = 3; - const TUBE_MOGUL = 4; - const KALTURA = 5; - const KALTURA_XSLT = 6; -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaThumbAssetStatus -{ - const ERROR = -1; - const QUEUED = 0; - const CAPTURING = 1; - const READY = 2; - const DELETED = 3; - const IMPORTING = 7; - const EXPORTING = 9; -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaThumbCropType -{ - const RESIZE = 1; - const RESIZE_WITH_PADDING = 2; - const CROP = 3; - const CROP_FROM_TOP = 4; - const RESIZE_WITH_FORCE = 5; -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaUiConfCreationMode -{ - const WIZARD = 2; - const ADVANCED = 3; -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaUiConfObjType -{ - const PLAYER = 1; - const CONTRIBUTION_WIZARD = 2; - const SIMPLE_EDITOR = 3; - const ADVANCED_EDITOR = 4; - const PLAYLIST = 5; - const APP_STUDIO = 6; - const KRECORD = 7; - const PLAYER_V3 = 8; - const KMC_ACCOUNT = 9; - const KMC_ANALYTICS = 10; - const KMC_CONTENT = 11; - const KMC_DASHBOARD = 12; - const KMC_LOGIN = 13; - const PLAYER_SL = 14; - const CLIENTSIDE_ENCODER = 15; - const KMC_GENERAL = 16; - const KMC_ROLES_AND_PERMISSIONS = 17; - const CLIPPER = 18; - const KSR = 19; - const KUPLOAD = 20; -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaUpdateMethodType -{ - const MANUAL = 0; - const AUTOMATIC = 1; -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaUploadErrorCode -{ - const NO_ERROR = 0; - const GENERAL_ERROR = 1; - const PARTIAL_UPLOAD = 2; -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaUploadTokenStatus -{ - const PENDING = 0; - const PARTIAL_UPLOAD = 1; - const FULL_UPLOAD = 2; - const CLOSED = 3; - const TIMED_OUT = 4; - const DELETED = 5; -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaUserAgentRestrictionType -{ - const RESTRICT_LIST = 0; - const ALLOW_LIST = 1; -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaUserJoinPolicyType -{ - const AUTO_JOIN = 1; - const REQUEST_TO_JOIN = 2; - const NOT_ALLOWED = 3; -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaUserRoleStatus -{ - const ACTIVE = 1; - const BLOCKED = 2; - const DELETED = 3; -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaUserStatus -{ - const BLOCKED = 0; - const ACTIVE = 1; - const DELETED = 2; -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaWidgetSecurityType -{ - const NONE = 1; - const TIMEHASH = 2; -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaAccessControlOrderBy -{ - const CREATED_AT_ASC = "+createdAt"; - const CREATED_AT_DESC = "-createdAt"; -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaAccessControlProfileOrderBy -{ - const CREATED_AT_ASC = "+createdAt"; - const UPDATED_AT_ASC = "+updatedAt"; - const CREATED_AT_DESC = "-createdAt"; - const UPDATED_AT_DESC = "-updatedAt"; -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaAdminUserOrderBy -{ - const CREATED_AT_ASC = "+createdAt"; - const ID_ASC = "+id"; - const CREATED_AT_DESC = "-createdAt"; - const ID_DESC = "-id"; -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaAkamaiUniversalStreamType -{ - const HD_IPHONE_IPAD_LIVE = "HD iPhone/iPad Live"; - const UNIVERSAL_STREAMING_LIVE = "Universal Streaming Live"; -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaAmazonS3StorageProfileFilesPermissionLevel -{ - const ACL_AUTHENTICATED_READ = "authenticated-read"; - const ACL_PRIVATE = "private"; - const ACL_PUBLIC_READ = "public-read"; - const ACL_PUBLIC_READ_WRITE = "public-read-write"; -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaAmazonS3StorageProfileOrderBy -{ - const CREATED_AT_ASC = "+createdAt"; - const UPDATED_AT_ASC = "+updatedAt"; - const CREATED_AT_DESC = "-createdAt"; - const UPDATED_AT_DESC = "-updatedAt"; -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaApiActionPermissionItemOrderBy -{ - const CREATED_AT_ASC = "+createdAt"; - const ID_ASC = "+id"; - const UPDATED_AT_ASC = "+updatedAt"; - const CREATED_AT_DESC = "-createdAt"; - const ID_DESC = "-id"; - const UPDATED_AT_DESC = "-updatedAt"; -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaApiParameterPermissionItemAction -{ - const USAGE = "all"; - const INSERT = "insert"; - const READ = "read"; - const UPDATE = "update"; -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaApiParameterPermissionItemOrderBy -{ - const CREATED_AT_ASC = "+createdAt"; - const ID_ASC = "+id"; - const UPDATED_AT_ASC = "+updatedAt"; - const CREATED_AT_DESC = "-createdAt"; - const ID_DESC = "-id"; - const UPDATED_AT_DESC = "-updatedAt"; -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaAssetOrderBy -{ - const CREATED_AT_ASC = "+createdAt"; - const DELETED_AT_ASC = "+deletedAt"; - const SIZE_ASC = "+size"; - const UPDATED_AT_ASC = "+updatedAt"; - const CREATED_AT_DESC = "-createdAt"; - const DELETED_AT_DESC = "-deletedAt"; - const SIZE_DESC = "-size"; - const UPDATED_AT_DESC = "-updatedAt"; -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaAssetParamsOrderBy -{ -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaAssetParamsOutputOrderBy -{ -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaAssetType -{ - const ATTACHMENT = "attachment.Attachment"; - const CAPTION = "caption.Caption"; - const DOCUMENT = "document.Document"; - const IMAGE = "document.Image"; - const PDF = "document.PDF"; - const SWF = "document.SWF"; - const WIDEVINE_FLAVOR = "widevine.WidevineFlavor"; - const FLAVOR = "1"; - const THUMBNAIL = "2"; - const LIVE = "3"; -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaAudioCodec -{ - const NONE = ""; - const AAC = "aac"; - const AACHE = "aache"; - const AC3 = "ac3"; - const AMRNB = "amrnb"; - const COPY = "copy"; - const MP3 = "mp3"; - const MPEG2 = "mpeg2"; - const PCM = "pcm"; - const VORBIS = "vorbis"; - const WMA = "wma"; - const WMAPRO = "wmapro"; -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaBaseEntryOrderBy -{ - const CREATED_AT_ASC = "+createdAt"; - const END_DATE_ASC = "+endDate"; - const MODERATION_COUNT_ASC = "+moderationCount"; - const NAME_ASC = "+name"; - const PARTNER_SORT_VALUE_ASC = "+partnerSortValue"; - const RANK_ASC = "+rank"; - const RECENT_ASC = "+recent"; - const START_DATE_ASC = "+startDate"; - const TOTAL_RANK_ASC = "+totalRank"; - const UPDATED_AT_ASC = "+updatedAt"; - const WEIGHT_ASC = "+weight"; - const CREATED_AT_DESC = "-createdAt"; - const END_DATE_DESC = "-endDate"; - const MODERATION_COUNT_DESC = "-moderationCount"; - const NAME_DESC = "-name"; - const PARTNER_SORT_VALUE_DESC = "-partnerSortValue"; - const RANK_DESC = "-rank"; - const RECENT_DESC = "-recent"; - const START_DATE_DESC = "-startDate"; - const TOTAL_RANK_DESC = "-totalRank"; - const UPDATED_AT_DESC = "-updatedAt"; - const WEIGHT_DESC = "-weight"; -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaBaseSyndicationFeedOrderBy -{ - const CREATED_AT_ASC = "+createdAt"; - const NAME_ASC = "+name"; - const PLAYLIST_ID_ASC = "+playlistId"; - const TYPE_ASC = "+type"; - const UPDATED_AT_ASC = "+updatedAt"; - const CREATED_AT_DESC = "-createdAt"; - const NAME_DESC = "-name"; - const PLAYLIST_ID_DESC = "-playlistId"; - const TYPE_DESC = "-type"; - const UPDATED_AT_DESC = "-updatedAt"; -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaBatchJobOrderBy -{ - const CREATED_AT_ASC = "+createdAt"; - const ESTIMATED_EFFORT_ASC = "+estimatedEffort"; - const EXECUTION_ATTEMPTS_ASC = "+executionAttempts"; - const FINISH_TIME_ASC = "+finishTime"; - const LOCK_VERSION_ASC = "+lockVersion"; - const PRIORITY_ASC = "+priority"; - const QUEUE_TIME_ASC = "+queueTime"; - const STATUS_ASC = "+status"; - const UPDATED_AT_ASC = "+updatedAt"; - const CREATED_AT_DESC = "-createdAt"; - const ESTIMATED_EFFORT_DESC = "-estimatedEffort"; - const EXECUTION_ATTEMPTS_DESC = "-executionAttempts"; - const FINISH_TIME_DESC = "-finishTime"; - const LOCK_VERSION_DESC = "-lockVersion"; - const PRIORITY_DESC = "-priority"; - const QUEUE_TIME_DESC = "-queueTime"; - const STATUS_DESC = "-status"; - const UPDATED_AT_DESC = "-updatedAt"; -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaBatchJobType -{ - const PARSE_CAPTION_ASSET = "captionSearch.parseCaptionAsset"; - const DISTRIBUTION_DELETE = "contentDistribution.DistributionDelete"; - const DISTRIBUTION_DISABLE = "contentDistribution.DistributionDisable"; - const DISTRIBUTION_ENABLE = "contentDistribution.DistributionEnable"; - const DISTRIBUTION_FETCH_REPORT = "contentDistribution.DistributionFetchReport"; - const DISTRIBUTION_SUBMIT = "contentDistribution.DistributionSubmit"; - const DISTRIBUTION_SYNC = "contentDistribution.DistributionSync"; - const DISTRIBUTION_UPDATE = "contentDistribution.DistributionUpdate"; - const CONVERT = "0"; - const DROP_FOLDER_CONTENT_PROCESSOR = "dropFolder.DropFolderContentProcessor"; - const DROP_FOLDER_WATCHER = "dropFolder.DropFolderWatcher"; - const EVENT_NOTIFICATION_HANDLER = "eventNotification.EventNotificationHandler"; - const INDEX_TAGS = "tagSearch.IndexTagsByPrivacyContext"; - const TAG_RESOLVE = "tagSearch.TagResolve"; - const VIRUS_SCAN = "virusScan.VirusScan"; - const WIDEVINE_REPOSITORY_SYNC = "widevine.WidevineRepositorySync"; - const IMPORT = "1"; - const DELETE = "2"; - const FLATTEN = "3"; - const BULKUPLOAD = "4"; - const DVDCREATOR = "5"; - const DOWNLOAD = "6"; - const OOCONVERT = "7"; - const CONVERT_PROFILE = "10"; - const POSTCONVERT = "11"; - const EXTRACT_MEDIA = "14"; - const MAIL = "15"; - const NOTIFICATION = "16"; - const CLEANUP = "17"; - const SCHEDULER_HELPER = "18"; - const BULKDOWNLOAD = "19"; - const DB_CLEANUP = "20"; - const PROVISION_PROVIDE = "21"; - const CONVERT_COLLECTION = "22"; - const STORAGE_EXPORT = "23"; - const PROVISION_DELETE = "24"; - const STORAGE_DELETE = "25"; - const EMAIL_INGESTION = "26"; - const METADATA_IMPORT = "27"; - const METADATA_TRANSFORM = "28"; - const FILESYNC_IMPORT = "29"; - const CAPTURE_THUMB = "30"; - const DELETE_FILE = "31"; - const INDEX = "32"; - const MOVE_CATEGORY_ENTRIES = "33"; - const COPY = "34"; - const CONCAT = "35"; - const CONVERT_LIVE_SEGMENT = "36"; - const COPY_PARTNER = "37"; - const VALIDATE_LIVE_MEDIA_SERVERS = "38"; -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaBulkUploadAction -{ - const ADD = "1"; - const UPDATE = "2"; - const DELETE = "3"; - const REPLACE = "4"; - const TRANSFORM_XSLT = "5"; - const ADD_OR_UPDATE = "6"; -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaBulkUploadObjectType -{ - const ENTRY = "1"; - const CATEGORY = "2"; - const USER = "3"; - const CATEGORY_USER = "4"; - const CATEGORY_ENTRY = "5"; -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaBulkUploadOrderBy -{ -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaBulkUploadResultObjectType -{ - const ENTRY = "1"; - const CATEGORY = "2"; - const USER = "3"; - const CATEGORY_USER = "4"; - const CATEGORY_ENTRY = "5"; -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaBulkUploadResultStatus -{ - const ERROR = "1"; - const OK = "2"; - const IN_PROGRESS = "3"; -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaBulkUploadType -{ - const CSV = "bulkUploadCsv.CSV"; - const FILTER = "bulkUploadFilter.FILTER"; - const XML = "bulkUploadXml.XML"; - const DROP_FOLDER_XML = "dropFolderXmlBulkUpload.DROP_FOLDER_XML"; -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaCategoryEntryOrderBy -{ - const CREATED_AT_ASC = "+createdAt"; - const CREATED_AT_DESC = "-createdAt"; -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaCategoryIdentifierField -{ - const FULL_NAME = "fullName"; - const ID = "id"; - const REFERENCE_ID = "referenceId"; -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaCategoryOrderBy -{ - const CREATED_AT_ASC = "+createdAt"; - const DEPTH_ASC = "+depth"; - const DIRECT_ENTRIES_COUNT_ASC = "+directEntriesCount"; - const DIRECT_SUB_CATEGORIES_COUNT_ASC = "+directSubCategoriesCount"; - const ENTRIES_COUNT_ASC = "+entriesCount"; - const FULL_NAME_ASC = "+fullName"; - const MEMBERS_COUNT_ASC = "+membersCount"; - const NAME_ASC = "+name"; - const PARTNER_SORT_VALUE_ASC = "+partnerSortValue"; - const UPDATED_AT_ASC = "+updatedAt"; - const CREATED_AT_DESC = "-createdAt"; - const DEPTH_DESC = "-depth"; - const DIRECT_ENTRIES_COUNT_DESC = "-directEntriesCount"; - const DIRECT_SUB_CATEGORIES_COUNT_DESC = "-directSubCategoriesCount"; - const ENTRIES_COUNT_DESC = "-entriesCount"; - const FULL_NAME_DESC = "-fullName"; - const MEMBERS_COUNT_DESC = "-membersCount"; - const NAME_DESC = "-name"; - const PARTNER_SORT_VALUE_DESC = "-partnerSortValue"; - const UPDATED_AT_DESC = "-updatedAt"; -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaCategoryUserOrderBy -{ - const CREATED_AT_ASC = "+createdAt"; - const UPDATED_AT_ASC = "+updatedAt"; - const CREATED_AT_DESC = "-createdAt"; - const UPDATED_AT_DESC = "-updatedAt"; -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaConditionType -{ - const ABC_WATERMARK = "abcScreenersWatermarkAccessControl.abcWatermark"; - const EVENT_NOTIFICATION_FIELD = "eventNotification.BooleanField"; - const EVENT_NOTIFICATION_OBJECT_CHANGED = "eventNotification.ObjectChanged"; - const METADATA_FIELD_CHANGED = "metadata.FieldChanged"; - const METADATA_FIELD_COMPARE = "metadata.FieldCompare"; - const METADATA_FIELD_MATCH = "metadata.FieldMatch"; - const AUTHENTICATED = "1"; - const COUNTRY = "2"; - const IP_ADDRESS = "3"; - const SITE = "4"; - const USER_AGENT = "5"; - const FIELD_MATCH = "6"; - const FIELD_COMPARE = "7"; - const ASSET_PROPERTIES_COMPARE = "8"; -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaContainerFormat -{ - const _3GP = "3gp"; - const APPLEHTTP = "applehttp"; - const AVI = "avi"; - const BMP = "bmp"; - const COPY = "copy"; - const FLV = "flv"; - const ISMV = "ismv"; - const JPG = "jpg"; - const MKV = "mkv"; - const MOV = "mov"; - const MP3 = "mp3"; - const MP4 = "mp4"; - const MPEG = "mpeg"; - const MPEGTS = "mpegts"; - const OGG = "ogg"; - const OGV = "ogv"; - const PDF = "pdf"; - const PNG = "png"; - const SWF = "swf"; - const WAV = "wav"; - const WEBM = "webm"; - const WMA = "wma"; - const WMV = "wmv"; - const WVM = "wvm"; -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaContextType -{ - const PLAY = "1"; - const DOWNLOAD = "2"; - const THUMBNAIL = "3"; - const METADATA = "4"; - const EXPORT = "5"; -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaControlPanelCommandOrderBy -{ - const CREATED_AT_ASC = "+createdAt"; - const UPDATED_AT_ASC = "+updatedAt"; - const CREATED_AT_DESC = "-createdAt"; - const UPDATED_AT_DESC = "-updatedAt"; -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaConversionProfileAssetParamsOrderBy -{ -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaConversionProfileOrderBy -{ - const CREATED_AT_ASC = "+createdAt"; - const CREATED_AT_DESC = "-createdAt"; -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaConversionProfileStatus -{ - const DISABLED = "1"; - const ENABLED = "2"; - const DELETED = "3"; -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaConversionProfileType -{ - const MEDIA = "1"; - const LIVE_STREAM = "2"; -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaDataEntryOrderBy -{ - const CREATED_AT_ASC = "+createdAt"; - const END_DATE_ASC = "+endDate"; - const MODERATION_COUNT_ASC = "+moderationCount"; - const NAME_ASC = "+name"; - const PARTNER_SORT_VALUE_ASC = "+partnerSortValue"; - const RANK_ASC = "+rank"; - const RECENT_ASC = "+recent"; - const START_DATE_ASC = "+startDate"; - const TOTAL_RANK_ASC = "+totalRank"; - const UPDATED_AT_ASC = "+updatedAt"; - const WEIGHT_ASC = "+weight"; - const CREATED_AT_DESC = "-createdAt"; - const END_DATE_DESC = "-endDate"; - const MODERATION_COUNT_DESC = "-moderationCount"; - const NAME_DESC = "-name"; - const PARTNER_SORT_VALUE_DESC = "-partnerSortValue"; - const RANK_DESC = "-rank"; - const RECENT_DESC = "-recent"; - const START_DATE_DESC = "-startDate"; - const TOTAL_RANK_DESC = "-totalRank"; - const UPDATED_AT_DESC = "-updatedAt"; - const WEIGHT_DESC = "-weight"; -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaDurationType -{ - const LONG = "long"; - const MEDIUM = "medium"; - const NOT_AVAILABLE = "notavailable"; - const SHORT = "short"; -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaDynamicEnum -{ -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaEntryIdentifierField -{ - const ID = "id"; - const REFERENCE_ID = "referenceId"; -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaEntryReplacementStatus -{ - const NONE = "0"; - const APPROVED_BUT_NOT_READY = "1"; - const READY_BUT_NOT_APPROVED = "2"; - const NOT_READY_AND_NOT_APPROVED = "3"; -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaEntryStatus -{ - const ERROR_IMPORTING = "-2"; - const ERROR_CONVERTING = "-1"; - const SCAN_FAILURE = "virusScan.ScanFailure"; - const IMPORT = "0"; - const INFECTED = "virusScan.Infected"; - const PRECONVERT = "1"; - const READY = "2"; - const DELETED = "3"; - const PENDING = "4"; - const MODERATE = "5"; - const BLOCKED = "6"; - const NO_CONTENT = "7"; -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaEntryType -{ - const AUTOMATIC = "-1"; - const EXTERNAL_MEDIA = "externalMedia.externalMedia"; - const MEDIA_CLIP = "1"; - const MIX = "2"; - const PLAYLIST = "5"; - const DATA = "6"; - const LIVE_STREAM = "7"; - const LIVE_CHANNEL = "8"; - const DOCUMENT = "10"; -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaFileAssetObjectType -{ - const UI_CONF = "2"; -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaFileAssetOrderBy -{ - const CREATED_AT_ASC = "+createdAt"; - const UPDATED_AT_ASC = "+updatedAt"; - const CREATED_AT_DESC = "-createdAt"; - const UPDATED_AT_DESC = "-updatedAt"; -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaFileAssetStatus -{ - const PENDING = "0"; - const UPLOADING = "1"; - const READY = "2"; - const DELETED = "3"; - const ERROR = "4"; -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaFileSyncObjectType -{ - const DISTRIBUTION_PROFILE = "contentDistribution.DistributionProfile"; - const ENTRY_DISTRIBUTION = "contentDistribution.EntryDistribution"; - const GENERIC_DISTRIBUTION_ACTION = "contentDistribution.GenericDistributionAction"; - const EMAIL_NOTIFICATION_TEMPLATE = "emailNotification.EmailNotificationTemplate"; - const HTTP_NOTIFICATION_TEMPLATE = "httpNotification.HttpNotificationTemplate"; - const ENTRY = "1"; - const UICONF = "2"; - const BATCHJOB = "3"; - const ASSET = "4"; - const FLAVOR_ASSET = "4"; - const METADATA = "5"; - const METADATA_PROFILE = "6"; - const SYNDICATION_FEED = "7"; - const CONVERSION_PROFILE = "8"; - const FILE_ASSET = "9"; -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaFlavorAssetOrderBy -{ - const CREATED_AT_ASC = "+createdAt"; - const DELETED_AT_ASC = "+deletedAt"; - const SIZE_ASC = "+size"; - const UPDATED_AT_ASC = "+updatedAt"; - const CREATED_AT_DESC = "-createdAt"; - const DELETED_AT_DESC = "-deletedAt"; - const SIZE_DESC = "-size"; - const UPDATED_AT_DESC = "-updatedAt"; -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaFlavorParamsOrderBy -{ -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaFlavorParamsOutputOrderBy -{ -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaGenericSyndicationFeedOrderBy -{ - const CREATED_AT_ASC = "+createdAt"; - const NAME_ASC = "+name"; - const PLAYLIST_ID_ASC = "+playlistId"; - const TYPE_ASC = "+type"; - const UPDATED_AT_ASC = "+updatedAt"; - const CREATED_AT_DESC = "-createdAt"; - const NAME_DESC = "-name"; - const PLAYLIST_ID_DESC = "-playlistId"; - const TYPE_DESC = "-type"; - const UPDATED_AT_DESC = "-updatedAt"; -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaGenericXsltSyndicationFeedOrderBy -{ - const CREATED_AT_ASC = "+createdAt"; - const NAME_ASC = "+name"; - const PLAYLIST_ID_ASC = "+playlistId"; - const TYPE_ASC = "+type"; - const UPDATED_AT_ASC = "+updatedAt"; - const CREATED_AT_DESC = "-createdAt"; - const NAME_DESC = "-name"; - const PLAYLIST_ID_DESC = "-playlistId"; - const TYPE_DESC = "-type"; - const UPDATED_AT_DESC = "-updatedAt"; -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaGeoCoderType -{ - const KALTURA = "1"; -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaGoogleSyndicationFeedAdultValues -{ - const NO = "No"; - const YES = "Yes"; -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaGoogleVideoSyndicationFeedOrderBy -{ - const CREATED_AT_ASC = "+createdAt"; - const NAME_ASC = "+name"; - const PLAYLIST_ID_ASC = "+playlistId"; - const TYPE_ASC = "+type"; - const UPDATED_AT_ASC = "+updatedAt"; - const CREATED_AT_DESC = "-createdAt"; - const NAME_DESC = "-name"; - const PLAYLIST_ID_DESC = "-playlistId"; - const TYPE_DESC = "-type"; - const UPDATED_AT_DESC = "-updatedAt"; -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaITunesSyndicationFeedAdultValues -{ - const CLEAN = "clean"; - const NO = "no"; - const YES = "yes"; -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaITunesSyndicationFeedCategories -{ - const ARTS = "Arts"; - const ARTS_DESIGN = "Arts/Design"; - const ARTS_FASHION_BEAUTY = "Arts/Fashion & Beauty"; - const ARTS_FOOD = "Arts/Food"; - const ARTS_LITERATURE = "Arts/Literature"; - const ARTS_PERFORMING_ARTS = "Arts/Performing Arts"; - const ARTS_VISUAL_ARTS = "Arts/Visual Arts"; - const BUSINESS = "Business"; - const BUSINESS_BUSINESS_NEWS = "Business/Business News"; - const BUSINESS_CAREERS = "Business/Careers"; - const BUSINESS_INVESTING = "Business/Investing"; - const BUSINESS_MANAGEMENT_MARKETING = "Business/Management & Marketing"; - const BUSINESS_SHOPPING = "Business/Shopping"; - const COMEDY = "Comedy"; - const EDUCATION = "Education"; - const EDUCATION_TECHNOLOGY = "Education/Education Technology"; - const EDUCATION_HIGHER_EDUCATION = "Education/Higher Education"; - const EDUCATION_K_12 = "Education/K-12"; - const EDUCATION_LANGUAGE_COURSES = "Education/Language Courses"; - const EDUCATION_TRAINING = "Education/Training"; - const GAMES_HOBBIES = "Games & Hobbies"; - const GAMES_HOBBIES_AUTOMOTIVE = "Games & Hobbies/Automotive"; - const GAMES_HOBBIES_AVIATION = "Games & Hobbies/Aviation"; - const GAMES_HOBBIES_HOBBIES = "Games & Hobbies/Hobbies"; - const GAMES_HOBBIES_OTHER_GAMES = "Games & Hobbies/Other Games"; - const GAMES_HOBBIES_VIDEO_GAMES = "Games & Hobbies/Video Games"; - const GOVERNMENT_ORGANIZATIONS = "Government & Organizations"; - const GOVERNMENT_ORGANIZATIONS_LOCAL = "Government & Organizations/Local"; - const GOVERNMENT_ORGANIZATIONS_NATIONAL = "Government & Organizations/National"; - const GOVERNMENT_ORGANIZATIONS_NON_PROFIT = "Government & Organizations/Non-Profit"; - const GOVERNMENT_ORGANIZATIONS_REGIONAL = "Government & Organizations/Regional"; - const HEALTH = "Health"; - const HEALTH_ALTERNATIVE_HEALTH = "Health/Alternative Health"; - const HEALTH_FITNESS_NUTRITION = "Health/Fitness & Nutrition"; - const HEALTH_SELF_HELP = "Health/Self-Help"; - const HEALTH_SEXUALITY = "Health/Sexuality"; - const KIDS_FAMILY = "Kids & Family"; - const MUSIC = "Music"; - const NEWS_POLITICS = "News & Politics"; - const RELIGION_SPIRITUALITY = "Religion & Spirituality"; - const RELIGION_SPIRITUALITY_BUDDHISM = "Religion & Spirituality/Buddhism"; - const RELIGION_SPIRITUALITY_CHRISTIANITY = "Religion & Spirituality/Christianity"; - const RELIGION_SPIRITUALITY_HINDUISM = "Religion & Spirituality/Hinduism"; - const RELIGION_SPIRITUALITY_ISLAM = "Religion & Spirituality/Islam"; - const RELIGION_SPIRITUALITY_JUDAISM = "Religion & Spirituality/Judaism"; - const RELIGION_SPIRITUALITY_OTHER = "Religion & Spirituality/Other"; - const RELIGION_SPIRITUALITY_SPIRITUALITY = "Religion & Spirituality/Spirituality"; - const SCIENCE_MEDICINE = "Science & Medicine"; - const SCIENCE_MEDICINE_MEDICINE = "Science & Medicine/Medicine"; - const SCIENCE_MEDICINE_NATURAL_SCIENCES = "Science & Medicine/Natural Sciences"; - const SCIENCE_MEDICINE_SOCIAL_SCIENCES = "Science & Medicine/Social Sciences"; - const SOCIETY_CULTURE = "Society & Culture"; - const SOCIETY_CULTURE_HISTORY = "Society & Culture/History"; - const SOCIETY_CULTURE_PERSONAL_JOURNALS = "Society & Culture/Personal Journals"; - const SOCIETY_CULTURE_PHILOSOPHY = "Society & Culture/Philosophy"; - const SOCIETY_CULTURE_PLACES_TRAVEL = "Society & Culture/Places & Travel"; - const SPORTS_RECREATION = "Sports & Recreation"; - const SPORTS_RECREATION_AMATEUR = "Sports & Recreation/Amateur"; - const SPORTS_RECREATION_COLLEGE_HIGH_SCHOOL = "Sports & Recreation/College & High School"; - const SPORTS_RECREATION_OUTDOOR = "Sports & Recreation/Outdoor"; - const SPORTS_RECREATION_PROFESSIONAL = "Sports & Recreation/Professional"; - const TV_FILM = "TV & Film"; - const TECHNOLOGY = "Technology"; - const TECHNOLOGY_GADGETS = "Technology/Gadgets"; - const TECHNOLOGY_PODCASTING = "Technology/Podcasting"; - const TECHNOLOGY_SOFTWARE_HOW_TO = "Technology/Software How-To"; - const TECHNOLOGY_TECH_NEWS = "Technology/Tech News"; -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaITunesSyndicationFeedOrderBy -{ - const CREATED_AT_ASC = "+createdAt"; - const NAME_ASC = "+name"; - const PLAYLIST_ID_ASC = "+playlistId"; - const TYPE_ASC = "+type"; - const UPDATED_AT_ASC = "+updatedAt"; - const CREATED_AT_DESC = "-createdAt"; - const NAME_DESC = "-name"; - const PLAYLIST_ID_DESC = "-playlistId"; - const TYPE_DESC = "-type"; - const UPDATED_AT_DESC = "-updatedAt"; -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaLanguage -{ - const AB = "Abkhazian"; - const AA = "Afar"; - const AF = "Afrikaans"; - const SQ = "Albanian"; - const AM = "Amharic"; - const AR = "Arabic"; - const HY = "Armenian"; - const AS_ = "Assamese"; - const AY = "Aymara"; - const AZ = "Azerbaijani"; - const BA = "Bashkir"; - const EU = "Basque"; - const BN = "Bengali (Bangla)"; - const DZ = "Bhutani"; - const BH = "Bihari"; - const BI = "Bislama"; - const BR = "Breton"; - const BG = "Bulgarian"; - const MY = "Burmese"; - const BE = "Byelorussian (Belarusian)"; - const KM = "Cambodian"; - const CA = "Catalan"; - const ZH = "Chinese"; - const CO = "Corsican"; - const HR = "Croatian"; - const CS = "Czech"; - const DA = "Danish"; - const NL = "Dutch"; - const EN = "English"; - const EO = "Esperanto"; - const ET = "Estonian"; - const FO = "Faeroese"; - const FA = "Farsi"; - const FJ = "Fiji"; - const FI = "Finnish"; - const FR = "French"; - const FY = "Frisian"; - const GV = "Gaelic (Manx)"; - const GD = "Gaelic (Scottish)"; - const GL = "Galician"; - const KA = "Georgian"; - const DE = "German"; - const EL = "Greek"; - const KL = "Greenlandic"; - const GN = "Guarani"; - const GU = "Gujarati"; - const HA = "Hausa"; - const IW = "Hebrew"; - const HE = "Hebrew"; - const HI = "Hindi"; - const HU = "Hungarian"; - const IS = "Icelandic"; - const IN = "Indonesian"; - const ID = "Indonesian"; - const IA = "Interlingua"; - const IE = "Interlingue"; - const IU = "Inuktitut"; - const IK = "Inupiak"; - const GA = "Irish"; - const IT = "Italian"; - const JA = "Japanese"; - const JV = "Javanese"; - const KN = "Kannada"; - const KS = "Kashmiri"; - const KK = "Kazakh"; - const RW = "Kinyarwanda (Ruanda)"; - const KY = "Kirghiz"; - const RN = "Kirundi (Rundi)"; - const KO = "Korean"; - const KU = "Kurdish"; - const LO = "Laothian"; - const LA = "Latin"; - const LV = "Latvian (Lettish)"; - const LI = "Limburgish ( Limburger)"; - const LN = "Lingala"; - const LT = "Lithuanian"; - const MK = "Macedonian"; - const MG = "Malagasy"; - const MS = "Malay"; - const ML = "Malayalam"; - const MT = "Maltese"; - const MI = "Maori"; - const MR = "Marathi"; - const MO = "Moldavian"; - const MN = "Mongolian"; - const NA = "Nauru"; - const NE = "Nepali"; - const NO = "Norwegian"; - const OC = "Occitan"; - const OR_ = "Oriya"; - const OM = "Oromo (Afan, Galla)"; - const PS = "Pashto (Pushto)"; - const PL = "Polish"; - const PT = "Portuguese"; - const PA = "Punjabi"; - const QU = "Quechua"; - const RM = "Rhaeto-Romance"; - const RO = "Romanian"; - const RU = "Russian"; - const SM = "Samoan"; - const SG = "Sangro"; - const SA = "Sanskrit"; - const SR = "Serbian"; - const SH = "Serbo-Croatian"; - const ST = "Sesotho"; - const TN = "Setswana"; - const SN = "Shona"; - const SD = "Sindhi"; - const SI = "Sinhalese"; - const SS = "Siswati"; - const SK = "Slovak"; - const SL = "Slovenian"; - const SO = "Somali"; - const ES = "Spanish"; - const SU = "Sundanese"; - const SW = "Swahili (Kiswahili)"; - const SV = "Swedish"; - const TL = "Tagalog"; - const TG = "Tajik"; - const TA = "Tamil"; - const TT = "Tatar"; - const TE = "Telugu"; - const TH = "Thai"; - const BO = "Tibetan"; - const TI = "Tigrinya"; - const TO = "Tonga"; - const TS = "Tsonga"; - const TR = "Turkish"; - const TK = "Turkmen"; - const TW = "Twi"; - const UG = "Uighur"; - const UK = "Ukrainian"; - const UR = "Urdu"; - const UZ = "Uzbek"; - const VI = "Vietnamese"; - const VO = "Volapuk"; - const CY = "Welsh"; - const WO = "Wolof"; - const XH = "Xhosa"; - const YI = "Yiddish"; - const JI = "Yiddish"; - const YO = "Yoruba"; - const ZU = "Zulu"; -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaLanguageCode -{ - const AA = "aa"; - const AB = "ab"; - const AF = "af"; - const AM = "am"; - const AR = "ar"; - const AS_ = "as"; - const AY = "ay"; - const AZ = "az"; - const BA = "ba"; - const BE = "be"; - const BG = "bg"; - const BH = "bh"; - const BI = "bi"; - const BN = "bn"; - const BO = "bo"; - const BR = "br"; - const CA = "ca"; - const CO = "co"; - const CS = "cs"; - const CY = "cy"; - const DA = "da"; - const DE = "de"; - const DZ = "dz"; - const EL = "el"; - const EN = "en"; - const EO = "eo"; - const ES = "es"; - const ET = "et"; - const EU = "eu"; - const FA = "fa"; - const FI = "fi"; - const FJ = "fj"; - const FO = "fo"; - const FR = "fr"; - const FY = "fy"; - const GA = "ga"; - const GD = "gd"; - const GL = "gl"; - const GN = "gn"; - const GU = "gu"; - const GV = "gv"; - const HA = "ha"; - const HE = "he"; - const HI = "hi"; - const HR = "hr"; - const HU = "hu"; - const HY = "hy"; - const IA = "ia"; - const ID = "id"; - const IE = "ie"; - const IK = "ik"; - const IN = "in"; - const IS = "is"; - const IT = "it"; - const IU = "iu"; - const IW = "iw"; - const JA = "ja"; - const JI = "ji"; - const JV = "jv"; - const KA = "ka"; - const KK = "kk"; - const KL = "kl"; - const KM = "km"; - const KN = "kn"; - const KO = "ko"; - const KS = "ks"; - const KU = "ku"; - const KY = "ky"; - const LA = "la"; - const LI = "li"; - const LN = "ln"; - const LO = "lo"; - const LT = "lt"; - const LV = "lv"; - const MG = "mg"; - const MI = "mi"; - const MK = "mk"; - const ML = "ml"; - const MN = "mn"; - const MO = "mo"; - const MR = "mr"; - const MS = "ms"; - const MT = "mt"; - const MY = "my"; - const NA = "na"; - const NE = "ne"; - const NL = "nl"; - const NO = "no"; - const OC = "oc"; - const OM = "om"; - const OR_ = "or"; - const PA = "pa"; - const PL = "pl"; - const PS = "ps"; - const PT = "pt"; - const QU = "qu"; - const RM = "rm"; - const RN = "rn"; - const RO = "ro"; - const RU = "ru"; - const RW = "rw"; - const SA = "sa"; - const SD = "sd"; - const SG = "sg"; - const SH = "sh"; - const SI = "si"; - const SK = "sk"; - const SL = "sl"; - const SM = "sm"; - const SN = "sn"; - const SO = "so"; - const SQ = "sq"; - const SR = "sr"; - const SS = "ss"; - const ST = "st"; - const SU = "su"; - const SV = "sv"; - const SW = "sw"; - const TA = "ta"; - const TE = "te"; - const TG = "tg"; - const TH = "th"; - const TI = "ti"; - const TK = "tk"; - const TL = "tl"; - const TN = "tn"; - const TO = "to"; - const TR = "tr"; - const TS = "ts"; - const TT = "tt"; - const TW = "tw"; - const UG = "ug"; - const UK = "uk"; - const UR = "ur"; - const UZ = "uz"; - const VI = "vi"; - const VO = "vo"; - const WO = "wo"; - const XH = "xh"; - const YI = "yi"; - const YO = "yo"; - const ZH = "zh"; - const ZU = "zu"; -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaLiveAssetOrderBy -{ - const CREATED_AT_ASC = "+createdAt"; - const DELETED_AT_ASC = "+deletedAt"; - const SIZE_ASC = "+size"; - const UPDATED_AT_ASC = "+updatedAt"; - const CREATED_AT_DESC = "-createdAt"; - const DELETED_AT_DESC = "-deletedAt"; - const SIZE_DESC = "-size"; - const UPDATED_AT_DESC = "-updatedAt"; -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaLiveChannelOrderBy -{ - const CREATED_AT_ASC = "+createdAt"; - const DURATION_ASC = "+duration"; - const END_DATE_ASC = "+endDate"; - const LAST_PLAYED_AT_ASC = "+lastPlayedAt"; - const MEDIA_TYPE_ASC = "+mediaType"; - const MODERATION_COUNT_ASC = "+moderationCount"; - const NAME_ASC = "+name"; - const PARTNER_SORT_VALUE_ASC = "+partnerSortValue"; - const PLAYS_ASC = "+plays"; - const RANK_ASC = "+rank"; - const RECENT_ASC = "+recent"; - const START_DATE_ASC = "+startDate"; - const TOTAL_RANK_ASC = "+totalRank"; - const UPDATED_AT_ASC = "+updatedAt"; - const VIEWS_ASC = "+views"; - const WEIGHT_ASC = "+weight"; - const CREATED_AT_DESC = "-createdAt"; - const DURATION_DESC = "-duration"; - const END_DATE_DESC = "-endDate"; - const LAST_PLAYED_AT_DESC = "-lastPlayedAt"; - const MEDIA_TYPE_DESC = "-mediaType"; - const MODERATION_COUNT_DESC = "-moderationCount"; - const NAME_DESC = "-name"; - const PARTNER_SORT_VALUE_DESC = "-partnerSortValue"; - const PLAYS_DESC = "-plays"; - const RANK_DESC = "-rank"; - const RECENT_DESC = "-recent"; - const START_DATE_DESC = "-startDate"; - const TOTAL_RANK_DESC = "-totalRank"; - const UPDATED_AT_DESC = "-updatedAt"; - const VIEWS_DESC = "-views"; - const WEIGHT_DESC = "-weight"; -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaLiveChannelSegmentOrderBy -{ - const CREATED_AT_ASC = "+createdAt"; - const START_TIME_ASC = "+startTime"; - const UPDATED_AT_ASC = "+updatedAt"; - const CREATED_AT_DESC = "-createdAt"; - const START_TIME_DESC = "-startTime"; - const UPDATED_AT_DESC = "-updatedAt"; -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaLiveChannelSegmentStatus -{ - const ACTIVE = "2"; - const DELETED = "3"; -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaLiveChannelSegmentTriggerType -{ - const CHANNEL_RELATIVE = "1"; - const ABSOLUTE_TIME = "2"; - const SEGMENT_START_RELATIVE = "3"; - const SEGMENT_END_RELATIVE = "4"; -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaLiveChannelSegmentType -{ - const VIDEO_AND_AUDIO = "1"; -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaLiveEntryOrderBy -{ - const CREATED_AT_ASC = "+createdAt"; - const DURATION_ASC = "+duration"; - const END_DATE_ASC = "+endDate"; - const LAST_PLAYED_AT_ASC = "+lastPlayedAt"; - const MEDIA_TYPE_ASC = "+mediaType"; - const MODERATION_COUNT_ASC = "+moderationCount"; - const NAME_ASC = "+name"; - const PARTNER_SORT_VALUE_ASC = "+partnerSortValue"; - const PLAYS_ASC = "+plays"; - const RANK_ASC = "+rank"; - const RECENT_ASC = "+recent"; - const START_DATE_ASC = "+startDate"; - const TOTAL_RANK_ASC = "+totalRank"; - const UPDATED_AT_ASC = "+updatedAt"; - const VIEWS_ASC = "+views"; - const WEIGHT_ASC = "+weight"; - const CREATED_AT_DESC = "-createdAt"; - const DURATION_DESC = "-duration"; - const END_DATE_DESC = "-endDate"; - const LAST_PLAYED_AT_DESC = "-lastPlayedAt"; - const MEDIA_TYPE_DESC = "-mediaType"; - const MODERATION_COUNT_DESC = "-moderationCount"; - const NAME_DESC = "-name"; - const PARTNER_SORT_VALUE_DESC = "-partnerSortValue"; - const PLAYS_DESC = "-plays"; - const RANK_DESC = "-rank"; - const RECENT_DESC = "-recent"; - const START_DATE_DESC = "-startDate"; - const TOTAL_RANK_DESC = "-totalRank"; - const UPDATED_AT_DESC = "-updatedAt"; - const VIEWS_DESC = "-views"; - const WEIGHT_DESC = "-weight"; -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaLiveParamsOrderBy -{ -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaLiveStreamAdminEntryOrderBy -{ - const CREATED_AT_ASC = "+createdAt"; - const DURATION_ASC = "+duration"; - const END_DATE_ASC = "+endDate"; - const LAST_PLAYED_AT_ASC = "+lastPlayedAt"; - const MEDIA_TYPE_ASC = "+mediaType"; - const MODERATION_COUNT_ASC = "+moderationCount"; - const NAME_ASC = "+name"; - const PARTNER_SORT_VALUE_ASC = "+partnerSortValue"; - const PLAYS_ASC = "+plays"; - const RANK_ASC = "+rank"; - const RECENT_ASC = "+recent"; - const START_DATE_ASC = "+startDate"; - const TOTAL_RANK_ASC = "+totalRank"; - const UPDATED_AT_ASC = "+updatedAt"; - const VIEWS_ASC = "+views"; - const WEIGHT_ASC = "+weight"; - const CREATED_AT_DESC = "-createdAt"; - const DURATION_DESC = "-duration"; - const END_DATE_DESC = "-endDate"; - const LAST_PLAYED_AT_DESC = "-lastPlayedAt"; - const MEDIA_TYPE_DESC = "-mediaType"; - const MODERATION_COUNT_DESC = "-moderationCount"; - const NAME_DESC = "-name"; - const PARTNER_SORT_VALUE_DESC = "-partnerSortValue"; - const PLAYS_DESC = "-plays"; - const RANK_DESC = "-rank"; - const RECENT_DESC = "-recent"; - const START_DATE_DESC = "-startDate"; - const TOTAL_RANK_DESC = "-totalRank"; - const UPDATED_AT_DESC = "-updatedAt"; - const VIEWS_DESC = "-views"; - const WEIGHT_DESC = "-weight"; -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaLiveStreamEntryOrderBy -{ - const CREATED_AT_ASC = "+createdAt"; - const DURATION_ASC = "+duration"; - const END_DATE_ASC = "+endDate"; - const LAST_PLAYED_AT_ASC = "+lastPlayedAt"; - const MEDIA_TYPE_ASC = "+mediaType"; - const MODERATION_COUNT_ASC = "+moderationCount"; - const NAME_ASC = "+name"; - const PARTNER_SORT_VALUE_ASC = "+partnerSortValue"; - const PLAYS_ASC = "+plays"; - const RANK_ASC = "+rank"; - const RECENT_ASC = "+recent"; - const START_DATE_ASC = "+startDate"; - const TOTAL_RANK_ASC = "+totalRank"; - const UPDATED_AT_ASC = "+updatedAt"; - const VIEWS_ASC = "+views"; - const WEIGHT_ASC = "+weight"; - const CREATED_AT_DESC = "-createdAt"; - const DURATION_DESC = "-duration"; - const END_DATE_DESC = "-endDate"; - const LAST_PLAYED_AT_DESC = "-lastPlayedAt"; - const MEDIA_TYPE_DESC = "-mediaType"; - const MODERATION_COUNT_DESC = "-moderationCount"; - const NAME_DESC = "-name"; - const PARTNER_SORT_VALUE_DESC = "-partnerSortValue"; - const PLAYS_DESC = "-plays"; - const RANK_DESC = "-rank"; - const RECENT_DESC = "-recent"; - const START_DATE_DESC = "-startDate"; - const TOTAL_RANK_DESC = "-totalRank"; - const UPDATED_AT_DESC = "-updatedAt"; - const VIEWS_DESC = "-views"; - const WEIGHT_DESC = "-weight"; -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaMailType -{ - const MAIL_TYPE_KALTURA_NEWSLETTER = "10"; - const MAIL_TYPE_ADDED_TO_FAVORITES = "11"; - const MAIL_TYPE_ADDED_TO_CLIP_FAVORITES = "12"; - const MAIL_TYPE_NEW_COMMENT_IN_PROFILE = "13"; - const MAIL_TYPE_CLIP_ADDED_YOUR_KALTURA = "20"; - const MAIL_TYPE_VIDEO_ADDED = "21"; - const MAIL_TYPE_ROUGHCUT_CREATED = "22"; - const MAIL_TYPE_ADDED_KALTURA_TO_YOUR_FAVORITES = "23"; - const MAIL_TYPE_NEW_COMMENT_IN_KALTURA = "24"; - const MAIL_TYPE_CLIP_ADDED = "30"; - const MAIL_TYPE_VIDEO_CREATED = "31"; - const MAIL_TYPE_ADDED_KALTURA_TO_HIS_FAVORITES = "32"; - const MAIL_TYPE_NEW_COMMENT_IN_KALTURA_YOU_CONTRIBUTED = "33"; - const MAIL_TYPE_CLIP_CONTRIBUTED = "40"; - const MAIL_TYPE_ROUGHCUT_CREATED_SUBSCRIBED = "41"; - const MAIL_TYPE_ADDED_KALTURA_TO_HIS_FAVORITES_SUBSCRIBED = "42"; - const MAIL_TYPE_NEW_COMMENT_IN_KALTURA_YOU_SUBSCRIBED = "43"; - const MAIL_TYPE_REGISTER_CONFIRM = "50"; - const MAIL_TYPE_PASSWORD_RESET = "51"; - const MAIL_TYPE_LOGIN_MAIL_RESET = "52"; - const MAIL_TYPE_REGISTER_CONFIRM_VIDEO_SERVICE = "54"; - const MAIL_TYPE_VIDEO_READY = "60"; - const MAIL_TYPE_VIDEO_IS_READY = "62"; - const MAIL_TYPE_BULK_DOWNLOAD_READY = "63"; - const MAIL_TYPE_BULKUPLOAD_FINISHED = "64"; - const MAIL_TYPE_BULKUPLOAD_FAILED = "65"; - const MAIL_TYPE_BULKUPLOAD_ABORTED = "66"; - const MAIL_TYPE_NOTIFY_ERR = "70"; - const MAIL_TYPE_ACCOUNT_UPGRADE_CONFIRM = "80"; - const MAIL_TYPE_VIDEO_SERVICE_NOTICE = "81"; - const MAIL_TYPE_VIDEO_SERVICE_NOTICE_LIMIT_REACHED = "82"; - const MAIL_TYPE_VIDEO_SERVICE_NOTICE_ACCOUNT_LOCKED = "83"; - const MAIL_TYPE_VIDEO_SERVICE_NOTICE_ACCOUNT_DELETED = "84"; - const MAIL_TYPE_VIDEO_SERVICE_NOTICE_UPGRADE_OFFER = "85"; - const MAIL_TYPE_ACCOUNT_REACTIVE_CONFIRM = "86"; - const MAIL_TYPE_SYSTEM_USER_RESET_PASSWORD = "110"; - const MAIL_TYPE_SYSTEM_USER_RESET_PASSWORD_SUCCESS = "111"; - const MAIL_TYPE_SYSTEM_USER_NEW_PASSWORD = "112"; - const MAIL_TYPE_SYSTEM_USER_CREDENTIALS_SAVED = "113"; -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaMediaEntryOrderBy -{ - const CREATED_AT_ASC = "+createdAt"; - const DURATION_ASC = "+duration"; - const END_DATE_ASC = "+endDate"; - const LAST_PLAYED_AT_ASC = "+lastPlayedAt"; - const MEDIA_TYPE_ASC = "+mediaType"; - const MODERATION_COUNT_ASC = "+moderationCount"; - const NAME_ASC = "+name"; - const PARTNER_SORT_VALUE_ASC = "+partnerSortValue"; - const PLAYS_ASC = "+plays"; - const RANK_ASC = "+rank"; - const RECENT_ASC = "+recent"; - const START_DATE_ASC = "+startDate"; - const TOTAL_RANK_ASC = "+totalRank"; - const UPDATED_AT_ASC = "+updatedAt"; - const VIEWS_ASC = "+views"; - const WEIGHT_ASC = "+weight"; - const CREATED_AT_DESC = "-createdAt"; - const DURATION_DESC = "-duration"; - const END_DATE_DESC = "-endDate"; - const LAST_PLAYED_AT_DESC = "-lastPlayedAt"; - const MEDIA_TYPE_DESC = "-mediaType"; - const MODERATION_COUNT_DESC = "-moderationCount"; - const NAME_DESC = "-name"; - const PARTNER_SORT_VALUE_DESC = "-partnerSortValue"; - const PLAYS_DESC = "-plays"; - const RANK_DESC = "-rank"; - const RECENT_DESC = "-recent"; - const START_DATE_DESC = "-startDate"; - const TOTAL_RANK_DESC = "-totalRank"; - const UPDATED_AT_DESC = "-updatedAt"; - const VIEWS_DESC = "-views"; - const WEIGHT_DESC = "-weight"; -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaMediaFlavorParamsOrderBy -{ -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaMediaFlavorParamsOutputOrderBy -{ -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaMediaInfoOrderBy -{ -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaMediaParserType -{ - const MEDIAINFO = "0"; - const REMOTE_MEDIAINFO = "remoteMediaInfo.RemoteMediaInfo"; - const FFMPEG = "1"; -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaMediaServerOrderBy -{ - const CREATED_AT_ASC = "+createdAt"; - const UPDATED_AT_ASC = "+updatedAt"; - const CREATED_AT_DESC = "-createdAt"; - const UPDATED_AT_DESC = "-updatedAt"; -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaMixEntryOrderBy -{ - const CREATED_AT_ASC = "+createdAt"; - const DURATION_ASC = "+duration"; - const END_DATE_ASC = "+endDate"; - const LAST_PLAYED_AT_ASC = "+lastPlayedAt"; - const MODERATION_COUNT_ASC = "+moderationCount"; - const NAME_ASC = "+name"; - const PARTNER_SORT_VALUE_ASC = "+partnerSortValue"; - const PLAYS_ASC = "+plays"; - const RANK_ASC = "+rank"; - const RECENT_ASC = "+recent"; - const START_DATE_ASC = "+startDate"; - const TOTAL_RANK_ASC = "+totalRank"; - const UPDATED_AT_ASC = "+updatedAt"; - const VIEWS_ASC = "+views"; - const WEIGHT_ASC = "+weight"; - const CREATED_AT_DESC = "-createdAt"; - const DURATION_DESC = "-duration"; - const END_DATE_DESC = "-endDate"; - const LAST_PLAYED_AT_DESC = "-lastPlayedAt"; - const MODERATION_COUNT_DESC = "-moderationCount"; - const NAME_DESC = "-name"; - const PARTNER_SORT_VALUE_DESC = "-partnerSortValue"; - const PLAYS_DESC = "-plays"; - const RANK_DESC = "-rank"; - const RECENT_DESC = "-recent"; - const START_DATE_DESC = "-startDate"; - const TOTAL_RANK_DESC = "-totalRank"; - const UPDATED_AT_DESC = "-updatedAt"; - const VIEWS_DESC = "-views"; - const WEIGHT_DESC = "-weight"; -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaModerationFlagStatus -{ - const PENDING = "1"; - const MODERATED = "2"; -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaModerationObjectType -{ - const ENTRY = "2"; - const USER = "3"; -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaPartnerOrderBy -{ - const ADMIN_EMAIL_ASC = "+adminEmail"; - const ADMIN_NAME_ASC = "+adminName"; - const CREATED_AT_ASC = "+createdAt"; - const ID_ASC = "+id"; - const NAME_ASC = "+name"; - const STATUS_ASC = "+status"; - const WEBSITE_ASC = "+website"; - const ADMIN_EMAIL_DESC = "-adminEmail"; - const ADMIN_NAME_DESC = "-adminName"; - const CREATED_AT_DESC = "-createdAt"; - const ID_DESC = "-id"; - const NAME_DESC = "-name"; - const STATUS_DESC = "-status"; - const WEBSITE_DESC = "-website"; -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaPermissionItemOrderBy -{ - const CREATED_AT_ASC = "+createdAt"; - const ID_ASC = "+id"; - const UPDATED_AT_ASC = "+updatedAt"; - const CREATED_AT_DESC = "-createdAt"; - const ID_DESC = "-id"; - const UPDATED_AT_DESC = "-updatedAt"; -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaPermissionItemType -{ - const API_ACTION_ITEM = "kApiActionPermissionItem"; - const API_PARAMETER_ITEM = "kApiParameterPermissionItem"; -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaPermissionOrderBy -{ - const CREATED_AT_ASC = "+createdAt"; - const ID_ASC = "+id"; - const NAME_ASC = "+name"; - const UPDATED_AT_ASC = "+updatedAt"; - const CREATED_AT_DESC = "-createdAt"; - const ID_DESC = "-id"; - const NAME_DESC = "-name"; - const UPDATED_AT_DESC = "-updatedAt"; -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaPlayableEntryOrderBy -{ - const CREATED_AT_ASC = "+createdAt"; - const DURATION_ASC = "+duration"; - const END_DATE_ASC = "+endDate"; - const LAST_PLAYED_AT_ASC = "+lastPlayedAt"; - const MODERATION_COUNT_ASC = "+moderationCount"; - const NAME_ASC = "+name"; - const PARTNER_SORT_VALUE_ASC = "+partnerSortValue"; - const PLAYS_ASC = "+plays"; - const RANK_ASC = "+rank"; - const RECENT_ASC = "+recent"; - const START_DATE_ASC = "+startDate"; - const TOTAL_RANK_ASC = "+totalRank"; - const UPDATED_AT_ASC = "+updatedAt"; - const VIEWS_ASC = "+views"; - const WEIGHT_ASC = "+weight"; - const CREATED_AT_DESC = "-createdAt"; - const DURATION_DESC = "-duration"; - const END_DATE_DESC = "-endDate"; - const LAST_PLAYED_AT_DESC = "-lastPlayedAt"; - const MODERATION_COUNT_DESC = "-moderationCount"; - const NAME_DESC = "-name"; - const PARTNER_SORT_VALUE_DESC = "-partnerSortValue"; - const PLAYS_DESC = "-plays"; - const RANK_DESC = "-rank"; - const RECENT_DESC = "-recent"; - const START_DATE_DESC = "-startDate"; - const TOTAL_RANK_DESC = "-totalRank"; - const UPDATED_AT_DESC = "-updatedAt"; - const VIEWS_DESC = "-views"; - const WEIGHT_DESC = "-weight"; -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaPlaybackProtocol -{ - const APPLE_HTTP = "applehttp"; - const AUTO = "auto"; - const AKAMAI_HD = "hdnetwork"; - const AKAMAI_HDS = "hdnetworkmanifest"; - const HDS = "hds"; - const HLS = "hls"; - const HTTP = "http"; - const MPEG_DASH = "mpegdash"; - const RTMP = "rtmp"; - const RTSP = "rtsp"; - const SILVER_LIGHT = "sl"; -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaPlaylistOrderBy -{ - const CREATED_AT_ASC = "+createdAt"; - const END_DATE_ASC = "+endDate"; - const MODERATION_COUNT_ASC = "+moderationCount"; - const NAME_ASC = "+name"; - const PARTNER_SORT_VALUE_ASC = "+partnerSortValue"; - const RANK_ASC = "+rank"; - const RECENT_ASC = "+recent"; - const START_DATE_ASC = "+startDate"; - const TOTAL_RANK_ASC = "+totalRank"; - const UPDATED_AT_ASC = "+updatedAt"; - const WEIGHT_ASC = "+weight"; - const CREATED_AT_DESC = "-createdAt"; - const END_DATE_DESC = "-endDate"; - const MODERATION_COUNT_DESC = "-moderationCount"; - const NAME_DESC = "-name"; - const PARTNER_SORT_VALUE_DESC = "-partnerSortValue"; - const RANK_DESC = "-rank"; - const RECENT_DESC = "-recent"; - const START_DATE_DESC = "-startDate"; - const TOTAL_RANK_DESC = "-totalRank"; - const UPDATED_AT_DESC = "-updatedAt"; - const WEIGHT_DESC = "-weight"; -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaReportInterval -{ - const DAYS = "days"; - const MONTHS = "months"; -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaReportOrderBy -{ - const CREATED_AT_ASC = "+createdAt"; - const CREATED_AT_DESC = "-createdAt"; -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaRuleActionType -{ - const BLOCK = "1"; - const PREVIEW = "2"; - const LIMIT_FLAVORS = "3"; - const ADD_TO_STORAGE = "4"; -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaSchemaType -{ - const BULK_UPLOAD_RESULT_XML = "bulkUploadXml.bulkUploadResultXML"; - const BULK_UPLOAD_XML = "bulkUploadXml.bulkUploadXML"; - const INGEST_API = "cuePoint.ingestAPI"; - const SERVE_API = "cuePoint.serveAPI"; - const DROP_FOLDER_XML = "dropFolderXmlBulkUpload.dropFolderXml"; - const SYNDICATION = "syndication"; -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaSearchConditionComparison -{ - const EQUAL = "1"; - const GREATER_THAN = "2"; - const GREATER_THAN_OR_EQUAL = "3"; - const LESS_THAN = "4"; - const LESS_THAN_OR_EQUAL = "5"; -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaSourceType -{ - const LIMELIGHT_LIVE = "limeLight.LIVE_STREAM"; - const VELOCIX_LIVE = "velocix.VELOCIX_LIVE"; - const FILE = "1"; - const WEBCAM = "2"; - const URL = "5"; - const SEARCH_PROVIDER = "6"; - const AKAMAI_LIVE = "29"; - const MANUAL_LIVE_STREAM = "30"; - const AKAMAI_UNIVERSAL_LIVE = "31"; - const LIVE_STREAM = "32"; - const LIVE_CHANNEL = "33"; - const RECORDED_LIVE = "34"; - const CLIP = "35"; -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaStorageProfileOrderBy -{ - const CREATED_AT_ASC = "+createdAt"; - const UPDATED_AT_ASC = "+updatedAt"; - const CREATED_AT_DESC = "-createdAt"; - const UPDATED_AT_DESC = "-updatedAt"; -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaStorageProfileProtocol -{ - const KONTIKI = "kontiki.KONTIKI"; - const KALTURA_DC = "0"; - const FTP = "1"; - const SCP = "2"; - const SFTP = "3"; - const S3 = "6"; - const LOCAL = "7"; -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaSyndicationFeedEntriesOrderBy -{ - const CREATED_AT_DESC = "-createdAt"; - const RECENT = "recent"; -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaTaggedObjectType -{ - const ENTRY = "1"; - const CATEGORY = "2"; -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaThumbAssetOrderBy -{ - const CREATED_AT_ASC = "+createdAt"; - const DELETED_AT_ASC = "+deletedAt"; - const SIZE_ASC = "+size"; - const UPDATED_AT_ASC = "+updatedAt"; - const CREATED_AT_DESC = "-createdAt"; - const DELETED_AT_DESC = "-deletedAt"; - const SIZE_DESC = "-size"; - const UPDATED_AT_DESC = "-updatedAt"; -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaThumbParamsOrderBy -{ -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaThumbParamsOutputOrderBy -{ -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaTubeMogulSyndicationFeedCategories -{ - const ANIMALS_AND_PETS = "Animals & Pets"; - const ARTS_AND_ANIMATION = "Arts & Animation"; - const AUTOS = "Autos"; - const COMEDY = "Comedy"; - const COMMERCIALS_PROMOTIONAL = "Commercials/Promotional"; - const ENTERTAINMENT = "Entertainment"; - const FAMILY_AND_KIDS = "Family & Kids"; - const HOW_TO_INSTRUCTIONAL_DIY = "How To/Instructional/DIY"; - const MUSIC = "Music"; - const NEWS_AND_BLOGS = "News & Blogs"; - const SCIENCE_AND_TECHNOLOGY = "Science & Technology"; - const SPORTS = "Sports"; - const TRAVEL_AND_PLACES = "Travel & Places"; - const VIDEO_GAMES = "Video Games"; - const VLOGS_PEOPLE = "Vlogs & People"; -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaTubeMogulSyndicationFeedOrderBy -{ - const CREATED_AT_ASC = "+createdAt"; - const NAME_ASC = "+name"; - const PLAYLIST_ID_ASC = "+playlistId"; - const TYPE_ASC = "+type"; - const UPDATED_AT_ASC = "+updatedAt"; - const CREATED_AT_DESC = "-createdAt"; - const NAME_DESC = "-name"; - const PLAYLIST_ID_DESC = "-playlistId"; - const TYPE_DESC = "-type"; - const UPDATED_AT_DESC = "-updatedAt"; -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaUiConfOrderBy -{ - const CREATED_AT_ASC = "+createdAt"; - const UPDATED_AT_ASC = "+updatedAt"; - const CREATED_AT_DESC = "-createdAt"; - const UPDATED_AT_DESC = "-updatedAt"; -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaUploadTokenOrderBy -{ - const CREATED_AT_ASC = "+createdAt"; - const CREATED_AT_DESC = "-createdAt"; -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaUserLoginDataOrderBy -{ -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaUserOrderBy -{ - const CREATED_AT_ASC = "+createdAt"; - const ID_ASC = "+id"; - const CREATED_AT_DESC = "-createdAt"; - const ID_DESC = "-id"; -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaUserRoleOrderBy -{ - const CREATED_AT_ASC = "+createdAt"; - const ID_ASC = "+id"; - const NAME_ASC = "+name"; - const UPDATED_AT_ASC = "+updatedAt"; - const CREATED_AT_DESC = "-createdAt"; - const ID_DESC = "-id"; - const NAME_DESC = "-name"; - const UPDATED_AT_DESC = "-updatedAt"; -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaVideoCodec -{ - const NONE = ""; - const APCH = "apch"; - const APCN = "apcn"; - const APCO = "apco"; - const APCS = "apcs"; - const COPY = "copy"; - const DNXHD = "dnxhd"; - const DV = "dv"; - const FLV = "flv"; - const H263 = "h263"; - const H264 = "h264"; - const H264B = "h264b"; - const H264H = "h264h"; - const H264M = "h264m"; - const MPEG2 = "mpeg2"; - const MPEG4 = "mpeg4"; - const THEORA = "theora"; - const VP6 = "vp6"; - const VP8 = "vp8"; - const WMV2 = "wmv2"; - const WMV3 = "wmv3"; - const WVC1A = "wvc1a"; -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaWidgetOrderBy -{ - const CREATED_AT_ASC = "+createdAt"; - const CREATED_AT_DESC = "-createdAt"; -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaYahooSyndicationFeedAdultValues -{ - const ADULT = "adult"; - const NON_ADULT = "nonadult"; -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaYahooSyndicationFeedCategories -{ - const ACTION = "Action"; - const ANIMALS = "Animals"; - const ART_AND_ANIMATION = "Art & Animation"; - const COMMERCIALS = "Commercials"; - const ENTERTAINMENT_AND_TV = "Entertainment & TV"; - const FAMILY = "Family"; - const FOOD = "Food"; - const FUNNY_VIDEOS = "Funny Videos"; - const GAMES = "Games"; - const HEALTH_AND_BEAUTY = "Health & Beauty"; - const HOW_TO = "How-To"; - const MOVIES_AND_SHORTS = "Movies & Shorts"; - const MUSIC = "Music"; - const NEWS_AND_POLITICS = "News & Politics"; - const PEOPLE_AND_VLOGS = "People & Vlogs"; - const PRODUCTS_AND_TECH = "Products & Tech."; - const SCIENCE_AND_ENVIRONMENT = "Science & Environment"; - const SPORTS = "Sports"; - const TRANSPORTATION = "Transportation"; - const TRAVEL = "Travel"; -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaYahooSyndicationFeedOrderBy -{ - const CREATED_AT_ASC = "+createdAt"; - const NAME_ASC = "+name"; - const PLAYLIST_ID_ASC = "+playlistId"; - const TYPE_ASC = "+type"; - const UPDATED_AT_ASC = "+updatedAt"; - const CREATED_AT_DESC = "-createdAt"; - const NAME_DESC = "-name"; - const PLAYLIST_ID_DESC = "-playlistId"; - const TYPE_DESC = "-type"; - const UPDATED_AT_DESC = "-updatedAt"; -} - diff --git a/local/kaltura/API/KalturaPlugins/KalturaAbcScreenersWatermarkAccessControlClientPlugin.php b/local/kaltura/API/KalturaPlugins/KalturaAbcScreenersWatermarkAccessControlClientPlugin.php deleted file mode 100644 index 6f68c5fa37a5d..0000000000000 --- a/local/kaltura/API/KalturaPlugins/KalturaAbcScreenersWatermarkAccessControlClientPlugin.php +++ /dev/null @@ -1,84 +0,0 @@ -. -// -// @ignore -// =================================================================================================== - -/** - * @package Kaltura - * @subpackage Client - */ -require_once(dirname(__FILE__) . "/../KalturaClientBase.php"); -require_once(dirname(__FILE__) . "/../KalturaEnums.php"); -require_once(dirname(__FILE__) . "/../KalturaTypes.php"); - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaABCScreenersWatermarkCondition extends KalturaCondition -{ - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaAbcScreenersWatermarkAccessControlClientPlugin extends KalturaClientPlugin -{ - protected function __construct(KalturaClient $client) - { - parent::__construct($client); - } - - /** - * @return KalturaAbcScreenersWatermarkAccessControlClientPlugin - */ - public static function get(KalturaClient $client) - { - return new KalturaAbcScreenersWatermarkAccessControlClientPlugin($client); - } - - /** - * @return array - */ - public function getServices() - { - $services = array( - ); - return $services; - } - - /** - * @return string - */ - public function getName() - { - return 'abcScreenersWatermarkAccessControl'; - } -} - diff --git a/local/kaltura/API/KalturaPlugins/KalturaAdCuePointClientPlugin.php b/local/kaltura/API/KalturaPlugins/KalturaAdCuePointClientPlugin.php deleted file mode 100644 index 7cd819707c3be..0000000000000 --- a/local/kaltura/API/KalturaPlugins/KalturaAdCuePointClientPlugin.php +++ /dev/null @@ -1,253 +0,0 @@ -. -// -// @ignore -// =================================================================================================== - -/** - * @package Kaltura - * @subpackage Client - */ -require_once(dirname(__FILE__) . "/../KalturaClientBase.php"); -require_once(dirname(__FILE__) . "/../KalturaEnums.php"); -require_once(dirname(__FILE__) . "/../KalturaTypes.php"); -require_once(dirname(__FILE__) . "/KalturaCuePointClientPlugin.php"); - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaAdCuePointOrderBy -{ - const CREATED_AT_ASC = "+createdAt"; - const DURATION_ASC = "+duration"; - const END_TIME_ASC = "+endTime"; - const PARTNER_SORT_VALUE_ASC = "+partnerSortValue"; - const START_TIME_ASC = "+startTime"; - const UPDATED_AT_ASC = "+updatedAt"; - const CREATED_AT_DESC = "-createdAt"; - const DURATION_DESC = "-duration"; - const END_TIME_DESC = "-endTime"; - const PARTNER_SORT_VALUE_DESC = "-partnerSortValue"; - const START_TIME_DESC = "-startTime"; - const UPDATED_AT_DESC = "-updatedAt"; -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaAdProtocolType -{ - const CUSTOM = "0"; - const VAST = "1"; - const VAST_2_0 = "2"; - const VPAID = "3"; -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaAdType -{ - const VIDEO = "1"; - const OVERLAY = "2"; -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaAdCuePoint extends KalturaCuePoint -{ - /** - * - * - * @var KalturaAdProtocolType - * @insertonly - */ - public $protocolType = null; - - /** - * - * - * @var string - */ - public $sourceUrl = null; - - /** - * - * - * @var KalturaAdType - */ - public $adType = null; - - /** - * - * - * @var string - */ - public $title = null; - - /** - * - * - * @var int - */ - public $endTime = null; - - /** - * Duration in milliseconds - * - * - * @var int - * @readonly - */ - public $duration = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -abstract class KalturaAdCuePointBaseFilter extends KalturaCuePointFilter -{ - /** - * - * - * @var KalturaAdProtocolType - */ - public $protocolTypeEqual = null; - - /** - * - * - * @var string - */ - public $protocolTypeIn = null; - - /** - * - * - * @var string - */ - public $titleLike = null; - - /** - * - * - * @var string - */ - public $titleMultiLikeOr = null; - - /** - * - * - * @var string - */ - public $titleMultiLikeAnd = null; - - /** - * - * - * @var int - */ - public $endTimeGreaterThanOrEqual = null; - - /** - * - * - * @var int - */ - public $endTimeLessThanOrEqual = null; - - /** - * - * - * @var int - */ - public $durationGreaterThanOrEqual = null; - - /** - * - * - * @var int - */ - public $durationLessThanOrEqual = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaAdCuePointFilter extends KalturaAdCuePointBaseFilter -{ - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaAdCuePointClientPlugin extends KalturaClientPlugin -{ - protected function __construct(KalturaClient $client) - { - parent::__construct($client); - } - - /** - * @return KalturaAdCuePointClientPlugin - */ - public static function get(KalturaClient $client) - { - return new KalturaAdCuePointClientPlugin($client); - } - - /** - * @return array - */ - public function getServices() - { - $services = array( - ); - return $services; - } - - /** - * @return string - */ - public function getName() - { - return 'adCuePoint'; - } -} - diff --git a/local/kaltura/API/KalturaPlugins/KalturaAnnotationClientPlugin.php b/local/kaltura/API/KalturaPlugins/KalturaAnnotationClientPlugin.php deleted file mode 100644 index d2fd7a9629d54..0000000000000 --- a/local/kaltura/API/KalturaPlugins/KalturaAnnotationClientPlugin.php +++ /dev/null @@ -1,450 +0,0 @@ -. -// -// @ignore -// =================================================================================================== - -/** - * @package Kaltura - * @subpackage Client - */ -require_once(dirname(__FILE__) . "/../KalturaClientBase.php"); -require_once(dirname(__FILE__) . "/../KalturaEnums.php"); -require_once(dirname(__FILE__) . "/../KalturaTypes.php"); -require_once(dirname(__FILE__) . "/KalturaCuePointClientPlugin.php"); - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaAnnotationOrderBy -{ - const CREATED_AT_ASC = "+createdAt"; - const DURATION_ASC = "+duration"; - const END_TIME_ASC = "+endTime"; - const PARTNER_SORT_VALUE_ASC = "+partnerSortValue"; - const START_TIME_ASC = "+startTime"; - const UPDATED_AT_ASC = "+updatedAt"; - const CREATED_AT_DESC = "-createdAt"; - const DURATION_DESC = "-duration"; - const END_TIME_DESC = "-endTime"; - const PARTNER_SORT_VALUE_DESC = "-partnerSortValue"; - const START_TIME_DESC = "-startTime"; - const UPDATED_AT_DESC = "-updatedAt"; -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaAnnotation extends KalturaCuePoint -{ - /** - * - * - * @var string - * @insertonly - */ - public $parentId = null; - - /** - * - * - * @var string - */ - public $text = null; - - /** - * End time in milliseconds - * - * - * @var int - */ - public $endTime = null; - - /** - * Duration in milliseconds - * - * - * @var int - * @readonly - */ - public $duration = null; - - /** - * Depth in the tree - * - * - * @var int - * @readonly - */ - public $depth = null; - - /** - * Number of all descendants - * - * - * @var int - * @readonly - */ - public $childrenCount = null; - - /** - * Number of children, first generation only. - * - * - * @var int - * @readonly - */ - public $directChildrenCount = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaAnnotationListResponse extends KalturaObjectBase -{ - /** - * - * - * @var array of KalturaAnnotation - * @readonly - */ - public $objects; - - /** - * - * - * @var int - * @readonly - */ - public $totalCount = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -abstract class KalturaAnnotationBaseFilter extends KalturaCuePointFilter -{ - /** - * - * - * @var string - */ - public $parentIdEqual = null; - - /** - * - * - * @var string - */ - public $parentIdIn = null; - - /** - * - * - * @var string - */ - public $textLike = null; - - /** - * - * - * @var string - */ - public $textMultiLikeOr = null; - - /** - * - * - * @var string - */ - public $textMultiLikeAnd = null; - - /** - * - * - * @var int - */ - public $endTimeGreaterThanOrEqual = null; - - /** - * - * - * @var int - */ - public $endTimeLessThanOrEqual = null; - - /** - * - * - * @var int - */ - public $durationGreaterThanOrEqual = null; - - /** - * - * - * @var int - */ - public $durationLessThanOrEqual = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaAnnotationFilter extends KalturaAnnotationBaseFilter -{ - -} - - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaAnnotationService extends KalturaServiceBase -{ - function __construct(KalturaClient $client = null) - { - parent::__construct($client); - } - - /** - * Allows you to add an annotation object associated with an entry - * - * @param KalturaCuePoint $annotation - * @return KalturaAnnotation - */ - function add(KalturaCuePoint $annotation) - { - $kparams = array(); - $this->client->addParam($kparams, "annotation", $annotation->toParams()); - $this->client->queueServiceActionCall("annotation_annotation", "add", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaAnnotation"); - return $resultObject; - } - - /** - * Update annotation by id - * - * @param string $id - * @param KalturaCuePoint $annotation - * @return KalturaAnnotation - */ - function update($id, KalturaCuePoint $annotation) - { - $kparams = array(); - $this->client->addParam($kparams, "id", $id); - $this->client->addParam($kparams, "annotation", $annotation->toParams()); - $this->client->queueServiceActionCall("annotation_annotation", "update", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaAnnotation"); - return $resultObject; - } - - /** - * List annotation objects by filter and pager - * - * @param KalturaCuePointFilter $filter - * @param KalturaFilterPager $pager - * @return KalturaAnnotationListResponse - */ - function listAction(KalturaCuePointFilter $filter = null, KalturaFilterPager $pager = null) - { - $kparams = array(); - if ($filter !== null) - $this->client->addParam($kparams, "filter", $filter->toParams()); - if ($pager !== null) - $this->client->addParam($kparams, "pager", $pager->toParams()); - $this->client->queueServiceActionCall("annotation_annotation", "list", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaAnnotationListResponse"); - return $resultObject; - } - - /** - * Allows you to add multiple cue points objects by uploading XML that contains multiple cue point definitions - * - * @param file $fileData - * @return KalturaCuePointListResponse - */ - function addFromBulk($fileData) - { - $kparams = array(); - $kfiles = array(); - $this->client->addParam($kfiles, "fileData", $fileData); - $this->client->queueServiceActionCall("annotation_annotation", "addFromBulk", $kparams, $kfiles); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaCuePointListResponse"); - return $resultObject; - } - - /** - * Download multiple cue points objects as XML definitions - * - * @param KalturaCuePointFilter $filter - * @param KalturaFilterPager $pager - * @return file - */ - function serveBulk(KalturaCuePointFilter $filter = null, KalturaFilterPager $pager = null) - { - $kparams = array(); - if ($filter !== null) - $this->client->addParam($kparams, "filter", $filter->toParams()); - if ($pager !== null) - $this->client->addParam($kparams, "pager", $pager->toParams()); - $this->client->queueServiceActionCall("annotation_annotation", "serveBulk", $kparams); - if(!$this->client->getDestinationPath() && !$this->client->getReturnServedResult()) - return $this->client->getServeUrl(); - return $this->client->doQueue(); - } - - /** - * Retrieve an CuePoint object by id - * - * @param string $id - * @return KalturaCuePoint - */ - function get($id) - { - $kparams = array(); - $this->client->addParam($kparams, "id", $id); - $this->client->queueServiceActionCall("annotation_annotation", "get", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaCuePoint"); - return $resultObject; - } - - /** - * Count cue point objects by filter - * - * @param KalturaCuePointFilter $filter - * @return int - */ - function count(KalturaCuePointFilter $filter = null) - { - $kparams = array(); - if ($filter !== null) - $this->client->addParam($kparams, "filter", $filter->toParams()); - $this->client->queueServiceActionCall("annotation_annotation", "count", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "integer"); - return $resultObject; - } - - /** - * Delete cue point by id, and delete all children cue points - * - * @param string $id - * @return - */ - function delete($id) - { - $kparams = array(); - $this->client->addParam($kparams, "id", $id); - $this->client->queueServiceActionCall("annotation_annotation", "delete", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "null"); - return $resultObject; - } -} -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaAnnotationClientPlugin extends KalturaClientPlugin -{ - /** - * @var KalturaAnnotationService - */ - public $annotation = null; - - protected function __construct(KalturaClient $client) - { - parent::__construct($client); - $this->annotation = new KalturaAnnotationService($client); - } - - /** - * @return KalturaAnnotationClientPlugin - */ - public static function get(KalturaClient $client) - { - return new KalturaAnnotationClientPlugin($client); - } - - /** - * @return array - */ - public function getServices() - { - $services = array( - 'annotation' => $this->annotation, - ); - return $services; - } - - /** - * @return string - */ - public function getName() - { - return 'annotation'; - } -} - diff --git a/local/kaltura/API/KalturaPlugins/KalturaAsperaClientPlugin.php b/local/kaltura/API/KalturaPlugins/KalturaAsperaClientPlugin.php deleted file mode 100644 index b3044303955ae..0000000000000 --- a/local/kaltura/API/KalturaPlugins/KalturaAsperaClientPlugin.php +++ /dev/null @@ -1,113 +0,0 @@ -. -// -// @ignore -// =================================================================================================== - -/** - * @package Kaltura - * @subpackage Client - */ -require_once(dirname(__FILE__) . "/../KalturaClientBase.php"); -require_once(dirname(__FILE__) . "/../KalturaEnums.php"); -require_once(dirname(__FILE__) . "/../KalturaTypes.php"); - - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaAsperaService extends KalturaServiceBase -{ - function __construct(KalturaClient $client = null) - { - parent::__construct($client); - } - - /** - * - * - * @param string $flavorAssetId - * @return string - */ - function getFaspUrl($flavorAssetId) - { - $kparams = array(); - $this->client->addParam($kparams, "flavorAssetId", $flavorAssetId); - $this->client->queueServiceActionCall("aspera_aspera", "getFaspUrl", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "string"); - return $resultObject; - } -} -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaAsperaClientPlugin extends KalturaClientPlugin -{ - /** - * @var KalturaAsperaService - */ - public $aspera = null; - - protected function __construct(KalturaClient $client) - { - parent::__construct($client); - $this->aspera = new KalturaAsperaService($client); - } - - /** - * @return KalturaAsperaClientPlugin - */ - public static function get(KalturaClient $client) - { - return new KalturaAsperaClientPlugin($client); - } - - /** - * @return array - */ - public function getServices() - { - $services = array( - 'aspera' => $this->aspera, - ); - return $services; - } - - /** - * @return string - */ - public function getName() - { - return 'aspera'; - } -} - diff --git a/local/kaltura/API/KalturaPlugins/KalturaAttachmentClientPlugin.php b/local/kaltura/API/KalturaPlugins/KalturaAttachmentClientPlugin.php deleted file mode 100644 index 61fecf3fff1d5..0000000000000 --- a/local/kaltura/API/KalturaPlugins/KalturaAttachmentClientPlugin.php +++ /dev/null @@ -1,435 +0,0 @@ -. -// -// @ignore -// =================================================================================================== - -/** - * @package Kaltura - * @subpackage Client - */ -require_once(dirname(__FILE__) . "/../KalturaClientBase.php"); -require_once(dirname(__FILE__) . "/../KalturaEnums.php"); -require_once(dirname(__FILE__) . "/../KalturaTypes.php"); - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaAttachmentAssetStatus -{ - const ERROR = -1; - const QUEUED = 0; - const READY = 2; - const DELETED = 3; - const IMPORTING = 7; - const EXPORTING = 9; -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaAttachmentAssetOrderBy -{ - const CREATED_AT_ASC = "+createdAt"; - const DELETED_AT_ASC = "+deletedAt"; - const SIZE_ASC = "+size"; - const UPDATED_AT_ASC = "+updatedAt"; - const CREATED_AT_DESC = "-createdAt"; - const DELETED_AT_DESC = "-deletedAt"; - const SIZE_DESC = "-size"; - const UPDATED_AT_DESC = "-updatedAt"; -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaAttachmentType -{ - const TEXT = "1"; - const MEDIA = "2"; - const DOCUMENT = "3"; -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaAttachmentAsset extends KalturaAsset -{ - /** - * The filename of the attachment asset content - * - * - * @var string - */ - public $filename = null; - - /** - * Attachment asset title - * - * - * @var string - */ - public $title = null; - - /** - * The attachment format - * - * - * @var KalturaAttachmentType - */ - public $format = null; - - /** - * The status of the asset - * - * - * @var KalturaAttachmentAssetStatus - * @readonly - */ - public $status = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaAttachmentAssetListResponse extends KalturaObjectBase -{ - /** - * - * - * @var array of KalturaAttachmentAsset - * @readonly - */ - public $objects; - - /** - * - * - * @var int - * @readonly - */ - public $totalCount = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -abstract class KalturaAttachmentAssetBaseFilter extends KalturaAssetFilter -{ - /** - * - * - * @var KalturaAttachmentType - */ - public $formatEqual = null; - - /** - * - * - * @var string - */ - public $formatIn = null; - - /** - * - * - * @var KalturaAttachmentAssetStatus - */ - public $statusEqual = null; - - /** - * - * - * @var string - */ - public $statusIn = null; - - /** - * - * - * @var string - */ - public $statusNotIn = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaAttachmentAssetFilter extends KalturaAttachmentAssetBaseFilter -{ - -} - - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaAttachmentAssetService extends KalturaServiceBase -{ - function __construct(KalturaClient $client = null) - { - parent::__construct($client); - } - - /** - * Add attachment asset - * - * @param string $entryId - * @param KalturaAttachmentAsset $attachmentAsset - * @return KalturaAttachmentAsset - */ - function add($entryId, KalturaAttachmentAsset $attachmentAsset) - { - $kparams = array(); - $this->client->addParam($kparams, "entryId", $entryId); - $this->client->addParam($kparams, "attachmentAsset", $attachmentAsset->toParams()); - $this->client->queueServiceActionCall("attachment_attachmentasset", "add", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaAttachmentAsset"); - return $resultObject; - } - - /** - * Update content of attachment asset - * - * @param string $id - * @param KalturaContentResource $contentResource - * @return KalturaAttachmentAsset - */ - function setContent($id, KalturaContentResource $contentResource) - { - $kparams = array(); - $this->client->addParam($kparams, "id", $id); - $this->client->addParam($kparams, "contentResource", $contentResource->toParams()); - $this->client->queueServiceActionCall("attachment_attachmentasset", "setContent", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaAttachmentAsset"); - return $resultObject; - } - - /** - * Update attachment asset - * - * @param string $id - * @param KalturaAttachmentAsset $attachmentAsset - * @return KalturaAttachmentAsset - */ - function update($id, KalturaAttachmentAsset $attachmentAsset) - { - $kparams = array(); - $this->client->addParam($kparams, "id", $id); - $this->client->addParam($kparams, "attachmentAsset", $attachmentAsset->toParams()); - $this->client->queueServiceActionCall("attachment_attachmentasset", "update", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaAttachmentAsset"); - return $resultObject; - } - - /** - * Get download URL for the asset - * - * @param string $id - * @param int $storageId - * @return string - */ - function getUrl($id, $storageId = null) - { - $kparams = array(); - $this->client->addParam($kparams, "id", $id); - $this->client->addParam($kparams, "storageId", $storageId); - $this->client->queueServiceActionCall("attachment_attachmentasset", "getUrl", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "string"); - return $resultObject; - } - - /** - * Get remote storage existing paths for the asset - * - * @param string $id - * @return KalturaRemotePathListResponse - */ - function getRemotePaths($id) - { - $kparams = array(); - $this->client->addParam($kparams, "id", $id); - $this->client->queueServiceActionCall("attachment_attachmentasset", "getRemotePaths", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaRemotePathListResponse"); - return $resultObject; - } - - /** - * Serves attachment by its id - * - * @param string $attachmentAssetId - * @return file - */ - function serve($attachmentAssetId) - { - $kparams = array(); - $this->client->addParam($kparams, "attachmentAssetId", $attachmentAssetId); - $this->client->queueServiceActionCall("attachment_attachmentasset", "serve", $kparams); - if(!$this->client->getDestinationPath() && !$this->client->getReturnServedResult()) - return $this->client->getServeUrl(); - return $this->client->doQueue(); - } - - /** - * - * - * @param string $attachmentAssetId - * @return KalturaAttachmentAsset - */ - function get($attachmentAssetId) - { - $kparams = array(); - $this->client->addParam($kparams, "attachmentAssetId", $attachmentAssetId); - $this->client->queueServiceActionCall("attachment_attachmentasset", "get", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaAttachmentAsset"); - return $resultObject; - } - - /** - * List attachment Assets by filter and pager - * - * @param KalturaAssetFilter $filter - * @param KalturaFilterPager $pager - * @return KalturaAttachmentAssetListResponse - */ - function listAction(KalturaAssetFilter $filter = null, KalturaFilterPager $pager = null) - { - $kparams = array(); - if ($filter !== null) - $this->client->addParam($kparams, "filter", $filter->toParams()); - if ($pager !== null) - $this->client->addParam($kparams, "pager", $pager->toParams()); - $this->client->queueServiceActionCall("attachment_attachmentasset", "list", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaAttachmentAssetListResponse"); - return $resultObject; - } - - /** - * - * - * @param string $attachmentAssetId - * @return - */ - function delete($attachmentAssetId) - { - $kparams = array(); - $this->client->addParam($kparams, "attachmentAssetId", $attachmentAssetId); - $this->client->queueServiceActionCall("attachment_attachmentasset", "delete", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "null"); - return $resultObject; - } -} -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaAttachmentClientPlugin extends KalturaClientPlugin -{ - /** - * @var KalturaAttachmentAssetService - */ - public $attachmentAsset = null; - - protected function __construct(KalturaClient $client) - { - parent::__construct($client); - $this->attachmentAsset = new KalturaAttachmentAssetService($client); - } - - /** - * @return KalturaAttachmentClientPlugin - */ - public static function get(KalturaClient $client) - { - return new KalturaAttachmentClientPlugin($client); - } - - /** - * @return array - */ - public function getServices() - { - $services = array( - 'attachmentAsset' => $this->attachmentAsset, - ); - return $services; - } - - /** - * @return string - */ - public function getName() - { - return 'attachment'; - } -} - diff --git a/local/kaltura/API/KalturaPlugins/KalturaAuditClientPlugin.php b/local/kaltura/API/KalturaPlugins/KalturaAuditClientPlugin.php deleted file mode 100644 index a925d7a9467a8..0000000000000 --- a/local/kaltura/API/KalturaPlugins/KalturaAuditClientPlugin.php +++ /dev/null @@ -1,893 +0,0 @@ -. -// -// @ignore -// =================================================================================================== - -/** - * @package Kaltura - * @subpackage Client - */ -require_once(dirname(__FILE__) . "/../KalturaClientBase.php"); -require_once(dirname(__FILE__) . "/../KalturaEnums.php"); -require_once(dirname(__FILE__) . "/../KalturaTypes.php"); - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaAuditTrailChangeXmlNodeType -{ - const CHANGED = 1; - const ADDED = 2; - const REMOVED = 3; -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaAuditTrailContext -{ - const CLIENT = -1; - const SCRIPT = 0; - const PS2 = 1; - const API_V3 = 2; -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaAuditTrailFileSyncType -{ - const FILE = 1; - const LINK = 2; - const URL = 3; -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaAuditTrailStatus -{ - const PENDING = 1; - const READY = 2; - const FAILED = 3; -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaAuditTrailAction -{ - const CHANGED = "CHANGED"; - const CONTENT_VIEWED = "CONTENT_VIEWED"; - const COPIED = "COPIED"; - const CREATED = "CREATED"; - const DELETED = "DELETED"; - const FILE_SYNC_CREATED = "FILE_SYNC_CREATED"; - const RELATION_ADDED = "RELATION_ADDED"; - const RELATION_REMOVED = "RELATION_REMOVED"; - const VIEWED = "VIEWED"; -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaAuditTrailObjectType -{ - const BATCH_JOB = "BatchJob"; - const EMAIL_INGESTION_PROFILE = "EmailIngestionProfile"; - const FILE_SYNC = "FileSync"; - const KSHOW_KUSER = "KshowKuser"; - const METADATA = "Metadata"; - const METADATA_PROFILE = "MetadataProfile"; - const PARTNER = "Partner"; - const PERMISSION = "Permission"; - const UPLOAD_TOKEN = "UploadToken"; - const USER_LOGIN_DATA = "UserLoginData"; - const USER_ROLE = "UserRole"; - const ACCESS_CONTROL = "accessControl"; - const CATEGORY = "category"; - const CONVERSION_PROFILE_2 = "conversionProfile2"; - const ENTRY = "entry"; - const FLAVOR_ASSET = "flavorAsset"; - const FLAVOR_PARAMS = "flavorParams"; - const FLAVOR_PARAMS_CONVERSION_PROFILE = "flavorParamsConversionProfile"; - const FLAVOR_PARAMS_OUTPUT = "flavorParamsOutput"; - const KSHOW = "kshow"; - const KUSER = "kuser"; - const MEDIA_INFO = "mediaInfo"; - const MODERATION = "moderation"; - const ROUGHCUT = "roughcutEntry"; - const SYNDICATION = "syndicationFeed"; - const THUMBNAIL_ASSET = "thumbAsset"; - const THUMBNAIL_PARAMS = "thumbParams"; - const THUMBNAIL_PARAMS_OUTPUT = "thumbParamsOutput"; - const UI_CONF = "uiConf"; - const WIDGET = "widget"; -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaAuditTrailOrderBy -{ - const CREATED_AT_ASC = "+createdAt"; - const PARSED_AT_ASC = "+parsedAt"; - const CREATED_AT_DESC = "-createdAt"; - const PARSED_AT_DESC = "-parsedAt"; -} - -/** - * @package Kaltura - * @subpackage Client - */ -abstract class KalturaAuditTrailInfo extends KalturaObjectBase -{ - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaAuditTrail extends KalturaObjectBase -{ - /** - * - * - * @var int - * @readonly - */ - public $id = null; - - /** - * - * - * @var int - * @readonly - */ - public $createdAt = null; - - /** - * Indicates when the data was parsed - * - * - * @var int - * @readonly - */ - public $parsedAt = null; - - /** - * - * - * @var KalturaAuditTrailStatus - * @readonly - */ - public $status = null; - - /** - * - * - * @var KalturaAuditTrailObjectType - */ - public $auditObjectType = null; - - /** - * - * - * @var string - */ - public $objectId = null; - - /** - * - * - * @var string - */ - public $relatedObjectId = null; - - /** - * - * - * @var KalturaAuditTrailObjectType - */ - public $relatedObjectType = null; - - /** - * - * - * @var string - */ - public $entryId = null; - - /** - * - * - * @var int - * @readonly - */ - public $masterPartnerId = null; - - /** - * - * - * @var int - * @readonly - */ - public $partnerId = null; - - /** - * - * - * @var string - * @readonly - */ - public $requestId = null; - - /** - * - * - * @var string - */ - public $userId = null; - - /** - * - * - * @var KalturaAuditTrailAction - */ - public $action = null; - - /** - * - * - * @var KalturaAuditTrailInfo - */ - public $data; - - /** - * - * - * @var string - * @readonly - */ - public $ks = null; - - /** - * - * - * @var KalturaAuditTrailContext - * @readonly - */ - public $context = null; - - /** - * The API service and action that called and caused this audit - * - * - * @var string - * @readonly - */ - public $entryPoint = null; - - /** - * - * - * @var string - * @readonly - */ - public $serverName = null; - - /** - * - * - * @var string - * @readonly - */ - public $ipAddress = null; - - /** - * - * - * @var string - * @readonly - */ - public $userAgent = null; - - /** - * - * - * @var string - */ - public $clientTag = null; - - /** - * - * - * @var string - */ - public $description = null; - - /** - * - * - * @var string - * @readonly - */ - public $errorDescription = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaAuditTrailChangeItem extends KalturaObjectBase -{ - /** - * - * - * @var string - */ - public $descriptor = null; - - /** - * - * - * @var string - */ - public $oldValue = null; - - /** - * - * - * @var string - */ - public $newValue = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaAuditTrailListResponse extends KalturaObjectBase -{ - /** - * - * - * @var array of KalturaAuditTrail - * @readonly - */ - public $objects; - - /** - * - * - * @var int - * @readonly - */ - public $totalCount = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -abstract class KalturaAuditTrailBaseFilter extends KalturaFilter -{ - /** - * - * - * @var int - */ - public $idEqual = null; - - /** - * - * - * @var int - */ - public $createdAtGreaterThanOrEqual = null; - - /** - * - * - * @var int - */ - public $createdAtLessThanOrEqual = null; - - /** - * - * - * @var int - */ - public $parsedAtGreaterThanOrEqual = null; - - /** - * - * - * @var int - */ - public $parsedAtLessThanOrEqual = null; - - /** - * - * - * @var KalturaAuditTrailStatus - */ - public $statusEqual = null; - - /** - * - * - * @var string - */ - public $statusIn = null; - - /** - * - * - * @var KalturaAuditTrailObjectType - */ - public $auditObjectTypeEqual = null; - - /** - * - * - * @var string - */ - public $auditObjectTypeIn = null; - - /** - * - * - * @var string - */ - public $objectIdEqual = null; - - /** - * - * - * @var string - */ - public $objectIdIn = null; - - /** - * - * - * @var string - */ - public $relatedObjectIdEqual = null; - - /** - * - * - * @var string - */ - public $relatedObjectIdIn = null; - - /** - * - * - * @var KalturaAuditTrailObjectType - */ - public $relatedObjectTypeEqual = null; - - /** - * - * - * @var string - */ - public $relatedObjectTypeIn = null; - - /** - * - * - * @var string - */ - public $entryIdEqual = null; - - /** - * - * - * @var string - */ - public $entryIdIn = null; - - /** - * - * - * @var int - */ - public $masterPartnerIdEqual = null; - - /** - * - * - * @var string - */ - public $masterPartnerIdIn = null; - - /** - * - * - * @var int - */ - public $partnerIdEqual = null; - - /** - * - * - * @var string - */ - public $partnerIdIn = null; - - /** - * - * - * @var string - */ - public $requestIdEqual = null; - - /** - * - * - * @var string - */ - public $requestIdIn = null; - - /** - * - * - * @var string - */ - public $userIdEqual = null; - - /** - * - * - * @var string - */ - public $userIdIn = null; - - /** - * - * - * @var KalturaAuditTrailAction - */ - public $actionEqual = null; - - /** - * - * - * @var string - */ - public $actionIn = null; - - /** - * - * - * @var string - */ - public $ksEqual = null; - - /** - * - * - * @var KalturaAuditTrailContext - */ - public $contextEqual = null; - - /** - * - * - * @var string - */ - public $contextIn = null; - - /** - * - * - * @var string - */ - public $entryPointEqual = null; - - /** - * - * - * @var string - */ - public $entryPointIn = null; - - /** - * - * - * @var string - */ - public $serverNameEqual = null; - - /** - * - * - * @var string - */ - public $serverNameIn = null; - - /** - * - * - * @var string - */ - public $ipAddressEqual = null; - - /** - * - * - * @var string - */ - public $ipAddressIn = null; - - /** - * - * - * @var string - */ - public $clientTagEqual = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaAuditTrailChangeInfo extends KalturaAuditTrailInfo -{ - /** - * - * - * @var array of KalturaAuditTrailChangeItem - */ - public $changedItems; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaAuditTrailChangeXmlNode extends KalturaAuditTrailChangeItem -{ - /** - * - * - * @var KalturaAuditTrailChangeXmlNodeType - */ - public $type = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaAuditTrailFileSyncCreateInfo extends KalturaAuditTrailInfo -{ - /** - * - * - * @var string - */ - public $version = null; - - /** - * - * - * @var int - */ - public $objectSubType = null; - - /** - * - * - * @var int - */ - public $dc = null; - - /** - * - * - * @var bool - */ - public $original = null; - - /** - * - * - * @var KalturaAuditTrailFileSyncType - */ - public $fileType = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaAuditTrailTextInfo extends KalturaAuditTrailInfo -{ - /** - * - * - * @var string - */ - public $info = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaAuditTrailFilter extends KalturaAuditTrailBaseFilter -{ - -} - - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaAuditTrailService extends KalturaServiceBase -{ - function __construct(KalturaClient $client = null) - { - parent::__construct($client); - } - - /** - * Allows you to add an audit trail object and audit trail content associated with Kaltura object - * - * @param KalturaAuditTrail $auditTrail - * @return KalturaAuditTrail - */ - function add(KalturaAuditTrail $auditTrail) - { - $kparams = array(); - $this->client->addParam($kparams, "auditTrail", $auditTrail->toParams()); - $this->client->queueServiceActionCall("audit_audittrail", "add", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaAuditTrail"); - return $resultObject; - } - - /** - * Retrieve an audit trail object by id - * - * @param int $id - * @return KalturaAuditTrail - */ - function get($id) - { - $kparams = array(); - $this->client->addParam($kparams, "id", $id); - $this->client->queueServiceActionCall("audit_audittrail", "get", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaAuditTrail"); - return $resultObject; - } - - /** - * List audit trail objects by filter and pager - * - * @param KalturaAuditTrailFilter $filter - * @param KalturaFilterPager $pager - * @return KalturaAuditTrailListResponse - */ - function listAction(KalturaAuditTrailFilter $filter = null, KalturaFilterPager $pager = null) - { - $kparams = array(); - if ($filter !== null) - $this->client->addParam($kparams, "filter", $filter->toParams()); - if ($pager !== null) - $this->client->addParam($kparams, "pager", $pager->toParams()); - $this->client->queueServiceActionCall("audit_audittrail", "list", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaAuditTrailListResponse"); - return $resultObject; - } -} -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaAuditClientPlugin extends KalturaClientPlugin -{ - /** - * @var KalturaAuditTrailService - */ - public $auditTrail = null; - - protected function __construct(KalturaClient $client) - { - parent::__construct($client); - $this->auditTrail = new KalturaAuditTrailService($client); - } - - /** - * @return KalturaAuditClientPlugin - */ - public static function get(KalturaClient $client) - { - return new KalturaAuditClientPlugin($client); - } - - /** - * @return array - */ - public function getServices() - { - $services = array( - 'auditTrail' => $this->auditTrail, - ); - return $services; - } - - /** - * @return string - */ - public function getName() - { - return 'audit'; - } -} - diff --git a/local/kaltura/API/KalturaPlugins/KalturaBulkUploadClientPlugin.php b/local/kaltura/API/KalturaPlugins/KalturaBulkUploadClientPlugin.php deleted file mode 100644 index 7d844b642730c..0000000000000 --- a/local/kaltura/API/KalturaPlugins/KalturaBulkUploadClientPlugin.php +++ /dev/null @@ -1,187 +0,0 @@ -. -// -// @ignore -// =================================================================================================== - -/** - * @package Kaltura - * @subpackage Client - */ -require_once(dirname(__FILE__) . "/../KalturaClientBase.php"); -require_once(dirname(__FILE__) . "/../KalturaEnums.php"); -require_once(dirname(__FILE__) . "/../KalturaTypes.php"); - - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaBulkService extends KalturaServiceBase -{ - function __construct(KalturaClient $client = null) - { - parent::__construct($client); - } - - /** - * Get bulk upload batch job by id - * - * @param int $id - * @return KalturaBulkUpload - */ - function get($id) - { - $kparams = array(); - $this->client->addParam($kparams, "id", $id); - $this->client->queueServiceActionCall("bulkupload_bulk", "get", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaBulkUpload"); - return $resultObject; - } - - /** - * List bulk upload batch jobs - * - * @param KalturaBulkUploadFilter $bulkUploadFilter - * @param KalturaFilterPager $pager - * @return KalturaBulkUploadListResponse - */ - function listAction(KalturaBulkUploadFilter $bulkUploadFilter = null, KalturaFilterPager $pager = null) - { - $kparams = array(); - if ($bulkUploadFilter !== null) - $this->client->addParam($kparams, "bulkUploadFilter", $bulkUploadFilter->toParams()); - if ($pager !== null) - $this->client->addParam($kparams, "pager", $pager->toParams()); - $this->client->queueServiceActionCall("bulkupload_bulk", "list", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaBulkUploadListResponse"); - return $resultObject; - } - - /** - * Serve action returns the original file. - * - * @param int $id Job id - * @return file - */ - function serve($id) - { - $kparams = array(); - $this->client->addParam($kparams, "id", $id); - $this->client->queueServiceActionCall("bulkupload_bulk", "serve", $kparams); - if(!$this->client->getDestinationPath() && !$this->client->getReturnServedResult()) - return $this->client->getServeUrl(); - return $this->client->doQueue(); - } - - /** - * ServeLog action returns the log file for the bulk-upload job. - * - * @param int $id Job id - * @return file - */ - function serveLog($id) - { - $kparams = array(); - $this->client->addParam($kparams, "id", $id); - $this->client->queueServiceActionCall("bulkupload_bulk", "serveLog", $kparams); - if(!$this->client->getDestinationPath() && !$this->client->getReturnServedResult()) - return $this->client->getServeUrl(); - return $this->client->doQueue(); - } - - /** - * Aborts the bulk upload and all its child jobs - * - * @param int $id Job id - * @return KalturaBulkUpload - */ - function abort($id) - { - $kparams = array(); - $this->client->addParam($kparams, "id", $id); - $this->client->queueServiceActionCall("bulkupload_bulk", "abort", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaBulkUpload"); - return $resultObject; - } -} -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaBulkUploadClientPlugin extends KalturaClientPlugin -{ - /** - * @var KalturaBulkService - */ - public $bulk = null; - - protected function __construct(KalturaClient $client) - { - parent::__construct($client); - $this->bulk = new KalturaBulkService($client); - } - - /** - * @return KalturaBulkUploadClientPlugin - */ - public static function get(KalturaClient $client) - { - return new KalturaBulkUploadClientPlugin($client); - } - - /** - * @return array - */ - public function getServices() - { - $services = array( - 'bulk' => $this->bulk, - ); - return $services; - } - - /** - * @return string - */ - public function getName() - { - return 'bulkUpload'; - } -} - diff --git a/local/kaltura/API/KalturaPlugins/KalturaBulkUploadCsvClientPlugin.php b/local/kaltura/API/KalturaPlugins/KalturaBulkUploadCsvClientPlugin.php deleted file mode 100644 index 9f58ceae18d3f..0000000000000 --- a/local/kaltura/API/KalturaPlugins/KalturaBulkUploadCsvClientPlugin.php +++ /dev/null @@ -1,113 +0,0 @@ -. -// -// @ignore -// =================================================================================================== - -/** - * @package Kaltura - * @subpackage Client - */ -require_once(dirname(__FILE__) . "/../KalturaClientBase.php"); -require_once(dirname(__FILE__) . "/../KalturaEnums.php"); -require_once(dirname(__FILE__) . "/../KalturaTypes.php"); -require_once(dirname(__FILE__) . "/KalturaBulkUploadClientPlugin.php"); - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaBulkUploadCsvVersion -{ - const V1 = 1; - const V2 = 2; - const V3 = 3; -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaBulkUploadCsvJobData extends KalturaBulkUploadJobData -{ - /** - * The version of the csv file - * - * - * @var KalturaBulkUploadCsvVersion - * @readonly - */ - public $csvVersion = null; - - /** - * Array containing CSV headers - * - * - * @var array of KalturaString - */ - public $columns; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaBulkUploadCsvClientPlugin extends KalturaClientPlugin -{ - protected function __construct(KalturaClient $client) - { - parent::__construct($client); - } - - /** - * @return KalturaBulkUploadCsvClientPlugin - */ - public static function get(KalturaClient $client) - { - return new KalturaBulkUploadCsvClientPlugin($client); - } - - /** - * @return array - */ - public function getServices() - { - $services = array( - ); - return $services; - } - - /** - * @return string - */ - public function getName() - { - return 'bulkUploadCsv'; - } -} - diff --git a/local/kaltura/API/KalturaPlugins/KalturaBulkUploadFilterClientPlugin.php b/local/kaltura/API/KalturaPlugins/KalturaBulkUploadFilterClientPlugin.php deleted file mode 100644 index b77ca422630a2..0000000000000 --- a/local/kaltura/API/KalturaPlugins/KalturaBulkUploadFilterClientPlugin.php +++ /dev/null @@ -1,101 +0,0 @@ -. -// -// @ignore -// =================================================================================================== - -/** - * @package Kaltura - * @subpackage Client - */ -require_once(dirname(__FILE__) . "/../KalturaClientBase.php"); -require_once(dirname(__FILE__) . "/../KalturaEnums.php"); -require_once(dirname(__FILE__) . "/../KalturaTypes.php"); -require_once(dirname(__FILE__) . "/KalturaBulkUploadClientPlugin.php"); - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaBulkUploadFilterJobData extends KalturaBulkUploadJobData -{ - /** - * Filter for extracting the objects list to upload - * - * - * @var KalturaFilter - */ - public $filter; - - /** - * Template object for new object creation - * - * - * @var KalturaObjectBase - */ - public $templateObject; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaBulkUploadFilterClientPlugin extends KalturaClientPlugin -{ - protected function __construct(KalturaClient $client) - { - parent::__construct($client); - } - - /** - * @return KalturaBulkUploadFilterClientPlugin - */ - public static function get(KalturaClient $client) - { - return new KalturaBulkUploadFilterClientPlugin($client); - } - - /** - * @return array - */ - public function getServices() - { - $services = array( - ); - return $services; - } - - /** - * @return string - */ - public function getName() - { - return 'bulkUploadFilter'; - } -} - diff --git a/local/kaltura/API/KalturaPlugins/KalturaBulkUploadXmlClientPlugin.php b/local/kaltura/API/KalturaPlugins/KalturaBulkUploadXmlClientPlugin.php deleted file mode 100644 index 1fc677c98f93b..0000000000000 --- a/local/kaltura/API/KalturaPlugins/KalturaBulkUploadXmlClientPlugin.php +++ /dev/null @@ -1,85 +0,0 @@ -. -// -// @ignore -// =================================================================================================== - -/** - * @package Kaltura - * @subpackage Client - */ -require_once(dirname(__FILE__) . "/../KalturaClientBase.php"); -require_once(dirname(__FILE__) . "/../KalturaEnums.php"); -require_once(dirname(__FILE__) . "/../KalturaTypes.php"); -require_once(dirname(__FILE__) . "/KalturaBulkUploadClientPlugin.php"); - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaBulkUploadXmlJobData extends KalturaBulkUploadJobData -{ - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaBulkUploadXmlClientPlugin extends KalturaClientPlugin -{ - protected function __construct(KalturaClient $client) - { - parent::__construct($client); - } - - /** - * @return KalturaBulkUploadXmlClientPlugin - */ - public static function get(KalturaClient $client) - { - return new KalturaBulkUploadXmlClientPlugin($client); - } - - /** - * @return array - */ - public function getServices() - { - $services = array( - ); - return $services; - } - - /** - * @return string - */ - public function getName() - { - return 'bulkUploadXml'; - } -} - diff --git a/local/kaltura/API/KalturaPlugins/KalturaCaptionClientPlugin.php b/local/kaltura/API/KalturaPlugins/KalturaCaptionClientPlugin.php deleted file mode 100644 index 1217d2414b12e..0000000000000 --- a/local/kaltura/API/KalturaPlugins/KalturaCaptionClientPlugin.php +++ /dev/null @@ -1,771 +0,0 @@ -. -// -// @ignore -// =================================================================================================== - -/** - * @package Kaltura - * @subpackage Client - */ -require_once(dirname(__FILE__) . "/../KalturaClientBase.php"); -require_once(dirname(__FILE__) . "/../KalturaEnums.php"); -require_once(dirname(__FILE__) . "/../KalturaTypes.php"); - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaCaptionAssetStatus -{ - const ERROR = -1; - const QUEUED = 0; - const READY = 2; - const DELETED = 3; - const IMPORTING = 7; - const EXPORTING = 9; -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaCaptionAssetOrderBy -{ - const CREATED_AT_ASC = "+createdAt"; - const DELETED_AT_ASC = "+deletedAt"; - const SIZE_ASC = "+size"; - const UPDATED_AT_ASC = "+updatedAt"; - const CREATED_AT_DESC = "-createdAt"; - const DELETED_AT_DESC = "-deletedAt"; - const SIZE_DESC = "-size"; - const UPDATED_AT_DESC = "-updatedAt"; -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaCaptionParamsOrderBy -{ -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaCaptionType -{ - const SRT = "1"; - const DFXP = "2"; - const WEBVTT = "3"; -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaCaptionAsset extends KalturaAsset -{ - /** - * The Caption Params used to create this Caption Asset - * - * - * @var int - * @insertonly - */ - public $captionParamsId = null; - - /** - * The language of the caption asset content - * - * - * @var KalturaLanguage - */ - public $language = null; - - /** - * The language of the caption asset content - * - * - * @var KalturaLanguageCode - * @readonly - */ - public $languageCode = null; - - /** - * Is default caption asset of the entry - * - * - * @var KalturaNullableBoolean - */ - public $isDefault = null; - - /** - * Friendly label - * - * - * @var string - */ - public $label = null; - - /** - * The caption format - * - * - * @var KalturaCaptionType - * @insertonly - */ - public $format = null; - - /** - * The status of the asset - * - * - * @var KalturaCaptionAssetStatus - * @readonly - */ - public $status = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaCaptionAssetListResponse extends KalturaObjectBase -{ - /** - * - * - * @var array of KalturaCaptionAsset - * @readonly - */ - public $objects; - - /** - * - * - * @var int - * @readonly - */ - public $totalCount = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaCaptionParams extends KalturaAssetParams -{ - /** - * The language of the caption content - * - * - * @var KalturaLanguage - * @insertonly - */ - public $language = null; - - /** - * Is default caption asset of the entry - * - * - * @var KalturaNullableBoolean - */ - public $isDefault = null; - - /** - * Friendly label - * - * - * @var string - */ - public $label = null; - - /** - * The caption format - * - * - * @var KalturaCaptionType - * @insertonly - */ - public $format = null; - - /** - * Id of the caption params or the flavor params to be used as source for the caption creation - * - * - * @var int - */ - public $sourceParamsId = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaCaptionParamsListResponse extends KalturaObjectBase -{ - /** - * - * - * @var array of KalturaCaptionParams - * @readonly - */ - public $objects; - - /** - * - * - * @var int - * @readonly - */ - public $totalCount = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -abstract class KalturaCaptionAssetBaseFilter extends KalturaAssetFilter -{ - /** - * - * - * @var int - */ - public $captionParamsIdEqual = null; - - /** - * - * - * @var string - */ - public $captionParamsIdIn = null; - - /** - * - * - * @var KalturaCaptionType - */ - public $formatEqual = null; - - /** - * - * - * @var string - */ - public $formatIn = null; - - /** - * - * - * @var KalturaCaptionAssetStatus - */ - public $statusEqual = null; - - /** - * - * - * @var string - */ - public $statusIn = null; - - /** - * - * - * @var string - */ - public $statusNotIn = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -abstract class KalturaCaptionParamsBaseFilter extends KalturaAssetParamsFilter -{ - /** - * - * - * @var KalturaCaptionType - */ - public $formatEqual = null; - - /** - * - * - * @var string - */ - public $formatIn = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaCaptionAssetFilter extends KalturaCaptionAssetBaseFilter -{ - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaCaptionParamsFilter extends KalturaCaptionParamsBaseFilter -{ - -} - - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaCaptionAssetService extends KalturaServiceBase -{ - function __construct(KalturaClient $client = null) - { - parent::__construct($client); - } - - /** - * Add caption asset - * - * @param string $entryId - * @param KalturaCaptionAsset $captionAsset - * @return KalturaCaptionAsset - */ - function add($entryId, KalturaCaptionAsset $captionAsset) - { - $kparams = array(); - $this->client->addParam($kparams, "entryId", $entryId); - $this->client->addParam($kparams, "captionAsset", $captionAsset->toParams()); - $this->client->queueServiceActionCall("caption_captionasset", "add", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaCaptionAsset"); - return $resultObject; - } - - /** - * Update content of caption asset - * - * @param string $id - * @param KalturaContentResource $contentResource - * @return KalturaCaptionAsset - */ - function setContent($id, KalturaContentResource $contentResource) - { - $kparams = array(); - $this->client->addParam($kparams, "id", $id); - $this->client->addParam($kparams, "contentResource", $contentResource->toParams()); - $this->client->queueServiceActionCall("caption_captionasset", "setContent", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaCaptionAsset"); - return $resultObject; - } - - /** - * Update caption asset - * - * @param string $id - * @param KalturaCaptionAsset $captionAsset - * @return KalturaCaptionAsset - */ - function update($id, KalturaCaptionAsset $captionAsset) - { - $kparams = array(); - $this->client->addParam($kparams, "id", $id); - $this->client->addParam($kparams, "captionAsset", $captionAsset->toParams()); - $this->client->queueServiceActionCall("caption_captionasset", "update", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaCaptionAsset"); - return $resultObject; - } - - /** - * Serves caption by entry id and thumnail params id - * - * @param string $entryId - * @param int $captionParamId If not set, default caption will be used. - * @return file - */ - function serveByEntryId($entryId, $captionParamId = null) - { - $kparams = array(); - $this->client->addParam($kparams, "entryId", $entryId); - $this->client->addParam($kparams, "captionParamId", $captionParamId); - $this->client->queueServiceActionCall("caption_captionasset", "serveByEntryId", $kparams); - if(!$this->client->getDestinationPath() && !$this->client->getReturnServedResult()) - return $this->client->getServeUrl(); - return $this->client->doQueue(); - } - - /** - * Get download URL for the asset - * - * @param string $id - * @param int $storageId - * @return string - */ - function getUrl($id, $storageId = null) - { - $kparams = array(); - $this->client->addParam($kparams, "id", $id); - $this->client->addParam($kparams, "storageId", $storageId); - $this->client->queueServiceActionCall("caption_captionasset", "getUrl", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "string"); - return $resultObject; - } - - /** - * Get remote storage existing paths for the asset - * - * @param string $id - * @return KalturaRemotePathListResponse - */ - function getRemotePaths($id) - { - $kparams = array(); - $this->client->addParam($kparams, "id", $id); - $this->client->queueServiceActionCall("caption_captionasset", "getRemotePaths", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaRemotePathListResponse"); - return $resultObject; - } - - /** - * Serves caption by its id - * - * @param string $captionAssetId - * @return file - */ - function serve($captionAssetId) - { - $kparams = array(); - $this->client->addParam($kparams, "captionAssetId", $captionAssetId); - $this->client->queueServiceActionCall("caption_captionasset", "serve", $kparams); - if(!$this->client->getDestinationPath() && !$this->client->getReturnServedResult()) - return $this->client->getServeUrl(); - return $this->client->doQueue(); - } - - /** - * Serves caption by its id converting it to segmented WebVTT - * - * @param string $captionAssetId - * @param int $segmentDuration - * @param int $segmentIndex - * @param int $localTimestamp - * @return file - */ - function serveWebVTT($captionAssetId, $segmentDuration = 30, $segmentIndex = null, $localTimestamp = 10000) - { - $kparams = array(); - $this->client->addParam($kparams, "captionAssetId", $captionAssetId); - $this->client->addParam($kparams, "segmentDuration", $segmentDuration); - $this->client->addParam($kparams, "segmentIndex", $segmentIndex); - $this->client->addParam($kparams, "localTimestamp", $localTimestamp); - $this->client->queueServiceActionCall("caption_captionasset", "serveWebVTT", $kparams); - if(!$this->client->getDestinationPath() && !$this->client->getReturnServedResult()) - return $this->client->getServeUrl(); - return $this->client->doQueue(); - } - - /** - * Markss the caption as default and removes that mark from all other caption assets of the entry. - * - * @param string $captionAssetId - * @return - */ - function setAsDefault($captionAssetId) - { - $kparams = array(); - $this->client->addParam($kparams, "captionAssetId", $captionAssetId); - $this->client->queueServiceActionCall("caption_captionasset", "setAsDefault", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "null"); - return $resultObject; - } - - /** - * - * - * @param string $captionAssetId - * @return KalturaCaptionAsset - */ - function get($captionAssetId) - { - $kparams = array(); - $this->client->addParam($kparams, "captionAssetId", $captionAssetId); - $this->client->queueServiceActionCall("caption_captionasset", "get", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaCaptionAsset"); - return $resultObject; - } - - /** - * List caption Assets by filter and pager - * - * @param KalturaAssetFilter $filter - * @param KalturaFilterPager $pager - * @return KalturaCaptionAssetListResponse - */ - function listAction(KalturaAssetFilter $filter = null, KalturaFilterPager $pager = null) - { - $kparams = array(); - if ($filter !== null) - $this->client->addParam($kparams, "filter", $filter->toParams()); - if ($pager !== null) - $this->client->addParam($kparams, "pager", $pager->toParams()); - $this->client->queueServiceActionCall("caption_captionasset", "list", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaCaptionAssetListResponse"); - return $resultObject; - } - - /** - * - * - * @param string $captionAssetId - * @return - */ - function delete($captionAssetId) - { - $kparams = array(); - $this->client->addParam($kparams, "captionAssetId", $captionAssetId); - $this->client->queueServiceActionCall("caption_captionasset", "delete", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "null"); - return $resultObject; - } -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaCaptionParamsService extends KalturaServiceBase -{ - function __construct(KalturaClient $client = null) - { - parent::__construct($client); - } - - /** - * Add new Caption Params - * - * @param KalturaCaptionParams $captionParams - * @return KalturaCaptionParams - */ - function add(KalturaCaptionParams $captionParams) - { - $kparams = array(); - $this->client->addParam($kparams, "captionParams", $captionParams->toParams()); - $this->client->queueServiceActionCall("caption_captionparams", "add", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaCaptionParams"); - return $resultObject; - } - - /** - * Get Caption Params by ID - * - * @param int $id - * @return KalturaCaptionParams - */ - function get($id) - { - $kparams = array(); - $this->client->addParam($kparams, "id", $id); - $this->client->queueServiceActionCall("caption_captionparams", "get", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaCaptionParams"); - return $resultObject; - } - - /** - * Update Caption Params by ID - * - * @param int $id - * @param KalturaCaptionParams $captionParams - * @return KalturaCaptionParams - */ - function update($id, KalturaCaptionParams $captionParams) - { - $kparams = array(); - $this->client->addParam($kparams, "id", $id); - $this->client->addParam($kparams, "captionParams", $captionParams->toParams()); - $this->client->queueServiceActionCall("caption_captionparams", "update", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaCaptionParams"); - return $resultObject; - } - - /** - * Delete Caption Params by ID - * - * @param int $id - * @return - */ - function delete($id) - { - $kparams = array(); - $this->client->addParam($kparams, "id", $id); - $this->client->queueServiceActionCall("caption_captionparams", "delete", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "null"); - return $resultObject; - } - - /** - * List Caption Params by filter with paging support (By default - all system default params will be listed too) - * - * @param KalturaCaptionParamsFilter $filter - * @param KalturaFilterPager $pager - * @return KalturaCaptionParamsListResponse - */ - function listAction(KalturaCaptionParamsFilter $filter = null, KalturaFilterPager $pager = null) - { - $kparams = array(); - if ($filter !== null) - $this->client->addParam($kparams, "filter", $filter->toParams()); - if ($pager !== null) - $this->client->addParam($kparams, "pager", $pager->toParams()); - $this->client->queueServiceActionCall("caption_captionparams", "list", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaCaptionParamsListResponse"); - return $resultObject; - } -} -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaCaptionClientPlugin extends KalturaClientPlugin -{ - /** - * @var KalturaCaptionAssetService - */ - public $captionAsset = null; - - /** - * @var KalturaCaptionParamsService - */ - public $captionParams = null; - - protected function __construct(KalturaClient $client) - { - parent::__construct($client); - $this->captionAsset = new KalturaCaptionAssetService($client); - $this->captionParams = new KalturaCaptionParamsService($client); - } - - /** - * @return KalturaCaptionClientPlugin - */ - public static function get(KalturaClient $client) - { - return new KalturaCaptionClientPlugin($client); - } - - /** - * @return array - */ - public function getServices() - { - $services = array( - 'captionAsset' => $this->captionAsset, - 'captionParams' => $this->captionParams, - ); - return $services; - } - - /** - * @return string - */ - public function getName() - { - return 'caption'; - } -} - diff --git a/local/kaltura/API/KalturaPlugins/KalturaCaptionSearchClientPlugin.php b/local/kaltura/API/KalturaPlugins/KalturaCaptionSearchClientPlugin.php deleted file mode 100644 index 0962e15fdab99..0000000000000 --- a/local/kaltura/API/KalturaPlugins/KalturaCaptionSearchClientPlugin.php +++ /dev/null @@ -1,325 +0,0 @@ -. -// -// @ignore -// =================================================================================================== - -/** - * @package Kaltura - * @subpackage Client - */ -require_once(dirname(__FILE__) . "/../KalturaClientBase.php"); -require_once(dirname(__FILE__) . "/../KalturaEnums.php"); -require_once(dirname(__FILE__) . "/../KalturaTypes.php"); -require_once(dirname(__FILE__) . "/KalturaCaptionClientPlugin.php"); - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaCaptionAssetItem extends KalturaObjectBase -{ - /** - * The Caption Asset object - * - * - * @var KalturaCaptionAsset - */ - public $asset; - - /** - * The entry object - * - * - * @var KalturaBaseEntry - */ - public $entry; - - /** - * - * - * @var int - */ - public $startTime = null; - - /** - * - * - * @var int - */ - public $endTime = null; - - /** - * - * - * @var string - */ - public $content = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaCaptionAssetItemListResponse extends KalturaObjectBase -{ - /** - * - * - * @var array of KalturaCaptionAssetItem - * @readonly - */ - public $objects; - - /** - * - * - * @var int - * @readonly - */ - public $totalCount = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaCaptionAssetItemFilter extends KalturaCaptionAssetFilter -{ - /** - * - * - * @var string - */ - public $contentLike = null; - - /** - * - * - * @var string - */ - public $contentMultiLikeOr = null; - - /** - * - * - * @var string - */ - public $contentMultiLikeAnd = null; - - /** - * - * - * @var string - */ - public $partnerDescriptionLike = null; - - /** - * - * - * @var string - */ - public $partnerDescriptionMultiLikeOr = null; - - /** - * - * - * @var string - */ - public $partnerDescriptionMultiLikeAnd = null; - - /** - * - * - * @var KalturaLanguage - */ - public $languageEqual = null; - - /** - * - * - * @var string - */ - public $languageIn = null; - - /** - * - * - * @var string - */ - public $labelEqual = null; - - /** - * - * - * @var string - */ - public $labelIn = null; - - /** - * - * - * @var int - */ - public $startTimeGreaterThanOrEqual = null; - - /** - * - * - * @var int - */ - public $startTimeLessThanOrEqual = null; - - /** - * - * - * @var int - */ - public $endTimeGreaterThanOrEqual = null; - - /** - * - * - * @var int - */ - public $endTimeLessThanOrEqual = null; - - -} - - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaCaptionAssetItemService extends KalturaServiceBase -{ - function __construct(KalturaClient $client = null) - { - parent::__construct($client); - } - - /** - * Search caption asset items by filter, pager and free text - * - * @param KalturaBaseEntryFilter $entryFilter - * @param KalturaCaptionAssetItemFilter $captionAssetItemFilter - * @param KalturaFilterPager $captionAssetItemPager - * @return KalturaCaptionAssetItemListResponse - */ - function search(KalturaBaseEntryFilter $entryFilter = null, KalturaCaptionAssetItemFilter $captionAssetItemFilter = null, KalturaFilterPager $captionAssetItemPager = null) - { - $kparams = array(); - if ($entryFilter !== null) - $this->client->addParam($kparams, "entryFilter", $entryFilter->toParams()); - if ($captionAssetItemFilter !== null) - $this->client->addParam($kparams, "captionAssetItemFilter", $captionAssetItemFilter->toParams()); - if ($captionAssetItemPager !== null) - $this->client->addParam($kparams, "captionAssetItemPager", $captionAssetItemPager->toParams()); - $this->client->queueServiceActionCall("captionsearch_captionassetitem", "search", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaCaptionAssetItemListResponse"); - return $resultObject; - } - - /** - * Search caption asset items by filter, pager and free text - * - * @param KalturaBaseEntryFilter $entryFilter - * @param KalturaCaptionAssetItemFilter $captionAssetItemFilter - * @param KalturaFilterPager $captionAssetItemPager - * @return KalturaBaseEntryListResponse - */ - function searchEntries(KalturaBaseEntryFilter $entryFilter = null, KalturaCaptionAssetItemFilter $captionAssetItemFilter = null, KalturaFilterPager $captionAssetItemPager = null) - { - $kparams = array(); - if ($entryFilter !== null) - $this->client->addParam($kparams, "entryFilter", $entryFilter->toParams()); - if ($captionAssetItemFilter !== null) - $this->client->addParam($kparams, "captionAssetItemFilter", $captionAssetItemFilter->toParams()); - if ($captionAssetItemPager !== null) - $this->client->addParam($kparams, "captionAssetItemPager", $captionAssetItemPager->toParams()); - $this->client->queueServiceActionCall("captionsearch_captionassetitem", "searchEntries", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaBaseEntryListResponse"); - return $resultObject; - } -} -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaCaptionSearchClientPlugin extends KalturaClientPlugin -{ - /** - * @var KalturaCaptionAssetItemService - */ - public $captionAssetItem = null; - - protected function __construct(KalturaClient $client) - { - parent::__construct($client); - $this->captionAssetItem = new KalturaCaptionAssetItemService($client); - } - - /** - * @return KalturaCaptionSearchClientPlugin - */ - public static function get(KalturaClient $client) - { - return new KalturaCaptionSearchClientPlugin($client); - } - - /** - * @return array - */ - public function getServices() - { - $services = array( - 'captionAssetItem' => $this->captionAssetItem, - ); - return $services; - } - - /** - * @return string - */ - public function getName() - { - return 'captionSearch'; - } -} - diff --git a/local/kaltura/API/KalturaPlugins/KalturaCodeCuePointClientPlugin.php b/local/kaltura/API/KalturaPlugins/KalturaCodeCuePointClientPlugin.php deleted file mode 100644 index b598d86d7866a..0000000000000 --- a/local/kaltura/API/KalturaPlugins/KalturaCodeCuePointClientPlugin.php +++ /dev/null @@ -1,237 +0,0 @@ -. -// -// @ignore -// =================================================================================================== - -/** - * @package Kaltura - * @subpackage Client - */ -require_once(dirname(__FILE__) . "/../KalturaClientBase.php"); -require_once(dirname(__FILE__) . "/../KalturaEnums.php"); -require_once(dirname(__FILE__) . "/../KalturaTypes.php"); -require_once(dirname(__FILE__) . "/KalturaCuePointClientPlugin.php"); - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaCodeCuePointOrderBy -{ - const CREATED_AT_ASC = "+createdAt"; - const DURATION_ASC = "+duration"; - const END_TIME_ASC = "+endTime"; - const PARTNER_SORT_VALUE_ASC = "+partnerSortValue"; - const START_TIME_ASC = "+startTime"; - const UPDATED_AT_ASC = "+updatedAt"; - const CREATED_AT_DESC = "-createdAt"; - const DURATION_DESC = "-duration"; - const END_TIME_DESC = "-endTime"; - const PARTNER_SORT_VALUE_DESC = "-partnerSortValue"; - const START_TIME_DESC = "-startTime"; - const UPDATED_AT_DESC = "-updatedAt"; -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaCodeCuePoint extends KalturaCuePoint -{ - /** - * - * - * @var string - */ - public $code = null; - - /** - * - * - * @var string - */ - public $description = null; - - /** - * - * - * @var int - */ - public $endTime = null; - - /** - * Duration in milliseconds - * - * - * @var int - * @readonly - */ - public $duration = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -abstract class KalturaCodeCuePointBaseFilter extends KalturaCuePointFilter -{ - /** - * - * - * @var string - */ - public $codeLike = null; - - /** - * - * - * @var string - */ - public $codeMultiLikeOr = null; - - /** - * - * - * @var string - */ - public $codeMultiLikeAnd = null; - - /** - * - * - * @var string - */ - public $codeEqual = null; - - /** - * - * - * @var string - */ - public $codeIn = null; - - /** - * - * - * @var string - */ - public $descriptionLike = null; - - /** - * - * - * @var string - */ - public $descriptionMultiLikeOr = null; - - /** - * - * - * @var string - */ - public $descriptionMultiLikeAnd = null; - - /** - * - * - * @var int - */ - public $endTimeGreaterThanOrEqual = null; - - /** - * - * - * @var int - */ - public $endTimeLessThanOrEqual = null; - - /** - * - * - * @var int - */ - public $durationGreaterThanOrEqual = null; - - /** - * - * - * @var int - */ - public $durationLessThanOrEqual = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaCodeCuePointFilter extends KalturaCodeCuePointBaseFilter -{ - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaCodeCuePointClientPlugin extends KalturaClientPlugin -{ - protected function __construct(KalturaClient $client) - { - parent::__construct($client); - } - - /** - * @return KalturaCodeCuePointClientPlugin - */ - public static function get(KalturaClient $client) - { - return new KalturaCodeCuePointClientPlugin($client); - } - - /** - * @return array - */ - public function getServices() - { - $services = array( - ); - return $services; - } - - /** - * @return string - */ - public function getName() - { - return 'codeCuePoint'; - } -} - diff --git a/local/kaltura/API/KalturaPlugins/KalturaContentDistributionClientPlugin.php b/local/kaltura/API/KalturaPlugins/KalturaContentDistributionClientPlugin.php deleted file mode 100644 index 16c38cffc2447..0000000000000 --- a/local/kaltura/API/KalturaPlugins/KalturaContentDistributionClientPlugin.php +++ /dev/null @@ -1,3454 +0,0 @@ -. -// -// @ignore -// =================================================================================================== - -/** - * @package Kaltura - * @subpackage Client - */ -require_once(dirname(__FILE__) . "/../KalturaClientBase.php"); -require_once(dirname(__FILE__) . "/../KalturaEnums.php"); -require_once(dirname(__FILE__) . "/../KalturaTypes.php"); -require_once(dirname(__FILE__) . "/KalturaMetadataClientPlugin.php"); - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaDistributionAction -{ - const SUBMIT = 1; - const UPDATE = 2; - const DELETE = 3; - const FETCH_REPORT = 4; -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaDistributionErrorType -{ - const MISSING_FLAVOR = 1; - const MISSING_THUMBNAIL = 2; - const MISSING_METADATA = 3; - const INVALID_DATA = 4; - const MISSING_ASSET = 5; -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaDistributionFieldRequiredStatus -{ - const NOT_REQUIRED = 0; - const REQUIRED_BY_PROVIDER = 1; - const REQUIRED_BY_PARTNER = 2; -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaDistributionProfileActionStatus -{ - const DISABLED = 1; - const AUTOMATIC = 2; - const MANUAL = 3; -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaDistributionProfileStatus -{ - const DISABLED = 1; - const ENABLED = 2; - const DELETED = 3; -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaDistributionProtocol -{ - const FTP = 1; - const SCP = 2; - const SFTP = 3; - const HTTP = 4; - const HTTPS = 5; - const ASPERA = 10; -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaDistributionValidationErrorType -{ - const CUSTOM_ERROR = 0; - const STRING_EMPTY = 1; - const STRING_TOO_LONG = 2; - const STRING_TOO_SHORT = 3; - const INVALID_FORMAT = 4; -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaEntryDistributionFlag -{ - const NONE = 0; - const SUBMIT_REQUIRED = 1; - const DELETE_REQUIRED = 2; - const UPDATE_REQUIRED = 3; - const ENABLE_REQUIRED = 4; - const DISABLE_REQUIRED = 5; -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaEntryDistributionStatus -{ - const PENDING = 0; - const QUEUED = 1; - const READY = 2; - const DELETED = 3; - const SUBMITTING = 4; - const UPDATING = 5; - const DELETING = 6; - const ERROR_SUBMITTING = 7; - const ERROR_UPDATING = 8; - const ERROR_DELETING = 9; - const REMOVED = 10; - const IMPORT_SUBMITTING = 11; - const IMPORT_UPDATING = 12; -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaEntryDistributionSunStatus -{ - const BEFORE_SUNRISE = 1; - const AFTER_SUNRISE = 2; - const AFTER_SUNSET = 3; -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaGenericDistributionProviderParser -{ - const XSL = 1; - const XPATH = 2; - const REGEX = 3; -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaGenericDistributionProviderStatus -{ - const ACTIVE = 2; - const DELETED = 3; -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaConfigurableDistributionProfileOrderBy -{ - const CREATED_AT_ASC = "+createdAt"; - const UPDATED_AT_ASC = "+updatedAt"; - const CREATED_AT_DESC = "-createdAt"; - const UPDATED_AT_DESC = "-updatedAt"; -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaDistributionProfileOrderBy -{ - const CREATED_AT_ASC = "+createdAt"; - const UPDATED_AT_ASC = "+updatedAt"; - const CREATED_AT_DESC = "-createdAt"; - const UPDATED_AT_DESC = "-updatedAt"; -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaDistributionProviderOrderBy -{ -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaDistributionProviderType -{ - const ATT_UVERSE = "attUverseDistribution.ATT_UVERSE"; - const AVN = "avnDistribution.AVN"; - const COMCAST_MRSS = "comcastMrssDistribution.COMCAST_MRSS"; - const CROSS_KALTURA = "crossKalturaDistribution.CROSS_KALTURA"; - const DAILYMOTION = "dailymotionDistribution.DAILYMOTION"; - const DOUBLECLICK = "doubleClickDistribution.DOUBLECLICK"; - const FREEWHEEL = "freewheelDistribution.FREEWHEEL"; - const FREEWHEEL_GENERIC = "freewheelGenericDistribution.FREEWHEEL_GENERIC"; - const FTP = "ftpDistribution.FTP"; - const FTP_SCHEDULED = "ftpDistribution.FTP_SCHEDULED"; - const HULU = "huluDistribution.HULU"; - const IDETIC = "ideticDistribution.IDETIC"; - const METRO_PCS = "metroPcsDistribution.METRO_PCS"; - const MSN = "msnDistribution.MSN"; - const NDN = "ndnDistribution.NDN"; - const PODCAST = "podcastDistribution.PODCAST"; - const QUICKPLAY = "quickPlayDistribution.QUICKPLAY"; - const SYNACOR_HBO = "synacorHboDistribution.SYNACOR_HBO"; - const TIME_WARNER = "timeWarnerDistribution.TIME_WARNER"; - const TVCOM = "tvComDistribution.TVCOM"; - const UVERSE_CLICK_TO_ORDER = "uverseClickToOrderDistribution.UVERSE_CLICK_TO_ORDER"; - const UVERSE = "uverseDistribution.UVERSE"; - const VERIZON_VCAST = "verizonVcastDistribution.VERIZON_VCAST"; - const YAHOO = "yahooDistribution.YAHOO"; - const YOUTUBE = "youTubeDistribution.YOUTUBE"; - const YOUTUBE_API = "youtubeApiDistribution.YOUTUBE_API"; - const GENERIC = "1"; - const SYNDICATION = "2"; -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaEntryDistributionOrderBy -{ - const CREATED_AT_ASC = "+createdAt"; - const SUBMITTED_AT_ASC = "+submittedAt"; - const SUNRISE_ASC = "+sunrise"; - const SUNSET_ASC = "+sunset"; - const UPDATED_AT_ASC = "+updatedAt"; - const CREATED_AT_DESC = "-createdAt"; - const SUBMITTED_AT_DESC = "-submittedAt"; - const SUNRISE_DESC = "-sunrise"; - const SUNSET_DESC = "-sunset"; - const UPDATED_AT_DESC = "-updatedAt"; -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaGenericDistributionProfileOrderBy -{ - const CREATED_AT_ASC = "+createdAt"; - const UPDATED_AT_ASC = "+updatedAt"; - const CREATED_AT_DESC = "-createdAt"; - const UPDATED_AT_DESC = "-updatedAt"; -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaGenericDistributionProviderActionOrderBy -{ - const CREATED_AT_ASC = "+createdAt"; - const UPDATED_AT_ASC = "+updatedAt"; - const CREATED_AT_DESC = "-createdAt"; - const UPDATED_AT_DESC = "-updatedAt"; -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaGenericDistributionProviderOrderBy -{ - const CREATED_AT_ASC = "+createdAt"; - const UPDATED_AT_ASC = "+updatedAt"; - const CREATED_AT_DESC = "-createdAt"; - const UPDATED_AT_DESC = "-updatedAt"; -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaSyndicationDistributionProfileOrderBy -{ - const CREATED_AT_ASC = "+createdAt"; - const UPDATED_AT_ASC = "+updatedAt"; - const CREATED_AT_DESC = "-createdAt"; - const UPDATED_AT_DESC = "-updatedAt"; -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaSyndicationDistributionProviderOrderBy -{ -} - -/** - * @package Kaltura - * @subpackage Client - */ -abstract class KalturaAssetDistributionCondition extends KalturaObjectBase -{ - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaAssetDistributionRule extends KalturaObjectBase -{ - /** - * The validation error description that will be set on the "data" property on KalturaDistributionValidationErrorMissingAsset if rule was not fulfilled - * - * - * @var string - */ - public $validationError = null; - - /** - * An array of asset distribution conditions - * - * - * @var array of KalturaAssetDistributionCondition - */ - public $assetDistributionConditions; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaDistributionFieldConfig extends KalturaObjectBase -{ - /** - * A value taken from a connector field enum which associates the current configuration to that connector field - * Field enum class should be returned by the provider's getFieldEnumClass function. - * - * - * @var string - */ - public $fieldName = null; - - /** - * A string that will be shown to the user as the field name in error messages related to the current field - * - * - * @var string - */ - public $userFriendlyFieldName = null; - - /** - * An XSLT string that extracts the right value from the Kaltura entry MRSS XML. - * The value of the current connector field will be the one that is returned from transforming the Kaltura entry MRSS XML using this XSLT string. - * - * - * @var string - */ - public $entryMrssXslt = null; - - /** - * Is the field required to have a value for submission ? - * - * - * @var KalturaDistributionFieldRequiredStatus - */ - public $isRequired = null; - - /** - * Trigger distribution update when this field changes or not ? - * - * - * @var bool - */ - public $updateOnChange = null; - - /** - * Entry column or metadata xpath that should trigger an update - * - * - * @var array of KalturaString - */ - public $updateParams; - - /** - * Is this field config is the default for the distribution provider? - * - * - * @var bool - * @readonly - */ - public $isDefault = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -abstract class KalturaDistributionJobProviderData extends KalturaObjectBase -{ - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaDistributionThumbDimensions extends KalturaObjectBase -{ - /** - * - * - * @var int - */ - public $width = null; - - /** - * - * - * @var int - */ - public $height = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -abstract class KalturaDistributionProfile extends KalturaObjectBase -{ - /** - * Auto generated unique id - * - * - * @var int - * @readonly - */ - public $id = null; - - /** - * Profile creation date as Unix timestamp (In seconds) - * - * - * @var int - * @readonly - */ - public $createdAt = null; - - /** - * Profile last update date as Unix timestamp (In seconds) - * - * - * @var int - * @readonly - */ - public $updatedAt = null; - - /** - * - * - * @var int - * @readonly - */ - public $partnerId = null; - - /** - * - * - * @var KalturaDistributionProviderType - * @insertonly - */ - public $providerType = null; - - /** - * - * - * @var string - */ - public $name = null; - - /** - * - * - * @var KalturaDistributionProfileStatus - */ - public $status = null; - - /** - * - * - * @var KalturaDistributionProfileActionStatus - */ - public $submitEnabled = null; - - /** - * - * - * @var KalturaDistributionProfileActionStatus - */ - public $updateEnabled = null; - - /** - * - * - * @var KalturaDistributionProfileActionStatus - */ - public $deleteEnabled = null; - - /** - * - * - * @var KalturaDistributionProfileActionStatus - */ - public $reportEnabled = null; - - /** - * Comma separated flavor params ids that should be auto converted - * - * - * @var string - */ - public $autoCreateFlavors = null; - - /** - * Comma separated thumbnail params ids that should be auto generated - * - * - * @var string - */ - public $autoCreateThumb = null; - - /** - * Comma separated flavor params ids that should be submitted if ready - * - * - * @var string - */ - public $optionalFlavorParamsIds = null; - - /** - * Comma separated flavor params ids that required to be ready before submission - * - * - * @var string - */ - public $requiredFlavorParamsIds = null; - - /** - * Thumbnail dimensions that should be submitted if ready - * - * - * @var array of KalturaDistributionThumbDimensions - */ - public $optionalThumbDimensions; - - /** - * Thumbnail dimensions that required to be readt before submission - * - * - * @var array of KalturaDistributionThumbDimensions - */ - public $requiredThumbDimensions; - - /** - * Asset Distribution Rules for assets that should be submitted if ready - * - * - * @var array of KalturaAssetDistributionRule - */ - public $optionalAssetDistributionRules; - - /** - * Assets Asset Distribution Rules for assets that are required to be ready before submission - * - * - * @var array of KalturaAssetDistributionRule - */ - public $requiredAssetDistributionRules; - - /** - * If entry distribution sunrise not specified that will be the default since entry creation time, in seconds - * - * - * @var int - */ - public $sunriseDefaultOffset = null; - - /** - * If entry distribution sunset not specified that will be the default since entry creation time, in seconds - * - * - * @var int - */ - public $sunsetDefaultOffset = null; - - /** - * The best external storage to be used to download the asset files from - * - * - * @var int - */ - public $recommendedStorageProfileForDownload = null; - - /** - * The best Kaltura data center to be used to download the asset files to - * - * - * @var int - */ - public $recommendedDcForDownload = null; - - /** - * The best Kaltura data center to be used to execute the distribution job - * - * - * @var int - */ - public $recommendedDcForExecute = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaDistributionProfileListResponse extends KalturaObjectBase -{ - /** - * - * - * @var array of KalturaDistributionProfile - * @readonly - */ - public $objects; - - /** - * - * - * @var int - * @readonly - */ - public $totalCount = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -abstract class KalturaDistributionProvider extends KalturaObjectBase -{ - /** - * - * - * @var KalturaDistributionProviderType - * @readonly - */ - public $type = null; - - /** - * - * - * @var string - */ - public $name = null; - - /** - * - * - * @var bool - */ - public $scheduleUpdateEnabled = null; - - /** - * - * - * @var bool - */ - public $availabilityUpdateEnabled = null; - - /** - * - * - * @var bool - */ - public $deleteInsteadUpdate = null; - - /** - * - * - * @var int - */ - public $intervalBeforeSunrise = null; - - /** - * - * - * @var int - */ - public $intervalBeforeSunset = null; - - /** - * - * - * @var string - */ - public $updateRequiredEntryFields = null; - - /** - * - * - * @var string - */ - public $updateRequiredMetadataXPaths = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaDistributionProviderListResponse extends KalturaObjectBase -{ - /** - * - * - * @var array of KalturaDistributionProvider - * @readonly - */ - public $objects; - - /** - * - * - * @var int - * @readonly - */ - public $totalCount = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaDistributionRemoteMediaFile extends KalturaObjectBase -{ - /** - * - * - * @var string - */ - public $version = null; - - /** - * - * - * @var string - */ - public $assetId = null; - - /** - * - * - * @var string - */ - public $remoteId = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -abstract class KalturaDistributionValidationError extends KalturaObjectBase -{ - /** - * - * - * @var KalturaDistributionAction - */ - public $action = null; - - /** - * - * - * @var KalturaDistributionErrorType - */ - public $errorType = null; - - /** - * - * - * @var string - */ - public $description = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaEntryDistribution extends KalturaObjectBase -{ - /** - * Auto generated unique id - * - * - * @var int - * @readonly - */ - public $id = null; - - /** - * Entry distribution creation date as Unix timestamp (In seconds) - * - * - * @var int - * @readonly - */ - public $createdAt = null; - - /** - * Entry distribution last update date as Unix timestamp (In seconds) - * - * - * @var int - * @readonly - */ - public $updatedAt = null; - - /** - * Entry distribution submission date as Unix timestamp (In seconds) - * - * - * @var int - * @readonly - */ - public $submittedAt = null; - - /** - * - * - * @var string - * @insertonly - */ - public $entryId = null; - - /** - * - * - * @var int - * @readonly - */ - public $partnerId = null; - - /** - * - * - * @var int - * @insertonly - */ - public $distributionProfileId = null; - - /** - * - * - * @var KalturaEntryDistributionStatus - * @readonly - */ - public $status = null; - - /** - * - * - * @var KalturaEntryDistributionSunStatus - * @readonly - */ - public $sunStatus = null; - - /** - * - * - * @var KalturaEntryDistributionFlag - * @readonly - */ - public $dirtyStatus = null; - - /** - * Comma separated thumbnail asset ids - * - * - * @var string - */ - public $thumbAssetIds = null; - - /** - * Comma separated flavor asset ids - * - * - * @var string - */ - public $flavorAssetIds = null; - - /** - * Comma separated asset ids - * - * - * @var string - */ - public $assetIds = null; - - /** - * Entry distribution publish time as Unix timestamp (In seconds) - * - * - * @var int - */ - public $sunrise = null; - - /** - * Entry distribution un-publish time as Unix timestamp (In seconds) - * - * - * @var int - */ - public $sunset = null; - - /** - * The id as returned from the distributed destination - * - * - * @var string - * @readonly - */ - public $remoteId = null; - - /** - * The plays as retrieved from the remote destination reports - * - * - * @var int - * @readonly - */ - public $plays = null; - - /** - * The views as retrieved from the remote destination reports - * - * - * @var int - * @readonly - */ - public $views = null; - - /** - * - * - * @var array of KalturaDistributionValidationError - */ - public $validationErrors; - - /** - * - * - * @var KalturaBatchJobErrorTypes - * @readonly - */ - public $errorType = null; - - /** - * - * - * @var int - * @readonly - */ - public $errorNumber = null; - - /** - * - * - * @var string - * @readonly - */ - public $errorDescription = null; - - /** - * - * - * @var KalturaNullableBoolean - * @readonly - */ - public $hasSubmitResultsLog = null; - - /** - * - * - * @var KalturaNullableBoolean - * @readonly - */ - public $hasSubmitSentDataLog = null; - - /** - * - * - * @var KalturaNullableBoolean - * @readonly - */ - public $hasUpdateResultsLog = null; - - /** - * - * - * @var KalturaNullableBoolean - * @readonly - */ - public $hasUpdateSentDataLog = null; - - /** - * - * - * @var KalturaNullableBoolean - * @readonly - */ - public $hasDeleteResultsLog = null; - - /** - * - * - * @var KalturaNullableBoolean - * @readonly - */ - public $hasDeleteSentDataLog = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaEntryDistributionListResponse extends KalturaObjectBase -{ - /** - * - * - * @var array of KalturaEntryDistribution - * @readonly - */ - public $objects; - - /** - * - * - * @var int - * @readonly - */ - public $totalCount = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaGenericDistributionProfileAction extends KalturaObjectBase -{ - /** - * - * - * @var KalturaDistributionProtocol - */ - public $protocol = null; - - /** - * - * - * @var string - */ - public $serverUrl = null; - - /** - * - * - * @var string - */ - public $serverPath = null; - - /** - * - * - * @var string - */ - public $username = null; - - /** - * - * - * @var string - */ - public $password = null; - - /** - * - * - * @var bool - */ - public $ftpPassiveMode = null; - - /** - * - * - * @var string - */ - public $httpFieldName = null; - - /** - * - * - * @var string - */ - public $httpFileName = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaGenericDistributionProviderAction extends KalturaObjectBase -{ - /** - * Auto generated - * - * - * @var int - * @readonly - */ - public $id = null; - - /** - * Generic distribution provider action creation date as Unix timestamp (In seconds) - * - * - * @var int - * @readonly - */ - public $createdAt = null; - - /** - * Generic distribution provider action last update date as Unix timestamp (In seconds) - * - * - * @var int - * @readonly - */ - public $updatedAt = null; - - /** - * - * - * @var int - * @insertonly - */ - public $genericDistributionProviderId = null; - - /** - * - * - * @var KalturaDistributionAction - * @insertonly - */ - public $action = null; - - /** - * - * - * @var KalturaGenericDistributionProviderStatus - * @readonly - */ - public $status = null; - - /** - * - * - * @var KalturaGenericDistributionProviderParser - */ - public $resultsParser = null; - - /** - * - * - * @var KalturaDistributionProtocol - */ - public $protocol = null; - - /** - * - * - * @var string - */ - public $serverAddress = null; - - /** - * - * - * @var string - */ - public $remotePath = null; - - /** - * - * - * @var string - */ - public $remoteUsername = null; - - /** - * - * - * @var string - */ - public $remotePassword = null; - - /** - * - * - * @var string - */ - public $editableFields = null; - - /** - * - * - * @var string - */ - public $mandatoryFields = null; - - /** - * - * - * @var string - * @readonly - */ - public $mrssTransformer = null; - - /** - * - * - * @var string - * @readonly - */ - public $mrssValidator = null; - - /** - * - * - * @var string - * @readonly - */ - public $resultsTransformer = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaGenericDistributionProviderActionListResponse extends KalturaObjectBase -{ - /** - * - * - * @var array of KalturaGenericDistributionProviderAction - * @readonly - */ - public $objects; - - /** - * - * - * @var int - * @readonly - */ - public $totalCount = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaGenericDistributionProvider extends KalturaDistributionProvider -{ - /** - * Auto generated - * - * - * @var int - * @readonly - */ - public $id = null; - - /** - * Generic distribution provider creation date as Unix timestamp (In seconds) - * - * - * @var int - * @readonly - */ - public $createdAt = null; - - /** - * Generic distribution provider last update date as Unix timestamp (In seconds) - * - * - * @var int - * @readonly - */ - public $updatedAt = null; - - /** - * - * - * @var int - * @readonly - */ - public $partnerId = null; - - /** - * - * - * @var bool - */ - public $isDefault = null; - - /** - * - * - * @var KalturaGenericDistributionProviderStatus - * @readonly - */ - public $status = null; - - /** - * - * - * @var string - */ - public $optionalFlavorParamsIds = null; - - /** - * - * - * @var string - */ - public $requiredFlavorParamsIds = null; - - /** - * - * - * @var array of KalturaDistributionThumbDimensions - */ - public $optionalThumbDimensions; - - /** - * - * - * @var array of KalturaDistributionThumbDimensions - */ - public $requiredThumbDimensions; - - /** - * - * - * @var string - */ - public $editableFields = null; - - /** - * - * - * @var string - */ - public $mandatoryFields = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaGenericDistributionProviderListResponse extends KalturaObjectBase -{ - /** - * - * - * @var array of KalturaGenericDistributionProvider - * @readonly - */ - public $objects; - - /** - * - * - * @var int - * @readonly - */ - public $totalCount = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaAssetDistributionPropertyCondition extends KalturaAssetDistributionCondition -{ - /** - * The property name to look for, this will match to a getter on the asset object. - * Should be camelCase naming convention (defining "myPropertyName" will look for getMyPropertyName()) - * - * - * @var string - */ - public $propertyName = null; - - /** - * The value to compare - * - * - * @var string - */ - public $propertyValue = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -abstract class KalturaConfigurableDistributionJobProviderData extends KalturaDistributionJobProviderData -{ - /** - * - * - * @var string - */ - public $fieldValues = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -abstract class KalturaConfigurableDistributionProfile extends KalturaDistributionProfile -{ - /** - * - * - * @var array of KalturaDistributionFieldConfig - */ - public $fieldConfigArray; - - /** - * - * - * @var array of KalturaExtendingItemMrssParameter - */ - public $itemXpathsToExtend; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaContentDistributionSearchItem extends KalturaSearchItem -{ - /** - * - * - * @var bool - */ - public $noDistributionProfiles = null; - - /** - * - * - * @var int - */ - public $distributionProfileId = null; - - /** - * - * - * @var KalturaEntryDistributionSunStatus - */ - public $distributionSunStatus = null; - - /** - * - * - * @var KalturaEntryDistributionFlag - */ - public $entryDistributionFlag = null; - - /** - * - * - * @var KalturaEntryDistributionStatus - */ - public $entryDistributionStatus = null; - - /** - * - * - * @var bool - */ - public $hasEntryDistributionValidationErrors = null; - - /** - * Comma seperated validation error types - * - * - * @var string - */ - public $entryDistributionValidationErrors = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaDistributionJobData extends KalturaJobData -{ - /** - * - * - * @var int - */ - public $distributionProfileId = null; - - /** - * - * - * @var KalturaDistributionProfile - */ - public $distributionProfile; - - /** - * - * - * @var int - */ - public $entryDistributionId = null; - - /** - * - * - * @var KalturaEntryDistribution - */ - public $entryDistribution; - - /** - * Id of the media in the remote system - * - * - * @var string - */ - public $remoteId = null; - - /** - * - * - * @var KalturaDistributionProviderType - */ - public $providerType = null; - - /** - * Additional data that relevant for the provider only - * - * - * @var KalturaDistributionJobProviderData - */ - public $providerData; - - /** - * The results as returned from the remote destination - * - * - * @var string - */ - public $results = null; - - /** - * The data as sent to the remote destination - * - * - * @var string - */ - public $sentData = null; - - /** - * Stores array of media files that submitted to the destination site - * Could be used later for media update - * - * - * @var array of KalturaDistributionRemoteMediaFile - */ - public $mediaFiles; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -abstract class KalturaDistributionProfileBaseFilter extends KalturaFilter -{ - /** - * - * - * @var int - */ - public $idEqual = null; - - /** - * - * - * @var string - */ - public $idIn = null; - - /** - * - * - * @var int - */ - public $createdAtGreaterThanOrEqual = null; - - /** - * - * - * @var int - */ - public $createdAtLessThanOrEqual = null; - - /** - * - * - * @var int - */ - public $updatedAtGreaterThanOrEqual = null; - - /** - * - * - * @var int - */ - public $updatedAtLessThanOrEqual = null; - - /** - * - * - * @var KalturaDistributionProfileStatus - */ - public $statusEqual = null; - - /** - * - * - * @var string - */ - public $statusIn = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -abstract class KalturaDistributionProviderBaseFilter extends KalturaFilter -{ - /** - * - * - * @var KalturaDistributionProviderType - */ - public $typeEqual = null; - - /** - * - * - * @var string - */ - public $typeIn = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaDistributionValidationErrorInvalidData extends KalturaDistributionValidationError -{ - /** - * - * - * @var string - */ - public $fieldName = null; - - /** - * - * - * @var KalturaDistributionValidationErrorType - */ - public $validationErrorType = null; - - /** - * Parameter of the validation error - * For example, minimum value for KalturaDistributionValidationErrorType::STRING_TOO_SHORT validation error - * - * - * @var string - */ - public $validationErrorParam = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaDistributionValidationErrorMissingAsset extends KalturaDistributionValidationError -{ - /** - * - * - * @var string - */ - public $data = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaDistributionValidationErrorMissingFlavor extends KalturaDistributionValidationError -{ - /** - * - * - * @var string - */ - public $flavorParamsId = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaDistributionValidationErrorMissingMetadata extends KalturaDistributionValidationError -{ - /** - * - * - * @var string - */ - public $fieldName = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaDistributionValidationErrorMissingThumbnail extends KalturaDistributionValidationError -{ - /** - * - * - * @var KalturaDistributionThumbDimensions - */ - public $dimensions; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -abstract class KalturaEntryDistributionBaseFilter extends KalturaFilter -{ - /** - * - * - * @var int - */ - public $idEqual = null; - - /** - * - * - * @var string - */ - public $idIn = null; - - /** - * - * - * @var int - */ - public $createdAtGreaterThanOrEqual = null; - - /** - * - * - * @var int - */ - public $createdAtLessThanOrEqual = null; - - /** - * - * - * @var int - */ - public $updatedAtGreaterThanOrEqual = null; - - /** - * - * - * @var int - */ - public $updatedAtLessThanOrEqual = null; - - /** - * - * - * @var int - */ - public $submittedAtGreaterThanOrEqual = null; - - /** - * - * - * @var int - */ - public $submittedAtLessThanOrEqual = null; - - /** - * - * - * @var string - */ - public $entryIdEqual = null; - - /** - * - * - * @var string - */ - public $entryIdIn = null; - - /** - * - * - * @var int - */ - public $distributionProfileIdEqual = null; - - /** - * - * - * @var string - */ - public $distributionProfileIdIn = null; - - /** - * - * - * @var KalturaEntryDistributionStatus - */ - public $statusEqual = null; - - /** - * - * - * @var string - */ - public $statusIn = null; - - /** - * - * - * @var KalturaEntryDistributionFlag - */ - public $dirtyStatusEqual = null; - - /** - * - * - * @var string - */ - public $dirtyStatusIn = null; - - /** - * - * - * @var int - */ - public $sunriseGreaterThanOrEqual = null; - - /** - * - * - * @var int - */ - public $sunriseLessThanOrEqual = null; - - /** - * - * - * @var int - */ - public $sunsetGreaterThanOrEqual = null; - - /** - * - * - * @var int - */ - public $sunsetLessThanOrEqual = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaGenericDistributionJobProviderData extends KalturaDistributionJobProviderData -{ - /** - * - * - * @var string - */ - public $xml = null; - - /** - * - * - * @var string - */ - public $resultParseData = null; - - /** - * - * - * @var KalturaGenericDistributionProviderParser - */ - public $resultParserType = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaGenericDistributionProfile extends KalturaDistributionProfile -{ - /** - * - * - * @var int - * @insertonly - */ - public $genericProviderId = null; - - /** - * - * - * @var KalturaGenericDistributionProfileAction - */ - public $submitAction; - - /** - * - * - * @var KalturaGenericDistributionProfileAction - */ - public $updateAction; - - /** - * - * - * @var KalturaGenericDistributionProfileAction - */ - public $deleteAction; - - /** - * - * - * @var KalturaGenericDistributionProfileAction - */ - public $fetchReportAction; - - /** - * - * - * @var string - */ - public $updateRequiredEntryFields = null; - - /** - * - * - * @var string - */ - public $updateRequiredMetadataXPaths = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -abstract class KalturaGenericDistributionProviderActionBaseFilter extends KalturaFilter -{ - /** - * - * - * @var int - */ - public $idEqual = null; - - /** - * - * - * @var string - */ - public $idIn = null; - - /** - * - * - * @var int - */ - public $createdAtGreaterThanOrEqual = null; - - /** - * - * - * @var int - */ - public $createdAtLessThanOrEqual = null; - - /** - * - * - * @var int - */ - public $updatedAtGreaterThanOrEqual = null; - - /** - * - * - * @var int - */ - public $updatedAtLessThanOrEqual = null; - - /** - * - * - * @var int - */ - public $genericDistributionProviderIdEqual = null; - - /** - * - * - * @var string - */ - public $genericDistributionProviderIdIn = null; - - /** - * - * - * @var KalturaDistributionAction - */ - public $actionEqual = null; - - /** - * - * - * @var string - */ - public $actionIn = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaSyndicationDistributionProfile extends KalturaDistributionProfile -{ - /** - * - * - * @var string - */ - public $xsl = null; - - /** - * - * - * @var string - * @readonly - */ - public $feedId = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaSyndicationDistributionProvider extends KalturaDistributionProvider -{ - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaDistributionDeleteJobData extends KalturaDistributionJobData -{ - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaDistributionFetchReportJobData extends KalturaDistributionJobData -{ - /** - * - * - * @var int - */ - public $plays = null; - - /** - * - * - * @var int - */ - public $views = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaDistributionProfileFilter extends KalturaDistributionProfileBaseFilter -{ - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaDistributionProviderFilter extends KalturaDistributionProviderBaseFilter -{ - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaDistributionSubmitJobData extends KalturaDistributionJobData -{ - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaDistributionUpdateJobData extends KalturaDistributionJobData -{ - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaDistributionValidationErrorInvalidMetadata extends KalturaDistributionValidationErrorInvalidData -{ - /** - * - * - * @var int - */ - public $metadataProfileId = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaEntryDistributionFilter extends KalturaEntryDistributionBaseFilter -{ - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaGenericDistributionProviderActionFilter extends KalturaGenericDistributionProviderActionBaseFilter -{ - -} - -/** - * @package Kaltura - * @subpackage Client - */ -abstract class KalturaConfigurableDistributionProfileBaseFilter extends KalturaDistributionProfileFilter -{ - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaDistributionDisableJobData extends KalturaDistributionUpdateJobData -{ - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaDistributionEnableJobData extends KalturaDistributionUpdateJobData -{ - -} - -/** - * @package Kaltura - * @subpackage Client - */ -abstract class KalturaGenericDistributionProfileBaseFilter extends KalturaDistributionProfileFilter -{ - -} - -/** - * @package Kaltura - * @subpackage Client - */ -abstract class KalturaGenericDistributionProviderBaseFilter extends KalturaDistributionProviderFilter -{ - /** - * - * - * @var int - */ - public $idEqual = null; - - /** - * - * - * @var string - */ - public $idIn = null; - - /** - * - * - * @var int - */ - public $createdAtGreaterThanOrEqual = null; - - /** - * - * - * @var int - */ - public $createdAtLessThanOrEqual = null; - - /** - * - * - * @var int - */ - public $updatedAtGreaterThanOrEqual = null; - - /** - * - * - * @var int - */ - public $updatedAtLessThanOrEqual = null; - - /** - * - * - * @var int - */ - public $partnerIdEqual = null; - - /** - * - * - * @var string - */ - public $partnerIdIn = null; - - /** - * - * - * @var KalturaNullableBoolean - */ - public $isDefaultEqual = null; - - /** - * - * - * @var string - */ - public $isDefaultIn = null; - - /** - * - * - * @var KalturaGenericDistributionProviderStatus - */ - public $statusEqual = null; - - /** - * - * - * @var string - */ - public $statusIn = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -abstract class KalturaSyndicationDistributionProfileBaseFilter extends KalturaDistributionProfileFilter -{ - -} - -/** - * @package Kaltura - * @subpackage Client - */ -abstract class KalturaSyndicationDistributionProviderBaseFilter extends KalturaDistributionProviderFilter -{ - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaConfigurableDistributionProfileFilter extends KalturaConfigurableDistributionProfileBaseFilter -{ - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaGenericDistributionProfileFilter extends KalturaGenericDistributionProfileBaseFilter -{ - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaGenericDistributionProviderFilter extends KalturaGenericDistributionProviderBaseFilter -{ - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaSyndicationDistributionProfileFilter extends KalturaSyndicationDistributionProfileBaseFilter -{ - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaSyndicationDistributionProviderFilter extends KalturaSyndicationDistributionProviderBaseFilter -{ - -} - - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaDistributionProfileService extends KalturaServiceBase -{ - function __construct(KalturaClient $client = null) - { - parent::__construct($client); - } - - /** - * Add new Distribution Profile - * - * @param KalturaDistributionProfile $distributionProfile - * @return KalturaDistributionProfile - */ - function add(KalturaDistributionProfile $distributionProfile) - { - $kparams = array(); - $this->client->addParam($kparams, "distributionProfile", $distributionProfile->toParams()); - $this->client->queueServiceActionCall("contentdistribution_distributionprofile", "add", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaDistributionProfile"); - return $resultObject; - } - - /** - * Get Distribution Profile by id - * - * @param int $id - * @return KalturaDistributionProfile - */ - function get($id) - { - $kparams = array(); - $this->client->addParam($kparams, "id", $id); - $this->client->queueServiceActionCall("contentdistribution_distributionprofile", "get", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaDistributionProfile"); - return $resultObject; - } - - /** - * Update Distribution Profile by id - * - * @param int $id - * @param KalturaDistributionProfile $distributionProfile - * @return KalturaDistributionProfile - */ - function update($id, KalturaDistributionProfile $distributionProfile) - { - $kparams = array(); - $this->client->addParam($kparams, "id", $id); - $this->client->addParam($kparams, "distributionProfile", $distributionProfile->toParams()); - $this->client->queueServiceActionCall("contentdistribution_distributionprofile", "update", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaDistributionProfile"); - return $resultObject; - } - - /** - * Update Distribution Profile status by id - * - * @param int $id - * @param int $status - * @return KalturaDistributionProfile - */ - function updateStatus($id, $status) - { - $kparams = array(); - $this->client->addParam($kparams, "id", $id); - $this->client->addParam($kparams, "status", $status); - $this->client->queueServiceActionCall("contentdistribution_distributionprofile", "updateStatus", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaDistributionProfile"); - return $resultObject; - } - - /** - * Delete Distribution Profile by id - * - * @param int $id - * @return - */ - function delete($id) - { - $kparams = array(); - $this->client->addParam($kparams, "id", $id); - $this->client->queueServiceActionCall("contentdistribution_distributionprofile", "delete", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "null"); - return $resultObject; - } - - /** - * List all distribution providers - * - * @param KalturaDistributionProfileFilter $filter - * @param KalturaFilterPager $pager - * @return KalturaDistributionProfileListResponse - */ - function listAction(KalturaDistributionProfileFilter $filter = null, KalturaFilterPager $pager = null) - { - $kparams = array(); - if ($filter !== null) - $this->client->addParam($kparams, "filter", $filter->toParams()); - if ($pager !== null) - $this->client->addParam($kparams, "pager", $pager->toParams()); - $this->client->queueServiceActionCall("contentdistribution_distributionprofile", "list", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaDistributionProfileListResponse"); - return $resultObject; - } - - /** - * - * - * @param KalturaPartnerFilter $filter - * @param KalturaFilterPager $pager - * @return KalturaDistributionProfileListResponse - */ - function listByPartner(KalturaPartnerFilter $filter = null, KalturaFilterPager $pager = null) - { - $kparams = array(); - if ($filter !== null) - $this->client->addParam($kparams, "filter", $filter->toParams()); - if ($pager !== null) - $this->client->addParam($kparams, "pager", $pager->toParams()); - $this->client->queueServiceActionCall("contentdistribution_distributionprofile", "listByPartner", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaDistributionProfileListResponse"); - return $resultObject; - } -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaEntryDistributionService extends KalturaServiceBase -{ - function __construct(KalturaClient $client = null) - { - parent::__construct($client); - } - - /** - * Add new Entry Distribution - * - * @param KalturaEntryDistribution $entryDistribution - * @return KalturaEntryDistribution - */ - function add(KalturaEntryDistribution $entryDistribution) - { - $kparams = array(); - $this->client->addParam($kparams, "entryDistribution", $entryDistribution->toParams()); - $this->client->queueServiceActionCall("contentdistribution_entrydistribution", "add", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaEntryDistribution"); - return $resultObject; - } - - /** - * Get Entry Distribution by id - * - * @param int $id - * @return KalturaEntryDistribution - */ - function get($id) - { - $kparams = array(); - $this->client->addParam($kparams, "id", $id); - $this->client->queueServiceActionCall("contentdistribution_entrydistribution", "get", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaEntryDistribution"); - return $resultObject; - } - - /** - * Validates Entry Distribution by id for submission - * - * @param int $id - * @return KalturaEntryDistribution - */ - function validate($id) - { - $kparams = array(); - $this->client->addParam($kparams, "id", $id); - $this->client->queueServiceActionCall("contentdistribution_entrydistribution", "validate", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaEntryDistribution"); - return $resultObject; - } - - /** - * Update Entry Distribution by id - * - * @param int $id - * @param KalturaEntryDistribution $entryDistribution - * @return KalturaEntryDistribution - */ - function update($id, KalturaEntryDistribution $entryDistribution) - { - $kparams = array(); - $this->client->addParam($kparams, "id", $id); - $this->client->addParam($kparams, "entryDistribution", $entryDistribution->toParams()); - $this->client->queueServiceActionCall("contentdistribution_entrydistribution", "update", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaEntryDistribution"); - return $resultObject; - } - - /** - * Delete Entry Distribution by id - * - * @param int $id - * @return - */ - function delete($id) - { - $kparams = array(); - $this->client->addParam($kparams, "id", $id); - $this->client->queueServiceActionCall("contentdistribution_entrydistribution", "delete", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "null"); - return $resultObject; - } - - /** - * List all distribution providers - * - * @param KalturaEntryDistributionFilter $filter - * @param KalturaFilterPager $pager - * @return KalturaEntryDistributionListResponse - */ - function listAction(KalturaEntryDistributionFilter $filter = null, KalturaFilterPager $pager = null) - { - $kparams = array(); - if ($filter !== null) - $this->client->addParam($kparams, "filter", $filter->toParams()); - if ($pager !== null) - $this->client->addParam($kparams, "pager", $pager->toParams()); - $this->client->queueServiceActionCall("contentdistribution_entrydistribution", "list", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaEntryDistributionListResponse"); - return $resultObject; - } - - /** - * Submits Entry Distribution to the remote destination - * - * @param int $id - * @param bool $submitWhenReady - * @return KalturaEntryDistribution - */ - function submitAdd($id, $submitWhenReady = false) - { - $kparams = array(); - $this->client->addParam($kparams, "id", $id); - $this->client->addParam($kparams, "submitWhenReady", $submitWhenReady); - $this->client->queueServiceActionCall("contentdistribution_entrydistribution", "submitAdd", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaEntryDistribution"); - return $resultObject; - } - - /** - * Submits Entry Distribution changes to the remote destination - * - * @param int $id - * @return KalturaEntryDistribution - */ - function submitUpdate($id) - { - $kparams = array(); - $this->client->addParam($kparams, "id", $id); - $this->client->queueServiceActionCall("contentdistribution_entrydistribution", "submitUpdate", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaEntryDistribution"); - return $resultObject; - } - - /** - * Submits Entry Distribution report request - * - * @param int $id - * @return KalturaEntryDistribution - */ - function submitFetchReport($id) - { - $kparams = array(); - $this->client->addParam($kparams, "id", $id); - $this->client->queueServiceActionCall("contentdistribution_entrydistribution", "submitFetchReport", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaEntryDistribution"); - return $resultObject; - } - - /** - * Deletes Entry Distribution from the remote destination - * - * @param int $id - * @return KalturaEntryDistribution - */ - function submitDelete($id) - { - $kparams = array(); - $this->client->addParam($kparams, "id", $id); - $this->client->queueServiceActionCall("contentdistribution_entrydistribution", "submitDelete", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaEntryDistribution"); - return $resultObject; - } - - /** - * Retries last submit action - * - * @param int $id - * @return KalturaEntryDistribution - */ - function retrySubmit($id) - { - $kparams = array(); - $this->client->addParam($kparams, "id", $id); - $this->client->queueServiceActionCall("contentdistribution_entrydistribution", "retrySubmit", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaEntryDistribution"); - return $resultObject; - } - - /** - * Serves entry distribution sent data - * - * @param int $id - * @param int $actionType - * @return file - */ - function serveSentData($id, $actionType) - { - $kparams = array(); - $this->client->addParam($kparams, "id", $id); - $this->client->addParam($kparams, "actionType", $actionType); - $this->client->queueServiceActionCall("contentdistribution_entrydistribution", "serveSentData", $kparams); - if(!$this->client->getDestinationPath() && !$this->client->getReturnServedResult()) - return $this->client->getServeUrl(); - return $this->client->doQueue(); - } - - /** - * Serves entry distribution returned data - * - * @param int $id - * @param int $actionType - * @return file - */ - function serveReturnedData($id, $actionType) - { - $kparams = array(); - $this->client->addParam($kparams, "id", $id); - $this->client->addParam($kparams, "actionType", $actionType); - $this->client->queueServiceActionCall("contentdistribution_entrydistribution", "serveReturnedData", $kparams); - if(!$this->client->getDestinationPath() && !$this->client->getReturnServedResult()) - return $this->client->getServeUrl(); - return $this->client->doQueue(); - } -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaDistributionProviderService extends KalturaServiceBase -{ - function __construct(KalturaClient $client = null) - { - parent::__construct($client); - } - - /** - * List all distribution providers - * - * @param KalturaDistributionProviderFilter $filter - * @param KalturaFilterPager $pager - * @return KalturaDistributionProviderListResponse - */ - function listAction(KalturaDistributionProviderFilter $filter = null, KalturaFilterPager $pager = null) - { - $kparams = array(); - if ($filter !== null) - $this->client->addParam($kparams, "filter", $filter->toParams()); - if ($pager !== null) - $this->client->addParam($kparams, "pager", $pager->toParams()); - $this->client->queueServiceActionCall("contentdistribution_distributionprovider", "list", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaDistributionProviderListResponse"); - return $resultObject; - } -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaGenericDistributionProviderService extends KalturaServiceBase -{ - function __construct(KalturaClient $client = null) - { - parent::__construct($client); - } - - /** - * Add new Generic Distribution Provider - * - * @param KalturaGenericDistributionProvider $genericDistributionProvider - * @return KalturaGenericDistributionProvider - */ - function add(KalturaGenericDistributionProvider $genericDistributionProvider) - { - $kparams = array(); - $this->client->addParam($kparams, "genericDistributionProvider", $genericDistributionProvider->toParams()); - $this->client->queueServiceActionCall("contentdistribution_genericdistributionprovider", "add", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaGenericDistributionProvider"); - return $resultObject; - } - - /** - * Get Generic Distribution Provider by id - * - * @param int $id - * @return KalturaGenericDistributionProvider - */ - function get($id) - { - $kparams = array(); - $this->client->addParam($kparams, "id", $id); - $this->client->queueServiceActionCall("contentdistribution_genericdistributionprovider", "get", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaGenericDistributionProvider"); - return $resultObject; - } - - /** - * Update Generic Distribution Provider by id - * - * @param int $id - * @param KalturaGenericDistributionProvider $genericDistributionProvider - * @return KalturaGenericDistributionProvider - */ - function update($id, KalturaGenericDistributionProvider $genericDistributionProvider) - { - $kparams = array(); - $this->client->addParam($kparams, "id", $id); - $this->client->addParam($kparams, "genericDistributionProvider", $genericDistributionProvider->toParams()); - $this->client->queueServiceActionCall("contentdistribution_genericdistributionprovider", "update", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaGenericDistributionProvider"); - return $resultObject; - } - - /** - * Delete Generic Distribution Provider by id - * - * @param int $id - * @return - */ - function delete($id) - { - $kparams = array(); - $this->client->addParam($kparams, "id", $id); - $this->client->queueServiceActionCall("contentdistribution_genericdistributionprovider", "delete", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "null"); - return $resultObject; - } - - /** - * List all distribution providers - * - * @param KalturaGenericDistributionProviderFilter $filter - * @param KalturaFilterPager $pager - * @return KalturaGenericDistributionProviderListResponse - */ - function listAction(KalturaGenericDistributionProviderFilter $filter = null, KalturaFilterPager $pager = null) - { - $kparams = array(); - if ($filter !== null) - $this->client->addParam($kparams, "filter", $filter->toParams()); - if ($pager !== null) - $this->client->addParam($kparams, "pager", $pager->toParams()); - $this->client->queueServiceActionCall("contentdistribution_genericdistributionprovider", "list", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaGenericDistributionProviderListResponse"); - return $resultObject; - } -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaGenericDistributionProviderActionService extends KalturaServiceBase -{ - function __construct(KalturaClient $client = null) - { - parent::__construct($client); - } - - /** - * Add new Generic Distribution Provider Action - * - * @param KalturaGenericDistributionProviderAction $genericDistributionProviderAction - * @return KalturaGenericDistributionProviderAction - */ - function add(KalturaGenericDistributionProviderAction $genericDistributionProviderAction) - { - $kparams = array(); - $this->client->addParam($kparams, "genericDistributionProviderAction", $genericDistributionProviderAction->toParams()); - $this->client->queueServiceActionCall("contentdistribution_genericdistributionprovideraction", "add", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaGenericDistributionProviderAction"); - return $resultObject; - } - - /** - * Add MRSS transform file to generic distribution provider action - * - * @param int $id The id of the generic distribution provider action - * @param string $xslData XSL MRSS transformation data - * @return KalturaGenericDistributionProviderAction - */ - function addMrssTransform($id, $xslData) - { - $kparams = array(); - $this->client->addParam($kparams, "id", $id); - $this->client->addParam($kparams, "xslData", $xslData); - $this->client->queueServiceActionCall("contentdistribution_genericdistributionprovideraction", "addMrssTransform", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaGenericDistributionProviderAction"); - return $resultObject; - } - - /** - * Add MRSS transform file to generic distribution provider action - * - * @param int $id The id of the generic distribution provider action - * @param file $xslFile XSL MRSS transformation file - * @return KalturaGenericDistributionProviderAction - */ - function addMrssTransformFromFile($id, $xslFile) - { - $kparams = array(); - $this->client->addParam($kparams, "id", $id); - $kfiles = array(); - $this->client->addParam($kfiles, "xslFile", $xslFile); - $this->client->queueServiceActionCall("contentdistribution_genericdistributionprovideraction", "addMrssTransformFromFile", $kparams, $kfiles); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaGenericDistributionProviderAction"); - return $resultObject; - } - - /** - * Add MRSS validate file to generic distribution provider action - * - * @param int $id The id of the generic distribution provider action - * @param string $xsdData XSD MRSS validatation data - * @return KalturaGenericDistributionProviderAction - */ - function addMrssValidate($id, $xsdData) - { - $kparams = array(); - $this->client->addParam($kparams, "id", $id); - $this->client->addParam($kparams, "xsdData", $xsdData); - $this->client->queueServiceActionCall("contentdistribution_genericdistributionprovideraction", "addMrssValidate", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaGenericDistributionProviderAction"); - return $resultObject; - } - - /** - * Add MRSS validate file to generic distribution provider action - * - * @param int $id The id of the generic distribution provider action - * @param file $xsdFile XSD MRSS validatation file - * @return KalturaGenericDistributionProviderAction - */ - function addMrssValidateFromFile($id, $xsdFile) - { - $kparams = array(); - $this->client->addParam($kparams, "id", $id); - $kfiles = array(); - $this->client->addParam($kfiles, "xsdFile", $xsdFile); - $this->client->queueServiceActionCall("contentdistribution_genericdistributionprovideraction", "addMrssValidateFromFile", $kparams, $kfiles); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaGenericDistributionProviderAction"); - return $resultObject; - } - - /** - * Add results transform file to generic distribution provider action - * - * @param int $id The id of the generic distribution provider action - * @param string $transformData Transformation data xsl, xPath or regex - * @return KalturaGenericDistributionProviderAction - */ - function addResultsTransform($id, $transformData) - { - $kparams = array(); - $this->client->addParam($kparams, "id", $id); - $this->client->addParam($kparams, "transformData", $transformData); - $this->client->queueServiceActionCall("contentdistribution_genericdistributionprovideraction", "addResultsTransform", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaGenericDistributionProviderAction"); - return $resultObject; - } - - /** - * Add MRSS transform file to generic distribution provider action - * - * @param int $id The id of the generic distribution provider action - * @param file $transformFile Transformation file xsl, xPath or regex - * @return KalturaGenericDistributionProviderAction - */ - function addResultsTransformFromFile($id, $transformFile) - { - $kparams = array(); - $this->client->addParam($kparams, "id", $id); - $kfiles = array(); - $this->client->addParam($kfiles, "transformFile", $transformFile); - $this->client->queueServiceActionCall("contentdistribution_genericdistributionprovideraction", "addResultsTransformFromFile", $kparams, $kfiles); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaGenericDistributionProviderAction"); - return $resultObject; - } - - /** - * Get Generic Distribution Provider Action by id - * - * @param int $id - * @return KalturaGenericDistributionProviderAction - */ - function get($id) - { - $kparams = array(); - $this->client->addParam($kparams, "id", $id); - $this->client->queueServiceActionCall("contentdistribution_genericdistributionprovideraction", "get", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaGenericDistributionProviderAction"); - return $resultObject; - } - - /** - * Get Generic Distribution Provider Action by provider id - * - * @param int $genericDistributionProviderId - * @param int $actionType - * @return KalturaGenericDistributionProviderAction - */ - function getByProviderId($genericDistributionProviderId, $actionType) - { - $kparams = array(); - $this->client->addParam($kparams, "genericDistributionProviderId", $genericDistributionProviderId); - $this->client->addParam($kparams, "actionType", $actionType); - $this->client->queueServiceActionCall("contentdistribution_genericdistributionprovideraction", "getByProviderId", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaGenericDistributionProviderAction"); - return $resultObject; - } - - /** - * Update Generic Distribution Provider Action by provider id - * - * @param int $genericDistributionProviderId - * @param int $actionType - * @param KalturaGenericDistributionProviderAction $genericDistributionProviderAction - * @return KalturaGenericDistributionProviderAction - */ - function updateByProviderId($genericDistributionProviderId, $actionType, KalturaGenericDistributionProviderAction $genericDistributionProviderAction) - { - $kparams = array(); - $this->client->addParam($kparams, "genericDistributionProviderId", $genericDistributionProviderId); - $this->client->addParam($kparams, "actionType", $actionType); - $this->client->addParam($kparams, "genericDistributionProviderAction", $genericDistributionProviderAction->toParams()); - $this->client->queueServiceActionCall("contentdistribution_genericdistributionprovideraction", "updateByProviderId", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaGenericDistributionProviderAction"); - return $resultObject; - } - - /** - * Update Generic Distribution Provider Action by id - * - * @param int $id - * @param KalturaGenericDistributionProviderAction $genericDistributionProviderAction - * @return KalturaGenericDistributionProviderAction - */ - function update($id, KalturaGenericDistributionProviderAction $genericDistributionProviderAction) - { - $kparams = array(); - $this->client->addParam($kparams, "id", $id); - $this->client->addParam($kparams, "genericDistributionProviderAction", $genericDistributionProviderAction->toParams()); - $this->client->queueServiceActionCall("contentdistribution_genericdistributionprovideraction", "update", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaGenericDistributionProviderAction"); - return $resultObject; - } - - /** - * Delete Generic Distribution Provider Action by id - * - * @param int $id - * @return - */ - function delete($id) - { - $kparams = array(); - $this->client->addParam($kparams, "id", $id); - $this->client->queueServiceActionCall("contentdistribution_genericdistributionprovideraction", "delete", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "null"); - return $resultObject; - } - - /** - * Delete Generic Distribution Provider Action by provider id - * - * @param int $genericDistributionProviderId - * @param int $actionType - * @return - */ - function deleteByProviderId($genericDistributionProviderId, $actionType) - { - $kparams = array(); - $this->client->addParam($kparams, "genericDistributionProviderId", $genericDistributionProviderId); - $this->client->addParam($kparams, "actionType", $actionType); - $this->client->queueServiceActionCall("contentdistribution_genericdistributionprovideraction", "deleteByProviderId", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "null"); - return $resultObject; - } - - /** - * List all distribution providers - * - * @param KalturaGenericDistributionProviderActionFilter $filter - * @param KalturaFilterPager $pager - * @return KalturaGenericDistributionProviderActionListResponse - */ - function listAction(KalturaGenericDistributionProviderActionFilter $filter = null, KalturaFilterPager $pager = null) - { - $kparams = array(); - if ($filter !== null) - $this->client->addParam($kparams, "filter", $filter->toParams()); - if ($pager !== null) - $this->client->addParam($kparams, "pager", $pager->toParams()); - $this->client->queueServiceActionCall("contentdistribution_genericdistributionprovideraction", "list", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaGenericDistributionProviderActionListResponse"); - return $resultObject; - } -} -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaContentDistributionClientPlugin extends KalturaClientPlugin -{ - /** - * @var KalturaDistributionProfileService - */ - public $distributionProfile = null; - - /** - * @var KalturaEntryDistributionService - */ - public $entryDistribution = null; - - /** - * @var KalturaDistributionProviderService - */ - public $distributionProvider = null; - - /** - * @var KalturaGenericDistributionProviderService - */ - public $genericDistributionProvider = null; - - /** - * @var KalturaGenericDistributionProviderActionService - */ - public $genericDistributionProviderAction = null; - - protected function __construct(KalturaClient $client) - { - parent::__construct($client); - $this->distributionProfile = new KalturaDistributionProfileService($client); - $this->entryDistribution = new KalturaEntryDistributionService($client); - $this->distributionProvider = new KalturaDistributionProviderService($client); - $this->genericDistributionProvider = new KalturaGenericDistributionProviderService($client); - $this->genericDistributionProviderAction = new KalturaGenericDistributionProviderActionService($client); - } - - /** - * @return KalturaContentDistributionClientPlugin - */ - public static function get(KalturaClient $client) - { - return new KalturaContentDistributionClientPlugin($client); - } - - /** - * @return array - */ - public function getServices() - { - $services = array( - 'distributionProfile' => $this->distributionProfile, - 'entryDistribution' => $this->entryDistribution, - 'distributionProvider' => $this->distributionProvider, - 'genericDistributionProvider' => $this->genericDistributionProvider, - 'genericDistributionProviderAction' => $this->genericDistributionProviderAction, - ); - return $services; - } - - /** - * @return string - */ - public function getName() - { - return 'contentDistribution'; - } -} - diff --git a/local/kaltura/API/KalturaPlugins/KalturaCuePointClientPlugin.php b/local/kaltura/API/KalturaPlugins/KalturaCuePointClientPlugin.php deleted file mode 100644 index 03a5c937e8cd1..0000000000000 --- a/local/kaltura/API/KalturaPlugins/KalturaCuePointClientPlugin.php +++ /dev/null @@ -1,640 +0,0 @@ -. -// -// @ignore -// =================================================================================================== - -/** - * @package Kaltura - * @subpackage Client - */ -require_once(dirname(__FILE__) . "/../KalturaClientBase.php"); -require_once(dirname(__FILE__) . "/../KalturaEnums.php"); -require_once(dirname(__FILE__) . "/../KalturaTypes.php"); - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaCuePointStatus -{ - const READY = 1; - const DELETED = 2; -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaCuePointOrderBy -{ - const CREATED_AT_ASC = "+createdAt"; - const PARTNER_SORT_VALUE_ASC = "+partnerSortValue"; - const START_TIME_ASC = "+startTime"; - const UPDATED_AT_ASC = "+updatedAt"; - const CREATED_AT_DESC = "-createdAt"; - const PARTNER_SORT_VALUE_DESC = "-partnerSortValue"; - const START_TIME_DESC = "-startTime"; - const UPDATED_AT_DESC = "-updatedAt"; -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaCuePointType -{ - const AD = "adCuePoint.Ad"; - const ANNOTATION = "annotation.Annotation"; - const CODE = "codeCuePoint.Code"; -} - -/** - * @package Kaltura - * @subpackage Client - */ -abstract class KalturaCuePoint extends KalturaObjectBase -{ - /** - * - * - * @var string - * @readonly - */ - public $id = null; - - /** - * - * - * @var KalturaCuePointType - * @readonly - */ - public $cuePointType = null; - - /** - * - * - * @var KalturaCuePointStatus - * @readonly - */ - public $status = null; - - /** - * - * - * @var string - * @insertonly - */ - public $entryId = null; - - /** - * - * - * @var int - * @readonly - */ - public $partnerId = null; - - /** - * - * - * @var int - * @readonly - */ - public $createdAt = null; - - /** - * - * - * @var int - * @readonly - */ - public $updatedAt = null; - - /** - * - * - * @var string - */ - public $tags = null; - - /** - * Start time in milliseconds - * - * - * @var int - */ - public $startTime = null; - - /** - * - * - * @var string - * @readonly - */ - public $userId = null; - - /** - * - * - * @var string - */ - public $partnerData = null; - - /** - * - * - * @var int - */ - public $partnerSortValue = null; - - /** - * - * - * @var KalturaNullableBoolean - */ - public $forceStop = null; - - /** - * - * - * @var int - */ - public $thumbOffset = null; - - /** - * - * - * @var string - */ - public $systemName = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaCuePointListResponse extends KalturaObjectBase -{ - /** - * - * - * @var array of KalturaCuePoint - * @readonly - */ - public $objects; - - /** - * - * - * @var int - * @readonly - */ - public $totalCount = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -abstract class KalturaCuePointBaseFilter extends KalturaFilter -{ - /** - * - * - * @var string - */ - public $idEqual = null; - - /** - * - * - * @var string - */ - public $idIn = null; - - /** - * - * - * @var KalturaCuePointType - */ - public $cuePointTypeEqual = null; - - /** - * - * - * @var string - */ - public $cuePointTypeIn = null; - - /** - * - * - * @var KalturaCuePointStatus - */ - public $statusEqual = null; - - /** - * - * - * @var string - */ - public $statusIn = null; - - /** - * - * - * @var string - */ - public $entryIdEqual = null; - - /** - * - * - * @var string - */ - public $entryIdIn = null; - - /** - * - * - * @var int - */ - public $createdAtGreaterThanOrEqual = null; - - /** - * - * - * @var int - */ - public $createdAtLessThanOrEqual = null; - - /** - * - * - * @var int - */ - public $updatedAtGreaterThanOrEqual = null; - - /** - * - * - * @var int - */ - public $updatedAtLessThanOrEqual = null; - - /** - * - * - * @var string - */ - public $tagsLike = null; - - /** - * - * - * @var string - */ - public $tagsMultiLikeOr = null; - - /** - * - * - * @var string - */ - public $tagsMultiLikeAnd = null; - - /** - * - * - * @var int - */ - public $startTimeGreaterThanOrEqual = null; - - /** - * - * - * @var int - */ - public $startTimeLessThanOrEqual = null; - - /** - * - * - * @var string - */ - public $userIdEqual = null; - - /** - * - * - * @var string - */ - public $userIdIn = null; - - /** - * - * - * @var int - */ - public $partnerSortValueEqual = null; - - /** - * - * - * @var string - */ - public $partnerSortValueIn = null; - - /** - * - * - * @var int - */ - public $partnerSortValueGreaterThanOrEqual = null; - - /** - * - * - * @var int - */ - public $partnerSortValueLessThanOrEqual = null; - - /** - * - * - * @var KalturaNullableBoolean - */ - public $forceStopEqual = null; - - /** - * - * - * @var string - */ - public $systemNameEqual = null; - - /** - * - * - * @var string - */ - public $systemNameIn = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaCuePointFilter extends KalturaCuePointBaseFilter -{ - -} - - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaCuePointService extends KalturaServiceBase -{ - function __construct(KalturaClient $client = null) - { - parent::__construct($client); - } - - /** - * Allows you to add an cue point object associated with an entry - * - * @param KalturaCuePoint $cuePoint - * @return KalturaCuePoint - */ - function add(KalturaCuePoint $cuePoint) - { - $kparams = array(); - $this->client->addParam($kparams, "cuePoint", $cuePoint->toParams()); - $this->client->queueServiceActionCall("cuepoint_cuepoint", "add", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaCuePoint"); - return $resultObject; - } - - /** - * Allows you to add multiple cue points objects by uploading XML that contains multiple cue point definitions - * - * @param file $fileData - * @return KalturaCuePointListResponse - */ - function addFromBulk($fileData) - { - $kparams = array(); - $kfiles = array(); - $this->client->addParam($kfiles, "fileData", $fileData); - $this->client->queueServiceActionCall("cuepoint_cuepoint", "addFromBulk", $kparams, $kfiles); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaCuePointListResponse"); - return $resultObject; - } - - /** - * Download multiple cue points objects as XML definitions - * - * @param KalturaCuePointFilter $filter - * @param KalturaFilterPager $pager - * @return file - */ - function serveBulk(KalturaCuePointFilter $filter = null, KalturaFilterPager $pager = null) - { - $kparams = array(); - if ($filter !== null) - $this->client->addParam($kparams, "filter", $filter->toParams()); - if ($pager !== null) - $this->client->addParam($kparams, "pager", $pager->toParams()); - $this->client->queueServiceActionCall("cuepoint_cuepoint", "serveBulk", $kparams); - if(!$this->client->getDestinationPath() && !$this->client->getReturnServedResult()) - return $this->client->getServeUrl(); - return $this->client->doQueue(); - } - - /** - * Retrieve an CuePoint object by id - * - * @param string $id - * @return KalturaCuePoint - */ - function get($id) - { - $kparams = array(); - $this->client->addParam($kparams, "id", $id); - $this->client->queueServiceActionCall("cuepoint_cuepoint", "get", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaCuePoint"); - return $resultObject; - } - - /** - * List cue point objects by filter and pager - * - * @param KalturaCuePointFilter $filter - * @param KalturaFilterPager $pager - * @return KalturaCuePointListResponse - */ - function listAction(KalturaCuePointFilter $filter = null, KalturaFilterPager $pager = null) - { - $kparams = array(); - if ($filter !== null) - $this->client->addParam($kparams, "filter", $filter->toParams()); - if ($pager !== null) - $this->client->addParam($kparams, "pager", $pager->toParams()); - $this->client->queueServiceActionCall("cuepoint_cuepoint", "list", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaCuePointListResponse"); - return $resultObject; - } - - /** - * Count cue point objects by filter - * - * @param KalturaCuePointFilter $filter - * @return int - */ - function count(KalturaCuePointFilter $filter = null) - { - $kparams = array(); - if ($filter !== null) - $this->client->addParam($kparams, "filter", $filter->toParams()); - $this->client->queueServiceActionCall("cuepoint_cuepoint", "count", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "integer"); - return $resultObject; - } - - /** - * Update cue point by id - * - * @param string $id - * @param KalturaCuePoint $cuePoint - * @return KalturaCuePoint - */ - function update($id, KalturaCuePoint $cuePoint) - { - $kparams = array(); - $this->client->addParam($kparams, "id", $id); - $this->client->addParam($kparams, "cuePoint", $cuePoint->toParams()); - $this->client->queueServiceActionCall("cuepoint_cuepoint", "update", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaCuePoint"); - return $resultObject; - } - - /** - * Delete cue point by id, and delete all children cue points - * - * @param string $id - * @return - */ - function delete($id) - { - $kparams = array(); - $this->client->addParam($kparams, "id", $id); - $this->client->queueServiceActionCall("cuepoint_cuepoint", "delete", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "null"); - return $resultObject; - } -} -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaCuePointClientPlugin extends KalturaClientPlugin -{ - /** - * @var KalturaCuePointService - */ - public $cuePoint = null; - - protected function __construct(KalturaClient $client) - { - parent::__construct($client); - $this->cuePoint = new KalturaCuePointService($client); - } - - /** - * @return KalturaCuePointClientPlugin - */ - public static function get(KalturaClient $client) - { - return new KalturaCuePointClientPlugin($client); - } - - /** - * @return array - */ - public function getServices() - { - $services = array( - 'cuePoint' => $this->cuePoint, - ); - return $services; - } - - /** - * @return string - */ - public function getName() - { - return 'cuePoint'; - } -} - diff --git a/local/kaltura/API/KalturaPlugins/KalturaDocumentClientPlugin.php b/local/kaltura/API/KalturaPlugins/KalturaDocumentClientPlugin.php deleted file mode 100644 index b4ef635d2a2fc..0000000000000 --- a/local/kaltura/API/KalturaPlugins/KalturaDocumentClientPlugin.php +++ /dev/null @@ -1,944 +0,0 @@ -. -// -// @ignore -// =================================================================================================== - -/** - * @package Kaltura - * @subpackage Client - */ -require_once(dirname(__FILE__) . "/../KalturaClientBase.php"); -require_once(dirname(__FILE__) . "/../KalturaEnums.php"); -require_once(dirname(__FILE__) . "/../KalturaTypes.php"); - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaDocumentType -{ - const DOCUMENT = 11; - const SWF = 12; - const PDF = 13; -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaDocumentEntryOrderBy -{ - const CREATED_AT_ASC = "+createdAt"; - const END_DATE_ASC = "+endDate"; - const MODERATION_COUNT_ASC = "+moderationCount"; - const NAME_ASC = "+name"; - const PARTNER_SORT_VALUE_ASC = "+partnerSortValue"; - const RANK_ASC = "+rank"; - const RECENT_ASC = "+recent"; - const START_DATE_ASC = "+startDate"; - const TOTAL_RANK_ASC = "+totalRank"; - const UPDATED_AT_ASC = "+updatedAt"; - const WEIGHT_ASC = "+weight"; - const CREATED_AT_DESC = "-createdAt"; - const END_DATE_DESC = "-endDate"; - const MODERATION_COUNT_DESC = "-moderationCount"; - const NAME_DESC = "-name"; - const PARTNER_SORT_VALUE_DESC = "-partnerSortValue"; - const RANK_DESC = "-rank"; - const RECENT_DESC = "-recent"; - const START_DATE_DESC = "-startDate"; - const TOTAL_RANK_DESC = "-totalRank"; - const UPDATED_AT_DESC = "-updatedAt"; - const WEIGHT_DESC = "-weight"; -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaDocumentFlavorParamsOrderBy -{ -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaDocumentFlavorParamsOutputOrderBy -{ -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaImageFlavorParamsOrderBy -{ -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaImageFlavorParamsOutputOrderBy -{ -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaPdfFlavorParamsOrderBy -{ -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaPdfFlavorParamsOutputOrderBy -{ -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaSwfFlavorParamsOrderBy -{ -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaSwfFlavorParamsOutputOrderBy -{ -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaDocumentEntry extends KalturaBaseEntry -{ - /** - * The type of the document - * - * - * @var KalturaDocumentType - * @insertonly - */ - public $documentType = null; - - /** - * Comma separated asset params ids that exists for this media entry - * - * - * @var string - * @readonly - */ - public $assetParamsIds = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaDocumentListResponse extends KalturaObjectBase -{ - /** - * - * - * @var array of KalturaDocumentEntry - * @readonly - */ - public $objects; - - /** - * - * - * @var int - * @readonly - */ - public $totalCount = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaDocumentFlavorParams extends KalturaFlavorParams -{ - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaImageFlavorParams extends KalturaFlavorParams -{ - /** - * - * - * @var int - */ - public $densityWidth = null; - - /** - * - * - * @var int - */ - public $densityHeight = null; - - /** - * - * - * @var int - */ - public $sizeWidth = null; - - /** - * - * - * @var int - */ - public $sizeHeight = null; - - /** - * - * - * @var int - */ - public $depth = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaPdfFlavorParams extends KalturaFlavorParams -{ - /** - * - * - * @var bool - */ - public $readonly = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaSwfFlavorParams extends KalturaFlavorParams -{ - /** - * - * - * @var int - */ - public $flashVersion = null; - - /** - * - * - * @var bool - */ - public $poly2Bitmap = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -abstract class KalturaDocumentEntryBaseFilter extends KalturaBaseEntryFilter -{ - /** - * - * - * @var KalturaDocumentType - */ - public $documentTypeEqual = null; - - /** - * - * - * @var string - */ - public $documentTypeIn = null; - - /** - * - * - * @var string - */ - public $assetParamsIdsMatchOr = null; - - /** - * - * - * @var string - */ - public $assetParamsIdsMatchAnd = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaDocumentFlavorParamsOutput extends KalturaFlavorParamsOutput -{ - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaImageFlavorParamsOutput extends KalturaFlavorParamsOutput -{ - /** - * - * - * @var int - */ - public $densityWidth = null; - - /** - * - * - * @var int - */ - public $densityHeight = null; - - /** - * - * - * @var int - */ - public $sizeWidth = null; - - /** - * - * - * @var int - */ - public $sizeHeight = null; - - /** - * - * - * @var int - */ - public $depth = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaPdfFlavorParamsOutput extends KalturaFlavorParamsOutput -{ - /** - * - * - * @var bool - */ - public $readonly = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaSwfFlavorParamsOutput extends KalturaFlavorParamsOutput -{ - /** - * - * - * @var int - */ - public $flashVersion = null; - - /** - * - * - * @var bool - */ - public $poly2Bitmap = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaDocumentEntryFilter extends KalturaDocumentEntryBaseFilter -{ - -} - -/** - * @package Kaltura - * @subpackage Client - */ -abstract class KalturaDocumentFlavorParamsBaseFilter extends KalturaFlavorParamsFilter -{ - -} - -/** - * @package Kaltura - * @subpackage Client - */ -abstract class KalturaImageFlavorParamsBaseFilter extends KalturaFlavorParamsFilter -{ - -} - -/** - * @package Kaltura - * @subpackage Client - */ -abstract class KalturaPdfFlavorParamsBaseFilter extends KalturaFlavorParamsFilter -{ - -} - -/** - * @package Kaltura - * @subpackage Client - */ -abstract class KalturaSwfFlavorParamsBaseFilter extends KalturaFlavorParamsFilter -{ - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaDocumentFlavorParamsFilter extends KalturaDocumentFlavorParamsBaseFilter -{ - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaImageFlavorParamsFilter extends KalturaImageFlavorParamsBaseFilter -{ - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaPdfFlavorParamsFilter extends KalturaPdfFlavorParamsBaseFilter -{ - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaSwfFlavorParamsFilter extends KalturaSwfFlavorParamsBaseFilter -{ - -} - -/** - * @package Kaltura - * @subpackage Client - */ -abstract class KalturaDocumentFlavorParamsOutputBaseFilter extends KalturaFlavorParamsOutputFilter -{ - -} - -/** - * @package Kaltura - * @subpackage Client - */ -abstract class KalturaImageFlavorParamsOutputBaseFilter extends KalturaFlavorParamsOutputFilter -{ - -} - -/** - * @package Kaltura - * @subpackage Client - */ -abstract class KalturaPdfFlavorParamsOutputBaseFilter extends KalturaFlavorParamsOutputFilter -{ - -} - -/** - * @package Kaltura - * @subpackage Client - */ -abstract class KalturaSwfFlavorParamsOutputBaseFilter extends KalturaFlavorParamsOutputFilter -{ - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaDocumentFlavorParamsOutputFilter extends KalturaDocumentFlavorParamsOutputBaseFilter -{ - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaImageFlavorParamsOutputFilter extends KalturaImageFlavorParamsOutputBaseFilter -{ - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaPdfFlavorParamsOutputFilter extends KalturaPdfFlavorParamsOutputBaseFilter -{ - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaSwfFlavorParamsOutputFilter extends KalturaSwfFlavorParamsOutputBaseFilter -{ - -} - - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaDocumentsService extends KalturaServiceBase -{ - function __construct(KalturaClient $client = null) - { - parent::__construct($client); - } - - /** - * Add new document entry after the specific document file was uploaded and the upload token id exists - * - * @param KalturaDocumentEntry $documentEntry Document entry metadata - * @param string $uploadTokenId Upload token id - * @return KalturaDocumentEntry - */ - function addFromUploadedFile(KalturaDocumentEntry $documentEntry, $uploadTokenId) - { - $kparams = array(); - $this->client->addParam($kparams, "documentEntry", $documentEntry->toParams()); - $this->client->addParam($kparams, "uploadTokenId", $uploadTokenId); - $this->client->queueServiceActionCall("document_documents", "addFromUploadedFile", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaDocumentEntry"); - return $resultObject; - } - - /** - * Copy entry into new entry - * - * @param string $sourceEntryId Document entry id to copy from - * @param KalturaDocumentEntry $documentEntry Document entry metadata - * @param int $sourceFlavorParamsId The flavor to be used as the new entry source, source flavor will be used if not specified - * @return KalturaDocumentEntry - */ - function addFromEntry($sourceEntryId, KalturaDocumentEntry $documentEntry = null, $sourceFlavorParamsId = null) - { - $kparams = array(); - $this->client->addParam($kparams, "sourceEntryId", $sourceEntryId); - if ($documentEntry !== null) - $this->client->addParam($kparams, "documentEntry", $documentEntry->toParams()); - $this->client->addParam($kparams, "sourceFlavorParamsId", $sourceFlavorParamsId); - $this->client->queueServiceActionCall("document_documents", "addFromEntry", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaDocumentEntry"); - return $resultObject; - } - - /** - * Copy flavor asset into new entry - * - * @param string $sourceFlavorAssetId Flavor asset id to be used as the new entry source - * @param KalturaDocumentEntry $documentEntry Document entry metadata - * @return KalturaDocumentEntry - */ - function addFromFlavorAsset($sourceFlavorAssetId, KalturaDocumentEntry $documentEntry = null) - { - $kparams = array(); - $this->client->addParam($kparams, "sourceFlavorAssetId", $sourceFlavorAssetId); - if ($documentEntry !== null) - $this->client->addParam($kparams, "documentEntry", $documentEntry->toParams()); - $this->client->queueServiceActionCall("document_documents", "addFromFlavorAsset", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaDocumentEntry"); - return $resultObject; - } - - /** - * Convert entry - * - * @param string $entryId Document entry id - * @param int $conversionProfileId - * @param array $dynamicConversionAttributes - * @return int - */ - function convert($entryId, $conversionProfileId = null, array $dynamicConversionAttributes = null) - { - $kparams = array(); - $this->client->addParam($kparams, "entryId", $entryId); - $this->client->addParam($kparams, "conversionProfileId", $conversionProfileId); - if ($dynamicConversionAttributes !== null) - foreach($dynamicConversionAttributes as $index => $obj) - { - $this->client->addParam($kparams, "dynamicConversionAttributes:$index", $obj->toParams()); - } - $this->client->queueServiceActionCall("document_documents", "convert", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "integer"); - return $resultObject; - } - - /** - * Get document entry by ID. - * - * @param string $entryId Document entry id - * @param int $version Desired version of the data - * @return KalturaDocumentEntry - */ - function get($entryId, $version = -1) - { - $kparams = array(); - $this->client->addParam($kparams, "entryId", $entryId); - $this->client->addParam($kparams, "version", $version); - $this->client->queueServiceActionCall("document_documents", "get", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaDocumentEntry"); - return $resultObject; - } - - /** - * Update document entry. Only the properties that were set will be updated. - * - * @param string $entryId Document entry id to update - * @param KalturaDocumentEntry $documentEntry Document entry metadata to update - * @return KalturaDocumentEntry - */ - function update($entryId, KalturaDocumentEntry $documentEntry) - { - $kparams = array(); - $this->client->addParam($kparams, "entryId", $entryId); - $this->client->addParam($kparams, "documentEntry", $documentEntry->toParams()); - $this->client->queueServiceActionCall("document_documents", "update", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaDocumentEntry"); - return $resultObject; - } - - /** - * Delete a document entry. - * - * @param string $entryId Document entry id to delete - * @return - */ - function delete($entryId) - { - $kparams = array(); - $this->client->addParam($kparams, "entryId", $entryId); - $this->client->queueServiceActionCall("document_documents", "delete", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "null"); - return $resultObject; - } - - /** - * List document entries by filter with paging support. - * - * @param KalturaDocumentEntryFilter $filter Document entry filter - * @param KalturaFilterPager $pager Pager - * @return KalturaDocumentListResponse - */ - function listAction(KalturaDocumentEntryFilter $filter = null, KalturaFilterPager $pager = null) - { - $kparams = array(); - if ($filter !== null) - $this->client->addParam($kparams, "filter", $filter->toParams()); - if ($pager !== null) - $this->client->addParam($kparams, "pager", $pager->toParams()); - $this->client->queueServiceActionCall("document_documents", "list", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaDocumentListResponse"); - return $resultObject; - } - - /** - * Upload a document file to Kaltura, then the file can be used to create a document entry. - * - * @param file $fileData The file data - * @return string - */ - function upload($fileData) - { - $kparams = array(); - $kfiles = array(); - $this->client->addParam($kfiles, "fileData", $fileData); - $this->client->queueServiceActionCall("document_documents", "upload", $kparams, $kfiles); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "string"); - return $resultObject; - } - - /** - * This will queue a batch job for converting the document file to swf - Returns the URL where the new swf will be available - * - * @param string $entryId - * @return string - */ - function convertPptToSwf($entryId) - { - $kparams = array(); - $this->client->addParam($kparams, "entryId", $entryId); - $this->client->queueServiceActionCall("document_documents", "convertPptToSwf", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "string"); - return $resultObject; - } - - /** - * Serves the file content - * - * @param string $entryId Document entry id - * @param string $flavorAssetId Flavor asset id - * @param bool $forceProxy Force to get the content without redirect - * @return file - */ - function serve($entryId, $flavorAssetId = null, $forceProxy = false) - { - $kparams = array(); - $this->client->addParam($kparams, "entryId", $entryId); - $this->client->addParam($kparams, "flavorAssetId", $flavorAssetId); - $this->client->addParam($kparams, "forceProxy", $forceProxy); - $this->client->queueServiceActionCall("document_documents", "serve", $kparams); - if(!$this->client->getDestinationPath() && !$this->client->getReturnServedResult()) - return $this->client->getServeUrl(); - return $this->client->doQueue(); - } - - /** - * Serves the file content - * - * @param string $entryId Document entry id - * @param string $flavorParamsId Flavor params id - * @param bool $forceProxy Force to get the content without redirect - * @return file - */ - function serveByFlavorParamsId($entryId, $flavorParamsId = null, $forceProxy = false) - { - $kparams = array(); - $this->client->addParam($kparams, "entryId", $entryId); - $this->client->addParam($kparams, "flavorParamsId", $flavorParamsId); - $this->client->addParam($kparams, "forceProxy", $forceProxy); - $this->client->queueServiceActionCall("document_documents", "serveByFlavorParamsId", $kparams); - if(!$this->client->getDestinationPath() && !$this->client->getReturnServedResult()) - return $this->client->getServeUrl(); - return $this->client->doQueue(); - } - - /** - * Replace content associated with the given document entry. - * - * @param string $entryId Document entry id to update - * @param KalturaResource $resource Resource to be used to replace entry doc content - * @param int $conversionProfileId The conversion profile id to be used on the entry - * @return KalturaDocumentEntry - */ - function updateContent($entryId, KalturaResource $resource, $conversionProfileId = null) - { - $kparams = array(); - $this->client->addParam($kparams, "entryId", $entryId); - $this->client->addParam($kparams, "resource", $resource->toParams()); - $this->client->addParam($kparams, "conversionProfileId", $conversionProfileId); - $this->client->queueServiceActionCall("document_documents", "updateContent", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaDocumentEntry"); - return $resultObject; - } - - /** - * Approves document replacement - * - * @param string $entryId Document entry id to replace - * @return KalturaDocumentEntry - */ - function approveReplace($entryId) - { - $kparams = array(); - $this->client->addParam($kparams, "entryId", $entryId); - $this->client->queueServiceActionCall("document_documents", "approveReplace", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaDocumentEntry"); - return $resultObject; - } - - /** - * Cancels document replacement - * - * @param string $entryId Document entry id to cancel - * @return KalturaDocumentEntry - */ - function cancelReplace($entryId) - { - $kparams = array(); - $this->client->addParam($kparams, "entryId", $entryId); - $this->client->queueServiceActionCall("document_documents", "cancelReplace", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaDocumentEntry"); - return $resultObject; - } -} -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaDocumentClientPlugin extends KalturaClientPlugin -{ - /** - * @var KalturaDocumentsService - */ - public $documents = null; - - protected function __construct(KalturaClient $client) - { - parent::__construct($client); - $this->documents = new KalturaDocumentsService($client); - } - - /** - * @return KalturaDocumentClientPlugin - */ - public static function get(KalturaClient $client) - { - return new KalturaDocumentClientPlugin($client); - } - - /** - * @return array - */ - public function getServices() - { - $services = array( - 'documents' => $this->documents, - ); - return $services; - } - - /** - * @return string - */ - public function getName() - { - return 'document'; - } -} - diff --git a/local/kaltura/API/KalturaPlugins/KalturaDrmClientPlugin.php b/local/kaltura/API/KalturaPlugins/KalturaDrmClientPlugin.php deleted file mode 100644 index f4ed99398a7af..0000000000000 --- a/local/kaltura/API/KalturaPlugins/KalturaDrmClientPlugin.php +++ /dev/null @@ -1,434 +0,0 @@ -. -// -// @ignore -// =================================================================================================== - -/** - * @package Kaltura - * @subpackage Client - */ -require_once(dirname(__FILE__) . "/../KalturaClientBase.php"); -require_once(dirname(__FILE__) . "/../KalturaEnums.php"); -require_once(dirname(__FILE__) . "/../KalturaTypes.php"); - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaDrmProfileStatus -{ - const ACTIVE = 1; - const DELETED = 2; -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaDrmProfileOrderBy -{ - const ID_ASC = "+id"; - const NAME_ASC = "+name"; - const ID_DESC = "-id"; - const NAME_DESC = "-name"; -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaDrmProviderType -{ - const WIDEVINE = "widevine.WIDEVINE"; -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaDrmProfile extends KalturaObjectBase -{ - /** - * - * - * @var int - * @readonly - */ - public $id = null; - - /** - * - * - * @var int - * @insertonly - */ - public $partnerId = null; - - /** - * - * - * @var string - */ - public $name = null; - - /** - * - * - * @var string - */ - public $description = null; - - /** - * - * - * @var KalturaDrmProviderType - */ - public $provider = null; - - /** - * - * - * @var KalturaDrmProfileStatus - */ - public $status = null; - - /** - * - * - * @var string - */ - public $licenseServerUrl = null; - - /** - * - * - * @var string - */ - public $defaultPolicy = null; - - /** - * - * - * @var int - * @readonly - */ - public $createdAt = null; - - /** - * - * - * @var int - * @readonly - */ - public $updatedAt = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaDrmProfileListResponse extends KalturaObjectBase -{ - /** - * - * - * @var array of KalturaDrmProfile - * @readonly - */ - public $objects; - - /** - * - * - * @var int - * @readonly - */ - public $totalCount = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -abstract class KalturaDrmProfileBaseFilter extends KalturaFilter -{ - /** - * - * - * @var int - */ - public $idEqual = null; - - /** - * - * - * @var string - */ - public $idIn = null; - - /** - * - * - * @var int - */ - public $partnerIdEqual = null; - - /** - * - * - * @var string - */ - public $partnerIdIn = null; - - /** - * - * - * @var string - */ - public $nameLike = null; - - /** - * - * - * @var KalturaDrmProviderType - */ - public $providerEqual = null; - - /** - * - * - * @var string - */ - public $providerIn = null; - - /** - * - * - * @var KalturaDrmProfileStatus - */ - public $statusEqual = null; - - /** - * - * - * @var string - */ - public $statusIn = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaDrmProfileFilter extends KalturaDrmProfileBaseFilter -{ - -} - - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaDrmProfileService extends KalturaServiceBase -{ - function __construct(KalturaClient $client = null) - { - parent::__construct($client); - } - - /** - * Allows you to add a new DrmProfile object - * - * @param KalturaDrmProfile $drmProfile - * @return KalturaDrmProfile - */ - function add(KalturaDrmProfile $drmProfile) - { - $kparams = array(); - $this->client->addParam($kparams, "drmProfile", $drmProfile->toParams()); - $this->client->queueServiceActionCall("drm_drmprofile", "add", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaDrmProfile"); - return $resultObject; - } - - /** - * Retrieve a KalturaDrmProfile object by ID - * - * @param int $drmProfileId - * @return KalturaDrmProfile - */ - function get($drmProfileId) - { - $kparams = array(); - $this->client->addParam($kparams, "drmProfileId", $drmProfileId); - $this->client->queueServiceActionCall("drm_drmprofile", "get", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaDrmProfile"); - return $resultObject; - } - - /** - * Update an existing KalturaDrmProfile object - * - * @param int $drmProfileId - * @param KalturaDrmProfile $drmProfile Id - * @return KalturaDrmProfile - */ - function update($drmProfileId, KalturaDrmProfile $drmProfile) - { - $kparams = array(); - $this->client->addParam($kparams, "drmProfileId", $drmProfileId); - $this->client->addParam($kparams, "drmProfile", $drmProfile->toParams()); - $this->client->queueServiceActionCall("drm_drmprofile", "update", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaDrmProfile"); - return $resultObject; - } - - /** - * Mark the KalturaDrmProfile object as deleted - * - * @param int $drmProfileId - * @return KalturaDrmProfile - */ - function delete($drmProfileId) - { - $kparams = array(); - $this->client->addParam($kparams, "drmProfileId", $drmProfileId); - $this->client->queueServiceActionCall("drm_drmprofile", "delete", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaDrmProfile"); - return $resultObject; - } - - /** - * List KalturaDrmProfile objects - * - * @param KalturaDrmProfileFilter $filter - * @param KalturaFilterPager $pager - * @return KalturaDrmProfileListResponse - */ - function listAction(KalturaDrmProfileFilter $filter = null, KalturaFilterPager $pager = null) - { - $kparams = array(); - if ($filter !== null) - $this->client->addParam($kparams, "filter", $filter->toParams()); - if ($pager !== null) - $this->client->addParam($kparams, "pager", $pager->toParams()); - $this->client->queueServiceActionCall("drm_drmprofile", "list", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaDrmProfileListResponse"); - return $resultObject; - } - - /** - * Retrieve a KalturaDrmProfile object by provider, if no specific profile defined return default profile - * - * @param string $provider - * @return KalturaDrmProfile - */ - function getByProvider($provider) - { - $kparams = array(); - $this->client->addParam($kparams, "provider", $provider); - $this->client->queueServiceActionCall("drm_drmprofile", "getByProvider", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaDrmProfile"); - return $resultObject; - } -} -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaDrmClientPlugin extends KalturaClientPlugin -{ - /** - * @var KalturaDrmProfileService - */ - public $drmProfile = null; - - protected function __construct(KalturaClient $client) - { - parent::__construct($client); - $this->drmProfile = new KalturaDrmProfileService($client); - } - - /** - * @return KalturaDrmClientPlugin - */ - public static function get(KalturaClient $client) - { - return new KalturaDrmClientPlugin($client); - } - - /** - * @return array - */ - public function getServices() - { - $services = array( - 'drmProfile' => $this->drmProfile, - ); - return $services; - } - - /** - * @return string - */ - public function getName() - { - return 'drm'; - } -} - diff --git a/local/kaltura/API/KalturaPlugins/KalturaDropFolderClientPlugin.php b/local/kaltura/API/KalturaPlugins/KalturaDropFolderClientPlugin.php deleted file mode 100644 index 9abc8fc3db924..0000000000000 --- a/local/kaltura/API/KalturaPlugins/KalturaDropFolderClientPlugin.php +++ /dev/null @@ -1,1777 +0,0 @@ -. -// -// @ignore -// =================================================================================================== - -/** - * @package Kaltura - * @subpackage Client - */ -require_once(dirname(__FILE__) . "/../KalturaClientBase.php"); -require_once(dirname(__FILE__) . "/../KalturaEnums.php"); -require_once(dirname(__FILE__) . "/../KalturaTypes.php"); - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaDropFolderContentFileHandlerMatchPolicy -{ - const ADD_AS_NEW = 1; - const MATCH_EXISTING_OR_ADD_AS_NEW = 2; - const MATCH_EXISTING_OR_KEEP_IN_FOLDER = 3; -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaDropFolderFileDeletePolicy -{ - const MANUAL_DELETE = 1; - const AUTO_DELETE = 2; -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaDropFolderFileStatus -{ - const UPLOADING = 1; - const PENDING = 2; - const WAITING = 3; - const HANDLED = 4; - const IGNORE = 5; - const DELETED = 6; - const PURGED = 7; - const NO_MATCH = 8; - const ERROR_HANDLING = 9; - const ERROR_DELETING = 10; - const DOWNLOADING = 11; - const ERROR_DOWNLOADING = 12; - const PROCESSING = 13; - const PARSED = 14; - const DETECTED = 15; -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaDropFolderStatus -{ - const DISABLED = 0; - const ENABLED = 1; - const DELETED = 2; - const ERROR = 3; -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaDropFolderErrorCode -{ - const ERROR_CONNECT = "1"; - const ERROR_AUTENTICATE = "2"; - const ERROR_GET_PHISICAL_FILE_LIST = "3"; - const ERROR_GET_DB_FILE_LIST = "4"; - const DROP_FOLDER_APP_ERROR = "5"; - const CONTENT_MATCH_POLICY_UNDEFINED = "6"; -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaDropFolderFileErrorCode -{ - const ERROR_ADDING_BULK_UPLOAD = "dropFolderXmlBulkUpload.ERROR_ADDING_BULK_UPLOAD"; - const ERROR_ADD_CONTENT_RESOURCE = "dropFolderXmlBulkUpload.ERROR_ADD_CONTENT_RESOURCE"; - const ERROR_IN_BULK_UPLOAD = "dropFolderXmlBulkUpload.ERROR_IN_BULK_UPLOAD"; - const ERROR_WRITING_TEMP_FILE = "dropFolderXmlBulkUpload.ERROR_WRITING_TEMP_FILE"; - const LOCAL_FILE_WRONG_CHECKSUM = "dropFolderXmlBulkUpload.LOCAL_FILE_WRONG_CHECKSUM"; - const LOCAL_FILE_WRONG_SIZE = "dropFolderXmlBulkUpload.LOCAL_FILE_WRONG_SIZE"; - const MALFORMED_XML_FILE = "dropFolderXmlBulkUpload.MALFORMED_XML_FILE"; - const XML_FILE_SIZE_EXCEED_LIMIT = "dropFolderXmlBulkUpload.XML_FILE_SIZE_EXCEED_LIMIT"; - const ERROR_UPDATE_ENTRY = "1"; - const ERROR_ADD_ENTRY = "2"; - const FLAVOR_NOT_FOUND = "3"; - const FLAVOR_MISSING_IN_FILE_NAME = "4"; - const SLUG_REGEX_NO_MATCH = "5"; - const ERROR_READING_FILE = "6"; - const ERROR_DOWNLOADING_FILE = "7"; - const ERROR_UPDATE_FILE = "8"; - const ERROR_ADDING_CONTENT_PROCESSOR = "10"; - const ERROR_IN_CONTENT_PROCESSOR = "11"; - const ERROR_DELETING_FILE = "12"; - const FILE_NO_MATCH = "13"; -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaDropFolderFileHandlerType -{ - const XML = "dropFolderXmlBulkUpload.XML"; - const CONTENT = "1"; -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaDropFolderFileOrderBy -{ - const CREATED_AT_ASC = "+createdAt"; - const FILE_NAME_ASC = "+fileName"; - const FILE_SIZE_ASC = "+fileSize"; - const FILE_SIZE_LAST_SET_AT_ASC = "+fileSizeLastSetAt"; - const ID_ASC = "+id"; - const PARSED_FLAVOR_ASC = "+parsedFlavor"; - const PARSED_SLUG_ASC = "+parsedSlug"; - const UPDATED_AT_ASC = "+updatedAt"; - const CREATED_AT_DESC = "-createdAt"; - const FILE_NAME_DESC = "-fileName"; - const FILE_SIZE_DESC = "-fileSize"; - const FILE_SIZE_LAST_SET_AT_DESC = "-fileSizeLastSetAt"; - const ID_DESC = "-id"; - const PARSED_FLAVOR_DESC = "-parsedFlavor"; - const PARSED_SLUG_DESC = "-parsedSlug"; - const UPDATED_AT_DESC = "-updatedAt"; -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaDropFolderOrderBy -{ - const CREATED_AT_ASC = "+createdAt"; - const ID_ASC = "+id"; - const NAME_ASC = "+name"; - const UPDATED_AT_ASC = "+updatedAt"; - const CREATED_AT_DESC = "-createdAt"; - const ID_DESC = "-id"; - const NAME_DESC = "-name"; - const UPDATED_AT_DESC = "-updatedAt"; -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaDropFolderType -{ - const WEBEX = "WebexDropFolder.WEBEX"; - const LOCAL = "1"; - const FTP = "2"; - const SCP = "3"; - const SFTP = "4"; - const S3 = "6"; -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaFtpDropFolderOrderBy -{ - const CREATED_AT_ASC = "+createdAt"; - const ID_ASC = "+id"; - const NAME_ASC = "+name"; - const UPDATED_AT_ASC = "+updatedAt"; - const CREATED_AT_DESC = "-createdAt"; - const ID_DESC = "-id"; - const NAME_DESC = "-name"; - const UPDATED_AT_DESC = "-updatedAt"; -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaRemoteDropFolderOrderBy -{ - const CREATED_AT_ASC = "+createdAt"; - const ID_ASC = "+id"; - const NAME_ASC = "+name"; - const UPDATED_AT_ASC = "+updatedAt"; - const CREATED_AT_DESC = "-createdAt"; - const ID_DESC = "-id"; - const NAME_DESC = "-name"; - const UPDATED_AT_DESC = "-updatedAt"; -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaScpDropFolderOrderBy -{ - const CREATED_AT_ASC = "+createdAt"; - const ID_ASC = "+id"; - const NAME_ASC = "+name"; - const UPDATED_AT_ASC = "+updatedAt"; - const CREATED_AT_DESC = "-createdAt"; - const ID_DESC = "-id"; - const NAME_DESC = "-name"; - const UPDATED_AT_DESC = "-updatedAt"; -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaSftpDropFolderOrderBy -{ - const CREATED_AT_ASC = "+createdAt"; - const ID_ASC = "+id"; - const NAME_ASC = "+name"; - const UPDATED_AT_ASC = "+updatedAt"; - const CREATED_AT_DESC = "-createdAt"; - const ID_DESC = "-id"; - const NAME_DESC = "-name"; - const UPDATED_AT_DESC = "-updatedAt"; -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaSshDropFolderOrderBy -{ - const CREATED_AT_ASC = "+createdAt"; - const ID_ASC = "+id"; - const NAME_ASC = "+name"; - const UPDATED_AT_ASC = "+updatedAt"; - const CREATED_AT_DESC = "-createdAt"; - const ID_DESC = "-id"; - const NAME_DESC = "-name"; - const UPDATED_AT_DESC = "-updatedAt"; -} - -/** - * @package Kaltura - * @subpackage Client - */ -abstract class KalturaDropFolderFileHandlerConfig extends KalturaObjectBase -{ - /** - * - * - * @var KalturaDropFolderFileHandlerType - * @readonly - */ - public $handlerType = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaDropFolder extends KalturaObjectBase -{ - /** - * - * - * @var int - * @readonly - */ - public $id = null; - - /** - * - * - * @var int - * @insertonly - */ - public $partnerId = null; - - /** - * - * - * @var string - */ - public $name = null; - - /** - * - * - * @var string - */ - public $description = null; - - /** - * - * - * @var KalturaDropFolderType - */ - public $type = null; - - /** - * - * - * @var KalturaDropFolderStatus - */ - public $status = null; - - /** - * - * - * @var int - */ - public $conversionProfileId = null; - - /** - * - * - * @var int - */ - public $dc = null; - - /** - * - * - * @var string - */ - public $path = null; - - /** - * The ammount of time, in seconds, that should pass so that a file with no change in size we'll be treated as "finished uploading to folder" - * - * - * @var int - */ - public $fileSizeCheckInterval = null; - - /** - * - * - * @var KalturaDropFolderFileDeletePolicy - */ - public $fileDeletePolicy = null; - - /** - * - * - * @var int - */ - public $autoFileDeleteDays = null; - - /** - * - * - * @var KalturaDropFolderFileHandlerType - */ - public $fileHandlerType = null; - - /** - * - * - * @var string - */ - public $fileNamePatterns = null; - - /** - * - * - * @var KalturaDropFolderFileHandlerConfig - */ - public $fileHandlerConfig; - - /** - * - * - * @var string - */ - public $tags = null; - - /** - * - * - * @var KalturaDropFolderErrorCode - */ - public $errorCode = null; - - /** - * - * - * @var string - */ - public $errorDescription = null; - - /** - * - * - * @var string - */ - public $ignoreFileNamePatterns = null; - - /** - * - * - * @var int - * @readonly - */ - public $createdAt = null; - - /** - * - * - * @var int - * @readonly - */ - public $updatedAt = null; - - /** - * - * - * @var int - */ - public $lastAccessedAt = null; - - /** - * - * - * @var bool - */ - public $incremental = null; - - /** - * - * - * @var int - */ - public $lastFileTimestamp = null; - - /** - * - * - * @var int - */ - public $metadataProfileId = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaDropFolderFile extends KalturaObjectBase -{ - /** - * - * - * @var int - * @readonly - */ - public $id = null; - - /** - * - * - * @var int - * @readonly - */ - public $partnerId = null; - - /** - * - * - * @var int - * @insertonly - */ - public $dropFolderId = null; - - /** - * - * - * @var string - * @insertonly - */ - public $fileName = null; - - /** - * - * - * @var float - */ - public $fileSize = null; - - /** - * - * - * @var int - * @readonly - */ - public $fileSizeLastSetAt = null; - - /** - * - * - * @var KalturaDropFolderFileStatus - * @readonly - */ - public $status = null; - - /** - * - * - * @var KalturaDropFolderType - * @readonly - */ - public $type = null; - - /** - * - * - * @var string - */ - public $parsedSlug = null; - - /** - * - * - * @var string - */ - public $parsedFlavor = null; - - /** - * - * - * @var int - */ - public $leadDropFolderFileId = null; - - /** - * - * - * @var int - */ - public $deletedDropFolderFileId = null; - - /** - * - * - * @var string - */ - public $entryId = null; - - /** - * - * - * @var KalturaDropFolderFileErrorCode - */ - public $errorCode = null; - - /** - * - * - * @var string - */ - public $errorDescription = null; - - /** - * - * - * @var string - */ - public $lastModificationTime = null; - - /** - * - * - * @var int - * @readonly - */ - public $createdAt = null; - - /** - * - * - * @var int - * @readonly - */ - public $updatedAt = null; - - /** - * - * - * @var int - */ - public $uploadStartDetectedAt = null; - - /** - * - * - * @var int - */ - public $uploadEndDetectedAt = null; - - /** - * - * - * @var int - */ - public $importStartedAt = null; - - /** - * - * - * @var int - */ - public $importEndedAt = null; - - /** - * - * - * @var int - * @readonly - */ - public $batchJobId = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaDropFolderFileListResponse extends KalturaObjectBase -{ - /** - * - * - * @var array of KalturaDropFolderFile - * @readonly - */ - public $objects; - - /** - * - * - * @var int - * @readonly - */ - public $totalCount = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaDropFolderListResponse extends KalturaObjectBase -{ - /** - * - * - * @var array of KalturaDropFolder - * @readonly - */ - public $objects; - - /** - * - * - * @var int - * @readonly - */ - public $totalCount = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -abstract class KalturaDropFolderBaseFilter extends KalturaFilter -{ - /** - * - * - * @var int - */ - public $idEqual = null; - - /** - * - * - * @var string - */ - public $idIn = null; - - /** - * - * - * @var int - */ - public $partnerIdEqual = null; - - /** - * - * - * @var string - */ - public $partnerIdIn = null; - - /** - * - * - * @var string - */ - public $nameLike = null; - - /** - * - * - * @var KalturaDropFolderType - */ - public $typeEqual = null; - - /** - * - * - * @var string - */ - public $typeIn = null; - - /** - * - * - * @var KalturaDropFolderStatus - */ - public $statusEqual = null; - - /** - * - * - * @var string - */ - public $statusIn = null; - - /** - * - * - * @var int - */ - public $conversionProfileIdEqual = null; - - /** - * - * - * @var string - */ - public $conversionProfileIdIn = null; - - /** - * - * - * @var int - */ - public $dcEqual = null; - - /** - * - * - * @var string - */ - public $dcIn = null; - - /** - * - * - * @var string - */ - public $pathEqual = null; - - /** - * - * - * @var string - */ - public $pathLike = null; - - /** - * - * - * @var KalturaDropFolderFileHandlerType - */ - public $fileHandlerTypeEqual = null; - - /** - * - * - * @var string - */ - public $fileHandlerTypeIn = null; - - /** - * - * - * @var string - */ - public $fileNamePatternsLike = null; - - /** - * - * - * @var string - */ - public $fileNamePatternsMultiLikeOr = null; - - /** - * - * - * @var string - */ - public $fileNamePatternsMultiLikeAnd = null; - - /** - * - * - * @var string - */ - public $tagsLike = null; - - /** - * - * - * @var string - */ - public $tagsMultiLikeOr = null; - - /** - * - * - * @var string - */ - public $tagsMultiLikeAnd = null; - - /** - * - * - * @var KalturaDropFolderErrorCode - */ - public $errorCodeEqual = null; - - /** - * - * - * @var string - */ - public $errorCodeIn = null; - - /** - * - * - * @var int - */ - public $createdAtGreaterThanOrEqual = null; - - /** - * - * - * @var int - */ - public $createdAtLessThanOrEqual = null; - - /** - * - * - * @var int - */ - public $updatedAtGreaterThanOrEqual = null; - - /** - * - * - * @var int - */ - public $updatedAtLessThanOrEqual = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaDropFolderContentFileHandlerConfig extends KalturaDropFolderFileHandlerConfig -{ - /** - * - * - * @var KalturaDropFolderContentFileHandlerMatchPolicy - */ - public $contentMatchPolicy = null; - - /** - * Regular expression that defines valid file names to be handled. - * The following might be extracted from the file name and used if defined: - * - (?P\w+) - will be used as the drop folder file's parsed slug. - * - (?P\w+) - will be used as the drop folder file's parsed flavor. - * - * - * @var string - */ - public $slugRegex = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaDropFolderContentProcessorJobData extends KalturaJobData -{ - /** - * - * - * @var string - */ - public $dropFolderFileIds = null; - - /** - * - * - * @var string - */ - public $parsedSlug = null; - - /** - * - * - * @var KalturaDropFolderContentFileHandlerMatchPolicy - */ - public $contentMatchPolicy = null; - - /** - * - * - * @var int - */ - public $conversionProfileId = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -abstract class KalturaDropFolderFileBaseFilter extends KalturaFilter -{ - /** - * - * - * @var int - */ - public $idEqual = null; - - /** - * - * - * @var string - */ - public $idIn = null; - - /** - * - * - * @var int - */ - public $partnerIdEqual = null; - - /** - * - * - * @var string - */ - public $partnerIdIn = null; - - /** - * - * - * @var int - */ - public $dropFolderIdEqual = null; - - /** - * - * - * @var string - */ - public $dropFolderIdIn = null; - - /** - * - * - * @var string - */ - public $fileNameEqual = null; - - /** - * - * - * @var string - */ - public $fileNameIn = null; - - /** - * - * - * @var string - */ - public $fileNameLike = null; - - /** - * - * - * @var KalturaDropFolderFileStatus - */ - public $statusEqual = null; - - /** - * - * - * @var string - */ - public $statusIn = null; - - /** - * - * - * @var string - */ - public $statusNotIn = null; - - /** - * - * - * @var string - */ - public $parsedSlugEqual = null; - - /** - * - * - * @var string - */ - public $parsedSlugIn = null; - - /** - * - * - * @var string - */ - public $parsedSlugLike = null; - - /** - * - * - * @var string - */ - public $parsedFlavorEqual = null; - - /** - * - * - * @var string - */ - public $parsedFlavorIn = null; - - /** - * - * - * @var string - */ - public $parsedFlavorLike = null; - - /** - * - * - * @var int - */ - public $leadDropFolderFileIdEqual = null; - - /** - * - * - * @var int - */ - public $deletedDropFolderFileIdEqual = null; - - /** - * - * - * @var string - */ - public $entryIdEqual = null; - - /** - * - * - * @var KalturaDropFolderFileErrorCode - */ - public $errorCodeEqual = null; - - /** - * - * - * @var string - */ - public $errorCodeIn = null; - - /** - * - * - * @var int - */ - public $createdAtGreaterThanOrEqual = null; - - /** - * - * - * @var int - */ - public $createdAtLessThanOrEqual = null; - - /** - * - * - * @var int - */ - public $updatedAtGreaterThanOrEqual = null; - - /** - * - * - * @var int - */ - public $updatedAtLessThanOrEqual = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -abstract class KalturaRemoteDropFolder extends KalturaDropFolder -{ - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaDropFolderFileFilter extends KalturaDropFolderFileBaseFilter -{ - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaDropFolderFilter extends KalturaDropFolderBaseFilter -{ - /** - * - * - * @var KalturaNullableBoolean - */ - public $currentDc = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaFtpDropFolder extends KalturaRemoteDropFolder -{ - /** - * - * - * @var string - */ - public $host = null; - - /** - * - * - * @var int - */ - public $port = null; - - /** - * - * - * @var string - */ - public $username = null; - - /** - * - * - * @var string - */ - public $password = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -abstract class KalturaSshDropFolder extends KalturaRemoteDropFolder -{ - /** - * - * - * @var string - */ - public $host = null; - - /** - * - * - * @var int - */ - public $port = null; - - /** - * - * - * @var string - */ - public $username = null; - - /** - * - * - * @var string - */ - public $password = null; - - /** - * - * - * @var string - */ - public $privateKey = null; - - /** - * - * - * @var string - */ - public $publicKey = null; - - /** - * - * - * @var string - */ - public $passPhrase = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaDropFolderFileResource extends KalturaDataCenterContentResource -{ - /** - * Id of the drop folder file object - * - * - * @var int - */ - public $dropFolderFileId = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaDropFolderImportJobData extends KalturaSshImportJobData -{ - /** - * - * - * @var int - */ - public $dropFolderFileId = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -abstract class KalturaRemoteDropFolderBaseFilter extends KalturaDropFolderFilter -{ - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaScpDropFolder extends KalturaSshDropFolder -{ - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaSftpDropFolder extends KalturaSshDropFolder -{ - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaRemoteDropFolderFilter extends KalturaRemoteDropFolderBaseFilter -{ - -} - -/** - * @package Kaltura - * @subpackage Client - */ -abstract class KalturaFtpDropFolderBaseFilter extends KalturaRemoteDropFolderFilter -{ - -} - -/** - * @package Kaltura - * @subpackage Client - */ -abstract class KalturaSshDropFolderBaseFilter extends KalturaRemoteDropFolderFilter -{ - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaFtpDropFolderFilter extends KalturaFtpDropFolderBaseFilter -{ - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaSshDropFolderFilter extends KalturaSshDropFolderBaseFilter -{ - -} - -/** - * @package Kaltura - * @subpackage Client - */ -abstract class KalturaScpDropFolderBaseFilter extends KalturaSshDropFolderFilter -{ - -} - -/** - * @package Kaltura - * @subpackage Client - */ -abstract class KalturaSftpDropFolderBaseFilter extends KalturaSshDropFolderFilter -{ - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaScpDropFolderFilter extends KalturaScpDropFolderBaseFilter -{ - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaSftpDropFolderFilter extends KalturaSftpDropFolderBaseFilter -{ - -} - - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaDropFolderService extends KalturaServiceBase -{ - function __construct(KalturaClient $client = null) - { - parent::__construct($client); - } - - /** - * Allows you to add a new KalturaDropFolder object - * - * @param KalturaDropFolder $dropFolder - * @return KalturaDropFolder - */ - function add(KalturaDropFolder $dropFolder) - { - $kparams = array(); - $this->client->addParam($kparams, "dropFolder", $dropFolder->toParams()); - $this->client->queueServiceActionCall("dropfolder_dropfolder", "add", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaDropFolder"); - return $resultObject; - } - - /** - * Retrieve a KalturaDropFolder object by ID - * - * @param int $dropFolderId - * @return KalturaDropFolder - */ - function get($dropFolderId) - { - $kparams = array(); - $this->client->addParam($kparams, "dropFolderId", $dropFolderId); - $this->client->queueServiceActionCall("dropfolder_dropfolder", "get", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaDropFolder"); - return $resultObject; - } - - /** - * Update an existing KalturaDropFolder object - * - * @param int $dropFolderId - * @param KalturaDropFolder $dropFolder Id - * @return KalturaDropFolder - */ - function update($dropFolderId, KalturaDropFolder $dropFolder) - { - $kparams = array(); - $this->client->addParam($kparams, "dropFolderId", $dropFolderId); - $this->client->addParam($kparams, "dropFolder", $dropFolder->toParams()); - $this->client->queueServiceActionCall("dropfolder_dropfolder", "update", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaDropFolder"); - return $resultObject; - } - - /** - * Mark the KalturaDropFolder object as deleted - * - * @param int $dropFolderId - * @return KalturaDropFolder - */ - function delete($dropFolderId) - { - $kparams = array(); - $this->client->addParam($kparams, "dropFolderId", $dropFolderId); - $this->client->queueServiceActionCall("dropfolder_dropfolder", "delete", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaDropFolder"); - return $resultObject; - } - - /** - * List KalturaDropFolder objects - * - * @param KalturaDropFolderFilter $filter - * @param KalturaFilterPager $pager - * @return KalturaDropFolderListResponse - */ - function listAction(KalturaDropFolderFilter $filter = null, KalturaFilterPager $pager = null) - { - $kparams = array(); - if ($filter !== null) - $this->client->addParam($kparams, "filter", $filter->toParams()); - if ($pager !== null) - $this->client->addParam($kparams, "pager", $pager->toParams()); - $this->client->queueServiceActionCall("dropfolder_dropfolder", "list", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaDropFolderListResponse"); - return $resultObject; - } -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaDropFolderFileService extends KalturaServiceBase -{ - function __construct(KalturaClient $client = null) - { - parent::__construct($client); - } - - /** - * Allows you to add a new KalturaDropFolderFile object - * - * @param KalturaDropFolderFile $dropFolderFile - * @return KalturaDropFolderFile - */ - function add(KalturaDropFolderFile $dropFolderFile) - { - $kparams = array(); - $this->client->addParam($kparams, "dropFolderFile", $dropFolderFile->toParams()); - $this->client->queueServiceActionCall("dropfolder_dropfolderfile", "add", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaDropFolderFile"); - return $resultObject; - } - - /** - * Retrieve a KalturaDropFolderFile object by ID - * - * @param int $dropFolderFileId - * @return KalturaDropFolderFile - */ - function get($dropFolderFileId) - { - $kparams = array(); - $this->client->addParam($kparams, "dropFolderFileId", $dropFolderFileId); - $this->client->queueServiceActionCall("dropfolder_dropfolderfile", "get", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaDropFolderFile"); - return $resultObject; - } - - /** - * Update an existing KalturaDropFolderFile object - * - * @param int $dropFolderFileId - * @param KalturaDropFolderFile $dropFolderFile Id - * @return KalturaDropFolderFile - */ - function update($dropFolderFileId, KalturaDropFolderFile $dropFolderFile) - { - $kparams = array(); - $this->client->addParam($kparams, "dropFolderFileId", $dropFolderFileId); - $this->client->addParam($kparams, "dropFolderFile", $dropFolderFile->toParams()); - $this->client->queueServiceActionCall("dropfolder_dropfolderfile", "update", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaDropFolderFile"); - return $resultObject; - } - - /** - * Update status of KalturaDropFolderFile - * - * @param int $dropFolderFileId - * @param int $status - * @return KalturaDropFolderFile - */ - function updateStatus($dropFolderFileId, $status) - { - $kparams = array(); - $this->client->addParam($kparams, "dropFolderFileId", $dropFolderFileId); - $this->client->addParam($kparams, "status", $status); - $this->client->queueServiceActionCall("dropfolder_dropfolderfile", "updateStatus", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaDropFolderFile"); - return $resultObject; - } - - /** - * Mark the KalturaDropFolderFile object as deleted - * - * @param int $dropFolderFileId - * @return KalturaDropFolderFile - */ - function delete($dropFolderFileId) - { - $kparams = array(); - $this->client->addParam($kparams, "dropFolderFileId", $dropFolderFileId); - $this->client->queueServiceActionCall("dropfolder_dropfolderfile", "delete", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaDropFolderFile"); - return $resultObject; - } - - /** - * List KalturaDropFolderFile objects - * - * @param KalturaDropFolderFileFilter $filter - * @param KalturaFilterPager $pager - * @return KalturaDropFolderFileListResponse - */ - function listAction(KalturaDropFolderFileFilter $filter = null, KalturaFilterPager $pager = null) - { - $kparams = array(); - if ($filter !== null) - $this->client->addParam($kparams, "filter", $filter->toParams()); - if ($pager !== null) - $this->client->addParam($kparams, "pager", $pager->toParams()); - $this->client->queueServiceActionCall("dropfolder_dropfolderfile", "list", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaDropFolderFileListResponse"); - return $resultObject; - } - - /** - * Set the KalturaDropFolderFile status to ignore (KalturaDropFolderFileStatus::IGNORE) - * - * @param int $dropFolderFileId - * @return KalturaDropFolderFile - */ - function ignore($dropFolderFileId) - { - $kparams = array(); - $this->client->addParam($kparams, "dropFolderFileId", $dropFolderFileId); - $this->client->queueServiceActionCall("dropfolder_dropfolderfile", "ignore", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaDropFolderFile"); - return $resultObject; - } -} -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaDropFolderClientPlugin extends KalturaClientPlugin -{ - /** - * @var KalturaDropFolderService - */ - public $dropFolder = null; - - /** - * @var KalturaDropFolderFileService - */ - public $dropFolderFile = null; - - protected function __construct(KalturaClient $client) - { - parent::__construct($client); - $this->dropFolder = new KalturaDropFolderService($client); - $this->dropFolderFile = new KalturaDropFolderFileService($client); - } - - /** - * @return KalturaDropFolderClientPlugin - */ - public static function get(KalturaClient $client) - { - return new KalturaDropFolderClientPlugin($client); - } - - /** - * @return array - */ - public function getServices() - { - $services = array( - 'dropFolder' => $this->dropFolder, - 'dropFolderFile' => $this->dropFolderFile, - ); - return $services; - } - - /** - * @return string - */ - public function getName() - { - return 'dropFolder'; - } -} - diff --git a/local/kaltura/API/KalturaPlugins/KalturaDropFolderXmlBulkUploadClientPlugin.php b/local/kaltura/API/KalturaPlugins/KalturaDropFolderXmlBulkUploadClientPlugin.php deleted file mode 100644 index 9388b3cbb7a11..0000000000000 --- a/local/kaltura/API/KalturaPlugins/KalturaDropFolderXmlBulkUploadClientPlugin.php +++ /dev/null @@ -1,86 +0,0 @@ -. -// -// @ignore -// =================================================================================================== - -/** - * @package Kaltura - * @subpackage Client - */ -require_once(dirname(__FILE__) . "/../KalturaClientBase.php"); -require_once(dirname(__FILE__) . "/../KalturaEnums.php"); -require_once(dirname(__FILE__) . "/../KalturaTypes.php"); -require_once(dirname(__FILE__) . "/KalturaBulkUploadXmlClientPlugin.php"); -require_once(dirname(__FILE__) . "/KalturaDropFolderClientPlugin.php"); - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaDropFolderXmlBulkUploadFileHandlerConfig extends KalturaDropFolderFileHandlerConfig -{ - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaDropFolderXmlBulkUploadClientPlugin extends KalturaClientPlugin -{ - protected function __construct(KalturaClient $client) - { - parent::__construct($client); - } - - /** - * @return KalturaDropFolderXmlBulkUploadClientPlugin - */ - public static function get(KalturaClient $client) - { - return new KalturaDropFolderXmlBulkUploadClientPlugin($client); - } - - /** - * @return array - */ - public function getServices() - { - $services = array( - ); - return $services; - } - - /** - * @return string - */ - public function getName() - { - return 'dropFolderXmlBulkUpload'; - } -} - diff --git a/local/kaltura/API/KalturaPlugins/KalturaEmailNotificationClientPlugin.php b/local/kaltura/API/KalturaPlugins/KalturaEmailNotificationClientPlugin.php deleted file mode 100644 index 657a3fd4643c4..0000000000000 --- a/local/kaltura/API/KalturaPlugins/KalturaEmailNotificationClientPlugin.php +++ /dev/null @@ -1,630 +0,0 @@ -. -// -// @ignore -// =================================================================================================== - -/** - * @package Kaltura - * @subpackage Client - */ -require_once(dirname(__FILE__) . "/../KalturaClientBase.php"); -require_once(dirname(__FILE__) . "/../KalturaEnums.php"); -require_once(dirname(__FILE__) . "/../KalturaTypes.php"); -require_once(dirname(__FILE__) . "/KalturaEventNotificationClientPlugin.php"); - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaEmailNotificationTemplatePriority -{ - const HIGH = 1; - const NORMAL = 3; - const LOW = 5; -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaEmailNotificationFormat -{ - const HTML = "1"; - const TEXT = "2"; -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaEmailNotificationRecipientProviderType -{ - const STATIC_LIST = "1"; - const CATEGORY = "2"; - const USER = "3"; -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaEmailNotificationTemplateOrderBy -{ - const CREATED_AT_ASC = "+createdAt"; - const ID_ASC = "+id"; - const UPDATED_AT_ASC = "+updatedAt"; - const CREATED_AT_DESC = "-createdAt"; - const ID_DESC = "-id"; - const UPDATED_AT_DESC = "-updatedAt"; -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaEmailNotificationRecipient extends KalturaObjectBase -{ - /** - * Recipient e-mail address - * - * - * @var KalturaStringValue - */ - public $email; - - /** - * Recipient name - * - * - * @var KalturaStringValue - */ - public $name; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -abstract class KalturaEmailNotificationRecipientJobData extends KalturaObjectBase -{ - /** - * Provider type of the job data. - * - * - * @var KalturaEmailNotificationRecipientProviderType - * @readonly - */ - public $providerType = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -abstract class KalturaEmailNotificationRecipientProvider extends KalturaObjectBase -{ - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaCategoryUserProviderFilter extends KalturaFilter -{ - /** - * - * - * @var string - */ - public $userIdEqual = null; - - /** - * - * - * @var string - */ - public $userIdIn = null; - - /** - * - * - * @var KalturaCategoryUserStatus - */ - public $statusEqual = null; - - /** - * - * - * @var string - */ - public $statusIn = null; - - /** - * - * - * @var int - */ - public $createdAtGreaterThanOrEqual = null; - - /** - * - * - * @var int - */ - public $createdAtLessThanOrEqual = null; - - /** - * - * - * @var int - */ - public $updatedAtGreaterThanOrEqual = null; - - /** - * - * - * @var int - */ - public $updatedAtLessThanOrEqual = null; - - /** - * - * - * @var KalturaUpdateMethodType - */ - public $updateMethodEqual = null; - - /** - * - * - * @var string - */ - public $updateMethodIn = null; - - /** - * - * - * @var string - */ - public $permissionNamesMatchAnd = null; - - /** - * - * - * @var string - */ - public $permissionNamesMatchOr = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaEmailNotificationCategoryRecipientJobData extends KalturaEmailNotificationRecipientJobData -{ - /** - * - * - * @var KalturaCategoryUserFilter - */ - public $categoryUserFilter; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaEmailNotificationCategoryRecipientProvider extends KalturaEmailNotificationRecipientProvider -{ - /** - * The ID of the category whose subscribers should receive the email notification. - * - * - * @var KalturaStringValue - */ - public $categoryId; - - /** - * - * - * @var KalturaCategoryUserProviderFilter - */ - public $categoryUserFilter; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaEmailNotificationParameter extends KalturaEventNotificationParameter -{ - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaEmailNotificationStaticRecipientJobData extends KalturaEmailNotificationRecipientJobData -{ - /** - * Email to emails and names - * - * - * @var array of KalturaKeyValue - */ - public $emailRecipients; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaEmailNotificationStaticRecipientProvider extends KalturaEmailNotificationRecipientProvider -{ - /** - * Email to emails and names - * - * - * @var array of KalturaEmailNotificationRecipient - */ - public $emailRecipients; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaEmailNotificationTemplate extends KalturaEventNotificationTemplate -{ - /** - * Define the email body format - * - * - * @var KalturaEmailNotificationFormat - */ - public $format = null; - - /** - * Define the email subject - * - * - * @var string - */ - public $subject = null; - - /** - * Define the email body content - * - * - * @var string - */ - public $body = null; - - /** - * Define the email sender email - * - * - * @var string - */ - public $fromEmail = null; - - /** - * Define the email sender name - * - * - * @var string - */ - public $fromName = null; - - /** - * Email recipient emails and names - * - * - * @var KalturaEmailNotificationRecipientProvider - */ - public $to; - - /** - * Email recipient emails and names - * - * - * @var KalturaEmailNotificationRecipientProvider - */ - public $cc; - - /** - * Email recipient emails and names - * - * - * @var KalturaEmailNotificationRecipientProvider - */ - public $bcc; - - /** - * Default email addresses to whom the reply should be sent. - * - * - * @var KalturaEmailNotificationRecipientProvider - */ - public $replyTo; - - /** - * Define the email priority - * - * - * @var KalturaEmailNotificationTemplatePriority - */ - public $priority = null; - - /** - * Email address that a reading confirmation will be sent - * - * - * @var string - */ - public $confirmReadingTo = null; - - /** - * Hostname to use in Message-Id and Received headers and as default HELLO string. - * If empty, the value returned by SERVER_NAME is used or 'localhost.localdomain'. - * - * - * @var string - */ - public $hostname = null; - - /** - * Sets the message ID to be used in the Message-Id header. - * If empty, a unique id will be generated. - * - * - * @var string - */ - public $messageID = null; - - /** - * Adds a e-mail custom header - * - * - * @var array of KalturaKeyValue - */ - public $customHeaders; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaEmailNotificationUserRecipientJobData extends KalturaEmailNotificationRecipientJobData -{ - /** - * - * - * @var KalturaUserFilter - */ - public $filter; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaEmailNotificationUserRecipientProvider extends KalturaEmailNotificationRecipientProvider -{ - /** - * - * - * @var KalturaUserFilter - */ - public $filter; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaEmailNotificationDispatchJobData extends KalturaEventNotificationDispatchJobData -{ - /** - * Define the email sender email - * - * - * @var string - */ - public $fromEmail = null; - - /** - * Define the email sender name - * - * - * @var string - */ - public $fromName = null; - - /** - * Email recipient emails and names, key is mail address and value is the name - * - * - * @var KalturaEmailNotificationRecipientJobData - */ - public $to; - - /** - * Email cc emails and names, key is mail address and value is the name - * - * - * @var KalturaEmailNotificationRecipientJobData - */ - public $cc; - - /** - * Email bcc emails and names, key is mail address and value is the name - * - * - * @var KalturaEmailNotificationRecipientJobData - */ - public $bcc; - - /** - * Email addresses that a replies should be sent to, key is mail address and value is the name - * - * - * @var KalturaEmailNotificationRecipientJobData - */ - public $replyTo; - - /** - * Define the email priority - * - * - * @var KalturaEmailNotificationTemplatePriority - */ - public $priority = null; - - /** - * Email address that a reading confirmation will be sent to - * - * - * @var string - */ - public $confirmReadingTo = null; - - /** - * Hostname to use in Message-Id and Received headers and as default HELO string. - * If empty, the value returned by SERVER_NAME is used or 'localhost.localdomain'. - * - * - * @var string - */ - public $hostname = null; - - /** - * Sets the message ID to be used in the Message-Id header. - * If empty, a unique id will be generated. - * - * - * @var string - */ - public $messageID = null; - - /** - * Adds a e-mail custom header - * - * - * @var array of KalturaKeyValue - */ - public $customHeaders; - - /** - * Define the content dynamic parameters - * - * - * @var array of KalturaKeyValue - */ - public $contentParameters; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -abstract class KalturaEmailNotificationTemplateBaseFilter extends KalturaEventNotificationTemplateFilter -{ - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaEmailNotificationTemplateFilter extends KalturaEmailNotificationTemplateBaseFilter -{ - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaEmailNotificationClientPlugin extends KalturaClientPlugin -{ - protected function __construct(KalturaClient $client) - { - parent::__construct($client); - } - - /** - * @return KalturaEmailNotificationClientPlugin - */ - public static function get(KalturaClient $client) - { - return new KalturaEmailNotificationClientPlugin($client); - } - - /** - * @return array - */ - public function getServices() - { - $services = array( - ); - return $services; - } - - /** - * @return string - */ - public function getName() - { - return 'emailNotification'; - } -} - diff --git a/local/kaltura/API/KalturaPlugins/KalturaEventNotificationClientPlugin.php b/local/kaltura/API/KalturaPlugins/KalturaEventNotificationClientPlugin.php deleted file mode 100644 index 87ebdd44cb3b0..0000000000000 --- a/local/kaltura/API/KalturaPlugins/KalturaEventNotificationClientPlugin.php +++ /dev/null @@ -1,790 +0,0 @@ -. -// -// @ignore -// =================================================================================================== - -/** - * @package Kaltura - * @subpackage Client - */ -require_once(dirname(__FILE__) . "/../KalturaClientBase.php"); -require_once(dirname(__FILE__) . "/../KalturaEnums.php"); -require_once(dirname(__FILE__) . "/../KalturaTypes.php"); - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaEventNotificationTemplateStatus -{ - const DISABLED = 1; - const ACTIVE = 2; - const DELETED = 3; -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaEventNotificationEventObjectType -{ - const AD_CUE_POINT = "adCuePointEventNotifications.AdCuePoint"; - const ANNOTATION = "annotationEventNotifications.Annotation"; - const CAPTION_ASSET = "captionAssetEventNotifications.CaptionAsset"; - const CODE_CUE_POINT = "codeCuePointEventNotifications.CodeCuePoint"; - const DISTRIBUTION_PROFILE = "contentDistributionEventNotifications.DistributionProfile"; - const ENTRY_DISTRIBUTION = "contentDistributionEventNotifications.EntryDistribution"; - const CUE_POINT = "cuePointEventNotifications.CuePoint"; - const METADATA = "metadataEventNotifications.Metadata"; - const ENTRY = "1"; - const CATEGORY = "2"; - const ASSET = "3"; - const FLAVORASSET = "4"; - const THUMBASSET = "5"; - const KUSER = "8"; - const ACCESSCONTROL = "9"; - const BATCHJOB = "10"; - const BULKUPLOADRESULT = "11"; - const CATEGORYKUSER = "12"; - const CONVERSIONPROFILE2 = "14"; - const FLAVORPARAMS = "15"; - const FLAVORPARAMSCONVERSIONPROFILE = "16"; - const FLAVORPARAMSOUTPUT = "17"; - const GENERICSYNDICATIONFEED = "18"; - const KUSERTOUSERROLE = "19"; - const PARTNER = "20"; - const PERMISSION = "21"; - const PERMISSIONITEM = "22"; - const PERMISSIONTOPERMISSIONITEM = "23"; - const SCHEDULER = "24"; - const SCHEDULERCONFIG = "25"; - const SCHEDULERSTATUS = "26"; - const SCHEDULERWORKER = "27"; - const STORAGEPROFILE = "28"; - const SYNDICATIONFEED = "29"; - const THUMBPARAMS = "31"; - const THUMBPARAMSOUTPUT = "32"; - const UPLOADTOKEN = "33"; - const USERLOGINDATA = "34"; - const USERROLE = "35"; - const WIDGET = "36"; - const CATEGORYENTRY = "37"; -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaEventNotificationEventType -{ - const BATCH_JOB_STATUS = "1"; - const OBJECT_ADDED = "2"; - const OBJECT_CHANGED = "3"; - const OBJECT_COPIED = "4"; - const OBJECT_CREATED = "5"; - const OBJECT_DATA_CHANGED = "6"; - const OBJECT_DELETED = "7"; - const OBJECT_ERASED = "8"; - const OBJECT_READY_FOR_REPLACMENT = "9"; - const OBJECT_SAVED = "10"; - const OBJECT_UPDATED = "11"; - const OBJECT_REPLACED = "12"; -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaEventNotificationTemplateOrderBy -{ - const CREATED_AT_ASC = "+createdAt"; - const ID_ASC = "+id"; - const UPDATED_AT_ASC = "+updatedAt"; - const CREATED_AT_DESC = "-createdAt"; - const ID_DESC = "-id"; - const UPDATED_AT_DESC = "-updatedAt"; -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaEventNotificationTemplateType -{ - const EMAIL = "emailNotification.Email"; - const HTTP = "httpNotification.Http"; -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaEventNotificationParameter extends KalturaObjectBase -{ - /** - * The key in the subject and body to be replaced with the dynamic value - * - * - * @var string - */ - public $key = null; - - /** - * - * - * @var string - */ - public $description = null; - - /** - * The dynamic value to be placed in the final output - * - * - * @var KalturaStringValue - */ - public $value; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaEventNotificationTemplate extends KalturaObjectBase -{ - /** - * - * - * @var int - * @readonly - */ - public $id = null; - - /** - * - * - * @var int - * @readonly - */ - public $partnerId = null; - - /** - * - * - * @var string - */ - public $name = null; - - /** - * - * - * @var string - */ - public $systemName = null; - - /** - * - * - * @var string - */ - public $description = null; - - /** - * - * - * @var KalturaEventNotificationTemplateType - * @insertonly - */ - public $type = null; - - /** - * - * - * @var KalturaEventNotificationTemplateStatus - * @readonly - */ - public $status = null; - - /** - * - * - * @var int - * @readonly - */ - public $createdAt = null; - - /** - * - * - * @var int - * @readonly - */ - public $updatedAt = null; - - /** - * Define that the template could be dispatched manually from the API - * - * - * @var bool - */ - public $manualDispatchEnabled = null; - - /** - * Define that the template could be dispatched automatically by the system - * - * - * @var bool - */ - public $automaticDispatchEnabled = null; - - /** - * Define the event that should trigger this notification - * - * - * @var KalturaEventNotificationEventType - */ - public $eventType = null; - - /** - * Define the object that raied the event that should trigger this notification - * - * - * @var KalturaEventNotificationEventObjectType - */ - public $eventObjectType = null; - - /** - * Define the conditions that cause this notification to be triggered - * - * - * @var array of KalturaCondition - */ - public $eventConditions; - - /** - * Define the content dynamic parameters - * - * - * @var array of KalturaEventNotificationParameter - */ - public $contentParameters; - - /** - * Define the content dynamic parameters - * - * - * @var array of KalturaEventNotificationParameter - */ - public $userParameters; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaEventNotificationTemplateListResponse extends KalturaObjectBase -{ - /** - * - * - * @var array of KalturaEventNotificationTemplate - * @readonly - */ - public $objects; - - /** - * - * - * @var int - * @readonly - */ - public $totalCount = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaEventFieldCondition extends KalturaCondition -{ - /** - * The field to be evaluated at runtime - * - * - * @var KalturaBooleanField - */ - public $field; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaEventNotificationArrayParameter extends KalturaEventNotificationParameter -{ - /** - * - * - * @var array of KalturaString - */ - public $values; - - /** - * Used to restrict the values to close list - * - * - * @var array of KalturaStringValue - */ - public $allowedValues; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaEventNotificationDispatchJobData extends KalturaJobData -{ - /** - * - * - * @var int - */ - public $templateId = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -abstract class KalturaEventNotificationTemplateBaseFilter extends KalturaFilter -{ - /** - * - * - * @var int - */ - public $idEqual = null; - - /** - * - * - * @var string - */ - public $idIn = null; - - /** - * - * - * @var int - */ - public $partnerIdEqual = null; - - /** - * - * - * @var string - */ - public $partnerIdIn = null; - - /** - * - * - * @var string - */ - public $systemNameEqual = null; - - /** - * - * - * @var string - */ - public $systemNameIn = null; - - /** - * - * - * @var KalturaEventNotificationTemplateType - */ - public $typeEqual = null; - - /** - * - * - * @var string - */ - public $typeIn = null; - - /** - * - * - * @var KalturaEventNotificationTemplateStatus - */ - public $statusEqual = null; - - /** - * - * - * @var string - */ - public $statusIn = null; - - /** - * - * - * @var int - */ - public $createdAtGreaterThanOrEqual = null; - - /** - * - * - * @var int - */ - public $createdAtLessThanOrEqual = null; - - /** - * - * - * @var int - */ - public $updatedAtGreaterThanOrEqual = null; - - /** - * - * - * @var int - */ - public $updatedAtLessThanOrEqual = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaEventObjectChangedCondition extends KalturaCondition -{ - /** - * Comma seperated column names to be tested - * - * - * @var string - */ - public $modifiedColumns = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaEventNotificationTemplateFilter extends KalturaEventNotificationTemplateBaseFilter -{ - -} - - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaEventNotificationTemplateService extends KalturaServiceBase -{ - function __construct(KalturaClient $client = null) - { - parent::__construct($client); - } - - /** - * Allows you to add a new event notification template object - * - * @param KalturaEventNotificationTemplate $eventNotificationTemplate - * @return KalturaEventNotificationTemplate - */ - function add(KalturaEventNotificationTemplate $eventNotificationTemplate) - { - $kparams = array(); - $this->client->addParam($kparams, "eventNotificationTemplate", $eventNotificationTemplate->toParams()); - $this->client->queueServiceActionCall("eventnotification_eventnotificationtemplate", "add", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaEventNotificationTemplate"); - return $resultObject; - } - - /** - * Allows you to clone exiting event notification template object and create a new one with similar configuration - * - * @param int $id Source template to clone - * @param KalturaEventNotificationTemplate $eventNotificationTemplate Overwrite configuration object - * @return KalturaEventNotificationTemplate - */ - function cloneAction($id, KalturaEventNotificationTemplate $eventNotificationTemplate = null) - { - $kparams = array(); - $this->client->addParam($kparams, "id", $id); - if ($eventNotificationTemplate !== null) - $this->client->addParam($kparams, "eventNotificationTemplate", $eventNotificationTemplate->toParams()); - $this->client->queueServiceActionCall("eventnotification_eventnotificationtemplate", "clone", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaEventNotificationTemplate"); - return $resultObject; - } - - /** - * Retrieve an event notification template object by id - * - * @param int $id - * @return KalturaEventNotificationTemplate - */ - function get($id) - { - $kparams = array(); - $this->client->addParam($kparams, "id", $id); - $this->client->queueServiceActionCall("eventnotification_eventnotificationtemplate", "get", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaEventNotificationTemplate"); - return $resultObject; - } - - /** - * Update an existing event notification template object - * - * @param int $id - * @param KalturaEventNotificationTemplate $eventNotificationTemplate - * @return KalturaEventNotificationTemplate - */ - function update($id, KalturaEventNotificationTemplate $eventNotificationTemplate) - { - $kparams = array(); - $this->client->addParam($kparams, "id", $id); - $this->client->addParam($kparams, "eventNotificationTemplate", $eventNotificationTemplate->toParams()); - $this->client->queueServiceActionCall("eventnotification_eventnotificationtemplate", "update", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaEventNotificationTemplate"); - return $resultObject; - } - - /** - * Update event notification template status by id - * - * @param int $id - * @param int $status - * @return KalturaEventNotificationTemplate - */ - function updateStatus($id, $status) - { - $kparams = array(); - $this->client->addParam($kparams, "id", $id); - $this->client->addParam($kparams, "status", $status); - $this->client->queueServiceActionCall("eventnotification_eventnotificationtemplate", "updateStatus", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaEventNotificationTemplate"); - return $resultObject; - } - - /** - * Delete an event notification template object - * - * @param int $id - * @return - */ - function delete($id) - { - $kparams = array(); - $this->client->addParam($kparams, "id", $id); - $this->client->queueServiceActionCall("eventnotification_eventnotificationtemplate", "delete", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "null"); - return $resultObject; - } - - /** - * List event notification template objects - * - * @param KalturaEventNotificationTemplateFilter $filter - * @param KalturaFilterPager $pager - * @return KalturaEventNotificationTemplateListResponse - */ - function listAction(KalturaEventNotificationTemplateFilter $filter = null, KalturaFilterPager $pager = null) - { - $kparams = array(); - if ($filter !== null) - $this->client->addParam($kparams, "filter", $filter->toParams()); - if ($pager !== null) - $this->client->addParam($kparams, "pager", $pager->toParams()); - $this->client->queueServiceActionCall("eventnotification_eventnotificationtemplate", "list", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaEventNotificationTemplateListResponse"); - return $resultObject; - } - - /** - * - * - * @param KalturaPartnerFilter $filter - * @param KalturaFilterPager $pager - * @return KalturaEventNotificationTemplateListResponse - */ - function listByPartner(KalturaPartnerFilter $filter = null, KalturaFilterPager $pager = null) - { - $kparams = array(); - if ($filter !== null) - $this->client->addParam($kparams, "filter", $filter->toParams()); - if ($pager !== null) - $this->client->addParam($kparams, "pager", $pager->toParams()); - $this->client->queueServiceActionCall("eventnotification_eventnotificationtemplate", "listByPartner", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaEventNotificationTemplateListResponse"); - return $resultObject; - } - - /** - * Dispatch event notification object by id - * - * @param int $id - * @param KalturaEventNotificationDispatchJobData $data - * @return int - */ - function dispatch($id, KalturaEventNotificationDispatchJobData $data) - { - $kparams = array(); - $this->client->addParam($kparams, "id", $id); - $this->client->addParam($kparams, "data", $data->toParams()); - $this->client->queueServiceActionCall("eventnotification_eventnotificationtemplate", "dispatch", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "integer"); - return $resultObject; - } - - /** - * Action lists the template partner event notification templates. - * - * @param KalturaEventNotificationTemplateFilter $filter - * @param KalturaFilterPager $pager - * @return KalturaEventNotificationTemplateListResponse - */ - function listTemplates(KalturaEventNotificationTemplateFilter $filter = null, KalturaFilterPager $pager = null) - { - $kparams = array(); - if ($filter !== null) - $this->client->addParam($kparams, "filter", $filter->toParams()); - if ($pager !== null) - $this->client->addParam($kparams, "pager", $pager->toParams()); - $this->client->queueServiceActionCall("eventnotification_eventnotificationtemplate", "listTemplates", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaEventNotificationTemplateListResponse"); - return $resultObject; - } -} -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaEventNotificationClientPlugin extends KalturaClientPlugin -{ - /** - * @var KalturaEventNotificationTemplateService - */ - public $eventNotificationTemplate = null; - - protected function __construct(KalturaClient $client) - { - parent::__construct($client); - $this->eventNotificationTemplate = new KalturaEventNotificationTemplateService($client); - } - - /** - * @return KalturaEventNotificationClientPlugin - */ - public static function get(KalturaClient $client) - { - return new KalturaEventNotificationClientPlugin($client); - } - - /** - * @return array - */ - public function getServices() - { - $services = array( - 'eventNotificationTemplate' => $this->eventNotificationTemplate, - ); - return $services; - } - - /** - * @return string - */ - public function getName() - { - return 'eventNotification'; - } -} - diff --git a/local/kaltura/API/KalturaPlugins/KalturaExternalMediaClientPlugin.php b/local/kaltura/API/KalturaPlugins/KalturaExternalMediaClientPlugin.php deleted file mode 100644 index 275d567fe6e93..0000000000000 --- a/local/kaltura/API/KalturaPlugins/KalturaExternalMediaClientPlugin.php +++ /dev/null @@ -1,363 +0,0 @@ -. -// -// @ignore -// =================================================================================================== - -/** - * @package Kaltura - * @subpackage Client - */ -require_once(dirname(__FILE__) . "/../KalturaClientBase.php"); -require_once(dirname(__FILE__) . "/../KalturaEnums.php"); -require_once(dirname(__FILE__) . "/../KalturaTypes.php"); - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaExternalMediaEntryOrderBy -{ - const CREATED_AT_ASC = "+createdAt"; - const DURATION_ASC = "+duration"; - const END_DATE_ASC = "+endDate"; - const LAST_PLAYED_AT_ASC = "+lastPlayedAt"; - const MEDIA_TYPE_ASC = "+mediaType"; - const MODERATION_COUNT_ASC = "+moderationCount"; - const NAME_ASC = "+name"; - const PARTNER_SORT_VALUE_ASC = "+partnerSortValue"; - const PLAYS_ASC = "+plays"; - const RANK_ASC = "+rank"; - const RECENT_ASC = "+recent"; - const START_DATE_ASC = "+startDate"; - const TOTAL_RANK_ASC = "+totalRank"; - const UPDATED_AT_ASC = "+updatedAt"; - const VIEWS_ASC = "+views"; - const WEIGHT_ASC = "+weight"; - const CREATED_AT_DESC = "-createdAt"; - const DURATION_DESC = "-duration"; - const END_DATE_DESC = "-endDate"; - const LAST_PLAYED_AT_DESC = "-lastPlayedAt"; - const MEDIA_TYPE_DESC = "-mediaType"; - const MODERATION_COUNT_DESC = "-moderationCount"; - const NAME_DESC = "-name"; - const PARTNER_SORT_VALUE_DESC = "-partnerSortValue"; - const PLAYS_DESC = "-plays"; - const RANK_DESC = "-rank"; - const RECENT_DESC = "-recent"; - const START_DATE_DESC = "-startDate"; - const TOTAL_RANK_DESC = "-totalRank"; - const UPDATED_AT_DESC = "-updatedAt"; - const VIEWS_DESC = "-views"; - const WEIGHT_DESC = "-weight"; -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaExternalMediaSourceType -{ - const INTERCALL = "InterCall"; - const YOUTUBE = "YouTube"; -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaExternalMediaEntry extends KalturaMediaEntry -{ - /** - * The source type of the external media - * - * - * @var KalturaExternalMediaSourceType - * @insertonly - */ - public $externalSourceType = null; - - /** - * Comma separated asset params ids that exists for this external media entry - * - * - * @var string - * @readonly - */ - public $assetParamsIds = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaExternalMediaEntryListResponse extends KalturaObjectBase -{ - /** - * - * - * @var array of KalturaExternalMediaEntry - * @readonly - */ - public $objects; - - /** - * - * - * @var int - * @readonly - */ - public $totalCount = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -abstract class KalturaExternalMediaEntryBaseFilter extends KalturaMediaEntryFilter -{ - /** - * - * - * @var KalturaExternalMediaSourceType - */ - public $externalSourceTypeEqual = null; - - /** - * - * - * @var string - */ - public $externalSourceTypeIn = null; - - /** - * - * - * @var string - */ - public $assetParamsIdsMatchOr = null; - - /** - * - * - * @var string - */ - public $assetParamsIdsMatchAnd = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaExternalMediaEntryFilter extends KalturaExternalMediaEntryBaseFilter -{ - -} - - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaExternalMediaService extends KalturaServiceBase -{ - function __construct(KalturaClient $client = null) - { - parent::__construct($client); - } - - /** - * Add external media entry - * - * @param KalturaExternalMediaEntry $entry - * @return KalturaExternalMediaEntry - */ - function add(KalturaExternalMediaEntry $entry) - { - $kparams = array(); - $this->client->addParam($kparams, "entry", $entry->toParams()); - $this->client->queueServiceActionCall("externalmedia_externalmedia", "add", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaExternalMediaEntry"); - return $resultObject; - } - - /** - * Get external media entry by ID. - * - * @param string $id External media entry id - * @return KalturaExternalMediaEntry - */ - function get($id) - { - $kparams = array(); - $this->client->addParam($kparams, "id", $id); - $this->client->queueServiceActionCall("externalmedia_externalmedia", "get", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaExternalMediaEntry"); - return $resultObject; - } - - /** - * Update external media entry. Only the properties that were set will be updated. - * - * @param string $id External media entry id to update - * @param KalturaExternalMediaEntry $entry External media entry object to update - * @return KalturaExternalMediaEntry - */ - function update($id, KalturaExternalMediaEntry $entry) - { - $kparams = array(); - $this->client->addParam($kparams, "id", $id); - $this->client->addParam($kparams, "entry", $entry->toParams()); - $this->client->queueServiceActionCall("externalmedia_externalmedia", "update", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaExternalMediaEntry"); - return $resultObject; - } - - /** - * Delete a external media entry. - * - * @param string $id External media entry id to delete - * @return - */ - function delete($id) - { - $kparams = array(); - $this->client->addParam($kparams, "id", $id); - $this->client->queueServiceActionCall("externalmedia_externalmedia", "delete", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "null"); - return $resultObject; - } - - /** - * List media entries by filter with paging support. - * - * @param KalturaExternalMediaEntryFilter $filter External media entry filter - * @param KalturaFilterPager $pager Pager - * @return KalturaExternalMediaEntryListResponse - */ - function listAction(KalturaExternalMediaEntryFilter $filter = null, KalturaFilterPager $pager = null) - { - $kparams = array(); - if ($filter !== null) - $this->client->addParam($kparams, "filter", $filter->toParams()); - if ($pager !== null) - $this->client->addParam($kparams, "pager", $pager->toParams()); - $this->client->queueServiceActionCall("externalmedia_externalmedia", "list", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaExternalMediaEntryListResponse"); - return $resultObject; - } - - /** - * Count media entries by filter. - * - * @param KalturaExternalMediaEntryFilter $filter External media entry filter - * @return int - */ - function count(KalturaExternalMediaEntryFilter $filter = null) - { - $kparams = array(); - if ($filter !== null) - $this->client->addParam($kparams, "filter", $filter->toParams()); - $this->client->queueServiceActionCall("externalmedia_externalmedia", "count", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "integer"); - return $resultObject; - } -} -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaExternalMediaClientPlugin extends KalturaClientPlugin -{ - /** - * @var KalturaExternalMediaService - */ - public $externalMedia = null; - - protected function __construct(KalturaClient $client) - { - parent::__construct($client); - $this->externalMedia = new KalturaExternalMediaService($client); - } - - /** - * @return KalturaExternalMediaClientPlugin - */ - public static function get(KalturaClient $client) - { - return new KalturaExternalMediaClientPlugin($client); - } - - /** - * @return array - */ - public function getServices() - { - $services = array( - 'externalMedia' => $this->externalMedia, - ); - return $services; - } - - /** - * @return string - */ - public function getName() - { - return 'externalMedia'; - } -} - diff --git a/local/kaltura/API/KalturaPlugins/KalturaFileSyncClientPlugin.php b/local/kaltura/API/KalturaPlugins/KalturaFileSyncClientPlugin.php deleted file mode 100644 index 17d61c39db871..0000000000000 --- a/local/kaltura/API/KalturaPlugins/KalturaFileSyncClientPlugin.php +++ /dev/null @@ -1,338 +0,0 @@ -. -// -// @ignore -// =================================================================================================== - -/** - * @package Kaltura - * @subpackage Client - */ -require_once(dirname(__FILE__) . "/../KalturaClientBase.php"); -require_once(dirname(__FILE__) . "/../KalturaEnums.php"); -require_once(dirname(__FILE__) . "/../KalturaTypes.php"); - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaFileSyncStatus -{ - const ERROR = -1; - const PENDING = 1; - const READY = 2; - const DELETED = 3; - const PURGED = 4; -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaFileSyncType -{ - const FILE = 1; - const LINK = 2; - const URL = 3; -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaFileSyncOrderBy -{ - const CREATED_AT_ASC = "+createdAt"; - const FILE_SIZE_ASC = "+fileSize"; - const READY_AT_ASC = "+readyAt"; - const SYNC_TIME_ASC = "+syncTime"; - const UPDATED_AT_ASC = "+updatedAt"; - const CREATED_AT_DESC = "-createdAt"; - const FILE_SIZE_DESC = "-fileSize"; - const READY_AT_DESC = "-readyAt"; - const SYNC_TIME_DESC = "-syncTime"; - const UPDATED_AT_DESC = "-updatedAt"; -} - -/** - * @package Kaltura - * @subpackage Client - */ -abstract class KalturaFileSyncBaseFilter extends KalturaFilter -{ - /** - * - * - * @var int - */ - public $partnerIdEqual = null; - - /** - * - * - * @var KalturaFileSyncObjectType - */ - public $fileObjectTypeEqual = null; - - /** - * - * - * @var string - */ - public $fileObjectTypeIn = null; - - /** - * - * - * @var string - */ - public $objectIdEqual = null; - - /** - * - * - * @var string - */ - public $objectIdIn = null; - - /** - * - * - * @var string - */ - public $versionEqual = null; - - /** - * - * - * @var string - */ - public $versionIn = null; - - /** - * - * - * @var int - */ - public $objectSubTypeEqual = null; - - /** - * - * - * @var string - */ - public $objectSubTypeIn = null; - - /** - * - * - * @var string - */ - public $dcEqual = null; - - /** - * - * - * @var string - */ - public $dcIn = null; - - /** - * - * - * @var int - */ - public $originalEqual = null; - - /** - * - * - * @var int - */ - public $createdAtGreaterThanOrEqual = null; - - /** - * - * - * @var int - */ - public $createdAtLessThanOrEqual = null; - - /** - * - * - * @var int - */ - public $updatedAtGreaterThanOrEqual = null; - - /** - * - * - * @var int - */ - public $updatedAtLessThanOrEqual = null; - - /** - * - * - * @var int - */ - public $readyAtGreaterThanOrEqual = null; - - /** - * - * - * @var int - */ - public $readyAtLessThanOrEqual = null; - - /** - * - * - * @var int - */ - public $syncTimeGreaterThanOrEqual = null; - - /** - * - * - * @var int - */ - public $syncTimeLessThanOrEqual = null; - - /** - * - * - * @var KalturaFileSyncStatus - */ - public $statusEqual = null; - - /** - * - * - * @var string - */ - public $statusIn = null; - - /** - * - * - * @var KalturaFileSyncType - */ - public $fileTypeEqual = null; - - /** - * - * - * @var string - */ - public $fileTypeIn = null; - - /** - * - * - * @var int - */ - public $linkedIdEqual = null; - - /** - * - * - * @var int - */ - public $linkCountGreaterThanOrEqual = null; - - /** - * - * - * @var int - */ - public $linkCountLessThanOrEqual = null; - - /** - * - * - * @var float - */ - public $fileSizeGreaterThanOrEqual = null; - - /** - * - * - * @var float - */ - public $fileSizeLessThanOrEqual = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaFileSyncFilter extends KalturaFileSyncBaseFilter -{ - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaFileSyncClientPlugin extends KalturaClientPlugin -{ - protected function __construct(KalturaClient $client) - { - parent::__construct($client); - } - - /** - * @return KalturaFileSyncClientPlugin - */ - public static function get(KalturaClient $client) - { - return new KalturaFileSyncClientPlugin($client); - } - - /** - * @return array - */ - public function getServices() - { - $services = array( - ); - return $services; - } - - /** - * @return string - */ - public function getName() - { - return 'fileSync'; - } -} - diff --git a/local/kaltura/API/KalturaPlugins/KalturaHttpNotificationClientPlugin.php b/local/kaltura/API/KalturaPlugins/KalturaHttpNotificationClientPlugin.php deleted file mode 100644 index 5d7bc27ba0efa..0000000000000 --- a/local/kaltura/API/KalturaPlugins/KalturaHttpNotificationClientPlugin.php +++ /dev/null @@ -1,624 +0,0 @@ -. -// -// @ignore -// =================================================================================================== - -/** - * @package Kaltura - * @subpackage Client - */ -require_once(dirname(__FILE__) . "/../KalturaClientBase.php"); -require_once(dirname(__FILE__) . "/../KalturaEnums.php"); -require_once(dirname(__FILE__) . "/../KalturaTypes.php"); -require_once(dirname(__FILE__) . "/KalturaEventNotificationClientPlugin.php"); - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaHttpNotificationAuthenticationMethod -{ - const ANYSAFE = -18; - const ANY = -17; - const BASIC = 1; - const DIGEST = 2; - const GSSNEGOTIATE = 4; - const NTLM = 8; -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaHttpNotificationMethod -{ - const GET = 1; - const POST = 2; - const PUT = 3; - const DELETE = 4; -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaHttpNotificationSslVersion -{ - const V2 = 2; - const V3 = 3; -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaHttpNotificationCertificateType -{ - const DER = "DER"; - const ENG = "ENG"; - const PEM = "PEM"; -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaHttpNotificationSslKeyType -{ - const DER = "DER"; - const ENG = "ENG"; - const PEM = "PEM"; -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaHttpNotificationTemplateOrderBy -{ - const CREATED_AT_ASC = "+createdAt"; - const ID_ASC = "+id"; - const UPDATED_AT_ASC = "+updatedAt"; - const CREATED_AT_DESC = "-createdAt"; - const ID_DESC = "-id"; - const UPDATED_AT_DESC = "-updatedAt"; -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaHttpNotification extends KalturaObjectBase -{ - /** - * Object that triggered the notification - * - * - * @var KalturaObjectBase - */ - public $object; - - /** - * Object type that triggered the notification - * - * - * @var KalturaEventNotificationEventObjectType - */ - public $eventObjectType = null; - - /** - * ID of the batch job that execute the notification - * - * - * @var int - */ - public $eventNotificationJobId = null; - - /** - * ID of the template that triggered the notification - * - * - * @var int - */ - public $templateId = null; - - /** - * Name of the template that triggered the notification - * - * - * @var string - */ - public $templateName = null; - - /** - * System name of the template that triggered the notification - * - * - * @var string - */ - public $templateSystemName = null; - - /** - * Ecent type that triggered the notification - * - * - * @var KalturaEventNotificationEventType - */ - public $eventType = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -abstract class KalturaHttpNotificationData extends KalturaObjectBase -{ - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaHttpNotificationDataFields extends KalturaHttpNotificationData -{ - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaHttpNotificationDataText extends KalturaHttpNotificationData -{ - /** - * - * - * @var KalturaStringValue - */ - public $content; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaHttpNotificationObjectData extends KalturaHttpNotificationData -{ - /** - * Kaltura API object type - * - * - * @var string - */ - public $apiObjectType = null; - - /** - * Data format - * - * - * @var KalturaResponseType - */ - public $format = null; - - /** - * Ignore null attributes during serialization - * - * - * @var bool - */ - public $ignoreNull = null; - - /** - * PHP code - * - * - * @var string - */ - public $code = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaHttpNotificationTemplate extends KalturaEventNotificationTemplate -{ - /** - * Remote server URL - * - * - * @var string - */ - public $url = null; - - /** - * Request method. - * - * - * @var KalturaHttpNotificationMethod - */ - public $method = null; - - /** - * Data to send. - * - * - * @var KalturaHttpNotificationData - */ - public $data; - - /** - * The maximum number of seconds to allow cURL functions to execute. - * - * - * @var int - */ - public $timeout = null; - - /** - * The number of seconds to wait while trying to connect. - * Must be larger than zero. - * - * - * @var int - */ - public $connectTimeout = null; - - /** - * A username to use for the connection. - * - * - * @var string - */ - public $username = null; - - /** - * A password to use for the connection. - * - * - * @var string - */ - public $password = null; - - /** - * The HTTP authentication method to use. - * - * - * @var KalturaHttpNotificationAuthenticationMethod - */ - public $authenticationMethod = null; - - /** - * The SSL version (2 or 3) to use. - * By default PHP will try to determine this itself, although in some cases this must be set manually. - * - * - * @var KalturaHttpNotificationSslVersion - */ - public $sslVersion = null; - - /** - * SSL certificate to verify the peer with. - * - * - * @var string - */ - public $sslCertificate = null; - - /** - * The format of the certificate. - * - * - * @var KalturaHttpNotificationCertificateType - */ - public $sslCertificateType = null; - - /** - * The password required to use the certificate. - * - * - * @var string - */ - public $sslCertificatePassword = null; - - /** - * The identifier for the crypto engine of the private SSL key specified in ssl key. - * - * - * @var string - */ - public $sslEngine = null; - - /** - * The identifier for the crypto engine used for asymmetric crypto operations. - * - * - * @var string - */ - public $sslEngineDefault = null; - - /** - * The key type of the private SSL key specified in ssl key - PEM / DER / ENG. - * - * - * @var KalturaHttpNotificationSslKeyType - */ - public $sslKeyType = null; - - /** - * Private SSL key. - * - * - * @var string - */ - public $sslKey = null; - - /** - * The secret password needed to use the private SSL key specified in ssl key. - * - * - * @var string - */ - public $sslKeyPassword = null; - - /** - * Adds a e-mail custom header - * - * - * @var array of KalturaKeyValue - */ - public $customHeaders; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaHttpNotificationDispatchJobData extends KalturaEventNotificationDispatchJobData -{ - /** - * Remote server URL - * - * - * @var string - */ - public $url = null; - - /** - * Request method. - * - * - * @var KalturaHttpNotificationMethod - */ - public $method = null; - - /** - * Data to send. - * - * - * @var string - */ - public $data = null; - - /** - * The maximum number of seconds to allow cURL functions to execute. - * - * - * @var int - */ - public $timeout = null; - - /** - * The number of seconds to wait while trying to connect. - * Must be larger than zero. - * - * - * @var int - */ - public $connectTimeout = null; - - /** - * A username to use for the connection. - * - * - * @var string - */ - public $username = null; - - /** - * A password to use for the connection. - * - * - * @var string - */ - public $password = null; - - /** - * The HTTP authentication method to use. - * - * - * @var KalturaHttpNotificationAuthenticationMethod - */ - public $authenticationMethod = null; - - /** - * The SSL version (2 or 3) to use. - * By default PHP will try to determine this itself, although in some cases this must be set manually. - * - * - * @var KalturaHttpNotificationSslVersion - */ - public $sslVersion = null; - - /** - * SSL certificate to verify the peer with. - * - * - * @var string - */ - public $sslCertificate = null; - - /** - * The format of the certificate. - * - * - * @var KalturaHttpNotificationCertificateType - */ - public $sslCertificateType = null; - - /** - * The password required to use the certificate. - * - * - * @var string - */ - public $sslCertificatePassword = null; - - /** - * The identifier for the crypto engine of the private SSL key specified in ssl key. - * - * - * @var string - */ - public $sslEngine = null; - - /** - * The identifier for the crypto engine used for asymmetric crypto operations. - * - * - * @var string - */ - public $sslEngineDefault = null; - - /** - * The key type of the private SSL key specified in ssl key - PEM / DER / ENG. - * - * - * @var KalturaHttpNotificationSslKeyType - */ - public $sslKeyType = null; - - /** - * Private SSL key. - * - * - * @var string - */ - public $sslKey = null; - - /** - * The secret password needed to use the private SSL key specified in ssl key. - * - * - * @var string - */ - public $sslKeyPassword = null; - - /** - * Adds a e-mail custom header - * - * - * @var array of KalturaKeyValue - */ - public $customHeaders; - - /** - * Define the content dynamic parameters - * - * - * @var array of KalturaKeyValue - */ - public $contentParameters; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -abstract class KalturaHttpNotificationTemplateBaseFilter extends KalturaEventNotificationTemplateFilter -{ - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaHttpNotificationTemplateFilter extends KalturaHttpNotificationTemplateBaseFilter -{ - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaHttpNotificationClientPlugin extends KalturaClientPlugin -{ - protected function __construct(KalturaClient $client) - { - parent::__construct($client); - } - - /** - * @return KalturaHttpNotificationClientPlugin - */ - public static function get(KalturaClient $client) - { - return new KalturaHttpNotificationClientPlugin($client); - } - - /** - * @return array - */ - public function getServices() - { - $services = array( - ); - return $services; - } - - /** - * @return string - */ - public function getName() - { - return 'httpNotification'; - } -} - diff --git a/local/kaltura/API/KalturaPlugins/KalturaKontikiClientPlugin.php b/local/kaltura/API/KalturaPlugins/KalturaKontikiClientPlugin.php deleted file mode 100644 index e1120181283c8..0000000000000 --- a/local/kaltura/API/KalturaPlugins/KalturaKontikiClientPlugin.php +++ /dev/null @@ -1,177 +0,0 @@ -. -// -// @ignore -// =================================================================================================== - -/** - * @package Kaltura - * @subpackage Client - */ -require_once(dirname(__FILE__) . "/../KalturaClientBase.php"); -require_once(dirname(__FILE__) . "/../KalturaEnums.php"); -require_once(dirname(__FILE__) . "/../KalturaTypes.php"); - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaKontikiStorageProfileOrderBy -{ - const CREATED_AT_ASC = "+createdAt"; - const UPDATED_AT_ASC = "+updatedAt"; - const CREATED_AT_DESC = "-createdAt"; - const UPDATED_AT_DESC = "-updatedAt"; -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaKontikiStorageProfile extends KalturaStorageProfile -{ - /** - * - * - * @var string - */ - public $serviceToken = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaKontikiStorageDeleteJobData extends KalturaStorageDeleteJobData -{ - /** - * Unique Kontiki MOID for the content uploaded to Kontiki - * - * - * @var string - */ - public $contentMoid = null; - - /** - * - * - * @var string - */ - public $serviceToken = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaKontikiStorageExportJobData extends KalturaStorageExportJobData -{ - /** - * Holds the id of the exported asset - * - * - * @var string - */ - public $flavorAssetId = null; - - /** - * Unique Kontiki MOID for the content uploaded to Kontiki - * - * - * @var string - */ - public $contentMoid = null; - - /** - * - * - * @var string - */ - public $serviceToken = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -abstract class KalturaKontikiStorageProfileBaseFilter extends KalturaStorageProfileFilter -{ - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaKontikiStorageProfileFilter extends KalturaKontikiStorageProfileBaseFilter -{ - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaKontikiClientPlugin extends KalturaClientPlugin -{ - protected function __construct(KalturaClient $client) - { - parent::__construct($client); - } - - /** - * @return KalturaKontikiClientPlugin - */ - public static function get(KalturaClient $client) - { - return new KalturaKontikiClientPlugin($client); - } - - /** - * @return array - */ - public function getServices() - { - $services = array( - ); - return $services; - } - - /** - * @return string - */ - public function getName() - { - return 'kontiki'; - } -} - diff --git a/local/kaltura/API/KalturaPlugins/KalturaLikeClientPlugin.php b/local/kaltura/API/KalturaPlugins/KalturaLikeClientPlugin.php deleted file mode 100644 index 433c28cec56f6..0000000000000 --- a/local/kaltura/API/KalturaPlugins/KalturaLikeClientPlugin.php +++ /dev/null @@ -1,153 +0,0 @@ -. -// -// @ignore -// =================================================================================================== - -/** - * @package Kaltura - * @subpackage Client - */ -require_once(dirname(__FILE__) . "/../KalturaClientBase.php"); -require_once(dirname(__FILE__) . "/../KalturaEnums.php"); -require_once(dirname(__FILE__) . "/../KalturaTypes.php"); - - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaLikeService extends KalturaServiceBase -{ - function __construct(KalturaClient $client = null) - { - parent::__construct($client); - } - - /** - * - * - * @param string $entryId - * @return bool - */ - function like($entryId) - { - $kparams = array(); - $this->client->addParam($kparams, "entryId", $entryId); - $this->client->queueServiceActionCall("like_like", "like", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $resultObject = (bool) $resultObject; - return $resultObject; - } - - /** - * - * - * @param string $entryId - * @return bool - */ - function unlike($entryId) - { - $kparams = array(); - $this->client->addParam($kparams, "entryId", $entryId); - $this->client->queueServiceActionCall("like_like", "unlike", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $resultObject = (bool) $resultObject; - return $resultObject; - } - - /** - * - * - * @param string $entryId - * @param string $userId - * @return bool - */ - function checkLikeExists($entryId, $userId = null) - { - $kparams = array(); - $this->client->addParam($kparams, "entryId", $entryId); - $this->client->addParam($kparams, "userId", $userId); - $this->client->queueServiceActionCall("like_like", "checkLikeExists", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $resultObject = (bool) $resultObject; - return $resultObject; - } -} -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaLikeClientPlugin extends KalturaClientPlugin -{ - /** - * @var KalturaLikeService - */ - public $like = null; - - protected function __construct(KalturaClient $client) - { - parent::__construct($client); - $this->like = new KalturaLikeService($client); - } - - /** - * @return KalturaLikeClientPlugin - */ - public static function get(KalturaClient $client) - { - return new KalturaLikeClientPlugin($client); - } - - /** - * @return array - */ - public function getServices() - { - $services = array( - 'like' => $this->like, - ); - return $services; - } - - /** - * @return string - */ - public function getName() - { - return 'like'; - } -} - diff --git a/local/kaltura/API/KalturaPlugins/KalturaMetadataClientPlugin.php b/local/kaltura/API/KalturaPlugins/KalturaMetadataClientPlugin.php deleted file mode 100644 index 7919b7fc491b2..0000000000000 --- a/local/kaltura/API/KalturaPlugins/KalturaMetadataClientPlugin.php +++ /dev/null @@ -1,1566 +0,0 @@ -. -// -// @ignore -// =================================================================================================== - -/** - * @package Kaltura - * @subpackage Client - */ -require_once(dirname(__FILE__) . "/../KalturaClientBase.php"); -require_once(dirname(__FILE__) . "/../KalturaEnums.php"); -require_once(dirname(__FILE__) . "/../KalturaTypes.php"); - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaMetadataProfileCreateMode -{ - const API = 1; - const KMC = 2; - const APP = 3; -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaMetadataProfileStatus -{ - const ACTIVE = 1; - const DEPRECATED = 2; - const TRANSFORMING = 3; -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaMetadataStatus -{ - const VALID = 1; - const INVALID = 2; - const DELETED = 3; -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaMetadataObjectType -{ - const AD_CUE_POINT = "adCuePointMetadata.AdCuePoint"; - const ANNOTATION = "annotationMetadata.Annotation"; - const CODE_CUE_POINT = "codeCuePointMetadata.CodeCuePoint"; - const ENTRY = "1"; - const CATEGORY = "2"; - const USER = "3"; - const PARTNER = "4"; -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaMetadataOrderBy -{ - const CREATED_AT_ASC = "+createdAt"; - const METADATA_PROFILE_VERSION_ASC = "+metadataProfileVersion"; - const UPDATED_AT_ASC = "+updatedAt"; - const VERSION_ASC = "+version"; - const CREATED_AT_DESC = "-createdAt"; - const METADATA_PROFILE_VERSION_DESC = "-metadataProfileVersion"; - const UPDATED_AT_DESC = "-updatedAt"; - const VERSION_DESC = "-version"; -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaMetadataProfileOrderBy -{ - const CREATED_AT_ASC = "+createdAt"; - const UPDATED_AT_ASC = "+updatedAt"; - const CREATED_AT_DESC = "-createdAt"; - const UPDATED_AT_DESC = "-updatedAt"; -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaMetadata extends KalturaObjectBase -{ - /** - * - * - * @var int - * @readonly - */ - public $id = null; - - /** - * - * - * @var int - * @readonly - */ - public $partnerId = null; - - /** - * - * - * @var int - * @readonly - */ - public $metadataProfileId = null; - - /** - * - * - * @var int - * @readonly - */ - public $metadataProfileVersion = null; - - /** - * - * - * @var KalturaMetadataObjectType - * @readonly - */ - public $metadataObjectType = null; - - /** - * - * - * @var string - * @readonly - */ - public $objectId = null; - - /** - * - * - * @var int - * @readonly - */ - public $version = null; - - /** - * - * - * @var int - * @readonly - */ - public $createdAt = null; - - /** - * - * - * @var int - * @readonly - */ - public $updatedAt = null; - - /** - * - * - * @var KalturaMetadataStatus - * @readonly - */ - public $status = null; - - /** - * - * - * @var string - * @readonly - */ - public $xml = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaMetadataListResponse extends KalturaObjectBase -{ - /** - * - * - * @var array of KalturaMetadata - * @readonly - */ - public $objects; - - /** - * - * - * @var int - * @readonly - */ - public $totalCount = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaMetadataProfile extends KalturaObjectBase -{ - /** - * - * - * @var int - * @readonly - */ - public $id = null; - - /** - * - * - * @var int - * @readonly - */ - public $partnerId = null; - - /** - * - * - * @var KalturaMetadataObjectType - */ - public $metadataObjectType = null; - - /** - * - * - * @var int - * @readonly - */ - public $version = null; - - /** - * - * - * @var string - */ - public $name = null; - - /** - * - * - * @var string - */ - public $systemName = null; - - /** - * - * - * @var string - */ - public $description = null; - - /** - * - * - * @var int - * @readonly - */ - public $createdAt = null; - - /** - * - * - * @var int - * @readonly - */ - public $updatedAt = null; - - /** - * - * - * @var KalturaMetadataProfileStatus - * @readonly - */ - public $status = null; - - /** - * - * - * @var string - * @readonly - */ - public $xsd = null; - - /** - * - * - * @var string - * @readonly - */ - public $views = null; - - /** - * - * - * @var string - * @readonly - */ - public $xslt = null; - - /** - * - * - * @var KalturaMetadataProfileCreateMode - */ - public $createMode = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaMetadataProfileField extends KalturaObjectBase -{ - /** - * - * - * @var int - * @readonly - */ - public $id = null; - - /** - * - * - * @var string - * @readonly - */ - public $xPath = null; - - /** - * - * - * @var string - * @readonly - */ - public $key = null; - - /** - * - * - * @var string - * @readonly - */ - public $label = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaMetadataProfileFieldListResponse extends KalturaObjectBase -{ - /** - * - * - * @var array of KalturaMetadataProfileField - * @readonly - */ - public $objects; - - /** - * - * - * @var int - * @readonly - */ - public $totalCount = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaMetadataProfileListResponse extends KalturaObjectBase -{ - /** - * - * - * @var array of KalturaMetadataProfile - * @readonly - */ - public $objects; - - /** - * - * - * @var int - * @readonly - */ - public $totalCount = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaImportMetadataJobData extends KalturaJobData -{ - /** - * - * - * @var string - */ - public $srcFileUrl = null; - - /** - * - * - * @var string - */ - public $destFileLocalPath = null; - - /** - * - * - * @var int - */ - public $metadataId = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -abstract class KalturaMetadataBaseFilter extends KalturaFilter -{ - /** - * - * - * @var int - */ - public $partnerIdEqual = null; - - /** - * - * - * @var int - */ - public $metadataProfileIdEqual = null; - - /** - * - * - * @var int - */ - public $metadataProfileVersionEqual = null; - - /** - * - * - * @var int - */ - public $metadataProfileVersionGreaterThanOrEqual = null; - - /** - * - * - * @var int - */ - public $metadataProfileVersionLessThanOrEqual = null; - - /** - * - * - * @var KalturaMetadataObjectType - */ - public $metadataObjectTypeEqual = null; - - /** - * - * - * @var string - */ - public $objectIdEqual = null; - - /** - * - * - * @var string - */ - public $objectIdIn = null; - - /** - * - * - * @var int - */ - public $versionEqual = null; - - /** - * - * - * @var int - */ - public $versionGreaterThanOrEqual = null; - - /** - * - * - * @var int - */ - public $versionLessThanOrEqual = null; - - /** - * - * - * @var int - */ - public $createdAtGreaterThanOrEqual = null; - - /** - * - * - * @var int - */ - public $createdAtLessThanOrEqual = null; - - /** - * - * - * @var int - */ - public $updatedAtGreaterThanOrEqual = null; - - /** - * - * - * @var int - */ - public $updatedAtLessThanOrEqual = null; - - /** - * - * - * @var KalturaMetadataStatus - */ - public $statusEqual = null; - - /** - * - * - * @var string - */ - public $statusIn = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -abstract class KalturaMetadataProfileBaseFilter extends KalturaFilter -{ - /** - * - * - * @var int - */ - public $idEqual = null; - - /** - * - * - * @var int - */ - public $partnerIdEqual = null; - - /** - * - * - * @var KalturaMetadataObjectType - */ - public $metadataObjectTypeEqual = null; - - /** - * - * - * @var string - */ - public $metadataObjectTypeIn = null; - - /** - * - * - * @var int - */ - public $versionEqual = null; - - /** - * - * - * @var string - */ - public $nameEqual = null; - - /** - * - * - * @var string - */ - public $systemNameEqual = null; - - /** - * - * - * @var string - */ - public $systemNameIn = null; - - /** - * - * - * @var int - */ - public $createdAtGreaterThanOrEqual = null; - - /** - * - * - * @var int - */ - public $createdAtLessThanOrEqual = null; - - /** - * - * - * @var int - */ - public $updatedAtGreaterThanOrEqual = null; - - /** - * - * - * @var int - */ - public $updatedAtLessThanOrEqual = null; - - /** - * - * - * @var KalturaMetadataProfileStatus - */ - public $statusEqual = null; - - /** - * - * - * @var string - */ - public $statusIn = null; - - /** - * - * - * @var KalturaMetadataProfileCreateMode - */ - public $createModeEqual = null; - - /** - * - * - * @var KalturaMetadataProfileCreateMode - */ - public $createModeNotEqual = null; - - /** - * - * - * @var string - */ - public $createModeIn = null; - - /** - * - * - * @var string - */ - public $createModeNotIn = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaTransformMetadataJobData extends KalturaJobData -{ - /** - * - * - * @var string - */ - public $srcXslPath = null; - - /** - * - * - * @var int - */ - public $srcVersion = null; - - /** - * - * - * @var int - */ - public $destVersion = null; - - /** - * - * - * @var string - */ - public $destXsdPath = null; - - /** - * - * - * @var int - */ - public $metadataProfileId = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaCompareMetadataCondition extends KalturaCompareCondition -{ - /** - * May contain the full xpath to the field in three formats - * 1. Slashed xPath, e.g. /metadata/myElementName - * 2. Using local-name function, e.g. /[local-name()='metadata']/[local-name()='myElementName'] - * 3. Using only the field name, e.g. myElementName, it will be searched as //myElementName - * - * - * @var string - */ - public $xPath = null; - - /** - * Metadata profile id - * - * - * @var int - */ - public $profileId = null; - - /** - * Metadata profile system name - * - * - * @var string - */ - public $profileSystemName = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaFileAssetFilter extends KalturaFileAssetBaseFilter -{ - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaMatchMetadataCondition extends KalturaMatchCondition -{ - /** - * May contain the full xpath to the field in three formats - * 1. Slashed xPath, e.g. /metadata/myElementName - * 2. Using local-name function, e.g. /[local-name()='metadata']/[local-name()='myElementName'] - * 3. Using only the field name, e.g. myElementName, it will be searched as //myElementName - * - * - * @var string - */ - public $xPath = null; - - /** - * Metadata profile id - * - * - * @var int - */ - public $profileId = null; - - /** - * Metadata profile system name - * - * - * @var string - */ - public $profileSystemName = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaMetadataFieldChangedCondition extends KalturaMatchCondition -{ - /** - * May contain the full xpath to the field in three formats - * 1. Slashed xPath, e.g. /metadata/myElementName - * 2. Using local-name function, e.g. /[local-name()='metadata']/[local-name()='myElementName'] - * 3. Using only the field name, e.g. myElementName, it will be searched as //myElementName - * - * - * @var string - */ - public $xPath = null; - - /** - * Metadata profile id - * - * - * @var int - */ - public $profileId = null; - - /** - * Metadata profile system name - * - * - * @var string - */ - public $profileSystemName = null; - - /** - * - * - * @var string - */ - public $versionA = null; - - /** - * - * - * @var string - */ - public $versionB = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaMetadataFilter extends KalturaMetadataBaseFilter -{ - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaMetadataProfileFilter extends KalturaMetadataProfileBaseFilter -{ - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaMetadataSearchItem extends KalturaSearchOperator -{ - /** - * - * - * @var int - */ - public $metadataProfileId = null; - - /** - * - * - * @var string - */ - public $orderBy = null; - - -} - - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaMetadataService extends KalturaServiceBase -{ - function __construct(KalturaClient $client = null) - { - parent::__construct($client); - } - - /** - * Allows you to add a metadata object and metadata content associated with Kaltura object - * - * @param int $metadataProfileId - * @param string $objectType - * @param string $objectId - * @param string $xmlData XML metadata - * @return KalturaMetadata - */ - function add($metadataProfileId, $objectType, $objectId, $xmlData) - { - $kparams = array(); - $this->client->addParam($kparams, "metadataProfileId", $metadataProfileId); - $this->client->addParam($kparams, "objectType", $objectType); - $this->client->addParam($kparams, "objectId", $objectId); - $this->client->addParam($kparams, "xmlData", $xmlData); - $this->client->queueServiceActionCall("metadata_metadata", "add", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaMetadata"); - return $resultObject; - } - - /** - * Allows you to add a metadata object and metadata file associated with Kaltura object - * - * @param int $metadataProfileId - * @param string $objectType - * @param string $objectId - * @param file $xmlFile XML metadata - * @return KalturaMetadata - */ - function addFromFile($metadataProfileId, $objectType, $objectId, $xmlFile) - { - $kparams = array(); - $this->client->addParam($kparams, "metadataProfileId", $metadataProfileId); - $this->client->addParam($kparams, "objectType", $objectType); - $this->client->addParam($kparams, "objectId", $objectId); - $kfiles = array(); - $this->client->addParam($kfiles, "xmlFile", $xmlFile); - $this->client->queueServiceActionCall("metadata_metadata", "addFromFile", $kparams, $kfiles); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaMetadata"); - return $resultObject; - } - - /** - * Allows you to add a metadata xml data from remote URL - * - * @param int $metadataProfileId - * @param string $objectType - * @param string $objectId - * @param string $url XML metadata remote url - * @return KalturaMetadata - */ - function addFromUrl($metadataProfileId, $objectType, $objectId, $url) - { - $kparams = array(); - $this->client->addParam($kparams, "metadataProfileId", $metadataProfileId); - $this->client->addParam($kparams, "objectType", $objectType); - $this->client->addParam($kparams, "objectId", $objectId); - $this->client->addParam($kparams, "url", $url); - $this->client->queueServiceActionCall("metadata_metadata", "addFromUrl", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaMetadata"); - return $resultObject; - } - - /** - * Allows you to add a metadata xml data from remote URL. - Enables different permissions than addFromUrl action. - * - * @param int $metadataProfileId - * @param string $objectType - * @param string $objectId - * @param string $url XML metadata remote url - * @return KalturaMetadata - */ - function addFromBulk($metadataProfileId, $objectType, $objectId, $url) - { - $kparams = array(); - $this->client->addParam($kparams, "metadataProfileId", $metadataProfileId); - $this->client->addParam($kparams, "objectType", $objectType); - $this->client->addParam($kparams, "objectId", $objectId); - $this->client->addParam($kparams, "url", $url); - $this->client->queueServiceActionCall("metadata_metadata", "addFromBulk", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaMetadata"); - return $resultObject; - } - - /** - * Retrieve a metadata object by id - * - * @param int $id - * @return KalturaMetadata - */ - function get($id) - { - $kparams = array(); - $this->client->addParam($kparams, "id", $id); - $this->client->queueServiceActionCall("metadata_metadata", "get", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaMetadata"); - return $resultObject; - } - - /** - * Update an existing metadata object with new XML content - * - * @param int $id - * @param string $xmlData XML metadata - * @param int $version Enable update only if the metadata object version did not change by other process - * @return KalturaMetadata - */ - function update($id, $xmlData = null, $version = null) - { - $kparams = array(); - $this->client->addParam($kparams, "id", $id); - $this->client->addParam($kparams, "xmlData", $xmlData); - $this->client->addParam($kparams, "version", $version); - $this->client->queueServiceActionCall("metadata_metadata", "update", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaMetadata"); - return $resultObject; - } - - /** - * Update an existing metadata object with new XML file - * - * @param int $id - * @param file $xmlFile XML metadata - * @return KalturaMetadata - */ - function updateFromFile($id, $xmlFile = null) - { - $kparams = array(); - $this->client->addParam($kparams, "id", $id); - $kfiles = array(); - $this->client->addParam($kfiles, "xmlFile", $xmlFile); - $this->client->queueServiceActionCall("metadata_metadata", "updateFromFile", $kparams, $kfiles); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaMetadata"); - return $resultObject; - } - - /** - * List metadata objects by filter and pager - * - * @param KalturaMetadataFilter $filter - * @param KalturaFilterPager $pager - * @return KalturaMetadataListResponse - */ - function listAction(KalturaMetadataFilter $filter = null, KalturaFilterPager $pager = null) - { - $kparams = array(); - if ($filter !== null) - $this->client->addParam($kparams, "filter", $filter->toParams()); - if ($pager !== null) - $this->client->addParam($kparams, "pager", $pager->toParams()); - $this->client->queueServiceActionCall("metadata_metadata", "list", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaMetadataListResponse"); - return $resultObject; - } - - /** - * Delete an existing metadata - * - * @param int $id - * @return - */ - function delete($id) - { - $kparams = array(); - $this->client->addParam($kparams, "id", $id); - $this->client->queueServiceActionCall("metadata_metadata", "delete", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "null"); - return $resultObject; - } - - /** - * Mark existing metadata as invalid - Used by batch metadata transform - * - * @param int $id - * @param int $version Enable update only if the metadata object version did not change by other process - * @return - */ - function invalidate($id, $version = null) - { - $kparams = array(); - $this->client->addParam($kparams, "id", $id); - $this->client->addParam($kparams, "version", $version); - $this->client->queueServiceActionCall("metadata_metadata", "invalidate", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "null"); - return $resultObject; - } - - /** - * Serves metadata XML file - * - * @param int $id - * @return file - */ - function serve($id) - { - $kparams = array(); - $this->client->addParam($kparams, "id", $id); - $this->client->queueServiceActionCall("metadata_metadata", "serve", $kparams); - if(!$this->client->getDestinationPath() && !$this->client->getReturnServedResult()) - return $this->client->getServeUrl(); - return $this->client->doQueue(); - } - - /** - * Action transforms current metadata object XML using a provided XSL. - * - * @param int $id - * @param file $xslFile - * @return KalturaMetadata - */ - function updateFromXSL($id, $xslFile) - { - $kparams = array(); - $this->client->addParam($kparams, "id", $id); - $kfiles = array(); - $this->client->addParam($kfiles, "xslFile", $xslFile); - $this->client->queueServiceActionCall("metadata_metadata", "updateFromXSL", $kparams, $kfiles); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaMetadata"); - return $resultObject; - } -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaMetadataProfileService extends KalturaServiceBase -{ - function __construct(KalturaClient $client = null) - { - parent::__construct($client); - } - - /** - * Allows you to add a metadata profile object and metadata profile content associated with Kaltura object type - * - * @param KalturaMetadataProfile $metadataProfile - * @param string $xsdData XSD metadata definition - * @param string $viewsData UI views definition - * @return KalturaMetadataProfile - */ - function add(KalturaMetadataProfile $metadataProfile, $xsdData, $viewsData = null) - { - $kparams = array(); - $this->client->addParam($kparams, "metadataProfile", $metadataProfile->toParams()); - $this->client->addParam($kparams, "xsdData", $xsdData); - $this->client->addParam($kparams, "viewsData", $viewsData); - $this->client->queueServiceActionCall("metadata_metadataprofile", "add", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaMetadataProfile"); - return $resultObject; - } - - /** - * Allows you to add a metadata profile object and metadata profile file associated with Kaltura object type - * - * @param KalturaMetadataProfile $metadataProfile - * @param file $xsdFile XSD metadata definition - * @param file $viewsFile UI views definition - * @return KalturaMetadataProfile - */ - function addFromFile(KalturaMetadataProfile $metadataProfile, $xsdFile, $viewsFile = null) - { - $kparams = array(); - $this->client->addParam($kparams, "metadataProfile", $metadataProfile->toParams()); - $kfiles = array(); - $this->client->addParam($kfiles, "xsdFile", $xsdFile); - $this->client->addParam($kfiles, "viewsFile", $viewsFile); - $this->client->queueServiceActionCall("metadata_metadataprofile", "addFromFile", $kparams, $kfiles); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaMetadataProfile"); - return $resultObject; - } - - /** - * Retrieve a metadata profile object by id - * - * @param int $id - * @return KalturaMetadataProfile - */ - function get($id) - { - $kparams = array(); - $this->client->addParam($kparams, "id", $id); - $this->client->queueServiceActionCall("metadata_metadataprofile", "get", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaMetadataProfile"); - return $resultObject; - } - - /** - * Update an existing metadata object - * - * @param int $id - * @param KalturaMetadataProfile $metadataProfile - * @param string $xsdData XSD metadata definition - * @param string $viewsData UI views definition - * @return KalturaMetadataProfile - */ - function update($id, KalturaMetadataProfile $metadataProfile, $xsdData = null, $viewsData = null) - { - $kparams = array(); - $this->client->addParam($kparams, "id", $id); - $this->client->addParam($kparams, "metadataProfile", $metadataProfile->toParams()); - $this->client->addParam($kparams, "xsdData", $xsdData); - $this->client->addParam($kparams, "viewsData", $viewsData); - $this->client->queueServiceActionCall("metadata_metadataprofile", "update", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaMetadataProfile"); - return $resultObject; - } - - /** - * List metadata profile objects by filter and pager - * - * @param KalturaMetadataProfileFilter $filter - * @param KalturaFilterPager $pager - * @return KalturaMetadataProfileListResponse - */ - function listAction(KalturaMetadataProfileFilter $filter = null, KalturaFilterPager $pager = null) - { - $kparams = array(); - if ($filter !== null) - $this->client->addParam($kparams, "filter", $filter->toParams()); - if ($pager !== null) - $this->client->addParam($kparams, "pager", $pager->toParams()); - $this->client->queueServiceActionCall("metadata_metadataprofile", "list", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaMetadataProfileListResponse"); - return $resultObject; - } - - /** - * List metadata profile fields by metadata profile id - * - * @param int $metadataProfileId - * @return KalturaMetadataProfileFieldListResponse - */ - function listFields($metadataProfileId) - { - $kparams = array(); - $this->client->addParam($kparams, "metadataProfileId", $metadataProfileId); - $this->client->queueServiceActionCall("metadata_metadataprofile", "listFields", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaMetadataProfileFieldListResponse"); - return $resultObject; - } - - /** - * Delete an existing metadata profile - * - * @param int $id - * @return - */ - function delete($id) - { - $kparams = array(); - $this->client->addParam($kparams, "id", $id); - $this->client->queueServiceActionCall("metadata_metadataprofile", "delete", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "null"); - return $resultObject; - } - - /** - * Update an existing metadata object definition file - * - * @param int $id - * @param int $toVersion - * @return KalturaMetadataProfile - */ - function revert($id, $toVersion) - { - $kparams = array(); - $this->client->addParam($kparams, "id", $id); - $this->client->addParam($kparams, "toVersion", $toVersion); - $this->client->queueServiceActionCall("metadata_metadataprofile", "revert", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaMetadataProfile"); - return $resultObject; - } - - /** - * Update an existing metadata object definition file - * - * @param int $id - * @param file $xsdFile XSD metadata definition - * @return KalturaMetadataProfile - */ - function updateDefinitionFromFile($id, $xsdFile) - { - $kparams = array(); - $this->client->addParam($kparams, "id", $id); - $kfiles = array(); - $this->client->addParam($kfiles, "xsdFile", $xsdFile); - $this->client->queueServiceActionCall("metadata_metadataprofile", "updateDefinitionFromFile", $kparams, $kfiles); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaMetadataProfile"); - return $resultObject; - } - - /** - * Update an existing metadata object views file - * - * @param int $id - * @param file $viewsFile UI views file - * @return KalturaMetadataProfile - */ - function updateViewsFromFile($id, $viewsFile) - { - $kparams = array(); - $this->client->addParam($kparams, "id", $id); - $kfiles = array(); - $this->client->addParam($kfiles, "viewsFile", $viewsFile); - $this->client->queueServiceActionCall("metadata_metadataprofile", "updateViewsFromFile", $kparams, $kfiles); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaMetadataProfile"); - return $resultObject; - } - - /** - * Update an existing metadata object xslt file - * - * @param int $id - * @param file $xsltFile XSLT file, will be executed on every metadata add/update - * @return KalturaMetadataProfile - */ - function updateTransformationFromFile($id, $xsltFile) - { - $kparams = array(); - $this->client->addParam($kparams, "id", $id); - $kfiles = array(); - $this->client->addParam($kfiles, "xsltFile", $xsltFile); - $this->client->queueServiceActionCall("metadata_metadataprofile", "updateTransformationFromFile", $kparams, $kfiles); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaMetadataProfile"); - return $resultObject; - } - - /** - * Serves metadata profile XSD file - * - * @param int $id - * @return file - */ - function serve($id) - { - $kparams = array(); - $this->client->addParam($kparams, "id", $id); - $this->client->queueServiceActionCall("metadata_metadataprofile", "serve", $kparams); - if(!$this->client->getDestinationPath() && !$this->client->getReturnServedResult()) - return $this->client->getServeUrl(); - return $this->client->doQueue(); - } - - /** - * Serves metadata profile view file - * - * @param int $id - * @return file - */ - function serveView($id) - { - $kparams = array(); - $this->client->addParam($kparams, "id", $id); - $this->client->queueServiceActionCall("metadata_metadataprofile", "serveView", $kparams); - if(!$this->client->getDestinationPath() && !$this->client->getReturnServedResult()) - return $this->client->getServeUrl(); - return $this->client->doQueue(); - } -} -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaMetadataClientPlugin extends KalturaClientPlugin -{ - /** - * @var KalturaMetadataService - */ - public $metadata = null; - - /** - * @var KalturaMetadataProfileService - */ - public $metadataProfile = null; - - protected function __construct(KalturaClient $client) - { - parent::__construct($client); - $this->metadata = new KalturaMetadataService($client); - $this->metadataProfile = new KalturaMetadataProfileService($client); - } - - /** - * @return KalturaMetadataClientPlugin - */ - public static function get(KalturaClient $client) - { - return new KalturaMetadataClientPlugin($client); - } - - /** - * @return array - */ - public function getServices() - { - $services = array( - 'metadata' => $this->metadata, - 'metadataProfile' => $this->metadataProfile, - ); - return $services; - } - - /** - * @return string - */ - public function getName() - { - return 'metadata'; - } -} - diff --git a/local/kaltura/API/KalturaPlugins/KalturaMultiCentersClientPlugin.php b/local/kaltura/API/KalturaPlugins/KalturaMultiCentersClientPlugin.php deleted file mode 100644 index c3b2aff0a11b4..0000000000000 --- a/local/kaltura/API/KalturaPlugins/KalturaMultiCentersClientPlugin.php +++ /dev/null @@ -1,119 +0,0 @@ -. -// -// @ignore -// =================================================================================================== - -/** - * @package Kaltura - * @subpackage Client - */ -require_once(dirname(__FILE__) . "/../KalturaClientBase.php"); -require_once(dirname(__FILE__) . "/../KalturaEnums.php"); -require_once(dirname(__FILE__) . "/../KalturaTypes.php"); - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaFileSyncImportJobData extends KalturaJobData -{ - /** - * - * - * @var string - */ - public $sourceUrl = null; - - /** - * - * - * @var string - */ - public $filesyncId = null; - - /** - * - * - * @var string - */ - public $tmpFilePath = null; - - /** - * - * - * @var string - */ - public $destFilePath = null; - - /** - * - * - * @var int - */ - public $fileSize = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaMultiCentersClientPlugin extends KalturaClientPlugin -{ - protected function __construct(KalturaClient $client) - { - parent::__construct($client); - } - - /** - * @return KalturaMultiCentersClientPlugin - */ - public static function get(KalturaClient $client) - { - return new KalturaMultiCentersClientPlugin($client); - } - - /** - * @return array - */ - public function getServices() - { - $services = array( - ); - return $services; - } - - /** - * @return string - */ - public function getName() - { - return 'multiCenters'; - } -} - diff --git a/local/kaltura/API/KalturaPlugins/KalturaShortLinkClientPlugin.php b/local/kaltura/API/KalturaPlugins/KalturaShortLinkClientPlugin.php deleted file mode 100644 index 5da843b5e3be2..0000000000000 --- a/local/kaltura/API/KalturaPlugins/KalturaShortLinkClientPlugin.php +++ /dev/null @@ -1,476 +0,0 @@ -. -// -// @ignore -// =================================================================================================== - -/** - * @package Kaltura - * @subpackage Client - */ -require_once(dirname(__FILE__) . "/../KalturaClientBase.php"); -require_once(dirname(__FILE__) . "/../KalturaEnums.php"); -require_once(dirname(__FILE__) . "/../KalturaTypes.php"); - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaShortLinkStatus -{ - const DISABLED = 1; - const ENABLED = 2; - const DELETED = 3; -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaShortLinkOrderBy -{ - const CREATED_AT_ASC = "+createdAt"; - const EXPIRES_AT_ASC = "+expiresAt"; - const UPDATED_AT_ASC = "+updatedAt"; - const CREATED_AT_DESC = "-createdAt"; - const EXPIRES_AT_DESC = "-expiresAt"; - const UPDATED_AT_DESC = "-updatedAt"; -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaShortLink extends KalturaObjectBase -{ - /** - * - * - * @var int - * @readonly - */ - public $id = null; - - /** - * - * - * @var int - * @readonly - */ - public $createdAt = null; - - /** - * - * - * @var int - * @readonly - */ - public $updatedAt = null; - - /** - * - * - * @var int - */ - public $expiresAt = null; - - /** - * - * - * @var int - * @readonly - */ - public $partnerId = null; - - /** - * - * - * @var string - */ - public $userId = null; - - /** - * - * - * @var string - */ - public $name = null; - - /** - * - * - * @var string - */ - public $systemName = null; - - /** - * - * - * @var string - */ - public $fullUrl = null; - - /** - * - * - * @var KalturaShortLinkStatus - */ - public $status = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaShortLinkListResponse extends KalturaObjectBase -{ - /** - * - * - * @var array of KalturaShortLink - * @readonly - */ - public $objects; - - /** - * - * - * @var int - * @readonly - */ - public $totalCount = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -abstract class KalturaShortLinkBaseFilter extends KalturaFilter -{ - /** - * - * - * @var int - */ - public $idEqual = null; - - /** - * - * - * @var string - */ - public $idIn = null; - - /** - * - * - * @var int - */ - public $createdAtGreaterThanOrEqual = null; - - /** - * - * - * @var int - */ - public $createdAtLessThanOrEqual = null; - - /** - * - * - * @var int - */ - public $updatedAtGreaterThanOrEqual = null; - - /** - * - * - * @var int - */ - public $updatedAtLessThanOrEqual = null; - - /** - * - * - * @var int - */ - public $expiresAtGreaterThanOrEqual = null; - - /** - * - * - * @var int - */ - public $expiresAtLessThanOrEqual = null; - - /** - * - * - * @var int - */ - public $partnerIdEqual = null; - - /** - * - * - * @var string - */ - public $partnerIdIn = null; - - /** - * - * - * @var string - */ - public $userIdEqual = null; - - /** - * - * - * @var string - */ - public $userIdIn = null; - - /** - * - * - * @var string - */ - public $systemNameEqual = null; - - /** - * - * - * @var string - */ - public $systemNameIn = null; - - /** - * - * - * @var KalturaShortLinkStatus - */ - public $statusEqual = null; - - /** - * - * - * @var string - */ - public $statusIn = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaShortLinkFilter extends KalturaShortLinkBaseFilter -{ - -} - - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaShortLinkService extends KalturaServiceBase -{ - function __construct(KalturaClient $client = null) - { - parent::__construct($client); - } - - /** - * List short link objects by filter and pager - * - * @param KalturaShortLinkFilter $filter - * @param KalturaFilterPager $pager - * @return KalturaShortLinkListResponse - */ - function listAction(KalturaShortLinkFilter $filter = null, KalturaFilterPager $pager = null) - { - $kparams = array(); - if ($filter !== null) - $this->client->addParam($kparams, "filter", $filter->toParams()); - if ($pager !== null) - $this->client->addParam($kparams, "pager", $pager->toParams()); - $this->client->queueServiceActionCall("shortlink_shortlink", "list", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaShortLinkListResponse"); - return $resultObject; - } - - /** - * Allows you to add a short link object - * - * @param KalturaShortLink $shortLink - * @return KalturaShortLink - */ - function add(KalturaShortLink $shortLink) - { - $kparams = array(); - $this->client->addParam($kparams, "shortLink", $shortLink->toParams()); - $this->client->queueServiceActionCall("shortlink_shortlink", "add", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaShortLink"); - return $resultObject; - } - - /** - * Retrieve an short link object by id - * - * @param string $id - * @return KalturaShortLink - */ - function get($id) - { - $kparams = array(); - $this->client->addParam($kparams, "id", $id); - $this->client->queueServiceActionCall("shortlink_shortlink", "get", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaShortLink"); - return $resultObject; - } - - /** - * Update exisitng short link - * - * @param string $id - * @param KalturaShortLink $shortLink - * @return KalturaShortLink - */ - function update($id, KalturaShortLink $shortLink) - { - $kparams = array(); - $this->client->addParam($kparams, "id", $id); - $this->client->addParam($kparams, "shortLink", $shortLink->toParams()); - $this->client->queueServiceActionCall("shortlink_shortlink", "update", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaShortLink"); - return $resultObject; - } - - /** - * Mark the short link as deleted - * - * @param string $id - * @return KalturaShortLink - */ - function delete($id) - { - $kparams = array(); - $this->client->addParam($kparams, "id", $id); - $this->client->queueServiceActionCall("shortlink_shortlink", "delete", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaShortLink"); - return $resultObject; - } - - /** - * Serves short link - * - * @param string $id - * @param bool $proxy Proxy the response instead of redirect - * @return file - */ - function gotoAction($id, $proxy = false) - { - $kparams = array(); - $this->client->addParam($kparams, "id", $id); - $this->client->addParam($kparams, "proxy", $proxy); - $this->client->queueServiceActionCall("shortlink_shortlink", "goto", $kparams); - if(!$this->client->getDestinationPath() && !$this->client->getReturnServedResult()) - return $this->client->getServeUrl(); - return $this->client->doQueue(); - } -} -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaShortLinkClientPlugin extends KalturaClientPlugin -{ - /** - * @var KalturaShortLinkService - */ - public $shortLink = null; - - protected function __construct(KalturaClient $client) - { - parent::__construct($client); - $this->shortLink = new KalturaShortLinkService($client); - } - - /** - * @return KalturaShortLinkClientPlugin - */ - public static function get(KalturaClient $client) - { - return new KalturaShortLinkClientPlugin($client); - } - - /** - * @return array - */ - public function getServices() - { - $services = array( - 'shortLink' => $this->shortLink, - ); - return $services; - } - - /** - * @return string - */ - public function getName() - { - return 'shortLink'; - } -} - diff --git a/local/kaltura/API/KalturaPlugins/KalturaTagSearchClientPlugin.php b/local/kaltura/API/KalturaPlugins/KalturaTagSearchClientPlugin.php deleted file mode 100644 index 9c3080e1d0b09..0000000000000 --- a/local/kaltura/API/KalturaPlugins/KalturaTagSearchClientPlugin.php +++ /dev/null @@ -1,320 +0,0 @@ -. -// -// @ignore -// =================================================================================================== - -/** - * @package Kaltura - * @subpackage Client - */ -require_once(dirname(__FILE__) . "/../KalturaClientBase.php"); -require_once(dirname(__FILE__) . "/../KalturaEnums.php"); -require_once(dirname(__FILE__) . "/../KalturaTypes.php"); - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaTag extends KalturaObjectBase -{ - /** - * - * - * @var int - * @readonly - */ - public $id = null; - - /** - * - * - * @var string - * @readonly - */ - public $tag = null; - - /** - * - * - * @var KalturaTaggedObjectType - * @readonly - */ - public $taggedObjectType = null; - - /** - * - * - * @var int - * @readonly - */ - public $partnerId = null; - - /** - * - * - * @var int - * @readonly - */ - public $instanceCount = null; - - /** - * - * - * @var int - * @readonly - */ - public $createdAt = null; - - /** - * - * - * @var int - * @readonly - */ - public $updatedAt = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaTagListResponse extends KalturaObjectBase -{ - /** - * - * - * @var array of KalturaTag - * @readonly - */ - public $objects; - - /** - * - * - * @var int - * @readonly - */ - public $totalCount = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaIndexTagsByPrivacyContextJobData extends KalturaJobData -{ - /** - * - * - * @var int - */ - public $changedCategoryId = null; - - /** - * - * - * @var string - */ - public $deletedPrivacyContexts = null; - - /** - * - * - * @var string - */ - public $addedPrivacyContexts = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaTagFilter extends KalturaFilter -{ - /** - * - * - * @var KalturaTaggedObjectType - */ - public $objectTypeEqual = null; - - /** - * - * - * @var string - */ - public $tagEqual = null; - - /** - * - * - * @var string - */ - public $tagStartsWith = null; - - /** - * - * - * @var int - */ - public $instanceCountEqual = null; - - /** - * - * - * @var int - */ - public $instanceCountIn = null; - - -} - - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaTagService extends KalturaServiceBase -{ - function __construct(KalturaClient $client = null) - { - parent::__construct($client); - } - - /** - * - * - * @param KalturaTagFilter $tagFilter - * @param KalturaFilterPager $pager - * @return KalturaTagListResponse - */ - function search(KalturaTagFilter $tagFilter, KalturaFilterPager $pager = null) - { - $kparams = array(); - $this->client->addParam($kparams, "tagFilter", $tagFilter->toParams()); - if ($pager !== null) - $this->client->addParam($kparams, "pager", $pager->toParams()); - $this->client->queueServiceActionCall("tagsearch_tag", "search", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaTagListResponse"); - return $resultObject; - } - - /** - * Action goes over all tags with instanceCount==0 and checks whether they need to be removed from the DB. Returns number of removed tags. - * - * @return int - */ - function deletePending() - { - $kparams = array(); - $this->client->queueServiceActionCall("tagsearch_tag", "deletePending", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "integer"); - return $resultObject; - } - - /** - * - * - * @param int $categoryId - * @param string $pcToDecrement - * @param string $pcToIncrement - * @return - */ - function indexCategoryEntryTags($categoryId, $pcToDecrement, $pcToIncrement) - { - $kparams = array(); - $this->client->addParam($kparams, "categoryId", $categoryId); - $this->client->addParam($kparams, "pcToDecrement", $pcToDecrement); - $this->client->addParam($kparams, "pcToIncrement", $pcToIncrement); - $this->client->queueServiceActionCall("tagsearch_tag", "indexCategoryEntryTags", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "null"); - return $resultObject; - } -} -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaTagSearchClientPlugin extends KalturaClientPlugin -{ - /** - * @var KalturaTagService - */ - public $tag = null; - - protected function __construct(KalturaClient $client) - { - parent::__construct($client); - $this->tag = new KalturaTagService($client); - } - - /** - * @return KalturaTagSearchClientPlugin - */ - public static function get(KalturaClient $client) - { - return new KalturaTagSearchClientPlugin($client); - } - - /** - * @return array - */ - public function getServices() - { - $services = array( - 'tag' => $this->tag, - ); - return $services; - } - - /** - * @return string - */ - public function getName() - { - return 'tagSearch'; - } -} - diff --git a/local/kaltura/API/KalturaPlugins/KalturaVarConsoleClientPlugin.php b/local/kaltura/API/KalturaPlugins/KalturaVarConsoleClientPlugin.php deleted file mode 100644 index 83e347358b4a7..0000000000000 --- a/local/kaltura/API/KalturaPlugins/KalturaVarConsoleClientPlugin.php +++ /dev/null @@ -1,398 +0,0 @@ -. -// -// @ignore -// =================================================================================================== - -/** - * @package Kaltura - * @subpackage Client - */ -require_once(dirname(__FILE__) . "/../KalturaClientBase.php"); -require_once(dirname(__FILE__) . "/../KalturaEnums.php"); -require_once(dirname(__FILE__) . "/../KalturaTypes.php"); - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaVarPartnerUsageItem extends KalturaObjectBase -{ - /** - * Partner ID - * - * - * @var int - */ - public $partnerId = null; - - /** - * Partner name - * - * - * @var string - */ - public $partnerName = null; - - /** - * Partner status - * - * - * @var KalturaPartnerStatus - */ - public $partnerStatus = null; - - /** - * Partner package - * - * - * @var int - */ - public $partnerPackage = null; - - /** - * Partner creation date (Unix timestamp) - * - * - * @var int - */ - public $partnerCreatedAt = null; - - /** - * Number of player loads in the specific date range - * - * - * @var int - */ - public $views = null; - - /** - * Number of plays in the specific date range - * - * - * @var int - */ - public $plays = null; - - /** - * Number of new entries created during specific date range - * - * - * @var int - */ - public $entriesCount = null; - - /** - * Total number of entries - * - * - * @var int - */ - public $totalEntriesCount = null; - - /** - * Number of new video entries created during specific date range - * - * - * @var int - */ - public $videoEntriesCount = null; - - /** - * Number of new image entries created during specific date range - * - * - * @var int - */ - public $imageEntriesCount = null; - - /** - * Number of new audio entries created during specific date range - * - * - * @var int - */ - public $audioEntriesCount = null; - - /** - * Number of new mix entries created during specific date range - * - * - * @var int - */ - public $mixEntriesCount = null; - - /** - * The total bandwidth usage during the given date range (in MB) - * - * - * @var float - */ - public $bandwidth = null; - - /** - * The total storage consumption (in MB) - * - * - * @var float - */ - public $totalStorage = null; - - /** - * The added storage consumption (new uploads) during the given date range (in MB) - * - * - * @var float - */ - public $storage = null; - - /** - * The deleted storage consumption (new uploads) during the given date range (in MB) - * - * - * @var float - */ - public $deletedStorage = null; - - /** - * The peak amount of storage consumption during the given date range for the specific publisher - * - * - * @var float - */ - public $peakStorage = null; - - /** - * The average amount of storage consumption during the given date range for the specific publisher - * - * - * @var float - */ - public $avgStorage = null; - - /** - * The combined amount of bandwidth and storage consumed during the given date range for the specific publisher - * - * - * @var float - */ - public $combinedStorageBandwidth = null; - - /** - * Amount of transcoding usage in MB - * - * - * @var float - */ - public $transcodingUsage = null; - - /** - * TGhe date at which the report was taken - Unix Timestamp - * - * - * @var string - */ - public $dateId = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaPartnerUsageListResponse extends KalturaObjectBase -{ - /** - * - * - * @var KalturaVarPartnerUsageItem - */ - public $total; - - /** - * - * - * @var array of KalturaVarPartnerUsageItem - */ - public $objects; - - /** - * - * - * @var int - */ - public $totalCount = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaVarPartnerUsageTotalItem extends KalturaVarPartnerUsageItem -{ - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaVarConsolePartnerFilter extends KalturaPartnerFilter -{ - /** - * Eq filter for the partner's group type - * - * - * @var KalturaPartnerGroupType - */ - public $groupTypeEq = null; - - /** - * In filter for the partner's group type - * - * - * @var string - */ - public $groupTypeIn = null; - - /** - * Filter for partner permissions- filter contains comma-separated string of permission names which the returned partners should have. - * - * - * @var string - */ - public $partnerPermissionsExist = null; - - -} - - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaVarConsoleService extends KalturaServiceBase -{ - function __construct(KalturaClient $client = null) - { - parent::__construct($client); - } - - /** - * Function which calulates partner usage of a group of a VAR's sub-publishers - * - * @param KalturaPartnerFilter $partnerFilter - * @param KalturaReportInputFilter $usageFilter - * @param KalturaFilterPager $pager - * @return KalturaPartnerUsageListResponse - */ - function getPartnerUsage(KalturaPartnerFilter $partnerFilter = null, KalturaReportInputFilter $usageFilter = null, KalturaFilterPager $pager = null) - { - $kparams = array(); - if ($partnerFilter !== null) - $this->client->addParam($kparams, "partnerFilter", $partnerFilter->toParams()); - if ($usageFilter !== null) - $this->client->addParam($kparams, "usageFilter", $usageFilter->toParams()); - if ($pager !== null) - $this->client->addParam($kparams, "pager", $pager->toParams()); - $this->client->queueServiceActionCall("varconsole_varconsole", "getPartnerUsage", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaPartnerUsageListResponse"); - return $resultObject; - } - - /** - * Function to change a sub-publisher's status - * - * @param int $id - * @param int $status - * @return - */ - function updateStatus($id, $status) - { - $kparams = array(); - $this->client->addParam($kparams, "id", $id); - $this->client->addParam($kparams, "status", $status); - $this->client->queueServiceActionCall("varconsole_varconsole", "updateStatus", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "null"); - return $resultObject; - } -} -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaVarConsoleClientPlugin extends KalturaClientPlugin -{ - /** - * @var KalturaVarConsoleService - */ - public $varConsole = null; - - protected function __construct(KalturaClient $client) - { - parent::__construct($client); - $this->varConsole = new KalturaVarConsoleService($client); - } - - /** - * @return KalturaVarConsoleClientPlugin - */ - public static function get(KalturaClient $client) - { - return new KalturaVarConsoleClientPlugin($client); - } - - /** - * @return array - */ - public function getServices() - { - $services = array( - 'varConsole' => $this->varConsole, - ); - return $services; - } - - /** - * @return string - */ - public function getName() - { - return 'varConsole'; - } -} - diff --git a/local/kaltura/API/KalturaPlugins/KalturaVelocixClientPlugin.php b/local/kaltura/API/KalturaPlugins/KalturaVelocixClientPlugin.php deleted file mode 100644 index 5c4ff95bcb4f0..0000000000000 --- a/local/kaltura/API/KalturaPlugins/KalturaVelocixClientPlugin.php +++ /dev/null @@ -1,105 +0,0 @@ -. -// -// @ignore -// =================================================================================================== - -/** - * @package Kaltura - * @subpackage Client - */ -require_once(dirname(__FILE__) . "/../KalturaClientBase.php"); -require_once(dirname(__FILE__) . "/../KalturaEnums.php"); -require_once(dirname(__FILE__) . "/../KalturaTypes.php"); - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaVelocixProvisionJobData extends KalturaProvisionJobData -{ - /** - * - * - * @var array of KalturaKeyValue - */ - public $provisioningParams; - - /** - * - * - * @var string - */ - public $userName = null; - - /** - * - * - * @var string - */ - public $password = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaVelocixClientPlugin extends KalturaClientPlugin -{ - protected function __construct(KalturaClient $client) - { - parent::__construct($client); - } - - /** - * @return KalturaVelocixClientPlugin - */ - public static function get(KalturaClient $client) - { - return new KalturaVelocixClientPlugin($client); - } - - /** - * @return array - */ - public function getServices() - { - $services = array( - ); - return $services; - } - - /** - * @return string - */ - public function getName() - { - return 'velocix'; - } -} - diff --git a/local/kaltura/API/KalturaPlugins/KalturaVirusScanClientPlugin.php b/local/kaltura/API/KalturaPlugins/KalturaVirusScanClientPlugin.php deleted file mode 100644 index 77aacf1295b49..0000000000000 --- a/local/kaltura/API/KalturaPlugins/KalturaVirusScanClientPlugin.php +++ /dev/null @@ -1,545 +0,0 @@ -. -// -// @ignore -// =================================================================================================== - -/** - * @package Kaltura - * @subpackage Client - */ -require_once(dirname(__FILE__) . "/../KalturaClientBase.php"); -require_once(dirname(__FILE__) . "/../KalturaEnums.php"); -require_once(dirname(__FILE__) . "/../KalturaTypes.php"); - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaVirusFoundAction -{ - const NONE = 0; - const DELETE = 1; - const CLEAN_NONE = 2; - const CLEAN_DELETE = 3; -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaVirusScanJobResult -{ - const SCAN_ERROR = 1; - const FILE_IS_CLEAN = 2; - const FILE_WAS_CLEANED = 3; - const FILE_INFECTED = 4; -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaVirusScanProfileStatus -{ - const DISABLED = 1; - const ENABLED = 2; - const DELETED = 3; -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaVirusScanEngineType -{ - const CLAMAV_SCAN_ENGINE = "clamAVScanEngine.ClamAV"; - const SYMANTEC_SCAN_DIRECT_ENGINE = "symantecScanEngine.SymantecScanDirectEngine"; - const SYMANTEC_SCAN_ENGINE = "symantecScanEngine.SymantecScanEngine"; - const SYMANTEC_SCAN_JAVA_ENGINE = "symantecScanEngine.SymantecScanJavaEngine"; -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaVirusScanProfileOrderBy -{ - const CREATED_AT_ASC = "+createdAt"; - const UPDATED_AT_ASC = "+updatedAt"; - const CREATED_AT_DESC = "-createdAt"; - const UPDATED_AT_DESC = "-updatedAt"; -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaVirusScanProfile extends KalturaObjectBase -{ - /** - * - * - * @var int - * @readonly - */ - public $id = null; - - /** - * - * - * @var int - * @readonly - */ - public $createdAt = null; - - /** - * - * - * @var int - * @readonly - */ - public $updatedAt = null; - - /** - * - * - * @var int - * @readonly - */ - public $partnerId = null; - - /** - * - * - * @var string - */ - public $name = null; - - /** - * - * - * @var KalturaVirusScanProfileStatus - */ - public $status = null; - - /** - * - * - * @var KalturaVirusScanEngineType - */ - public $engineType = null; - - /** - * - * - * @var KalturaBaseEntryFilter - */ - public $entryFilter; - - /** - * - * - * @var KalturaVirusFoundAction - */ - public $actionIfInfected = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaVirusScanProfileListResponse extends KalturaObjectBase -{ - /** - * - * - * @var array of KalturaVirusScanProfile - * @readonly - */ - public $objects; - - /** - * - * - * @var int - * @readonly - */ - public $totalCount = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaParseCaptionAssetJobData extends KalturaJobData -{ - /** - * - * - * @var string - */ - public $captionAssetId = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaVirusScanJobData extends KalturaJobData -{ - /** - * - * - * @var string - */ - public $srcFilePath = null; - - /** - * - * - * @var string - */ - public $flavorAssetId = null; - - /** - * - * - * @var KalturaVirusScanJobResult - */ - public $scanResult = null; - - /** - * - * - * @var KalturaVirusFoundAction - */ - public $virusFoundAction = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -abstract class KalturaVirusScanProfileBaseFilter extends KalturaFilter -{ - /** - * - * - * @var int - */ - public $idEqual = null; - - /** - * - * - * @var string - */ - public $idIn = null; - - /** - * - * - * @var int - */ - public $createdAtGreaterThanOrEqual = null; - - /** - * - * - * @var int - */ - public $createdAtLessThanOrEqual = null; - - /** - * - * - * @var int - */ - public $updatedAtGreaterThanOrEqual = null; - - /** - * - * - * @var int - */ - public $updatedAtLessThanOrEqual = null; - - /** - * - * - * @var int - */ - public $partnerIdEqual = null; - - /** - * - * - * @var string - */ - public $partnerIdIn = null; - - /** - * - * - * @var string - */ - public $nameEqual = null; - - /** - * - * - * @var string - */ - public $nameLike = null; - - /** - * - * - * @var KalturaVirusScanProfileStatus - */ - public $statusEqual = null; - - /** - * - * - * @var string - */ - public $statusIn = null; - - /** - * - * - * @var KalturaVirusScanEngineType - */ - public $engineTypeEqual = null; - - /** - * - * - * @var string - */ - public $engineTypeIn = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaVirusScanProfileFilter extends KalturaVirusScanProfileBaseFilter -{ - -} - - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaVirusScanProfileService extends KalturaServiceBase -{ - function __construct(KalturaClient $client = null) - { - parent::__construct($client); - } - - /** - * List virus scan profile objects by filter and pager - * - * @param KalturaVirusScanProfileFilter $filter - * @param KalturaFilterPager $pager - * @return KalturaVirusScanProfileListResponse - */ - function listAction(KalturaVirusScanProfileFilter $filter = null, KalturaFilterPager $pager = null) - { - $kparams = array(); - if ($filter !== null) - $this->client->addParam($kparams, "filter", $filter->toParams()); - if ($pager !== null) - $this->client->addParam($kparams, "pager", $pager->toParams()); - $this->client->queueServiceActionCall("virusscan_virusscanprofile", "list", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaVirusScanProfileListResponse"); - return $resultObject; - } - - /** - * Allows you to add an virus scan profile object and virus scan profile content associated with Kaltura object - * - * @param KalturaVirusScanProfile $virusScanProfile - * @return KalturaVirusScanProfile - */ - function add(KalturaVirusScanProfile $virusScanProfile) - { - $kparams = array(); - $this->client->addParam($kparams, "virusScanProfile", $virusScanProfile->toParams()); - $this->client->queueServiceActionCall("virusscan_virusscanprofile", "add", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaVirusScanProfile"); - return $resultObject; - } - - /** - * Retrieve an virus scan profile object by id - * - * @param int $virusScanProfileId - * @return KalturaVirusScanProfile - */ - function get($virusScanProfileId) - { - $kparams = array(); - $this->client->addParam($kparams, "virusScanProfileId", $virusScanProfileId); - $this->client->queueServiceActionCall("virusscan_virusscanprofile", "get", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaVirusScanProfile"); - return $resultObject; - } - - /** - * Update exisitng virus scan profile, it is possible to update the virus scan profile id too - * - * @param int $virusScanProfileId - * @param KalturaVirusScanProfile $virusScanProfile Id - * @return KalturaVirusScanProfile - */ - function update($virusScanProfileId, KalturaVirusScanProfile $virusScanProfile) - { - $kparams = array(); - $this->client->addParam($kparams, "virusScanProfileId", $virusScanProfileId); - $this->client->addParam($kparams, "virusScanProfile", $virusScanProfile->toParams()); - $this->client->queueServiceActionCall("virusscan_virusscanprofile", "update", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaVirusScanProfile"); - return $resultObject; - } - - /** - * Mark the virus scan profile as deleted - * - * @param int $virusScanProfileId - * @return KalturaVirusScanProfile - */ - function delete($virusScanProfileId) - { - $kparams = array(); - $this->client->addParam($kparams, "virusScanProfileId", $virusScanProfileId); - $this->client->queueServiceActionCall("virusscan_virusscanprofile", "delete", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "KalturaVirusScanProfile"); - return $resultObject; - } - - /** - * Scan flavor asset according to virus scan profile - * - * @param string $flavorAssetId - * @param int $virusScanProfileId - * @return int - */ - function scan($flavorAssetId, $virusScanProfileId = null) - { - $kparams = array(); - $this->client->addParam($kparams, "flavorAssetId", $flavorAssetId); - $this->client->addParam($kparams, "virusScanProfileId", $virusScanProfileId); - $this->client->queueServiceActionCall("virusscan_virusscanprofile", "scan", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "integer"); - return $resultObject; - } -} -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaVirusScanClientPlugin extends KalturaClientPlugin -{ - /** - * @var KalturaVirusScanProfileService - */ - public $virusScanProfile = null; - - protected function __construct(KalturaClient $client) - { - parent::__construct($client); - $this->virusScanProfile = new KalturaVirusScanProfileService($client); - } - - /** - * @return KalturaVirusScanClientPlugin - */ - public static function get(KalturaClient $client) - { - return new KalturaVirusScanClientPlugin($client); - } - - /** - * @return array - */ - public function getServices() - { - $services = array( - 'virusScanProfile' => $this->virusScanProfile, - ); - return $services; - } - - /** - * @return string - */ - public function getName() - { - return 'virusScan'; - } -} - diff --git a/local/kaltura/API/KalturaPlugins/KalturaWebexDropFolderClientPlugin.php b/local/kaltura/API/KalturaPlugins/KalturaWebexDropFolderClientPlugin.php deleted file mode 100644 index b25e7eaec3a03..0000000000000 --- a/local/kaltura/API/KalturaPlugins/KalturaWebexDropFolderClientPlugin.php +++ /dev/null @@ -1,292 +0,0 @@ -. -// -// @ignore -// =================================================================================================== - -/** - * @package Kaltura - * @subpackage Client - */ -require_once(dirname(__FILE__) . "/../KalturaClientBase.php"); -require_once(dirname(__FILE__) . "/../KalturaEnums.php"); -require_once(dirname(__FILE__) . "/../KalturaTypes.php"); -require_once(dirname(__FILE__) . "/KalturaDropFolderClientPlugin.php"); -require_once(dirname(__FILE__) . "/KalturaMetadataClientPlugin.php"); - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaWebexDropFolderFileOrderBy -{ - const CREATED_AT_ASC = "+createdAt"; - const FILE_NAME_ASC = "+fileName"; - const FILE_SIZE_ASC = "+fileSize"; - const FILE_SIZE_LAST_SET_AT_ASC = "+fileSizeLastSetAt"; - const ID_ASC = "+id"; - const PARSED_FLAVOR_ASC = "+parsedFlavor"; - const PARSED_SLUG_ASC = "+parsedSlug"; - const UPDATED_AT_ASC = "+updatedAt"; - const CREATED_AT_DESC = "-createdAt"; - const FILE_NAME_DESC = "-fileName"; - const FILE_SIZE_DESC = "-fileSize"; - const FILE_SIZE_LAST_SET_AT_DESC = "-fileSizeLastSetAt"; - const ID_DESC = "-id"; - const PARSED_FLAVOR_DESC = "-parsedFlavor"; - const PARSED_SLUG_DESC = "-parsedSlug"; - const UPDATED_AT_DESC = "-updatedAt"; -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaWebexDropFolderOrderBy -{ - const CREATED_AT_ASC = "+createdAt"; - const ID_ASC = "+id"; - const NAME_ASC = "+name"; - const UPDATED_AT_ASC = "+updatedAt"; - const CREATED_AT_DESC = "-createdAt"; - const ID_DESC = "-id"; - const NAME_DESC = "-name"; - const UPDATED_AT_DESC = "-updatedAt"; -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaWebexDropFolder extends KalturaDropFolder -{ - /** - * - * - * @var string - */ - public $webexUserId = null; - - /** - * - * - * @var string - */ - public $webexPassword = null; - - /** - * - * - * @var int - */ - public $webexSiteId = null; - - /** - * - * - * @var string - */ - public $webexPartnerId = null; - - /** - * - * - * @var string - */ - public $webexServiceUrl = null; - - /** - * - * - * @var string - */ - public $webexHostIdMetadataFieldName = null; - - /** - * - * - * @var string - */ - public $categoriesMetadataFieldName = null; - - /** - * - * - * @var bool - */ - public $enforceEntitlement = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaWebexDropFolderFile extends KalturaDropFolderFile -{ - /** - * - * - * @var int - */ - public $recordingId = null; - - /** - * - * - * @var string - */ - public $webexHostId = null; - - /** - * - * - * @var string - */ - public $description = null; - - /** - * - * - * @var string - */ - public $confId = null; - - /** - * - * - * @var string - */ - public $contentUrl = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaWebexDropFolderContentProcessorJobData extends KalturaDropFolderContentProcessorJobData -{ - /** - * - * - * @var string - */ - public $description = null; - - /** - * - * - * @var string - */ - public $webexHostId = null; - - /** - * - * - * @var int - */ - public $dropFolderId = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -abstract class KalturaWebexDropFolderBaseFilter extends KalturaDropFolderFilter -{ - -} - -/** - * @package Kaltura - * @subpackage Client - */ -abstract class KalturaWebexDropFolderFileBaseFilter extends KalturaDropFolderFileFilter -{ - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaWebexDropFolderFileFilter extends KalturaWebexDropFolderFileBaseFilter -{ - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaWebexDropFolderFilter extends KalturaWebexDropFolderBaseFilter -{ - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaWebexDropFolderClientPlugin extends KalturaClientPlugin -{ - protected function __construct(KalturaClient $client) - { - parent::__construct($client); - } - - /** - * @return KalturaWebexDropFolderClientPlugin - */ - public static function get(KalturaClient $client) - { - return new KalturaWebexDropFolderClientPlugin($client); - } - - /** - * @return array - */ - public function getServices() - { - $services = array( - ); - return $services; - } - - /** - * @return string - */ - public function getName() - { - return 'WebexDropFolder'; - } -} - diff --git a/local/kaltura/API/KalturaPlugins/KalturaWidevineClientPlugin.php b/local/kaltura/API/KalturaPlugins/KalturaWidevineClientPlugin.php deleted file mode 100644 index c674c6bf508bb..0000000000000 --- a/local/kaltura/API/KalturaPlugins/KalturaWidevineClientPlugin.php +++ /dev/null @@ -1,396 +0,0 @@ -. -// -// @ignore -// =================================================================================================== - -/** - * @package Kaltura - * @subpackage Client - */ -require_once(dirname(__FILE__) . "/../KalturaClientBase.php"); -require_once(dirname(__FILE__) . "/../KalturaEnums.php"); -require_once(dirname(__FILE__) . "/../KalturaTypes.php"); -require_once(dirname(__FILE__) . "/KalturaDrmClientPlugin.php"); - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaWidevineRepositorySyncMode -{ - const MODIFY = 0; -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaWidevineFlavorAssetOrderBy -{ - const CREATED_AT_ASC = "+createdAt"; - const DELETED_AT_ASC = "+deletedAt"; - const SIZE_ASC = "+size"; - const UPDATED_AT_ASC = "+updatedAt"; - const CREATED_AT_DESC = "-createdAt"; - const DELETED_AT_DESC = "-deletedAt"; - const SIZE_DESC = "-size"; - const UPDATED_AT_DESC = "-updatedAt"; -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaWidevineFlavorParamsOrderBy -{ -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaWidevineFlavorParamsOutputOrderBy -{ -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaWidevineProfileOrderBy -{ - const ID_ASC = "+id"; - const NAME_ASC = "+name"; - const ID_DESC = "-id"; - const NAME_DESC = "-name"; -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaWidevineProfile extends KalturaDrmProfile -{ - /** - * - * - * @var string - */ - public $key = null; - - /** - * - * - * @var string - */ - public $iv = null; - - /** - * - * - * @var string - */ - public $owner = null; - - /** - * - * - * @var string - */ - public $portal = null; - - /** - * - * - * @var int - */ - public $maxGop = null; - - /** - * - * - * @var string - */ - public $regServerHost = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaWidevineRepositorySyncJobData extends KalturaJobData -{ - /** - * - * - * @var KalturaWidevineRepositorySyncMode - */ - public $syncMode = null; - - /** - * - * - * @var string - */ - public $wvAssetIds = null; - - /** - * - * - * @var string - */ - public $modifiedAttributes = null; - - /** - * - * - * @var int - */ - public $monitorSyncCompletion = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaWidevineFlavorAsset extends KalturaFlavorAsset -{ - /** - * License distribution window start date - * - * - * @var int - */ - public $widevineDistributionStartDate = null; - - /** - * License distribution window end date - * - * - * @var int - */ - public $widevineDistributionEndDate = null; - - /** - * Widevine unique asset id - * - * - * @var int - */ - public $widevineAssetId = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaWidevineFlavorParams extends KalturaFlavorParams -{ - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaWidevineFlavorParamsOutput extends KalturaFlavorParamsOutput -{ - /** - * License distribution window start date - * - * - * @var int - */ - public $widevineDistributionStartDate = null; - - /** - * License distribution window end date - * - * - * @var int - */ - public $widevineDistributionEndDate = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -abstract class KalturaWidevineProfileBaseFilter extends KalturaDrmProfileFilter -{ - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaWidevineProfileFilter extends KalturaWidevineProfileBaseFilter -{ - -} - -/** - * @package Kaltura - * @subpackage Client - */ -abstract class KalturaWidevineFlavorAssetBaseFilter extends KalturaFlavorAssetFilter -{ - -} - -/** - * @package Kaltura - * @subpackage Client - */ -abstract class KalturaWidevineFlavorParamsBaseFilter extends KalturaFlavorParamsFilter -{ - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaWidevineFlavorAssetFilter extends KalturaWidevineFlavorAssetBaseFilter -{ - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaWidevineFlavorParamsFilter extends KalturaWidevineFlavorParamsBaseFilter -{ - -} - -/** - * @package Kaltura - * @subpackage Client - */ -abstract class KalturaWidevineFlavorParamsOutputBaseFilter extends KalturaFlavorParamsOutputFilter -{ - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaWidevineFlavorParamsOutputFilter extends KalturaWidevineFlavorParamsOutputBaseFilter -{ - -} - - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaWidevineDrmService extends KalturaServiceBase -{ - function __construct(KalturaClient $client = null) - { - parent::__construct($client); - } - - /** - * Get license for encrypted content playback - * - * @param string $flavorAssetId - * @param string $referrer 64base encoded - * @return string - */ - function getLicense($flavorAssetId, $referrer = null) - { - $kparams = array(); - $this->client->addParam($kparams, "flavorAssetId", $flavorAssetId); - $this->client->addParam($kparams, "referrer", $referrer); - $this->client->queueServiceActionCall("widevine_widevinedrm", "getLicense", $kparams); - if ($this->client->isMultiRequest()) - return $this->client->getMultiRequestResult(); - $resultObject = $this->client->doQueue(); - $this->client->throwExceptionIfError($resultObject); - $this->client->validateObjectType($resultObject, "string"); - return $resultObject; - } -} -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaWidevineClientPlugin extends KalturaClientPlugin -{ - /** - * @var KalturaWidevineDrmService - */ - public $widevineDrm = null; - - protected function __construct(KalturaClient $client) - { - parent::__construct($client); - $this->widevineDrm = new KalturaWidevineDrmService($client); - } - - /** - * @return KalturaWidevineClientPlugin - */ - public static function get(KalturaClient $client) - { - return new KalturaWidevineClientPlugin($client); - } - - /** - * @return array - */ - public function getServices() - { - $services = array( - 'widevineDrm' => $this->widevineDrm, - ); - return $services; - } - - /** - * @return string - */ - public function getName() - { - return 'widevine'; - } -} - diff --git a/local/kaltura/API/KalturaTypes.php b/local/kaltura/API/KalturaTypes.php deleted file mode 100644 index 0cde7474bf5f7..0000000000000 --- a/local/kaltura/API/KalturaTypes.php +++ /dev/null @@ -1,16367 +0,0 @@ -. -// -// @ignore -// =================================================================================================== - -/** - * @package Kaltura - * @subpackage Client - */ -require_once(dirname(__FILE__) . "/KalturaClientBase.php"); - -/** - * @package Kaltura - * @subpackage Client - */ -abstract class KalturaBaseRestriction extends KalturaObjectBase -{ - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaAccessControl extends KalturaObjectBase -{ - /** - * The id of the Access Control Profile - * - * - * @var int - * @readonly - */ - public $id = null; - - /** - * - * - * @var int - * @readonly - */ - public $partnerId = null; - - /** - * The name of the Access Control Profile - * - * - * @var string - */ - public $name = null; - - /** - * System name of the Access Control Profile - * - * - * @var string - */ - public $systemName = null; - - /** - * The description of the Access Control Profile - * - * - * @var string - */ - public $description = null; - - /** - * Creation date as Unix timestamp (In seconds) - * - * - * @var int - * @readonly - */ - public $createdAt = null; - - /** - * True if this Conversion Profile is the default - * - * - * @var KalturaNullableBoolean - */ - public $isDefault = null; - - /** - * Array of Access Control Restrictions - * - * - * @var array of KalturaBaseRestriction - */ - public $restrictions; - - /** - * Indicates that the access control profile is new and should be handled using KalturaAccessControlProfile object and accessControlProfile service - * - * - * @var bool - * @readonly - */ - public $containsUnsuportedRestrictions = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaContextTypeHolder extends KalturaObjectBase -{ - /** - * The type of the condition context - * - * - * @var KalturaContextType - */ - public $type = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaAccessControlContextTypeHolder extends KalturaContextTypeHolder -{ - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaAccessControlListResponse extends KalturaObjectBase -{ - /** - * - * - * @var array of KalturaAccessControl - * @readonly - */ - public $objects; - - /** - * - * - * @var int - * @readonly - */ - public $totalCount = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -abstract class KalturaRuleAction extends KalturaObjectBase -{ - /** - * The type of the action - * - * - * @var KalturaRuleActionType - * @readonly - */ - public $type = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -abstract class KalturaCondition extends KalturaObjectBase -{ - /** - * The type of the access control condition - * - * - * @var KalturaConditionType - * @readonly - */ - public $type = null; - - /** - * - * - * @var string - */ - public $description = null; - - /** - * - * - * @var bool - */ - public $not = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaRule extends KalturaObjectBase -{ - /** - * Message to be thrown to the player in case the rule is fulfilled - * - * - * @var string - */ - public $message = null; - - /** - * Actions to be performed by the player in case the rule is fulfilled - * - * - * @var array of KalturaRuleAction - */ - public $actions; - - /** - * Conditions to validate the rule - * - * - * @var array of KalturaCondition - */ - public $conditions; - - /** - * Indicates what contexts should be tested by this rule - * - * - * @var array of KalturaContextTypeHolder - */ - public $contexts; - - /** - * Indicates that this rule is enough and no need to continue checking the rest of the rules - * - * - * @var bool - */ - public $stopProcessing = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaAccessControlProfile extends KalturaObjectBase -{ - /** - * The id of the Access Control Profile - * - * - * @var int - * @readonly - */ - public $id = null; - - /** - * - * - * @var int - * @readonly - */ - public $partnerId = null; - - /** - * The name of the Access Control Profile - * - * - * @var string - */ - public $name = null; - - /** - * System name of the Access Control Profile - * - * - * @var string - */ - public $systemName = null; - - /** - * The description of the Access Control Profile - * - * - * @var string - */ - public $description = null; - - /** - * Creation time as Unix timestamp (In seconds) - * - * - * @var int - * @readonly - */ - public $createdAt = null; - - /** - * Update time as Unix timestamp (In seconds) - * - * - * @var int - * @readonly - */ - public $updatedAt = null; - - /** - * True if this access control profile is the partner default - * - * - * @var KalturaNullableBoolean - */ - public $isDefault = null; - - /** - * Array of access control rules - * - * - * @var array of KalturaRule - */ - public $rules; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaAccessControlProfileListResponse extends KalturaObjectBase -{ - /** - * - * - * @var array of KalturaAccessControlProfile - * @readonly - */ - public $objects; - - /** - * - * - * @var int - * @readonly - */ - public $totalCount = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaKeyValue extends KalturaObjectBase -{ - /** - * - * - * @var string - */ - public $key = null; - - /** - * - * - * @var string - */ - public $value = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaAccessControlScope extends KalturaObjectBase -{ - /** - * URL to be used to test domain conditions. - * - * - * @var string - */ - public $referrer = null; - - /** - * IP to be used to test geographic location conditions. - * - * - * @var string - */ - public $ip = null; - - /** - * Kaltura session to be used to test session and user conditions. - * - * - * @var string - */ - public $ks = null; - - /** - * Browser or client application to be used to test agent conditions. - * - * - * @var string - */ - public $userAgent = null; - - /** - * Unix timestamp (In seconds) to be used to test entry scheduling, keep null to use now. - * - * - * @var int - */ - public $time = null; - - /** - * Indicates what contexts should be tested. No contexts means any context. - * - * - * @var array of KalturaAccessControlContextTypeHolder - */ - public $contexts; - - /** - * Array of hashes to pass to the access control profile scope - * - * - * @var array of KalturaKeyValue - */ - public $hashes; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaAsset extends KalturaObjectBase -{ - /** - * The ID of the Flavor Asset - * - * - * @var string - * @readonly - */ - public $id = null; - - /** - * The entry ID of the Flavor Asset - * - * - * @var string - * @readonly - */ - public $entryId = null; - - /** - * - * - * @var int - * @readonly - */ - public $partnerId = null; - - /** - * The version of the Flavor Asset - * - * - * @var int - * @readonly - */ - public $version = null; - - /** - * The size (in KBytes) of the Flavor Asset - * - * - * @var int - * @readonly - */ - public $size = null; - - /** - * Tags used to identify the Flavor Asset in various scenarios - * - * - * @var string - */ - public $tags = null; - - /** - * The file extension - * - * - * @var string - * @insertonly - */ - public $fileExt = null; - - /** - * - * - * @var int - * @readonly - */ - public $createdAt = null; - - /** - * - * - * @var int - * @readonly - */ - public $updatedAt = null; - - /** - * - * - * @var int - * @readonly - */ - public $deletedAt = null; - - /** - * System description, error message, warnings and failure cause. - * - * - * @var string - * @readonly - */ - public $description = null; - - /** - * Partner private data - * - * - * @var string - */ - public $partnerData = null; - - /** - * Partner friendly description - * - * - * @var string - */ - public $partnerDescription = null; - - /** - * Comma separated list of source flavor params ids - * - * - * @var string - */ - public $actualSourceAssetParamsIds = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaString extends KalturaObjectBase -{ - /** - * - * - * @var string - */ - public $value = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaAssetParams extends KalturaObjectBase -{ - /** - * The id of the Flavor Params - * - * - * @var int - * @readonly - */ - public $id = null; - - /** - * - * - * @var int - * @readonly - */ - public $partnerId = null; - - /** - * The name of the Flavor Params - * - * - * @var string - */ - public $name = null; - - /** - * System name of the Flavor Params - * - * - * @var string - */ - public $systemName = null; - - /** - * The description of the Flavor Params - * - * - * @var string - */ - public $description = null; - - /** - * Creation date as Unix timestamp (In seconds) - * - * - * @var int - * @readonly - */ - public $createdAt = null; - - /** - * True if those Flavor Params are part of system defaults - * - * - * @var KalturaNullableBoolean - * @readonly - */ - public $isSystemDefault = null; - - /** - * The Flavor Params tags are used to identify the flavor for different usage (e.g. web, hd, mobile) - * - * - * @var string - */ - public $tags = null; - - /** - * Array of partner permisison names that required for using this asset params - * - * - * @var array of KalturaString - */ - public $requiredPermissions; - - /** - * Id of remote storage profile that used to get the source, zero indicates Kaltura data center - * - * - * @var int - */ - public $sourceRemoteStorageProfileId = null; - - /** - * Comma seperated ids of remote storage profiles that the flavor distributed to, the distribution done by the conversion engine - * - * - * @var int - */ - public $remoteStorageProfileIds = null; - - /** - * Media parser type to be used for post-conversion validation - * - * - * @var KalturaMediaParserType - */ - public $mediaParserType = null; - - /** - * Comma seperated ids of source flavor params this flavor is created from - * - * - * @var string - */ - public $sourceAssetParamsIds = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -abstract class KalturaResource extends KalturaObjectBase -{ - -} - -/** - * @package Kaltura - * @subpackage Client - */ -abstract class KalturaContentResource extends KalturaResource -{ - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaAssetParamsResourceContainer extends KalturaResource -{ - /** - * The content resource to associate with asset params - * - * - * @var KalturaContentResource - */ - public $resource; - - /** - * The asset params to associate with the reaource - * - * - * @var int - */ - public $assetParamsId = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -abstract class KalturaOperationAttributes extends KalturaObjectBase -{ - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaBaseEntry extends KalturaObjectBase -{ - /** - * Auto generated 10 characters alphanumeric string - * - * - * @var string - * @readonly - */ - public $id = null; - - /** - * Entry name (Min 1 chars) - * - * - * @var string - */ - public $name = null; - - /** - * Entry description - * - * - * @var string - */ - public $description = null; - - /** - * - * - * @var int - * @readonly - */ - public $partnerId = null; - - /** - * The ID of the user who is the owner of this entry - * - * - * @var string - */ - public $userId = null; - - /** - * The ID of the user who created this entry - * - * - * @var string - * @insertonly - */ - public $creatorId = null; - - /** - * Entry tags - * - * - * @var string - */ - public $tags = null; - - /** - * Entry admin tags can be updated only by administrators - * - * - * @var string - */ - public $adminTags = null; - - /** - * Categories with no entitlement that this entry belongs to. - * - * - * @var string - */ - public $categories = null; - - /** - * Categories Ids of categories with no entitlement that this entry belongs to - * - * - * @var string - */ - public $categoriesIds = null; - - /** - * - * - * @var KalturaEntryStatus - * @readonly - */ - public $status = null; - - /** - * Entry moderation status - * - * - * @var KalturaEntryModerationStatus - * @readonly - */ - public $moderationStatus = null; - - /** - * Number of moderation requests waiting for this entry - * - * - * @var int - * @readonly - */ - public $moderationCount = null; - - /** - * The type of the entry, this is auto filled by the derived entry object - * - * - * @var KalturaEntryType - */ - public $type = null; - - /** - * Entry creation date as Unix timestamp (In seconds) - * - * - * @var int - * @readonly - */ - public $createdAt = null; - - /** - * Entry update date as Unix timestamp (In seconds) - * - * - * @var int - * @readonly - */ - public $updatedAt = null; - - /** - * The calculated average rank. rank = totalRank / votes - * - * - * @var float - * @readonly - */ - public $rank = null; - - /** - * The sum of all rank values submitted to the baseEntry.anonymousRank action - * - * - * @var int - * @readonly - */ - public $totalRank = null; - - /** - * A count of all requests made to the baseEntry.anonymousRank action - * - * - * @var int - * @readonly - */ - public $votes = null; - - /** - * - * - * @var int - */ - public $groupId = null; - - /** - * Can be used to store various partner related data as a string - * - * - * @var string - */ - public $partnerData = null; - - /** - * Download URL for the entry - * - * - * @var string - * @readonly - */ - public $downloadUrl = null; - - /** - * Indexed search text for full text search - * - * - * @var string - * @readonly - */ - public $searchText = null; - - /** - * License type used for this entry - * - * - * @var KalturaLicenseType - */ - public $licenseType = null; - - /** - * Version of the entry data - * - * - * @var int - * @readonly - */ - public $version = null; - - /** - * Thumbnail URL - * - * - * @var string - * @insertonly - */ - public $thumbnailUrl = null; - - /** - * The Access Control ID assigned to this entry (null when not set, send -1 to remove) - * - * - * @var int - */ - public $accessControlId = null; - - /** - * Entry scheduling start date (null when not set, send -1 to remove) - * - * - * @var int - */ - public $startDate = null; - - /** - * Entry scheduling end date (null when not set, send -1 to remove) - * - * - * @var int - */ - public $endDate = null; - - /** - * Entry external reference id - * - * - * @var string - */ - public $referenceId = null; - - /** - * ID of temporary entry that will replace this entry when it's approved and ready for replacement - * - * - * @var string - * @readonly - */ - public $replacingEntryId = null; - - /** - * ID of the entry that will be replaced when the replacement approved and this entry is ready - * - * - * @var string - * @readonly - */ - public $replacedEntryId = null; - - /** - * Status of the replacement readiness and approval - * - * - * @var KalturaEntryReplacementStatus - * @readonly - */ - public $replacementStatus = null; - - /** - * Can be used to store various partner related data as a numeric value - * - * - * @var int - */ - public $partnerSortValue = null; - - /** - * Override the default ingestion profile - * - * - * @var int - */ - public $conversionProfileId = null; - - /** - * IF not empty, points to an entry ID the should replace this current entry's id. - * - * - * @var string - */ - public $redirectEntryId = null; - - /** - * ID of source root entry, used for clipped, skipped and cropped entries that created from another entry - * - * - * @var string - * @readonly - */ - public $rootEntryId = null; - - /** - * clipping, skipping and cropping attributes that used to create this entry - * - * - * @var array of KalturaOperationAttributes - */ - public $operationAttributes; - - /** - * list of user ids that are entitled to edit the entry (no server enforcement) The difference between entitledUsersEdit and entitledUsersPublish is applicative only - * - * - * @var string - */ - public $entitledUsersEdit = null; - - /** - * list of user ids that are entitled to publish the entry (no server enforcement) The difference between entitledUsersEdit and entitledUsersPublish is applicative only - * - * - * @var string - */ - public $entitledUsersPublish = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaBaseEntryListResponse extends KalturaObjectBase -{ - /** - * - * - * @var array of KalturaBaseEntry - * @readonly - */ - public $objects; - - /** - * - * - * @var int - * @readonly - */ - public $totalCount = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -abstract class KalturaBaseSyndicationFeed extends KalturaObjectBase -{ - /** - * - * - * @var string - * @readonly - */ - public $id = null; - - /** - * - * - * @var string - * @readonly - */ - public $feedUrl = null; - - /** - * - * - * @var int - * @readonly - */ - public $partnerId = null; - - /** - * link a playlist that will set what content the feed will include - * if empty, all content will be included in feed - * - * - * @var string - */ - public $playlistId = null; - - /** - * feed name - * - * - * @var string - */ - public $name = null; - - /** - * feed status - * - * - * @var KalturaSyndicationFeedStatus - * @readonly - */ - public $status = null; - - /** - * feed type - * - * - * @var KalturaSyndicationFeedType - * @insertonly - */ - public $type = null; - - /** - * Base URL for each video, on the partners site - * This is required by all syndication types. - * - * - * @var string - */ - public $landingPage = null; - - /** - * Creation date as Unix timestamp (In seconds) - * - * - * @var int - * @readonly - */ - public $createdAt = null; - - /** - * allow_embed tells google OR yahoo weather to allow embedding the video on google OR yahoo video results - * or just to provide a link to the landing page. - * it is applied on the video-player_loc property in the XML (google) - * and addes media-player tag (yahoo) - * - * - * @var bool - */ - public $allowEmbed = null; - - /** - * Select a uiconf ID as player skin to include in the kwidget url - * - * - * @var int - */ - public $playerUiconfId = null; - - /** - * - * - * @var int - */ - public $flavorParamId = null; - - /** - * - * - * @var bool - */ - public $transcodeExistingContent = null; - - /** - * - * - * @var bool - */ - public $addToDefaultConversionProfile = null; - - /** - * - * - * @var string - */ - public $categories = null; - - /** - * - * - * @var int - */ - public $storageId = null; - - /** - * - * - * @var KalturaSyndicationFeedEntriesOrderBy - */ - public $entriesOrderBy = null; - - /** - * Should enforce entitlement on feed entries - * - * - * @var bool - */ - public $enforceEntitlement = null; - - /** - * Set privacy context for search entries that assiged to private and public categories within a category privacy context. - * - * - * @var string - */ - public $privacyContext = null; - - /** - * Update date as Unix timestamp (In seconds) - * - * - * @var int - * @readonly - */ - public $updatedAt = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaBaseSyndicationFeedListResponse extends KalturaObjectBase -{ - /** - * - * - * @var array of KalturaBaseSyndicationFeed - * @readonly - */ - public $objects; - - /** - * - * - * @var int - * @readonly - */ - public $totalCount = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaBulkUploadPluginData extends KalturaObjectBase -{ - /** - * - * - * @var string - */ - public $field = null; - - /** - * - * - * @var string - */ - public $value = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaBulkUploadResult extends KalturaObjectBase -{ - /** - * The id of the result - * - * - * @var int - * @readonly - */ - public $id = null; - - /** - * The id of the parent job - * - * - * @var int - */ - public $bulkUploadJobId = null; - - /** - * The index of the line in the CSV - * - * - * @var int - */ - public $lineIndex = null; - - /** - * - * - * @var int - */ - public $partnerId = null; - - /** - * - * - * @var KalturaBulkUploadResultStatus - */ - public $status = null; - - /** - * - * - * @var KalturaBulkUploadAction - */ - public $action = null; - - /** - * - * - * @var string - */ - public $objectId = null; - - /** - * - * - * @var int - */ - public $objectStatus = null; - - /** - * - * - * @var KalturaBulkUploadResultObjectType - */ - public $bulkUploadResultObjectType = null; - - /** - * The data as recieved in the csv - * - * - * @var string - */ - public $rowData = null; - - /** - * - * - * @var string - */ - public $partnerData = null; - - /** - * - * - * @var string - */ - public $objectErrorDescription = null; - - /** - * - * - * @var array of KalturaBulkUploadPluginData - */ - public $pluginsData; - - /** - * - * - * @var string - */ - public $errorDescription = null; - - /** - * - * - * @var string - */ - public $errorCode = null; - - /** - * - * - * @var int - */ - public $errorType = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaBulkUpload extends KalturaObjectBase -{ - /** - * - * - * @var int - */ - public $id = null; - - /** - * - * - * @var string - */ - public $uploadedBy = null; - - /** - * - * - * @var string - */ - public $uploadedByUserId = null; - - /** - * - * - * @var int - */ - public $uploadedOn = null; - - /** - * - * - * @var int - */ - public $numOfEntries = null; - - /** - * - * - * @var KalturaBatchJobStatus - */ - public $status = null; - - /** - * - * - * @var string - */ - public $logFileUrl = null; - - /** - * - * - * @var string - */ - public $csvFileUrl = null; - - /** - * - * - * @var string - */ - public $bulkFileUrl = null; - - /** - * - * - * @var KalturaBulkUploadType - */ - public $bulkUploadType = null; - - /** - * - * - * @var array of KalturaBulkUploadResult - */ - public $results; - - /** - * - * - * @var string - */ - public $error = null; - - /** - * - * - * @var KalturaBatchJobErrorTypes - */ - public $errorType = null; - - /** - * - * - * @var int - */ - public $errorNumber = null; - - /** - * - * - * @var string - */ - public $fileName = null; - - /** - * - * - * @var string - */ - public $description = null; - - /** - * - * - * @var int - */ - public $numOfObjects = null; - - /** - * - * - * @var KalturaBulkUploadObjectType - */ - public $bulkUploadObjectType = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaBulkUploadListResponse extends KalturaObjectBase -{ - /** - * - * - * @var array of KalturaBulkUpload - * @readonly - */ - public $objects; - - /** - * - * - * @var int - * @readonly - */ - public $totalCount = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -abstract class KalturaBulkUploadObjectData extends KalturaObjectBase -{ - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaCEError extends KalturaObjectBase -{ - /** - * - * - * @var string - * @readonly - */ - public $id = null; - - /** - * - * - * @var int - */ - public $partnerId = null; - - /** - * - * - * @var string - */ - public $browser = null; - - /** - * - * - * @var string - */ - public $serverIp = null; - - /** - * - * - * @var string - */ - public $serverOs = null; - - /** - * - * - * @var string - */ - public $phpVersion = null; - - /** - * - * - * @var string - */ - public $ceAdminEmail = null; - - /** - * - * - * @var string - */ - public $type = null; - - /** - * - * - * @var string - */ - public $description = null; - - /** - * - * - * @var string - */ - public $data = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaCategory extends KalturaObjectBase -{ - /** - * The id of the Category - * - * - * @var int - * @readonly - */ - public $id = null; - - /** - * - * - * @var int - */ - public $parentId = null; - - /** - * - * - * @var int - * @readonly - */ - public $depth = null; - - /** - * - * - * @var int - * @readonly - */ - public $partnerId = null; - - /** - * The name of the Category. - * The following characters are not allowed: '<', '>', ',' - * - * - * @var string - */ - public $name = null; - - /** - * The full name of the Category - * - * - * @var string - * @readonly - */ - public $fullName = null; - - /** - * The full ids of the Category - * - * - * @var string - * @readonly - */ - public $fullIds = null; - - /** - * Number of entries in this Category (including child categories) - * - * - * @var int - * @readonly - */ - public $entriesCount = null; - - /** - * Creation date as Unix timestamp (In seconds) - * - * - * @var int - * @readonly - */ - public $createdAt = null; - - /** - * Update date as Unix timestamp (In seconds) - * - * - * @var int - * @readonly - */ - public $updatedAt = null; - - /** - * Category description - * - * - * @var string - */ - public $description = null; - - /** - * Category tags - * - * - * @var string - */ - public $tags = null; - - /** - * If category will be returned for list action. - * - * - * @var KalturaAppearInListType - */ - public $appearInList = null; - - /** - * defines the privacy of the entries that assigned to this category - * - * - * @var KalturaPrivacyType - */ - public $privacy = null; - - /** - * If Category members are inherited from parent category or set manualy. - * - * - * @var KalturaInheritanceType - */ - public $inheritanceType = null; - - /** - * Who can ask to join this category - * - * - * @var KalturaUserJoinPolicyType - * @readonly - */ - public $userJoinPolicy = null; - - /** - * Default permissionLevel for new users - * - * - * @var KalturaCategoryUserPermissionLevel - */ - public $defaultPermissionLevel = null; - - /** - * Category Owner (User id) - * - * - * @var string - */ - public $owner = null; - - /** - * Number of entries that belong to this category directly - * - * - * @var int - * @readonly - */ - public $directEntriesCount = null; - - /** - * Category external id, controlled and managed by the partner. - * - * - * @var string - */ - public $referenceId = null; - - /** - * who can assign entries to this category - * - * - * @var KalturaContributionPolicyType - */ - public $contributionPolicy = null; - - /** - * Number of active members for this category - * - * - * @var int - * @readonly - */ - public $membersCount = null; - - /** - * Number of pending members for this category - * - * - * @var int - * @readonly - */ - public $pendingMembersCount = null; - - /** - * Set privacy context for search entries that assiged to private and public categories. the entries will be private if the search context is set with those categories. - * - * - * @var string - */ - public $privacyContext = null; - - /** - * comma separated parents that defines a privacyContext for search - * - * - * @var string - * @readonly - */ - public $privacyContexts = null; - - /** - * Status - * - * - * @var KalturaCategoryStatus - * @readonly - */ - public $status = null; - - /** - * The category id that this category inherit its members and members permission (for contribution and join) - * - * - * @var int - * @readonly - */ - public $inheritedParentId = null; - - /** - * Can be used to store various partner related data as a numeric value - * - * - * @var int - */ - public $partnerSortValue = null; - - /** - * Can be used to store various partner related data as a string - * - * - * @var string - */ - public $partnerData = null; - - /** - * Enable client side applications to define how to sort the category child categories - * - * - * @var KalturaCategoryOrderBy - */ - public $defaultOrderBy = null; - - /** - * Number of direct children categories - * - * - * @var int - * @readonly - */ - public $directSubCategoriesCount = null; - - /** - * Moderation to add entries to this category by users that are not of permission level Manager or Moderator. - * - * - * @var KalturaNullableBoolean - */ - public $moderation = null; - - /** - * Nunber of pending moderation entries - * - * - * @var int - * @readonly - */ - public $pendingEntriesCount = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaCategoryEntry extends KalturaObjectBase -{ - /** - * - * - * @var int - */ - public $categoryId = null; - - /** - * entry id - * - * - * @var string - */ - public $entryId = null; - - /** - * Creation date as Unix timestamp (In seconds) - * - * - * @var int - * @readonly - */ - public $createdAt = null; - - /** - * The full ids of the Category - * - * - * @var string - * @readonly - */ - public $categoryFullIds = null; - - /** - * CategroyEntry status - * - * - * @var KalturaCategoryEntryStatus - * @readonly - */ - public $status = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaCategoryEntryListResponse extends KalturaObjectBase -{ - /** - * - * - * @var array of KalturaCategoryEntry - * @readonly - */ - public $objects; - - /** - * - * - * @var int - * @readonly - */ - public $totalCount = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaCategoryListResponse extends KalturaObjectBase -{ - /** - * - * - * @var array of KalturaCategory - * @readonly - */ - public $objects; - - /** - * - * - * @var int - * @readonly - */ - public $totalCount = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaCategoryUser extends KalturaObjectBase -{ - /** - * - * - * @var int - * @insertonly - */ - public $categoryId = null; - - /** - * User id - * - * - * @var string - * @insertonly - */ - public $userId = null; - - /** - * Partner id - * - * - * @var int - * @readonly - */ - public $partnerId = null; - - /** - * Permission level - * - * - * @var KalturaCategoryUserPermissionLevel - */ - public $permissionLevel = null; - - /** - * Status - * - * - * @var KalturaCategoryUserStatus - * @readonly - */ - public $status = null; - - /** - * CategoryUser creation date as Unix timestamp (In seconds) - * - * - * @var int - * @readonly - */ - public $createdAt = null; - - /** - * CategoryUser update date as Unix timestamp (In seconds) - * - * - * @var int - * @readonly - */ - public $updatedAt = null; - - /** - * Update method can be either manual or automatic to distinguish between manual operations (for example in KMC) on automatic - using bulk upload - * - * - * @var KalturaUpdateMethodType - */ - public $updateMethod = null; - - /** - * The full ids of the Category - * - * - * @var string - * @readonly - */ - public $categoryFullIds = null; - - /** - * Set of category-related permissions for the current category user. - * - * - * @var string - */ - public $permissionNames = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaCategoryUserListResponse extends KalturaObjectBase -{ - /** - * - * - * @var array of KalturaCategoryUser - * @readonly - */ - public $objects; - - /** - * - * - * @var int - * @readonly - */ - public $totalCount = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaClientNotification extends KalturaObjectBase -{ - /** - * The URL where the notification should be sent to - * - * - * @var string - */ - public $url = null; - - /** - * The serialized notification data to send - * - * - * @var string - */ - public $data = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -abstract class KalturaContext extends KalturaObjectBase -{ - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaContextDataResult extends KalturaObjectBase -{ - /** - * Array of messages as received from the rules that invalidated - * - * - * @var array of KalturaString - */ - public $messages; - - /** - * Array of actions as received from the rules that invalidated - * - * - * @var array of KalturaRuleAction - */ - public $actions; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaConversionAttribute extends KalturaObjectBase -{ - /** - * The id of the flavor params, set to null for source flavor - * - * - * @var int - */ - public $flavorParamsId = null; - - /** - * Attribute name - * - * - * @var string - */ - public $name = null; - - /** - * Attribute value - * - * - * @var string - */ - public $value = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaCropDimensions extends KalturaObjectBase -{ - /** - * Crop left point - * - * - * @var int - */ - public $left = null; - - /** - * Crop top point - * - * - * @var int - */ - public $top = null; - - /** - * Crop width - * - * - * @var int - */ - public $width = null; - - /** - * Crop height - * - * - * @var int - */ - public $height = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaConversionProfile extends KalturaObjectBase -{ - /** - * The id of the Conversion Profile - * - * - * @var int - * @readonly - */ - public $id = null; - - /** - * - * - * @var int - * @readonly - */ - public $partnerId = null; - - /** - * - * - * @var KalturaConversionProfileStatus - */ - public $status = null; - - /** - * - * - * @var KalturaConversionProfileType - * @insertonly - */ - public $type = null; - - /** - * The name of the Conversion Profile - * - * - * @var string - */ - public $name = null; - - /** - * System name of the Conversion Profile - * - * - * @var string - */ - public $systemName = null; - - /** - * Comma separated tags - * - * - * @var string - */ - public $tags = null; - - /** - * The description of the Conversion Profile - * - * - * @var string - */ - public $description = null; - - /** - * ID of the default entry to be used for template data - * - * - * @var string - */ - public $defaultEntryId = null; - - /** - * Creation date as Unix timestamp (In seconds) - * - * - * @var int - * @readonly - */ - public $createdAt = null; - - /** - * List of included flavor ids (comma separated) - * - * - * @var string - */ - public $flavorParamsIds = null; - - /** - * Indicates that this conversion profile is system default - * - * - * @var KalturaNullableBoolean - */ - public $isDefault = null; - - /** - * Indicates that this conversion profile is partner default - * - * - * @var bool - * @readonly - */ - public $isPartnerDefault = null; - - /** - * Cropping dimensions - * - * - * @var KalturaCropDimensions - */ - public $cropDimensions; - - /** - * Clipping start position (in miliseconds) - * - * - * @var int - */ - public $clipStart = null; - - /** - * Clipping duration (in miliseconds) - * - * - * @var int - */ - public $clipDuration = null; - - /** - * XSL to transform ingestion MRSS XML - * - * - * @var string - */ - public $xslTransformation = null; - - /** - * ID of default storage profile to be used for linked net-storage file syncs - * - * - * @var int - */ - public $storageProfileId = null; - - /** - * Media parser type to be used for extract media - * - * - * @var KalturaMediaParserType - */ - public $mediaParserType = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaConversionProfileAssetParams extends KalturaObjectBase -{ - /** - * The id of the conversion profile - * - * - * @var int - * @readonly - */ - public $conversionProfileId = null; - - /** - * The id of the asset params - * - * - * @var int - * @readonly - */ - public $assetParamsId = null; - - /** - * The ingestion origin of the asset params - * - * - * @var KalturaFlavorReadyBehaviorType - */ - public $readyBehavior = null; - - /** - * The ingestion origin of the asset params - * - * - * @var KalturaAssetParamsOrigin - */ - public $origin = null; - - /** - * Asset params system name - * - * - * @var string - */ - public $systemName = null; - - /** - * Starts conversion even if the decision layer reduced the configuration to comply with the source - * - * - * @var KalturaNullableBoolean - */ - public $forceNoneComplied = null; - - /** - * Specifies how to treat the flavor after conversion is finished - * - * - * @var KalturaAssetParamsDeletePolicy - */ - public $deletePolicy = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaConversionProfileAssetParamsListResponse extends KalturaObjectBase -{ - /** - * - * - * @var array of KalturaConversionProfileAssetParams - * @readonly - */ - public $objects; - - /** - * - * - * @var int - * @readonly - */ - public $totalCount = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaConversionProfileListResponse extends KalturaObjectBase -{ - /** - * - * - * @var array of KalturaConversionProfile - * @readonly - */ - public $objects; - - /** - * - * - * @var int - * @readonly - */ - public $totalCount = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaConvertCollectionFlavorData extends KalturaObjectBase -{ - /** - * - * - * @var string - */ - public $flavorAssetId = null; - - /** - * - * - * @var int - */ - public $flavorParamsOutputId = null; - - /** - * - * - * @var int - */ - public $readyBehavior = null; - - /** - * - * - * @var int - */ - public $videoBitrate = null; - - /** - * - * - * @var int - */ - public $audioBitrate = null; - - /** - * - * - * @var string - */ - public $destFileSyncLocalPath = null; - - /** - * - * - * @var string - */ - public $destFileSyncRemoteUrl = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaDataEntry extends KalturaBaseEntry -{ - /** - * The data of the entry - * - * - * @var string - */ - public $dataContent = null; - - /** - * indicator whether to return the object for get action with the dataContent field. - * - * - * @var bool - * @insertonly - */ - public $retrieveDataContentByGet = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaDataListResponse extends KalturaObjectBase -{ - /** - * - * - * @var array of KalturaDataEntry - * @readonly - */ - public $objects; - - /** - * - * - * @var int - * @readonly - */ - public $totalCount = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaEmailIngestionProfile extends KalturaObjectBase -{ - /** - * - * - * @var int - * @readonly - */ - public $id = null; - - /** - * - * - * @var string - */ - public $name = null; - - /** - * - * - * @var string - */ - public $description = null; - - /** - * - * - * @var string - */ - public $emailAddress = null; - - /** - * - * - * @var string - */ - public $mailboxId = null; - - /** - * - * - * @var int - * @readonly - */ - public $partnerId = null; - - /** - * - * - * @var int - */ - public $conversionProfile2Id = null; - - /** - * - * - * @var KalturaEntryModerationStatus - */ - public $moderationStatus = null; - - /** - * - * - * @var KalturaEmailIngestionProfileStatus - * @readonly - */ - public $status = null; - - /** - * - * - * @var string - * @readonly - */ - public $createdAt = null; - - /** - * - * - * @var string - */ - public $defaultCategory = null; - - /** - * - * - * @var string - */ - public $defaultUserId = null; - - /** - * - * - * @var string - */ - public $defaultTags = null; - - /** - * - * - * @var string - */ - public $defaultAdminTags = null; - - /** - * - * - * @var int - */ - public $maxAttachmentSizeKbytes = null; - - /** - * - * - * @var int - */ - public $maxAttachmentsPerMail = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -abstract class KalturaValue extends KalturaObjectBase -{ - /** - * - * - * @var string - */ - public $description = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaStringValue extends KalturaValue -{ - /** - * - * - * @var string - */ - public $value = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -abstract class KalturaObjectIdentifier extends KalturaObjectBase -{ - /** - * Comma separated string of enum values denoting which features of the item need to be included in the MRSS - * - * - * @var string - */ - public $extendedFeatures = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaExtendingItemMrssParameter extends KalturaObjectBase -{ - /** - * XPath for the extending item - * - * - * @var string - */ - public $xpath = null; - - /** - * Object identifier - * - * - * @var KalturaObjectIdentifier - */ - public $identifier; - - /** - * Mode of extension - append to MRSS or replace the xpath content. - * - * - * @var KalturaMrssExtensionMode - */ - public $extensionMode = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaPlayableEntry extends KalturaBaseEntry -{ - /** - * Number of plays - * - * - * @var int - * @readonly - */ - public $plays = null; - - /** - * Number of views - * - * - * @var int - * @readonly - */ - public $views = null; - - /** - * The last time the entry was played - * - * - * @var int - * @readonly - */ - public $lastPlayedAt = null; - - /** - * The width in pixels - * - * - * @var int - * @readonly - */ - public $width = null; - - /** - * The height in pixels - * - * - * @var int - * @readonly - */ - public $height = null; - - /** - * The duration in seconds - * - * - * @var int - * @readonly - */ - public $duration = null; - - /** - * The duration in miliseconds - * - * - * @var int - */ - public $msDuration = null; - - /** - * The duration type (short for 0-4 mins, medium for 4-20 mins, long for 20+ mins) - * - * - * @var KalturaDurationType - * @readonly - */ - public $durationType = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaMediaEntry extends KalturaPlayableEntry -{ - /** - * The media type of the entry - * - * - * @var KalturaMediaType - * @insertonly - */ - public $mediaType = null; - - /** - * Override the default conversion quality - * - * - * @var string - * @insertonly - */ - public $conversionQuality = null; - - /** - * The source type of the entry - * - * - * @var KalturaSourceType - * @insertonly - */ - public $sourceType = null; - - /** - * The search provider type used to import this entry - * - * - * @var KalturaSearchProviderType - * @insertonly - */ - public $searchProviderType = null; - - /** - * The ID of the media in the importing site - * - * - * @var string - * @insertonly - */ - public $searchProviderId = null; - - /** - * The user name used for credits - * - * - * @var string - */ - public $creditUserName = null; - - /** - * The URL for credits - * - * - * @var string - */ - public $creditUrl = null; - - /** - * The media date extracted from EXIF data (For images) as Unix timestamp (In seconds) - * - * - * @var int - * @readonly - */ - public $mediaDate = null; - - /** - * The URL used for playback. This is not the download URL. - * - * - * @var string - * @readonly - */ - public $dataUrl = null; - - /** - * Comma separated flavor params ids that exists for this media entry - * - * - * @var string - * @readonly - */ - public $flavorParamsIds = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaFeatureStatus extends KalturaObjectBase -{ - /** - * - * - * @var KalturaFeatureStatusType - */ - public $type = null; - - /** - * - * - * @var int - */ - public $value = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaFeatureStatusListResponse extends KalturaObjectBase -{ - /** - * - * - * @var array of KalturaFeatureStatus - * @readonly - */ - public $objects; - - /** - * - * - * @var int - * @readonly - */ - public $totalCount = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaFileAsset extends KalturaObjectBase -{ - /** - * - * - * @var int - * @readonly - */ - public $id = null; - - /** - * - * - * @var int - * @readonly - */ - public $partnerId = null; - - /** - * - * - * @var KalturaFileAssetObjectType - * @insertonly - */ - public $fileAssetObjectType = null; - - /** - * - * - * @var string - * @insertonly - */ - public $objectId = null; - - /** - * - * - * @var string - */ - public $name = null; - - /** - * - * - * @var string - */ - public $systemName = null; - - /** - * - * - * @var string - */ - public $fileExt = null; - - /** - * - * - * @var int - * @readonly - */ - public $version = null; - - /** - * - * - * @var int - * @readonly - */ - public $createdAt = null; - - /** - * - * - * @var int - * @readonly - */ - public $updatedAt = null; - - /** - * - * - * @var KalturaFileAssetStatus - * @readonly - */ - public $status = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaFileAssetListResponse extends KalturaObjectBase -{ - /** - * - * - * @var array of KalturaFileAsset - * @readonly - */ - public $objects; - - /** - * - * - * @var int - * @readonly - */ - public $totalCount = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -abstract class KalturaSearchItem extends KalturaObjectBase -{ - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaFilter extends KalturaObjectBase -{ - /** - * - * - * @var string - */ - public $orderBy = null; - - /** - * - * - * @var KalturaSearchItem - */ - public $advancedSearch; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaFilterPager extends KalturaObjectBase -{ - /** - * The number of objects to retrieve. (Default is 30, maximum page size is 500). - * - * - * @var int - */ - public $pageSize = null; - - /** - * The page number for which {pageSize} of objects should be retrieved (Default is 1). - * - * - * @var int - */ - public $pageIndex = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaFlavorAsset extends KalturaAsset -{ - /** - * The Flavor Params used to create this Flavor Asset - * - * - * @var int - * @insertonly - */ - public $flavorParamsId = null; - - /** - * The width of the Flavor Asset - * - * - * @var int - * @readonly - */ - public $width = null; - - /** - * The height of the Flavor Asset - * - * - * @var int - * @readonly - */ - public $height = null; - - /** - * The overall bitrate (in KBits) of the Flavor Asset - * - * - * @var int - * @readonly - */ - public $bitrate = null; - - /** - * The frame rate (in FPS) of the Flavor Asset - * - * - * @var float - * @readonly - */ - public $frameRate = null; - - /** - * True if this Flavor Asset is the original source - * - * - * @var bool - * @readonly - */ - public $isOriginal = null; - - /** - * True if this Flavor Asset is playable in KDP - * - * - * @var bool - * @readonly - */ - public $isWeb = null; - - /** - * The container format - * - * - * @var string - * @readonly - */ - public $containerFormat = null; - - /** - * The video codec - * - * - * @var string - * @readonly - */ - public $videoCodecId = null; - - /** - * The status of the Flavor Asset - * - * - * @var KalturaFlavorAssetStatus - * @readonly - */ - public $status = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaFlavorAssetListResponse extends KalturaObjectBase -{ - /** - * - * - * @var array of KalturaFlavorAsset - * @readonly - */ - public $objects; - - /** - * - * - * @var int - * @readonly - */ - public $totalCount = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaFlavorParams extends KalturaAssetParams -{ - /** - * The video codec of the Flavor Params - * - * - * @var KalturaVideoCodec - */ - public $videoCodec = null; - - /** - * The video bitrate (in KBits) of the Flavor Params - * - * - * @var int - */ - public $videoBitrate = null; - - /** - * The audio codec of the Flavor Params - * - * - * @var KalturaAudioCodec - */ - public $audioCodec = null; - - /** - * The audio bitrate (in KBits) of the Flavor Params - * - * - * @var int - */ - public $audioBitrate = null; - - /** - * The number of audio channels for "downmixing" - * - * - * @var int - */ - public $audioChannels = null; - - /** - * The audio sample rate of the Flavor Params - * - * - * @var int - */ - public $audioSampleRate = null; - - /** - * The desired width of the Flavor Params - * - * - * @var int - */ - public $width = null; - - /** - * The desired height of the Flavor Params - * - * - * @var int - */ - public $height = null; - - /** - * The frame rate of the Flavor Params - * - * - * @var int - */ - public $frameRate = null; - - /** - * The gop size of the Flavor Params - * - * - * @var int - */ - public $gopSize = null; - - /** - * The list of conversion engines (comma separated) - * - * - * @var string - */ - public $conversionEngines = null; - - /** - * The list of conversion engines extra params (separated with "|") - * - * - * @var string - */ - public $conversionEnginesExtraParams = null; - - /** - * - * - * @var bool - */ - public $twoPass = null; - - /** - * - * - * @var int - */ - public $deinterlice = null; - - /** - * - * - * @var int - */ - public $rotate = null; - - /** - * - * - * @var string - */ - public $operators = null; - - /** - * - * - * @var int - */ - public $engineVersion = null; - - /** - * The container format of the Flavor Params - * - * - * @var KalturaContainerFormat - */ - public $format = null; - - /** - * - * - * @var int - */ - public $aspectRatioProcessingMode = null; - - /** - * - * - * @var int - */ - public $forceFrameToMultiplication16 = null; - - /** - * - * - * @var int - */ - public $isGopInSec = null; - - /** - * - * - * @var int - */ - public $isAvoidVideoShrinkFramesizeToSource = null; - - /** - * - * - * @var int - */ - public $isAvoidVideoShrinkBitrateToSource = null; - - /** - * - * - * @var int - */ - public $isVideoFrameRateForLowBrAppleHls = null; - - /** - * - * - * @var float - */ - public $anamorphicPixels = null; - - /** - * - * - * @var int - */ - public $isAvoidForcedKeyFrames = null; - - /** - * - * - * @var int - */ - public $maxFrameRate = null; - - /** - * - * - * @var int - */ - public $videoConstantBitrate = null; - - /** - * - * - * @var int - */ - public $videoBitrateTolerance = null; - - /** - * - * - * @var int - */ - public $clipOffset = null; - - /** - * - * - * @var int - */ - public $clipDuration = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaFlavorAssetWithParams extends KalturaObjectBase -{ - /** - * The Flavor Asset (Can be null when there are params without asset) - * - * - * @var KalturaFlavorAsset - */ - public $flavorAsset; - - /** - * The Flavor Params - * - * - * @var KalturaFlavorParams - */ - public $flavorParams; - - /** - * The entry id - * - * - * @var string - */ - public $entryId = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaFlavorParamsListResponse extends KalturaObjectBase -{ - /** - * - * - * @var array of KalturaFlavorParams - * @readonly - */ - public $objects; - - /** - * - * - * @var int - * @readonly - */ - public $totalCount = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaFlavorParamsOutput extends KalturaFlavorParams -{ - /** - * - * - * @var int - */ - public $flavorParamsId = null; - - /** - * - * - * @var string - */ - public $commandLinesStr = null; - - /** - * - * - * @var string - */ - public $flavorParamsVersion = null; - - /** - * - * - * @var string - */ - public $flavorAssetId = null; - - /** - * - * - * @var string - */ - public $flavorAssetVersion = null; - - /** - * - * - * @var int - */ - public $readyBehavior = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaFlavorParamsOutputListResponse extends KalturaObjectBase -{ - /** - * - * - * @var array of KalturaFlavorParamsOutput - * @readonly - */ - public $objects; - - /** - * - * - * @var int - * @readonly - */ - public $totalCount = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -abstract class KalturaObject extends KalturaObjectBase -{ - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaJobData extends KalturaObjectBase -{ - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaLiveStreamConfiguration extends KalturaObjectBase -{ - /** - * - * - * @var KalturaPlaybackProtocol - */ - public $protocol = null; - - /** - * - * - * @var string - */ - public $url = null; - - /** - * - * - * @var string - */ - public $publishUrl = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -abstract class KalturaLiveEntry extends KalturaMediaEntry -{ - /** - * The message to be presented when the stream is offline - * - * - * @var string - */ - public $offlineMessage = null; - - /** - * Recording Status Enabled/Disabled - * - * - * @var KalturaRecordStatus - * @insertonly - */ - public $recordStatus = null; - - /** - * DVR Status Enabled/Disabled - * - * - * @var KalturaDVRStatus - * @insertonly - */ - public $dvrStatus = null; - - /** - * Window of time which the DVR allows for backwards scrubbing (in minutes) - * - * - * @var int - * @insertonly - */ - public $dvrWindow = null; - - /** - * Array of key value protocol->live stream url objects - * - * - * @var array of KalturaLiveStreamConfiguration - */ - public $liveStreamConfigurations; - - /** - * Recorded entry id - * - * - * @var string - */ - public $recordedEntryId = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaLiveChannel extends KalturaLiveEntry -{ - /** - * Playlist id to be played - * - * - * @var string - */ - public $playlistId = null; - - /** - * Indicates that the segments should be repeated for ever - * - * - * @var KalturaNullableBoolean - */ - public $repeat = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaLiveChannelListResponse extends KalturaObjectBase -{ - /** - * - * - * @var array of KalturaLiveChannel - * @readonly - */ - public $objects; - - /** - * - * - * @var int - * @readonly - */ - public $totalCount = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaLiveChannelSegment extends KalturaObjectBase -{ - /** - * Unique identifier - * - * - * @var string - * @readonly - */ - public $id = null; - - /** - * - * - * @var int - * @readonly - */ - public $partnerId = null; - - /** - * Segment creation date as Unix timestamp (In seconds) - * - * - * @var int - * @readonly - */ - public $createdAt = null; - - /** - * Segment update date as Unix timestamp (In seconds) - * - * - * @var int - * @readonly - */ - public $updatedAt = null; - - /** - * Segment name - * - * - * @var string - */ - public $name = null; - - /** - * Segment description - * - * - * @var string - */ - public $description = null; - - /** - * Segment tags - * - * - * @var string - */ - public $tags = null; - - /** - * Segment could be associated with the main stream, as additional stream or as overlay - * - * - * @var KalturaLiveChannelSegmentType - */ - public $type = null; - - /** - * - * - * @var KalturaLiveChannelSegmentStatus - * @readonly - */ - public $status = null; - - /** - * Live channel id - * - * - * @var string - */ - public $channelId = null; - - /** - * Entry id to be played - * - * - * @var string - */ - public $entryId = null; - - /** - * Segment start time trigger type - * - * - * @var KalturaLiveChannelSegmentTriggerType - */ - public $triggerType = null; - - /** - * Live channel segment that the trigger relates to - * - * - * @var string - */ - public $triggerSegmentId = null; - - /** - * Segment play start time, in mili-seconds, according to trigger type - * - * - * @var float - */ - public $startTime = null; - - /** - * Segment play duration time, in mili-seconds - * - * - * @var float - */ - public $duration = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaLiveChannelSegmentListResponse extends KalturaObjectBase -{ - /** - * - * - * @var array of KalturaLiveChannelSegment - * @readonly - */ - public $objects; - - /** - * - * - * @var int - * @readonly - */ - public $totalCount = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaLiveStreamBitrate extends KalturaObjectBase -{ - /** - * - * - * @var int - */ - public $bitrate = null; - - /** - * - * - * @var int - */ - public $width = null; - - /** - * - * - * @var int - */ - public $height = null; - - /** - * - * - * @var string - */ - public $tags = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaLiveStreamEntry extends KalturaLiveEntry -{ - /** - * The stream id as provided by the provider - * - * - * @var string - * @readonly - */ - public $streamRemoteId = null; - - /** - * The backup stream id as provided by the provider - * - * - * @var string - * @readonly - */ - public $streamRemoteBackupId = null; - - /** - * Array of supported bitrates - * - * - * @var array of KalturaLiveStreamBitrate - */ - public $bitrates; - - /** - * - * - * @var string - */ - public $primaryBroadcastingUrl = null; - - /** - * - * - * @var string - */ - public $secondaryBroadcastingUrl = null; - - /** - * - * - * @var string - */ - public $streamName = null; - - /** - * The stream url - * - * - * @var string - */ - public $streamUrl = null; - - /** - * HLS URL - URL for live stream playback on mobile device - * - * - * @var string - */ - public $hlsStreamUrl = null; - - /** - * URL Manager to handle the live stream URL (for instance, add token) - * - * - * @var string - */ - public $urlManager = null; - - /** - * The broadcast primary ip - * - * - * @var string - */ - public $encodingIP1 = null; - - /** - * The broadcast secondary ip - * - * - * @var string - */ - public $encodingIP2 = null; - - /** - * The broadcast password - * - * - * @var string - */ - public $streamPassword = null; - - /** - * The broadcast username - * - * - * @var string - * @readonly - */ - public $streamUsername = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaLiveStreamListResponse extends KalturaObjectBase -{ - /** - * - * - * @var array of KalturaLiveStreamEntry - * @readonly - */ - public $objects; - - /** - * - * - * @var int - * @readonly - */ - public $totalCount = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -abstract class KalturaBaseEntryBaseFilter extends KalturaFilter -{ - /** - * This filter should be in use for retrieving only a specific entry (identified by its entryId). - * - * - * @var string - */ - public $idEqual = null; - - /** - * This filter should be in use for retrieving few specific entries (string should include comma separated list of entryId strings). - * - * - * @var string - */ - public $idIn = null; - - /** - * - * - * @var string - */ - public $idNotIn = null; - - /** - * This filter should be in use for retrieving specific entries. It should include only one string to search for in entry names (no wildcards, spaces are treated as part of the string). - * - * - * @var string - */ - public $nameLike = null; - - /** - * This filter should be in use for retrieving specific entries. It could include few (comma separated) strings for searching in entry names, while applying an OR logic to retrieve entries that contain at least one input string (no wildcards, spaces are treated as part of the string). - * - * - * @var string - */ - public $nameMultiLikeOr = null; - - /** - * This filter should be in use for retrieving specific entries. It could include few (comma separated) strings for searching in entry names, while applying an AND logic to retrieve entries that contain all input strings (no wildcards, spaces are treated as part of the string). - * - * - * @var string - */ - public $nameMultiLikeAnd = null; - - /** - * This filter should be in use for retrieving entries with a specific name. - * - * - * @var string - */ - public $nameEqual = null; - - /** - * This filter should be in use for retrieving only entries which were uploaded by/assigned to users of a specific Kaltura Partner (identified by Partner ID). - * - * - * @var int - */ - public $partnerIdEqual = null; - - /** - * This filter should be in use for retrieving only entries within Kaltura network which were uploaded by/assigned to users of few Kaltura Partners (string should include comma separated list of PartnerIDs) - * - * - * @var string - */ - public $partnerIdIn = null; - - /** - * This filter parameter should be in use for retrieving only entries, uploaded by/assigned to a specific user (identified by user Id). - * - * - * @var string - */ - public $userIdEqual = null; - - /** - * - * - * @var string - */ - public $creatorIdEqual = null; - - /** - * This filter should be in use for retrieving specific entries. It should include only one string to search for in entry tags (no wildcards, spaces are treated as part of the string). - * - * - * @var string - */ - public $tagsLike = null; - - /** - * This filter should be in use for retrieving specific entries. It could include few (comma separated) strings for searching in entry tags, while applying an OR logic to retrieve entries that contain at least one input string (no wildcards, spaces are treated as part of the string). - * - * - * @var string - */ - public $tagsMultiLikeOr = null; - - /** - * This filter should be in use for retrieving specific entries. It could include few (comma separated) strings for searching in entry tags, while applying an AND logic to retrieve entries that contain all input strings (no wildcards, spaces are treated as part of the string). - * - * - * @var string - */ - public $tagsMultiLikeAnd = null; - - /** - * This filter should be in use for retrieving specific entries. It should include only one string to search for in entry tags set by an ADMIN user (no wildcards, spaces are treated as part of the string). - * - * - * @var string - */ - public $adminTagsLike = null; - - /** - * This filter should be in use for retrieving specific entries. It could include few (comma separated) strings for searching in entry tags, set by an ADMIN user, while applying an OR logic to retrieve entries that contain at least one input string (no wildcards, spaces are treated as part of the string). - * - * - * @var string - */ - public $adminTagsMultiLikeOr = null; - - /** - * This filter should be in use for retrieving specific entries. It could include few (comma separated) strings for searching in entry tags, set by an ADMIN user, while applying an AND logic to retrieve entries that contain all input strings (no wildcards, spaces are treated as part of the string). - * - * - * @var string - */ - public $adminTagsMultiLikeAnd = null; - - /** - * - * - * @var string - */ - public $categoriesMatchAnd = null; - - /** - * All entries within these categories or their child categories. - * - * - * @var string - */ - public $categoriesMatchOr = null; - - /** - * - * - * @var string - */ - public $categoriesNotContains = null; - - /** - * - * - * @var string - */ - public $categoriesIdsMatchAnd = null; - - /** - * All entries of the categories, excluding their child categories. - * To include entries of the child categories, use categoryAncestorIdIn, or categoriesMatchOr. - * - * - * @var string - */ - public $categoriesIdsMatchOr = null; - - /** - * - * - * @var string - */ - public $categoriesIdsNotContains = null; - - /** - * - * - * @var KalturaNullableBoolean - */ - public $categoriesIdsEmpty = null; - - /** - * This filter should be in use for retrieving only entries, at a specific { - * - * @var KalturaEntryStatus - */ - public $statusEqual = null; - - /** - * This filter should be in use for retrieving only entries, not at a specific { - * - * @var KalturaEntryStatus - */ - public $statusNotEqual = null; - - /** - * This filter should be in use for retrieving only entries, at few specific { - * - * @var string - */ - public $statusIn = null; - - /** - * This filter should be in use for retrieving only entries, not at few specific { - * - * @var string - */ - public $statusNotIn = null; - - /** - * - * - * @var KalturaEntryModerationStatus - */ - public $moderationStatusEqual = null; - - /** - * - * - * @var KalturaEntryModerationStatus - */ - public $moderationStatusNotEqual = null; - - /** - * - * - * @var string - */ - public $moderationStatusIn = null; - - /** - * - * - * @var string - */ - public $moderationStatusNotIn = null; - - /** - * - * - * @var KalturaEntryType - */ - public $typeEqual = null; - - /** - * This filter should be in use for retrieving entries of few { - * - * @var string - */ - public $typeIn = null; - - /** - * This filter parameter should be in use for retrieving only entries which were created at Kaltura system after a specific time/date (standard timestamp format). - * - * - * @var int - */ - public $createdAtGreaterThanOrEqual = null; - - /** - * This filter parameter should be in use for retrieving only entries which were created at Kaltura system before a specific time/date (standard timestamp format). - * - * - * @var int - */ - public $createdAtLessThanOrEqual = null; - - /** - * - * - * @var int - */ - public $updatedAtGreaterThanOrEqual = null; - - /** - * - * - * @var int - */ - public $updatedAtLessThanOrEqual = null; - - /** - * - * - * @var int - */ - public $totalRankLessThanOrEqual = null; - - /** - * - * - * @var int - */ - public $totalRankGreaterThanOrEqual = null; - - /** - * - * - * @var int - */ - public $groupIdEqual = null; - - /** - * This filter should be in use for retrieving specific entries while search match the input string within all of the following metadata attributes: name, description, tags, adminTags. - * - * - * @var string - */ - public $searchTextMatchAnd = null; - - /** - * This filter should be in use for retrieving specific entries while search match the input string within at least one of the following metadata attributes: name, description, tags, adminTags. - * - * - * @var string - */ - public $searchTextMatchOr = null; - - /** - * - * - * @var int - */ - public $accessControlIdEqual = null; - - /** - * - * - * @var string - */ - public $accessControlIdIn = null; - - /** - * - * - * @var int - */ - public $startDateGreaterThanOrEqual = null; - - /** - * - * - * @var int - */ - public $startDateLessThanOrEqual = null; - - /** - * - * - * @var int - */ - public $startDateGreaterThanOrEqualOrNull = null; - - /** - * - * - * @var int - */ - public $startDateLessThanOrEqualOrNull = null; - - /** - * - * - * @var int - */ - public $endDateGreaterThanOrEqual = null; - - /** - * - * - * @var int - */ - public $endDateLessThanOrEqual = null; - - /** - * - * - * @var int - */ - public $endDateGreaterThanOrEqualOrNull = null; - - /** - * - * - * @var int - */ - public $endDateLessThanOrEqualOrNull = null; - - /** - * - * - * @var string - */ - public $referenceIdEqual = null; - - /** - * - * - * @var string - */ - public $referenceIdIn = null; - - /** - * - * - * @var string - */ - public $replacingEntryIdEqual = null; - - /** - * - * - * @var string - */ - public $replacingEntryIdIn = null; - - /** - * - * - * @var string - */ - public $replacedEntryIdEqual = null; - - /** - * - * - * @var string - */ - public $replacedEntryIdIn = null; - - /** - * - * - * @var KalturaEntryReplacementStatus - */ - public $replacementStatusEqual = null; - - /** - * - * - * @var string - */ - public $replacementStatusIn = null; - - /** - * - * - * @var int - */ - public $partnerSortValueGreaterThanOrEqual = null; - - /** - * - * - * @var int - */ - public $partnerSortValueLessThanOrEqual = null; - - /** - * - * - * @var string - */ - public $redirectEntryIdEqual = null; - - /** - * - * - * @var string - */ - public $rootEntryIdEqual = null; - - /** - * - * - * @var string - */ - public $rootEntryIdIn = null; - - /** - * - * - * @var string - */ - public $tagsNameMultiLikeOr = null; - - /** - * - * - * @var string - */ - public $tagsAdminTagsMultiLikeOr = null; - - /** - * - * - * @var string - */ - public $tagsAdminTagsNameMultiLikeOr = null; - - /** - * - * - * @var string - */ - public $tagsNameMultiLikeAnd = null; - - /** - * - * - * @var string - */ - public $tagsAdminTagsMultiLikeAnd = null; - - /** - * - * - * @var string - */ - public $tagsAdminTagsNameMultiLikeAnd = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaBaseEntryFilter extends KalturaBaseEntryBaseFilter -{ - /** - * - * - * @var string - */ - public $freeText = null; - - /** - * - * - * @var KalturaNullableBoolean - */ - public $isRoot = null; - - /** - * - * - * @var string - */ - public $categoriesFullNameIn = null; - - /** - * All entries within this categoy or in child categories - * - * - * @var string - */ - public $categoryAncestorIdIn = null; - - /** - * The id of the original entry - * - * - * @var string - */ - public $redirectFromEntryId = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -abstract class KalturaPlayableEntryBaseFilter extends KalturaBaseEntryFilter -{ - /** - * - * - * @var int - */ - public $lastPlayedAtGreaterThanOrEqual = null; - - /** - * - * - * @var int - */ - public $lastPlayedAtLessThanOrEqual = null; - - /** - * - * - * @var int - */ - public $durationLessThan = null; - - /** - * - * - * @var int - */ - public $durationGreaterThan = null; - - /** - * - * - * @var int - */ - public $durationLessThanOrEqual = null; - - /** - * - * - * @var int - */ - public $durationGreaterThanOrEqual = null; - - /** - * - * - * @var string - */ - public $durationTypeMatchOr = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaPlayableEntryFilter extends KalturaPlayableEntryBaseFilter -{ - -} - -/** - * @package Kaltura - * @subpackage Client - */ -abstract class KalturaMediaEntryBaseFilter extends KalturaPlayableEntryFilter -{ - /** - * - * - * @var KalturaMediaType - */ - public $mediaTypeEqual = null; - - /** - * - * - * @var string - */ - public $mediaTypeIn = null; - - /** - * - * - * @var int - */ - public $mediaDateGreaterThanOrEqual = null; - - /** - * - * - * @var int - */ - public $mediaDateLessThanOrEqual = null; - - /** - * - * - * @var string - */ - public $flavorParamsIdsMatchOr = null; - - /** - * - * - * @var string - */ - public $flavorParamsIdsMatchAnd = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaMediaEntryFilter extends KalturaMediaEntryBaseFilter -{ - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaMediaEntryFilterForPlaylist extends KalturaMediaEntryFilter -{ - /** - * - * - * @var int - */ - public $limit = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaMediaInfo extends KalturaObjectBase -{ - /** - * The id of the media info - * - * - * @var int - * @readonly - */ - public $id = null; - - /** - * The id of the related flavor asset - * - * - * @var string - */ - public $flavorAssetId = null; - - /** - * The file size - * - * - * @var int - */ - public $fileSize = null; - - /** - * The container format - * - * - * @var string - */ - public $containerFormat = null; - - /** - * The container id - * - * - * @var string - */ - public $containerId = null; - - /** - * The container profile - * - * - * @var string - */ - public $containerProfile = null; - - /** - * The container duration - * - * - * @var int - */ - public $containerDuration = null; - - /** - * The container bit rate - * - * - * @var int - */ - public $containerBitRate = null; - - /** - * The video format - * - * - * @var string - */ - public $videoFormat = null; - - /** - * The video codec id - * - * - * @var string - */ - public $videoCodecId = null; - - /** - * The video duration - * - * - * @var int - */ - public $videoDuration = null; - - /** - * The video bit rate - * - * - * @var int - */ - public $videoBitRate = null; - - /** - * The video bit rate mode - * - * - * @var KalturaBitRateMode - */ - public $videoBitRateMode = null; - - /** - * The video width - * - * - * @var int - */ - public $videoWidth = null; - - /** - * The video height - * - * - * @var int - */ - public $videoHeight = null; - - /** - * The video frame rate - * - * - * @var float - */ - public $videoFrameRate = null; - - /** - * The video display aspect ratio (dar) - * - * - * @var float - */ - public $videoDar = null; - - /** - * - * - * @var int - */ - public $videoRotation = null; - - /** - * The audio format - * - * - * @var string - */ - public $audioFormat = null; - - /** - * The audio codec id - * - * - * @var string - */ - public $audioCodecId = null; - - /** - * The audio duration - * - * - * @var int - */ - public $audioDuration = null; - - /** - * The audio bit rate - * - * - * @var int - */ - public $audioBitRate = null; - - /** - * The audio bit rate mode - * - * - * @var KalturaBitRateMode - */ - public $audioBitRateMode = null; - - /** - * The number of audio channels - * - * - * @var int - */ - public $audioChannels = null; - - /** - * The audio sampling rate - * - * - * @var int - */ - public $audioSamplingRate = null; - - /** - * The audio resolution - * - * - * @var int - */ - public $audioResolution = null; - - /** - * The writing library - * - * - * @var string - */ - public $writingLib = null; - - /** - * The data as returned by the mediainfo command line - * - * - * @var string - */ - public $rawData = null; - - /** - * - * - * @var string - */ - public $multiStreamInfo = null; - - /** - * - * - * @var int - */ - public $scanType = null; - - /** - * - * - * @var string - */ - public $multiStream = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaMediaInfoListResponse extends KalturaObjectBase -{ - /** - * - * - * @var array of KalturaMediaInfo - * @readonly - */ - public $objects; - - /** - * - * - * @var int - * @readonly - */ - public $totalCount = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaMediaListResponse extends KalturaObjectBase -{ - /** - * - * - * @var array of KalturaMediaEntry - * @readonly - */ - public $objects; - - /** - * - * - * @var int - * @readonly - */ - public $totalCount = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaMediaServer extends KalturaObjectBase -{ - /** - * Unique identifier - * - * - * @var int - * @readonly - */ - public $id = null; - - /** - * Server data center id - * - * - * @var int - * @readonly - */ - public $dc = null; - - /** - * Server host name - * - * - * @var string - * @readonly - */ - public $hostname = null; - - /** - * Server first registration date as Unix timestamp (In seconds) - * - * - * @var int - * @readonly - */ - public $createdAt = null; - - /** - * Server last update date as Unix timestamp (In seconds) - * - * - * @var int - * @readonly - */ - public $updatedAt = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaMediaServerStatus extends KalturaObjectBase -{ - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaMixEntry extends KalturaPlayableEntry -{ - /** - * Indicates whether the user has submited a real thumbnail to the mix (Not the one that was generated automaticaly) - * - * - * @var bool - * @readonly - */ - public $hasRealThumbnail = null; - - /** - * The editor type used to edit the metadata - * - * - * @var KalturaEditorType - */ - public $editorType = null; - - /** - * The xml data of the mix - * - * - * @var string - */ - public $dataContent = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaMixListResponse extends KalturaObjectBase -{ - /** - * - * - * @var array of KalturaMixEntry - * @readonly - */ - public $objects; - - /** - * - * - * @var int - * @readonly - */ - public $totalCount = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaModerationFlag extends KalturaObjectBase -{ - /** - * Moderation flag id - * - * - * @var int - * @readonly - */ - public $id = null; - - /** - * - * - * @var int - * @readonly - */ - public $partnerId = null; - - /** - * The user id that added the moderation flag - * - * - * @var string - * @readonly - */ - public $userId = null; - - /** - * The type of the moderation flag (entry or user) - * - * - * @var KalturaModerationObjectType - * @readonly - */ - public $moderationObjectType = null; - - /** - * If moderation flag is set for entry, this is the flagged entry id - * - * - * @var string - */ - public $flaggedEntryId = null; - - /** - * If moderation flag is set for user, this is the flagged user id - * - * - * @var string - */ - public $flaggedUserId = null; - - /** - * The moderation flag status - * - * - * @var KalturaModerationFlagStatus - * @readonly - */ - public $status = null; - - /** - * The comment that was added to the flag - * - * - * @var string - */ - public $comments = null; - - /** - * - * - * @var KalturaModerationFlagType - */ - public $flagType = null; - - /** - * - * - * @var int - * @readonly - */ - public $createdAt = null; - - /** - * - * - * @var int - * @readonly - */ - public $updatedAt = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaModerationFlagListResponse extends KalturaObjectBase -{ - /** - * - * - * @var array of KalturaModerationFlag - * @readonly - */ - public $objects; - - /** - * - * - * @var int - * @readonly - */ - public $totalCount = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaPlayerDeliveryType extends KalturaObjectBase -{ - /** - * - * - * @var string - */ - public $id = null; - - /** - * - * - * @var string - */ - public $label = null; - - /** - * - * - * @var array of KalturaKeyValue - */ - public $flashvars; - - /** - * - * - * @var string - */ - public $minVersion = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaPlayerEmbedCodeType extends KalturaObjectBase -{ - /** - * - * - * @var string - */ - public $id = null; - - /** - * - * - * @var string - */ - public $label = null; - - /** - * - * - * @var bool - */ - public $entryOnly = null; - - /** - * - * - * @var string - */ - public $minVersion = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaPartner extends KalturaObjectBase -{ - /** - * - * - * @var int - * @readonly - */ - public $id = null; - - /** - * - * - * @var string - */ - public $name = null; - - /** - * - * - * @var string - */ - public $website = null; - - /** - * - * - * @var string - */ - public $notificationUrl = null; - - /** - * - * - * @var int - */ - public $appearInSearch = null; - - /** - * - * - * @var int - * @readonly - */ - public $createdAt = null; - - /** - * deprecated - lastName and firstName replaces this field - * - * - * @var string - */ - public $adminName = null; - - /** - * - * - * @var string - */ - public $adminEmail = null; - - /** - * - * - * @var string - */ - public $description = null; - - /** - * - * - * @var KalturaCommercialUseType - */ - public $commercialUse = null; - - /** - * - * - * @var string - */ - public $landingPage = null; - - /** - * - * - * @var string - */ - public $userLandingPage = null; - - /** - * - * - * @var string - */ - public $contentCategories = null; - - /** - * - * - * @var KalturaPartnerType - */ - public $type = null; - - /** - * - * - * @var string - */ - public $phone = null; - - /** - * - * - * @var string - */ - public $describeYourself = null; - - /** - * - * - * @var bool - */ - public $adultContent = null; - - /** - * - * - * @var string - */ - public $defConversionProfileType = null; - - /** - * - * - * @var int - */ - public $notify = null; - - /** - * - * - * @var KalturaPartnerStatus - * @readonly - */ - public $status = null; - - /** - * - * - * @var int - */ - public $allowQuickEdit = null; - - /** - * - * - * @var int - */ - public $mergeEntryLists = null; - - /** - * - * - * @var string - */ - public $notificationsConfig = null; - - /** - * - * - * @var int - */ - public $maxUploadSize = null; - - /** - * - * - * @var int - * @readonly - */ - public $partnerPackage = null; - - /** - * - * - * @var string - * @readonly - */ - public $secret = null; - - /** - * - * - * @var string - * @readonly - */ - public $adminSecret = null; - - /** - * - * - * @var string - * @readonly - */ - public $cmsPassword = null; - - /** - * - * - * @var int - */ - public $allowMultiNotification = null; - - /** - * - * - * @var int - * @readonly - */ - public $adminLoginUsersQuota = null; - - /** - * - * - * @var string - */ - public $adminUserId = null; - - /** - * firstName and lastName replace the old (deprecated) adminName - * - * - * @var string - */ - public $firstName = null; - - /** - * lastName and firstName replace the old (deprecated) adminName - * - * - * @var string - */ - public $lastName = null; - - /** - * country code (2char) - this field is optional - * - * - * @var string - */ - public $country = null; - - /** - * state code (2char) - this field is optional - * - * - * @var string - */ - public $state = null; - - /** - * - * - * @var array of KalturaKeyValue - * @insertonly - */ - public $additionalParams; - - /** - * - * - * @var int - * @readonly - */ - public $publishersQuota = null; - - /** - * - * - * @var KalturaPartnerGroupType - * @readonly - */ - public $partnerGroupType = null; - - /** - * - * - * @var bool - * @readonly - */ - public $defaultEntitlementEnforcement = null; - - /** - * - * - * @var string - * @readonly - */ - public $defaultDeliveryType = null; - - /** - * - * - * @var string - * @readonly - */ - public $defaultEmbedCodeType = null; - - /** - * - * - * @var array of KalturaPlayerDeliveryType - * @readonly - */ - public $deliveryTypes; - - /** - * - * - * @var array of KalturaPlayerEmbedCodeType - * @readonly - */ - public $embedCodeTypes; - - /** - * - * - * @var int - * @readonly - */ - public $templatePartnerId = null; - - /** - * - * - * @var bool - * @readonly - */ - public $ignoreSeoLinks = null; - - /** - * - * - * @var string - * @readonly - */ - public $host = null; - - /** - * - * - * @var string - * @readonly - */ - public $cdnHost = null; - - /** - * - * - * @var string - * @readonly - */ - public $rtmpUrl = null; - - /** - * - * - * @var bool - * @readonly - */ - public $isFirstLogin = null; - - /** - * - * - * @var string - * @readonly - */ - public $logoutUrl = null; - - /** - * - * - * @var int - * @readonly - */ - public $partnerParentId = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaPartnerListResponse extends KalturaObjectBase -{ - /** - * - * - * @var array of KalturaPartner - * @readonly - */ - public $objects; - - /** - * - * - * @var int - * @readonly - */ - public $totalCount = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaPartnerStatistics extends KalturaObjectBase -{ - /** - * Package total allowed bandwidth and storage - * - * - * @var int - * @readonly - */ - public $packageBandwidthAndStorage = null; - - /** - * Partner total hosting in GB on the disk - * - * - * @var float - * @readonly - */ - public $hosting = null; - - /** - * Partner total bandwidth in GB - * - * - * @var float - * @readonly - */ - public $bandwidth = null; - - /** - * total usage in GB - including bandwidth and storage - * - * - * @var int - * @readonly - */ - public $usage = null; - - /** - * Percent of usage out of partner's package. if usage is 5GB and package is 10GB, this value will be 50 - * - * - * @var float - * @readonly - */ - public $usagePercent = null; - - /** - * date when partner reached the limit of his package (timestamp) - * - * - * @var int - * @readonly - */ - public $reachedLimitDate = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaPartnerUsage extends KalturaObjectBase -{ - /** - * Partner total hosting in GB on the disk - * - * - * @var float - * @readonly - */ - public $hostingGB = null; - - /** - * percent of usage out of partner's package. if usageGB is 5 and package is 10GB, this value will be 50 - * - * - * @var float - * @readonly - */ - public $Percent = null; - - /** - * package total BW - actually this is usage, which represents BW+storage - * - * - * @var int - * @readonly - */ - public $packageBW = null; - - /** - * total usage in GB - including bandwidth and storage - * - * - * @var float - * @readonly - */ - public $usageGB = null; - - /** - * date when partner reached the limit of his package (timestamp) - * - * - * @var int - * @readonly - */ - public $reachedLimitDate = null; - - /** - * a semi-colon separated list of comma-separated key-values to represent a usage graph. - * keys could be 1-12 for a year view (1,1.2;2,1.1;3,0.9;...;12,1.4;) - * keys could be 1-[28,29,30,31] depending on the requested month, for a daily view in a given month (1,0.4;2,0.2;...;31,0.1;) - * - * - * @var string - * @readonly - */ - public $usageGraph = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaPermission extends KalturaObjectBase -{ - /** - * - * - * @var int - * @readonly - */ - public $id = null; - - /** - * - * - * @var KalturaPermissionType - * @readonly - */ - public $type = null; - - /** - * - * - * @var string - */ - public $name = null; - - /** - * - * - * @var string - */ - public $friendlyName = null; - - /** - * - * - * @var string - */ - public $description = null; - - /** - * - * - * @var KalturaPermissionStatus - */ - public $status = null; - - /** - * - * - * @var int - * @readonly - */ - public $partnerId = null; - - /** - * - * - * @var string - */ - public $dependsOnPermissionNames = null; - - /** - * - * - * @var string - */ - public $tags = null; - - /** - * - * - * @var string - */ - public $permissionItemsIds = null; - - /** - * - * - * @var int - * @readonly - */ - public $createdAt = null; - - /** - * - * - * @var int - * @readonly - */ - public $updatedAt = null; - - /** - * - * - * @var string - */ - public $partnerGroup = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -abstract class KalturaPermissionItem extends KalturaObjectBase -{ - /** - * - * - * @var int - * @readonly - */ - public $id = null; - - /** - * - * - * @var KalturaPermissionItemType - * @readonly - */ - public $type = null; - - /** - * - * - * @var int - * @readonly - */ - public $partnerId = null; - - /** - * - * - * @var string - */ - public $tags = null; - - /** - * - * - * @var int - * @readonly - */ - public $createdAt = null; - - /** - * - * - * @var int - * @readonly - */ - public $updatedAt = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaPermissionItemListResponse extends KalturaObjectBase -{ - /** - * - * - * @var array of KalturaPermissionItem - * @readonly - */ - public $objects; - - /** - * - * - * @var int - * @readonly - */ - public $totalCount = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaPermissionListResponse extends KalturaObjectBase -{ - /** - * - * - * @var array of KalturaPermission - * @readonly - */ - public $objects; - - /** - * - * - * @var int - * @readonly - */ - public $totalCount = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaPlaylist extends KalturaBaseEntry -{ - /** - * Content of the playlist - - * XML if the playlistType is dynamic - * text if the playlistType is static - * url if the playlistType is mRss - * - * - * @var string - */ - public $playlistContent = null; - - /** - * - * - * @var array of KalturaMediaEntryFilterForPlaylist - */ - public $filters; - - /** - * Maximum count of results to be returned in playlist execution - * - * - * @var int - */ - public $totalResults = null; - - /** - * Type of playlist - * - * - * @var KalturaPlaylistType - */ - public $playlistType = null; - - /** - * Number of plays - * - * - * @var int - * @readonly - */ - public $plays = null; - - /** - * Number of views - * - * - * @var int - * @readonly - */ - public $views = null; - - /** - * The duration in seconds - * - * - * @var int - * @readonly - */ - public $duration = null; - - /** - * The url for this playlist - * - * - * @var string - * @readonly - */ - public $executeUrl = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaPlaylistListResponse extends KalturaObjectBase -{ - /** - * - * - * @var array of KalturaPlaylist - * @readonly - */ - public $objects; - - /** - * - * - * @var int - * @readonly - */ - public $totalCount = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaRemotePath extends KalturaObjectBase -{ - /** - * - * - * @var int - * @readonly - */ - public $storageProfileId = null; - - /** - * - * - * @var string - * @readonly - */ - public $uri = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaRemotePathListResponse extends KalturaObjectBase -{ - /** - * - * - * @var array of KalturaRemotePath - * @readonly - */ - public $objects; - - /** - * - * - * @var int - * @readonly - */ - public $totalCount = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaUrlResource extends KalturaContentResource -{ - /** - * Remote URL, FTP, HTTP or HTTPS - * - * - * @var string - */ - public $url = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaRemoteStorageResource extends KalturaUrlResource -{ - /** - * ID of storage profile to be associated with the created file sync, used for file serving URL composing. - * - * - * @var int - */ - public $storageProfileId = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaReportBaseTotal extends KalturaObjectBase -{ - /** - * - * - * @var string - */ - public $id = null; - - /** - * - * - * @var string - */ - public $data = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaReportGraph extends KalturaObjectBase -{ - /** - * - * - * @var string - */ - public $id = null; - - /** - * - * - * @var string - */ - public $data = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaReportInputBaseFilter extends KalturaObjectBase -{ - /** - * Start date as Unix timestamp (In seconds) - * - * - * @var int - */ - public $fromDate = null; - - /** - * End date as Unix timestamp (In seconds) - * - * - * @var int - */ - public $toDate = null; - - /** - * Start day as string (YYYYMMDD) - * - * - * @var string - */ - public $fromDay = null; - - /** - * End date as string (YYYYMMDD) - * - * - * @var string - */ - public $toDay = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaReportResponse extends KalturaObjectBase -{ - /** - * - * - * @var string - */ - public $columns = null; - - /** - * - * - * @var array of KalturaString - */ - public $results; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaReportTable extends KalturaObjectBase -{ - /** - * - * - * @var string - * @readonly - */ - public $header = null; - - /** - * - * - * @var string - * @readonly - */ - public $data = null; - - /** - * - * - * @var int - * @readonly - */ - public $totalCount = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaReportTotal extends KalturaObjectBase -{ - /** - * - * - * @var string - */ - public $header = null; - - /** - * - * - * @var string - */ - public $data = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaSearch extends KalturaObjectBase -{ - /** - * - * - * @var string - */ - public $keyWords = null; - - /** - * - * - * @var KalturaSearchProviderType - */ - public $searchSource = null; - - /** - * - * - * @var KalturaMediaType - */ - public $mediaType = null; - - /** - * Use this field to pass dynamic data for searching - * For example - if you set this field to "mymovies_$partner_id" - * The $partner_id will be automatically replcaed with your real partner Id - * - * - * @var string - */ - public $extraData = null; - - /** - * - * - * @var string - */ - public $authData = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaSearchAuthData extends KalturaObjectBase -{ - /** - * The authentication data that further should be used for search - * - * - * @var string - */ - public $authData = null; - - /** - * Login URL when user need to sign-in and authorize the search - * - * - * @var string - */ - public $loginUrl = null; - - /** - * Information when there was an error - * - * - * @var string - */ - public $message = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaSearchResult extends KalturaSearch -{ - /** - * - * - * @var string - */ - public $id = null; - - /** - * - * - * @var string - */ - public $title = null; - - /** - * - * - * @var string - */ - public $thumbUrl = null; - - /** - * - * - * @var string - */ - public $description = null; - - /** - * - * - * @var string - */ - public $tags = null; - - /** - * - * - * @var string - */ - public $url = null; - - /** - * - * - * @var string - */ - public $sourceLink = null; - - /** - * - * - * @var string - */ - public $credit = null; - - /** - * - * - * @var KalturaLicenseType - */ - public $licenseType = null; - - /** - * - * - * @var string - */ - public $flashPlaybackType = null; - - /** - * - * - * @var string - */ - public $fileExt = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaSearchResultResponse extends KalturaObjectBase -{ - /** - * - * - * @var array of KalturaSearchResult - * @readonly - */ - public $objects; - - /** - * - * - * @var bool - * @readonly - */ - public $needMediaInfo = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaSessionInfo extends KalturaObjectBase -{ - /** - * - * - * @var string - * @readonly - */ - public $ks = null; - - /** - * - * - * @var KalturaSessionType - * @readonly - */ - public $sessionType = null; - - /** - * - * - * @var int - * @readonly - */ - public $partnerId = null; - - /** - * - * - * @var string - * @readonly - */ - public $userId = null; - - /** - * - * - * @var int - * @readonly - */ - public $expiry = null; - - /** - * - * - * @var string - * @readonly - */ - public $privileges = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaSourceFileSyncDescriptor extends KalturaObjectBase -{ - /** - * - * - * @var string - */ - public $fileSyncLocalPath = null; - - /** - * The translated path as used by the scheduler - * - * - * @var string - */ - public $actualFileSyncLocalPath = null; - - /** - * - * - * @var string - */ - public $fileSyncRemoteUrl = null; - - /** - * - * - * @var string - */ - public $assetId = null; - - /** - * - * - * @var int - */ - public $assetParamsId = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaStartWidgetSessionResponse extends KalturaObjectBase -{ - /** - * - * - * @var int - * @readonly - */ - public $partnerId = null; - - /** - * - * - * @var string - * @readonly - */ - public $ks = null; - - /** - * - * - * @var string - * @readonly - */ - public $userId = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaStatsEvent extends KalturaObjectBase -{ - /** - * - * - * @var string - */ - public $clientVer = null; - - /** - * - * - * @var KalturaStatsEventType - */ - public $eventType = null; - - /** - * the client's timestamp of this event - * - * - * @var float - */ - public $eventTimestamp = null; - - /** - * a unique string generated by the client that will represent the client-side session: the primary component will pass it on to other components that sprout from it - * - * - * @var string - */ - public $sessionId = null; - - /** - * - * - * @var int - */ - public $partnerId = null; - - /** - * - * - * @var string - */ - public $entryId = null; - - /** - * the UV cookie - creates in the operational system and should be passed on ofr every event - * - * - * @var string - */ - public $uniqueViewer = null; - - /** - * - * - * @var string - */ - public $widgetId = null; - - /** - * - * - * @var int - */ - public $uiconfId = null; - - /** - * the partner's user id - * - * - * @var string - */ - public $userId = null; - - /** - * the timestamp along the video when the event happend - * - * - * @var int - */ - public $currentPoint = null; - - /** - * the duration of the video in milliseconds - will make it much faster than quering the db for each entry - * - * - * @var int - */ - public $duration = null; - - /** - * will be retrieved from the request of the user - * - * - * @var string - * @readonly - */ - public $userIp = null; - - /** - * the time in milliseconds the event took - * - * - * @var int - */ - public $processDuration = null; - - /** - * the id of the GUI control - will be used in the future to better understand what the user clicked - * - * - * @var string - */ - public $controlId = null; - - /** - * true if the user ever used seek in this session - * - * - * @var bool - */ - public $seek = null; - - /** - * timestamp of the new point on the timeline of the video after the user seeks - * - * - * @var int - */ - public $newPoint = null; - - /** - * the referrer of the client - * - * - * @var string - */ - public $referrer = null; - - /** - * will indicate if the event is thrown for the first video in the session - * - * - * @var bool - */ - public $isFirstInSession = null; - - /** - * kaltura application name - * - * - * @var string - */ - public $applicationId = null; - - /** - * - * - * @var int - */ - public $contextId = null; - - /** - * - * - * @var KalturaStatsFeatureType - */ - public $featureType = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaStatsKmcEvent extends KalturaObjectBase -{ - /** - * - * - * @var string - */ - public $clientVer = null; - - /** - * - * - * @var string - */ - public $kmcEventActionPath = null; - - /** - * - * - * @var KalturaStatsKmcEventType - */ - public $kmcEventType = null; - - /** - * the client's timestamp of this event - * - * - * @var float - */ - public $eventTimestamp = null; - - /** - * a unique string generated by the client that will represent the client-side session: the primary component will pass it on to other components that sprout from it - * - * - * @var string - */ - public $sessionId = null; - - /** - * - * - * @var int - */ - public $partnerId = null; - - /** - * - * - * @var string - */ - public $entryId = null; - - /** - * - * - * @var string - */ - public $widgetId = null; - - /** - * - * - * @var int - */ - public $uiconfId = null; - - /** - * the partner's user id - * - * - * @var string - */ - public $userId = null; - - /** - * will be retrieved from the request of the user - * - * - * @var string - * @readonly - */ - public $userIp = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaStorageProfile extends KalturaObjectBase -{ - /** - * - * - * @var int - * @readonly - */ - public $id = null; - - /** - * - * - * @var int - * @readonly - */ - public $createdAt = null; - - /** - * - * - * @var int - * @readonly - */ - public $updatedAt = null; - - /** - * - * - * @var int - * @readonly - */ - public $partnerId = null; - - /** - * - * - * @var string - */ - public $name = null; - - /** - * - * - * @var string - */ - public $systemName = null; - - /** - * - * - * @var string - */ - public $desciption = null; - - /** - * - * - * @var KalturaStorageProfileStatus - */ - public $status = null; - - /** - * - * - * @var KalturaStorageProfileProtocol - */ - public $protocol = null; - - /** - * - * - * @var string - */ - public $storageUrl = null; - - /** - * - * - * @var string - */ - public $storageBaseDir = null; - - /** - * - * - * @var string - */ - public $storageUsername = null; - - /** - * - * - * @var string - */ - public $storagePassword = null; - - /** - * - * - * @var bool - */ - public $storageFtpPassiveMode = null; - - /** - * - * - * @var string - */ - public $deliveryHttpBaseUrl = null; - - /** - * - * - * @var string - */ - public $deliveryHttpsBaseUrl = null; - - /** - * - * - * @var string - */ - public $deliveryRmpBaseUrl = null; - - /** - * - * - * @var string - */ - public $deliveryIisBaseUrl = null; - - /** - * - * - * @var int - */ - public $minFileSize = null; - - /** - * - * - * @var int - */ - public $maxFileSize = null; - - /** - * - * - * @var string - */ - public $flavorParamsIds = null; - - /** - * - * - * @var int - */ - public $maxConcurrentConnections = null; - - /** - * - * - * @var string - */ - public $pathManagerClass = null; - - /** - * - * - * @var array of KalturaKeyValue - */ - public $pathManagerParams; - - /** - * - * - * @var string - */ - public $urlManagerClass = null; - - /** - * - * - * @var array of KalturaKeyValue - */ - public $urlManagerParams; - - /** - * No need to create enum for temp field - * - * - * @var int - */ - public $trigger = null; - - /** - * Delivery Priority - * - * - * @var int - */ - public $deliveryPriority = null; - - /** - * - * - * @var KalturaStorageProfileDeliveryStatus - */ - public $deliveryStatus = null; - - /** - * - * - * @var string - */ - public $rtmpPrefix = null; - - /** - * - * - * @var KalturaStorageProfileReadyBehavior - */ - public $readyBehavior = null; - - /** - * Flag sugnifying that the storage exported content should be deleted when soure entry is deleted - * - * - * @var int - */ - public $allowAutoDelete = null; - - /** - * Indicates to the local file transfer manager to create a link to the file instead of copying it - * - * - * @var bool - */ - public $createFileLink = null; - - /** - * Holds storage profile export rules - * - * - * @var array of KalturaRule - */ - public $rules; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaStorageProfileListResponse extends KalturaObjectBase -{ - /** - * - * - * @var array of KalturaStorageProfile - * @readonly - */ - public $objects; - - /** - * - * - * @var int - * @readonly - */ - public $totalCount = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaSyndicationFeedEntryCount extends KalturaObjectBase -{ - /** - * the total count of entries that should appear in the feed without flavor filtering - * - * - * @var int - */ - public $totalEntryCount = null; - - /** - * count of entries that will appear in the feed (including all relevant filters) - * - * - * @var int - */ - public $actualEntryCount = null; - - /** - * count of entries that requires transcoding in order to be included in feed - * - * - * @var int - */ - public $requireTranscodingCount = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaThumbAsset extends KalturaAsset -{ - /** - * The Flavor Params used to create this Flavor Asset - * - * - * @var int - * @insertonly - */ - public $thumbParamsId = null; - - /** - * The width of the Flavor Asset - * - * - * @var int - * @readonly - */ - public $width = null; - - /** - * The height of the Flavor Asset - * - * - * @var int - * @readonly - */ - public $height = null; - - /** - * The status of the asset - * - * - * @var KalturaThumbAssetStatus - * @readonly - */ - public $status = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaThumbAssetListResponse extends KalturaObjectBase -{ - /** - * - * - * @var array of KalturaThumbAsset - * @readonly - */ - public $objects; - - /** - * - * - * @var int - * @readonly - */ - public $totalCount = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaThumbParams extends KalturaAssetParams -{ - /** - * - * - * @var KalturaThumbCropType - */ - public $cropType = null; - - /** - * - * - * @var int - */ - public $quality = null; - - /** - * - * - * @var int - */ - public $cropX = null; - - /** - * - * - * @var int - */ - public $cropY = null; - - /** - * - * - * @var int - */ - public $cropWidth = null; - - /** - * - * - * @var int - */ - public $cropHeight = null; - - /** - * - * - * @var float - */ - public $videoOffset = null; - - /** - * - * - * @var int - */ - public $width = null; - - /** - * - * - * @var int - */ - public $height = null; - - /** - * - * - * @var float - */ - public $scaleWidth = null; - - /** - * - * - * @var float - */ - public $scaleHeight = null; - - /** - * Hexadecimal value - * - * - * @var string - */ - public $backgroundColor = null; - - /** - * Id of the flavor params or the thumbnail params to be used as source for the thumbnail creation - * - * - * @var int - */ - public $sourceParamsId = null; - - /** - * The container format of the Flavor Params - * - * - * @var KalturaContainerFormat - */ - public $format = null; - - /** - * The image density (dpi) for example: 72 or 96 - * - * - * @var int - */ - public $density = null; - - /** - * Strip profiles and comments - * - * - * @var bool - */ - public $stripProfiles = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaThumbParamsListResponse extends KalturaObjectBase -{ - /** - * - * - * @var array of KalturaThumbParams - * @readonly - */ - public $objects; - - /** - * - * - * @var int - * @readonly - */ - public $totalCount = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaThumbParamsOutput extends KalturaThumbParams -{ - /** - * - * - * @var int - */ - public $thumbParamsId = null; - - /** - * - * - * @var string - */ - public $thumbParamsVersion = null; - - /** - * - * - * @var string - */ - public $thumbAssetId = null; - - /** - * - * - * @var string - */ - public $thumbAssetVersion = null; - - /** - * - * - * @var int - */ - public $rotate = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaThumbParamsOutputListResponse extends KalturaObjectBase -{ - /** - * - * - * @var array of KalturaThumbParamsOutput - * @readonly - */ - public $objects; - - /** - * - * - * @var int - * @readonly - */ - public $totalCount = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaThumbnailServeOptions extends KalturaObjectBase -{ - /** - * - * - * @var bool - */ - public $download = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaUiConf extends KalturaObjectBase -{ - /** - * - * - * @var int - * @readonly - */ - public $id = null; - - /** - * Name of the uiConf, this is not a primary key - * - * - * @var string - */ - public $name = null; - - /** - * - * - * @var string - */ - public $description = null; - - /** - * - * - * @var int - * @readonly - */ - public $partnerId = null; - - /** - * - * - * @var KalturaUiConfObjType - */ - public $objType = null; - - /** - * - * - * @var string - * @readonly - */ - public $objTypeAsString = null; - - /** - * - * - * @var int - */ - public $width = null; - - /** - * - * - * @var int - */ - public $height = null; - - /** - * - * - * @var string - */ - public $htmlParams = null; - - /** - * - * - * @var string - */ - public $swfUrl = null; - - /** - * - * - * @var string - * @readonly - */ - public $confFilePath = null; - - /** - * - * - * @var string - */ - public $confFile = null; - - /** - * - * - * @var string - */ - public $confFileFeatures = null; - - /** - * - * - * @var string - */ - public $config = null; - - /** - * - * - * @var string - */ - public $confVars = null; - - /** - * - * - * @var bool - */ - public $useCdn = null; - - /** - * - * - * @var string - */ - public $tags = null; - - /** - * - * - * @var string - */ - public $swfUrlVersion = null; - - /** - * Entry creation date as Unix timestamp (In seconds) - * - * - * @var int - * @readonly - */ - public $createdAt = null; - - /** - * Entry creation date as Unix timestamp (In seconds) - * - * - * @var int - * @readonly - */ - public $updatedAt = null; - - /** - * - * - * @var KalturaUiConfCreationMode - */ - public $creationMode = null; - - /** - * - * - * @var string - */ - public $html5Url = null; - - /** - * UiConf version - * - * - * @var string - * @readonly - */ - public $version = null; - - /** - * - * - * @var string - */ - public $partnerTags = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaUiConfListResponse extends KalturaObjectBase -{ - /** - * - * - * @var array of KalturaUiConf - * @readonly - */ - public $objects; - - /** - * - * - * @var int - * @readonly - */ - public $totalCount = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaUiConfTypeInfo extends KalturaObjectBase -{ - /** - * UiConf Type - * - * - * @var KalturaUiConfObjType - */ - public $type = null; - - /** - * Available versions - * - * - * @var array of KalturaString - */ - public $versions; - - /** - * The direcotry this type is saved at - * - * - * @var string - */ - public $directory = null; - - /** - * Filename for this UiConf type - * - * - * @var string - */ - public $filename = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaUploadResponse extends KalturaObjectBase -{ - /** - * - * - * @var string - */ - public $uploadTokenId = null; - - /** - * - * - * @var int - */ - public $fileSize = null; - - /** - * - * - * @var KalturaUploadErrorCode - */ - public $errorCode = null; - - /** - * - * - * @var string - */ - public $errorDescription = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaUploadToken extends KalturaObjectBase -{ - /** - * Upload token unique ID - * - * - * @var string - * @readonly - */ - public $id = null; - - /** - * Partner ID of the upload token - * - * - * @var int - * @readonly - */ - public $partnerId = null; - - /** - * User id for the upload token - * - * - * @var string - * @readonly - */ - public $userId = null; - - /** - * Status of the upload token - * - * - * @var KalturaUploadTokenStatus - * @readonly - */ - public $status = null; - - /** - * Name of the file for the upload token, can be empty when the upload token is created and will be updated internally after the file is uploaded - * - * - * @var string - * @insertonly - */ - public $fileName = null; - - /** - * File size in bytes, can be empty when the upload token is created and will be updated internally after the file is uploaded - * - * - * @var float - * @insertonly - */ - public $fileSize = null; - - /** - * Uploaded file size in bytes, can be used to identify how many bytes were uploaded before resuming - * - * - * @var float - * @readonly - */ - public $uploadedFileSize = null; - - /** - * Creation date as Unix timestamp (In seconds) - * - * - * @var int - * @readonly - */ - public $createdAt = null; - - /** - * Last update date as Unix timestamp (In seconds) - * - * - * @var int - * @readonly - */ - public $updatedAt = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaUploadTokenListResponse extends KalturaObjectBase -{ - /** - * - * - * @var array of KalturaUploadToken - * @readonly - */ - public $objects; - - /** - * - * - * @var int - * @readonly - */ - public $totalCount = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaUser extends KalturaObjectBase -{ - /** - * - * - * @var string - */ - public $id = null; - - /** - * - * - * @var int - * @readonly - */ - public $partnerId = null; - - /** - * - * - * @var string - */ - public $screenName = null; - - /** - * - * - * @var string - */ - public $fullName = null; - - /** - * - * - * @var string - */ - public $email = null; - - /** - * - * - * @var int - */ - public $dateOfBirth = null; - - /** - * - * - * @var string - */ - public $country = null; - - /** - * - * - * @var string - */ - public $state = null; - - /** - * - * - * @var string - */ - public $city = null; - - /** - * - * - * @var string - */ - public $zip = null; - - /** - * - * - * @var string - */ - public $thumbnailUrl = null; - - /** - * - * - * @var string - */ - public $description = null; - - /** - * - * - * @var string - */ - public $tags = null; - - /** - * Admin tags can be updated only by using an admin session - * - * - * @var string - */ - public $adminTags = null; - - /** - * - * - * @var KalturaGender - */ - public $gender = null; - - /** - * - * - * @var KalturaUserStatus - */ - public $status = null; - - /** - * Creation date as Unix timestamp (In seconds) - * - * - * @var int - * @readonly - */ - public $createdAt = null; - - /** - * Last update date as Unix timestamp (In seconds) - * - * - * @var int - * @readonly - */ - public $updatedAt = null; - - /** - * Can be used to store various partner related data as a string - * - * - * @var string - */ - public $partnerData = null; - - /** - * - * - * @var int - */ - public $indexedPartnerDataInt = null; - - /** - * - * - * @var string - */ - public $indexedPartnerDataString = null; - - /** - * - * - * @var int - * @readonly - */ - public $storageSize = null; - - /** - * - * - * @var string - * @insertonly - */ - public $password = null; - - /** - * - * - * @var string - */ - public $firstName = null; - - /** - * - * - * @var string - */ - public $lastName = null; - - /** - * - * - * @var bool - */ - public $isAdmin = null; - - /** - * - * - * @var KalturaLanguageCode - */ - public $language = null; - - /** - * - * - * @var int - * @readonly - */ - public $lastLoginTime = null; - - /** - * - * - * @var int - * @readonly - */ - public $statusUpdatedAt = null; - - /** - * - * - * @var int - * @readonly - */ - public $deletedAt = null; - - /** - * - * - * @var bool - * @readonly - */ - public $loginEnabled = null; - - /** - * - * - * @var string - */ - public $roleIds = null; - - /** - * - * - * @var string - * @readonly - */ - public $roleNames = null; - - /** - * - * - * @var bool - * @readonly - */ - public $isAccountOwner = null; - - /** - * - * - * @var string - */ - public $allowedPartnerIds = null; - - /** - * - * - * @var string - */ - public $allowedPartnerPackages = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaUserListResponse extends KalturaObjectBase -{ - /** - * - * - * @var array of KalturaUser - * @readonly - */ - public $objects; - - /** - * - * - * @var int - * @readonly - */ - public $totalCount = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaUserRole extends KalturaObjectBase -{ - /** - * - * - * @var int - * @readonly - */ - public $id = null; - - /** - * - * - * @var string - */ - public $name = null; - - /** - * - * - * @var string - */ - public $systemName = null; - - /** - * - * - * @var string - */ - public $description = null; - - /** - * - * - * @var KalturaUserRoleStatus - */ - public $status = null; - - /** - * - * - * @var int - * @readonly - */ - public $partnerId = null; - - /** - * - * - * @var string - */ - public $permissionNames = null; - - /** - * - * - * @var string - */ - public $tags = null; - - /** - * - * - * @var int - * @readonly - */ - public $createdAt = null; - - /** - * - * - * @var int - * @readonly - */ - public $updatedAt = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaUserRoleListResponse extends KalturaObjectBase -{ - /** - * - * - * @var array of KalturaUserRole - * @readonly - */ - public $objects; - - /** - * - * - * @var int - * @readonly - */ - public $totalCount = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaWidget extends KalturaObjectBase -{ - /** - * - * - * @var string - * @readonly - */ - public $id = null; - - /** - * - * - * @var string - */ - public $sourceWidgetId = null; - - /** - * - * - * @var string - * @readonly - */ - public $rootWidgetId = null; - - /** - * - * - * @var int - * @readonly - */ - public $partnerId = null; - - /** - * - * - * @var string - */ - public $entryId = null; - - /** - * - * - * @var int - */ - public $uiConfId = null; - - /** - * - * - * @var KalturaWidgetSecurityType - */ - public $securityType = null; - - /** - * - * - * @var int - */ - public $securityPolicy = null; - - /** - * - * - * @var int - * @readonly - */ - public $createdAt = null; - - /** - * - * - * @var int - * @readonly - */ - public $updatedAt = null; - - /** - * Can be used to store various partner related data as a string - * - * - * @var string - */ - public $partnerData = null; - - /** - * - * - * @var string - * @readonly - */ - public $widgetHTML = null; - - /** - * Should enforce entitlement on feed entries - * - * - * @var bool - */ - public $enforceEntitlement = null; - - /** - * Set privacy context for search entries that assiged to private and public categories within a category privacy context. - * - * - * @var string - */ - public $privacyContext = null; - - /** - * Addes the HTML5 script line to the widget's embed code - * - * - * @var bool - */ - public $addEmbedHtml5Support = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaWidgetListResponse extends KalturaObjectBase -{ - /** - * - * - * @var array of KalturaWidget - * @readonly - */ - public $objects; - - /** - * - * - * @var int - * @readonly - */ - public $totalCount = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -abstract class KalturaAccessControlBaseFilter extends KalturaFilter -{ - /** - * - * - * @var int - */ - public $idEqual = null; - - /** - * - * - * @var string - */ - public $idIn = null; - - /** - * - * - * @var string - */ - public $systemNameEqual = null; - - /** - * - * - * @var string - */ - public $systemNameIn = null; - - /** - * - * - * @var int - */ - public $createdAtGreaterThanOrEqual = null; - - /** - * - * - * @var int - */ - public $createdAtLessThanOrEqual = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaAccessControlBlockAction extends KalturaRuleAction -{ - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaAccessControlLimitFlavorsAction extends KalturaRuleAction -{ - /** - * Comma separated list of flavor ids - * - * - * @var string - */ - public $flavorParamsIds = null; - - /** - * - * - * @var bool - */ - public $isBlockedList = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaAccessControlPreviewAction extends KalturaRuleAction -{ - /** - * - * - * @var int - */ - public $limit = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -abstract class KalturaAccessControlProfileBaseFilter extends KalturaFilter -{ - /** - * - * - * @var int - */ - public $idEqual = null; - - /** - * - * - * @var string - */ - public $idIn = null; - - /** - * - * - * @var string - */ - public $systemNameEqual = null; - - /** - * - * - * @var string - */ - public $systemNameIn = null; - - /** - * - * - * @var int - */ - public $createdAtGreaterThanOrEqual = null; - - /** - * - * - * @var int - */ - public $createdAtLessThanOrEqual = null; - - /** - * - * - * @var int - */ - public $updatedAtGreaterThanOrEqual = null; - - /** - * - * - * @var int - */ - public $updatedAtLessThanOrEqual = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaAdminUser extends KalturaUser -{ - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaAmazonS3StorageProfile extends KalturaStorageProfile -{ - /** - * - * - * @var KalturaAmazonS3StorageProfileFilesPermissionLevel - */ - public $filesPermissionInS3 = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaApiActionPermissionItem extends KalturaPermissionItem -{ - /** - * - * - * @var string - */ - public $service = null; - - /** - * - * - * @var string - */ - public $action = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaApiParameterPermissionItem extends KalturaPermissionItem -{ - /** - * - * - * @var string - */ - public $object = null; - - /** - * - * - * @var string - */ - public $parameter = null; - - /** - * - * - * @var KalturaApiParameterPermissionItemAction - */ - public $action = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -abstract class KalturaAssetBaseFilter extends KalturaFilter -{ - /** - * - * - * @var string - */ - public $idEqual = null; - - /** - * - * - * @var string - */ - public $idIn = null; - - /** - * - * - * @var string - */ - public $entryIdEqual = null; - - /** - * - * - * @var string - */ - public $entryIdIn = null; - - /** - * - * - * @var int - */ - public $partnerIdEqual = null; - - /** - * - * - * @var string - */ - public $partnerIdIn = null; - - /** - * - * - * @var int - */ - public $sizeGreaterThanOrEqual = null; - - /** - * - * - * @var int - */ - public $sizeLessThanOrEqual = null; - - /** - * - * - * @var string - */ - public $tagsLike = null; - - /** - * - * - * @var string - */ - public $tagsMultiLikeOr = null; - - /** - * - * - * @var string - */ - public $tagsMultiLikeAnd = null; - - /** - * - * - * @var int - */ - public $createdAtGreaterThanOrEqual = null; - - /** - * - * - * @var int - */ - public $createdAtLessThanOrEqual = null; - - /** - * - * - * @var int - */ - public $updatedAtGreaterThanOrEqual = null; - - /** - * - * - * @var int - */ - public $updatedAtLessThanOrEqual = null; - - /** - * - * - * @var int - */ - public $deletedAtGreaterThanOrEqual = null; - - /** - * - * - * @var int - */ - public $deletedAtLessThanOrEqual = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -abstract class KalturaAssetParamsBaseFilter extends KalturaFilter -{ - /** - * - * - * @var string - */ - public $systemNameEqual = null; - - /** - * - * - * @var string - */ - public $systemNameIn = null; - - /** - * - * - * @var KalturaNullableBoolean - */ - public $isSystemDefaultEqual = null; - - /** - * - * - * @var string - */ - public $tagsEqual = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaAssetParamsOutput extends KalturaAssetParams -{ - /** - * - * - * @var int - */ - public $assetParamsId = null; - - /** - * - * - * @var string - */ - public $assetParamsVersion = null; - - /** - * - * - * @var string - */ - public $assetId = null; - - /** - * - * - * @var string - */ - public $assetVersion = null; - - /** - * - * - * @var int - */ - public $readyBehavior = null; - - /** - * The container format of the Flavor Params - * - * - * @var KalturaContainerFormat - */ - public $format = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaAssetPropertiesCompareCondition extends KalturaCondition -{ - /** - * Array of key/value objects that holds the property and the value to find and compare on an asset object - * - * - * @var array of KalturaKeyValue - */ - public $properties; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaAssetsParamsResourceContainers extends KalturaResource -{ - /** - * Array of resources associated with asset params ids - * - * - * @var array of KalturaAssetParamsResourceContainer - */ - public $resources; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaAuthenticatedCondition extends KalturaCondition -{ - /** - * The privelege needed to remove the restriction - * - * - * @var array of KalturaStringValue - */ - public $privileges; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -abstract class KalturaBaseSyndicationFeedBaseFilter extends KalturaFilter -{ - -} - -/** - * @package Kaltura - * @subpackage Client - */ -abstract class KalturaBatchJobBaseFilter extends KalturaFilter -{ - /** - * - * - * @var int - */ - public $idEqual = null; - - /** - * - * - * @var int - */ - public $idGreaterThanOrEqual = null; - - /** - * - * - * @var int - */ - public $partnerIdEqual = null; - - /** - * - * - * @var string - */ - public $partnerIdIn = null; - - /** - * - * - * @var string - */ - public $partnerIdNotIn = null; - - /** - * - * - * @var int - */ - public $createdAtGreaterThanOrEqual = null; - - /** - * - * - * @var int - */ - public $createdAtLessThanOrEqual = null; - - /** - * - * - * @var int - */ - public $updatedAtGreaterThanOrEqual = null; - - /** - * - * - * @var int - */ - public $updatedAtLessThanOrEqual = null; - - /** - * - * - * @var int - */ - public $executionAttemptsGreaterThanOrEqual = null; - - /** - * - * - * @var int - */ - public $executionAttemptsLessThanOrEqual = null; - - /** - * - * - * @var int - */ - public $lockVersionGreaterThanOrEqual = null; - - /** - * - * - * @var int - */ - public $lockVersionLessThanOrEqual = null; - - /** - * - * - * @var string - */ - public $entryIdEqual = null; - - /** - * - * - * @var KalturaBatchJobType - */ - public $jobTypeEqual = null; - - /** - * - * - * @var string - */ - public $jobTypeIn = null; - - /** - * - * - * @var string - */ - public $jobTypeNotIn = null; - - /** - * - * - * @var int - */ - public $jobSubTypeEqual = null; - - /** - * - * - * @var string - */ - public $jobSubTypeIn = null; - - /** - * - * - * @var string - */ - public $jobSubTypeNotIn = null; - - /** - * - * - * @var KalturaBatchJobStatus - */ - public $statusEqual = null; - - /** - * - * - * @var string - */ - public $statusIn = null; - - /** - * - * - * @var string - */ - public $statusNotIn = null; - - /** - * - * - * @var int - */ - public $priorityGreaterThanOrEqual = null; - - /** - * - * - * @var int - */ - public $priorityLessThanOrEqual = null; - - /** - * - * - * @var int - */ - public $priorityEqual = null; - - /** - * - * - * @var string - */ - public $priorityIn = null; - - /** - * - * - * @var string - */ - public $priorityNotIn = null; - - /** - * - * - * @var int - */ - public $batchVersionGreaterThanOrEqual = null; - - /** - * - * - * @var int - */ - public $batchVersionLessThanOrEqual = null; - - /** - * - * - * @var int - */ - public $batchVersionEqual = null; - - /** - * - * - * @var int - */ - public $queueTimeGreaterThanOrEqual = null; - - /** - * - * - * @var int - */ - public $queueTimeLessThanOrEqual = null; - - /** - * - * - * @var int - */ - public $finishTimeGreaterThanOrEqual = null; - - /** - * - * - * @var int - */ - public $finishTimeLessThanOrEqual = null; - - /** - * - * - * @var KalturaBatchJobErrorTypes - */ - public $errTypeEqual = null; - - /** - * - * - * @var string - */ - public $errTypeIn = null; - - /** - * - * - * @var string - */ - public $errTypeNotIn = null; - - /** - * - * - * @var int - */ - public $errNumberEqual = null; - - /** - * - * - * @var string - */ - public $errNumberIn = null; - - /** - * - * - * @var string - */ - public $errNumberNotIn = null; - - /** - * - * - * @var int - */ - public $estimatedEffortLessThan = null; - - /** - * - * - * @var int - */ - public $estimatedEffortGreaterThan = null; - - /** - * - * - * @var int - */ - public $urgencyLessThanOrEqual = null; - - /** - * - * - * @var int - */ - public $urgencyGreaterThanOrEqual = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaBooleanValue extends KalturaValue -{ - /** - * - * - * @var bool - */ - public $value = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaBulkDownloadJobData extends KalturaJobData -{ - /** - * Comma separated list of entry ids - * - * - * @var string - */ - public $entryIds = null; - - /** - * Flavor params id to use for conversion - * - * - * @var int - */ - public $flavorParamsId = null; - - /** - * The id of the requesting user - * - * - * @var string - */ - public $puserId = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -abstract class KalturaBulkUploadBaseFilter extends KalturaFilter -{ - /** - * - * - * @var int - */ - public $uploadedOnGreaterThanOrEqual = null; - - /** - * - * - * @var int - */ - public $uploadedOnLessThanOrEqual = null; - - /** - * - * - * @var int - */ - public $uploadedOnEqual = null; - - /** - * - * - * @var string - */ - public $statusIn = null; - - /** - * - * - * @var KalturaBatchJobStatus - */ - public $statusEqual = null; - - /** - * - * - * @var KalturaBulkUploadObjectType - */ - public $bulkUploadObjectTypeEqual = null; - - /** - * - * - * @var string - */ - public $bulkUploadObjectTypeIn = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaBulkUploadCategoryData extends KalturaBulkUploadObjectData -{ - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaBulkUploadCategoryEntryData extends KalturaBulkUploadObjectData -{ - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaBulkUploadCategoryUserData extends KalturaBulkUploadObjectData -{ - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaBulkUploadEntryData extends KalturaBulkUploadObjectData -{ - /** - * Selected profile id for all bulk entries - * - * - * @var int - */ - public $conversionProfileId = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaBulkUploadJobData extends KalturaJobData -{ - /** - * - * - * @var string - * @readonly - */ - public $userId = null; - - /** - * The screen name of the user - * - * - * @var string - * @readonly - */ - public $uploadedBy = null; - - /** - * Selected profile id for all bulk entries - * - * - * @var int - * @readonly - */ - public $conversionProfileId = null; - - /** - * Created by the API - * - * - * @var string - * @readonly - */ - public $resultsFileLocalPath = null; - - /** - * Created by the API - * - * - * @var string - * @readonly - */ - public $resultsFileUrl = null; - - /** - * Number of created entries - * - * - * @var int - * @readonly - */ - public $numOfEntries = null; - - /** - * Number of created objects - * - * - * @var int - * @readonly - */ - public $numOfObjects = null; - - /** - * The bulk upload file path - * - * - * @var string - * @readonly - */ - public $filePath = null; - - /** - * Type of object for bulk upload - * - * - * @var KalturaBulkUploadObjectType - * @readonly - */ - public $bulkUploadObjectType = null; - - /** - * Friendly name of the file, used to be recognized later in the logs. - * - * - * @var string - */ - public $fileName = null; - - /** - * Data pertaining to the objects being uploaded - * - * - * @var KalturaBulkUploadObjectData - * @readonly - */ - public $objectData; - - /** - * Type of bulk upload - * - * - * @var KalturaBulkUploadType - * @readonly - */ - public $type = null; - - /** - * Recipients of the email for bulk upload success/failure - * - * - * @var string - */ - public $emailRecipients = null; - - /** - * Number of objects that finished on error status - * - * - * @var int - */ - public $numOfErrorObjects = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaBulkUploadResultCategory extends KalturaBulkUploadResult -{ - /** - * - * - * @var string - */ - public $relativePath = null; - - /** - * - * - * @var string - */ - public $name = null; - - /** - * - * - * @var string - */ - public $referenceId = null; - - /** - * - * - * @var string - */ - public $description = null; - - /** - * - * - * @var string - */ - public $tags = null; - - /** - * - * - * @var int - */ - public $appearInList = null; - - /** - * - * - * @var int - */ - public $privacy = null; - - /** - * - * - * @var int - */ - public $inheritanceType = null; - - /** - * - * - * @var int - */ - public $userJoinPolicy = null; - - /** - * - * - * @var int - */ - public $defaultPermissionLevel = null; - - /** - * - * - * @var string - */ - public $owner = null; - - /** - * - * - * @var int - */ - public $contributionPolicy = null; - - /** - * - * - * @var int - */ - public $partnerSortValue = null; - - /** - * - * - * @var bool - */ - public $moderation = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaBulkUploadResultCategoryEntry extends KalturaBulkUploadResult -{ - /** - * - * - * @var int - */ - public $categoryId = null; - - /** - * - * - * @var string - */ - public $entryId = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaBulkUploadResultCategoryUser extends KalturaBulkUploadResult -{ - /** - * - * - * @var int - */ - public $categoryId = null; - - /** - * - * - * @var string - */ - public $categoryReferenceId = null; - - /** - * - * - * @var string - */ - public $userId = null; - - /** - * - * - * @var int - */ - public $permissionLevel = null; - - /** - * - * - * @var int - */ - public $updateMethod = null; - - /** - * - * - * @var int - */ - public $requiredObjectStatus = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaBulkUploadResultEntry extends KalturaBulkUploadResult -{ - /** - * - * - * @var string - */ - public $entryId = null; - - /** - * - * - * @var string - */ - public $title = null; - - /** - * - * - * @var string - */ - public $description = null; - - /** - * - * - * @var string - */ - public $tags = null; - - /** - * - * - * @var string - */ - public $url = null; - - /** - * - * - * @var string - */ - public $contentType = null; - - /** - * - * - * @var int - */ - public $conversionProfileId = null; - - /** - * - * - * @var int - */ - public $accessControlProfileId = null; - - /** - * - * - * @var string - */ - public $category = null; - - /** - * - * - * @var int - */ - public $scheduleStartDate = null; - - /** - * - * - * @var int - */ - public $scheduleEndDate = null; - - /** - * - * - * @var int - */ - public $entryStatus = null; - - /** - * - * - * @var string - */ - public $thumbnailUrl = null; - - /** - * - * - * @var bool - */ - public $thumbnailSaved = null; - - /** - * - * - * @var string - */ - public $sshPrivateKey = null; - - /** - * - * - * @var string - */ - public $sshPublicKey = null; - - /** - * - * - * @var string - */ - public $sshKeyPassphrase = null; - - /** - * - * - * @var string - */ - public $creatorId = null; - - /** - * - * - * @var string - */ - public $entitledUsersEdit = null; - - /** - * - * - * @var string - */ - public $entitledUsersPublish = null; - - /** - * - * - * @var string - */ - public $ownerId = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaBulkUploadResultUser extends KalturaBulkUploadResult -{ - /** - * - * - * @var string - */ - public $userId = null; - - /** - * - * - * @var string - */ - public $screenName = null; - - /** - * - * - * @var string - */ - public $email = null; - - /** - * - * - * @var string - */ - public $description = null; - - /** - * - * - * @var string - */ - public $tags = null; - - /** - * - * - * @var int - */ - public $dateOfBirth = null; - - /** - * - * - * @var string - */ - public $country = null; - - /** - * - * - * @var string - */ - public $state = null; - - /** - * - * - * @var string - */ - public $city = null; - - /** - * - * - * @var string - */ - public $zip = null; - - /** - * - * - * @var int - */ - public $gender = null; - - /** - * - * - * @var string - */ - public $firstName = null; - - /** - * - * - * @var string - */ - public $lastName = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaBulkUploadUserData extends KalturaBulkUploadObjectData -{ - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaCaptureThumbJobData extends KalturaJobData -{ - /** - * - * - * @var string - */ - public $srcFileSyncLocalPath = null; - - /** - * The translated path as used by the scheduler - * - * - * @var string - */ - public $actualSrcFileSyncLocalPath = null; - - /** - * - * - * @var string - */ - public $srcFileSyncRemoteUrl = null; - - /** - * - * - * @var int - */ - public $thumbParamsOutputId = null; - - /** - * - * - * @var string - */ - public $thumbAssetId = null; - - /** - * - * - * @var string - */ - public $srcAssetId = null; - - /** - * - * - * @var KalturaAssetType - */ - public $srcAssetType = null; - - /** - * - * - * @var string - */ - public $thumbPath = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -abstract class KalturaCategoryBaseFilter extends KalturaFilter -{ - /** - * - * - * @var int - */ - public $idEqual = null; - - /** - * - * - * @var string - */ - public $idIn = null; - - /** - * - * - * @var int - */ - public $parentIdEqual = null; - - /** - * - * - * @var string - */ - public $parentIdIn = null; - - /** - * - * - * @var int - */ - public $depthEqual = null; - - /** - * - * - * @var string - */ - public $fullNameEqual = null; - - /** - * - * - * @var string - */ - public $fullNameStartsWith = null; - - /** - * - * - * @var string - */ - public $fullNameIn = null; - - /** - * - * - * @var string - */ - public $fullIdsEqual = null; - - /** - * - * - * @var string - */ - public $fullIdsStartsWith = null; - - /** - * - * - * @var string - */ - public $fullIdsMatchOr = null; - - /** - * - * - * @var int - */ - public $createdAtGreaterThanOrEqual = null; - - /** - * - * - * @var int - */ - public $createdAtLessThanOrEqual = null; - - /** - * - * - * @var int - */ - public $updatedAtGreaterThanOrEqual = null; - - /** - * - * - * @var int - */ - public $updatedAtLessThanOrEqual = null; - - /** - * - * - * @var string - */ - public $tagsLike = null; - - /** - * - * - * @var string - */ - public $tagsMultiLikeOr = null; - - /** - * - * - * @var string - */ - public $tagsMultiLikeAnd = null; - - /** - * - * - * @var KalturaAppearInListType - */ - public $appearInListEqual = null; - - /** - * - * - * @var KalturaPrivacyType - */ - public $privacyEqual = null; - - /** - * - * - * @var string - */ - public $privacyIn = null; - - /** - * - * - * @var KalturaInheritanceType - */ - public $inheritanceTypeEqual = null; - - /** - * - * - * @var string - */ - public $inheritanceTypeIn = null; - - /** - * - * - * @var string - */ - public $referenceIdEqual = null; - - /** - * - * - * @var KalturaNullableBoolean - */ - public $referenceIdEmpty = null; - - /** - * - * - * @var KalturaContributionPolicyType - */ - public $contributionPolicyEqual = null; - - /** - * - * - * @var int - */ - public $membersCountGreaterThanOrEqual = null; - - /** - * - * - * @var int - */ - public $membersCountLessThanOrEqual = null; - - /** - * - * - * @var int - */ - public $pendingMembersCountGreaterThanOrEqual = null; - - /** - * - * - * @var int - */ - public $pendingMembersCountLessThanOrEqual = null; - - /** - * - * - * @var string - */ - public $privacyContextEqual = null; - - /** - * - * - * @var KalturaCategoryStatus - */ - public $statusEqual = null; - - /** - * - * - * @var string - */ - public $statusIn = null; - - /** - * - * - * @var int - */ - public $inheritedParentIdEqual = null; - - /** - * - * - * @var string - */ - public $inheritedParentIdIn = null; - - /** - * - * - * @var int - */ - public $partnerSortValueGreaterThanOrEqual = null; - - /** - * - * - * @var int - */ - public $partnerSortValueLessThanOrEqual = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaCategoryEntryAdvancedFilter extends KalturaSearchItem -{ - /** - * - * - * @var string - */ - public $categoriesMatchOr = null; - - /** - * - * - * @var string - */ - public $categoryEntryStatusIn = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -abstract class KalturaCategoryEntryBaseFilter extends KalturaFilter -{ - /** - * - * - * @var int - */ - public $categoryIdEqual = null; - - /** - * - * - * @var string - */ - public $categoryIdIn = null; - - /** - * - * - * @var string - */ - public $entryIdEqual = null; - - /** - * - * - * @var string - */ - public $entryIdIn = null; - - /** - * - * - * @var int - */ - public $createdAtGreaterThanOrEqual = null; - - /** - * - * - * @var int - */ - public $createdAtLessThanOrEqual = null; - - /** - * - * - * @var string - */ - public $categoryFullIdsStartsWith = null; - - /** - * - * - * @var KalturaCategoryEntryStatus - */ - public $statusEqual = null; - - /** - * - * - * @var string - */ - public $statusIn = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaCategoryIdentifier extends KalturaObjectIdentifier -{ - /** - * Identifier of the object - * - * - * @var KalturaCategoryIdentifierField - */ - public $identifier = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaCategoryUserAdvancedFilter extends KalturaSearchItem -{ - /** - * - * - * @var string - */ - public $memberIdEq = null; - - /** - * - * - * @var string - */ - public $memberIdIn = null; - - /** - * - * - * @var string - */ - public $memberPermissionsMatchOr = null; - - /** - * - * - * @var string - */ - public $memberPermissionsMatchAnd = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -abstract class KalturaCategoryUserBaseFilter extends KalturaFilter -{ - /** - * - * - * @var int - */ - public $categoryIdEqual = null; - - /** - * - * - * @var string - */ - public $categoryIdIn = null; - - /** - * - * - * @var string - */ - public $userIdEqual = null; - - /** - * - * - * @var string - */ - public $userIdIn = null; - - /** - * - * - * @var KalturaCategoryUserPermissionLevel - */ - public $permissionLevelEqual = null; - - /** - * - * - * @var string - */ - public $permissionLevelIn = null; - - /** - * - * - * @var KalturaCategoryUserStatus - */ - public $statusEqual = null; - - /** - * - * - * @var string - */ - public $statusIn = null; - - /** - * - * - * @var int - */ - public $createdAtGreaterThanOrEqual = null; - - /** - * - * - * @var int - */ - public $createdAtLessThanOrEqual = null; - - /** - * - * - * @var int - */ - public $updatedAtGreaterThanOrEqual = null; - - /** - * - * - * @var int - */ - public $updatedAtLessThanOrEqual = null; - - /** - * - * - * @var KalturaUpdateMethodType - */ - public $updateMethodEqual = null; - - /** - * - * - * @var string - */ - public $updateMethodIn = null; - - /** - * - * - * @var string - */ - public $categoryFullIdsStartsWith = null; - - /** - * - * - * @var string - */ - public $categoryFullIdsEqual = null; - - /** - * - * - * @var string - */ - public $permissionNamesMatchAnd = null; - - /** - * - * - * @var string - */ - public $permissionNamesMatchOr = null; - - /** - * - * - * @var string - */ - public $permissionNamesNotContains = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaClipAttributes extends KalturaOperationAttributes -{ - /** - * Offset in milliseconds - * - * - * @var int - */ - public $offset = null; - - /** - * Duration in milliseconds - * - * - * @var int - */ - public $duration = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaIntegerValue extends KalturaValue -{ - /** - * - * - * @var int - */ - public $value = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -abstract class KalturaCompareCondition extends KalturaCondition -{ - /** - * Value to evaluate against the field and operator - * - * - * @var KalturaIntegerValue - */ - public $value; - - /** - * Comparing operator - * - * - * @var KalturaSearchConditionComparison - */ - public $comparison = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -abstract class KalturaDataCenterContentResource extends KalturaContentResource -{ - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaConcatAttributes extends KalturaOperationAttributes -{ - /** - * The resource to be concatenated - * - * - * @var KalturaDataCenterContentResource - */ - public $resource; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaConcatJobData extends KalturaJobData -{ - /** - * Source files to be concatenated - * - * - * @var array of KalturaString - */ - public $srcFiles; - - /** - * Output file - * - * - * @var string - */ - public $destFilePath = null; - - /** - * Flavor asset to be ingested with the output - * - * - * @var string - */ - public $flavorAssetId = null; - - /** - * Clipping offset in seconds - * - * - * @var float - */ - public $offset = null; - - /** - * Clipping duration in seconds - * - * - * @var float - */ - public $duration = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -abstract class KalturaControlPanelCommandBaseFilter extends KalturaFilter -{ - /** - * - * - * @var int - */ - public $idEqual = null; - - /** - * - * - * @var string - */ - public $idIn = null; - - /** - * - * - * @var int - */ - public $createdAtGreaterThanOrEqual = null; - - /** - * - * - * @var int - */ - public $createdAtLessThanOrEqual = null; - - /** - * - * - * @var int - */ - public $createdByIdEqual = null; - - /** - * - * - * @var KalturaControlPanelCommandType - */ - public $typeEqual = null; - - /** - * - * - * @var string - */ - public $typeIn = null; - - /** - * - * - * @var KalturaControlPanelCommandTargetType - */ - public $targetTypeEqual = null; - - /** - * - * - * @var string - */ - public $targetTypeIn = null; - - /** - * - * - * @var KalturaControlPanelCommandStatus - */ - public $statusEqual = null; - - /** - * - * - * @var string - */ - public $statusIn = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaConvartableJobData extends KalturaJobData -{ - /** - * - * - * @var string - */ - public $srcFileSyncLocalPath = null; - - /** - * The translated path as used by the scheduler - * - * - * @var string - */ - public $actualSrcFileSyncLocalPath = null; - - /** - * - * - * @var string - */ - public $srcFileSyncRemoteUrl = null; - - /** - * - * - * @var array of KalturaSourceFileSyncDescriptor - */ - public $srcFileSyncs; - - /** - * - * - * @var int - */ - public $engineVersion = null; - - /** - * - * - * @var int - */ - public $flavorParamsOutputId = null; - - /** - * - * - * @var KalturaFlavorParamsOutput - */ - public $flavorParamsOutput; - - /** - * - * - * @var int - */ - public $mediaInfoId = null; - - /** - * - * - * @var int - */ - public $currentOperationSet = null; - - /** - * - * - * @var int - */ - public $currentOperationIndex = null; - - /** - * - * - * @var array of KalturaKeyValue - */ - public $pluginData; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -abstract class KalturaConversionProfileAssetParamsBaseFilter extends KalturaFilter -{ - /** - * - * - * @var int - */ - public $conversionProfileIdEqual = null; - - /** - * - * - * @var string - */ - public $conversionProfileIdIn = null; - - /** - * - * - * @var int - */ - public $assetParamsIdEqual = null; - - /** - * - * - * @var string - */ - public $assetParamsIdIn = null; - - /** - * - * - * @var KalturaFlavorReadyBehaviorType - */ - public $readyBehaviorEqual = null; - - /** - * - * - * @var string - */ - public $readyBehaviorIn = null; - - /** - * - * - * @var KalturaAssetParamsOrigin - */ - public $originEqual = null; - - /** - * - * - * @var string - */ - public $originIn = null; - - /** - * - * - * @var string - */ - public $systemNameEqual = null; - - /** - * - * - * @var string - */ - public $systemNameIn = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -abstract class KalturaConversionProfileBaseFilter extends KalturaFilter -{ - /** - * - * - * @var int - */ - public $idEqual = null; - - /** - * - * - * @var string - */ - public $idIn = null; - - /** - * - * - * @var KalturaConversionProfileStatus - */ - public $statusEqual = null; - - /** - * - * - * @var string - */ - public $statusIn = null; - - /** - * - * - * @var KalturaConversionProfileType - */ - public $typeEqual = null; - - /** - * - * - * @var string - */ - public $typeIn = null; - - /** - * - * - * @var string - */ - public $nameEqual = null; - - /** - * - * - * @var string - */ - public $systemNameEqual = null; - - /** - * - * - * @var string - */ - public $systemNameIn = null; - - /** - * - * - * @var string - */ - public $tagsMultiLikeOr = null; - - /** - * - * - * @var string - */ - public $tagsMultiLikeAnd = null; - - /** - * - * - * @var string - */ - public $defaultEntryIdEqual = null; - - /** - * - * - * @var string - */ - public $defaultEntryIdIn = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaConvertLiveSegmentJobData extends KalturaJobData -{ - /** - * Live stream entry id - * - * - * @var string - */ - public $entryId = null; - - /** - * Primary or secondary media server - * - * - * @var KalturaMediaServerIndex - */ - public $mediaServerIndex = null; - - /** - * The index of the file within the entry - * - * - * @var int - */ - public $fileIndex = null; - - /** - * The recorded live media - * - * - * @var string - */ - public $srcFilePath = null; - - /** - * The output file - * - * - * @var string - */ - public $destFilePath = null; - - /** - * Duration of the live entry including all recorded segments including the current - * - * - * @var float - */ - public $endTime = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaConvertProfileJobData extends KalturaJobData -{ - /** - * - * - * @var string - */ - public $inputFileSyncLocalPath = null; - - /** - * The height of last created thumbnail, will be used to comapare if this thumbnail is the best we can have - * - * - * @var int - */ - public $thumbHeight = null; - - /** - * The bit rate of last created thumbnail, will be used to comapare if this thumbnail is the best we can have - * - * - * @var int - */ - public $thumbBitrate = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaCopyPartnerJobData extends KalturaJobData -{ - /** - * Id of the partner to copy from - * - * - * @var int - */ - public $fromPartnerId = null; - - /** - * Id of the partner to copy to - * - * - * @var int - */ - public $toPartnerId = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaCountryRestriction extends KalturaBaseRestriction -{ - /** - * Country restriction type (Allow or deny) - * - * - * @var KalturaCountryRestrictionType - */ - public $countryRestrictionType = null; - - /** - * Comma separated list of country codes to allow to deny - * - * - * @var string - */ - public $countryList = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaDeleteFileJobData extends KalturaJobData -{ - /** - * - * - * @var string - */ - public $localFileSyncPath = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaDeleteJobData extends KalturaJobData -{ - /** - * The filter should return the list of objects that need to be deleted. - * - * - * @var KalturaFilter - */ - public $filter; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaDirectoryRestriction extends KalturaBaseRestriction -{ - /** - * Kaltura directory restriction type - * - * - * @var KalturaDirectoryRestrictionType - */ - public $directoryRestrictionType = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaCategoryUserFilter extends KalturaCategoryUserBaseFilter -{ - /** - * Return the list of categoryUser that are not inherited from parent category - only the direct categoryUsers. - * - * - * @var bool - */ - public $categoryDirectMembers = null; - - /** - * Free text search on user id or screen name - * - * - * @var string - */ - public $freeText = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -abstract class KalturaUserBaseFilter extends KalturaFilter -{ - /** - * - * - * @var int - */ - public $partnerIdEqual = null; - - /** - * - * - * @var string - */ - public $screenNameLike = null; - - /** - * - * - * @var string - */ - public $screenNameStartsWith = null; - - /** - * - * - * @var string - */ - public $emailLike = null; - - /** - * - * - * @var string - */ - public $emailStartsWith = null; - - /** - * - * - * @var string - */ - public $tagsMultiLikeOr = null; - - /** - * - * - * @var string - */ - public $tagsMultiLikeAnd = null; - - /** - * - * - * @var KalturaUserStatus - */ - public $statusEqual = null; - - /** - * - * - * @var string - */ - public $statusIn = null; - - /** - * - * - * @var int - */ - public $createdAtGreaterThanOrEqual = null; - - /** - * - * - * @var int - */ - public $createdAtLessThanOrEqual = null; - - /** - * - * - * @var string - */ - public $firstNameStartsWith = null; - - /** - * - * - * @var string - */ - public $lastNameStartsWith = null; - - /** - * - * - * @var KalturaNullableBoolean - */ - public $isAdminEqual = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaUserFilter extends KalturaUserBaseFilter -{ - /** - * - * - * @var string - */ - public $idOrScreenNameStartsWith = null; - - /** - * - * - * @var string - */ - public $idEqual = null; - - /** - * - * - * @var string - */ - public $idIn = null; - - /** - * - * - * @var KalturaNullableBoolean - */ - public $loginEnabledEqual = null; - - /** - * - * - * @var string - */ - public $roleIdEqual = null; - - /** - * - * - * @var string - */ - public $roleIdsEqual = null; - - /** - * - * - * @var string - */ - public $roleIdsIn = null; - - /** - * - * - * @var string - */ - public $firstNameOrLastNameStartsWith = null; - - /** - * Permission names filter expression - * - * - * @var string - */ - public $permissionNamesMultiLikeOr = null; - - /** - * Permission names filter expression - * - * - * @var string - */ - public $permissionNamesMultiLikeAnd = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaEntryContext extends KalturaContext -{ - /** - * The entry ID in the context of which the playlist should be built - * - * - * @var string - */ - public $entryId = null; - - /** - * Is this a redirected entry followup? - * - * - * @var KalturaNullableBoolean - */ - public $followEntryRedirect = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaEntryContextDataParams extends KalturaAccessControlScope -{ - /** - * Id of the current flavor. - * - * - * @var string - */ - public $flavorAssetId = null; - - /** - * The tags of the flavors that should be used for playback. - * - * - * @var string - */ - public $flavorTags = null; - - /** - * Playback streamer type: RTMP, HTTP, appleHttps, rtsp, sl. - * - * - * @var string - */ - public $streamerType = null; - - /** - * Protocol of the specific media object. - * - * - * @var string - */ - public $mediaProtocol = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaEntryContextDataResult extends KalturaContextDataResult -{ - /** - * - * - * @var bool - */ - public $isSiteRestricted = null; - - /** - * - * - * @var bool - */ - public $isCountryRestricted = null; - - /** - * - * - * @var bool - */ - public $isSessionRestricted = null; - - /** - * - * - * @var bool - */ - public $isIpAddressRestricted = null; - - /** - * - * - * @var bool - */ - public $isUserAgentRestricted = null; - - /** - * - * - * @var int - */ - public $previewLength = null; - - /** - * - * - * @var bool - */ - public $isScheduledNow = null; - - /** - * - * - * @var bool - */ - public $isAdmin = null; - - /** - * http/rtmp/hdnetwork - * - * - * @var string - */ - public $streamerType = null; - - /** - * http/https, rtmp/rtmpe - * - * - * @var string - */ - public $mediaProtocol = null; - - /** - * - * - * @var string - */ - public $storageProfilesXML = null; - - /** - * Array of messages as received from the access control rules that invalidated - * - * - * @var array of KalturaString - */ - public $accessControlMessages; - - /** - * Array of actions as received from the access control rules that invalidated - * - * - * @var array of KalturaRuleAction - */ - public $accessControlActions; - - /** - * Array of allowed flavor assets according to access control limitations and requested tags - * - * - * @var array of KalturaFlavorAsset - */ - public $flavorAssets; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaEntryIdentifier extends KalturaObjectIdentifier -{ - /** - * Identifier of the object - * - * - * @var KalturaEntryIdentifierField - */ - public $identifier = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -abstract class KalturaBooleanField extends KalturaBooleanValue -{ - -} - -/** - * @package Kaltura - * @subpackage Client - */ -abstract class KalturaFileAssetBaseFilter extends KalturaFilter -{ - /** - * - * - * @var int - */ - public $idEqual = null; - - /** - * - * - * @var string - */ - public $idIn = null; - - /** - * - * - * @var int - */ - public $partnerIdEqual = null; - - /** - * - * - * @var KalturaFileAssetObjectType - */ - public $fileAssetObjectTypeEqual = null; - - /** - * - * - * @var string - */ - public $objectIdEqual = null; - - /** - * - * - * @var string - */ - public $objectIdIn = null; - - /** - * - * - * @var int - */ - public $createdAtGreaterThanOrEqual = null; - - /** - * - * - * @var int - */ - public $createdAtLessThanOrEqual = null; - - /** - * - * - * @var int - */ - public $updatedAtGreaterThanOrEqual = null; - - /** - * - * - * @var int - */ - public $updatedAtLessThanOrEqual = null; - - /** - * - * - * @var KalturaFileAssetStatus - */ - public $statusEqual = null; - - /** - * - * - * @var string - */ - public $statusIn = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaFlattenJobData extends KalturaJobData -{ - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaGenericSyndicationFeed extends KalturaBaseSyndicationFeed -{ - /** - * feed description - * - * - * @var string - */ - public $feedDescription = null; - - /** - * feed landing page (i.e publisher website) - * - * - * @var string - */ - public $feedLandingPage = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaGoogleVideoSyndicationFeed extends KalturaBaseSyndicationFeed -{ - /** - * - * - * @var KalturaGoogleSyndicationFeedAdultValues - */ - public $adultContent = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaITunesSyndicationFeed extends KalturaBaseSyndicationFeed -{ - /** - * feed description - * - * - * @var string - */ - public $feedDescription = null; - - /** - * feed language - * - * - * @var string - */ - public $language = null; - - /** - * feed landing page (i.e publisher website) - * - * - * @var string - */ - public $feedLandingPage = null; - - /** - * author/publisher name - * - * - * @var string - */ - public $ownerName = null; - - /** - * publisher email - * - * - * @var string - */ - public $ownerEmail = null; - - /** - * podcast thumbnail - * - * - * @var string - */ - public $feedImageUrl = null; - - /** - * - * - * @var KalturaITunesSyndicationFeedCategories - * @readonly - */ - public $category = null; - - /** - * - * - * @var KalturaITunesSyndicationFeedAdultValues - */ - public $adultContent = null; - - /** - * - * - * @var string - */ - public $feedAuthor = null; - - /** - * true in case you want to enfore the palylist order on the - * - * - * @var KalturaNullableBoolean - */ - public $enforceOrder = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaImportJobData extends KalturaJobData -{ - /** - * - * - * @var string - */ - public $srcFileUrl = null; - - /** - * - * - * @var string - */ - public $destFileLocalPath = null; - - /** - * - * - * @var string - */ - public $flavorAssetId = null; - - /** - * - * - * @var int - */ - public $fileSize = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaIndexAdvancedFilter extends KalturaSearchItem -{ - /** - * - * - * @var int - */ - public $indexIdGreaterThan = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaIndexJobData extends KalturaJobData -{ - /** - * The filter should return the list of objects that need to be reindexed. - * - * - * @var KalturaFilter - */ - public $filter; - - /** - * Indicates the last id that reindexed, used when the batch crached, to re-run from the last crash point. - * - * - * @var int - */ - public $lastIndexId = null; - - /** - * Indicates that the object columns and attributes values should be recalculated before reindexed. - * - * - * @var bool - */ - public $shouldUpdate = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaIpAddressRestriction extends KalturaBaseRestriction -{ - /** - * Ip address restriction type (Allow or deny) - * - * - * @var KalturaIpAddressRestrictionType - */ - public $ipAddressRestrictionType = null; - - /** - * Comma separated list of ip address to allow to deny - * - * - * @var string - */ - public $ipAddressList = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaLimitFlavorsRestriction extends KalturaBaseRestriction -{ - /** - * Limit flavors restriction type (Allow or deny) - * - * - * @var KalturaLimitFlavorsRestrictionType - */ - public $limitFlavorsRestrictionType = null; - - /** - * Comma separated list of flavor params ids to allow to deny - * - * - * @var string - */ - public $flavorParamsIds = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -abstract class KalturaLiveChannelSegmentBaseFilter extends KalturaFilter -{ - /** - * - * - * @var int - */ - public $createdAtGreaterThanOrEqual = null; - - /** - * - * - * @var int - */ - public $createdAtLessThanOrEqual = null; - - /** - * - * - * @var int - */ - public $updatedAtGreaterThanOrEqual = null; - - /** - * - * - * @var int - */ - public $updatedAtLessThanOrEqual = null; - - /** - * - * - * @var KalturaLiveChannelSegmentStatus - */ - public $statusEqual = null; - - /** - * - * - * @var string - */ - public $statusIn = null; - - /** - * - * - * @var string - */ - public $channelIdEqual = null; - - /** - * - * - * @var string - */ - public $channelIdIn = null; - - /** - * - * - * @var float - */ - public $startTimeGreaterThanOrEqual = null; - - /** - * - * - * @var float - */ - public $startTimeLessThanOrEqual = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaMailJobData extends KalturaJobData -{ - /** - * - * - * @var KalturaMailType - */ - public $mailType = null; - - /** - * - * - * @var int - */ - public $mailPriority = null; - - /** - * - * - * @var KalturaMailJobStatus - */ - public $status = null; - - /** - * - * - * @var string - */ - public $recipientName = null; - - /** - * - * - * @var string - */ - public $recipientEmail = null; - - /** - * kuserId - * - * - * @var int - */ - public $recipientId = null; - - /** - * - * - * @var string - */ - public $fromName = null; - - /** - * - * - * @var string - */ - public $fromEmail = null; - - /** - * - * - * @var string - */ - public $bodyParams = null; - - /** - * - * - * @var string - */ - public $subjectParams = null; - - /** - * - * - * @var string - */ - public $templatePath = null; - - /** - * - * - * @var KalturaLanguageCode - */ - public $language = null; - - /** - * - * - * @var int - */ - public $campaignId = null; - - /** - * - * - * @var int - */ - public $minSendDate = null; - - /** - * - * - * @var bool - */ - public $isHtml = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -abstract class KalturaMatchCondition extends KalturaCondition -{ - /** - * - * - * @var array of KalturaStringValue - */ - public $values; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -abstract class KalturaMediaInfoBaseFilter extends KalturaFilter -{ - /** - * - * - * @var string - */ - public $flavorAssetIdEqual = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -abstract class KalturaMediaServerBaseFilter extends KalturaFilter -{ - /** - * - * - * @var int - */ - public $createdAtGreaterThanOrEqual = null; - - /** - * - * - * @var int - */ - public $createdAtLessThanOrEqual = null; - - /** - * - * - * @var int - */ - public $updatedAtGreaterThanOrEqual = null; - - /** - * - * - * @var int - */ - public $updatedAtLessThanOrEqual = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaMoveCategoryEntriesJobData extends KalturaJobData -{ - /** - * Source category id - * - * - * @var int - */ - public $srcCategoryId = null; - - /** - * Destination category id - * - * - * @var int - */ - public $destCategoryId = null; - - /** - * Saves the last category id that its entries moved completely - * In case of crash the batch will restart from that point - * - * - * @var int - */ - public $lastMovedCategoryId = null; - - /** - * Saves the last page index of the child categories filter pager - * In case of crash the batch will restart from that point - * - * - * @var int - */ - public $lastMovedCategoryPageIndex = null; - - /** - * Saves the last page index of the category entries filter pager - * In case of crash the batch will restart from that point - * - * - * @var int - */ - public $lastMovedCategoryEntryPageIndex = null; - - /** - * All entries from all child categories will be moved as well - * - * - * @var bool - */ - public $moveFromChildren = null; - - /** - * Entries won't be deleted from the source entry - * - * - * @var bool - */ - public $copyOnly = null; - - /** - * Destination categories fallback ids - * - * - * @var string - */ - public $destCategoryFullIds = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaNotificationJobData extends KalturaJobData -{ - /** - * - * - * @var string - */ - public $userId = null; - - /** - * - * - * @var KalturaNotificationType - */ - public $type = null; - - /** - * - * - * @var string - */ - public $typeAsString = null; - - /** - * - * - * @var string - */ - public $objectId = null; - - /** - * - * - * @var KalturaNotificationStatus - */ - public $status = null; - - /** - * - * - * @var string - */ - public $data = null; - - /** - * - * - * @var int - */ - public $numberOfAttempts = null; - - /** - * - * - * @var string - */ - public $notificationResult = null; - - /** - * - * - * @var KalturaNotificationObjectType - */ - public $objType = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -abstract class KalturaPartnerBaseFilter extends KalturaFilter -{ - /** - * - * - * @var int - */ - public $idEqual = null; - - /** - * - * - * @var string - */ - public $idIn = null; - - /** - * - * - * @var string - */ - public $idNotIn = null; - - /** - * - * - * @var string - */ - public $nameLike = null; - - /** - * - * - * @var string - */ - public $nameMultiLikeOr = null; - - /** - * - * - * @var string - */ - public $nameMultiLikeAnd = null; - - /** - * - * - * @var string - */ - public $nameEqual = null; - - /** - * - * - * @var KalturaPartnerStatus - */ - public $statusEqual = null; - - /** - * - * - * @var string - */ - public $statusIn = null; - - /** - * - * - * @var int - */ - public $partnerPackageEqual = null; - - /** - * - * - * @var int - */ - public $partnerPackageGreaterThanOrEqual = null; - - /** - * - * - * @var int - */ - public $partnerPackageLessThanOrEqual = null; - - /** - * - * - * @var KalturaPartnerGroupType - */ - public $partnerGroupTypeEqual = null; - - /** - * - * - * @var string - */ - public $partnerNameDescriptionWebsiteAdminNameAdminEmailLike = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -abstract class KalturaPermissionBaseFilter extends KalturaFilter -{ - /** - * - * - * @var int - */ - public $idEqual = null; - - /** - * - * - * @var string - */ - public $idIn = null; - - /** - * - * - * @var KalturaPermissionType - */ - public $typeEqual = null; - - /** - * - * - * @var string - */ - public $typeIn = null; - - /** - * - * - * @var string - */ - public $nameEqual = null; - - /** - * - * - * @var string - */ - public $nameIn = null; - - /** - * - * - * @var string - */ - public $friendlyNameLike = null; - - /** - * - * - * @var string - */ - public $descriptionLike = null; - - /** - * - * - * @var KalturaPermissionStatus - */ - public $statusEqual = null; - - /** - * - * - * @var string - */ - public $statusIn = null; - - /** - * - * - * @var int - */ - public $partnerIdEqual = null; - - /** - * - * - * @var string - */ - public $partnerIdIn = null; - - /** - * - * - * @var string - */ - public $dependsOnPermissionNamesMultiLikeOr = null; - - /** - * - * - * @var string - */ - public $dependsOnPermissionNamesMultiLikeAnd = null; - - /** - * - * - * @var string - */ - public $tagsMultiLikeOr = null; - - /** - * - * - * @var string - */ - public $tagsMultiLikeAnd = null; - - /** - * - * - * @var int - */ - public $createdAtGreaterThanOrEqual = null; - - /** - * - * - * @var int - */ - public $createdAtLessThanOrEqual = null; - - /** - * - * - * @var int - */ - public $updatedAtGreaterThanOrEqual = null; - - /** - * - * - * @var int - */ - public $updatedAtLessThanOrEqual = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -abstract class KalturaPermissionItemBaseFilter extends KalturaFilter -{ - /** - * - * - * @var int - */ - public $idEqual = null; - - /** - * - * - * @var string - */ - public $idIn = null; - - /** - * - * - * @var KalturaPermissionItemType - */ - public $typeEqual = null; - - /** - * - * - * @var string - */ - public $typeIn = null; - - /** - * - * - * @var int - */ - public $partnerIdEqual = null; - - /** - * - * - * @var string - */ - public $partnerIdIn = null; - - /** - * - * - * @var string - */ - public $tagsMultiLikeOr = null; - - /** - * - * - * @var string - */ - public $tagsMultiLikeAnd = null; - - /** - * - * - * @var int - */ - public $createdAtGreaterThanOrEqual = null; - - /** - * - * - * @var int - */ - public $createdAtLessThanOrEqual = null; - - /** - * - * - * @var int - */ - public $updatedAtGreaterThanOrEqual = null; - - /** - * - * - * @var int - */ - public $updatedAtLessThanOrEqual = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaProvisionJobData extends KalturaJobData -{ - /** - * - * - * @var string - */ - public $streamID = null; - - /** - * - * - * @var string - */ - public $backupStreamID = null; - - /** - * - * - * @var string - */ - public $rtmp = null; - - /** - * - * - * @var string - */ - public $encoderIP = null; - - /** - * - * - * @var string - */ - public $backupEncoderIP = null; - - /** - * - * - * @var string - */ - public $encoderPassword = null; - - /** - * - * - * @var string - */ - public $encoderUsername = null; - - /** - * - * - * @var int - */ - public $endDate = null; - - /** - * - * - * @var string - */ - public $returnVal = null; - - /** - * - * - * @var int - */ - public $mediaType = null; - - /** - * - * - * @var string - */ - public $primaryBroadcastingUrl = null; - - /** - * - * - * @var string - */ - public $secondaryBroadcastingUrl = null; - - /** - * - * - * @var string - */ - public $streamName = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -abstract class KalturaReportBaseFilter extends KalturaFilter -{ - /** - * - * - * @var int - */ - public $idEqual = null; - - /** - * - * - * @var string - */ - public $idIn = null; - - /** - * - * - * @var int - */ - public $partnerIdEqual = null; - - /** - * - * - * @var string - */ - public $partnerIdIn = null; - - /** - * - * - * @var string - */ - public $systemNameEqual = null; - - /** - * - * - * @var string - */ - public $systemNameIn = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaReportInputFilter extends KalturaReportInputBaseFilter -{ - /** - * Search keywords to filter objects - * - * - * @var string - */ - public $keywords = null; - - /** - * Search keywords in onjects tags - * - * - * @var bool - */ - public $searchInTags = null; - - /** - * Search keywords in onjects admin tags - * - * - * @var bool - */ - public $searchInAdminTags = null; - - /** - * Search onjects in specified categories - * - * - * @var string - */ - public $categories = null; - - /** - * Time zone offset in minutes - * - * - * @var int - */ - public $timeZoneOffset = null; - - /** - * Aggregated results according to interval - * - * - * @var KalturaReportInterval - */ - public $interval = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaSearchCondition extends KalturaSearchItem -{ - /** - * - * - * @var string - */ - public $field = null; - - /** - * - * - * @var string - */ - public $value = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaSearchOperator extends KalturaSearchItem -{ - /** - * - * - * @var KalturaSearchOperatorType - */ - public $type = null; - - /** - * - * - * @var array of KalturaSearchItem - */ - public $items; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaSessionRestriction extends KalturaBaseRestriction -{ - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaSiteRestriction extends KalturaBaseRestriction -{ - /** - * The site restriction type (allow or deny) - * - * - * @var KalturaSiteRestrictionType - */ - public $siteRestrictionType = null; - - /** - * Comma separated list of sites (domains) to allow or deny - * - * - * @var string - */ - public $siteList = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaStorageAddAction extends KalturaRuleAction -{ - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaStorageJobData extends KalturaJobData -{ - /** - * - * - * @var string - */ - public $serverUrl = null; - - /** - * - * - * @var string - */ - public $serverUsername = null; - - /** - * - * - * @var string - */ - public $serverPassword = null; - - /** - * - * - * @var bool - */ - public $ftpPassiveMode = null; - - /** - * - * - * @var string - */ - public $srcFileSyncLocalPath = null; - - /** - * - * - * @var string - */ - public $srcFileSyncId = null; - - /** - * - * - * @var string - */ - public $destFileSyncStoredPath = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -abstract class KalturaStorageProfileBaseFilter extends KalturaFilter -{ - /** - * - * - * @var int - */ - public $idEqual = null; - - /** - * - * - * @var string - */ - public $idIn = null; - - /** - * - * - * @var int - */ - public $createdAtGreaterThanOrEqual = null; - - /** - * - * - * @var int - */ - public $createdAtLessThanOrEqual = null; - - /** - * - * - * @var int - */ - public $updatedAtGreaterThanOrEqual = null; - - /** - * - * - * @var int - */ - public $updatedAtLessThanOrEqual = null; - - /** - * - * - * @var int - */ - public $partnerIdEqual = null; - - /** - * - * - * @var string - */ - public $partnerIdIn = null; - - /** - * - * - * @var string - */ - public $systemNameEqual = null; - - /** - * - * - * @var string - */ - public $systemNameIn = null; - - /** - * - * - * @var KalturaStorageProfileStatus - */ - public $statusEqual = null; - - /** - * - * - * @var string - */ - public $statusIn = null; - - /** - * - * - * @var KalturaStorageProfileProtocol - */ - public $protocolEqual = null; - - /** - * - * - * @var string - */ - public $protocolIn = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaTubeMogulSyndicationFeed extends KalturaBaseSyndicationFeed -{ - /** - * - * - * @var KalturaTubeMogulSyndicationFeedCategories - * @readonly - */ - public $category = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -abstract class KalturaUiConfBaseFilter extends KalturaFilter -{ - /** - * - * - * @var int - */ - public $idEqual = null; - - /** - * - * - * @var string - */ - public $idIn = null; - - /** - * - * - * @var string - */ - public $nameLike = null; - - /** - * - * - * @var int - */ - public $partnerIdEqual = null; - - /** - * - * - * @var string - */ - public $partnerIdIn = null; - - /** - * - * - * @var KalturaUiConfObjType - */ - public $objTypeEqual = null; - - /** - * - * - * @var string - */ - public $objTypeIn = null; - - /** - * - * - * @var string - */ - public $tagsMultiLikeOr = null; - - /** - * - * - * @var string - */ - public $tagsMultiLikeAnd = null; - - /** - * - * - * @var int - */ - public $createdAtGreaterThanOrEqual = null; - - /** - * - * - * @var int - */ - public $createdAtLessThanOrEqual = null; - - /** - * - * - * @var int - */ - public $updatedAtGreaterThanOrEqual = null; - - /** - * - * - * @var int - */ - public $updatedAtLessThanOrEqual = null; - - /** - * - * - * @var KalturaUiConfCreationMode - */ - public $creationModeEqual = null; - - /** - * - * - * @var string - */ - public $creationModeIn = null; - - /** - * - * - * @var string - */ - public $versionEqual = null; - - /** - * - * - * @var string - */ - public $versionMultiLikeOr = null; - - /** - * - * - * @var string - */ - public $versionMultiLikeAnd = null; - - /** - * - * - * @var string - */ - public $partnerTagsMultiLikeOr = null; - - /** - * - * - * @var string - */ - public $partnerTagsMultiLikeAnd = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -abstract class KalturaUploadTokenBaseFilter extends KalturaFilter -{ - /** - * - * - * @var string - */ - public $idEqual = null; - - /** - * - * - * @var string - */ - public $idIn = null; - - /** - * - * - * @var string - */ - public $userIdEqual = null; - - /** - * - * - * @var KalturaUploadTokenStatus - */ - public $statusEqual = null; - - /** - * - * - * @var string - */ - public $statusIn = null; - - /** - * - * - * @var string - */ - public $fileNameEqual = null; - - /** - * - * - * @var float - */ - public $fileSizeEqual = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaUserAgentRestriction extends KalturaBaseRestriction -{ - /** - * User agent restriction type (Allow or deny) - * - * - * @var KalturaUserAgentRestrictionType - */ - public $userAgentRestrictionType = null; - - /** - * A comma seperated list of user agent regular expressions - * - * - * @var string - */ - public $userAgentRegexList = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -abstract class KalturaUserLoginDataBaseFilter extends KalturaFilter -{ - /** - * - * - * @var string - */ - public $loginEmailEqual = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -abstract class KalturaUserRoleBaseFilter extends KalturaFilter -{ - /** - * - * - * @var int - */ - public $idEqual = null; - - /** - * - * - * @var string - */ - public $idIn = null; - - /** - * - * - * @var string - */ - public $nameEqual = null; - - /** - * - * - * @var string - */ - public $nameIn = null; - - /** - * - * - * @var string - */ - public $systemNameEqual = null; - - /** - * - * - * @var string - */ - public $systemNameIn = null; - - /** - * - * - * @var string - */ - public $descriptionLike = null; - - /** - * - * - * @var KalturaUserRoleStatus - */ - public $statusEqual = null; - - /** - * - * - * @var string - */ - public $statusIn = null; - - /** - * - * - * @var int - */ - public $partnerIdEqual = null; - - /** - * - * - * @var string - */ - public $partnerIdIn = null; - - /** - * - * - * @var string - */ - public $tagsMultiLikeOr = null; - - /** - * - * - * @var string - */ - public $tagsMultiLikeAnd = null; - - /** - * - * - * @var int - */ - public $createdAtGreaterThanOrEqual = null; - - /** - * - * - * @var int - */ - public $createdAtLessThanOrEqual = null; - - /** - * - * - * @var int - */ - public $updatedAtGreaterThanOrEqual = null; - - /** - * - * - * @var int - */ - public $updatedAtLessThanOrEqual = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -abstract class KalturaWidgetBaseFilter extends KalturaFilter -{ - /** - * - * - * @var string - */ - public $idEqual = null; - - /** - * - * - * @var string - */ - public $idIn = null; - - /** - * - * - * @var string - */ - public $sourceWidgetIdEqual = null; - - /** - * - * - * @var string - */ - public $rootWidgetIdEqual = null; - - /** - * - * - * @var int - */ - public $partnerIdEqual = null; - - /** - * - * - * @var string - */ - public $entryIdEqual = null; - - /** - * - * - * @var int - */ - public $uiConfIdEqual = null; - - /** - * - * - * @var int - */ - public $createdAtGreaterThanOrEqual = null; - - /** - * - * - * @var int - */ - public $createdAtLessThanOrEqual = null; - - /** - * - * - * @var int - */ - public $updatedAtGreaterThanOrEqual = null; - - /** - * - * - * @var int - */ - public $updatedAtLessThanOrEqual = null; - - /** - * - * - * @var string - */ - public $partnerDataLike = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaYahooSyndicationFeed extends KalturaBaseSyndicationFeed -{ - /** - * - * - * @var KalturaYahooSyndicationFeedCategories - * @readonly - */ - public $category = null; - - /** - * - * - * @var KalturaYahooSyndicationFeedAdultValues - */ - public $adultContent = null; - - /** - * feed description - * - * - * @var string - */ - public $feedDescription = null; - - /** - * feed landing page (i.e publisher website) - * - * - * @var string - */ - public $feedLandingPage = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaAccessControlFilter extends KalturaAccessControlBaseFilter -{ - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaAccessControlProfileFilter extends KalturaAccessControlProfileBaseFilter -{ - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaAkamaiProvisionJobData extends KalturaProvisionJobData -{ - /** - * - * - * @var string - */ - public $wsdlUsername = null; - - /** - * - * - * @var string - */ - public $wsdlPassword = null; - - /** - * - * - * @var string - */ - public $cpcode = null; - - /** - * - * - * @var string - */ - public $emailId = null; - - /** - * - * - * @var string - */ - public $primaryContact = null; - - /** - * - * - * @var string - */ - public $secondaryContact = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaAkamaiUniversalProvisionJobData extends KalturaProvisionJobData -{ - /** - * - * - * @var int - */ - public $streamId = null; - - /** - * - * - * @var string - */ - public $systemUserName = null; - - /** - * - * - * @var string - */ - public $systemPassword = null; - - /** - * - * - * @var string - */ - public $domainName = null; - - /** - * - * - * @var KalturaDVRStatus - */ - public $dvrEnabled = null; - - /** - * - * - * @var int - */ - public $dvrWindow = null; - - /** - * - * - * @var string - */ - public $primaryContact = null; - - /** - * - * - * @var string - */ - public $secondaryContact = null; - - /** - * - * - * @var KalturaAkamaiUniversalStreamType - */ - public $streamType = null; - - /** - * - * - * @var string - */ - public $notificationEmail = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaAssetFilter extends KalturaAssetBaseFilter -{ - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaAssetParamsFilter extends KalturaAssetParamsBaseFilter -{ - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaAssetResource extends KalturaContentResource -{ - /** - * ID of the source asset - * - * - * @var string - */ - public $assetId = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaBaseSyndicationFeedFilter extends KalturaBaseSyndicationFeedBaseFilter -{ - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaBatchJobFilter extends KalturaBatchJobBaseFilter -{ - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaBulkUploadFilter extends KalturaBulkUploadBaseFilter -{ - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaCategoryEntryFilter extends KalturaCategoryEntryBaseFilter -{ - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaCategoryFilter extends KalturaCategoryBaseFilter -{ - /** - * - * - * @var string - */ - public $freeText = null; - - /** - * - * - * @var string - */ - public $membersIn = null; - - /** - * - * - * @var string - */ - public $nameOrReferenceIdStartsWith = null; - - /** - * - * - * @var string - */ - public $managerEqual = null; - - /** - * - * - * @var string - */ - public $memberEqual = null; - - /** - * - * - * @var string - */ - public $fullNameStartsWithIn = null; - - /** - * not includes the category itself (only sub categories) - * - * - * @var string - */ - public $ancestorIdIn = null; - - /** - * - * - * @var string - */ - public $idOrInheritedParentIdIn = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaControlPanelCommandFilter extends KalturaControlPanelCommandBaseFilter -{ - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaConversionProfileFilter extends KalturaConversionProfileBaseFilter -{ - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaConversionProfileAssetParamsFilter extends KalturaConversionProfileAssetParamsBaseFilter -{ - /** - * - * - * @var KalturaConversionProfileFilter - */ - public $conversionProfileIdFilter; - - /** - * - * - * @var KalturaAssetParamsFilter - */ - public $assetParamsIdFilter; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaConvertCollectionJobData extends KalturaConvartableJobData -{ - /** - * - * - * @var string - */ - public $destDirLocalPath = null; - - /** - * - * - * @var string - */ - public $destDirRemoteUrl = null; - - /** - * - * - * @var string - */ - public $destFileName = null; - - /** - * - * - * @var string - */ - public $inputXmlLocalPath = null; - - /** - * - * - * @var string - */ - public $inputXmlRemoteUrl = null; - - /** - * - * - * @var string - */ - public $commandLinesStr = null; - - /** - * - * - * @var array of KalturaConvertCollectionFlavorData - */ - public $flavors; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaConvertJobData extends KalturaConvartableJobData -{ - /** - * - * - * @var string - */ - public $destFileSyncLocalPath = null; - - /** - * - * - * @var string - */ - public $destFileSyncRemoteUrl = null; - - /** - * - * - * @var string - */ - public $logFileSyncLocalPath = null; - - /** - * - * - * @var string - */ - public $logFileSyncRemoteUrl = null; - - /** - * - * - * @var string - */ - public $flavorAssetId = null; - - /** - * - * - * @var string - */ - public $remoteMediaId = null; - - /** - * - * - * @var string - */ - public $customData = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaCountryCondition extends KalturaMatchCondition -{ - /** - * The ip geo coder engine to be used - * - * - * @var KalturaGeoCoderType - */ - public $geoCoderType = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaEndUserReportInputFilter extends KalturaReportInputFilter -{ - /** - * - * - * @var string - */ - public $application = null; - - /** - * - * - * @var string - */ - public $userIds = null; - - /** - * - * - * @var string - */ - public $playbackContext = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaEntryResource extends KalturaContentResource -{ - /** - * ID of the source entry - * - * - * @var string - */ - public $entryId = null; - - /** - * ID of the source flavor params, set to null to use the source flavor - * - * - * @var int - */ - public $flavorParamsId = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaExtractMediaJobData extends KalturaConvartableJobData -{ - /** - * - * - * @var string - */ - public $flavorAssetId = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -abstract class KalturaIntegerField extends KalturaIntegerValue -{ - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaFieldCompareCondition extends KalturaCompareCondition -{ - /** - * Field to evaluate - * - * - * @var KalturaIntegerField - */ - public $field; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -abstract class KalturaStringField extends KalturaStringValue -{ - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaFieldMatchCondition extends KalturaMatchCondition -{ - /** - * Field to evaluate - * - * - * @var KalturaStringField - */ - public $field; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaFileSyncResource extends KalturaContentResource -{ - /** - * The object type of the file sync object - * - * - * @var int - */ - public $fileSyncObjectType = null; - - /** - * The object sub-type of the file sync object - * - * - * @var int - */ - public $objectSubType = null; - - /** - * The object id of the file sync object - * - * - * @var string - */ - public $objectId = null; - - /** - * The version of the file sync object - * - * - * @var string - */ - public $version = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaGenericXsltSyndicationFeed extends KalturaGenericSyndicationFeed -{ - /** - * - * - * @var string - */ - public $xslt = null; - - /** - * - * - * @var array of KalturaExtendingItemMrssParameter - */ - public $itemXpathsToExtend; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaIpAddressCondition extends KalturaMatchCondition -{ - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaLiveAsset extends KalturaFlavorAsset -{ - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaLiveChannelSegmentFilter extends KalturaLiveChannelSegmentBaseFilter -{ - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaLiveParams extends KalturaFlavorParams -{ - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaMediaFlavorParams extends KalturaFlavorParams -{ - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaMediaInfoFilter extends KalturaMediaInfoBaseFilter -{ - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaMediaServerFilter extends KalturaMediaServerBaseFilter -{ - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaOperationResource extends KalturaContentResource -{ - /** - * Only KalturaEntryResource and KalturaAssetResource are supported - * - * - * @var KalturaContentResource - */ - public $resource; - - /** - * - * - * @var array of KalturaOperationAttributes - */ - public $operationAttributes; - - /** - * ID of alternative asset params to be used instead of the system default flavor params - * - * - * @var int - */ - public $assetParamsId = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaPartnerFilter extends KalturaPartnerBaseFilter -{ - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaPermissionFilter extends KalturaPermissionBaseFilter -{ - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaPermissionItemFilter extends KalturaPermissionItemBaseFilter -{ - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaPostConvertJobData extends KalturaConvartableJobData -{ - /** - * - * - * @var string - */ - public $flavorAssetId = null; - - /** - * Indicates if a thumbnail should be created - * - * - * @var bool - */ - public $createThumb = null; - - /** - * The path of the created thumbnail - * - * - * @var string - */ - public $thumbPath = null; - - /** - * The position of the thumbnail in the media file - * - * - * @var int - */ - public $thumbOffset = null; - - /** - * The height of the movie, will be used to comapare if this thumbnail is the best we can have - * - * - * @var int - */ - public $thumbHeight = null; - - /** - * The bit rate of the movie, will be used to comapare if this thumbnail is the best we can have - * - * - * @var int - */ - public $thumbBitrate = null; - - /** - * - * - * @var string - */ - public $customData = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaPreviewRestriction extends KalturaSessionRestriction -{ - /** - * The preview restriction length - * - * - * @var int - */ - public $previewLength = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -abstract class KalturaRegexCondition extends KalturaMatchCondition -{ - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaRemoteStorageResources extends KalturaContentResource -{ - /** - * Array of remote stoage resources - * - * - * @var array of KalturaRemoteStorageResource - */ - public $resources; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaReportFilter extends KalturaReportBaseFilter -{ - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaSearchComparableCondition extends KalturaSearchCondition -{ - /** - * - * - * @var KalturaSearchConditionComparison - */ - public $comparison = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaSiteCondition extends KalturaMatchCondition -{ - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaSshImportJobData extends KalturaImportJobData -{ - /** - * - * - * @var string - */ - public $privateKey = null; - - /** - * - * - * @var string - */ - public $publicKey = null; - - /** - * - * - * @var string - */ - public $passPhrase = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaStorageDeleteJobData extends KalturaStorageJobData -{ - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaStorageExportJobData extends KalturaStorageJobData -{ - /** - * - * - * @var bool - */ - public $force = null; - - /** - * - * - * @var bool - */ - public $createLink = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaStorageProfileFilter extends KalturaStorageProfileBaseFilter -{ - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaStringResource extends KalturaContentResource -{ - /** - * Textual content - * - * - * @var string - */ - public $content = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaUiConfFilter extends KalturaUiConfBaseFilter -{ - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaUploadTokenFilter extends KalturaUploadTokenBaseFilter -{ - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaUserLoginDataFilter extends KalturaUserLoginDataBaseFilter -{ - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaUserRoleFilter extends KalturaUserRoleBaseFilter -{ - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaWidgetFilter extends KalturaWidgetBaseFilter -{ - -} - -/** - * @package Kaltura - * @subpackage Client - */ -abstract class KalturaAdminUserBaseFilter extends KalturaUserFilter -{ - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaAmazonS3StorageExportJobData extends KalturaStorageExportJobData -{ - /** - * - * - * @var KalturaAmazonS3StorageProfileFilesPermissionLevel - */ - public $filesPermissionInS3 = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -abstract class KalturaAmazonS3StorageProfileBaseFilter extends KalturaStorageProfileFilter -{ - -} - -/** - * @package Kaltura - * @subpackage Client - */ -abstract class KalturaApiActionPermissionItemBaseFilter extends KalturaPermissionItemFilter -{ - -} - -/** - * @package Kaltura - * @subpackage Client - */ -abstract class KalturaApiParameterPermissionItemBaseFilter extends KalturaPermissionItemFilter -{ - -} - -/** - * @package Kaltura - * @subpackage Client - */ -abstract class KalturaAssetParamsOutputBaseFilter extends KalturaAssetParamsFilter -{ - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaBatchJobFilterExt extends KalturaBatchJobFilter -{ - /** - * - * - * @var string - */ - public $jobTypeAndSubTypeIn = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaCountryContextField extends KalturaStringField -{ - /** - * The ip geo coder engine to be used - * - * - * @var KalturaGeoCoderType - */ - public $geoCoderType = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -abstract class KalturaDataEntryBaseFilter extends KalturaBaseEntryFilter -{ - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaEvalBooleanField extends KalturaBooleanField -{ - /** - * PHP code - * - * - * @var string - */ - public $code = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaEvalStringField extends KalturaStringField -{ - /** - * PHP code - * - * - * @var string - */ - public $code = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -abstract class KalturaFlavorAssetBaseFilter extends KalturaAssetFilter -{ - /** - * - * - * @var int - */ - public $flavorParamsIdEqual = null; - - /** - * - * - * @var string - */ - public $flavorParamsIdIn = null; - - /** - * - * - * @var KalturaFlavorAssetStatus - */ - public $statusEqual = null; - - /** - * - * - * @var string - */ - public $statusIn = null; - - /** - * - * - * @var string - */ - public $statusNotIn = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -abstract class KalturaFlavorParamsBaseFilter extends KalturaAssetParamsFilter -{ - /** - * - * - * @var KalturaContainerFormat - */ - public $formatEqual = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -abstract class KalturaGenericSyndicationFeedBaseFilter extends KalturaBaseSyndicationFeedFilter -{ - -} - -/** - * @package Kaltura - * @subpackage Client - */ -abstract class KalturaGoogleVideoSyndicationFeedBaseFilter extends KalturaBaseSyndicationFeedFilter -{ - -} - -/** - * @package Kaltura - * @subpackage Client - */ -abstract class KalturaITunesSyndicationFeedBaseFilter extends KalturaBaseSyndicationFeedFilter -{ - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaIpAddressContextField extends KalturaStringField -{ - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaMediaFlavorParamsOutput extends KalturaFlavorParamsOutput -{ - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaObjectIdField extends KalturaStringField -{ - -} - -/** - * @package Kaltura - * @subpackage Client - */ -abstract class KalturaPlaylistBaseFilter extends KalturaBaseEntryFilter -{ - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaServerFileResource extends KalturaDataCenterContentResource -{ - /** - * Full path to the local file - * - * - * @var string - */ - public $localFilePath = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaSshUrlResource extends KalturaUrlResource -{ - /** - * SSH private key - * - * - * @var string - */ - public $privateKey = null; - - /** - * SSH public key - * - * - * @var string - */ - public $publicKey = null; - - /** - * Passphrase for SSH keys - * - * - * @var string - */ - public $keyPassphrase = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -abstract class KalturaThumbAssetBaseFilter extends KalturaAssetFilter -{ - /** - * - * - * @var int - */ - public $thumbParamsIdEqual = null; - - /** - * - * - * @var string - */ - public $thumbParamsIdIn = null; - - /** - * - * - * @var KalturaThumbAssetStatus - */ - public $statusEqual = null; - - /** - * - * - * @var string - */ - public $statusIn = null; - - /** - * - * - * @var string - */ - public $statusNotIn = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -abstract class KalturaThumbParamsBaseFilter extends KalturaAssetParamsFilter -{ - /** - * - * - * @var KalturaContainerFormat - */ - public $formatEqual = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaTimeContextField extends KalturaIntegerField -{ - /** - * Time offset in seconds since current time - * - * - * @var int - */ - public $offset = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -abstract class KalturaTubeMogulSyndicationFeedBaseFilter extends KalturaBaseSyndicationFeedFilter -{ - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaUploadedFileTokenResource extends KalturaDataCenterContentResource -{ - /** - * Token that returned from upload.upload action or uploadToken.add action. - * - * - * @var string - */ - public $token = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaUserAgentCondition extends KalturaRegexCondition -{ - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaUserAgentContextField extends KalturaStringField -{ - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaUserEmailContextField extends KalturaStringField -{ - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaWebcamTokenResource extends KalturaDataCenterContentResource -{ - /** - * Token that returned from media server such as FMS or red5. - * - * - * @var string - */ - public $token = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -abstract class KalturaYahooSyndicationFeedBaseFilter extends KalturaBaseSyndicationFeedFilter -{ - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaAdminUserFilter extends KalturaAdminUserBaseFilter -{ - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaAmazonS3StorageProfileFilter extends KalturaAmazonS3StorageProfileBaseFilter -{ - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaApiActionPermissionItemFilter extends KalturaApiActionPermissionItemBaseFilter -{ - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaApiParameterPermissionItemFilter extends KalturaApiParameterPermissionItemBaseFilter -{ - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaAssetParamsOutputFilter extends KalturaAssetParamsOutputBaseFilter -{ - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaDataEntryFilter extends KalturaDataEntryBaseFilter -{ - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaFlavorAssetFilter extends KalturaFlavorAssetBaseFilter -{ - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaFlavorParamsFilter extends KalturaFlavorParamsBaseFilter -{ - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaGenericSyndicationFeedFilter extends KalturaGenericSyndicationFeedBaseFilter -{ - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaGoogleVideoSyndicationFeedFilter extends KalturaGoogleVideoSyndicationFeedBaseFilter -{ - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaITunesSyndicationFeedFilter extends KalturaITunesSyndicationFeedBaseFilter -{ - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaPlaylistFilter extends KalturaPlaylistBaseFilter -{ - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaThumbAssetFilter extends KalturaThumbAssetBaseFilter -{ - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaThumbParamsFilter extends KalturaThumbParamsBaseFilter -{ - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaTubeMogulSyndicationFeedFilter extends KalturaTubeMogulSyndicationFeedBaseFilter -{ - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaYahooSyndicationFeedFilter extends KalturaYahooSyndicationFeedBaseFilter -{ - -} - -/** - * @package Kaltura - * @subpackage Client - */ -abstract class KalturaFlavorParamsOutputBaseFilter extends KalturaFlavorParamsFilter -{ - /** - * - * - * @var int - */ - public $flavorParamsIdEqual = null; - - /** - * - * - * @var string - */ - public $flavorParamsVersionEqual = null; - - /** - * - * - * @var string - */ - public $flavorAssetIdEqual = null; - - /** - * - * - * @var string - */ - public $flavorAssetVersionEqual = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -abstract class KalturaGenericXsltSyndicationFeedBaseFilter extends KalturaGenericSyndicationFeedFilter -{ - -} - -/** - * @package Kaltura - * @subpackage Client - */ -abstract class KalturaLiveAssetBaseFilter extends KalturaFlavorAssetFilter -{ - -} - -/** - * @package Kaltura - * @subpackage Client - */ -abstract class KalturaLiveParamsBaseFilter extends KalturaFlavorParamsFilter -{ - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaLiveStreamAdminEntry extends KalturaLiveStreamEntry -{ - -} - -/** - * @package Kaltura - * @subpackage Client - */ -abstract class KalturaMediaFlavorParamsBaseFilter extends KalturaFlavorParamsFilter -{ - -} - -/** - * @package Kaltura - * @subpackage Client - */ -abstract class KalturaMixEntryBaseFilter extends KalturaPlayableEntryFilter -{ - -} - -/** - * @package Kaltura - * @subpackage Client - */ -abstract class KalturaThumbParamsOutputBaseFilter extends KalturaThumbParamsFilter -{ - /** - * - * - * @var int - */ - public $thumbParamsIdEqual = null; - - /** - * - * - * @var string - */ - public $thumbParamsVersionEqual = null; - - /** - * - * - * @var string - */ - public $thumbAssetIdEqual = null; - - /** - * - * - * @var string - */ - public $thumbAssetVersionEqual = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaFlavorParamsOutputFilter extends KalturaFlavorParamsOutputBaseFilter -{ - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaGenericXsltSyndicationFeedFilter extends KalturaGenericXsltSyndicationFeedBaseFilter -{ - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaLiveAssetFilter extends KalturaLiveAssetBaseFilter -{ - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaLiveParamsFilter extends KalturaLiveParamsBaseFilter -{ - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaMediaFlavorParamsFilter extends KalturaMediaFlavorParamsBaseFilter -{ - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaMixEntryFilter extends KalturaMixEntryBaseFilter -{ - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaThumbParamsOutputFilter extends KalturaThumbParamsOutputBaseFilter -{ - -} - -/** - * @package Kaltura - * @subpackage Client - */ -abstract class KalturaLiveEntryBaseFilter extends KalturaMediaEntryFilter -{ - -} - -/** - * @package Kaltura - * @subpackage Client - */ -abstract class KalturaMediaFlavorParamsOutputBaseFilter extends KalturaFlavorParamsOutputFilter -{ - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaLiveEntryFilter extends KalturaLiveEntryBaseFilter -{ - /** - * - * - * @var KalturaNullableBoolean - */ - public $isLive = null; - - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaMediaFlavorParamsOutputFilter extends KalturaMediaFlavorParamsOutputBaseFilter -{ - -} - -/** - * @package Kaltura - * @subpackage Client - */ -abstract class KalturaLiveChannelBaseFilter extends KalturaLiveEntryFilter -{ - -} - -/** - * @package Kaltura - * @subpackage Client - */ -abstract class KalturaLiveStreamEntryBaseFilter extends KalturaLiveEntryFilter -{ - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaLiveChannelFilter extends KalturaLiveChannelBaseFilter -{ - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaLiveStreamEntryFilter extends KalturaLiveStreamEntryBaseFilter -{ - -} - -/** - * @package Kaltura - * @subpackage Client - */ -abstract class KalturaLiveStreamAdminEntryBaseFilter extends KalturaLiveStreamEntryFilter -{ - -} - -/** - * @package Kaltura - * @subpackage Client - */ -class KalturaLiveStreamAdminEntryFilter extends KalturaLiveStreamAdminEntryBaseFilter -{ - -} - diff --git a/local/kaltura/API/TestCode/DemoVideo.flv b/local/kaltura/API/TestCode/DemoVideo.flv deleted file mode 100644 index 5e0c8341d21b2ef6bdf406eb4cf7c0d330baf2c0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 512919 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

  • +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 |nwL4y0Tg5I#1)KOdi#El&Kkk| zp?YOO+PBlrl{&gz0XM0!E=5L?Qp_VQzA5-JZm)l3bZOt72#P7SP|~;nj%ixci(mB! z>|1w!1D3fM6aiKe0>X>*?%(7{HWn<8?$A1G;VQX{ZF8zmH}!2gH&=}Pxn5J7=MzCw zPj;4?8}>TQsfVCM6j6i!G(G>zA&7QAuJi1;p^`a*Ft#+9n;#}o(X1o$Hxm;(G_*&d?TTMp#Trd3W-GEjU>7VKe>2Jrj@<|h^rNwrHnU%;`Gizje$m|VK z!HnT?p=8Hwb-`-Av-nO@8{C>5^zvtn7@Aury+^gvDmOhGaIg6;C7!X!2J$Uocd-R> z2uO%<-y#RzRrXi+s-nJ2g5euk>H%u<=Ha=iSwS$Xr#pE~1C$MFofMPzV$Jaz?-L@q zQ7kmbe_4sZ6m)tvP(*Y%qoPm5R3#`G4pAkwQ$bb}2BDaCP-~|v?R4*es14R%yX1AD zIt0Iw4^&|5>PPl62}W~h zNDA6L`}EUsL3R%?Qs^0IOn2v}fv(g`;arr3Ier4&{ z0MnWJd>=C1RJTK-l-V5-U-v_9UNGqsP@aaynY>~J?6Bs0U?K+`m9zCHa<-eu^{m&d zvVRJ=X?c3_%o`ACzW4F2O;!1*5s51WBS{fR#cWrCy02w6zxV#Hit~$&_A#2O^#f z{G+xN$4c>fo!g`$SJWsFuKN?X7xyVe&v}mTzZJ~wyXJDAyBTw(vu91_*51+#ob}as zL#PCJEGrxQTn5jZnN~X`Q#|uye2M`@?ocJX=4Z5Mycd2O#qew?!YLFe9YbpZXOarW zCI|#5NN-lzVD-Sj;fqt{OY2Z+&vjTCDN159N|-|B@%xYUWeD<1AZ2Uj=^+2`%g}Ki z=n|7ui&1a)>fSQACRBYu_=teaYUmV&U??0TqJfEZ%$b*w$Zr&I%QG}-0#Eq?EUazM zGv9>j*kY|-WW!z5b8}9Wh|6zUrzFDGXPQ*Z>aQ&lENFTI51HT^J7Ad21?w4tfsha_ z=TlXl>N%w$fD*|N2#&&_PV4EInD}Cs^K)HVKm`Yrgo)nwddtW)AJ14tgG2VhFX7r| zjcI7v{QA2>G)Lz;6I}oB!k#*AD?;{CEcw1l-T>;dB~xQU^o5rB><(k6I1Wf?YG1E;QM!2~AFUjjw(IC>K!BC`T3=C?_}-H-^g)NqKZzCeu0Dv#m3zCG-t}WMh7uMa^g3E!(<=&y@8a~IpU3En>8co@r5V|Z4V1Y z(mc|fVWIii7>sVw*(?K#j(&p1wFwV3-@*#B%ccWK-FypW0&oO=>5ngvebTWRbP(dq z=B01Vs9|3&vhzdAP3x$-xPqc8)3{E{1jEK#?ri%cKz+IzUD;kB2lHK*r@U`RO7)~B zG!2-Dc$Bk6!{&CcHz@Ziv@QGs;Ljf&djGx=DkI`9PR3#}O`$+LY9*vU`UHKXtHlbF zm$*~4>iCuU5Ntzw=Vv96M3+$!`&iFP~{gm>|JaOu~f1xK0PVO zk7+aLf@*V6@F7X4Nq0ym z`LMZbeWy90r>ZwqBXh#ytnJ>UD2=)R9KE$}dE+^DIrk2y1dpyXgbZq1WNh38i;JZ` ztwim9R^HUVCYk>z;=v&}q7AlFYM^CZ9cx9ak+9;{cy<`;AcuKUcdYdY)extYI>cv? zb+m^25IbN}!R)A+g!(fWS98E=qe%;T=ZfH9?xBKG0Wdc3USHUhQN8x$IKORc=W;U% zatJEm9`Ae`by0s}DJZy46gYvK9bh^${HT}d6rYO9jXuyQn>~+P*sD~@!+=2RCYpw5 zbztKlYAnuvK@Lt+xRjy9Byu`6)8qV-|M)OrXJpckhiTQ<1wmNBhx5=t%~0G**z6{x z44FuKQ_XOxG
    diff --git a/lib/editor/atto/plugins/kalturamedia/yui/build/moodle-atto_kalturamedia-button/moodle-atto_kalturamedia-button-debug.js b/lib/editor/atto/plugins/kalturamedia/yui/build/moodle-atto_kalturamedia-button/moodle-atto_kalturamedia-button-debug.js index 151ce6bdc13b4..2d22a45c5d254 100644 --- a/lib/editor/atto/plugins/kalturamedia/yui/build/moodle-atto_kalturamedia-button/moodle-atto_kalturamedia-button-debug.js +++ b/lib/editor/atto/plugins/kalturamedia/yui/build/moodle-atto_kalturamedia-button/moodle-atto_kalturamedia-button-debug.js @@ -1,165 +1,155 @@ YUI.add('moodle-atto_kalturamedia-button', function (Y, NAME) { -// This file is part of Moodle - http://moodle.org/ -// -// Moodle is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// Moodle is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with Moodle. If not, see . - -/* - * @package atto_kalturamedia - * @copyright 2Kaltura - * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later - */ - -/** - * @module moodle-atto_kalturamedia-button - */ - -/** - * Atto text editor kalturamedia plugin. - * - * @namespace M.atto_kalturamedia - * @class button - * @extends M.editor_atto.EditorPlugin - */ - -var COMPONENTNAME = 'atto_kalturamedia', - CSS = { - URLINPUT: 'atto_kalturamedia_urlentry', - NAMEINPUT: 'atto_kalturamedia_nameentry' - }, - SELECTORS = { - URLINPUT: '.' + CSS.URLINPUT, - NAMEINPUT: '.' + CSS.NAMEINPUT - }; - -Y.namespace('M.atto_kalturamedia').Button = Y.Base.create('button', Y.M.editor_atto.EditorPlugin, [], { - _currentSelection: null, - embedWindow: null, - - initializer: function() { - this.addButton({ - icon: 'icon', - iconComponent: COMPONENTNAME, - callback: this._kalturamedia - }); - }, - _kalturamedia: function() { - this._currentSelection = this.get('host').getSelection(); - if (this._currentSelection === false) { - return; - } - - var w = 1200; - var h = 700; - var dualScreenLeft = window.screenLeft != undefined ? window.screenLeft : screen.left; - var dualScreenTop = window.screenTop != undefined ? window.screenTop : screen.top; - - var width = window.innerWidth ? window.innerWidth : document.documentElement.clientWidth ? document.documentElement.clientWidth : screen.width; - var height = window.innerHeight ? window.innerHeight : document.documentElement.clientHeight ? document.documentElement.clientHeight : screen.height; - - var left = ((width / 2) - (w / 2)) + dualScreenLeft; - var top = ((height / 2) - (h / 2)) + dualScreenTop; - var newWindow = window.open(this._getIframeURL(), M.util.get_string("browse_and_embed", COMPONENTNAME), 'scrollbars=no, width=' + w + ', height=' + h + ', top=' + top + ', left=' + left); - - window.buttonJs = this; - - if (window.focus) { - newWindow.focus(); - } - - this.embedWindow = newWindow; - }, - - _getIframeURL: function() { - - var args = Y.mix({ - elementid: this.get('host').get('elementid'), - contextid: this.get('contextid'), - height: '600px', - width: '1112px' - }, - this.get('area')); - return M.cfg.wwwroot + '/lib/editor/atto/plugins/kalturamedia/ltibrowse_container.php?' + - Y.QueryString.stringify(args); - }, - - _getCourseId: function() { - var courseId; - var bodyClasses = document.getElementsByTagName('body')[0].className; - var classes = bodyClasses.split(' '); - for(i in classes) - { - if(classes[i].indexOf('course-') > -1) - { - var parts = classes[i].split('-'); - courseId = parts[1]; - } - } - - return courseId; - }, - - _removeProtocolFromUrl: function(fullUrl) { - return fullUrl.replace(/^https?:\/\//,''); - }, - - embedItem: function(what, data) { - var embedInfo = {}; - for(param in data) - { - var isEmbedInfo = param.split('-'); - if(isEmbedInfo[0] == 'embedinfo') - { - embedInfo[isEmbedInfo[1]] = data[param]; - } - } - - var sourceUrl = embedInfo.url; - var url = this._removeProtocolFromUrl(sourceUrl); - var parser = document.createElement('a'); - parser.href = sourceUrl; - url += parser.search; - - var content = 'tinymce-kalturamedia-embed||'+embedInfo.title+'||'+embedInfo.width+'||'+embedInfo.height+''; - - host = this.get('host'); - host.setSelection(this._currentSelection); - host.insertContentAtFocusPoint(content); - this.markUpdated(); - this.embedWindow.close(); - } - - } , { - ATTRS: { - /** - * The contextid to use when generating this preview. - * - * @attribute contextid - * @type String - */ - contextid: { - value: null - }, - - /** - * The KAF URI, as configured in Kaltura's plugin settings. - */ - kafuri: { - value: null - } - }} -); +// This file is part of Moodle - http://moodle.org/ +// +// Moodle is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// Moodle is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with Moodle. If not, see . + +/* + * @package atto_kalturamedia + * @copyright 2Kaltura + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + */ + +/** + * @module moodle-atto_kalturamedia-button + */ + +/** + * Atto text editor kalturamedia plugin. + * + * @namespace M.atto_kalturamedia + * @class button + * @extends M.editor_atto.EditorPlugin + */ + +var COMPONENTNAME = 'atto_kalturamedia', + CSS = { + URLINPUT: 'atto_kalturamedia_urlentry', + NAMEINPUT: 'atto_kalturamedia_nameentry' + }, + SELECTORS = { + URLINPUT: '.' + CSS.URLINPUT, + NAMEINPUT: '.' + CSS.NAMEINPUT + }; + +Y.namespace('M.atto_kalturamedia').Button = Y.Base.create('button', Y.M.editor_atto.EditorPlugin, [], { + _currentSelection: null, + embedWindow: null, + + initializer: function() { + this.addButton({ + icon: 'icon', + iconComponent: COMPONENTNAME, + callback: this._kalturamedia + }); + }, + _kalturamedia: function() { + this._currentSelection = this.get('host').getSelection(); + if (this._currentSelection === false) { + return; + } + + var w = 1200; + var h = 700; + var dualScreenLeft = window.screenLeft != undefined ? window.screenLeft : screen.left; + var dualScreenTop = window.screenTop != undefined ? window.screenTop : screen.top; + + var width = window.innerWidth ? window.innerWidth : document.documentElement.clientWidth ? document.documentElement.clientWidth : screen.width; + var height = window.innerHeight ? window.innerHeight : document.documentElement.clientHeight ? document.documentElement.clientHeight : screen.height; + + var left = ((width / 2) - (w / 2)) + dualScreenLeft; + var top = ((height / 2) - (h / 2)) + dualScreenTop; + var newWindow = window.open(this._getIframeURL(), M.util.get_string("browse_and_embed", COMPONENTNAME), 'scrollbars=no, width=' + w + ', height=' + h + ', top=' + top + ', left=' + left); + + window.buttonJs = this; + + if (window.focus) { + newWindow.focus(); + } + + this.embedWindow = newWindow; + }, + + _getIframeURL: function() { + + var args = Y.mix({ + elementid: this.get('host').get('elementid'), + contextid: this.get('contextid'), + height: '600px', + width: '1112px' + }, + this.get('area')); + return M.cfg.wwwroot + '/lib/editor/atto/plugins/kalturamedia/ltibrowse_container.php?' + + Y.QueryString.stringify(args); + }, + + _getCourseId: function() { + var courseId; + var bodyClasses = document.getElementsByTagName('body')[0].className; + var classes = bodyClasses.split(' '); + for(i in classes) + { + if(classes[i].indexOf('course-') > -1) + { + var parts = classes[i].split('-'); + courseId = parts[1]; + } + } + + return courseId; + }, + + _removeProtocolFromUrl: function(fullUrl) { + return fullUrl.replace(/^https?:\/\//,''); + }, + + embedItem: function(what, data) { + var sourceUrl = data.url; + var url = this._removeProtocolFromUrl(sourceUrl); + var parser = document.createElement('a'); + parser.href = sourceUrl; + url += parser.search; + + var content = 'tinymce-kalturamedia-embed||'+data.title+'||'+data.width+'||'+data.height+''; + + host = this.get('host'); + host.setSelection(this._currentSelection); + host.insertContentAtFocusPoint(content); + this.markUpdated(); + this.embedWindow.close(); + } + + } , { + ATTRS: { + /** + * The contextid to use when generating this preview. + * + * @attribute contextid + * @type String + */ + contextid: { + value: null + }, + + /** + * The KAF URI, as configured in Kaltura's plugin settings. + */ + kafuri: { + value: null + } + }} +); }, '@VERSION@', {"requires": ["moodle-editor_atto-plugin"]}); diff --git a/lib/editor/atto/plugins/kalturamedia/yui/build/moodle-atto_kalturamedia-button/moodle-atto_kalturamedia-button-min.js b/lib/editor/atto/plugins/kalturamedia/yui/build/moodle-atto_kalturamedia-button/moodle-atto_kalturamedia-button-min.js index a731e44782128..196c77e72be25 100644 --- a/lib/editor/atto/plugins/kalturamedia/yui/build/moodle-atto_kalturamedia-button/moodle-atto_kalturamedia-button-min.js +++ b/lib/editor/atto/plugins/kalturamedia/yui/build/moodle-atto_kalturamedia-button/moodle-atto_kalturamedia-button-min.js @@ -1 +1 @@ -YUI.add("moodle-atto_kalturamedia-button",function(e,t){var n="atto_kalturamedia",r={URLINPUT:"atto_kalturamedia_urlentry",NAMEINPUT:"atto_kalturamedia_nameentry"},s={URLINPUT:"."+r.URLINPUT,NAMEINPUT:"."+r.NAMEINPUT};e.namespace("M.atto_kalturamedia").Button=e.Base.create("button",e.M.editor_atto.EditorPlugin,[],{_currentSelection:null,embedWindow:null,initializer:function(){this.addButton({icon:"icon",iconComponent:n,callback:this._kalturamedia})},_kalturamedia:function(){this._currentSelection=this.get("host").getSelection();if(this._currentSelection===!1)return;var e=1200,t=700,r=window.screenLeft!=undefined?window.screenLeft:screen.left,i=window.screenTop!=undefined?window.screenTop:screen.top,s=window.innerWidth?window.innerWidth:document.documentElement.clientWidth?document.documentElement.clientWidth:screen.width,o=window.innerHeight?window.innerHeight:document.documentElement.clientHeight?document.documentElement.clientHeight:screen.height,u=s/2-e/2+r,a=o/2-t/2+i,f=window.open(this._getIframeURL(),M.util.get_string("browse_and_embed",n),"scrollbars=no, width="+e+", height="+t+", top="+a+", left="+u);window.buttonJs=this,window.focus&&f.focus(),this.embedWindow=f},_getIframeURL:function(){var t=e.mix({elementid:this.get("host").get("elementid"),contextid:this.get("contextid"),height:"600px",width:"1112px"},this.get("area"));return M.cfg.wwwroot+"/lib/editor/atto/plugins/kalturamedia/ltibrowse_container.php?"+e.QueryString.stringify(t)},_getCourseId:function(){var e,t=document.getElementsByTagName("body")[0].className,n=t.split(" ");for(i in n)if(n[i].indexOf("course-")>-1){var r=n[i].split("-");e=r[1]}return e},_removeProtocolFromUrl:function(e){return e.replace(/^https?:\/\//,"")},embedItem:function(e,t){var n={};for(param in t){var r=param.split("-");r[0]=="embedinfo"&&(n[r[1]]=t[param])}var i=n.url,s=this._removeProtocolFromUrl(i),o=document.createElement("a");o.href=i,s+=o.search;var u='tinymce-kalturamedia-embed||'+n.title+"||"+n.width+"||"+n.height+"";host=this.get("host"),host.setSelection(this._currentSelection),host.insertContentAtFocusPoint(u),this.markUpdated(),this.embedWindow.close()}},{ATTRS:{contextid:{value:null},kafuri:{value:null}}})},"@VERSION@",{requires:["moodle-editor_atto-plugin"]}); +YUI.add("moodle-atto_kalturamedia-button",function(e,t){var n="atto_kalturamedia",r={URLINPUT:"atto_kalturamedia_urlentry",NAMEINPUT:"atto_kalturamedia_nameentry"},s={URLINPUT:"."+r.URLINPUT,NAMEINPUT:"."+r.NAMEINPUT};e.namespace("M.atto_kalturamedia").Button=e.Base.create("button",e.M.editor_atto.EditorPlugin,[],{_currentSelection:null,embedWindow:null,initializer:function(){this.addButton({icon:"icon",iconComponent:n,callback:this._kalturamedia})},_kalturamedia:function(){this._currentSelection=this.get("host").getSelection();if(this._currentSelection===!1)return;var e=1200,t=700,r=window.screenLeft!=undefined?window.screenLeft:screen.left,i=window.screenTop!=undefined?window.screenTop:screen.top,s=window.innerWidth?window.innerWidth:document.documentElement.clientWidth?document.documentElement.clientWidth:screen.width,o=window.innerHeight?window.innerHeight:document.documentElement.clientHeight?document.documentElement.clientHeight:screen.height,u=s/2-e/2+r,a=o/2-t/2+i,f=window.open(this._getIframeURL(),M.util.get_string("browse_and_embed",n),"scrollbars=no, width="+e+", height="+t+", top="+a+", left="+u);window.buttonJs=this,window.focus&&f.focus(),this.embedWindow=f},_getIframeURL:function(){var t=e.mix({elementid:this.get("host").get("elementid"),contextid:this.get("contextid"),height:"600px",width:"1112px"},this.get("area"));return M.cfg.wwwroot+"/lib/editor/atto/plugins/kalturamedia/ltibrowse_container.php?"+e.QueryString.stringify(t)},_getCourseId:function(){var e,t=document.getElementsByTagName("body")[0].className,n=t.split(" ");for(i in n)if(n[i].indexOf("course-")>-1){var r=n[i].split("-");e=r[1]}return e},_removeProtocolFromUrl:function(e){return e.replace(/^https?:\/\//,"")},embedItem:function(e,t){var n=t.url,r=this._removeProtocolFromUrl(n),i=document.createElement("a");i.href=n,r+=i.search;var s='tinymce-kalturamedia-embed||'+t.title+"||"+t.width+"||"+t.height+"";host=this.get("host"),host.setSelection(this._currentSelection),host.insertContentAtFocusPoint(s),this.markUpdated(),this.embedWindow.close()}},{ATTRS:{contextid:{value:null},kafuri:{value:null}}})},"@VERSION@",{requires:["moodle-editor_atto-plugin"]}); diff --git a/lib/editor/atto/plugins/kalturamedia/yui/build/moodle-atto_kalturamedia-button/moodle-atto_kalturamedia-button.js b/lib/editor/atto/plugins/kalturamedia/yui/build/moodle-atto_kalturamedia-button/moodle-atto_kalturamedia-button.js index 151ce6bdc13b4..2d22a45c5d254 100644 --- a/lib/editor/atto/plugins/kalturamedia/yui/build/moodle-atto_kalturamedia-button/moodle-atto_kalturamedia-button.js +++ b/lib/editor/atto/plugins/kalturamedia/yui/build/moodle-atto_kalturamedia-button/moodle-atto_kalturamedia-button.js @@ -1,165 +1,155 @@ YUI.add('moodle-atto_kalturamedia-button', function (Y, NAME) { -// This file is part of Moodle - http://moodle.org/ -// -// Moodle is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// Moodle is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with Moodle. If not, see . - -/* - * @package atto_kalturamedia - * @copyright 2Kaltura - * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later - */ - -/** - * @module moodle-atto_kalturamedia-button - */ - -/** - * Atto text editor kalturamedia plugin. - * - * @namespace M.atto_kalturamedia - * @class button - * @extends M.editor_atto.EditorPlugin - */ - -var COMPONENTNAME = 'atto_kalturamedia', - CSS = { - URLINPUT: 'atto_kalturamedia_urlentry', - NAMEINPUT: 'atto_kalturamedia_nameentry' - }, - SELECTORS = { - URLINPUT: '.' + CSS.URLINPUT, - NAMEINPUT: '.' + CSS.NAMEINPUT - }; - -Y.namespace('M.atto_kalturamedia').Button = Y.Base.create('button', Y.M.editor_atto.EditorPlugin, [], { - _currentSelection: null, - embedWindow: null, - - initializer: function() { - this.addButton({ - icon: 'icon', - iconComponent: COMPONENTNAME, - callback: this._kalturamedia - }); - }, - _kalturamedia: function() { - this._currentSelection = this.get('host').getSelection(); - if (this._currentSelection === false) { - return; - } - - var w = 1200; - var h = 700; - var dualScreenLeft = window.screenLeft != undefined ? window.screenLeft : screen.left; - var dualScreenTop = window.screenTop != undefined ? window.screenTop : screen.top; - - var width = window.innerWidth ? window.innerWidth : document.documentElement.clientWidth ? document.documentElement.clientWidth : screen.width; - var height = window.innerHeight ? window.innerHeight : document.documentElement.clientHeight ? document.documentElement.clientHeight : screen.height; - - var left = ((width / 2) - (w / 2)) + dualScreenLeft; - var top = ((height / 2) - (h / 2)) + dualScreenTop; - var newWindow = window.open(this._getIframeURL(), M.util.get_string("browse_and_embed", COMPONENTNAME), 'scrollbars=no, width=' + w + ', height=' + h + ', top=' + top + ', left=' + left); - - window.buttonJs = this; - - if (window.focus) { - newWindow.focus(); - } - - this.embedWindow = newWindow; - }, - - _getIframeURL: function() { - - var args = Y.mix({ - elementid: this.get('host').get('elementid'), - contextid: this.get('contextid'), - height: '600px', - width: '1112px' - }, - this.get('area')); - return M.cfg.wwwroot + '/lib/editor/atto/plugins/kalturamedia/ltibrowse_container.php?' + - Y.QueryString.stringify(args); - }, - - _getCourseId: function() { - var courseId; - var bodyClasses = document.getElementsByTagName('body')[0].className; - var classes = bodyClasses.split(' '); - for(i in classes) - { - if(classes[i].indexOf('course-') > -1) - { - var parts = classes[i].split('-'); - courseId = parts[1]; - } - } - - return courseId; - }, - - _removeProtocolFromUrl: function(fullUrl) { - return fullUrl.replace(/^https?:\/\//,''); - }, - - embedItem: function(what, data) { - var embedInfo = {}; - for(param in data) - { - var isEmbedInfo = param.split('-'); - if(isEmbedInfo[0] == 'embedinfo') - { - embedInfo[isEmbedInfo[1]] = data[param]; - } - } - - var sourceUrl = embedInfo.url; - var url = this._removeProtocolFromUrl(sourceUrl); - var parser = document.createElement('a'); - parser.href = sourceUrl; - url += parser.search; - - var content = 'tinymce-kalturamedia-embed||'+embedInfo.title+'||'+embedInfo.width+'||'+embedInfo.height+''; - - host = this.get('host'); - host.setSelection(this._currentSelection); - host.insertContentAtFocusPoint(content); - this.markUpdated(); - this.embedWindow.close(); - } - - } , { - ATTRS: { - /** - * The contextid to use when generating this preview. - * - * @attribute contextid - * @type String - */ - contextid: { - value: null - }, - - /** - * The KAF URI, as configured in Kaltura's plugin settings. - */ - kafuri: { - value: null - } - }} -); +// This file is part of Moodle - http://moodle.org/ +// +// Moodle is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// Moodle is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with Moodle. If not, see . + +/* + * @package atto_kalturamedia + * @copyright 2Kaltura + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + */ + +/** + * @module moodle-atto_kalturamedia-button + */ + +/** + * Atto text editor kalturamedia plugin. + * + * @namespace M.atto_kalturamedia + * @class button + * @extends M.editor_atto.EditorPlugin + */ + +var COMPONENTNAME = 'atto_kalturamedia', + CSS = { + URLINPUT: 'atto_kalturamedia_urlentry', + NAMEINPUT: 'atto_kalturamedia_nameentry' + }, + SELECTORS = { + URLINPUT: '.' + CSS.URLINPUT, + NAMEINPUT: '.' + CSS.NAMEINPUT + }; + +Y.namespace('M.atto_kalturamedia').Button = Y.Base.create('button', Y.M.editor_atto.EditorPlugin, [], { + _currentSelection: null, + embedWindow: null, + + initializer: function() { + this.addButton({ + icon: 'icon', + iconComponent: COMPONENTNAME, + callback: this._kalturamedia + }); + }, + _kalturamedia: function() { + this._currentSelection = this.get('host').getSelection(); + if (this._currentSelection === false) { + return; + } + + var w = 1200; + var h = 700; + var dualScreenLeft = window.screenLeft != undefined ? window.screenLeft : screen.left; + var dualScreenTop = window.screenTop != undefined ? window.screenTop : screen.top; + + var width = window.innerWidth ? window.innerWidth : document.documentElement.clientWidth ? document.documentElement.clientWidth : screen.width; + var height = window.innerHeight ? window.innerHeight : document.documentElement.clientHeight ? document.documentElement.clientHeight : screen.height; + + var left = ((width / 2) - (w / 2)) + dualScreenLeft; + var top = ((height / 2) - (h / 2)) + dualScreenTop; + var newWindow = window.open(this._getIframeURL(), M.util.get_string("browse_and_embed", COMPONENTNAME), 'scrollbars=no, width=' + w + ', height=' + h + ', top=' + top + ', left=' + left); + + window.buttonJs = this; + + if (window.focus) { + newWindow.focus(); + } + + this.embedWindow = newWindow; + }, + + _getIframeURL: function() { + + var args = Y.mix({ + elementid: this.get('host').get('elementid'), + contextid: this.get('contextid'), + height: '600px', + width: '1112px' + }, + this.get('area')); + return M.cfg.wwwroot + '/lib/editor/atto/plugins/kalturamedia/ltibrowse_container.php?' + + Y.QueryString.stringify(args); + }, + + _getCourseId: function() { + var courseId; + var bodyClasses = document.getElementsByTagName('body')[0].className; + var classes = bodyClasses.split(' '); + for(i in classes) + { + if(classes[i].indexOf('course-') > -1) + { + var parts = classes[i].split('-'); + courseId = parts[1]; + } + } + + return courseId; + }, + + _removeProtocolFromUrl: function(fullUrl) { + return fullUrl.replace(/^https?:\/\//,''); + }, + + embedItem: function(what, data) { + var sourceUrl = data.url; + var url = this._removeProtocolFromUrl(sourceUrl); + var parser = document.createElement('a'); + parser.href = sourceUrl; + url += parser.search; + + var content = 'tinymce-kalturamedia-embed||'+data.title+'||'+data.width+'||'+data.height+''; + + host = this.get('host'); + host.setSelection(this._currentSelection); + host.insertContentAtFocusPoint(content); + this.markUpdated(); + this.embedWindow.close(); + } + + } , { + ATTRS: { + /** + * The contextid to use when generating this preview. + * + * @attribute contextid + * @type String + */ + contextid: { + value: null + }, + + /** + * The KAF URI, as configured in Kaltura's plugin settings. + */ + kafuri: { + value: null + } + }} +); }, '@VERSION@', {"requires": ["moodle-editor_atto-plugin"]}); diff --git a/lib/editor/atto/plugins/kalturamedia/yui/src/button/js/button.js b/lib/editor/atto/plugins/kalturamedia/yui/src/button/js/button.js index ff3cb25d3df32..146ce93438101 100644 --- a/lib/editor/atto/plugins/kalturamedia/yui/src/button/js/button.js +++ b/lib/editor/atto/plugins/kalturamedia/yui/src/button/js/button.js @@ -42,119 +42,109 @@ var COMPONENTNAME = 'atto_kalturamedia', }; Y.namespace('M.atto_kalturamedia').Button = Y.Base.create('button', Y.M.editor_atto.EditorPlugin, [], { - _currentSelection: null, - embedWindow: null, - - initializer: function() { - this.addButton({ - icon: 'icon', - iconComponent: COMPONENTNAME, - callback: this._kalturamedia - }); - }, - _kalturamedia: function() { - this._currentSelection = this.get('host').getSelection(); - if (this._currentSelection === false) { - return; - } + _currentSelection: null, + embedWindow: null, + + initializer: function() { + this.addButton({ + icon: 'icon', + iconComponent: COMPONENTNAME, + callback: this._kalturamedia + }); + }, + _kalturamedia: function() { + this._currentSelection = this.get('host').getSelection(); + if (this._currentSelection === false) { + return; + } - var w = 1200; - var h = 700; - var dualScreenLeft = window.screenLeft != undefined ? window.screenLeft : screen.left; - var dualScreenTop = window.screenTop != undefined ? window.screenTop : screen.top; + var w = 1200; + var h = 700; + var dualScreenLeft = window.screenLeft != undefined ? window.screenLeft : screen.left; + var dualScreenTop = window.screenTop != undefined ? window.screenTop : screen.top; - var width = window.innerWidth ? window.innerWidth : document.documentElement.clientWidth ? document.documentElement.clientWidth : screen.width; - var height = window.innerHeight ? window.innerHeight : document.documentElement.clientHeight ? document.documentElement.clientHeight : screen.height; + var width = window.innerWidth ? window.innerWidth : document.documentElement.clientWidth ? document.documentElement.clientWidth : screen.width; + var height = window.innerHeight ? window.innerHeight : document.documentElement.clientHeight ? document.documentElement.clientHeight : screen.height; - var left = ((width / 2) - (w / 2)) + dualScreenLeft; - var top = ((height / 2) - (h / 2)) + dualScreenTop; - var newWindow = window.open(this._getIframeURL(), M.util.get_string("browse_and_embed", COMPONENTNAME), 'scrollbars=no, width=' + w + ', height=' + h + ', top=' + top + ', left=' + left); + var left = ((width / 2) - (w / 2)) + dualScreenLeft; + var top = ((height / 2) - (h / 2)) + dualScreenTop; + var newWindow = window.open(this._getIframeURL(), M.util.get_string("browse_and_embed", COMPONENTNAME), 'scrollbars=no, width=' + w + ', height=' + h + ', top=' + top + ', left=' + left); - window.buttonJs = this; + window.buttonJs = this; - if (window.focus) { - newWindow.focus(); - } + if (window.focus) { + newWindow.focus(); + } - this.embedWindow = newWindow; - }, + this.embedWindow = newWindow; + }, - _getIframeURL: function() { + _getIframeURL: function() { - var args = Y.mix({ + var args = Y.mix({ elementid: this.get('host').get('elementid'), contextid: this.get('contextid'), height: '600px', width: '1112px' }, this.get('area')); - return M.cfg.wwwroot + '/lib/editor/atto/plugins/kalturamedia/ltibrowse_container.php?' + + return M.cfg.wwwroot + '/lib/editor/atto/plugins/kalturamedia/ltibrowse_container.php?' + Y.QueryString.stringify(args); - }, + }, - _getCourseId: function() { - var courseId; - var bodyClasses = document.getElementsByTagName('body')[0].className; - var classes = bodyClasses.split(' '); - for(i in classes) - { - if(classes[i].indexOf('course-') > -1) + _getCourseId: function() { + var courseId; + var bodyClasses = document.getElementsByTagName('body')[0].className; + var classes = bodyClasses.split(' '); + for(i in classes) + { + if(classes[i].indexOf('course-') > -1) { var parts = classes[i].split('-'); courseId = parts[1]; } - } + } - return courseId; - }, + return courseId; + }, - _removeProtocolFromUrl: function(fullUrl) { - return fullUrl.replace(/^https?:\/\//,''); - }, + _removeProtocolFromUrl: function(fullUrl) { + return fullUrl.replace(/^https?:\/\//,''); + }, - embedItem: function(what, data) { - var embedInfo = {}; - for(param in data) - { - var isEmbedInfo = param.split('-'); - if(isEmbedInfo[0] == 'embedinfo') - { - embedInfo[isEmbedInfo[1]] = data[param]; - } - } + embedItem: function(what, data) { + var sourceUrl = data.url; + var url = this._removeProtocolFromUrl(sourceUrl); + var parser = document.createElement('a'); + parser.href = sourceUrl; + url += parser.search; - var sourceUrl = embedInfo.url; - var url = this._removeProtocolFromUrl(sourceUrl); - var parser = document.createElement('a'); - parser.href = sourceUrl; - url += parser.search; - - var content = 'tinymce-kalturamedia-embed||'+embedInfo.title+'||'+embedInfo.width+'||'+embedInfo.height+''; - - host = this.get('host'); - host.setSelection(this._currentSelection); - host.insertContentAtFocusPoint(content); - this.markUpdated(); - this.embedWindow.close(); - } - -} , { - ATTRS: { - /** - * The contextid to use when generating this preview. - * - * @attribute contextid - * @type String - */ - contextid: { - value: null - }, + var content = 'tinymce-kalturamedia-embed||'+data.title+'||'+data.width+'||'+data.height+''; - /** - * The KAF URI, as configured in Kaltura's plugin settings. - */ - kafuri: { - value: null + host = this.get('host'); + host.setSelection(this._currentSelection); + host.insertContentAtFocusPoint(content); + this.markUpdated(); + this.embedWindow.close(); } - }} + + } , { + ATTRS: { + /** + * The contextid to use when generating this preview. + * + * @attribute contextid + * @type String + */ + contextid: { + value: null + }, + + /** + * The KAF URI, as configured in Kaltura's plugin settings. + */ + kafuri: { + value: null + } + }} ); diff --git a/local/kaltura/attobsepreview.php b/local/kaltura/attobsepreview.php deleted file mode 100644 index f437b32127c2c..0000000000000 --- a/local/kaltura/attobsepreview.php +++ /dev/null @@ -1,52 +0,0 @@ -. - -/** - * Kaltura LTI service script used receive data sent from the Kaltura content provider. - * - * @package local_kaltura - * @author Remote-Learner.net Inc - * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later - * @copyright (C) 2014 Remote Learner.net Inc http://www.remote-learner.net - */ - -$PAGE->set_pagelayout('embedded'); -echo $OUTPUT->header(); -$playurl = urldecode($url); - -echo html_writer::tag('h2', get_string('preview', 'local_kaltura')); -?> -
    - diff --git a/local/kaltura/service.php b/local/kaltura/service.php index 24664df459940..eab351b446996 100644 --- a/local/kaltura/service.php +++ b/local/kaltura/service.php @@ -103,7 +103,7 @@ ); if($editor == 'atto') { - require_once('attobsepreview.php'); + require_once('attoembed.php'); } else { From ecbd9b3e99180af82ef621a46a3b797e9cdd12c7 Mon Sep 17 00:00:00 2001 From: Noy Cohen Date: Tue, 31 Dec 2019 15:19:32 +0200 Subject: [PATCH 237/326] KMS-20194 remove preview page before embed in tinymce editor --- .../kalturamedia/tinymce/ltibrowse.php | 1 - .../plugins/kalturamedia/tinymce/renderer.php | 17 +- local/kaltura/service.php | 3 +- .../moodle-local_kaltura-ltiservice-debug.js | 245 ++++++++-------- .../moodle-local_kaltura-ltiservice-min.js | 2 +- .../moodle-local_kaltura-ltiservice.js | 245 ++++++++-------- ...dle-local_kaltura-ltitinymcepanel-debug.js | 265 +++++++++--------- ...oodle-local_kaltura-ltitinymcepanel-min.js | 2 +- .../moodle-local_kaltura-ltitinymcepanel.js | 265 +++++++++--------- .../yui/src/ltiservice/js/ltiservice.js | 5 + .../src/ltitinymcepanel/js/ltitinymcepanel.js | 161 +++++------ 11 files changed, 592 insertions(+), 619 deletions(-) diff --git a/lib/editor/tinymce/plugins/kalturamedia/tinymce/ltibrowse.php b/lib/editor/tinymce/plugins/kalturamedia/tinymce/ltibrowse.php index e008d40e80720..e21dd8f9d31ef 100644 --- a/lib/editor/tinymce/plugins/kalturamedia/tinymce/ltibrowse.php +++ b/lib/editor/tinymce/plugins/kalturamedia/tinymce/ltibrowse.php @@ -58,7 +58,6 @@ $url = new moodle_url('/lib/editor/tinymce/plugins/kalturamedia/lti_launch.php', $urlparams); $params = array( - 'insertbtnid' => TINMCE_KALTURAMEDIA_INSERT_BUTTON_ID, 'ltilaunchurl' => $url->out(), 'objecttagheight' => TINMCE_KALTURAMEDIA_OBJECT_TAG_HEIGHT, 'objecttagid' => TINMCE_KALTURAMEDIA_OBJECT_TAG_ID, diff --git a/lib/editor/tinymce/plugins/kalturamedia/tinymce/renderer.php b/lib/editor/tinymce/plugins/kalturamedia/tinymce/renderer.php index 6e2859b3cc707..5fc2bf220f59e 100644 --- a/lib/editor/tinymce/plugins/kalturamedia/tinymce/renderer.php +++ b/lib/editor/tinymce/plugins/kalturamedia/tinymce/renderer.php @@ -22,8 +22,6 @@ * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later * @copyright (C) 2014 Remote Learner.net Inc http://www.remote-learner.net */ - -define('TINMCE_KALTURAMEDIA_INSERT_BUTTON_ID', 'insert'); define('TINMCE_KALTURAMEDIA_OBJECT_TAG_ID', 'objecttagcontainer'); define('TINMCE_KALTURAMEDIA_PREVIEW_IFRAME_TAG_ID', 'video_preview_frame'); define('TINMCE_KALTURAMEDIA_OBJECT_TAG_HEIGHT', '500'); @@ -48,19 +46,6 @@ function tinymce_kalturamedia_preview_embed_form() { $ltilaunchcontainer = html_writer::tag('div', '', array('id' => TINMCE_KALTURAMEDIA_OBJECT_TAG_ID)); $previewcontainer = html_writer::tag('div', '', array('id' => TINMCE_KALTURAMEDIA_PREVIEW_IFRAME_TAG_ID)); - // Create insert button. - $params = array( - 'type' => 'submit', - 'id' => TINMCE_KALTURAMEDIA_INSERT_BUTTON_ID, - 'name' => TINMCE_KALTURAMEDIA_INSERT_BUTTON_ID, - // Using the language string from the local plug-in. - 'value' => get_string('insertbtn', 'local_kaltura'), - 'class' => 'updateButton', - 'style' => 'display: none' - ); - $insertbutton = html_writer::empty_tag('input', $params); - $insertbuttondiv = html_writer::tag('div', $insertbutton, array('style' => 'float: left')); - // Create cancel button. $param = array( 'type' => 'submit', @@ -73,7 +58,7 @@ function tinymce_kalturamedia_preview_embed_form() { $cancelbutton = html_writer::empty_tag('input', $param); $cancelbuttondiv = html_writer::tag('div', $cancelbutton, array('style' => 'float: right')); - $buttonscontainer = html_writer::tag('div', $insertbuttondiv.$cancelbuttondiv, array('class' => 'mceActionPanel')); + $buttonscontainer = html_writer::tag('div', $cancelbuttondiv, array('class' => 'mceActionPanel')); // This element is used so that the ltiservice.js can simulate a 'click' event. This tells the plug-in that the user has choosen a video to embed on the page // and it will enable the insert button. diff --git a/local/kaltura/service.php b/local/kaltura/service.php index eab351b446996..43f2e51c3d908 100644 --- a/local/kaltura/service.php +++ b/local/kaltura/service.php @@ -108,7 +108,8 @@ else { $PAGE->requires->yui_module('moodle-local_kaltura-ltiservice', 'M.local_kaltura.init', array($params)); + $PAGE->set_pagelayout('embedded'); echo $OUTPUT->header(); echo $OUTPUT->footer(); -} \ No newline at end of file +} diff --git a/local/kaltura/yui/build/moodle-local_kaltura-ltiservice/moodle-local_kaltura-ltiservice-debug.js b/local/kaltura/yui/build/moodle-local_kaltura-ltiservice/moodle-local_kaltura-ltiservice-debug.js index c0a22b6b09790..16da69c2f1921 100644 --- a/local/kaltura/yui/build/moodle-local_kaltura-ltiservice/moodle-local_kaltura-ltiservice-debug.js +++ b/local/kaltura/yui/build/moodle-local_kaltura-ltiservice/moodle-local_kaltura-ltiservice-debug.js @@ -1,125 +1,130 @@ YUI.add('moodle-local_kaltura-ltiservice', function (Y, NAME) { -// This file is part of Moodle - http://moodle.org/ -// -// Moodle is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// Moodle is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with Moodle. If not, see . - -/** - * YUI module for displaying an LTI launch within a YUI panel. - * - * @package local_kaltura - * @author Remote-Learner.net Inc - * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later - * @copyright (C) 2014 Remote Learner.net Inc http://www.remote-learner.net - */ - - /** - * This method calls the base class constructor - * @method LTISERVICE - */ -var LTISERVICE = function() { - LTISERVICE.superclass.constructor.apply(this, arguments); -}; - -Y.extend(LTISERVICE, Y.Base, { - /** - * Init function for triggering a custom event and setting attributes. Also checks whether optional elements exist in the parent window. - * @property params - * @type {Object} - */ - init : function(params) { - var documentElement = window.opener ? window.opener.parent.document : window.parent.document; - if (documentElement.getElementById('video_title')) { - Y.one(documentElement.getElementById('video_title')).setAttribute('value', params.title); - } - - if (documentElement.getElementById('entry_id')) { - Y.one(documentElement.getElementById('entry_id')).setAttribute('value', params.entryid); - } - - if (documentElement.getElementById('height')) { - Y.one(documentElement.getElementById('height')).setAttribute('value', params.height); - } - - if (documentElement.getElementById('width')) { - Y.one(documentElement.getElementById('width')).setAttribute('value', params.width); - } - - if (documentElement.getElementById('uiconf_id')) { - Y.one(documentElement.getElementById('uiconf_id')).setAttribute('value', '1'); - } - - if (documentElement.getElementById('widescreen')) { - Y.one(documentElement.getElementById('widescreen')).setAttribute('value', '1'); - } - - if (documentElement.getElementById('video_preview_frame')) { - Y.one(documentElement.getElementById('video_preview_frame')).setAttribute('src', params.previewltilauncher); - } else if (documentElement.getElementById('contentframe')) { - Y.one(documentElement.getElementById('contentframe')).setAttribute('src', decodeURIComponent(params.iframeurl)); - Y.one(documentElement.getElementById('contentframe')).setStyle('width', params.width + 'px'); - Y.one(documentElement.getElementById('contentframe')).setStyle('height', params.height + 'px'); - } - - // This element must exist. - Y.one(documentElement.getElementById('source')).setAttribute('value', decodeURIComponent(params.iframeurl)); - - if (documentElement.getElementById('metadata')) { - Y.one(documentElement.getElementById('metadata')).setAttribute('value', params.metadata); - } - - if (documentElement.getElementById('closeltipanel')) { - Y.one(documentElement.getElementById('closeltipanel')).simulate('click'); - } - - documentElement.body.dispatchEvent(documentElement.body.entrySelectedEvent); - } -}, -{ - NAME : 'moodle-local_kaltura-ltiservice', - ATTRS : { - iframeurl : { - value: '' - }, - width : { - value: '' - }, - height : { - value: '' - }, - entryid : { - value: '' - }, - title : { - value: '' - }, - metadata : { - value: '' - } - } - -}); -M.local_kaltura = M.local_kaltura || {}; - -/** - * Entry point for ltiservice module - * @param string params additional parameters. - * @return object the ltiservice object - */ -M.local_kaltura.init = function(params) { - return new LTISERVICE(params); -}; +// This file is part of Moodle - http://moodle.org/ +// +// Moodle is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// Moodle is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with Moodle. If not, see . + +/** + * YUI module for displaying an LTI launch within a YUI panel. + * + * @package local_kaltura + * @author Remote-Learner.net Inc + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + * @copyright (C) 2014 Remote Learner.net Inc http://www.remote-learner.net + */ + +/** + * This method calls the base class constructor + * @method LTISERVICE + */ +var LTISERVICE = function() { + LTISERVICE.superclass.constructor.apply(this, arguments); +}; + +Y.extend(LTISERVICE, Y.Base, { + /** + * Init function for triggering a custom event and setting attributes. Also checks whether optional elements exist in the parent window. + * @property params + * @type {Object} + */ + init : function(params) { + var documentElement = window.opener ? window.opener.parent.document : window.parent.document; + if (documentElement.getElementById('video_title')) { + Y.one(documentElement.getElementById('video_title')).setAttribute('value', params.title); + } + + if (documentElement.getElementById('entry_id')) { + Y.one(documentElement.getElementById('entry_id')).setAttribute('value', params.entryid); + } + + if (documentElement.getElementById('height')) { + Y.one(documentElement.getElementById('height')).setAttribute('value', params.height); + } + + if (documentElement.getElementById('width')) { + Y.one(documentElement.getElementById('width')).setAttribute('value', params.width); + } + + if (documentElement.getElementById('uiconf_id')) { + Y.one(documentElement.getElementById('uiconf_id')).setAttribute('value', '1'); + } + + if (documentElement.getElementById('widescreen')) { + Y.one(documentElement.getElementById('widescreen')).setAttribute('value', '1'); + } + + if (documentElement.getElementById('video_preview_frame')) { + Y.one(documentElement.getElementById('video_preview_frame')).setAttribute('src', params.previewltilauncher); + } else if (documentElement.getElementById('contentframe')) { + Y.one(documentElement.getElementById('contentframe')).setAttribute('src', decodeURIComponent(params.iframeurl)); + Y.one(documentElement.getElementById('contentframe')).setStyle('width', params.width + 'px'); + Y.one(documentElement.getElementById('contentframe')).setStyle('height', params.height + 'px'); + } + + // This element must exist. + Y.one(documentElement.getElementById('source')).setAttribute('value', decodeURIComponent(params.iframeurl)); + + if (documentElement.getElementById('metadata')) { + Y.one(documentElement.getElementById('metadata')).setAttribute('value', params.metadata); + } + + if (window.parent.insertMedia) { + window.parent.insertMedia(); + return; + } + + if (documentElement.getElementById('closeltipanel')) { + Y.one(documentElement.getElementById('closeltipanel')).simulate('click'); + } + + documentElement.body.dispatchEvent(documentElement.body.entrySelectedEvent); + } + }, + { + NAME : 'moodle-local_kaltura-ltiservice', + ATTRS : { + iframeurl : { + value: '' + }, + width : { + value: '' + }, + height : { + value: '' + }, + entryid : { + value: '' + }, + title : { + value: '' + }, + metadata : { + value: '' + } + } + + }); +M.local_kaltura = M.local_kaltura || {}; + +/** + * Entry point for ltiservice module + * @param string params additional parameters. + * @return object the ltiservice object + */ +M.local_kaltura.init = function(params) { + return new LTISERVICE(params); +}; }, '@VERSION@', {"requires": ["base", "node", "node-event-simulate"]}); diff --git a/local/kaltura/yui/build/moodle-local_kaltura-ltiservice/moodle-local_kaltura-ltiservice-min.js b/local/kaltura/yui/build/moodle-local_kaltura-ltiservice/moodle-local_kaltura-ltiservice-min.js index 7de72c43ac503..387c0016e21fe 100644 --- a/local/kaltura/yui/build/moodle-local_kaltura-ltiservice/moodle-local_kaltura-ltiservice-min.js +++ b/local/kaltura/yui/build/moodle-local_kaltura-ltiservice/moodle-local_kaltura-ltiservice-min.js @@ -1 +1 @@ -YUI.add("moodle-local_kaltura-ltiservice",function(e,t){var n=function(){n.superclass.constructor.apply(this,arguments)};e.extend(n,e.Base,{init:function(t){var n=window.opener?window.opener.parent.document:window.parent.document;n.getElementById("video_title")&&e.one(n.getElementById("video_title")).setAttribute("value",t.title),n.getElementById("entry_id")&&e.one(n.getElementById("entry_id")).setAttribute("value",t.entryid),n.getElementById("height")&&e.one(n.getElementById("height")).setAttribute("value",t.height),n.getElementById("width")&&e.one(n.getElementById("width")).setAttribute("value",t.width),n.getElementById("uiconf_id")&&e.one(n.getElementById("uiconf_id")).setAttribute("value","1"),n.getElementById("widescreen")&&e.one(n.getElementById("widescreen")).setAttribute("value","1"),n.getElementById("video_preview_frame")?e.one(n.getElementById("video_preview_frame")).setAttribute("src",t.previewltilauncher):n.getElementById("contentframe")&&(e.one(n.getElementById("contentframe")).setAttribute("src",decodeURIComponent(t.iframeurl)),e.one(n.getElementById("contentframe")).setStyle("width",t.width+"px"),e.one(n.getElementById("contentframe")).setStyle("height",t.height+"px")),e.one(n.getElementById("source")).setAttribute("value",decodeURIComponent(t.iframeurl)),n.getElementById("metadata")&&e.one(n.getElementById("metadata")).setAttribute("value",t.metadata),n.getElementById("closeltipanel")&&e.one(n.getElementById("closeltipanel")).simulate("click"),n.body.dispatchEvent(n.body.entrySelectedEvent)}},{NAME:"moodle-local_kaltura-ltiservice",ATTRS:{iframeurl:{value:""},width:{value:""},height:{value:""},entryid:{value:""},title:{value:""},metadata:{value:""}}}),M.local_kaltura=M.local_kaltura||{},M.local_kaltura.init=function(e){return new n(e)}},"@VERSION@",{requires:["base","node","node-event-simulate"]}); \ No newline at end of file +YUI.add("moodle-local_kaltura-ltiservice",function(e,t){var n=function(){n.superclass.constructor.apply(this,arguments)};e.extend(n,e.Base,{init:function(t){var n=window.opener?window.opener.parent.document:window.parent.document;n.getElementById("video_title")&&e.one(n.getElementById("video_title")).setAttribute("value",t.title),n.getElementById("entry_id")&&e.one(n.getElementById("entry_id")).setAttribute("value",t.entryid),n.getElementById("height")&&e.one(n.getElementById("height")).setAttribute("value",t.height),n.getElementById("width")&&e.one(n.getElementById("width")).setAttribute("value",t.width),n.getElementById("uiconf_id")&&e.one(n.getElementById("uiconf_id")).setAttribute("value","1"),n.getElementById("widescreen")&&e.one(n.getElementById("widescreen")).setAttribute("value","1"),n.getElementById("video_preview_frame")?e.one(n.getElementById("video_preview_frame")).setAttribute("src",t.previewltilauncher):n.getElementById("contentframe")&&(e.one(n.getElementById("contentframe")).setAttribute("src",decodeURIComponent(t.iframeurl)),e.one(n.getElementById("contentframe")).setStyle("width",t.width+"px"),e.one(n.getElementById("contentframe")).setStyle("height",t.height+"px")),e.one(n.getElementById("source")).setAttribute("value",decodeURIComponent(t.iframeurl)),n.getElementById("metadata")&&e.one(n.getElementById("metadata")).setAttribute("value",t.metadata);if(window.parent.insertMedia){window.parent.insertMedia();return}n.getElementById("closeltipanel")&&e.one(n.getElementById("closeltipanel")).simulate("click"),n.body.dispatchEvent(n.body.entrySelectedEvent)}},{NAME:"moodle-local_kaltura-ltiservice",ATTRS:{iframeurl:{value:""},width:{value:""},height:{value:""},entryid:{value:""},title:{value:""},metadata:{value:""}}}),M.local_kaltura=M.local_kaltura||{},M.local_kaltura.init=function(e){return new n(e)}},"@VERSION@",{requires:["base","node","node-event-simulate"]}); diff --git a/local/kaltura/yui/build/moodle-local_kaltura-ltiservice/moodle-local_kaltura-ltiservice.js b/local/kaltura/yui/build/moodle-local_kaltura-ltiservice/moodle-local_kaltura-ltiservice.js index c0a22b6b09790..16da69c2f1921 100644 --- a/local/kaltura/yui/build/moodle-local_kaltura-ltiservice/moodle-local_kaltura-ltiservice.js +++ b/local/kaltura/yui/build/moodle-local_kaltura-ltiservice/moodle-local_kaltura-ltiservice.js @@ -1,125 +1,130 @@ YUI.add('moodle-local_kaltura-ltiservice', function (Y, NAME) { -// This file is part of Moodle - http://moodle.org/ -// -// Moodle is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// Moodle is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with Moodle. If not, see . - -/** - * YUI module for displaying an LTI launch within a YUI panel. - * - * @package local_kaltura - * @author Remote-Learner.net Inc - * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later - * @copyright (C) 2014 Remote Learner.net Inc http://www.remote-learner.net - */ - - /** - * This method calls the base class constructor - * @method LTISERVICE - */ -var LTISERVICE = function() { - LTISERVICE.superclass.constructor.apply(this, arguments); -}; - -Y.extend(LTISERVICE, Y.Base, { - /** - * Init function for triggering a custom event and setting attributes. Also checks whether optional elements exist in the parent window. - * @property params - * @type {Object} - */ - init : function(params) { - var documentElement = window.opener ? window.opener.parent.document : window.parent.document; - if (documentElement.getElementById('video_title')) { - Y.one(documentElement.getElementById('video_title')).setAttribute('value', params.title); - } - - if (documentElement.getElementById('entry_id')) { - Y.one(documentElement.getElementById('entry_id')).setAttribute('value', params.entryid); - } - - if (documentElement.getElementById('height')) { - Y.one(documentElement.getElementById('height')).setAttribute('value', params.height); - } - - if (documentElement.getElementById('width')) { - Y.one(documentElement.getElementById('width')).setAttribute('value', params.width); - } - - if (documentElement.getElementById('uiconf_id')) { - Y.one(documentElement.getElementById('uiconf_id')).setAttribute('value', '1'); - } - - if (documentElement.getElementById('widescreen')) { - Y.one(documentElement.getElementById('widescreen')).setAttribute('value', '1'); - } - - if (documentElement.getElementById('video_preview_frame')) { - Y.one(documentElement.getElementById('video_preview_frame')).setAttribute('src', params.previewltilauncher); - } else if (documentElement.getElementById('contentframe')) { - Y.one(documentElement.getElementById('contentframe')).setAttribute('src', decodeURIComponent(params.iframeurl)); - Y.one(documentElement.getElementById('contentframe')).setStyle('width', params.width + 'px'); - Y.one(documentElement.getElementById('contentframe')).setStyle('height', params.height + 'px'); - } - - // This element must exist. - Y.one(documentElement.getElementById('source')).setAttribute('value', decodeURIComponent(params.iframeurl)); - - if (documentElement.getElementById('metadata')) { - Y.one(documentElement.getElementById('metadata')).setAttribute('value', params.metadata); - } - - if (documentElement.getElementById('closeltipanel')) { - Y.one(documentElement.getElementById('closeltipanel')).simulate('click'); - } - - documentElement.body.dispatchEvent(documentElement.body.entrySelectedEvent); - } -}, -{ - NAME : 'moodle-local_kaltura-ltiservice', - ATTRS : { - iframeurl : { - value: '' - }, - width : { - value: '' - }, - height : { - value: '' - }, - entryid : { - value: '' - }, - title : { - value: '' - }, - metadata : { - value: '' - } - } - -}); -M.local_kaltura = M.local_kaltura || {}; - -/** - * Entry point for ltiservice module - * @param string params additional parameters. - * @return object the ltiservice object - */ -M.local_kaltura.init = function(params) { - return new LTISERVICE(params); -}; +// This file is part of Moodle - http://moodle.org/ +// +// Moodle is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// Moodle is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with Moodle. If not, see . + +/** + * YUI module for displaying an LTI launch within a YUI panel. + * + * @package local_kaltura + * @author Remote-Learner.net Inc + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + * @copyright (C) 2014 Remote Learner.net Inc http://www.remote-learner.net + */ + +/** + * This method calls the base class constructor + * @method LTISERVICE + */ +var LTISERVICE = function() { + LTISERVICE.superclass.constructor.apply(this, arguments); +}; + +Y.extend(LTISERVICE, Y.Base, { + /** + * Init function for triggering a custom event and setting attributes. Also checks whether optional elements exist in the parent window. + * @property params + * @type {Object} + */ + init : function(params) { + var documentElement = window.opener ? window.opener.parent.document : window.parent.document; + if (documentElement.getElementById('video_title')) { + Y.one(documentElement.getElementById('video_title')).setAttribute('value', params.title); + } + + if (documentElement.getElementById('entry_id')) { + Y.one(documentElement.getElementById('entry_id')).setAttribute('value', params.entryid); + } + + if (documentElement.getElementById('height')) { + Y.one(documentElement.getElementById('height')).setAttribute('value', params.height); + } + + if (documentElement.getElementById('width')) { + Y.one(documentElement.getElementById('width')).setAttribute('value', params.width); + } + + if (documentElement.getElementById('uiconf_id')) { + Y.one(documentElement.getElementById('uiconf_id')).setAttribute('value', '1'); + } + + if (documentElement.getElementById('widescreen')) { + Y.one(documentElement.getElementById('widescreen')).setAttribute('value', '1'); + } + + if (documentElement.getElementById('video_preview_frame')) { + Y.one(documentElement.getElementById('video_preview_frame')).setAttribute('src', params.previewltilauncher); + } else if (documentElement.getElementById('contentframe')) { + Y.one(documentElement.getElementById('contentframe')).setAttribute('src', decodeURIComponent(params.iframeurl)); + Y.one(documentElement.getElementById('contentframe')).setStyle('width', params.width + 'px'); + Y.one(documentElement.getElementById('contentframe')).setStyle('height', params.height + 'px'); + } + + // This element must exist. + Y.one(documentElement.getElementById('source')).setAttribute('value', decodeURIComponent(params.iframeurl)); + + if (documentElement.getElementById('metadata')) { + Y.one(documentElement.getElementById('metadata')).setAttribute('value', params.metadata); + } + + if (window.parent.insertMedia) { + window.parent.insertMedia(); + return; + } + + if (documentElement.getElementById('closeltipanel')) { + Y.one(documentElement.getElementById('closeltipanel')).simulate('click'); + } + + documentElement.body.dispatchEvent(documentElement.body.entrySelectedEvent); + } + }, + { + NAME : 'moodle-local_kaltura-ltiservice', + ATTRS : { + iframeurl : { + value: '' + }, + width : { + value: '' + }, + height : { + value: '' + }, + entryid : { + value: '' + }, + title : { + value: '' + }, + metadata : { + value: '' + } + } + + }); +M.local_kaltura = M.local_kaltura || {}; + +/** + * Entry point for ltiservice module + * @param string params additional parameters. + * @return object the ltiservice object + */ +M.local_kaltura.init = function(params) { + return new LTISERVICE(params); +}; }, '@VERSION@', {"requires": ["base", "node", "node-event-simulate"]}); diff --git a/local/kaltura/yui/build/moodle-local_kaltura-ltitinymcepanel/moodle-local_kaltura-ltitinymcepanel-debug.js b/local/kaltura/yui/build/moodle-local_kaltura-ltitinymcepanel/moodle-local_kaltura-ltitinymcepanel-debug.js index 7a021457d02bb..e03afa6eaaaf0 100644 --- a/local/kaltura/yui/build/moodle-local_kaltura-ltitinymcepanel/moodle-local_kaltura-ltitinymcepanel-debug.js +++ b/local/kaltura/yui/build/moodle-local_kaltura-ltitinymcepanel/moodle-local_kaltura-ltitinymcepanel-debug.js @@ -1,142 +1,133 @@ YUI.add('moodle-local_kaltura-ltitinymcepanel', function (Y, NAME) { -// This file is part of Moodle - http://moodle.org/ -// -// Moodle is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// Moodle is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with Moodle. If not, see . - -/** - * YUI module for displaying an LTI launch within a YUI panel. - * - * @package local_kaltura - * @author Remote-Learner.net Inc - * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later - * @copyright (C) 2014 Remote Learner.net Inc http://www.remote-learner.net - */ - - /** - * This method calls the base class constructor - * @method LTITINYMCEPANEL - */ -var LTITINYMCEPANEL = function() { - LTITINYMCEPANEL.superclass.constructor.apply(this, arguments); -}; - -Y.extend(LTITINYMCEPANEL, Y.Base, { - /** - * The context id the editor was launched in. - * @property contextid - * @type {Integer} - * @default null - */ - contextid: 0, - - /** - * Init function for the checkboxselection module - * @property {Object} params Data to help initialize the YUI module. - */ - init : function(params) { - // Check to make sure parameters are initialized. - if ('' === params.insertbtnid || '' === params.ltilaunchurl || '' === params.objecttagheight || '' === params.objecttagid || '' === params.previewiframeid) { - alert('Some parameters were not initialized.'); - return; - } - - // Initialize the the browse when the window is initially rendered. - this.load_lti_content(params.ltilaunchurl, params.objecttagid, params.objecttagheight); - - // Disable the insert button since nothing has been selected yet. - Y.one('#'+params.insertbtnid).set('disabled', true); - - // Listen to simulated click event send from local/kaltura/service.php - Y.one('#closeltipanel').on('click', this.user_selected_video_callback, this, params.insertbtnid, params.objecttagid, params.previewiframeid, params.objecttagheight); - - if (null !== Y.one('#page-footer')) { - Y.one('#page-footer').setStyle('display', 'none'); - } - }, - - /** - * A funciton to load the LTI content. This is called when the YUI module is first initialized. - * @property {String} url LTI launch URL. - * @property {String} iframeid iframe tag id. - * @property {String} iframeheight iframe tag height. - */ - load_lti_content : function(url, iframeid, iframeheight) { - if (0 === this.contextid) { - this.contextid = Y.one('#lti_launch_context_id').get('value'); - } - - var content = ''; - Y.one('#'+iframeid).setContent(content); - }, - - /** - * This function serves as a call back method for when the closeltipanel div has been clicked. It means that the user has - * selected a video for embedding into the TinyMCE edotor. Enabling the insert button, removing the contents LTI launch element and - * adding content to the media preview element. - * @property {Object} e Event object. - * @property {String} insertbtnid Insert button id. - * @property {String} objecttagid Object tag id. - * @property {String} previewiframeid Preview iframe tag id. - * @property {String} height Height of the iframe. - */ - user_selected_video_callback : function(e, insertbtnid, objecttagid, previewiframeid, height) { - Y.one('#'+insertbtnid).setStyle('display', 'inline'); - Y.one('#'+insertbtnid).set('disabled', false); - Y.one('#'+objecttagid).setContent(''); - - var center = Y.Node.create('
    '); - var iframe = Y.Node.create(''); - iframe.setAttribute('allowfullscreen', ''); - iframe.setAttribute('width', Y.one('#width').get('value')+'px'); - iframe.setAttribute('height', height+'px'); - iframe.setAttribute('src', Y.one('#video_preview_frame').getAttribute('src')); - - center.append(iframe); - Y.one('#'+previewiframeid).append(center); - } -}, -{ - NAME : 'moodle-local_kaltura-ltitinymcepanel', - ATTRS : { - insertbtnid : { - value : '' - }, - ltilaunchurl : { - value : '' - }, - objecttagheight : { - value : '' - }, - objecttagid : { - value : '' - }, - previewiframeid : { - value : '' - } - } -}); -M.local_kaltura = M.local_kaltura || {}; - -/** - * Entry point for ltipanel module - * @param {Object} params Additional parameters. - * @return {Object} the ltipanel object - */ -M.local_kaltura.init = function(params) { - return new LTITINYMCEPANEL(params); -}; +// This file is part of Moodle - http://moodle.org/ +// +// Moodle is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// Moodle is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with Moodle. If not, see . + +/** + * YUI module for displaying an LTI launch within a YUI panel. + * + * @package local_kaltura + * @author Remote-Learner.net Inc + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + * @copyright (C) 2014 Remote Learner.net Inc http://www.remote-learner.net + */ + +/** + * This method calls the base class constructor + * @method LTITINYMCEPANEL + */ +var LTITINYMCEPANEL = function() { + LTITINYMCEPANEL.superclass.constructor.apply(this, arguments); +}; + +Y.extend(LTITINYMCEPANEL, Y.Base, { + /** + * The context id the editor was launched in. + * @property contextid + * @type {Integer} + * @default null + */ + contextid: 0, + + /** + * Init function for the checkboxselection module + * @property {Object} params Data to help initialize the YUI module. + */ + init : function(params) { + // Check to make sure parameters are initialized. + if ('' === params.ltilaunchurl || '' === params.objecttagheight || '' === params.objecttagid || '' === params.previewiframeid) { + alert('Some parameters were not initialized.'); + return; + } + + // Initialize the the browse when the window is initially rendered. + this.load_lti_content(params.ltilaunchurl, params.objecttagid, params.objecttagheight); + + // Listen to simulated click event send from local/kaltura/service.php + Y.one('#closeltipanel').on('click', this.user_selected_video_callback, this, params.objecttagid, params.previewiframeid, params.objecttagheight); + + if (null !== Y.one('#page-footer')) { + Y.one('#page-footer').setStyle('display', 'none'); + } + }, + + /** + * A funciton to load the LTI content. This is called when the YUI module is first initialized. + * @property {String} url LTI launch URL. + * @property {String} iframeid iframe tag id. + * @property {String} iframeheight iframe tag height. + */ + load_lti_content : function(url, iframeid, iframeheight) { + if (0 === this.contextid) { + this.contextid = Y.one('#lti_launch_context_id').get('value'); + } + + var content = ''; + Y.one('#'+iframeid).setContent(content); + }, + + /** + * This function serves as a call back method for when the closeltipanel div has been clicked. It means that the user has + * selected a video for embedding into the TinyMCE edotor. Enabling the insert button, removing the contents LTI launch element and + * adding content to the media preview element. + * @property {Object} e Event object. + * @property {String} objecttagid Object tag id. + * @property {String} previewiframeid Preview iframe tag id. + * @property {String} height Height of the iframe. + */ + user_selected_video_callback : function(e, objecttagid, previewiframeid, height) { + Y.one('#'+objecttagid).setContent(''); + + var center = Y.Node.create('
    '); + var iframe = Y.Node.create(''); + iframe.setAttribute('allowfullscreen', ''); + iframe.setAttribute('width', Y.one('#width').get('value')+'px'); + iframe.setAttribute('height', height+'px'); + iframe.setAttribute('src', Y.one('#video_preview_frame').getAttribute('src')); + + center.append(iframe); + Y.one('#'+previewiframeid).append(center); + } + }, + { + NAME : 'moodle-local_kaltura-ltitinymcepanel', + ATTRS : { + ltilaunchurl : { + value : '' + }, + objecttagheight : { + value : '' + }, + objecttagid : { + value : '' + }, + previewiframeid : { + value : '' + } + } + }); +M.local_kaltura = M.local_kaltura || {}; + +/** + * Entry point for ltipanel module + * @param {Object} params Additional parameters. + * @return {Object} the ltipanel object + */ +M.local_kaltura.init = function(params) { + return new LTITINYMCEPANEL(params); +}; }, '@VERSION@', {"requires": ["base", "node", "panel", "node-event-simulate"]}); diff --git a/local/kaltura/yui/build/moodle-local_kaltura-ltitinymcepanel/moodle-local_kaltura-ltitinymcepanel-min.js b/local/kaltura/yui/build/moodle-local_kaltura-ltitinymcepanel/moodle-local_kaltura-ltitinymcepanel-min.js index 811dd45b331f3..6da925d4ccd78 100644 --- a/local/kaltura/yui/build/moodle-local_kaltura-ltitinymcepanel/moodle-local_kaltura-ltitinymcepanel-min.js +++ b/local/kaltura/yui/build/moodle-local_kaltura-ltitinymcepanel/moodle-local_kaltura-ltitinymcepanel-min.js @@ -1 +1 @@ -YUI.add("moodle-local_kaltura-ltitinymcepanel",function(e,t){var i=function(){i.superclass.constructor.apply(this,arguments)};e.extend(i,e.Base,{contextid:0,init:function(t){return""===t.insertbtnid||""===t.ltilaunchurl||""===t.objecttagheight||""===t.objecttagid||""===t.previewiframeid?void alert("Some parameters were not initialized."):(this.load_lti_content(t.ltilaunchurl,t.objecttagid,t.objecttagheight),e.one("#"+t.insertbtnid).set("disabled",!0),e.one("#closeltipanel").on("click",this.user_selected_video_callback,this,t.insertbtnid,t.objecttagid,t.previewiframeid,t.objecttagheight),void(null!==e.one("#page-footer")&&e.one("#page-footer").setStyle("display","none")))},load_lti_content:function(t,i,n){0===this.contextid&&(this.contextid=e.one("#lti_launch_context_id").get("value"));var a='';e.one("#"+i).setContent(a)},user_selected_video_callback:function(t,i,n,a,l){e.one("#"+i).setStyle("display","inline"),e.one("#"+i).set("disabled",!1),e.one("#"+n).setContent("");var o=e.Node.create("
    "),r=e.Node.create("");r.setAttribute("allowfullscreen",""),r.setAttribute("width",e.one("#width").get("value")+"px"),r.setAttribute("height",l+"px"),r.setAttribute("src",e.one("#video_preview_frame").getAttribute("src")),o.append(r),e.one("#"+a).append(o)}},{NAME:"moodle-local_kaltura-ltitinymcepanel",ATTRS:{insertbtnid:{value:""},ltilaunchurl:{value:""},objecttagheight:{value:""},objecttagid:{value:""},previewiframeid:{value:""}}}),M.local_kaltura=M.local_kaltura||{},M.local_kaltura.init=function(e){return new i(e)}},"@VERSION@",{requires:["base","node","panel","node-event-simulate"]}); \ No newline at end of file +YUI.add("moodle-local_kaltura-ltitinymcepanel",function(e,t){var n=function(){n.superclass.constructor.apply(this,arguments)};e.extend(n,e.Base,{contextid:0,init:function(t){if(""===t.ltilaunchurl||""===t.objecttagheight||""===t.objecttagid||""===t.previewiframeid){alert("Some parameters were not initialized.");return}this.load_lti_content(t.ltilaunchurl,t.objecttagid,t.objecttagheight),e.one("#closeltipanel").on("click",this.user_selected_video_callback,this,t.objecttagid,t.previewiframeid,t.objecttagheight),null!==e.one("#page-footer")&&e.one("#page-footer").setStyle("display","none")},load_lti_content:function(t,n,r){0===this.contextid&&(this.contextid=e.one("#lti_launch_context_id").get("value"));var i='';e.one("#"+n).setContent(i)},user_selected_video_callback:function(t,n,r,i){e.one("#"+n).setContent("");var s=e.Node.create("
    "),o=e.Node.create("");o.setAttribute("allowfullscreen",""),o.setAttribute("width",e.one("#width").get("value")+"px"),o.setAttribute("height",i+"px"),o.setAttribute("src",e.one("#video_preview_frame").getAttribute("src")),s.append(o),e.one("#"+r).append(s)}},{NAME:"moodle-local_kaltura-ltitinymcepanel",ATTRS:{ltilaunchurl:{value:""},objecttagheight:{value:""},objecttagid:{value:""},previewiframeid:{value:""}}}),M.local_kaltura=M.local_kaltura||{},M.local_kaltura.init=function(e){return new n(e)}},"@VERSION@",{requires:["base","node","panel","node-event-simulate"]}); diff --git a/local/kaltura/yui/build/moodle-local_kaltura-ltitinymcepanel/moodle-local_kaltura-ltitinymcepanel.js b/local/kaltura/yui/build/moodle-local_kaltura-ltitinymcepanel/moodle-local_kaltura-ltitinymcepanel.js index b01e32a016332..e03afa6eaaaf0 100644 --- a/local/kaltura/yui/build/moodle-local_kaltura-ltitinymcepanel/moodle-local_kaltura-ltitinymcepanel.js +++ b/local/kaltura/yui/build/moodle-local_kaltura-ltitinymcepanel/moodle-local_kaltura-ltitinymcepanel.js @@ -1,142 +1,133 @@ YUI.add('moodle-local_kaltura-ltitinymcepanel', function (Y, NAME) { -// This file is part of Moodle - http://moodle.org/ -// -// Moodle is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// Moodle is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with Moodle. If not, see . - -/** - * YUI module for displaying an LTI launch within a YUI panel. - * - * @package local_kaltura - * @author Remote-Learner.net Inc - * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later - * @copyright (C) 2014 Remote Learner.net Inc http://www.remote-learner.net - */ - - /** - * This method calls the base class constructor - * @method LTITINYMCEPANEL - */ -var LTITINYMCEPANEL = function() { - LTITINYMCEPANEL.superclass.constructor.apply(this, arguments); -}; - -Y.extend(LTITINYMCEPANEL, Y.Base, { - /** - * The context id the editor was launched in. - * @property contextid - * @type {Integer} - * @default null - */ - contextid: 0, - - /** - * Init function for the checkboxselection module - * @property {Object} params Data to help initialize the YUI module. - */ - init : function(params) { - // Check to make sure parameters are initialized. - if ('' === params.insertbtnid || '' === params.ltilaunchurl || '' === params.objecttagheight || '' === params.objecttagid || '' === params.previewiframeid) { - alert('Some parameters were not initialized.'); - return; - } - - // Initialize the the browse when the window is initially rendered. - this.load_lti_content(params.ltilaunchurl, params.objecttagid, params.objecttagheight); - - // Disable the insert button since nothing has been selected yet. - Y.one('#'+params.insertbtnid).set('disabled', true); - - // Listen to simulated click event send from local/kaltura/service.php - Y.one('#closeltipanel').on('click', this.user_selected_video_callback, this, params.insertbtnid, params.objecttagid, params.previewiframeid, params.objecttagheight); - - if (null !== Y.one('#page-footer')) { - Y.one('#page-footer').setStyle('display', 'none'); - } - }, - - /** - * A funciton to load the LTI content. This is called when the YUI module is first initialized. - * @property {String} url LTI launch URL. - * @property {String} iframeid iframe tag id. - * @property {String} iframeheight iframe tag height. - */ - load_lti_content : function(url, iframeid, iframeheight) { - if (0 === this.contextid) { - this.contextid = Y.one('#lti_launch_context_id').get('value'); - } - - var content = ''; - Y.one('#'+iframeid).setContent(content); - }, - - /** - * This function serves as a call back method for when the closeltipanel div has been clicked. It means that the user has - * selected a video for embedding into the TinyMCE edotor. Enabling the insert button, removing the contents LTI launch element and - * adding content to the media preview element. - * @property {Object} e Event object. - * @property {String} insertbtnid Insert button id. - * @property {String} objecttagid Object tag id. - * @property {String} previewiframeid Preview iframe tag id. - * @property {String} height Height of the iframe. - */ - user_selected_video_callback : function(e, insertbtnid, objecttagid, previewiframeid, height) { - Y.one('#'+insertbtnid).setStyle('display', 'inline'); - Y.one('#'+insertbtnid).set('disabled', false); - Y.one('#'+objecttagid).setContent(''); - - var center = Y.Node.create('
    '); - var iframe = Y.Node.create(''); - iframe.setAttribute('allowfullscreen', ''); - iframe.setAttribute('width', Y.one('#width').get('value')+'px'); - iframe.setAttribute('height', height+'px'); - iframe.setAttribute('src', Y.one('#video_preview_frame').getAttribute('src')); - - center.append(iframe); - Y.one('#'+previewiframeid).append(center); - } -}, -{ - NAME : 'moodle-local_kaltura-ltitinymcepanel', - ATTRS : { - insertbtnid : { - value : '' - }, - ltilaunchurl : { - value : '' - }, - objecttagheight : { - value : '' - }, - objecttagid : { - value : '' - }, - previewiframeid : { - value : '' - } - } -}); -M.local_kaltura = M.local_kaltura || {}; - -/** - * Entry point for ltipanel module - * @param {Object} params Additional parameters. - * @return {Object} the ltipanel object - */ -M.local_kaltura.init = function(params) { - return new LTITINYMCEPANEL(params); -}; +// This file is part of Moodle - http://moodle.org/ +// +// Moodle is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// Moodle is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with Moodle. If not, see . + +/** + * YUI module for displaying an LTI launch within a YUI panel. + * + * @package local_kaltura + * @author Remote-Learner.net Inc + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + * @copyright (C) 2014 Remote Learner.net Inc http://www.remote-learner.net + */ + +/** + * This method calls the base class constructor + * @method LTITINYMCEPANEL + */ +var LTITINYMCEPANEL = function() { + LTITINYMCEPANEL.superclass.constructor.apply(this, arguments); +}; + +Y.extend(LTITINYMCEPANEL, Y.Base, { + /** + * The context id the editor was launched in. + * @property contextid + * @type {Integer} + * @default null + */ + contextid: 0, + + /** + * Init function for the checkboxselection module + * @property {Object} params Data to help initialize the YUI module. + */ + init : function(params) { + // Check to make sure parameters are initialized. + if ('' === params.ltilaunchurl || '' === params.objecttagheight || '' === params.objecttagid || '' === params.previewiframeid) { + alert('Some parameters were not initialized.'); + return; + } + + // Initialize the the browse when the window is initially rendered. + this.load_lti_content(params.ltilaunchurl, params.objecttagid, params.objecttagheight); + + // Listen to simulated click event send from local/kaltura/service.php + Y.one('#closeltipanel').on('click', this.user_selected_video_callback, this, params.objecttagid, params.previewiframeid, params.objecttagheight); + + if (null !== Y.one('#page-footer')) { + Y.one('#page-footer').setStyle('display', 'none'); + } + }, + + /** + * A funciton to load the LTI content. This is called when the YUI module is first initialized. + * @property {String} url LTI launch URL. + * @property {String} iframeid iframe tag id. + * @property {String} iframeheight iframe tag height. + */ + load_lti_content : function(url, iframeid, iframeheight) { + if (0 === this.contextid) { + this.contextid = Y.one('#lti_launch_context_id').get('value'); + } + + var content = ''; + Y.one('#'+iframeid).setContent(content); + }, + + /** + * This function serves as a call back method for when the closeltipanel div has been clicked. It means that the user has + * selected a video for embedding into the TinyMCE edotor. Enabling the insert button, removing the contents LTI launch element and + * adding content to the media preview element. + * @property {Object} e Event object. + * @property {String} objecttagid Object tag id. + * @property {String} previewiframeid Preview iframe tag id. + * @property {String} height Height of the iframe. + */ + user_selected_video_callback : function(e, objecttagid, previewiframeid, height) { + Y.one('#'+objecttagid).setContent(''); + + var center = Y.Node.create('
    '); + var iframe = Y.Node.create(''); + iframe.setAttribute('allowfullscreen', ''); + iframe.setAttribute('width', Y.one('#width').get('value')+'px'); + iframe.setAttribute('height', height+'px'); + iframe.setAttribute('src', Y.one('#video_preview_frame').getAttribute('src')); + + center.append(iframe); + Y.one('#'+previewiframeid).append(center); + } + }, + { + NAME : 'moodle-local_kaltura-ltitinymcepanel', + ATTRS : { + ltilaunchurl : { + value : '' + }, + objecttagheight : { + value : '' + }, + objecttagid : { + value : '' + }, + previewiframeid : { + value : '' + } + } + }); +M.local_kaltura = M.local_kaltura || {}; + +/** + * Entry point for ltipanel module + * @param {Object} params Additional parameters. + * @return {Object} the ltipanel object + */ +M.local_kaltura.init = function(params) { + return new LTITINYMCEPANEL(params); +}; }, '@VERSION@', {"requires": ["base", "node", "panel", "node-event-simulate"]}); diff --git a/local/kaltura/yui/src/ltiservice/js/ltiservice.js b/local/kaltura/yui/src/ltiservice/js/ltiservice.js index 41e1a5686fa27..94b9ac185d9d3 100644 --- a/local/kaltura/yui/src/ltiservice/js/ltiservice.js +++ b/local/kaltura/yui/src/ltiservice/js/ltiservice.js @@ -77,6 +77,11 @@ Y.extend(LTISERVICE, Y.Base, { Y.one(documentElement.getElementById('metadata')).setAttribute('value', params.metadata); } + if (window.parent.insertMedia) { + window.parent.insertMedia(); + return; + } + if (documentElement.getElementById('closeltipanel')) { Y.one(documentElement.getElementById('closeltipanel')).simulate('click'); } diff --git a/local/kaltura/yui/src/ltitinymcepanel/js/ltitinymcepanel.js b/local/kaltura/yui/src/ltitinymcepanel/js/ltitinymcepanel.js index 1a25df3a0239d..7dfb53740f249 100644 --- a/local/kaltura/yui/src/ltitinymcepanel/js/ltitinymcepanel.js +++ b/local/kaltura/yui/src/ltitinymcepanel/js/ltitinymcepanel.js @@ -22,7 +22,7 @@ * @copyright (C) 2014 Remote Learner.net Inc http://www.remote-learner.net */ - /** +/** * This method calls the base class constructor * @method LTITINYMCEPANEL */ @@ -31,100 +31,91 @@ var LTITINYMCEPANEL = function() { }; Y.extend(LTITINYMCEPANEL, Y.Base, { - /** - * The context id the editor was launched in. - * @property contextid - * @type {Integer} - * @default null - */ - contextid: 0, - - /** - * Init function for the checkboxselection module - * @property {Object} params Data to help initialize the YUI module. - */ - init : function(params) { - // Check to make sure parameters are initialized. - if ('' === params.insertbtnid || '' === params.ltilaunchurl || '' === params.objecttagheight || '' === params.objecttagid || '' === params.previewiframeid) { - alert('Some parameters were not initialized.'); - return; - } + /** + * The context id the editor was launched in. + * @property contextid + * @type {Integer} + * @default null + */ + contextid: 0, - // Initialize the the browse when the window is initially rendered. - this.load_lti_content(params.ltilaunchurl, params.objecttagid, params.objecttagheight); + /** + * Init function for the checkboxselection module + * @property {Object} params Data to help initialize the YUI module. + */ + init : function(params) { + // Check to make sure parameters are initialized. + if ('' === params.ltilaunchurl || '' === params.objecttagheight || '' === params.objecttagid || '' === params.previewiframeid) { + alert('Some parameters were not initialized.'); + return; + } - // Disable the insert button since nothing has been selected yet. - Y.one('#'+params.insertbtnid).set('disabled', true); + // Initialize the the browse when the window is initially rendered. + this.load_lti_content(params.ltilaunchurl, params.objecttagid, params.objecttagheight); - // Listen to simulated click event send from local/kaltura/service.php - Y.one('#closeltipanel').on('click', this.user_selected_video_callback, this, params.insertbtnid, params.objecttagid, params.previewiframeid, params.objecttagheight); + // Listen to simulated click event send from local/kaltura/service.php + Y.one('#closeltipanel').on('click', this.user_selected_video_callback, this, params.objecttagid, params.previewiframeid, params.objecttagheight); - if (null !== Y.one('#page-footer')) { - Y.one('#page-footer').setStyle('display', 'none'); - } - }, + if (null !== Y.one('#page-footer')) { + Y.one('#page-footer').setStyle('display', 'none'); + } + }, - /** - * A funciton to load the LTI content. This is called when the YUI module is first initialized. - * @property {String} url LTI launch URL. - * @property {String} iframeid iframe tag id. - * @property {String} iframeheight iframe tag height. - */ - load_lti_content : function(url, iframeid, iframeheight) { - if (0 === this.contextid) { - this.contextid = Y.one('#lti_launch_context_id').get('value'); - } + /** + * A funciton to load the LTI content. This is called when the YUI module is first initialized. + * @property {String} url LTI launch URL. + * @property {String} iframeid iframe tag id. + * @property {String} iframeheight iframe tag height. + */ + load_lti_content : function(url, iframeid, iframeheight) { + if (0 === this.contextid) { + this.contextid = Y.one('#lti_launch_context_id').get('value'); + } - var content = ''; - Y.one('#'+iframeid).setContent(content); - }, + var content = ''; + Y.one('#'+iframeid).setContent(content); + }, - /** - * This function serves as a call back method for when the closeltipanel div has been clicked. It means that the user has - * selected a video for embedding into the TinyMCE edotor. Enabling the insert button, removing the contents LTI launch element and - * adding content to the media preview element. - * @property {Object} e Event object. - * @property {String} insertbtnid Insert button id. - * @property {String} objecttagid Object tag id. - * @property {String} previewiframeid Preview iframe tag id. - * @property {String} height Height of the iframe. - */ - user_selected_video_callback : function(e, insertbtnid, objecttagid, previewiframeid, height) { - Y.one('#'+insertbtnid).setStyle('display', 'inline'); - Y.one('#'+insertbtnid).set('disabled', false); - Y.one('#'+objecttagid).setContent(''); + /** + * This function serves as a call back method for when the closeltipanel div has been clicked. It means that the user has + * selected a video for embedding into the TinyMCE edotor. Enabling the insert button, removing the contents LTI launch element and + * adding content to the media preview element. + * @property {Object} e Event object. + * @property {String} objecttagid Object tag id. + * @property {String} previewiframeid Preview iframe tag id. + * @property {String} height Height of the iframe. + */ + user_selected_video_callback : function(e, objecttagid, previewiframeid, height) { + Y.one('#'+objecttagid).setContent(''); - var center = Y.Node.create('
    '); - var iframe = Y.Node.create(''); - iframe.setAttribute('allowfullscreen', ''); - iframe.setAttribute('width', Y.one('#width').get('value')+'px'); - iframe.setAttribute('height', height+'px'); - iframe.setAttribute('src', Y.one('#video_preview_frame').getAttribute('src')); + var center = Y.Node.create('
    '); + var iframe = Y.Node.create(''); + iframe.setAttribute('allowfullscreen', ''); + iframe.setAttribute('width', Y.one('#width').get('value')+'px'); + iframe.setAttribute('height', height+'px'); + iframe.setAttribute('src', Y.one('#video_preview_frame').getAttribute('src')); - center.append(iframe); - Y.one('#'+previewiframeid).append(center); - } -}, -{ - NAME : 'moodle-local_kaltura-ltitinymcepanel', - ATTRS : { - insertbtnid : { - value : '' - }, - ltilaunchurl : { - value : '' - }, - objecttagheight : { - value : '' - }, - objecttagid : { - value : '' - }, - previewiframeid : { - value : '' + center.append(iframe); + Y.one('#'+previewiframeid).append(center); + } + }, + { + NAME : 'moodle-local_kaltura-ltitinymcepanel', + ATTRS : { + ltilaunchurl : { + value : '' + }, + objecttagheight : { + value : '' + }, + objecttagid : { + value : '' + }, + previewiframeid : { + value : '' + } } - } -}); + }); M.local_kaltura = M.local_kaltura || {}; /** From 435441c860691127d2aaa2d2fabd05fd67f07cbb Mon Sep 17 00:00:00 2001 From: Noy Cohen Date: Wed, 1 Jan 2020 15:46:47 +0200 Subject: [PATCH 238/326] KMS-17285 change mymedia and mediagallery's iframes height to 1500px from 600px --- local/kalturamediagallery/index.php | 2 +- local/mymedia/mymedia.php | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/local/kalturamediagallery/index.php b/local/kalturamediagallery/index.php index 525b4062f782a..2e273d819e5e8 100644 --- a/local/kalturamediagallery/index.php +++ b/local/kalturamediagallery/index.php @@ -53,7 +53,7 @@ // Request the launch content with an iframe tag. $attr = array( 'id' => 'contentframe', - 'height' => '600px', + 'height' => '1500px', 'width' => '100%', 'allowfullscreen' => 'true', 'src' => 'lti_launch.php?courseid='.$courseid, diff --git a/local/mymedia/mymedia.php b/local/mymedia/mymedia.php index 3df7462488973..9b403d37e8c17 100644 --- a/local/mymedia/mymedia.php +++ b/local/mymedia/mymedia.php @@ -49,7 +49,7 @@ // Request the launch content with an iframe tag. $attr = array( 'id' => 'contentframe', - 'height' => '600px', + 'height' => '1500px', 'width' => '100%', 'allowfullscreen' => 'true', 'src' => 'lti_launch.php', From de857e451870e1b18c2a008f95fba5d713389617 Mon Sep 17 00:00:00 2001 From: Noy Cohen Date: Thu, 2 Jan 2020 11:39:16 +0200 Subject: [PATCH 239/326] KMS-20301 moved removeProtocolFromUrl call to another location --- .../tinymce/plugins/kalturamedia/tinymce/js/ltipopuplib.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/editor/tinymce/plugins/kalturamedia/tinymce/js/ltipopuplib.js b/lib/editor/tinymce/plugins/kalturamedia/tinymce/js/ltipopuplib.js index b465400ce5a8f..7a9789d06f9cd 100644 --- a/lib/editor/tinymce/plugins/kalturamedia/tinymce/js/ltipopuplib.js +++ b/lib/editor/tinymce/plugins/kalturamedia/tinymce/js/ltipopuplib.js @@ -45,8 +45,8 @@ function insertMedia() { var sourceUrl = form.source.value; var url = removeProtocolFromUrl(kafuri); + sourceUrl = removeProtocolFromUrl(sourceUrl); url = sourceUrl.replace(kafuri, url); - url = removeProtocolFromUrl(url); var parser = document.createElement('a'); parser.href = form.source.value; url += parser.search; From 24ebccd8d65c7738aefc4dcee617f204f6a74e19 Mon Sep 17 00:00:00 2001 From: Noy Cohen Date: Thu, 2 Jan 2020 17:42:08 +0200 Subject: [PATCH 240/326] KMS-20296 changed all "assignment" appearances to "submission" --- local/kaltura/lang/en/local_kaltura.php | 4 ++-- local/kaltura/locallib.php | 2 +- local/kaltura/settings.php | 2 +- mod/kalvidassign/lti_launch.php | 4 ++-- 4 files changed, 6 insertions(+), 6 deletions(-) diff --git a/local/kaltura/lang/en/local_kaltura.php b/local/kaltura/lang/en/local_kaltura.php index c0b07fee9c3e8..89c505bec9ffc 100644 --- a/local/kaltura/lang/en/local_kaltura.php +++ b/local/kaltura/lang/en/local_kaltura.php @@ -71,8 +71,8 @@ $string['trace_log'] = 'Enable trace logging'; $string['trace_log_desc'] = 'If enabled, all requests and responses to and from Kaltura are logged. These logs can be used by Kaltura support to diagnose any problems encountered. Enabling this setting may affect Moodle performance. You may download a CSV file of the logs from here.'; $string['browse_and_embed'] = 'Browse and Embed'; -$string['enable_assignment'] = 'Clone Assignments'; -$string['enable_assignment_desc'] = 'If enabled, any media submitted via the Kaltura Video Assignment flow will be cloned under a different user name to prevent editing and deletion.'; +$string['enable_submission'] = 'Clone Submissions'; +$string['enable_submission_desc'] = 'If enabled, any media submitted via the Kaltura Video Submission flow will be cloned under a different user name to prevent editing and deletion.'; $string['privacy:metadata:courseid'] = 'The ID of the course the user is accessing the LTI Consumer from'; $string['privacy:metadata:courseidnumber'] = 'The ID number of the course the user is accessing the LTI Consumer from'; $string['privacy:metadata:coursefullname'] = 'The fullname of the course the user is accessing the LTI Consumer from'; diff --git a/local/kaltura/locallib.php b/local/kaltura/locallib.php index f3f91ddc0b85a..f934f40e4f6e3 100644 --- a/local/kaltura/locallib.php +++ b/local/kaltura/locallib.php @@ -390,7 +390,7 @@ function local_kaltura_request_lti_launch($ltirequest, $withblocks = true, $edit $requestparams['custom_publishdata'] = local_kaltura_get_kaf_publishing_data(); $requestparams['custom_publishdata_encoded'] = '1'; $requestparams['custom_moodle_plugin_version'] = local_kaltura_get_config()->version; - $requestparams['assignment'] = $ltirequest['assignment']; + $requestparams['assignment'] = $ltirequest['submission']; // Specific settings for video presentation requests. if (isset($ltirequest['custom_disable_add_new'])) { diff --git a/local/kaltura/settings.php b/local/kaltura/settings.php index 7c4a7dd8ea85a..71552473b3939 100644 --- a/local/kaltura/settings.php +++ b/local/kaltura/settings.php @@ -85,7 +85,7 @@ $adminsetting->plugin = KALTURA_PLUGIN_NAME; $settings->add($adminsetting); - $adminsetting = new admin_setting_configcheckbox('enable_assignment', get_string('enable_assignment', 'local_kaltura'), get_string('enable_assignment_desc', 'local_kaltura'), 0); + $adminsetting = new admin_setting_configcheckbox('enable_submission', get_string('enable_submission', 'local_kaltura'), get_string('enable_submission_desc', 'local_kaltura'), 0); $adminsetting->plugin = KALTURA_PLUGIN_NAME; $settings->add($adminsetting); diff --git a/mod/kalvidassign/lti_launch.php b/mod/kalvidassign/lti_launch.php index eaa83a8a83d1e..298b7df8bce92 100644 --- a/mod/kalvidassign/lti_launch.php +++ b/mod/kalvidassign/lti_launch.php @@ -79,8 +79,8 @@ echo get_string('notallowedtoreplacemedia', 'mod_kalvidassign'); die; } -if (!empty(get_config(KALTURA_PLUGIN_NAME, 'enable_assignment'))) { - $launch['assignment'] = 'yes'; +if (!empty(get_config(KALTURA_PLUGIN_NAME, 'enable_submission'))) { + $launch['submission'] = 'yes'; } if (local_kaltura_validate_browseembed_required_params($launch)) { $content = local_kaltura_request_lti_launch($launch, $withblocks); From 30c2d0c1d7f4f2b6331497e9bc7c0a971869ac54 Mon Sep 17 00:00:00 2001 From: noychn-kaltura <47745810+noychn-kaltura@users.noreply.github.com> Date: Sun, 5 Jan 2020 14:33:17 +0200 Subject: [PATCH 241/326] =?UTF-8?q?Revert=20"KMS-17285=20change=20mymedia?= =?UTF-8?q?=20and=20mediagallery's=20iframes=20height=20to=201500px=20?= =?UTF-8?q?=E2=80=A6"?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- local/kalturamediagallery/index.php | 2 +- local/mymedia/mymedia.php | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/local/kalturamediagallery/index.php b/local/kalturamediagallery/index.php index 2e273d819e5e8..525b4062f782a 100644 --- a/local/kalturamediagallery/index.php +++ b/local/kalturamediagallery/index.php @@ -53,7 +53,7 @@ // Request the launch content with an iframe tag. $attr = array( 'id' => 'contentframe', - 'height' => '1500px', + 'height' => '600px', 'width' => '100%', 'allowfullscreen' => 'true', 'src' => 'lti_launch.php?courseid='.$courseid, diff --git a/local/mymedia/mymedia.php b/local/mymedia/mymedia.php index 9b403d37e8c17..3df7462488973 100644 --- a/local/mymedia/mymedia.php +++ b/local/mymedia/mymedia.php @@ -49,7 +49,7 @@ // Request the launch content with an iframe tag. $attr = array( 'id' => 'contentframe', - 'height' => '1500px', + 'height' => '600px', 'width' => '100%', 'allowfullscreen' => 'true', 'src' => 'lti_launch.php', From 4545c702bebd52315f3ec9ab247638d3a6b1a205 Mon Sep 17 00:00:00 2001 From: Noy Cohen Date: Sun, 5 Jan 2020 17:27:16 +0200 Subject: [PATCH 242/326] version bump - 4.2.6 --- blocks/kalturamediagallery/version.php | 8 ++++---- filter/kaltura/version.php | 6 +++--- lib/editor/atto/plugins/kalturamedia/version.php | 6 +++--- lib/editor/tinymce/plugins/kalturamedia/version.php | 6 +++--- local/kaltura/version.php | 4 ++-- local/kalturamediagallery/version.php | 6 +++--- local/mymedia/version.php | 6 +++--- mod/kalvidassign/version.php | 6 +++--- mod/kalvidpres/version.php | 6 +++--- mod/kalvidres/version.php | 6 +++--- 10 files changed, 30 insertions(+), 30 deletions(-) diff --git a/blocks/kalturamediagallery/version.php b/blocks/kalturamediagallery/version.php index 353cc198f7930..ca452d5f05c68 100644 --- a/blocks/kalturamediagallery/version.php +++ b/blocks/kalturamediagallery/version.php @@ -14,11 +14,11 @@ defined('MOODLE_INTERNAL') || die(); -$plugin->version = 2019111437; -$plugin->release = 'Kaltura release 4.2.5'; +$plugin->version = 2020010537; +$plugin->release = 'Kaltura release 4.2.6'; $plugin->requires = 2018120300; $plugin->component = 'block_kalturamediagallery'; $plugin->dependencies = array( - 'local_kaltura' => 2019111437, - 'local_kalturamediagallery' => 2019111437 + 'local_kaltura' => 2020010537, + 'local_kalturamediagallery' => 2020010537 ); diff --git a/filter/kaltura/version.php b/filter/kaltura/version.php index 057c6576c04a6..d822a4442b70e 100644 --- a/filter/kaltura/version.php +++ b/filter/kaltura/version.php @@ -24,11 +24,11 @@ */ defined('MOODLE_INTERNAL') || die(); -$plugin->version = 2019111437; //version date YYYYMMDDXX 10 represent 3.0 for future option to moodle use 2 digit version +$plugin->version = 2020010537; //version date YYYYMMDDXX 10 represent 3.0 for future option to moodle use 2 digit version $plugin->component = 'filter_kaltura'; -$plugin->release = 'Kaltura release 4.2.5'; +$plugin->release = 'Kaltura release 4.2.6'; $plugin->requires = 2018120300; $plugin->maturity = MATURITY_STABLE; $plugin->dependencies = array( - 'local_kaltura' => 2019111437 + 'local_kaltura' => 2020010537 ); diff --git a/lib/editor/atto/plugins/kalturamedia/version.php b/lib/editor/atto/plugins/kalturamedia/version.php index 88729a87b6d36..fbe6ea33b60b9 100644 --- a/lib/editor/atto/plugins/kalturamedia/version.php +++ b/lib/editor/atto/plugins/kalturamedia/version.php @@ -24,10 +24,10 @@ defined('MOODLE_INTERNAL') || die(); -$plugin->version = 2019111437; // The current plugin version (Date: YYYYMMDDXX). -$plugin->release = 'Kaltura release 4.2.5'; +$plugin->version = 2020010537; // The current plugin version (Date: YYYYMMDDXX). +$plugin->release = 'Kaltura release 4.2.6'; $plugin->requires = 2018120300; // Requires this Moodle version. $plugin->component = 'atto_kalturamedia'; // Full name of the plugin (used for diagnostics). $plugin->dependencies = array( - 'local_kaltura' => 2019111437 + 'local_kaltura' => 2020010537 ); diff --git a/lib/editor/tinymce/plugins/kalturamedia/version.php b/lib/editor/tinymce/plugins/kalturamedia/version.php index 6dd70cbd94abc..1f6494eeba09a 100644 --- a/lib/editor/tinymce/plugins/kalturamedia/version.php +++ b/lib/editor/tinymce/plugins/kalturamedia/version.php @@ -23,12 +23,12 @@ defined('MOODLE_INTERNAL') || die(); -$plugin->version = 2019111437; -$plugin->release = 'Kaltura release 4.2.5'; +$plugin->version = 2020010537; +$plugin->release = 'Kaltura release 4.2.6'; // Required Moodle version. $plugin->requires = 2018120300; // Full name of the plugin (used for diagnostics). $plugin->component = 'tinymce_kalturamedia'; $plugin->dependencies = array( - 'local_kaltura' => 2019111437 + 'local_kaltura' => 2020010537 ); diff --git a/local/kaltura/version.php b/local/kaltura/version.php index 4e8af2b521a67..d2f20bd78d135 100644 --- a/local/kaltura/version.php +++ b/local/kaltura/version.php @@ -25,8 +25,8 @@ die('Direct access to this script is forbidden.'); } -$plugin->version = 2019111437; +$plugin->version = 2020010537; $plugin->component = 'local_kaltura'; -$plugin->release = 'Kaltura release 4.2.5'; +$plugin->release = 'Kaltura release 4.2.6'; $plugin->requires = 2018120300; $plugin->maturity = MATURITY_STABLE; diff --git a/local/kalturamediagallery/version.php b/local/kalturamediagallery/version.php index 6a5946fe35005..9c41a1f5da189 100644 --- a/local/kalturamediagallery/version.php +++ b/local/kalturamediagallery/version.php @@ -26,11 +26,11 @@ die('Direct access to this script is forbidden.'); } -$plugin->version = 2019111437; +$plugin->version = 2020010537; $plugin->component = 'local_kalturamediagallery'; -$plugin->release = 'Kaltura release 4.2.5'; +$plugin->release = 'Kaltura release 4.2.6'; $plugin->requires = 2018120300; $plugin->maturity = MATURITY_STABLE; $plugin->dependencies = array( - 'local_kaltura' => 2019111437 + 'local_kaltura' => 2020010537 ); diff --git a/local/mymedia/version.php b/local/mymedia/version.php index 494b4b538fe44..0c00a8e4d7a11 100644 --- a/local/mymedia/version.php +++ b/local/mymedia/version.php @@ -25,11 +25,11 @@ die('Direct access to this script is forbidden.'); } -$plugin->version = 2019111437; +$plugin->version = 2020010537; $plugin->component = 'local_mymedia'; -$plugin->release = 'Kaltura release 4.2.5'; +$plugin->release = 'Kaltura release 4.2.6'; $plugin->requires = 2018120300; $plugin->maturity = MATURITY_STABLE; $plugin->dependencies = array( - 'local_kaltura' => 2019111437 + 'local_kaltura' => 2020010537 ); diff --git a/mod/kalvidassign/version.php b/mod/kalvidassign/version.php index 547030b1a95df..e47c023501764 100644 --- a/mod/kalvidassign/version.php +++ b/mod/kalvidassign/version.php @@ -25,12 +25,12 @@ die('Direct access to this script is forbidden.'); } -$plugin->version = 2019111437; +$plugin->version = 2020010537; $plugin->component = 'mod_kalvidassign'; -$plugin->release = 'Kaltura release 4.2.5'; +$plugin->release = 'Kaltura release 4.2.6'; $plugin->requires = 2018120300; $plugin->cron = 0; $plugin->maturity = MATURITY_STABLE; $plugin->dependencies = array( - 'local_kaltura' => 2019111437, + 'local_kaltura' => 2020010537, ); diff --git a/mod/kalvidpres/version.php b/mod/kalvidpres/version.php index 4fbba1a9b7aed..8e90f8b00e88f 100644 --- a/mod/kalvidpres/version.php +++ b/mod/kalvidpres/version.php @@ -25,12 +25,12 @@ die('Direct access to this script is forbidden.'); } -$plugin->version = 2019111437; +$plugin->version = 2020010537; $plugin->component = 'mod_kalvidpres'; -$plugin->release = 'Kaltura release 4.2.5'; +$plugin->release = 'Kaltura release 4.2.6'; $plugin->requires = 2018120300; $plugin->cron = 0; $plugin->maturity = MATURITY_STABLE; $plugin->dependencies = array( - 'local_kaltura' => 2019111437 + 'local_kaltura' => 2020010537 ); diff --git a/mod/kalvidres/version.php b/mod/kalvidres/version.php index cf3cebcf0194d..df8be1be936a2 100644 --- a/mod/kalvidres/version.php +++ b/mod/kalvidres/version.php @@ -25,12 +25,12 @@ die('Direct access to this script is forbidden.'); } -$plugin->version = 2019111437; +$plugin->version = 2020010537; $plugin->component = 'mod_kalvidres'; -$plugin->release = 'Kaltura release 4.2.5'; +$plugin->release = 'Kaltura release 4.2.6'; $plugin->requires = 2018120300; $plugin->cron = 0; $plugin->maturity = MATURITY_STABLE; $plugin->dependencies = array( - 'local_kaltura' => 2019111437 + 'local_kaltura' => 2020010537 ); From 0ed4ba27f2b655a4cd79b0932e4593722fc7970b Mon Sep 17 00:00:00 2001 From: Noy Cohen Date: Mon, 6 Jan 2020 14:13:23 +0200 Subject: [PATCH 243/326] version bump - 4.2.6 --- blocks/kalturamediagallery/version.php | 6 +++--- filter/kaltura/version.php | 4 ++-- lib/editor/atto/plugins/kalturamedia/version.php | 4 ++-- lib/editor/tinymce/plugins/kalturamedia/version.php | 4 ++-- local/kaltura/version.php | 2 +- local/kalturamediagallery/version.php | 4 ++-- local/mymedia/version.php | 4 ++-- mod/kalvidassign/version.php | 4 ++-- mod/kalvidpres/version.php | 4 ++-- mod/kalvidres/version.php | 4 ++-- 10 files changed, 20 insertions(+), 20 deletions(-) diff --git a/blocks/kalturamediagallery/version.php b/blocks/kalturamediagallery/version.php index ca452d5f05c68..46a9e48caecb7 100644 --- a/blocks/kalturamediagallery/version.php +++ b/blocks/kalturamediagallery/version.php @@ -14,11 +14,11 @@ defined('MOODLE_INTERNAL') || die(); -$plugin->version = 2020010537; +$plugin->version = 2020010538; $plugin->release = 'Kaltura release 4.2.6'; $plugin->requires = 2018120300; $plugin->component = 'block_kalturamediagallery'; $plugin->dependencies = array( - 'local_kaltura' => 2020010537, - 'local_kalturamediagallery' => 2020010537 + 'local_kaltura' => 2020010538, + 'local_kalturamediagallery' => 2020010538 ); diff --git a/filter/kaltura/version.php b/filter/kaltura/version.php index d822a4442b70e..33886c9810a6e 100644 --- a/filter/kaltura/version.php +++ b/filter/kaltura/version.php @@ -24,11 +24,11 @@ */ defined('MOODLE_INTERNAL') || die(); -$plugin->version = 2020010537; //version date YYYYMMDDXX 10 represent 3.0 for future option to moodle use 2 digit version +$plugin->version = 2020010538; //version date YYYYMMDDXX 10 represent 3.0 for future option to moodle use 2 digit version $plugin->component = 'filter_kaltura'; $plugin->release = 'Kaltura release 4.2.6'; $plugin->requires = 2018120300; $plugin->maturity = MATURITY_STABLE; $plugin->dependencies = array( - 'local_kaltura' => 2020010537 + 'local_kaltura' => 2020010538 ); diff --git a/lib/editor/atto/plugins/kalturamedia/version.php b/lib/editor/atto/plugins/kalturamedia/version.php index fbe6ea33b60b9..53a8fe1af2e66 100644 --- a/lib/editor/atto/plugins/kalturamedia/version.php +++ b/lib/editor/atto/plugins/kalturamedia/version.php @@ -24,10 +24,10 @@ defined('MOODLE_INTERNAL') || die(); -$plugin->version = 2020010537; // The current plugin version (Date: YYYYMMDDXX). +$plugin->version = 2020010538; // The current plugin version (Date: YYYYMMDDXX). $plugin->release = 'Kaltura release 4.2.6'; $plugin->requires = 2018120300; // Requires this Moodle version. $plugin->component = 'atto_kalturamedia'; // Full name of the plugin (used for diagnostics). $plugin->dependencies = array( - 'local_kaltura' => 2020010537 + 'local_kaltura' => 2020010538 ); diff --git a/lib/editor/tinymce/plugins/kalturamedia/version.php b/lib/editor/tinymce/plugins/kalturamedia/version.php index 1f6494eeba09a..2ccd2c9109439 100644 --- a/lib/editor/tinymce/plugins/kalturamedia/version.php +++ b/lib/editor/tinymce/plugins/kalturamedia/version.php @@ -23,12 +23,12 @@ defined('MOODLE_INTERNAL') || die(); -$plugin->version = 2020010537; +$plugin->version = 2020010538; $plugin->release = 'Kaltura release 4.2.6'; // Required Moodle version. $plugin->requires = 2018120300; // Full name of the plugin (used for diagnostics). $plugin->component = 'tinymce_kalturamedia'; $plugin->dependencies = array( - 'local_kaltura' => 2020010537 + 'local_kaltura' => 2020010538 ); diff --git a/local/kaltura/version.php b/local/kaltura/version.php index d2f20bd78d135..e67149c7ae841 100644 --- a/local/kaltura/version.php +++ b/local/kaltura/version.php @@ -25,7 +25,7 @@ die('Direct access to this script is forbidden.'); } -$plugin->version = 2020010537; +$plugin->version = 2020010538; $plugin->component = 'local_kaltura'; $plugin->release = 'Kaltura release 4.2.6'; $plugin->requires = 2018120300; diff --git a/local/kalturamediagallery/version.php b/local/kalturamediagallery/version.php index 9c41a1f5da189..ac64399e4ea33 100644 --- a/local/kalturamediagallery/version.php +++ b/local/kalturamediagallery/version.php @@ -26,11 +26,11 @@ die('Direct access to this script is forbidden.'); } -$plugin->version = 2020010537; +$plugin->version = 2020010538; $plugin->component = 'local_kalturamediagallery'; $plugin->release = 'Kaltura release 4.2.6'; $plugin->requires = 2018120300; $plugin->maturity = MATURITY_STABLE; $plugin->dependencies = array( - 'local_kaltura' => 2020010537 + 'local_kaltura' => 2020010538 ); diff --git a/local/mymedia/version.php b/local/mymedia/version.php index 0c00a8e4d7a11..d3b324b203d29 100644 --- a/local/mymedia/version.php +++ b/local/mymedia/version.php @@ -25,11 +25,11 @@ die('Direct access to this script is forbidden.'); } -$plugin->version = 2020010537; +$plugin->version = 2020010538; $plugin->component = 'local_mymedia'; $plugin->release = 'Kaltura release 4.2.6'; $plugin->requires = 2018120300; $plugin->maturity = MATURITY_STABLE; $plugin->dependencies = array( - 'local_kaltura' => 2020010537 + 'local_kaltura' => 2020010538 ); diff --git a/mod/kalvidassign/version.php b/mod/kalvidassign/version.php index e47c023501764..964c9a8621eeb 100644 --- a/mod/kalvidassign/version.php +++ b/mod/kalvidassign/version.php @@ -25,12 +25,12 @@ die('Direct access to this script is forbidden.'); } -$plugin->version = 2020010537; +$plugin->version = 2020010538; $plugin->component = 'mod_kalvidassign'; $plugin->release = 'Kaltura release 4.2.6'; $plugin->requires = 2018120300; $plugin->cron = 0; $plugin->maturity = MATURITY_STABLE; $plugin->dependencies = array( - 'local_kaltura' => 2020010537, + 'local_kaltura' => 2020010538, ); diff --git a/mod/kalvidpres/version.php b/mod/kalvidpres/version.php index 8e90f8b00e88f..07e1f37e0d7e5 100644 --- a/mod/kalvidpres/version.php +++ b/mod/kalvidpres/version.php @@ -25,12 +25,12 @@ die('Direct access to this script is forbidden.'); } -$plugin->version = 2020010537; +$plugin->version = 2020010538; $plugin->component = 'mod_kalvidpres'; $plugin->release = 'Kaltura release 4.2.6'; $plugin->requires = 2018120300; $plugin->cron = 0; $plugin->maturity = MATURITY_STABLE; $plugin->dependencies = array( - 'local_kaltura' => 2020010537 + 'local_kaltura' => 2020010538 ); diff --git a/mod/kalvidres/version.php b/mod/kalvidres/version.php index df8be1be936a2..2434b61d748fe 100644 --- a/mod/kalvidres/version.php +++ b/mod/kalvidres/version.php @@ -25,12 +25,12 @@ die('Direct access to this script is forbidden.'); } -$plugin->version = 2020010537; +$plugin->version = 2020010538; $plugin->component = 'mod_kalvidres'; $plugin->release = 'Kaltura release 4.2.6'; $plugin->requires = 2018120300; $plugin->cron = 0; $plugin->maturity = MATURITY_STABLE; $plugin->dependencies = array( - 'local_kaltura' => 2020010537 + 'local_kaltura' => 2020010538 ); From 12d9e290050f831722484b9620ff4a9bd7323563 Mon Sep 17 00:00:00 2001 From: alon ainbinder Date: Sun, 23 Feb 2020 14:24:47 +0200 Subject: [PATCH 244/326] unit tests updates - now there are 100% passes --- local/kaltura/tests/locallib_test.php | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/local/kaltura/tests/locallib_test.php b/local/kaltura/tests/locallib_test.php index 94a28ed2b1aba..a18295b0437dc 100644 --- a/local/kaltura/tests/locallib_test.php +++ b/local/kaltura/tests/locallib_test.php @@ -998,9 +998,9 @@ public function test_local_kaltura_get_kaf_publishing_data_for_non_admin() { $result = local_kaltura_get_kaf_publishing_data(); - $json = '{"courses":[{"courseId":"'.$courseone->id.'","courseName":"'.$courseone->fullname.'","roles":"Instructor"}'; - $json .= ',{"courseId":"'.$coursetwo->id.'","courseName":"'.$coursetwo->fullname.'","roles":"Learner"}'; - $json .= ',{"courseId":"'.$coursefour->id.'","courseName":"'.$coursefour->fullname.'","roles":"Instructor"}]}'; + $json = '{"courses":[{"courseId":"'.$courseone->id.'","courseName":"'.$courseone->fullname.'","courseShortName":"'.$courseone->shortname.'","roles":"Instructor"}'; + $json .= ',{"courseId":"'.$coursetwo->id.'","courseName":"'.$coursetwo->fullname.'","courseShortName":"'.$coursetwo->shortname.'","roles":"Learner"}'; + $json .= ',{"courseId":"'.$coursefour->id.'","courseName":"'.$coursefour->fullname.'","courseShortName":"'.$coursefour->shortname.'","roles":"Instructor"}]}'; $this->assertEquals(base64_encode($json), $result); } @@ -1041,10 +1041,10 @@ public function test_local_kaltura_get_kaf_publishing_data_for_admin() { $result = local_kaltura_get_kaf_publishing_data(); - $json = '{"courses":[{"courseId":"'.$courseone->id.'","courseName":"'.$courseone->fullname.'","roles":"urn:lti:sysrole:ims\/lis\/Administrator"}'; - $json .= ',{"courseId":"'.$coursetwo->id.'","courseName":"'.$coursetwo->fullname.'","roles":"urn:lti:sysrole:ims\/lis\/Administrator"}'; - $json .= ',{"courseId":"'.$coursethree->id.'","courseName":"'.$coursethree->fullname.'","roles":"urn:lti:sysrole:ims\/lis\/Administrator"}'; - $json .= ',{"courseId":"'.$coursefour->id.'","courseName":"'.$coursefour->fullname.'","roles":"urn:lti:sysrole:ims\/lis\/Administrator"}]}'; + $json = '{"courses":[{"courseId":"'.$courseone->id.'","courseName":"'.$courseone->fullname.'","courseShortName":"'.$courseone->shortname.'","roles":"urn:lti:sysrole:ims\/lis\/Administrator"}'; + $json .= ',{"courseId":"'.$coursetwo->id.'","courseName":"'.$coursetwo->fullname.'","courseShortName":"'.$coursetwo->shortname.'","roles":"urn:lti:sysrole:ims\/lis\/Administrator"}'; + $json .= ',{"courseId":"'.$coursethree->id.'","courseName":"'.$coursethree->fullname.'","courseShortName":"'.$coursethree->shortname.'","roles":"urn:lti:sysrole:ims\/lis\/Administrator"}'; + $json .= ',{"courseId":"'.$coursefour->id.'","courseName":"'.$coursefour->fullname.'","courseShortName":"'.$coursefour->shortname.'","roles":"urn:lti:sysrole:ims\/lis\/Administrator"}]}'; $this->assertEquals(base64_encode($json), $result); } From 661c1f61b502a3b9940574c61ae7ab5698d19ff5 Mon Sep 17 00:00:00 2001 From: Noy Cohen Date: Mon, 9 Mar 2020 13:42:56 +0200 Subject: [PATCH 245/326] add a missing attoembed.php file that I accidentally didn't commit before --- local/kaltura/attoembed.php | 38 +++++++++++++++++++++++++++++++++++++ 1 file changed, 38 insertions(+) create mode 100644 local/kaltura/attoembed.php diff --git a/local/kaltura/attoembed.php b/local/kaltura/attoembed.php new file mode 100644 index 0000000000000..223b4082eae68 --- /dev/null +++ b/local/kaltura/attoembed.php @@ -0,0 +1,38 @@ +. + +/** + * Kaltura LTI service script used receive data sent from the Kaltura content provider. + * + * @package local_kaltura + * @author Remote-Learner.net Inc + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + * @copyright (C) 2014 Remote Learner.net Inc http://www.remote-learner.net + */ + +$PAGE->set_pagelayout('embedded'); +echo $OUTPUT->header(); +$playurl = urldecode($url); +?> + From ff6456432b94f3a4f213861b04f19ea88965c353 Mon Sep 17 00:00:00 2001 From: Noy Cohen Date: Mon, 9 Mar 2020 14:28:20 +0200 Subject: [PATCH 246/326] version bump - 4.2.7 --- blocks/kalturamediagallery/version.php | 8 ++++---- filter/kaltura/version.php | 6 +++--- lib/editor/atto/plugins/kalturamedia/version.php | 6 +++--- lib/editor/tinymce/plugins/kalturamedia/version.php | 6 +++--- local/kaltura/version.php | 4 ++-- local/kalturamediagallery/version.php | 6 +++--- local/mymedia/version.php | 6 +++--- mod/kalvidassign/version.php | 6 +++--- mod/kalvidpres/version.php | 6 +++--- mod/kalvidres/version.php | 6 +++--- 10 files changed, 30 insertions(+), 30 deletions(-) diff --git a/blocks/kalturamediagallery/version.php b/blocks/kalturamediagallery/version.php index 46a9e48caecb7..03bcbf471f3a6 100644 --- a/blocks/kalturamediagallery/version.php +++ b/blocks/kalturamediagallery/version.php @@ -14,11 +14,11 @@ defined('MOODLE_INTERNAL') || die(); -$plugin->version = 2020010538; -$plugin->release = 'Kaltura release 4.2.6'; +$plugin->version = 2020030938; +$plugin->release = 'Kaltura release 4.2.7'; $plugin->requires = 2018120300; $plugin->component = 'block_kalturamediagallery'; $plugin->dependencies = array( - 'local_kaltura' => 2020010538, - 'local_kalturamediagallery' => 2020010538 + 'local_kaltura' => 2020030938, + 'local_kalturamediagallery' => 2020030938 ); diff --git a/filter/kaltura/version.php b/filter/kaltura/version.php index 33886c9810a6e..09f7a28762f27 100644 --- a/filter/kaltura/version.php +++ b/filter/kaltura/version.php @@ -24,11 +24,11 @@ */ defined('MOODLE_INTERNAL') || die(); -$plugin->version = 2020010538; //version date YYYYMMDDXX 10 represent 3.0 for future option to moodle use 2 digit version +$plugin->version = 2020030938; //version date YYYYMMDDXX 10 represent 3.0 for future option to moodle use 2 digit version $plugin->component = 'filter_kaltura'; -$plugin->release = 'Kaltura release 4.2.6'; +$plugin->release = 'Kaltura release 4.2.7'; $plugin->requires = 2018120300; $plugin->maturity = MATURITY_STABLE; $plugin->dependencies = array( - 'local_kaltura' => 2020010538 + 'local_kaltura' => 2020030938 ); diff --git a/lib/editor/atto/plugins/kalturamedia/version.php b/lib/editor/atto/plugins/kalturamedia/version.php index 53a8fe1af2e66..111a7afc7aa28 100644 --- a/lib/editor/atto/plugins/kalturamedia/version.php +++ b/lib/editor/atto/plugins/kalturamedia/version.php @@ -24,10 +24,10 @@ defined('MOODLE_INTERNAL') || die(); -$plugin->version = 2020010538; // The current plugin version (Date: YYYYMMDDXX). -$plugin->release = 'Kaltura release 4.2.6'; +$plugin->version = 2020030938; // The current plugin version (Date: YYYYMMDDXX). +$plugin->release = 'Kaltura release 4.2.7'; $plugin->requires = 2018120300; // Requires this Moodle version. $plugin->component = 'atto_kalturamedia'; // Full name of the plugin (used for diagnostics). $plugin->dependencies = array( - 'local_kaltura' => 2020010538 + 'local_kaltura' => 2020030938 ); diff --git a/lib/editor/tinymce/plugins/kalturamedia/version.php b/lib/editor/tinymce/plugins/kalturamedia/version.php index 2ccd2c9109439..26d8188ae51e0 100644 --- a/lib/editor/tinymce/plugins/kalturamedia/version.php +++ b/lib/editor/tinymce/plugins/kalturamedia/version.php @@ -23,12 +23,12 @@ defined('MOODLE_INTERNAL') || die(); -$plugin->version = 2020010538; -$plugin->release = 'Kaltura release 4.2.6'; +$plugin->version = 2020030938; +$plugin->release = 'Kaltura release 4.2.7'; // Required Moodle version. $plugin->requires = 2018120300; // Full name of the plugin (used for diagnostics). $plugin->component = 'tinymce_kalturamedia'; $plugin->dependencies = array( - 'local_kaltura' => 2020010538 + 'local_kaltura' => 2020030938 ); diff --git a/local/kaltura/version.php b/local/kaltura/version.php index e67149c7ae841..e02c84218c03a 100644 --- a/local/kaltura/version.php +++ b/local/kaltura/version.php @@ -25,8 +25,8 @@ die('Direct access to this script is forbidden.'); } -$plugin->version = 2020010538; +$plugin->version = 2020030938; $plugin->component = 'local_kaltura'; -$plugin->release = 'Kaltura release 4.2.6'; +$plugin->release = 'Kaltura release 4.2.7'; $plugin->requires = 2018120300; $plugin->maturity = MATURITY_STABLE; diff --git a/local/kalturamediagallery/version.php b/local/kalturamediagallery/version.php index ac64399e4ea33..db6b11a68bbbb 100644 --- a/local/kalturamediagallery/version.php +++ b/local/kalturamediagallery/version.php @@ -26,11 +26,11 @@ die('Direct access to this script is forbidden.'); } -$plugin->version = 2020010538; +$plugin->version = 2020030938; $plugin->component = 'local_kalturamediagallery'; -$plugin->release = 'Kaltura release 4.2.6'; +$plugin->release = 'Kaltura release 4.2.7'; $plugin->requires = 2018120300; $plugin->maturity = MATURITY_STABLE; $plugin->dependencies = array( - 'local_kaltura' => 2020010538 + 'local_kaltura' => 2020030938 ); diff --git a/local/mymedia/version.php b/local/mymedia/version.php index d3b324b203d29..014f41ceb98de 100644 --- a/local/mymedia/version.php +++ b/local/mymedia/version.php @@ -25,11 +25,11 @@ die('Direct access to this script is forbidden.'); } -$plugin->version = 2020010538; +$plugin->version = 2020030938; $plugin->component = 'local_mymedia'; -$plugin->release = 'Kaltura release 4.2.6'; +$plugin->release = 'Kaltura release 4.2.7'; $plugin->requires = 2018120300; $plugin->maturity = MATURITY_STABLE; $plugin->dependencies = array( - 'local_kaltura' => 2020010538 + 'local_kaltura' => 2020030938 ); diff --git a/mod/kalvidassign/version.php b/mod/kalvidassign/version.php index 964c9a8621eeb..a6c9a6a28371a 100644 --- a/mod/kalvidassign/version.php +++ b/mod/kalvidassign/version.php @@ -25,12 +25,12 @@ die('Direct access to this script is forbidden.'); } -$plugin->version = 2020010538; +$plugin->version = 2020030938; $plugin->component = 'mod_kalvidassign'; -$plugin->release = 'Kaltura release 4.2.6'; +$plugin->release = 'Kaltura release 4.2.7'; $plugin->requires = 2018120300; $plugin->cron = 0; $plugin->maturity = MATURITY_STABLE; $plugin->dependencies = array( - 'local_kaltura' => 2020010538, + 'local_kaltura' => 2020030938, ); diff --git a/mod/kalvidpres/version.php b/mod/kalvidpres/version.php index 07e1f37e0d7e5..a15754af579e4 100644 --- a/mod/kalvidpres/version.php +++ b/mod/kalvidpres/version.php @@ -25,12 +25,12 @@ die('Direct access to this script is forbidden.'); } -$plugin->version = 2020010538; +$plugin->version = 2020030938; $plugin->component = 'mod_kalvidpres'; -$plugin->release = 'Kaltura release 4.2.6'; +$plugin->release = 'Kaltura release 4.2.7'; $plugin->requires = 2018120300; $plugin->cron = 0; $plugin->maturity = MATURITY_STABLE; $plugin->dependencies = array( - 'local_kaltura' => 2020010538 + 'local_kaltura' => 2020030938 ); diff --git a/mod/kalvidres/version.php b/mod/kalvidres/version.php index 2434b61d748fe..dc6dcf05e4639 100644 --- a/mod/kalvidres/version.php +++ b/mod/kalvidres/version.php @@ -25,12 +25,12 @@ die('Direct access to this script is forbidden.'); } -$plugin->version = 2020010538; +$plugin->version = 2020030938; $plugin->component = 'mod_kalvidres'; -$plugin->release = 'Kaltura release 4.2.6'; +$plugin->release = 'Kaltura release 4.2.7'; $plugin->requires = 2018120300; $plugin->cron = 0; $plugin->maturity = MATURITY_STABLE; $plugin->dependencies = array( - 'local_kaltura' => 2020010538 + 'local_kaltura' => 2020030938 ); From 9c6966c82c11f6b0b51ffb48fc424048e0a71b2f Mon Sep 17 00:00:00 2001 From: Noy Cohen Date: Wed, 1 Jul 2020 17:02:26 +0300 Subject: [PATCH 247/326] KMS-21327 update format_module_intro function calls in calendar events --- mod/kalvidassign/lib.php | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/mod/kalvidassign/lib.php b/mod/kalvidassign/lib.php index d981c75afac11..f8d999c7af6cb 100644 --- a/mod/kalvidassign/lib.php +++ b/mod/kalvidassign/lib.php @@ -46,7 +46,8 @@ function kalvidassign_add_instance($kalvidassign) { if ($kalvidassign->timedue) { $event = new stdClass(); $event->name = $kalvidassign->name; - $event->description = format_module_intro('kalvidassign', $kalvidassign, $kalvidassign->coursemodule); + $event->description = format_module_intro('kalvidassign', $kalvidassign, $kalvidassign->coursemodule, false); + $event->format = FORMAT_HTML; $event->courseid = $kalvidassign->course; $event->groupid = 0; $event->userid = 0; @@ -86,7 +87,8 @@ function kalvidassign_update_instance($kalvidassign) { if ($event->id = $DB->get_field('event', 'id', array('modulename' => 'kalvidassign', 'instance' => $kalvidassign->id))) { $event->name = $kalvidassign->name; - $event->description = format_module_intro('kalvidassign', $kalvidassign, $kalvidassign->coursemodule); + $event->description = format_module_intro('kalvidassign', $kalvidassign, $kalvidassign->coursemodule, false); + $event->format = FORMAT_HTML; $event->timestart = $kalvidassign->timedue; $calendarevent = calendar_event::load($event->id); @@ -94,7 +96,8 @@ function kalvidassign_update_instance($kalvidassign) { } else { $event = new stdClass(); $event->name = $kalvidassign->name; - $event->description = format_module_intro('kalvidassign', $kalvidassign, $kalvidassign->coursemodule); + $event->description = format_module_intro('kalvidassign', $kalvidassign, $kalvidassign->coursemodule, false); + $event->format = FORMAT_HTML; $event->courseid = $kalvidassign->course; $event->groupid = 0; $event->userid = 0; From 756a914e06e2010d41e39e6113011ced1cfdd88e Mon Sep 17 00:00:00 2001 From: Noy Cohen Date: Wed, 1 Jul 2020 17:28:47 +0300 Subject: [PATCH 248/326] KMS-21327 remove using of global OUTPUT and PAGE variables and change it to $this->output and $this->page --- local/mymedia/renderer.php | 2 -- mod/kalvidassign/renderer.php | 14 +++++++------- 2 files changed, 7 insertions(+), 9 deletions(-) diff --git a/local/mymedia/renderer.php b/local/mymedia/renderer.php index 3ccd1bc20d67a..0a80fe4d0d1eb 100644 --- a/local/mymedia/renderer.php +++ b/local/mymedia/renderer.php @@ -37,8 +37,6 @@ class local_mymedia_renderer extends plugin_renderer_base { * @return HTML markup */ public function create_vidoes_table($video_list = array()) { - global $OUTPUT; - $output = ''; $max_columns = 3; diff --git a/mod/kalvidassign/renderer.php b/mod/kalvidassign/renderer.php index 772789ebc1fdb..90ee1bfa4ef11 100644 --- a/mod/kalvidassign/renderer.php +++ b/mod/kalvidassign/renderer.php @@ -717,7 +717,7 @@ public function display_instructor_buttons($cm, $userid) { */ public function display_submissions_table($cm, $groupfilter = 0, $filter = 'all', $perpage, $quickgrade = false, $tifirst = '', $tilast = '', $page = 0) { - global $DB, $OUTPUT, $COURSE, $USER; + global $DB, $COURSE, $USER; // Get a list of users who have submissions and retrieve grade data for those users. $users = kalvidassign_get_submissions($cm->instance, $filter); @@ -923,7 +923,7 @@ public function display_submissions_table($cm, $groupfilter = 0, $filter = 'all' * @param object $course The course odject. */ public function display_kalvidassignments_table($course) { - global $CFG, $DB, $PAGE, $OUTPUT, $USER; + global $CFG, $DB, $USER; echo html_writer::start_tag('center'); @@ -931,7 +931,7 @@ public function display_kalvidassignments_table($course) { if (!$cms = get_coursemodules_in_course('kalvidassign', $course->id, 'm.timedue')) { echo get_string('noassignments', 'mod_kalvidassign'); - echo $OUTPUT->continue_button($CFG->wwwroot.'/course/view.php?id='.$course->id); + echo $this->output->continue_button($CFG->wwwroot.'/course/view.php?id='.$course->id); } $strsectionname = get_string('sectionname', 'format_'.$course->format); @@ -984,7 +984,7 @@ public function display_kalvidassignments_table($course) { } if ($assignmentcount > 0) { - $pagerenderer = $PAGE->get_renderer('mod_kalvidassign'); + $pagerenderer = $this->page->get_renderer('mod_kalvidassign'); echo $pagerenderer->render($courseindexsummary); } @@ -1066,7 +1066,7 @@ public function display_video_container_markup($submission, $courseid, $cmid) { * TODO: correct documentation for this function */ public function display_grade_feedback($kalvidassign, $context) { - global $USER, $CFG, $DB, $OUTPUT; + global $USER, $CFG, $DB; require_once($CFG->libdir.'/gradelib.php'); @@ -1101,14 +1101,14 @@ public function display_grade_feedback($kalvidassign, $context) { } // Print the feedback - echo $OUTPUT->heading(get_string('feedbackfromteacher', 'kalvidassign', fullname($teacher))); + echo $this->output->heading(get_string('feedbackfromteacher', 'kalvidassign', fullname($teacher))); echo '

    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 diff --git a/local/kaltura/API/TestCode/KalturaTestConfiguration.php b/local/kaltura/API/TestCode/KalturaTestConfiguration.php deleted file mode 100644 index d11930208dd85..0000000000000 --- a/local/kaltura/API/TestCode/KalturaTestConfiguration.php +++ /dev/null @@ -1,36 +0,0 @@ -. -// -// @ignore -// =================================================================================================== -class KalturaTestConfiguration -{ - const PARTNER_ID = 54321; - const SECRET = "YOUR_USER_SECRET"; - const ADMIN_SECRET = "YOUR_ADMIN_SECRET"; - const SERVICE_URL = "http://www.kaltura.com"; - const UPLOAD_FILE = "DemoVideo.flv"; -} diff --git a/local/kaltura/API/TestCode/TestMain.php b/local/kaltura/API/TestCode/TestMain.php deleted file mode 100644 index ea667b80325ac..0000000000000 --- a/local/kaltura/API/TestCode/TestMain.php +++ /dev/null @@ -1,137 +0,0 @@ -. -// -// @ignore -// =================================================================================================== -require_once(dirname(__FILE__) . '/../KalturaClient.php'); -require_once(dirname(__FILE__).DIRECTORY_SEPARATOR.'KalturaTestConfiguration.php'); - -class TestMain implements IKalturaLogger -{ - public function log($message) - { - echo date('Y-m-d H:i:s') . ' ' . $message . "\n"; - } - - public static function run() - { - $test = new TestMain(); - $test->listActions(); - $test->multiRequest(); - $test->add(); - echo "\nFinished running client library tests\n"; - } - - private function getKalturaClient($partnerId, $adminSecret, $isAdmin) - { - $kConfig = new KalturaConfiguration($partnerId); - $kConfig->serviceUrl = KalturaTestConfiguration::SERVICE_URL; - $kConfig->setLogger($this); - $client = new KalturaClient($kConfig); - - $userId = "SomeUser"; - $sessionType = ($isAdmin)? KalturaSessionType::ADMIN : KalturaSessionType::USER; - try - { - $ks = $client->generateSession($adminSecret, $userId, $sessionType, $partnerId); - $client->setKs($ks); - } - catch(Exception $ex) - { - die("could not start session - check configurations in KalturaTestConfiguration class"); - } - - return $client; - } - - public function listActions() - { - try - { - $client = $this->getKalturaClient(KalturaTestConfiguration::PARTNER_ID, KalturaTestConfiguration::ADMIN_SECRET, true); - $results = $client->media->listAction(); - $entry = $results->objects[0]; - echo "\nGot an entry: [{$entry->name}]"; - } - catch(Exception $ex) - { - die($ex->getMessage()); - } - } - - public function multiRequest() - { - try - { - $client = $this->getKalturaClient(KalturaTestConfiguration::PARTNER_ID, KalturaTestConfiguration::ADMIN_SECRET, true); - $client->startMultiRequest(); - $client->baseEntry->count(); - $client->partner->getInfo(); - $client->partner->getUsage(2011); - $multiRequest = $client->doMultiRequest(); - $partner = $multiRequest[1]; - if(!is_object($partner) || get_class($partner) != 'KalturaPartner') - { - throw new Exception("UNEXPECTED_RESULT"); - } - echo "\nGot Admin User email: [{$partner->adminEmail}]"; - } - catch(Exception $ex) - { - die($ex->getMessage()); - } - } - - public function add() - { - try - { - echo "\nUploading test video..."; - $client = $this->getKalturaClient(KalturaTestConfiguration::PARTNER_ID, KalturaTestConfiguration::ADMIN_SECRET, false); - $filePath = KalturaTestConfiguration::UPLOAD_FILE; - - $token = $client->baseEntry->upload($filePath); - $entry = new KalturaMediaEntry(); - $entry->name = "my upload entry"; - $entry->mediaType = KalturaMediaType::VIDEO; - $newEntry = $client->media->addFromUploadedFile($entry, $token); - echo "\nUploaded a new Video entry " . $newEntry->id; - $client->media->delete($newEntry->id); - try { - $entry = null; - $entry = $client->media->get($newEntry->id); - } catch (KalturaException $exApi) { - if ($entry == null) { - echo "\nDeleted the entry (" . $newEntry->id .") successfully!"; - } - } - } catch (KalturaException $ex) { - die($ex->getMessage()); - } - } -} - -TestMain::run(); diff --git a/local/kaltura/API/agpl.txt b/local/kaltura/API/agpl.txt deleted file mode 100644 index 94a9ed024d385..0000000000000 --- a/local/kaltura/API/agpl.txt +++ /dev/null @@ -1,674 +0,0 @@ - GNU GENERAL PUBLIC LICENSE - Version 3, 29 June 2007 - - Copyright (C) 2007 Free Software Foundation, Inc. - Everyone is permitted to copy and distribute verbatim copies - of this license document, but changing it is not allowed. - - Preamble - - The GNU General Public License is a free, copyleft license for -software and other kinds of works. - - The licenses for most software and other practical works are designed -to take away your freedom to share and change the works. By contrast, -the GNU General Public License is intended to guarantee your freedom to -share and change all versions of a program--to make sure it remains free -software for all its users. We, the Free Software Foundation, use the -GNU General Public License for most of our software; it applies also to -any other work released this way by its authors. You can apply it to -your programs, too. - - When we speak of free software, we are referring to freedom, not -price. Our General Public Licenses are designed to make sure that you -have the freedom to distribute copies of free software (and charge for -them if you wish), that you receive source code or can get it if you -want it, that you can change the software or use pieces of it in new -free programs, and that you know you can do these things. - - To protect your rights, we need to prevent others from denying you -these rights or asking you to surrender the rights. Therefore, you have -certain responsibilities if you distribute copies of the software, or if -you modify it: responsibilities to respect the freedom of others. - - For example, if you distribute copies of such a program, whether -gratis or for a fee, you must pass on to the recipients the same -freedoms that you received. You must make sure that they, too, receive -or can get the source code. And you must show them these terms so they -know their rights. - - Developers that use the GNU GPL protect your rights with two steps: -(1) assert copyright on the software, and (2) offer you this License -giving you legal permission to copy, distribute and/or modify it. - - For the developers' and authors' protection, the GPL clearly explains -that there is no warranty for this free software. For both users' and -authors' sake, the GPL requires that modified versions be marked as -changed, so that their problems will not be attributed erroneously to -authors of previous versions. - - Some devices are designed to deny users access to install or run -modified versions of the software inside them, although the manufacturer -can do so. This is fundamentally incompatible with the aim of -protecting users' freedom to change the software. The systematic -pattern of such abuse occurs in the area of products for individuals to -use, which is precisely where it is most unacceptable. Therefore, we -have designed this version of the GPL to prohibit the practice for those -products. If such problems arise substantially in other domains, we -stand ready to extend this provision to those domains in future versions -of the GPL, as needed to protect the freedom of users. - - Finally, every program is threatened constantly by software patents. -States should not allow patents to restrict development and use of -software on general-purpose computers, but in those that do, we wish to -avoid the special danger that patents applied to a free program could -make it effectively proprietary. To prevent this, the GPL assures that -patents cannot be used to render the program non-free. - - The precise terms and conditions for copying, distribution and -modification follow. - - TERMS AND CONDITIONS - - 0. Definitions. - - "This License" refers to version 3 of the GNU General Public License. - - "Copyright" also means copyright-like laws that apply to other kinds of -works, such as semiconductor masks. - - "The Program" refers to any copyrightable work licensed under this -License. Each licensee is addressed as "you". "Licensees" and -"recipients" may be individuals or organizations. - - To "modify" a work means to copy from or adapt all or part of the work -in a fashion requiring copyright permission, other than the making of an -exact copy. The resulting work is called a "modified version" of the -earlier work or a work "based on" the earlier work. - - A "covered work" means either the unmodified Program or a work based -on the Program. - - To "propagate" a work means to do anything with it that, without -permission, would make you directly or secondarily liable for -infringement under applicable copyright law, except executing it on a -computer or modifying a private copy. Propagation includes copying, -distribution (with or without modification), making available to the -public, and in some countries other activities as well. - - To "convey" a work means any kind of propagation that enables other -parties to make or receive copies. Mere interaction with a user through -a computer network, with no transfer of a copy, is not conveying. - - An interactive user interface displays "Appropriate Legal Notices" -to the extent that it includes a convenient and prominently visible -feature that (1) displays an appropriate copyright notice, and (2) -tells the user that there is no warranty for the work (except to the -extent that warranties are provided), that licensees may convey the -work under this License, and how to view a copy of this License. If -the interface presents a list of user commands or options, such as a -menu, a prominent item in the list meets this criterion. - - 1. Source Code. - - The "source code" for a work means the preferred form of the work -for making modifications to it. "Object code" means any non-source -form of a work. - - A "Standard Interface" means an interface that either is an official -standard defined by a recognized standards body, or, in the case of -interfaces specified for a particular programming language, one that -is widely used among developers working in that language. - - The "System Libraries" of an executable work include anything, other -than the work as a whole, that (a) is included in the normal form of -packaging a Major Component, but which is not part of that Major -Component, and (b) serves only to enable use of the work with that -Major Component, or to implement a Standard Interface for which an -implementation is available to the public in source code form. A -"Major Component", in this context, means a major essential component -(kernel, window system, and so on) of the specific operating system -(if any) on which the executable work runs, or a compiler used to -produce the work, or an object code interpreter used to run it. - - The "Corresponding Source" for a work in object code form means all -the source code needed to generate, install, and (for an executable -work) run the object code and to modify the work, including scripts to -control those activities. However, it does not include the work's -System Libraries, or general-purpose tools or generally available free -programs which are used unmodified in performing those activities but -which are not part of the work. For example, Corresponding Source -includes interface definition files associated with source files for -the work, and the source code for shared libraries and dynamically -linked subprograms that the work is specifically designed to require, -such as by intimate data communication or control flow between those -subprograms and other parts of the work. - - The Corresponding Source need not include anything that users -can regenerate automatically from other parts of the Corresponding -Source. - - The Corresponding Source for a work in source code form is that -same work. - - 2. Basic Permissions. - - All rights granted under this License are granted for the term of -copyright on the Program, and are irrevocable provided the stated -conditions are met. This License explicitly affirms your unlimited -permission to run the unmodified Program. The output from running a -covered work is covered by this License only if the output, given its -content, constitutes a covered work. This License acknowledges your -rights of fair use or other equivalent, as provided by copyright law. - - You may make, run and propagate covered works that you do not -convey, without conditions so long as your license otherwise remains -in force. You may convey covered works to others for the sole purpose -of having them make modifications exclusively for you, or provide you -with facilities for running those works, provided that you comply with -the terms of this License in conveying all material for which you do -not control copyright. Those thus making or running the covered works -for you must do so exclusively on your behalf, under your direction -and control, on terms that prohibit them from making any copies of -your copyrighted material outside their relationship with you. - - Conveying under any other circumstances is permitted solely under -the conditions stated below. Sublicensing is not allowed; section 10 -makes it unnecessary. - - 3. Protecting Users' Legal Rights From Anti-Circumvention Law. - - No covered work shall be deemed part of an effective technological -measure under any applicable law fulfilling obligations under article -11 of the WIPO copyright treaty adopted on 20 December 1996, or -similar laws prohibiting or restricting circumvention of such -measures. - - When you convey a covered work, you waive any legal power to forbid -circumvention of technological measures to the extent such circumvention -is effected by exercising rights under this License with respect to -the covered work, and you disclaim any intention to limit operation or -modification of the work as a means of enforcing, against the work's -users, your or third parties' legal rights to forbid circumvention of -technological measures. - - 4. Conveying Verbatim Copies. - - You may convey verbatim copies of the Program's source code as you -receive it, in any medium, provided that you conspicuously and -appropriately publish on each copy an appropriate copyright notice; -keep intact all notices stating that this License and any -non-permissive terms added in accord with section 7 apply to the code; -keep intact all notices of the absence of any warranty; and give all -recipients a copy of this License along with the Program. - - You may charge any price or no price for each copy that you convey, -and you may offer support or warranty protection for a fee. - - 5. Conveying Modified Source Versions. - - You may convey a work based on the Program, or the modifications to -produce it from the Program, in the form of source code under the -terms of section 4, provided that you also meet all of these conditions: - - a) The work must carry prominent notices stating that you modified - it, and giving a relevant date. - - b) The work must carry prominent notices stating that it is - released under this License and any conditions added under section - 7. This requirement modifies the requirement in section 4 to - "keep intact all notices". - - c) You must license the entire work, as a whole, under this - License to anyone who comes into possession of a copy. This - License will therefore apply, along with any applicable section 7 - additional terms, to the whole of the work, and all its parts, - regardless of how they are packaged. This License gives no - permission to license the work in any other way, but it does not - invalidate such permission if you have separately received it. - - d) If the work has interactive user interfaces, each must display - Appropriate Legal Notices; however, if the Program has interactive - interfaces that do not display Appropriate Legal Notices, your - work need not make them do so. - - A compilation of a covered work with other separate and independent -works, which are not by their nature extensions of the covered work, -and which are not combined with it such as to form a larger program, -in or on a volume of a storage or distribution medium, is called an -"aggregate" if the compilation and its resulting copyright are not -used to limit the access or legal rights of the compilation's users -beyond what the individual works permit. Inclusion of a covered work -in an aggregate does not cause this License to apply to the other -parts of the aggregate. - - 6. Conveying Non-Source Forms. - - You may convey a covered work in object code form under the terms -of sections 4 and 5, provided that you also convey the -machine-readable Corresponding Source under the terms of this License, -in one of these ways: - - a) Convey the object code in, or embodied in, a physical product - (including a physical distribution medium), accompanied by the - Corresponding Source fixed on a durable physical medium - customarily used for software interchange. - - b) Convey the object code in, or embodied in, a physical product - (including a physical distribution medium), accompanied by a - written offer, valid for at least three years and valid for as - long as you offer spare parts or customer support for that product - model, to give anyone who possesses the object code either (1) a - copy of the Corresponding Source for all the software in the - product that is covered by this License, on a durable physical - medium customarily used for software interchange, for a price no - more than your reasonable cost of physically performing this - conveying of source, or (2) access to copy the - Corresponding Source from a network server at no charge. - - c) Convey individual copies of the object code with a copy of the - written offer to provide the Corresponding Source. This - alternative is allowed only occasionally and noncommercially, and - only if you received the object code with such an offer, in accord - with subsection 6b. - - d) Convey the object code by offering access from a designated - place (gratis or for a charge), and offer equivalent access to the - Corresponding Source in the same way through the same place at no - further charge. You need not require recipients to copy the - Corresponding Source along with the object code. If the place to - copy the object code is a network server, the Corresponding Source - may be on a different server (operated by you or a third party) - that supports equivalent copying facilities, provided you maintain - clear directions next to the object code saying where to find the - Corresponding Source. Regardless of what server hosts the - Corresponding Source, you remain obligated to ensure that it is - available for as long as needed to satisfy these requirements. - - e) Convey the object code using peer-to-peer transmission, provided - you inform other peers where the object code and Corresponding - Source of the work are being offered to the general public at no - charge under subsection 6d. - - A separable portion of the object code, whose source code is excluded -from the Corresponding Source as a System Library, need not be -included in conveying the object code work. - - A "User Product" is either (1) a "consumer product", which means any -tangible personal property which is normally used for personal, family, -or household purposes, or (2) anything designed or sold for incorporation -into a dwelling. In determining whether a product is a consumer product, -doubtful cases shall be resolved in favor of coverage. For a particular -product received by a particular user, "normally used" refers to a -typical or common use of that class of product, regardless of the status -of the particular user or of the way in which the particular user -actually uses, or expects or is expected to use, the product. A product -is a consumer product regardless of whether the product has substantial -commercial, industrial or non-consumer uses, unless such uses represent -the only significant mode of use of the product. - - "Installation Information" for a User Product means any methods, -procedures, authorization keys, or other information required to install -and execute modified versions of a covered work in that User Product from -a modified version of its Corresponding Source. The information must -suffice to ensure that the continued functioning of the modified object -code is in no case prevented or interfered with solely because -modification has been made. - - If you convey an object code work under this section in, or with, or -specifically for use in, a User Product, and the conveying occurs as -part of a transaction in which the right of possession and use of the -User Product is transferred to the recipient in perpetuity or for a -fixed term (regardless of how the transaction is characterized), the -Corresponding Source conveyed under this section must be accompanied -by the Installation Information. But this requirement does not apply -if neither you nor any third party retains the ability to install -modified object code on the User Product (for example, the work has -been installed in ROM). - - The requirement to provide Installation Information does not include a -requirement to continue to provide support service, warranty, or updates -for a work that has been modified or installed by the recipient, or for -the User Product in which it has been modified or installed. Access to a -network may be denied when the modification itself materially and -adversely affects the operation of the network or violates the rules and -protocols for communication across the network. - - Corresponding Source conveyed, and Installation Information provided, -in accord with this section must be in a format that is publicly -documented (and with an implementation available to the public in -source code form), and must require no special password or key for -unpacking, reading or copying. - - 7. Additional Terms. - - "Additional permissions" are terms that supplement the terms of this -License by making exceptions from one or more of its conditions. -Additional permissions that are applicable to the entire Program shall -be treated as though they were included in this License, to the extent -that they are valid under applicable law. If additional permissions -apply only to part of the Program, that part may be used separately -under those permissions, but the entire Program remains governed by -this License without regard to the additional permissions. - - When you convey a copy of a covered work, you may at your option -remove any additional permissions from that copy, or from any part of -it. (Additional permissions may be written to require their own -removal in certain cases when you modify the work.) You may place -additional permissions on material, added by you to a covered work, -for which you have or can give appropriate copyright permission. - - Notwithstanding any other provision of this License, for material you -add to a covered work, you may (if authorized by the copyright holders of -that material) supplement the terms of this License with terms: - - a) Disclaiming warranty or limiting liability differently from the - terms of sections 15 and 16 of this License; or - - b) Requiring preservation of specified reasonable legal notices or - author attributions in that material or in the Appropriate Legal - Notices displayed by works containing it; or - - c) Prohibiting misrepresentation of the origin of that material, or - requiring that modified versions of such material be marked in - reasonable ways as different from the original version; or - - d) Limiting the use for publicity purposes of names of licensors or - authors of the material; or - - e) Declining to grant rights under trademark law for use of some - trade names, trademarks, or service marks; or - - f) Requiring indemnification of licensors and authors of that - material by anyone who conveys the material (or modified versions of - it) with contractual assumptions of liability to the recipient, for - any liability that these contractual assumptions directly impose on - those licensors and authors. - - All other non-permissive additional terms are considered "further -restrictions" within the meaning of section 10. If the Program as you -received it, or any part of it, contains a notice stating that it is -governed by this License along with a term that is a further -restriction, you may remove that term. If a license document contains -a further restriction but permits relicensing or conveying under this -License, you may add to a covered work material governed by the terms -of that license document, provided that the further restriction does -not survive such relicensing or conveying. - - If you add terms to a covered work in accord with this section, you -must place, in the relevant source files, a statement of the -additional terms that apply to those files, or a notice indicating -where to find the applicable terms. - - Additional terms, permissive or non-permissive, may be stated in the -form of a separately written license, or stated as exceptions; -the above requirements apply either way. - - 8. Termination. - - You may not propagate or modify a covered work except as expressly -provided under this License. Any attempt otherwise to propagate or -modify it is void, and will automatically terminate your rights under -this License (including any patent licenses granted under the third -paragraph of section 11). - - However, if you cease all violation of this License, then your -license from a particular copyright holder is reinstated (a) -provisionally, unless and until the copyright holder explicitly and -finally terminates your license, and (b) permanently, if the copyright -holder fails to notify you of the violation by some reasonable means -prior to 60 days after the cessation. - - Moreover, your license from a particular copyright holder is -reinstated permanently if the copyright holder notifies you of the -violation by some reasonable means, this is the first time you have -received notice of violation of this License (for any work) from that -copyright holder, and you cure the violation prior to 30 days after -your receipt of the notice. - - Termination of your rights under this section does not terminate the -licenses of parties who have received copies or rights from you under -this License. If your rights have been terminated and not permanently -reinstated, you do not qualify to receive new licenses for the same -material under section 10. - - 9. Acceptance Not Required for Having Copies. - - You are not required to accept this License in order to receive or -run a copy of the Program. Ancillary propagation of a covered work -occurring solely as a consequence of using peer-to-peer transmission -to receive a copy likewise does not require acceptance. However, -nothing other than this License grants you permission to propagate or -modify any covered work. These actions infringe copyright if you do -not accept this License. Therefore, by modifying or propagating a -covered work, you indicate your acceptance of this License to do so. - - 10. Automatic Licensing of Downstream Recipients. - - Each time you convey a covered work, the recipient automatically -receives a license from the original licensors, to run, modify and -propagate that work, subject to this License. You are not responsible -for enforcing compliance by third parties with this License. - - An "entity transaction" is a transaction transferring control of an -organization, or substantially all assets of one, or subdividing an -organization, or merging organizations. If propagation of a covered -work results from an entity transaction, each party to that -transaction who receives a copy of the work also receives whatever -licenses to the work the party's predecessor in interest had or could -give under the previous paragraph, plus a right to possession of the -Corresponding Source of the work from the predecessor in interest, if -the predecessor has it or can get it with reasonable efforts. - - You may not impose any further restrictions on the exercise of the -rights granted or affirmed under this License. For example, you may -not impose a license fee, royalty, or other charge for exercise of -rights granted under this License, and you may not initiate litigation -(including a cross-claim or counterclaim in a lawsuit) alleging that -any patent claim is infringed by making, using, selling, offering for -sale, or importing the Program or any portion of it. - - 11. Patents. - - A "contributor" is a copyright holder who authorizes use under this -License of the Program or a work on which the Program is based. The -work thus licensed is called the contributor's "contributor version". - - A contributor's "essential patent claims" are all patent claims -owned or controlled by the contributor, whether already acquired or -hereafter acquired, that would be infringed by some manner, permitted -by this License, of making, using, or selling its contributor version, -but do not include claims that would be infringed only as a -consequence of further modification of the contributor version. For -purposes of this definition, "control" includes the right to grant -patent sublicenses in a manner consistent with the requirements of -this License. - - Each contributor grants you a non-exclusive, worldwide, royalty-free -patent license under the contributor's essential patent claims, to -make, use, sell, offer for sale, import and otherwise run, modify and -propagate the contents of its contributor version. - - In the following three paragraphs, a "patent license" is any express -agreement or commitment, however denominated, not to enforce a patent -(such as an express permission to practice a patent or covenant not to -sue for patent infringement). To "grant" such a patent license to a -party means to make such an agreement or commitment not to enforce a -patent against the party. - - If you convey a covered work, knowingly relying on a patent license, -and the Corresponding Source of the work is not available for anyone -to copy, free of charge and under the terms of this License, through a -publicly available network server or other readily accessible means, -then you must either (1) cause the Corresponding Source to be so -available, or (2) arrange to deprive yourself of the benefit of the -patent license for this particular work, or (3) arrange, in a manner -consistent with the requirements of this License, to extend the patent -license to downstream recipients. "Knowingly relying" means you have -actual knowledge that, but for the patent license, your conveying the -covered work in a country, or your recipient's use of the covered work -in a country, would infringe one or more identifiable patents in that -country that you have reason to believe are valid. - - If, pursuant to or in connection with a single transaction or -arrangement, you convey, or propagate by procuring conveyance of, a -covered work, and grant a patent license to some of the parties -receiving the covered work authorizing them to use, propagate, modify -or convey a specific copy of the covered work, then the patent license -you grant is automatically extended to all recipients of the covered -work and works based on it. - - A patent license is "discriminatory" if it does not include within -the scope of its coverage, prohibits the exercise of, or is -conditioned on the non-exercise of one or more of the rights that are -specifically granted under this License. You may not convey a covered -work if you are a party to an arrangement with a third party that is -in the business of distributing software, under which you make payment -to the third party based on the extent of your activity of conveying -the work, and under which the third party grants, to any of the -parties who would receive the covered work from you, a discriminatory -patent license (a) in connection with copies of the covered work -conveyed by you (or copies made from those copies), or (b) primarily -for and in connection with specific products or compilations that -contain the covered work, unless you entered into that arrangement, -or that patent license was granted, prior to 28 March 2007. - - Nothing in this License shall be construed as excluding or limiting -any implied license or other defenses to infringement that may -otherwise be available to you under applicable patent law. - - 12. No Surrender of Others' Freedom. - - If conditions are imposed on you (whether by court order, agreement or -otherwise) that contradict the conditions of this License, they do not -excuse you from the conditions of this License. If you cannot convey a -covered work so as to satisfy simultaneously your obligations under this -License and any other pertinent obligations, then as a consequence you may -not convey it at all. For example, if you agree to terms that obligate you -to collect a royalty for further conveying from those to whom you convey -the Program, the only way you could satisfy both those terms and this -License would be to refrain entirely from conveying the Program. - - 13. Use with the GNU Affero General Public License. - - Notwithstanding any other provision of this License, you have -permission to link or combine any covered work with a work licensed -under version 3 of the GNU Affero General Public License into a single -combined work, and to convey the resulting work. The terms of this -License will continue to apply to the part which is the covered work, -but the special requirements of the GNU Affero General Public License, -section 13, concerning interaction through a network will apply to the -combination as such. - - 14. Revised Versions of this License. - - The Free Software Foundation may publish revised and/or new versions of -the GNU General Public License from time to time. Such new versions will -be similar in spirit to the present version, but may differ in detail to -address new problems or concerns. - - Each version is given a distinguishing version number. If the -Program specifies that a certain numbered version of the GNU General -Public License "or any later version" applies to it, you have the -option of following the terms and conditions either of that numbered -version or of any later version published by the Free Software -Foundation. If the Program does not specify a version number of the -GNU General Public License, you may choose any version ever published -by the Free Software Foundation. - - If the Program specifies that a proxy can decide which future -versions of the GNU General Public License can be used, that proxy's -public statement of acceptance of a version permanently authorizes you -to choose that version for the Program. - - Later license versions may give you additional or different -permissions. However, no additional obligations are imposed on any -author or copyright holder as a result of your choosing to follow a -later version. - - 15. Disclaimer of Warranty. - - THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY -APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT -HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY -OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, -THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM -IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF -ALL NECESSARY SERVICING, REPAIR OR CORRECTION. - - 16. Limitation of Liability. - - IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING -WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS -THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY -GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE -USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF -DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD -PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), -EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF -SUCH DAMAGES. - - 17. Interpretation of Sections 15 and 16. - - If the disclaimer of warranty and limitation of liability provided -above cannot be given local legal effect according to their terms, -reviewing courts shall apply local law that most closely approximates -an absolute waiver of all civil liability in connection with the -Program, unless a warranty or assumption of liability accompanies a -copy of the Program in return for a fee. - - END OF TERMS AND CONDITIONS - - How to Apply These Terms to Your New Programs - - If you develop a new program, and you want it to be of the greatest -possible use to the public, the best way to achieve this is to make it -free software which everyone can redistribute and change under these terms. - - To do so, attach the following notices to the program. It is safest -to attach them to the start of each source file to most effectively -state the exclusion of warranty; and each file should have at least -the "copyright" line and a pointer to where the full notice is found. - - - Copyright (C) - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - -Also add information on how to contact you by electronic and paper mail. - - If the program does terminal interaction, make it output a short -notice like this when it starts in an interactive mode: - - Copyright (C) - This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. - This is free software, and you are welcome to redistribute it - under certain conditions; type `show c' for details. - -The hypothetical commands `show w' and `show c' should show the appropriate -parts of the General Public License. Of course, your program's commands -might be different; for a GUI interface, you would use an "about box". - - You should also get your employer (if you work as a programmer) or school, -if any, to sign a "copyright disclaimer" for the program, if necessary. -For more information on this, and how to apply and follow the GNU GPL, see -. - - The GNU General Public License does not permit incorporating your program -into proprietary programs. If your program is a subroutine library, you -may consider it more useful to permit linking proprietary applications with -the library. If this is what you want to do, use the GNU Lesser General -Public License instead of this License. But first, please read -. From ce65677a052bb9188431a18cd8a7f8d3ab4a04f3 Mon Sep 17 00:00:00 2001 From: Muli Dayan Date: Sun, 27 May 2018 11:01:05 +0300 Subject: [PATCH 169/326] fix gitignore - don't ignore our plugins recursively --- .gitignore | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/.gitignore b/.gitignore index eee29cf8c9d09..fb996a8e7d8ad 100644 --- a/.gitignore +++ b/.gitignore @@ -3,18 +3,18 @@ # except our plugins': -!mod/kalvidassign/* -!mod/kalvidpres/* -!mod/kalvidres/* +!mod/kalvidassign/**/* +!mod/kalvidpres/**/* +!mod/kalvidres/**/* -!filter/kaltura/* +!filter/kaltura/**/* -!local/kaltura/* -!local/kalturamediagallery/* -!local/mymedia/* +!local/kaltura/**/* +!local/kalturamediagallery/**/* +!local/mymedia/**/* -!lib/editor/atto/plugins/kalturamedia/* -!lib/editor/tinymce/plugins/kalturamedia/* +!lib/editor/atto/plugins/kalturamedia/**/* +!lib/editor/tinymce/plugins/kalturamedia/**/* !createPackage.sh !incrementVersion.sh \ No newline at end of file From d67e0263d47fcfd02d2d296205658e0cfc9409c5 Mon Sep 17 00:00:00 2001 From: Muli Dayan Date: Sun, 27 May 2018 11:08:07 +0300 Subject: [PATCH 170/326] KMS-17117 update client libs; remove all plugins except metadata; remove test code --- local/kaltura/API/KalturaClient.php | 9775 +++++++ local/kaltura/API/KalturaClientBase.php | 1451 + local/kaltura/API/KalturaEnums.php | 4966 ++++ .../KalturaMetadataClientPlugin.php | 1640 ++ local/kaltura/API/KalturaTypes.php | 22682 ++++++++++++++++ 5 files changed, 40514 insertions(+) create mode 100644 local/kaltura/API/KalturaClient.php create mode 100644 local/kaltura/API/KalturaClientBase.php create mode 100644 local/kaltura/API/KalturaEnums.php create mode 100644 local/kaltura/API/KalturaPlugins/KalturaMetadataClientPlugin.php create mode 100644 local/kaltura/API/KalturaTypes.php diff --git a/local/kaltura/API/KalturaClient.php b/local/kaltura/API/KalturaClient.php new file mode 100644 index 0000000000000..b9bb8cd27d142 --- /dev/null +++ b/local/kaltura/API/KalturaClient.php @@ -0,0 +1,9775 @@ +. +// +// @ignore +// =================================================================================================== + +/** + * @package Kaltura + * @subpackage Client + */ +require_once(dirname(__FILE__) . "/KalturaClientBase.php"); +require_once(dirname(__FILE__) . "/KalturaEnums.php"); +require_once(dirname(__FILE__) . "/KalturaTypes.php"); + + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaAccessControlProfileService extends KalturaServiceBase +{ + function __construct(KalturaClient $client = null) + { + parent::__construct($client); + } + + /** + * Add new access control profile + * + * @param KalturaAccessControlProfile $accessControlProfile + * @return KalturaAccessControlProfile + */ + function add(KalturaAccessControlProfile $accessControlProfile) + { + $kparams = array(); + $this->client->addParam($kparams, "accessControlProfile", $accessControlProfile->toParams()); + $this->client->queueServiceActionCall("accesscontrolprofile", "add", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaAccessControlProfile"); + return $resultObject; + } + + /** + * Delete access control profile by id + * + * @param int $id + */ + function delete($id) + { + $kparams = array(); + $this->client->addParam($kparams, "id", $id); + $this->client->queueServiceActionCall("accesscontrolprofile", "delete", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "null"); + } + + /** + * Get access control profile by id + * + * @param int $id + * @return KalturaAccessControlProfile + */ + function get($id) + { + $kparams = array(); + $this->client->addParam($kparams, "id", $id); + $this->client->queueServiceActionCall("accesscontrolprofile", "get", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaAccessControlProfile"); + return $resultObject; + } + + /** + * List access control profiles by filter and pager + * + * @param KalturaAccessControlProfileFilter $filter + * @param KalturaFilterPager $pager + * @return KalturaAccessControlProfileListResponse + */ + function listAction(KalturaAccessControlProfileFilter $filter = null, KalturaFilterPager $pager = null) + { + $kparams = array(); + if ($filter !== null) + $this->client->addParam($kparams, "filter", $filter->toParams()); + if ($pager !== null) + $this->client->addParam($kparams, "pager", $pager->toParams()); + $this->client->queueServiceActionCall("accesscontrolprofile", "list", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaAccessControlProfileListResponse"); + return $resultObject; + } + + /** + * Update access control profile by id + * + * @param int $id + * @param KalturaAccessControlProfile $accessControlProfile + * @return KalturaAccessControlProfile + */ + function update($id, KalturaAccessControlProfile $accessControlProfile) + { + $kparams = array(); + $this->client->addParam($kparams, "id", $id); + $this->client->addParam($kparams, "accessControlProfile", $accessControlProfile->toParams()); + $this->client->queueServiceActionCall("accesscontrolprofile", "update", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaAccessControlProfile"); + return $resultObject; + } +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaAccessControlService extends KalturaServiceBase +{ + function __construct(KalturaClient $client = null) + { + parent::__construct($client); + } + + /** + * Add new Access Control Profile + * + * @param KalturaAccessControl $accessControl + * @return KalturaAccessControl + */ + function add(KalturaAccessControl $accessControl) + { + $kparams = array(); + $this->client->addParam($kparams, "accessControl", $accessControl->toParams()); + $this->client->queueServiceActionCall("accesscontrol", "add", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaAccessControl"); + return $resultObject; + } + + /** + * Delete Access Control Profile by id + * + * @param int $id + */ + function delete($id) + { + $kparams = array(); + $this->client->addParam($kparams, "id", $id); + $this->client->queueServiceActionCall("accesscontrol", "delete", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "null"); + } + + /** + * Get Access Control Profile by id + * + * @param int $id + * @return KalturaAccessControl + */ + function get($id) + { + $kparams = array(); + $this->client->addParam($kparams, "id", $id); + $this->client->queueServiceActionCall("accesscontrol", "get", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaAccessControl"); + return $resultObject; + } + + /** + * List Access Control Profiles by filter and pager + * + * @param KalturaAccessControlFilter $filter + * @param KalturaFilterPager $pager + * @return KalturaAccessControlListResponse + */ + function listAction(KalturaAccessControlFilter $filter = null, KalturaFilterPager $pager = null) + { + $kparams = array(); + if ($filter !== null) + $this->client->addParam($kparams, "filter", $filter->toParams()); + if ($pager !== null) + $this->client->addParam($kparams, "pager", $pager->toParams()); + $this->client->queueServiceActionCall("accesscontrol", "list", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaAccessControlListResponse"); + return $resultObject; + } + + /** + * Update Access Control Profile by id + * + * @param int $id + * @param KalturaAccessControl $accessControl + * @return KalturaAccessControl + */ + function update($id, KalturaAccessControl $accessControl) + { + $kparams = array(); + $this->client->addParam($kparams, "id", $id); + $this->client->addParam($kparams, "accessControl", $accessControl->toParams()); + $this->client->queueServiceActionCall("accesscontrol", "update", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaAccessControl"); + return $resultObject; + } +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaAdminUserService extends KalturaServiceBase +{ + function __construct(KalturaClient $client = null) + { + parent::__construct($client); + } + + /** + * Get an admin session using admin email and password (Used for login to the KMC application) + * + * @param string $email + * @param string $password + * @param int $partnerId + * @return string + */ + function login($email, $password, $partnerId = null) + { + $kparams = array(); + $this->client->addParam($kparams, "email", $email); + $this->client->addParam($kparams, "password", $password); + $this->client->addParam($kparams, "partnerId", $partnerId); + $this->client->queueServiceActionCall("adminuser", "login", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "string"); + return $resultObject; + } + + /** + * Reset admin user password and send it to the users email address + * + * @param string $email + */ + function resetPassword($email) + { + $kparams = array(); + $this->client->addParam($kparams, "email", $email); + $this->client->queueServiceActionCall("adminuser", "resetPassword", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "null"); + } + + /** + * Set initial users password + * + * @param string $hashKey + * @param string $newPassword New password to set + */ + function setInitialPassword($hashKey, $newPassword) + { + $kparams = array(); + $this->client->addParam($kparams, "hashKey", $hashKey); + $this->client->addParam($kparams, "newPassword", $newPassword); + $this->client->queueServiceActionCall("adminuser", "setInitialPassword", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "null"); + } + + /** + * Update admin user password and email + * + * @param string $email + * @param string $password + * @param string $newEmail Optional, provide only when you want to update the email + * @param string $newPassword + * @return KalturaAdminUser + */ + function updatePassword($email, $password, $newEmail = "", $newPassword = "") + { + $kparams = array(); + $this->client->addParam($kparams, "email", $email); + $this->client->addParam($kparams, "password", $password); + $this->client->addParam($kparams, "newEmail", $newEmail); + $this->client->addParam($kparams, "newPassword", $newPassword); + $this->client->queueServiceActionCall("adminuser", "updatePassword", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaAdminUser"); + return $resultObject; + } +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaAnalyticsService extends KalturaServiceBase +{ + function __construct(KalturaClient $client = null) + { + parent::__construct($client); + } + + /** + * Report query action allows to get a analytics data for specific query dimensions, metrics and filters. + * + * @param KalturaAnalyticsFilter $filter The analytics query filter + * @param KalturaFilterPager $pager The analytics query result pager + * @return KalturaReportResponse + */ + function query(KalturaAnalyticsFilter $filter, KalturaFilterPager $pager = null) + { + $kparams = array(); + $this->client->addParam($kparams, "filter", $filter->toParams()); + if ($pager !== null) + $this->client->addParam($kparams, "pager", $pager->toParams()); + $this->client->queueServiceActionCall("analytics", "query", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaReportResponse"); + return $resultObject; + } +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaAppTokenService extends KalturaServiceBase +{ + function __construct(KalturaClient $client = null) + { + parent::__construct($client); + } + + /** + * Add new application authentication token + * + * @param KalturaAppToken $appToken + * @return KalturaAppToken + */ + function add(KalturaAppToken $appToken) + { + $kparams = array(); + $this->client->addParam($kparams, "appToken", $appToken->toParams()); + $this->client->queueServiceActionCall("apptoken", "add", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaAppToken"); + return $resultObject; + } + + /** + * Delete application authentication token by id + * + * @param string $id + */ + function delete($id) + { + $kparams = array(); + $this->client->addParam($kparams, "id", $id); + $this->client->queueServiceActionCall("apptoken", "delete", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "null"); + } + + /** + * Get application authentication token by id + * + * @param string $id + * @return KalturaAppToken + */ + function get($id) + { + $kparams = array(); + $this->client->addParam($kparams, "id", $id); + $this->client->queueServiceActionCall("apptoken", "get", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaAppToken"); + return $resultObject; + } + + /** + * List application authentication tokens by filter and pager + * + * @param KalturaAppTokenFilter $filter + * @param KalturaFilterPager $pager + * @return KalturaAppTokenListResponse + */ + function listAction(KalturaAppTokenFilter $filter = null, KalturaFilterPager $pager = null) + { + $kparams = array(); + if ($filter !== null) + $this->client->addParam($kparams, "filter", $filter->toParams()); + if ($pager !== null) + $this->client->addParam($kparams, "pager", $pager->toParams()); + $this->client->queueServiceActionCall("apptoken", "list", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaAppTokenListResponse"); + return $resultObject; + } + + /** + * Starts a new KS (kaltura Session) based on application authentication token id + * + * @param string $id Application token id + * @param string $tokenHash Hashed token, built of sha1 on current KS concatenated with the application token + * @param string $userId Session user id, will be ignored if a different user id already defined on the application token + * @param int $type Session type, will be ignored if a different session type already defined on the application token + * @param int $expiry Session expiry (in seconds), could be overwritten by shorter expiry of the application token and the session-expiry that defined on the application token + * @return KalturaSessionInfo + */ + function startSession($id, $tokenHash, $userId = null, $type = null, $expiry = null) + { + $kparams = array(); + $this->client->addParam($kparams, "id", $id); + $this->client->addParam($kparams, "tokenHash", $tokenHash); + $this->client->addParam($kparams, "userId", $userId); + $this->client->addParam($kparams, "type", $type); + $this->client->addParam($kparams, "expiry", $expiry); + $this->client->queueServiceActionCall("apptoken", "startSession", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaSessionInfo"); + return $resultObject; + } + + /** + * Update application authentication token by id + * + * @param string $id + * @param KalturaAppToken $appToken + * @return KalturaAppToken + */ + function update($id, KalturaAppToken $appToken) + { + $kparams = array(); + $this->client->addParam($kparams, "id", $id); + $this->client->addParam($kparams, "appToken", $appToken->toParams()); + $this->client->queueServiceActionCall("apptoken", "update", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaAppToken"); + return $resultObject; + } +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaBaseEntryService extends KalturaServiceBase +{ + function __construct(KalturaClient $client = null) + { + parent::__construct($client); + } + + /** + * Generic add entry, should be used when the uploaded entry type is not known. + * + * @param KalturaBaseEntry $entry + * @param string $type + * @return KalturaBaseEntry + */ + function add(KalturaBaseEntry $entry, $type = null) + { + $kparams = array(); + $this->client->addParam($kparams, "entry", $entry->toParams()); + $this->client->addParam($kparams, "type", $type); + $this->client->queueServiceActionCall("baseentry", "add", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaBaseEntry"); + return $resultObject; + } + + /** + * Attach content resource to entry in status NO_MEDIA + * + * @param string $entryId + * @param KalturaResource $resource + * @return KalturaBaseEntry + */ + function addContent($entryId, KalturaResource $resource) + { + $kparams = array(); + $this->client->addParam($kparams, "entryId", $entryId); + $this->client->addParam($kparams, "resource", $resource->toParams()); + $this->client->queueServiceActionCall("baseentry", "addContent", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaBaseEntry"); + return $resultObject; + } + + /** + * Generic add entry using an uploaded file, should be used when the uploaded entry type is not known. + * + * @param KalturaBaseEntry $entry + * @param string $uploadTokenId + * @param string $type + * @return KalturaBaseEntry + */ + function addFromUploadedFile(KalturaBaseEntry $entry, $uploadTokenId, $type = null) + { + $kparams = array(); + $this->client->addParam($kparams, "entry", $entry->toParams()); + $this->client->addParam($kparams, "uploadTokenId", $uploadTokenId); + $this->client->addParam($kparams, "type", $type); + $this->client->queueServiceActionCall("baseentry", "addFromUploadedFile", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaBaseEntry"); + return $resultObject; + } + + /** + * Anonymously rank an entry, no validation is done on duplicate rankings. + * + * @param string $entryId + * @param int $rank + */ + function anonymousRank($entryId, $rank) + { + $kparams = array(); + $this->client->addParam($kparams, "entryId", $entryId); + $this->client->addParam($kparams, "rank", $rank); + $this->client->queueServiceActionCall("baseentry", "anonymousRank", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "null"); + } + + /** + * Approve the entry and mark the pending flags (if any) as moderated (this will make the entry playable). + * + * @param string $entryId + */ + function approve($entryId) + { + $kparams = array(); + $this->client->addParam($kparams, "entryId", $entryId); + $this->client->queueServiceActionCall("baseentry", "approve", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "null"); + } + + /** + * Clone an entry with optional attributes to apply to the clone + * + * @param string $entryId Id of entry to clone + * @param array $cloneOptions + * @return KalturaBaseEntry + */ + function cloneAction($entryId, array $cloneOptions = null) + { + $kparams = array(); + $this->client->addParam($kparams, "entryId", $entryId); + if ($cloneOptions !== null) + foreach($cloneOptions as $index => $obj) + { + $this->client->addParam($kparams, "cloneOptions:$index", $obj->toParams()); + } + $this->client->queueServiceActionCall("baseentry", "clone", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaBaseEntry"); + return $resultObject; + } + + /** + * Count base entries by filter. + * + * @param KalturaBaseEntryFilter $filter Entry filter + * @return int + */ + function count(KalturaBaseEntryFilter $filter = null) + { + $kparams = array(); + if ($filter !== null) + $this->client->addParam($kparams, "filter", $filter->toParams()); + $this->client->queueServiceActionCall("baseentry", "count", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "integer"); + return $resultObject; + } + + /** + * Delete an entry. + * + * @param string $entryId Entry id to delete + */ + function delete($entryId) + { + $kparams = array(); + $this->client->addParam($kparams, "entryId", $entryId); + $this->client->queueServiceActionCall("baseentry", "delete", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "null"); + } + + /** + * + * + * @param string $entryId + * @param int $storageProfileId + * @return KalturaBaseEntry + */ + function export($entryId, $storageProfileId) + { + $kparams = array(); + $this->client->addParam($kparams, "entryId", $entryId); + $this->client->addParam($kparams, "storageProfileId", $storageProfileId); + $this->client->queueServiceActionCall("baseentry", "export", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaBaseEntry"); + return $resultObject; + } + + /** + * Flag inappropriate entry for moderation. + * + * @param KalturaModerationFlag $moderationFlag + */ + function flag(KalturaModerationFlag $moderationFlag) + { + $kparams = array(); + $this->client->addParam($kparams, "moderationFlag", $moderationFlag->toParams()); + $this->client->queueServiceActionCall("baseentry", "flag", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "null"); + } + + /** + * Get base entry by ID. + * + * @param string $entryId Entry id + * @param int $version Desired version of the data + * @return KalturaBaseEntry + */ + function get($entryId, $version = -1) + { + $kparams = array(); + $this->client->addParam($kparams, "entryId", $entryId); + $this->client->addParam($kparams, "version", $version); + $this->client->queueServiceActionCall("baseentry", "get", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaBaseEntry"); + return $resultObject; + } + + /** + * Get an array of KalturaBaseEntry objects by a comma-separated list of ids. + * + * @param string $entryIds Comma separated string of entry ids + * @return array + */ + function getByIds($entryIds) + { + $kparams = array(); + $this->client->addParam($kparams, "entryIds", $entryIds); + $this->client->queueServiceActionCall("baseentry", "getByIds", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "array"); + return $resultObject; + } + + /** + * This action delivers entry-related data, based on the user's context: access control, restriction, playback format and storage information. + * + * @param string $entryId + * @param KalturaEntryContextDataParams $contextDataParams + * @return KalturaEntryContextDataResult + */ + function getContextData($entryId, KalturaEntryContextDataParams $contextDataParams) + { + $kparams = array(); + $this->client->addParam($kparams, "entryId", $entryId); + $this->client->addParam($kparams, "contextDataParams", $contextDataParams->toParams()); + $this->client->queueServiceActionCall("baseentry", "getContextData", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaEntryContextDataResult"); + return $resultObject; + } + + /** + * This action delivers all data relevant for player + * + * @param string $entryId + * @param KalturaPlaybackContextOptions $contextDataParams + * @return KalturaPlaybackContext + */ + function getPlaybackContext($entryId, KalturaPlaybackContextOptions $contextDataParams) + { + $kparams = array(); + $this->client->addParam($kparams, "entryId", $entryId); + $this->client->addParam($kparams, "contextDataParams", $contextDataParams->toParams()); + $this->client->queueServiceActionCall("baseentry", "getPlaybackContext", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaPlaybackContext"); + return $resultObject; + } + + /** + * Get remote storage existing paths for the asset. + * + * @param string $entryId + * @return KalturaRemotePathListResponse + */ + function getRemotePaths($entryId) + { + $kparams = array(); + $this->client->addParam($kparams, "entryId", $entryId); + $this->client->queueServiceActionCall("baseentry", "getRemotePaths", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaRemotePathListResponse"); + return $resultObject; + } + + /** + * Index an entry by id. + * + * @param string $id + * @param bool $shouldUpdate + * @return int + */ + function index($id, $shouldUpdate = true) + { + $kparams = array(); + $this->client->addParam($kparams, "id", $id); + $this->client->addParam($kparams, "shouldUpdate", $shouldUpdate); + $this->client->queueServiceActionCall("baseentry", "index", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "integer"); + return $resultObject; + } + + /** + * List base entries by filter with paging support. + * + * @param KalturaBaseEntryFilter $filter Entry filter + * @param KalturaFilterPager $pager Pager + * @return KalturaBaseEntryListResponse + */ + function listAction(KalturaBaseEntryFilter $filter = null, KalturaFilterPager $pager = null) + { + $kparams = array(); + if ($filter !== null) + $this->client->addParam($kparams, "filter", $filter->toParams()); + if ($pager !== null) + $this->client->addParam($kparams, "pager", $pager->toParams()); + $this->client->queueServiceActionCall("baseentry", "list", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaBaseEntryListResponse"); + return $resultObject; + } + + /** + * List base entries by filter according to reference id + * + * @param string $refId Entry Reference ID + * @param KalturaFilterPager $pager Pager + * @return KalturaBaseEntryListResponse + */ + function listByReferenceId($refId, KalturaFilterPager $pager = null) + { + $kparams = array(); + $this->client->addParam($kparams, "refId", $refId); + if ($pager !== null) + $this->client->addParam($kparams, "pager", $pager->toParams()); + $this->client->queueServiceActionCall("baseentry", "listByReferenceId", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaBaseEntryListResponse"); + return $resultObject; + } + + /** + * List all pending flags for the entry. + * + * @param string $entryId + * @param KalturaFilterPager $pager + * @return KalturaModerationFlagListResponse + */ + function listFlags($entryId, KalturaFilterPager $pager = null) + { + $kparams = array(); + $this->client->addParam($kparams, "entryId", $entryId); + if ($pager !== null) + $this->client->addParam($kparams, "pager", $pager->toParams()); + $this->client->queueServiceActionCall("baseentry", "listFlags", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaModerationFlagListResponse"); + return $resultObject; + } + + /** + * Reject the entry and mark the pending flags (if any) as moderated (this will make the entry non-playable). + * + * @param string $entryId + */ + function reject($entryId) + { + $kparams = array(); + $this->client->addParam($kparams, "entryId", $entryId); + $this->client->queueServiceActionCall("baseentry", "reject", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "null"); + } + + /** + * Update base entry. Only the properties that were set will be updated. + * + * @param string $entryId Entry id to update + * @param KalturaBaseEntry $baseEntry Base entry metadata to update + * @return KalturaBaseEntry + */ + function update($entryId, KalturaBaseEntry $baseEntry) + { + $kparams = array(); + $this->client->addParam($kparams, "entryId", $entryId); + $this->client->addParam($kparams, "baseEntry", $baseEntry->toParams()); + $this->client->queueServiceActionCall("baseentry", "update", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaBaseEntry"); + return $resultObject; + } + + /** + * Update the content resource associated with the entry. + * + * @param string $entryId Entry id to update + * @param KalturaResource $resource Resource to be used to replace entry content + * @param int $conversionProfileId The conversion profile id to be used on the entry + * @param KalturaEntryReplacementOptions $advancedOptions Additional update content options + * @return KalturaBaseEntry + */ + function updateContent($entryId, KalturaResource $resource, $conversionProfileId = null, KalturaEntryReplacementOptions $advancedOptions = null) + { + $kparams = array(); + $this->client->addParam($kparams, "entryId", $entryId); + $this->client->addParam($kparams, "resource", $resource->toParams()); + $this->client->addParam($kparams, "conversionProfileId", $conversionProfileId); + if ($advancedOptions !== null) + $this->client->addParam($kparams, "advancedOptions", $advancedOptions->toParams()); + $this->client->queueServiceActionCall("baseentry", "updateContent", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaBaseEntry"); + return $resultObject; + } + + /** + * Update entry thumbnail from a different entry by a specified time offset (in seconds). + * + * @param string $entryId Media entry id + * @param string $sourceEntryId Media entry id + * @param int $timeOffset Time offset (in seconds) + * @return KalturaBaseEntry + */ + function updateThumbnailFromSourceEntry($entryId, $sourceEntryId, $timeOffset) + { + $kparams = array(); + $this->client->addParam($kparams, "entryId", $entryId); + $this->client->addParam($kparams, "sourceEntryId", $sourceEntryId); + $this->client->addParam($kparams, "timeOffset", $timeOffset); + $this->client->queueServiceActionCall("baseentry", "updateThumbnailFromSourceEntry", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaBaseEntry"); + return $resultObject; + } + + /** + * Update entry thumbnail using url. + * + * @param string $entryId Media entry id + * @param string $url File url + * @return KalturaBaseEntry + */ + function updateThumbnailFromUrl($entryId, $url) + { + $kparams = array(); + $this->client->addParam($kparams, "entryId", $entryId); + $this->client->addParam($kparams, "url", $url); + $this->client->queueServiceActionCall("baseentry", "updateThumbnailFromUrl", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaBaseEntry"); + return $resultObject; + } + + /** + * Update entry thumbnail using a raw jpeg file. + * + * @param string $entryId Media entry id + * @param file $fileData Jpeg file data + * @return KalturaBaseEntry + */ + function updateThumbnailJpeg($entryId, $fileData) + { + $kparams = array(); + $this->client->addParam($kparams, "entryId", $entryId); + $kfiles = array(); + $this->client->addParam($kfiles, "fileData", $fileData); + $this->client->queueServiceActionCall("baseentry", "updateThumbnailJpeg", $kparams, $kfiles); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaBaseEntry"); + return $resultObject; + } + + /** + * Upload a file to Kaltura, that can be used to create an entry. + * + * @param file $fileData The file data + * @return string + */ + function upload($fileData) + { + $kparams = array(); + $kfiles = array(); + $this->client->addParam($kfiles, "fileData", $fileData); + $this->client->queueServiceActionCall("baseentry", "upload", $kparams, $kfiles); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "string"); + return $resultObject; + } +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaBulkUploadService extends KalturaServiceBase +{ + function __construct(KalturaClient $client = null) + { + parent::__construct($client); + } + + /** + * Aborts the bulk upload and all its child jobs + * + * @param bigint $id Job id + * @return KalturaBulkUpload + */ + function abort($id) + { + $kparams = array(); + $this->client->addParam($kparams, "id", $id); + $this->client->queueServiceActionCall("bulkupload", "abort", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaBulkUpload"); + return $resultObject; + } + + /** + * Add new bulk upload batch job + Conversion profile id can be specified in the API or in the CSV file, the one in the CSV file will be stronger. + If no conversion profile was specified, partner's default will be used + * + * @param int $conversionProfileId Convertion profile id to use for converting the current bulk (-1 to use partner's default) + * @param file $csvFileData Bulk upload file + * @param string $bulkUploadType + * @param string $uploadedBy + * @param string $fileName Friendly name of the file, used to be recognized later in the logs. + * @return KalturaBulkUpload + */ + function add($conversionProfileId, $csvFileData, $bulkUploadType = null, $uploadedBy = null, $fileName = null) + { + $kparams = array(); + $this->client->addParam($kparams, "conversionProfileId", $conversionProfileId); + $kfiles = array(); + $this->client->addParam($kfiles, "csvFileData", $csvFileData); + $this->client->addParam($kparams, "bulkUploadType", $bulkUploadType); + $this->client->addParam($kparams, "uploadedBy", $uploadedBy); + $this->client->addParam($kparams, "fileName", $fileName); + $this->client->queueServiceActionCall("bulkupload", "add", $kparams, $kfiles); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaBulkUpload"); + return $resultObject; + } + + /** + * Get bulk upload batch job by id + * + * @param bigint $id + * @return KalturaBulkUpload + */ + function get($id) + { + $kparams = array(); + $this->client->addParam($kparams, "id", $id); + $this->client->queueServiceActionCall("bulkupload", "get", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaBulkUpload"); + return $resultObject; + } + + /** + * List bulk upload batch jobs + * + * @param KalturaFilterPager $pager + * @return KalturaBulkUploadListResponse + */ + function listAction(KalturaFilterPager $pager = null) + { + $kparams = array(); + if ($pager !== null) + $this->client->addParam($kparams, "pager", $pager->toParams()); + $this->client->queueServiceActionCall("bulkupload", "list", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaBulkUploadListResponse"); + return $resultObject; + } + + /** + * Serve action returan the original file. + * + * @param bigint $id Job id + * @return file + */ + function serve($id) + { + if ($this->client->isMultiRequest()) + throw new KalturaClientException("Action is not supported as part of multi-request.", KalturaClientException::ERROR_ACTION_IN_MULTIREQUEST); + + $kparams = array(); + $this->client->addParam($kparams, "id", $id); + $this->client->queueServiceActionCall("bulkupload", "serve", $kparams); + if(!$this->client->getDestinationPath() && !$this->client->getReturnServedResult()) + return $this->client->getServeUrl(); + return $this->client->doQueue(); + } + + /** + * ServeLog action returan the original file. + * + * @param bigint $id Job id + * @return file + */ + function serveLog($id) + { + if ($this->client->isMultiRequest()) + throw new KalturaClientException("Action is not supported as part of multi-request.", KalturaClientException::ERROR_ACTION_IN_MULTIREQUEST); + + $kparams = array(); + $this->client->addParam($kparams, "id", $id); + $this->client->queueServiceActionCall("bulkupload", "serveLog", $kparams); + if(!$this->client->getDestinationPath() && !$this->client->getReturnServedResult()) + return $this->client->getServeUrl(); + return $this->client->doQueue(); + } +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaCategoryEntryService extends KalturaServiceBase +{ + function __construct(KalturaClient $client = null) + { + parent::__construct($client); + } + + /** + * Activate CategoryEntry when it is pending moderation + * + * @param string $entryId + * @param int $categoryId + */ + function activate($entryId, $categoryId) + { + $kparams = array(); + $this->client->addParam($kparams, "entryId", $entryId); + $this->client->addParam($kparams, "categoryId", $categoryId); + $this->client->queueServiceActionCall("categoryentry", "activate", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "null"); + } + + /** + * Add new CategoryEntry + * + * @param KalturaCategoryEntry $categoryEntry + * @return KalturaCategoryEntry + */ + function add(KalturaCategoryEntry $categoryEntry) + { + $kparams = array(); + $this->client->addParam($kparams, "categoryEntry", $categoryEntry->toParams()); + $this->client->queueServiceActionCall("categoryentry", "add", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaCategoryEntry"); + return $resultObject; + } + + /** + * + * + * @param KalturaBulkServiceData $bulkUploadData + * @param KalturaBulkUploadCategoryEntryData $bulkUploadCategoryEntryData + * @return KalturaBulkUpload + */ + function addFromBulkUpload(KalturaBulkServiceData $bulkUploadData, KalturaBulkUploadCategoryEntryData $bulkUploadCategoryEntryData = null) + { + $kparams = array(); + $this->client->addParam($kparams, "bulkUploadData", $bulkUploadData->toParams()); + if ($bulkUploadCategoryEntryData !== null) + $this->client->addParam($kparams, "bulkUploadCategoryEntryData", $bulkUploadCategoryEntryData->toParams()); + $this->client->queueServiceActionCall("categoryentry", "addFromBulkUpload", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaBulkUpload"); + return $resultObject; + } + + /** + * Delete CategoryEntry + * + * @param string $entryId + * @param int $categoryId + */ + function delete($entryId, $categoryId) + { + $kparams = array(); + $this->client->addParam($kparams, "entryId", $entryId); + $this->client->addParam($kparams, "categoryId", $categoryId); + $this->client->queueServiceActionCall("categoryentry", "delete", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "null"); + } + + /** + * Index CategoryEntry by Id + * + * @param string $entryId + * @param int $categoryId + * @param bool $shouldUpdate + * @return int + */ + function index($entryId, $categoryId, $shouldUpdate = true) + { + $kparams = array(); + $this->client->addParam($kparams, "entryId", $entryId); + $this->client->addParam($kparams, "categoryId", $categoryId); + $this->client->addParam($kparams, "shouldUpdate", $shouldUpdate); + $this->client->queueServiceActionCall("categoryentry", "index", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "integer"); + return $resultObject; + } + + /** + * List all categoryEntry + * + * @param KalturaCategoryEntryFilter $filter + * @param KalturaFilterPager $pager + * @return KalturaCategoryEntryListResponse + */ + function listAction(KalturaCategoryEntryFilter $filter = null, KalturaFilterPager $pager = null) + { + $kparams = array(); + if ($filter !== null) + $this->client->addParam($kparams, "filter", $filter->toParams()); + if ($pager !== null) + $this->client->addParam($kparams, "pager", $pager->toParams()); + $this->client->queueServiceActionCall("categoryentry", "list", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaCategoryEntryListResponse"); + return $resultObject; + } + + /** + * Activate CategoryEntry when it is pending moderation + * + * @param string $entryId + * @param int $categoryId + */ + function reject($entryId, $categoryId) + { + $kparams = array(); + $this->client->addParam($kparams, "entryId", $entryId); + $this->client->addParam($kparams, "categoryId", $categoryId); + $this->client->queueServiceActionCall("categoryentry", "reject", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "null"); + } + + /** + * Update privacy context from the category + * + * @param string $entryId + * @param int $categoryId + */ + function syncPrivacyContext($entryId, $categoryId) + { + $kparams = array(); + $this->client->addParam($kparams, "entryId", $entryId); + $this->client->addParam($kparams, "categoryId", $categoryId); + $this->client->queueServiceActionCall("categoryentry", "syncPrivacyContext", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "null"); + } +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaCategoryService extends KalturaServiceBase +{ + function __construct(KalturaClient $client = null) + { + parent::__construct($client); + } + + /** + * Add new Category + * + * @param KalturaCategory $category + * @return KalturaCategory + */ + function add(KalturaCategory $category) + { + $kparams = array(); + $this->client->addParam($kparams, "category", $category->toParams()); + $this->client->queueServiceActionCall("category", "add", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaCategory"); + return $resultObject; + } + + /** + * + * + * @param file $fileData + * @param KalturaBulkUploadJobData $bulkUploadData + * @param KalturaBulkUploadCategoryData $bulkUploadCategoryData + * @return KalturaBulkUpload + */ + function addFromBulkUpload($fileData, KalturaBulkUploadJobData $bulkUploadData = null, KalturaBulkUploadCategoryData $bulkUploadCategoryData = null) + { + $kparams = array(); + $kfiles = array(); + $this->client->addParam($kfiles, "fileData", $fileData); + if ($bulkUploadData !== null) + $this->client->addParam($kparams, "bulkUploadData", $bulkUploadData->toParams()); + if ($bulkUploadCategoryData !== null) + $this->client->addParam($kparams, "bulkUploadCategoryData", $bulkUploadCategoryData->toParams()); + $this->client->queueServiceActionCall("category", "addFromBulkUpload", $kparams, $kfiles); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaBulkUpload"); + return $resultObject; + } + + /** + * Delete a Category + * + * @param int $id + * @param int $moveEntriesToParentCategory + */ + function delete($id, $moveEntriesToParentCategory = 1) + { + $kparams = array(); + $this->client->addParam($kparams, "id", $id); + $this->client->addParam($kparams, "moveEntriesToParentCategory", $moveEntriesToParentCategory); + $this->client->queueServiceActionCall("category", "delete", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "null"); + } + + /** + * Get Category by id + * + * @param int $id + * @return KalturaCategory + */ + function get($id) + { + $kparams = array(); + $this->client->addParam($kparams, "id", $id); + $this->client->queueServiceActionCall("category", "get", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaCategory"); + return $resultObject; + } + + /** + * Index Category by id + * + * @param int $id + * @param bool $shouldUpdate + * @return int + */ + function index($id, $shouldUpdate = true) + { + $kparams = array(); + $this->client->addParam($kparams, "id", $id); + $this->client->addParam($kparams, "shouldUpdate", $shouldUpdate); + $this->client->queueServiceActionCall("category", "index", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "integer"); + return $resultObject; + } + + /** + * List all categories + * + * @param KalturaCategoryFilter $filter + * @param KalturaFilterPager $pager + * @return KalturaCategoryListResponse + */ + function listAction(KalturaCategoryFilter $filter = null, KalturaFilterPager $pager = null) + { + $kparams = array(); + if ($filter !== null) + $this->client->addParam($kparams, "filter", $filter->toParams()); + if ($pager !== null) + $this->client->addParam($kparams, "pager", $pager->toParams()); + $this->client->queueServiceActionCall("category", "list", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaCategoryListResponse"); + return $resultObject; + } + + /** + * Move categories that belong to the same parent category to a target categroy - enabled only for ks with disable entitlement + * + * @param string $categoryIds + * @param int $targetCategoryParentId + * @return bool + */ + function move($categoryIds, $targetCategoryParentId) + { + $kparams = array(); + $this->client->addParam($kparams, "categoryIds", $categoryIds); + $this->client->addParam($kparams, "targetCategoryParentId", $targetCategoryParentId); + $this->client->queueServiceActionCall("category", "move", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $resultObject = (bool) $resultObject; + return $resultObject; + } + + /** + * Unlock categories + * + */ + function unlockCategories() + { + $kparams = array(); + $this->client->queueServiceActionCall("category", "unlockCategories", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "null"); + } + + /** + * Update Category + * + * @param int $id + * @param KalturaCategory $category + * @return KalturaCategory + */ + function update($id, KalturaCategory $category) + { + $kparams = array(); + $this->client->addParam($kparams, "id", $id); + $this->client->addParam($kparams, "category", $category->toParams()); + $this->client->queueServiceActionCall("category", "update", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaCategory"); + return $resultObject; + } +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaCategoryUserService extends KalturaServiceBase +{ + function __construct(KalturaClient $client = null) + { + parent::__construct($client); + } + + /** + * Activate CategoryUser + * + * @param int $categoryId + * @param string $userId + * @return KalturaCategoryUser + */ + function activate($categoryId, $userId) + { + $kparams = array(); + $this->client->addParam($kparams, "categoryId", $categoryId); + $this->client->addParam($kparams, "userId", $userId); + $this->client->queueServiceActionCall("categoryuser", "activate", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaCategoryUser"); + return $resultObject; + } + + /** + * Add new CategoryUser + * + * @param KalturaCategoryUser $categoryUser + * @return KalturaCategoryUser + */ + function add(KalturaCategoryUser $categoryUser) + { + $kparams = array(); + $this->client->addParam($kparams, "categoryUser", $categoryUser->toParams()); + $this->client->queueServiceActionCall("categoryuser", "add", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaCategoryUser"); + return $resultObject; + } + + /** + * + * + * @param file $fileData + * @param KalturaBulkUploadJobData $bulkUploadData + * @param KalturaBulkUploadCategoryUserData $bulkUploadCategoryUserData + * @return KalturaBulkUpload + */ + function addFromBulkUpload($fileData, KalturaBulkUploadJobData $bulkUploadData = null, KalturaBulkUploadCategoryUserData $bulkUploadCategoryUserData = null) + { + $kparams = array(); + $kfiles = array(); + $this->client->addParam($kfiles, "fileData", $fileData); + if ($bulkUploadData !== null) + $this->client->addParam($kparams, "bulkUploadData", $bulkUploadData->toParams()); + if ($bulkUploadCategoryUserData !== null) + $this->client->addParam($kparams, "bulkUploadCategoryUserData", $bulkUploadCategoryUserData->toParams()); + $this->client->queueServiceActionCall("categoryuser", "addFromBulkUpload", $kparams, $kfiles); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaBulkUpload"); + return $resultObject; + } + + /** + * Copy all memeber from parent category + * + * @param int $categoryId + */ + function copyFromCategory($categoryId) + { + $kparams = array(); + $this->client->addParam($kparams, "categoryId", $categoryId); + $this->client->queueServiceActionCall("categoryuser", "copyFromCategory", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "null"); + } + + /** + * Reject CategoryUser + * + * @param int $categoryId + * @param string $userId + * @return KalturaCategoryUser + */ + function deactivate($categoryId, $userId) + { + $kparams = array(); + $this->client->addParam($kparams, "categoryId", $categoryId); + $this->client->addParam($kparams, "userId", $userId); + $this->client->queueServiceActionCall("categoryuser", "deactivate", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaCategoryUser"); + return $resultObject; + } + + /** + * Delete a CategoryUser + * + * @param int $categoryId + * @param string $userId + */ + function delete($categoryId, $userId) + { + $kparams = array(); + $this->client->addParam($kparams, "categoryId", $categoryId); + $this->client->addParam($kparams, "userId", $userId); + $this->client->queueServiceActionCall("categoryuser", "delete", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "null"); + } + + /** + * Get CategoryUser by id + * + * @param int $categoryId + * @param string $userId + * @return KalturaCategoryUser + */ + function get($categoryId, $userId) + { + $kparams = array(); + $this->client->addParam($kparams, "categoryId", $categoryId); + $this->client->addParam($kparams, "userId", $userId); + $this->client->queueServiceActionCall("categoryuser", "get", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaCategoryUser"); + return $resultObject; + } + + /** + * Index CategoryUser by userid and category id + * + * @param string $userId + * @param int $categoryId + * @param bool $shouldUpdate + * @return int + */ + function index($userId, $categoryId, $shouldUpdate = true) + { + $kparams = array(); + $this->client->addParam($kparams, "userId", $userId); + $this->client->addParam($kparams, "categoryId", $categoryId); + $this->client->addParam($kparams, "shouldUpdate", $shouldUpdate); + $this->client->queueServiceActionCall("categoryuser", "index", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "integer"); + return $resultObject; + } + + /** + * List all categories + * + * @param KalturaCategoryUserFilter $filter + * @param KalturaFilterPager $pager + * @return KalturaCategoryUserListResponse + */ + function listAction(KalturaCategoryUserFilter $filter = null, KalturaFilterPager $pager = null) + { + $kparams = array(); + if ($filter !== null) + $this->client->addParam($kparams, "filter", $filter->toParams()); + if ($pager !== null) + $this->client->addParam($kparams, "pager", $pager->toParams()); + $this->client->queueServiceActionCall("categoryuser", "list", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaCategoryUserListResponse"); + return $resultObject; + } + + /** + * Update CategoryUser by id + * + * @param int $categoryId + * @param string $userId + * @param KalturaCategoryUser $categoryUser + * @param bool $override - to override manual changes + * @return KalturaCategoryUser + */ + function update($categoryId, $userId, KalturaCategoryUser $categoryUser, $override = false) + { + $kparams = array(); + $this->client->addParam($kparams, "categoryId", $categoryId); + $this->client->addParam($kparams, "userId", $userId); + $this->client->addParam($kparams, "categoryUser", $categoryUser->toParams()); + $this->client->addParam($kparams, "override", $override); + $this->client->queueServiceActionCall("categoryuser", "update", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaCategoryUser"); + return $resultObject; + } +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaConversionProfileAssetParamsService extends KalturaServiceBase +{ + function __construct(KalturaClient $client = null) + { + parent::__construct($client); + } + + /** + * Lists asset parmas of conversion profile by ID + * + * @param KalturaConversionProfileAssetParamsFilter $filter + * @param KalturaFilterPager $pager + * @return KalturaConversionProfileAssetParamsListResponse + */ + function listAction(KalturaConversionProfileAssetParamsFilter $filter = null, KalturaFilterPager $pager = null) + { + $kparams = array(); + if ($filter !== null) + $this->client->addParam($kparams, "filter", $filter->toParams()); + if ($pager !== null) + $this->client->addParam($kparams, "pager", $pager->toParams()); + $this->client->queueServiceActionCall("conversionprofileassetparams", "list", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaConversionProfileAssetParamsListResponse"); + return $resultObject; + } + + /** + * Update asset parmas of conversion profile by ID + * + * @param int $conversionProfileId + * @param int $assetParamsId + * @param KalturaConversionProfileAssetParams $conversionProfileAssetParams + * @return KalturaConversionProfileAssetParams + */ + function update($conversionProfileId, $assetParamsId, KalturaConversionProfileAssetParams $conversionProfileAssetParams) + { + $kparams = array(); + $this->client->addParam($kparams, "conversionProfileId", $conversionProfileId); + $this->client->addParam($kparams, "assetParamsId", $assetParamsId); + $this->client->addParam($kparams, "conversionProfileAssetParams", $conversionProfileAssetParams->toParams()); + $this->client->queueServiceActionCall("conversionprofileassetparams", "update", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaConversionProfileAssetParams"); + return $resultObject; + } +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaConversionProfileService extends KalturaServiceBase +{ + function __construct(KalturaClient $client = null) + { + parent::__construct($client); + } + + /** + * Add new Conversion Profile + * + * @param KalturaConversionProfile $conversionProfile + * @return KalturaConversionProfile + */ + function add(KalturaConversionProfile $conversionProfile) + { + $kparams = array(); + $this->client->addParam($kparams, "conversionProfile", $conversionProfile->toParams()); + $this->client->queueServiceActionCall("conversionprofile", "add", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaConversionProfile"); + return $resultObject; + } + + /** + * Delete Conversion Profile by ID + * + * @param int $id + */ + function delete($id) + { + $kparams = array(); + $this->client->addParam($kparams, "id", $id); + $this->client->queueServiceActionCall("conversionprofile", "delete", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "null"); + } + + /** + * Get Conversion Profile by ID + * + * @param int $id + * @return KalturaConversionProfile + */ + function get($id) + { + $kparams = array(); + $this->client->addParam($kparams, "id", $id); + $this->client->queueServiceActionCall("conversionprofile", "get", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaConversionProfile"); + return $resultObject; + } + + /** + * Get the partner's default conversion profile + * + * @param string $type + * @return KalturaConversionProfile + */ + function getDefault($type = null) + { + $kparams = array(); + $this->client->addParam($kparams, "type", $type); + $this->client->queueServiceActionCall("conversionprofile", "getDefault", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaConversionProfile"); + return $resultObject; + } + + /** + * List Conversion Profiles by filter with paging support + * + * @param KalturaConversionProfileFilter $filter + * @param KalturaFilterPager $pager + * @return KalturaConversionProfileListResponse + */ + function listAction(KalturaConversionProfileFilter $filter = null, KalturaFilterPager $pager = null) + { + $kparams = array(); + if ($filter !== null) + $this->client->addParam($kparams, "filter", $filter->toParams()); + if ($pager !== null) + $this->client->addParam($kparams, "pager", $pager->toParams()); + $this->client->queueServiceActionCall("conversionprofile", "list", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaConversionProfileListResponse"); + return $resultObject; + } + + /** + * Set Conversion Profile to be the partner default + * + * @param int $id + * @return KalturaConversionProfile + */ + function setAsDefault($id) + { + $kparams = array(); + $this->client->addParam($kparams, "id", $id); + $this->client->queueServiceActionCall("conversionprofile", "setAsDefault", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaConversionProfile"); + return $resultObject; + } + + /** + * Update Conversion Profile by ID + * + * @param int $id + * @param KalturaConversionProfile $conversionProfile + * @return KalturaConversionProfile + */ + function update($id, KalturaConversionProfile $conversionProfile) + { + $kparams = array(); + $this->client->addParam($kparams, "id", $id); + $this->client->addParam($kparams, "conversionProfile", $conversionProfile->toParams()); + $this->client->queueServiceActionCall("conversionprofile", "update", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaConversionProfile"); + return $resultObject; + } +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaDataService extends KalturaServiceBase +{ + function __construct(KalturaClient $client = null) + { + parent::__construct($client); + } + + /** + * Adds a new data entry + * + * @param KalturaDataEntry $dataEntry Data entry + * @return KalturaDataEntry + */ + function add(KalturaDataEntry $dataEntry) + { + $kparams = array(); + $this->client->addParam($kparams, "dataEntry", $dataEntry->toParams()); + $this->client->queueServiceActionCall("data", "add", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaDataEntry"); + return $resultObject; + } + + /** + * Update the dataContent of data entry using a resource + * + * @param string $entryId + * @param KalturaGenericDataCenterContentResource $resource + * @return string + */ + function addContent($entryId, KalturaGenericDataCenterContentResource $resource) + { + $kparams = array(); + $this->client->addParam($kparams, "entryId", $entryId); + $this->client->addParam($kparams, "resource", $resource->toParams()); + $this->client->queueServiceActionCall("data", "addContent", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "string"); + return $resultObject; + } + + /** + * Delete a data entry. + * + * @param string $entryId Data entry id to delete + */ + function delete($entryId) + { + $kparams = array(); + $this->client->addParam($kparams, "entryId", $entryId); + $this->client->queueServiceActionCall("data", "delete", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "null"); + } + + /** + * Get data entry by ID. + * + * @param string $entryId Data entry id + * @param int $version Desired version of the data + * @return KalturaDataEntry + */ + function get($entryId, $version = -1) + { + $kparams = array(); + $this->client->addParam($kparams, "entryId", $entryId); + $this->client->addParam($kparams, "version", $version); + $this->client->queueServiceActionCall("data", "get", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaDataEntry"); + return $resultObject; + } + + /** + * List data entries by filter with paging support. + * + * @param KalturaDataEntryFilter $filter Document entry filter + * @param KalturaFilterPager $pager Pager + * @return KalturaDataListResponse + */ + function listAction(KalturaDataEntryFilter $filter = null, KalturaFilterPager $pager = null) + { + $kparams = array(); + if ($filter !== null) + $this->client->addParam($kparams, "filter", $filter->toParams()); + if ($pager !== null) + $this->client->addParam($kparams, "pager", $pager->toParams()); + $this->client->queueServiceActionCall("data", "list", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaDataListResponse"); + return $resultObject; + } + + /** + * Serve action returan the file from dataContent field. + * + * @param string $entryId Data entry id + * @param int $version Desired version of the data + * @param bool $forceProxy Force to get the content without redirect + * @return file + */ + function serve($entryId, $version = -1, $forceProxy = false) + { + if ($this->client->isMultiRequest()) + throw new KalturaClientException("Action is not supported as part of multi-request.", KalturaClientException::ERROR_ACTION_IN_MULTIREQUEST); + + $kparams = array(); + $this->client->addParam($kparams, "entryId", $entryId); + $this->client->addParam($kparams, "version", $version); + $this->client->addParam($kparams, "forceProxy", $forceProxy); + $this->client->queueServiceActionCall("data", "serve", $kparams); + if(!$this->client->getDestinationPath() && !$this->client->getReturnServedResult()) + return $this->client->getServeUrl(); + return $this->client->doQueue(); + } + + /** + * Update data entry. Only the properties that were set will be updated. + * + * @param string $entryId Data entry id to update + * @param KalturaDataEntry $documentEntry Data entry metadata to update + * @return KalturaDataEntry + */ + function update($entryId, KalturaDataEntry $documentEntry) + { + $kparams = array(); + $this->client->addParam($kparams, "entryId", $entryId); + $this->client->addParam($kparams, "documentEntry", $documentEntry->toParams()); + $this->client->queueServiceActionCall("data", "update", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaDataEntry"); + return $resultObject; + } +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaDeliveryProfileService extends KalturaServiceBase +{ + function __construct(KalturaClient $client = null) + { + parent::__construct($client); + } + + /** + * Add new delivery. + * + * @param KalturaDeliveryProfile $delivery + * @return KalturaDeliveryProfile + */ + function add(KalturaDeliveryProfile $delivery) + { + $kparams = array(); + $this->client->addParam($kparams, "delivery", $delivery->toParams()); + $this->client->queueServiceActionCall("deliveryprofile", "add", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaDeliveryProfile"); + return $resultObject; + } + + /** + * Add delivery based on existing delivery. + Must provide valid sourceDeliveryId + * + * @param int $deliveryId + * @return KalturaDeliveryProfile + */ + function cloneAction($deliveryId) + { + $kparams = array(); + $this->client->addParam($kparams, "deliveryId", $deliveryId); + $this->client->queueServiceActionCall("deliveryprofile", "clone", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaDeliveryProfile"); + return $resultObject; + } + + /** + * Get delivery by id + * + * @param string $id + * @return KalturaDeliveryProfile + */ + function get($id) + { + $kparams = array(); + $this->client->addParam($kparams, "id", $id); + $this->client->queueServiceActionCall("deliveryprofile", "get", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaDeliveryProfile"); + return $resultObject; + } + + /** + * Retrieve a list of available delivery depends on the filter given + * + * @param KalturaDeliveryProfileFilter $filter + * @param KalturaFilterPager $pager + * @return KalturaDeliveryProfileListResponse + */ + function listAction(KalturaDeliveryProfileFilter $filter = null, KalturaFilterPager $pager = null) + { + $kparams = array(); + if ($filter !== null) + $this->client->addParam($kparams, "filter", $filter->toParams()); + if ($pager !== null) + $this->client->addParam($kparams, "pager", $pager->toParams()); + $this->client->queueServiceActionCall("deliveryprofile", "list", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaDeliveryProfileListResponse"); + return $resultObject; + } + + /** + * Update exisiting delivery + * + * @param string $id + * @param KalturaDeliveryProfile $delivery + * @return KalturaDeliveryProfile + */ + function update($id, KalturaDeliveryProfile $delivery) + { + $kparams = array(); + $this->client->addParam($kparams, "id", $id); + $this->client->addParam($kparams, "delivery", $delivery->toParams()); + $this->client->queueServiceActionCall("deliveryprofile", "update", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaDeliveryProfile"); + return $resultObject; + } +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaEmailIngestionProfileService extends KalturaServiceBase +{ + function __construct(KalturaClient $client = null) + { + parent::__construct($client); + } + + /** + * EmailIngestionProfile Add action allows you to add a EmailIngestionProfile to Kaltura DB + * + * @param KalturaEmailIngestionProfile $EmailIP Mandatory input parameter of type KalturaEmailIngestionProfile + * @return KalturaEmailIngestionProfile + */ + function add(KalturaEmailIngestionProfile $EmailIP) + { + $kparams = array(); + $this->client->addParam($kparams, "EmailIP", $EmailIP->toParams()); + $this->client->queueServiceActionCall("emailingestionprofile", "add", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaEmailIngestionProfile"); + return $resultObject; + } + + /** + * Add KalturaMediaEntry from email ingestion + * + * @param KalturaMediaEntry $mediaEntry Media entry metadata + * @param string $uploadTokenId Upload token id + * @param int $emailProfId + * @param string $fromAddress + * @param string $emailMsgId + * @return KalturaMediaEntry + */ + function addMediaEntry(KalturaMediaEntry $mediaEntry, $uploadTokenId, $emailProfId, $fromAddress, $emailMsgId) + { + $kparams = array(); + $this->client->addParam($kparams, "mediaEntry", $mediaEntry->toParams()); + $this->client->addParam($kparams, "uploadTokenId", $uploadTokenId); + $this->client->addParam($kparams, "emailProfId", $emailProfId); + $this->client->addParam($kparams, "fromAddress", $fromAddress); + $this->client->addParam($kparams, "emailMsgId", $emailMsgId); + $this->client->queueServiceActionCall("emailingestionprofile", "addMediaEntry", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaMediaEntry"); + return $resultObject; + } + + /** + * Delete an existing EmailIngestionProfile + * + * @param int $id + */ + function delete($id) + { + $kparams = array(); + $this->client->addParam($kparams, "id", $id); + $this->client->queueServiceActionCall("emailingestionprofile", "delete", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "null"); + } + + /** + * Retrieve a EmailIngestionProfile by id + * + * @param int $id + * @return KalturaEmailIngestionProfile + */ + function get($id) + { + $kparams = array(); + $this->client->addParam($kparams, "id", $id); + $this->client->queueServiceActionCall("emailingestionprofile", "get", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaEmailIngestionProfile"); + return $resultObject; + } + + /** + * Retrieve a EmailIngestionProfile by email address + * + * @param string $emailAddress + * @return KalturaEmailIngestionProfile + */ + function getByEmailAddress($emailAddress) + { + $kparams = array(); + $this->client->addParam($kparams, "emailAddress", $emailAddress); + $this->client->queueServiceActionCall("emailingestionprofile", "getByEmailAddress", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaEmailIngestionProfile"); + return $resultObject; + } + + /** + * Update an existing EmailIngestionProfile + * + * @param int $id + * @param KalturaEmailIngestionProfile $EmailIP + * @return KalturaEmailIngestionProfile + */ + function update($id, KalturaEmailIngestionProfile $EmailIP) + { + $kparams = array(); + $this->client->addParam($kparams, "id", $id); + $this->client->addParam($kparams, "EmailIP", $EmailIP->toParams()); + $this->client->queueServiceActionCall("emailingestionprofile", "update", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaEmailIngestionProfile"); + return $resultObject; + } +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaEntryServerNodeService extends KalturaServiceBase +{ + function __construct(KalturaClient $client = null) + { + parent::__construct($client); + } + + /** + * + * + * @param string $id + * @return KalturaEntryServerNode + */ + function get($id) + { + $kparams = array(); + $this->client->addParam($kparams, "id", $id); + $this->client->queueServiceActionCall("entryservernode", "get", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaEntryServerNode"); + return $resultObject; + } + + /** + * + * + * @param KalturaEntryServerNodeFilter $filter + * @param KalturaFilterPager $pager + * @return KalturaEntryServerNodeListResponse + */ + function listAction(KalturaEntryServerNodeFilter $filter = null, KalturaFilterPager $pager = null) + { + $kparams = array(); + if ($filter !== null) + $this->client->addParam($kparams, "filter", $filter->toParams()); + if ($pager !== null) + $this->client->addParam($kparams, "pager", $pager->toParams()); + $this->client->queueServiceActionCall("entryservernode", "list", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaEntryServerNodeListResponse"); + return $resultObject; + } + + /** + * + * + * @param int $id + * @param KalturaEntryServerNode $entryServerNode + * @return KalturaEntryServerNode + */ + function update($id, KalturaEntryServerNode $entryServerNode) + { + $kparams = array(); + $this->client->addParam($kparams, "id", $id); + $this->client->addParam($kparams, "entryServerNode", $entryServerNode->toParams()); + $this->client->queueServiceActionCall("entryservernode", "update", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaEntryServerNode"); + return $resultObject; + } + + /** + * Validates server node still registered on entry + * + * @param int $id Entry server node id + */ + function validateRegisteredEntryServerNode($id) + { + $kparams = array(); + $this->client->addParam($kparams, "id", $id); + $this->client->queueServiceActionCall("entryservernode", "validateRegisteredEntryServerNode", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "null"); + } +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaFileAssetService extends KalturaServiceBase +{ + function __construct(KalturaClient $client = null) + { + parent::__construct($client); + } + + /** + * Add new file asset + * + * @param KalturaFileAsset $fileAsset + * @return KalturaFileAsset + */ + function add(KalturaFileAsset $fileAsset) + { + $kparams = array(); + $this->client->addParam($kparams, "fileAsset", $fileAsset->toParams()); + $this->client->queueServiceActionCall("fileasset", "add", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaFileAsset"); + return $resultObject; + } + + /** + * Delete file asset by id + * + * @param bigint $id + */ + function delete($id) + { + $kparams = array(); + $this->client->addParam($kparams, "id", $id); + $this->client->queueServiceActionCall("fileasset", "delete", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "null"); + } + + /** + * Get file asset by id + * + * @param bigint $id + * @return KalturaFileAsset + */ + function get($id) + { + $kparams = array(); + $this->client->addParam($kparams, "id", $id); + $this->client->queueServiceActionCall("fileasset", "get", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaFileAsset"); + return $resultObject; + } + + /** + * List file assets by filter and pager + * + * @param KalturaFileAssetFilter $filter + * @param KalturaFilterPager $pager + * @return KalturaFileAssetListResponse + */ + function listAction(KalturaFileAssetFilter $filter, KalturaFilterPager $pager = null) + { + $kparams = array(); + $this->client->addParam($kparams, "filter", $filter->toParams()); + if ($pager !== null) + $this->client->addParam($kparams, "pager", $pager->toParams()); + $this->client->queueServiceActionCall("fileasset", "list", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaFileAssetListResponse"); + return $resultObject; + } + + /** + * Serve file asset by id + * + * @param bigint $id + * @return file + */ + function serve($id) + { + if ($this->client->isMultiRequest()) + throw new KalturaClientException("Action is not supported as part of multi-request.", KalturaClientException::ERROR_ACTION_IN_MULTIREQUEST); + + $kparams = array(); + $this->client->addParam($kparams, "id", $id); + $this->client->queueServiceActionCall("fileasset", "serve", $kparams); + if(!$this->client->getDestinationPath() && !$this->client->getReturnServedResult()) + return $this->client->getServeUrl(); + return $this->client->doQueue(); + } + + /** + * Set content of file asset + * + * @param bigint $id + * @param KalturaContentResource $contentResource + * @return KalturaFileAsset + */ + function setContent($id, KalturaContentResource $contentResource) + { + $kparams = array(); + $this->client->addParam($kparams, "id", $id); + $this->client->addParam($kparams, "contentResource", $contentResource->toParams()); + $this->client->queueServiceActionCall("fileasset", "setContent", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaFileAsset"); + return $resultObject; + } + + /** + * Update file asset by id + * + * @param bigint $id + * @param KalturaFileAsset $fileAsset + * @return KalturaFileAsset + */ + function update($id, KalturaFileAsset $fileAsset) + { + $kparams = array(); + $this->client->addParam($kparams, "id", $id); + $this->client->addParam($kparams, "fileAsset", $fileAsset->toParams()); + $this->client->queueServiceActionCall("fileasset", "update", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaFileAsset"); + return $resultObject; + } +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaFlavorAssetService extends KalturaServiceBase +{ + function __construct(KalturaClient $client = null) + { + parent::__construct($client); + } + + /** + * Add flavor asset + * + * @param string $entryId + * @param KalturaFlavorAsset $flavorAsset + * @return KalturaFlavorAsset + */ + function add($entryId, KalturaFlavorAsset $flavorAsset) + { + $kparams = array(); + $this->client->addParam($kparams, "entryId", $entryId); + $this->client->addParam($kparams, "flavorAsset", $flavorAsset->toParams()); + $this->client->queueServiceActionCall("flavorasset", "add", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaFlavorAsset"); + return $resultObject; + } + + /** + * Add and convert new Flavor Asset for Entry with specific Flavor Params + * + * @param string $entryId + * @param int $flavorParamsId + * @param int $priority + */ + function convert($entryId, $flavorParamsId, $priority = 0) + { + $kparams = array(); + $this->client->addParam($kparams, "entryId", $entryId); + $this->client->addParam($kparams, "flavorParamsId", $flavorParamsId); + $this->client->addParam($kparams, "priority", $priority); + $this->client->queueServiceActionCall("flavorasset", "convert", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "null"); + } + + /** + * Delete Flavor Asset by ID + * + * @param string $id + */ + function delete($id) + { + $kparams = array(); + $this->client->addParam($kparams, "id", $id); + $this->client->queueServiceActionCall("flavorasset", "delete", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "null"); + } + + /** + * Delete all local file syncs for this asset + * + * @param string $assetId + */ + function deleteLocalContent($assetId) + { + $kparams = array(); + $this->client->addParam($kparams, "assetId", $assetId); + $this->client->queueServiceActionCall("flavorasset", "deleteLocalContent", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "null"); + } + + /** + * Manually export an asset + * + * @param string $assetId + * @param int $storageProfileId + * @return KalturaFlavorAsset + */ + function export($assetId, $storageProfileId) + { + $kparams = array(); + $this->client->addParam($kparams, "assetId", $assetId); + $this->client->addParam($kparams, "storageProfileId", $storageProfileId); + $this->client->queueServiceActionCall("flavorasset", "export", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaFlavorAsset"); + return $resultObject; + } + + /** + * Get Flavor Asset by ID + * + * @param string $id + * @return KalturaFlavorAsset + */ + function get($id) + { + $kparams = array(); + $this->client->addParam($kparams, "id", $id); + $this->client->queueServiceActionCall("flavorasset", "get", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaFlavorAsset"); + return $resultObject; + } + + /** + * Get Flavor Assets for Entry + * + * @param string $entryId + * @return array + */ + function getByEntryId($entryId) + { + $kparams = array(); + $this->client->addParam($kparams, "entryId", $entryId); + $this->client->queueServiceActionCall("flavorasset", "getByEntryId", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "array"); + return $resultObject; + } + + /** + * Get download URL for the Flavor Asset + * + * @param string $id + * @param bool $useCdn + * @return string + */ + function getDownloadUrl($id, $useCdn = false) + { + $kparams = array(); + $this->client->addParam($kparams, "id", $id); + $this->client->addParam($kparams, "useCdn", $useCdn); + $this->client->queueServiceActionCall("flavorasset", "getDownloadUrl", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "string"); + return $resultObject; + } + + /** + * Get Flavor Asset with the relevant Flavor Params (Flavor Params can exist without Flavor Asset & vice versa) + * + * @param string $entryId + * @return array + */ + function getFlavorAssetsWithParams($entryId) + { + $kparams = array(); + $this->client->addParam($kparams, "entryId", $entryId); + $this->client->queueServiceActionCall("flavorasset", "getFlavorAssetsWithParams", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "array"); + return $resultObject; + } + + /** + * Get remote storage existing paths for the asset + * + * @param string $id + * @return KalturaRemotePathListResponse + */ + function getRemotePaths($id) + { + $kparams = array(); + $this->client->addParam($kparams, "id", $id); + $this->client->queueServiceActionCall("flavorasset", "getRemotePaths", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaRemotePathListResponse"); + return $resultObject; + } + + /** + * Get download URL for the asset + * + * @param string $id + * @param int $storageId + * @param bool $forceProxy + * @param KalturaFlavorAssetUrlOptions $options + * @return string + */ + function getUrl($id, $storageId = null, $forceProxy = false, KalturaFlavorAssetUrlOptions $options = null) + { + $kparams = array(); + $this->client->addParam($kparams, "id", $id); + $this->client->addParam($kparams, "storageId", $storageId); + $this->client->addParam($kparams, "forceProxy", $forceProxy); + if ($options !== null) + $this->client->addParam($kparams, "options", $options->toParams()); + $this->client->queueServiceActionCall("flavorasset", "getUrl", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "string"); + return $resultObject; + } + + /** + * Get volume map by entry id + * + * @param string $flavorId Flavor id + * @return file + */ + function getVolumeMap($flavorId) + { + if ($this->client->isMultiRequest()) + throw new KalturaClientException("Action is not supported as part of multi-request.", KalturaClientException::ERROR_ACTION_IN_MULTIREQUEST); + + $kparams = array(); + $this->client->addParam($kparams, "flavorId", $flavorId); + $this->client->queueServiceActionCall("flavorasset", "getVolumeMap", $kparams); + if(!$this->client->getDestinationPath() && !$this->client->getReturnServedResult()) + return $this->client->getServeUrl(); + return $this->client->doQueue(); + } + + /** + * Get web playable Flavor Assets for Entry + * + * @param string $entryId + * @return array + */ + function getWebPlayableByEntryId($entryId) + { + $kparams = array(); + $this->client->addParam($kparams, "entryId", $entryId); + $this->client->queueServiceActionCall("flavorasset", "getWebPlayableByEntryId", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "array"); + return $resultObject; + } + + /** + * List Flavor Assets by filter and pager + * + * @param KalturaAssetFilter $filter + * @param KalturaFilterPager $pager + * @return KalturaFlavorAssetListResponse + */ + function listAction(KalturaAssetFilter $filter = null, KalturaFilterPager $pager = null) + { + $kparams = array(); + if ($filter !== null) + $this->client->addParam($kparams, "filter", $filter->toParams()); + if ($pager !== null) + $this->client->addParam($kparams, "pager", $pager->toParams()); + $this->client->queueServiceActionCall("flavorasset", "list", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaFlavorAssetListResponse"); + return $resultObject; + } + + /** + * Reconvert Flavor Asset by ID + * + * @param string $id Flavor Asset ID + */ + function reconvert($id) + { + $kparams = array(); + $this->client->addParam($kparams, "id", $id); + $this->client->queueServiceActionCall("flavorasset", "reconvert", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "null"); + } + + /** + * Serve cmd line to transcode the ad + * + * @param string $assetId + * @param string $ffprobeJson + * @param string $duration + * @return string + */ + function serveAdStitchCmd($assetId, $ffprobeJson = null, $duration = null) + { + $kparams = array(); + $this->client->addParam($kparams, "assetId", $assetId); + $this->client->addParam($kparams, "ffprobeJson", $ffprobeJson); + $this->client->addParam($kparams, "duration", $duration); + $this->client->queueServiceActionCall("flavorasset", "serveAdStitchCmd", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "string"); + return $resultObject; + } + + /** + * Set a given flavor as the original flavor + * + * @param string $assetId + */ + function setAsSource($assetId) + { + $kparams = array(); + $this->client->addParam($kparams, "assetId", $assetId); + $this->client->queueServiceActionCall("flavorasset", "setAsSource", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "null"); + } + + /** + * Update content of flavor asset + * + * @param string $id + * @param KalturaContentResource $contentResource + * @return KalturaFlavorAsset + */ + function setContent($id, KalturaContentResource $contentResource) + { + $kparams = array(); + $this->client->addParam($kparams, "id", $id); + $this->client->addParam($kparams, "contentResource", $contentResource->toParams()); + $this->client->queueServiceActionCall("flavorasset", "setContent", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaFlavorAsset"); + return $resultObject; + } + + /** + * Update flavor asset + * + * @param string $id + * @param KalturaFlavorAsset $flavorAsset + * @return KalturaFlavorAsset + */ + function update($id, KalturaFlavorAsset $flavorAsset) + { + $kparams = array(); + $this->client->addParam($kparams, "id", $id); + $this->client->addParam($kparams, "flavorAsset", $flavorAsset->toParams()); + $this->client->queueServiceActionCall("flavorasset", "update", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaFlavorAsset"); + return $resultObject; + } +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaFlavorParamsOutputService extends KalturaServiceBase +{ + function __construct(KalturaClient $client = null) + { + parent::__construct($client); + } + + /** + * Get flavor params output object by ID + * + * @param int $id + * @return KalturaFlavorParamsOutput + */ + function get($id) + { + $kparams = array(); + $this->client->addParam($kparams, "id", $id); + $this->client->queueServiceActionCall("flavorparamsoutput", "get", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaFlavorParamsOutput"); + return $resultObject; + } + + /** + * List flavor params output objects by filter and pager + * + * @param KalturaFlavorParamsOutputFilter $filter + * @param KalturaFilterPager $pager + * @return KalturaFlavorParamsOutputListResponse + */ + function listAction(KalturaFlavorParamsOutputFilter $filter = null, KalturaFilterPager $pager = null) + { + $kparams = array(); + if ($filter !== null) + $this->client->addParam($kparams, "filter", $filter->toParams()); + if ($pager !== null) + $this->client->addParam($kparams, "pager", $pager->toParams()); + $this->client->queueServiceActionCall("flavorparamsoutput", "list", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaFlavorParamsOutputListResponse"); + return $resultObject; + } +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaFlavorParamsService extends KalturaServiceBase +{ + function __construct(KalturaClient $client = null) + { + parent::__construct($client); + } + + /** + * Add new Flavor Params + * + * @param KalturaFlavorParams $flavorParams + * @return KalturaFlavorParams + */ + function add(KalturaFlavorParams $flavorParams) + { + $kparams = array(); + $this->client->addParam($kparams, "flavorParams", $flavorParams->toParams()); + $this->client->queueServiceActionCall("flavorparams", "add", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaFlavorParams"); + return $resultObject; + } + + /** + * Delete Flavor Params by ID + * + * @param int $id + */ + function delete($id) + { + $kparams = array(); + $this->client->addParam($kparams, "id", $id); + $this->client->queueServiceActionCall("flavorparams", "delete", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "null"); + } + + /** + * Get Flavor Params by ID + * + * @param int $id + * @return KalturaFlavorParams + */ + function get($id) + { + $kparams = array(); + $this->client->addParam($kparams, "id", $id); + $this->client->queueServiceActionCall("flavorparams", "get", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaFlavorParams"); + return $resultObject; + } + + /** + * Get Flavor Params by Conversion Profile ID + * + * @param int $conversionProfileId + * @return array + */ + function getByConversionProfileId($conversionProfileId) + { + $kparams = array(); + $this->client->addParam($kparams, "conversionProfileId", $conversionProfileId); + $this->client->queueServiceActionCall("flavorparams", "getByConversionProfileId", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "array"); + return $resultObject; + } + + /** + * List Flavor Params by filter with paging support (By default - all system default params will be listed too) + * + * @param KalturaFlavorParamsFilter $filter + * @param KalturaFilterPager $pager + * @return KalturaFlavorParamsListResponse + */ + function listAction(KalturaFlavorParamsFilter $filter = null, KalturaFilterPager $pager = null) + { + $kparams = array(); + if ($filter !== null) + $this->client->addParam($kparams, "filter", $filter->toParams()); + if ($pager !== null) + $this->client->addParam($kparams, "pager", $pager->toParams()); + $this->client->queueServiceActionCall("flavorparams", "list", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaFlavorParamsListResponse"); + return $resultObject; + } + + /** + * Update Flavor Params by ID + * + * @param int $id + * @param KalturaFlavorParams $flavorParams + * @return KalturaFlavorParams + */ + function update($id, KalturaFlavorParams $flavorParams) + { + $kparams = array(); + $this->client->addParam($kparams, "id", $id); + $this->client->addParam($kparams, "flavorParams", $flavorParams->toParams()); + $this->client->queueServiceActionCall("flavorparams", "update", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaFlavorParams"); + return $resultObject; + } +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaGroupUserService extends KalturaServiceBase +{ + function __construct(KalturaClient $client = null) + { + parent::__construct($client); + } + + /** + * Add new GroupUser + * + * @param KalturaGroupUser $groupUser + * @return KalturaGroupUser + */ + function add(KalturaGroupUser $groupUser) + { + $kparams = array(); + $this->client->addParam($kparams, "groupUser", $groupUser->toParams()); + $this->client->queueServiceActionCall("groupuser", "add", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaGroupUser"); + return $resultObject; + } + + /** + * Delete by userId and groupId + * + * @param string $userId + * @param string $groupId + */ + function delete($userId, $groupId) + { + $kparams = array(); + $this->client->addParam($kparams, "userId", $userId); + $this->client->addParam($kparams, "groupId", $groupId); + $this->client->queueServiceActionCall("groupuser", "delete", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "null"); + } + + /** + * List all GroupUsers + * + * @param KalturaGroupUserFilter $filter + * @param KalturaFilterPager $pager + * @return KalturaGroupUserListResponse + */ + function listAction(KalturaGroupUserFilter $filter = null, KalturaFilterPager $pager = null) + { + $kparams = array(); + if ($filter !== null) + $this->client->addParam($kparams, "filter", $filter->toParams()); + if ($pager !== null) + $this->client->addParam($kparams, "pager", $pager->toParams()); + $this->client->queueServiceActionCall("groupuser", "list", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaGroupUserListResponse"); + return $resultObject; + } +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaLiveChannelSegmentService extends KalturaServiceBase +{ + function __construct(KalturaClient $client = null) + { + parent::__construct($client); + } + + /** + * Add new live channel segment + * + * @param KalturaLiveChannelSegment $liveChannelSegment + * @return KalturaLiveChannelSegment + */ + function add(KalturaLiveChannelSegment $liveChannelSegment) + { + $kparams = array(); + $this->client->addParam($kparams, "liveChannelSegment", $liveChannelSegment->toParams()); + $this->client->queueServiceActionCall("livechannelsegment", "add", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaLiveChannelSegment"); + return $resultObject; + } + + /** + * Delete live channel segment by id + * + * @param bigint $id + */ + function delete($id) + { + $kparams = array(); + $this->client->addParam($kparams, "id", $id); + $this->client->queueServiceActionCall("livechannelsegment", "delete", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "null"); + } + + /** + * Get live channel segment by id + * + * @param bigint $id + * @return KalturaLiveChannelSegment + */ + function get($id) + { + $kparams = array(); + $this->client->addParam($kparams, "id", $id); + $this->client->queueServiceActionCall("livechannelsegment", "get", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaLiveChannelSegment"); + return $resultObject; + } + + /** + * List live channel segments by filter and pager + * + * @param KalturaLiveChannelSegmentFilter $filter + * @param KalturaFilterPager $pager + * @return KalturaLiveChannelSegmentListResponse + */ + function listAction(KalturaLiveChannelSegmentFilter $filter = null, KalturaFilterPager $pager = null) + { + $kparams = array(); + if ($filter !== null) + $this->client->addParam($kparams, "filter", $filter->toParams()); + if ($pager !== null) + $this->client->addParam($kparams, "pager", $pager->toParams()); + $this->client->queueServiceActionCall("livechannelsegment", "list", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaLiveChannelSegmentListResponse"); + return $resultObject; + } + + /** + * Update live channel segment by id + * + * @param bigint $id + * @param KalturaLiveChannelSegment $liveChannelSegment + * @return KalturaLiveChannelSegment + */ + function update($id, KalturaLiveChannelSegment $liveChannelSegment) + { + $kparams = array(); + $this->client->addParam($kparams, "id", $id); + $this->client->addParam($kparams, "liveChannelSegment", $liveChannelSegment->toParams()); + $this->client->queueServiceActionCall("livechannelsegment", "update", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaLiveChannelSegment"); + return $resultObject; + } +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaLiveChannelService extends KalturaServiceBase +{ + function __construct(KalturaClient $client = null) + { + parent::__construct($client); + } + + /** + * Adds new live channel. + * + * @param KalturaLiveChannel $liveChannel Live channel metadata + * @return KalturaLiveChannel + */ + function add(KalturaLiveChannel $liveChannel) + { + $kparams = array(); + $this->client->addParam($kparams, "liveChannel", $liveChannel->toParams()); + $this->client->queueServiceActionCall("livechannel", "add", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaLiveChannel"); + return $resultObject; + } + + /** + * Append recorded video to live entry + * + * @param string $entryId Live entry id + * @param string $assetId Live asset id + * @param string $mediaServerIndex + * @param KalturaDataCenterContentResource $resource + * @param float $duration In seconds + * @param bool $isLastChunk Is this the last recorded chunk in the current session (i.e. following a stream stop event) + * @return KalturaLiveEntry + */ + function appendRecording($entryId, $assetId, $mediaServerIndex, KalturaDataCenterContentResource $resource, $duration, $isLastChunk = false) + { + $kparams = array(); + $this->client->addParam($kparams, "entryId", $entryId); + $this->client->addParam($kparams, "assetId", $assetId); + $this->client->addParam($kparams, "mediaServerIndex", $mediaServerIndex); + $this->client->addParam($kparams, "resource", $resource->toParams()); + $this->client->addParam($kparams, "duration", $duration); + $this->client->addParam($kparams, "isLastChunk", $isLastChunk); + $this->client->queueServiceActionCall("livechannel", "appendRecording", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaLiveEntry"); + return $resultObject; + } + + /** + * Create recorded entry id if it doesn't exist and make sure it happens on the DC that the live entry was created on. + * + * @param string $entryId Live entry id + * @param string $mediaServerIndex Media server index primary / secondary + * @param int $liveEntryStatus The status KalturaEntryServerNodeStatus::PLAYABLE | KalturaEntryServerNodeStatus::BROADCASTING + * @return KalturaLiveEntry + */ + function createRecordedEntry($entryId, $mediaServerIndex, $liveEntryStatus) + { + $kparams = array(); + $this->client->addParam($kparams, "entryId", $entryId); + $this->client->addParam($kparams, "mediaServerIndex", $mediaServerIndex); + $this->client->addParam($kparams, "liveEntryStatus", $liveEntryStatus); + $this->client->queueServiceActionCall("livechannel", "createRecordedEntry", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaLiveEntry"); + return $resultObject; + } + + /** + * Delete a live channel. + * + * @param string $id Live channel id to delete + */ + function delete($id) + { + $kparams = array(); + $this->client->addParam($kparams, "id", $id); + $this->client->queueServiceActionCall("livechannel", "delete", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "null"); + } + + /** + * Get live channel by ID. + * + * @param string $id Live channel id + * @return KalturaLiveChannel + */ + function get($id) + { + $kparams = array(); + $this->client->addParam($kparams, "id", $id); + $this->client->queueServiceActionCall("livechannel", "get", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaLiveChannel"); + return $resultObject; + } + + /** + * Delivering the status of a live channel (on-air/offline) + * + * @param string $id ID of the live channel + * @return bool + */ + function isLive($id) + { + $kparams = array(); + $this->client->addParam($kparams, "id", $id); + $this->client->queueServiceActionCall("livechannel", "isLive", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $resultObject = (bool) $resultObject; + return $resultObject; + } + + /** + * List live channels by filter with paging support. + * + * @param KalturaLiveChannelFilter $filter Live channel filter + * @param KalturaFilterPager $pager Pager + * @return KalturaLiveChannelListResponse + */ + function listAction(KalturaLiveChannelFilter $filter = null, KalturaFilterPager $pager = null) + { + $kparams = array(); + if ($filter !== null) + $this->client->addParam($kparams, "filter", $filter->toParams()); + if ($pager !== null) + $this->client->addParam($kparams, "pager", $pager->toParams()); + $this->client->queueServiceActionCall("livechannel", "list", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaLiveChannelListResponse"); + return $resultObject; + } + + /** + * Register media server to live entry + * + * @param string $entryId Live entry id + * @param string $hostname Media server host name + * @param string $mediaServerIndex Media server index primary / secondary + * @param string $applicationName The application to which entry is being broadcast + * @param int $liveEntryStatus The status KalturaEntryServerNodeStatus::PLAYABLE | KalturaEntryServerNodeStatus::BROADCASTING + * @param bool $shouldCreateRecordedEntry + * @return KalturaLiveEntry + */ + function registerMediaServer($entryId, $hostname, $mediaServerIndex, $applicationName = null, $liveEntryStatus = 1, $shouldCreateRecordedEntry = true) + { + $kparams = array(); + $this->client->addParam($kparams, "entryId", $entryId); + $this->client->addParam($kparams, "hostname", $hostname); + $this->client->addParam($kparams, "mediaServerIndex", $mediaServerIndex); + $this->client->addParam($kparams, "applicationName", $applicationName); + $this->client->addParam($kparams, "liveEntryStatus", $liveEntryStatus); + $this->client->addParam($kparams, "shouldCreateRecordedEntry", $shouldCreateRecordedEntry); + $this->client->queueServiceActionCall("livechannel", "registerMediaServer", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaLiveEntry"); + return $resultObject; + } + + /** + * Set recorded video to live entry + * + * @param string $entryId Live entry id + * @param string $mediaServerIndex + * @param KalturaDataCenterContentResource $resource + * @param float $duration In seconds + * @param string $recordedEntryId Recorded entry Id + * @param int $flavorParamsId Recorded entry Id + * @return KalturaLiveEntry + */ + function setRecordedContent($entryId, $mediaServerIndex, KalturaDataCenterContentResource $resource, $duration, $recordedEntryId = null, $flavorParamsId = null) + { + $kparams = array(); + $this->client->addParam($kparams, "entryId", $entryId); + $this->client->addParam($kparams, "mediaServerIndex", $mediaServerIndex); + $this->client->addParam($kparams, "resource", $resource->toParams()); + $this->client->addParam($kparams, "duration", $duration); + $this->client->addParam($kparams, "recordedEntryId", $recordedEntryId); + $this->client->addParam($kparams, "flavorParamsId", $flavorParamsId); + $this->client->queueServiceActionCall("livechannel", "setRecordedContent", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaLiveEntry"); + return $resultObject; + } + + /** + * Unregister media server from live entry + * + * @param string $entryId Live entry id + * @param string $hostname Media server host name + * @param string $mediaServerIndex Media server index primary / secondary + * @return KalturaLiveEntry + */ + function unregisterMediaServer($entryId, $hostname, $mediaServerIndex) + { + $kparams = array(); + $this->client->addParam($kparams, "entryId", $entryId); + $this->client->addParam($kparams, "hostname", $hostname); + $this->client->addParam($kparams, "mediaServerIndex", $mediaServerIndex); + $this->client->queueServiceActionCall("livechannel", "unregisterMediaServer", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaLiveEntry"); + return $resultObject; + } + + /** + * Update live channel. Only the properties that were set will be updated. + * + * @param string $id Live channel id to update + * @param KalturaLiveChannel $liveChannel Live channel metadata to update + * @return KalturaLiveChannel + */ + function update($id, KalturaLiveChannel $liveChannel) + { + $kparams = array(); + $this->client->addParam($kparams, "id", $id); + $this->client->addParam($kparams, "liveChannel", $liveChannel->toParams()); + $this->client->queueServiceActionCall("livechannel", "update", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaLiveChannel"); + return $resultObject; + } + + /** + * Validates all registered media servers + * + * @param string $entryId Live entry id + */ + function validateRegisteredMediaServers($entryId) + { + $kparams = array(); + $this->client->addParam($kparams, "entryId", $entryId); + $this->client->queueServiceActionCall("livechannel", "validateRegisteredMediaServers", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "null"); + } +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaLiveReportsService extends KalturaServiceBase +{ + function __construct(KalturaClient $client = null) + { + parent::__construct($client); + } + + /** + * + * + * @param int $reportType + * @param KalturaLiveReportExportParams $params + * @return KalturaLiveReportExportResponse + */ + function exportToCsv($reportType, KalturaLiveReportExportParams $params) + { + $kparams = array(); + $this->client->addParam($kparams, "reportType", $reportType); + $this->client->addParam($kparams, "params", $params->toParams()); + $this->client->queueServiceActionCall("livereports", "exportToCsv", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaLiveReportExportResponse"); + return $resultObject; + } + + /** + * + * + * @param string $reportType + * @param KalturaLiveReportInputFilter $filter + * @param KalturaFilterPager $pager + * @return array + */ + function getEvents($reportType, KalturaLiveReportInputFilter $filter = null, KalturaFilterPager $pager = null) + { + $kparams = array(); + $this->client->addParam($kparams, "reportType", $reportType); + if ($filter !== null) + $this->client->addParam($kparams, "filter", $filter->toParams()); + if ($pager !== null) + $this->client->addParam($kparams, "pager", $pager->toParams()); + $this->client->queueServiceActionCall("livereports", "getEvents", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "array"); + return $resultObject; + } + + /** + * + * + * @param string $reportType + * @param KalturaLiveReportInputFilter $filter + * @param KalturaFilterPager $pager + * @return KalturaLiveStatsListResponse + */ + function getReport($reportType, KalturaLiveReportInputFilter $filter = null, KalturaFilterPager $pager = null) + { + $kparams = array(); + $this->client->addParam($kparams, "reportType", $reportType); + if ($filter !== null) + $this->client->addParam($kparams, "filter", $filter->toParams()); + if ($pager !== null) + $this->client->addParam($kparams, "pager", $pager->toParams()); + $this->client->queueServiceActionCall("livereports", "getReport", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaLiveStatsListResponse"); + return $resultObject; + } + + /** + * Will serve a requested report + * + * @param string $id - the requested id + * @return string + */ + function serveReport($id) + { + $kparams = array(); + $this->client->addParam($kparams, "id", $id); + $this->client->queueServiceActionCall("livereports", "serveReport", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "string"); + return $resultObject; + } +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaLiveStatsService extends KalturaServiceBase +{ + function __construct(KalturaClient $client = null) + { + parent::__construct($client); + } + + /** + * Will write to the event log a single line representing the event + KalturaStatsEvent $event + * + * @param KalturaLiveStatsEvent $event + * @return bool + */ + function collect(KalturaLiveStatsEvent $event) + { + $kparams = array(); + $this->client->addParam($kparams, "event", $event->toParams()); + $this->client->queueServiceActionCall("livestats", "collect", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $resultObject = (bool) $resultObject; + return $resultObject; + } +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaLiveStreamService extends KalturaServiceBase +{ + function __construct(KalturaClient $client = null) + { + parent::__construct($client); + } + + /** + * Adds new live stream entry. + The entry will be queued for provision. + * + * @param KalturaLiveStreamEntry $liveStreamEntry Live stream entry metadata + * @param string $sourceType Live stream source type + * @return KalturaLiveStreamEntry + */ + function add(KalturaLiveStreamEntry $liveStreamEntry, $sourceType = null) + { + $kparams = array(); + $this->client->addParam($kparams, "liveStreamEntry", $liveStreamEntry->toParams()); + $this->client->addParam($kparams, "sourceType", $sourceType); + $this->client->queueServiceActionCall("livestream", "add", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaLiveStreamEntry"); + return $resultObject; + } + + /** + * Add new pushPublish configuration to entry + * + * @param string $entryId + * @param string $protocol + * @param string $url + * @param KalturaLiveStreamConfiguration $liveStreamConfiguration + * @return KalturaLiveStreamEntry + */ + function addLiveStreamPushPublishConfiguration($entryId, $protocol, $url = null, KalturaLiveStreamConfiguration $liveStreamConfiguration = null) + { + $kparams = array(); + $this->client->addParam($kparams, "entryId", $entryId); + $this->client->addParam($kparams, "protocol", $protocol); + $this->client->addParam($kparams, "url", $url); + if ($liveStreamConfiguration !== null) + $this->client->addParam($kparams, "liveStreamConfiguration", $liveStreamConfiguration->toParams()); + $this->client->queueServiceActionCall("livestream", "addLiveStreamPushPublishConfiguration", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaLiveStreamEntry"); + return $resultObject; + } + + /** + * Allocates a conference room or returns ones that has already been allocated + * + * @param string $entryId + * @return KalturaRoomDetails + */ + function allocateConferenceRoom($entryId) + { + $kparams = array(); + $this->client->addParam($kparams, "entryId", $entryId); + $this->client->queueServiceActionCall("livestream", "allocateConferenceRoom", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaRoomDetails"); + return $resultObject; + } + + /** + * Append recorded video to live entry + * + * @param string $entryId Live entry id + * @param string $assetId Live asset id + * @param string $mediaServerIndex + * @param KalturaDataCenterContentResource $resource + * @param float $duration In seconds + * @param bool $isLastChunk Is this the last recorded chunk in the current session (i.e. following a stream stop event) + * @return KalturaLiveEntry + */ + function appendRecording($entryId, $assetId, $mediaServerIndex, KalturaDataCenterContentResource $resource, $duration, $isLastChunk = false) + { + $kparams = array(); + $this->client->addParam($kparams, "entryId", $entryId); + $this->client->addParam($kparams, "assetId", $assetId); + $this->client->addParam($kparams, "mediaServerIndex", $mediaServerIndex); + $this->client->addParam($kparams, "resource", $resource->toParams()); + $this->client->addParam($kparams, "duration", $duration); + $this->client->addParam($kparams, "isLastChunk", $isLastChunk); + $this->client->queueServiceActionCall("livestream", "appendRecording", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaLiveEntry"); + return $resultObject; + } + + /** + * Authenticate live-stream entry against stream token and partner limitations + * + * @param string $entryId Live stream entry id + * @param string $token Live stream broadcasting token + * @param string $hostname Media server host name + * @param string $mediaServerIndex Media server index primary / secondary + * @param string $applicationName The application to which entry is being broadcast + * @return KalturaLiveStreamEntry + */ + function authenticate($entryId, $token, $hostname = null, $mediaServerIndex = null, $applicationName = null) + { + $kparams = array(); + $this->client->addParam($kparams, "entryId", $entryId); + $this->client->addParam($kparams, "token", $token); + $this->client->addParam($kparams, "hostname", $hostname); + $this->client->addParam($kparams, "mediaServerIndex", $mediaServerIndex); + $this->client->addParam($kparams, "applicationName", $applicationName); + $this->client->queueServiceActionCall("livestream", "authenticate", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaLiveStreamEntry"); + return $resultObject; + } + + /** + * Creates perioding metadata sync-point events on a live stream + * + * @param string $entryId Kaltura live-stream entry id + * @param int $interval Events interval in seconds + * @param int $duration Duration in seconds + */ + function createPeriodicSyncPoints($entryId, $interval, $duration) + { + $kparams = array(); + $this->client->addParam($kparams, "entryId", $entryId); + $this->client->addParam($kparams, "interval", $interval); + $this->client->addParam($kparams, "duration", $duration); + $this->client->queueServiceActionCall("livestream", "createPeriodicSyncPoints", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "null"); + } + + /** + * Create recorded entry id if it doesn't exist and make sure it happens on the DC that the live entry was created on. + * + * @param string $entryId Live entry id + * @param string $mediaServerIndex Media server index primary / secondary + * @param int $liveEntryStatus The status KalturaEntryServerNodeStatus::PLAYABLE | KalturaEntryServerNodeStatus::BROADCASTING + * @return KalturaLiveEntry + */ + function createRecordedEntry($entryId, $mediaServerIndex, $liveEntryStatus) + { + $kparams = array(); + $this->client->addParam($kparams, "entryId", $entryId); + $this->client->addParam($kparams, "mediaServerIndex", $mediaServerIndex); + $this->client->addParam($kparams, "liveEntryStatus", $liveEntryStatus); + $this->client->queueServiceActionCall("livestream", "createRecordedEntry", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaLiveEntry"); + return $resultObject; + } + + /** + * Delete a live stream entry. + * + * @param string $entryId Live stream entry id to delete + */ + function delete($entryId) + { + $kparams = array(); + $this->client->addParam($kparams, "entryId", $entryId); + $this->client->queueServiceActionCall("livestream", "delete", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "null"); + } + + /** + * When the conf is finished this API should be called. + * + * @param string $entryId + * @return bool + */ + function finishConf($entryId) + { + $kparams = array(); + $this->client->addParam($kparams, "entryId", $entryId); + $this->client->queueServiceActionCall("livestream", "finishConf", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $resultObject = (bool) $resultObject; + return $resultObject; + } + + /** + * Get live stream entry by ID. + * + * @param string $entryId Live stream entry id + * @param int $version Desired version of the data + * @return KalturaLiveStreamEntry + */ + function get($entryId, $version = -1) + { + $kparams = array(); + $this->client->addParam($kparams, "entryId", $entryId); + $this->client->addParam($kparams, "version", $version); + $this->client->queueServiceActionCall("livestream", "get", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaLiveStreamEntry"); + return $resultObject; + } + + /** + * Delivering the status of a live stream (on-air/offline) if it is possible + * + * @param string $id ID of the live stream + * @param string $protocol Protocol of the stream to test. + * @return bool + */ + function isLive($id, $protocol) + { + $kparams = array(); + $this->client->addParam($kparams, "id", $id); + $this->client->addParam($kparams, "protocol", $protocol); + $this->client->queueServiceActionCall("livestream", "isLive", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $resultObject = (bool) $resultObject; + return $resultObject; + } + + /** + * List live stream entries by filter with paging support. + * + * @param KalturaLiveStreamEntryFilter $filter Live stream entry filter + * @param KalturaFilterPager $pager Pager + * @return KalturaLiveStreamListResponse + */ + function listAction(KalturaLiveStreamEntryFilter $filter = null, KalturaFilterPager $pager = null) + { + $kparams = array(); + if ($filter !== null) + $this->client->addParam($kparams, "filter", $filter->toParams()); + if ($pager !== null) + $this->client->addParam($kparams, "pager", $pager->toParams()); + $this->client->queueServiceActionCall("livestream", "list", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaLiveStreamListResponse"); + return $resultObject; + } + + /** + * Regenerate new secure token for liveStream + * + * @param string $entryId Live stream entry id to regenerate secure token for + * @return KalturaLiveEntry + */ + function regenerateStreamToken($entryId) + { + $kparams = array(); + $this->client->addParam($kparams, "entryId", $entryId); + $this->client->queueServiceActionCall("livestream", "regenerateStreamToken", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaLiveEntry"); + return $resultObject; + } + + /** + * Mark that the conference has actually started + * + * @param string $entryId + * @return bool + */ + function registerConf($entryId) + { + $kparams = array(); + $this->client->addParam($kparams, "entryId", $entryId); + $this->client->queueServiceActionCall("livestream", "registerConf", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $resultObject = (bool) $resultObject; + return $resultObject; + } + + /** + * Register media server to live entry + * + * @param string $entryId Live entry id + * @param string $hostname Media server host name + * @param string $mediaServerIndex Media server index primary / secondary + * @param string $applicationName The application to which entry is being broadcast + * @param int $liveEntryStatus The status KalturaEntryServerNodeStatus::PLAYABLE | KalturaEntryServerNodeStatus::BROADCASTING + * @param bool $shouldCreateRecordedEntry + * @return KalturaLiveEntry + */ + function registerMediaServer($entryId, $hostname, $mediaServerIndex, $applicationName = null, $liveEntryStatus = 1, $shouldCreateRecordedEntry = true) + { + $kparams = array(); + $this->client->addParam($kparams, "entryId", $entryId); + $this->client->addParam($kparams, "hostname", $hostname); + $this->client->addParam($kparams, "mediaServerIndex", $mediaServerIndex); + $this->client->addParam($kparams, "applicationName", $applicationName); + $this->client->addParam($kparams, "liveEntryStatus", $liveEntryStatus); + $this->client->addParam($kparams, "shouldCreateRecordedEntry", $shouldCreateRecordedEntry); + $this->client->queueServiceActionCall("livestream", "registerMediaServer", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaLiveEntry"); + return $resultObject; + } + + /** + * Remove push publish configuration from entry + * + * @param string $entryId + * @param string $protocol + * @return KalturaLiveStreamEntry + */ + function removeLiveStreamPushPublishConfiguration($entryId, $protocol) + { + $kparams = array(); + $this->client->addParam($kparams, "entryId", $entryId); + $this->client->addParam($kparams, "protocol", $protocol); + $this->client->queueServiceActionCall("livestream", "removeLiveStreamPushPublishConfiguration", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaLiveStreamEntry"); + return $resultObject; + } + + /** + * Set recorded video to live entry + * + * @param string $entryId Live entry id + * @param string $mediaServerIndex + * @param KalturaDataCenterContentResource $resource + * @param float $duration In seconds + * @param string $recordedEntryId Recorded entry Id + * @param int $flavorParamsId Recorded entry Id + * @return KalturaLiveEntry + */ + function setRecordedContent($entryId, $mediaServerIndex, KalturaDataCenterContentResource $resource, $duration, $recordedEntryId = null, $flavorParamsId = null) + { + $kparams = array(); + $this->client->addParam($kparams, "entryId", $entryId); + $this->client->addParam($kparams, "mediaServerIndex", $mediaServerIndex); + $this->client->addParam($kparams, "resource", $resource->toParams()); + $this->client->addParam($kparams, "duration", $duration); + $this->client->addParam($kparams, "recordedEntryId", $recordedEntryId); + $this->client->addParam($kparams, "flavorParamsId", $flavorParamsId); + $this->client->queueServiceActionCall("livestream", "setRecordedContent", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaLiveEntry"); + return $resultObject; + } + + /** + * Unregister media server from live entry + * + * @param string $entryId Live entry id + * @param string $hostname Media server host name + * @param string $mediaServerIndex Media server index primary / secondary + * @return KalturaLiveEntry + */ + function unregisterMediaServer($entryId, $hostname, $mediaServerIndex) + { + $kparams = array(); + $this->client->addParam($kparams, "entryId", $entryId); + $this->client->addParam($kparams, "hostname", $hostname); + $this->client->addParam($kparams, "mediaServerIndex", $mediaServerIndex); + $this->client->queueServiceActionCall("livestream", "unregisterMediaServer", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaLiveEntry"); + return $resultObject; + } + + /** + * Update live stream entry. Only the properties that were set will be updated. + * + * @param string $entryId Live stream entry id to update + * @param KalturaLiveStreamEntry $liveStreamEntry Live stream entry metadata to update + * @return KalturaLiveStreamEntry + */ + function update($entryId, KalturaLiveStreamEntry $liveStreamEntry) + { + $kparams = array(); + $this->client->addParam($kparams, "entryId", $entryId); + $this->client->addParam($kparams, "liveStreamEntry", $liveStreamEntry->toParams()); + $this->client->queueServiceActionCall("livestream", "update", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaLiveStreamEntry"); + return $resultObject; + } + + /** + * Update entry thumbnail using url + * + * @param string $entryId Live stream entry id + * @param string $url File url + * @return KalturaLiveStreamEntry + */ + function updateOfflineThumbnailFromUrl($entryId, $url) + { + $kparams = array(); + $this->client->addParam($kparams, "entryId", $entryId); + $this->client->addParam($kparams, "url", $url); + $this->client->queueServiceActionCall("livestream", "updateOfflineThumbnailFromUrl", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaLiveStreamEntry"); + return $resultObject; + } + + /** + * Update live stream entry thumbnail using a raw jpeg file + * + * @param string $entryId Live stream entry id + * @param file $fileData Jpeg file data + * @return KalturaLiveStreamEntry + */ + function updateOfflineThumbnailJpeg($entryId, $fileData) + { + $kparams = array(); + $this->client->addParam($kparams, "entryId", $entryId); + $kfiles = array(); + $this->client->addParam($kfiles, "fileData", $fileData); + $this->client->queueServiceActionCall("livestream", "updateOfflineThumbnailJpeg", $kparams, $kfiles); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaLiveStreamEntry"); + return $resultObject; + } + + /** + * Validates all registered media servers + * + * @param string $entryId Live entry id + */ + function validateRegisteredMediaServers($entryId) + { + $kparams = array(); + $this->client->addParam($kparams, "entryId", $entryId); + $this->client->queueServiceActionCall("livestream", "validateRegisteredMediaServers", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "null"); + } +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaMediaInfoService extends KalturaServiceBase +{ + function __construct(KalturaClient $client = null) + { + parent::__construct($client); + } + + /** + * List media info objects by filter and pager + * + * @param KalturaMediaInfoFilter $filter + * @param KalturaFilterPager $pager + * @return KalturaMediaInfoListResponse + */ + function listAction(KalturaMediaInfoFilter $filter = null, KalturaFilterPager $pager = null) + { + $kparams = array(); + if ($filter !== null) + $this->client->addParam($kparams, "filter", $filter->toParams()); + if ($pager !== null) + $this->client->addParam($kparams, "pager", $pager->toParams()); + $this->client->queueServiceActionCall("mediainfo", "list", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaMediaInfoListResponse"); + return $resultObject; + } +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaMediaService extends KalturaServiceBase +{ + function __construct(KalturaClient $client = null) + { + parent::__construct($client); + } + + /** + * Add entry + * + * @param KalturaMediaEntry $entry + * @return KalturaMediaEntry + */ + function add(KalturaMediaEntry $entry) + { + $kparams = array(); + $this->client->addParam($kparams, "entry", $entry->toParams()); + $this->client->queueServiceActionCall("media", "add", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaMediaEntry"); + return $resultObject; + } + + /** + * Add content to media entry which is not yet associated with content (therefore is in status NO_CONTENT). + If the requirement is to replace the entry's associated content, use action updateContent. + * + * @param string $entryId + * @param KalturaResource $resource + * @return KalturaMediaEntry + */ + function addContent($entryId, KalturaResource $resource = null) + { + $kparams = array(); + $this->client->addParam($kparams, "entryId", $entryId); + if ($resource !== null) + $this->client->addParam($kparams, "resource", $resource->toParams()); + $this->client->queueServiceActionCall("media", "addContent", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaMediaEntry"); + return $resultObject; + } + + /** + * Adds new media entry by importing an HTTP or FTP URL. + The entry will be queued for import and then for conversion. + This action should be exposed only to the batches + * + * @param KalturaMediaEntry $mediaEntry Media entry metadata + * @param string $url An HTTP or FTP URL + * @param int $bulkUploadId The id of the bulk upload job + * @return KalturaMediaEntry + */ + function addFromBulk(KalturaMediaEntry $mediaEntry, $url, $bulkUploadId) + { + $kparams = array(); + $this->client->addParam($kparams, "mediaEntry", $mediaEntry->toParams()); + $this->client->addParam($kparams, "url", $url); + $this->client->addParam($kparams, "bulkUploadId", $bulkUploadId); + $this->client->queueServiceActionCall("media", "addFromBulk", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaMediaEntry"); + return $resultObject; + } + + /** + * Copy entry into new entry + * + * @param string $sourceEntryId Media entry id to copy from + * @param KalturaMediaEntry $mediaEntry Media entry metadata + * @param int $sourceFlavorParamsId The flavor to be used as the new entry source, source flavor will be used if not specified + * @return KalturaMediaEntry + */ + function addFromEntry($sourceEntryId, KalturaMediaEntry $mediaEntry = null, $sourceFlavorParamsId = null) + { + $kparams = array(); + $this->client->addParam($kparams, "sourceEntryId", $sourceEntryId); + if ($mediaEntry !== null) + $this->client->addParam($kparams, "mediaEntry", $mediaEntry->toParams()); + $this->client->addParam($kparams, "sourceFlavorParamsId", $sourceFlavorParamsId); + $this->client->queueServiceActionCall("media", "addFromEntry", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaMediaEntry"); + return $resultObject; + } + + /** + * Copy flavor asset into new entry + * + * @param string $sourceFlavorAssetId Flavor asset id to be used as the new entry source + * @param KalturaMediaEntry $mediaEntry Media entry metadata + * @return KalturaMediaEntry + */ + function addFromFlavorAsset($sourceFlavorAssetId, KalturaMediaEntry $mediaEntry = null) + { + $kparams = array(); + $this->client->addParam($kparams, "sourceFlavorAssetId", $sourceFlavorAssetId); + if ($mediaEntry !== null) + $this->client->addParam($kparams, "mediaEntry", $mediaEntry->toParams()); + $this->client->queueServiceActionCall("media", "addFromFlavorAsset", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaMediaEntry"); + return $resultObject; + } + + /** + * Add new entry after the file was recored on the server and the token id exists + * + * @param KalturaMediaEntry $mediaEntry Media entry metadata + * @param string $webcamTokenId Token id for the recored webcam file + * @return KalturaMediaEntry + */ + function addFromRecordedWebcam(KalturaMediaEntry $mediaEntry, $webcamTokenId) + { + $kparams = array(); + $this->client->addParam($kparams, "mediaEntry", $mediaEntry->toParams()); + $this->client->addParam($kparams, "webcamTokenId", $webcamTokenId); + $this->client->queueServiceActionCall("media", "addFromRecordedWebcam", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaMediaEntry"); + return $resultObject; + } + + /** + * Adds new media entry by importing the media file from a search provider. + This action should be used with the search service result. + * + * @param KalturaMediaEntry $mediaEntry Media entry metadata + * @param KalturaSearchResult $searchResult Result object from search service + * @return KalturaMediaEntry + */ + function addFromSearchResult(KalturaMediaEntry $mediaEntry = null, KalturaSearchResult $searchResult = null) + { + $kparams = array(); + if ($mediaEntry !== null) + $this->client->addParam($kparams, "mediaEntry", $mediaEntry->toParams()); + if ($searchResult !== null) + $this->client->addParam($kparams, "searchResult", $searchResult->toParams()); + $this->client->queueServiceActionCall("media", "addFromSearchResult", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaMediaEntry"); + return $resultObject; + } + + /** + * Add new entry after the specific media file was uploaded and the upload token id exists + * + * @param KalturaMediaEntry $mediaEntry Media entry metadata + * @param string $uploadTokenId Upload token id + * @return KalturaMediaEntry + */ + function addFromUploadedFile(KalturaMediaEntry $mediaEntry, $uploadTokenId) + { + $kparams = array(); + $this->client->addParam($kparams, "mediaEntry", $mediaEntry->toParams()); + $this->client->addParam($kparams, "uploadTokenId", $uploadTokenId); + $this->client->queueServiceActionCall("media", "addFromUploadedFile", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaMediaEntry"); + return $resultObject; + } + + /** + * Adds new media entry by importing an HTTP or FTP URL. + The entry will be queued for import and then for conversion. + * + * @param KalturaMediaEntry $mediaEntry Media entry metadata + * @param string $url An HTTP or FTP URL + * @return KalturaMediaEntry + */ + function addFromUrl(KalturaMediaEntry $mediaEntry, $url) + { + $kparams = array(); + $this->client->addParam($kparams, "mediaEntry", $mediaEntry->toParams()); + $this->client->addParam($kparams, "url", $url); + $this->client->queueServiceActionCall("media", "addFromUrl", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaMediaEntry"); + return $resultObject; + } + + /** + * Anonymously rank a media entry, no validation is done on duplicate rankings + * + * @param string $entryId + * @param int $rank + */ + function anonymousRank($entryId, $rank) + { + $kparams = array(); + $this->client->addParam($kparams, "entryId", $entryId); + $this->client->addParam($kparams, "rank", $rank); + $this->client->queueServiceActionCall("media", "anonymousRank", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "null"); + } + + /** + * Approve the media entry and mark the pending flags (if any) as moderated (this will make the entry playable) + * + * @param string $entryId + */ + function approve($entryId) + { + $kparams = array(); + $this->client->addParam($kparams, "entryId", $entryId); + $this->client->queueServiceActionCall("media", "approve", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "null"); + } + + /** + * Approves media replacement + * + * @param string $entryId Media entry id to replace + * @return KalturaMediaEntry + */ + function approveReplace($entryId) + { + $kparams = array(); + $this->client->addParam($kparams, "entryId", $entryId); + $this->client->queueServiceActionCall("media", "approveReplace", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaMediaEntry"); + return $resultObject; + } + + /** + * Add new bulk upload batch job + Conversion profile id can be specified in the API or in the CSV file, the one in the CSV file will be stronger. + If no conversion profile was specified, partner's default will be used + * + * @param file $fileData + * @param KalturaBulkUploadJobData $bulkUploadData + * @param KalturaBulkUploadEntryData $bulkUploadEntryData + * @return KalturaBulkUpload + */ + function bulkUploadAdd($fileData, KalturaBulkUploadJobData $bulkUploadData = null, KalturaBulkUploadEntryData $bulkUploadEntryData = null) + { + $kparams = array(); + $kfiles = array(); + $this->client->addParam($kfiles, "fileData", $fileData); + if ($bulkUploadData !== null) + $this->client->addParam($kparams, "bulkUploadData", $bulkUploadData->toParams()); + if ($bulkUploadEntryData !== null) + $this->client->addParam($kparams, "bulkUploadEntryData", $bulkUploadEntryData->toParams()); + $this->client->queueServiceActionCall("media", "bulkUploadAdd", $kparams, $kfiles); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaBulkUpload"); + return $resultObject; + } + + /** + * Cancels media replacement + * + * @param string $entryId Media entry id to cancel + * @return KalturaMediaEntry + */ + function cancelReplace($entryId) + { + $kparams = array(); + $this->client->addParam($kparams, "entryId", $entryId); + $this->client->queueServiceActionCall("media", "cancelReplace", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaMediaEntry"); + return $resultObject; + } + + /** + * Convert entry + * + * @param string $entryId Media entry id + * @param int $conversionProfileId + * @param array $dynamicConversionAttributes + * @return bigint + */ + function convert($entryId, $conversionProfileId = null, array $dynamicConversionAttributes = null) + { + $kparams = array(); + $this->client->addParam($kparams, "entryId", $entryId); + $this->client->addParam($kparams, "conversionProfileId", $conversionProfileId); + if ($dynamicConversionAttributes !== null) + foreach($dynamicConversionAttributes as $index => $obj) + { + $this->client->addParam($kparams, "dynamicConversionAttributes:$index", $obj->toParams()); + } + $this->client->queueServiceActionCall("media", "convert", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "double"); + return $resultObject; + } + + /** + * Count media entries by filter. + * + * @param KalturaMediaEntryFilter $filter Media entry filter + * @return int + */ + function count(KalturaMediaEntryFilter $filter = null) + { + $kparams = array(); + if ($filter !== null) + $this->client->addParam($kparams, "filter", $filter->toParams()); + $this->client->queueServiceActionCall("media", "count", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "integer"); + return $resultObject; + } + + /** + * Delete a media entry. + * + * @param string $entryId Media entry id to delete + */ + function delete($entryId) + { + $kparams = array(); + $this->client->addParam($kparams, "entryId", $entryId); + $this->client->queueServiceActionCall("media", "delete", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "null"); + } + + /** + * Flag inappropriate media entry for moderation + * + * @param KalturaModerationFlag $moderationFlag + */ + function flag(KalturaModerationFlag $moderationFlag) + { + $kparams = array(); + $this->client->addParam($kparams, "moderationFlag", $moderationFlag->toParams()); + $this->client->queueServiceActionCall("media", "flag", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "null"); + } + + /** + * Get media entry by ID. + * + * @param string $entryId Media entry id + * @param int $version Desired version of the data + * @return KalturaMediaEntry + */ + function get($entryId, $version = -1) + { + $kparams = array(); + $this->client->addParam($kparams, "entryId", $entryId); + $this->client->addParam($kparams, "version", $version); + $this->client->queueServiceActionCall("media", "get", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaMediaEntry"); + return $resultObject; + } + + /** + * Get MRSS by entry id + XML will return as an escaped string + * + * @param string $entryId Entry id + * @param array $extendingItemsArray + * @param string $features + * @return string + */ + function getMrss($entryId, array $extendingItemsArray = null, $features = null) + { + $kparams = array(); + $this->client->addParam($kparams, "entryId", $entryId); + if ($extendingItemsArray !== null) + foreach($extendingItemsArray as $index => $obj) + { + $this->client->addParam($kparams, "extendingItemsArray:$index", $obj->toParams()); + } + $this->client->addParam($kparams, "features", $features); + $this->client->queueServiceActionCall("media", "getMrss", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "string"); + return $resultObject; + } + + /** + * Get volume map by entry id + * + * @param string $entryId Entry id + * @return file + */ + function getVolumeMap($entryId) + { + if ($this->client->isMultiRequest()) + throw new KalturaClientException("Action is not supported as part of multi-request.", KalturaClientException::ERROR_ACTION_IN_MULTIREQUEST); + + $kparams = array(); + $this->client->addParam($kparams, "entryId", $entryId); + $this->client->queueServiceActionCall("media", "getVolumeMap", $kparams); + if(!$this->client->getDestinationPath() && !$this->client->getReturnServedResult()) + return $this->client->getServeUrl(); + return $this->client->doQueue(); + } + + /** + * List media entries by filter with paging support. + * + * @param KalturaMediaEntryFilter $filter Media entry filter + * @param KalturaFilterPager $pager Pager + * @return KalturaMediaListResponse + */ + function listAction(KalturaMediaEntryFilter $filter = null, KalturaFilterPager $pager = null) + { + $kparams = array(); + if ($filter !== null) + $this->client->addParam($kparams, "filter", $filter->toParams()); + if ($pager !== null) + $this->client->addParam($kparams, "pager", $pager->toParams()); + $this->client->queueServiceActionCall("media", "list", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaMediaListResponse"); + return $resultObject; + } + + /** + * List all pending flags for the media entry + * + * @param string $entryId + * @param KalturaFilterPager $pager + * @return KalturaModerationFlagListResponse + */ + function listFlags($entryId, KalturaFilterPager $pager = null) + { + $kparams = array(); + $this->client->addParam($kparams, "entryId", $entryId); + if ($pager !== null) + $this->client->addParam($kparams, "pager", $pager->toParams()); + $this->client->queueServiceActionCall("media", "listFlags", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaModerationFlagListResponse"); + return $resultObject; + } + + /** + * Reject the media entry and mark the pending flags (if any) as moderated (this will make the entry non playable) + * + * @param string $entryId + */ + function reject($entryId) + { + $kparams = array(); + $this->client->addParam($kparams, "entryId", $entryId); + $this->client->queueServiceActionCall("media", "reject", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "null"); + } + + /** + * Request a new conversion job, this can be used to convert the media entry to a different format + * + * @param string $entryId Media entry id + * @param string $fileFormat Format to convert + * @return int + */ + function requestConversion($entryId, $fileFormat) + { + $kparams = array(); + $this->client->addParam($kparams, "entryId", $entryId); + $this->client->addParam($kparams, "fileFormat", $fileFormat); + $this->client->queueServiceActionCall("media", "requestConversion", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "integer"); + return $resultObject; + } + + /** + * Update media entry. Only the properties that were set will be updated. + * + * @param string $entryId Media entry id to update + * @param KalturaMediaEntry $mediaEntry Media entry metadata to update + * @return KalturaMediaEntry + */ + function update($entryId, KalturaMediaEntry $mediaEntry) + { + $kparams = array(); + $this->client->addParam($kparams, "entryId", $entryId); + $this->client->addParam($kparams, "mediaEntry", $mediaEntry->toParams()); + $this->client->queueServiceActionCall("media", "update", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaMediaEntry"); + return $resultObject; + } + + /** + * Replace content associated with the media entry. + * + * @param string $entryId Media entry id to update + * @param KalturaResource $resource Resource to be used to replace entry media content + * @param int $conversionProfileId The conversion profile id to be used on the entry + * @param KalturaEntryReplacementOptions $advancedOptions Additional update content options + * @return KalturaMediaEntry + */ + function updateContent($entryId, KalturaResource $resource, $conversionProfileId = null, KalturaEntryReplacementOptions $advancedOptions = null) + { + $kparams = array(); + $this->client->addParam($kparams, "entryId", $entryId); + $this->client->addParam($kparams, "resource", $resource->toParams()); + $this->client->addParam($kparams, "conversionProfileId", $conversionProfileId); + if ($advancedOptions !== null) + $this->client->addParam($kparams, "advancedOptions", $advancedOptions->toParams()); + $this->client->queueServiceActionCall("media", "updateContent", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaMediaEntry"); + return $resultObject; + } + + /** + * Update media entry thumbnail by a specified time offset (In seconds) + If flavor params id not specified, source flavor will be used by default + * + * @param string $entryId Media entry id + * @param int $timeOffset Time offset (in seconds) + * @param int $flavorParamsId The flavor params id to be used + * @return KalturaMediaEntry + */ + function updateThumbnail($entryId, $timeOffset, $flavorParamsId = null) + { + $kparams = array(); + $this->client->addParam($kparams, "entryId", $entryId); + $this->client->addParam($kparams, "timeOffset", $timeOffset); + $this->client->addParam($kparams, "flavorParamsId", $flavorParamsId); + $this->client->queueServiceActionCall("media", "updateThumbnail", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaMediaEntry"); + return $resultObject; + } + + /** + * Update media entry thumbnail from a different entry by a specified time offset (In seconds) + If flavor params id not specified, source flavor will be used by default + * + * @param string $entryId Media entry id + * @param string $sourceEntryId Media entry id + * @param int $timeOffset Time offset (in seconds) + * @param int $flavorParamsId The flavor params id to be used + * @return KalturaMediaEntry + */ + function updateThumbnailFromSourceEntry($entryId, $sourceEntryId, $timeOffset, $flavorParamsId = null) + { + $kparams = array(); + $this->client->addParam($kparams, "entryId", $entryId); + $this->client->addParam($kparams, "sourceEntryId", $sourceEntryId); + $this->client->addParam($kparams, "timeOffset", $timeOffset); + $this->client->addParam($kparams, "flavorParamsId", $flavorParamsId); + $this->client->queueServiceActionCall("media", "updateThumbnailFromSourceEntry", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaMediaEntry"); + return $resultObject; + } + + /** + * Update entry thumbnail using url + * + * @param string $entryId Media entry id + * @param string $url File url + * @return KalturaBaseEntry + */ + function updateThumbnailFromUrl($entryId, $url) + { + $kparams = array(); + $this->client->addParam($kparams, "entryId", $entryId); + $this->client->addParam($kparams, "url", $url); + $this->client->queueServiceActionCall("media", "updateThumbnailFromUrl", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaBaseEntry"); + return $resultObject; + } + + /** + * Update media entry thumbnail using a raw jpeg file + * + * @param string $entryId Media entry id + * @param file $fileData Jpeg file data + * @return KalturaMediaEntry + */ + function updateThumbnailJpeg($entryId, $fileData) + { + $kparams = array(); + $this->client->addParam($kparams, "entryId", $entryId); + $kfiles = array(); + $this->client->addParam($kfiles, "fileData", $fileData); + $this->client->queueServiceActionCall("media", "updateThumbnailJpeg", $kparams, $kfiles); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaMediaEntry"); + return $resultObject; + } + + /** + * Upload a media file to Kaltura, then the file can be used to create a media entry. + * + * @param file $fileData The file data + * @return string + */ + function upload($fileData) + { + $kparams = array(); + $kfiles = array(); + $this->client->addParam($kfiles, "fileData", $fileData); + $this->client->queueServiceActionCall("media", "upload", $kparams, $kfiles); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "string"); + return $resultObject; + } +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaMixingService extends KalturaServiceBase +{ + function __construct(KalturaClient $client = null) + { + parent::__construct($client); + } + + /** + * Adds a new mix. + If the dataContent is null, a default timeline will be created. + * + * @param KalturaMixEntry $mixEntry Mix entry metadata + * @return KalturaMixEntry + */ + function add(KalturaMixEntry $mixEntry) + { + $kparams = array(); + $this->client->addParam($kparams, "mixEntry", $mixEntry->toParams()); + $this->client->queueServiceActionCall("mixing", "add", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaMixEntry"); + return $resultObject; + } + + /** + * Anonymously rank a mix entry, no validation is done on duplicate rankings + * + * @param string $entryId + * @param int $rank + */ + function anonymousRank($entryId, $rank) + { + $kparams = array(); + $this->client->addParam($kparams, "entryId", $entryId); + $this->client->addParam($kparams, "rank", $rank); + $this->client->queueServiceActionCall("mixing", "anonymousRank", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "null"); + } + + /** + * Appends a media entry to a the end of the mix timeline, this will save the mix timeline as a new version. + * + * @param string $mixEntryId Mix entry to append to its timeline + * @param string $mediaEntryId Media entry to append to the timeline + * @return KalturaMixEntry + */ + function appendMediaEntry($mixEntryId, $mediaEntryId) + { + $kparams = array(); + $this->client->addParam($kparams, "mixEntryId", $mixEntryId); + $this->client->addParam($kparams, "mediaEntryId", $mediaEntryId); + $this->client->queueServiceActionCall("mixing", "appendMediaEntry", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaMixEntry"); + return $resultObject; + } + + /** + * Clones an existing mix. + * + * @param string $entryId Mix entry id to clone + * @return KalturaMixEntry + */ + function cloneAction($entryId) + { + $kparams = array(); + $this->client->addParam($kparams, "entryId", $entryId); + $this->client->queueServiceActionCall("mixing", "clone", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaMixEntry"); + return $resultObject; + } + + /** + * Count mix entries by filter. + * + * @param KalturaMediaEntryFilter $filter Media entry filter + * @return int + */ + function count(KalturaMediaEntryFilter $filter = null) + { + $kparams = array(); + if ($filter !== null) + $this->client->addParam($kparams, "filter", $filter->toParams()); + $this->client->queueServiceActionCall("mixing", "count", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "integer"); + return $resultObject; + } + + /** + * Delete a mix entry. + * + * @param string $entryId Mix entry id to delete + */ + function delete($entryId) + { + $kparams = array(); + $this->client->addParam($kparams, "entryId", $entryId); + $this->client->queueServiceActionCall("mixing", "delete", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "null"); + } + + /** + * Get mix entry by id. + * + * @param string $entryId Mix entry id + * @param int $version Desired version of the data + * @return KalturaMixEntry + */ + function get($entryId, $version = -1) + { + $kparams = array(); + $this->client->addParam($kparams, "entryId", $entryId); + $this->client->addParam($kparams, "version", $version); + $this->client->queueServiceActionCall("mixing", "get", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaMixEntry"); + return $resultObject; + } + + /** + * Get the mixes in which the media entry is included + * + * @param string $mediaEntryId + * @return array + */ + function getMixesByMediaId($mediaEntryId) + { + $kparams = array(); + $this->client->addParam($kparams, "mediaEntryId", $mediaEntryId); + $this->client->queueServiceActionCall("mixing", "getMixesByMediaId", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "array"); + return $resultObject; + } + + /** + * Get all ready media entries that exist in the given mix id + * + * @param string $mixId + * @param int $version Desired version to get the data from + * @return array + */ + function getReadyMediaEntries($mixId, $version = -1) + { + $kparams = array(); + $this->client->addParam($kparams, "mixId", $mixId); + $this->client->addParam($kparams, "version", $version); + $this->client->queueServiceActionCall("mixing", "getReadyMediaEntries", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "array"); + return $resultObject; + } + + /** + * List entries by filter with paging support. + Return parameter is an array of mix entries. + * + * @param KalturaMixEntryFilter $filter Mix entry filter + * @param KalturaFilterPager $pager Pager + * @return KalturaMixListResponse + */ + function listAction(KalturaMixEntryFilter $filter = null, KalturaFilterPager $pager = null) + { + $kparams = array(); + if ($filter !== null) + $this->client->addParam($kparams, "filter", $filter->toParams()); + if ($pager !== null) + $this->client->addParam($kparams, "pager", $pager->toParams()); + $this->client->queueServiceActionCall("mixing", "list", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaMixListResponse"); + return $resultObject; + } + + /** + * Update mix entry. Only the properties that were set will be updated. + * + * @param string $entryId Mix entry id to update + * @param KalturaMixEntry $mixEntry Mix entry metadata to update + * @return KalturaMixEntry + */ + function update($entryId, KalturaMixEntry $mixEntry) + { + $kparams = array(); + $this->client->addParam($kparams, "entryId", $entryId); + $this->client->addParam($kparams, "mixEntry", $mixEntry->toParams()); + $this->client->queueServiceActionCall("mixing", "update", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaMixEntry"); + return $resultObject; + } +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaNotificationService extends KalturaServiceBase +{ + function __construct(KalturaClient $client = null) + { + parent::__construct($client); + } + + /** + * Return the notifications for a specific entry id and type + * + * @param string $entryId + * @param int $type + * @return KalturaClientNotification + */ + function getClientNotification($entryId, $type) + { + $kparams = array(); + $this->client->addParam($kparams, "entryId", $entryId); + $this->client->addParam($kparams, "type", $type); + $this->client->queueServiceActionCall("notification", "getClientNotification", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaClientNotification"); + return $resultObject; + } +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaPartnerService extends KalturaServiceBase +{ + function __construct(KalturaClient $client = null) + { + parent::__construct($client); + } + + /** + * Count partner's existing sub-publishers (count includes the partner itself). + * + * @param KalturaPartnerFilter $filter + * @return int + */ + function count(KalturaPartnerFilter $filter = null) + { + $kparams = array(); + if ($filter !== null) + $this->client->addParam($kparams, "filter", $filter->toParams()); + $this->client->queueServiceActionCall("partner", "count", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "integer"); + return $resultObject; + } + + /** + * Retrieve partner object by Id + * + * @param int $id + * @return KalturaPartner + */ + function get($id = null) + { + $kparams = array(); + $this->client->addParam($kparams, "id", $id); + $this->client->queueServiceActionCall("partner", "get", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaPartner"); + return $resultObject; + } + + /** + * Retrieve all info attributed to the partner + This action expects no parameters. It returns information for the current KS partnerId. + * + * @return KalturaPartner + */ + function getInfo() + { + $kparams = array(); + $this->client->queueServiceActionCall("partner", "getInfo", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaPartner"); + return $resultObject; + } + + /** + * Retrieve partner secret and admin secret + * + * @param int $partnerId + * @param string $adminEmail + * @param string $cmsPassword + * @return KalturaPartner + */ + function getSecrets($partnerId, $adminEmail, $cmsPassword) + { + $kparams = array(); + $this->client->addParam($kparams, "partnerId", $partnerId); + $this->client->addParam($kparams, "adminEmail", $adminEmail); + $this->client->addParam($kparams, "cmsPassword", $cmsPassword); + $this->client->queueServiceActionCall("partner", "getSecrets", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaPartner"); + return $resultObject; + } + + /** + * Get usage statistics for a partner + Calculation is done according to partner's package + * + * @return KalturaPartnerStatistics + */ + function getStatistics() + { + $kparams = array(); + $this->client->queueServiceActionCall("partner", "getStatistics", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaPartnerStatistics"); + return $resultObject; + } + + /** + * Get usage statistics for a partner + Calculation is done according to partner's package + Additional data returned is a graph points of streaming usage in a timeframe + The resolution can be "days" or "months" + * + * @param int $year + * @param int $month + * @param string $resolution + * @return KalturaPartnerUsage + */ + function getUsage($year = "", $month = 1, $resolution = null) + { + $kparams = array(); + $this->client->addParam($kparams, "year", $year); + $this->client->addParam($kparams, "month", $month); + $this->client->addParam($kparams, "resolution", $resolution); + $this->client->queueServiceActionCall("partner", "getUsage", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaPartnerUsage"); + return $resultObject; + } + + /** + * List partners by filter with paging support + Current implementation will only list the sub partners of the partner initiating the api call (using the current KS). + This action is only partially implemented to support listing sub partners of a VAR partner. + * + * @param KalturaPartnerFilter $filter + * @param KalturaFilterPager $pager + * @return KalturaPartnerListResponse + */ + function listAction(KalturaPartnerFilter $filter = null, KalturaFilterPager $pager = null) + { + $kparams = array(); + if ($filter !== null) + $this->client->addParam($kparams, "filter", $filter->toParams()); + if ($pager !== null) + $this->client->addParam($kparams, "pager", $pager->toParams()); + $this->client->queueServiceActionCall("partner", "list", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaPartnerListResponse"); + return $resultObject; + } + + /** + * List partner's current processes' statuses + * + * @return KalturaFeatureStatusListResponse + */ + function listFeatureStatus() + { + $kparams = array(); + $this->client->queueServiceActionCall("partner", "listFeatureStatus", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaFeatureStatusListResponse"); + return $resultObject; + } + + /** + * Retrieve a list of partner objects which the current user is allowed to access. + * + * @param KalturaPartnerFilter $partnerFilter + * @param KalturaFilterPager $pager + * @return KalturaPartnerListResponse + */ + function listPartnersForUser(KalturaPartnerFilter $partnerFilter = null, KalturaFilterPager $pager = null) + { + $kparams = array(); + if ($partnerFilter !== null) + $this->client->addParam($kparams, "partnerFilter", $partnerFilter->toParams()); + if ($pager !== null) + $this->client->addParam($kparams, "pager", $pager->toParams()); + $this->client->queueServiceActionCall("partner", "listPartnersForUser", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaPartnerListResponse"); + return $resultObject; + } + + /** + * Create a new Partner object + * + * @param KalturaPartner $partner + * @param string $cmsPassword + * @param int $templatePartnerId + * @param bool $silent + * @return KalturaPartner + */ + function register(KalturaPartner $partner, $cmsPassword = "", $templatePartnerId = null, $silent = false) + { + $kparams = array(); + $this->client->addParam($kparams, "partner", $partner->toParams()); + $this->client->addParam($kparams, "cmsPassword", $cmsPassword); + $this->client->addParam($kparams, "templatePartnerId", $templatePartnerId); + $this->client->addParam($kparams, "silent", $silent); + $this->client->queueServiceActionCall("partner", "register", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaPartner"); + return $resultObject; + } + + /** + * Update details and settings of an existing partner + * + * @param KalturaPartner $partner + * @param bool $allowEmpty + * @return KalturaPartner + */ + function update(KalturaPartner $partner, $allowEmpty = false) + { + $kparams = array(); + $this->client->addParam($kparams, "partner", $partner->toParams()); + $this->client->addParam($kparams, "allowEmpty", $allowEmpty); + $this->client->queueServiceActionCall("partner", "update", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaPartner"); + return $resultObject; + } +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaPermissionItemService extends KalturaServiceBase +{ + function __construct(KalturaClient $client = null) + { + parent::__construct($client); + } + + /** + * Adds a new permission item object to the account. + This action is available only to Kaltura system administrators. + * + * @param KalturaPermissionItem $permissionItem The new permission item + * @return KalturaPermissionItem + */ + function add(KalturaPermissionItem $permissionItem) + { + $kparams = array(); + $this->client->addParam($kparams, "permissionItem", $permissionItem->toParams()); + $this->client->queueServiceActionCall("permissionitem", "add", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaPermissionItem"); + return $resultObject; + } + + /** + * Deletes an existing permission item object. + This action is available only to Kaltura system administrators. + * + * @param int $permissionItemId The permission item's unique identifier + * @return KalturaPermissionItem + */ + function delete($permissionItemId) + { + $kparams = array(); + $this->client->addParam($kparams, "permissionItemId", $permissionItemId); + $this->client->queueServiceActionCall("permissionitem", "delete", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaPermissionItem"); + return $resultObject; + } + + /** + * Retrieves a permission item object using its ID. + * + * @param int $permissionItemId The permission item's unique identifier + * @return KalturaPermissionItem + */ + function get($permissionItemId) + { + $kparams = array(); + $this->client->addParam($kparams, "permissionItemId", $permissionItemId); + $this->client->queueServiceActionCall("permissionitem", "get", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaPermissionItem"); + return $resultObject; + } + + /** + * Lists permission item objects that are associated with an account. + * + * @param KalturaPermissionItemFilter $filter A filter used to exclude specific types of permission items + * @param KalturaFilterPager $pager A limit for the number of records to display on a page + * @return KalturaPermissionItemListResponse + */ + function listAction(KalturaPermissionItemFilter $filter = null, KalturaFilterPager $pager = null) + { + $kparams = array(); + if ($filter !== null) + $this->client->addParam($kparams, "filter", $filter->toParams()); + if ($pager !== null) + $this->client->addParam($kparams, "pager", $pager->toParams()); + $this->client->queueServiceActionCall("permissionitem", "list", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaPermissionItemListResponse"); + return $resultObject; + } + + /** + * Updates an existing permission item object. + This action is available only to Kaltura system administrators. + * + * @param int $permissionItemId The permission item's unique identifier + * @param KalturaPermissionItem $permissionItem Id The permission item's unique identifier + * @return KalturaPermissionItem + */ + function update($permissionItemId, KalturaPermissionItem $permissionItem) + { + $kparams = array(); + $this->client->addParam($kparams, "permissionItemId", $permissionItemId); + $this->client->addParam($kparams, "permissionItem", $permissionItem->toParams()); + $this->client->queueServiceActionCall("permissionitem", "update", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaPermissionItem"); + return $resultObject; + } +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaPermissionService extends KalturaServiceBase +{ + function __construct(KalturaClient $client = null) + { + parent::__construct($client); + } + + /** + * Adds a new permission object to the account. + * + * @param KalturaPermission $permission The new permission + * @return KalturaPermission + */ + function add(KalturaPermission $permission) + { + $kparams = array(); + $this->client->addParam($kparams, "permission", $permission->toParams()); + $this->client->queueServiceActionCall("permission", "add", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaPermission"); + return $resultObject; + } + + /** + * Deletes an existing permission object. + * + * @param string $permissionName The name assigned to the permission + * @return KalturaPermission + */ + function delete($permissionName) + { + $kparams = array(); + $this->client->addParam($kparams, "permissionName", $permissionName); + $this->client->queueServiceActionCall("permission", "delete", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaPermission"); + return $resultObject; + } + + /** + * Retrieves a permission object using its ID. + * + * @param string $permissionName The name assigned to the permission + * @return KalturaPermission + */ + function get($permissionName) + { + $kparams = array(); + $this->client->addParam($kparams, "permissionName", $permissionName); + $this->client->queueServiceActionCall("permission", "get", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaPermission"); + return $resultObject; + } + + /** + * Retrieves a list of permissions that apply to the current KS. + * + * @return string + */ + function getCurrentPermissions() + { + $kparams = array(); + $this->client->queueServiceActionCall("permission", "getCurrentPermissions", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "string"); + return $resultObject; + } + + /** + * Lists permission objects that are associated with an account. + Blocked permissions are listed unless you use a filter to exclude them. + Blocked permissions are listed unless you use a filter to exclude them. + * + * @param KalturaPermissionFilter $filter A filter used to exclude specific types of permissions + * @param KalturaFilterPager $pager A limit for the number of records to display on a page + * @return KalturaPermissionListResponse + */ + function listAction(KalturaPermissionFilter $filter = null, KalturaFilterPager $pager = null) + { + $kparams = array(); + if ($filter !== null) + $this->client->addParam($kparams, "filter", $filter->toParams()); + if ($pager !== null) + $this->client->addParam($kparams, "pager", $pager->toParams()); + $this->client->queueServiceActionCall("permission", "list", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaPermissionListResponse"); + return $resultObject; + } + + /** + * Updates an existing permission object. + * + * @param string $permissionName The name assigned to the permission + * @param KalturaPermission $permission Name The name assigned to the permission + * @return KalturaPermission + */ + function update($permissionName, KalturaPermission $permission) + { + $kparams = array(); + $this->client->addParam($kparams, "permissionName", $permissionName); + $this->client->addParam($kparams, "permission", $permission->toParams()); + $this->client->queueServiceActionCall("permission", "update", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaPermission"); + return $resultObject; + } +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaPlaylistService extends KalturaServiceBase +{ + function __construct(KalturaClient $client = null) + { + parent::__construct($client); + } + + /** + * Add new playlist + Note that all entries used in a playlist will become public and may appear in KalturaNetwork + * + * @param KalturaPlaylist $playlist + * @param bool $updateStats Indicates that the playlist statistics attributes should be updated synchronously now + * @return KalturaPlaylist + */ + function add(KalturaPlaylist $playlist, $updateStats = false) + { + $kparams = array(); + $this->client->addParam($kparams, "playlist", $playlist->toParams()); + $this->client->addParam($kparams, "updateStats", $updateStats); + $this->client->queueServiceActionCall("playlist", "add", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaPlaylist"); + return $resultObject; + } + + /** + * Clone an existing playlist + * + * @param string $id Id of the playlist to clone + * @param KalturaPlaylist $newPlaylist Parameters defined here will override the ones in the cloned playlist + * @return KalturaPlaylist + */ + function cloneAction($id, KalturaPlaylist $newPlaylist = null) + { + $kparams = array(); + $this->client->addParam($kparams, "id", $id); + if ($newPlaylist !== null) + $this->client->addParam($kparams, "newPlaylist", $newPlaylist->toParams()); + $this->client->queueServiceActionCall("playlist", "clone", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaPlaylist"); + return $resultObject; + } + + /** + * Delete existing playlist + * + * @param string $id + */ + function delete($id) + { + $kparams = array(); + $this->client->addParam($kparams, "id", $id); + $this->client->queueServiceActionCall("playlist", "delete", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "null"); + } + + /** + * Retrieve playlist for playing purpose + * + * @param string $id + * @param string $detailed + * @param KalturaContext $playlistContext + * @param KalturaMediaEntryFilterForPlaylist $filter + * @param KalturaFilterPager $pager + * @return array + */ + function execute($id, $detailed = "", KalturaContext $playlistContext = null, KalturaMediaEntryFilterForPlaylist $filter = null, KalturaFilterPager $pager = null) + { + $kparams = array(); + $this->client->addParam($kparams, "id", $id); + $this->client->addParam($kparams, "detailed", $detailed); + if ($playlistContext !== null) + $this->client->addParam($kparams, "playlistContext", $playlistContext->toParams()); + if ($filter !== null) + $this->client->addParam($kparams, "filter", $filter->toParams()); + if ($pager !== null) + $this->client->addParam($kparams, "pager", $pager->toParams()); + $this->client->queueServiceActionCall("playlist", "execute", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "array"); + return $resultObject; + } + + /** + * Retrieve playlist for playing purpose, based on content + * + * @param int $playlistType + * @param string $playlistContent + * @param string $detailed + * @param KalturaFilterPager $pager + * @return array + */ + function executeFromContent($playlistType, $playlistContent, $detailed = "", KalturaFilterPager $pager = null) + { + $kparams = array(); + $this->client->addParam($kparams, "playlistType", $playlistType); + $this->client->addParam($kparams, "playlistContent", $playlistContent); + $this->client->addParam($kparams, "detailed", $detailed); + if ($pager !== null) + $this->client->addParam($kparams, "pager", $pager->toParams()); + $this->client->queueServiceActionCall("playlist", "executeFromContent", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "array"); + return $resultObject; + } + + /** + * Revrieve playlist for playing purpose, based on media entry filters + * + * @param array $filters + * @param int $totalResults + * @param string $detailed + * @param KalturaFilterPager $pager + * @return array + */ + function executeFromFilters(array $filters, $totalResults, $detailed = "1", KalturaFilterPager $pager = null) + { + $kparams = array(); + foreach($filters as $index => $obj) + { + $this->client->addParam($kparams, "filters:$index", $obj->toParams()); + } + $this->client->addParam($kparams, "totalResults", $totalResults); + $this->client->addParam($kparams, "detailed", $detailed); + if ($pager !== null) + $this->client->addParam($kparams, "pager", $pager->toParams()); + $this->client->queueServiceActionCall("playlist", "executeFromFilters", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "array"); + return $resultObject; + } + + /** + * Retrieve a playlist + * + * @param string $id + * @param int $version Desired version of the data + * @return KalturaPlaylist + */ + function get($id, $version = -1) + { + $kparams = array(); + $this->client->addParam($kparams, "id", $id); + $this->client->addParam($kparams, "version", $version); + $this->client->queueServiceActionCall("playlist", "get", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaPlaylist"); + return $resultObject; + } + + /** + * Retrieve playlist statistics + * + * @param int $playlistType + * @param string $playlistContent + * @return KalturaPlaylist + */ + function getStatsFromContent($playlistType, $playlistContent) + { + $kparams = array(); + $this->client->addParam($kparams, "playlistType", $playlistType); + $this->client->addParam($kparams, "playlistContent", $playlistContent); + $this->client->queueServiceActionCall("playlist", "getStatsFromContent", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaPlaylist"); + return $resultObject; + } + + /** + * List available playlists + * + * @param KalturaPlaylistFilter $filter + * @param KalturaFilterPager $pager + * @return KalturaPlaylistListResponse + */ + function listAction(KalturaPlaylistFilter $filter = null, KalturaFilterPager $pager = null) + { + $kparams = array(); + if ($filter !== null) + $this->client->addParam($kparams, "filter", $filter->toParams()); + if ($pager !== null) + $this->client->addParam($kparams, "pager", $pager->toParams()); + $this->client->queueServiceActionCall("playlist", "list", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaPlaylistListResponse"); + return $resultObject; + } + + /** + * Update existing playlist + Note - you cannot change playlist type. updated playlist must be of the same type. + * + * @param string $id + * @param KalturaPlaylist $playlist + * @param bool $updateStats + * @return KalturaPlaylist + */ + function update($id, KalturaPlaylist $playlist, $updateStats = false) + { + $kparams = array(); + $this->client->addParam($kparams, "id", $id); + $this->client->addParam($kparams, "playlist", $playlist->toParams()); + $this->client->addParam($kparams, "updateStats", $updateStats); + $this->client->queueServiceActionCall("playlist", "update", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaPlaylist"); + return $resultObject; + } +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaReportService extends KalturaServiceBase +{ + function __construct(KalturaClient $client = null) + { + parent::__construct($client); + } + + /** + * + * + * @param int $id + * @param array $params + * @return KalturaReportResponse + */ + function execute($id, array $params = null) + { + $kparams = array(); + $this->client->addParam($kparams, "id", $id); + if ($params !== null) + foreach($params as $index => $obj) + { + $this->client->addParam($kparams, "params:$index", $obj->toParams()); + } + $this->client->queueServiceActionCall("report", "execute", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaReportResponse"); + return $resultObject; + } + + /** + * Report getBaseTotal action allows to get a the total base for storage reports + * + * @param string $reportType + * @param KalturaReportInputFilter $reportInputFilter + * @param string $objectIds - one ID or more (separated by ',') of specific objects to query + * @return array + */ + function getBaseTotal($reportType, KalturaReportInputFilter $reportInputFilter, $objectIds = null) + { + $kparams = array(); + $this->client->addParam($kparams, "reportType", $reportType); + $this->client->addParam($kparams, "reportInputFilter", $reportInputFilter->toParams()); + $this->client->addParam($kparams, "objectIds", $objectIds); + $this->client->queueServiceActionCall("report", "getBaseTotal", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "array"); + return $resultObject; + } + + /** + * + * + * @param int $id + * @param array $params + * @return file + */ + function getCsv($id, array $params = null) + { + if ($this->client->isMultiRequest()) + throw new KalturaClientException("Action is not supported as part of multi-request.", KalturaClientException::ERROR_ACTION_IN_MULTIREQUEST); + + $kparams = array(); + $this->client->addParam($kparams, "id", $id); + if ($params !== null) + foreach($params as $index => $obj) + { + $this->client->addParam($kparams, "params:$index", $obj->toParams()); + } + $this->client->queueServiceActionCall("report", "getCsv", $kparams); + if(!$this->client->getDestinationPath() && !$this->client->getReturnServedResult()) + return $this->client->getServeUrl(); + return $this->client->doQueue(); + } + + /** + * Returns report CSV file executed by string params with the following convention: param1=value1;param2=value2 + * + * @param int $id + * @param string $params + * @return file + */ + function getCsvFromStringParams($id, $params = null) + { + if ($this->client->isMultiRequest()) + throw new KalturaClientException("Action is not supported as part of multi-request.", KalturaClientException::ERROR_ACTION_IN_MULTIREQUEST); + + $kparams = array(); + $this->client->addParam($kparams, "id", $id); + $this->client->addParam($kparams, "params", $params); + $this->client->queueServiceActionCall("report", "getCsvFromStringParams", $kparams); + if(!$this->client->getDestinationPath() && !$this->client->getReturnServedResult()) + return $this->client->getServeUrl(); + return $this->client->doQueue(); + } + + /** + * Report getGraphs action allows to get a graph data for a specific report. + * + * @param string $reportType + * @param KalturaReportInputFilter $reportInputFilter + * @param string $dimension + * @param string $objectIds - one ID or more (separated by ',') of specific objects to query + * @return array + */ + function getGraphs($reportType, KalturaReportInputFilter $reportInputFilter, $dimension = null, $objectIds = null) + { + $kparams = array(); + $this->client->addParam($kparams, "reportType", $reportType); + $this->client->addParam($kparams, "reportInputFilter", $reportInputFilter->toParams()); + $this->client->addParam($kparams, "dimension", $dimension); + $this->client->addParam($kparams, "objectIds", $objectIds); + $this->client->queueServiceActionCall("report", "getGraphs", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "array"); + return $resultObject; + } + + /** + * Report getTable action allows to get a graph data for a specific report. + * + * @param string $reportType + * @param KalturaReportInputFilter $reportInputFilter + * @param KalturaFilterPager $pager + * @param string $order + * @param string $objectIds - one ID or more (separated by ',') of specific objects to query + * @return KalturaReportTable + */ + function getTable($reportType, KalturaReportInputFilter $reportInputFilter, KalturaFilterPager $pager, $order = null, $objectIds = null) + { + $kparams = array(); + $this->client->addParam($kparams, "reportType", $reportType); + $this->client->addParam($kparams, "reportInputFilter", $reportInputFilter->toParams()); + $this->client->addParam($kparams, "pager", $pager->toParams()); + $this->client->addParam($kparams, "order", $order); + $this->client->addParam($kparams, "objectIds", $objectIds); + $this->client->queueServiceActionCall("report", "getTable", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaReportTable"); + return $resultObject; + } + + /** + * Report getTotal action allows to get a graph data for a specific report. + * + * @param string $reportType + * @param KalturaReportInputFilter $reportInputFilter + * @param string $objectIds - one ID or more (separated by ',') of specific objects to query + * @return KalturaReportTotal + */ + function getTotal($reportType, KalturaReportInputFilter $reportInputFilter, $objectIds = null) + { + $kparams = array(); + $this->client->addParam($kparams, "reportType", $reportType); + $this->client->addParam($kparams, "reportInputFilter", $reportInputFilter->toParams()); + $this->client->addParam($kparams, "objectIds", $objectIds); + $this->client->queueServiceActionCall("report", "getTotal", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaReportTotal"); + return $resultObject; + } + + /** + * Will create a Csv file for the given report and return the URL to access it + * + * @param string $reportTitle The title of the report to display at top of CSV + * @param string $reportText The text of the filter of the report + * @param string $headers The headers of the columns - a map between the enumerations on the server side and the their display text + * @param string $reportType + * @param KalturaReportInputFilter $reportInputFilter + * @param string $dimension + * @param KalturaFilterPager $pager + * @param string $order + * @param string $objectIds - one ID or more (separated by ',') of specific objects to query + * @return string + */ + function getUrlForReportAsCsv($reportTitle, $reportText, $headers, $reportType, KalturaReportInputFilter $reportInputFilter, $dimension = null, KalturaFilterPager $pager = null, $order = null, $objectIds = null) + { + $kparams = array(); + $this->client->addParam($kparams, "reportTitle", $reportTitle); + $this->client->addParam($kparams, "reportText", $reportText); + $this->client->addParam($kparams, "headers", $headers); + $this->client->addParam($kparams, "reportType", $reportType); + $this->client->addParam($kparams, "reportInputFilter", $reportInputFilter->toParams()); + $this->client->addParam($kparams, "dimension", $dimension); + if ($pager !== null) + $this->client->addParam($kparams, "pager", $pager->toParams()); + $this->client->addParam($kparams, "order", $order); + $this->client->addParam($kparams, "objectIds", $objectIds); + $this->client->queueServiceActionCall("report", "getUrlForReportAsCsv", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "string"); + return $resultObject; + } + + /** + * Will serve a requested report + * + * @param string $id - the requested id + * @return string + */ + function serve($id) + { + $kparams = array(); + $this->client->addParam($kparams, "id", $id); + $this->client->queueServiceActionCall("report", "serve", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "string"); + return $resultObject; + } +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaResponseProfileService extends KalturaServiceBase +{ + function __construct(KalturaClient $client = null) + { + parent::__construct($client); + } + + /** + * Add new response profile + * + * @param KalturaResponseProfile $addResponseProfile + * @return KalturaResponseProfile + */ + function add(KalturaResponseProfile $addResponseProfile) + { + $kparams = array(); + $this->client->addParam($kparams, "addResponseProfile", $addResponseProfile->toParams()); + $this->client->queueServiceActionCall("responseprofile", "add", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaResponseProfile"); + return $resultObject; + } + + /** + * Clone an existing response profile + * + * @param bigint $id + * @param KalturaResponseProfile $profile + * @return KalturaResponseProfile + */ + function cloneAction($id, KalturaResponseProfile $profile) + { + $kparams = array(); + $this->client->addParam($kparams, "id", $id); + $this->client->addParam($kparams, "profile", $profile->toParams()); + $this->client->queueServiceActionCall("responseprofile", "clone", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaResponseProfile"); + return $resultObject; + } + + /** + * Delete response profile by id + * + * @param bigint $id + */ + function delete($id) + { + $kparams = array(); + $this->client->addParam($kparams, "id", $id); + $this->client->queueServiceActionCall("responseprofile", "delete", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "null"); + } + + /** + * Get response profile by id + * + * @param bigint $id + * @return KalturaResponseProfile + */ + function get($id) + { + $kparams = array(); + $this->client->addParam($kparams, "id", $id); + $this->client->queueServiceActionCall("responseprofile", "get", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaResponseProfile"); + return $resultObject; + } + + /** + * List response profiles by filter and pager + * + * @param KalturaResponseProfileFilter $filter + * @param KalturaFilterPager $pager + * @return KalturaResponseProfileListResponse + */ + function listAction(KalturaResponseProfileFilter $filter = null, KalturaFilterPager $pager = null) + { + $kparams = array(); + if ($filter !== null) + $this->client->addParam($kparams, "filter", $filter->toParams()); + if ($pager !== null) + $this->client->addParam($kparams, "pager", $pager->toParams()); + $this->client->queueServiceActionCall("responseprofile", "list", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaResponseProfileListResponse"); + return $resultObject; + } + + /** + * Recalculate response profile cached objects + * + * @param KalturaResponseProfileCacheRecalculateOptions $options + * @return KalturaResponseProfileCacheRecalculateResults + */ + function recalculate(KalturaResponseProfileCacheRecalculateOptions $options) + { + $kparams = array(); + $this->client->addParam($kparams, "options", $options->toParams()); + $this->client->queueServiceActionCall("responseprofile", "recalculate", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaResponseProfileCacheRecalculateResults"); + return $resultObject; + } + + /** + * Update response profile by id + * + * @param bigint $id + * @param KalturaResponseProfile $updateResponseProfile + * @return KalturaResponseProfile + */ + function update($id, KalturaResponseProfile $updateResponseProfile) + { + $kparams = array(); + $this->client->addParam($kparams, "id", $id); + $this->client->addParam($kparams, "updateResponseProfile", $updateResponseProfile->toParams()); + $this->client->queueServiceActionCall("responseprofile", "update", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaResponseProfile"); + return $resultObject; + } + + /** + * Update response profile status by id + * + * @param bigint $id + * @param int $status + * @return KalturaResponseProfile + */ + function updateStatus($id, $status) + { + $kparams = array(); + $this->client->addParam($kparams, "id", $id); + $this->client->addParam($kparams, "status", $status); + $this->client->queueServiceActionCall("responseprofile", "updateStatus", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaResponseProfile"); + return $resultObject; + } +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaSchemaService extends KalturaServiceBase +{ + function __construct(KalturaClient $client = null) + { + parent::__construct($client); + } + + /** + * Serves the requested XSD according to the type and name. + * + * @param string $type + * @return file + */ + function serve($type) + { + if ($this->client->isMultiRequest()) + throw new KalturaClientException("Action is not supported as part of multi-request.", KalturaClientException::ERROR_ACTION_IN_MULTIREQUEST); + + $kparams = array(); + $this->client->addParam($kparams, "type", $type); + $this->client->queueServiceActionCall("schema", "serve", $kparams); + if(!$this->client->getDestinationPath() && !$this->client->getReturnServedResult()) + return $this->client->getServeUrl(); + return $this->client->doQueue(); + } +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaSearchService extends KalturaServiceBase +{ + function __construct(KalturaClient $client = null) + { + parent::__construct($client); + } + + /** + * + * + * @param int $searchSource + * @param string $userName + * @param string $password + * @return KalturaSearchAuthData + */ + function externalLogin($searchSource, $userName, $password) + { + $kparams = array(); + $this->client->addParam($kparams, "searchSource", $searchSource); + $this->client->addParam($kparams, "userName", $userName); + $this->client->addParam($kparams, "password", $password); + $this->client->queueServiceActionCall("search", "externalLogin", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaSearchAuthData"); + return $resultObject; + } + + /** + * Retrieve extra information about media found in search action + Some providers return only part of the fields needed to create entry from, use this action to get the rest of the fields. + * + * @param KalturaSearchResult $searchResult KalturaSearchResult object extends KalturaSearch and has all fields required for media:add + * @return KalturaSearchResult + */ + function getMediaInfo(KalturaSearchResult $searchResult) + { + $kparams = array(); + $this->client->addParam($kparams, "searchResult", $searchResult->toParams()); + $this->client->queueServiceActionCall("search", "getMediaInfo", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaSearchResult"); + return $resultObject; + } + + /** + * Search for media in one of the supported media providers + * + * @param KalturaSearch $search A KalturaSearch object contains the search keywords, media provider and media type + * @param KalturaFilterPager $pager + * @return KalturaSearchResultResponse + */ + function search(KalturaSearch $search, KalturaFilterPager $pager = null) + { + $kparams = array(); + $this->client->addParam($kparams, "search", $search->toParams()); + if ($pager !== null) + $this->client->addParam($kparams, "pager", $pager->toParams()); + $this->client->queueServiceActionCall("search", "search", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaSearchResultResponse"); + return $resultObject; + } + + /** + * Search for media given a specific URL + Kaltura supports a searchURL action on some of the media providers. + This action will return a KalturaSearchResult object based on a given URL (assuming the media provider is supported) + * + * @param int $mediaType + * @param string $url + * @return KalturaSearchResult + */ + function searchUrl($mediaType, $url) + { + $kparams = array(); + $this->client->addParam($kparams, "mediaType", $mediaType); + $this->client->addParam($kparams, "url", $url); + $this->client->queueServiceActionCall("search", "searchUrl", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaSearchResult"); + return $resultObject; + } +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaServerNodeService extends KalturaServiceBase +{ + function __construct(KalturaClient $client = null) + { + parent::__construct($client); + } + + /** + * Adds a server node to the Kaltura DB. + * + * @param KalturaServerNode $serverNode + * @return KalturaServerNode + */ + function add(KalturaServerNode $serverNode) + { + $kparams = array(); + $this->client->addParam($kparams, "serverNode", $serverNode->toParams()); + $this->client->queueServiceActionCall("servernode", "add", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaServerNode"); + return $resultObject; + } + + /** + * Delete server node by id + * + * @param string $serverNodeId + */ + function delete($serverNodeId) + { + $kparams = array(); + $this->client->addParam($kparams, "serverNodeId", $serverNodeId); + $this->client->queueServiceActionCall("servernode", "delete", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "null"); + } + + /** + * Disable server node by id + * + * @param string $serverNodeId + * @return KalturaServerNode + */ + function disable($serverNodeId) + { + $kparams = array(); + $this->client->addParam($kparams, "serverNodeId", $serverNodeId); + $this->client->queueServiceActionCall("servernode", "disable", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaServerNode"); + return $resultObject; + } + + /** + * Enable server node by id + * + * @param string $serverNodeId + * @return KalturaServerNode + */ + function enable($serverNodeId) + { + $kparams = array(); + $this->client->addParam($kparams, "serverNodeId", $serverNodeId); + $this->client->queueServiceActionCall("servernode", "enable", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaServerNode"); + return $resultObject; + } + + /** + * Get server node by id + * + * @param int $serverNodeId + * @return KalturaServerNode + */ + function get($serverNodeId) + { + $kparams = array(); + $this->client->addParam($kparams, "serverNodeId", $serverNodeId); + $this->client->queueServiceActionCall("servernode", "get", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaServerNode"); + return $resultObject; + } + + /** + * + * + * @param KalturaServerNodeFilter $filter + * @param KalturaFilterPager $pager + * @return KalturaServerNodeListResponse + */ + function listAction(KalturaServerNodeFilter $filter = null, KalturaFilterPager $pager = null) + { + $kparams = array(); + if ($filter !== null) + $this->client->addParam($kparams, "filter", $filter->toParams()); + if ($pager !== null) + $this->client->addParam($kparams, "pager", $pager->toParams()); + $this->client->queueServiceActionCall("servernode", "list", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaServerNodeListResponse"); + return $resultObject; + } + + /** + * Mark server node offline + * + * @param string $serverNodeId + * @return KalturaServerNode + */ + function markOffline($serverNodeId) + { + $kparams = array(); + $this->client->addParam($kparams, "serverNodeId", $serverNodeId); + $this->client->queueServiceActionCall("servernode", "markOffline", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaServerNode"); + return $resultObject; + } + + /** + * Update server node status + * + * @param string $hostName + * @param KalturaServerNode $serverNode + * @return KalturaServerNode + */ + function reportStatus($hostName, KalturaServerNode $serverNode = null) + { + $kparams = array(); + $this->client->addParam($kparams, "hostName", $hostName); + if ($serverNode !== null) + $this->client->addParam($kparams, "serverNode", $serverNode->toParams()); + $this->client->queueServiceActionCall("servernode", "reportStatus", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaServerNode"); + return $resultObject; + } + + /** + * Update server node by id + * + * @param int $serverNodeId + * @param KalturaServerNode $serverNode Id + * @return KalturaServerNode + */ + function update($serverNodeId, KalturaServerNode $serverNode) + { + $kparams = array(); + $this->client->addParam($kparams, "serverNodeId", $serverNodeId); + $this->client->addParam($kparams, "serverNode", $serverNode->toParams()); + $this->client->queueServiceActionCall("servernode", "update", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaServerNode"); + return $resultObject; + } +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaSessionService extends KalturaServiceBase +{ + function __construct(KalturaClient $client = null) + { + parent::__construct($client); + } + + /** + * End a session with the Kaltura server, making the current KS invalid. + * + */ + function end() + { + $kparams = array(); + $this->client->queueServiceActionCall("session", "end", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "null"); + } + + /** + * Parse session key and return its info + * + * @param string $session The KS to be parsed, keep it empty to use current session. + * @return KalturaSessionInfo + */ + function get($session = null) + { + $kparams = array(); + $this->client->addParam($kparams, "session", $session); + $this->client->queueServiceActionCall("session", "get", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaSessionInfo"); + return $resultObject; + } + + /** + * Start an impersonated session with Kaltura's server. + The result KS is the session key that you should pass to all services that requires a ticket. + * + * @param string $secret - should be the secret (admin or user) of the original partnerId (not impersonatedPartnerId). + * @param int $impersonatedPartnerId + * @param string $userId - impersonated userId + * @param int $type + * @param int $partnerId + * @param int $expiry KS expiry time in seconds + * @param string $privileges + * @return string + */ + function impersonate($secret, $impersonatedPartnerId, $userId = "", $type = 0, $partnerId = null, $expiry = 86400, $privileges = null) + { + $kparams = array(); + $this->client->addParam($kparams, "secret", $secret); + $this->client->addParam($kparams, "impersonatedPartnerId", $impersonatedPartnerId); + $this->client->addParam($kparams, "userId", $userId); + $this->client->addParam($kparams, "type", $type); + $this->client->addParam($kparams, "partnerId", $partnerId); + $this->client->addParam($kparams, "expiry", $expiry); + $this->client->addParam($kparams, "privileges", $privileges); + $this->client->queueServiceActionCall("session", "impersonate", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "string"); + return $resultObject; + } + + /** + * Start an impersonated session with Kaltura's server. + The result KS info contains the session key that you should pass to all services that requires a ticket. + Type, expiry and privileges won't be changed if they're not set + * + * @param string $session The old KS of the impersonated partner + * @param int $type Type of the new KS + * @param int $expiry Expiry time in seconds of the new KS + * @param string $privileges Privileges of the new KS + * @return KalturaSessionInfo + */ + function impersonateByKs($session, $type = null, $expiry = null, $privileges = null) + { + $kparams = array(); + $this->client->addParam($kparams, "session", $session); + $this->client->addParam($kparams, "type", $type); + $this->client->addParam($kparams, "expiry", $expiry); + $this->client->addParam($kparams, "privileges", $privileges); + $this->client->queueServiceActionCall("session", "impersonateByKs", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaSessionInfo"); + return $resultObject; + } + + /** + * Start a session with Kaltura's server. + The result KS is the session key that you should pass to all services that requires a ticket. + * + * @param string $secret Remember to provide the correct secret according to the sessionType you want + * @param string $userId + * @param int $type Regular session or Admin session + * @param int $partnerId + * @param int $expiry KS expiry time in seconds + * @param string $privileges + * @return string + */ + function start($secret, $userId = "", $type = 0, $partnerId = null, $expiry = 86400, $privileges = null) + { + $kparams = array(); + $this->client->addParam($kparams, "secret", $secret); + $this->client->addParam($kparams, "userId", $userId); + $this->client->addParam($kparams, "type", $type); + $this->client->addParam($kparams, "partnerId", $partnerId); + $this->client->addParam($kparams, "expiry", $expiry); + $this->client->addParam($kparams, "privileges", $privileges); + $this->client->queueServiceActionCall("session", "start", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "string"); + return $resultObject; + } + + /** + * Start a session for Kaltura's flash widgets + * + * @param string $widgetId + * @param int $expiry + * @return KalturaStartWidgetSessionResponse + */ + function startWidgetSession($widgetId, $expiry = 86400) + { + $kparams = array(); + $this->client->addParam($kparams, "widgetId", $widgetId); + $this->client->addParam($kparams, "expiry", $expiry); + $this->client->queueServiceActionCall("session", "startWidgetSession", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaStartWidgetSessionResponse"); + return $resultObject; + } +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaStatsService extends KalturaServiceBase +{ + function __construct(KalturaClient $client = null) + { + parent::__construct($client); + } + + /** + * Will write to the event log a single line representing the event + client version - will help interprete the line structure. different client versions might have slightly different data/data formats in the line +event_id - number is the row number in yuval's excel +datetime - same format as MySql's datetime - can change and should reflect the time zone +session id - can be some big random number or guid +partner id +entry id +unique viewer +widget id +ui_conf id +uid - the puser id as set by the ppartner +current point - in milliseconds +duration - milliseconds +user ip +process duration - in milliseconds +control id +seek +new point +referrer + + + KalturaStatsEvent $event + * + * @param KalturaStatsEvent $event + * @return bool + */ + function collect(KalturaStatsEvent $event) + { + $kparams = array(); + $this->client->addParam($kparams, "event", $event->toParams()); + $this->client->queueServiceActionCall("stats", "collect", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $resultObject = (bool) $resultObject; + return $resultObject; + } + + /** + * Will collect the kmcEvent sent form the KMC client + // this will actually be an empty function because all events will be sent using GET and will anyway be logged in the apache log + * + * @param KalturaStatsKmcEvent $kmcEvent + */ + function kmcCollect(KalturaStatsKmcEvent $kmcEvent) + { + $kparams = array(); + $this->client->addParam($kparams, "kmcEvent", $kmcEvent->toParams()); + $this->client->queueServiceActionCall("stats", "kmcCollect", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "null"); + } + + /** + * Use this action to report device capabilities to the kaltura server. + * + * @param string $data + */ + function reportDeviceCapabilities($data) + { + $kparams = array(); + $this->client->addParam($kparams, "data", $data); + $this->client->queueServiceActionCall("stats", "reportDeviceCapabilities", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "null"); + } + + /** + * Use this action to report errors to the kaltura server. + * + * @param string $errorCode + * @param string $errorMessage + */ + function reportError($errorCode, $errorMessage) + { + $kparams = array(); + $this->client->addParam($kparams, "errorCode", $errorCode); + $this->client->addParam($kparams, "errorMessage", $errorMessage); + $this->client->queueServiceActionCall("stats", "reportError", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "null"); + } + + /** + * + * + * @param KalturaCEError $kalturaCEError + * @return KalturaCEError + */ + function reportKceError(KalturaCEError $kalturaCEError) + { + $kparams = array(); + $this->client->addParam($kparams, "kalturaCEError", $kalturaCEError->toParams()); + $this->client->queueServiceActionCall("stats", "reportKceError", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaCEError"); + return $resultObject; + } +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaStorageProfileService extends KalturaServiceBase +{ + function __construct(KalturaClient $client = null) + { + parent::__construct($client); + } + + /** + * Adds a storage profile to the Kaltura DB. + * + * @param KalturaStorageProfile $storageProfile + * @return KalturaStorageProfile + */ + function add(KalturaStorageProfile $storageProfile) + { + $kparams = array(); + $this->client->addParam($kparams, "storageProfile", $storageProfile->toParams()); + $this->client->queueServiceActionCall("storageprofile", "add", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaStorageProfile"); + return $resultObject; + } + + /** + * Get storage profile by id + * + * @param int $storageProfileId + * @return KalturaStorageProfile + */ + function get($storageProfileId) + { + $kparams = array(); + $this->client->addParam($kparams, "storageProfileId", $storageProfileId); + $this->client->queueServiceActionCall("storageprofile", "get", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaStorageProfile"); + return $resultObject; + } + + /** + * + * + * @param KalturaStorageProfileFilter $filter + * @param KalturaFilterPager $pager + * @return KalturaStorageProfileListResponse + */ + function listAction(KalturaStorageProfileFilter $filter = null, KalturaFilterPager $pager = null) + { + $kparams = array(); + if ($filter !== null) + $this->client->addParam($kparams, "filter", $filter->toParams()); + if ($pager !== null) + $this->client->addParam($kparams, "pager", $pager->toParams()); + $this->client->queueServiceActionCall("storageprofile", "list", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaStorageProfileListResponse"); + return $resultObject; + } + + /** + * Update storage profile by id + * + * @param int $storageProfileId + * @param KalturaStorageProfile $storageProfile Id + * @return KalturaStorageProfile + */ + function update($storageProfileId, KalturaStorageProfile $storageProfile) + { + $kparams = array(); + $this->client->addParam($kparams, "storageProfileId", $storageProfileId); + $this->client->addParam($kparams, "storageProfile", $storageProfile->toParams()); + $this->client->queueServiceActionCall("storageprofile", "update", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaStorageProfile"); + return $resultObject; + } + + /** + * + * + * @param int $storageId + * @param int $status + */ + function updateStatus($storageId, $status) + { + $kparams = array(); + $this->client->addParam($kparams, "storageId", $storageId); + $this->client->addParam($kparams, "status", $status); + $this->client->queueServiceActionCall("storageprofile", "updateStatus", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "null"); + } +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaSyndicationFeedService extends KalturaServiceBase +{ + function __construct(KalturaClient $client = null) + { + parent::__construct($client); + } + + /** + * Add new Syndication Feed + * + * @param KalturaBaseSyndicationFeed $syndicationFeed + * @return KalturaBaseSyndicationFeed + */ + function add(KalturaBaseSyndicationFeed $syndicationFeed) + { + $kparams = array(); + $this->client->addParam($kparams, "syndicationFeed", $syndicationFeed->toParams()); + $this->client->queueServiceActionCall("syndicationfeed", "add", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaBaseSyndicationFeed"); + return $resultObject; + } + + /** + * Delete Syndication Feed by ID + * + * @param string $id + */ + function delete($id) + { + $kparams = array(); + $this->client->addParam($kparams, "id", $id); + $this->client->queueServiceActionCall("syndicationfeed", "delete", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "null"); + } + + /** + * Get Syndication Feed by ID + * + * @param string $id + * @return KalturaBaseSyndicationFeed + */ + function get($id) + { + $kparams = array(); + $this->client->addParam($kparams, "id", $id); + $this->client->queueServiceActionCall("syndicationfeed", "get", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaBaseSyndicationFeed"); + return $resultObject; + } + + /** + * Get entry count for a syndication feed + * + * @param string $feedId + * @return KalturaSyndicationFeedEntryCount + */ + function getEntryCount($feedId) + { + $kparams = array(); + $this->client->addParam($kparams, "feedId", $feedId); + $this->client->queueServiceActionCall("syndicationfeed", "getEntryCount", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaSyndicationFeedEntryCount"); + return $resultObject; + } + + /** + * List Syndication Feeds by filter with paging support + * + * @param KalturaBaseSyndicationFeedFilter $filter + * @param KalturaFilterPager $pager + * @return KalturaBaseSyndicationFeedListResponse + */ + function listAction(KalturaBaseSyndicationFeedFilter $filter = null, KalturaFilterPager $pager = null) + { + $kparams = array(); + if ($filter !== null) + $this->client->addParam($kparams, "filter", $filter->toParams()); + if ($pager !== null) + $this->client->addParam($kparams, "pager", $pager->toParams()); + $this->client->queueServiceActionCall("syndicationfeed", "list", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaBaseSyndicationFeedListResponse"); + return $resultObject; + } + + /** + * Request conversion for all entries that doesnt have the required flavor param + returns a comma-separated ids of conversion jobs + * + * @param string $feedId + * @return string + */ + function requestConversion($feedId) + { + $kparams = array(); + $this->client->addParam($kparams, "feedId", $feedId); + $this->client->queueServiceActionCall("syndicationfeed", "requestConversion", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "string"); + return $resultObject; + } + + /** + * Update Syndication Feed by ID + * + * @param string $id + * @param KalturaBaseSyndicationFeed $syndicationFeed + * @return KalturaBaseSyndicationFeed + */ + function update($id, KalturaBaseSyndicationFeed $syndicationFeed) + { + $kparams = array(); + $this->client->addParam($kparams, "id", $id); + $this->client->addParam($kparams, "syndicationFeed", $syndicationFeed->toParams()); + $this->client->queueServiceActionCall("syndicationfeed", "update", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaBaseSyndicationFeed"); + return $resultObject; + } +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaSystemService extends KalturaServiceBase +{ + function __construct(KalturaClient $client = null) + { + parent::__construct($client); + } + + /** + * + * + * @return int + */ + function getTime() + { + $kparams = array(); + $this->client->queueServiceActionCall("system", "getTime", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "integer"); + return $resultObject; + } + + /** + * + * + * @return string + */ + function getVersion() + { + $kparams = array(); + $this->client->queueServiceActionCall("system", "getVersion", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "string"); + return $resultObject; + } + + /** + * + * + * @return bool + */ + function ping() + { + $kparams = array(); + $this->client->queueServiceActionCall("system", "ping", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $resultObject = (bool) $resultObject; + return $resultObject; + } + + /** + * + * + * @return bool + */ + function pingDatabase() + { + $kparams = array(); + $this->client->queueServiceActionCall("system", "pingDatabase", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $resultObject = (bool) $resultObject; + return $resultObject; + } +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaThumbAssetService extends KalturaServiceBase +{ + function __construct(KalturaClient $client = null) + { + parent::__construct($client); + } + + /** + * Add thumbnail asset + * + * @param string $entryId + * @param KalturaThumbAsset $thumbAsset + * @return KalturaThumbAsset + */ + function add($entryId, KalturaThumbAsset $thumbAsset) + { + $kparams = array(); + $this->client->addParam($kparams, "entryId", $entryId); + $this->client->addParam($kparams, "thumbAsset", $thumbAsset->toParams()); + $this->client->queueServiceActionCall("thumbasset", "add", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaThumbAsset"); + return $resultObject; + } + + /** + * + * + * @param string $entryId + * @param file $fileData + * @return KalturaThumbAsset + */ + function addFromImage($entryId, $fileData) + { + $kparams = array(); + $this->client->addParam($kparams, "entryId", $entryId); + $kfiles = array(); + $this->client->addParam($kfiles, "fileData", $fileData); + $this->client->queueServiceActionCall("thumbasset", "addFromImage", $kparams, $kfiles); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaThumbAsset"); + return $resultObject; + } + + /** + * + * + * @param string $entryId + * @param string $url + * @return KalturaThumbAsset + */ + function addFromUrl($entryId, $url) + { + $kparams = array(); + $this->client->addParam($kparams, "entryId", $entryId); + $this->client->addParam($kparams, "url", $url); + $this->client->queueServiceActionCall("thumbasset", "addFromUrl", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaThumbAsset"); + return $resultObject; + } + + /** + * + * + * @param string $thumbAssetId + */ + function delete($thumbAssetId) + { + $kparams = array(); + $this->client->addParam($kparams, "thumbAssetId", $thumbAssetId); + $this->client->queueServiceActionCall("thumbasset", "delete", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "null"); + } + + /** + * Manually export an asset + * + * @param string $assetId + * @param int $storageProfileId + * @return KalturaFlavorAsset + */ + function export($assetId, $storageProfileId) + { + $kparams = array(); + $this->client->addParam($kparams, "assetId", $assetId); + $this->client->addParam($kparams, "storageProfileId", $storageProfileId); + $this->client->queueServiceActionCall("thumbasset", "export", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaFlavorAsset"); + return $resultObject; + } + + /** + * + * + * @param string $entryId + * @param KalturaThumbParams $thumbParams + * @param string $sourceAssetId Id of the source asset (flavor or thumbnail) to be used as source for the thumbnail generation + * @return KalturaThumbAsset + */ + function generate($entryId, KalturaThumbParams $thumbParams, $sourceAssetId = null) + { + $kparams = array(); + $this->client->addParam($kparams, "entryId", $entryId); + $this->client->addParam($kparams, "thumbParams", $thumbParams->toParams()); + $this->client->addParam($kparams, "sourceAssetId", $sourceAssetId); + $this->client->queueServiceActionCall("thumbasset", "generate", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaThumbAsset"); + return $resultObject; + } + + /** + * + * + * @param string $entryId + * @param int $destThumbParamsId Indicate the id of the ThumbParams to be generate this thumbnail by + * @return KalturaThumbAsset + */ + function generateByEntryId($entryId, $destThumbParamsId) + { + $kparams = array(); + $this->client->addParam($kparams, "entryId", $entryId); + $this->client->addParam($kparams, "destThumbParamsId", $destThumbParamsId); + $this->client->queueServiceActionCall("thumbasset", "generateByEntryId", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaThumbAsset"); + return $resultObject; + } + + /** + * + * + * @param string $thumbAssetId + * @return KalturaThumbAsset + */ + function get($thumbAssetId) + { + $kparams = array(); + $this->client->addParam($kparams, "thumbAssetId", $thumbAssetId); + $this->client->queueServiceActionCall("thumbasset", "get", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaThumbAsset"); + return $resultObject; + } + + /** + * + * + * @param string $entryId + * @return array + */ + function getByEntryId($entryId) + { + $kparams = array(); + $this->client->addParam($kparams, "entryId", $entryId); + $this->client->queueServiceActionCall("thumbasset", "getByEntryId", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "array"); + return $resultObject; + } + + /** + * Get remote storage existing paths for the asset + * + * @param string $id + * @return KalturaRemotePathListResponse + */ + function getRemotePaths($id) + { + $kparams = array(); + $this->client->addParam($kparams, "id", $id); + $this->client->queueServiceActionCall("thumbasset", "getRemotePaths", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaRemotePathListResponse"); + return $resultObject; + } + + /** + * Get download URL for the asset + * + * @param string $id + * @param int $storageId + * @param KalturaThumbParams $thumbParams + * @return string + */ + function getUrl($id, $storageId = null, KalturaThumbParams $thumbParams = null) + { + $kparams = array(); + $this->client->addParam($kparams, "id", $id); + $this->client->addParam($kparams, "storageId", $storageId); + if ($thumbParams !== null) + $this->client->addParam($kparams, "thumbParams", $thumbParams->toParams()); + $this->client->queueServiceActionCall("thumbasset", "getUrl", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "string"); + return $resultObject; + } + + /** + * List Thumbnail Assets by filter and pager + * + * @param KalturaAssetFilter $filter + * @param KalturaFilterPager $pager + * @return KalturaThumbAssetListResponse + */ + function listAction(KalturaAssetFilter $filter = null, KalturaFilterPager $pager = null) + { + $kparams = array(); + if ($filter !== null) + $this->client->addParam($kparams, "filter", $filter->toParams()); + if ($pager !== null) + $this->client->addParam($kparams, "pager", $pager->toParams()); + $this->client->queueServiceActionCall("thumbasset", "list", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaThumbAssetListResponse"); + return $resultObject; + } + + /** + * + * + * @param string $thumbAssetId + * @return KalturaThumbAsset + */ + function regenerate($thumbAssetId) + { + $kparams = array(); + $this->client->addParam($kparams, "thumbAssetId", $thumbAssetId); + $this->client->queueServiceActionCall("thumbasset", "regenerate", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaThumbAsset"); + return $resultObject; + } + + /** + * Serves thumbnail by its id + * + * @param string $thumbAssetId + * @param int $version + * @param KalturaThumbParams $thumbParams + * @param KalturaThumbnailServeOptions $options + * @return file + */ + function serve($thumbAssetId, $version = null, KalturaThumbParams $thumbParams = null, KalturaThumbnailServeOptions $options = null) + { + if ($this->client->isMultiRequest()) + throw new KalturaClientException("Action is not supported as part of multi-request.", KalturaClientException::ERROR_ACTION_IN_MULTIREQUEST); + + $kparams = array(); + $this->client->addParam($kparams, "thumbAssetId", $thumbAssetId); + $this->client->addParam($kparams, "version", $version); + if ($thumbParams !== null) + $this->client->addParam($kparams, "thumbParams", $thumbParams->toParams()); + if ($options !== null) + $this->client->addParam($kparams, "options", $options->toParams()); + $this->client->queueServiceActionCall("thumbasset", "serve", $kparams); + if(!$this->client->getDestinationPath() && !$this->client->getReturnServedResult()) + return $this->client->getServeUrl(); + return $this->client->doQueue(); + } + + /** + * Serves thumbnail by entry id and thumnail params id + * + * @param string $entryId + * @param int $thumbParamId If not set, default thumbnail will be used. + * @return file + */ + function serveByEntryId($entryId, $thumbParamId = null) + { + if ($this->client->isMultiRequest()) + throw new KalturaClientException("Action is not supported as part of multi-request.", KalturaClientException::ERROR_ACTION_IN_MULTIREQUEST); + + $kparams = array(); + $this->client->addParam($kparams, "entryId", $entryId); + $this->client->addParam($kparams, "thumbParamId", $thumbParamId); + $this->client->queueServiceActionCall("thumbasset", "serveByEntryId", $kparams); + if(!$this->client->getDestinationPath() && !$this->client->getReturnServedResult()) + return $this->client->getServeUrl(); + return $this->client->doQueue(); + } + + /** + * Tags the thumbnail as DEFAULT_THUMB and removes that tag from all other thumbnail assets of the entry. + Create a new file sync link on the entry thumbnail that points to the thumbnail asset file sync. + * + * @param string $thumbAssetId + */ + function setAsDefault($thumbAssetId) + { + $kparams = array(); + $this->client->addParam($kparams, "thumbAssetId", $thumbAssetId); + $this->client->queueServiceActionCall("thumbasset", "setAsDefault", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "null"); + } + + /** + * Update content of thumbnail asset + * + * @param string $id + * @param KalturaContentResource $contentResource + * @return KalturaThumbAsset + */ + function setContent($id, KalturaContentResource $contentResource) + { + $kparams = array(); + $this->client->addParam($kparams, "id", $id); + $this->client->addParam($kparams, "contentResource", $contentResource->toParams()); + $this->client->queueServiceActionCall("thumbasset", "setContent", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaThumbAsset"); + return $resultObject; + } + + /** + * Update thumbnail asset + * + * @param string $id + * @param KalturaThumbAsset $thumbAsset + * @return KalturaThumbAsset + */ + function update($id, KalturaThumbAsset $thumbAsset) + { + $kparams = array(); + $this->client->addParam($kparams, "id", $id); + $this->client->addParam($kparams, "thumbAsset", $thumbAsset->toParams()); + $this->client->queueServiceActionCall("thumbasset", "update", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaThumbAsset"); + return $resultObject; + } +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaThumbParamsOutputService extends KalturaServiceBase +{ + function __construct(KalturaClient $client = null) + { + parent::__construct($client); + } + + /** + * Get thumb params output object by ID + * + * @param int $id + * @return KalturaThumbParamsOutput + */ + function get($id) + { + $kparams = array(); + $this->client->addParam($kparams, "id", $id); + $this->client->queueServiceActionCall("thumbparamsoutput", "get", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaThumbParamsOutput"); + return $resultObject; + } + + /** + * List thumb params output objects by filter and pager + * + * @param KalturaThumbParamsOutputFilter $filter + * @param KalturaFilterPager $pager + * @return KalturaThumbParamsOutputListResponse + */ + function listAction(KalturaThumbParamsOutputFilter $filter = null, KalturaFilterPager $pager = null) + { + $kparams = array(); + if ($filter !== null) + $this->client->addParam($kparams, "filter", $filter->toParams()); + if ($pager !== null) + $this->client->addParam($kparams, "pager", $pager->toParams()); + $this->client->queueServiceActionCall("thumbparamsoutput", "list", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaThumbParamsOutputListResponse"); + return $resultObject; + } +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaThumbParamsService extends KalturaServiceBase +{ + function __construct(KalturaClient $client = null) + { + parent::__construct($client); + } + + /** + * Add new Thumb Params + * + * @param KalturaThumbParams $thumbParams + * @return KalturaThumbParams + */ + function add(KalturaThumbParams $thumbParams) + { + $kparams = array(); + $this->client->addParam($kparams, "thumbParams", $thumbParams->toParams()); + $this->client->queueServiceActionCall("thumbparams", "add", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaThumbParams"); + return $resultObject; + } + + /** + * Delete Thumb Params by ID + * + * @param int $id + */ + function delete($id) + { + $kparams = array(); + $this->client->addParam($kparams, "id", $id); + $this->client->queueServiceActionCall("thumbparams", "delete", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "null"); + } + + /** + * Get Thumb Params by ID + * + * @param int $id + * @return KalturaThumbParams + */ + function get($id) + { + $kparams = array(); + $this->client->addParam($kparams, "id", $id); + $this->client->queueServiceActionCall("thumbparams", "get", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaThumbParams"); + return $resultObject; + } + + /** + * Get Thumb Params by Conversion Profile ID + * + * @param int $conversionProfileId + * @return array + */ + function getByConversionProfileId($conversionProfileId) + { + $kparams = array(); + $this->client->addParam($kparams, "conversionProfileId", $conversionProfileId); + $this->client->queueServiceActionCall("thumbparams", "getByConversionProfileId", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "array"); + return $resultObject; + } + + /** + * List Thumb Params by filter with paging support (By default - all system default params will be listed too) + * + * @param KalturaThumbParamsFilter $filter + * @param KalturaFilterPager $pager + * @return KalturaThumbParamsListResponse + */ + function listAction(KalturaThumbParamsFilter $filter = null, KalturaFilterPager $pager = null) + { + $kparams = array(); + if ($filter !== null) + $this->client->addParam($kparams, "filter", $filter->toParams()); + if ($pager !== null) + $this->client->addParam($kparams, "pager", $pager->toParams()); + $this->client->queueServiceActionCall("thumbparams", "list", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaThumbParamsListResponse"); + return $resultObject; + } + + /** + * Update Thumb Params by ID + * + * @param int $id + * @param KalturaThumbParams $thumbParams + * @return KalturaThumbParams + */ + function update($id, KalturaThumbParams $thumbParams) + { + $kparams = array(); + $this->client->addParam($kparams, "id", $id); + $this->client->addParam($kparams, "thumbParams", $thumbParams->toParams()); + $this->client->queueServiceActionCall("thumbparams", "update", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaThumbParams"); + return $resultObject; + } +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaUiConfService extends KalturaServiceBase +{ + function __construct(KalturaClient $client = null) + { + parent::__construct($client); + } + + /** + * UIConf Add action allows you to add a UIConf to Kaltura DB + * + * @param KalturaUiConf $uiConf Mandatory input parameter of type KalturaUiConf + * @return KalturaUiConf + */ + function add(KalturaUiConf $uiConf) + { + $kparams = array(); + $this->client->addParam($kparams, "uiConf", $uiConf->toParams()); + $this->client->queueServiceActionCall("uiconf", "add", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaUiConf"); + return $resultObject; + } + + /** + * Clone an existing UIConf + * + * @param int $id + * @return KalturaUiConf + */ + function cloneAction($id) + { + $kparams = array(); + $this->client->addParam($kparams, "id", $id); + $this->client->queueServiceActionCall("uiconf", "clone", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaUiConf"); + return $resultObject; + } + + /** + * Delete an existing UIConf + * + * @param int $id + */ + function delete($id) + { + $kparams = array(); + $this->client->addParam($kparams, "id", $id); + $this->client->queueServiceActionCall("uiconf", "delete", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "null"); + } + + /** + * Retrieve a UIConf by id + * + * @param int $id + * @return KalturaUiConf + */ + function get($id) + { + $kparams = array(); + $this->client->addParam($kparams, "id", $id); + $this->client->queueServiceActionCall("uiconf", "get", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaUiConf"); + return $resultObject; + } + + /** + * Retrieve a list of all available versions by object type + * + * @return array + */ + function getAvailableTypes() + { + $kparams = array(); + $this->client->queueServiceActionCall("uiconf", "getAvailableTypes", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "array"); + return $resultObject; + } + + /** + * Retrieve a list of available UIConfs + * + * @param KalturaUiConfFilter $filter + * @param KalturaFilterPager $pager + * @return KalturaUiConfListResponse + */ + function listAction(KalturaUiConfFilter $filter = null, KalturaFilterPager $pager = null) + { + $kparams = array(); + if ($filter !== null) + $this->client->addParam($kparams, "filter", $filter->toParams()); + if ($pager !== null) + $this->client->addParam($kparams, "pager", $pager->toParams()); + $this->client->queueServiceActionCall("uiconf", "list", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaUiConfListResponse"); + return $resultObject; + } + + /** + * Retrieve a list of available template UIConfs + * + * @param KalturaUiConfFilter $filter + * @param KalturaFilterPager $pager + * @return KalturaUiConfListResponse + */ + function listTemplates(KalturaUiConfFilter $filter = null, KalturaFilterPager $pager = null) + { + $kparams = array(); + if ($filter !== null) + $this->client->addParam($kparams, "filter", $filter->toParams()); + if ($pager !== null) + $this->client->addParam($kparams, "pager", $pager->toParams()); + $this->client->queueServiceActionCall("uiconf", "listTemplates", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaUiConfListResponse"); + return $resultObject; + } + + /** + * Update an existing UIConf + * + * @param int $id + * @param KalturaUiConf $uiConf + * @return KalturaUiConf + */ + function update($id, KalturaUiConf $uiConf) + { + $kparams = array(); + $this->client->addParam($kparams, "id", $id); + $this->client->addParam($kparams, "uiConf", $uiConf->toParams()); + $this->client->queueServiceActionCall("uiconf", "update", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaUiConf"); + return $resultObject; + } +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaUploadService extends KalturaServiceBase +{ + function __construct(KalturaClient $client = null) + { + parent::__construct($client); + } + + /** + * + * + * @param string $fileName + * @return KalturaUploadResponse + */ + function getUploadedFileTokenByFileName($fileName) + { + $kparams = array(); + $this->client->addParam($kparams, "fileName", $fileName); + $this->client->queueServiceActionCall("upload", "getUploadedFileTokenByFileName", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaUploadResponse"); + return $resultObject; + } + + /** + * + * + * @param file $fileData The file data + * @return string + */ + function upload($fileData) + { + $kparams = array(); + $kfiles = array(); + $this->client->addParam($kfiles, "fileData", $fileData); + $this->client->queueServiceActionCall("upload", "upload", $kparams, $kfiles); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "string"); + return $resultObject; + } +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaUploadTokenService extends KalturaServiceBase +{ + function __construct(KalturaClient $client = null) + { + parent::__construct($client); + } + + /** + * Adds new upload token to upload a file + * + * @param KalturaUploadToken $uploadToken + * @return KalturaUploadToken + */ + function add(KalturaUploadToken $uploadToken = null) + { + $kparams = array(); + if ($uploadToken !== null) + $this->client->addParam($kparams, "uploadToken", $uploadToken->toParams()); + $this->client->queueServiceActionCall("uploadtoken", "add", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaUploadToken"); + return $resultObject; + } + + /** + * Deletes the upload token by upload token id + * + * @param string $uploadTokenId + */ + function delete($uploadTokenId) + { + $kparams = array(); + $this->client->addParam($kparams, "uploadTokenId", $uploadTokenId); + $this->client->queueServiceActionCall("uploadtoken", "delete", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "null"); + } + + /** + * Get upload token by id + * + * @param string $uploadTokenId + * @return KalturaUploadToken + */ + function get($uploadTokenId) + { + $kparams = array(); + $this->client->addParam($kparams, "uploadTokenId", $uploadTokenId); + $this->client->queueServiceActionCall("uploadtoken", "get", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaUploadToken"); + return $resultObject; + } + + /** + * List upload token by filter with pager support. + When using a user session the service will be restricted to users objects only. + * + * @param KalturaUploadTokenFilter $filter + * @param KalturaFilterPager $pager + * @return KalturaUploadTokenListResponse + */ + function listAction(KalturaUploadTokenFilter $filter = null, KalturaFilterPager $pager = null) + { + $kparams = array(); + if ($filter !== null) + $this->client->addParam($kparams, "filter", $filter->toParams()); + if ($pager !== null) + $this->client->addParam($kparams, "pager", $pager->toParams()); + $this->client->queueServiceActionCall("uploadtoken", "list", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaUploadTokenListResponse"); + return $resultObject; + } + + /** + * Upload a file using the upload token id, returns an error on failure (an exception will be thrown when using one of the Kaltura clients) + Chunks can be uploaded in parallel and they will be appended according to their resumeAt position. + A parallel upload session should have three stages: + 1. A single upload with resume=false and finalChunk=false + 2. Parallel upload requests each with resume=true,finalChunk=false and the expected resumetAt position. + If a chunk fails to upload it can be re-uploaded. + 3. After all of the chunks have been uploaded a final chunk (can be of zero size) should be uploaded + with resume=true, finalChunk=true and the expected resumeAt position. In case an UPLOAD_TOKEN_CANNOT_MATCH_EXPECTED_SIZE exception + has been returned (indicating not all of the chunks were appended yet) the final request can be retried. + * + * @param string $uploadTokenId + * @param file $fileData + * @param bool $resume + * @param bool $finalChunk + * @param float $resumeAt + * @return KalturaUploadToken + */ + function upload($uploadTokenId, $fileData, $resume = false, $finalChunk = true, $resumeAt = -1) + { + $kparams = array(); + $this->client->addParam($kparams, "uploadTokenId", $uploadTokenId); + $kfiles = array(); + $this->client->addParam($kfiles, "fileData", $fileData); + $this->client->addParam($kparams, "resume", $resume); + $this->client->addParam($kparams, "finalChunk", $finalChunk); + $this->client->addParam($kparams, "resumeAt", $resumeAt); + $this->client->queueServiceActionCall("uploadtoken", "upload", $kparams, $kfiles); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaUploadToken"); + return $resultObject; + } +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaUserEntryService extends KalturaServiceBase +{ + function __construct(KalturaClient $client = null) + { + parent::__construct($client); + } + + /** + * Adds a user_entry to the Kaltura DB. + * + * @param KalturaUserEntry $userEntry + * @return KalturaUserEntry + */ + function add(KalturaUserEntry $userEntry) + { + $kparams = array(); + $this->client->addParam($kparams, "userEntry", $userEntry->toParams()); + $this->client->queueServiceActionCall("userentry", "add", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaUserEntry"); + return $resultObject; + } + + /** + * + * + * @param KalturaUserEntryFilter $filter + * @return int + */ + function bulkDelete(KalturaUserEntryFilter $filter) + { + $kparams = array(); + $this->client->addParam($kparams, "filter", $filter->toParams()); + $this->client->queueServiceActionCall("userentry", "bulkDelete", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "integer"); + return $resultObject; + } + + /** + * + * + * @param int $id + * @return KalturaUserEntry + */ + function delete($id) + { + $kparams = array(); + $this->client->addParam($kparams, "id", $id); + $this->client->queueServiceActionCall("userentry", "delete", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaUserEntry"); + return $resultObject; + } + + /** + * + * + * @param string $id + * @return KalturaUserEntry + */ + function get($id) + { + $kparams = array(); + $this->client->addParam($kparams, "id", $id); + $this->client->queueServiceActionCall("userentry", "get", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaUserEntry"); + return $resultObject; + } + + /** + * + * + * @param KalturaUserEntryFilter $filter + * @param KalturaFilterPager $pager + * @return KalturaUserEntryListResponse + */ + function listAction(KalturaUserEntryFilter $filter = null, KalturaFilterPager $pager = null) + { + $kparams = array(); + if ($filter !== null) + $this->client->addParam($kparams, "filter", $filter->toParams()); + if ($pager !== null) + $this->client->addParam($kparams, "pager", $pager->toParams()); + $this->client->queueServiceActionCall("userentry", "list", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaUserEntryListResponse"); + return $resultObject; + } + + /** + * Submits the quiz so that it's status will be submitted and calculates the score for the quiz + * + * @param int $id + * @return KalturaQuizUserEntry + */ + function submitQuiz($id) + { + $kparams = array(); + $this->client->addParam($kparams, "id", $id); + $this->client->queueServiceActionCall("userentry", "submitQuiz", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaQuizUserEntry"); + return $resultObject; + } + + /** + * + * + * @param int $id + * @param KalturaUserEntry $userEntry + */ + function update($id, KalturaUserEntry $userEntry) + { + $kparams = array(); + $this->client->addParam($kparams, "id", $id); + $this->client->addParam($kparams, "userEntry", $userEntry->toParams()); + $this->client->queueServiceActionCall("userentry", "update", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "null"); + } +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaUserRoleService extends KalturaServiceBase +{ + function __construct(KalturaClient $client = null) + { + parent::__construct($client); + } + + /** + * Adds a new user role object to the account. + * + * @param KalturaUserRole $userRole A new role + * @return KalturaUserRole + */ + function add(KalturaUserRole $userRole) + { + $kparams = array(); + $this->client->addParam($kparams, "userRole", $userRole->toParams()); + $this->client->queueServiceActionCall("userrole", "add", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaUserRole"); + return $resultObject; + } + + /** + * Creates a new user role object that is a duplicate of an existing role. + * + * @param int $userRoleId The user role's unique identifier + * @return KalturaUserRole + */ + function cloneAction($userRoleId) + { + $kparams = array(); + $this->client->addParam($kparams, "userRoleId", $userRoleId); + $this->client->queueServiceActionCall("userrole", "clone", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaUserRole"); + return $resultObject; + } + + /** + * Deletes an existing user role object. + * + * @param int $userRoleId The user role's unique identifier + * @return KalturaUserRole + */ + function delete($userRoleId) + { + $kparams = array(); + $this->client->addParam($kparams, "userRoleId", $userRoleId); + $this->client->queueServiceActionCall("userrole", "delete", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaUserRole"); + return $resultObject; + } + + /** + * Retrieves a user role object using its ID. + * + * @param int $userRoleId The user role's unique identifier + * @return KalturaUserRole + */ + function get($userRoleId) + { + $kparams = array(); + $this->client->addParam($kparams, "userRoleId", $userRoleId); + $this->client->queueServiceActionCall("userrole", "get", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaUserRole"); + return $resultObject; + } + + /** + * Lists user role objects that are associated with an account. + Blocked user roles are listed unless you use a filter to exclude them. + Deleted user roles are not listed unless you use a filter to include them. + * + * @param KalturaUserRoleFilter $filter A filter used to exclude specific types of user roles + * @param KalturaFilterPager $pager A limit for the number of records to display on a page + * @return KalturaUserRoleListResponse + */ + function listAction(KalturaUserRoleFilter $filter = null, KalturaFilterPager $pager = null) + { + $kparams = array(); + if ($filter !== null) + $this->client->addParam($kparams, "filter", $filter->toParams()); + if ($pager !== null) + $this->client->addParam($kparams, "pager", $pager->toParams()); + $this->client->queueServiceActionCall("userrole", "list", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaUserRoleListResponse"); + return $resultObject; + } + + /** + * Updates an existing user role object. + * + * @param int $userRoleId The user role's unique identifier + * @param KalturaUserRole $userRole Id The user role's unique identifier + * @return KalturaUserRole + */ + function update($userRoleId, KalturaUserRole $userRole) + { + $kparams = array(); + $this->client->addParam($kparams, "userRoleId", $userRoleId); + $this->client->addParam($kparams, "userRole", $userRole->toParams()); + $this->client->queueServiceActionCall("userrole", "update", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaUserRole"); + return $resultObject; + } +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaUserService extends KalturaServiceBase +{ + function __construct(KalturaClient $client = null) + { + parent::__construct($client); + } + + /** + * Adds a new user to an existing account in the Kaltura database. + Input param $id is the unique identifier in the partner's system. + * + * @param KalturaUser $user The new user + * @return KalturaUser + */ + function add(KalturaUser $user) + { + $kparams = array(); + $this->client->addParam($kparams, "user", $user->toParams()); + $this->client->queueServiceActionCall("user", "add", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaUser"); + return $resultObject; + } + + /** + * + * + * @param file $fileData + * @param KalturaBulkUploadJobData $bulkUploadData + * @param KalturaBulkUploadUserData $bulkUploadUserData + * @return KalturaBulkUpload + */ + function addFromBulkUpload($fileData, KalturaBulkUploadJobData $bulkUploadData = null, KalturaBulkUploadUserData $bulkUploadUserData = null) + { + $kparams = array(); + $kfiles = array(); + $this->client->addParam($kfiles, "fileData", $fileData); + if ($bulkUploadData !== null) + $this->client->addParam($kparams, "bulkUploadData", $bulkUploadData->toParams()); + if ($bulkUploadUserData !== null) + $this->client->addParam($kparams, "bulkUploadUserData", $bulkUploadUserData->toParams()); + $this->client->queueServiceActionCall("user", "addFromBulkUpload", $kparams, $kfiles); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaBulkUpload"); + return $resultObject; + } + + /** + * Action which checks whther user login + * + * @param KalturaUserLoginDataFilter $filter + * @return bool + */ + function checkLoginDataExists(KalturaUserLoginDataFilter $filter) + { + $kparams = array(); + $this->client->addParam($kparams, "filter", $filter->toParams()); + $this->client->queueServiceActionCall("user", "checkLoginDataExists", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $resultObject = (bool) $resultObject; + return $resultObject; + } + + /** + * Deletes a user from a partner account. + * + * @param string $userId The user's unique identifier in the partner's system + * @return KalturaUser + */ + function delete($userId) + { + $kparams = array(); + $this->client->addParam($kparams, "userId", $userId); + $this->client->queueServiceActionCall("user", "delete", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaUser"); + return $resultObject; + } + + /** + * Disables a user's ability to log into a partner account using an email address and a password. + You may use either a userId or a loginId parameter for this action. + * + * @param string $userId The user's unique identifier in the partner's system + * @param string $loginId The user's email address that identifies the user for login + * @return KalturaUser + */ + function disableLogin($userId = null, $loginId = null) + { + $kparams = array(); + $this->client->addParam($kparams, "userId", $userId); + $this->client->addParam($kparams, "loginId", $loginId); + $this->client->queueServiceActionCall("user", "disableLogin", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaUser"); + return $resultObject; + } + + /** + * Enables a user to log into a partner account using an email address and a password + * + * @param string $userId The user's unique identifier in the partner's system + * @param string $loginId The user's email address that identifies the user for login + * @param string $password The user's password + * @return KalturaUser + */ + function enableLogin($userId, $loginId, $password = null) + { + $kparams = array(); + $this->client->addParam($kparams, "userId", $userId); + $this->client->addParam($kparams, "loginId", $loginId); + $this->client->addParam($kparams, "password", $password); + $this->client->queueServiceActionCall("user", "enableLogin", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaUser"); + return $resultObject; + } + + /** + * Add batch job that sends an email with a link to download an updated CSV that contains list of users + * + * @param KalturaUserFilter $filter A filter used to exclude specific types of users + * @param int $metadataProfileId + * @param array $additionalFields + * @return string + */ + function exportToCsv(KalturaUserFilter $filter = null, $metadataProfileId = null, array $additionalFields = null) + { + $kparams = array(); + if ($filter !== null) + $this->client->addParam($kparams, "filter", $filter->toParams()); + $this->client->addParam($kparams, "metadataProfileId", $metadataProfileId); + if ($additionalFields !== null) + foreach($additionalFields as $index => $obj) + { + $this->client->addParam($kparams, "additionalFields:$index", $obj->toParams()); + } + $this->client->queueServiceActionCall("user", "exportToCsv", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "string"); + return $resultObject; + } + + /** + * Retrieves a user object for a specified user ID. + * + * @param string $userId The user's unique identifier in the partner's system + * @return KalturaUser + */ + function get($userId = null) + { + $kparams = array(); + $this->client->addParam($kparams, "userId", $userId); + $this->client->queueServiceActionCall("user", "get", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaUser"); + return $resultObject; + } + + /** + * Retrieves a user object for a user's login ID and partner ID. + A login ID is the email address used by a user to log into the system. + * + * @param string $loginId The user's email address that identifies the user for login + * @return KalturaUser + */ + function getByLoginId($loginId) + { + $kparams = array(); + $this->client->addParam($kparams, "loginId", $loginId); + $this->client->queueServiceActionCall("user", "getByLoginId", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaUser"); + return $resultObject; + } + + /** + * Index an entry by id. + * + * @param string $id + * @param bool $shouldUpdate + * @return string + */ + function index($id, $shouldUpdate = true) + { + $kparams = array(); + $this->client->addParam($kparams, "id", $id); + $this->client->addParam($kparams, "shouldUpdate", $shouldUpdate); + $this->client->queueServiceActionCall("user", "index", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "string"); + return $resultObject; + } + + /** + * Lists user objects that are associated with an account. + Blocked users are listed unless you use a filter to exclude them. + Deleted users are not listed unless you use a filter to include them. + * + * @param KalturaUserFilter $filter A filter used to exclude specific types of users + * @param KalturaFilterPager $pager A limit for the number of records to display on a page + * @return KalturaUserListResponse + */ + function listAction(KalturaUserFilter $filter = null, KalturaFilterPager $pager = null) + { + $kparams = array(); + if ($filter !== null) + $this->client->addParam($kparams, "filter", $filter->toParams()); + if ($pager !== null) + $this->client->addParam($kparams, "pager", $pager->toParams()); + $this->client->queueServiceActionCall("user", "list", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaUserListResponse"); + return $resultObject; + } + + /** + * Logs a user into a partner account with a partner ID, a partner user ID (puser), and a user password. + * + * @param int $partnerId The identifier of the partner account + * @param string $userId The user's unique identifier in the partner's system + * @param string $password The user's password + * @param int $expiry The requested time (in seconds) before the generated KS expires (By default, a KS expires after 24 hours). + * @param string $privileges Special privileges + * @return string + */ + function login($partnerId, $userId, $password, $expiry = 86400, $privileges = "*") + { + $kparams = array(); + $this->client->addParam($kparams, "partnerId", $partnerId); + $this->client->addParam($kparams, "userId", $userId); + $this->client->addParam($kparams, "password", $password); + $this->client->addParam($kparams, "expiry", $expiry); + $this->client->addParam($kparams, "privileges", $privileges); + $this->client->queueServiceActionCall("user", "login", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "string"); + return $resultObject; + } + + /** + * Loges a user to the destination account as long the ks user id exists in the desc acount and the loginData id match for both accounts + * + * @param int $requestedPartnerId + * @return KalturaSessionResponse + */ + function loginByKs($requestedPartnerId) + { + $kparams = array(); + $this->client->addParam($kparams, "requestedPartnerId", $requestedPartnerId); + $this->client->queueServiceActionCall("user", "loginByKs", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaSessionResponse"); + return $resultObject; + } + + /** + * Logs a user into a partner account with a user login ID and a user password. + * + * @param string $loginId The user's email address that identifies the user for login + * @param string $password The user's password + * @param int $partnerId The identifier of the partner account + * @param int $expiry The requested time (in seconds) before the generated KS expires (By default, a KS expires after 24 hours). + * @param string $privileges Special privileges + * @param string $otp The user's one-time password + * @return string + */ + function loginByLoginId($loginId, $password, $partnerId = null, $expiry = 86400, $privileges = "*", $otp = null) + { + $kparams = array(); + $this->client->addParam($kparams, "loginId", $loginId); + $this->client->addParam($kparams, "password", $password); + $this->client->addParam($kparams, "partnerId", $partnerId); + $this->client->addParam($kparams, "expiry", $expiry); + $this->client->addParam($kparams, "privileges", $privileges); + $this->client->addParam($kparams, "otp", $otp); + $this->client->queueServiceActionCall("user", "loginByLoginId", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "string"); + return $resultObject; + } + + /** + * Notifies that a user is banned from an account. + * + * @param string $userId The user's unique identifier in the partner's system + */ + function notifyBan($userId) + { + $kparams = array(); + $this->client->addParam($kparams, "userId", $userId); + $this->client->queueServiceActionCall("user", "notifyBan", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "null"); + } + + /** + * Reset user's password and send the user an email to generate a new one. + * + * @param string $email The user's email address (login email) + */ + function resetPassword($email) + { + $kparams = array(); + $this->client->addParam($kparams, "email", $email); + $this->client->queueServiceActionCall("user", "resetPassword", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "null"); + } + + /** + * Will serve a requested csv + * + * @param string $id - the requested file id + * @return string + */ + function serveCsv($id) + { + $kparams = array(); + $this->client->addParam($kparams, "id", $id); + $this->client->queueServiceActionCall("user", "serveCsv", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "string"); + return $resultObject; + } + + /** + * Set initial users password + * + * @param string $hashKey The hash key used to identify the user (retrieved by email) + * @param string $newPassword The new password to set for the user + */ + function setInitialPassword($hashKey, $newPassword) + { + $kparams = array(); + $this->client->addParam($kparams, "hashKey", $hashKey); + $this->client->addParam($kparams, "newPassword", $newPassword); + $this->client->queueServiceActionCall("user", "setInitialPassword", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "null"); + } + + /** + * Updates an existing user object. + You can also use this action to update the userId. + * + * @param string $userId The user's unique identifier in the partner's system + * @param KalturaUser $user Id The user's unique identifier in the partner's system + * @return KalturaUser + */ + function update($userId, KalturaUser $user) + { + $kparams = array(); + $this->client->addParam($kparams, "userId", $userId); + $this->client->addParam($kparams, "user", $user->toParams()); + $this->client->queueServiceActionCall("user", "update", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaUser"); + return $resultObject; + } + + /** + * Updates a user's login data: email, password, name. + * + * @param string $oldLoginId The user's current email address that identified the user for login + * @param string $password The user's current email address that identified the user for login + * @param string $newLoginId Optional, The user's email address that will identify the user for login + * @param string $newPassword Optional, The user's new password + * @param string $newFirstName Optional, The user's new first name + * @param string $newLastName Optional, The user's new last name + */ + function updateLoginData($oldLoginId, $password, $newLoginId = "", $newPassword = "", $newFirstName = null, $newLastName = null) + { + $kparams = array(); + $this->client->addParam($kparams, "oldLoginId", $oldLoginId); + $this->client->addParam($kparams, "password", $password); + $this->client->addParam($kparams, "newLoginId", $newLoginId); + $this->client->addParam($kparams, "newPassword", $newPassword); + $this->client->addParam($kparams, "newFirstName", $newFirstName); + $this->client->addParam($kparams, "newLastName", $newLastName); + $this->client->queueServiceActionCall("user", "updateLoginData", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "null"); + } +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaWidgetService extends KalturaServiceBase +{ + function __construct(KalturaClient $client = null) + { + parent::__construct($client); + } + + /** + * Add new widget, can be attached to entry or kshow + SourceWidget is ignored. + * + * @param KalturaWidget $widget + * @return KalturaWidget + */ + function add(KalturaWidget $widget) + { + $kparams = array(); + $this->client->addParam($kparams, "widget", $widget->toParams()); + $this->client->queueServiceActionCall("widget", "add", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaWidget"); + return $resultObject; + } + + /** + * Add widget based on existing widget. + Must provide valid sourceWidgetId + * + * @param KalturaWidget $widget + * @return KalturaWidget + */ + function cloneAction(KalturaWidget $widget) + { + $kparams = array(); + $this->client->addParam($kparams, "widget", $widget->toParams()); + $this->client->queueServiceActionCall("widget", "clone", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaWidget"); + return $resultObject; + } + + /** + * Get widget by id + * + * @param string $id + * @return KalturaWidget + */ + function get($id) + { + $kparams = array(); + $this->client->addParam($kparams, "id", $id); + $this->client->queueServiceActionCall("widget", "get", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaWidget"); + return $resultObject; + } + + /** + * Retrieve a list of available widget depends on the filter given + * + * @param KalturaWidgetFilter $filter + * @param KalturaFilterPager $pager + * @return KalturaWidgetListResponse + */ + function listAction(KalturaWidgetFilter $filter = null, KalturaFilterPager $pager = null) + { + $kparams = array(); + if ($filter !== null) + $this->client->addParam($kparams, "filter", $filter->toParams()); + if ($pager !== null) + $this->client->addParam($kparams, "pager", $pager->toParams()); + $this->client->queueServiceActionCall("widget", "list", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaWidgetListResponse"); + return $resultObject; + } + + /** + * Update exisiting widget + * + * @param string $id + * @param KalturaWidget $widget + * @return KalturaWidget + */ + function update($id, KalturaWidget $widget) + { + $kparams = array(); + $this->client->addParam($kparams, "id", $id); + $this->client->addParam($kparams, "widget", $widget->toParams()); + $this->client->queueServiceActionCall("widget", "update", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaWidget"); + return $resultObject; + } +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaClient extends KalturaClientBase +{ + /** + * Manage access control profiles + * @var KalturaAccessControlProfileService + */ + public $accessControlProfile = null; + + /** + * Add & Manage Access Controls + * @var KalturaAccessControlService + */ + public $accessControl = null; + + /** + * Manage details for the administrative user + * @var KalturaAdminUserService + */ + public $adminUser = null; + + /** + * Api for getting analytics data + * @var KalturaAnalyticsService + */ + public $analytics = null; + + /** + * Manage application authentication tokens + * @var KalturaAppTokenService + */ + public $appToken = null; + + /** + * Base Entry Service + * @var KalturaBaseEntryService + */ + public $baseEntry = null; + + /** + * Bulk upload service is used to upload & manage bulk uploads using CSV files. + * This service manages only entry bulk uploads. + * @var KalturaBulkUploadService + */ + public $bulkUpload = null; + + /** + * Add & Manage CategoryEntry - assign entry to category + * @var KalturaCategoryEntryService + */ + public $categoryEntry = null; + + /** + * Add & Manage Categories + * @var KalturaCategoryService + */ + public $category = null; + + /** + * Add & Manage CategoryUser - membership of a user in a category + * @var KalturaCategoryUserService + */ + public $categoryUser = null; + + /** + * Manage the connection between Conversion Profiles and Asset Params + * @var KalturaConversionProfileAssetParamsService + */ + public $conversionProfileAssetParams = null; + + /** + * Add & Manage Conversion Profiles + * @var KalturaConversionProfileService + */ + public $conversionProfile = null; + + /** + * Data service lets you manage data content (textual content) + * @var KalturaDataService + */ + public $data = null; + + /** + * Delivery service is used to control delivery objects + * @var KalturaDeliveryProfileService + */ + public $deliveryProfile = null; + + /** + * EmailIngestionProfile service lets you manage email ingestion profile records + * @var KalturaEmailIngestionProfileService + */ + public $EmailIngestionProfile = null; + + /** + * Base class for entry server node + * @var KalturaEntryServerNodeService + */ + public $entryServerNode = null; + + /** + * Manage file assets + * @var KalturaFileAssetService + */ + public $fileAsset = null; + + /** + * Retrieve information and invoke actions on Flavor Asset + * @var KalturaFlavorAssetService + */ + public $flavorAsset = null; + + /** + * Flavor Params Output service + * @var KalturaFlavorParamsOutputService + */ + public $flavorParamsOutput = null; + + /** + * Add & Manage Flavor Params + * @var KalturaFlavorParamsService + */ + public $flavorParams = null; + + /** + * Add & Manage GroupUser + * @var KalturaGroupUserService + */ + public $groupUser = null; + + /** + * Manage live channel segments + * @var KalturaLiveChannelSegmentService + */ + public $liveChannelSegment = null; + + /** + * Live Channel service lets you manage live channels + * @var KalturaLiveChannelService + */ + public $liveChannel = null; + + /** + * + * @var KalturaLiveReportsService + */ + public $liveReports = null; + + /** + * Stats Service + * @var KalturaLiveStatsService + */ + public $liveStats = null; + + /** + * Live Stream service lets you manage live stream entries + * @var KalturaLiveStreamService + */ + public $liveStream = null; + + /** + * Media Info service + * @var KalturaMediaInfoService + */ + public $mediaInfo = null; + + /** + * Media service lets you upload and manage media files (images / videos & audio) + * @var KalturaMediaService + */ + public $media = null; + + /** + * A Mix is an XML unique format invented by Kaltura, it allows the user to create a mix of videos and images, in and out points, transitions, text overlays, soundtrack, effects and much more... + * Mixing service lets you create a new mix, manage its metadata and make basic manipulations. + * @var KalturaMixingService + */ + public $mixing = null; + + /** + * Notification Service + * @var KalturaNotificationService + */ + public $notification = null; + + /** + * Partner service allows you to change/manage your partner personal details and settings as well + * @var KalturaPartnerService + */ + public $partner = null; + + /** + * PermissionItem service lets you create and manage permission items + * @var KalturaPermissionItemService + */ + public $permissionItem = null; + + /** + * Permission service lets you create and manage user permissions + * @var KalturaPermissionService + */ + public $permission = null; + + /** + * Playlist service lets you create,manage and play your playlists + * Playlists could be static (containing a fixed list of entries) or dynamic (baseed on a filter) + * @var KalturaPlaylistService + */ + public $playlist = null; + + /** + * Api for getting reports data by the report type and some inputFilter + * @var KalturaReportService + */ + public $report = null; + + /** + * Manage response profiles + * @var KalturaResponseProfileService + */ + public $responseProfile = null; + + /** + * Expose the schema definitions for syndication MRSS, bulk upload XML and other schema types. + * @var KalturaSchemaService + */ + public $schema = null; + + /** + * Search service allows you to search for media in various media providers + * This service is being used mostly by the CW component + * @var KalturaSearchService + */ + public $search = null; + + /** + * Server Node service + * @var KalturaServerNodeService + */ + public $serverNode = null; + + /** + * Session service + * @var KalturaSessionService + */ + public $session = null; + + /** + * Stats Service + * @var KalturaStatsService + */ + public $stats = null; + + /** + * Storage Profiles service + * @var KalturaStorageProfileService + */ + public $storageProfile = null; + + /** + * Add & Manage Syndication Feeds + * @var KalturaSyndicationFeedService + */ + public $syndicationFeed = null; + + /** + * System service is used for internal system helpers & to retrieve system level information + * @var KalturaSystemService + */ + public $system = null; + + /** + * Retrieve information and invoke actions on Thumb Asset + * @var KalturaThumbAssetService + */ + public $thumbAsset = null; + + /** + * Thumbnail Params Output service + * @var KalturaThumbParamsOutputService + */ + public $thumbParamsOutput = null; + + /** + * Add & Manage Thumb Params + * @var KalturaThumbParamsService + */ + public $thumbParams = null; + + /** + * UiConf service lets you create and manage your UIConfs for the various flash components + * This service is used by the KMC-ApplicationStudio + * @var KalturaUiConfService + */ + public $uiConf = null; + + /** + * + * @var KalturaUploadService + */ + public $upload = null; + + /** + * + * @var KalturaUploadTokenService + */ + public $uploadToken = null; + + /** + * + * @var KalturaUserEntryService + */ + public $userEntry = null; + + /** + * UserRole service lets you create and manage user roles + * @var KalturaUserRoleService + */ + public $userRole = null; + + /** + * Manage partner users on Kaltura's side + * The userId in kaltura is the unique Id in the partner's system, and the [partnerId,Id] couple are unique key in kaltura's DB + * @var KalturaUserService + */ + public $user = null; + + /** + * Widget service for full widget management + * @var KalturaWidgetService + */ + public $widget = null; + + /** + * Kaltura client constructor + * + * @param KalturaConfiguration $config + */ + public function __construct(KalturaConfiguration $config) + { + parent::__construct($config); + + $this->setClientTag('php5:18-04-26'); + $this->setApiVersion('3.3.0'); + + $this->accessControlProfile = new KalturaAccessControlProfileService($this); + $this->accessControl = new KalturaAccessControlService($this); + $this->adminUser = new KalturaAdminUserService($this); + $this->analytics = new KalturaAnalyticsService($this); + $this->appToken = new KalturaAppTokenService($this); + $this->baseEntry = new KalturaBaseEntryService($this); + $this->bulkUpload = new KalturaBulkUploadService($this); + $this->categoryEntry = new KalturaCategoryEntryService($this); + $this->category = new KalturaCategoryService($this); + $this->categoryUser = new KalturaCategoryUserService($this); + $this->conversionProfileAssetParams = new KalturaConversionProfileAssetParamsService($this); + $this->conversionProfile = new KalturaConversionProfileService($this); + $this->data = new KalturaDataService($this); + $this->deliveryProfile = new KalturaDeliveryProfileService($this); + $this->EmailIngestionProfile = new KalturaEmailIngestionProfileService($this); + $this->entryServerNode = new KalturaEntryServerNodeService($this); + $this->fileAsset = new KalturaFileAssetService($this); + $this->flavorAsset = new KalturaFlavorAssetService($this); + $this->flavorParamsOutput = new KalturaFlavorParamsOutputService($this); + $this->flavorParams = new KalturaFlavorParamsService($this); + $this->groupUser = new KalturaGroupUserService($this); + $this->liveChannelSegment = new KalturaLiveChannelSegmentService($this); + $this->liveChannel = new KalturaLiveChannelService($this); + $this->liveReports = new KalturaLiveReportsService($this); + $this->liveStats = new KalturaLiveStatsService($this); + $this->liveStream = new KalturaLiveStreamService($this); + $this->mediaInfo = new KalturaMediaInfoService($this); + $this->media = new KalturaMediaService($this); + $this->mixing = new KalturaMixingService($this); + $this->notification = new KalturaNotificationService($this); + $this->partner = new KalturaPartnerService($this); + $this->permissionItem = new KalturaPermissionItemService($this); + $this->permission = new KalturaPermissionService($this); + $this->playlist = new KalturaPlaylistService($this); + $this->report = new KalturaReportService($this); + $this->responseProfile = new KalturaResponseProfileService($this); + $this->schema = new KalturaSchemaService($this); + $this->search = new KalturaSearchService($this); + $this->serverNode = new KalturaServerNodeService($this); + $this->session = new KalturaSessionService($this); + $this->stats = new KalturaStatsService($this); + $this->storageProfile = new KalturaStorageProfileService($this); + $this->syndicationFeed = new KalturaSyndicationFeedService($this); + $this->system = new KalturaSystemService($this); + $this->thumbAsset = new KalturaThumbAssetService($this); + $this->thumbParamsOutput = new KalturaThumbParamsOutputService($this); + $this->thumbParams = new KalturaThumbParamsService($this); + $this->uiConf = new KalturaUiConfService($this); + $this->upload = new KalturaUploadService($this); + $this->uploadToken = new KalturaUploadTokenService($this); + $this->userEntry = new KalturaUserEntryService($this); + $this->userRole = new KalturaUserRoleService($this); + $this->user = new KalturaUserService($this); + $this->widget = new KalturaWidgetService($this); + } + + /** + * @param string $clientTag + */ + public function setClientTag($clientTag) + { + $this->clientConfiguration['clientTag'] = $clientTag; + } + + /** + * @return string + */ + public function getClientTag() + { + if(isset($this->clientConfiguration['clientTag'])) + { + return $this->clientConfiguration['clientTag']; + } + + return null; + } + + /** + * @param string $apiVersion + */ + public function setApiVersion($apiVersion) + { + $this->clientConfiguration['apiVersion'] = $apiVersion; + } + + /** + * @return string + */ + public function getApiVersion() + { + if(isset($this->clientConfiguration['apiVersion'])) + { + return $this->clientConfiguration['apiVersion']; + } + + return null; + } + + /** + * Impersonated partner id + * + * @param int $partnerId + */ + public function setPartnerId($partnerId) + { + $this->requestConfiguration['partnerId'] = $partnerId; + } + + /** + * Impersonated partner id + * + * @return int + */ + public function getPartnerId() + { + if(isset($this->requestConfiguration['partnerId'])) + { + return $this->requestConfiguration['partnerId']; + } + + return null; + } + + /** + * Kaltura API session + * + * @param string $ks + */ + public function setKs($ks) + { + $this->requestConfiguration['ks'] = $ks; + } + + /** + * Kaltura API session + * + * @return string + */ + public function getKs() + { + if(isset($this->requestConfiguration['ks'])) + { + return $this->requestConfiguration['ks']; + } + + return null; + } + + /** + * Kaltura API session + * + * @param string $sessionId + */ + public function setSessionId($sessionId) + { + $this->requestConfiguration['ks'] = $sessionId; + } + + /** + * Kaltura API session + * + * @return string + */ + public function getSessionId() + { + if(isset($this->requestConfiguration['ks'])) + { + return $this->requestConfiguration['ks']; + } + + return null; + } + + /** + * Response profile - this attribute will be automatically unset after every API call. + * + * @param KalturaBaseResponseProfile $responseProfile + */ + public function setResponseProfile(KalturaBaseResponseProfile $responseProfile) + { + $this->requestConfiguration['responseProfile'] = $responseProfile; + } + + /** + * Response profile - this attribute will be automatically unset after every API call. + * + * @return KalturaBaseResponseProfile + */ + public function getResponseProfile() + { + if(isset($this->requestConfiguration['responseProfile'])) + { + return $this->requestConfiguration['responseProfile']; + } + + return null; + } + + /** + * Clear all volatile configuration parameters + */ + protected function resetRequest() + { + parent::resetRequest(); + unset($this->requestConfiguration['responseProfile']); + } +} + diff --git a/local/kaltura/API/KalturaClientBase.php b/local/kaltura/API/KalturaClientBase.php new file mode 100644 index 0000000000000..83083762aebd0 --- /dev/null +++ b/local/kaltura/API/KalturaClientBase.php @@ -0,0 +1,1451 @@ +. +// +// @ignore +// =================================================================================================== + +/** + * @package Kaltura + * @subpackage Client + */ +class MultiRequestSubResult implements ArrayAccess +{ + function __construct($value) + { + $this->value = $value; + } + + function __toString() + { + return '{' . $this->value . '}'; + } + + function __get($name) + { + return new MultiRequestSubResult($this->value . ':' . $name); + } + + public function offsetExists($offset) + { + return true; + } + + public function offsetGet($offset) + { + return new MultiRequestSubResult($this->value . ':' . $offset); + } + + public function offsetSet($offset, $value) + { + } + + public function offsetUnset($offset) + { + } +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaNull +{ + private static $instance; + + private function __construct() + { + + } + + public static function getInstance() + { + if (!isset(self::$instance)) { + $c = __CLASS__; + self::$instance = new $c(); + } + return self::$instance; + } + + function __toString() + { + return ''; + } + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaClientBase +{ + const KALTURA_SERVICE_FORMAT_JSON = 1; + const KALTURA_SERVICE_FORMAT_XML = 2; + const KALTURA_SERVICE_FORMAT_PHP = 3; + + // KS V2 constants + const RANDOM_SIZE = 16; + + const FIELD_EXPIRY = '_e'; + const FIELD_TYPE = '_t'; + const FIELD_USER = '_u'; + + const METHOD_POST = 'POST'; + const METHOD_GET = 'GET'; + + /** + * @var KalturaConfiguration + */ + protected $config; + + /** + * @var array + */ + protected $clientConfiguration = array(); + + /** + * @var array + */ + protected $requestConfiguration = array(); + + /** + * @var boolean + */ + private $shouldLog = false; + + /** + * @var bool + */ + private $isMultiRequest = false; + + /** + * @var unknown_type + */ + private $callsQueue = array(); + + /** + * Array of all plugin services + * + * @var array + */ + protected $pluginServices = array(); + + /** + * @var Array of response headers + */ + private $responseHeaders = array(); + + /** + * path to save served results + * @var string + */ + protected $destinationPath = null; + + /** + * return served results without unserializing them + * @var boolean + */ + protected $returnServedResult = null; + + public function __get($serviceName) + { + if(isset($this->pluginServices[$serviceName])) + return $this->pluginServices[$serviceName]; + + return null; + } + + /** + * Kaltura client constructor + * + * @param KalturaConfiguration $config + */ + public function __construct(KalturaConfiguration $config) + { + $this->config = $config; + + $logger = $this->config->getLogger(); + if ($logger) + { + $this->shouldLog = true; + } + + // load all plugins + $pluginsFolder = realpath(dirname(__FILE__)) . '/KalturaPlugins'; + if(is_dir($pluginsFolder)) + { + $dir = dir($pluginsFolder); + while (false !== $fileName = $dir->read()) + { + $matches = null; + if(preg_match('/^([^.]+).php$/', $fileName, $matches)) + { + require_once("$pluginsFolder/$fileName"); + + $pluginClass = $matches[1]; + if(!class_exists($pluginClass) || !in_array('IKalturaClientPlugin', class_implements($pluginClass))) + continue; + + $plugin = call_user_func(array($pluginClass, 'get'), $this); + if(!($plugin instanceof IKalturaClientPlugin)) + continue; + + $pluginName = $plugin->getName(); + $services = $plugin->getServices(); + foreach($services as $serviceName => $service) + { + $service->setClient($this); + $this->pluginServices[$serviceName] = $service; + } + } + } + } + } + + /* Store response headers into array */ + public function readHeader($ch, $string) + { + array_push($this->responseHeaders, $string); + return strlen($string); + } + + /* Retrive response headers */ + public function getResponseHeaders() + { + return $this->responseHeaders; + } + + public function getServeUrl() + { + if (count($this->callsQueue) != 1) + return null; + + $params = array(); + $files = array(); + $this->log("service url: [" . $this->config->serviceUrl . "]"); + + // append the basic params + $this->addParam($params, "format", $this->config->format); + + foreach($this->clientConfiguration as $param => $value) + { + $this->addParam($params, $param, $value); + } + + $call = $this->callsQueue[0]; + $this->resetRequest(); + + $params = array_merge($params, $call->params); + $signature = $this->signature($params); + $this->addParam($params, "kalsig", $signature); + + $url = $this->config->serviceUrl . "/api_v3/service/{$call->service}/action/{$call->action}"; + $url .= '?' . http_build_query($params); + $this->log("Returned url [$url]"); + return $url; + } + + public function queueServiceActionCall($service, $action, $params = array(), $files = array()) + { + foreach($this->requestConfiguration as $param => $value) + { + $this->addParam($params, $param, $value); + } + + $call = new KalturaServiceActionCall($service, $action, $params, $files); + $this->callsQueue[] = $call; + } + + protected function resetRequest() + { + $this->destinationPath = null; + $this->returnServedResult = false; + $this->isMultiRequest = false; + $this->callsQueue = array(); + } + + /** + * Call all API service that are in queue + * + * @return unknown + */ + public function doQueue() + { + if($this->isMultiRequest && ($this->destinationPath || $this->returnServedResult)) + { + $this->resetRequest(); + throw new KalturaClientException("Downloading files is not supported as part of multi-request.", KalturaClientException::ERROR_DOWNLOAD_IN_MULTIREQUEST); + } + + if (count($this->callsQueue) == 0) + { + $this->resetRequest(); + return null; + } + + $startTime = microtime(true); + + $params = array(); + $files = array(); + $this->log("service url: [" . $this->config->serviceUrl . "]"); + + // append the basic params + $this->addParam($params, "format", $this->config->format); + $this->addParam($params, "ignoreNull", true); + + foreach($this->clientConfiguration as $param => $value) + { + $this->addParam($params, $param, $value); + } + + $url = $this->config->serviceUrl."/api_v3/service"; + if ($this->isMultiRequest) + { + $url .= "/multirequest"; + $i = 0; + foreach ($this->callsQueue as $call) + { + $callParams = $call->getParamsForMultiRequest($i); + $callFiles = $call->getFilesForMultiRequest($i); + $params = array_merge($params, $callParams); + $files = array_merge($files, $callFiles); + $i++; + } + } + else + { + $call = $this->callsQueue[0]; + $url .= "/{$call->service}/action/{$call->action}"; + $params = array_merge($params, $call->params); + $files = $call->files; + } + + $signature = $this->signature($params); + $this->addParam($params, "kalsig", $signature); + + try + { + list($postResult, $error) = $this->doHttpRequest($url, $params, $files); + } + catch(Exception $e) + { + $this->resetRequest(); + throw $e; + } + + if ($error) + { + $this->resetRequest(); + throw new KalturaClientException($error, KalturaClientException::ERROR_GENERIC); + } + else + { + // print server debug info to log + $serverName = null; + $serverSession = null; + foreach ($this->responseHeaders as $curHeader) + { + $splittedHeader = explode(':', $curHeader, 2); + if ($splittedHeader[0] == 'X-Me') + $serverName = trim($splittedHeader[1]); + else if ($splittedHeader[0] == 'X-Kaltura-Session') + $serverSession = trim($splittedHeader[1]); + } + if (!is_null($serverName) || !is_null($serverSession)) + $this->log("server: [{$serverName}], session: [{$serverSession}]"); + + $this->log("result (serialized): " . $postResult); + + if($this->returnServedResult) + { + $result = $postResult; + } + elseif($this->destinationPath) + { + if(!$postResult) + { + $this->resetRequest(); + throw new KalturaClientException("failed to download file", KalturaClientException::ERROR_READ_FAILED); + } + } + elseif ($this->config->format == self::KALTURA_SERVICE_FORMAT_PHP) + { + $result = @unserialize($postResult); + + if ($result === false && serialize(false) !== $postResult) + { + $this->resetRequest(); + throw new KalturaClientException("failed to unserialize server result\n$postResult", KalturaClientException::ERROR_UNSERIALIZE_FAILED); + } + $dump = print_r($result, true); + $this->log("result (object dump): " . $dump); + } + elseif ($this->config->format == self::KALTURA_SERVICE_FORMAT_JSON) + { + $result = json_decode($postResult); + if(is_null($result) && strtolower($postResult) !== 'null') + { + $this->resetRequest(); + throw new KalturaClientException("failed to unserialize server result\n$postResult", KalturaClientException::ERROR_UNSERIALIZE_FAILED); + } + $result = $this->jsObjectToClientObject($result); + $dump = print_r($result, true); + $this->log("result (object dump): " . $dump); + } + else + { + $this->resetRequest(); + throw new KalturaClientException("unsupported format: $postResult", KalturaClientException::ERROR_FORMAT_NOT_SUPPORTED); + } + } + $this->resetRequest(); + + $endTime = microtime (true); + + $this->log("execution time for [".$url."]: [" . ($endTime - $startTime) . "]"); + + return $result; + } + + /** + * Sorts array recursively + * + * @param array $params + * @param int $flags + * @return boolean + */ + protected function ksortRecursive(&$array, $flags = null) + { + ksort($array, $flags); + foreach($array as &$arr) { + if(is_array($arr)) + $this->ksortRecursive($arr, $flags); + } + return true; + } + + /** + * Sign array of parameters + * + * @param array $params + * @return string + */ + private function signature($params) + { + $this->ksortRecursive($params); + return md5($this->jsonEncode($params)); + } + + /** + * Send http request by using curl (if available) or php stream_context + * + * @param string $url + * @param parameters $params + * @return array of result and error + */ + protected function doHttpRequest($url, $params = array(), $files = array()) + { + if (function_exists('curl_init')) + return $this->doCurl($url, $params, $files); + + if($this->destinationPath || $this->returnServedResult) + throw new KalturaClientException("Downloading files is not supported with stream context http request, please use curl.", KalturaClientException::ERROR_DOWNLOAD_NOT_SUPPORTED); + + return $this->doPostRequest($url, $params, $files); + } + + /** + * Curl HTTP POST Request + * + * @param string $url + * @param array $params + * @param array $files + * @return array of result and error + */ + private function doCurl($url, $params = array(), $files = array()) + { + $requestHeaders = $this->config->requestHeaders; + + $params = $this->jsonEncode($params); + $this->log("curl: $url"); + $this->log("post: $params"); + if($this->config->format == self::KALTURA_SERVICE_FORMAT_JSON) + { + $requestHeaders[] = 'Accept: application/json'; + } + + $this->responseHeaders = array(); + $cookies = array(); + $ch = curl_init(); + curl_setopt($ch, CURLOPT_URL, $url); + if($this->config->method == self::METHOD_POST) { + curl_setopt($ch, CURLOPT_POST, 1); + if (count($files) > 0) + { + $params = array('json' => $params); + foreach ($files as $key => $file) { + // The usage of the @filename API for file uploading is + // deprecated since PHP 5.5. CURLFile must be used instead. + if (PHP_VERSION_ID >= 50500) { + $params[$key] = new \CURLFile($file); + } else { + $params[$key] = "@" . $file; // let curl know its a file + } + } + curl_setopt($ch, CURLOPT_POSTFIELDS, $params); + } + else + { + $requestHeaders[] = 'Content-Type: application/json'; + curl_setopt($ch, CURLOPT_POSTFIELDS, $params); + } + } + curl_setopt($ch, CURLOPT_ENCODING, 'gzip,deflate'); + curl_setopt($ch, CURLOPT_USERAGENT, $this->config->userAgent); + if (count($files) > 0) + curl_setopt($ch, CURLOPT_TIMEOUT, 0); + else + curl_setopt($ch, CURLOPT_TIMEOUT, $this->config->curlTimeout); + + if ($this->config->startZendDebuggerSession === true) + { + $zendDebuggerParams = $this->getZendDebuggerParams($url); + $cookies = array_merge($cookies, $zendDebuggerParams); + } + + if (count($cookies) > 0) + { + $cookiesStr = http_build_query($cookies, null, '; '); + curl_setopt($ch, CURLOPT_COOKIE, $cookiesStr); + } + + if (isset($this->config->proxyHost)) { + curl_setopt($ch, CURLOPT_HTTPPROXYTUNNEL, true); + curl_setopt($ch, CURLOPT_PROXY, $this->config->proxyHost); + if (isset($this->config->proxyPort)) { + curl_setopt($ch, CURLOPT_PROXYPORT, $this->config->proxyPort); + } + if (isset($this->config->proxyUser)) { + curl_setopt($ch, CURLOPT_PROXYUSERPWD, $this->config->proxyUser.':'.$this->config->proxyPassword); + } + if (isset($this->config->proxyType) && $this->config->proxyType === 'SOCKS5') { + curl_setopt($ch, CURLOPT_PROXYTYPE, CURLPROXY_SOCKS5); + } + } + + // Set SSL verification + if(!$this->getConfig()->verifySSL) + { + curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); + curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 2); + } + elseif($this->getConfig()->sslCertificatePath) + { + curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, true); + curl_setopt($ch, CURLOPT_CAINFO, $this->getConfig()->sslCertificatePath); + } + + // Set custom headers + curl_setopt($ch, CURLOPT_HTTPHEADER, $requestHeaders); + + // Save response headers + curl_setopt($ch, CURLOPT_HEADERFUNCTION, array($this, 'readHeader') ); + + $destinationResource = null; + if($this->destinationPath) + { + $destinationResource = fopen($this->destinationPath, "wb"); + curl_setopt($ch, CURLOPT_FILE, $destinationResource); + } + else + { + curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); + } + + $result = curl_exec($ch); + + if($destinationResource) + fclose($destinationResource); + + $curlError = curl_error($ch); + curl_close($ch); + return array($result, $curlError); + } + + /** + * HTTP stream context request + * + * @param string $url + * @param array $params + * @return array of result and error + */ + private function doPostRequest($url, $params = array(), $files = array()) + { + if (count($files) > 0) + throw new KalturaClientException("Uploading files is not supported with stream context http request, please use curl.", KalturaClientException::ERROR_UPLOAD_NOT_SUPPORTED); + + $formattedData = http_build_query($params , "", "&"); + $this->log("post: $url?$formattedData"); + + $params = array('http' => array( + "method" => "POST", + "User-Agent: " . $this->config->userAgent . "\r\n". + "Accept-language: en\r\n". + "Content-type: application/x-www-form-urlencoded\r\n", + "content" => $formattedData + )); + + if (isset($this->config->proxyType) && $this->config->proxyType === 'SOCKS5') { + throw new KalturaClientException("Cannot use SOCKS5 without curl installed.", KalturaClientException::ERROR_CONNECTION_FAILED); + } + if (isset($this->config->proxyHost)) { + $proxyhost = 'tcp://' . $this->config->proxyHost; + if (isset($this->config->proxyPort)) { + $proxyhost = $proxyhost . ":" . $this->config->proxyPort; + } + $params['http']['proxy'] = $proxyhost; + $params['http']['request_fulluri'] = true; + if (isset($this->config->proxyUser)) { + $auth = base64_encode($this->config->proxyUser.':'.$this->config->proxyPassword); + $params['http']['header'] = 'Proxy-Authorization: Basic ' . $auth; + } + } + + $ctx = stream_context_create($params); + $fp = @fopen($url, 'rb', false, $ctx); + if (!$fp) { + $phpErrorMsg = ""; + throw new KalturaClientException("Problem with $url, $phpErrorMsg", KalturaClientException::ERROR_CONNECTION_FAILED); + } + $response = @stream_get_contents($fp); + if ($response === false) { + throw new KalturaClientException("Problem reading data from $url, $phpErrorMsg", KalturaClientException::ERROR_READ_FAILED); + } + return array($response, ''); + } + + /** + * @param boolean $returnServedResult + */ + public function setReturnServedResult($returnServedResult) + { + $this->returnServedResult = $returnServedResult; + } + + /** + * @return boolean + */ + public function getReturnServedResult() + { + return $this->returnServedResult; + } + + /** + * @param string $destinationPath + */ + public function setDestinationPath($destinationPath) + { + $this->destinationPath = $destinationPath; + } + + /** + * @return string + */ + public function getDestinationPath() + { + return $this->destinationPath; + } + + /** + * @return KalturaConfiguration + */ + public function getConfig() + { + return $this->config; + } + + /** + * @param KalturaConfiguration $config + */ + public function setConfig(KalturaConfiguration $config) + { + $this->config = $config; + + $logger = $this->config->getLogger(); + if ($logger instanceof IKalturaLogger) + { + $this->shouldLog = true; + } + } + + public function setClientConfiguration(KalturaClientConfiguration $configuration) + { + $params = get_class_vars('KalturaClientConfiguration'); + foreach($params as $param => $value) + { + if(is_null($configuration->$param)) + { + if(isset($this->clientConfiguration[$param])) + { + unset($this->clientConfiguration[$param]); + } + } + else + { + $this->clientConfiguration[$param] = $configuration->$param; + } + } + } + + public function setRequestConfiguration(KalturaRequestConfiguration $configuration) + { + $params = get_class_vars('KalturaRequestConfiguration'); + foreach($params as $param => $value) + { + if(is_null($configuration->$param)) + { + if(isset($this->requestConfiguration[$param])) + { + unset($this->requestConfiguration[$param]); + } + } + else + { + $this->requestConfiguration[$param] = $configuration->$param; + } + } + } + + /** + * Add parameter to array of parameters that is passed by reference + * + * @param array $params + * @param string $paramName + * @param string $paramValue + */ + public function addParam(array &$params, $paramName, $paramValue) + { + if ($paramValue === null) + return; + + if ($paramValue instanceof KalturaNull) { + $params[$paramName . '__null'] = ''; + return; + } + + if(is_object($paramValue) && $paramValue instanceof KalturaObjectBase) + { + $params[$paramName] = array( + 'objectType' => get_class($paramValue) + ); + + foreach($paramValue as $prop => $val) + $this->addParam($params[$paramName], $prop, $val); + + return; + } + + if(is_bool($paramValue)) + { + $params[$paramName] = $paramValue; + return; + } + + if(!is_array($paramValue)) + { + $params[$paramName] = (string)$paramValue; + return; + } + + $params[$paramName] = array(); + if ($paramValue) + { + foreach($paramValue as $subParamName => $subParamValue) + $this->addParam($params[$paramName], $subParamName, $subParamValue); + } + else + { + $params[$paramName]['-'] = ''; + } + } + + /** + * @param mixed $value + * @return mixed + */ + public function jsObjectToClientObject($value) + { + if(is_array($value)) + { + foreach($value as &$item) + { + $item = $this->jsObjectToClientObject($item); + } + } + + if(is_object($value)) + { + if(isset($value->message) && isset($value->code)) + { + if($this->isMultiRequest) + { + if(isset($value->args)) + { + $value->args = (array) $value->args; + } + return (array) $value; + } + throw new KalturaException($value->message, $value->code, $value->args); + } + + if(!isset($value->objectType)) + { + throw new KalturaClientException("Response format not supported - objectType is required for all objects", KalturaClientException::ERROR_FORMAT_NOT_SUPPORTED); + } + + $objectType = $value->objectType; + $object = new $objectType(); + $attributes = get_object_vars($value); + foreach($attributes as $attribute => $attributeValue) + { + if($attribute === 'objectType') + { + continue; + } + + $object->$attribute = $this->jsObjectToClientObject($attributeValue); + } + + $value = $object; + } + + return $value; + } + + /** + * Encodes objects + * @param mixed $value + * @return string + */ + public function jsonEncode($value) + { + return json_encode($this->unsetNull($value)); + } + + protected function unsetNull($object) + { + if(!is_array($object) && !is_object($object)) + return $object; + + if(is_object($object) && $object instanceof MultiRequestSubResult) + return "$object"; + + $array = (array) $object; + foreach($array as $key => $value) + { + if(is_null($value)) + { + unset($array[$key]); + } + else + { + $array[$key] = $this->unsetNull($value); + } + } + + if(is_object($object)) + $array['objectType'] = get_class($object); + + return $array; + } + + /** + * Validate the result object and throw exception if its an error + * + * @param object $resultObject + */ + public function throwExceptionIfError($resultObject) + { + if ($this->isError($resultObject)) + { + throw new KalturaException($resultObject["message"], $resultObject["code"], $resultObject["args"]); + } + } + + /** + * Checks whether the result object is an error + * + * @param object $resultObject + */ + public function isError($resultObject) + { + return (is_array($resultObject) && isset($resultObject["message"]) && isset($resultObject["code"])); + } + + /** + * Validate that the passed object type is of the expected type + * + * @param any $resultObject + * @param string $objectType + */ + public function validateObjectType($resultObject, $objectType) + { + $knownNativeTypes = array("boolean", "integer", "double", "string"); + if (is_null($resultObject) || + ( in_array(gettype($resultObject) ,$knownNativeTypes) && + in_array($objectType, $knownNativeTypes) ) ) + { + return;// we do not check native simple types + } + else if ( is_object($resultObject) ) + { + if (!($resultObject instanceof $objectType)) + { + throw new KalturaClientException("Invalid object type - not instance of $objectType", KalturaClientException::ERROR_INVALID_OBJECT_TYPE); + } + } + else if(class_exists($objectType) && is_subclass_of($objectType, 'KalturaEnumBase')) + { + $enum = new ReflectionClass($objectType); + $values = array_map('strval', $enum->getConstants()); + if(!in_array($resultObject, $values)) + { + throw new KalturaClientException("Invalid enum value", KalturaClientException::ERROR_INVALID_ENUM_VALUE); + } + } + else if(gettype($resultObject) !== $objectType) + { + throw new KalturaClientException("Invalid object type", KalturaClientException::ERROR_INVALID_OBJECT_TYPE); + } + } + + + public function startMultiRequest() + { + $this->isMultiRequest = true; + } + + public function doMultiRequest() + { + return $this->doQueue(); + } + + public function isMultiRequest() + { + return $this->isMultiRequest; + } + + public function getMultiRequestQueueSize() + { + return count($this->callsQueue); + } + + public function getMultiRequestResult() + { + return new MultiRequestSubResult($this->getMultiRequestQueueSize() . ':result'); + } + + /** + * @param string $msg + */ + protected function log($msg) + { + if ($this->shouldLog) + $this->config->getLogger()->log($msg); + } + + /** + * Return a list of parameter used to a new start debug on the destination server api + * @link http://kb.zend.com/index.php?View=entry&EntryID=434 + * @param $url + */ + protected function getZendDebuggerParams($url) + { + $params = array(); + $passThruParams = array('debug_host', + 'debug_fastfile', + 'debug_port', + 'start_debug', + 'send_debug_header', + 'send_sess_end', + 'debug_jit', + 'debug_stop', + 'use_remote'); + + foreach($passThruParams as $param) + { + if (isset($_COOKIE[$param])) + $params[$param] = $_COOKIE[$param]; + } + + $params['original_url'] = $url; + $params['debug_session_id'] = microtime(true); // to create a new debug session + + return $params; + } + + public function generateSession($adminSecretForSigning, $userId, $type, $partnerId, $expiry = 86400, $privileges = '') + { + $rand = rand(0, 32000); + $expiry = time()+$expiry; + $fields = array ( + $partnerId , + $partnerId , + $expiry , + $type, + $rand , + $userId , + $privileges + ); + $info = implode ( ";" , $fields ); + + $signature = $this->hash ( $adminSecretForSigning , $info ); + $strToHash = $signature . "|" . $info ; + $encoded_str = base64_encode( $strToHash ); + + return $encoded_str; + } + + public static function generateSessionV2($adminSecretForSigning, $userId, $type, $partnerId, $expiry, $privileges) + { + // build fields array + $fields = array(); + foreach (explode(',', $privileges) as $privilege) + { + $privilege = trim($privilege); + if (!$privilege) + continue; + if ($privilege == '*') + $privilege = 'all:*'; + $splittedPrivilege = explode(':', $privilege, 2); + if (count($splittedPrivilege) > 1) + $fields[$splittedPrivilege[0]] = $splittedPrivilege[1]; + else + $fields[$splittedPrivilege[0]] = ''; + } + $fields[self::FIELD_EXPIRY] = time() + $expiry; + $fields[self::FIELD_TYPE] = $type; + $fields[self::FIELD_USER] = $userId; + + // build fields string + $fieldsStr = http_build_query($fields, '', '&'); + $rand = ''; + for ($i = 0; $i < self::RANDOM_SIZE; $i++) + $rand .= chr(rand(0, 0xff)); + $fieldsStr = $rand . $fieldsStr; + $fieldsStr = sha1($fieldsStr, true) . $fieldsStr; + + // encrypt and encode + $encryptedFields = self::aesEncrypt($adminSecretForSigning, $fieldsStr); + $decodedKs = "v2|{$partnerId}|" . $encryptedFields; + return str_replace(array('+', '/'), array('-', '_'), base64_encode($decodedKs)); + } + + protected static function aesEncrypt($key, $message) + { + $iv = str_repeat("\0", 16); // no need for an IV since we add a random string to the message anyway + $key = substr(sha1($key, true), 0, 16); + if (function_exists('mcrypt_encrypt')) { + return mcrypt_encrypt( + MCRYPT_RIJNDAEL_128, + $key, + $message, + MCRYPT_MODE_CBC, + $iv + ); + }else { + // Pad with null byte to be compatible with mcrypt PKCS#5 padding + // See http://thefsb.tumblr.com/post/110749271235/using-opensslendecrypt-in-php-instead-of as reference + $blockSize = 16; + if (strlen($message) % $blockSize) { + $padLength = $blockSize - strlen($message) % $blockSize; + $message .= str_repeat("\0", $padLength); + } + return openssl_encrypt( + $message, + 'AES-128-CBC', + $key, + OPENSSL_RAW_DATA | OPENSSL_ZERO_PADDING, + $iv + ); + } + } + + private function hash ( $salt , $str ) + { + return sha1($salt.$str); + } + + /** + * @return KalturaNull + */ + public static function getKalturaNullValue() + { + + return KalturaNull::getInstance(); + } + +} + +/** + * @package Kaltura + * @subpackage Client + */ +interface IKalturaClientPlugin +{ + /** + * @return KalturaClientPlugin + */ + public static function get(KalturaClient $client); + + /** + * @return array + */ + public function getServices(); + + /** + * @return string + */ + public function getName(); +} + +/** + * @package Kaltura + * @subpackage Client + */ +abstract class KalturaClientPlugin implements IKalturaClientPlugin +{ + protected function __construct(KalturaClient $client) + { + + } +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaServiceActionCall +{ + /** + * @var string + */ + public $service; + + /** + * @var string + */ + public $action; + + + /** + * @var array + */ + public $params; + + /** + * @var array + */ + public $files; + + /** + * Contruct new Kaltura service action call, if params array contain sub arrays (for objects), it will be flattened + * + * @param string $service + * @param string $action + * @param array $params + * @param array $files + */ + public function __construct($service, $action, $params = array(), $files = array()) + { + $this->service = $service; + $this->action = $action; + $this->params = $this->parseParams($params); + $this->files = $files; + } + + /** + * Parse params array and sub arrays (for objects) + * + * @param array $params + */ + public function parseParams(array $params) + { + $newParams = array(); + foreach($params as $key => $val) + { + if (is_array($val)) + { + $newParams[$key] = $this->parseParams($val); + } + else + { + $newParams[$key] = $val; + } + } + return $newParams; + } + + /** + * Return the parameters for a multi request + * + * @param int $multiRequestIndex + */ + public function getParamsForMultiRequest($multiRequestIndex) + { + $multiRequestParams = array(); + $multiRequestParams[$multiRequestIndex]['service'] = $this->service; + $multiRequestParams[$multiRequestIndex]['action'] = $this->action; + foreach($this->params as $key => $val) + { + $multiRequestParams[$multiRequestIndex][$key] = $val; + } + return $multiRequestParams; + } + + /** + * Return the parameters for a multi request + * + * @param int $multiRequestIndex + */ + public function getFilesForMultiRequest($multiRequestIndex) + { + $multiRequestParams = array(); + foreach($this->files as $key => $val) + { + $multiRequestParams["$multiRequestIndex:$key"] = $val; + } + return $multiRequestParams; + } +} + +/** + * Abstract base class for all client services + * + * @package Kaltura + * @subpackage Client + */ +abstract class KalturaServiceBase +{ + /** + * @var KalturaClient + */ + protected $client; + + /** + * Initialize the service keeping reference to the KalturaClient + * + * @param KalturaClient $client + */ + public function __construct(KalturaClient $client = null) + { + $this->client = $client; + } + + /** + * @param KalturaClient $client + */ + public function setClient(KalturaClient $client) + { + $this->client = $client; + } +} + +/** + * Abstract base class for all client enums + * + * @package Kaltura + * @subpackage Client + */ +abstract class KalturaEnumBase +{ +} + +/** + * Abstract base class for all client objects + * + * @package Kaltura + * @subpackage Client + */ +abstract class KalturaObjectBase +{ + /** + * @var array + */ + public $relatedObjects; + + public function __construct($params = array()) + { + foreach ($params as $key => $value) + { + if (!property_exists($this, $key)) + throw new KalturaClientException("property [{$key}] does not exist on object [".get_class($this)."]", KalturaClientException::ERROR_INVALID_OBJECT_FIELD); + $this->$key = $value; + } + } + + protected function addIfNotNull(&$params, $paramName, $paramValue) + { + if ($paramValue !== null) + { + if($paramValue instanceof KalturaObjectBase) + { + $params[$paramName] = $paramValue->toParams(); + } + else + { + $params[$paramName] = $paramValue; + } + } + } + + public function toParams() + { + $params = array(); + $params["objectType"] = get_class($this); + foreach($this as $prop => $val) + { + $this->addIfNotNull($params, $prop, $val); + } + return $params; + } +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaException extends Exception +{ + private $arguments; + + public function __construct($message, $code, $arguments) + { + $this->code = $code; + $this->arguments = $arguments; + + parent::__construct($message); + } + + /** + * @return array + */ + public function getArguments() + { + return $this->arguments; + } + + /** + * @return string + */ + public function getArgument($argument) + { + if($this->arguments && isset($this->arguments[$argument])) + { + return $this->arguments[$argument]; + } + + return null; + } +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaClientException extends Exception +{ + const ERROR_GENERIC = -1; + const ERROR_UNSERIALIZE_FAILED = -2; + const ERROR_FORMAT_NOT_SUPPORTED = -3; + const ERROR_UPLOAD_NOT_SUPPORTED = -4; + const ERROR_CONNECTION_FAILED = -5; + const ERROR_READ_FAILED = -6; + const ERROR_INVALID_PARTNER_ID = -7; + const ERROR_INVALID_OBJECT_TYPE = -8; + const ERROR_INVALID_OBJECT_FIELD = -9; + const ERROR_DOWNLOAD_NOT_SUPPORTED = -10; + const ERROR_DOWNLOAD_IN_MULTIREQUEST = -11; + const ERROR_ACTION_IN_MULTIREQUEST = -12; + const ERROR_INVALID_ENUM_VALUE = -13; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaConfiguration +{ + private $logger; + + public $serviceUrl = "http://www.kaltura.com/"; + public $format = KalturaClientBase::KALTURA_SERVICE_FORMAT_PHP; + public $curlTimeout = 120; + public $userAgent = ''; + public $startZendDebuggerSession = false; + public $proxyHost = null; + public $proxyPort = null; + public $proxyType = 'HTTP'; + public $proxyUser = null; + public $proxyPassword = ''; + public $verifySSL = true; + public $sslCertificatePath = null; + public $requestHeaders = array(); + public $method = KalturaClientBase::METHOD_POST; + + /** + * Set logger to get kaltura client debug logs + * + * @param IKalturaLogger $log + */ + public function setLogger(IKalturaLogger $log) + { + $this->logger = $log; + } + + /** + * Gets the logger (Internal client use) + * + * @return IKalturaLogger + */ + public function getLogger() + { + return $this->logger; + } +} + +/** + * Implement to get Kaltura Client logs + * + * @package Kaltura + * @subpackage Client + */ +interface IKalturaLogger +{ + function log($msg); +} + + diff --git a/local/kaltura/API/KalturaEnums.php b/local/kaltura/API/KalturaEnums.php new file mode 100644 index 0000000000000..7de659618c3e8 --- /dev/null +++ b/local/kaltura/API/KalturaEnums.php @@ -0,0 +1,4966 @@ +. +// +// @ignore +// =================================================================================================== + +/** + * @package Kaltura + * @subpackage Client + */ +require_once(dirname(__FILE__) . "/KalturaClientBase.php"); + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaAppTokenStatus extends KalturaEnumBase +{ + const DISABLED = 1; + const ACTIVE = 2; + const DELETED = 3; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaAppearInListType extends KalturaEnumBase +{ + const PARTNER_ONLY = 1; + const CATEGORY_MEMBERS_ONLY = 3; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaAssetParamsDeletePolicy extends KalturaEnumBase +{ + const KEEP = 0; + const DELETE = 1; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaAssetParamsOrigin extends KalturaEnumBase +{ + const CONVERT = 0; + const INGEST = 1; + const CONVERT_WHEN_MISSING = 2; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaBatchJobErrorTypes extends KalturaEnumBase +{ + const APP = 0; + const RUNTIME = 1; + const HTTP = 2; + const CURL = 3; + const KALTURA_API = 4; + const KALTURA_CLIENT = 5; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaBatchJobStatus extends KalturaEnumBase +{ + const PENDING = 0; + const QUEUED = 1; + const PROCESSING = 2; + const PROCESSED = 3; + const MOVEFILE = 4; + const FINISHED = 5; + const FAILED = 6; + const ABORTED = 7; + const ALMOST_DONE = 8; + const RETRY = 9; + const FATAL = 10; + const DONT_PROCESS = 11; + const FINISHED_PARTIALLY = 12; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaBitRateMode extends KalturaEnumBase +{ + const CBR = 1; + const VBR = 2; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaCategoryEntryStatus extends KalturaEnumBase +{ + const PENDING = 1; + const ACTIVE = 2; + const DELETED = 3; + const REJECTED = 4; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaCategoryStatus extends KalturaEnumBase +{ + const UPDATING = 1; + const ACTIVE = 2; + const DELETED = 3; + const PURGED = 4; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaCategoryUserPermissionLevel extends KalturaEnumBase +{ + const MANAGER = 0; + const MODERATOR = 1; + const CONTRIBUTOR = 2; + const MEMBER = 3; + const NONE = 4; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaCategoryUserStatus extends KalturaEnumBase +{ + const ACTIVE = 1; + const PENDING = 2; + const NOT_ACTIVE = 3; + const DELETED = 4; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaChinaCacheAlgorithmType extends KalturaEnumBase +{ + const SHA1 = 1; + const SHA256 = 2; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaCommercialUseType extends KalturaEnumBase +{ + const NON_COMMERCIAL_USE = 0; + const COMMERCIAL_USE = 1; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaContributionPolicyType extends KalturaEnumBase +{ + const ALL = 1; + const MEMBERS_WITH_CONTRIBUTION_PERMISSION = 2; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaControlPanelCommandStatus extends KalturaEnumBase +{ + const PENDING = 1; + const HANDLED = 2; + const DONE = 3; + const FAILED = 4; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaControlPanelCommandTargetType extends KalturaEnumBase +{ + const DATA_CENTER = 1; + const SCHEDULER = 2; + const JOB_TYPE = 3; + const JOB = 4; + const BATCH = 5; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaControlPanelCommandType extends KalturaEnumBase +{ + const KILL = 4; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaCountryRestrictionType extends KalturaEnumBase +{ + const RESTRICT_COUNTRY_LIST = 0; + const ALLOW_COUNTRY_LIST = 1; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaDVRStatus extends KalturaEnumBase +{ + const DISABLED = 0; + const ENABLED = 1; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaDeliveryStatus extends KalturaEnumBase +{ + const ACTIVE = 0; + const DELETED = 1; + const STAGING_IN = 2; + const STAGING_OUT = 3; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaDirectoryRestrictionType extends KalturaEnumBase +{ + const DONT_DISPLAY = 0; + const DISPLAY_WITH_LINK = 1; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaEditorType extends KalturaEnumBase +{ + const SIMPLE = 1; + const ADVANCED = 2; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaEmailIngestionProfileStatus extends KalturaEnumBase +{ + const INACTIVE = 0; + const ACTIVE = 1; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaEntryDisplayInSearchType extends KalturaEnumBase +{ + const SYSTEM = -1; + const NONE = 0; + const PARTNER_ONLY = 1; + const KALTURA_NETWORK = 2; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaEntryModerationStatus extends KalturaEnumBase +{ + const PENDING_MODERATION = 1; + const APPROVED = 2; + const REJECTED = 3; + const DELETED = 4; + const FLAGGED_FOR_REVIEW = 5; + const AUTO_APPROVED = 6; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaEntryServerNodeRecordingStatus extends KalturaEnumBase +{ + const STOPPED = 0; + const ON_GOING = 1; + const DONE = 2; + const DISMISSED = 3; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaEntryServerNodeStatus extends KalturaEnumBase +{ + const STOPPED = 0; + const PLAYABLE = 1; + const BROADCASTING = 2; + const AUTHENTICATED = 3; + const MARKED_FOR_DELETION = 4; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaFeatureStatusType extends KalturaEnumBase +{ + const LOCK_CATEGORY = 1; + const CATEGORY = 2; + const CATEGORY_ENTRY = 3; + const ENTRY = 4; + const CATEGORY_USER = 5; + const USER = 6; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaFlavorAssetStatus extends KalturaEnumBase +{ + const ERROR = -1; + const QUEUED = 0; + const CONVERTING = 1; + const READY = 2; + const DELETED = 3; + const NOT_APPLICABLE = 4; + const TEMP = 5; + const WAIT_FOR_CONVERT = 6; + const IMPORTING = 7; + const VALIDATING = 8; + const EXPORTING = 9; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaFlavorReadyBehaviorType extends KalturaEnumBase +{ + const NO_IMPACT = 0; + const INHERIT_FLAVOR_PARAMS = 0; + const REQUIRED = 1; + const OPTIONAL = 2; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaGender extends KalturaEnumBase +{ + const UNKNOWN = 0; + const MALE = 1; + const FEMALE = 2; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaGroupUserStatus extends KalturaEnumBase +{ + const ACTIVE = 0; + const DELETED = 1; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaInheritanceType extends KalturaEnumBase +{ + const INHERIT = 1; + const MANUAL = 2; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaIpAddressRestrictionType extends KalturaEnumBase +{ + const RESTRICT_LIST = 0; + const ALLOW_LIST = 1; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaLicenseType extends KalturaEnumBase +{ + const UNKNOWN = -1; + const NONE = 0; + const COPYRIGHTED = 1; + const PUBLIC_DOMAIN = 2; + const CREATIVECOMMONS_ATTRIBUTION = 3; + const CREATIVECOMMONS_ATTRIBUTION_SHARE_ALIKE = 4; + const CREATIVECOMMONS_ATTRIBUTION_NO_DERIVATIVES = 5; + const CREATIVECOMMONS_ATTRIBUTION_NON_COMMERCIAL = 6; + const CREATIVECOMMONS_ATTRIBUTION_NON_COMMERCIAL_SHARE_ALIKE = 7; + const CREATIVECOMMONS_ATTRIBUTION_NON_COMMERCIAL_NO_DERIVATIVES = 8; + const GFDL = 9; + const GPL = 10; + const AFFERO_GPL = 11; + const LGPL = 12; + const BSD = 13; + const APACHE = 14; + const MOZILLA = 15; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaLimitFlavorsRestrictionType extends KalturaEnumBase +{ + const RESTRICT_LIST = 0; + const ALLOW_LIST = 1; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaLivePublishStatus extends KalturaEnumBase +{ + const DISABLED = 0; + const ENABLED = 1; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaLiveReportExportType extends KalturaEnumBase +{ + const PARTNER_TOTAL_ALL = 1; + const PARTNER_TOTAL_LIVE = 2; + const ENTRY_TIME_LINE_ALL = 11; + const ENTRY_TIME_LINE_LIVE = 12; + const LOCATION_ALL = 21; + const LOCATION_LIVE = 22; + const SYNDICATION_ALL = 31; + const SYNDICATION_LIVE = 32; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaLiveStatsEventType extends KalturaEnumBase +{ + const LIVE = 1; + const DVR = 2; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaMailJobStatus extends KalturaEnumBase +{ + const PENDING = 1; + const SENT = 2; + const ERROR = 3; + const QUEUED = 4; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaMediaType extends KalturaEnumBase +{ + const VIDEO = 1; + const IMAGE = 2; + const AUDIO = 5; + const LIVE_STREAM_FLASH = 201; + const LIVE_STREAM_WINDOWS_MEDIA = 202; + const LIVE_STREAM_REAL_MEDIA = 203; + const LIVE_STREAM_QUICKTIME = 204; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaModerationFlagType extends KalturaEnumBase +{ + const SEXUAL_CONTENT = 1; + const VIOLENT_REPULSIVE = 2; + const HARMFUL_DANGEROUS = 3; + const SPAM_COMMERCIALS = 4; + const COPYRIGHT = 5; + const TERMS_OF_USE_VIOLATION = 6; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaMrssExtensionMode extends KalturaEnumBase +{ + const APPEND = 1; + const REPLACE = 2; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaNotificationObjectType extends KalturaEnumBase +{ + const ENTRY = 1; + const KSHOW = 2; + const USER = 3; + const BATCH_JOB = 4; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaNotificationStatus extends KalturaEnumBase +{ + const PENDING = 1; + const SENT = 2; + const ERROR = 3; + const SHOULD_RESEND = 4; + const ERROR_RESENDING = 5; + const SENT_SYNCH = 6; + const QUEUED = 7; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaNotificationType extends KalturaEnumBase +{ + const ENTRY_ADD = 1; + const ENTR_UPDATE_PERMISSIONS = 2; + const ENTRY_DELETE = 3; + const ENTRY_BLOCK = 4; + const ENTRY_UPDATE = 5; + const ENTRY_UPDATE_THUMBNAIL = 6; + const ENTRY_UPDATE_MODERATION = 7; + const USER_ADD = 21; + const USER_BANNED = 26; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaNullableBoolean extends KalturaEnumBase +{ + const NULL_VALUE = -1; + const FALSE_VALUE = 0; + const TRUE_VALUE = 1; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaPartnerGroupType extends KalturaEnumBase +{ + const PUBLISHER = 1; + const VAR_GROUP = 2; + const GROUP = 3; + const TEMPLATE = 4; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaPartnerStatus extends KalturaEnumBase +{ + const DELETED = 0; + const ACTIVE = 1; + const BLOCKED = 2; + const FULL_BLOCK = 3; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaPartnerType extends KalturaEnumBase +{ + const KMC = 1; + const WIKI = 100; + const WORDPRESS = 101; + const DRUPAL = 102; + const DEKIWIKI = 103; + const MOODLE = 104; + const COMMUNITY_EDITION = 105; + const JOOMLA = 106; + const BLACKBOARD = 107; + const SAKAI = 108; + const ADMIN_CONSOLE = 109; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaPermissionStatus extends KalturaEnumBase +{ + const ACTIVE = 1; + const BLOCKED = 2; + const DELETED = 3; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaPermissionType extends KalturaEnumBase +{ + const NORMAL = 1; + const SPECIAL_FEATURE = 2; + const PLUGIN = 3; + const PARTNER_GROUP = 4; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaPlaylistType extends KalturaEnumBase +{ + const STATIC_LIST = 3; + const DYNAMIC = 10; + const EXTERNAL = 101; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaPrivacyType extends KalturaEnumBase +{ + const ALL = 1; + const AUTHENTICATED_USERS = 2; + const MEMBERS_ONLY = 3; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaRecordStatus extends KalturaEnumBase +{ + const DISABLED = 0; + const APPENDED = 1; + const PER_SESSION = 2; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaRecordingStatus extends KalturaEnumBase +{ + const STOPPED = 0; + const PAUSED = 1; + const ACTIVE = 2; + const DISABLED = 3; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaResponseProfileStatus extends KalturaEnumBase +{ + const DISABLED = 1; + const ENABLED = 2; + const DELETED = 3; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaResponseProfileType extends KalturaEnumBase +{ + const INCLUDE_FIELDS = 1; + const EXCLUDE_FIELDS = 2; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaResponseType extends KalturaEnumBase +{ + const RESPONSE_TYPE_JSON = 1; + const RESPONSE_TYPE_XML = 2; + const RESPONSE_TYPE_PHP = 3; + const RESPONSE_TYPE_PHP_ARRAY = 4; + const RESPONSE_TYPE_HTML = 7; + const RESPONSE_TYPE_MRSS = 8; + const RESPONSE_TYPE_JSONP = 9; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaSchedulerStatusType extends KalturaEnumBase +{ + const RUNNING_BATCHES_COUNT = 1; + const RUNNING_BATCHES_CPU = 2; + const RUNNING_BATCHES_MEMORY = 3; + const RUNNING_BATCHES_NETWORK = 4; + const RUNNING_BATCHES_DISC_IO = 5; + const RUNNING_BATCHES_DISC_SPACE = 6; + const RUNNING_BATCHES_IS_RUNNING = 7; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaSearchOperatorType extends KalturaEnumBase +{ + const SEARCH_AND = 1; + const SEARCH_OR = 2; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaSearchProviderType extends KalturaEnumBase +{ + const FLICKR = 3; + const YOUTUBE = 4; + const MYSPACE = 7; + const PHOTOBUCKET = 8; + const JAMENDO = 9; + const CCMIXTER = 10; + const NYPL = 11; + const CURRENT = 12; + const MEDIA_COMMONS = 13; + const KALTURA = 20; + const KALTURA_USER_CLIPS = 21; + const ARCHIVE_ORG = 22; + const KALTURA_PARTNER = 23; + const METACAFE = 24; + const SEARCH_PROXY = 28; + const PARTNER_SPECIFIC = 100; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaServerNodeStatus extends KalturaEnumBase +{ + const ACTIVE = 1; + const DISABLED = 2; + const DELETED = 3; + const NOT_REGISTERED = 4; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaSessionType extends KalturaEnumBase +{ + const USER = 0; + const ADMIN = 2; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaSiteRestrictionType extends KalturaEnumBase +{ + const RESTRICT_SITE_LIST = 0; + const ALLOW_SITE_LIST = 1; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaStatsEventType extends KalturaEnumBase +{ + const WIDGET_LOADED = 1; + const MEDIA_LOADED = 2; + const PLAY = 3; + const PLAY_REACHED_25 = 4; + const PLAY_REACHED_50 = 5; + const PLAY_REACHED_75 = 6; + const PLAY_REACHED_100 = 7; + const OPEN_EDIT = 8; + const OPEN_VIRAL = 9; + const OPEN_DOWNLOAD = 10; + const OPEN_REPORT = 11; + const BUFFER_START = 12; + const BUFFER_END = 13; + const OPEN_FULL_SCREEN = 14; + const CLOSE_FULL_SCREEN = 15; + const REPLAY = 16; + const SEEK = 17; + const OPEN_UPLOAD = 18; + const SAVE_PUBLISH = 19; + const CLOSE_EDITOR = 20; + const PRE_BUMPER_PLAYED = 21; + const POST_BUMPER_PLAYED = 22; + const BUMPER_CLICKED = 23; + const PREROLL_STARTED = 24; + const MIDROLL_STARTED = 25; + const POSTROLL_STARTED = 26; + const OVERLAY_STARTED = 27; + const PREROLL_CLICKED = 28; + const MIDROLL_CLICKED = 29; + const POSTROLL_CLICKED = 30; + const OVERLAY_CLICKED = 31; + const PREROLL_25 = 32; + const PREROLL_50 = 33; + const PREROLL_75 = 34; + const MIDROLL_25 = 35; + const MIDROLL_50 = 36; + const MIDROLL_75 = 37; + const POSTROLL_25 = 38; + const POSTROLL_50 = 39; + const POSTROLL_75 = 40; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaStatsFeatureType extends KalturaEnumBase +{ + const NONE = 0; + const RELATED = 1; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaStatsKmcEventType extends KalturaEnumBase +{ + const CONTENT_PAGE_VIEW = 1001; + const CONTENT_ADD_PLAYLIST = 1010; + const CONTENT_EDIT_PLAYLIST = 1011; + const CONTENT_DELETE_PLAYLIST = 1012; + const CONTENT_EDIT_ENTRY = 1013; + const CONTENT_CHANGE_THUMBNAIL = 1014; + const CONTENT_ADD_TAGS = 1015; + const CONTENT_REMOVE_TAGS = 1016; + const CONTENT_ADD_ADMIN_TAGS = 1017; + const CONTENT_REMOVE_ADMIN_TAGS = 1018; + const CONTENT_DOWNLOAD = 1019; + const CONTENT_APPROVE_MODERATION = 1020; + const CONTENT_REJECT_MODERATION = 1021; + const CONTENT_BULK_UPLOAD = 1022; + const CONTENT_ADMIN_KCW_UPLOAD = 1023; + const ACCOUNT_CHANGE_PARTNER_INFO = 1030; + const ACCOUNT_CHANGE_LOGIN_INFO = 1031; + const ACCOUNT_CONTACT_US_USAGE = 1032; + const ACCOUNT_UPDATE_SERVER_SETTINGS = 1033; + const ACCOUNT_ACCOUNT_OVERVIEW = 1034; + const ACCOUNT_ACCESS_CONTROL = 1035; + const ACCOUNT_TRANSCODING_SETTINGS = 1036; + const ACCOUNT_ACCOUNT_UPGRADE = 1037; + const ACCOUNT_SAVE_SERVER_SETTINGS = 1038; + const ACCOUNT_ACCESS_CONTROL_DELETE = 1039; + const ACCOUNT_SAVE_TRANSCODING_SETTINGS = 1040; + const LOGIN = 1041; + const DASHBOARD_IMPORT_CONTENT = 1042; + const DASHBOARD_UPDATE_CONTENT = 1043; + const DASHBOARD_ACCOUNT_CONTACT_US = 1044; + const DASHBOARD_VIEW_REPORTS = 1045; + const DASHBOARD_EMBED_PLAYER = 1046; + const DASHBOARD_EMBED_PLAYLIST = 1047; + const DASHBOARD_CUSTOMIZE_PLAYERS = 1048; + const APP_STUDIO_NEW_PLAYER_SINGLE_VIDEO = 1050; + const APP_STUDIO_NEW_PLAYER_PLAYLIST = 1051; + const APP_STUDIO_NEW_PLAYER_MULTI_TAB_PLAYLIST = 1052; + const APP_STUDIO_EDIT_PLAYER_SINGLE_VIDEO = 1053; + const APP_STUDIO_EDIT_PLAYER_PLAYLIST = 1054; + const APP_STUDIO_EDIT_PLAYER_MULTI_TAB_PLAYLIST = 1055; + const APP_STUDIO_DUPLICATE_PLAYER = 1056; + const CONTENT_CONTENT_GO_TO_PAGE = 1057; + const CONTENT_DELETE_ITEM = 1058; + const CONTENT_DELETE_MIX = 1059; + const REPORTS_AND_ANALYTICS_BANDWIDTH_USAGE_TAB = 1070; + const REPORTS_AND_ANALYTICS_CONTENT_REPORTS_TAB = 1071; + const REPORTS_AND_ANALYTICS_USERS_AND_COMMUNITY_REPORTS_TAB = 1072; + const REPORTS_AND_ANALYTICS_TOP_CONTRIBUTORS = 1073; + const REPORTS_AND_ANALYTICS_MAP_OVERLAYS = 1074; + const REPORTS_AND_ANALYTICS_TOP_SYNDICATIONS = 1075; + const REPORTS_AND_ANALYTICS_TOP_CONTENT = 1076; + const REPORTS_AND_ANALYTICS_CONTENT_DROPOFF = 1077; + const REPORTS_AND_ANALYTICS_CONTENT_INTERACTIONS = 1078; + const REPORTS_AND_ANALYTICS_CONTENT_CONTRIBUTIONS = 1079; + const REPORTS_AND_ANALYTICS_VIDEO_DRILL_DOWN = 1080; + const REPORTS_AND_ANALYTICS_CONTENT_DRILL_DOWN_INTERACTION = 1081; + const REPORTS_AND_ANALYTICS_CONTENT_CONTRIBUTIONS_DRILLDOWN = 1082; + const REPORTS_AND_ANALYTICS_VIDEO_DRILL_DOWN_DROPOFF = 1083; + const REPORTS_AND_ANALYTICS_MAP_OVERLAYS_DRILLDOWN = 1084; + const REPORTS_AND_ANALYTICS_TOP_SYNDICATIONS_DRILL_DOWN = 1085; + const REPORTS_AND_ANALYTICS_BANDWIDTH_USAGE_VIEW_MONTHLY = 1086; + const REPORTS_AND_ANALYTICS_BANDWIDTH_USAGE_VIEW_YEARLY = 1087; + const CONTENT_ENTRY_DRILLDOWN = 1088; + const CONTENT_OPEN_PREVIEW_AND_EMBED = 1089; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaStorageProfileDeliveryStatus extends KalturaEnumBase +{ + const ACTIVE = 1; + const BLOCKED = 2; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaStorageProfileReadyBehavior extends KalturaEnumBase +{ + const NO_IMPACT = 0; + const REQUIRED = 1; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaStorageProfileStatus extends KalturaEnumBase +{ + const DISABLED = 1; + const AUTOMATIC = 2; + const MANUAL = 3; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaSyndicationFeedStatus extends KalturaEnumBase +{ + const DELETED = -1; + const ACTIVE = 1; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaSyndicationFeedType extends KalturaEnumBase +{ + const GOOGLE_VIDEO = 1; + const YAHOO = 2; + const ITUNES = 3; + const TUBE_MOGUL = 4; + const KALTURA = 5; + const KALTURA_XSLT = 6; + const ROKU_DIRECT_PUBLISHER = 7; + const OPERA_TV_SNAP = 8; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaThumbAssetStatus extends KalturaEnumBase +{ + const ERROR = -1; + const QUEUED = 0; + const CAPTURING = 1; + const READY = 2; + const DELETED = 3; + const IMPORTING = 7; + const EXPORTING = 9; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaThumbCropType extends KalturaEnumBase +{ + const RESIZE = 1; + const RESIZE_WITH_PADDING = 2; + const CROP = 3; + const CROP_FROM_TOP = 4; + const RESIZE_WITH_FORCE = 5; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaUiConfCreationMode extends KalturaEnumBase +{ + const WIZARD = 2; + const ADVANCED = 3; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaUiConfObjType extends KalturaEnumBase +{ + const PLAYER = 1; + const CONTRIBUTION_WIZARD = 2; + const SIMPLE_EDITOR = 3; + const ADVANCED_EDITOR = 4; + const PLAYLIST = 5; + const APP_STUDIO = 6; + const KRECORD = 7; + const PLAYER_V3 = 8; + const KMC_ACCOUNT = 9; + const KMC_ANALYTICS = 10; + const KMC_CONTENT = 11; + const KMC_DASHBOARD = 12; + const KMC_LOGIN = 13; + const PLAYER_SL = 14; + const CLIENTSIDE_ENCODER = 15; + const KMC_GENERAL = 16; + const KMC_ROLES_AND_PERMISSIONS = 17; + const CLIPPER = 18; + const KSR = 19; + const KUPLOAD = 20; + const WEBCASTING = 21; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaUpdateMethodType extends KalturaEnumBase +{ + const MANUAL = 0; + const AUTOMATIC = 1; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaUploadErrorCode extends KalturaEnumBase +{ + const NO_ERROR = 0; + const GENERAL_ERROR = 1; + const PARTIAL_UPLOAD = 2; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaUploadTokenStatus extends KalturaEnumBase +{ + const PENDING = 0; + const PARTIAL_UPLOAD = 1; + const FULL_UPLOAD = 2; + const CLOSED = 3; + const TIMED_OUT = 4; + const DELETED = 5; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaUserAgentRestrictionType extends KalturaEnumBase +{ + const RESTRICT_LIST = 0; + const ALLOW_LIST = 1; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaUserJoinPolicyType extends KalturaEnumBase +{ + const AUTO_JOIN = 1; + const REQUEST_TO_JOIN = 2; + const NOT_ALLOWED = 3; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaUserRoleStatus extends KalturaEnumBase +{ + const ACTIVE = 1; + const BLOCKED = 2; + const DELETED = 3; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaUserStatus extends KalturaEnumBase +{ + const BLOCKED = 0; + const ACTIVE = 1; + const DELETED = 2; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaUserType extends KalturaEnumBase +{ + const USER = 0; + const GROUP = 1; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaViewMode extends KalturaEnumBase +{ + const PREVIEW = 0; + const ALLOW_ALL = 1; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaWidgetSecurityType extends KalturaEnumBase +{ + const NONE = 1; + const TIMEHASH = 2; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaAccessControlOrderBy extends KalturaEnumBase +{ + const CREATED_AT_ASC = "+createdAt"; + const CREATED_AT_DESC = "-createdAt"; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaAccessControlProfileOrderBy extends KalturaEnumBase +{ + const CREATED_AT_ASC = "+createdAt"; + const UPDATED_AT_ASC = "+updatedAt"; + const CREATED_AT_DESC = "-createdAt"; + const UPDATED_AT_DESC = "-updatedAt"; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaAdminUserOrderBy extends KalturaEnumBase +{ + const CREATED_AT_ASC = "+createdAt"; + const ID_ASC = "+id"; + const CREATED_AT_DESC = "-createdAt"; + const ID_DESC = "-id"; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaAkamaiUniversalStreamType extends KalturaEnumBase +{ + const HD_IPHONE_IPAD_LIVE = "HD iPhone/iPad Live"; + const UNIVERSAL_STREAMING_LIVE = "Universal Streaming Live"; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaAmazonS3StorageProfileFilesPermissionLevel extends KalturaEnumBase +{ + const ACL_AUTHENTICATED_READ = "authenticated-read"; + const ACL_PRIVATE = "private"; + const ACL_PUBLIC_READ = "public-read"; + const ACL_PUBLIC_READ_WRITE = "public-read-write"; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaAmazonS3StorageProfileOrderBy extends KalturaEnumBase +{ + const CREATED_AT_ASC = "+createdAt"; + const UPDATED_AT_ASC = "+updatedAt"; + const CREATED_AT_DESC = "-createdAt"; + const UPDATED_AT_DESC = "-updatedAt"; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaApiActionPermissionItemOrderBy extends KalturaEnumBase +{ + const CREATED_AT_ASC = "+createdAt"; + const ID_ASC = "+id"; + const UPDATED_AT_ASC = "+updatedAt"; + const CREATED_AT_DESC = "-createdAt"; + const ID_DESC = "-id"; + const UPDATED_AT_DESC = "-updatedAt"; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaApiParameterPermissionItemAction extends KalturaEnumBase +{ + const USAGE = "all"; + const INSERT = "insert"; + const READ = "read"; + const UPDATE = "update"; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaApiParameterPermissionItemOrderBy extends KalturaEnumBase +{ + const CREATED_AT_ASC = "+createdAt"; + const ID_ASC = "+id"; + const UPDATED_AT_ASC = "+updatedAt"; + const CREATED_AT_DESC = "-createdAt"; + const ID_DESC = "-id"; + const UPDATED_AT_DESC = "-updatedAt"; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaAppTokenHashType extends KalturaEnumBase +{ + const MD5 = "MD5"; + const SHA1 = "SHA1"; + const SHA256 = "SHA256"; + const SHA512 = "SHA512"; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaAppTokenOrderBy extends KalturaEnumBase +{ + const CREATED_AT_ASC = "+createdAt"; + const UPDATED_AT_ASC = "+updatedAt"; + const CREATED_AT_DESC = "-createdAt"; + const UPDATED_AT_DESC = "-updatedAt"; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaAssetOrderBy extends KalturaEnumBase +{ + const CREATED_AT_ASC = "+createdAt"; + const DELETED_AT_ASC = "+deletedAt"; + const SIZE_ASC = "+size"; + const UPDATED_AT_ASC = "+updatedAt"; + const CREATED_AT_DESC = "-createdAt"; + const DELETED_AT_DESC = "-deletedAt"; + const SIZE_DESC = "-size"; + const UPDATED_AT_DESC = "-updatedAt"; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaAssetParamsOrderBy extends KalturaEnumBase +{ +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaAssetParamsOutputOrderBy extends KalturaEnumBase +{ +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaAssetType extends KalturaEnumBase +{ + const ATTACHMENT = "attachment.Attachment"; + const CAPTION = "caption.Caption"; + const DOCUMENT = "document.Document"; + const IMAGE = "document.Image"; + const PDF = "document.PDF"; + const SWF = "document.SWF"; + const TIMED_THUMB_ASSET = "thumbCuePoint.timedThumb"; + const TRANSCRIPT = "transcript.Transcript"; + const WIDEVINE_FLAVOR = "widevine.WidevineFlavor"; + const FLAVOR = "1"; + const THUMBNAIL = "2"; + const LIVE = "3"; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaAudioCodec extends KalturaEnumBase +{ + const NONE = ""; + const AAC = "aac"; + const AACHE = "aache"; + const AC3 = "ac3"; + const AMRNB = "amrnb"; + const COPY = "copy"; + const EAC3 = "eac3"; + const MP3 = "mp3"; + const MPEG2 = "mpeg2"; + const PCM = "pcm"; + const VORBIS = "vorbis"; + const WMA = "wma"; + const WMAPRO = "wmapro"; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaBaseEntryCloneOptions extends KalturaEnumBase +{ + const AD_CUE_POINTS = "adCuePoint.AD_CUE_POINTS"; + const ANNOTATION_CUE_POINTS = "annotation.ANNOTATION_CUE_POINTS"; + const CODE_CUE_POINTS = "codeCuePoint.CODE_CUE_POINTS"; + const THUMB_CUE_POINTS = "thumbCuePoint.THUMB_CUE_POINTS"; + const USERS = "1"; + const CATEGORIES = "2"; + const CHILD_ENTRIES = "3"; + const ACCESS_CONTROL = "4"; + const METADATA = "5"; + const FLAVORS = "6"; + const CAPTIONS = "7"; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaBaseEntryCompareAttribute extends KalturaEnumBase +{ + const ACCESS_CONTROL_ID = "accessControlId"; + const CREATED_AT = "createdAt"; + const END_DATE = "endDate"; + const MODERATION_COUNT = "moderationCount"; + const MODERATION_STATUS = "moderationStatus"; + const PARTNER_ID = "partnerId"; + const PARTNER_SORT_VALUE = "partnerSortValue"; + const RANK = "rank"; + const REPLACEMENT_STATUS = "replacementStatus"; + const START_DATE = "startDate"; + const STATUS = "status"; + const TOTAL_RANK = "totalRank"; + const TYPE = "type"; + const UPDATED_AT = "updatedAt"; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaBaseEntryMatchAttribute extends KalturaEnumBase +{ + const ADMIN_TAGS = "adminTags"; + const CATEGORIES_IDS = "categoriesIds"; + const CREATOR_ID = "creatorId"; + const DESCRIPTION = "description"; + const GROUP_ID = "groupId"; + const ID = "id"; + const NAME = "name"; + const REFERENCE_ID = "referenceId"; + const REPLACED_ENTRY_ID = "replacedEntryId"; + const REPLACING_ENTRY_ID = "replacingEntryId"; + const SEARCH_TEXT = "searchText"; + const TAGS = "tags"; + const USER_ID = "userId"; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaBaseEntryOrderBy extends KalturaEnumBase +{ + const CREATED_AT_ASC = "+createdAt"; + const END_DATE_ASC = "+endDate"; + const MODERATION_COUNT_ASC = "+moderationCount"; + const NAME_ASC = "+name"; + const PARTNER_SORT_VALUE_ASC = "+partnerSortValue"; + const RANK_ASC = "+rank"; + const RECENT_ASC = "+recent"; + const START_DATE_ASC = "+startDate"; + const TOTAL_RANK_ASC = "+totalRank"; + const UPDATED_AT_ASC = "+updatedAt"; + const WEIGHT_ASC = "+weight"; + const CREATED_AT_DESC = "-createdAt"; + const END_DATE_DESC = "-endDate"; + const MODERATION_COUNT_DESC = "-moderationCount"; + const NAME_DESC = "-name"; + const PARTNER_SORT_VALUE_DESC = "-partnerSortValue"; + const RANK_DESC = "-rank"; + const RECENT_DESC = "-recent"; + const START_DATE_DESC = "-startDate"; + const TOTAL_RANK_DESC = "-totalRank"; + const UPDATED_AT_DESC = "-updatedAt"; + const WEIGHT_DESC = "-weight"; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaBaseSyndicationFeedOrderBy extends KalturaEnumBase +{ + const CREATED_AT_ASC = "+createdAt"; + const NAME_ASC = "+name"; + const PLAYLIST_ID_ASC = "+playlistId"; + const TYPE_ASC = "+type"; + const UPDATED_AT_ASC = "+updatedAt"; + const CREATED_AT_DESC = "-createdAt"; + const NAME_DESC = "-name"; + const PLAYLIST_ID_DESC = "-playlistId"; + const TYPE_DESC = "-type"; + const UPDATED_AT_DESC = "-updatedAt"; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaBatchJobObjectType extends KalturaEnumBase +{ + const ENTRY_DISTRIBUTION = "contentDistribution.EntryDistribution"; + const DROP_FOLDER_FILE = "dropFolderXmlBulkUpload.DropFolderFile"; + const METADATA = "metadata.Metadata"; + const METADATA_PROFILE = "metadata.MetadataProfile"; + const SCHEDULED_TASK_PROFILE = "scheduledTask.ScheduledTaskProfile"; + const ENTRY = "1"; + const CATEGORY = "2"; + const FILE_SYNC = "3"; + const ASSET = "4"; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaBatchJobOrderBy extends KalturaEnumBase +{ + const CREATED_AT_ASC = "+createdAt"; + const ESTIMATED_EFFORT_ASC = "+estimatedEffort"; + const EXECUTION_ATTEMPTS_ASC = "+executionAttempts"; + const FINISH_TIME_ASC = "+finishTime"; + const LOCK_VERSION_ASC = "+lockVersion"; + const PRIORITY_ASC = "+priority"; + const QUEUE_TIME_ASC = "+queueTime"; + const STATUS_ASC = "+status"; + const UPDATED_AT_ASC = "+updatedAt"; + const CREATED_AT_DESC = "-createdAt"; + const ESTIMATED_EFFORT_DESC = "-estimatedEffort"; + const EXECUTION_ATTEMPTS_DESC = "-executionAttempts"; + const FINISH_TIME_DESC = "-finishTime"; + const LOCK_VERSION_DESC = "-lockVersion"; + const PRIORITY_DESC = "-priority"; + const QUEUE_TIME_DESC = "-queueTime"; + const STATUS_DESC = "-status"; + const UPDATED_AT_DESC = "-updatedAt"; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaBatchJobType extends KalturaEnumBase +{ + const PARSE_MULTI_LANGUAGE_CAPTION_ASSET = "caption.parsemultilanguagecaptionasset"; + const CONVERT = "0"; + const PARSE_CAPTION_ASSET = "captionSearch.parseCaptionAsset"; + const DISTRIBUTION_DELETE = "contentDistribution.DistributionDelete"; + const DISTRIBUTION_DISABLE = "contentDistribution.DistributionDisable"; + const DISTRIBUTION_ENABLE = "contentDistribution.DistributionEnable"; + const DISTRIBUTION_FETCH_REPORT = "contentDistribution.DistributionFetchReport"; + const DISTRIBUTION_SUBMIT = "contentDistribution.DistributionSubmit"; + const DISTRIBUTION_SYNC = "contentDistribution.DistributionSync"; + const DISTRIBUTION_UPDATE = "contentDistribution.DistributionUpdate"; + const DROP_FOLDER_CONTENT_PROCESSOR = "dropFolder.DropFolderContentProcessor"; + const DROP_FOLDER_WATCHER = "dropFolder.DropFolderWatcher"; + const EVENT_NOTIFICATION_HANDLER = "eventNotification.EventNotificationHandler"; + const INTEGRATION = "integration.Integration"; + const SCHEDULED_TASK = "scheduledTask.ScheduledTask"; + const INDEX_TAGS = "tagSearch.IndexTagsByPrivacyContext"; + const TAG_RESOLVE = "tagSearch.TagResolve"; + const VIRUS_SCAN = "virusScan.VirusScan"; + const WIDEVINE_REPOSITORY_SYNC = "widevine.WidevineRepositorySync"; + const IMPORT = "1"; + const DELETE = "2"; + const FLATTEN = "3"; + const BULKUPLOAD = "4"; + const DVDCREATOR = "5"; + const DOWNLOAD = "6"; + const OOCONVERT = "7"; + const CONVERT_PROFILE = "10"; + const POSTCONVERT = "11"; + const EXTRACT_MEDIA = "14"; + const MAIL = "15"; + const NOTIFICATION = "16"; + const CLEANUP = "17"; + const SCHEDULER_HELPER = "18"; + const BULKDOWNLOAD = "19"; + const DB_CLEANUP = "20"; + const PROVISION_PROVIDE = "21"; + const CONVERT_COLLECTION = "22"; + const STORAGE_EXPORT = "23"; + const PROVISION_DELETE = "24"; + const STORAGE_DELETE = "25"; + const EMAIL_INGESTION = "26"; + const METADATA_IMPORT = "27"; + const METADATA_TRANSFORM = "28"; + const FILESYNC_IMPORT = "29"; + const CAPTURE_THUMB = "30"; + const DELETE_FILE = "31"; + const INDEX = "32"; + const MOVE_CATEGORY_ENTRIES = "33"; + const COPY = "34"; + const CONCAT = "35"; + const CONVERT_LIVE_SEGMENT = "36"; + const COPY_PARTNER = "37"; + const VALIDATE_LIVE_MEDIA_SERVERS = "38"; + const SYNC_CATEGORY_PRIVACY_CONTEXT = "39"; + const LIVE_REPORT_EXPORT = "40"; + const RECALCULATE_CACHE = "41"; + const LIVE_TO_VOD = "42"; + const COPY_CAPTIONS = "43"; + const CHUNKED_ENCODE_JOB_SCHEDULER = "44"; + const SERVER_NODE_MONITOR = "45"; + const USERS_CSV = "46"; + const CLIP_CONCAT = "47"; + const COPY_CUE_POINTS = "48"; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaBulkUploadAction extends KalturaEnumBase +{ + const CANCEL = "scheduleBulkUpload.CANCEL"; + const ADD = "1"; + const UPDATE = "2"; + const DELETE = "3"; + const REPLACE = "4"; + const TRANSFORM_XSLT = "5"; + const ADD_OR_UPDATE = "6"; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaBulkUploadObjectType extends KalturaEnumBase +{ + const SCHEDULE_EVENT = "scheduleBulkUpload.SCHEDULE_EVENT"; + const SCHEDULE_RESOURCE = "scheduleBulkUpload.SCHEDULE_RESOURCE"; + const ENTRY = "1"; + const CATEGORY = "2"; + const USER = "3"; + const CATEGORY_USER = "4"; + const CATEGORY_ENTRY = "5"; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaBulkUploadOrderBy extends KalturaEnumBase +{ +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaBulkUploadResultStatus extends KalturaEnumBase +{ + const ERROR = "1"; + const OK = "2"; + const IN_PROGRESS = "3"; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaBulkUploadType extends KalturaEnumBase +{ + const CSV = "bulkUploadCsv.CSV"; + const FILTER = "bulkUploadFilter.FILTER"; + const XML = "bulkUploadXml.XML"; + const DROP_FOLDER_XML = "dropFolderXmlBulkUpload.DROP_FOLDER_XML"; + const ICAL = "scheduleBulkUpload.ICAL"; + const DROP_FOLDER_ICAL = "scheduleDropFolder.DROP_FOLDER_ICAL"; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaCategoryEntryAdvancedOrderBy extends KalturaEnumBase +{ + const CREATED_AT_ASC = "+createdAt"; + const CREATED_AT_DESC = "-createdAt"; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaCategoryEntryOrderBy extends KalturaEnumBase +{ + const CREATED_AT_ASC = "+createdAt"; + const CREATED_AT_DESC = "-createdAt"; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaCategoryIdentifierField extends KalturaEnumBase +{ + const FULL_NAME = "fullName"; + const ID = "id"; + const REFERENCE_ID = "referenceId"; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaCategoryOrderBy extends KalturaEnumBase +{ + const CREATED_AT_ASC = "+createdAt"; + const DEPTH_ASC = "+depth"; + const DIRECT_ENTRIES_COUNT_ASC = "+directEntriesCount"; + const DIRECT_SUB_CATEGORIES_COUNT_ASC = "+directSubCategoriesCount"; + const ENTRIES_COUNT_ASC = "+entriesCount"; + const FULL_NAME_ASC = "+fullName"; + const MEMBERS_COUNT_ASC = "+membersCount"; + const NAME_ASC = "+name"; + const PARTNER_SORT_VALUE_ASC = "+partnerSortValue"; + const UPDATED_AT_ASC = "+updatedAt"; + const CREATED_AT_DESC = "-createdAt"; + const DEPTH_DESC = "-depth"; + const DIRECT_ENTRIES_COUNT_DESC = "-directEntriesCount"; + const DIRECT_SUB_CATEGORIES_COUNT_DESC = "-directSubCategoriesCount"; + const ENTRIES_COUNT_DESC = "-entriesCount"; + const FULL_NAME_DESC = "-fullName"; + const MEMBERS_COUNT_DESC = "-membersCount"; + const NAME_DESC = "-name"; + const PARTNER_SORT_VALUE_DESC = "-partnerSortValue"; + const UPDATED_AT_DESC = "-updatedAt"; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaCategoryUserOrderBy extends KalturaEnumBase +{ + const CREATED_AT_ASC = "+createdAt"; + const UPDATED_AT_ASC = "+updatedAt"; + const CREATED_AT_DESC = "-createdAt"; + const UPDATED_AT_DESC = "-updatedAt"; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaCloneComponentSelectorType extends KalturaEnumBase +{ + const INCLUDE_COMPONENT = "0"; + const EXCLUDE_COMPONENT = "1"; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaConditionType extends KalturaEnumBase +{ + const ABC_WATERMARK = "abcScreenersWatermarkAccessControl.abcWatermark"; + const EVENT_NOTIFICATION_FIELD = "eventNotification.BooleanField"; + const EVENT_NOTIFICATION_OBJECT_CHANGED = "eventNotification.ObjectChanged"; + const METADATA_FIELD_CHANGED = "metadata.FieldChanged"; + const METADATA_FIELD_COMPARE = "metadata.FieldCompare"; + const METADATA_FIELD_MATCH = "metadata.FieldMatch"; + const AUTHENTICATED = "1"; + const COUNTRY = "2"; + const IP_ADDRESS = "3"; + const SITE = "4"; + const USER_AGENT = "5"; + const FIELD_MATCH = "6"; + const FIELD_COMPARE = "7"; + const ASSET_PROPERTIES_COMPARE = "8"; + const USER_ROLE = "9"; + const GEO_DISTANCE = "10"; + const OR_OPERATOR = "11"; + const HASH = "12"; + const DELIVERY_PROFILE = "13"; + const ACTIVE_EDGE_VALIDATE = "14"; + const ANONYMOUS_IP = "15"; + const ASSET_TYPE = "16"; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaContainerFormat extends KalturaEnumBase +{ + const _3GP = "3gp"; + const APPLEHTTP = "applehttp"; + const AVI = "avi"; + const BMP = "bmp"; + const COPY = "copy"; + const FLV = "flv"; + const HLS = "hls"; + const ISMA = "isma"; + const ISMV = "ismv"; + const JPG = "jpg"; + const M2TS = "m2ts"; + const M4V = "m4v"; + const MKV = "mkv"; + const MOV = "mov"; + const MP3 = "mp3"; + const MP4 = "mp4"; + const MPEG = "mpeg"; + const MPEGTS = "mpegts"; + const MXF = "mxf"; + const OGG = "ogg"; + const OGV = "ogv"; + const PDF = "pdf"; + const PNG = "png"; + const SWF = "swf"; + const WAV = "wav"; + const WEBM = "webm"; + const WMA = "wma"; + const WMV = "wmv"; + const WVM = "wvm"; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaContextType extends KalturaEnumBase +{ + const PLAY = "1"; + const DOWNLOAD = "2"; + const THUMBNAIL = "3"; + const METADATA = "4"; + const EXPORT = "5"; + const SERVE = "6"; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaControlPanelCommandOrderBy extends KalturaEnumBase +{ + const CREATED_AT_ASC = "+createdAt"; + const UPDATED_AT_ASC = "+updatedAt"; + const CREATED_AT_DESC = "-createdAt"; + const UPDATED_AT_DESC = "-updatedAt"; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaConversionProfileAssetParamsOrderBy extends KalturaEnumBase +{ +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaConversionProfileOrderBy extends KalturaEnumBase +{ + const CREATED_AT_ASC = "+createdAt"; + const CREATED_AT_DESC = "-createdAt"; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaConversionProfileStatus extends KalturaEnumBase +{ + const DISABLED = "1"; + const ENABLED = "2"; + const DELETED = "3"; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaConversionProfileType extends KalturaEnumBase +{ + const MEDIA = "1"; + const LIVE_STREAM = "2"; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaDataEntryCompareAttribute extends KalturaEnumBase +{ + const ACCESS_CONTROL_ID = "accessControlId"; + const CREATED_AT = "createdAt"; + const END_DATE = "endDate"; + const MODERATION_COUNT = "moderationCount"; + const MODERATION_STATUS = "moderationStatus"; + const PARTNER_ID = "partnerId"; + const PARTNER_SORT_VALUE = "partnerSortValue"; + const RANK = "rank"; + const REPLACEMENT_STATUS = "replacementStatus"; + const START_DATE = "startDate"; + const STATUS = "status"; + const TOTAL_RANK = "totalRank"; + const TYPE = "type"; + const UPDATED_AT = "updatedAt"; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaDataEntryMatchAttribute extends KalturaEnumBase +{ + const ADMIN_TAGS = "adminTags"; + const CATEGORIES_IDS = "categoriesIds"; + const CREATOR_ID = "creatorId"; + const DESCRIPTION = "description"; + const GROUP_ID = "groupId"; + const ID = "id"; + const NAME = "name"; + const REFERENCE_ID = "referenceId"; + const REPLACED_ENTRY_ID = "replacedEntryId"; + const REPLACING_ENTRY_ID = "replacingEntryId"; + const SEARCH_TEXT = "searchText"; + const TAGS = "tags"; + const USER_ID = "userId"; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaDataEntryOrderBy extends KalturaEnumBase +{ + const CREATED_AT_ASC = "+createdAt"; + const END_DATE_ASC = "+endDate"; + const MODERATION_COUNT_ASC = "+moderationCount"; + const NAME_ASC = "+name"; + const PARTNER_SORT_VALUE_ASC = "+partnerSortValue"; + const RANK_ASC = "+rank"; + const RECENT_ASC = "+recent"; + const START_DATE_ASC = "+startDate"; + const TOTAL_RANK_ASC = "+totalRank"; + const UPDATED_AT_ASC = "+updatedAt"; + const WEIGHT_ASC = "+weight"; + const CREATED_AT_DESC = "-createdAt"; + const END_DATE_DESC = "-endDate"; + const MODERATION_COUNT_DESC = "-moderationCount"; + const NAME_DESC = "-name"; + const PARTNER_SORT_VALUE_DESC = "-partnerSortValue"; + const RANK_DESC = "-rank"; + const RECENT_DESC = "-recent"; + const START_DATE_DESC = "-startDate"; + const TOTAL_RANK_DESC = "-totalRank"; + const UPDATED_AT_DESC = "-updatedAt"; + const WEIGHT_DESC = "-weight"; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaDeliveryProfileAkamaiAppleHttpManifestOrderBy extends KalturaEnumBase +{ + const CREATED_AT_ASC = "+createdAt"; + const UPDATED_AT_ASC = "+updatedAt"; + const CREATED_AT_DESC = "-createdAt"; + const UPDATED_AT_DESC = "-updatedAt"; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaDeliveryProfileAkamaiHdsOrderBy extends KalturaEnumBase +{ + const CREATED_AT_ASC = "+createdAt"; + const UPDATED_AT_ASC = "+updatedAt"; + const CREATED_AT_DESC = "-createdAt"; + const UPDATED_AT_DESC = "-updatedAt"; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaDeliveryProfileAkamaiHttpOrderBy extends KalturaEnumBase +{ + const CREATED_AT_ASC = "+createdAt"; + const UPDATED_AT_ASC = "+updatedAt"; + const CREATED_AT_DESC = "-createdAt"; + const UPDATED_AT_DESC = "-updatedAt"; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaDeliveryProfileGenericAppleHttpOrderBy extends KalturaEnumBase +{ + const CREATED_AT_ASC = "+createdAt"; + const UPDATED_AT_ASC = "+updatedAt"; + const CREATED_AT_DESC = "-createdAt"; + const UPDATED_AT_DESC = "-updatedAt"; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaDeliveryProfileGenericHdsOrderBy extends KalturaEnumBase +{ + const CREATED_AT_ASC = "+createdAt"; + const UPDATED_AT_ASC = "+updatedAt"; + const CREATED_AT_DESC = "-createdAt"; + const UPDATED_AT_DESC = "-updatedAt"; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaDeliveryProfileGenericHttpOrderBy extends KalturaEnumBase +{ + const CREATED_AT_ASC = "+createdAt"; + const UPDATED_AT_ASC = "+updatedAt"; + const CREATED_AT_DESC = "-createdAt"; + const UPDATED_AT_DESC = "-updatedAt"; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaDeliveryProfileGenericRtmpOrderBy extends KalturaEnumBase +{ + const CREATED_AT_ASC = "+createdAt"; + const UPDATED_AT_ASC = "+updatedAt"; + const CREATED_AT_DESC = "-createdAt"; + const UPDATED_AT_DESC = "-updatedAt"; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaDeliveryProfileGenericSilverLightOrderBy extends KalturaEnumBase +{ + const CREATED_AT_ASC = "+createdAt"; + const UPDATED_AT_ASC = "+updatedAt"; + const CREATED_AT_DESC = "-createdAt"; + const UPDATED_AT_DESC = "-updatedAt"; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaDeliveryProfileLiveAppleHttpOrderBy extends KalturaEnumBase +{ + const CREATED_AT_ASC = "+createdAt"; + const UPDATED_AT_ASC = "+updatedAt"; + const CREATED_AT_DESC = "-createdAt"; + const UPDATED_AT_DESC = "-updatedAt"; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaDeliveryProfileOrderBy extends KalturaEnumBase +{ + const CREATED_AT_ASC = "+createdAt"; + const UPDATED_AT_ASC = "+updatedAt"; + const CREATED_AT_DESC = "-createdAt"; + const UPDATED_AT_DESC = "-updatedAt"; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaDeliveryProfileRtmpOrderBy extends KalturaEnumBase +{ + const CREATED_AT_ASC = "+createdAt"; + const UPDATED_AT_ASC = "+updatedAt"; + const CREATED_AT_DESC = "-createdAt"; + const UPDATED_AT_DESC = "-updatedAt"; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaDeliveryProfileType extends KalturaEnumBase +{ + const EDGE_CAST_HTTP = "edgeCast.EDGE_CAST_HTTP"; + const EDGE_CAST_RTMP = "edgeCast.EDGE_CAST_RTMP"; + const FORENSIC_WATERMARK_APPLE_HTTP = "forensicWatermark.FORENSIC_WATERMARK_APPLE_HTTP"; + const FORENSIC_WATERMARK_DASH = "forensicWatermark.FORENSIC_WATERMARK_DASH"; + const KONTIKI_HTTP = "kontiki.KONTIKI_HTTP"; + const UPLYNK_HTTP = "uplynk.UPLYNK_HTTP"; + const UPLYNK_RTMP = "uplynk.UPLYNK_RTMP"; + const VELOCIX_HDS = "velocix.VELOCIX_HDS"; + const VELOCIX_HLS = "velocix.VELOCIX_HLS"; + const APPLE_HTTP = "1"; + const HDS = "3"; + const HTTP = "4"; + const RTMP = "5"; + const RTSP = "6"; + const SILVER_LIGHT = "7"; + const AKAMAI_HLS_DIRECT = "10"; + const AKAMAI_HLS_MANIFEST = "11"; + const AKAMAI_HD = "12"; + const AKAMAI_HDS = "13"; + const AKAMAI_HTTP = "14"; + const AKAMAI_RTMP = "15"; + const AKAMAI_RTSP = "16"; + const AKAMAI_SS = "17"; + const GENERIC_HLS = "21"; + const GENERIC_HDS = "23"; + const GENERIC_HTTP = "24"; + const GENERIC_HLS_MANIFEST = "25"; + const GENERIC_HDS_MANIFEST = "26"; + const GENERIC_SS = "27"; + const GENERIC_RTMP = "28"; + const LEVEL3_HLS = "31"; + const LEVEL3_HTTP = "34"; + const LEVEL3_RTMP = "35"; + const LIMELIGHT_HTTP = "44"; + const LIMELIGHT_RTMP = "45"; + const LOCAL_PATH_APPLE_HTTP = "51"; + const LOCAL_PATH_HDS = "53"; + const LOCAL_PATH_HTTP = "54"; + const LOCAL_PATH_RTMP = "55"; + const VOD_PACKAGER_HLS = "61"; + const VOD_PACKAGER_HDS = "63"; + const VOD_PACKAGER_MSS = "67"; + const VOD_PACKAGER_DASH = "68"; + const VOD_PACKAGER_HLS_MANIFEST = "69"; + const LIVE_HLS = "1001"; + const LIVE_HDS = "1002"; + const LIVE_DASH = "1003"; + const LIVE_RTMP = "1005"; + const LIVE_HLS_TO_MULTICAST = "1006"; + const LIVE_PACKAGER_HLS = "1007"; + const LIVE_PACKAGER_HDS = "1008"; + const LIVE_PACKAGER_DASH = "1009"; + const LIVE_PACKAGER_MSS = "1010"; + const LIVE_AKAMAI_HDS = "1013"; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaDeliveryServerNodeOrderBy extends KalturaEnumBase +{ + const CREATED_AT_ASC = "+createdAt"; + const HEARTBEAT_TIME_ASC = "+heartbeatTime"; + const UPDATED_AT_ASC = "+updatedAt"; + const CREATED_AT_DESC = "-createdAt"; + const HEARTBEAT_TIME_DESC = "-heartbeatTime"; + const UPDATED_AT_DESC = "-updatedAt"; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaDocumentEntryCompareAttribute extends KalturaEnumBase +{ + const ACCESS_CONTROL_ID = "accessControlId"; + const CREATED_AT = "createdAt"; + const END_DATE = "endDate"; + const MODERATION_COUNT = "moderationCount"; + const MODERATION_STATUS = "moderationStatus"; + const PARTNER_ID = "partnerId"; + const PARTNER_SORT_VALUE = "partnerSortValue"; + const RANK = "rank"; + const REPLACEMENT_STATUS = "replacementStatus"; + const START_DATE = "startDate"; + const STATUS = "status"; + const TOTAL_RANK = "totalRank"; + const TYPE = "type"; + const UPDATED_AT = "updatedAt"; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaDocumentEntryMatchAttribute extends KalturaEnumBase +{ + const ADMIN_TAGS = "adminTags"; + const CATEGORIES_IDS = "categoriesIds"; + const CREATOR_ID = "creatorId"; + const DESCRIPTION = "description"; + const GROUP_ID = "groupId"; + const ID = "id"; + const NAME = "name"; + const REFERENCE_ID = "referenceId"; + const REPLACED_ENTRY_ID = "replacedEntryId"; + const REPLACING_ENTRY_ID = "replacingEntryId"; + const SEARCH_TEXT = "searchText"; + const TAGS = "tags"; + const USER_ID = "userId"; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaDrmSchemeName extends KalturaEnumBase +{ + const PLAYREADY_CENC = "drm.PLAYREADY_CENC"; + const WIDEVINE_CENC = "drm.WIDEVINE_CENC"; + const FAIRPLAY = "fairplay.FAIRPLAY"; + const PLAYREADY = "playReady.PLAYREADY"; + const WIDEVINE = "widevine.WIDEVINE"; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaDurationType extends KalturaEnumBase +{ + const LONG = "long"; + const MEDIUM = "medium"; + const NOT_AVAILABLE = "notavailable"; + const SHORT = "short"; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaESearchLanguage extends KalturaEnumBase +{ + const ARABIC = "Arabic"; + const BASQUE = "Basque"; + const BRAZILIAN = "Brazilian"; + const BULGARIAN = "Bulgarian"; + const CATALAN = "Catalan"; + const CHINESE = "Chinese"; + const CZECH = "Czech"; + const DANISH = "Danish"; + const DUTCH = "Dutch"; + const ENGLISH = "English"; + const FINNISH = "Finnish"; + const FRENCH = "French"; + const GALICIAN = "Galician"; + const GERMAN = "German"; + const GREEK = "Greek"; + const HINDI = "Hindi"; + const HUNGRIAN = "Hungarian"; + const INDONESIAN = "Indonesian"; + const ITALIAN = "Italian"; + const JAPANESE = "Japanese"; + const KOREAN = "Korean"; + const LATVIAN = "Latvian"; + const LITHUANIAN = "Lithuanian"; + const NORWEGIAN = "Norwegian"; + const PERSIAN = "Persian"; + const PORTUGUESE = "Prtuguese"; + const ROMANIAN = "Romanian"; + const RUSSIAN = "Russian"; + const SORANI = "Sorani"; + const SPANISH = "Spanish"; + const SWEDISH = "Swedish"; + const THAI = "Thai"; + const TURKISH = "Turkish"; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaEdgeServerNodeOrderBy extends KalturaEnumBase +{ + const CREATED_AT_ASC = "+createdAt"; + const HEARTBEAT_TIME_ASC = "+heartbeatTime"; + const UPDATED_AT_ASC = "+updatedAt"; + const CREATED_AT_DESC = "-createdAt"; + const HEARTBEAT_TIME_DESC = "-heartbeatTime"; + const UPDATED_AT_DESC = "-updatedAt"; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaEntryIdentifierField extends KalturaEnumBase +{ + const ID = "id"; + const REFERENCE_ID = "referenceId"; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaEntryReplacementStatus extends KalturaEnumBase +{ + const NONE = "0"; + const APPROVED_BUT_NOT_READY = "1"; + const READY_BUT_NOT_APPROVED = "2"; + const NOT_READY_AND_NOT_APPROVED = "3"; + const FAILED = "4"; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaEntryServerNodeOrderBy extends KalturaEnumBase +{ + const CREATED_AT_ASC = "+createdAt"; + const UPDATED_AT_ASC = "+updatedAt"; + const CREATED_AT_DESC = "-createdAt"; + const UPDATED_AT_DESC = "-updatedAt"; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaEntryServerNodeType extends KalturaEnumBase +{ + const LIVE_PRIMARY = "0"; + const LIVE_BACKUP = "1"; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaEntryStatus extends KalturaEnumBase +{ + const ERROR_IMPORTING = "-2"; + const ERROR_CONVERTING = "-1"; + const SCAN_FAILURE = "virusScan.ScanFailure"; + const IMPORT = "0"; + const INFECTED = "virusScan.Infected"; + const PRECONVERT = "1"; + const READY = "2"; + const DELETED = "3"; + const PENDING = "4"; + const MODERATE = "5"; + const BLOCKED = "6"; + const NO_CONTENT = "7"; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaEntryType extends KalturaEnumBase +{ + const AUTOMATIC = "-1"; + const CONFERENCE_ENTRY_SERVER = "conference.CONFERENCE_ENTRY_SERVER"; + const EXTERNAL_MEDIA = "externalMedia.externalMedia"; + const MEDIA_CLIP = "1"; + const MIX = "2"; + const PLAYLIST = "5"; + const DATA = "6"; + const LIVE_STREAM = "7"; + const LIVE_CHANNEL = "8"; + const DOCUMENT = "10"; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaExternalMediaEntryCompareAttribute extends KalturaEnumBase +{ + const ACCESS_CONTROL_ID = "accessControlId"; + const CREATED_AT = "createdAt"; + const END_DATE = "endDate"; + const LAST_PLAYED_AT = "lastPlayedAt"; + const MEDIA_DATE = "mediaDate"; + const MEDIA_TYPE = "mediaType"; + const MODERATION_COUNT = "moderationCount"; + const MODERATION_STATUS = "moderationStatus"; + const MS_DURATION = "msDuration"; + const PARTNER_ID = "partnerId"; + const PARTNER_SORT_VALUE = "partnerSortValue"; + const PLAYS = "plays"; + const RANK = "rank"; + const REPLACEMENT_STATUS = "replacementStatus"; + const START_DATE = "startDate"; + const STATUS = "status"; + const TOTAL_RANK = "totalRank"; + const TYPE = "type"; + const UPDATED_AT = "updatedAt"; + const VIEWS = "views"; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaExternalMediaEntryMatchAttribute extends KalturaEnumBase +{ + const ADMIN_TAGS = "adminTags"; + const CATEGORIES_IDS = "categoriesIds"; + const CREATOR_ID = "creatorId"; + const DESCRIPTION = "description"; + const DURATION_TYPE = "durationType"; + const FLAVOR_PARAMS_IDS = "flavorParamsIds"; + const GROUP_ID = "groupId"; + const ID = "id"; + const NAME = "name"; + const REFERENCE_ID = "referenceId"; + const REPLACED_ENTRY_ID = "replacedEntryId"; + const REPLACING_ENTRY_ID = "replacingEntryId"; + const SEARCH_TEXT = "searchText"; + const TAGS = "tags"; + const USER_ID = "userId"; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaFileAssetObjectType extends KalturaEnumBase +{ + const UI_CONF = "2"; + const ENTRY = "3"; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaFileAssetOrderBy extends KalturaEnumBase +{ + const CREATED_AT_ASC = "+createdAt"; + const UPDATED_AT_ASC = "+updatedAt"; + const CREATED_AT_DESC = "-createdAt"; + const UPDATED_AT_DESC = "-updatedAt"; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaFileAssetStatus extends KalturaEnumBase +{ + const PENDING = "0"; + const UPLOADING = "1"; + const READY = "2"; + const DELETED = "3"; + const ERROR = "4"; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaFileSyncObjectType extends KalturaEnumBase +{ + const DISTRIBUTION_PROFILE = "contentDistribution.DistributionProfile"; + const ENTRY_DISTRIBUTION = "contentDistribution.EntryDistribution"; + const GENERIC_DISTRIBUTION_ACTION = "contentDistribution.GenericDistributionAction"; + const EMAIL_NOTIFICATION_TEMPLATE = "emailNotification.EmailNotificationTemplate"; + const HTTP_NOTIFICATION_TEMPLATE = "httpNotification.HttpNotificationTemplate"; + const ENTRY = "1"; + const UICONF = "2"; + const BATCHJOB = "3"; + const ASSET = "4"; + const FLAVOR_ASSET = "4"; + const METADATA = "5"; + const METADATA_PROFILE = "6"; + const SYNDICATION_FEED = "7"; + const CONVERSION_PROFILE = "8"; + const FILE_ASSET = "9"; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaFlavorAssetOrderBy extends KalturaEnumBase +{ + const CREATED_AT_ASC = "+createdAt"; + const DELETED_AT_ASC = "+deletedAt"; + const SIZE_ASC = "+size"; + const UPDATED_AT_ASC = "+updatedAt"; + const CREATED_AT_DESC = "-createdAt"; + const DELETED_AT_DESC = "-deletedAt"; + const SIZE_DESC = "-size"; + const UPDATED_AT_DESC = "-updatedAt"; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaFlavorParamsOrderBy extends KalturaEnumBase +{ +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaFlavorParamsOutputOrderBy extends KalturaEnumBase +{ +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaGenericSyndicationFeedOrderBy extends KalturaEnumBase +{ + const CREATED_AT_ASC = "+createdAt"; + const NAME_ASC = "+name"; + const PLAYLIST_ID_ASC = "+playlistId"; + const TYPE_ASC = "+type"; + const UPDATED_AT_ASC = "+updatedAt"; + const CREATED_AT_DESC = "-createdAt"; + const NAME_DESC = "-name"; + const PLAYLIST_ID_DESC = "-playlistId"; + const TYPE_DESC = "-type"; + const UPDATED_AT_DESC = "-updatedAt"; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaGenericXsltSyndicationFeedOrderBy extends KalturaEnumBase +{ + const CREATED_AT_ASC = "+createdAt"; + const NAME_ASC = "+name"; + const PLAYLIST_ID_ASC = "+playlistId"; + const TYPE_ASC = "+type"; + const UPDATED_AT_ASC = "+updatedAt"; + const CREATED_AT_DESC = "-createdAt"; + const NAME_DESC = "-name"; + const PLAYLIST_ID_DESC = "-playlistId"; + const TYPE_DESC = "-type"; + const UPDATED_AT_DESC = "-updatedAt"; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaGeoCoderType extends KalturaEnumBase +{ + const KALTURA = "1"; + const MAX_MIND = "2"; + const DIGITAL_ELEMENT = "3"; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaGoogleSyndicationFeedAdultValues extends KalturaEnumBase +{ + const NO = "No"; + const YES = "Yes"; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaGoogleVideoSyndicationFeedOrderBy extends KalturaEnumBase +{ + const CREATED_AT_ASC = "+createdAt"; + const NAME_ASC = "+name"; + const PLAYLIST_ID_ASC = "+playlistId"; + const TYPE_ASC = "+type"; + const UPDATED_AT_ASC = "+updatedAt"; + const CREATED_AT_DESC = "-createdAt"; + const NAME_DESC = "-name"; + const PLAYLIST_ID_DESC = "-playlistId"; + const TYPE_DESC = "-type"; + const UPDATED_AT_DESC = "-updatedAt"; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaGroupUserOrderBy extends KalturaEnumBase +{ + const CREATED_AT_ASC = "+createdAt"; + const UPDATED_AT_ASC = "+updatedAt"; + const CREATED_AT_DESC = "-createdAt"; + const UPDATED_AT_DESC = "-updatedAt"; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaITunesSyndicationFeedAdultValues extends KalturaEnumBase +{ + const CLEAN = "clean"; + const NO = "no"; + const YES = "yes"; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaITunesSyndicationFeedCategories extends KalturaEnumBase +{ + const ARTS = "Arts"; + const ARTS_DESIGN = "Arts/Design"; + const ARTS_FASHION_BEAUTY = "Arts/Fashion & Beauty"; + const ARTS_FOOD = "Arts/Food"; + const ARTS_LITERATURE = "Arts/Literature"; + const ARTS_PERFORMING_ARTS = "Arts/Performing Arts"; + const ARTS_VISUAL_ARTS = "Arts/Visual Arts"; + const BUSINESS = "Business"; + const BUSINESS_BUSINESS_NEWS = "Business/Business News"; + const BUSINESS_CAREERS = "Business/Careers"; + const BUSINESS_INVESTING = "Business/Investing"; + const BUSINESS_MANAGEMENT_MARKETING = "Business/Management & Marketing"; + const BUSINESS_SHOPPING = "Business/Shopping"; + const COMEDY = "Comedy"; + const EDUCATION = "Education"; + const EDUCATION_TECHNOLOGY = "Education/Education Technology"; + const EDUCATION_HIGHER_EDUCATION = "Education/Higher Education"; + const EDUCATION_K_12 = "Education/K-12"; + const EDUCATION_LANGUAGE_COURSES = "Education/Language Courses"; + const EDUCATION_TRAINING = "Education/Training"; + const GAMES_HOBBIES = "Games & Hobbies"; + const GAMES_HOBBIES_AUTOMOTIVE = "Games & Hobbies/Automotive"; + const GAMES_HOBBIES_AVIATION = "Games & Hobbies/Aviation"; + const GAMES_HOBBIES_HOBBIES = "Games & Hobbies/Hobbies"; + const GAMES_HOBBIES_OTHER_GAMES = "Games & Hobbies/Other Games"; + const GAMES_HOBBIES_VIDEO_GAMES = "Games & Hobbies/Video Games"; + const GOVERNMENT_ORGANIZATIONS = "Government & Organizations"; + const GOVERNMENT_ORGANIZATIONS_LOCAL = "Government & Organizations/Local"; + const GOVERNMENT_ORGANIZATIONS_NATIONAL = "Government & Organizations/National"; + const GOVERNMENT_ORGANIZATIONS_NON_PROFIT = "Government & Organizations/Non-Profit"; + const GOVERNMENT_ORGANIZATIONS_REGIONAL = "Government & Organizations/Regional"; + const HEALTH = "Health"; + const HEALTH_ALTERNATIVE_HEALTH = "Health/Alternative Health"; + const HEALTH_FITNESS_NUTRITION = "Health/Fitness & Nutrition"; + const HEALTH_SELF_HELP = "Health/Self-Help"; + const HEALTH_SEXUALITY = "Health/Sexuality"; + const KIDS_FAMILY = "Kids & Family"; + const MUSIC = "Music"; + const NEWS_POLITICS = "News & Politics"; + const RELIGION_SPIRITUALITY = "Religion & Spirituality"; + const RELIGION_SPIRITUALITY_BUDDHISM = "Religion & Spirituality/Buddhism"; + const RELIGION_SPIRITUALITY_CHRISTIANITY = "Religion & Spirituality/Christianity"; + const RELIGION_SPIRITUALITY_HINDUISM = "Religion & Spirituality/Hinduism"; + const RELIGION_SPIRITUALITY_ISLAM = "Religion & Spirituality/Islam"; + const RELIGION_SPIRITUALITY_JUDAISM = "Religion & Spirituality/Judaism"; + const RELIGION_SPIRITUALITY_OTHER = "Religion & Spirituality/Other"; + const RELIGION_SPIRITUALITY_SPIRITUALITY = "Religion & Spirituality/Spirituality"; + const SCIENCE_MEDICINE = "Science & Medicine"; + const SCIENCE_MEDICINE_MEDICINE = "Science & Medicine/Medicine"; + const SCIENCE_MEDICINE_NATURAL_SCIENCES = "Science & Medicine/Natural Sciences"; + const SCIENCE_MEDICINE_SOCIAL_SCIENCES = "Science & Medicine/Social Sciences"; + const SOCIETY_CULTURE = "Society & Culture"; + const SOCIETY_CULTURE_HISTORY = "Society & Culture/History"; + const SOCIETY_CULTURE_PERSONAL_JOURNALS = "Society & Culture/Personal Journals"; + const SOCIETY_CULTURE_PHILOSOPHY = "Society & Culture/Philosophy"; + const SOCIETY_CULTURE_PLACES_TRAVEL = "Society & Culture/Places & Travel"; + const SPORTS_RECREATION = "Sports & Recreation"; + const SPORTS_RECREATION_AMATEUR = "Sports & Recreation/Amateur"; + const SPORTS_RECREATION_COLLEGE_HIGH_SCHOOL = "Sports & Recreation/College & High School"; + const SPORTS_RECREATION_OUTDOOR = "Sports & Recreation/Outdoor"; + const SPORTS_RECREATION_PROFESSIONAL = "Sports & Recreation/Professional"; + const TV_FILM = "TV & Film"; + const TECHNOLOGY = "Technology"; + const TECHNOLOGY_GADGETS = "Technology/Gadgets"; + const TECHNOLOGY_PODCASTING = "Technology/Podcasting"; + const TECHNOLOGY_SOFTWARE_HOW_TO = "Technology/Software How-To"; + const TECHNOLOGY_TECH_NEWS = "Technology/Tech News"; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaITunesSyndicationFeedOrderBy extends KalturaEnumBase +{ + const CREATED_AT_ASC = "+createdAt"; + const NAME_ASC = "+name"; + const PLAYLIST_ID_ASC = "+playlistId"; + const TYPE_ASC = "+type"; + const UPDATED_AT_ASC = "+updatedAt"; + const CREATED_AT_DESC = "-createdAt"; + const NAME_DESC = "-name"; + const PLAYLIST_ID_DESC = "-playlistId"; + const TYPE_DESC = "-type"; + const UPDATED_AT_DESC = "-updatedAt"; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaLanguage extends KalturaEnumBase +{ + const ABQ = "Abaza"; + const AB = "Abkhazian"; + const ABE = "Abnaki Western"; + const ABU = "Abure"; + const ACN = "Achang"; + const ACE = "Achinese"; + const ACT = "Achterhooks"; + const ACV = "Achumawi"; + const ADJ = "Adioukrou"; + const ADY = "Adyghe; Adygei"; + const ADT = "Adynyamathanha"; + const AAL = "Afade"; + const AA = "Afar"; + const AF = "Afrikaans"; + const AGQ = "Aghem"; + const AGX = "Aghul"; + const AGU = "Aguacateco"; + const AGR = "Aguaruna"; + const AIN = "Ainu (Japan)"; + const AKK = "Akkadian"; + const AKL = "Aklanon"; + const AKU = "Akum"; + const AKZ = "Alabama"; + const SQ = "Albanian"; + const ALN = "Albanian (Gheg)"; + const ALS = "Albanian (Tosk)"; + const ALE = "Aleut"; + const ALQ = "Algonquin"; + const ALT = "Altai (Southern)"; + const AM = "Amharic"; + const RME = "Angloromani"; + const APJ = "Apache (Jicarilla)"; + const APW = "Apache (Western)"; + const AR = "Arabic"; + const ARB = "Arabic (standard)"; + const B_T = "Arabic Tunisian Spoken"; + const ARC = "Aramaic"; + const SAM = "Aramaic Samaritan"; + const ARP = "Arapaho"; + const ARN = "Araucanian"; + const ARI = "Arikara"; + const HY = "Armenian"; + const RUP = "Aromanian"; + const AS_ = "Assamese"; + const ASB = "Assiniboine"; + const AII = "Assyrian Neo-Aramaic"; + const AST = "Asturian"; + const ATJ = "Atikamekw"; + const AWA = "Awadhi"; + const AY = "Aymara"; + const AZ = "Azerbaijani"; + const BCR = "Babine"; + const BFQ = "Badaga"; + const BDJ = "Bai"; + const BAN = "Balinese"; + const BCC = "Balochi Southern"; + const BFT = "Balti"; + const BAL = "Baluchi"; + const BAS = "Basa (Cameroon)"; + const BA = "Bashkir"; + const EU = "Basque"; + const BAR = "Bavarian"; + const BEA = "Beaver"; + const BEJ = "Beja"; + const BEM = "Bemba (Zambia)"; + const BN = "Bengali (Bangla)"; + const BEW = "Betawi"; + const KAP = "Bezhta"; + const BHB = "Bhili"; + const BHO = "Bhojpuri"; + const DZ = "Bhutani"; + const BH = "Bihari"; + const BIK = "Bikol"; + const BIN = "Bini"; + const BPY = "Bishnupriya Manipuri"; + const BI = "Bislama"; + const BR = "Breton"; + const BUG = "Buginese"; + const BG = "Bulgarian"; + const BUA = "Buriat"; + const MY = "Burmese"; + const BE = "Byelorussian (Belarusian)"; + const CAD = "Caddo"; + const KM = "Cambodian"; + const YUE = "Cantonese"; + const CRX = "Carrier"; + const CAF = "Carrier Southern"; + const CA = "Catalan"; + const CHC = "Catawba"; + const CAY = "Cayuga"; + const CEB = "Cebuano"; + const CHG = "Chagatai"; + const CLD = "Chaldean Neo-Aramaic"; + const CHR = "Cherokee"; + const CHY = "Cheyenne"; + const CIC = "Chickasaw"; + const CLC = "Chilcotin"; + const ZH = "Chinese"; + const CHN = "Chinook jargon"; + const CHP = "Chipewyan"; + const CIW = "Chippewa"; + const CHO = "Choctaw"; + const CAA = "Chor"; + const CKT = "Chukot"; + const CIM = "Cimbrian"; + const CLM = "Clallam Klallam"; + const COJ = "Cochimi"; + const COC = "Cocopa"; + const KSH = "Colognian"; + const COM = "Comanche"; + const SWB = "Comorian"; + const COO = "Comox"; + const COP = "Coptic"; + const CO = "Corsican"; + const MUS = "Creek"; + const CRH = "Crimean Tatar"; + const HR = "Croatian"; + const CUP = "Cupeo"; + const CS = "Czech"; + const DAK = "Dakota"; + const DA = "Danish"; + const DAR = "Dargwa"; + const PRD = "Dari (Persian)"; + const GBZ = "Dari Zoroastrian"; + const DHV = "Dehu"; + const DEL = "Delaware"; + const DIN = "Dinka"; + const DOI = "Dogri (generic)"; + const DGR = "Dogrib"; + const DLG = "Dolgan"; + const DOH = "Dong"; + const DUA = "Duala"; + const DNG = "Dungan"; + const NL = "Dutch"; + const DYU = "Dyula"; + const EEE = "E"; + const EGL = "Emilian"; + const EN = "English"; + const EN_US = "English (American)"; + const EN_GB = "English (British)"; + const ENM = "English Middle (1100-1500)"; + const MYV = "Erzya"; + const EO = "Esperanto"; + const ET = "Estonian"; + const EVE = "Even"; + const EVN = "Evenki"; + const FO = "Faeroese"; + const FAX = "Fala"; + const FAN = "Fang (Equatorial Guinea)"; + const FA = "Farsi"; + const FJ = "Fiji"; + const FIL = "Filipino"; + const FI = "Finnish"; + const FIT = "Finnish (Tornedalen)"; + const FON = "Fon"; + const FRP = "Franco-Prove"; + const FRK = "Frankish"; + const FR = "French"; + const FY = "Frisian"; + const FRR = "Frisian Northern"; + const FUR = "Friulian"; + const FVR = "Fur"; + const GAA = "Ga"; + const GV = "Gaelic (Manx)"; + const GD = "Gaelic (Scottish)"; + const GAG = "Gagauz"; + const GL = "Galician"; + const GAN = "Gan"; + const GEZ = "Geez"; + const KA = "Georgian"; + const DE = "German"; + const GEH = "German Hutterite"; + const PDC = "German Pennsylvania"; + const GIL = "Gilbertese"; + const NIV = "Gilyak Nivkh"; + const GIT = "Gitxsan"; + const EL = "Greek"; + const GRC = "Greek Ancient (to 1453)"; + const KL = "Greenlandic"; + const GN = "Guarani"; + const GU = "Gujarati"; + const GWI = "Gwichin"; + const HAI = "Haida"; + const HNN = "Hainanese"; + const HAS = "Haisla"; + const HAK = "Hakka"; + const HUR = "Halkomelem"; + const HAA = "Han"; + const HNI = "Hani"; + const HA = "Hausa"; + const HAW = "Hawaiian"; + const HE = "Hebrew"; + const IW = "Hebrew"; + const HEI = "Heiltsuk"; + const HID = "Hidatsa"; + const HIL = "Hiligaynon"; + const HI = "Hindi"; + const HMN = "Hmong"; + const HKK = "Hokkien"; + const HOP = "Hopi"; + const CZH = "Huizhou Chinese"; + const HU = "Hungarian"; + const IS = "Icelandic"; + const KPO = "Ikposo"; + const ILO = "Iloko"; + const SMN = "Inari Sami"; + const IN = "Indonesian"; + const ID = "Indonesian"; + const IZH = "Ingrian"; + const INH = "Ingush"; + const IA = "Interlingua"; + const IE = "Interlingue"; + const IU = "Inuktitut"; + const IK = "Inupiak"; + const GA = "Irish"; + const IT = "Italian"; + const ITL = "Itelmen"; + const JA = "Japanese"; + const JV = "Javanese"; + const CJY = "Jinyu Chinese"; + const KAJ = "Jju"; + const JCT = "Judeo-Crimean Tatar"; + const JGE = "Judeo-Georgian"; + const JUT = "Jutish"; + const KBD = "Kabardian"; + const KEA = "Kabuverdianu"; + const KAB = "Kabyle"; + const KFR = "Kachchi"; + const KJV = "Kaikavian literary language (Kajkavian)"; + const XAL = "Kalmyk Oirat"; + const KN = "Kannada"; + const KSK = "Kansa"; + const KRC = "Karachay-Balkar"; + const KIM = "Karagas"; + const KDR = "Karaim"; + const KAA = "Karakalpak"; + const KRL = "Karelian"; + const KS = "Kashmiri"; + const CSB = "Kashubian"; + const KKZ = "Kaska"; + const KAW = "Kawi"; + const KK = "Kazakh"; + const KJH = "Khakas"; + const KLJ = "Khalaj Turkic"; + const KCA = "Khanty"; + const KHA = "Khasi"; + const KXM = "Khmer Northern"; + const KIC = "Kickapoo"; + const RW = "Kinyarwanda (Ruanda)"; + const KIO = "Kiowa"; + const KY = "Kirghiz"; + const RN = "Kirundi (Rundi)"; + const TLH = "Klingon tlhIngan-Hol"; + const KFA = "Kodava"; + const KOI = "Komi-Permyak"; + const KOK = "Konkani (generic)"; + const KNN = "Konkani (specific)"; + const GOM = "Konkani Goan"; + const KO = "Korean"; + const KPY = "Koryak"; + const KOS = "Kosraean"; + const AVK = "Kotava"; + const KPE = "Kpelle"; + const DIH = "Kumiai"; + const KUM = "Kumyk"; + const KU = "Kurdish"; + const KUT = "Kutenai"; + const KWK = "Kwakiutl"; + const GDM = "Laal"; + const LLD = "Ladin"; + const LAD = "Ladino"; + const LAH = "Lahnda"; + const LHU = "Lahu"; + const LBE = "Lak"; + const LKI = "Laki"; + const LKT = "Lakota"; + const LO = "Laothian"; + const LA = "Latin"; + const LV = "Latvian (Lettish)"; + const LZZ = "Laz"; + const LEZ = "Lezghian"; + const LIJ = "Ligurian"; + const LIL = "Lillooet"; + const LIF = "Limbu"; + const LI = "Limburgish ( Limburger)"; + const LN = "Lingala"; + const LT = "Lithuanian"; + const JBO = "Lojban"; + const LOM = "Loma (Liberia)"; + const LMO = "Lombard"; + const NDS = "Low German Low Saxon"; + const LOZ = "Lozi"; + const LUA = "Luba-Lulua"; + const LUQ = "Lucumi"; + const LUD = "Ludian"; + const SMJ = "Lule Sami"; + const LUN = "Lunda"; + const LUO = "Luo (Kenya and Tanzania)"; + const LUT = "Lushootseed"; + const MK = "Macedonian"; + const MAD = "Madurese"; + const MAG = "Magahi"; + const MAI = "Maithili"; + const MG = "Malagasy"; + const MS = "Malay"; + const ML = "Malayalam"; + const PQM = "Malecite-Passamaquoddy"; + const MT = "Maltese"; + const MNC = "Manchu"; + const MID = "Mandaic"; + const MHQ = "Mandan"; + const CMN = "Mandarin Chinese"; + const MNS = "Mansi"; + const MI = "Maori"; + const MRW = "Maranao"; + const MR = "Marathi"; + const CHM = "Mari (Russia)"; + const MWR = "Marwari"; + const MAS = "Masai"; + const MFY = "Mayo"; + const MNI = "Meitei"; + const MEN = "Mende (Sierra Leone)"; + const MEZ = "Menominee"; + const MIC = "Micmac"; + const MNP = "Min Bei Chinese"; + const CDO = "Min Dong Chinese"; + const MIN = "Minangkabau"; + const XMF = "Mingrelian"; + const MWL = "Mirandese"; + const MOH = "Mohawk"; + const MDF = "Moksha"; + const MO = "Moldavian"; + const MNW = "Mon"; + const MN = "Mongolian"; + const MFE = "Morisyen"; + const MOS = "Mossi"; + const MXI = "Mozarabic"; + const MU = "Multilingual"; + const MTQ = "Muong"; + const NAQ = "Nama (Namibia)"; + const GLD = "Nanai"; + const NSK = "Naskapi"; + const NA = "Nauru"; + const NAP = "Neapolitan"; + const NE = "Nepali"; + const NEW_ = "Newari Nepal Bhasa"; + const NIO = "Nganasan"; + const NCG = "Nisgaa"; + const NIU = "Niuean"; + const NOG = "Nogai"; + const NON = "Norse Old"; + const NSO = "Northern Sotho Pedi Sepedi"; + const NO = "Norwegian"; + const NOV = "Novial"; + const NYM = "Nyamwezi"; + const NYO = "Nyoro"; + const NYS = "Nyungah"; + const OC = "Occitan"; + const OJC = "Ojibwa Central"; + const OJG = "Ojibwa Eastern"; + const OJB = "Ojibwa Northwestern"; + const OJS = "Ojibwa Severn"; + const OJW = "Ojibwa Western"; + const RYU = "Okinawan Central"; + const ANG = "Old English"; + const ONE = "Oneida"; + const ONO = "Onondaga"; + const OR_ = "Oriya"; + const OM = "Oromo (Afan, Galla)"; + const OTW = "Ottawa"; + const PPI = "Paipai"; + const PAU = "Palauan"; + const PAM = "Pampanga"; + const PAG = "Pangasinan"; + const PAP = "Papiamento"; + const PS = "Pashto (Pushto)"; + const PRP = "Persian"; + const PRS = "Persian (Dari)"; + const PFL = "Pfaelzisch"; + const PCD = "Picard"; + const PMS = "Piedmontese"; + const MYP = "Pirah"; + const PIH = "Pitcairn-Norfolk"; + const PDT = "Plautdietsch"; + const PL = "Polish"; + const PNT = "Pontic"; + const PT = "Portuguese"; + const POT = "Potawatomi"; + const PRG = "Prussian"; + const FUC = "Pulaar"; + const PA = "Punjabi"; + const QXQ = "Qashqai"; + const ALC = "Qawasqar"; + const QU = "Quechua"; + const QUC = "Quich Central"; + const RAP = "Rapanui"; + const RAR = "Rarotongan"; + const QTZ = "Reserved for local use."; + const RM = "Rhaeto-Romance"; + const RGN = "Romagnol"; + const RMF = "Romani Kalo Finnish"; + const RMO = "Romani Sinte"; + const RO = "Romanian"; + const RUO = "Romanian Istro"; + const RUQ = "Romanian Megleno"; + const ROM = "Romany"; + const RCF = "Runion Creole French"; + const RU = "Russian"; + const RUE = "Rusyn"; + const ACF = "Saint Lucian Creole French"; + const SAH = "Sakha"; + const SLR = "Salar"; + const STR = "Salish Straits"; + const SJD = "Sami Kildin"; + const SM = "Samoan"; + const SG = "Sangro"; + const SA = "Sanskrit"; + const SAT = "Santali"; + const SRM = "Saramaccan"; + const SDC = "Sardinian Sassarese"; + const STQ = "Saterland Frisian"; + const SXU = "Saxon Upper"; + const SCO = "Scots"; + const SEC = "Sechelt"; + const TRV = "Seediq"; + const SEK = "Sekani"; + const SEL = "Selkup"; + const SEE = "Seneca"; + const SR = "Serbian"; + const SH = "Serbo-Croatian"; + const SEI = "Seri"; + const ST = "Sesotho"; + const TN = "Setswana"; + const SJW = "Shawnee"; + const SN = "Shona"; + const CJS = "Shor"; + const SHH = "Shoshoni"; + const SHS = "Shuswap"; + const SCN = "Sicilian"; + const SID = "Sidamo"; + const SZL = "Silesian"; + const SD = "Sindhi"; + const SI = "Sinhalese"; + const SS = "Siswati"; + const SMS = "Skolt Sami"; + const SCS = "Slavey North"; + const XSL = "Slavey South"; + const SK = "Slovak"; + const SL = "Slovenian"; + const SO = "Somali"; + const SNK = "Soninke"; + const DSB = "Sorbian Lower"; + const HSB = "Sorbian Upper"; + const SMA = "Southern Sami"; + const ES = "Spanish"; + const SRN = "Sranan"; + const STO = "Stoney"; + const XSV = "Sudovian"; + const SUX = "Sumerian"; + const SU = "Sundanese"; + const SVA = "Svan"; + const SWG = "Swabian"; + const SW = "Swahili (Kiswahili)"; + const SV = "Swedish"; + const SWL = "Swedish Sign Language"; + const GSW = "Swiss German Alemannic Alsatian"; + const SYR = "Syriac"; + const TAB = "Tabassaran"; + const SHY = "Tachawit"; + const SHI = "Tachelhit"; + const TL = "Tagalog"; + const TBW = "Tagbanwa"; + const TGX = "Tagish"; + const THT = "Tahltan"; + const TDD = "Tai Na"; + const TG = "Tajik"; + const TLY = "Talysh"; + const TTQ = "Tamajaq Tawallammat"; + const TAQ = "Tamasheq"; + const TZM = "Tamazight Central Atlas"; + const TA = "Tamil"; + const TAR = "Tarahumara Central"; + const TTT = "Tat Muslim"; + const TT = "Tatar"; + const TE = "Telugu"; + const TEO = "Teo Chew"; + const TET = "Tetum"; + const TH = "Thai"; + const NOD = "Thai (Northern)"; + const TTS = "Thai Northeastern"; + const THP = "Thompson"; + const BO = "Tibetan"; + const TIG = "Tigre"; + const TI = "Tigrinya"; + const TLI = "Tlingit"; + const TCX = "Toda"; + const OOD = "Tohono Oodham"; + const TPI = "Tok Pisin"; + const TO = "Tonga"; + const TOG = "Tonga (Nyasa)"; + const DDO = "Tsez"; + const TSI = "Tsimshian"; + const TS = "Tsonga"; + const TCY = "Tulu"; + const TUM = "Tumbuka"; + const MZB = "Tumzabt"; + const TPN = "Tupinamb"; + const TUV = "Turkana"; + const TR = "Turkish"; + const OTA = "Turkish Ottoman"; + const TK = "Turkmen"; + const TUS = "Tuscarora"; + const TVL = "Tuvalu"; + const TYV = "Tuvinian"; + const TW = "Twi"; + const UBY = "Ubykh"; + const UDI = "Udi"; + const UDM = "Udmurt"; + const UG = "Uighur"; + const UK = "Ukrainian"; + const UN = "Undefined"; + const UR = "Urdu"; + const UUM = "Urum"; + const UZ = "Uzbek"; + const VEC = "Venetian"; + const VEP = "Veps"; + const VI = "Vietnamese"; + const VO = "Volapuk"; + const VOR = "Voro"; + const VOT = "Votic"; + const VRO = "Vro"; + const AUC = "Waorani"; + const WAR = "Waray (Philippines)"; + const CY = "Welsh"; + const PES = "Western Farsi"; + const AMW = "Western Neo-Aramaic"; + const WIY = "Wiyot"; + const WO = "Wolof"; + const WUU = "Wu Chinese"; + const WYM = "Wymysorys"; + const XH = "Xhosa"; + const AME = "Yanesha"; + const YI = "Yiddish"; + const JI = "Yiddish"; + const YO = "Yoruba"; + const ZAI = "Zapotec Isthmus"; + const DJE = "Zarma"; + const ZU = "Zulu"; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaLanguageCode extends KalturaEnumBase +{ + const AA = "aa"; + const AB = "ab"; + const AF = "af"; + const AM = "am"; + const AR = "ar"; + const AS_ = "as"; + const AY = "ay"; + const AZ = "az"; + const BA = "ba"; + const BE = "be"; + const BG = "bg"; + const BH = "bh"; + const BI = "bi"; + const BN = "bn"; + const BO = "bo"; + const BR = "br"; + const CA = "ca"; + const CO = "co"; + const CS = "cs"; + const CY = "cy"; + const DA = "da"; + const DE = "de"; + const DZ = "dz"; + const EL = "el"; + const EN = "en"; + const EN_GB = "en_gb"; + const EN_US = "en_us"; + const EO = "eo"; + const ES = "es"; + const ET = "et"; + const EU = "eu"; + const FA = "fa"; + const FI = "fi"; + const FJ = "fj"; + const FO = "fo"; + const FR = "fr"; + const FY = "fy"; + const GA = "ga"; + const GD = "gd"; + const GL = "gl"; + const GN = "gn"; + const GU = "gu"; + const GV = "gv"; + const HA = "ha"; + const HE = "he"; + const HI = "hi"; + const HR = "hr"; + const HU = "hu"; + const HY = "hy"; + const IA = "ia"; + const ID = "id"; + const IE = "ie"; + const IK = "ik"; + const IN = "in"; + const IS = "is"; + const IT = "it"; + const IU = "iu"; + const IW = "iw"; + const JA = "ja"; + const JI = "ji"; + const JV = "jv"; + const KA = "ka"; + const KK = "kk"; + const KL = "kl"; + const KM = "km"; + const KN = "kn"; + const KO = "ko"; + const KS = "ks"; + const KU = "ku"; + const KY = "ky"; + const LA = "la"; + const LI = "li"; + const LN = "ln"; + const LO = "lo"; + const LT = "lt"; + const LV = "lv"; + const MG = "mg"; + const MI = "mi"; + const MK = "mk"; + const ML = "ml"; + const MN = "mn"; + const MO = "mo"; + const MR = "mr"; + const MS = "ms"; + const MT = "mt"; + const MU = "multilingual"; + const MY = "my"; + const NA = "na"; + const NE = "ne"; + const NL = "nl"; + const NO = "no"; + const OC = "oc"; + const OM = "om"; + const OR_ = "or"; + const PA = "pa"; + const PL = "pl"; + const PS = "ps"; + const PT = "pt"; + const QU = "qu"; + const RM = "rm"; + const RN = "rn"; + const RO = "ro"; + const RU = "ru"; + const RW = "rw"; + const SA = "sa"; + const SD = "sd"; + const SG = "sg"; + const SH = "sh"; + const SI = "si"; + const SK = "sk"; + const SL = "sl"; + const SM = "sm"; + const SN = "sn"; + const SO = "so"; + const SQ = "sq"; + const SR = "sr"; + const SS = "ss"; + const ST = "st"; + const SU = "su"; + const SV = "sv"; + const SW = "sw"; + const TA = "ta"; + const TE = "te"; + const TG = "tg"; + const TH = "th"; + const TI = "ti"; + const TK = "tk"; + const TL = "tl"; + const TN = "tn"; + const TO = "to"; + const TR = "tr"; + const TS = "ts"; + const TT = "tt"; + const TW = "tw"; + const UG = "ug"; + const UK = "uk"; + const UR = "ur"; + const UZ = "uz"; + const VI = "vi"; + const VO = "vo"; + const WO = "wo"; + const XH = "xh"; + const YI = "yi"; + const YO = "yo"; + const ZH = "zh"; + const ZU = "zu"; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaLiveAssetOrderBy extends KalturaEnumBase +{ + const CREATED_AT_ASC = "+createdAt"; + const DELETED_AT_ASC = "+deletedAt"; + const SIZE_ASC = "+size"; + const UPDATED_AT_ASC = "+updatedAt"; + const CREATED_AT_DESC = "-createdAt"; + const DELETED_AT_DESC = "-deletedAt"; + const SIZE_DESC = "-size"; + const UPDATED_AT_DESC = "-updatedAt"; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaLiveChannelCompareAttribute extends KalturaEnumBase +{ + const ACCESS_CONTROL_ID = "accessControlId"; + const CREATED_AT = "createdAt"; + const END_DATE = "endDate"; + const LAST_PLAYED_AT = "lastPlayedAt"; + const MEDIA_DATE = "mediaDate"; + const MEDIA_TYPE = "mediaType"; + const MODERATION_COUNT = "moderationCount"; + const MODERATION_STATUS = "moderationStatus"; + const MS_DURATION = "msDuration"; + const PARTNER_ID = "partnerId"; + const PARTNER_SORT_VALUE = "partnerSortValue"; + const PLAYS = "plays"; + const RANK = "rank"; + const REPLACEMENT_STATUS = "replacementStatus"; + const START_DATE = "startDate"; + const STATUS = "status"; + const TOTAL_RANK = "totalRank"; + const TYPE = "type"; + const UPDATED_AT = "updatedAt"; + const VIEWS = "views"; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaLiveChannelMatchAttribute extends KalturaEnumBase +{ + const ADMIN_TAGS = "adminTags"; + const CATEGORIES_IDS = "categoriesIds"; + const CREATOR_ID = "creatorId"; + const DESCRIPTION = "description"; + const DURATION_TYPE = "durationType"; + const FLAVOR_PARAMS_IDS = "flavorParamsIds"; + const GROUP_ID = "groupId"; + const ID = "id"; + const NAME = "name"; + const REFERENCE_ID = "referenceId"; + const REPLACED_ENTRY_ID = "replacedEntryId"; + const REPLACING_ENTRY_ID = "replacingEntryId"; + const SEARCH_TEXT = "searchText"; + const TAGS = "tags"; + const USER_ID = "userId"; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaLiveChannelOrderBy extends KalturaEnumBase +{ + const CREATED_AT_ASC = "+createdAt"; + const DURATION_ASC = "+duration"; + const END_DATE_ASC = "+endDate"; + const FIRST_BROADCAST_ASC = "+firstBroadcast"; + const LAST_BROADCAST_ASC = "+lastBroadcast"; + const LAST_PLAYED_AT_ASC = "+lastPlayedAt"; + const MEDIA_TYPE_ASC = "+mediaType"; + const MODERATION_COUNT_ASC = "+moderationCount"; + const NAME_ASC = "+name"; + const PARTNER_SORT_VALUE_ASC = "+partnerSortValue"; + const PLAYS_ASC = "+plays"; + const RANK_ASC = "+rank"; + const RECENT_ASC = "+recent"; + const START_DATE_ASC = "+startDate"; + const TOTAL_RANK_ASC = "+totalRank"; + const UPDATED_AT_ASC = "+updatedAt"; + const VIEWS_ASC = "+views"; + const WEIGHT_ASC = "+weight"; + const CREATED_AT_DESC = "-createdAt"; + const DURATION_DESC = "-duration"; + const END_DATE_DESC = "-endDate"; + const FIRST_BROADCAST_DESC = "-firstBroadcast"; + const LAST_BROADCAST_DESC = "-lastBroadcast"; + const LAST_PLAYED_AT_DESC = "-lastPlayedAt"; + const MEDIA_TYPE_DESC = "-mediaType"; + const MODERATION_COUNT_DESC = "-moderationCount"; + const NAME_DESC = "-name"; + const PARTNER_SORT_VALUE_DESC = "-partnerSortValue"; + const PLAYS_DESC = "-plays"; + const RANK_DESC = "-rank"; + const RECENT_DESC = "-recent"; + const START_DATE_DESC = "-startDate"; + const TOTAL_RANK_DESC = "-totalRank"; + const UPDATED_AT_DESC = "-updatedAt"; + const VIEWS_DESC = "-views"; + const WEIGHT_DESC = "-weight"; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaLiveChannelSegmentOrderBy extends KalturaEnumBase +{ + const CREATED_AT_ASC = "+createdAt"; + const START_TIME_ASC = "+startTime"; + const UPDATED_AT_ASC = "+updatedAt"; + const CREATED_AT_DESC = "-createdAt"; + const START_TIME_DESC = "-startTime"; + const UPDATED_AT_DESC = "-updatedAt"; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaLiveChannelSegmentStatus extends KalturaEnumBase +{ + const ACTIVE = "2"; + const DELETED = "3"; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaLiveChannelSegmentTriggerType extends KalturaEnumBase +{ + const CHANNEL_RELATIVE = "1"; + const ABSOLUTE_TIME = "2"; + const SEGMENT_START_RELATIVE = "3"; + const SEGMENT_END_RELATIVE = "4"; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaLiveChannelSegmentType extends KalturaEnumBase +{ + const VIDEO_AND_AUDIO = "1"; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaLiveEntryCompareAttribute extends KalturaEnumBase +{ + const ACCESS_CONTROL_ID = "accessControlId"; + const CREATED_AT = "createdAt"; + const END_DATE = "endDate"; + const LAST_PLAYED_AT = "lastPlayedAt"; + const MEDIA_DATE = "mediaDate"; + const MEDIA_TYPE = "mediaType"; + const MODERATION_COUNT = "moderationCount"; + const MODERATION_STATUS = "moderationStatus"; + const MS_DURATION = "msDuration"; + const PARTNER_ID = "partnerId"; + const PARTNER_SORT_VALUE = "partnerSortValue"; + const PLAYS = "plays"; + const RANK = "rank"; + const REPLACEMENT_STATUS = "replacementStatus"; + const START_DATE = "startDate"; + const STATUS = "status"; + const TOTAL_RANK = "totalRank"; + const TYPE = "type"; + const UPDATED_AT = "updatedAt"; + const VIEWS = "views"; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaLiveEntryMatchAttribute extends KalturaEnumBase +{ + const ADMIN_TAGS = "adminTags"; + const CATEGORIES_IDS = "categoriesIds"; + const CREATOR_ID = "creatorId"; + const DESCRIPTION = "description"; + const DURATION_TYPE = "durationType"; + const FLAVOR_PARAMS_IDS = "flavorParamsIds"; + const GROUP_ID = "groupId"; + const ID = "id"; + const NAME = "name"; + const REFERENCE_ID = "referenceId"; + const REPLACED_ENTRY_ID = "replacedEntryId"; + const REPLACING_ENTRY_ID = "replacingEntryId"; + const SEARCH_TEXT = "searchText"; + const TAGS = "tags"; + const USER_ID = "userId"; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaLiveEntryOrderBy extends KalturaEnumBase +{ + const CREATED_AT_ASC = "+createdAt"; + const DURATION_ASC = "+duration"; + const END_DATE_ASC = "+endDate"; + const FIRST_BROADCAST_ASC = "+firstBroadcast"; + const LAST_BROADCAST_ASC = "+lastBroadcast"; + const LAST_PLAYED_AT_ASC = "+lastPlayedAt"; + const MEDIA_TYPE_ASC = "+mediaType"; + const MODERATION_COUNT_ASC = "+moderationCount"; + const NAME_ASC = "+name"; + const PARTNER_SORT_VALUE_ASC = "+partnerSortValue"; + const PLAYS_ASC = "+plays"; + const RANK_ASC = "+rank"; + const RECENT_ASC = "+recent"; + const START_DATE_ASC = "+startDate"; + const TOTAL_RANK_ASC = "+totalRank"; + const UPDATED_AT_ASC = "+updatedAt"; + const VIEWS_ASC = "+views"; + const WEIGHT_ASC = "+weight"; + const CREATED_AT_DESC = "-createdAt"; + const DURATION_DESC = "-duration"; + const END_DATE_DESC = "-endDate"; + const FIRST_BROADCAST_DESC = "-firstBroadcast"; + const LAST_BROADCAST_DESC = "-lastBroadcast"; + const LAST_PLAYED_AT_DESC = "-lastPlayedAt"; + const MEDIA_TYPE_DESC = "-mediaType"; + const MODERATION_COUNT_DESC = "-moderationCount"; + const NAME_DESC = "-name"; + const PARTNER_SORT_VALUE_DESC = "-partnerSortValue"; + const PLAYS_DESC = "-plays"; + const RANK_DESC = "-rank"; + const RECENT_DESC = "-recent"; + const START_DATE_DESC = "-startDate"; + const TOTAL_RANK_DESC = "-totalRank"; + const UPDATED_AT_DESC = "-updatedAt"; + const VIEWS_DESC = "-views"; + const WEIGHT_DESC = "-weight"; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaLiveEntryServerNodeOrderBy extends KalturaEnumBase +{ + const CREATED_AT_ASC = "+createdAt"; + const UPDATED_AT_ASC = "+updatedAt"; + const CREATED_AT_DESC = "-createdAt"; + const UPDATED_AT_DESC = "-updatedAt"; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaLiveParamsOrderBy extends KalturaEnumBase +{ +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaLiveReportOrderBy extends KalturaEnumBase +{ + const NAME_ASC = "+name"; + const AUDIENCE_DESC = "-audience"; + const EVENT_TIME_DESC = "-eventTime"; + const PLAYS_DESC = "-plays"; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaLiveReportType extends KalturaEnumBase +{ + const ENTRY_GEO_TIME_LINE = "ENTRY_GEO_TIME_LINE"; + const ENTRY_SYNDICATION_TOTAL = "ENTRY_SYNDICATION_TOTAL"; + const ENTRY_TIME_LINE = "ENTRY_TIME_LINE"; + const ENTRY_TOTAL = "ENTRY_TOTAL"; + const PARTNER_TOTAL = "PARTNER_TOTAL"; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaLiveStreamAdminEntryCompareAttribute extends KalturaEnumBase +{ + const ACCESS_CONTROL_ID = "accessControlId"; + const CREATED_AT = "createdAt"; + const END_DATE = "endDate"; + const LAST_PLAYED_AT = "lastPlayedAt"; + const MEDIA_DATE = "mediaDate"; + const MEDIA_TYPE = "mediaType"; + const MODERATION_COUNT = "moderationCount"; + const MODERATION_STATUS = "moderationStatus"; + const MS_DURATION = "msDuration"; + const PARTNER_ID = "partnerId"; + const PARTNER_SORT_VALUE = "partnerSortValue"; + const PLAYS = "plays"; + const RANK = "rank"; + const REPLACEMENT_STATUS = "replacementStatus"; + const START_DATE = "startDate"; + const STATUS = "status"; + const TOTAL_RANK = "totalRank"; + const TYPE = "type"; + const UPDATED_AT = "updatedAt"; + const VIEWS = "views"; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaLiveStreamAdminEntryMatchAttribute extends KalturaEnumBase +{ + const ADMIN_TAGS = "adminTags"; + const CATEGORIES_IDS = "categoriesIds"; + const CREATOR_ID = "creatorId"; + const DESCRIPTION = "description"; + const DURATION_TYPE = "durationType"; + const FLAVOR_PARAMS_IDS = "flavorParamsIds"; + const GROUP_ID = "groupId"; + const ID = "id"; + const NAME = "name"; + const REFERENCE_ID = "referenceId"; + const REPLACED_ENTRY_ID = "replacedEntryId"; + const REPLACING_ENTRY_ID = "replacingEntryId"; + const SEARCH_TEXT = "searchText"; + const TAGS = "tags"; + const USER_ID = "userId"; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaLiveStreamAdminEntryOrderBy extends KalturaEnumBase +{ + const CREATED_AT_ASC = "+createdAt"; + const DURATION_ASC = "+duration"; + const END_DATE_ASC = "+endDate"; + const FIRST_BROADCAST_ASC = "+firstBroadcast"; + const LAST_BROADCAST_ASC = "+lastBroadcast"; + const LAST_PLAYED_AT_ASC = "+lastPlayedAt"; + const MEDIA_TYPE_ASC = "+mediaType"; + const MODERATION_COUNT_ASC = "+moderationCount"; + const NAME_ASC = "+name"; + const PARTNER_SORT_VALUE_ASC = "+partnerSortValue"; + const PLAYS_ASC = "+plays"; + const RANK_ASC = "+rank"; + const RECENT_ASC = "+recent"; + const START_DATE_ASC = "+startDate"; + const TOTAL_RANK_ASC = "+totalRank"; + const UPDATED_AT_ASC = "+updatedAt"; + const VIEWS_ASC = "+views"; + const WEIGHT_ASC = "+weight"; + const CREATED_AT_DESC = "-createdAt"; + const DURATION_DESC = "-duration"; + const END_DATE_DESC = "-endDate"; + const FIRST_BROADCAST_DESC = "-firstBroadcast"; + const LAST_BROADCAST_DESC = "-lastBroadcast"; + const LAST_PLAYED_AT_DESC = "-lastPlayedAt"; + const MEDIA_TYPE_DESC = "-mediaType"; + const MODERATION_COUNT_DESC = "-moderationCount"; + const NAME_DESC = "-name"; + const PARTNER_SORT_VALUE_DESC = "-partnerSortValue"; + const PLAYS_DESC = "-plays"; + const RANK_DESC = "-rank"; + const RECENT_DESC = "-recent"; + const START_DATE_DESC = "-startDate"; + const TOTAL_RANK_DESC = "-totalRank"; + const UPDATED_AT_DESC = "-updatedAt"; + const VIEWS_DESC = "-views"; + const WEIGHT_DESC = "-weight"; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaLiveStreamEntryCompareAttribute extends KalturaEnumBase +{ + const ACCESS_CONTROL_ID = "accessControlId"; + const CREATED_AT = "createdAt"; + const END_DATE = "endDate"; + const LAST_PLAYED_AT = "lastPlayedAt"; + const MEDIA_DATE = "mediaDate"; + const MEDIA_TYPE = "mediaType"; + const MODERATION_COUNT = "moderationCount"; + const MODERATION_STATUS = "moderationStatus"; + const MS_DURATION = "msDuration"; + const PARTNER_ID = "partnerId"; + const PARTNER_SORT_VALUE = "partnerSortValue"; + const PLAYS = "plays"; + const RANK = "rank"; + const REPLACEMENT_STATUS = "replacementStatus"; + const START_DATE = "startDate"; + const STATUS = "status"; + const TOTAL_RANK = "totalRank"; + const TYPE = "type"; + const UPDATED_AT = "updatedAt"; + const VIEWS = "views"; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaLiveStreamEntryMatchAttribute extends KalturaEnumBase +{ + const ADMIN_TAGS = "adminTags"; + const CATEGORIES_IDS = "categoriesIds"; + const CREATOR_ID = "creatorId"; + const DESCRIPTION = "description"; + const DURATION_TYPE = "durationType"; + const FLAVOR_PARAMS_IDS = "flavorParamsIds"; + const GROUP_ID = "groupId"; + const ID = "id"; + const NAME = "name"; + const REFERENCE_ID = "referenceId"; + const REPLACED_ENTRY_ID = "replacedEntryId"; + const REPLACING_ENTRY_ID = "replacingEntryId"; + const SEARCH_TEXT = "searchText"; + const TAGS = "tags"; + const USER_ID = "userId"; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaLiveStreamEntryOrderBy extends KalturaEnumBase +{ + const CREATED_AT_ASC = "+createdAt"; + const DURATION_ASC = "+duration"; + const END_DATE_ASC = "+endDate"; + const FIRST_BROADCAST_ASC = "+firstBroadcast"; + const LAST_BROADCAST_ASC = "+lastBroadcast"; + const LAST_PLAYED_AT_ASC = "+lastPlayedAt"; + const MEDIA_TYPE_ASC = "+mediaType"; + const MODERATION_COUNT_ASC = "+moderationCount"; + const NAME_ASC = "+name"; + const PARTNER_SORT_VALUE_ASC = "+partnerSortValue"; + const PLAYS_ASC = "+plays"; + const RANK_ASC = "+rank"; + const RECENT_ASC = "+recent"; + const START_DATE_ASC = "+startDate"; + const TOTAL_RANK_ASC = "+totalRank"; + const UPDATED_AT_ASC = "+updatedAt"; + const VIEWS_ASC = "+views"; + const WEIGHT_ASC = "+weight"; + const CREATED_AT_DESC = "-createdAt"; + const DURATION_DESC = "-duration"; + const END_DATE_DESC = "-endDate"; + const FIRST_BROADCAST_DESC = "-firstBroadcast"; + const LAST_BROADCAST_DESC = "-lastBroadcast"; + const LAST_PLAYED_AT_DESC = "-lastPlayedAt"; + const MEDIA_TYPE_DESC = "-mediaType"; + const MODERATION_COUNT_DESC = "-moderationCount"; + const NAME_DESC = "-name"; + const PARTNER_SORT_VALUE_DESC = "-partnerSortValue"; + const PLAYS_DESC = "-plays"; + const RANK_DESC = "-rank"; + const RECENT_DESC = "-recent"; + const START_DATE_DESC = "-startDate"; + const TOTAL_RANK_DESC = "-totalRank"; + const UPDATED_AT_DESC = "-updatedAt"; + const VIEWS_DESC = "-views"; + const WEIGHT_DESC = "-weight"; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaMailType extends KalturaEnumBase +{ + const MAIL_TYPE_KALTURA_NEWSLETTER = "10"; + const MAIL_TYPE_ADDED_TO_FAVORITES = "11"; + const MAIL_TYPE_ADDED_TO_CLIP_FAVORITES = "12"; + const MAIL_TYPE_NEW_COMMENT_IN_PROFILE = "13"; + const MAIL_TYPE_CLIP_ADDED_YOUR_KALTURA = "20"; + const MAIL_TYPE_VIDEO_ADDED = "21"; + const MAIL_TYPE_ROUGHCUT_CREATED = "22"; + const MAIL_TYPE_ADDED_KALTURA_TO_YOUR_FAVORITES = "23"; + const MAIL_TYPE_NEW_COMMENT_IN_KALTURA = "24"; + const MAIL_TYPE_CLIP_ADDED = "30"; + const MAIL_TYPE_VIDEO_CREATED = "31"; + const MAIL_TYPE_ADDED_KALTURA_TO_HIS_FAVORITES = "32"; + const MAIL_TYPE_NEW_COMMENT_IN_KALTURA_YOU_CONTRIBUTED = "33"; + const MAIL_TYPE_CLIP_CONTRIBUTED = "40"; + const MAIL_TYPE_ROUGHCUT_CREATED_SUBSCRIBED = "41"; + const MAIL_TYPE_ADDED_KALTURA_TO_HIS_FAVORITES_SUBSCRIBED = "42"; + const MAIL_TYPE_NEW_COMMENT_IN_KALTURA_YOU_SUBSCRIBED = "43"; + const MAIL_TYPE_REGISTER_CONFIRM = "50"; + const MAIL_TYPE_PASSWORD_RESET = "51"; + const MAIL_TYPE_LOGIN_MAIL_RESET = "52"; + const MAIL_TYPE_REGISTER_CONFIRM_VIDEO_SERVICE = "54"; + const MAIL_TYPE_VIDEO_READY = "60"; + const MAIL_TYPE_VIDEO_IS_READY = "62"; + const MAIL_TYPE_BULK_DOWNLOAD_READY = "63"; + const MAIL_TYPE_BULKUPLOAD_FINISHED = "64"; + const MAIL_TYPE_BULKUPLOAD_FAILED = "65"; + const MAIL_TYPE_BULKUPLOAD_ABORTED = "66"; + const MAIL_TYPE_NOTIFY_ERR = "70"; + const MAIL_TYPE_ACCOUNT_UPGRADE_CONFIRM = "80"; + const MAIL_TYPE_VIDEO_SERVICE_NOTICE = "81"; + const MAIL_TYPE_VIDEO_SERVICE_NOTICE_LIMIT_REACHED = "82"; + const MAIL_TYPE_VIDEO_SERVICE_NOTICE_ACCOUNT_LOCKED = "83"; + const MAIL_TYPE_VIDEO_SERVICE_NOTICE_ACCOUNT_DELETED = "84"; + const MAIL_TYPE_VIDEO_SERVICE_NOTICE_UPGRADE_OFFER = "85"; + const MAIL_TYPE_ACCOUNT_REACTIVE_CONFIRM = "86"; + const MAIL_TYPE_SYSTEM_USER_RESET_PASSWORD = "110"; + const MAIL_TYPE_SYSTEM_USER_RESET_PASSWORD_SUCCESS = "111"; + const MAIL_TYPE_SYSTEM_USER_NEW_PASSWORD = "112"; + const MAIL_TYPE_SYSTEM_USER_CREDENTIALS_SAVED = "113"; + const MAIL_TYPE_LIVE_REPORT_EXPORT_SUCCESS = "130"; + const MAIL_TYPE_LIVE_REPORT_EXPORT_FAILURE = "131"; + const MAIL_TYPE_LIVE_REPORT_EXPORT_ABORT = "132"; + const MAIL_TYPE_USERS_CSV = "133"; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaMatchConditionType extends KalturaEnumBase +{ + const MATCH_ANY = "1"; + const MATCH_ALL = "2"; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaMediaEntryCompareAttribute extends KalturaEnumBase +{ + const ACCESS_CONTROL_ID = "accessControlId"; + const CREATED_AT = "createdAt"; + const END_DATE = "endDate"; + const LAST_PLAYED_AT = "lastPlayedAt"; + const MEDIA_DATE = "mediaDate"; + const MEDIA_TYPE = "mediaType"; + const MODERATION_COUNT = "moderationCount"; + const MODERATION_STATUS = "moderationStatus"; + const MS_DURATION = "msDuration"; + const PARTNER_ID = "partnerId"; + const PARTNER_SORT_VALUE = "partnerSortValue"; + const PLAYS = "plays"; + const RANK = "rank"; + const REPLACEMENT_STATUS = "replacementStatus"; + const START_DATE = "startDate"; + const STATUS = "status"; + const TOTAL_RANK = "totalRank"; + const TYPE = "type"; + const UPDATED_AT = "updatedAt"; + const VIEWS = "views"; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaMediaEntryMatchAttribute extends KalturaEnumBase +{ + const ADMIN_TAGS = "adminTags"; + const CATEGORIES_IDS = "categoriesIds"; + const CREATOR_ID = "creatorId"; + const DESCRIPTION = "description"; + const DURATION_TYPE = "durationType"; + const FLAVOR_PARAMS_IDS = "flavorParamsIds"; + const GROUP_ID = "groupId"; + const ID = "id"; + const NAME = "name"; + const REFERENCE_ID = "referenceId"; + const REPLACED_ENTRY_ID = "replacedEntryId"; + const REPLACING_ENTRY_ID = "replacingEntryId"; + const SEARCH_TEXT = "searchText"; + const TAGS = "tags"; + const USER_ID = "userId"; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaMediaEntryOrderBy extends KalturaEnumBase +{ + const CREATED_AT_ASC = "+createdAt"; + const DURATION_ASC = "+duration"; + const END_DATE_ASC = "+endDate"; + const LAST_PLAYED_AT_ASC = "+lastPlayedAt"; + const MEDIA_TYPE_ASC = "+mediaType"; + const MODERATION_COUNT_ASC = "+moderationCount"; + const NAME_ASC = "+name"; + const PARTNER_SORT_VALUE_ASC = "+partnerSortValue"; + const PLAYS_ASC = "+plays"; + const RANK_ASC = "+rank"; + const RECENT_ASC = "+recent"; + const START_DATE_ASC = "+startDate"; + const TOTAL_RANK_ASC = "+totalRank"; + const UPDATED_AT_ASC = "+updatedAt"; + const VIEWS_ASC = "+views"; + const WEIGHT_ASC = "+weight"; + const CREATED_AT_DESC = "-createdAt"; + const DURATION_DESC = "-duration"; + const END_DATE_DESC = "-endDate"; + const LAST_PLAYED_AT_DESC = "-lastPlayedAt"; + const MEDIA_TYPE_DESC = "-mediaType"; + const MODERATION_COUNT_DESC = "-moderationCount"; + const NAME_DESC = "-name"; + const PARTNER_SORT_VALUE_DESC = "-partnerSortValue"; + const PLAYS_DESC = "-plays"; + const RANK_DESC = "-rank"; + const RECENT_DESC = "-recent"; + const START_DATE_DESC = "-startDate"; + const TOTAL_RANK_DESC = "-totalRank"; + const UPDATED_AT_DESC = "-updatedAt"; + const VIEWS_DESC = "-views"; + const WEIGHT_DESC = "-weight"; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaMediaFlavorParamsOrderBy extends KalturaEnumBase +{ +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaMediaFlavorParamsOutputOrderBy extends KalturaEnumBase +{ +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaMediaInfoOrderBy extends KalturaEnumBase +{ +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaMediaParserType extends KalturaEnumBase +{ + const MEDIAINFO = "0"; + const REMOTE_MEDIAINFO = "remoteMediaInfo.RemoteMediaInfo"; + const FFMPEG = "1"; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaMediaServerNodeOrderBy extends KalturaEnumBase +{ + const CREATED_AT_ASC = "+createdAt"; + const HEARTBEAT_TIME_ASC = "+heartbeatTime"; + const UPDATED_AT_ASC = "+updatedAt"; + const CREATED_AT_DESC = "-createdAt"; + const HEARTBEAT_TIME_DESC = "-heartbeatTime"; + const UPDATED_AT_DESC = "-updatedAt"; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaMixEntryCompareAttribute extends KalturaEnumBase +{ + const ACCESS_CONTROL_ID = "accessControlId"; + const CREATED_AT = "createdAt"; + const END_DATE = "endDate"; + const LAST_PLAYED_AT = "lastPlayedAt"; + const MODERATION_COUNT = "moderationCount"; + const MODERATION_STATUS = "moderationStatus"; + const MS_DURATION = "msDuration"; + const PARTNER_ID = "partnerId"; + const PARTNER_SORT_VALUE = "partnerSortValue"; + const PLAYS = "plays"; + const RANK = "rank"; + const REPLACEMENT_STATUS = "replacementStatus"; + const START_DATE = "startDate"; + const STATUS = "status"; + const TOTAL_RANK = "totalRank"; + const TYPE = "type"; + const UPDATED_AT = "updatedAt"; + const VIEWS = "views"; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaMixEntryMatchAttribute extends KalturaEnumBase +{ + const ADMIN_TAGS = "adminTags"; + const CATEGORIES_IDS = "categoriesIds"; + const CREATOR_ID = "creatorId"; + const DESCRIPTION = "description"; + const DURATION_TYPE = "durationType"; + const GROUP_ID = "groupId"; + const ID = "id"; + const NAME = "name"; + const REFERENCE_ID = "referenceId"; + const REPLACED_ENTRY_ID = "replacedEntryId"; + const REPLACING_ENTRY_ID = "replacingEntryId"; + const SEARCH_TEXT = "searchText"; + const TAGS = "tags"; + const USER_ID = "userId"; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaMixEntryOrderBy extends KalturaEnumBase +{ + const CREATED_AT_ASC = "+createdAt"; + const DURATION_ASC = "+duration"; + const END_DATE_ASC = "+endDate"; + const LAST_PLAYED_AT_ASC = "+lastPlayedAt"; + const MODERATION_COUNT_ASC = "+moderationCount"; + const NAME_ASC = "+name"; + const PARTNER_SORT_VALUE_ASC = "+partnerSortValue"; + const PLAYS_ASC = "+plays"; + const RANK_ASC = "+rank"; + const RECENT_ASC = "+recent"; + const START_DATE_ASC = "+startDate"; + const TOTAL_RANK_ASC = "+totalRank"; + const UPDATED_AT_ASC = "+updatedAt"; + const VIEWS_ASC = "+views"; + const WEIGHT_ASC = "+weight"; + const CREATED_AT_DESC = "-createdAt"; + const DURATION_DESC = "-duration"; + const END_DATE_DESC = "-endDate"; + const LAST_PLAYED_AT_DESC = "-lastPlayedAt"; + const MODERATION_COUNT_DESC = "-moderationCount"; + const NAME_DESC = "-name"; + const PARTNER_SORT_VALUE_DESC = "-partnerSortValue"; + const PLAYS_DESC = "-plays"; + const RANK_DESC = "-rank"; + const RECENT_DESC = "-recent"; + const START_DATE_DESC = "-startDate"; + const TOTAL_RANK_DESC = "-totalRank"; + const UPDATED_AT_DESC = "-updatedAt"; + const VIEWS_DESC = "-views"; + const WEIGHT_DESC = "-weight"; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaModerationFlagStatus extends KalturaEnumBase +{ + const PENDING = "1"; + const MODERATED = "2"; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaModerationObjectType extends KalturaEnumBase +{ + const ENTRY = "2"; + const USER = "3"; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaPartnerOrderBy extends KalturaEnumBase +{ + const ADMIN_EMAIL_ASC = "+adminEmail"; + const ADMIN_NAME_ASC = "+adminName"; + const CREATED_AT_ASC = "+createdAt"; + const ID_ASC = "+id"; + const NAME_ASC = "+name"; + const STATUS_ASC = "+status"; + const WEBSITE_ASC = "+website"; + const ADMIN_EMAIL_DESC = "-adminEmail"; + const ADMIN_NAME_DESC = "-adminName"; + const CREATED_AT_DESC = "-createdAt"; + const ID_DESC = "-id"; + const NAME_DESC = "-name"; + const STATUS_DESC = "-status"; + const WEBSITE_DESC = "-website"; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaPermissionItemOrderBy extends KalturaEnumBase +{ + const CREATED_AT_ASC = "+createdAt"; + const ID_ASC = "+id"; + const UPDATED_AT_ASC = "+updatedAt"; + const CREATED_AT_DESC = "-createdAt"; + const ID_DESC = "-id"; + const UPDATED_AT_DESC = "-updatedAt"; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaPermissionItemType extends KalturaEnumBase +{ + const API_ACTION_ITEM = "kApiActionPermissionItem"; + const API_PARAMETER_ITEM = "kApiParameterPermissionItem"; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaPermissionOrderBy extends KalturaEnumBase +{ + const CREATED_AT_ASC = "+createdAt"; + const ID_ASC = "+id"; + const NAME_ASC = "+name"; + const UPDATED_AT_ASC = "+updatedAt"; + const CREATED_AT_DESC = "-createdAt"; + const ID_DESC = "-id"; + const NAME_DESC = "-name"; + const UPDATED_AT_DESC = "-updatedAt"; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaPlayableEntryCompareAttribute extends KalturaEnumBase +{ + const ACCESS_CONTROL_ID = "accessControlId"; + const CREATED_AT = "createdAt"; + const END_DATE = "endDate"; + const LAST_PLAYED_AT = "lastPlayedAt"; + const MODERATION_COUNT = "moderationCount"; + const MODERATION_STATUS = "moderationStatus"; + const MS_DURATION = "msDuration"; + const PARTNER_ID = "partnerId"; + const PARTNER_SORT_VALUE = "partnerSortValue"; + const PLAYS = "plays"; + const RANK = "rank"; + const REPLACEMENT_STATUS = "replacementStatus"; + const START_DATE = "startDate"; + const STATUS = "status"; + const TOTAL_RANK = "totalRank"; + const TYPE = "type"; + const UPDATED_AT = "updatedAt"; + const VIEWS = "views"; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaPlayableEntryMatchAttribute extends KalturaEnumBase +{ + const ADMIN_TAGS = "adminTags"; + const CATEGORIES_IDS = "categoriesIds"; + const CREATOR_ID = "creatorId"; + const DESCRIPTION = "description"; + const DURATION_TYPE = "durationType"; + const GROUP_ID = "groupId"; + const ID = "id"; + const NAME = "name"; + const REFERENCE_ID = "referenceId"; + const REPLACED_ENTRY_ID = "replacedEntryId"; + const REPLACING_ENTRY_ID = "replacingEntryId"; + const SEARCH_TEXT = "searchText"; + const TAGS = "tags"; + const USER_ID = "userId"; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaPlayableEntryOrderBy extends KalturaEnumBase +{ + const CREATED_AT_ASC = "+createdAt"; + const DURATION_ASC = "+duration"; + const END_DATE_ASC = "+endDate"; + const LAST_PLAYED_AT_ASC = "+lastPlayedAt"; + const MODERATION_COUNT_ASC = "+moderationCount"; + const NAME_ASC = "+name"; + const PARTNER_SORT_VALUE_ASC = "+partnerSortValue"; + const PLAYS_ASC = "+plays"; + const RANK_ASC = "+rank"; + const RECENT_ASC = "+recent"; + const START_DATE_ASC = "+startDate"; + const TOTAL_RANK_ASC = "+totalRank"; + const UPDATED_AT_ASC = "+updatedAt"; + const VIEWS_ASC = "+views"; + const WEIGHT_ASC = "+weight"; + const CREATED_AT_DESC = "-createdAt"; + const DURATION_DESC = "-duration"; + const END_DATE_DESC = "-endDate"; + const LAST_PLAYED_AT_DESC = "-lastPlayedAt"; + const MODERATION_COUNT_DESC = "-moderationCount"; + const NAME_DESC = "-name"; + const PARTNER_SORT_VALUE_DESC = "-partnerSortValue"; + const PLAYS_DESC = "-plays"; + const RANK_DESC = "-rank"; + const RECENT_DESC = "-recent"; + const START_DATE_DESC = "-startDate"; + const TOTAL_RANK_DESC = "-totalRank"; + const UPDATED_AT_DESC = "-updatedAt"; + const VIEWS_DESC = "-views"; + const WEIGHT_DESC = "-weight"; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaPlaybackProtocol extends KalturaEnumBase +{ + const APPLE_HTTP = "applehttp"; + const APPLE_HTTP_TO_MC = "applehttp_to_mc"; + const AUTO = "auto"; + const AKAMAI_HD = "hdnetwork"; + const AKAMAI_HDS = "hdnetworkmanifest"; + const HDS = "hds"; + const HLS = "hls"; + const HTTP = "http"; + const MPEG_DASH = "mpegdash"; + const MULTICAST_SL = "multicast_silverlight"; + const RTMP = "rtmp"; + const RTSP = "rtsp"; + const SILVER_LIGHT = "sl"; + const URL = "url"; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaPlaylistCompareAttribute extends KalturaEnumBase +{ + const ACCESS_CONTROL_ID = "accessControlId"; + const CREATED_AT = "createdAt"; + const END_DATE = "endDate"; + const MODERATION_COUNT = "moderationCount"; + const MODERATION_STATUS = "moderationStatus"; + const PARTNER_ID = "partnerId"; + const PARTNER_SORT_VALUE = "partnerSortValue"; + const RANK = "rank"; + const REPLACEMENT_STATUS = "replacementStatus"; + const START_DATE = "startDate"; + const STATUS = "status"; + const TOTAL_RANK = "totalRank"; + const TYPE = "type"; + const UPDATED_AT = "updatedAt"; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaPlaylistMatchAttribute extends KalturaEnumBase +{ + const ADMIN_TAGS = "adminTags"; + const CATEGORIES_IDS = "categoriesIds"; + const CREATOR_ID = "creatorId"; + const DESCRIPTION = "description"; + const GROUP_ID = "groupId"; + const ID = "id"; + const NAME = "name"; + const REFERENCE_ID = "referenceId"; + const REPLACED_ENTRY_ID = "replacedEntryId"; + const REPLACING_ENTRY_ID = "replacingEntryId"; + const SEARCH_TEXT = "searchText"; + const TAGS = "tags"; + const USER_ID = "userId"; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaPlaylistOrderBy extends KalturaEnumBase +{ + const CREATED_AT_ASC = "+createdAt"; + const END_DATE_ASC = "+endDate"; + const MODERATION_COUNT_ASC = "+moderationCount"; + const NAME_ASC = "+name"; + const PARTNER_SORT_VALUE_ASC = "+partnerSortValue"; + const RANK_ASC = "+rank"; + const RECENT_ASC = "+recent"; + const START_DATE_ASC = "+startDate"; + const TOTAL_RANK_ASC = "+totalRank"; + const UPDATED_AT_ASC = "+updatedAt"; + const WEIGHT_ASC = "+weight"; + const CREATED_AT_DESC = "-createdAt"; + const END_DATE_DESC = "-endDate"; + const MODERATION_COUNT_DESC = "-moderationCount"; + const NAME_DESC = "-name"; + const PARTNER_SORT_VALUE_DESC = "-partnerSortValue"; + const RANK_DESC = "-rank"; + const RECENT_DESC = "-recent"; + const START_DATE_DESC = "-startDate"; + const TOTAL_RANK_DESC = "-totalRank"; + const UPDATED_AT_DESC = "-updatedAt"; + const WEIGHT_DESC = "-weight"; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaQuizUserEntryOrderBy extends KalturaEnumBase +{ + const CREATED_AT_ASC = "+createdAt"; + const UPDATED_AT_ASC = "+updatedAt"; + const CREATED_AT_DESC = "-createdAt"; + const UPDATED_AT_DESC = "-updatedAt"; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaReportInterval extends KalturaEnumBase +{ + const DAYS = "days"; + const MONTHS = "months"; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaReportOrderBy extends KalturaEnumBase +{ + const CREATED_AT_ASC = "+createdAt"; + const CREATED_AT_DESC = "-createdAt"; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaReportType extends KalturaEnumBase +{ + const QUIZ = "quiz.QUIZ"; + const QUIZ_AGGREGATE_BY_QUESTION = "quiz.QUIZ_AGGREGATE_BY_QUESTION"; + const QUIZ_USER_AGGREGATE_BY_QUESTION = "quiz.QUIZ_USER_AGGREGATE_BY_QUESTION"; + const QUIZ_USER_PERCENTAGE = "quiz.QUIZ_USER_PERCENTAGE"; + const TOP_CONTENT = "1"; + const CONTENT_DROPOFF = "2"; + const CONTENT_INTERACTIONS = "3"; + const MAP_OVERLAY = "4"; + const TOP_CONTRIBUTORS = "5"; + const TOP_SYNDICATION = "6"; + const CONTENT_CONTRIBUTIONS = "7"; + const USER_ENGAGEMENT = "11"; + const SPECIFIC_USER_ENGAGEMENT = "12"; + const USER_TOP_CONTENT = "13"; + const USER_CONTENT_DROPOFF = "14"; + const USER_CONTENT_INTERACTIONS = "15"; + const APPLICATIONS = "16"; + const USER_USAGE = "17"; + const SPECIFIC_USER_USAGE = "18"; + const VAR_USAGE = "19"; + const TOP_CREATORS = "20"; + const PLATFORMS = "21"; + const OPERATING_SYSTEM = "22"; + const BROWSERS = "23"; + const LIVE = "24"; + const TOP_PLAYBACK_CONTEXT = "25"; + const VPAAS_USAGE = "26"; + const ENTRY_USAGE = "27"; + const PARTNER_USAGE = "201"; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaResponseProfileOrderBy extends KalturaEnumBase +{ + const CREATED_AT_ASC = "+createdAt"; + const UPDATED_AT_ASC = "+updatedAt"; + const CREATED_AT_DESC = "-createdAt"; + const UPDATED_AT_DESC = "-updatedAt"; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaRuleActionType extends KalturaEnumBase +{ + const DRM_POLICY = "drm.DRM_POLICY"; + const BLOCK = "1"; + const PREVIEW = "2"; + const LIMIT_FLAVORS = "3"; + const ADD_TO_STORAGE = "4"; + const LIMIT_DELIVERY_PROFILES = "5"; + const SERVE_FROM_REMOTE_SERVER = "6"; + const REQUEST_HOST_REGEX = "7"; + const LIMIT_THUMBNAIL_CAPTURE = "8"; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaSchemaType extends KalturaEnumBase +{ + const BULK_UPLOAD_RESULT_XML = "bulkUploadXml.bulkUploadResultXML"; + const BULK_UPLOAD_XML = "bulkUploadXml.bulkUploadXML"; + const INGEST_API = "cuePoint.ingestAPI"; + const SERVE_API = "cuePoint.serveAPI"; + const DROP_FOLDER_XML = "dropFolderXmlBulkUpload.dropFolderXml"; + const SYNDICATION = "syndication"; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaSearchConditionComparison extends KalturaEnumBase +{ + const EQUAL = "1"; + const GREATER_THAN = "2"; + const GREATER_THAN_OR_EQUAL = "3"; + const LESS_THAN = "4"; + const LESS_THAN_OR_EQUAL = "5"; + const NOT_EQUAL = "6"; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaServerNodeOrderBy extends KalturaEnumBase +{ + const CREATED_AT_ASC = "+createdAt"; + const HEARTBEAT_TIME_ASC = "+heartbeatTime"; + const UPDATED_AT_ASC = "+updatedAt"; + const CREATED_AT_DESC = "-createdAt"; + const HEARTBEAT_TIME_DESC = "-heartbeatTime"; + const UPDATED_AT_DESC = "-updatedAt"; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaServerNodeType extends KalturaEnumBase +{ + const CONFERENCE_SERVER = "conference.CONFERENCE_SERVER"; + const WOWZA_MEDIA_SERVER = "wowza.WOWZA_MEDIA_SERVER"; + const EDGE = "1"; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaSourceType extends KalturaEnumBase +{ + const LIMELIGHT_LIVE = "limeLight.LIVE_STREAM"; + const VELOCIX_LIVE = "velocix.VELOCIX_LIVE"; + const FILE = "1"; + const WEBCAM = "2"; + const URL = "5"; + const SEARCH_PROVIDER = "6"; + const AKAMAI_LIVE = "29"; + const MANUAL_LIVE_STREAM = "30"; + const AKAMAI_UNIVERSAL_LIVE = "31"; + const LIVE_STREAM = "32"; + const LIVE_CHANNEL = "33"; + const RECORDED_LIVE = "34"; + const CLIP = "35"; + const KALTURA_RECORDED_LIVE = "36"; + const LECTURE_CAPTURE = "37"; + const LIVE_STREAM_ONTEXTDATA_CAPTIONS = "42"; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaStorageProfileOrderBy extends KalturaEnumBase +{ + const CREATED_AT_ASC = "+createdAt"; + const UPDATED_AT_ASC = "+updatedAt"; + const CREATED_AT_DESC = "-createdAt"; + const UPDATED_AT_DESC = "-updatedAt"; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaStorageProfileProtocol extends KalturaEnumBase +{ + const KONTIKI = "kontiki.KONTIKI"; + const KALTURA_DC = "0"; + const FTP = "1"; + const SCP = "2"; + const SFTP = "3"; + const S3 = "6"; + const LOCAL = "7"; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaSyndicationFeedEntriesOrderBy extends KalturaEnumBase +{ + const CREATED_AT_DESC = "-createdAt"; + const RECENT = "recent"; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaTaggedObjectType extends KalturaEnumBase +{ + const ENTRY = "1"; + const CATEGORY = "2"; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaThumbAssetOrderBy extends KalturaEnumBase +{ + const CREATED_AT_ASC = "+createdAt"; + const DELETED_AT_ASC = "+deletedAt"; + const SIZE_ASC = "+size"; + const UPDATED_AT_ASC = "+updatedAt"; + const CREATED_AT_DESC = "-createdAt"; + const DELETED_AT_DESC = "-deletedAt"; + const SIZE_DESC = "-size"; + const UPDATED_AT_DESC = "-updatedAt"; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaThumbParamsOrderBy extends KalturaEnumBase +{ +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaThumbParamsOutputOrderBy extends KalturaEnumBase +{ +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaTubeMogulSyndicationFeedCategories extends KalturaEnumBase +{ + const ANIMALS_AND_PETS = "Animals & Pets"; + const ARTS_AND_ANIMATION = "Arts & Animation"; + const AUTOS = "Autos"; + const COMEDY = "Comedy"; + const COMMERCIALS_PROMOTIONAL = "Commercials/Promotional"; + const ENTERTAINMENT = "Entertainment"; + const FAMILY_AND_KIDS = "Family & Kids"; + const HOW_TO_INSTRUCTIONAL_DIY = "How To/Instructional/DIY"; + const MUSIC = "Music"; + const NEWS_AND_BLOGS = "News & Blogs"; + const SCIENCE_AND_TECHNOLOGY = "Science & Technology"; + const SPORTS = "Sports"; + const TRAVEL_AND_PLACES = "Travel & Places"; + const VIDEO_GAMES = "Video Games"; + const VLOGS_PEOPLE = "Vlogs & People"; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaTubeMogulSyndicationFeedOrderBy extends KalturaEnumBase +{ + const CREATED_AT_ASC = "+createdAt"; + const NAME_ASC = "+name"; + const PLAYLIST_ID_ASC = "+playlistId"; + const TYPE_ASC = "+type"; + const UPDATED_AT_ASC = "+updatedAt"; + const CREATED_AT_DESC = "-createdAt"; + const NAME_DESC = "-name"; + const PLAYLIST_ID_DESC = "-playlistId"; + const TYPE_DESC = "-type"; + const UPDATED_AT_DESC = "-updatedAt"; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaUiConfOrderBy extends KalturaEnumBase +{ + const CREATED_AT_ASC = "+createdAt"; + const UPDATED_AT_ASC = "+updatedAt"; + const CREATED_AT_DESC = "-createdAt"; + const UPDATED_AT_DESC = "-updatedAt"; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaUploadTokenOrderBy extends KalturaEnumBase +{ + const CREATED_AT_ASC = "+createdAt"; + const CREATED_AT_DESC = "-createdAt"; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaUserEntryExtendedStatus extends KalturaEnumBase +{ + const PLAYBACK_COMPLETE = "viewHistory.PLAYBACK_COMPLETE"; + const PLAYBACK_STARTED = "viewHistory.PLAYBACK_STARTED"; + const VIEWED = "viewHistory.VIEWED"; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaUserEntryOrderBy extends KalturaEnumBase +{ + const CREATED_AT_ASC = "+createdAt"; + const UPDATED_AT_ASC = "+updatedAt"; + const CREATED_AT_DESC = "-createdAt"; + const UPDATED_AT_DESC = "-updatedAt"; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaUserEntryStatus extends KalturaEnumBase +{ + const QUIZ_SUBMITTED = "quiz.3"; + const ACTIVE = "1"; + const DELETED = "2"; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaUserEntryType extends KalturaEnumBase +{ + const QUIZ = "quiz.QUIZ"; + const VIEW_HISTORY = "viewHistory.VIEW_HISTORY"; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaUserLoginDataOrderBy extends KalturaEnumBase +{ +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaUserOrderBy extends KalturaEnumBase +{ + const CREATED_AT_ASC = "+createdAt"; + const ID_ASC = "+id"; + const CREATED_AT_DESC = "-createdAt"; + const ID_DESC = "-id"; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaUserRoleOrderBy extends KalturaEnumBase +{ + const CREATED_AT_ASC = "+createdAt"; + const ID_ASC = "+id"; + const NAME_ASC = "+name"; + const UPDATED_AT_ASC = "+updatedAt"; + const CREATED_AT_DESC = "-createdAt"; + const ID_DESC = "-id"; + const NAME_DESC = "-name"; + const UPDATED_AT_DESC = "-updatedAt"; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaVideoCodec extends KalturaEnumBase +{ + const NONE = ""; + const APCH = "apch"; + const APCN = "apcn"; + const APCO = "apco"; + const APCS = "apcs"; + const COPY = "copy"; + const DNXHD = "dnxhd"; + const DV = "dv"; + const FLV = "flv"; + const H263 = "h263"; + const H264 = "h264"; + const H264B = "h264b"; + const H264H = "h264h"; + const H264M = "h264m"; + const H265 = "h265"; + const MPEG2 = "mpeg2"; + const MPEG4 = "mpeg4"; + const THEORA = "theora"; + const VP6 = "vp6"; + const VP8 = "vp8"; + const VP9 = "vp9"; + const WMV2 = "wmv2"; + const WMV3 = "wmv3"; + const WVC1A = "wvc1a"; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaWidgetOrderBy extends KalturaEnumBase +{ + const CREATED_AT_ASC = "+createdAt"; + const CREATED_AT_DESC = "-createdAt"; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaYahooSyndicationFeedAdultValues extends KalturaEnumBase +{ + const ADULT = "adult"; + const NON_ADULT = "nonadult"; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaYahooSyndicationFeedCategories extends KalturaEnumBase +{ + const ACTION = "Action"; + const ANIMALS = "Animals"; + const ART_AND_ANIMATION = "Art & Animation"; + const COMMERCIALS = "Commercials"; + const ENTERTAINMENT_AND_TV = "Entertainment & TV"; + const FAMILY = "Family"; + const FOOD = "Food"; + const FUNNY_VIDEOS = "Funny Videos"; + const GAMES = "Games"; + const HEALTH_AND_BEAUTY = "Health & Beauty"; + const HOW_TO = "How-To"; + const MOVIES_AND_SHORTS = "Movies & Shorts"; + const MUSIC = "Music"; + const NEWS_AND_POLITICS = "News & Politics"; + const PEOPLE_AND_VLOGS = "People & Vlogs"; + const PRODUCTS_AND_TECH = "Products & Tech."; + const SCIENCE_AND_ENVIRONMENT = "Science & Environment"; + const SPORTS = "Sports"; + const TRANSPORTATION = "Transportation"; + const TRAVEL = "Travel"; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaYahooSyndicationFeedOrderBy extends KalturaEnumBase +{ + const CREATED_AT_ASC = "+createdAt"; + const NAME_ASC = "+name"; + const PLAYLIST_ID_ASC = "+playlistId"; + const TYPE_ASC = "+type"; + const UPDATED_AT_ASC = "+updatedAt"; + const CREATED_AT_DESC = "-createdAt"; + const NAME_DESC = "-name"; + const PLAYLIST_ID_DESC = "-playlistId"; + const TYPE_DESC = "-type"; + const UPDATED_AT_DESC = "-updatedAt"; +} + diff --git a/local/kaltura/API/KalturaPlugins/KalturaMetadataClientPlugin.php b/local/kaltura/API/KalturaPlugins/KalturaMetadataClientPlugin.php new file mode 100644 index 0000000000000..8e3e58dbcddbb --- /dev/null +++ b/local/kaltura/API/KalturaPlugins/KalturaMetadataClientPlugin.php @@ -0,0 +1,1640 @@ +. +// +// @ignore +// =================================================================================================== + +/** + * @package Kaltura + * @subpackage Client + */ +require_once(dirname(__FILE__) . "/../KalturaClientBase.php"); +require_once(dirname(__FILE__) . "/../KalturaEnums.php"); +require_once(dirname(__FILE__) . "/../KalturaTypes.php"); + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaMetadataProfileCreateMode extends KalturaEnumBase +{ + const API = 1; + const KMC = 2; + const APP = 3; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaMetadataProfileStatus extends KalturaEnumBase +{ + const ACTIVE = 1; + const DEPRECATED = 2; + const TRANSFORMING = 3; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaMetadataStatus extends KalturaEnumBase +{ + const VALID = 1; + const INVALID = 2; + const DELETED = 3; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaMetadataObjectType extends KalturaEnumBase +{ + const AD_CUE_POINT = "adCuePointMetadata.AdCuePoint"; + const ANNOTATION = "annotationMetadata.Annotation"; + const CODE_CUE_POINT = "codeCuePointMetadata.CodeCuePoint"; + const ANSWER_CUE_POINT = "quiz.AnswerCuePoint"; + const QUESTION_CUE_POINT = "quiz.QuestionCuePoint"; + const THUMB_CUE_POINT = "thumbCuePointMetadata.thumbCuePoint"; + const ENTRY = "1"; + const CATEGORY = "2"; + const USER = "3"; + const PARTNER = "4"; + const DYNAMIC_OBJECT = "5"; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaMetadataOrderBy extends KalturaEnumBase +{ + const CREATED_AT_ASC = "+createdAt"; + const METADATA_PROFILE_VERSION_ASC = "+metadataProfileVersion"; + const UPDATED_AT_ASC = "+updatedAt"; + const VERSION_ASC = "+version"; + const CREATED_AT_DESC = "-createdAt"; + const METADATA_PROFILE_VERSION_DESC = "-metadataProfileVersion"; + const UPDATED_AT_DESC = "-updatedAt"; + const VERSION_DESC = "-version"; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaMetadataProfileOrderBy extends KalturaEnumBase +{ + const CREATED_AT_ASC = "+createdAt"; + const UPDATED_AT_ASC = "+updatedAt"; + const CREATED_AT_DESC = "-createdAt"; + const UPDATED_AT_DESC = "-updatedAt"; +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaMetadata extends KalturaObjectBase +{ + /** + * + * + * @var int + * @readonly + */ + public $id = null; + + /** + * + * + * @var int + * @readonly + */ + public $partnerId = null; + + /** + * + * + * @var int + * @readonly + */ + public $metadataProfileId = null; + + /** + * + * + * @var int + * @readonly + */ + public $metadataProfileVersion = null; + + /** + * + * + * @var KalturaMetadataObjectType + * @readonly + */ + public $metadataObjectType = null; + + /** + * + * + * @var string + * @readonly + */ + public $objectId = null; + + /** + * + * + * @var int + * @readonly + */ + public $version = null; + + /** + * + * + * @var int + * @readonly + */ + public $createdAt = null; + + /** + * + * + * @var int + * @readonly + */ + public $updatedAt = null; + + /** + * + * + * @var KalturaMetadataStatus + * @readonly + */ + public $status = null; + + /** + * + * + * @var string + * @readonly + */ + public $xml = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaMetadataProfile extends KalturaObjectBase +{ + /** + * + * + * @var int + * @readonly + */ + public $id = null; + + /** + * + * + * @var int + * @readonly + */ + public $partnerId = null; + + /** + * + * + * @var KalturaMetadataObjectType + */ + public $metadataObjectType = null; + + /** + * + * + * @var int + * @readonly + */ + public $version = null; + + /** + * + * + * @var string + */ + public $name = null; + + /** + * + * + * @var string + */ + public $systemName = null; + + /** + * + * + * @var string + */ + public $description = null; + + /** + * + * + * @var int + * @readonly + */ + public $createdAt = null; + + /** + * + * + * @var int + * @readonly + */ + public $updatedAt = null; + + /** + * + * + * @var KalturaMetadataProfileStatus + * @readonly + */ + public $status = null; + + /** + * + * + * @var string + * @readonly + */ + public $xsd = null; + + /** + * + * + * @var string + * @readonly + */ + public $views = null; + + /** + * + * + * @var string + * @readonly + */ + public $xslt = null; + + /** + * + * + * @var KalturaMetadataProfileCreateMode + */ + public $createMode = null; + + /** + * + * + * @var bool + */ + public $disableReIndexing = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaMetadataProfileField extends KalturaObjectBase +{ + /** + * + * + * @var int + * @readonly + */ + public $id = null; + + /** + * + * + * @var string + * @readonly + */ + public $xPath = null; + + /** + * + * + * @var string + * @readonly + */ + public $key = null; + + /** + * + * + * @var string + * @readonly + */ + public $label = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaImportMetadataJobData extends KalturaJobData +{ + /** + * + * + * @var string + */ + public $srcFileUrl = null; + + /** + * + * + * @var string + */ + public $destFileLocalPath = null; + + /** + * + * + * @var int + */ + public $metadataId = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaMetadataListResponse extends KalturaListResponse +{ + /** + * + * + * @var array of KalturaMetadata + * @readonly + */ + public $objects; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +abstract class KalturaMetadataProfileBaseFilter extends KalturaFilter +{ + /** + * + * + * @var int + */ + public $idEqual = null; + + /** + * + * + * @var int + */ + public $partnerIdEqual = null; + + /** + * + * + * @var KalturaMetadataObjectType + */ + public $metadataObjectTypeEqual = null; + + /** + * + * + * @var string + */ + public $metadataObjectTypeIn = null; + + /** + * + * + * @var int + */ + public $versionEqual = null; + + /** + * + * + * @var string + */ + public $nameEqual = null; + + /** + * + * + * @var string + */ + public $systemNameEqual = null; + + /** + * + * + * @var string + */ + public $systemNameIn = null; + + /** + * + * + * @var int + */ + public $createdAtGreaterThanOrEqual = null; + + /** + * + * + * @var int + */ + public $createdAtLessThanOrEqual = null; + + /** + * + * + * @var int + */ + public $updatedAtGreaterThanOrEqual = null; + + /** + * + * + * @var int + */ + public $updatedAtLessThanOrEqual = null; + + /** + * + * + * @var KalturaMetadataProfileStatus + */ + public $statusEqual = null; + + /** + * + * + * @var string + */ + public $statusIn = null; + + /** + * + * + * @var KalturaMetadataProfileCreateMode + */ + public $createModeEqual = null; + + /** + * + * + * @var KalturaMetadataProfileCreateMode + */ + public $createModeNotEqual = null; + + /** + * + * + * @var string + */ + public $createModeIn = null; + + /** + * + * + * @var string + */ + public $createModeNotIn = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaMetadataProfileFieldListResponse extends KalturaListResponse +{ + /** + * + * + * @var array of KalturaMetadataProfileField + * @readonly + */ + public $objects; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaMetadataProfileListResponse extends KalturaListResponse +{ + /** + * + * + * @var array of KalturaMetadataProfile + * @readonly + */ + public $objects; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaMetadataReplacementOptionsItem extends KalturaPluginReplacementOptionsItem +{ + /** + * If true custom-metadata transferred to temp entry on entry replacement + * + * @var bool + */ + public $shouldCopyMetadata = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaMetadataResponseProfileMapping extends KalturaResponseProfileMapping +{ + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaTransformMetadataJobData extends KalturaJobData +{ + /** + * + * + * @var KalturaFileContainer + */ + public $srcXsl; + + /** + * + * + * @var int + */ + public $srcVersion = null; + + /** + * + * + * @var int + */ + public $destVersion = null; + + /** + * + * + * @var KalturaFileContainer + */ + public $destXsd; + + /** + * + * + * @var int + */ + public $metadataProfileId = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaCompareMetadataCondition extends KalturaCompareCondition +{ + /** + * May contain the full xpath to the field in three formats + * 1. Slashed xPath, e.g. /metadata/myElementName + * 2. Using local-name function, e.g. /[local-name()='metadata']/[local-name()='myElementName'] + * 3. Using only the field name, e.g. myElementName, it will be searched as //myElementName + * + * @var string + */ + public $xPath = null; + + /** + * Metadata profile id + * + * @var int + */ + public $profileId = null; + + /** + * Metadata profile system name + * + * @var string + */ + public $profileSystemName = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaDynamicObjectSearchItem extends KalturaSearchOperator +{ + /** + * + * + * @var string + */ + public $field = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaMatchMetadataCondition extends KalturaMatchCondition +{ + /** + * May contain the full xpath to the field in three formats + * 1. Slashed xPath, e.g. /metadata/myElementName + * 2. Using local-name function, e.g. /[local-name()='metadata']/[local-name()='myElementName'] + * 3. Using only the field name, e.g. myElementName, it will be searched as //myElementName + * + * @var string + */ + public $xPath = null; + + /** + * Metadata profile id + * + * @var int + */ + public $profileId = null; + + /** + * Metadata profile system name + * + * @var string + */ + public $profileSystemName = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +abstract class KalturaMetadataBaseFilter extends KalturaRelatedFilter +{ + /** + * + * + * @var int + */ + public $partnerIdEqual = null; + + /** + * + * + * @var int + */ + public $metadataProfileIdEqual = null; + + /** + * + * + * @var string + */ + public $metadataProfileIdIn = null; + + /** + * + * + * @var int + */ + public $metadataProfileVersionEqual = null; + + /** + * + * + * @var int + */ + public $metadataProfileVersionGreaterThanOrEqual = null; + + /** + * + * + * @var int + */ + public $metadataProfileVersionLessThanOrEqual = null; + + /** + * When null, default is KalturaMetadataObjectType::ENTRY + * + * @var KalturaMetadataObjectType + */ + public $metadataObjectTypeEqual = null; + + /** + * + * + * @var string + */ + public $objectIdEqual = null; + + /** + * + * + * @var string + */ + public $objectIdIn = null; + + /** + * + * + * @var int + */ + public $versionEqual = null; + + /** + * + * + * @var int + */ + public $versionGreaterThanOrEqual = null; + + /** + * + * + * @var int + */ + public $versionLessThanOrEqual = null; + + /** + * + * + * @var int + */ + public $createdAtGreaterThanOrEqual = null; + + /** + * + * + * @var int + */ + public $createdAtLessThanOrEqual = null; + + /** + * + * + * @var int + */ + public $updatedAtGreaterThanOrEqual = null; + + /** + * + * + * @var int + */ + public $updatedAtLessThanOrEqual = null; + + /** + * + * + * @var KalturaMetadataStatus + */ + public $statusEqual = null; + + /** + * + * + * @var string + */ + public $statusIn = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaMetadataFieldChangedCondition extends KalturaMatchCondition +{ + /** + * May contain the full xpath to the field in three formats + * 1. Slashed xPath, e.g. /metadata/myElementName + * 2. Using local-name function, e.g. /[local-name()='metadata']/[local-name()='myElementName'] + * 3. Using only the field name, e.g. myElementName, it will be searched as //myElementName + * + * @var string + */ + public $xPath = null; + + /** + * Metadata profile id + * + * @var int + */ + public $profileId = null; + + /** + * Metadata profile system name + * + * @var string + */ + public $profileSystemName = null; + + /** + * + * + * @var string + */ + public $versionA = null; + + /** + * + * + * @var string + */ + public $versionB = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaMetadataProfileFilter extends KalturaMetadataProfileBaseFilter +{ + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaMetadataSearchItem extends KalturaSearchOperator +{ + /** + * + * + * @var int + */ + public $metadataProfileId = null; + + /** + * + * + * @var string + */ + public $orderBy = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaMetadataField extends KalturaStringField +{ + /** + * May contain the full xpath to the field in three formats + * 1. Slashed xPath, e.g. /metadata/myElementName + * 2. Using local-name function, e.g. /[local-name()='metadata']/[local-name()='myElementName'] + * 3. Using only the field name, e.g. myElementName, it will be searched as //myElementName + * + * @var string + */ + public $xPath = null; + + /** + * Metadata profile id + * + * @var int + */ + public $profileId = null; + + /** + * Metadata profile system name + * + * @var string + */ + public $profileSystemName = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaMetadataFilter extends KalturaMetadataBaseFilter +{ + +} + + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaMetadataService extends KalturaServiceBase +{ + function __construct(KalturaClient $client = null) + { + parent::__construct($client); + } + + /** + * Allows you to add a metadata object and metadata content associated with Kaltura object + * + * @param int $metadataProfileId + * @param string $objectType + * @param string $objectId + * @param string $xmlData XML metadata + * @return KalturaMetadata + */ + function add($metadataProfileId, $objectType, $objectId, $xmlData) + { + $kparams = array(); + $this->client->addParam($kparams, "metadataProfileId", $metadataProfileId); + $this->client->addParam($kparams, "objectType", $objectType); + $this->client->addParam($kparams, "objectId", $objectId); + $this->client->addParam($kparams, "xmlData", $xmlData); + $this->client->queueServiceActionCall("metadata_metadata", "add", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaMetadata"); + return $resultObject; + } + + /** + * Allows you to add a metadata xml data from remote URL. + Enables different permissions than addFromUrl action. + * + * @param int $metadataProfileId + * @param string $objectType + * @param string $objectId + * @param string $url XML metadata remote url + * @return KalturaMetadata + */ + function addFromBulk($metadataProfileId, $objectType, $objectId, $url) + { + $kparams = array(); + $this->client->addParam($kparams, "metadataProfileId", $metadataProfileId); + $this->client->addParam($kparams, "objectType", $objectType); + $this->client->addParam($kparams, "objectId", $objectId); + $this->client->addParam($kparams, "url", $url); + $this->client->queueServiceActionCall("metadata_metadata", "addFromBulk", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaMetadata"); + return $resultObject; + } + + /** + * Allows you to add a metadata object and metadata file associated with Kaltura object + * + * @param int $metadataProfileId + * @param string $objectType + * @param string $objectId + * @param file $xmlFile XML metadata + * @return KalturaMetadata + */ + function addFromFile($metadataProfileId, $objectType, $objectId, $xmlFile) + { + $kparams = array(); + $this->client->addParam($kparams, "metadataProfileId", $metadataProfileId); + $this->client->addParam($kparams, "objectType", $objectType); + $this->client->addParam($kparams, "objectId", $objectId); + $kfiles = array(); + $this->client->addParam($kfiles, "xmlFile", $xmlFile); + $this->client->queueServiceActionCall("metadata_metadata", "addFromFile", $kparams, $kfiles); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaMetadata"); + return $resultObject; + } + + /** + * Allows you to add a metadata xml data from remote URL + * + * @param int $metadataProfileId + * @param string $objectType + * @param string $objectId + * @param string $url XML metadata remote url + * @return KalturaMetadata + */ + function addFromUrl($metadataProfileId, $objectType, $objectId, $url) + { + $kparams = array(); + $this->client->addParam($kparams, "metadataProfileId", $metadataProfileId); + $this->client->addParam($kparams, "objectType", $objectType); + $this->client->addParam($kparams, "objectId", $objectId); + $this->client->addParam($kparams, "url", $url); + $this->client->queueServiceActionCall("metadata_metadata", "addFromUrl", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaMetadata"); + return $resultObject; + } + + /** + * Delete an existing metadata + * + * @param int $id + */ + function delete($id) + { + $kparams = array(); + $this->client->addParam($kparams, "id", $id); + $this->client->queueServiceActionCall("metadata_metadata", "delete", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "null"); + } + + /** + * Retrieve a metadata object by id + * + * @param int $id + * @return KalturaMetadata + */ + function get($id) + { + $kparams = array(); + $this->client->addParam($kparams, "id", $id); + $this->client->queueServiceActionCall("metadata_metadata", "get", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaMetadata"); + return $resultObject; + } + + /** + * Index metadata by id, will also index the related object + * + * @param string $id + * @param bool $shouldUpdate + * @return int + */ + function index($id, $shouldUpdate) + { + $kparams = array(); + $this->client->addParam($kparams, "id", $id); + $this->client->addParam($kparams, "shouldUpdate", $shouldUpdate); + $this->client->queueServiceActionCall("metadata_metadata", "index", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "integer"); + return $resultObject; + } + + /** + * Mark existing metadata as invalid + Used by batch metadata transform + * + * @param int $id + * @param int $version Enable update only if the metadata object version did not change by other process + */ + function invalidate($id, $version = null) + { + $kparams = array(); + $this->client->addParam($kparams, "id", $id); + $this->client->addParam($kparams, "version", $version); + $this->client->queueServiceActionCall("metadata_metadata", "invalidate", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "null"); + } + + /** + * List metadata objects by filter and pager + * + * @param KalturaMetadataFilter $filter + * @param KalturaFilterPager $pager + * @return KalturaMetadataListResponse + */ + function listAction(KalturaMetadataFilter $filter = null, KalturaFilterPager $pager = null) + { + $kparams = array(); + if ($filter !== null) + $this->client->addParam($kparams, "filter", $filter->toParams()); + if ($pager !== null) + $this->client->addParam($kparams, "pager", $pager->toParams()); + $this->client->queueServiceActionCall("metadata_metadata", "list", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaMetadataListResponse"); + return $resultObject; + } + + /** + * Serves metadata XML file + * + * @param int $id + * @return file + */ + function serve($id) + { + if ($this->client->isMultiRequest()) + throw new KalturaClientException("Action is not supported as part of multi-request.", KalturaClientException::ERROR_ACTION_IN_MULTIREQUEST); + + $kparams = array(); + $this->client->addParam($kparams, "id", $id); + $this->client->queueServiceActionCall("metadata_metadata", "serve", $kparams); + if(!$this->client->getDestinationPath() && !$this->client->getReturnServedResult()) + return $this->client->getServeUrl(); + return $this->client->doQueue(); + } + + /** + * Update an existing metadata object with new XML content + * + * @param int $id + * @param string $xmlData XML metadata + * @param int $version Enable update only if the metadata object version did not change by other process + * @return KalturaMetadata + */ + function update($id, $xmlData = null, $version = null) + { + $kparams = array(); + $this->client->addParam($kparams, "id", $id); + $this->client->addParam($kparams, "xmlData", $xmlData); + $this->client->addParam($kparams, "version", $version); + $this->client->queueServiceActionCall("metadata_metadata", "update", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaMetadata"); + return $resultObject; + } + + /** + * Update an existing metadata object with new XML file + * + * @param int $id + * @param file $xmlFile XML metadata + * @return KalturaMetadata + */ + function updateFromFile($id, $xmlFile = null) + { + $kparams = array(); + $this->client->addParam($kparams, "id", $id); + $kfiles = array(); + $this->client->addParam($kfiles, "xmlFile", $xmlFile); + $this->client->queueServiceActionCall("metadata_metadata", "updateFromFile", $kparams, $kfiles); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaMetadata"); + return $resultObject; + } + + /** + * Action transforms current metadata object XML using a provided XSL. + * + * @param int $id + * @param file $xslFile + * @return KalturaMetadata + */ + function updateFromXSL($id, $xslFile) + { + $kparams = array(); + $this->client->addParam($kparams, "id", $id); + $kfiles = array(); + $this->client->addParam($kfiles, "xslFile", $xslFile); + $this->client->queueServiceActionCall("metadata_metadata", "updateFromXSL", $kparams, $kfiles); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaMetadata"); + return $resultObject; + } +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaMetadataProfileService extends KalturaServiceBase +{ + function __construct(KalturaClient $client = null) + { + parent::__construct($client); + } + + /** + * Allows you to add a metadata profile object and metadata profile content associated with Kaltura object type + * + * @param KalturaMetadataProfile $metadataProfile + * @param string $xsdData XSD metadata definition + * @param string $viewsData UI views definition + * @return KalturaMetadataProfile + */ + function add(KalturaMetadataProfile $metadataProfile, $xsdData, $viewsData = null) + { + $kparams = array(); + $this->client->addParam($kparams, "metadataProfile", $metadataProfile->toParams()); + $this->client->addParam($kparams, "xsdData", $xsdData); + $this->client->addParam($kparams, "viewsData", $viewsData); + $this->client->queueServiceActionCall("metadata_metadataprofile", "add", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaMetadataProfile"); + return $resultObject; + } + + /** + * Allows you to add a metadata profile object and metadata profile file associated with Kaltura object type + * + * @param KalturaMetadataProfile $metadataProfile + * @param file $xsdFile XSD metadata definition + * @param file $viewsFile UI views definition + * @return KalturaMetadataProfile + */ + function addFromFile(KalturaMetadataProfile $metadataProfile, $xsdFile, $viewsFile = null) + { + $kparams = array(); + $this->client->addParam($kparams, "metadataProfile", $metadataProfile->toParams()); + $kfiles = array(); + $this->client->addParam($kfiles, "xsdFile", $xsdFile); + $this->client->addParam($kfiles, "viewsFile", $viewsFile); + $this->client->queueServiceActionCall("metadata_metadataprofile", "addFromFile", $kparams, $kfiles); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaMetadataProfile"); + return $resultObject; + } + + /** + * Delete an existing metadata profile + * + * @param int $id + */ + function delete($id) + { + $kparams = array(); + $this->client->addParam($kparams, "id", $id); + $this->client->queueServiceActionCall("metadata_metadataprofile", "delete", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "null"); + } + + /** + * Retrieve a metadata profile object by id + * + * @param int $id + * @return KalturaMetadataProfile + */ + function get($id) + { + $kparams = array(); + $this->client->addParam($kparams, "id", $id); + $this->client->queueServiceActionCall("metadata_metadataprofile", "get", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaMetadataProfile"); + return $resultObject; + } + + /** + * List metadata profile objects by filter and pager + * + * @param KalturaMetadataProfileFilter $filter + * @param KalturaFilterPager $pager + * @return KalturaMetadataProfileListResponse + */ + function listAction(KalturaMetadataProfileFilter $filter = null, KalturaFilterPager $pager = null) + { + $kparams = array(); + if ($filter !== null) + $this->client->addParam($kparams, "filter", $filter->toParams()); + if ($pager !== null) + $this->client->addParam($kparams, "pager", $pager->toParams()); + $this->client->queueServiceActionCall("metadata_metadataprofile", "list", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaMetadataProfileListResponse"); + return $resultObject; + } + + /** + * List metadata profile fields by metadata profile id + * + * @param int $metadataProfileId + * @return KalturaMetadataProfileFieldListResponse + */ + function listFields($metadataProfileId) + { + $kparams = array(); + $this->client->addParam($kparams, "metadataProfileId", $metadataProfileId); + $this->client->queueServiceActionCall("metadata_metadataprofile", "listFields", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaMetadataProfileFieldListResponse"); + return $resultObject; + } + + /** + * Update an existing metadata object definition file + * + * @param int $id + * @param int $toVersion + * @return KalturaMetadataProfile + */ + function revert($id, $toVersion) + { + $kparams = array(); + $this->client->addParam($kparams, "id", $id); + $this->client->addParam($kparams, "toVersion", $toVersion); + $this->client->queueServiceActionCall("metadata_metadataprofile", "revert", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaMetadataProfile"); + return $resultObject; + } + + /** + * Serves metadata profile XSD file + * + * @param int $id + * @return file + */ + function serve($id) + { + if ($this->client->isMultiRequest()) + throw new KalturaClientException("Action is not supported as part of multi-request.", KalturaClientException::ERROR_ACTION_IN_MULTIREQUEST); + + $kparams = array(); + $this->client->addParam($kparams, "id", $id); + $this->client->queueServiceActionCall("metadata_metadataprofile", "serve", $kparams); + if(!$this->client->getDestinationPath() && !$this->client->getReturnServedResult()) + return $this->client->getServeUrl(); + return $this->client->doQueue(); + } + + /** + * Serves metadata profile view file + * + * @param int $id + * @return file + */ + function serveView($id) + { + if ($this->client->isMultiRequest()) + throw new KalturaClientException("Action is not supported as part of multi-request.", KalturaClientException::ERROR_ACTION_IN_MULTIREQUEST); + + $kparams = array(); + $this->client->addParam($kparams, "id", $id); + $this->client->queueServiceActionCall("metadata_metadataprofile", "serveView", $kparams); + if(!$this->client->getDestinationPath() && !$this->client->getReturnServedResult()) + return $this->client->getServeUrl(); + return $this->client->doQueue(); + } + + /** + * Update an existing metadata object + * + * @param int $id + * @param KalturaMetadataProfile $metadataProfile + * @param string $xsdData XSD metadata definition + * @param string $viewsData UI views definition + * @return KalturaMetadataProfile + */ + function update($id, KalturaMetadataProfile $metadataProfile, $xsdData = null, $viewsData = null) + { + $kparams = array(); + $this->client->addParam($kparams, "id", $id); + $this->client->addParam($kparams, "metadataProfile", $metadataProfile->toParams()); + $this->client->addParam($kparams, "xsdData", $xsdData); + $this->client->addParam($kparams, "viewsData", $viewsData); + $this->client->queueServiceActionCall("metadata_metadataprofile", "update", $kparams); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaMetadataProfile"); + return $resultObject; + } + + /** + * Update an existing metadata object definition file + * + * @param int $id + * @param file $xsdFile XSD metadata definition + * @return KalturaMetadataProfile + */ + function updateDefinitionFromFile($id, $xsdFile) + { + $kparams = array(); + $this->client->addParam($kparams, "id", $id); + $kfiles = array(); + $this->client->addParam($kfiles, "xsdFile", $xsdFile); + $this->client->queueServiceActionCall("metadata_metadataprofile", "updateDefinitionFromFile", $kparams, $kfiles); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaMetadataProfile"); + return $resultObject; + } + + /** + * Update an existing metadata object xslt file + * + * @param int $id + * @param file $xsltFile XSLT file, will be executed on every metadata add/update + * @return KalturaMetadataProfile + */ + function updateTransformationFromFile($id, $xsltFile) + { + $kparams = array(); + $this->client->addParam($kparams, "id", $id); + $kfiles = array(); + $this->client->addParam($kfiles, "xsltFile", $xsltFile); + $this->client->queueServiceActionCall("metadata_metadataprofile", "updateTransformationFromFile", $kparams, $kfiles); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaMetadataProfile"); + return $resultObject; + } + + /** + * Update an existing metadata object views file + * + * @param int $id + * @param file $viewsFile UI views file + * @return KalturaMetadataProfile + */ + function updateViewsFromFile($id, $viewsFile) + { + $kparams = array(); + $this->client->addParam($kparams, "id", $id); + $kfiles = array(); + $this->client->addParam($kfiles, "viewsFile", $viewsFile); + $this->client->queueServiceActionCall("metadata_metadataprofile", "updateViewsFromFile", $kparams, $kfiles); + if ($this->client->isMultiRequest()) + return $this->client->getMultiRequestResult(); + $resultObject = $this->client->doQueue(); + $this->client->throwExceptionIfError($resultObject); + $this->client->validateObjectType($resultObject, "KalturaMetadataProfile"); + return $resultObject; + } +} +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaMetadataClientPlugin extends KalturaClientPlugin +{ + /** + * @var KalturaMetadataService + */ + public $metadata = null; + + /** + * @var KalturaMetadataProfileService + */ + public $metadataProfile = null; + + protected function __construct(KalturaClient $client) + { + parent::__construct($client); + $this->metadata = new KalturaMetadataService($client); + $this->metadataProfile = new KalturaMetadataProfileService($client); + } + + /** + * @return KalturaMetadataClientPlugin + */ + public static function get(KalturaClient $client) + { + return new KalturaMetadataClientPlugin($client); + } + + /** + * @return array + */ + public function getServices() + { + $services = array( + 'metadata' => $this->metadata, + 'metadataProfile' => $this->metadataProfile, + ); + return $services; + } + + /** + * @return string + */ + public function getName() + { + return 'metadata'; + } +} + diff --git a/local/kaltura/API/KalturaTypes.php b/local/kaltura/API/KalturaTypes.php new file mode 100644 index 0000000000000..83d9a156c508a --- /dev/null +++ b/local/kaltura/API/KalturaTypes.php @@ -0,0 +1,22682 @@ +. +// +// @ignore +// =================================================================================================== + +/** + * @package Kaltura + * @subpackage Client + */ +require_once(dirname(__FILE__) . "/KalturaClientBase.php"); + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaListResponse extends KalturaObjectBase +{ + /** + * + * + * @var int + * @readonly + */ + public $totalCount = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +abstract class KalturaBaseRestriction extends KalturaObjectBase +{ + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaAccessControl extends KalturaObjectBase +{ + /** + * The id of the Access Control Profile + * + * @var int + * @readonly + */ + public $id = null; + + /** + * + * + * @var int + * @readonly + */ + public $partnerId = null; + + /** + * The name of the Access Control Profile + * + * @var string + */ + public $name = null; + + /** + * System name of the Access Control Profile + * + * @var string + */ + public $systemName = null; + + /** + * The description of the Access Control Profile + * + * @var string + */ + public $description = null; + + /** + * Creation date as Unix timestamp (In seconds) + * + * @var int + * @readonly + */ + public $createdAt = null; + + /** + * True if this Conversion Profile is the default + * + * @var KalturaNullableBoolean + */ + public $isDefault = null; + + /** + * Array of Access Control Restrictions + * + * @var array of KalturaBaseRestriction + */ + public $restrictions; + + /** + * Indicates that the access control profile is new and should be handled using KalturaAccessControlProfile object and accessControlProfile service + * + * @var bool + * @readonly + */ + public $containsUnsuportedRestrictions = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaContextTypeHolder extends KalturaObjectBase +{ + /** + * The type of the condition context + * + * @var KalturaContextType + */ + public $type = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaAccessControlContextTypeHolder extends KalturaContextTypeHolder +{ + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaAccessControlMessage extends KalturaObjectBase +{ + /** + * + * + * @var string + */ + public $message = null; + + /** + * + * + * @var string + */ + public $code = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +abstract class KalturaRuleAction extends KalturaObjectBase +{ + /** + * The type of the action + * + * @var KalturaRuleActionType + * @readonly + */ + public $type = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +abstract class KalturaCondition extends KalturaObjectBase +{ + /** + * The type of the access control condition + * + * @var KalturaConditionType + * @readonly + */ + public $type = null; + + /** + * + * + * @var string + */ + public $description = null; + + /** + * + * + * @var bool + */ + public $not = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaRule extends KalturaObjectBase +{ + /** + * Short Rule Description + * + * @var string + */ + public $description = null; + + /** + * Rule Custom Data to allow saving rule specific information + * + * @var string + */ + public $ruleData = null; + + /** + * Message to be thrown to the player in case the rule is fulfilled + * + * @var string + */ + public $message = null; + + /** + * Code to be thrown to the player in case the rule is fulfilled + * + * @var string + */ + public $code = null; + + /** + * Actions to be performed by the player in case the rule is fulfilled + * + * @var array of KalturaRuleAction + */ + public $actions; + + /** + * Conditions to validate the rule + * + * @var array of KalturaCondition + */ + public $conditions; + + /** + * Indicates what contexts should be tested by this rule + * + * @var array of KalturaContextTypeHolder + */ + public $contexts; + + /** + * Indicates that this rule is enough and no need to continue checking the rest of the rules + * + * @var bool + */ + public $stopProcessing = null; + + /** + * Indicates if we should force ks validation for admin ks users as well + * + * @var KalturaNullableBoolean + */ + public $forceAdminValidation = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaAccessControlProfile extends KalturaObjectBase +{ + /** + * The id of the Access Control Profile + * + * @var int + * @readonly + */ + public $id = null; + + /** + * + * + * @var int + * @readonly + */ + public $partnerId = null; + + /** + * The name of the Access Control Profile + * + * @var string + */ + public $name = null; + + /** + * System name of the Access Control Profile + * + * @var string + */ + public $systemName = null; + + /** + * The description of the Access Control Profile + * + * @var string + */ + public $description = null; + + /** + * Creation time as Unix timestamp (In seconds) + * + * @var int + * @readonly + */ + public $createdAt = null; + + /** + * Update time as Unix timestamp (In seconds) + * + * @var int + * @readonly + */ + public $updatedAt = null; + + /** + * True if this access control profile is the partner default + * + * @var KalturaNullableBoolean + */ + public $isDefault = null; + + /** + * Array of access control rules + * + * @var array of KalturaRule + */ + public $rules; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaKeyValue extends KalturaObjectBase +{ + /** + * + * + * @var string + */ + public $key = null; + + /** + * + * + * @var string + */ + public $value = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaAccessControlScope extends KalturaObjectBase +{ + /** + * URL to be used to test domain conditions. + * + * @var string + */ + public $referrer = null; + + /** + * IP to be used to test geographic location conditions. + * + * @var string + */ + public $ip = null; + + /** + * Kaltura session to be used to test session and user conditions. + * + * @var string + */ + public $ks = null; + + /** + * Browser or client application to be used to test agent conditions. + * + * @var string + */ + public $userAgent = null; + + /** + * Unix timestamp (In seconds) to be used to test entry scheduling, keep null to use now. + * + * @var int + */ + public $time = null; + + /** + * Indicates what contexts should be tested. No contexts means any context. + * + * @var array of KalturaAccessControlContextTypeHolder + */ + public $contexts; + + /** + * Array of hashes to pass to the access control profile scope + * + * @var array of KalturaKeyValue + */ + public $hashes; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaReportFilter extends KalturaObjectBase +{ + /** + * The dimension whose values should be filtered + * + * @var string + */ + public $dimension = null; + + /** + * The (comma separated) values to include in the filter + * + * @var string + */ + public $values = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaAnalyticsFilter extends KalturaObjectBase +{ + /** + * Query start time (in local time) MM/dd/yyyy HH:mi + * + * @var string + */ + public $from_time = null; + + /** + * Query end time (in local time) MM/dd/yyyy HH:mi + * + * @var string + */ + public $to_time = null; + + /** + * Comma separated metrics list + * + * @var string + */ + public $metrics = null; + + /** + * Timezone offset from UTC (in minutes) + * + * @var float + */ + public $utcOffset = null; + + /** + * Comma separated dimensions list + * + * @var string + */ + public $dimensions = null; + + /** + * Array of filters + * + * @var array of KalturaReportFilter + */ + public $filters; + + /** + * Query order by metric/dimension + * + * @var string + */ + public $orderBy = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaApiExceptionArg extends KalturaObjectBase +{ + /** + * + * + * @var string + */ + public $name = null; + + /** + * + * + * @var string + */ + public $value = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaAppToken extends KalturaObjectBase +{ + /** + * The id of the application token + * + * @var string + * @readonly + */ + public $id = null; + + /** + * The application token + * + * @var string + * @readonly + */ + public $token = null; + + /** + * + * + * @var int + * @readonly + */ + public $partnerId = null; + + /** + * Creation time as Unix timestamp (In seconds) + * + * @var int + * @readonly + */ + public $createdAt = null; + + /** + * Update time as Unix timestamp (In seconds) + * + * @var int + * @readonly + */ + public $updatedAt = null; + + /** + * Application token status + * + * @var KalturaAppTokenStatus + * @readonly + */ + public $status = null; + + /** + * Expiry time of current token (unix timestamp in seconds) + * + * @var int + */ + public $expiry = null; + + /** + * Type of KS (Kaltura Session) that created using the current token + * + * @var KalturaSessionType + */ + public $sessionType = null; + + /** + * User id of KS (Kaltura Session) that created using the current token + * + * @var string + */ + public $sessionUserId = null; + + /** + * Expiry duration of KS (Kaltura Session) that created using the current token (in seconds) + * + * @var int + */ + public $sessionDuration = null; + + /** + * Comma separated privileges to be applied on KS (Kaltura Session) that created using the current token + * + * @var string + */ + public $sessionPrivileges = null; + + /** + * + * + * @var KalturaAppTokenHashType + */ + public $hashType = null; + + /** + * + * + * @var string + */ + public $description = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaAsset extends KalturaObjectBase +{ + /** + * The ID of the Flavor Asset + * + * @var string + * @readonly + */ + public $id = null; + + /** + * The entry ID of the Flavor Asset + * + * @var string + * @readonly + */ + public $entryId = null; + + /** + * + * + * @var int + * @readonly + */ + public $partnerId = null; + + /** + * The version of the Flavor Asset + * + * @var int + * @readonly + */ + public $version = null; + + /** + * The size (in KBytes) of the Flavor Asset + * + * @var int + * @readonly + */ + public $size = null; + + /** + * Tags used to identify the Flavor Asset in various scenarios + * + * @var string + */ + public $tags = null; + + /** + * The file extension + * + * @var string + * @insertonly + */ + public $fileExt = null; + + /** + * + * + * @var int + * @readonly + */ + public $createdAt = null; + + /** + * + * + * @var int + * @readonly + */ + public $updatedAt = null; + + /** + * + * + * @var int + * @readonly + */ + public $deletedAt = null; + + /** + * System description, error message, warnings and failure cause. + * + * @var string + * @readonly + */ + public $description = null; + + /** + * Partner private data + * + * @var string + */ + public $partnerData = null; + + /** + * Partner friendly description + * + * @var string + */ + public $partnerDescription = null; + + /** + * Comma separated list of source flavor params ids + * + * @var string + */ + public $actualSourceAssetParamsIds = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaString extends KalturaObjectBase +{ + /** + * + * + * @var string + */ + public $value = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaAssetParams extends KalturaObjectBase +{ + /** + * The id of the Flavor Params + * + * @var int + * @readonly + */ + public $id = null; + + /** + * + * + * @var int + */ + public $partnerId = null; + + /** + * The name of the Flavor Params + * + * @var string + */ + public $name = null; + + /** + * System name of the Flavor Params + * + * @var string + */ + public $systemName = null; + + /** + * The description of the Flavor Params + * + * @var string + */ + public $description = null; + + /** + * Creation date as Unix timestamp (In seconds) + * + * @var int + * @readonly + */ + public $createdAt = null; + + /** + * True if those Flavor Params are part of system defaults + * + * @var KalturaNullableBoolean + * @readonly + */ + public $isSystemDefault = null; + + /** + * The Flavor Params tags are used to identify the flavor for different usage (e.g. web, hd, mobile) + * + * @var string + */ + public $tags = null; + + /** + * Array of partner permisison names that required for using this asset params + * + * @var array of KalturaString + */ + public $requiredPermissions; + + /** + * Id of remote storage profile that used to get the source, zero indicates Kaltura data center + * + * @var int + */ + public $sourceRemoteStorageProfileId = null; + + /** + * Comma seperated ids of remote storage profiles that the flavor distributed to, the distribution done by the conversion engine + * + * @var int + */ + public $remoteStorageProfileIds = null; + + /** + * Media parser type to be used for post-conversion validation + * + * @var KalturaMediaParserType + */ + public $mediaParserType = null; + + /** + * Comma seperated ids of source flavor params this flavor is created from + * + * @var string + */ + public $sourceAssetParamsIds = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +abstract class KalturaResource extends KalturaObjectBase +{ + +} + +/** + * @package Kaltura + * @subpackage Client + */ +abstract class KalturaContentResource extends KalturaResource +{ + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaAssetParamsResourceContainer extends KalturaResource +{ + /** + * The content resource to associate with asset params + * + * @var KalturaContentResource + */ + public $resource; + + /** + * The asset params to associate with the reaource + * + * @var int + */ + public $assetParamsId = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaAssetServeOptions extends KalturaObjectBase +{ + /** + * + * + * @var bool + */ + public $download = null; + + /** + * + * + * @var string + */ + public $referrer = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +abstract class KalturaOperationAttributes extends KalturaObjectBase +{ + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaBaseEntry extends KalturaObjectBase +{ + /** + * Auto generated 10 characters alphanumeric string + * + * @var string + * @readonly + */ + public $id = null; + + /** + * Entry name (Min 1 chars) + * + * @var string + */ + public $name = null; + + /** + * Entry description + * + * @var string + */ + public $description = null; + + /** + * + * + * @var int + * @readonly + */ + public $partnerId = null; + + /** + * The ID of the user who is the owner of this entry + * + * @var string + */ + public $userId = null; + + /** + * The ID of the user who created this entry + * + * @var string + * @insertonly + */ + public $creatorId = null; + + /** + * Entry tags + * + * @var string + */ + public $tags = null; + + /** + * Entry admin tags can be updated only by administrators + * + * @var string + */ + public $adminTags = null; + + /** + * Comma separated list of full names of categories to which this entry belongs. Only categories that don't have entitlement (privacy context) are listed, to retrieve the full list of categories, use the categoryEntry.list action. + * + * @var string + */ + public $categories = null; + + /** + * Comma separated list of ids of categories to which this entry belongs. Only categories that don't have entitlement (privacy context) are listed, to retrieve the full list of categories, use the categoryEntry.list action. + * + * @var string + */ + public $categoriesIds = null; + + /** + * + * + * @var KalturaEntryStatus + * @readonly + */ + public $status = null; + + /** + * Entry moderation status + * + * @var KalturaEntryModerationStatus + * @readonly + */ + public $moderationStatus = null; + + /** + * Number of moderation requests waiting for this entry + * + * @var int + * @readonly + */ + public $moderationCount = null; + + /** + * The type of the entry, this is auto filled by the derived entry object + * + * @var KalturaEntryType + */ + public $type = null; + + /** + * Entry creation date as Unix timestamp (In seconds) + * + * @var int + * @readonly + */ + public $createdAt = null; + + /** + * Entry update date as Unix timestamp (In seconds) + * + * @var int + * @readonly + */ + public $updatedAt = null; + + /** + * The calculated average rank. rank = totalRank / votes + * + * @var float + * @readonly + */ + public $rank = null; + + /** + * The sum of all rank values submitted to the baseEntry.anonymousRank action + * + * @var int + * @readonly + */ + public $totalRank = null; + + /** + * A count of all requests made to the baseEntry.anonymousRank action + * + * @var int + * @readonly + */ + public $votes = null; + + /** + * + * + * @var int + */ + public $groupId = null; + + /** + * Can be used to store various partner related data as a string + * + * @var string + */ + public $partnerData = null; + + /** + * Download URL for the entry + * + * @var string + * @readonly + */ + public $downloadUrl = null; + + /** + * Indexed search text for full text search + * + * @var string + * @readonly + */ + public $searchText = null; + + /** + * License type used for this entry + * + * @var KalturaLicenseType + */ + public $licenseType = null; + + /** + * Version of the entry data + * + * @var int + * @readonly + */ + public $version = null; + + /** + * Thumbnail URL + * + * @var string + * @readonly + */ + public $thumbnailUrl = null; + + /** + * The Access Control ID assigned to this entry (null when not set, send -1 to remove) + * + * @var int + */ + public $accessControlId = null; + + /** + * Entry scheduling start date (null when not set, send -1 to remove) + * + * @var int + */ + public $startDate = null; + + /** + * Entry scheduling end date (null when not set, send -1 to remove) + * + * @var int + */ + public $endDate = null; + + /** + * Entry external reference id + * + * @var string + */ + public $referenceId = null; + + /** + * ID of temporary entry that will replace this entry when it's approved and ready for replacement + * + * @var string + * @readonly + */ + public $replacingEntryId = null; + + /** + * ID of the entry that will be replaced when the replacement approved and this entry is ready + * + * @var string + * @readonly + */ + public $replacedEntryId = null; + + /** + * Status of the replacement readiness and approval + * + * @var KalturaEntryReplacementStatus + * @readonly + */ + public $replacementStatus = null; + + /** + * Can be used to store various partner related data as a numeric value + * + * @var int + */ + public $partnerSortValue = null; + + /** + * Override the default ingestion profile + * + * @var int + */ + public $conversionProfileId = null; + + /** + * IF not empty, points to an entry ID the should replace this current entry's id. + * + * @var string + */ + public $redirectEntryId = null; + + /** + * ID of source root entry, used for clipped, skipped and cropped entries that created from another entry + * + * @var string + * @readonly + */ + public $rootEntryId = null; + + /** + * ID of source root entry, used for defining entires association + * + * @var string + */ + public $parentEntryId = null; + + /** + * clipping, skipping and cropping attributes that used to create this entry + * + * @var array of KalturaOperationAttributes + */ + public $operationAttributes; + + /** + * list of user ids that are entitled to edit the entry (no server enforcement) The difference between entitledUsersEdit, entitledUsersPublish and entitledUsersView is applicative only + * + * @var string + */ + public $entitledUsersEdit = null; + + /** + * list of user ids that are entitled to publish the entry (no server enforcement) The difference between entitledUsersEdit, entitledUsersPublish and entitledUsersView is applicative only + * + * @var string + */ + public $entitledUsersPublish = null; + + /** + * list of user ids that are entitled to view the entry (no server enforcement) The difference between entitledUsersEdit, entitledUsersPublish and entitledUsersView is applicative only + * + * @var string + */ + public $entitledUsersView = null; + + /** + * Comma seperated string of the capabilities of the entry. Any capability needed can be added to this list. + * + * @var string + * @readonly + */ + public $capabilities = null; + + /** + * Template entry id + * + * @var string + * @insertonly + */ + public $templateEntryId = null; + + /** + * should we display this entry in search + * + * @var KalturaEntryDisplayInSearchType + */ + public $displayInSearch = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +abstract class KalturaBaseEntryCloneOptionItem extends KalturaObjectBase +{ + +} + +/** + * @package Kaltura + * @subpackage Client + */ +abstract class KalturaBaseResponseProfile extends KalturaObjectBase +{ + +} + +/** + * @package Kaltura + * @subpackage Client + */ +abstract class KalturaBaseSyndicationFeed extends KalturaObjectBase +{ + /** + * + * + * @var string + * @readonly + */ + public $id = null; + + /** + * + * + * @var string + * @readonly + */ + public $feedUrl = null; + + /** + * + * + * @var int + * @readonly + */ + public $partnerId = null; + + /** + * link a playlist that will set what content the feed will include + * if empty, all content will be included in feed + * + * @var string + */ + public $playlistId = null; + + /** + * feed name + * + * @var string + */ + public $name = null; + + /** + * feed status + * + * @var KalturaSyndicationFeedStatus + * @readonly + */ + public $status = null; + + /** + * feed type + * + * @var KalturaSyndicationFeedType + * @insertonly + */ + public $type = null; + + /** + * Base URL for each video, on the partners site + * This is required by all syndication types. + * + * @var string + */ + public $landingPage = null; + + /** + * Creation date as Unix timestamp (In seconds) + * + * @var int + * @readonly + */ + public $createdAt = null; + + /** + * allow_embed tells google OR yahoo weather to allow embedding the video on google OR yahoo video results + * or just to provide a link to the landing page. + * it is applied on the video-player_loc property in the XML (google) + * and addes media-player tag (yahoo) + * + * @var bool + */ + public $allowEmbed = null; + + /** + * Select a uiconf ID as player skin to include in the kwidget url + * + * @var int + */ + public $playerUiconfId = null; + + /** + * + * + * @var int + */ + public $flavorParamId = null; + + /** + * + * + * @var bool + */ + public $transcodeExistingContent = null; + + /** + * + * + * @var bool + */ + public $addToDefaultConversionProfile = null; + + /** + * + * + * @var string + */ + public $categories = null; + + /** + * + * + * @var int + */ + public $storageId = null; + + /** + * + * + * @var KalturaSyndicationFeedEntriesOrderBy + */ + public $entriesOrderBy = null; + + /** + * Should enforce entitlement on feed entries + * + * @var bool + */ + public $enforceEntitlement = null; + + /** + * Set privacy context for search entries that assiged to private and public categories within a category privacy context. + * + * @var string + */ + public $privacyContext = null; + + /** + * Update date as Unix timestamp (In seconds) + * + * @var int + * @readonly + */ + public $updatedAt = null; + + /** + * + * + * @var bool + */ + public $useCategoryEntries = null; + + /** + * Feed content-type header value + * + * @var string + */ + public $feedContentTypeHeader = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaJobData extends KalturaObjectBase +{ + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaBatchHistoryData extends KalturaObjectBase +{ + /** + * + * + * @var int + */ + public $schedulerId = null; + + /** + * + * + * @var int + */ + public $workerId = null; + + /** + * + * + * @var int + */ + public $batchIndex = null; + + /** + * + * + * @var int + */ + public $timeStamp = null; + + /** + * + * + * @var string + */ + public $message = null; + + /** + * + * + * @var int + */ + public $errType = null; + + /** + * + * + * @var int + */ + public $errNumber = null; + + /** + * + * + * @var string + */ + public $hostName = null; + + /** + * + * + * @var string + */ + public $sessionId = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaBatchJob extends KalturaObjectBase +{ + /** + * + * + * @var int + * @readonly + */ + public $id = null; + + /** + * + * + * @var int + * @readonly + */ + public $partnerId = null; + + /** + * + * + * @var int + * @readonly + */ + public $createdAt = null; + + /** + * + * + * @var int + * @readonly + */ + public $updatedAt = null; + + /** + * + * + * @var int + * @readonly + */ + public $deletedAt = null; + + /** + * + * + * @var int + * @readonly + */ + public $lockExpiration = null; + + /** + * + * + * @var int + * @readonly + */ + public $executionAttempts = null; + + /** + * + * + * @var int + * @readonly + */ + public $lockVersion = null; + + /** + * + * + * @var string + */ + public $entryId = null; + + /** + * + * + * @var string + */ + public $entryName = null; + + /** + * + * + * @var KalturaBatchJobType + * @readonly + */ + public $jobType = null; + + /** + * + * + * @var int + */ + public $jobSubType = null; + + /** + * + * + * @var KalturaJobData + */ + public $data; + + /** + * + * + * @var KalturaBatchJobStatus + */ + public $status = null; + + /** + * + * + * @var int + */ + public $abort = null; + + /** + * + * + * @var int + */ + public $checkAgainTimeout = null; + + /** + * + * + * @var string + */ + public $message = null; + + /** + * + * + * @var string + */ + public $description = null; + + /** + * + * + * @var int + */ + public $priority = null; + + /** + * + * + * @var array of KalturaBatchHistoryData + */ + public $history; + + /** + * The id of the bulk upload job that initiated this job + * + * @var int + */ + public $bulkJobId = null; + + /** + * + * + * @var int + */ + public $batchVersion = null; + + /** + * When one job creates another - the parent should set this parentJobId to be its own id. + * + * @var int + */ + public $parentJobId = null; + + /** + * The id of the root parent job + * + * @var int + */ + public $rootJobId = null; + + /** + * The time that the job was pulled from the queue + * + * @var int + */ + public $queueTime = null; + + /** + * The time that the job was finished or closed as failed + * + * @var int + */ + public $finishTime = null; + + /** + * + * + * @var KalturaBatchJobErrorTypes + */ + public $errType = null; + + /** + * + * + * @var int + */ + public $errNumber = null; + + /** + * + * + * @var int + */ + public $estimatedEffort = null; + + /** + * + * + * @var int + */ + public $urgency = null; + + /** + * + * + * @var int + */ + public $schedulerId = null; + + /** + * + * + * @var int + */ + public $workerId = null; + + /** + * + * + * @var int + */ + public $batchIndex = null; + + /** + * + * + * @var int + */ + public $lastSchedulerId = null; + + /** + * + * + * @var int + */ + public $lastWorkerId = null; + + /** + * + * + * @var int + */ + public $dc = null; + + /** + * + * + * @var string + */ + public $jobObjectId = null; + + /** + * + * + * @var int + */ + public $jobObjectType = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaPlayerDeliveryType extends KalturaObjectBase +{ + /** + * + * + * @var string + */ + public $id = null; + + /** + * + * + * @var string + */ + public $label = null; + + /** + * + * + * @var array of KalturaKeyValue + */ + public $flashvars; + + /** + * + * + * @var string + */ + public $minVersion = null; + + /** + * + * + * @var bool + */ + public $enabledByDefault = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaPlayerEmbedCodeType extends KalturaObjectBase +{ + /** + * + * + * @var string + */ + public $id = null; + + /** + * + * + * @var string + */ + public $label = null; + + /** + * + * + * @var bool + */ + public $entryOnly = null; + + /** + * + * + * @var string + */ + public $minVersion = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaESearchLanguageItem extends KalturaObjectBase +{ + /** + * + * + * @var KalturaESearchLanguage + */ + public $eSerachLanguage = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaPartner extends KalturaObjectBase +{ + /** + * + * + * @var int + * @readonly + */ + public $id = null; + + /** + * + * + * @var string + */ + public $name = null; + + /** + * + * + * @var string + */ + public $website = null; + + /** + * + * + * @var string + */ + public $notificationUrl = null; + + /** + * + * + * @var int + */ + public $appearInSearch = null; + + /** + * + * + * @var int + * @readonly + */ + public $createdAt = null; + + /** + * deprecated - lastName and firstName replaces this field + * + * @var string + */ + public $adminName = null; + + /** + * + * + * @var string + */ + public $adminEmail = null; + + /** + * + * + * @var string + */ + public $description = null; + + /** + * + * + * @var KalturaCommercialUseType + */ + public $commercialUse = null; + + /** + * + * + * @var string + */ + public $landingPage = null; + + /** + * + * + * @var string + */ + public $userLandingPage = null; + + /** + * + * + * @var string + */ + public $contentCategories = null; + + /** + * + * + * @var KalturaPartnerType + */ + public $type = null; + + /** + * + * + * @var string + */ + public $phone = null; + + /** + * + * + * @var string + */ + public $describeYourself = null; + + /** + * + * + * @var bool + */ + public $adultContent = null; + + /** + * + * + * @var string + */ + public $defConversionProfileType = null; + + /** + * + * + * @var int + */ + public $notify = null; + + /** + * + * + * @var KalturaPartnerStatus + * @readonly + */ + public $status = null; + + /** + * + * + * @var int + */ + public $allowQuickEdit = null; + + /** + * + * + * @var int + */ + public $mergeEntryLists = null; + + /** + * + * + * @var string + */ + public $notificationsConfig = null; + + /** + * + * + * @var int + */ + public $maxUploadSize = null; + + /** + * + * + * @var int + */ + public $partnerPackage = null; + + /** + * + * + * @var string + * @readonly + */ + public $secret = null; + + /** + * + * + * @var string + * @readonly + */ + public $adminSecret = null; + + /** + * + * + * @var string + * @readonly + */ + public $cmsPassword = null; + + /** + * + * + * @var int + */ + public $allowMultiNotification = null; + + /** + * + * + * @var int + * @readonly + */ + public $adminLoginUsersQuota = null; + + /** + * + * + * @var string + */ + public $adminUserId = null; + + /** + * firstName and lastName replace the old (deprecated) adminName + * + * @var string + */ + public $firstName = null; + + /** + * lastName and firstName replace the old (deprecated) adminName + * + * @var string + */ + public $lastName = null; + + /** + * country code (2char) - this field is optional + * + * @var string + */ + public $country = null; + + /** + * state code (2char) - this field is optional + * + * @var string + */ + public $state = null; + + /** + * + * + * @var array of KalturaKeyValue + * @insertonly + */ + public $additionalParams; + + /** + * + * + * @var int + * @readonly + */ + public $publishersQuota = null; + + /** + * + * + * @var KalturaPartnerGroupType + * @readonly + */ + public $partnerGroupType = null; + + /** + * + * + * @var bool + * @readonly + */ + public $defaultEntitlementEnforcement = null; + + /** + * + * + * @var string + * @readonly + */ + public $defaultDeliveryType = null; + + /** + * + * + * @var string + * @readonly + */ + public $defaultEmbedCodeType = null; + + /** + * + * + * @var array of KalturaPlayerDeliveryType + * @readonly + */ + public $deliveryTypes; + + /** + * + * + * @var array of KalturaPlayerEmbedCodeType + * @readonly + */ + public $embedCodeTypes; + + /** + * + * + * @var int + * @readonly + */ + public $templatePartnerId = null; + + /** + * + * + * @var bool + * @readonly + */ + public $ignoreSeoLinks = null; + + /** + * + * + * @var string + * @readonly + */ + public $host = null; + + /** + * + * + * @var string + * @readonly + */ + public $cdnHost = null; + + /** + * + * + * @var bool + * @readonly + */ + public $isFirstLogin = null; + + /** + * + * + * @var string + * @readonly + */ + public $logoutUrl = null; + + /** + * + * + * @var int + */ + public $partnerParentId = null; + + /** + * + * + * @var string + * @readonly + */ + public $crmId = null; + + /** + * + * + * @var string + */ + public $referenceId = null; + + /** + * + * + * @var bool + * @readonly + */ + public $timeAlignedRenditions = null; + + /** + * + * + * @var array of KalturaESearchLanguageItem + */ + public $eSearchLanguages; + + /** + * + * + * @var int + * @readonly + */ + public $publisherEnvironmentType = null; + + /** + * + * + * @var string + * @readonly + */ + public $ovpEnvironmentUrl = null; + + /** + * + * + * @var string + * @readonly + */ + public $ottEnvironmentUrl = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +abstract class KalturaValue extends KalturaObjectBase +{ + /** + * + * + * @var string + */ + public $description = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaBooleanValue extends KalturaValue +{ + /** + * + * + * @var bool + */ + public $value = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaBulkUploadPluginData extends KalturaObjectBase +{ + /** + * + * + * @var string + */ + public $field = null; + + /** + * + * + * @var string + */ + public $value = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaBulkUploadResult extends KalturaObjectBase +{ + /** + * The id of the result + * + * @var int + * @readonly + */ + public $id = null; + + /** + * The id of the parent job + * + * @var int + */ + public $bulkUploadJobId = null; + + /** + * The index of the line in the CSV + * + * @var int + */ + public $lineIndex = null; + + /** + * + * + * @var int + */ + public $partnerId = null; + + /** + * + * + * @var KalturaBulkUploadResultStatus + */ + public $status = null; + + /** + * + * + * @var KalturaBulkUploadAction + */ + public $action = null; + + /** + * + * + * @var string + */ + public $objectId = null; + + /** + * + * + * @var int + */ + public $objectStatus = null; + + /** + * + * + * @var KalturaBulkUploadObjectType + */ + public $bulkUploadResultObjectType = null; + + /** + * The data as recieved in the csv + * + * @var string + */ + public $rowData = null; + + /** + * + * + * @var string + */ + public $partnerData = null; + + /** + * + * + * @var string + */ + public $objectErrorDescription = null; + + /** + * + * + * @var array of KalturaBulkUploadPluginData + */ + public $pluginsData; + + /** + * + * + * @var string + */ + public $errorDescription = null; + + /** + * + * + * @var string + */ + public $errorCode = null; + + /** + * + * + * @var int + */ + public $errorType = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaBulkUpload extends KalturaObjectBase +{ + /** + * + * + * @var int + */ + public $id = null; + + /** + * + * + * @var string + */ + public $uploadedBy = null; + + /** + * + * + * @var string + */ + public $uploadedByUserId = null; + + /** + * + * + * @var int + */ + public $uploadedOn = null; + + /** + * + * + * @var int + */ + public $numOfEntries = null; + + /** + * + * + * @var KalturaBatchJobStatus + */ + public $status = null; + + /** + * + * + * @var string + */ + public $logFileUrl = null; + + /** + * + * + * @var string + */ + public $csvFileUrl = null; + + /** + * + * + * @var string + */ + public $bulkFileUrl = null; + + /** + * + * + * @var KalturaBulkUploadType + */ + public $bulkUploadType = null; + + /** + * + * + * @var array of KalturaBulkUploadResult + */ + public $results; + + /** + * + * + * @var string + */ + public $error = null; + + /** + * + * + * @var KalturaBatchJobErrorTypes + */ + public $errorType = null; + + /** + * + * + * @var int + */ + public $errorNumber = null; + + /** + * + * + * @var string + */ + public $fileName = null; + + /** + * + * + * @var string + */ + public $description = null; + + /** + * + * + * @var int + */ + public $numOfObjects = null; + + /** + * + * + * @var KalturaBulkUploadObjectType + */ + public $bulkUploadObjectType = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +abstract class KalturaBulkUploadObjectData extends KalturaObjectBase +{ + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaCEError extends KalturaObjectBase +{ + /** + * + * + * @var string + * @readonly + */ + public $id = null; + + /** + * + * + * @var int + */ + public $partnerId = null; + + /** + * + * + * @var string + */ + public $browser = null; + + /** + * + * + * @var string + */ + public $serverIp = null; + + /** + * + * + * @var string + */ + public $serverOs = null; + + /** + * + * + * @var string + */ + public $phpVersion = null; + + /** + * + * + * @var string + */ + public $ceAdminEmail = null; + + /** + * + * + * @var string + */ + public $type = null; + + /** + * + * + * @var string + */ + public $description = null; + + /** + * + * + * @var string + */ + public $data = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaCategory extends KalturaObjectBase +{ + /** + * The id of the Category + * + * @var int + * @readonly + */ + public $id = null; + + /** + * + * + * @var int + */ + public $parentId = null; + + /** + * + * + * @var int + * @readonly + */ + public $depth = null; + + /** + * + * + * @var int + * @readonly + */ + public $partnerId = null; + + /** + * The name of the Category. + * The following characters are not allowed: '<', '>', ',' + * + * @var string + */ + public $name = null; + + /** + * The full name of the Category + * + * @var string + * @readonly + */ + public $fullName = null; + + /** + * The full ids of the Category + * + * @var string + * @readonly + */ + public $fullIds = null; + + /** + * Number of entries in this Category (including child categories) + * + * @var int + * @readonly + */ + public $entriesCount = null; + + /** + * Creation date as Unix timestamp (In seconds) + * + * @var int + * @readonly + */ + public $createdAt = null; + + /** + * Update date as Unix timestamp (In seconds) + * + * @var int + * @readonly + */ + public $updatedAt = null; + + /** + * Category description + * + * @var string + */ + public $description = null; + + /** + * Category tags + * + * @var string + */ + public $tags = null; + + /** + * If category will be returned for list action. + * + * @var KalturaAppearInListType + */ + public $appearInList = null; + + /** + * defines the privacy of the entries that assigned to this category + * + * @var KalturaPrivacyType + */ + public $privacy = null; + + /** + * If Category members are inherited from parent category or set manualy. + * + * @var KalturaInheritanceType + */ + public $inheritanceType = null; + + /** + * Who can ask to join this category + * + * @var KalturaUserJoinPolicyType + * @readonly + */ + public $userJoinPolicy = null; + + /** + * Default permissionLevel for new users + * + * @var KalturaCategoryUserPermissionLevel + */ + public $defaultPermissionLevel = null; + + /** + * Category Owner (User id) + * + * @var string + */ + public $owner = null; + + /** + * Number of entries that belong to this category directly + * + * @var int + * @readonly + */ + public $directEntriesCount = null; + + /** + * Category external id, controlled and managed by the partner. + * + * @var string + */ + public $referenceId = null; + + /** + * who can assign entries to this category + * + * @var KalturaContributionPolicyType + */ + public $contributionPolicy = null; + + /** + * Number of active members for this category + * + * @var int + * @readonly + */ + public $membersCount = null; + + /** + * Number of pending members for this category + * + * @var int + * @readonly + */ + public $pendingMembersCount = null; + + /** + * Set privacy context for search entries that assiged to private and public categories. the entries will be private if the search context is set with those categories. + * + * @var string + */ + public $privacyContext = null; + + /** + * comma separated parents that defines a privacyContext for search + * + * @var string + * @readonly + */ + public $privacyContexts = null; + + /** + * Status + * + * @var KalturaCategoryStatus + * @readonly + */ + public $status = null; + + /** + * The category id that this category inherit its members and members permission (for contribution and join) + * + * @var int + * @readonly + */ + public $inheritedParentId = null; + + /** + * Can be used to store various partner related data as a numeric value + * + * @var int + */ + public $partnerSortValue = null; + + /** + * Can be used to store various partner related data as a string + * + * @var string + */ + public $partnerData = null; + + /** + * Enable client side applications to define how to sort the category child categories + * + * @var KalturaCategoryOrderBy + */ + public $defaultOrderBy = null; + + /** + * Number of direct children categories + * + * @var int + * @readonly + */ + public $directSubCategoriesCount = null; + + /** + * Moderation to add entries to this category by users that are not of permission level Manager or Moderator. + * + * @var KalturaNullableBoolean + */ + public $moderation = null; + + /** + * Nunber of pending moderation entries + * + * @var int + * @readonly + */ + public $pendingEntriesCount = null; + + /** + * Flag indicating that the category is an aggregation category + * + * @var KalturaNullableBoolean + */ + public $isAggregationCategory = null; + + /** + * List of aggregation channels the category belongs to + * + * @var string + */ + public $aggregationCategories = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaCategoryEntry extends KalturaObjectBase +{ + /** + * + * + * @var int + */ + public $categoryId = null; + + /** + * entry id + * + * @var string + */ + public $entryId = null; + + /** + * Creation date as Unix timestamp (In seconds) + * + * @var int + * @readonly + */ + public $createdAt = null; + + /** + * The full ids of the Category + * + * @var string + * @readonly + */ + public $categoryFullIds = null; + + /** + * CategroyEntry status + * + * @var KalturaCategoryEntryStatus + * @readonly + */ + public $status = null; + + /** + * CategroyEntry creator puser ID + * + * @var string + * @readonly + */ + public $creatorUserId = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaCategoryUser extends KalturaObjectBase +{ + /** + * + * + * @var int + * @insertonly + */ + public $categoryId = null; + + /** + * User id + * + * @var string + * @insertonly + */ + public $userId = null; + + /** + * Partner id + * + * @var int + * @readonly + */ + public $partnerId = null; + + /** + * Permission level + * + * @var KalturaCategoryUserPermissionLevel + */ + public $permissionLevel = null; + + /** + * Status + * + * @var KalturaCategoryUserStatus + * @readonly + */ + public $status = null; + + /** + * CategoryUser creation date as Unix timestamp (In seconds) + * + * @var int + * @readonly + */ + public $createdAt = null; + + /** + * CategoryUser update date as Unix timestamp (In seconds) + * + * @var int + * @readonly + */ + public $updatedAt = null; + + /** + * Update method can be either manual or automatic to distinguish between manual operations (for example in KMC) on automatic - using bulk upload + * + * @var KalturaUpdateMethodType + */ + public $updateMethod = null; + + /** + * The full ids of the Category + * + * @var string + * @readonly + */ + public $categoryFullIds = null; + + /** + * Set of category-related permissions for the current category user. + * + * @var string + */ + public $permissionNames = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaClientConfiguration extends KalturaObjectBase +{ + /** + * + * + * @var string + */ + public $clientTag = null; + + /** + * + * + * @var string + */ + public $apiVersion = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaClientNotification extends KalturaObjectBase +{ + /** + * The URL where the notification should be sent to + * + * @var string + */ + public $url = null; + + /** + * The serialized notification data to send + * + * @var string + */ + public $data = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaClipDescription extends KalturaObjectBase +{ + /** + * + * + * @var string + */ + public $sourceEntryId = null; + + /** + * + * + * @var int + */ + public $startTime = null; + + /** + * + * + * @var int + */ + public $duration = null; + + /** + * + * + * @var int + */ + public $offsetInDestination = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +abstract class KalturaContext extends KalturaObjectBase +{ + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaContextDataResult extends KalturaObjectBase +{ + /** + * Array of messages as received from the rules that invalidated + * + * @var array of KalturaString + */ + public $messages; + + /** + * Array of actions as received from the rules that invalidated + * + * @var array of KalturaRuleAction + */ + public $actions; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaControlPanelCommand extends KalturaObjectBase +{ + /** + * The id of the Category + * + * @var int + * @readonly + */ + public $id = null; + + /** + * Creation date as Unix timestamp (In seconds) + * + * @var int + * @readonly + */ + public $createdAt = null; + + /** + * Creator name + * + * @var string + */ + public $createdBy = null; + + /** + * Update date as Unix timestamp (In seconds) + * + * @var int + * @readonly + */ + public $updatedAt = null; + + /** + * Updater name + * + * @var string + */ + public $updatedBy = null; + + /** + * Creator id + * + * @var int + */ + public $createdById = null; + + /** + * The id of the scheduler that the command refers to + * + * @var int + */ + public $schedulerId = null; + + /** + * The id of the scheduler worker that the command refers to + * + * @var int + */ + public $workerId = null; + + /** + * The id of the scheduler worker as configured in the ini file + * + * @var int + */ + public $workerConfiguredId = null; + + /** + * The name of the scheduler worker that the command refers to + * + * @var int + */ + public $workerName = null; + + /** + * The index of the batch process that the command refers to + * + * @var int + */ + public $batchIndex = null; + + /** + * The command type - stop / start / config + * + * @var KalturaControlPanelCommandType + */ + public $type = null; + + /** + * The command target type - data center / scheduler / job / job type + * + * @var KalturaControlPanelCommandTargetType + */ + public $targetType = null; + + /** + * The command status + * + * @var KalturaControlPanelCommandStatus + */ + public $status = null; + + /** + * The reason for the command + * + * @var string + */ + public $cause = null; + + /** + * Command description + * + * @var string + */ + public $description = null; + + /** + * Error description + * + * @var string + */ + public $errorDescription = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaConversionAttribute extends KalturaObjectBase +{ + /** + * The id of the flavor params, set to null for source flavor + * + * @var int + */ + public $flavorParamsId = null; + + /** + * Attribute name + * + * @var string + */ + public $name = null; + + /** + * Attribute value + * + * @var string + */ + public $value = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaCropDimensions extends KalturaObjectBase +{ + /** + * Crop left point + * + * @var int + */ + public $left = null; + + /** + * Crop top point + * + * @var int + */ + public $top = null; + + /** + * Crop width + * + * @var int + */ + public $width = null; + + /** + * Crop height + * + * @var int + */ + public $height = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +abstract class KalturaPluginReplacementOptionsItem extends KalturaObjectBase +{ + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaEntryReplacementOptions extends KalturaObjectBase +{ + /** + * If true manually created thumbnails will not be deleted on entry replacement + * + * @var int + */ + public $keepManualThumbnails = null; + + /** + * Array of plugin replacement options + * + * @var array of KalturaPluginReplacementOptionsItem + */ + public $pluginOptionItems; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaConversionProfile extends KalturaObjectBase +{ + /** + * The id of the Conversion Profile + * + * @var int + * @readonly + */ + public $id = null; + + /** + * + * + * @var int + * @readonly + */ + public $partnerId = null; + + /** + * + * + * @var KalturaConversionProfileStatus + */ + public $status = null; + + /** + * + * + * @var KalturaConversionProfileType + * @insertonly + */ + public $type = null; + + /** + * The name of the Conversion Profile + * + * @var string + */ + public $name = null; + + /** + * System name of the Conversion Profile + * + * @var string + */ + public $systemName = null; + + /** + * Comma separated tags + * + * @var string + */ + public $tags = null; + + /** + * The description of the Conversion Profile + * + * @var string + */ + public $description = null; + + /** + * ID of the default entry to be used for template data + * + * @var string + */ + public $defaultEntryId = null; + + /** + * Creation date as Unix timestamp (In seconds) + * + * @var int + * @readonly + */ + public $createdAt = null; + + /** + * List of included flavor ids (comma separated) + * + * @var string + */ + public $flavorParamsIds = null; + + /** + * Indicates that this conversion profile is system default + * + * @var KalturaNullableBoolean + */ + public $isDefault = null; + + /** + * Indicates that this conversion profile is partner default + * + * @var bool + * @readonly + */ + public $isPartnerDefault = null; + + /** + * Cropping dimensions + * + * @var KalturaCropDimensions + */ + public $cropDimensions; + + /** + * Clipping start position (in miliseconds) + * + * @var int + */ + public $clipStart = null; + + /** + * Clipping duration (in miliseconds) + * + * @var int + */ + public $clipDuration = null; + + /** + * XSL to transform ingestion MRSS XML + * + * @var string + */ + public $xslTransformation = null; + + /** + * ID of default storage profile to be used for linked net-storage file syncs + * + * @var int + */ + public $storageProfileId = null; + + /** + * Media parser type to be used for extract media + * + * @var KalturaMediaParserType + */ + public $mediaParserType = null; + + /** + * Should calculate file conversion complexity + * + * @var KalturaNullableBoolean + */ + public $calculateComplexity = null; + + /** + * Defines the tags that should be used to define 'collective'/group/multi-flavor processing, + * like 'mbr' or 'ism' + * + * @var string + */ + public $collectionTags = null; + + /** + * JSON string with array of "condition,profile-id" pairs. + * + * @var string + */ + public $conditionalProfiles = null; + + /** + * When set, the ExtractMedia job should detect the source file GOP using this value as the max calculated period + * + * @var int + */ + public $detectGOP = null; + + /** + * XSL to transform ingestion Media Info XML + * + * @var string + */ + public $mediaInfoXslTransformation = null; + + /** + * Default replacement options to be applied to entries + * + * @var KalturaEntryReplacementOptions + */ + public $defaultReplacementOptions; + + /** + * + * + * @var KalturaLanguage + */ + public $defaultAudioLang = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaConversionProfileAssetParams extends KalturaObjectBase +{ + /** + * The id of the conversion profile + * + * @var int + * @readonly + */ + public $conversionProfileId = null; + + /** + * The id of the asset params + * + * @var int + * @readonly + */ + public $assetParamsId = null; + + /** + * The ingestion origin of the asset params + * + * @var KalturaFlavorReadyBehaviorType + */ + public $readyBehavior = null; + + /** + * The ingestion origin of the asset params + * + * @var KalturaAssetParamsOrigin + */ + public $origin = null; + + /** + * Asset params system name + * + * @var string + */ + public $systemName = null; + + /** + * Starts conversion even if the decision layer reduced the configuration to comply with the source + * + * @var KalturaNullableBoolean + */ + public $forceNoneComplied = null; + + /** + * Specifies how to treat the flavor after conversion is finished + * + * @var KalturaAssetParamsDeletePolicy + */ + public $deletePolicy = null; + + /** + * + * + * @var KalturaNullableBoolean + */ + public $isEncrypted = null; + + /** + * + * + * @var float + */ + public $contentAwareness = null; + + /** + * + * + * @var int + */ + public $chunkedEncodeMode = null; + + /** + * + * + * @var KalturaNullableBoolean + */ + public $twoPass = null; + + /** + * + * + * @var string + */ + public $tags = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaConvertCollectionFlavorData extends KalturaObjectBase +{ + /** + * + * + * @var string + */ + public $flavorAssetId = null; + + /** + * + * + * @var int + */ + public $flavorParamsOutputId = null; + + /** + * + * + * @var int + */ + public $readyBehavior = null; + + /** + * + * + * @var int + */ + public $videoBitrate = null; + + /** + * + * + * @var int + */ + public $audioBitrate = null; + + /** + * + * + * @var string + */ + public $destFileSyncLocalPath = null; + + /** + * + * + * @var string + */ + public $destFileSyncRemoteUrl = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaCoordinate extends KalturaObjectBase +{ + /** + * + * + * @var float + */ + public $latitude = null; + + /** + * + * + * @var float + */ + public $longitude = null; + + /** + * + * + * @var string + */ + public $name = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaCsvAdditionalFieldInfo extends KalturaObjectBase +{ + /** + * + * + * @var string + */ + public $fieldName = null; + + /** + * + * + * @var string + */ + public $xpath = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaDataEntry extends KalturaBaseEntry +{ + /** + * The data of the entry + * + * @var string + */ + public $dataContent = null; + + /** + * indicator whether to return the object for get action with the dataContent field. + * + * @var bool + * @insertonly + */ + public $retrieveDataContentByGet = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaUrlRecognizer extends KalturaObjectBase +{ + /** + * The hosts that are recognized + * + * @var string + */ + public $hosts = null; + + /** + * The URI prefix we use for security + * + * @var string + */ + public $uriPrefix = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaUrlTokenizer extends KalturaObjectBase +{ + /** + * Window + * + * @var int + */ + public $window = null; + + /** + * key + * + * @var string + */ + public $key = null; + + /** + * + * + * @var bool + */ + public $limitIpAddress = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +abstract class KalturaSearchItem extends KalturaObjectBase +{ + +} + +/** + * @package Kaltura + * @subpackage Client + */ +abstract class KalturaFilter extends KalturaObjectBase +{ + /** + * + * + * @var string + */ + public $orderBy = null; + + /** + * + * + * @var KalturaSearchItem + */ + public $advancedSearch; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +abstract class KalturaRelatedFilter extends KalturaFilter +{ + +} + +/** + * @package Kaltura + * @subpackage Client + */ +abstract class KalturaAssetBaseFilter extends KalturaRelatedFilter +{ + /** + * + * + * @var string + */ + public $idEqual = null; + + /** + * + * + * @var string + */ + public $idIn = null; + + /** + * + * + * @var string + */ + public $entryIdEqual = null; + + /** + * + * + * @var string + */ + public $entryIdIn = null; + + /** + * + * + * @var int + */ + public $partnerIdEqual = null; + + /** + * + * + * @var string + */ + public $partnerIdIn = null; + + /** + * + * + * @var int + */ + public $sizeGreaterThanOrEqual = null; + + /** + * + * + * @var int + */ + public $sizeLessThanOrEqual = null; + + /** + * + * + * @var string + */ + public $tagsLike = null; + + /** + * + * + * @var string + */ + public $tagsMultiLikeOr = null; + + /** + * + * + * @var string + */ + public $tagsMultiLikeAnd = null; + + /** + * + * + * @var int + */ + public $createdAtGreaterThanOrEqual = null; + + /** + * + * + * @var int + */ + public $createdAtLessThanOrEqual = null; + + /** + * + * + * @var int + */ + public $updatedAtGreaterThanOrEqual = null; + + /** + * + * + * @var int + */ + public $updatedAtLessThanOrEqual = null; + + /** + * + * + * @var int + */ + public $deletedAtGreaterThanOrEqual = null; + + /** + * + * + * @var int + */ + public $deletedAtLessThanOrEqual = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaAssetFilter extends KalturaAssetBaseFilter +{ + /** + * + * + * @var string + */ + public $typeIn = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaDeliveryProfile extends KalturaObjectBase +{ + /** + * The id of the Delivery + * + * @var int + * @readonly + */ + public $id = null; + + /** + * + * + * @var int + * @readonly + */ + public $partnerId = null; + + /** + * The name of the Delivery + * + * @var string + */ + public $name = null; + + /** + * Delivery type + * + * @var KalturaDeliveryProfileType + */ + public $type = null; + + /** + * System name of the delivery + * + * @var string + */ + public $systemName = null; + + /** + * The description of the Delivery + * + * @var string + */ + public $description = null; + + /** + * Creation time as Unix timestamp (In seconds) + * + * @var int + * @readonly + */ + public $createdAt = null; + + /** + * Update time as Unix timestamp (In seconds) + * + * @var int + * @readonly + */ + public $updatedAt = null; + + /** + * + * + * @var KalturaPlaybackProtocol + */ + public $streamerType = null; + + /** + * + * + * @var string + */ + public $url = null; + + /** + * the host part of the url + * + * @var string + * @readonly + */ + public $hostName = null; + + /** + * + * + * @var KalturaDeliveryStatus + */ + public $status = null; + + /** + * + * + * @var KalturaUrlRecognizer + */ + public $recognizer; + + /** + * + * + * @var KalturaUrlTokenizer + */ + public $tokenizer; + + /** + * True if this is the systemwide default for the protocol + * + * @var KalturaNullableBoolean + * @readonly + */ + public $isDefault = null; + + /** + * the object from which this object was cloned (or 0) + * + * @var int + * @readonly + */ + public $parentId = null; + + /** + * Comma separated list of supported media protocols. f.i. rtmpe + * + * @var string + */ + public $mediaProtocols = null; + + /** + * priority used for ordering similar delivery profiles + * + * @var int + */ + public $priority = null; + + /** + * Extra query string parameters that should be added to the url + * + * @var string + */ + public $extraParams = null; + + /** + * A filter that can be used to include additional assets in the URL (e.g. captions) + * + * @var KalturaAssetFilter + */ + public $supplementaryAssetsFilter; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaFileSyncDescriptor extends KalturaObjectBase +{ + /** + * + * + * @var string + */ + public $fileSyncLocalPath = null; + + /** + * + * + * @var string + */ + public $fileEncryptionKey = null; + + /** + * The translated path as used by the scheduler + * + * @var string + */ + public $fileSyncRemoteUrl = null; + + /** + * + * + * @var int + */ + public $fileSyncObjectSubType = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaDestFileSyncDescriptor extends KalturaFileSyncDescriptor +{ + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaPager extends KalturaObjectBase +{ + /** + * The number of objects to retrieve. (Default is 30, maximum page size is 500). + * + * @var int + */ + public $pageSize = null; + + /** + * The page number for which {pageSize} of objects should be retrieved (Default is 1). + * + * @var int + */ + public $pageIndex = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaFilterPager extends KalturaPager +{ + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaResponseProfileMapping extends KalturaObjectBase +{ + /** + * + * + * @var string + */ + public $parentProperty = null; + + /** + * + * + * @var string + */ + public $filterProperty = null; + + /** + * + * + * @var bool + */ + public $allowNull = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaDetachedResponseProfile extends KalturaBaseResponseProfile +{ + /** + * Friendly name + * + * @var string + */ + public $name = null; + + /** + * + * + * @var KalturaResponseProfileType + */ + public $type = null; + + /** + * Comma separated fields list to be included or excluded + * + * @var string + */ + public $fields = null; + + /** + * + * + * @var KalturaRelatedFilter + */ + public $filter; + + /** + * + * + * @var KalturaFilterPager + */ + public $pager; + + /** + * + * + * @var array of KalturaDetachedResponseProfile + */ + public $relatedProfiles; + + /** + * + * + * @var array of KalturaResponseProfileMapping + */ + public $mappings; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaPluginData extends KalturaObjectBase +{ + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaDrmPlaybackPluginData extends KalturaPluginData +{ + /** + * + * + * @var KalturaDrmSchemeName + */ + public $scheme = null; + + /** + * + * + * @var string + */ + public $licenseURL = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaEmailIngestionProfile extends KalturaObjectBase +{ + /** + * + * + * @var int + * @readonly + */ + public $id = null; + + /** + * + * + * @var string + */ + public $name = null; + + /** + * + * + * @var string + */ + public $description = null; + + /** + * + * + * @var string + */ + public $emailAddress = null; + + /** + * + * + * @var string + */ + public $mailboxId = null; + + /** + * + * + * @var int + * @readonly + */ + public $partnerId = null; + + /** + * + * + * @var int + */ + public $conversionProfile2Id = null; + + /** + * + * + * @var KalturaEntryModerationStatus + */ + public $moderationStatus = null; + + /** + * + * + * @var KalturaEmailIngestionProfileStatus + * @readonly + */ + public $status = null; + + /** + * + * + * @var string + * @readonly + */ + public $createdAt = null; + + /** + * + * + * @var string + */ + public $defaultCategory = null; + + /** + * + * + * @var string + */ + public $defaultUserId = null; + + /** + * + * + * @var string + */ + public $defaultTags = null; + + /** + * + * + * @var string + */ + public $defaultAdminTags = null; + + /** + * + * + * @var int + */ + public $maxAttachmentSizeKbytes = null; + + /** + * + * + * @var int + */ + public $maxAttachmentsPerMail = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaStringValue extends KalturaValue +{ + /** + * + * + * @var string + */ + public $value = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +abstract class KalturaEntryServerNode extends KalturaObjectBase +{ + /** + * unique auto-generated identifier + * + * @var int + * @readonly + */ + public $id = null; + + /** + * + * + * @var string + * @readonly + */ + public $entryId = null; + + /** + * + * + * @var int + * @readonly + */ + public $serverNodeId = null; + + /** + * + * + * @var int + * @readonly + */ + public $partnerId = null; + + /** + * + * + * @var int + * @readonly + */ + public $createdAt = null; + + /** + * + * + * @var int + * @readonly + */ + public $updatedAt = null; + + /** + * + * + * @var KalturaEntryServerNodeStatus + * @readonly + */ + public $status = null; + + /** + * + * + * @var KalturaEntryServerNodeType + * @readonly + */ + public $serverType = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +abstract class KalturaObjectIdentifier extends KalturaObjectBase +{ + /** + * Comma separated string of enum values denoting which features of the item need to be included in the MRSS + * + * @var string + */ + public $extendedFeatures = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaExtendingItemMrssParameter extends KalturaObjectBase +{ + /** + * XPath for the extending item + * + * @var string + */ + public $xpath = null; + + /** + * Object identifier + * + * @var KalturaObjectIdentifier + */ + public $identifier; + + /** + * Mode of extension - append to MRSS or replace the xpath content. + * + * @var KalturaMrssExtensionMode + */ + public $extensionMode = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaPlayableEntry extends KalturaBaseEntry +{ + /** + * Number of plays + * + * @var int + * @readonly + */ + public $plays = null; + + /** + * Number of views + * + * @var int + * @readonly + */ + public $views = null; + + /** + * The last time the entry was played + * + * @var int + * @readonly + */ + public $lastPlayedAt = null; + + /** + * The width in pixels + * + * @var int + * @readonly + */ + public $width = null; + + /** + * The height in pixels + * + * @var int + * @readonly + */ + public $height = null; + + /** + * The duration in seconds + * + * @var int + * @readonly + */ + public $duration = null; + + /** + * The duration in miliseconds + * + * @var int + */ + public $msDuration = null; + + /** + * The duration type (short for 0-4 mins, medium for 4-20 mins, long for 20+ mins) + * + * @var KalturaDurationType + * @readonly + */ + public $durationType = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaStreamContainer extends KalturaObjectBase +{ + /** + * + * + * @var string + */ + public $type = null; + + /** + * + * + * @var int + */ + public $trackIndex = null; + + /** + * + * + * @var string + */ + public $language = null; + + /** + * + * + * @var int + */ + public $channelIndex = null; + + /** + * + * + * @var string + */ + public $label = null; + + /** + * + * + * @var string + */ + public $channelLayout = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaMediaEntry extends KalturaPlayableEntry +{ + /** + * The media type of the entry + * + * @var KalturaMediaType + * @insertonly + */ + public $mediaType = null; + + /** + * Override the default conversion quality + * + * @var string + * @insertonly + */ + public $conversionQuality = null; + + /** + * The source type of the entry + * + * @var KalturaSourceType + * @insertonly + */ + public $sourceType = null; + + /** + * The search provider type used to import this entry + * + * @var KalturaSearchProviderType + * @insertonly + */ + public $searchProviderType = null; + + /** + * The ID of the media in the importing site + * + * @var string + * @insertonly + */ + public $searchProviderId = null; + + /** + * The user name used for credits + * + * @var string + */ + public $creditUserName = null; + + /** + * The URL for credits + * + * @var string + */ + public $creditUrl = null; + + /** + * The media date extracted from EXIF data (For images) as Unix timestamp (In seconds) + * + * @var int + * @readonly + */ + public $mediaDate = null; + + /** + * The URL used for playback. This is not the download URL. + * + * @var string + * @readonly + */ + public $dataUrl = null; + + /** + * Comma separated flavor params ids that exists for this media entry + * + * @var string + * @readonly + */ + public $flavorParamsIds = null; + + /** + * True if trim action is disabled for this entry + * + * @var KalturaNullableBoolean + * @readonly + */ + public $isTrimDisabled = null; + + /** + * Array of streams that exists on the entry + * + * @var array of KalturaStreamContainer + */ + public $streams; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaFeatureStatus extends KalturaObjectBase +{ + /** + * + * + * @var KalturaFeatureStatusType + */ + public $type = null; + + /** + * + * + * @var int + */ + public $value = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaFileAsset extends KalturaObjectBase +{ + /** + * + * + * @var int + * @readonly + */ + public $id = null; + + /** + * + * + * @var int + * @readonly + */ + public $partnerId = null; + + /** + * + * + * @var KalturaFileAssetObjectType + * @insertonly + */ + public $fileAssetObjectType = null; + + /** + * + * + * @var string + * @insertonly + */ + public $objectId = null; + + /** + * + * + * @var string + */ + public $name = null; + + /** + * + * + * @var string + */ + public $systemName = null; + + /** + * + * + * @var string + */ + public $fileExt = null; + + /** + * + * + * @var int + * @readonly + */ + public $version = null; + + /** + * + * + * @var int + * @readonly + */ + public $createdAt = null; + + /** + * + * + * @var int + * @readonly + */ + public $updatedAt = null; + + /** + * + * + * @var KalturaFileAssetStatus + * @readonly + */ + public $status = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaFileContainer extends KalturaObjectBase +{ + /** + * + * + * @var string + */ + public $filePath = null; + + /** + * + * + * @var string + */ + public $encryptionKey = null; + + /** + * + * + * @var int + */ + public $fileSize = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaFlavorAsset extends KalturaAsset +{ + /** + * The Flavor Params used to create this Flavor Asset + * + * @var int + * @insertonly + */ + public $flavorParamsId = null; + + /** + * The width of the Flavor Asset + * + * @var int + * @readonly + */ + public $width = null; + + /** + * The height of the Flavor Asset + * + * @var int + * @readonly + */ + public $height = null; + + /** + * The overall bitrate (in KBits) of the Flavor Asset + * + * @var int + * @readonly + */ + public $bitrate = null; + + /** + * The frame rate (in FPS) of the Flavor Asset + * + * @var float + * @readonly + */ + public $frameRate = null; + + /** + * True if this Flavor Asset is the original source + * + * @var bool + * @readonly + */ + public $isOriginal = null; + + /** + * True if this Flavor Asset is playable in KDP + * + * @var bool + * @readonly + */ + public $isWeb = null; + + /** + * The container format + * + * @var string + * @readonly + */ + public $containerFormat = null; + + /** + * The video codec + * + * @var string + * @readonly + */ + public $videoCodecId = null; + + /** + * The status of the Flavor Asset + * + * @var KalturaFlavorAssetStatus + * @readonly + */ + public $status = null; + + /** + * The language of the flavor asset + * + * @var KalturaLanguage + */ + public $language = null; + + /** + * The label of the flavor asset + * + * @var string + */ + public $label = null; + + /** + * Is default flavor asset of the entry (This field will be taken into account selectign which audio flavor will be selected as default) + * + * @var KalturaNullableBoolean + */ + public $isDefault = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaFlavorAssetUrlOptions extends KalturaObjectBase +{ + /** + * The name of the downloaded file + * + * @var string + */ + public $fileName = null; + + /** + * + * + * @var string + */ + public $referrer = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaFlavorParams extends KalturaAssetParams +{ + /** + * The video codec of the Flavor Params + * + * @var KalturaVideoCodec + */ + public $videoCodec = null; + + /** + * The video bitrate (in KBits) of the Flavor Params + * + * @var int + */ + public $videoBitrate = null; + + /** + * The audio codec of the Flavor Params + * + * @var KalturaAudioCodec + */ + public $audioCodec = null; + + /** + * The audio bitrate (in KBits) of the Flavor Params + * + * @var int + */ + public $audioBitrate = null; + + /** + * The number of audio channels for "downmixing" + * + * @var int + */ + public $audioChannels = null; + + /** + * The audio sample rate of the Flavor Params + * + * @var int + */ + public $audioSampleRate = null; + + /** + * The desired width of the Flavor Params + * + * @var int + */ + public $width = null; + + /** + * The desired height of the Flavor Params + * + * @var int + */ + public $height = null; + + /** + * The frame rate of the Flavor Params + * + * @var float + */ + public $frameRate = null; + + /** + * The gop size of the Flavor Params + * + * @var int + */ + public $gopSize = null; + + /** + * The list of conversion engines (comma separated) + * + * @var string + */ + public $conversionEngines = null; + + /** + * The list of conversion engines extra params (separated with "|") + * + * @var string + */ + public $conversionEnginesExtraParams = null; + + /** + * + * + * @var bool + */ + public $twoPass = null; + + /** + * + * + * @var int + */ + public $deinterlice = null; + + /** + * + * + * @var int + */ + public $rotate = null; + + /** + * + * + * @var string + */ + public $operators = null; + + /** + * + * + * @var int + */ + public $engineVersion = null; + + /** + * The container format of the Flavor Params + * + * @var KalturaContainerFormat + */ + public $format = null; + + /** + * + * + * @var int + */ + public $aspectRatioProcessingMode = null; + + /** + * + * + * @var int + */ + public $forceFrameToMultiplication16 = null; + + /** + * + * + * @var int + */ + public $isGopInSec = null; + + /** + * + * + * @var int + */ + public $isAvoidVideoShrinkFramesizeToSource = null; + + /** + * + * + * @var int + */ + public $isAvoidVideoShrinkBitrateToSource = null; + + /** + * + * + * @var int + */ + public $isVideoFrameRateForLowBrAppleHls = null; + + /** + * + * + * @var string + */ + public $multiStream = null; + + /** + * + * + * @var float + */ + public $anamorphicPixels = null; + + /** + * + * + * @var int + */ + public $isAvoidForcedKeyFrames = null; + + /** + * + * + * @var int + */ + public $forcedKeyFramesMode = null; + + /** + * + * + * @var int + */ + public $isCropIMX = null; + + /** + * + * + * @var int + */ + public $optimizationPolicy = null; + + /** + * + * + * @var int + */ + public $maxFrameRate = null; + + /** + * + * + * @var int + */ + public $videoConstantBitrate = null; + + /** + * + * + * @var int + */ + public $videoBitrateTolerance = null; + + /** + * + * + * @var string + */ + public $watermarkData = null; + + /** + * + * + * @var string + */ + public $subtitlesData = null; + + /** + * + * + * @var int + */ + public $isEncrypted = null; + + /** + * + * + * @var float + */ + public $contentAwareness = null; + + /** + * + * + * @var int + */ + public $chunkedEncodeMode = null; + + /** + * + * + * @var int + */ + public $clipOffset = null; + + /** + * + * + * @var int + */ + public $clipDuration = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaFlavorAssetWithParams extends KalturaObjectBase +{ + /** + * The Flavor Asset (Can be null when there are params without asset) + * + * @var KalturaFlavorAsset + */ + public $flavorAsset; + + /** + * The Flavor Params + * + * @var KalturaFlavorParams + */ + public $flavorParams; + + /** + * The entry id + * + * @var string + */ + public $entryId = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaFlavorParamsOutput extends KalturaFlavorParams +{ + /** + * + * + * @var int + */ + public $flavorParamsId = null; + + /** + * + * + * @var string + */ + public $commandLinesStr = null; + + /** + * + * + * @var string + */ + public $flavorParamsVersion = null; + + /** + * + * + * @var string + */ + public $flavorAssetId = null; + + /** + * + * + * @var string + */ + public $flavorAssetVersion = null; + + /** + * + * + * @var int + */ + public $readyBehavior = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaSchedulerStatus extends KalturaObjectBase +{ + /** + * The id of the Category + * + * @var int + * @readonly + */ + public $id = null; + + /** + * The configured id of the scheduler + * + * @var int + */ + public $schedulerConfiguredId = null; + + /** + * The configured id of the job worker + * + * @var int + */ + public $workerConfiguredId = null; + + /** + * The type of the job worker. + * + * @var KalturaBatchJobType + */ + public $workerType = null; + + /** + * The status type + * + * @var KalturaSchedulerStatusType + */ + public $type = null; + + /** + * The status value + * + * @var int + */ + public $value = null; + + /** + * The id of the scheduler + * + * @var int + * @readonly + */ + public $schedulerId = null; + + /** + * The id of the worker + * + * @var int + * @readonly + */ + public $workerId = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaSchedulerConfig extends KalturaObjectBase +{ + /** + * The id of the Category + * + * @var int + * @readonly + */ + public $id = null; + + /** + * Creator name + * + * @var string + */ + public $createdBy = null; + + /** + * Updater name + * + * @var string + */ + public $updatedBy = null; + + /** + * Id of the control panel command that created this config item + * + * @var string + */ + public $commandId = null; + + /** + * The status of the control panel command + * + * @var string + */ + public $commandStatus = null; + + /** + * The id of the scheduler + * + * @var int + */ + public $schedulerId = null; + + /** + * The configured id of the scheduler + * + * @var int + */ + public $schedulerConfiguredId = null; + + /** + * The name of the scheduler + * + * @var string + */ + public $schedulerName = null; + + /** + * The id of the job worker + * + * @var int + */ + public $workerId = null; + + /** + * The configured id of the job worker + * + * @var int + */ + public $workerConfiguredId = null; + + /** + * The name of the job worker + * + * @var string + */ + public $workerName = null; + + /** + * The name of the variable + * + * @var string + */ + public $variable = null; + + /** + * The part of the variable + * + * @var string + */ + public $variablePart = null; + + /** + * The value of the variable + * + * @var string + */ + public $value = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaSchedulerWorker extends KalturaObjectBase +{ + /** + * The id of the Worker + * + * @var int + * @readonly + */ + public $id = null; + + /** + * The id as configured in the batch config + * + * @var int + */ + public $configuredId = null; + + /** + * The id of the Scheduler + * + * @var int + */ + public $schedulerId = null; + + /** + * The id of the scheduler as configured in the batch config + * + * @var int + */ + public $schedulerConfiguredId = null; + + /** + * The worker type + * + * @var KalturaBatchJobType + */ + public $type = null; + + /** + * The friendly name of the type + * + * @var string + */ + public $typeName = null; + + /** + * The scheduler name + * + * @var string + */ + public $name = null; + + /** + * Array of the last statuses + * + * @var array of KalturaSchedulerStatus + */ + public $statuses; + + /** + * Array of the last configs + * + * @var array of KalturaSchedulerConfig + */ + public $configs; + + /** + * Array of jobs that locked to this worker + * + * @var array of KalturaBatchJob + */ + public $lockedJobs; + + /** + * Avarage time between creation and queue time + * + * @var int + */ + public $avgWait = null; + + /** + * Avarage time between queue time end finish time + * + * @var int + */ + public $avgWork = null; + + /** + * last status time + * + * @var int + */ + public $lastStatus = null; + + /** + * last status formated + * + * @var string + */ + public $lastStatusStr = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaScheduler extends KalturaObjectBase +{ + /** + * The id of the Scheduler + * + * @var int + * @readonly + */ + public $id = null; + + /** + * The id as configured in the batch config + * + * @var int + */ + public $configuredId = null; + + /** + * The scheduler name + * + * @var string + */ + public $name = null; + + /** + * The host name + * + * @var string + */ + public $host = null; + + /** + * Array of the last statuses + * + * @var array of KalturaSchedulerStatus + * @readonly + */ + public $statuses; + + /** + * Array of the last configs + * + * @var array of KalturaSchedulerConfig + * @readonly + */ + public $configs; + + /** + * Array of the workers + * + * @var array of KalturaSchedulerWorker + * @readonly + */ + public $workers; + + /** + * creation time + * + * @var int + * @readonly + */ + public $createdAt = null; + + /** + * last status time + * + * @var int + * @readonly + */ + public $lastStatus = null; + + /** + * last status formated + * + * @var string + * @readonly + */ + public $lastStatusStr = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaGroupUser extends KalturaObjectBase +{ + /** + * + * + * @var string + * @insertonly + */ + public $userId = null; + + /** + * + * + * @var string + * @insertonly + */ + public $groupId = null; + + /** + * + * + * @var KalturaGroupUserStatus + * @readonly + */ + public $status = null; + + /** + * + * + * @var int + * @readonly + */ + public $partnerId = null; + + /** + * Creation date as Unix timestamp (In seconds) + * + * @var int + * @readonly + */ + public $createdAt = null; + + /** + * Last update date as Unix timestamp (In seconds) + * + * @var int + * @readonly + */ + public $updatedAt = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +abstract class KalturaObject extends KalturaObjectBase +{ + /** + * + * + * @var map + * @readonly + */ + public $relatedObjects; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaIntegerValue extends KalturaValue +{ + /** + * + * + * @var int + */ + public $value = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaLiveStreamConfiguration extends KalturaObjectBase +{ + /** + * + * + * @var KalturaPlaybackProtocol + */ + public $protocol = null; + + /** + * + * + * @var string + */ + public $url = null; + + /** + * + * + * @var string + */ + public $publishUrl = null; + + /** + * + * + * @var string + */ + public $backupUrl = null; + + /** + * + * + * @var string + */ + public $streamName = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaLiveStreamPushPublishConfiguration extends KalturaObjectBase +{ + /** + * + * + * @var string + */ + public $publishUrl = null; + + /** + * + * + * @var string + */ + public $backupPublishUrl = null; + + /** + * + * + * @var string + */ + public $port = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaLiveEntryRecordingOptions extends KalturaObjectBase +{ + /** + * + * + * @var KalturaNullableBoolean + */ + public $shouldCopyEntitlement = null; + + /** + * + * + * @var KalturaNullableBoolean + */ + public $shouldCopyScheduling = null; + + /** + * + * + * @var KalturaNullableBoolean + */ + public $shouldCopyThumbnail = null; + + /** + * + * + * @var KalturaNullableBoolean + */ + public $shouldMakeHidden = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +abstract class KalturaLiveEntry extends KalturaMediaEntry +{ + /** + * The message to be presented when the stream is offline + * + * @var string + */ + public $offlineMessage = null; + + /** + * Recording Status Enabled/Disabled + * + * @var KalturaRecordStatus + */ + public $recordStatus = null; + + /** + * DVR Status Enabled/Disabled + * + * @var KalturaDVRStatus + */ + public $dvrStatus = null; + + /** + * Window of time which the DVR allows for backwards scrubbing (in minutes) + * + * @var int + */ + public $dvrWindow = null; + + /** + * Elapsed recording time (in msec) up to the point where the live stream was last stopped (unpublished). + * + * @var int + */ + public $lastElapsedRecordingTime = null; + + /** + * Array of key value protocol->live stream url objects + * + * @var array of KalturaLiveStreamConfiguration + */ + public $liveStreamConfigurations; + + /** + * Recorded entry id + * + * @var string + */ + public $recordedEntryId = null; + + /** + * Flag denoting whether entry should be published by the media server + * + * @var KalturaLivePublishStatus + */ + public $pushPublishEnabled = null; + + /** + * Array of publish configurations + * + * @var array of KalturaLiveStreamPushPublishConfiguration + */ + public $publishConfigurations; + + /** + * The first time in which the entry was broadcast + * + * @var int + * @readonly + */ + public $firstBroadcast = null; + + /** + * The Last time in which the entry was broadcast + * + * @var int + * @readonly + */ + public $lastBroadcast = null; + + /** + * The time (unix timestamp in milliseconds) in which the entry broadcast started or 0 when the entry is off the air + * + * @var float + */ + public $currentBroadcastStartTime = null; + + /** + * + * + * @var KalturaLiveEntryRecordingOptions + */ + public $recordingOptions; + + /** + * the status of the entry of type EntryServerNodeStatus + * + * @var KalturaEntryServerNodeStatus + * @readonly + */ + public $liveStatus = null; + + /** + * The chunk duration value in milliseconds + * + * @var int + */ + public $segmentDuration = null; + + /** + * + * + * @var KalturaNullableBoolean + */ + public $explicitLive = null; + + /** + * + * + * @var KalturaViewMode + */ + public $viewMode = null; + + /** + * + * + * @var KalturaRecordingStatus + */ + public $recordingStatus = null; + + /** + * The time the last broadcast finished. + * + * @var int + * @readonly + */ + public $lastBroadcastEndTime = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaLiveChannel extends KalturaLiveEntry +{ + /** + * Playlist id to be played + * + * @var string + */ + public $playlistId = null; + + /** + * Indicates that the segments should be repeated for ever + * + * @var KalturaNullableBoolean + */ + public $repeat = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaLiveChannelSegment extends KalturaObjectBase +{ + /** + * Unique identifier + * + * @var int + * @readonly + */ + public $id = null; + + /** + * + * + * @var int + * @readonly + */ + public $partnerId = null; + + /** + * Segment creation date as Unix timestamp (In seconds) + * + * @var int + * @readonly + */ + public $createdAt = null; + + /** + * Segment update date as Unix timestamp (In seconds) + * + * @var int + * @readonly + */ + public $updatedAt = null; + + /** + * Segment name + * + * @var string + */ + public $name = null; + + /** + * Segment description + * + * @var string + */ + public $description = null; + + /** + * Segment tags + * + * @var string + */ + public $tags = null; + + /** + * Segment could be associated with the main stream, as additional stream or as overlay + * + * @var KalturaLiveChannelSegmentType + */ + public $type = null; + + /** + * + * + * @var KalturaLiveChannelSegmentStatus + * @readonly + */ + public $status = null; + + /** + * Live channel id + * + * @var string + */ + public $channelId = null; + + /** + * Entry id to be played + * + * @var string + */ + public $entryId = null; + + /** + * Segment start time trigger type + * + * @var KalturaLiveChannelSegmentTriggerType + */ + public $triggerType = null; + + /** + * Live channel segment that the trigger relates to + * + * @var int + */ + public $triggerSegmentId = null; + + /** + * Segment play start time, in mili-seconds, according to trigger type + * + * @var float + */ + public $startTime = null; + + /** + * Segment play duration time, in mili-seconds + * + * @var float + */ + public $duration = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaLiveEntryServerNodeRecordingInfo extends KalturaObjectBase +{ + /** + * + * + * @var string + */ + public $recordedEntryId = null; + + /** + * + * + * @var int + */ + public $duration = null; + + /** + * + * + * @var KalturaEntryServerNodeRecordingStatus + */ + public $recordingStatus = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaLiveReportExportParams extends KalturaObjectBase +{ + /** + * + * + * @var string + */ + public $entryIds = null; + + /** + * + * + * @var string + */ + public $recpientEmail = null; + + /** + * Time zone offset in minutes (between client to UTC) + * + * @var int + */ + public $timeZoneOffset = null; + + /** + * Optional argument that allows controlling the prefix of the exported csv url + * + * @var string + */ + public $applicationUrlTemplate = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaLiveReportExportResponse extends KalturaObjectBase +{ + /** + * + * + * @var int + */ + public $referenceJobId = null; + + /** + * + * + * @var string + */ + public $reportEmail = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaLiveReportInputFilter extends KalturaObjectBase +{ + /** + * + * + * @var string + */ + public $entryIds = null; + + /** + * + * + * @var int + */ + public $fromTime = null; + + /** + * + * + * @var int + */ + public $toTime = null; + + /** + * + * + * @var KalturaNullableBoolean + */ + public $live = null; + + /** + * + * + * @var KalturaLiveReportOrderBy + */ + public $orderBy = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaLiveStats extends KalturaObjectBase +{ + /** + * + * + * @var int + */ + public $audience = null; + + /** + * + * + * @var int + */ + public $dvrAudience = null; + + /** + * + * + * @var float + */ + public $avgBitrate = null; + + /** + * + * + * @var int + */ + public $bufferTime = null; + + /** + * + * + * @var int + */ + public $plays = null; + + /** + * + * + * @var int + */ + public $secondsViewed = null; + + /** + * + * + * @var int + */ + public $startEvent = null; + + /** + * + * + * @var int + */ + public $timestamp = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaLiveStatsEvent extends KalturaObjectBase +{ + /** + * + * + * @var int + */ + public $partnerId = null; + + /** + * + * + * @var string + */ + public $entryId = null; + + /** + * an integer representing the type of event being sent from the player + * + * @var KalturaLiveStatsEventType + */ + public $eventType = null; + + /** + * a unique string generated by the client that will represent the client-side session: the primary component will pass it on to other components that sprout from it + * + * @var string + */ + public $sessionId = null; + + /** + * incremental sequence of the event + * + * @var int + */ + public $eventIndex = null; + + /** + * buffer time in seconds from the last 10 seconds + * + * @var int + */ + public $bufferTime = null; + + /** + * bitrate used in the last 10 seconds + * + * @var int + */ + public $bitrate = null; + + /** + * the referrer of the client + * + * @var string + */ + public $referrer = null; + + /** + * + * + * @var bool + */ + public $isLive = null; + + /** + * the event start time as string + * + * @var string + */ + public $startTime = null; + + /** + * delivery type used for this stream + * + * @var KalturaPlaybackProtocol + */ + public $deliveryType = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaLiveStreamBitrate extends KalturaObjectBase +{ + /** + * + * + * @var int + */ + public $bitrate = null; + + /** + * + * + * @var int + */ + public $width = null; + + /** + * + * + * @var int + */ + public $height = null; + + /** + * + * + * @var string + */ + public $tags = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaLiveStreamEntry extends KalturaLiveEntry +{ + /** + * The stream id as provided by the provider + * + * @var string + * @readonly + */ + public $streamRemoteId = null; + + /** + * The backup stream id as provided by the provider + * + * @var string + * @readonly + */ + public $streamRemoteBackupId = null; + + /** + * Array of supported bitrates + * + * @var array of KalturaLiveStreamBitrate + */ + public $bitrates; + + /** + * + * + * @var string + */ + public $primaryBroadcastingUrl = null; + + /** + * + * + * @var string + */ + public $secondaryBroadcastingUrl = null; + + /** + * + * + * @var string + */ + public $primaryRtspBroadcastingUrl = null; + + /** + * + * + * @var string + */ + public $secondaryRtspBroadcastingUrl = null; + + /** + * + * + * @var string + */ + public $streamName = null; + + /** + * The stream url + * + * @var string + */ + public $streamUrl = null; + + /** + * HLS URL - URL for live stream playback on mobile device + * + * @var string + */ + public $hlsStreamUrl = null; + + /** + * URL Manager to handle the live stream URL (for instance, add token) + * + * @var string + */ + public $urlManager = null; + + /** + * The broadcast primary ip + * + * @var string + */ + public $encodingIP1 = null; + + /** + * The broadcast secondary ip + * + * @var string + */ + public $encodingIP2 = null; + + /** + * The broadcast password + * + * @var string + */ + public $streamPassword = null; + + /** + * The broadcast username + * + * @var string + * @readonly + */ + public $streamUsername = null; + + /** + * The Streams primary server node id + * + * @var int + * @readonly + */ + public $primaryServerNodeId = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaLiveStreamParams extends KalturaObjectBase +{ + /** + * Bit rate of the stream. (i.e. 900) + * + * @var int + */ + public $bitrate = null; + + /** + * flavor asset id + * + * @var string + */ + public $flavorId = null; + + /** + * Stream's width + * + * @var int + */ + public $width = null; + + /** + * Stream's height + * + * @var int + */ + public $height = null; + + /** + * Live stream's codec + * + * @var string + */ + public $codec = null; + + /** + * Live stream's farme rate + * + * @var int + */ + public $frameRate = null; + + /** + * Live stream's key frame interval + * + * @var float + */ + public $keyFrameInterval = null; + + /** + * Live stream's language + * + * @var string + */ + public $language = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +abstract class KalturaBaseEntryBaseFilter extends KalturaRelatedFilter +{ + /** + * This filter should be in use for retrieving only a specific entry (identified by its entryId). + * + * @var string + */ + public $idEqual = null; + + /** + * This filter should be in use for retrieving few specific entries (string should include comma separated list of entryId strings). + * + * @var string + */ + public $idIn = null; + + /** + * + * + * @var string + */ + public $idNotIn = null; + + /** + * This filter should be in use for retrieving specific entries. It should include only one string to search for in entry names (no wildcards, spaces are treated as part of the string). + * + * @var string + */ + public $nameLike = null; + + /** + * This filter should be in use for retrieving specific entries. It could include few (comma separated) strings for searching in entry names, while applying an OR logic to retrieve entries that contain at least one input string (no wildcards, spaces are treated as part of the string). + * + * @var string + */ + public $nameMultiLikeOr = null; + + /** + * This filter should be in use for retrieving specific entries. It could include few (comma separated) strings for searching in entry names, while applying an AND logic to retrieve entries that contain all input strings (no wildcards, spaces are treated as part of the string). + * + * @var string + */ + public $nameMultiLikeAnd = null; + + /** + * This filter should be in use for retrieving entries with a specific name. + * + * @var string + */ + public $nameEqual = null; + + /** + * This filter should be in use for retrieving only entries which were uploaded by/assigned to users of a specific Kaltura Partner (identified by Partner ID). + * + * @var int + */ + public $partnerIdEqual = null; + + /** + * This filter should be in use for retrieving only entries within Kaltura network which were uploaded by/assigned to users of few Kaltura Partners (string should include comma separated list of PartnerIDs) + * + * @var string + */ + public $partnerIdIn = null; + + /** + * This filter parameter should be in use for retrieving only entries, uploaded by/assigned to a specific user (identified by user Id). + * + * @var string + */ + public $userIdEqual = null; + + /** + * + * + * @var string + */ + public $userIdIn = null; + + /** + * + * + * @var string + */ + public $userIdNotIn = null; + + /** + * + * + * @var string + */ + public $creatorIdEqual = null; + + /** + * This filter should be in use for retrieving specific entries. It should include only one string to search for in entry tags (no wildcards, spaces are treated as part of the string). + * + * @var string + */ + public $tagsLike = null; + + /** + * This filter should be in use for retrieving specific entries. It could include few (comma separated) strings for searching in entry tags, while applying an OR logic to retrieve entries that contain at least one input string (no wildcards, spaces are treated as part of the string). + * + * @var string + */ + public $tagsMultiLikeOr = null; + + /** + * This filter should be in use for retrieving specific entries. It could include few (comma separated) strings for searching in entry tags, while applying an AND logic to retrieve entries that contain all input strings (no wildcards, spaces are treated as part of the string). + * + * @var string + */ + public $tagsMultiLikeAnd = null; + + /** + * This filter should be in use for retrieving specific entries. It should include only one string to search for in entry tags set by an ADMIN user (no wildcards, spaces are treated as part of the string). + * + * @var string + */ + public $adminTagsLike = null; + + /** + * This filter should be in use for retrieving specific entries. It could include few (comma separated) strings for searching in entry tags, set by an ADMIN user, while applying an OR logic to retrieve entries that contain at least one input string (no wildcards, spaces are treated as part of the string). + * + * @var string + */ + public $adminTagsMultiLikeOr = null; + + /** + * This filter should be in use for retrieving specific entries. It could include few (comma separated) strings for searching in entry tags, set by an ADMIN user, while applying an AND logic to retrieve entries that contain all input strings (no wildcards, spaces are treated as part of the string). + * + * @var string + */ + public $adminTagsMultiLikeAnd = null; + + /** + * + * + * @var string + */ + public $categoriesMatchAnd = null; + + /** + * All entries within these categories or their child categories. + * + * @var string + */ + public $categoriesMatchOr = null; + + /** + * + * + * @var string + */ + public $categoriesNotContains = null; + + /** + * + * + * @var string + */ + public $categoriesIdsMatchAnd = null; + + /** + * All entries of the categories, excluding their child categories. + * To include entries of the child categories, use categoryAncestorIdIn, or categoriesMatchOr. + * + * @var string + */ + public $categoriesIdsMatchOr = null; + + /** + * + * + * @var string + */ + public $categoriesIdsNotContains = null; + + /** + * + * + * @var KalturaNullableBoolean + */ + public $categoriesIdsEmpty = null; + + /** + * This filter should be in use for retrieving only entries, at a specific { + * + * @var KalturaEntryStatus + */ + public $statusEqual = null; + + /** + * This filter should be in use for retrieving only entries, not at a specific { + * + * @var KalturaEntryStatus + */ + public $statusNotEqual = null; + + /** + * This filter should be in use for retrieving only entries, at few specific { + * + * @var string + */ + public $statusIn = null; + + /** + * This filter should be in use for retrieving only entries, not at few specific { + * + * @var string + */ + public $statusNotIn = null; + + /** + * + * + * @var KalturaEntryModerationStatus + */ + public $moderationStatusEqual = null; + + /** + * + * + * @var KalturaEntryModerationStatus + */ + public $moderationStatusNotEqual = null; + + /** + * + * + * @var string + */ + public $moderationStatusIn = null; + + /** + * + * + * @var string + */ + public $moderationStatusNotIn = null; + + /** + * + * + * @var KalturaEntryType + */ + public $typeEqual = null; + + /** + * This filter should be in use for retrieving entries of few { + * + * @var string + */ + public $typeIn = null; + + /** + * This filter parameter should be in use for retrieving only entries which were created at Kaltura system after a specific time/date (standard timestamp format). + * + * @var int + */ + public $createdAtGreaterThanOrEqual = null; + + /** + * This filter parameter should be in use for retrieving only entries which were created at Kaltura system before a specific time/date (standard timestamp format). + * + * @var int + */ + public $createdAtLessThanOrEqual = null; + + /** + * + * + * @var int + */ + public $updatedAtGreaterThanOrEqual = null; + + /** + * + * + * @var int + */ + public $updatedAtLessThanOrEqual = null; + + /** + * + * + * @var int + */ + public $totalRankLessThanOrEqual = null; + + /** + * + * + * @var int + */ + public $totalRankGreaterThanOrEqual = null; + + /** + * + * + * @var int + */ + public $groupIdEqual = null; + + /** + * This filter should be in use for retrieving specific entries while search match the input string within all of the following metadata attributes: name, description, tags, adminTags. + * + * @var string + */ + public $searchTextMatchAnd = null; + + /** + * This filter should be in use for retrieving specific entries while search match the input string within at least one of the following metadata attributes: name, description, tags, adminTags. + * + * @var string + */ + public $searchTextMatchOr = null; + + /** + * + * + * @var int + */ + public $accessControlIdEqual = null; + + /** + * + * + * @var string + */ + public $accessControlIdIn = null; + + /** + * + * + * @var int + */ + public $startDateGreaterThanOrEqual = null; + + /** + * + * + * @var int + */ + public $startDateLessThanOrEqual = null; + + /** + * + * + * @var int + */ + public $startDateGreaterThanOrEqualOrNull = null; + + /** + * + * + * @var int + */ + public $startDateLessThanOrEqualOrNull = null; + + /** + * + * + * @var int + */ + public $endDateGreaterThanOrEqual = null; + + /** + * + * + * @var int + */ + public $endDateLessThanOrEqual = null; + + /** + * + * + * @var int + */ + public $endDateGreaterThanOrEqualOrNull = null; + + /** + * + * + * @var int + */ + public $endDateLessThanOrEqualOrNull = null; + + /** + * + * + * @var string + */ + public $referenceIdEqual = null; + + /** + * + * + * @var string + */ + public $referenceIdIn = null; + + /** + * + * + * @var string + */ + public $replacingEntryIdEqual = null; + + /** + * + * + * @var string + */ + public $replacingEntryIdIn = null; + + /** + * + * + * @var string + */ + public $replacedEntryIdEqual = null; + + /** + * + * + * @var string + */ + public $replacedEntryIdIn = null; + + /** + * + * + * @var KalturaEntryReplacementStatus + */ + public $replacementStatusEqual = null; + + /** + * + * + * @var string + */ + public $replacementStatusIn = null; + + /** + * + * + * @var int + */ + public $partnerSortValueGreaterThanOrEqual = null; + + /** + * + * + * @var int + */ + public $partnerSortValueLessThanOrEqual = null; + + /** + * + * + * @var string + */ + public $rootEntryIdEqual = null; + + /** + * + * + * @var string + */ + public $rootEntryIdIn = null; + + /** + * + * + * @var string + */ + public $parentEntryIdEqual = null; + + /** + * + * + * @var string + */ + public $entitledUsersEditMatchAnd = null; + + /** + * + * + * @var string + */ + public $entitledUsersEditMatchOr = null; + + /** + * + * + * @var string + */ + public $entitledUsersPublishMatchAnd = null; + + /** + * + * + * @var string + */ + public $entitledUsersPublishMatchOr = null; + + /** + * + * + * @var string + */ + public $entitledUsersViewMatchAnd = null; + + /** + * + * + * @var string + */ + public $entitledUsersViewMatchOr = null; + + /** + * + * + * @var string + */ + public $tagsNameMultiLikeOr = null; + + /** + * + * + * @var string + */ + public $tagsAdminTagsMultiLikeOr = null; + + /** + * + * + * @var string + */ + public $tagsAdminTagsNameMultiLikeOr = null; + + /** + * + * + * @var string + */ + public $tagsNameMultiLikeAnd = null; + + /** + * + * + * @var string + */ + public $tagsAdminTagsMultiLikeAnd = null; + + /** + * + * + * @var string + */ + public $tagsAdminTagsNameMultiLikeAnd = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaBaseEntryFilter extends KalturaBaseEntryBaseFilter +{ + /** + * + * + * @var string + */ + public $freeText = null; + + /** + * + * + * @var KalturaNullableBoolean + */ + public $isRoot = null; + + /** + * + * + * @var string + */ + public $categoriesFullNameIn = null; + + /** + * All entries within this categoy or in child categories + * + * @var string + */ + public $categoryAncestorIdIn = null; + + /** + * The id of the original entry + * + * @var string + */ + public $redirectFromEntryId = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +abstract class KalturaPlayableEntryBaseFilter extends KalturaBaseEntryFilter +{ + /** + * + * + * @var int + */ + public $lastPlayedAtGreaterThanOrEqual = null; + + /** + * + * + * @var int + */ + public $lastPlayedAtLessThanOrEqual = null; + + /** + * + * + * @var int + */ + public $durationLessThan = null; + + /** + * + * + * @var int + */ + public $durationGreaterThan = null; + + /** + * + * + * @var int + */ + public $durationLessThanOrEqual = null; + + /** + * + * + * @var int + */ + public $durationGreaterThanOrEqual = null; + + /** + * + * + * @var string + */ + public $durationTypeMatchOr = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaPlayableEntryFilter extends KalturaPlayableEntryBaseFilter +{ + +} + +/** + * @package Kaltura + * @subpackage Client + */ +abstract class KalturaMediaEntryBaseFilter extends KalturaPlayableEntryFilter +{ + /** + * + * + * @var KalturaMediaType + */ + public $mediaTypeEqual = null; + + /** + * + * + * @var string + */ + public $mediaTypeIn = null; + + /** + * + * + * @var KalturaSourceType + */ + public $sourceTypeEqual = null; + + /** + * + * + * @var KalturaSourceType + */ + public $sourceTypeNotEqual = null; + + /** + * + * + * @var string + */ + public $sourceTypeIn = null; + + /** + * + * + * @var string + */ + public $sourceTypeNotIn = null; + + /** + * + * + * @var int + */ + public $mediaDateGreaterThanOrEqual = null; + + /** + * + * + * @var int + */ + public $mediaDateLessThanOrEqual = null; + + /** + * + * + * @var string + */ + public $flavorParamsIdsMatchOr = null; + + /** + * + * + * @var string + */ + public $flavorParamsIdsMatchAnd = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaMediaEntryFilter extends KalturaMediaEntryBaseFilter +{ + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaMediaEntryFilterForPlaylist extends KalturaMediaEntryFilter +{ + /** + * + * + * @var int + */ + public $limit = null; + + /** + * + * + * @var string + */ + public $name = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaMediaInfo extends KalturaObjectBase +{ + /** + * The id of the media info + * + * @var int + * @readonly + */ + public $id = null; + + /** + * The id of the related flavor asset + * + * @var string + */ + public $flavorAssetId = null; + + /** + * The file size + * + * @var int + */ + public $fileSize = null; + + /** + * The container format + * + * @var string + */ + public $containerFormat = null; + + /** + * The container id + * + * @var string + */ + public $containerId = null; + + /** + * The container profile + * + * @var string + */ + public $containerProfile = null; + + /** + * The container duration + * + * @var int + */ + public $containerDuration = null; + + /** + * The container bit rate + * + * @var int + */ + public $containerBitRate = null; + + /** + * The video format + * + * @var string + */ + public $videoFormat = null; + + /** + * The video codec id + * + * @var string + */ + public $videoCodecId = null; + + /** + * The video duration + * + * @var int + */ + public $videoDuration = null; + + /** + * The video bit rate + * + * @var int + */ + public $videoBitRate = null; + + /** + * The video bit rate mode + * + * @var KalturaBitRateMode + */ + public $videoBitRateMode = null; + + /** + * The video width + * + * @var int + */ + public $videoWidth = null; + + /** + * The video height + * + * @var int + */ + public $videoHeight = null; + + /** + * The video frame rate + * + * @var float + */ + public $videoFrameRate = null; + + /** + * The video display aspect ratio (dar) + * + * @var float + */ + public $videoDar = null; + + /** + * + * + * @var int + */ + public $videoRotation = null; + + /** + * The audio format + * + * @var string + */ + public $audioFormat = null; + + /** + * The audio codec id + * + * @var string + */ + public $audioCodecId = null; + + /** + * The audio duration + * + * @var int + */ + public $audioDuration = null; + + /** + * The audio bit rate + * + * @var int + */ + public $audioBitRate = null; + + /** + * The audio bit rate mode + * + * @var KalturaBitRateMode + */ + public $audioBitRateMode = null; + + /** + * The number of audio channels + * + * @var int + */ + public $audioChannels = null; + + /** + * The audio sampling rate + * + * @var int + */ + public $audioSamplingRate = null; + + /** + * The audio resolution + * + * @var int + */ + public $audioResolution = null; + + /** + * The writing library + * + * @var string + */ + public $writingLib = null; + + /** + * The data as returned by the mediainfo command line + * + * @var string + */ + public $rawData = null; + + /** + * + * + * @var string + */ + public $multiStreamInfo = null; + + /** + * + * + * @var int + */ + public $scanType = null; + + /** + * + * + * @var string + */ + public $multiStream = null; + + /** + * + * + * @var int + */ + public $isFastStart = null; + + /** + * + * + * @var string + */ + public $contentStreams = null; + + /** + * + * + * @var int + */ + public $complexityValue = null; + + /** + * + * + * @var float + */ + public $maxGOP = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaMixEntry extends KalturaPlayableEntry +{ + /** + * Indicates whether the user has submited a real thumbnail to the mix (Not the one that was generated automaticaly) + * + * @var bool + * @readonly + */ + public $hasRealThumbnail = null; + + /** + * The editor type used to edit the metadata + * + * @var KalturaEditorType + */ + public $editorType = null; + + /** + * The xml data of the mix + * + * @var string + */ + public $dataContent = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaModerationFlag extends KalturaObjectBase +{ + /** + * Moderation flag id + * + * @var int + * @readonly + */ + public $id = null; + + /** + * + * + * @var int + * @readonly + */ + public $partnerId = null; + + /** + * The user id that added the moderation flag + * + * @var string + * @readonly + */ + public $userId = null; + + /** + * The type of the moderation flag (entry or user) + * + * @var KalturaModerationObjectType + * @readonly + */ + public $moderationObjectType = null; + + /** + * If moderation flag is set for entry, this is the flagged entry id + * + * @var string + */ + public $flaggedEntryId = null; + + /** + * If moderation flag is set for user, this is the flagged user id + * + * @var string + */ + public $flaggedUserId = null; + + /** + * The moderation flag status + * + * @var KalturaModerationFlagStatus + * @readonly + */ + public $status = null; + + /** + * The comment that was added to the flag + * + * @var string + */ + public $comments = null; + + /** + * + * + * @var KalturaModerationFlagType + */ + public $flagType = null; + + /** + * + * + * @var int + * @readonly + */ + public $createdAt = null; + + /** + * + * + * @var int + * @readonly + */ + public $updatedAt = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaPartnerStatistics extends KalturaObjectBase +{ + /** + * Package total allowed bandwidth and storage + * + * @var int + * @readonly + */ + public $packageBandwidthAndStorage = null; + + /** + * Partner total hosting in GB on the disk + * + * @var float + * @readonly + */ + public $hosting = null; + + /** + * Partner total bandwidth in GB + * + * @var float + * @readonly + */ + public $bandwidth = null; + + /** + * total usage in GB - including bandwidth and storage + * + * @var int + * @readonly + */ + public $usage = null; + + /** + * Percent of usage out of partner's package. if usage is 5GB and package is 10GB, this value will be 50 + * + * @var float + * @readonly + */ + public $usagePercent = null; + + /** + * date when partner reached the limit of his package (timestamp) + * + * @var int + * @readonly + */ + public $reachedLimitDate = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaPartnerUsage extends KalturaObjectBase +{ + /** + * Partner total hosting in GB on the disk + * + * @var float + * @readonly + */ + public $hostingGB = null; + + /** + * percent of usage out of partner's package. if usageGB is 5 and package is 10GB, this value will be 50 + * + * @var float + * @readonly + */ + public $Percent = null; + + /** + * package total BW - actually this is usage, which represents BW+storage + * + * @var int + * @readonly + */ + public $packageBW = null; + + /** + * total usage in GB - including bandwidth and storage + * + * @var float + * @readonly + */ + public $usageGB = null; + + /** + * date when partner reached the limit of his package (timestamp) + * + * @var int + * @readonly + */ + public $reachedLimitDate = null; + + /** + * a semi-colon separated list of comma-separated key-values to represent a usage graph. + * keys could be 1-12 for a year view (1,1.2;2,1.1;3,0.9;...;12,1.4;) + * keys could be 1-[28,29,30,31] depending on the requested month, for a daily view in a given month (1,0.4;2,0.2;...;31,0.1;) + * + * @var string + * @readonly + */ + public $usageGraph = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaPermission extends KalturaObjectBase +{ + /** + * + * + * @var int + * @readonly + */ + public $id = null; + + /** + * + * + * @var KalturaPermissionType + * @readonly + */ + public $type = null; + + /** + * + * + * @var string + */ + public $name = null; + + /** + * + * + * @var string + */ + public $friendlyName = null; + + /** + * + * + * @var string + */ + public $description = null; + + /** + * + * + * @var KalturaPermissionStatus + */ + public $status = null; + + /** + * + * + * @var int + * @readonly + */ + public $partnerId = null; + + /** + * + * + * @var string + */ + public $dependsOnPermissionNames = null; + + /** + * + * + * @var string + */ + public $tags = null; + + /** + * + * + * @var string + */ + public $permissionItemsIds = null; + + /** + * + * + * @var int + * @readonly + */ + public $createdAt = null; + + /** + * + * + * @var int + * @readonly + */ + public $updatedAt = null; + + /** + * + * + * @var string + */ + public $partnerGroup = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +abstract class KalturaPermissionItem extends KalturaObjectBase +{ + /** + * + * + * @var int + * @readonly + */ + public $id = null; + + /** + * + * + * @var KalturaPermissionItemType + * @readonly + */ + public $type = null; + + /** + * + * + * @var int + * @readonly + */ + public $partnerId = null; + + /** + * + * + * @var string + */ + public $tags = null; + + /** + * + * + * @var int + * @readonly + */ + public $createdAt = null; + + /** + * + * + * @var int + * @readonly + */ + public $updatedAt = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaPlaybackSource extends KalturaObjectBase +{ + /** + * + * + * @var string + */ + public $deliveryProfileId = null; + + /** + * source format according to delivery profile streamer type (applehttp, mpegdash etc.) + * + * @var string + */ + public $format = null; + + /** + * comma separated string according to deliveryProfile media protocols ('http,https' etc.) + * + * @var string + */ + public $protocols = null; + + /** + * comma separated string of flavor ids + * + * @var string + */ + public $flavorIds = null; + + /** + * + * + * @var string + */ + public $url = null; + + /** + * drm data object containing relevant license url ,scheme name and certificate + * + * @var array of KalturaDrmPlaybackPluginData + */ + public $drm; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaPlaybackContext extends KalturaObjectBase +{ + /** + * + * + * @var array of KalturaPlaybackSource + */ + public $sources; + + /** + * + * + * @var array of KalturaFlavorAsset + */ + public $flavorAssets; + + /** + * Array of actions as received from the rules that invalidated + * + * @var array of KalturaRuleAction + */ + public $actions; + + /** + * Array of actions as received from the rules that invalidated + * + * @var array of KalturaAccessControlMessage + */ + public $messages; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaPlaylist extends KalturaBaseEntry +{ + /** + * Content of the playlist - + * XML if the playlistType is dynamic + * text if the playlistType is static + * url if the playlistType is mRss + * + * @var string + */ + public $playlistContent = null; + + /** + * + * + * @var array of KalturaMediaEntryFilterForPlaylist + */ + public $filters; + + /** + * Maximum count of results to be returned in playlist execution + * + * @var int + */ + public $totalResults = null; + + /** + * Type of playlist + * + * @var KalturaPlaylistType + */ + public $playlistType = null; + + /** + * Number of plays + * + * @var int + * @readonly + */ + public $plays = null; + + /** + * Number of views + * + * @var int + * @readonly + */ + public $views = null; + + /** + * The duration in seconds + * + * @var int + * @readonly + */ + public $duration = null; + + /** + * The url for this playlist + * + * @var string + * @readonly + */ + public $executeUrl = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaRemotePath extends KalturaObjectBase +{ + /** + * + * + * @var int + * @readonly + */ + public $storageProfileId = null; + + /** + * + * + * @var string + * @readonly + */ + public $uri = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaUrlResource extends KalturaContentResource +{ + /** + * Remote URL, FTP, HTTP or HTTPS + * + * @var string + */ + public $url = null; + + /** + * Force Import Job + * + * @var bool + */ + public $forceAsyncDownload = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaRemoteStorageResource extends KalturaUrlResource +{ + /** + * ID of storage profile to be associated with the created file sync, used for file serving URL composing. + * + * @var int + */ + public $storageProfileId = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaReport extends KalturaObjectBase +{ + /** + * Report id + * + * @var int + * @readonly + */ + public $id = null; + + /** + * Partner id associated with the report + * + * @var int + */ + public $partnerId = null; + + /** + * Report name + * + * @var string + */ + public $name = null; + + /** + * Used to identify system reports in a friendly way + * + * @var string + */ + public $systemName = null; + + /** + * Report description + * + * @var string + */ + public $description = null; + + /** + * Report query + * + * @var string + */ + public $query = null; + + /** + * Creation date as Unix timestamp (In seconds) + * + * @var int + * @readonly + */ + public $createdAt = null; + + /** + * Last update date as Unix timestamp (In seconds) + * + * @var int + * @readonly + */ + public $updatedAt = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaReportBaseTotal extends KalturaObjectBase +{ + /** + * + * + * @var string + */ + public $id = null; + + /** + * + * + * @var string + */ + public $data = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaReportGraph extends KalturaObjectBase +{ + /** + * + * + * @var string + */ + public $id = null; + + /** + * + * + * @var string + */ + public $data = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaReportInputBaseFilter extends KalturaObjectBase +{ + /** + * Start date as Unix timestamp (In seconds) + * + * @var int + */ + public $fromDate = null; + + /** + * End date as Unix timestamp (In seconds) + * + * @var int + */ + public $toDate = null; + + /** + * Start day as string (YYYYMMDD) + * + * @var string + */ + public $fromDay = null; + + /** + * End date as string (YYYYMMDD) + * + * @var string + */ + public $toDay = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaReportResponse extends KalturaObjectBase +{ + /** + * + * + * @var string + */ + public $columns = null; + + /** + * + * + * @var array of KalturaString + */ + public $results; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaReportTable extends KalturaObjectBase +{ + /** + * + * + * @var string + * @readonly + */ + public $header = null; + + /** + * + * + * @var string + * @readonly + */ + public $data = null; + + /** + * + * + * @var int + * @readonly + */ + public $totalCount = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaReportTotal extends KalturaObjectBase +{ + /** + * + * + * @var string + */ + public $header = null; + + /** + * + * + * @var string + */ + public $data = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaRequestConfiguration extends KalturaObjectBase +{ + /** + * Impersonated partner id + * + * @var int + */ + public $partnerId = null; + + /** + * Kaltura API session + * + * @var string + */ + public $ks = null; + + /** + * Response profile - this attribute will be automatically unset after every API call. + * + * @var KalturaBaseResponseProfile + */ + public $responseProfile; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaResponseProfile extends KalturaDetachedResponseProfile +{ + /** + * Auto generated numeric identifier + * + * @var int + * @readonly + */ + public $id = null; + + /** + * Unique system name + * + * @var string + */ + public $systemName = null; + + /** + * + * + * @var int + * @readonly + */ + public $partnerId = null; + + /** + * Creation time as Unix timestamp (In seconds) + * + * @var int + * @readonly + */ + public $createdAt = null; + + /** + * Update time as Unix timestamp (In seconds) + * + * @var int + * @readonly + */ + public $updatedAt = null; + + /** + * + * + * @var KalturaResponseProfileStatus + * @readonly + */ + public $status = null; + + /** + * + * + * @var int + * @readonly + */ + public $version = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaResponseProfileCacheRecalculateOptions extends KalturaObjectBase +{ + /** + * Maximum number of keys to recalculate + * + * @var int + */ + public $limit = null; + + /** + * Class name + * + * @var string + */ + public $cachedObjectType = null; + + /** + * + * + * @var string + */ + public $objectId = null; + + /** + * + * + * @var string + */ + public $startObjectKey = null; + + /** + * + * + * @var string + */ + public $endObjectKey = null; + + /** + * + * + * @var int + */ + public $jobCreatedAt = null; + + /** + * + * + * @var bool + */ + public $isFirstLoop = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaResponseProfileCacheRecalculateResults extends KalturaObjectBase +{ + /** + * Last recalculated id + * + * @var string + */ + public $lastObjectKey = null; + + /** + * Number of recalculated keys + * + * @var int + */ + public $recalculated = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaScope extends KalturaObjectBase +{ + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaSearch extends KalturaObjectBase +{ + /** + * + * + * @var string + */ + public $keyWords = null; + + /** + * + * + * @var KalturaSearchProviderType + */ + public $searchSource = null; + + /** + * + * + * @var KalturaMediaType + */ + public $mediaType = null; + + /** + * Use this field to pass dynamic data for searching + * For example - if you set this field to "mymovies_$partner_id" + * The $partner_id will be automatically replcaed with your real partner Id + * + * @var string + */ + public $extraData = null; + + /** + * + * + * @var string + */ + public $authData = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaSearchAuthData extends KalturaObjectBase +{ + /** + * The authentication data that further should be used for search + * + * @var string + */ + public $authData = null; + + /** + * Login URL when user need to sign-in and authorize the search + * + * @var string + */ + public $loginUrl = null; + + /** + * Information when there was an error + * + * @var string + */ + public $message = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaSearchResult extends KalturaSearch +{ + /** + * + * + * @var string + */ + public $id = null; + + /** + * + * + * @var string + */ + public $title = null; + + /** + * + * + * @var string + */ + public $thumbUrl = null; + + /** + * + * + * @var string + */ + public $description = null; + + /** + * + * + * @var string + */ + public $tags = null; + + /** + * + * + * @var string + */ + public $url = null; + + /** + * + * + * @var string + */ + public $sourceLink = null; + + /** + * + * + * @var string + */ + public $credit = null; + + /** + * + * + * @var KalturaLicenseType + */ + public $licenseType = null; + + /** + * + * + * @var string + */ + public $flashPlaybackType = null; + + /** + * + * + * @var string + */ + public $fileExt = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaSearchResultResponse extends KalturaObjectBase +{ + /** + * + * + * @var array of KalturaSearchResult + * @readonly + */ + public $objects; + + /** + * + * + * @var bool + * @readonly + */ + public $needMediaInfo = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +abstract class KalturaServerNode extends KalturaObjectBase +{ + /** + * + * + * @var int + * @readonly + */ + public $id = null; + + /** + * + * + * @var int + * @readonly + */ + public $partnerId = null; + + /** + * + * + * @var int + * @readonly + */ + public $createdAt = null; + + /** + * + * + * @var int + * @readonly + */ + public $updatedAt = null; + + /** + * + * + * @var int + * @readonly + */ + public $heartbeatTime = null; + + /** + * serverNode name + * + * @var string + */ + public $name = null; + + /** + * serverNode uniqe system name + * + * @var string + */ + public $systemName = null; + + /** + * + * + * @var string + */ + public $description = null; + + /** + * serverNode hostName + * + * @var string + */ + public $hostName = null; + + /** + * + * + * @var KalturaServerNodeStatus + * @readonly + */ + public $status = null; + + /** + * + * + * @var KalturaServerNodeType + * @readonly + */ + public $type = null; + + /** + * serverNode tags + * + * @var string + */ + public $tags = null; + + /** + * DC where the serverNode is located + * + * @var int + * @readonly + */ + public $dc = null; + + /** + * Id of the parent serverNode + * + * @var string + */ + public $parentId = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaSessionInfo extends KalturaObjectBase +{ + /** + * + * + * @var string + * @readonly + */ + public $ks = null; + + /** + * + * + * @var KalturaSessionType + * @readonly + */ + public $sessionType = null; + + /** + * + * + * @var int + * @readonly + */ + public $partnerId = null; + + /** + * + * + * @var string + * @readonly + */ + public $userId = null; + + /** + * + * + * @var int + * @readonly + */ + public $expiry = null; + + /** + * + * + * @var string + * @readonly + */ + public $privileges = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaSourceFileSyncDescriptor extends KalturaFileSyncDescriptor +{ + /** + * The translated path as used by the scheduler + * + * @var string + */ + public $actualFileSyncLocalPath = null; + + /** + * + * + * @var string + */ + public $assetId = null; + + /** + * + * + * @var int + */ + public $assetParamsId = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaStartWidgetSessionResponse extends KalturaObjectBase +{ + /** + * + * + * @var int + * @readonly + */ + public $partnerId = null; + + /** + * + * + * @var string + * @readonly + */ + public $ks = null; + + /** + * + * + * @var string + * @readonly + */ + public $userId = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaStatsEvent extends KalturaObjectBase +{ + /** + * + * + * @var string + */ + public $clientVer = null; + + /** + * + * + * @var KalturaStatsEventType + */ + public $eventType = null; + + /** + * the client's timestamp of this event + * + * @var float + */ + public $eventTimestamp = null; + + /** + * a unique string generated by the client that will represent the client-side session: the primary component will pass it on to other components that sprout from it + * + * @var string + */ + public $sessionId = null; + + /** + * + * + * @var int + */ + public $partnerId = null; + + /** + * + * + * @var string + */ + public $entryId = null; + + /** + * the UV cookie - creates in the operational system and should be passed on ofr every event + * + * @var string + */ + public $uniqueViewer = null; + + /** + * + * + * @var string + */ + public $widgetId = null; + + /** + * + * + * @var int + */ + public $uiconfId = null; + + /** + * the partner's user id + * + * @var string + */ + public $userId = null; + + /** + * the timestamp along the video when the event happend + * + * @var int + */ + public $currentPoint = null; + + /** + * the duration of the video in milliseconds - will make it much faster than quering the db for each entry + * + * @var int + */ + public $duration = null; + + /** + * will be retrieved from the request of the user + * + * @var string + * @readonly + */ + public $userIp = null; + + /** + * the time in milliseconds the event took + * + * @var int + */ + public $processDuration = null; + + /** + * the id of the GUI control - will be used in the future to better understand what the user clicked + * + * @var string + */ + public $controlId = null; + + /** + * true if the user ever used seek in this session + * + * @var bool + */ + public $seek = null; + + /** + * timestamp of the new point on the timeline of the video after the user seeks + * + * @var int + */ + public $newPoint = null; + + /** + * the referrer of the client + * + * @var string + */ + public $referrer = null; + + /** + * will indicate if the event is thrown for the first video in the session + * + * @var bool + */ + public $isFirstInSession = null; + + /** + * kaltura application name + * + * @var string + */ + public $applicationId = null; + + /** + * + * + * @var int + */ + public $contextId = null; + + /** + * + * + * @var KalturaStatsFeatureType + */ + public $featureType = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaStatsKmcEvent extends KalturaObjectBase +{ + /** + * + * + * @var string + */ + public $clientVer = null; + + /** + * + * + * @var string + */ + public $kmcEventActionPath = null; + + /** + * + * + * @var KalturaStatsKmcEventType + */ + public $kmcEventType = null; + + /** + * the client's timestamp of this event + * + * @var float + */ + public $eventTimestamp = null; + + /** + * a unique string generated by the client that will represent the client-side session: the primary component will pass it on to other components that sprout from it + * + * @var string + */ + public $sessionId = null; + + /** + * + * + * @var int + */ + public $partnerId = null; + + /** + * + * + * @var string + */ + public $entryId = null; + + /** + * + * + * @var string + */ + public $widgetId = null; + + /** + * + * + * @var int + */ + public $uiconfId = null; + + /** + * the partner's user id + * + * @var string + */ + public $userId = null; + + /** + * will be retrieved from the request of the user + * + * @var string + * @readonly + */ + public $userIp = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaStorageProfile extends KalturaObjectBase +{ + /** + * + * + * @var int + * @readonly + */ + public $id = null; + + /** + * + * + * @var int + * @readonly + */ + public $createdAt = null; + + /** + * + * + * @var int + * @readonly + */ + public $updatedAt = null; + + /** + * + * + * @var int + * @readonly + */ + public $partnerId = null; + + /** + * + * + * @var string + */ + public $name = null; + + /** + * + * + * @var string + */ + public $systemName = null; + + /** + * + * + * @var string + */ + public $desciption = null; + + /** + * + * + * @var KalturaStorageProfileStatus + */ + public $status = null; + + /** + * + * + * @var KalturaStorageProfileProtocol + */ + public $protocol = null; + + /** + * + * + * @var string + */ + public $storageUrl = null; + + /** + * + * + * @var string + */ + public $storageBaseDir = null; + + /** + * + * + * @var string + */ + public $storageUsername = null; + + /** + * + * + * @var string + */ + public $storagePassword = null; + + /** + * + * + * @var bool + */ + public $storageFtpPassiveMode = null; + + /** + * + * + * @var int + */ + public $minFileSize = null; + + /** + * + * + * @var int + */ + public $maxFileSize = null; + + /** + * + * + * @var string + */ + public $flavorParamsIds = null; + + /** + * + * + * @var int + */ + public $maxConcurrentConnections = null; + + /** + * + * + * @var string + */ + public $pathManagerClass = null; + + /** + * + * + * @var array of KalturaKeyValue + */ + public $pathManagerParams; + + /** + * No need to create enum for temp field + * + * @var int + */ + public $trigger = null; + + /** + * Delivery Priority + * + * @var int + */ + public $deliveryPriority = null; + + /** + * + * + * @var KalturaStorageProfileDeliveryStatus + */ + public $deliveryStatus = null; + + /** + * + * + * @var KalturaStorageProfileReadyBehavior + */ + public $readyBehavior = null; + + /** + * Flag sugnifying that the storage exported content should be deleted when soure entry is deleted + * + * @var int + */ + public $allowAutoDelete = null; + + /** + * Indicates to the local file transfer manager to create a link to the file instead of copying it + * + * @var bool + */ + public $createFileLink = null; + + /** + * Holds storage profile export rules + * + * @var array of KalturaRule + */ + public $rules; + + /** + * Delivery profile ids + * + * @var array of KalturaKeyValue + */ + public $deliveryProfileIds; + + /** + * + * + * @var string + */ + public $privateKey = null; + + /** + * + * + * @var string + */ + public $publicKey = null; + + /** + * + * + * @var string + */ + public $passPhrase = null; + + /** + * + * + * @var bool + */ + public $shouldExportThumbs = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaSyndicationFeedEntryCount extends KalturaObjectBase +{ + /** + * the total count of entries that should appear in the feed without flavor filtering + * + * @var int + */ + public $totalEntryCount = null; + + /** + * count of entries that will appear in the feed (including all relevant filters) + * + * @var int + */ + public $actualEntryCount = null; + + /** + * count of entries that requires transcoding in order to be included in feed + * + * @var int + */ + public $requireTranscodingCount = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaThumbAsset extends KalturaAsset +{ + /** + * The Flavor Params used to create this Flavor Asset + * + * @var int + * @insertonly + */ + public $thumbParamsId = null; + + /** + * The width of the Flavor Asset + * + * @var int + * @readonly + */ + public $width = null; + + /** + * The height of the Flavor Asset + * + * @var int + * @readonly + */ + public $height = null; + + /** + * The status of the asset + * + * @var KalturaThumbAssetStatus + * @readonly + */ + public $status = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaThumbParams extends KalturaAssetParams +{ + /** + * + * + * @var KalturaThumbCropType + */ + public $cropType = null; + + /** + * + * + * @var int + */ + public $quality = null; + + /** + * + * + * @var int + */ + public $cropX = null; + + /** + * + * + * @var int + */ + public $cropY = null; + + /** + * + * + * @var int + */ + public $cropWidth = null; + + /** + * + * + * @var int + */ + public $cropHeight = null; + + /** + * + * + * @var float + */ + public $videoOffset = null; + + /** + * + * + * @var int + */ + public $width = null; + + /** + * + * + * @var int + */ + public $height = null; + + /** + * + * + * @var float + */ + public $scaleWidth = null; + + /** + * + * + * @var float + */ + public $scaleHeight = null; + + /** + * Hexadecimal value + * + * @var string + */ + public $backgroundColor = null; + + /** + * Id of the flavor params or the thumbnail params to be used as source for the thumbnail creation + * + * @var int + */ + public $sourceParamsId = null; + + /** + * The container format of the Flavor Params + * + * @var KalturaContainerFormat + */ + public $format = null; + + /** + * The image density (dpi) for example: 72 or 96 + * + * @var int + */ + public $density = null; + + /** + * Strip profiles and comments + * + * @var bool + */ + public $stripProfiles = null; + + /** + * Create thumbnail from the videoLengthpercentage second + * + * @var int + */ + public $videoOffsetInPercentage = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaThumbParamsOutput extends KalturaThumbParams +{ + /** + * + * + * @var int + */ + public $thumbParamsId = null; + + /** + * + * + * @var string + */ + public $thumbParamsVersion = null; + + /** + * + * + * @var string + */ + public $thumbAssetId = null; + + /** + * + * + * @var string + */ + public $thumbAssetVersion = null; + + /** + * + * + * @var int + */ + public $rotate = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaUiConf extends KalturaObjectBase +{ + /** + * + * + * @var int + * @readonly + */ + public $id = null; + + /** + * Name of the uiConf, this is not a primary key + * + * @var string + */ + public $name = null; + + /** + * + * + * @var string + */ + public $description = null; + + /** + * + * + * @var int + * @readonly + */ + public $partnerId = null; + + /** + * + * + * @var KalturaUiConfObjType + */ + public $objType = null; + + /** + * + * + * @var string + * @readonly + */ + public $objTypeAsString = null; + + /** + * + * + * @var int + */ + public $width = null; + + /** + * + * + * @var int + */ + public $height = null; + + /** + * + * + * @var string + */ + public $htmlParams = null; + + /** + * + * + * @var string + */ + public $swfUrl = null; + + /** + * + * + * @var string + * @readonly + */ + public $confFilePath = null; + + /** + * + * + * @var string + */ + public $confFile = null; + + /** + * + * + * @var string + */ + public $confFileFeatures = null; + + /** + * + * + * @var string + */ + public $config = null; + + /** + * + * + * @var string + */ + public $confVars = null; + + /** + * + * + * @var bool + */ + public $useCdn = null; + + /** + * + * + * @var string + */ + public $tags = null; + + /** + * + * + * @var string + */ + public $swfUrlVersion = null; + + /** + * Entry creation date as Unix timestamp (In seconds) + * + * @var int + * @readonly + */ + public $createdAt = null; + + /** + * Entry creation date as Unix timestamp (In seconds) + * + * @var int + * @readonly + */ + public $updatedAt = null; + + /** + * + * + * @var KalturaUiConfCreationMode + */ + public $creationMode = null; + + /** + * + * + * @var string + */ + public $html5Url = null; + + /** + * UiConf version + * + * @var string + * @readonly + */ + public $version = null; + + /** + * + * + * @var string + */ + public $partnerTags = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaUiConfTypeInfo extends KalturaObjectBase +{ + /** + * UiConf Type + * + * @var KalturaUiConfObjType + */ + public $type = null; + + /** + * Available versions + * + * @var array of KalturaString + */ + public $versions; + + /** + * The direcotry this type is saved at + * + * @var string + */ + public $directory = null; + + /** + * Filename for this UiConf type + * + * @var string + */ + public $filename = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaUploadResponse extends KalturaObjectBase +{ + /** + * + * + * @var string + */ + public $uploadTokenId = null; + + /** + * + * + * @var int + */ + public $fileSize = null; + + /** + * + * + * @var KalturaUploadErrorCode + */ + public $errorCode = null; + + /** + * + * + * @var string + */ + public $errorDescription = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaUploadToken extends KalturaObjectBase +{ + /** + * Upload token unique ID + * + * @var string + * @readonly + */ + public $id = null; + + /** + * Partner ID of the upload token + * + * @var int + * @readonly + */ + public $partnerId = null; + + /** + * User id for the upload token + * + * @var string + * @readonly + */ + public $userId = null; + + /** + * Status of the upload token + * + * @var KalturaUploadTokenStatus + * @readonly + */ + public $status = null; + + /** + * Name of the file for the upload token, can be empty when the upload token is created and will be updated internally after the file is uploaded + * + * @var string + * @insertonly + */ + public $fileName = null; + + /** + * File size in bytes, can be empty when the upload token is created and will be updated internally after the file is uploaded + * + * @var float + * @insertonly + */ + public $fileSize = null; + + /** + * Uploaded file size in bytes, can be used to identify how many bytes were uploaded before resuming + * + * @var float + * @readonly + */ + public $uploadedFileSize = null; + + /** + * Creation date as Unix timestamp (In seconds) + * + * @var int + * @readonly + */ + public $createdAt = null; + + /** + * Last update date as Unix timestamp (In seconds) + * + * @var int + * @readonly + */ + public $updatedAt = null; + + /** + * Upload url - to explicitly determine to which domain to adress the uploadToken->upload call + * + * @var string + * @readonly + */ + public $uploadUrl = null; + + /** + * autoFinalize - Should the upload be finalized once the file size on disk matches the file size reproted when adding the upload token. + * + * @var KalturaNullableBoolean + * @insertonly + */ + public $autoFinalize = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaUser extends KalturaObjectBase +{ + /** + * + * + * @var string + */ + public $id = null; + + /** + * + * + * @var int + * @readonly + */ + public $partnerId = null; + + /** + * + * + * @var KalturaUserType + */ + public $type = null; + + /** + * + * + * @var string + */ + public $screenName = null; + + /** + * + * + * @var string + */ + public $fullName = null; + + /** + * + * + * @var string + */ + public $email = null; + + /** + * + * + * @var int + */ + public $dateOfBirth = null; + + /** + * + * + * @var string + */ + public $country = null; + + /** + * + * + * @var string + */ + public $state = null; + + /** + * + * + * @var string + */ + public $city = null; + + /** + * + * + * @var string + */ + public $zip = null; + + /** + * + * + * @var string + */ + public $thumbnailUrl = null; + + /** + * + * + * @var string + */ + public $description = null; + + /** + * + * + * @var string + */ + public $tags = null; + + /** + * Admin tags can be updated only by using an admin session + * + * @var string + */ + public $adminTags = null; + + /** + * + * + * @var KalturaGender + */ + public $gender = null; + + /** + * + * + * @var KalturaUserStatus + */ + public $status = null; + + /** + * Creation date as Unix timestamp (In seconds) + * + * @var int + * @readonly + */ + public $createdAt = null; + + /** + * Last update date as Unix timestamp (In seconds) + * + * @var int + * @readonly + */ + public $updatedAt = null; + + /** + * Can be used to store various partner related data as a string + * + * @var string + */ + public $partnerData = null; + + /** + * + * + * @var int + */ + public $indexedPartnerDataInt = null; + + /** + * + * + * @var string + */ + public $indexedPartnerDataString = null; + + /** + * + * + * @var int + * @readonly + */ + public $storageSize = null; + + /** + * + * + * @var string + * @insertonly + */ + public $password = null; + + /** + * + * + * @var string + */ + public $firstName = null; + + /** + * + * + * @var string + */ + public $lastName = null; + + /** + * + * + * @var bool + */ + public $isAdmin = null; + + /** + * + * + * @var KalturaLanguageCode + */ + public $language = null; + + /** + * + * + * @var int + * @readonly + */ + public $lastLoginTime = null; + + /** + * + * + * @var int + * @readonly + */ + public $statusUpdatedAt = null; + + /** + * + * + * @var int + * @readonly + */ + public $deletedAt = null; + + /** + * + * + * @var bool + * @insertonly + */ + public $loginEnabled = null; + + /** + * + * + * @var string + */ + public $roleIds = null; + + /** + * + * + * @var string + * @readonly + */ + public $roleNames = null; + + /** + * + * + * @var bool + * @insertonly + */ + public $isAccountOwner = null; + + /** + * + * + * @var string + */ + public $allowedPartnerIds = null; + + /** + * + * + * @var string + */ + public $allowedPartnerPackages = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +abstract class KalturaUserEntry extends KalturaObjectBase +{ + /** + * unique auto-generated identifier + * + * @var int + * @readonly + */ + public $id = null; + + /** + * + * + * @var string + * @insertonly + */ + public $entryId = null; + + /** + * + * + * @var string + * @insertonly + */ + public $userId = null; + + /** + * + * + * @var int + * @readonly + */ + public $partnerId = null; + + /** + * + * + * @var KalturaUserEntryStatus + * @readonly + */ + public $status = null; + + /** + * + * + * @var int + * @readonly + */ + public $createdAt = null; + + /** + * + * + * @var int + * @readonly + */ + public $updatedAt = null; + + /** + * + * + * @var KalturaUserEntryType + * @readonly + */ + public $type = null; + + /** + * + * + * @var KalturaUserEntryExtendedStatus + */ + public $extendedStatus = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaUserLoginData extends KalturaObjectBase +{ + /** + * + * + * @var string + */ + public $id = null; + + /** + * + * + * @var string + */ + public $loginEmail = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaUserRole extends KalturaObjectBase +{ + /** + * + * + * @var int + * @readonly + */ + public $id = null; + + /** + * + * + * @var string + */ + public $name = null; + + /** + * + * + * @var string + */ + public $systemName = null; + + /** + * + * + * @var string + */ + public $description = null; + + /** + * + * + * @var KalturaUserRoleStatus + */ + public $status = null; + + /** + * + * + * @var int + * @readonly + */ + public $partnerId = null; + + /** + * + * + * @var string + */ + public $permissionNames = null; + + /** + * + * + * @var string + */ + public $tags = null; + + /** + * + * + * @var int + * @readonly + */ + public $createdAt = null; + + /** + * + * + * @var int + * @readonly + */ + public $updatedAt = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaWidget extends KalturaObjectBase +{ + /** + * + * + * @var string + * @readonly + */ + public $id = null; + + /** + * + * + * @var string + */ + public $sourceWidgetId = null; + + /** + * + * + * @var string + * @readonly + */ + public $rootWidgetId = null; + + /** + * + * + * @var int + * @readonly + */ + public $partnerId = null; + + /** + * + * + * @var string + */ + public $entryId = null; + + /** + * + * + * @var int + */ + public $uiConfId = null; + + /** + * + * + * @var KalturaWidgetSecurityType + */ + public $securityType = null; + + /** + * + * + * @var int + */ + public $securityPolicy = null; + + /** + * + * + * @var int + * @readonly + */ + public $createdAt = null; + + /** + * + * + * @var int + * @readonly + */ + public $updatedAt = null; + + /** + * Can be used to store various partner related data as a string + * + * @var string + */ + public $partnerData = null; + + /** + * + * + * @var string + * @readonly + */ + public $widgetHTML = null; + + /** + * Should enforce entitlement on feed entries + * + * @var bool + */ + public $enforceEntitlement = null; + + /** + * Set privacy context for search entries that assiged to private and public categories within a category privacy context. + * + * @var string + */ + public $privacyContext = null; + + /** + * Addes the HTML5 script line to the widget's embed code + * + * @var bool + */ + public $addEmbedHtml5Support = null; + + /** + * + * + * @var string + */ + public $roles = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +abstract class KalturaBatchJobBaseFilter extends KalturaFilter +{ + /** + * + * + * @var int + */ + public $idEqual = null; + + /** + * + * + * @var int + */ + public $idGreaterThanOrEqual = null; + + /** + * + * + * @var int + */ + public $partnerIdEqual = null; + + /** + * + * + * @var string + */ + public $partnerIdIn = null; + + /** + * + * + * @var string + */ + public $partnerIdNotIn = null; + + /** + * + * + * @var int + */ + public $createdAtGreaterThanOrEqual = null; + + /** + * + * + * @var int + */ + public $createdAtLessThanOrEqual = null; + + /** + * + * + * @var int + */ + public $updatedAtGreaterThanOrEqual = null; + + /** + * + * + * @var int + */ + public $updatedAtLessThanOrEqual = null; + + /** + * + * + * @var int + */ + public $executionAttemptsGreaterThanOrEqual = null; + + /** + * + * + * @var int + */ + public $executionAttemptsLessThanOrEqual = null; + + /** + * + * + * @var int + */ + public $lockVersionGreaterThanOrEqual = null; + + /** + * + * + * @var int + */ + public $lockVersionLessThanOrEqual = null; + + /** + * + * + * @var string + */ + public $entryIdEqual = null; + + /** + * + * + * @var KalturaBatchJobType + */ + public $jobTypeEqual = null; + + /** + * + * + * @var string + */ + public $jobTypeIn = null; + + /** + * + * + * @var string + */ + public $jobTypeNotIn = null; + + /** + * + * + * @var int + */ + public $jobSubTypeEqual = null; + + /** + * + * + * @var string + */ + public $jobSubTypeIn = null; + + /** + * + * + * @var string + */ + public $jobSubTypeNotIn = null; + + /** + * + * + * @var KalturaBatchJobStatus + */ + public $statusEqual = null; + + /** + * + * + * @var string + */ + public $statusIn = null; + + /** + * + * + * @var string + */ + public $statusNotIn = null; + + /** + * + * + * @var int + */ + public $priorityGreaterThanOrEqual = null; + + /** + * + * + * @var int + */ + public $priorityLessThanOrEqual = null; + + /** + * + * + * @var int + */ + public $priorityEqual = null; + + /** + * + * + * @var string + */ + public $priorityIn = null; + + /** + * + * + * @var string + */ + public $priorityNotIn = null; + + /** + * + * + * @var int + */ + public $batchVersionGreaterThanOrEqual = null; + + /** + * + * + * @var int + */ + public $batchVersionLessThanOrEqual = null; + + /** + * + * + * @var int + */ + public $batchVersionEqual = null; + + /** + * + * + * @var int + */ + public $queueTimeGreaterThanOrEqual = null; + + /** + * + * + * @var int + */ + public $queueTimeLessThanOrEqual = null; + + /** + * + * + * @var int + */ + public $finishTimeGreaterThanOrEqual = null; + + /** + * + * + * @var int + */ + public $finishTimeLessThanOrEqual = null; + + /** + * + * + * @var KalturaBatchJobErrorTypes + */ + public $errTypeEqual = null; + + /** + * + * + * @var string + */ + public $errTypeIn = null; + + /** + * + * + * @var string + */ + public $errTypeNotIn = null; + + /** + * + * + * @var int + */ + public $errNumberEqual = null; + + /** + * + * + * @var string + */ + public $errNumberIn = null; + + /** + * + * + * @var string + */ + public $errNumberNotIn = null; + + /** + * + * + * @var int + */ + public $estimatedEffortLessThan = null; + + /** + * + * + * @var int + */ + public $estimatedEffortGreaterThan = null; + + /** + * + * + * @var int + */ + public $urgencyLessThanOrEqual = null; + + /** + * + * + * @var int + */ + public $urgencyGreaterThanOrEqual = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaBatchJobFilter extends KalturaBatchJobBaseFilter +{ + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaAccessControlBlockAction extends KalturaRuleAction +{ + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaAccessControlLimitDeliveryProfilesAction extends KalturaRuleAction +{ + /** + * Comma separated list of delivery profile ids + * + * @var string + */ + public $deliveryProfileIds = null; + + /** + * + * + * @var bool + */ + public $isBlockedList = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaAccessControlLimitFlavorsAction extends KalturaRuleAction +{ + /** + * Comma separated list of flavor ids + * + * @var string + */ + public $flavorParamsIds = null; + + /** + * + * + * @var bool + */ + public $isBlockedList = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaAccessControlLimitThumbnailCaptureAction extends KalturaRuleAction +{ + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaAccessControlListResponse extends KalturaListResponse +{ + /** + * + * + * @var array of KalturaAccessControl + * @readonly + */ + public $objects; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaAccessControlModifyRequestHostRegexAction extends KalturaRuleAction +{ + /** + * Request host regex pattern + * + * @var string + */ + public $pattern = null; + + /** + * Request host regex replacment + * + * @var string + */ + public $replacement = null; + + /** + * serverNodeId to generate replacment host from + * + * @var int + */ + public $replacmenServerNodeId = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaAccessControlPreviewAction extends KalturaRuleAction +{ + /** + * + * + * @var int + */ + public $limit = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaAccessControlProfileListResponse extends KalturaListResponse +{ + /** + * + * + * @var array of KalturaAccessControlProfile + * @readonly + */ + public $objects; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaAccessControlServeRemoteEdgeServerAction extends KalturaRuleAction +{ + /** + * Comma separated list of edge servers playBack should be done from + * + * @var string + */ + public $edgeServerIds = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaAdminUser extends KalturaUser +{ + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaAmazonS3StorageProfile extends KalturaStorageProfile +{ + /** + * + * + * @var KalturaAmazonS3StorageProfileFilesPermissionLevel + */ + public $filesPermissionInS3 = null; + + /** + * + * + * @var string + */ + public $s3Region = null; + + /** + * + * + * @var string + */ + public $sseType = null; + + /** + * + * + * @var string + */ + public $sseKmsKeyId = null; + + /** + * + * + * @var string + */ + public $signatureType = null; + + /** + * + * + * @var string + */ + public $endPoint = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaApiActionPermissionItem extends KalturaPermissionItem +{ + /** + * + * + * @var string + */ + public $service = null; + + /** + * + * + * @var string + */ + public $action = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaApiParameterPermissionItem extends KalturaPermissionItem +{ + /** + * + * + * @var string + */ + public $object = null; + + /** + * + * + * @var string + */ + public $parameter = null; + + /** + * + * + * @var KalturaApiParameterPermissionItemAction + */ + public $action = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +abstract class KalturaAppTokenBaseFilter extends KalturaFilter +{ + /** + * + * + * @var string + */ + public $idEqual = null; + + /** + * + * + * @var string + */ + public $idIn = null; + + /** + * + * + * @var int + */ + public $createdAtGreaterThanOrEqual = null; + + /** + * + * + * @var int + */ + public $createdAtLessThanOrEqual = null; + + /** + * + * + * @var int + */ + public $updatedAtGreaterThanOrEqual = null; + + /** + * + * + * @var int + */ + public $updatedAtLessThanOrEqual = null; + + /** + * + * + * @var KalturaAppTokenStatus + */ + public $statusEqual = null; + + /** + * + * + * @var string + */ + public $statusIn = null; + + /** + * + * + * @var string + */ + public $sessionUserIdEqual = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaAppTokenListResponse extends KalturaListResponse +{ + /** + * + * + * @var array of KalturaAppToken + * @readonly + */ + public $objects; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaAssetParamsOutput extends KalturaAssetParams +{ + /** + * + * + * @var int + */ + public $assetParamsId = null; + + /** + * + * + * @var string + */ + public $assetParamsVersion = null; + + /** + * + * + * @var string + */ + public $assetId = null; + + /** + * + * + * @var string + */ + public $assetVersion = null; + + /** + * + * + * @var int + */ + public $readyBehavior = null; + + /** + * The container format of the Flavor Params + * + * @var KalturaContainerFormat + */ + public $format = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaAssetPropertiesCompareCondition extends KalturaCondition +{ + /** + * Array of key/value objects that holds the property and the value to find and compare on an asset object + * + * @var array of KalturaKeyValue + */ + public $properties; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaAssetTypeCondition extends KalturaCondition +{ + /** + * + * + * @var string + */ + public $assetTypes = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaAssetsParamsResourceContainers extends KalturaResource +{ + /** + * Array of resources associated with asset params ids + * + * @var array of KalturaAssetParamsResourceContainer + */ + public $resources; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +abstract class KalturaAttributeCondition extends KalturaSearchItem +{ + /** + * + * + * @var string + */ + public $value = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaAuthenticatedCondition extends KalturaCondition +{ + /** + * The privelege needed to remove the restriction + * + * @var array of KalturaStringValue + */ + public $privileges; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaBaseEntryCloneOptionComponent extends KalturaBaseEntryCloneOptionItem +{ + /** + * + * + * @var KalturaBaseEntryCloneOptions + */ + public $itemType = null; + + /** + * condition rule (include/exclude) + * + * @var KalturaCloneComponentSelectorType + */ + public $rule = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaBaseEntryListResponse extends KalturaListResponse +{ + /** + * + * + * @var array of KalturaBaseEntry + * @readonly + */ + public $objects; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +abstract class KalturaBaseSyndicationFeedBaseFilter extends KalturaFilter +{ + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaBaseSyndicationFeedListResponse extends KalturaListResponse +{ + /** + * + * + * @var array of KalturaBaseSyndicationFeed + * @readonly + */ + public $objects; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaBatchJobListResponse extends KalturaListResponse +{ + /** + * + * + * @var array of KalturaBatchJob + * @readonly + */ + public $objects; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaBulkDownloadJobData extends KalturaJobData +{ + /** + * Comma separated list of entry ids + * + * @var string + */ + public $entryIds = null; + + /** + * Flavor params id to use for conversion + * + * @var int + */ + public $flavorParamsId = null; + + /** + * The id of the requesting user + * + * @var string + */ + public $puserId = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +abstract class KalturaBulkUploadBaseFilter extends KalturaFilter +{ + /** + * + * + * @var int + */ + public $uploadedOnGreaterThanOrEqual = null; + + /** + * + * + * @var int + */ + public $uploadedOnLessThanOrEqual = null; + + /** + * + * + * @var int + */ + public $uploadedOnEqual = null; + + /** + * + * + * @var string + */ + public $statusIn = null; + + /** + * + * + * @var KalturaBatchJobStatus + */ + public $statusEqual = null; + + /** + * + * + * @var KalturaBulkUploadObjectType + */ + public $bulkUploadObjectTypeEqual = null; + + /** + * + * + * @var string + */ + public $bulkUploadObjectTypeIn = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaBulkUploadCategoryData extends KalturaBulkUploadObjectData +{ + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaBulkUploadCategoryEntryData extends KalturaBulkUploadObjectData +{ + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaBulkUploadCategoryUserData extends KalturaBulkUploadObjectData +{ + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaBulkUploadEntryData extends KalturaBulkUploadObjectData +{ + /** + * Selected profile id for all bulk entries + * + * @var int + */ + public $conversionProfileId = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaBulkUploadJobData extends KalturaJobData +{ + /** + * + * + * @var string + * @readonly + */ + public $userId = null; + + /** + * The screen name of the user + * + * @var string + * @readonly + */ + public $uploadedBy = null; + + /** + * Selected profile id for all bulk entries + * + * @var int + * @readonly + */ + public $conversionProfileId = null; + + /** + * Created by the API + * + * @var string + * @readonly + */ + public $resultsFileLocalPath = null; + + /** + * Created by the API + * + * @var string + * @readonly + */ + public $resultsFileUrl = null; + + /** + * Number of created entries + * + * @var int + * @readonly + */ + public $numOfEntries = null; + + /** + * Number of created objects + * + * @var int + * @readonly + */ + public $numOfObjects = null; + + /** + * The bulk upload file path + * + * @var string + * @readonly + */ + public $filePath = null; + + /** + * Type of object for bulk upload + * + * @var KalturaBulkUploadObjectType + * @readonly + */ + public $bulkUploadObjectType = null; + + /** + * Friendly name of the file, used to be recognized later in the logs. + * + * @var string + */ + public $fileName = null; + + /** + * Data pertaining to the objects being uploaded + * + * @var KalturaBulkUploadObjectData + * @readonly + */ + public $objectData; + + /** + * Type of bulk upload + * + * @var KalturaBulkUploadType + * @readonly + */ + public $type = null; + + /** + * Recipients of the email for bulk upload success/failure + * + * @var string + */ + public $emailRecipients = null; + + /** + * Number of objects that finished on error status + * + * @var int + */ + public $numOfErrorObjects = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaBulkUploadListResponse extends KalturaListResponse +{ + /** + * + * + * @var array of KalturaBulkUpload + * @readonly + */ + public $objects; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaBulkUploadResultCategory extends KalturaBulkUploadResult +{ + /** + * + * + * @var string + */ + public $relativePath = null; + + /** + * + * + * @var string + */ + public $name = null; + + /** + * + * + * @var string + */ + public $referenceId = null; + + /** + * + * + * @var string + */ + public $description = null; + + /** + * + * + * @var string + */ + public $tags = null; + + /** + * + * + * @var int + */ + public $appearInList = null; + + /** + * + * + * @var int + */ + public $privacy = null; + + /** + * + * + * @var int + */ + public $inheritanceType = null; + + /** + * + * + * @var int + */ + public $userJoinPolicy = null; + + /** + * + * + * @var int + */ + public $defaultPermissionLevel = null; + + /** + * + * + * @var string + */ + public $owner = null; + + /** + * + * + * @var int + */ + public $contributionPolicy = null; + + /** + * + * + * @var int + */ + public $partnerSortValue = null; + + /** + * + * + * @var bool + */ + public $moderation = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaBulkUploadResultCategoryEntry extends KalturaBulkUploadResult +{ + /** + * + * + * @var int + */ + public $categoryId = null; + + /** + * + * + * @var string + */ + public $entryId = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaBulkUploadResultCategoryUser extends KalturaBulkUploadResult +{ + /** + * + * + * @var int + */ + public $categoryId = null; + + /** + * + * + * @var string + */ + public $categoryReferenceId = null; + + /** + * + * + * @var string + */ + public $userId = null; + + /** + * + * + * @var int + */ + public $permissionLevel = null; + + /** + * + * + * @var int + */ + public $updateMethod = null; + + /** + * + * + * @var int + */ + public $requiredObjectStatus = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaBulkUploadResultEntry extends KalturaBulkUploadResult +{ + /** + * + * + * @var string + */ + public $entryId = null; + + /** + * + * + * @var string + */ + public $title = null; + + /** + * + * + * @var string + */ + public $description = null; + + /** + * + * + * @var string + */ + public $tags = null; + + /** + * + * + * @var string + */ + public $url = null; + + /** + * + * + * @var string + */ + public $contentType = null; + + /** + * + * + * @var int + */ + public $conversionProfileId = null; + + /** + * + * + * @var int + */ + public $accessControlProfileId = null; + + /** + * + * + * @var string + */ + public $category = null; + + /** + * + * + * @var int + */ + public $scheduleStartDate = null; + + /** + * + * + * @var int + */ + public $scheduleEndDate = null; + + /** + * + * + * @var int + */ + public $entryStatus = null; + + /** + * + * + * @var string + */ + public $thumbnailUrl = null; + + /** + * + * + * @var bool + */ + public $thumbnailSaved = null; + + /** + * + * + * @var string + */ + public $sshPrivateKey = null; + + /** + * + * + * @var string + */ + public $sshPublicKey = null; + + /** + * + * + * @var string + */ + public $sshKeyPassphrase = null; + + /** + * + * + * @var string + */ + public $creatorId = null; + + /** + * + * + * @var string + */ + public $entitledUsersEdit = null; + + /** + * + * + * @var string + */ + public $entitledUsersPublish = null; + + /** + * + * + * @var string + */ + public $ownerId = null; + + /** + * + * + * @var string + */ + public $referenceId = null; + + /** + * + * + * @var string + */ + public $templateEntryId = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaBulkUploadResultUser extends KalturaBulkUploadResult +{ + /** + * + * + * @var string + */ + public $userId = null; + + /** + * + * + * @var string + */ + public $screenName = null; + + /** + * + * + * @var string + */ + public $email = null; + + /** + * + * + * @var string + */ + public $description = null; + + /** + * + * + * @var string + */ + public $tags = null; + + /** + * + * + * @var int + */ + public $dateOfBirth = null; + + /** + * + * + * @var string + */ + public $country = null; + + /** + * + * + * @var string + */ + public $state = null; + + /** + * + * + * @var string + */ + public $city = null; + + /** + * + * + * @var string + */ + public $zip = null; + + /** + * + * + * @var int + */ + public $gender = null; + + /** + * + * + * @var string + */ + public $firstName = null; + + /** + * + * + * @var string + */ + public $lastName = null; + + /** + * + * + * @var string + */ + public $group = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaBulkUploadUserData extends KalturaBulkUploadObjectData +{ + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaCaptureThumbJobData extends KalturaJobData +{ + /** + * + * + * @var KalturaFileContainer + */ + public $fileContainer; + + /** + * The translated path as used by the scheduler + * + * @var string + */ + public $actualSrcFileSyncLocalPath = null; + + /** + * + * + * @var string + */ + public $srcFileSyncRemoteUrl = null; + + /** + * + * + * @var int + */ + public $thumbParamsOutputId = null; + + /** + * + * + * @var string + */ + public $thumbAssetId = null; + + /** + * + * + * @var string + */ + public $srcAssetId = null; + + /** + * + * + * @var KalturaAssetType + */ + public $srcAssetType = null; + + /** + * + * + * @var string + */ + public $thumbPath = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaCategoryEntryAdvancedFilter extends KalturaSearchItem +{ + /** + * + * + * @var string + */ + public $categoriesMatchOr = null; + + /** + * + * + * @var string + */ + public $categoryEntryStatusIn = null; + + /** + * + * + * @var KalturaCategoryEntryAdvancedOrderBy + */ + public $orderBy = null; + + /** + * + * + * @var int + */ + public $categoryIdEqual = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaCategoryEntryListResponse extends KalturaListResponse +{ + /** + * + * + * @var array of KalturaCategoryEntry + * @readonly + */ + public $objects; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaCategoryIdentifier extends KalturaObjectIdentifier +{ + /** + * Identifier of the object + * + * @var KalturaCategoryIdentifierField + */ + public $identifier = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaCategoryListResponse extends KalturaListResponse +{ + /** + * + * + * @var array of KalturaCategory + * @readonly + */ + public $objects; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaCategoryUserAdvancedFilter extends KalturaSearchItem +{ + /** + * + * + * @var string + */ + public $memberIdEq = null; + + /** + * + * + * @var string + */ + public $memberIdIn = null; + + /** + * + * + * @var string + */ + public $memberPermissionsMatchOr = null; + + /** + * + * + * @var string + */ + public $memberPermissionsMatchAnd = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaCategoryUserListResponse extends KalturaListResponse +{ + /** + * + * + * @var array of KalturaCategoryUser + * @readonly + */ + public $objects; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaClipAttributes extends KalturaOperationAttributes +{ + /** + * Offset in milliseconds + * + * @var int + */ + public $offset = null; + + /** + * Duration in milliseconds + * + * @var int + */ + public $duration = null; + + /** + * global Offset In Destination in milliseconds + * + * @var int + */ + public $globalOffsetInDestination = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaClipConcatJobData extends KalturaJobData +{ + /** + * $partnerId + * + * @var int + */ + public $partnerId = null; + + /** + * $priority + * + * @var int + */ + public $priority = null; + + /** + * clip operations + * + * @var array of KalturaObject + */ + public $operationAttributes; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +abstract class KalturaCompareCondition extends KalturaCondition +{ + /** + * Value to evaluate against the field and operator + * + * @var KalturaIntegerValue + */ + public $value; + + /** + * Comparing operator + * + * @var KalturaSearchConditionComparison + */ + public $comparison = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +abstract class KalturaDataCenterContentResource extends KalturaContentResource +{ + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaConcatAttributes extends KalturaOperationAttributes +{ + /** + * The resource to be concatenated + * + * @var KalturaDataCenterContentResource + */ + public $resource; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaConcatJobData extends KalturaJobData +{ + /** + * Source files to be concatenated + * + * @var array of KalturaString + */ + public $srcFiles; + + /** + * Output file + * + * @var string + */ + public $destFilePath = null; + + /** + * Flavor asset to be ingested with the output + * + * @var string + */ + public $flavorAssetId = null; + + /** + * Clipping offset in seconds + * + * @var float + */ + public $offset = null; + + /** + * Clipping duration in seconds + * + * @var float + */ + public $duration = null; + + /** + * duration of the concated video + * + * @var float + */ + public $concatenatedDuration = null; + + /** + * Should Sort the clip parts + * + * @var bool + */ + public $shouldSort = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +abstract class KalturaControlPanelCommandBaseFilter extends KalturaFilter +{ + /** + * + * + * @var int + */ + public $idEqual = null; + + /** + * + * + * @var string + */ + public $idIn = null; + + /** + * + * + * @var int + */ + public $createdAtGreaterThanOrEqual = null; + + /** + * + * + * @var int + */ + public $createdAtLessThanOrEqual = null; + + /** + * + * + * @var int + */ + public $createdByIdEqual = null; + + /** + * + * + * @var KalturaControlPanelCommandType + */ + public $typeEqual = null; + + /** + * + * + * @var string + */ + public $typeIn = null; + + /** + * + * + * @var KalturaControlPanelCommandTargetType + */ + public $targetTypeEqual = null; + + /** + * + * + * @var string + */ + public $targetTypeIn = null; + + /** + * + * + * @var KalturaControlPanelCommandStatus + */ + public $statusEqual = null; + + /** + * + * + * @var string + */ + public $statusIn = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaControlPanelCommandListResponse extends KalturaListResponse +{ + /** + * + * + * @var array of KalturaControlPanelCommand + * @readonly + */ + public $objects; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaConvartableJobData extends KalturaJobData +{ + /** + * + * + * @var string + */ + public $srcFileSyncLocalPath = null; + + /** + * The translated path as used by the scheduler + * + * @var string + */ + public $actualSrcFileSyncLocalPath = null; + + /** + * + * + * @var string + */ + public $srcFileSyncRemoteUrl = null; + + /** + * + * + * @var array of KalturaSourceFileSyncDescriptor + */ + public $srcFileSyncs; + + /** + * + * + * @var int + */ + public $engineVersion = null; + + /** + * + * + * @var int + */ + public $flavorParamsOutputId = null; + + /** + * + * + * @var KalturaFlavorParamsOutput + */ + public $flavorParamsOutput; + + /** + * + * + * @var int + */ + public $mediaInfoId = null; + + /** + * + * + * @var int + */ + public $currentOperationSet = null; + + /** + * + * + * @var int + */ + public $currentOperationIndex = null; + + /** + * + * + * @var array of KalturaKeyValue + */ + public $pluginData; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaConversionProfileAssetParamsListResponse extends KalturaListResponse +{ + /** + * + * + * @var array of KalturaConversionProfileAssetParams + * @readonly + */ + public $objects; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaConversionProfileListResponse extends KalturaListResponse +{ + /** + * + * + * @var array of KalturaConversionProfile + * @readonly + */ + public $objects; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaConvertLiveSegmentJobData extends KalturaJobData +{ + /** + * Live stream entry id + * + * @var string + */ + public $entryId = null; + + /** + * + * + * @var string + */ + public $assetId = null; + + /** + * Primary or secondary media server + * + * @var KalturaEntryServerNodeType + */ + public $mediaServerIndex = null; + + /** + * The index of the file within the entry + * + * @var int + */ + public $fileIndex = null; + + /** + * The recorded live media + * + * @var string + */ + public $srcFilePath = null; + + /** + * The output file + * + * @var string + */ + public $destFilePath = null; + + /** + * Duration of the live entry including all recorded segments including the current + * + * @var float + */ + public $endTime = null; + + /** + * The data output file + * + * @var string + */ + public $destDataFilePath = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaConvertProfileJobData extends KalturaJobData +{ + /** + * + * + * @var string + */ + public $inputFileSyncLocalPath = null; + + /** + * The height of last created thumbnail, will be used to comapare if this thumbnail is the best we can have + * + * @var int + */ + public $thumbHeight = null; + + /** + * The bit rate of last created thumbnail, will be used to comapare if this thumbnail is the best we can have + * + * @var int + */ + public $thumbBitrate = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaCopyPartnerJobData extends KalturaJobData +{ + /** + * Id of the partner to copy from + * + * @var int + */ + public $fromPartnerId = null; + + /** + * Id of the partner to copy to + * + * @var int + */ + public $toPartnerId = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaCountryRestriction extends KalturaBaseRestriction +{ + /** + * Country restriction type (Allow or deny) + * + * @var KalturaCountryRestrictionType + */ + public $countryRestrictionType = null; + + /** + * Comma separated list of country codes to allow to deny + * + * @var string + */ + public $countryList = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaDataListResponse extends KalturaListResponse +{ + /** + * + * + * @var array of KalturaDataEntry + * @readonly + */ + public $objects; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaDeleteFileJobData extends KalturaJobData +{ + /** + * + * + * @var string + */ + public $localFileSyncPath = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaDeleteJobData extends KalturaJobData +{ + /** + * The filter should return the list of objects that need to be deleted. + * + * @var KalturaFilter + */ + public $filter; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaDeliveryProfileAkamaiAppleHttpManifest extends KalturaDeliveryProfile +{ + /** + * Should we use timing parameters - clipTo / seekFrom + * + * @var bool + */ + public $supportClipping = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaDeliveryProfileAkamaiHds extends KalturaDeliveryProfile +{ + /** + * Should we use timing parameters - clipTo / seekFrom + * + * @var bool + */ + public $supportClipping = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaDeliveryProfileAkamaiHttp extends KalturaDeliveryProfile +{ + /** + * Should we use intelliseek + * + * @var bool + */ + public $useIntelliseek = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +abstract class KalturaDeliveryProfileBaseFilter extends KalturaFilter +{ + /** + * + * + * @var int + */ + public $idEqual = null; + + /** + * + * + * @var string + */ + public $idIn = null; + + /** + * + * + * @var int + */ + public $partnerIdEqual = null; + + /** + * + * + * @var string + */ + public $partnerIdIn = null; + + /** + * + * + * @var string + */ + public $systemNameEqual = null; + + /** + * + * + * @var string + */ + public $systemNameIn = null; + + /** + * + * + * @var int + */ + public $createdAtGreaterThanOrEqual = null; + + /** + * + * + * @var int + */ + public $createdAtLessThanOrEqual = null; + + /** + * + * + * @var int + */ + public $updatedAtGreaterThanOrEqual = null; + + /** + * + * + * @var int + */ + public $updatedAtLessThanOrEqual = null; + + /** + * + * + * @var KalturaPlaybackProtocol + */ + public $streamerTypeEqual = null; + + /** + * + * + * @var KalturaDeliveryStatus + */ + public $statusEqual = null; + + /** + * + * + * @var string + */ + public $statusIn = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaDeliveryProfileCondition extends KalturaCondition +{ + /** + * The delivery ids that are accepted by this condition + * + * @var array of KalturaIntegerValue + */ + public $deliveryProfileIds; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaDeliveryProfileGenericAppleHttp extends KalturaDeliveryProfile +{ + /** + * + * + * @var string + */ + public $pattern = null; + + /** + * rendererClass + * + * @var string + */ + public $rendererClass = null; + + /** + * Enable to make playManifest redirect to the domain of the delivery profile + * + * @var KalturaNullableBoolean + */ + public $manifestRedirect = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaDeliveryProfileGenericHds extends KalturaDeliveryProfile +{ + /** + * + * + * @var string + */ + public $pattern = null; + + /** + * rendererClass + * + * @var string + */ + public $rendererClass = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaDeliveryProfileGenericHttp extends KalturaDeliveryProfile +{ + /** + * + * + * @var string + */ + public $pattern = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaDeliveryProfileGenericSilverLight extends KalturaDeliveryProfile +{ + /** + * + * + * @var string + */ + public $pattern = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaDeliveryProfileListResponse extends KalturaListResponse +{ + /** + * + * + * @var array of KalturaDeliveryProfile + * @readonly + */ + public $objects; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaDeliveryProfileLiveAppleHttp extends KalturaDeliveryProfile +{ + /** + * + * + * @var bool + */ + public $disableExtraAttributes = null; + + /** + * + * + * @var bool + */ + public $forceProxy = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaDeliveryProfileRtmp extends KalturaDeliveryProfile +{ + /** + * enforceRtmpe + * + * @var bool + */ + public $enforceRtmpe = null; + + /** + * a prefix that is added to all stream urls (replaces storageProfile::rtmpPrefix) + * + * @var string + */ + public $prefix = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaDeliveryProfileVodPackagerPlayServer extends KalturaDeliveryProfile +{ + /** + * + * + * @var bool + */ + public $adStitchingEnabled = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +abstract class KalturaDeliveryServerNode extends KalturaServerNode +{ + /** + * Delivery profile ids + * + * @var array of KalturaKeyValue + */ + public $deliveryProfileIds; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaDirectoryRestriction extends KalturaBaseRestriction +{ + /** + * Kaltura directory restriction type + * + * @var KalturaDirectoryRestrictionType + */ + public $directoryRestrictionType = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaDrmEntryContextPluginData extends KalturaPluginData +{ + /** + * For the uDRM we give the drm context data which is a json encoding of an array containing the uDRM data + * for each flavor that is required from this getContextData request. + * + * @var string + */ + public $flavorData = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +abstract class KalturaCategoryUserBaseFilter extends KalturaRelatedFilter +{ + /** + * + * + * @var int + */ + public $categoryIdEqual = null; + + /** + * + * + * @var string + */ + public $categoryIdIn = null; + + /** + * + * + * @var string + */ + public $userIdEqual = null; + + /** + * + * + * @var string + */ + public $userIdIn = null; + + /** + * + * + * @var KalturaCategoryUserPermissionLevel + */ + public $permissionLevelEqual = null; + + /** + * + * + * @var string + */ + public $permissionLevelIn = null; + + /** + * + * + * @var KalturaCategoryUserStatus + */ + public $statusEqual = null; + + /** + * + * + * @var string + */ + public $statusIn = null; + + /** + * + * + * @var int + */ + public $createdAtGreaterThanOrEqual = null; + + /** + * + * + * @var int + */ + public $createdAtLessThanOrEqual = null; + + /** + * + * + * @var int + */ + public $updatedAtGreaterThanOrEqual = null; + + /** + * + * + * @var int + */ + public $updatedAtLessThanOrEqual = null; + + /** + * + * + * @var KalturaUpdateMethodType + */ + public $updateMethodEqual = null; + + /** + * + * + * @var string + */ + public $updateMethodIn = null; + + /** + * + * + * @var string + */ + public $categoryFullIdsStartsWith = null; + + /** + * + * + * @var string + */ + public $categoryFullIdsEqual = null; + + /** + * + * + * @var string + */ + public $permissionNamesMatchAnd = null; + + /** + * + * + * @var string + */ + public $permissionNamesMatchOr = null; + + /** + * + * + * @var string + */ + public $permissionNamesNotContains = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaCategoryUserFilter extends KalturaCategoryUserBaseFilter +{ + /** + * Return the list of categoryUser that are not inherited from parent category - only the direct categoryUsers. + * + * @var bool + */ + public $categoryDirectMembers = null; + + /** + * Free text search on user id or screen name + * + * @var string + */ + public $freeText = null; + + /** + * Return a list of categoryUser that related to the userId in this field by groups + * + * @var string + */ + public $relatedGroupsByUserId = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +abstract class KalturaUserBaseFilter extends KalturaRelatedFilter +{ + /** + * + * + * @var int + */ + public $partnerIdEqual = null; + + /** + * + * + * @var KalturaUserType + */ + public $typeEqual = null; + + /** + * + * + * @var string + */ + public $typeIn = null; + + /** + * + * + * @var string + */ + public $screenNameLike = null; + + /** + * + * + * @var string + */ + public $screenNameStartsWith = null; + + /** + * + * + * @var string + */ + public $emailLike = null; + + /** + * + * + * @var string + */ + public $emailStartsWith = null; + + /** + * + * + * @var string + */ + public $tagsMultiLikeOr = null; + + /** + * + * + * @var string + */ + public $tagsMultiLikeAnd = null; + + /** + * + * + * @var KalturaUserStatus + */ + public $statusEqual = null; + + /** + * + * + * @var string + */ + public $statusIn = null; + + /** + * + * + * @var int + */ + public $createdAtGreaterThanOrEqual = null; + + /** + * + * + * @var int + */ + public $createdAtLessThanOrEqual = null; + + /** + * + * + * @var string + */ + public $firstNameStartsWith = null; + + /** + * + * + * @var string + */ + public $lastNameStartsWith = null; + + /** + * + * + * @var KalturaNullableBoolean + */ + public $isAdminEqual = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaUserFilter extends KalturaUserBaseFilter +{ + /** + * + * + * @var string + */ + public $idOrScreenNameStartsWith = null; + + /** + * + * + * @var string + */ + public $idEqual = null; + + /** + * + * + * @var string + */ + public $idIn = null; + + /** + * + * + * @var KalturaNullableBoolean + */ + public $loginEnabledEqual = null; + + /** + * + * + * @var string + */ + public $roleIdEqual = null; + + /** + * + * + * @var string + */ + public $roleIdsEqual = null; + + /** + * + * + * @var string + */ + public $roleIdsIn = null; + + /** + * + * + * @var string + */ + public $firstNameOrLastNameStartsWith = null; + + /** + * Permission names filter expression + * + * @var string + */ + public $permissionNamesMultiLikeOr = null; + + /** + * Permission names filter expression + * + * @var string + */ + public $permissionNamesMultiLikeAnd = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaEntryContext extends KalturaContext +{ + /** + * The entry ID in the context of which the playlist should be built + * + * @var string + */ + public $entryId = null; + + /** + * Is this a redirected entry followup? + * + * @var KalturaNullableBoolean + */ + public $followEntryRedirect = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaEntryContextDataParams extends KalturaAccessControlScope +{ + /** + * Id of the current flavor. + * + * @var string + */ + public $flavorAssetId = null; + + /** + * The tags of the flavors that should be used for playback. + * + * @var string + */ + public $flavorTags = null; + + /** + * Playback streamer type: RTMP, HTTP, appleHttps, rtsp, sl. + * + * @var string + */ + public $streamerType = null; + + /** + * Protocol of the specific media object. + * + * @var string + */ + public $mediaProtocol = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaEntryContextDataResult extends KalturaContextDataResult +{ + /** + * + * + * @var bool + */ + public $isSiteRestricted = null; + + /** + * + * + * @var bool + */ + public $isCountryRestricted = null; + + /** + * + * + * @var bool + */ + public $isSessionRestricted = null; + + /** + * + * + * @var bool + */ + public $isIpAddressRestricted = null; + + /** + * + * + * @var bool + */ + public $isUserAgentRestricted = null; + + /** + * + * + * @var int + */ + public $previewLength = null; + + /** + * + * + * @var bool + */ + public $isScheduledNow = null; + + /** + * + * + * @var bool + */ + public $isAdmin = null; + + /** + * http/rtmp/hdnetwork + * + * @var string + */ + public $streamerType = null; + + /** + * http/https, rtmp/rtmpe + * + * @var string + */ + public $mediaProtocol = null; + + /** + * + * + * @var string + */ + public $storageProfilesXML = null; + + /** + * Array of messages as received from the access control rules that invalidated + * + * @var array of KalturaString + */ + public $accessControlMessages; + + /** + * Array of actions as received from the access control rules that invalidated + * + * @var array of KalturaRuleAction + */ + public $accessControlActions; + + /** + * Array of allowed flavor assets according to access control limitations and requested tags + * + * @var array of KalturaFlavorAsset + */ + public $flavorAssets; + + /** + * The duration of the entry in milliseconds + * + * @var int + */ + public $msDuration = null; + + /** + * Array of allowed flavor assets according to access control limitations and requested tags + * + * @var map + */ + public $pluginData; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaEntryCuePointSearchFilter extends KalturaSearchItem +{ + /** + * + * + * @var string + */ + public $cuePointsFreeText = null; + + /** + * + * + * @var string + */ + public $cuePointTypeIn = null; + + /** + * + * + * @var int + */ + public $cuePointSubTypeEqual = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaEntryIdentifier extends KalturaObjectIdentifier +{ + /** + * Identifier of the object + * + * @var KalturaEntryIdentifierField + */ + public $identifier = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaEntryLiveStats extends KalturaLiveStats +{ + /** + * + * + * @var string + */ + public $entryId = null; + + /** + * + * + * @var int + */ + public $peakAudience = null; + + /** + * + * + * @var int + */ + public $peakDvrAudience = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +abstract class KalturaEntryServerNodeBaseFilter extends KalturaFilter +{ + /** + * + * + * @var string + */ + public $entryIdEqual = null; + + /** + * + * + * @var string + */ + public $entryIdIn = null; + + /** + * + * + * @var int + */ + public $serverNodeIdEqual = null; + + /** + * + * + * @var int + */ + public $createdAtLessThanOrEqual = null; + + /** + * + * + * @var int + */ + public $createdAtGreaterThanOrEqual = null; + + /** + * + * + * @var int + */ + public $updatedAtGreaterThanOrEqual = null; + + /** + * + * + * @var int + */ + public $updatedAtLessThanOrEqual = null; + + /** + * + * + * @var KalturaEntryServerNodeStatus + */ + public $statusEqual = null; + + /** + * + * + * @var string + */ + public $statusIn = null; + + /** + * + * + * @var KalturaEntryServerNodeType + */ + public $serverTypeEqual = null; + + /** + * + * + * @var string + */ + public $serverTypeIn = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaEntryServerNodeListResponse extends KalturaListResponse +{ + /** + * + * + * @var array of KalturaEntryServerNode + * @readonly + */ + public $objects; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +abstract class KalturaBooleanField extends KalturaBooleanValue +{ + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaFeatureStatusListResponse extends KalturaListResponse +{ + /** + * + * + * @var array of KalturaFeatureStatus + * @readonly + */ + public $objects; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaFileAssetListResponse extends KalturaListResponse +{ + /** + * + * + * @var array of KalturaFileAsset + * @readonly + */ + public $objects; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaFlattenJobData extends KalturaJobData +{ + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaFlavorAssetListResponse extends KalturaListResponse +{ + /** + * + * + * @var array of KalturaFlavorAsset + * @readonly + */ + public $objects; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaFlavorParamsListResponse extends KalturaListResponse +{ + /** + * + * + * @var array of KalturaFlavorParams + * @readonly + */ + public $objects; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaFlavorParamsOutputListResponse extends KalturaListResponse +{ + /** + * + * + * @var array of KalturaFlavorParamsOutput + * @readonly + */ + public $objects; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaGenericSyndicationFeed extends KalturaBaseSyndicationFeed +{ + /** + * feed description + * + * @var string + */ + public $feedDescription = null; + + /** + * feed landing page (i.e publisher website) + * + * @var string + */ + public $feedLandingPage = null; + + /** + * entry filter + * + * @var KalturaBaseEntryFilter + */ + public $entryFilter; + + /** + * page size + * + * @var int + */ + public $pageSize = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaGoogleVideoSyndicationFeed extends KalturaBaseSyndicationFeed +{ + /** + * + * + * @var KalturaGoogleSyndicationFeedAdultValues + */ + public $adultContent = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaGroupUserListResponse extends KalturaListResponse +{ + /** + * + * + * @var array of KalturaGroupUser + * @readonly + */ + public $objects; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaHashCondition extends KalturaCondition +{ + /** + * hash name + * + * @var string + */ + public $hashName = null; + + /** + * hash secret + * + * @var string + */ + public $hashSecret = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaITunesSyndicationFeed extends KalturaBaseSyndicationFeed +{ + /** + * feed description + * + * @var string + */ + public $feedDescription = null; + + /** + * feed language + * + * @var string + */ + public $language = null; + + /** + * feed landing page (i.e publisher website) + * + * @var string + */ + public $feedLandingPage = null; + + /** + * author/publisher name + * + * @var string + */ + public $ownerName = null; + + /** + * publisher email + * + * @var string + */ + public $ownerEmail = null; + + /** + * podcast thumbnail + * + * @var string + */ + public $feedImageUrl = null; + + /** + * + * + * @var KalturaITunesSyndicationFeedCategories + * @readonly + */ + public $category = null; + + /** + * + * + * @var KalturaITunesSyndicationFeedAdultValues + */ + public $adultContent = null; + + /** + * + * + * @var string + */ + public $feedAuthor = null; + + /** + * + * + * @var bool + */ + public $enforceFeedAuthor = null; + + /** + * true in case you want to enfore the palylist order on the + * + * @var KalturaNullableBoolean + */ + public $enforceOrder = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaImportJobData extends KalturaJobData +{ + /** + * + * + * @var string + */ + public $srcFileUrl = null; + + /** + * + * + * @var string + */ + public $destFileLocalPath = null; + + /** + * + * + * @var string + */ + public $flavorAssetId = null; + + /** + * + * + * @var int + */ + public $fileSize = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaIndexAdvancedFilter extends KalturaSearchItem +{ + /** + * + * + * @var int + */ + public $indexIdGreaterThan = null; + + /** + * + * + * @var int + */ + public $depthGreaterThanEqual = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaIndexJobData extends KalturaJobData +{ + /** + * The filter should return the list of objects that need to be reindexed. + * + * @var KalturaFilter + */ + public $filter; + + /** + * Indicates the last id that reindexed, used when the batch crached, to re-run from the last crash point. + * + * @var int + */ + public $lastIndexId = null; + + /** + * Indicates the last depth that reindexed, used when the batch crached, to re-run from the last crash point. + * + * @var int + */ + public $lastIndexDepth = null; + + /** + * Indicates that the object columns and attributes values should be recalculated before reindexed. + * + * @var bool + */ + public $shouldUpdate = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaIpAddressRestriction extends KalturaBaseRestriction +{ + /** + * Ip address restriction type (Allow or deny) + * + * @var KalturaIpAddressRestrictionType + */ + public $ipAddressRestrictionType = null; + + /** + * Comma separated list of ip address to allow to deny + * + * @var string + */ + public $ipAddressList = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaLimitFlavorsRestriction extends KalturaBaseRestriction +{ + /** + * Limit flavors restriction type (Allow or deny) + * + * @var KalturaLimitFlavorsRestrictionType + */ + public $limitFlavorsRestrictionType = null; + + /** + * Comma separated list of flavor params ids to allow to deny + * + * @var string + */ + public $flavorParamsIds = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaLiveChannelListResponse extends KalturaListResponse +{ + /** + * + * + * @var array of KalturaLiveChannel + * @readonly + */ + public $objects; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaLiveChannelSegmentListResponse extends KalturaListResponse +{ + /** + * + * + * @var array of KalturaLiveChannelSegment + * @readonly + */ + public $objects; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaLiveEntryServerNode extends KalturaEntryServerNode +{ + /** + * parameters of the stream we got + * + * @var array of KalturaLiveStreamParams + */ + public $streams; + + /** + * + * + * @var array of KalturaLiveEntryServerNodeRecordingInfo + */ + public $recordingInfo; + + /** + * + * + * @var bool + */ + public $isPlayableUser = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaLiveReportExportJobData extends KalturaJobData +{ + /** + * + * + * @var int + */ + public $timeReference = null; + + /** + * + * + * @var int + */ + public $timeZoneOffset = null; + + /** + * + * + * @var string + */ + public $entryIds = null; + + /** + * + * + * @var string + */ + public $outputPath = null; + + /** + * + * + * @var string + */ + public $recipientEmail = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaLiveStatsListResponse extends KalturaListResponse +{ + /** + * + * + * @var KalturaLiveStats + */ + public $objects; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaLiveStreamListResponse extends KalturaListResponse +{ + /** + * + * + * @var array of KalturaLiveStreamEntry + * @readonly + */ + public $objects; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaLiveStreamPushPublishRTMPConfiguration extends KalturaLiveStreamPushPublishConfiguration +{ + /** + * + * + * @var string + */ + public $userId = null; + + /** + * + * + * @var string + */ + public $password = null; + + /** + * + * + * @var string + */ + public $streamName = null; + + /** + * + * + * @var string + */ + public $applicationName = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaLiveToVodJobData extends KalturaJobData +{ + /** + * $vod Entry Id + * + * @var string + */ + public $vodEntryId = null; + + /** + * live Entry Id + * + * @var string + */ + public $liveEntryId = null; + + /** + * total VOD Duration + * + * @var float + */ + public $totalVodDuration = null; + + /** + * last Segment Duration + * + * @var float + */ + public $lastSegmentDuration = null; + + /** + * amf Array File Path + * + * @var string + */ + public $amfArray = null; + + /** + * last live to vod sync time + * + * @var int + */ + public $lastCuePointSyncTime = null; + + /** + * last segment drift + * + * @var int + */ + public $lastSegmentDrift = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaMailJobData extends KalturaJobData +{ + /** + * + * + * @var KalturaMailType + */ + public $mailType = null; + + /** + * + * + * @var int + */ + public $mailPriority = null; + + /** + * + * + * @var KalturaMailJobStatus + */ + public $status = null; + + /** + * + * + * @var string + */ + public $recipientName = null; + + /** + * + * + * @var string + */ + public $recipientEmail = null; + + /** + * kuserId + * + * @var int + */ + public $recipientId = null; + + /** + * + * + * @var string + */ + public $fromName = null; + + /** + * + * + * @var string + */ + public $fromEmail = null; + + /** + * + * + * @var string + */ + public $bodyParams = null; + + /** + * + * + * @var string + */ + public $subjectParams = null; + + /** + * + * + * @var string + */ + public $templatePath = null; + + /** + * + * + * @var KalturaLanguageCode + */ + public $language = null; + + /** + * + * + * @var int + */ + public $campaignId = null; + + /** + * + * + * @var int + */ + public $minSendDate = null; + + /** + * + * + * @var bool + */ + public $isHtml = null; + + /** + * + * + * @var string + */ + public $separator = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +abstract class KalturaMatchCondition extends KalturaCondition +{ + /** + * + * + * @var array of KalturaStringValue + */ + public $values; + + /** + * + * + * @var KalturaMatchConditionType + */ + public $matchType = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +abstract class KalturaMediaInfoBaseFilter extends KalturaFilter +{ + /** + * + * + * @var string + */ + public $flavorAssetIdEqual = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaMediaInfoListResponse extends KalturaListResponse +{ + /** + * + * + * @var array of KalturaMediaInfo + * @readonly + */ + public $objects; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaMediaListResponse extends KalturaListResponse +{ + /** + * + * + * @var array of KalturaMediaEntry + * @readonly + */ + public $objects; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaMixListResponse extends KalturaListResponse +{ + /** + * + * + * @var array of KalturaMixEntry + * @readonly + */ + public $objects; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaModerationFlagListResponse extends KalturaListResponse +{ + /** + * + * + * @var array of KalturaModerationFlag + * @readonly + */ + public $objects; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaMoveCategoryEntriesJobData extends KalturaJobData +{ + /** + * Source category id + * + * @var int + */ + public $srcCategoryId = null; + + /** + * Destination category id + * + * @var int + */ + public $destCategoryId = null; + + /** + * Saves the last category id that its entries moved completely + * In case of crash the batch will restart from that point + * + * @var int + */ + public $lastMovedCategoryId = null; + + /** + * Saves the last page index of the child categories filter pager + * In case of crash the batch will restart from that point + * + * @var int + */ + public $lastMovedCategoryPageIndex = null; + + /** + * Saves the last page index of the category entries filter pager + * In case of crash the batch will restart from that point + * + * @var int + */ + public $lastMovedCategoryEntryPageIndex = null; + + /** + * All entries from all child categories will be moved as well + * + * @var bool + */ + public $moveFromChildren = null; + + /** + * Destination categories fallback ids + * + * @var string + */ + public $destCategoryFullIds = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaNotificationJobData extends KalturaJobData +{ + /** + * + * + * @var string + */ + public $userId = null; + + /** + * + * + * @var KalturaNotificationType + */ + public $type = null; + + /** + * + * + * @var string + */ + public $typeAsString = null; + + /** + * + * + * @var string + */ + public $objectId = null; + + /** + * + * + * @var KalturaNotificationStatus + */ + public $status = null; + + /** + * + * + * @var string + */ + public $data = null; + + /** + * + * + * @var int + */ + public $numberOfAttempts = null; + + /** + * + * + * @var string + */ + public $notificationResult = null; + + /** + * + * + * @var KalturaNotificationObjectType + */ + public $objType = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaObjectListResponse extends KalturaListResponse +{ + /** + * + * + * @var array of KalturaObject + * @readonly + */ + public $objects; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaOrCondition extends KalturaCondition +{ + /** + * + * + * @var array of KalturaCondition + */ + public $conditions; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +abstract class KalturaPartnerBaseFilter extends KalturaFilter +{ + /** + * + * + * @var int + */ + public $idEqual = null; + + /** + * + * + * @var string + */ + public $idIn = null; + + /** + * + * + * @var string + */ + public $idNotIn = null; + + /** + * + * + * @var string + */ + public $nameLike = null; + + /** + * + * + * @var string + */ + public $nameMultiLikeOr = null; + + /** + * + * + * @var string + */ + public $nameMultiLikeAnd = null; + + /** + * + * + * @var string + */ + public $nameEqual = null; + + /** + * + * + * @var KalturaPartnerStatus + */ + public $statusEqual = null; + + /** + * + * + * @var string + */ + public $statusIn = null; + + /** + * + * + * @var int + */ + public $partnerPackageEqual = null; + + /** + * + * + * @var int + */ + public $partnerPackageGreaterThanOrEqual = null; + + /** + * + * + * @var int + */ + public $partnerPackageLessThanOrEqual = null; + + /** + * + * + * @var string + */ + public $partnerPackageIn = null; + + /** + * + * + * @var KalturaPartnerGroupType + */ + public $partnerGroupTypeEqual = null; + + /** + * + * + * @var string + */ + public $partnerNameDescriptionWebsiteAdminNameAdminEmailLike = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaPartnerListResponse extends KalturaListResponse +{ + /** + * + * + * @var array of KalturaPartner + * @readonly + */ + public $objects; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaPermissionItemListResponse extends KalturaListResponse +{ + /** + * + * + * @var array of KalturaPermissionItem + * @readonly + */ + public $objects; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaPermissionListResponse extends KalturaListResponse +{ + /** + * + * + * @var array of KalturaPermission + * @readonly + */ + public $objects; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaPlaylistListResponse extends KalturaListResponse +{ + /** + * + * + * @var array of KalturaPlaylist + * @readonly + */ + public $objects; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaProvisionJobData extends KalturaJobData +{ + /** + * + * + * @var string + */ + public $streamID = null; + + /** + * + * + * @var string + */ + public $backupStreamID = null; + + /** + * + * + * @var string + */ + public $rtmp = null; + + /** + * + * + * @var string + */ + public $encoderIP = null; + + /** + * + * + * @var string + */ + public $backupEncoderIP = null; + + /** + * + * + * @var string + */ + public $encoderPassword = null; + + /** + * + * + * @var string + */ + public $encoderUsername = null; + + /** + * + * + * @var int + */ + public $endDate = null; + + /** + * + * + * @var string + */ + public $returnVal = null; + + /** + * + * + * @var int + */ + public $mediaType = null; + + /** + * + * + * @var string + */ + public $primaryBroadcastingUrl = null; + + /** + * + * + * @var string + */ + public $secondaryBroadcastingUrl = null; + + /** + * + * + * @var string + */ + public $streamName = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaQuizUserEntry extends KalturaUserEntry +{ + /** + * + * + * @var float + * @readonly + */ + public $score = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +abstract class KalturaRecalculateCacheJobData extends KalturaJobData +{ + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaRemotePathListResponse extends KalturaListResponse +{ + /** + * + * + * @var array of KalturaRemotePath + * @readonly + */ + public $objects; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +abstract class KalturaReportBaseFilter extends KalturaFilter +{ + /** + * + * + * @var int + */ + public $idEqual = null; + + /** + * + * + * @var string + */ + public $idIn = null; + + /** + * + * + * @var int + */ + public $partnerIdEqual = null; + + /** + * + * + * @var string + */ + public $partnerIdIn = null; + + /** + * + * + * @var string + */ + public $systemNameEqual = null; + + /** + * + * + * @var string + */ + public $systemNameIn = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaReportInputFilter extends KalturaReportInputBaseFilter +{ + /** + * Search keywords to filter objects + * + * @var string + */ + public $keywords = null; + + /** + * Search keywords in onjects tags + * + * @var bool + */ + public $searchInTags = null; + + /** + * Search keywords in onjects admin tags + * + * @var bool + */ + public $searchInAdminTags = null; + + /** + * Search onjects in specified categories + * + * @var string + */ + public $categories = null; + + /** + * Time zone offset in minutes + * + * @var int + */ + public $timeZoneOffset = null; + + /** + * Aggregated results according to interval + * + * @var KalturaReportInterval + */ + public $interval = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaReportListResponse extends KalturaListResponse +{ + /** + * + * + * @var array of KalturaReport + * @readonly + */ + public $objects; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +abstract class KalturaResponseProfileBaseFilter extends KalturaFilter +{ + /** + * + * + * @var int + */ + public $idEqual = null; + + /** + * + * + * @var string + */ + public $idIn = null; + + /** + * + * + * @var string + */ + public $systemNameEqual = null; + + /** + * + * + * @var string + */ + public $systemNameIn = null; + + /** + * + * + * @var int + */ + public $createdAtGreaterThanOrEqual = null; + + /** + * + * + * @var int + */ + public $createdAtLessThanOrEqual = null; + + /** + * + * + * @var int + */ + public $updatedAtGreaterThanOrEqual = null; + + /** + * + * + * @var int + */ + public $updatedAtLessThanOrEqual = null; + + /** + * + * + * @var KalturaResponseProfileStatus + */ + public $statusEqual = null; + + /** + * + * + * @var string + */ + public $statusIn = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaResponseProfileHolder extends KalturaBaseResponseProfile +{ + /** + * Auto generated numeric identifier + * + * @var int + */ + public $id = null; + + /** + * Unique system name + * + * @var string + */ + public $systemName = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaResponseProfileListResponse extends KalturaListResponse +{ + /** + * + * + * @var array of KalturaResponseProfile + * @readonly + */ + public $objects; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaSchedulerListResponse extends KalturaListResponse +{ + /** + * + * + * @var array of KalturaScheduler + * @readonly + */ + public $objects; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaSchedulerWorkerListResponse extends KalturaListResponse +{ + /** + * + * + * @var array of KalturaSchedulerWorker + * @readonly + */ + public $objects; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaSearchCondition extends KalturaSearchItem +{ + /** + * + * + * @var string + */ + public $field = null; + + /** + * + * + * @var string + */ + public $value = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaSearchOperator extends KalturaSearchItem +{ + /** + * + * + * @var KalturaSearchOperatorType + */ + public $type = null; + + /** + * + * + * @var array of KalturaSearchItem + */ + public $items; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +abstract class KalturaServerNodeBaseFilter extends KalturaFilter +{ + /** + * + * + * @var int + */ + public $idEqual = null; + + /** + * + * + * @var string + */ + public $idIn = null; + + /** + * + * + * @var int + */ + public $createdAtGreaterThanOrEqual = null; + + /** + * + * + * @var int + */ + public $createdAtLessThanOrEqual = null; + + /** + * + * + * @var int + */ + public $updatedAtGreaterThanOrEqual = null; + + /** + * + * + * @var int + */ + public $updatedAtLessThanOrEqual = null; + + /** + * + * + * @var int + */ + public $heartbeatTimeGreaterThanOrEqual = null; + + /** + * + * + * @var int + */ + public $heartbeatTimeLessThanOrEqual = null; + + /** + * + * + * @var string + */ + public $nameEqual = null; + + /** + * + * + * @var string + */ + public $nameIn = null; + + /** + * + * + * @var string + */ + public $systemNameEqual = null; + + /** + * + * + * @var string + */ + public $systemNameIn = null; + + /** + * + * + * @var string + */ + public $hostNameLike = null; + + /** + * + * + * @var string + */ + public $hostNameMultiLikeOr = null; + + /** + * + * + * @var string + */ + public $hostNameMultiLikeAnd = null; + + /** + * + * + * @var KalturaServerNodeStatus + */ + public $statusEqual = null; + + /** + * + * + * @var string + */ + public $statusIn = null; + + /** + * + * + * @var KalturaServerNodeType + */ + public $typeEqual = null; + + /** + * + * + * @var string + */ + public $typeIn = null; + + /** + * + * + * @var string + */ + public $tagsLike = null; + + /** + * + * + * @var string + */ + public $tagsMultiLikeOr = null; + + /** + * + * + * @var string + */ + public $tagsMultiLikeAnd = null; + + /** + * + * + * @var int + */ + public $dcEqual = null; + + /** + * + * + * @var string + */ + public $dcIn = null; + + /** + * + * + * @var string + */ + public $parentIdLike = null; + + /** + * + * + * @var string + */ + public $parentIdMultiLikeOr = null; + + /** + * + * + * @var string + */ + public $parentIdMultiLikeAnd = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaServerNodeListResponse extends KalturaListResponse +{ + /** + * + * + * @var array of KalturaServerNode + * @readonly + */ + public $objects; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaSessionResponse extends KalturaStartWidgetSessionResponse +{ + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaSessionRestriction extends KalturaBaseRestriction +{ + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaSiteRestriction extends KalturaBaseRestriction +{ + /** + * The site restriction type (allow or deny) + * + * @var KalturaSiteRestrictionType + */ + public $siteRestrictionType = null; + + /** + * Comma separated list of sites (domains) to allow or deny + * + * @var string + */ + public $siteList = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaStorageAddAction extends KalturaRuleAction +{ + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaStorageJobData extends KalturaJobData +{ + /** + * + * + * @var string + */ + public $serverUrl = null; + + /** + * + * + * @var string + */ + public $serverUsername = null; + + /** + * + * + * @var string + */ + public $serverPassword = null; + + /** + * + * + * @var string + */ + public $serverPrivateKey = null; + + /** + * + * + * @var string + */ + public $serverPublicKey = null; + + /** + * + * + * @var string + */ + public $serverPassPhrase = null; + + /** + * + * + * @var bool + */ + public $ftpPassiveMode = null; + + /** + * + * + * @var string + */ + public $srcFileSyncLocalPath = null; + + /** + * + * + * @var string + */ + public $srcFileEncryptionKey = null; + + /** + * + * + * @var string + */ + public $srcFileSyncId = null; + + /** + * + * + * @var string + */ + public $destFileSyncStoredPath = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +abstract class KalturaStorageProfileBaseFilter extends KalturaFilter +{ + /** + * + * + * @var int + */ + public $idEqual = null; + + /** + * + * + * @var string + */ + public $idIn = null; + + /** + * + * + * @var int + */ + public $createdAtGreaterThanOrEqual = null; + + /** + * + * + * @var int + */ + public $createdAtLessThanOrEqual = null; + + /** + * + * + * @var int + */ + public $updatedAtGreaterThanOrEqual = null; + + /** + * + * + * @var int + */ + public $updatedAtLessThanOrEqual = null; + + /** + * + * + * @var int + */ + public $partnerIdEqual = null; + + /** + * + * + * @var string + */ + public $partnerIdIn = null; + + /** + * + * + * @var string + */ + public $systemNameEqual = null; + + /** + * + * + * @var string + */ + public $systemNameIn = null; + + /** + * + * + * @var KalturaStorageProfileStatus + */ + public $statusEqual = null; + + /** + * + * + * @var string + */ + public $statusIn = null; + + /** + * + * + * @var KalturaStorageProfileProtocol + */ + public $protocolEqual = null; + + /** + * + * + * @var string + */ + public $protocolIn = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaStorageProfileListResponse extends KalturaListResponse +{ + /** + * + * + * @var array of KalturaStorageProfile + * @readonly + */ + public $objects; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaSyncCategoryPrivacyContextJobData extends KalturaJobData +{ + /** + * category id + * + * @var int + */ + public $categoryId = null; + + /** + * Saves the last category entry creation date that was updated + * In case of crash the batch will restart from that point + * + * @var int + */ + public $lastUpdatedCategoryEntryCreatedAt = null; + + /** + * Saves the last sub category creation date that was updated + * In case of crash the batch will restart from that point + * + * @var int + */ + public $lastUpdatedCategoryCreatedAt = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaThumbAssetListResponse extends KalturaListResponse +{ + /** + * + * + * @var array of KalturaThumbAsset + * @readonly + */ + public $objects; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaThumbParamsListResponse extends KalturaListResponse +{ + /** + * + * + * @var array of KalturaThumbParams + * @readonly + */ + public $objects; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaThumbParamsOutputListResponse extends KalturaListResponse +{ + /** + * + * + * @var array of KalturaThumbParamsOutput + * @readonly + */ + public $objects; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaThumbnailServeOptions extends KalturaAssetServeOptions +{ + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaTubeMogulSyndicationFeed extends KalturaBaseSyndicationFeed +{ + /** + * + * + * @var KalturaTubeMogulSyndicationFeedCategories + * @readonly + */ + public $category = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +abstract class KalturaUiConfBaseFilter extends KalturaFilter +{ + /** + * + * + * @var int + */ + public $idEqual = null; + + /** + * + * + * @var string + */ + public $idIn = null; + + /** + * + * + * @var string + */ + public $nameLike = null; + + /** + * + * + * @var int + */ + public $partnerIdEqual = null; + + /** + * + * + * @var string + */ + public $partnerIdIn = null; + + /** + * + * + * @var KalturaUiConfObjType + */ + public $objTypeEqual = null; + + /** + * + * + * @var string + */ + public $objTypeIn = null; + + /** + * + * + * @var string + */ + public $tagsMultiLikeOr = null; + + /** + * + * + * @var string + */ + public $tagsMultiLikeAnd = null; + + /** + * + * + * @var int + */ + public $createdAtGreaterThanOrEqual = null; + + /** + * + * + * @var int + */ + public $createdAtLessThanOrEqual = null; + + /** + * + * + * @var int + */ + public $updatedAtGreaterThanOrEqual = null; + + /** + * + * + * @var int + */ + public $updatedAtLessThanOrEqual = null; + + /** + * + * + * @var KalturaUiConfCreationMode + */ + public $creationModeEqual = null; + + /** + * + * + * @var string + */ + public $creationModeIn = null; + + /** + * + * + * @var string + */ + public $versionEqual = null; + + /** + * + * + * @var string + */ + public $versionMultiLikeOr = null; + + /** + * + * + * @var string + */ + public $versionMultiLikeAnd = null; + + /** + * + * + * @var string + */ + public $partnerTagsMultiLikeOr = null; + + /** + * + * + * @var string + */ + public $partnerTagsMultiLikeAnd = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaUiConfListResponse extends KalturaListResponse +{ + /** + * + * + * @var array of KalturaUiConf + * @readonly + */ + public $objects; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +abstract class KalturaUploadTokenBaseFilter extends KalturaFilter +{ + /** + * + * + * @var string + */ + public $idEqual = null; + + /** + * + * + * @var string + */ + public $idIn = null; + + /** + * + * + * @var string + */ + public $userIdEqual = null; + + /** + * + * + * @var KalturaUploadTokenStatus + */ + public $statusEqual = null; + + /** + * + * + * @var string + */ + public $statusIn = null; + + /** + * + * + * @var string + */ + public $fileNameEqual = null; + + /** + * + * + * @var float + */ + public $fileSizeEqual = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaUploadTokenListResponse extends KalturaListResponse +{ + /** + * + * + * @var array of KalturaUploadToken + * @readonly + */ + public $objects; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaUrlRecognizerAkamaiG2O extends KalturaUrlRecognizer +{ + /** + * headerData + * + * @var string + */ + public $headerData = null; + + /** + * headerSign + * + * @var string + */ + public $headerSign = null; + + /** + * timeout + * + * @var int + */ + public $timeout = null; + + /** + * salt + * + * @var string + */ + public $salt = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaUrlTokenizerAkamaiHttp extends KalturaUrlTokenizer +{ + /** + * param + * + * @var string + */ + public $paramName = null; + + /** + * + * + * @var string + */ + public $rootDir = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaUrlTokenizerAkamaiRtmp extends KalturaUrlTokenizer +{ + /** + * profile + * + * @var string + */ + public $profile = null; + + /** + * Type + * + * @var string + */ + public $type = null; + + /** + * + * + * @var string + */ + public $aifp = null; + + /** + * + * + * @var bool + */ + public $usePrefix = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaUrlTokenizerAkamaiRtsp extends KalturaUrlTokenizer +{ + /** + * host + * + * @var string + */ + public $host = null; + + /** + * Cp-Code + * + * @var int + */ + public $cpcode = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaUrlTokenizerAkamaiSecureHd extends KalturaUrlTokenizer +{ + /** + * + * + * @var string + */ + public $paramName = null; + + /** + * + * + * @var string + */ + public $aclPostfix = null; + + /** + * + * + * @var string + */ + public $customPostfixes = null; + + /** + * + * + * @var string + */ + public $useCookieHosts = null; + + /** + * + * + * @var string + */ + public $rootDir = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaUrlTokenizerBitGravity extends KalturaUrlTokenizer +{ + /** + * hashPatternRegex + * + * @var string + */ + public $hashPatternRegex = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaUrlTokenizerChinaCache extends KalturaUrlTokenizer +{ + /** + * + * + * @var KalturaChinaCacheAlgorithmType + */ + public $algorithmId = null; + + /** + * + * + * @var int + */ + public $keyId = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaUrlTokenizerCht extends KalturaUrlTokenizer +{ + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaUrlTokenizerCloudFront extends KalturaUrlTokenizer +{ + /** + * + * + * @var string + */ + public $keyPairId = null; + + /** + * + * + * @var string + */ + public $rootDir = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaUrlTokenizerKs extends KalturaUrlTokenizer +{ + /** + * + * + * @var bool + */ + public $usePath = null; + + /** + * + * + * @var string + */ + public $additionalUris = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaUrlTokenizerLevel3 extends KalturaUrlTokenizer +{ + /** + * paramName + * + * @var string + */ + public $paramName = null; + + /** + * expiryName + * + * @var string + */ + public $expiryName = null; + + /** + * gen + * + * @var string + */ + public $gen = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaUrlTokenizerLimeLight extends KalturaUrlTokenizer +{ + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaUrlTokenizerUplynk extends KalturaUrlTokenizer +{ + /** + * accountId + * + * @var string + */ + public $accountId = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaUrlTokenizerVelocix extends KalturaUrlTokenizer +{ + /** + * hdsPaths + * + * @var string + */ + public $hdsPaths = null; + + /** + * tokenParamName + * + * @var string + */ + public $paramName = null; + + /** + * secure URL prefix + * + * @var string + */ + public $authPrefix = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaUrlTokenizerVnpt extends KalturaUrlTokenizer +{ + /** + * + * + * @var int + */ + public $tokenizationFormat = null; + + /** + * + * + * @var bool + */ + public $shouldIncludeClientIp = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaUserAgentRestriction extends KalturaBaseRestriction +{ + /** + * User agent restriction type (Allow or deny) + * + * @var KalturaUserAgentRestrictionType + */ + public $userAgentRestrictionType = null; + + /** + * A comma seperated list of user agent regular expressions + * + * @var string + */ + public $userAgentRegexList = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaUserEntryListResponse extends KalturaListResponse +{ + /** + * + * + * @var array of KalturaUserEntry + * @readonly + */ + public $objects; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaUserListResponse extends KalturaListResponse +{ + /** + * + * + * @var array of KalturaUser + * @readonly + */ + public $objects; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaUserLoginDataListResponse extends KalturaListResponse +{ + /** + * + * + * @var array of KalturaUserLoginData + * @readonly + */ + public $objects; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaUserRoleCondition extends KalturaCondition +{ + /** + * Comma separated list of role ids + * + * @var string + */ + public $roleIds = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaUserRoleListResponse extends KalturaListResponse +{ + /** + * + * + * @var array of KalturaUserRole + * @readonly + */ + public $objects; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaUsersCsvJobData extends KalturaJobData +{ + /** + * The filter should return the list of users that need to be specified in the csv. + * + * @var KalturaUserFilter + */ + public $filter; + + /** + * The metadata profile we should look the xpath in + * + * @var int + */ + public $metadataProfileId = null; + + /** + * The xpath to look in the metadataProfileId and the wanted csv field name + * + * @var array of KalturaCsvAdditionalFieldInfo + */ + public $additionalFields; + + /** + * The users name + * + * @var string + */ + public $userName = null; + + /** + * The users email + * + * @var string + */ + public $userMail = null; + + /** + * The file location + * + * @var string + */ + public $outputPath = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaValidateActiveEdgeCondition extends KalturaCondition +{ + /** + * Comma separated list of edge servers to validate are active + * + * @var string + */ + public $edgeServerIds = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +abstract class KalturaWidgetBaseFilter extends KalturaFilter +{ + /** + * + * + * @var string + */ + public $idEqual = null; + + /** + * + * + * @var string + */ + public $idIn = null; + + /** + * + * + * @var string + */ + public $sourceWidgetIdEqual = null; + + /** + * + * + * @var string + */ + public $rootWidgetIdEqual = null; + + /** + * + * + * @var int + */ + public $partnerIdEqual = null; + + /** + * + * + * @var string + */ + public $entryIdEqual = null; + + /** + * + * + * @var int + */ + public $uiConfIdEqual = null; + + /** + * + * + * @var int + */ + public $createdAtGreaterThanOrEqual = null; + + /** + * + * + * @var int + */ + public $createdAtLessThanOrEqual = null; + + /** + * + * + * @var int + */ + public $updatedAtGreaterThanOrEqual = null; + + /** + * + * + * @var int + */ + public $updatedAtLessThanOrEqual = null; + + /** + * + * + * @var string + */ + public $partnerDataLike = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaWidgetListResponse extends KalturaListResponse +{ + /** + * + * + * @var array of KalturaWidget + * @readonly + */ + public $objects; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaYahooSyndicationFeed extends KalturaBaseSyndicationFeed +{ + /** + * + * + * @var KalturaYahooSyndicationFeedCategories + * @readonly + */ + public $category = null; + + /** + * + * + * @var KalturaYahooSyndicationFeedAdultValues + */ + public $adultContent = null; + + /** + * feed description + * + * @var string + */ + public $feedDescription = null; + + /** + * feed landing page (i.e publisher website) + * + * @var string + */ + public $feedLandingPage = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +abstract class KalturaAccessControlBaseFilter extends KalturaRelatedFilter +{ + /** + * + * + * @var int + */ + public $idEqual = null; + + /** + * + * + * @var string + */ + public $idIn = null; + + /** + * + * + * @var string + */ + public $systemNameEqual = null; + + /** + * + * + * @var string + */ + public $systemNameIn = null; + + /** + * + * + * @var int + */ + public $createdAtGreaterThanOrEqual = null; + + /** + * + * + * @var int + */ + public $createdAtLessThanOrEqual = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +abstract class KalturaAccessControlProfileBaseFilter extends KalturaRelatedFilter +{ + /** + * + * + * @var int + */ + public $idEqual = null; + + /** + * + * + * @var string + */ + public $idIn = null; + + /** + * + * + * @var string + */ + public $systemNameEqual = null; + + /** + * + * + * @var string + */ + public $systemNameIn = null; + + /** + * + * + * @var int + */ + public $createdAtGreaterThanOrEqual = null; + + /** + * + * + * @var int + */ + public $createdAtLessThanOrEqual = null; + + /** + * + * + * @var int + */ + public $updatedAtGreaterThanOrEqual = null; + + /** + * + * + * @var int + */ + public $updatedAtLessThanOrEqual = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaAkamaiProvisionJobData extends KalturaProvisionJobData +{ + /** + * + * + * @var string + */ + public $wsdlUsername = null; + + /** + * + * + * @var string + */ + public $wsdlPassword = null; + + /** + * + * + * @var string + */ + public $cpcode = null; + + /** + * + * + * @var string + */ + public $emailId = null; + + /** + * + * + * @var string + */ + public $primaryContact = null; + + /** + * + * + * @var string + */ + public $secondaryContact = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaAkamaiUniversalProvisionJobData extends KalturaProvisionJobData +{ + /** + * + * + * @var int + */ + public $streamId = null; + + /** + * + * + * @var string + */ + public $systemUserName = null; + + /** + * + * + * @var string + */ + public $systemPassword = null; + + /** + * + * + * @var string + */ + public $domainName = null; + + /** + * + * + * @var KalturaDVRStatus + */ + public $dvrEnabled = null; + + /** + * + * + * @var int + */ + public $dvrWindow = null; + + /** + * + * + * @var string + */ + public $primaryContact = null; + + /** + * + * + * @var string + */ + public $secondaryContact = null; + + /** + * + * + * @var KalturaAkamaiUniversalStreamType + */ + public $streamType = null; + + /** + * + * + * @var string + */ + public $notificationEmail = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaAnonymousIPCondition extends KalturaMatchCondition +{ + /** + * The ip geo coder engine to be used + * + * @var KalturaGeoCoderType + */ + public $geoCoderType = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaAppTokenFilter extends KalturaAppTokenBaseFilter +{ + +} + +/** + * @package Kaltura + * @subpackage Client + */ +abstract class KalturaAssetParamsBaseFilter extends KalturaRelatedFilter +{ + /** + * + * + * @var int + */ + public $idEqual = null; + + /** + * + * + * @var string + */ + public $idIn = null; + + /** + * + * + * @var string + */ + public $systemNameEqual = null; + + /** + * + * + * @var string + */ + public $systemNameIn = null; + + /** + * + * + * @var KalturaNullableBoolean + */ + public $isSystemDefaultEqual = null; + + /** + * + * + * @var string + */ + public $tagsEqual = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaAssetResource extends KalturaContentResource +{ + /** + * ID of the source asset + * + * @var string + */ + public $assetId = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaBaseSyndicationFeedFilter extends KalturaBaseSyndicationFeedBaseFilter +{ + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaBulkUploadFilter extends KalturaBulkUploadBaseFilter +{ + +} + +/** + * @package Kaltura + * @subpackage Client + */ +abstract class KalturaCategoryBaseFilter extends KalturaRelatedFilter +{ + /** + * + * + * @var int + */ + public $idEqual = null; + + /** + * + * + * @var string + */ + public $idIn = null; + + /** + * + * + * @var string + */ + public $idNotIn = null; + + /** + * + * + * @var int + */ + public $parentIdEqual = null; + + /** + * + * + * @var string + */ + public $parentIdIn = null; + + /** + * + * + * @var int + */ + public $depthEqual = null; + + /** + * + * + * @var string + */ + public $fullNameEqual = null; + + /** + * + * + * @var string + */ + public $fullNameStartsWith = null; + + /** + * + * + * @var string + */ + public $fullNameIn = null; + + /** + * + * + * @var string + */ + public $fullIdsEqual = null; + + /** + * + * + * @var string + */ + public $fullIdsStartsWith = null; + + /** + * + * + * @var string + */ + public $fullIdsMatchOr = null; + + /** + * + * + * @var int + */ + public $createdAtGreaterThanOrEqual = null; + + /** + * + * + * @var int + */ + public $createdAtLessThanOrEqual = null; + + /** + * + * + * @var int + */ + public $updatedAtGreaterThanOrEqual = null; + + /** + * + * + * @var int + */ + public $updatedAtLessThanOrEqual = null; + + /** + * + * + * @var string + */ + public $tagsLike = null; + + /** + * + * + * @var string + */ + public $tagsMultiLikeOr = null; + + /** + * + * + * @var string + */ + public $tagsMultiLikeAnd = null; + + /** + * + * + * @var KalturaAppearInListType + */ + public $appearInListEqual = null; + + /** + * + * + * @var KalturaPrivacyType + */ + public $privacyEqual = null; + + /** + * + * + * @var string + */ + public $privacyIn = null; + + /** + * + * + * @var KalturaInheritanceType + */ + public $inheritanceTypeEqual = null; + + /** + * + * + * @var string + */ + public $inheritanceTypeIn = null; + + /** + * + * + * @var string + */ + public $referenceIdEqual = null; + + /** + * + * + * @var KalturaNullableBoolean + */ + public $referenceIdEmpty = null; + + /** + * + * + * @var KalturaContributionPolicyType + */ + public $contributionPolicyEqual = null; + + /** + * + * + * @var int + */ + public $membersCountGreaterThanOrEqual = null; + + /** + * + * + * @var int + */ + public $membersCountLessThanOrEqual = null; + + /** + * + * + * @var int + */ + public $pendingMembersCountGreaterThanOrEqual = null; + + /** + * + * + * @var int + */ + public $pendingMembersCountLessThanOrEqual = null; + + /** + * + * + * @var string + */ + public $privacyContextEqual = null; + + /** + * + * + * @var KalturaCategoryStatus + */ + public $statusEqual = null; + + /** + * + * + * @var string + */ + public $statusIn = null; + + /** + * + * + * @var int + */ + public $inheritedParentIdEqual = null; + + /** + * + * + * @var string + */ + public $inheritedParentIdIn = null; + + /** + * + * + * @var int + */ + public $partnerSortValueGreaterThanOrEqual = null; + + /** + * + * + * @var int + */ + public $partnerSortValueLessThanOrEqual = null; + + /** + * + * + * @var string + */ + public $aggregationCategoriesMultiLikeOr = null; + + /** + * + * + * @var string + */ + public $aggregationCategoriesMultiLikeAnd = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +abstract class KalturaCategoryEntryBaseFilter extends KalturaRelatedFilter +{ + /** + * + * + * @var int + */ + public $categoryIdEqual = null; + + /** + * + * + * @var string + */ + public $categoryIdIn = null; + + /** + * + * + * @var string + */ + public $entryIdEqual = null; + + /** + * + * + * @var string + */ + public $entryIdIn = null; + + /** + * + * + * @var int + */ + public $createdAtGreaterThanOrEqual = null; + + /** + * + * + * @var int + */ + public $createdAtLessThanOrEqual = null; + + /** + * + * + * @var string + */ + public $categoryFullIdsStartsWith = null; + + /** + * + * + * @var KalturaCategoryEntryStatus + */ + public $statusEqual = null; + + /** + * + * + * @var string + */ + public $statusIn = null; + + /** + * + * + * @var string + */ + public $creatorUserIdEqual = null; + + /** + * + * + * @var string + */ + public $creatorUserIdIn = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaControlPanelCommandFilter extends KalturaControlPanelCommandBaseFilter +{ + +} + +/** + * @package Kaltura + * @subpackage Client + */ +abstract class KalturaConversionProfileAssetParamsBaseFilter extends KalturaRelatedFilter +{ + /** + * + * + * @var int + */ + public $conversionProfileIdEqual = null; + + /** + * + * + * @var string + */ + public $conversionProfileIdIn = null; + + /** + * + * + * @var int + */ + public $assetParamsIdEqual = null; + + /** + * + * + * @var string + */ + public $assetParamsIdIn = null; + + /** + * + * + * @var KalturaFlavorReadyBehaviorType + */ + public $readyBehaviorEqual = null; + + /** + * + * + * @var string + */ + public $readyBehaviorIn = null; + + /** + * + * + * @var KalturaAssetParamsOrigin + */ + public $originEqual = null; + + /** + * + * + * @var string + */ + public $originIn = null; + + /** + * + * + * @var string + */ + public $systemNameEqual = null; + + /** + * + * + * @var string + */ + public $systemNameIn = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +abstract class KalturaConversionProfileBaseFilter extends KalturaRelatedFilter +{ + /** + * + * + * @var int + */ + public $idEqual = null; + + /** + * + * + * @var string + */ + public $idIn = null; + + /** + * + * + * @var KalturaConversionProfileStatus + */ + public $statusEqual = null; + + /** + * + * + * @var string + */ + public $statusIn = null; + + /** + * + * + * @var KalturaConversionProfileType + */ + public $typeEqual = null; + + /** + * + * + * @var string + */ + public $typeIn = null; + + /** + * + * + * @var string + */ + public $nameEqual = null; + + /** + * + * + * @var string + */ + public $systemNameEqual = null; + + /** + * + * + * @var string + */ + public $systemNameIn = null; + + /** + * + * + * @var string + */ + public $tagsMultiLikeOr = null; + + /** + * + * + * @var string + */ + public $tagsMultiLikeAnd = null; + + /** + * + * + * @var string + */ + public $defaultEntryIdEqual = null; + + /** + * + * + * @var string + */ + public $defaultEntryIdIn = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaConvertCollectionJobData extends KalturaConvartableJobData +{ + /** + * + * + * @var string + */ + public $destDirLocalPath = null; + + /** + * + * + * @var string + */ + public $destDirRemoteUrl = null; + + /** + * + * + * @var string + */ + public $destFileName = null; + + /** + * + * + * @var string + */ + public $inputXmlLocalPath = null; + + /** + * + * + * @var string + */ + public $inputXmlRemoteUrl = null; + + /** + * + * + * @var string + */ + public $commandLinesStr = null; + + /** + * + * + * @var array of KalturaConvertCollectionFlavorData + */ + public $flavors; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaConvertJobData extends KalturaConvartableJobData +{ + /** + * + * + * @var string + */ + public $destFileSyncLocalPath = null; + + /** + * + * + * @var string + */ + public $destFileSyncRemoteUrl = null; + + /** + * + * + * @var string + */ + public $logFileSyncLocalPath = null; + + /** + * + * + * @var string + */ + public $logFileSyncRemoteUrl = null; + + /** + * + * + * @var string + */ + public $flavorAssetId = null; + + /** + * + * + * @var string + */ + public $remoteMediaId = null; + + /** + * + * + * @var string + */ + public $customData = null; + + /** + * + * + * @var array of KalturaDestFileSyncDescriptor + */ + public $extraDestFileSyncs; + + /** + * + * + * @var string + */ + public $engineMessage = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaCountryCondition extends KalturaMatchCondition +{ + /** + * The ip geo coder engine to be used + * + * @var KalturaGeoCoderType + */ + public $geoCoderType = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaDeliveryProfileFilter extends KalturaDeliveryProfileBaseFilter +{ + /** + * + * + * @var KalturaNullableBoolean + */ + public $isLive = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaDeliveryProfileGenericRtmp extends KalturaDeliveryProfileRtmp +{ + /** + * + * + * @var string + */ + public $pattern = null; + + /** + * rendererClass + * + * @var string + */ + public $rendererClass = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaDeliveryProfileVodPackagerHls extends KalturaDeliveryProfileVodPackagerPlayServer +{ + /** + * + * + * @var bool + */ + public $allowFairplayOffline = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaEdgeServerNode extends KalturaDeliveryServerNode +{ + /** + * Delivery server playback Domain + * + * @var string + */ + public $playbackDomain = null; + + /** + * Overdie edge server default configuration - json format + * + * @var string + */ + public $config = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaEndUserReportInputFilter extends KalturaReportInputFilter +{ + /** + * + * + * @var string + */ + public $application = null; + + /** + * + * + * @var string + */ + public $userIds = null; + + /** + * + * + * @var string + */ + public $playbackContext = null; + + /** + * + * + * @var string + */ + public $ancestorPlaybackContext = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaEntryIndexAdvancedFilter extends KalturaIndexAdvancedFilter +{ + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaEntryReferrerLiveStats extends KalturaEntryLiveStats +{ + /** + * + * + * @var string + */ + public $referrer = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaEntryResource extends KalturaContentResource +{ + /** + * ID of the source entry + * + * @var string + */ + public $entryId = null; + + /** + * ID of the source flavor params, set to null to use the source flavor + * + * @var int + */ + public $flavorParamsId = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaEntryServerNodeFilter extends KalturaEntryServerNodeBaseFilter +{ + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaExtractMediaJobData extends KalturaConvartableJobData +{ + /** + * + * + * @var string + */ + public $flavorAssetId = null; + + /** + * + * + * @var bool + */ + public $calculateComplexity = null; + + /** + * + * + * @var bool + */ + public $extractId3Tags = null; + + /** + * The data output file + * + * @var string + */ + public $destDataFilePath = null; + + /** + * + * + * @var int + */ + public $detectGOP = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaFairPlayPlaybackPluginData extends KalturaDrmPlaybackPluginData +{ + /** + * + * + * @var string + */ + public $certificate = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +abstract class KalturaIntegerField extends KalturaIntegerValue +{ + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaFieldCompareCondition extends KalturaCompareCondition +{ + /** + * Field to evaluate + * + * @var KalturaIntegerField + */ + public $field; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +abstract class KalturaStringField extends KalturaStringValue +{ + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaFieldMatchCondition extends KalturaMatchCondition +{ + /** + * Field to evaluate + * + * @var KalturaStringField + */ + public $field; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +abstract class KalturaFileAssetBaseFilter extends KalturaRelatedFilter +{ + /** + * + * + * @var int + */ + public $idEqual = null; + + /** + * + * + * @var string + */ + public $idIn = null; + + /** + * + * + * @var int + */ + public $partnerIdEqual = null; + + /** + * + * + * @var KalturaFileAssetObjectType + */ + public $fileAssetObjectTypeEqual = null; + + /** + * + * + * @var string + */ + public $objectIdEqual = null; + + /** + * + * + * @var string + */ + public $objectIdIn = null; + + /** + * + * + * @var int + */ + public $createdAtGreaterThanOrEqual = null; + + /** + * + * + * @var int + */ + public $createdAtLessThanOrEqual = null; + + /** + * + * + * @var int + */ + public $updatedAtGreaterThanOrEqual = null; + + /** + * + * + * @var int + */ + public $updatedAtLessThanOrEqual = null; + + /** + * + * + * @var KalturaFileAssetStatus + */ + public $statusEqual = null; + + /** + * + * + * @var string + */ + public $statusIn = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaFileSyncResource extends KalturaContentResource +{ + /** + * The object type of the file sync object + * + * @var int + */ + public $fileSyncObjectType = null; + + /** + * The object sub-type of the file sync object + * + * @var int + */ + public $objectSubType = null; + + /** + * The object id of the file sync object + * + * @var string + */ + public $objectId = null; + + /** + * The version of the file sync object + * + * @var string + */ + public $version = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaGenericXsltSyndicationFeed extends KalturaGenericSyndicationFeed +{ + /** + * + * + * @var string + */ + public $xslt = null; + + /** + * + * + * @var array of KalturaExtendingItemMrssParameter + */ + public $itemXpathsToExtend; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaGeoDistanceCondition extends KalturaMatchCondition +{ + /** + * The ip geo coder engine to be used + * + * @var KalturaGeoCoderType + */ + public $geoCoderType = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaGeoTimeLiveStats extends KalturaEntryLiveStats +{ + /** + * + * + * @var KalturaCoordinate + */ + public $city; + + /** + * + * + * @var KalturaCoordinate + */ + public $country; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +abstract class KalturaGroupUserBaseFilter extends KalturaRelatedFilter +{ + /** + * + * + * @var string + */ + public $userIdEqual = null; + + /** + * + * + * @var string + */ + public $userIdIn = null; + + /** + * + * + * @var string + */ + public $groupIdEqual = null; + + /** + * + * + * @var string + */ + public $groupIdIn = null; + + /** + * + * + * @var KalturaGroupUserStatus + */ + public $statusEqual = null; + + /** + * + * + * @var string + */ + public $statusIn = null; + + /** + * + * + * @var int + */ + public $createdAtGreaterThanOrEqual = null; + + /** + * + * + * @var int + */ + public $createdAtLessThanOrEqual = null; + + /** + * + * + * @var int + */ + public $updatedAtGreaterThanOrEqual = null; + + /** + * + * + * @var int + */ + public $updatedAtLessThanOrEqual = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaIpAddressCondition extends KalturaMatchCondition +{ + /** + * allow internal ips + * + * @var bool + */ + public $acceptInternalIps = null; + + /** + * http header name for extracting the ip + * + * @var string + */ + public $httpHeader = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaLiveAsset extends KalturaFlavorAsset +{ + /** + * + * + * @var string + */ + public $multicastIP = null; + + /** + * + * + * @var int + */ + public $multicastPort = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +abstract class KalturaLiveChannelSegmentBaseFilter extends KalturaRelatedFilter +{ + /** + * + * + * @var int + */ + public $createdAtGreaterThanOrEqual = null; + + /** + * + * + * @var int + */ + public $createdAtLessThanOrEqual = null; + + /** + * + * + * @var int + */ + public $updatedAtGreaterThanOrEqual = null; + + /** + * + * + * @var int + */ + public $updatedAtLessThanOrEqual = null; + + /** + * + * + * @var KalturaLiveChannelSegmentStatus + */ + public $statusEqual = null; + + /** + * + * + * @var string + */ + public $statusIn = null; + + /** + * + * + * @var string + */ + public $channelIdEqual = null; + + /** + * + * + * @var string + */ + public $channelIdIn = null; + + /** + * + * + * @var float + */ + public $startTimeGreaterThanOrEqual = null; + + /** + * + * + * @var float + */ + public $startTimeLessThanOrEqual = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaLiveParams extends KalturaFlavorParams +{ + /** + * Suffix to be added to the stream name after the entry id {entry_id}_{stream_suffix}, e.g. for entry id 0_kjdu5jr6 and suffix 1, the stream name will be 0_kjdu5jr6_1 + * + * @var string + */ + public $streamSuffix = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaMediaFlavorParams extends KalturaFlavorParams +{ + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaMediaInfoFilter extends KalturaMediaInfoBaseFilter +{ + +} + +/** + * @package Kaltura + * @subpackage Client + */ +abstract class KalturaMediaServerNode extends KalturaDeliveryServerNode +{ + /** + * Media server application name + * + * @var string + */ + public $applicationName = null; + + /** + * Media server playback port configuration by protocol and format + * + * @var array of KalturaKeyValue + */ + public $mediaServerPortConfig; + + /** + * Media server playback Domain configuration by protocol and format + * + * @var array of KalturaKeyValue + */ + public $mediaServerPlaybackDomainConfig; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaOperationResource extends KalturaContentResource +{ + /** + * Only KalturaEntryResource and KalturaAssetResource are supported + * + * @var KalturaContentResource + */ + public $resource; + + /** + * + * + * @var array of KalturaOperationAttributes + */ + public $operationAttributes; + + /** + * ID of alternative asset params to be used instead of the system default flavor params + * + * @var int + */ + public $assetParamsId = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaPartnerFilter extends KalturaPartnerBaseFilter +{ + +} + +/** + * @package Kaltura + * @subpackage Client + */ +abstract class KalturaPermissionBaseFilter extends KalturaRelatedFilter +{ + /** + * + * + * @var int + */ + public $idEqual = null; + + /** + * + * + * @var string + */ + public $idIn = null; + + /** + * + * + * @var KalturaPermissionType + */ + public $typeEqual = null; + + /** + * + * + * @var string + */ + public $typeIn = null; + + /** + * + * + * @var string + */ + public $nameEqual = null; + + /** + * + * + * @var string + */ + public $nameIn = null; + + /** + * + * + * @var string + */ + public $friendlyNameLike = null; + + /** + * + * + * @var string + */ + public $descriptionLike = null; + + /** + * + * + * @var KalturaPermissionStatus + */ + public $statusEqual = null; + + /** + * + * + * @var string + */ + public $statusIn = null; + + /** + * + * + * @var int + */ + public $partnerIdEqual = null; + + /** + * + * + * @var string + */ + public $partnerIdIn = null; + + /** + * + * + * @var string + */ + public $dependsOnPermissionNamesMultiLikeOr = null; + + /** + * + * + * @var string + */ + public $dependsOnPermissionNamesMultiLikeAnd = null; + + /** + * + * + * @var string + */ + public $tagsMultiLikeOr = null; + + /** + * + * + * @var string + */ + public $tagsMultiLikeAnd = null; + + /** + * + * + * @var int + */ + public $createdAtGreaterThanOrEqual = null; + + /** + * + * + * @var int + */ + public $createdAtLessThanOrEqual = null; + + /** + * + * + * @var int + */ + public $updatedAtGreaterThanOrEqual = null; + + /** + * + * + * @var int + */ + public $updatedAtLessThanOrEqual = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +abstract class KalturaPermissionItemBaseFilter extends KalturaRelatedFilter +{ + /** + * + * + * @var int + */ + public $idEqual = null; + + /** + * + * + * @var string + */ + public $idIn = null; + + /** + * + * + * @var KalturaPermissionItemType + */ + public $typeEqual = null; + + /** + * + * + * @var string + */ + public $typeIn = null; + + /** + * + * + * @var int + */ + public $partnerIdEqual = null; + + /** + * + * + * @var string + */ + public $partnerIdIn = null; + + /** + * + * + * @var string + */ + public $tagsMultiLikeOr = null; + + /** + * + * + * @var string + */ + public $tagsMultiLikeAnd = null; + + /** + * + * + * @var int + */ + public $createdAtGreaterThanOrEqual = null; + + /** + * + * + * @var int + */ + public $createdAtLessThanOrEqual = null; + + /** + * + * + * @var int + */ + public $updatedAtGreaterThanOrEqual = null; + + /** + * + * + * @var int + */ + public $updatedAtLessThanOrEqual = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaPlaybackContextOptions extends KalturaEntryContextDataParams +{ + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaPostConvertJobData extends KalturaConvartableJobData +{ + /** + * + * + * @var string + */ + public $flavorAssetId = null; + + /** + * Indicates if a thumbnail should be created + * + * @var bool + */ + public $createThumb = null; + + /** + * The path of the created thumbnail + * + * @var string + */ + public $thumbPath = null; + + /** + * The position of the thumbnail in the media file + * + * @var int + */ + public $thumbOffset = null; + + /** + * The height of the movie, will be used to comapare if this thumbnail is the best we can have + * + * @var int + */ + public $thumbHeight = null; + + /** + * The bit rate of the movie, will be used to comapare if this thumbnail is the best we can have + * + * @var int + */ + public $thumbBitrate = null; + + /** + * + * + * @var string + */ + public $customData = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaPreviewRestriction extends KalturaSessionRestriction +{ + /** + * The preview restriction length + * + * @var int + */ + public $previewLength = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaRecalculateResponseProfileCacheJobData extends KalturaRecalculateCacheJobData +{ + /** + * http / https + * + * @var string + */ + public $protocol = null; + + /** + * + * + * @var KalturaSessionType + */ + public $ksType = null; + + /** + * + * + * @var array of KalturaIntegerValue + */ + public $userRoles; + + /** + * Class name + * + * @var string + */ + public $cachedObjectType = null; + + /** + * + * + * @var string + */ + public $objectId = null; + + /** + * + * + * @var string + */ + public $startObjectKey = null; + + /** + * + * + * @var string + */ + public $endObjectKey = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +abstract class KalturaRegexCondition extends KalturaMatchCondition +{ + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaRemoteStorageResources extends KalturaContentResource +{ + /** + * Array of remote stoage resources + * + * @var array of KalturaRemoteStorageResource + */ + public $resources; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaResponseProfileFilter extends KalturaResponseProfileBaseFilter +{ + +} + +/** + * @package Kaltura + * @subpackage Client + */ +abstract class KalturaSearchComparableAttributeCondition extends KalturaAttributeCondition +{ + /** + * + * + * @var KalturaSearchConditionComparison + */ + public $comparison = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaSearchComparableCondition extends KalturaSearchCondition +{ + /** + * + * + * @var KalturaSearchConditionComparison + */ + public $comparison = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +abstract class KalturaSearchMatchAttributeCondition extends KalturaAttributeCondition +{ + /** + * + * + * @var bool + */ + public $not = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaSearchMatchCondition extends KalturaSearchCondition +{ + /** + * + * + * @var bool + */ + public $not = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaServerNodeFilter extends KalturaServerNodeBaseFilter +{ + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaSiteCondition extends KalturaMatchCondition +{ + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaSshImportJobData extends KalturaImportJobData +{ + /** + * + * + * @var string + */ + public $privateKey = null; + + /** + * + * + * @var string + */ + public $publicKey = null; + + /** + * + * + * @var string + */ + public $passPhrase = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaStorageDeleteJobData extends KalturaStorageJobData +{ + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaStorageExportJobData extends KalturaStorageJobData +{ + /** + * + * + * @var bool + */ + public $force = null; + + /** + * + * + * @var bool + */ + public $createLink = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaStorageProfileFilter extends KalturaStorageProfileBaseFilter +{ + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaStringResource extends KalturaContentResource +{ + /** + * Textual content + * + * @var string + */ + public $content = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaUiConfFilter extends KalturaUiConfBaseFilter +{ + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaUploadTokenFilter extends KalturaUploadTokenBaseFilter +{ + +} + +/** + * @package Kaltura + * @subpackage Client + */ +abstract class KalturaUserEntryBaseFilter extends KalturaRelatedFilter +{ + /** + * + * + * @var int + */ + public $idEqual = null; + + /** + * + * + * @var string + */ + public $idIn = null; + + /** + * + * + * @var string + */ + public $idNotIn = null; + + /** + * + * + * @var string + */ + public $entryIdEqual = null; + + /** + * + * + * @var string + */ + public $entryIdIn = null; + + /** + * + * + * @var string + */ + public $entryIdNotIn = null; + + /** + * + * + * @var string + */ + public $userIdEqual = null; + + /** + * + * + * @var string + */ + public $userIdIn = null; + + /** + * + * + * @var string + */ + public $userIdNotIn = null; + + /** + * + * + * @var KalturaUserEntryStatus + */ + public $statusEqual = null; + + /** + * + * + * @var int + */ + public $createdAtLessThanOrEqual = null; + + /** + * + * + * @var int + */ + public $createdAtGreaterThanOrEqual = null; + + /** + * + * + * @var int + */ + public $updatedAtLessThanOrEqual = null; + + /** + * + * + * @var int + */ + public $updatedAtGreaterThanOrEqual = null; + + /** + * + * + * @var KalturaUserEntryType + */ + public $typeEqual = null; + + /** + * + * + * @var KalturaUserEntryExtendedStatus + */ + public $extendedStatusEqual = null; + + /** + * + * + * @var string + */ + public $extendedStatusIn = null; + + /** + * + * + * @var string + */ + public $extendedStatusNotIn = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +abstract class KalturaUserLoginDataBaseFilter extends KalturaRelatedFilter +{ + /** + * + * + * @var string + */ + public $loginEmailEqual = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +abstract class KalturaUserRoleBaseFilter extends KalturaRelatedFilter +{ + /** + * + * + * @var int + */ + public $idEqual = null; + + /** + * + * + * @var string + */ + public $idIn = null; + + /** + * + * + * @var string + */ + public $nameEqual = null; + + /** + * + * + * @var string + */ + public $nameIn = null; + + /** + * + * + * @var string + */ + public $systemNameEqual = null; + + /** + * + * + * @var string + */ + public $systemNameIn = null; + + /** + * + * + * @var string + */ + public $descriptionLike = null; + + /** + * + * + * @var KalturaUserRoleStatus + */ + public $statusEqual = null; + + /** + * + * + * @var string + */ + public $statusIn = null; + + /** + * + * + * @var int + */ + public $partnerIdEqual = null; + + /** + * + * + * @var string + */ + public $partnerIdIn = null; + + /** + * + * + * @var string + */ + public $tagsMultiLikeOr = null; + + /** + * + * + * @var string + */ + public $tagsMultiLikeAnd = null; + + /** + * + * + * @var int + */ + public $createdAtGreaterThanOrEqual = null; + + /** + * + * + * @var int + */ + public $createdAtLessThanOrEqual = null; + + /** + * + * + * @var int + */ + public $updatedAtGreaterThanOrEqual = null; + + /** + * + * + * @var int + */ + public $updatedAtLessThanOrEqual = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaWidgetFilter extends KalturaWidgetBaseFilter +{ + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaAccessControlFilter extends KalturaAccessControlBaseFilter +{ + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaAccessControlProfileFilter extends KalturaAccessControlProfileBaseFilter +{ + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaAmazonS3StorageExportJobData extends KalturaStorageExportJobData +{ + /** + * + * + * @var KalturaAmazonS3StorageProfileFilesPermissionLevel + */ + public $filesPermissionInS3 = null; + + /** + * + * + * @var string + */ + public $s3Region = null; + + /** + * + * + * @var string + */ + public $sseType = null; + + /** + * + * + * @var string + */ + public $sseKmsKeyId = null; + + /** + * + * + * @var string + */ + public $signatureType = null; + + /** + * + * + * @var string + */ + public $endPoint = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +abstract class KalturaAmazonS3StorageProfileBaseFilter extends KalturaStorageProfileFilter +{ + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaAnonymousIPContextField extends KalturaStringField +{ + /** + * The ip geo coder engine to be used + * + * @var KalturaGeoCoderType + */ + public $geoCoderType = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaAssetParamsFilter extends KalturaAssetParamsBaseFilter +{ + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaBaseEntryCompareAttributeCondition extends KalturaSearchComparableAttributeCondition +{ + /** + * + * + * @var KalturaBaseEntryCompareAttribute + */ + public $attribute = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaBaseEntryMatchAttributeCondition extends KalturaSearchMatchAttributeCondition +{ + /** + * + * + * @var KalturaBaseEntryMatchAttribute + */ + public $attribute = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaBatchJobFilterExt extends KalturaBatchJobFilter +{ + /** + * + * + * @var string + */ + public $jobTypeAndSubTypeIn = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaCategoryEntryFilter extends KalturaCategoryEntryBaseFilter +{ + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaCategoryFilter extends KalturaCategoryBaseFilter +{ + /** + * + * + * @var string + */ + public $freeText = null; + + /** + * + * + * @var string + */ + public $membersIn = null; + + /** + * + * + * @var string + */ + public $nameOrReferenceIdStartsWith = null; + + /** + * + * + * @var string + */ + public $managerEqual = null; + + /** + * + * + * @var string + */ + public $memberEqual = null; + + /** + * + * + * @var string + */ + public $fullNameStartsWithIn = null; + + /** + * not includes the category itself (only sub categories) + * + * @var string + */ + public $ancestorIdIn = null; + + /** + * + * + * @var string + */ + public $idOrInheritedParentIdIn = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +abstract class KalturaConstantXsltSyndicationFeed extends KalturaGenericXsltSyndicationFeed +{ + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaConversionProfileFilter extends KalturaConversionProfileBaseFilter +{ + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaConversionProfileAssetParamsFilter extends KalturaConversionProfileAssetParamsBaseFilter +{ + /** + * + * + * @var KalturaConversionProfileFilter + */ + public $conversionProfileIdFilter; + + /** + * + * + * @var KalturaAssetParamsFilter + */ + public $assetParamsIdFilter; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaCoordinatesContextField extends KalturaStringField +{ + /** + * The ip geo coder engine to be used + * + * @var KalturaGeoCoderType + */ + public $geoCoderType = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaCountryContextField extends KalturaStringField +{ + /** + * The ip geo coder engine to be used + * + * @var KalturaGeoCoderType + */ + public $geoCoderType = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaDataEntryCompareAttributeCondition extends KalturaSearchComparableAttributeCondition +{ + /** + * + * + * @var KalturaDataEntryCompareAttribute + */ + public $attribute = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaDataEntryMatchAttributeCondition extends KalturaSearchMatchAttributeCondition +{ + /** + * + * + * @var KalturaDataEntryMatchAttribute + */ + public $attribute = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +abstract class KalturaDeliveryProfileAkamaiAppleHttpManifestBaseFilter extends KalturaDeliveryProfileFilter +{ + +} + +/** + * @package Kaltura + * @subpackage Client + */ +abstract class KalturaDeliveryProfileAkamaiHdsBaseFilter extends KalturaDeliveryProfileFilter +{ + +} + +/** + * @package Kaltura + * @subpackage Client + */ +abstract class KalturaDeliveryProfileAkamaiHttpBaseFilter extends KalturaDeliveryProfileFilter +{ + +} + +/** + * @package Kaltura + * @subpackage Client + */ +abstract class KalturaDeliveryProfileGenericAppleHttpBaseFilter extends KalturaDeliveryProfileFilter +{ + +} + +/** + * @package Kaltura + * @subpackage Client + */ +abstract class KalturaDeliveryProfileGenericHdsBaseFilter extends KalturaDeliveryProfileFilter +{ + +} + +/** + * @package Kaltura + * @subpackage Client + */ +abstract class KalturaDeliveryProfileGenericHttpBaseFilter extends KalturaDeliveryProfileFilter +{ + +} + +/** + * @package Kaltura + * @subpackage Client + */ +abstract class KalturaDeliveryProfileGenericSilverLightBaseFilter extends KalturaDeliveryProfileFilter +{ + +} + +/** + * @package Kaltura + * @subpackage Client + */ +abstract class KalturaDeliveryProfileLiveAppleHttpBaseFilter extends KalturaDeliveryProfileFilter +{ + +} + +/** + * @package Kaltura + * @subpackage Client + */ +abstract class KalturaDeliveryProfileRtmpBaseFilter extends KalturaDeliveryProfileFilter +{ + +} + +/** + * @package Kaltura + * @subpackage Client + */ +abstract class KalturaDeliveryServerNodeBaseFilter extends KalturaServerNodeFilter +{ + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaDocumentEntryCompareAttributeCondition extends KalturaSearchComparableAttributeCondition +{ + /** + * + * + * @var KalturaDocumentEntryCompareAttribute + */ + public $attribute = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaDocumentEntryMatchAttributeCondition extends KalturaSearchMatchAttributeCondition +{ + /** + * + * + * @var KalturaDocumentEntryMatchAttribute + */ + public $attribute = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaEvalBooleanField extends KalturaBooleanField +{ + /** + * PHP code + * + * @var string + */ + public $code = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaEvalStringField extends KalturaStringField +{ + /** + * PHP code + * + * @var string + */ + public $code = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaExternalMediaEntryCompareAttributeCondition extends KalturaSearchComparableAttributeCondition +{ + /** + * + * + * @var KalturaExternalMediaEntryCompareAttribute + */ + public $attribute = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaExternalMediaEntryMatchAttributeCondition extends KalturaSearchMatchAttributeCondition +{ + /** + * + * + * @var KalturaExternalMediaEntryMatchAttribute + */ + public $attribute = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaFileAssetFilter extends KalturaFileAssetBaseFilter +{ + +} + +/** + * @package Kaltura + * @subpackage Client + */ +abstract class KalturaGenericDataCenterContentResource extends KalturaDataCenterContentResource +{ + +} + +/** + * @package Kaltura + * @subpackage Client + */ +abstract class KalturaGenericSyndicationFeedBaseFilter extends KalturaBaseSyndicationFeedFilter +{ + +} + +/** + * @package Kaltura + * @subpackage Client + */ +abstract class KalturaGoogleVideoSyndicationFeedBaseFilter extends KalturaBaseSyndicationFeedFilter +{ + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaGroupUserFilter extends KalturaGroupUserBaseFilter +{ + +} + +/** + * @package Kaltura + * @subpackage Client + */ +abstract class KalturaITunesSyndicationFeedBaseFilter extends KalturaBaseSyndicationFeedFilter +{ + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaIpAddressContextField extends KalturaStringField +{ + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaLiveChannelCompareAttributeCondition extends KalturaSearchComparableAttributeCondition +{ + /** + * + * + * @var KalturaLiveChannelCompareAttribute + */ + public $attribute = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaLiveChannelMatchAttributeCondition extends KalturaSearchMatchAttributeCondition +{ + /** + * + * + * @var KalturaLiveChannelMatchAttribute + */ + public $attribute = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaLiveChannelSegmentFilter extends KalturaLiveChannelSegmentBaseFilter +{ + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaLiveEntryCompareAttributeCondition extends KalturaSearchComparableAttributeCondition +{ + /** + * + * + * @var KalturaLiveEntryCompareAttribute + */ + public $attribute = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaLiveEntryMatchAttributeCondition extends KalturaSearchMatchAttributeCondition +{ + /** + * + * + * @var KalturaLiveEntryMatchAttribute + */ + public $attribute = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaLiveEntryServerNodeBaseFilter extends KalturaEntryServerNodeFilter +{ + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaLiveStreamAdminEntryCompareAttributeCondition extends KalturaSearchComparableAttributeCondition +{ + /** + * + * + * @var KalturaLiveStreamAdminEntryCompareAttribute + */ + public $attribute = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaLiveStreamAdminEntryMatchAttributeCondition extends KalturaSearchMatchAttributeCondition +{ + /** + * + * + * @var KalturaLiveStreamAdminEntryMatchAttribute + */ + public $attribute = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaLiveStreamEntryCompareAttributeCondition extends KalturaSearchComparableAttributeCondition +{ + /** + * + * + * @var KalturaLiveStreamEntryCompareAttribute + */ + public $attribute = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaLiveStreamEntryMatchAttributeCondition extends KalturaSearchMatchAttributeCondition +{ + /** + * + * + * @var KalturaLiveStreamEntryMatchAttribute + */ + public $attribute = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaMediaEntryCompareAttributeCondition extends KalturaSearchComparableAttributeCondition +{ + /** + * + * + * @var KalturaMediaEntryCompareAttribute + */ + public $attribute = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaMediaEntryMatchAttributeCondition extends KalturaSearchMatchAttributeCondition +{ + /** + * + * + * @var KalturaMediaEntryMatchAttribute + */ + public $attribute = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaMediaFlavorParamsOutput extends KalturaFlavorParamsOutput +{ + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaMixEntryCompareAttributeCondition extends KalturaSearchComparableAttributeCondition +{ + /** + * + * + * @var KalturaMixEntryCompareAttribute + */ + public $attribute = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaMixEntryMatchAttributeCondition extends KalturaSearchMatchAttributeCondition +{ + /** + * + * + * @var KalturaMixEntryMatchAttribute + */ + public $attribute = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaObjectIdField extends KalturaStringField +{ + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaPermissionFilter extends KalturaPermissionBaseFilter +{ + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaPermissionItemFilter extends KalturaPermissionItemBaseFilter +{ + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaPlayableEntryCompareAttributeCondition extends KalturaSearchComparableAttributeCondition +{ + /** + * + * + * @var KalturaPlayableEntryCompareAttribute + */ + public $attribute = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaPlayableEntryMatchAttributeCondition extends KalturaSearchMatchAttributeCondition +{ + /** + * + * + * @var KalturaPlayableEntryMatchAttribute + */ + public $attribute = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaPlaylistCompareAttributeCondition extends KalturaSearchComparableAttributeCondition +{ + /** + * + * + * @var KalturaPlaylistCompareAttribute + */ + public $attribute = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaPlaylistMatchAttributeCondition extends KalturaSearchMatchAttributeCondition +{ + /** + * + * + * @var KalturaPlaylistMatchAttribute + */ + public $attribute = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaSshUrlResource extends KalturaUrlResource +{ + /** + * SSH private key + * + * @var string + */ + public $privateKey = null; + + /** + * SSH public key + * + * @var string + */ + public $publicKey = null; + + /** + * Passphrase for SSH keys + * + * @var string + */ + public $keyPassphrase = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaTimeContextField extends KalturaIntegerField +{ + /** + * Time offset in seconds since current time + * + * @var int + */ + public $offset = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +abstract class KalturaTubeMogulSyndicationFeedBaseFilter extends KalturaBaseSyndicationFeedFilter +{ + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaUserAgentCondition extends KalturaRegexCondition +{ + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaUserAgentContextField extends KalturaStringField +{ + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaUserEmailContextField extends KalturaStringField +{ + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaUserEntryFilter extends KalturaUserEntryBaseFilter +{ + /** + * + * + * @var KalturaNullableBoolean + */ + public $userIdEqualCurrent = null; + + /** + * + * + * @var KalturaNullableBoolean + */ + public $isAnonymous = null; + + /** + * + * + * @var string + */ + public $privacyContextEqual = null; + + /** + * + * + * @var string + */ + public $privacyContextIn = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaUserLoginDataFilter extends KalturaUserLoginDataBaseFilter +{ + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaUserRoleFilter extends KalturaUserRoleBaseFilter +{ + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaWebcamTokenResource extends KalturaDataCenterContentResource +{ + /** + * Token that returned from media server such as FMS or red5. + * + * @var string + */ + public $token = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +abstract class KalturaYahooSyndicationFeedBaseFilter extends KalturaBaseSyndicationFeedFilter +{ + +} + +/** + * @package Kaltura + * @subpackage Client + */ +abstract class KalturaAdminUserBaseFilter extends KalturaUserFilter +{ + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaAmazonS3StorageProfileFilter extends KalturaAmazonS3StorageProfileBaseFilter +{ + +} + +/** + * @package Kaltura + * @subpackage Client + */ +abstract class KalturaApiActionPermissionItemBaseFilter extends KalturaPermissionItemFilter +{ + +} + +/** + * @package Kaltura + * @subpackage Client + */ +abstract class KalturaApiParameterPermissionItemBaseFilter extends KalturaPermissionItemFilter +{ + +} + +/** + * @package Kaltura + * @subpackage Client + */ +abstract class KalturaAssetParamsOutputBaseFilter extends KalturaAssetParamsFilter +{ + +} + +/** + * @package Kaltura + * @subpackage Client + */ +abstract class KalturaDataEntryBaseFilter extends KalturaBaseEntryFilter +{ + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaDeliveryProfileAkamaiAppleHttpManifestFilter extends KalturaDeliveryProfileAkamaiAppleHttpManifestBaseFilter +{ + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaDeliveryProfileAkamaiHdsFilter extends KalturaDeliveryProfileAkamaiHdsBaseFilter +{ + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaDeliveryProfileAkamaiHttpFilter extends KalturaDeliveryProfileAkamaiHttpBaseFilter +{ + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaDeliveryProfileGenericAppleHttpFilter extends KalturaDeliveryProfileGenericAppleHttpBaseFilter +{ + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaDeliveryProfileGenericHdsFilter extends KalturaDeliveryProfileGenericHdsBaseFilter +{ + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaDeliveryProfileGenericHttpFilter extends KalturaDeliveryProfileGenericHttpBaseFilter +{ + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaDeliveryProfileGenericSilverLightFilter extends KalturaDeliveryProfileGenericSilverLightBaseFilter +{ + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaDeliveryProfileLiveAppleHttpFilter extends KalturaDeliveryProfileLiveAppleHttpBaseFilter +{ + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaDeliveryProfileRtmpFilter extends KalturaDeliveryProfileRtmpBaseFilter +{ + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaDeliveryServerNodeFilter extends KalturaDeliveryServerNodeBaseFilter +{ + +} + +/** + * @package Kaltura + * @subpackage Client + */ +abstract class KalturaFlavorAssetBaseFilter extends KalturaAssetFilter +{ + /** + * + * + * @var int + */ + public $flavorParamsIdEqual = null; + + /** + * + * + * @var string + */ + public $flavorParamsIdIn = null; + + /** + * + * + * @var KalturaFlavorAssetStatus + */ + public $statusEqual = null; + + /** + * + * + * @var string + */ + public $statusIn = null; + + /** + * + * + * @var string + */ + public $statusNotIn = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +abstract class KalturaFlavorParamsBaseFilter extends KalturaAssetParamsFilter +{ + /** + * + * + * @var KalturaContainerFormat + */ + public $formatEqual = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaGenericSyndicationFeedFilter extends KalturaGenericSyndicationFeedBaseFilter +{ + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaGoogleVideoSyndicationFeedFilter extends KalturaGoogleVideoSyndicationFeedBaseFilter +{ + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaITunesSyndicationFeedFilter extends KalturaITunesSyndicationFeedBaseFilter +{ + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaLiveEntryServerNodeFilter extends KalturaLiveEntryServerNodeBaseFilter +{ + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaOperaSyndicationFeed extends KalturaConstantXsltSyndicationFeed +{ + +} + +/** + * @package Kaltura + * @subpackage Client + */ +abstract class KalturaPlaylistBaseFilter extends KalturaBaseEntryFilter +{ + +} + +/** + * @package Kaltura + * @subpackage Client + */ +abstract class KalturaQuizUserEntryBaseFilter extends KalturaUserEntryFilter +{ + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaRokuSyndicationFeed extends KalturaConstantXsltSyndicationFeed +{ + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaServerFileResource extends KalturaGenericDataCenterContentResource +{ + /** + * Full path to the local file + * + * @var string + */ + public $localFilePath = null; + + /** + * Should keep original file (false = mv, true = cp) + * + * @var bool + */ + public $keepOriginalFile = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +abstract class KalturaThumbAssetBaseFilter extends KalturaAssetFilter +{ + /** + * + * + * @var int + */ + public $thumbParamsIdEqual = null; + + /** + * + * + * @var string + */ + public $thumbParamsIdIn = null; + + /** + * + * + * @var KalturaThumbAssetStatus + */ + public $statusEqual = null; + + /** + * + * + * @var string + */ + public $statusIn = null; + + /** + * + * + * @var string + */ + public $statusNotIn = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +abstract class KalturaThumbParamsBaseFilter extends KalturaAssetParamsFilter +{ + /** + * + * + * @var KalturaContainerFormat + */ + public $formatEqual = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaTubeMogulSyndicationFeedFilter extends KalturaTubeMogulSyndicationFeedBaseFilter +{ + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaUploadedFileTokenResource extends KalturaGenericDataCenterContentResource +{ + /** + * Token that returned from upload.upload action or uploadToken.add action. + * + * @var string + */ + public $token = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaYahooSyndicationFeedFilter extends KalturaYahooSyndicationFeedBaseFilter +{ + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaAdminUserFilter extends KalturaAdminUserBaseFilter +{ + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaApiActionPermissionItemFilter extends KalturaApiActionPermissionItemBaseFilter +{ + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaApiParameterPermissionItemFilter extends KalturaApiParameterPermissionItemBaseFilter +{ + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaAssetParamsOutputFilter extends KalturaAssetParamsOutputBaseFilter +{ + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaDataEntryFilter extends KalturaDataEntryBaseFilter +{ + +} + +/** + * @package Kaltura + * @subpackage Client + */ +abstract class KalturaDeliveryProfileGenericRtmpBaseFilter extends KalturaDeliveryProfileRtmpFilter +{ + +} + +/** + * @package Kaltura + * @subpackage Client + */ +abstract class KalturaEdgeServerNodeBaseFilter extends KalturaDeliveryServerNodeFilter +{ + /** + * + * + * @var string + */ + public $playbackDomainLike = null; + + /** + * + * + * @var string + */ + public $playbackDomainMultiLikeOr = null; + + /** + * + * + * @var string + */ + public $playbackDomainMultiLikeAnd = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaFlavorAssetFilter extends KalturaFlavorAssetBaseFilter +{ + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaFlavorParamsFilter extends KalturaFlavorParamsBaseFilter +{ + +} + +/** + * @package Kaltura + * @subpackage Client + */ +abstract class KalturaGenericXsltSyndicationFeedBaseFilter extends KalturaGenericSyndicationFeedFilter +{ + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaLiveStreamAdminEntry extends KalturaLiveStreamEntry +{ + +} + +/** + * @package Kaltura + * @subpackage Client + */ +abstract class KalturaMediaServerNodeBaseFilter extends KalturaDeliveryServerNodeFilter +{ + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaPlaylistFilter extends KalturaPlaylistBaseFilter +{ + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaThumbAssetFilter extends KalturaThumbAssetBaseFilter +{ + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaThumbParamsFilter extends KalturaThumbParamsBaseFilter +{ + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaDeliveryProfileGenericRtmpFilter extends KalturaDeliveryProfileGenericRtmpBaseFilter +{ + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaEdgeServerNodeFilter extends KalturaEdgeServerNodeBaseFilter +{ + +} + +/** + * @package Kaltura + * @subpackage Client + */ +abstract class KalturaFlavorParamsOutputBaseFilter extends KalturaFlavorParamsFilter +{ + /** + * + * + * @var int + */ + public $flavorParamsIdEqual = null; + + /** + * + * + * @var string + */ + public $flavorParamsVersionEqual = null; + + /** + * + * + * @var string + */ + public $flavorAssetIdEqual = null; + + /** + * + * + * @var string + */ + public $flavorAssetVersionEqual = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaGenericXsltSyndicationFeedFilter extends KalturaGenericXsltSyndicationFeedBaseFilter +{ + +} + +/** + * @package Kaltura + * @subpackage Client + */ +abstract class KalturaLiveAssetBaseFilter extends KalturaFlavorAssetFilter +{ + +} + +/** + * @package Kaltura + * @subpackage Client + */ +abstract class KalturaLiveParamsBaseFilter extends KalturaFlavorParamsFilter +{ + +} + +/** + * @package Kaltura + * @subpackage Client + */ +abstract class KalturaMediaFlavorParamsBaseFilter extends KalturaFlavorParamsFilter +{ + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaMediaServerNodeFilter extends KalturaMediaServerNodeBaseFilter +{ + +} + +/** + * @package Kaltura + * @subpackage Client + */ +abstract class KalturaMixEntryBaseFilter extends KalturaPlayableEntryFilter +{ + +} + +/** + * @package Kaltura + * @subpackage Client + */ +abstract class KalturaThumbParamsOutputBaseFilter extends KalturaThumbParamsFilter +{ + /** + * + * + * @var int + */ + public $thumbParamsIdEqual = null; + + /** + * + * + * @var string + */ + public $thumbParamsVersionEqual = null; + + /** + * + * + * @var string + */ + public $thumbAssetIdEqual = null; + + /** + * + * + * @var string + */ + public $thumbAssetVersionEqual = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaFlavorParamsOutputFilter extends KalturaFlavorParamsOutputBaseFilter +{ + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaLiveAssetFilter extends KalturaLiveAssetBaseFilter +{ + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaLiveParamsFilter extends KalturaLiveParamsBaseFilter +{ + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaMediaFlavorParamsFilter extends KalturaMediaFlavorParamsBaseFilter +{ + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaMixEntryFilter extends KalturaMixEntryBaseFilter +{ + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaThumbParamsOutputFilter extends KalturaThumbParamsOutputBaseFilter +{ + +} + +/** + * @package Kaltura + * @subpackage Client + */ +abstract class KalturaLiveEntryBaseFilter extends KalturaMediaEntryFilter +{ + +} + +/** + * @package Kaltura + * @subpackage Client + */ +abstract class KalturaMediaFlavorParamsOutputBaseFilter extends KalturaFlavorParamsOutputFilter +{ + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaLiveEntryFilter extends KalturaLiveEntryBaseFilter +{ + /** + * + * + * @var KalturaNullableBoolean + */ + public $isLive = null; + + /** + * + * + * @var KalturaNullableBoolean + */ + public $isRecordedEntryIdEmpty = null; + + /** + * + * + * @var string + */ + public $hasMediaServerHostname = null; + + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaMediaFlavorParamsOutputFilter extends KalturaMediaFlavorParamsOutputBaseFilter +{ + +} + +/** + * @package Kaltura + * @subpackage Client + */ +abstract class KalturaLiveChannelBaseFilter extends KalturaLiveEntryFilter +{ + +} + +/** + * @package Kaltura + * @subpackage Client + */ +abstract class KalturaLiveStreamEntryBaseFilter extends KalturaLiveEntryFilter +{ + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaLiveChannelFilter extends KalturaLiveChannelBaseFilter +{ + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaLiveStreamEntryFilter extends KalturaLiveStreamEntryBaseFilter +{ + +} + +/** + * @package Kaltura + * @subpackage Client + */ +abstract class KalturaLiveStreamAdminEntryBaseFilter extends KalturaLiveStreamEntryFilter +{ + +} + +/** + * @package Kaltura + * @subpackage Client + */ +class KalturaLiveStreamAdminEntryFilter extends KalturaLiveStreamAdminEntryBaseFilter +{ + +} + From ace0ccd8e75bfaf65eb201f46131bc4da3f566d2 Mon Sep 17 00:00:00 2001 From: Muli Dayan Date: Mon, 28 May 2018 09:08:45 +0300 Subject: [PATCH 171/326] KMS-17612 remove 'Kaltura' from page title and module name; remove redundant texts --- local/kalturamediagallery/index.php | 7 +------ .../lang/en/local_kalturamediagallery.php | 7 +++---- 2 files changed, 4 insertions(+), 10 deletions(-) diff --git a/local/kalturamediagallery/index.php b/local/kalturamediagallery/index.php index 1bd86a9bde323..3e7292d0300ff 100644 --- a/local/kalturamediagallery/index.php +++ b/local/kalturamediagallery/index.php @@ -33,16 +33,11 @@ $context = context_course::instance($courseid); require_capability('local/kalturamediagallery:view', $context); -$mediagallery = get_string('heading_mediagallery', 'local_kalturamediagallery'); - $course = get_course($courseid); $PAGE->set_context($context); $PAGE->set_course($course); -$site = get_site(); -$header = format_string($site->shortname).": $mediagallery"; - -$PAGE->navbar->add(get_string('nav_mediagallery', 'local_kalturamediagallery')); +$header = format_string($course->fullname) . ": " . get_string('heading_mediagallery', 'local_kalturamediagallery'); $PAGE->set_url('/local/kalturamediagallery/index.php', array('courseid' => $courseid)); $PAGE->set_pagetype('kalturamediagallery-index'); diff --git a/local/kalturamediagallery/lang/en/local_kalturamediagallery.php b/local/kalturamediagallery/lang/en/local_kalturamediagallery.php index 51a7412202c4e..9d8d7a2ec1fba 100644 --- a/local/kalturamediagallery/lang/en/local_kalturamediagallery.php +++ b/local/kalturamediagallery/lang/en/local_kalturamediagallery.php @@ -23,11 +23,10 @@ * @copyright (C) 2014 Remote Learner.net Inc http://www.remote-learner.net */ -$string['heading_mediagallery'] = 'Kaltura Media Gallery'; +$string['heading_mediagallery'] = 'Media Gallery'; $string['invalid_launch_parameters'] = 'Invalid launch parameters'; -$string['kalturamediagallery:view'] = 'View Kaltura Media Gallery'; -$string['nav_mediagallery'] = 'Kaltura Media Gallery'; -$string['nav_mediagallery_page'] = 'Kaltura Media Gallery'; +$string['kalturamediagallery:view'] = 'View Media Gallery'; +$string['nav_mediagallery'] = 'Media Gallery'; $string['pluginname'] = 'Kaltura Media Gallery'; $string['setting_heading_desc'] = 'Settings'; $string['link_location'] = 'Link location'; From 8b992168f8ff10537fc48e546785ea0355c4f63e Mon Sep 17 00:00:00 2001 From: Muli Dayan Date: Mon, 28 May 2018 09:10:08 +0300 Subject: [PATCH 172/326] KMS-17612 instead of using the site name, use the user name for my media title --- local/mymedia/mymedia.php | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/local/mymedia/mymedia.php b/local/mymedia/mymedia.php index f4967e1021630..a8ec00543cf64 100644 --- a/local/mymedia/mymedia.php +++ b/local/mymedia/mymedia.php @@ -32,10 +32,8 @@ $context = context_user::instance($USER->id); require_capability('local/mymedia:view', $context); -$mymedia = get_string('heading_mymedia', 'local_mymedia'); $PAGE->set_context(context_system::instance()); -$site = get_site(); -$header = format_string($site->shortname).": $mymedia"; +$header = fullname($USER) . ": " . get_string('heading_mymedia', 'local_mymedia'); $PAGE->set_url('/local/mymedia/mymedia.php'); $PAGE->set_pagetype('mymedia-index'); From 1e5d8ce5c67a159bb76682126a0ad632af5ae2f2 Mon Sep 17 00:00:00 2001 From: Muli Dayan Date: Thu, 7 Jun 2018 12:42:48 +0300 Subject: [PATCH 173/326] version bump - 2018060735 --- blocks/kalturamediagallery/version.php | 8 ++++---- filter/kaltura/version.php | 6 +++--- lib/editor/atto/plugins/kalturamedia/version.php | 6 +++--- lib/editor/tinymce/plugins/kalturamedia/version.php | 6 +++--- local/kaltura/version.php | 4 ++-- local/kalturamediagallery/version.php | 6 +++--- local/mymedia/version.php | 6 +++--- mod/kalvidassign/version.php | 6 +++--- mod/kalvidpres/version.php | 6 +++--- mod/kalvidres/version.php | 6 +++--- 10 files changed, 30 insertions(+), 30 deletions(-) diff --git a/blocks/kalturamediagallery/version.php b/blocks/kalturamediagallery/version.php index f1291c5f3bb33..fd7d4be81d640 100644 --- a/blocks/kalturamediagallery/version.php +++ b/blocks/kalturamediagallery/version.php @@ -14,11 +14,11 @@ defined('MOODLE_INTERNAL') || die(); -$plugin->version = 2017120634; -$plugin->release = 'Kaltura release 4.1.1'; +$plugin->version = 2018060735; +$plugin->release = 'Kaltura release 4.1.2'; $plugin->requires = 2014050800; $plugin->component = 'block_kalturamediagallery'; $plugin->dependencies = array( - 'local_kaltura' => 2017120634, - 'local_kalturamediagallery' => 2017120634 + 'local_kaltura' => 2018060735, + 'local_kalturamediagallery' => 2018060735 ); diff --git a/filter/kaltura/version.php b/filter/kaltura/version.php index c8678331943b2..f36df4f81fc8d 100644 --- a/filter/kaltura/version.php +++ b/filter/kaltura/version.php @@ -24,11 +24,11 @@ */ defined('MOODLE_INTERNAL') || die(); -$plugin->version = 2017120634; //version date YYYYMMDDXX 10 represent 3.0 for future option to moodle use 2 digit version +$plugin->version = 2018060735; //version date YYYYMMDDXX 10 represent 3.0 for future option to moodle use 2 digit version $plugin->component = 'filter_kaltura'; -$plugin->release = 'Kaltura release 4.1.1'; +$plugin->release = 'Kaltura release 4.1.2'; $plugin->requires = 2014050800; $plugin->maturity = MATURITY_STABLE; $plugin->dependencies = array( - 'local_kaltura' => 2017120634 + 'local_kaltura' => 2018060735 ); diff --git a/lib/editor/atto/plugins/kalturamedia/version.php b/lib/editor/atto/plugins/kalturamedia/version.php index 8806956167165..0ff525d050191 100644 --- a/lib/editor/atto/plugins/kalturamedia/version.php +++ b/lib/editor/atto/plugins/kalturamedia/version.php @@ -24,10 +24,10 @@ defined('MOODLE_INTERNAL') || die(); -$plugin->version = 2017120634; // The current plugin version (Date: YYYYMMDDXX). -$plugin->release = 'Kaltura release 4.1.1'; +$plugin->version = 2018060735; // The current plugin version (Date: YYYYMMDDXX). +$plugin->release = 'Kaltura release 4.1.2'; $plugin->requires = 2014050800; // Requires this Moodle version. $plugin->component = 'atto_kalturamedia'; // Full name of the plugin (used for diagnostics). $plugin->dependencies = array( - 'local_kaltura' => 2017120634 + 'local_kaltura' => 2018060735 ); diff --git a/lib/editor/tinymce/plugins/kalturamedia/version.php b/lib/editor/tinymce/plugins/kalturamedia/version.php index f03c0043ccc12..7273ab7660fa0 100644 --- a/lib/editor/tinymce/plugins/kalturamedia/version.php +++ b/lib/editor/tinymce/plugins/kalturamedia/version.php @@ -23,12 +23,12 @@ defined('MOODLE_INTERNAL') || die(); -$plugin->version = 2017120634; -$plugin->release = 'Kaltura release 4.1.1'; +$plugin->version = 2018060735; +$plugin->release = 'Kaltura release 4.1.2'; // Required Moodle version. $plugin->requires = 2014050800; // Full name of the plugin (used for diagnostics). $plugin->component = 'tinymce_kalturamedia'; $plugin->dependencies = array( - 'local_kaltura' => 2017120634 + 'local_kaltura' => 2018060735 ); diff --git a/local/kaltura/version.php b/local/kaltura/version.php index cd1344959af06..a6b7239c8b0ac 100644 --- a/local/kaltura/version.php +++ b/local/kaltura/version.php @@ -25,8 +25,8 @@ die('Direct access to this script is forbidden.'); } -$plugin->version = 2017120634; +$plugin->version = 2018060735; $plugin->component = 'local_kaltura'; -$plugin->release = 'Kaltura release 4.1.1'; +$plugin->release = 'Kaltura release 4.1.2'; $plugin->requires = 2014050800; $plugin->maturity = MATURITY_STABLE; diff --git a/local/kalturamediagallery/version.php b/local/kalturamediagallery/version.php index 7606dbe23f28f..eee4129b5bc44 100644 --- a/local/kalturamediagallery/version.php +++ b/local/kalturamediagallery/version.php @@ -26,11 +26,11 @@ die('Direct access to this script is forbidden.'); } -$plugin->version = 2017120634; +$plugin->version = 2018060735; $plugin->component = 'local_kalturamediagallery'; -$plugin->release = 'Kaltura release 4.1.1'; +$plugin->release = 'Kaltura release 4.1.2'; $plugin->requires = 2014050800; $plugin->maturity = MATURITY_STABLE; $plugin->dependencies = array( - 'local_kaltura' => 2017120634 + 'local_kaltura' => 2018060735 ); diff --git a/local/mymedia/version.php b/local/mymedia/version.php index 288af032b003e..f920868de7eb6 100644 --- a/local/mymedia/version.php +++ b/local/mymedia/version.php @@ -25,11 +25,11 @@ die('Direct access to this script is forbidden.'); } -$plugin->version = 2017120634; +$plugin->version = 2018060735; $plugin->component = 'local_mymedia'; -$plugin->release = 'Kaltura release 4.1.1'; +$plugin->release = 'Kaltura release 4.1.2'; $plugin->requires = 2014050800; $plugin->maturity = MATURITY_STABLE; $plugin->dependencies = array( - 'local_kaltura' => 2017120634 + 'local_kaltura' => 2018060735 ); diff --git a/mod/kalvidassign/version.php b/mod/kalvidassign/version.php index 89d4e8c483a04..ac08ebb92fd0b 100644 --- a/mod/kalvidassign/version.php +++ b/mod/kalvidassign/version.php @@ -25,12 +25,12 @@ die('Direct access to this script is forbidden.'); } -$plugin->version = 2017120634; +$plugin->version = 2018060735; $plugin->component = 'mod_kalvidassign'; -$plugin->release = 'Kaltura release 4.1.1'; +$plugin->release = 'Kaltura release 4.1.2'; $plugin->requires = 2014050800; $plugin->cron = 0; $plugin->maturity = MATURITY_STABLE; $plugin->dependencies = array( - 'local_kaltura' => 2017120634, + 'local_kaltura' => 2018060735, ); diff --git a/mod/kalvidpres/version.php b/mod/kalvidpres/version.php index cb6f8a2bacfb3..be68ec0c39f32 100644 --- a/mod/kalvidpres/version.php +++ b/mod/kalvidpres/version.php @@ -25,12 +25,12 @@ die('Direct access to this script is forbidden.'); } -$plugin->version = 2017120634; +$plugin->version = 2018060735; $plugin->component = 'mod_kalvidpres'; -$plugin->release = 'Kaltura release 4.1.1'; +$plugin->release = 'Kaltura release 4.1.2'; $plugin->requires = 2014050800; $plugin->cron = 0; $plugin->maturity = MATURITY_STABLE; $plugin->dependencies = array( - 'local_kaltura' => 2017120634 + 'local_kaltura' => 2018060735 ); diff --git a/mod/kalvidres/version.php b/mod/kalvidres/version.php index 03d9dc1cac426..d51bcfad673a5 100644 --- a/mod/kalvidres/version.php +++ b/mod/kalvidres/version.php @@ -25,12 +25,12 @@ die('Direct access to this script is forbidden.'); } -$plugin->version = 2017120634; +$plugin->version = 2018060735; $plugin->component = 'mod_kalvidres'; -$plugin->release = 'Kaltura release 4.1.1'; +$plugin->release = 'Kaltura release 4.1.2'; $plugin->requires = 2014050800; $plugin->cron = 0; $plugin->maturity = MATURITY_STABLE; $plugin->dependencies = array( - 'local_kaltura' => 2017120634 + 'local_kaltura' => 2018060735 ); From b01be6f44a8edc30a7afc4e9853489f96a13001c Mon Sep 17 00:00:00 2001 From: Muli Dayan Date: Wed, 20 Jun 2018 11:59:08 +0300 Subject: [PATCH 174/326] KMS-17612 remove pix directory from plugin, it's not needed --- pix/kaltura_icon.png | Bin 568 -> 0 bytes 1 file changed, 0 insertions(+), 0 deletions(-) delete mode 100644 pix/kaltura_icon.png diff --git a/pix/kaltura_icon.png b/pix/kaltura_icon.png deleted file mode 100644 index 8d5961396d8247414890957ccf89d82797381495..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 568 zcmV-80>}M{P)@20mVr~ zK~y-)ebPT@Q&AKK@ZWn0Vu~P&lfkswiV97a7DS~EA_!6(q=UTG!HQi3+r_~tbP%1S zEuxMgl|V(L;GeBsgF_Gz1u-}Xf;w1&fxbBSUX7;dfeYszzVqGhocjf~iTC|S_G286 z4}W^s-U<`iKBjROnO=ZRg18NRWoGto?xLFU_@Tyr?v3|xSwn~!0QX6tFzHe6yh1i_I_{X(Q@zX zDcnRBZ7gL`#IX)FgP2Y3`;xO8UvV14Ni&=av4Wwbap+fj#}F(}T;0G)^d-$qznTj; zlwb#Ose7nu?Tl(|<^OWCT)5pV7Z#GdhZC!{VZ6jq$WJVe3&10xz9V1CK!j*h+HIs`PcT%4;%Y{d|sL`chC!S!x$ Date: Wed, 20 Jun 2018 11:59:36 +0300 Subject: [PATCH 175/326] KMS-17612 remove pix directory from createPackage --- createPackage.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/createPackage.sh b/createPackage.sh index 8be6b33c80633..6f406d38e8390 100755 --- a/createPackage.sh +++ b/createPackage.sh @@ -7,4 +7,4 @@ echo "Generaating package for Kaltura_Video_Package_moodle"$BRANCH"_"$VER".zip\n FILENAME="Kaltura_Video_Package_moodle"$BRANCH"_"$VER".zip" -zip -r $FILENAME lib filter mod local blocks pix +zip -r $FILENAME lib filter mod local blocks From e0934bdc27528dd843fc107a2c8b961d78aa23a4 Mon Sep 17 00:00:00 2001 From: Muli Dayan Date: Wed, 20 Jun 2018 12:03:14 +0300 Subject: [PATCH 176/326] KMS-17612 add new icons for my media and media gallery --- .../kalturamediagallery/pix/media-gallery-big.png | Bin 0 -> 356 bytes .../kalturamediagallery/pix/media-gallery-big.svg | 7 +++++++ local/kalturamediagallery/pix/media-gallery.png | Bin 0 -> 352 bytes local/kalturamediagallery/pix/media-gallery.svg | 7 +++++++ local/mymedia/pix/my-media-big.png | Bin 0 -> 384 bytes local/mymedia/pix/my-media-big.svg | 8 ++++++++ local/mymedia/pix/my-media.png | Bin 0 -> 376 bytes local/mymedia/pix/my-media.svg | 8 ++++++++ 8 files changed, 30 insertions(+) create mode 100755 local/kalturamediagallery/pix/media-gallery-big.png create mode 100755 local/kalturamediagallery/pix/media-gallery-big.svg create mode 100755 local/kalturamediagallery/pix/media-gallery.png create mode 100755 local/kalturamediagallery/pix/media-gallery.svg create mode 100755 local/mymedia/pix/my-media-big.png create mode 100755 local/mymedia/pix/my-media-big.svg create mode 100755 local/mymedia/pix/my-media.png create mode 100755 local/mymedia/pix/my-media.svg diff --git a/local/kalturamediagallery/pix/media-gallery-big.png b/local/kalturamediagallery/pix/media-gallery-big.png new file mode 100755 index 0000000000000000000000000000000000000000..049c022fe00ade7060e4e28843aeb5984090e78d GIT binary patch literal 356 zcmV-q0h|7bP)KXH5R%7jKqGPxh0`fG8WnIB(NhAETEz+P25Wbyb6%RR}Rsg~854LfTfwT(P!G0CM zRq`l~eCs93ma=t`vw+y9Q%T!Z-5!&8%xlxEgY=+n;=Tf58hb^9mbLF?RfIh>i|_QH z + +media-gallery-big + + + + diff --git a/local/kalturamediagallery/pix/media-gallery.png b/local/kalturamediagallery/pix/media-gallery.png new file mode 100755 index 0000000000000000000000000000000000000000..f0f7d0d5f4540cb0aa9a1f012244ae40a5e13615 GIT binary patch literal 352 zcmV-m0iXVfP)9>Nm&>q3^FK_GO;LwWH2BD3l;_w24aySl!?K_A3({ZSd`VkU{OjbgOr8E zkFwBndXJvo-g9*FjQ5Xk_kCUWlk?A)i~6U~hq@BXSB&GMP*VWxU>1+KFBdR^BP?OF z+>OEnd+0)2)ZB{RBI~^28t0)t08a3Y!2~dj162Mo%^CXBfOcHs6!S&&sKpR=v6cpG zVHC~yN+xK;Q^qu5^^P>)7!??Z8dlMbNjyaHMJ%TQX+1)H0Ic9M0bM1Kg%A&bU|kR~ z*jNlOjTsz96Z`_=_4W~V?umk(xWh|IhYd``ryTNgSVs$Tl0000 + +media-gallery + + + + diff --git a/local/mymedia/pix/my-media-big.png b/local/mymedia/pix/my-media-big.png new file mode 100755 index 0000000000000000000000000000000000000000..7e26b25462b2dc1a0d9fd1150caedbebb0a6d658 GIT binary patch literal 384 zcmV-`0e}99P)e@A?ssIOA!YMXz zSC>)+c*GEf@$^^0L!8*6?<8ni^tzh7;~Xn^iAfd#y3ynr6Zj~rpc75Tu!(sbC7Kqt zs8daXh7XC3;kyu!r%7yU$ZjE>Wo9UT-7V6f2(XC5RKPIW0hqR~0BhK85)fj?79As0 zl(pOnt`e`f@?{!S?O`sUG>g<>Xi*r$Ih^4HyX|O@1;jBOO~x*q?_f12{QwByU?aHC z8`JE)^rEe!2bU$inZ_5kiWV( + +my-media-big + + + + + diff --git a/local/mymedia/pix/my-media.png b/local/mymedia/pix/my-media.png new file mode 100755 index 0000000000000000000000000000000000000000..1d49160528f6ebcce58851f34b1fcfe438b99645 GIT binary patch literal 376 zcmV-;0f+vHP)-Y0Z-rM*6dB30E*ZcK;=e#p=ss1r^qxu!*4TkYQUy}#?!8opP z@m9bfRxyhoZ=EOz;BmIXvn8G2KN+xUW8RHpJX_?87^{fPSCn7}bY zO+KbEAAne0m>6p;1c-*OiTqIU0+2R)8MWw4l1&I-+Hrz8#7Gf~7)hUUBq#A54Y + +my-media + + + + + From 7f6be39e18b2df51e737012570a2248ff11ed473 Mon Sep 17 00:00:00 2001 From: Muli Dayan Date: Wed, 20 Jun 2018 12:09:02 +0300 Subject: [PATCH 177/326] KMS-17612 use new icons in navigation links --- local/kalturamediagallery/lib.php | 16 ++++++++++------ local/mymedia/lib.php | 3 ++- 2 files changed, 12 insertions(+), 7 deletions(-) diff --git a/local/kalturamediagallery/lib.php b/local/kalturamediagallery/lib.php index 946b42402d8b3..bb09399348fdf 100644 --- a/local/kalturamediagallery/lib.php +++ b/local/kalturamediagallery/lib.php @@ -70,14 +70,15 @@ function local_kalturamediagallery_extend_navigation($navigation) { if(!has_capability('local/kalturamediagallery:view', $coursecontext, $USER)) { return; } - + + $icon = getMediaGalleryIcon(); $mediaGalleryLinkName = get_string('nav_mediagallery', 'local_kalturamediagallery'); $linkUrl = new moodle_url('/local/kalturamediagallery/index.php', array('courseid' => $coursecontext->instanceid)); $currentCourseNode = $navigation->find('currentcourse', $navigation::TYPE_ROOTNODE); if (isNodeNotEmpty($currentCourseNode)) { // we have a 'current course' node, add the link to it. - $currentCourseNode->add($mediaGalleryLinkName, $linkUrl, navigation_node::NODETYPE_LEAF, $mediaGalleryLinkName, 'kalturacoursegallerylink-currentcourse'); + $currentCourseNode->add($mediaGalleryLinkName, $linkUrl, navigation_node::NODETYPE_LEAF, $mediaGalleryLinkName, 'kalturacoursegallerylink-currentcourse', $icon); } $myCoursesNode = $navigation->find('mycourses', $navigation::TYPE_ROOTNODE); @@ -85,7 +86,7 @@ function local_kalturamediagallery_extend_navigation($navigation) { $currentCourseInMyCourses = $myCoursesNode->find($coursecontext->instanceid, navigation_node::TYPE_COURSE); if($currentCourseInMyCourses) { // we found the current course in 'my courses' node, add the link to it. - $currentCourseInMyCourses->add($mediaGalleryLinkName, $linkUrl, navigation_node::NODETYPE_LEAF, $mediaGalleryLinkName, 'kalturacoursegallerylink-mycourses'); + $currentCourseInMyCourses->add($mediaGalleryLinkName, $linkUrl, navigation_node::NODETYPE_LEAF, $mediaGalleryLinkName, 'kalturacoursegallerylink-mycourses', $icon); } } @@ -94,7 +95,7 @@ function local_kalturamediagallery_extend_navigation($navigation) { $currentCourseInCourses = $coursesNode->find($coursecontext->instanceid, navigation_node::TYPE_COURSE); if ($currentCourseInCourses) { // we found the current course in the 'courses' node, add the link to it. - $currentCourseInCourses->add($mediaGalleryLinkName, $linkUrl, navigation_node::NODETYPE_LEAF, $mediaGalleryLinkName, 'kalturacoursegallerylink-allcourses'); + $currentCourseInCourses->add($mediaGalleryLinkName, $linkUrl, navigation_node::NODETYPE_LEAF, $mediaGalleryLinkName, 'kalturacoursegallerylink-allcourses', $icon); } } } @@ -110,10 +111,13 @@ function local_kalturamediagallery_extend_navigation_course(navigation_node $par $name = get_string('nav_mediagallery', 'local_kalturamediagallery'); $url = new moodle_url('/local/kalturamediagallery/index.php', array('courseid' => $course->id)); - $icon = new pix_icon('kaltura_icon', $name); - $parent->add($name, $url, navigation_node::NODETYPE_LEAF, $name, 'kalturamediagallery-settings', $icon); + $parent->add($name, $url, navigation_node::NODETYPE_LEAF, $name, 'kalturamediagallery-settings', getMediaGalleryIcon()); } function isNodeNotEmpty(navigation_node $node) { return $node !== false && $node->has_children(); +} + +function getMediaGalleryIcon() { + return new pix_icon('media-gallery', '', 'local_kalturamediagallery'); } \ No newline at end of file diff --git a/local/mymedia/lib.php b/local/mymedia/lib.php index ad8473d1a2186..5ad17d8c62ba6 100644 --- a/local/mymedia/lib.php +++ b/local/mymedia/lib.php @@ -52,6 +52,7 @@ function local_mymedia_extend_navigation($navigation) { } $mymedia = get_string('nav_mymedia', 'local_mymedia'); - $nodemymedia = $nodehome->add($mymedia, new moodle_url('/local/mymedia/mymedia.php'), navigation_node::NODETYPE_LEAF, $mymedia, 'mymedia'); + $icon = new pix_icon('my-media', '', 'local_mymedia'); + $nodemymedia = $nodehome->add($mymedia, new moodle_url('/local/mymedia/mymedia.php'), navigation_node::NODETYPE_LEAF, $mymedia, 'mymedia', $icon); $nodemymedia->showinflatnavigation = true; } \ No newline at end of file From e6b56cd796eecfa9dc241a877604cc046a1298ad Mon Sep 17 00:00:00 2001 From: Muli Dayan Date: Sun, 24 Jun 2018 13:50:34 +0300 Subject: [PATCH 178/326] version bump - 2018062435; update moodle minimal version requiremenet --- blocks/kalturamediagallery/version.php | 8 ++++---- filter/kaltura/version.php | 6 +++--- lib/editor/atto/plugins/kalturamedia/version.php | 6 +++--- lib/editor/tinymce/plugins/kalturamedia/version.php | 6 +++--- local/kaltura/version.php | 4 ++-- local/kalturamediagallery/version.php | 6 +++--- local/mymedia/version.php | 6 +++--- mod/kalvidassign/version.php | 6 +++--- mod/kalvidpres/version.php | 6 +++--- mod/kalvidres/version.php | 6 +++--- 10 files changed, 30 insertions(+), 30 deletions(-) diff --git a/blocks/kalturamediagallery/version.php b/blocks/kalturamediagallery/version.php index fd7d4be81d640..1f3b01201adb1 100644 --- a/blocks/kalturamediagallery/version.php +++ b/blocks/kalturamediagallery/version.php @@ -14,11 +14,11 @@ defined('MOODLE_INTERNAL') || die(); -$plugin->version = 2018060735; +$plugin->version = 2018062435; $plugin->release = 'Kaltura release 4.1.2'; -$plugin->requires = 2014050800; +$plugin->requires = 2018051700; $plugin->component = 'block_kalturamediagallery'; $plugin->dependencies = array( - 'local_kaltura' => 2018060735, - 'local_kalturamediagallery' => 2018060735 + 'local_kaltura' => 2018062435, + 'local_kalturamediagallery' => 2018062435 ); diff --git a/filter/kaltura/version.php b/filter/kaltura/version.php index f36df4f81fc8d..ae2d8abdc1167 100644 --- a/filter/kaltura/version.php +++ b/filter/kaltura/version.php @@ -24,11 +24,11 @@ */ defined('MOODLE_INTERNAL') || die(); -$plugin->version = 2018060735; //version date YYYYMMDDXX 10 represent 3.0 for future option to moodle use 2 digit version +$plugin->version = 2018062435; //version date YYYYMMDDXX 10 represent 3.0 for future option to moodle use 2 digit version $plugin->component = 'filter_kaltura'; $plugin->release = 'Kaltura release 4.1.2'; -$plugin->requires = 2014050800; +$plugin->requires = 2018051700; $plugin->maturity = MATURITY_STABLE; $plugin->dependencies = array( - 'local_kaltura' => 2018060735 + 'local_kaltura' => 2018062435 ); diff --git a/lib/editor/atto/plugins/kalturamedia/version.php b/lib/editor/atto/plugins/kalturamedia/version.php index 0ff525d050191..2c149b42f4915 100644 --- a/lib/editor/atto/plugins/kalturamedia/version.php +++ b/lib/editor/atto/plugins/kalturamedia/version.php @@ -24,10 +24,10 @@ defined('MOODLE_INTERNAL') || die(); -$plugin->version = 2018060735; // The current plugin version (Date: YYYYMMDDXX). +$plugin->version = 2018062435; // The current plugin version (Date: YYYYMMDDXX). $plugin->release = 'Kaltura release 4.1.2'; -$plugin->requires = 2014050800; // Requires this Moodle version. +$plugin->requires = 2018051700; // Requires this Moodle version. $plugin->component = 'atto_kalturamedia'; // Full name of the plugin (used for diagnostics). $plugin->dependencies = array( - 'local_kaltura' => 2018060735 + 'local_kaltura' => 2018062435 ); diff --git a/lib/editor/tinymce/plugins/kalturamedia/version.php b/lib/editor/tinymce/plugins/kalturamedia/version.php index 7273ab7660fa0..efce40218043d 100644 --- a/lib/editor/tinymce/plugins/kalturamedia/version.php +++ b/lib/editor/tinymce/plugins/kalturamedia/version.php @@ -23,12 +23,12 @@ defined('MOODLE_INTERNAL') || die(); -$plugin->version = 2018060735; +$plugin->version = 2018062435; $plugin->release = 'Kaltura release 4.1.2'; // Required Moodle version. -$plugin->requires = 2014050800; +$plugin->requires = 2018051700; // Full name of the plugin (used for diagnostics). $plugin->component = 'tinymce_kalturamedia'; $plugin->dependencies = array( - 'local_kaltura' => 2018060735 + 'local_kaltura' => 2018062435 ); diff --git a/local/kaltura/version.php b/local/kaltura/version.php index a6b7239c8b0ac..2686ea806d62a 100644 --- a/local/kaltura/version.php +++ b/local/kaltura/version.php @@ -25,8 +25,8 @@ die('Direct access to this script is forbidden.'); } -$plugin->version = 2018060735; +$plugin->version = 2018062435; $plugin->component = 'local_kaltura'; $plugin->release = 'Kaltura release 4.1.2'; -$plugin->requires = 2014050800; +$plugin->requires = 2018051700; $plugin->maturity = MATURITY_STABLE; diff --git a/local/kalturamediagallery/version.php b/local/kalturamediagallery/version.php index eee4129b5bc44..b6316b00561fb 100644 --- a/local/kalturamediagallery/version.php +++ b/local/kalturamediagallery/version.php @@ -26,11 +26,11 @@ die('Direct access to this script is forbidden.'); } -$plugin->version = 2018060735; +$plugin->version = 2018062435; $plugin->component = 'local_kalturamediagallery'; $plugin->release = 'Kaltura release 4.1.2'; -$plugin->requires = 2014050800; +$plugin->requires = 2018051700; $plugin->maturity = MATURITY_STABLE; $plugin->dependencies = array( - 'local_kaltura' => 2018060735 + 'local_kaltura' => 2018062435 ); diff --git a/local/mymedia/version.php b/local/mymedia/version.php index f920868de7eb6..61cc199d750a1 100644 --- a/local/mymedia/version.php +++ b/local/mymedia/version.php @@ -25,11 +25,11 @@ die('Direct access to this script is forbidden.'); } -$plugin->version = 2018060735; +$plugin->version = 2018062435; $plugin->component = 'local_mymedia'; $plugin->release = 'Kaltura release 4.1.2'; -$plugin->requires = 2014050800; +$plugin->requires = 2018051700; $plugin->maturity = MATURITY_STABLE; $plugin->dependencies = array( - 'local_kaltura' => 2018060735 + 'local_kaltura' => 2018062435 ); diff --git a/mod/kalvidassign/version.php b/mod/kalvidassign/version.php index ac08ebb92fd0b..d4c59983582dd 100644 --- a/mod/kalvidassign/version.php +++ b/mod/kalvidassign/version.php @@ -25,12 +25,12 @@ die('Direct access to this script is forbidden.'); } -$plugin->version = 2018060735; +$plugin->version = 2018062435; $plugin->component = 'mod_kalvidassign'; $plugin->release = 'Kaltura release 4.1.2'; -$plugin->requires = 2014050800; +$plugin->requires = 2018051700; $plugin->cron = 0; $plugin->maturity = MATURITY_STABLE; $plugin->dependencies = array( - 'local_kaltura' => 2018060735, + 'local_kaltura' => 2018062435, ); diff --git a/mod/kalvidpres/version.php b/mod/kalvidpres/version.php index be68ec0c39f32..67ca5f2732931 100644 --- a/mod/kalvidpres/version.php +++ b/mod/kalvidpres/version.php @@ -25,12 +25,12 @@ die('Direct access to this script is forbidden.'); } -$plugin->version = 2018060735; +$plugin->version = 2018062435; $plugin->component = 'mod_kalvidpres'; $plugin->release = 'Kaltura release 4.1.2'; -$plugin->requires = 2014050800; +$plugin->requires = 2018051700; $plugin->cron = 0; $plugin->maturity = MATURITY_STABLE; $plugin->dependencies = array( - 'local_kaltura' => 2018060735 + 'local_kaltura' => 2018062435 ); diff --git a/mod/kalvidres/version.php b/mod/kalvidres/version.php index d51bcfad673a5..ef99d0e2e94c1 100644 --- a/mod/kalvidres/version.php +++ b/mod/kalvidres/version.php @@ -25,12 +25,12 @@ die('Direct access to this script is forbidden.'); } -$plugin->version = 2018060735; +$plugin->version = 2018062435; $plugin->component = 'mod_kalvidres'; $plugin->release = 'Kaltura release 4.1.2'; -$plugin->requires = 2014050800; +$plugin->requires = 2018051700; $plugin->cron = 0; $plugin->maturity = MATURITY_STABLE; $plugin->dependencies = array( - 'local_kaltura' => 2018060735 + 'local_kaltura' => 2018062435 ); From c706f578d4005eb2a6fb6700462b4133fbd1ee15 Mon Sep 17 00:00:00 2001 From: Muli Dayan Date: Sun, 24 Jun 2018 13:51:48 +0300 Subject: [PATCH 179/326] version bump 4.1.2 --- blocks/kalturamediagallery/version.php | 2 +- filter/kaltura/version.php | 2 +- lib/editor/atto/plugins/kalturamedia/version.php | 2 +- lib/editor/tinymce/plugins/kalturamedia/version.php | 2 +- local/kaltura/version.php | 2 +- local/kalturamediagallery/version.php | 2 +- local/mymedia/version.php | 2 +- mod/kalvidassign/version.php | 2 +- mod/kalvidpres/version.php | 2 +- mod/kalvidres/version.php | 2 +- 10 files changed, 10 insertions(+), 10 deletions(-) diff --git a/blocks/kalturamediagallery/version.php b/blocks/kalturamediagallery/version.php index 1f3b01201adb1..6aabdb5f58477 100644 --- a/blocks/kalturamediagallery/version.php +++ b/blocks/kalturamediagallery/version.php @@ -15,7 +15,7 @@ defined('MOODLE_INTERNAL') || die(); $plugin->version = 2018062435; -$plugin->release = 'Kaltura release 4.1.2'; +$plugin->release = 'Kaltura release 4.1.3'; $plugin->requires = 2018051700; $plugin->component = 'block_kalturamediagallery'; $plugin->dependencies = array( diff --git a/filter/kaltura/version.php b/filter/kaltura/version.php index ae2d8abdc1167..6b4457603ca66 100644 --- a/filter/kaltura/version.php +++ b/filter/kaltura/version.php @@ -26,7 +26,7 @@ $plugin->version = 2018062435; //version date YYYYMMDDXX 10 represent 3.0 for future option to moodle use 2 digit version $plugin->component = 'filter_kaltura'; -$plugin->release = 'Kaltura release 4.1.2'; +$plugin->release = 'Kaltura release 4.1.3'; $plugin->requires = 2018051700; $plugin->maturity = MATURITY_STABLE; $plugin->dependencies = array( diff --git a/lib/editor/atto/plugins/kalturamedia/version.php b/lib/editor/atto/plugins/kalturamedia/version.php index 2c149b42f4915..45dcc438af9e2 100644 --- a/lib/editor/atto/plugins/kalturamedia/version.php +++ b/lib/editor/atto/plugins/kalturamedia/version.php @@ -25,7 +25,7 @@ defined('MOODLE_INTERNAL') || die(); $plugin->version = 2018062435; // The current plugin version (Date: YYYYMMDDXX). -$plugin->release = 'Kaltura release 4.1.2'; +$plugin->release = 'Kaltura release 4.1.3'; $plugin->requires = 2018051700; // Requires this Moodle version. $plugin->component = 'atto_kalturamedia'; // Full name of the plugin (used for diagnostics). $plugin->dependencies = array( diff --git a/lib/editor/tinymce/plugins/kalturamedia/version.php b/lib/editor/tinymce/plugins/kalturamedia/version.php index efce40218043d..de1640b24d9a2 100644 --- a/lib/editor/tinymce/plugins/kalturamedia/version.php +++ b/lib/editor/tinymce/plugins/kalturamedia/version.php @@ -24,7 +24,7 @@ defined('MOODLE_INTERNAL') || die(); $plugin->version = 2018062435; -$plugin->release = 'Kaltura release 4.1.2'; +$plugin->release = 'Kaltura release 4.1.3'; // Required Moodle version. $plugin->requires = 2018051700; // Full name of the plugin (used for diagnostics). diff --git a/local/kaltura/version.php b/local/kaltura/version.php index 2686ea806d62a..f20ef05897e9d 100644 --- a/local/kaltura/version.php +++ b/local/kaltura/version.php @@ -27,6 +27,6 @@ $plugin->version = 2018062435; $plugin->component = 'local_kaltura'; -$plugin->release = 'Kaltura release 4.1.2'; +$plugin->release = 'Kaltura release 4.1.3'; $plugin->requires = 2018051700; $plugin->maturity = MATURITY_STABLE; diff --git a/local/kalturamediagallery/version.php b/local/kalturamediagallery/version.php index b6316b00561fb..3441e4c44abd7 100644 --- a/local/kalturamediagallery/version.php +++ b/local/kalturamediagallery/version.php @@ -28,7 +28,7 @@ $plugin->version = 2018062435; $plugin->component = 'local_kalturamediagallery'; -$plugin->release = 'Kaltura release 4.1.2'; +$plugin->release = 'Kaltura release 4.1.3'; $plugin->requires = 2018051700; $plugin->maturity = MATURITY_STABLE; $plugin->dependencies = array( diff --git a/local/mymedia/version.php b/local/mymedia/version.php index 61cc199d750a1..796d8847389aa 100644 --- a/local/mymedia/version.php +++ b/local/mymedia/version.php @@ -27,7 +27,7 @@ $plugin->version = 2018062435; $plugin->component = 'local_mymedia'; -$plugin->release = 'Kaltura release 4.1.2'; +$plugin->release = 'Kaltura release 4.1.3'; $plugin->requires = 2018051700; $plugin->maturity = MATURITY_STABLE; $plugin->dependencies = array( diff --git a/mod/kalvidassign/version.php b/mod/kalvidassign/version.php index d4c59983582dd..b2c6e8fdcc67c 100644 --- a/mod/kalvidassign/version.php +++ b/mod/kalvidassign/version.php @@ -27,7 +27,7 @@ $plugin->version = 2018062435; $plugin->component = 'mod_kalvidassign'; -$plugin->release = 'Kaltura release 4.1.2'; +$plugin->release = 'Kaltura release 4.1.3'; $plugin->requires = 2018051700; $plugin->cron = 0; $plugin->maturity = MATURITY_STABLE; diff --git a/mod/kalvidpres/version.php b/mod/kalvidpres/version.php index 67ca5f2732931..c49f8fbe1611c 100644 --- a/mod/kalvidpres/version.php +++ b/mod/kalvidpres/version.php @@ -27,7 +27,7 @@ $plugin->version = 2018062435; $plugin->component = 'mod_kalvidpres'; -$plugin->release = 'Kaltura release 4.1.2'; +$plugin->release = 'Kaltura release 4.1.3'; $plugin->requires = 2018051700; $plugin->cron = 0; $plugin->maturity = MATURITY_STABLE; diff --git a/mod/kalvidres/version.php b/mod/kalvidres/version.php index ef99d0e2e94c1..e163f9466ed85 100644 --- a/mod/kalvidres/version.php +++ b/mod/kalvidres/version.php @@ -27,7 +27,7 @@ $plugin->version = 2018062435; $plugin->component = 'mod_kalvidres'; -$plugin->release = 'Kaltura release 4.1.2'; +$plugin->release = 'Kaltura release 4.1.3'; $plugin->requires = 2018051700; $plugin->cron = 0; $plugin->maturity = MATURITY_STABLE; From 480553fbe0f5320922b3c6d9b2041b2287b10803 Mon Sep 17 00:00:00 2001 From: Atar Shadmi Date: Sun, 14 Oct 2018 14:32:58 +0300 Subject: [PATCH 180/326] KMS-18359 fix typo in comment --- mod/kalvidres/renderer.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mod/kalvidres/renderer.php b/mod/kalvidres/renderer.php index 53fb773ec5e93..86a1558e0ac38 100644 --- a/mod/kalvidres/renderer.php +++ b/mod/kalvidres/renderer.php @@ -47,7 +47,7 @@ public function display_mod_info($title) { /** * This function displays the iframe markup. - * @param object $kalvidres A Kaltura video resrouce instance object. + * @param object $kalvidres A Kaltura video resource instance object. * @param int $courseid A course id. * @return string HTML markup. */ From 1db958dc26c8c6d07b20b15928f2d0435d935bcc Mon Sep 17 00:00:00 2001 From: Atar Shadmi Date: Sun, 14 Oct 2018 14:50:24 +0300 Subject: [PATCH 181/326] KMS-18359 listen to resize postmessages from KAF --- local/kaltura/js/bse_iframe_resize.js | 17 +++++++++++++++++ mod/kalvidres/view.php | 1 + 2 files changed, 18 insertions(+) create mode 100644 local/kaltura/js/bse_iframe_resize.js diff --git a/local/kaltura/js/bse_iframe_resize.js b/local/kaltura/js/bse_iframe_resize.js new file mode 100644 index 0000000000000..b11172c947887 --- /dev/null +++ b/local/kaltura/js/bse_iframe_resize.js @@ -0,0 +1,17 @@ +(function() { + window.addEventListener('message', function (e) { + try { + var postMessageData = e.data; + if (postMessageData.subject === "lti.frameResize") { + var height = postMessageData.height; + if (height.toString().indexOf("%") === -1) { + height += "px"; + } + $('.kaltura-player-iframe').height(height); + } + } + catch (ex) { + console.error("encountered error in kms communication", ex); + } + }); +}()); diff --git a/mod/kalvidres/view.php b/mod/kalvidres/view.php index 59fbd31a86dca..59f3677774017 100644 --- a/mod/kalvidres/view.php +++ b/mod/kalvidres/view.php @@ -86,6 +86,7 @@ 'height' => $kalvidres->height ); $PAGE->requires->yui_module('moodle-local_kaltura-lticontainer', 'M.local_kaltura.init', array($params), null, true); +$PAGE->requires->js(new moodle_url('/local/kaltura/js/bse_iframe_resize.js')); echo $renderer->display_iframe($kalvidres, $course->id); From 287d44fa9220b16cef81355940d53d830830ce36 Mon Sep 17 00:00:00 2001 From: Omri Katz Date: Mon, 22 Oct 2018 12:56:48 +0300 Subject: [PATCH 182/326] KMS-15075 listen to KEA ready event to re-calculate the KAF iframe size to fit whole kea --- local/kaltura/js/kea_resize.js | 14 ++++++++++++++ local/kalturamediagallery/index.php | 1 + local/mymedia/mymedia.php | 1 + 3 files changed, 16 insertions(+) create mode 100644 local/kaltura/js/kea_resize.js diff --git a/local/kaltura/js/kea_resize.js b/local/kaltura/js/kea_resize.js new file mode 100644 index 0000000000000..7ce29bfae5b20 --- /dev/null +++ b/local/kaltura/js/kea_resize.js @@ -0,0 +1,14 @@ +(function() { + window.addEventListener('message', function (e) { + try { + if (e.data && e.data.messageType && e.data.messageType === "kea-ready") { + // listen to kea bootstrap event so we can + // resize the iframe accordingly + var lti = document.querySelector("#contentframe"); + lti.style.height = e.data.height + "px"; + } + } catch(ex) { + console.error("encountered error in kms communication", ex); + } + }); +}()); \ No newline at end of file diff --git a/local/kalturamediagallery/index.php b/local/kalturamediagallery/index.php index 3e7292d0300ff..bb312f6765734 100644 --- a/local/kalturamediagallery/index.php +++ b/local/kalturamediagallery/index.php @@ -67,5 +67,6 @@ 'padding' => 15 ); $PAGE->requires->yui_module('moodle-local_kaltura-lticontainer', 'M.local_kaltura.init', array($params), null, true); +$PAGE->requires->js(new moodle_url('/local/kaltura/js/kea_resize.js')); echo $OUTPUT->footer(); \ No newline at end of file diff --git a/local/mymedia/mymedia.php b/local/mymedia/mymedia.php index a8ec00543cf64..10d98228c466f 100644 --- a/local/mymedia/mymedia.php +++ b/local/mymedia/mymedia.php @@ -63,5 +63,6 @@ 'padding' => 15 ); $PAGE->requires->yui_module('moodle-local_kaltura-lticontainer', 'M.local_kaltura.init', array($params), null, true); +$PAGE->requires->js(new moodle_url('/local/kaltura/js/kea_resize.js')); echo $OUTPUT->footer(); From 948c62d66b1ed61e02bd09d287e0c57c0e45cc80 Mon Sep 17 00:00:00 2001 From: Omri Katz Date: Mon, 22 Oct 2018 13:08:31 +0300 Subject: [PATCH 183/326] KMS-15075 use lti protocol for postMessage --- local/kaltura/js/kea_resize.js | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/local/kaltura/js/kea_resize.js b/local/kaltura/js/kea_resize.js index 7ce29bfae5b20..60ca35f7a261e 100644 --- a/local/kaltura/js/kea_resize.js +++ b/local/kaltura/js/kea_resize.js @@ -1,13 +1,14 @@ (function() { window.addEventListener('message', function (e) { try { - if (e.data && e.data.messageType && e.data.messageType === "kea-ready") { - // listen to kea bootstrap event so we can - // resize the iframe accordingly + var postMessageData = e.data; + if (postMessageData.subject === "lti.frameResize") { + var height = postMessageData.height; var lti = document.querySelector("#contentframe"); - lti.style.height = e.data.height + "px"; + lti.style.height = height + "px"; } - } catch(ex) { + } + catch (ex) { console.error("encountered error in kms communication", ex); } }); From aabbe5d0ca1cecf4e16a80eebdec68005af8fb71 Mon Sep 17 00:00:00 2001 From: Muli Dayan Date: Mon, 26 Nov 2018 16:55:19 +0200 Subject: [PATCH 184/326] SUP-15906 add 'allow' attribute to iframe elements in order to allow auto play --- filter/kaltura/filter.php | 1 + lib/editor/atto/plugins/kalturamedia/ltibrowse_container.php | 2 +- local/kaltura/attobsepreview.php | 1 + .../moodle-local_kaltura-ltitinymcepanel-debug.js | 2 +- local/kaltura/yui/src/ltitinymcepanel/js/ltitinymcepanel.js | 2 +- local/kalturamediagallery/index.php | 3 ++- local/mymedia/mymedia.php | 3 ++- mod/kalvidassign/renderer.php | 3 ++- mod/kalvidassign/single_submission_form.php | 3 ++- mod/kalvidpres/mod_form.php | 1 + mod/kalvidpres/renderer.php | 1 + mod/kalvidres/mod_form.php | 1 + mod/kalvidres/renderer.php | 1 + 13 files changed, 17 insertions(+), 7 deletions(-) diff --git a/filter/kaltura/filter.php b/filter/kaltura/filter.php index de0633223d2ec..405f92f6069fa 100644 --- a/filter/kaltura/filter.php +++ b/filter/kaltura/filter.php @@ -202,6 +202,7 @@ function filter_kaltura_callback($link) { 'height' => $height, 'class' => 'kaltura-player-iframe', 'allowfullscreen' => 'true', + 'allow' => 'autoplay *; fullscreen *; encrypted-media *', 'src' => $url->out(false), 'frameborder' => '0' )); diff --git a/lib/editor/atto/plugins/kalturamedia/ltibrowse_container.php b/lib/editor/atto/plugins/kalturamedia/ltibrowse_container.php index ce156d187972d..d21bd8a70786e 100644 --- a/lib/editor/atto/plugins/kalturamedia/ltibrowse_container.php +++ b/lib/editor/atto/plugins/kalturamedia/ltibrowse_container.php @@ -9,7 +9,7 @@ ?> -

  • '; echo ''; echo ''; echo '

    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 literal 0 HcmV?d00001 diff --git a/local/kaltura/API/TestCode/KalturaTestConfiguration.php b/local/kaltura/API/TestCode/KalturaTestConfiguration.php new file mode 100644 index 0000000000000..d11930208dd85 --- /dev/null +++ b/local/kaltura/API/TestCode/KalturaTestConfiguration.php @@ -0,0 +1,36 @@ +. +// +// @ignore +// =================================================================================================== +class KalturaTestConfiguration +{ + const PARTNER_ID = 54321; + const SECRET = "YOUR_USER_SECRET"; + const ADMIN_SECRET = "YOUR_ADMIN_SECRET"; + const SERVICE_URL = "http://www.kaltura.com"; + const UPLOAD_FILE = "DemoVideo.flv"; +} diff --git a/local/kaltura/API/TestCode/TestMain.php b/local/kaltura/API/TestCode/TestMain.php new file mode 100644 index 0000000000000..ea667b80325ac --- /dev/null +++ b/local/kaltura/API/TestCode/TestMain.php @@ -0,0 +1,137 @@ +. +// +// @ignore +// =================================================================================================== +require_once(dirname(__FILE__) . '/../KalturaClient.php'); +require_once(dirname(__FILE__).DIRECTORY_SEPARATOR.'KalturaTestConfiguration.php'); + +class TestMain implements IKalturaLogger +{ + public function log($message) + { + echo date('Y-m-d H:i:s') . ' ' . $message . "\n"; + } + + public static function run() + { + $test = new TestMain(); + $test->listActions(); + $test->multiRequest(); + $test->add(); + echo "\nFinished running client library tests\n"; + } + + private function getKalturaClient($partnerId, $adminSecret, $isAdmin) + { + $kConfig = new KalturaConfiguration($partnerId); + $kConfig->serviceUrl = KalturaTestConfiguration::SERVICE_URL; + $kConfig->setLogger($this); + $client = new KalturaClient($kConfig); + + $userId = "SomeUser"; + $sessionType = ($isAdmin)? KalturaSessionType::ADMIN : KalturaSessionType::USER; + try + { + $ks = $client->generateSession($adminSecret, $userId, $sessionType, $partnerId); + $client->setKs($ks); + } + catch(Exception $ex) + { + die("could not start session - check configurations in KalturaTestConfiguration class"); + } + + return $client; + } + + public function listActions() + { + try + { + $client = $this->getKalturaClient(KalturaTestConfiguration::PARTNER_ID, KalturaTestConfiguration::ADMIN_SECRET, true); + $results = $client->media->listAction(); + $entry = $results->objects[0]; + echo "\nGot an entry: [{$entry->name}]"; + } + catch(Exception $ex) + { + die($ex->getMessage()); + } + } + + public function multiRequest() + { + try + { + $client = $this->getKalturaClient(KalturaTestConfiguration::PARTNER_ID, KalturaTestConfiguration::ADMIN_SECRET, true); + $client->startMultiRequest(); + $client->baseEntry->count(); + $client->partner->getInfo(); + $client->partner->getUsage(2011); + $multiRequest = $client->doMultiRequest(); + $partner = $multiRequest[1]; + if(!is_object($partner) || get_class($partner) != 'KalturaPartner') + { + throw new Exception("UNEXPECTED_RESULT"); + } + echo "\nGot Admin User email: [{$partner->adminEmail}]"; + } + catch(Exception $ex) + { + die($ex->getMessage()); + } + } + + public function add() + { + try + { + echo "\nUploading test video..."; + $client = $this->getKalturaClient(KalturaTestConfiguration::PARTNER_ID, KalturaTestConfiguration::ADMIN_SECRET, false); + $filePath = KalturaTestConfiguration::UPLOAD_FILE; + + $token = $client->baseEntry->upload($filePath); + $entry = new KalturaMediaEntry(); + $entry->name = "my upload entry"; + $entry->mediaType = KalturaMediaType::VIDEO; + $newEntry = $client->media->addFromUploadedFile($entry, $token); + echo "\nUploaded a new Video entry " . $newEntry->id; + $client->media->delete($newEntry->id); + try { + $entry = null; + $entry = $client->media->get($newEntry->id); + } catch (KalturaException $exApi) { + if ($entry == null) { + echo "\nDeleted the entry (" . $newEntry->id .") successfully!"; + } + } + } catch (KalturaException $ex) { + die($ex->getMessage()); + } + } +} + +TestMain::run(); diff --git a/local/kaltura/API/agpl.txt b/local/kaltura/API/agpl.txt new file mode 100644 index 0000000000000..94a9ed024d385 --- /dev/null +++ b/local/kaltura/API/agpl.txt @@ -0,0 +1,674 @@ + GNU GENERAL PUBLIC LICENSE + Version 3, 29 June 2007 + + Copyright (C) 2007 Free Software Foundation, Inc. + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The GNU General Public License is a free, copyleft license for +software and other kinds of works. + + The licenses for most software and other practical works are designed +to take away your freedom to share and change the works. By contrast, +the GNU General Public License is intended to guarantee your freedom to +share and change all versions of a program--to make sure it remains free +software for all its users. We, the Free Software Foundation, use the +GNU General Public License for most of our software; it applies also to +any other work released this way by its authors. You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +them if you wish), that you receive source code or can get it if you +want it, that you can change the software or use pieces of it in new +free programs, and that you know you can do these things. + + To protect your rights, we need to prevent others from denying you +these rights or asking you to surrender the rights. Therefore, you have +certain responsibilities if you distribute copies of the software, or if +you modify it: responsibilities to respect the freedom of others. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must pass on to the recipients the same +freedoms that you received. You must make sure that they, too, receive +or can get the source code. And you must show them these terms so they +know their rights. + + Developers that use the GNU GPL protect your rights with two steps: +(1) assert copyright on the software, and (2) offer you this License +giving you legal permission to copy, distribute and/or modify it. + + For the developers' and authors' protection, the GPL clearly explains +that there is no warranty for this free software. For both users' and +authors' sake, the GPL requires that modified versions be marked as +changed, so that their problems will not be attributed erroneously to +authors of previous versions. + + Some devices are designed to deny users access to install or run +modified versions of the software inside them, although the manufacturer +can do so. This is fundamentally incompatible with the aim of +protecting users' freedom to change the software. The systematic +pattern of such abuse occurs in the area of products for individuals to +use, which is precisely where it is most unacceptable. Therefore, we +have designed this version of the GPL to prohibit the practice for those +products. If such problems arise substantially in other domains, we +stand ready to extend this provision to those domains in future versions +of the GPL, as needed to protect the freedom of users. + + Finally, every program is threatened constantly by software patents. +States should not allow patents to restrict development and use of +software on general-purpose computers, but in those that do, we wish to +avoid the special danger that patents applied to a free program could +make it effectively proprietary. To prevent this, the GPL assures that +patents cannot be used to render the program non-free. + + The precise terms and conditions for copying, distribution and +modification follow. + + TERMS AND CONDITIONS + + 0. Definitions. + + "This License" refers to version 3 of the GNU General Public License. + + "Copyright" also means copyright-like laws that apply to other kinds of +works, such as semiconductor masks. + + "The Program" refers to any copyrightable work licensed under this +License. Each licensee is addressed as "you". "Licensees" and +"recipients" may be individuals or organizations. + + To "modify" a work means to copy from or adapt all or part of the work +in a fashion requiring copyright permission, other than the making of an +exact copy. The resulting work is called a "modified version" of the +earlier work or a work "based on" the earlier work. + + A "covered work" means either the unmodified Program or a work based +on the Program. + + To "propagate" a work means to do anything with it that, without +permission, would make you directly or secondarily liable for +infringement under applicable copyright law, except executing it on a +computer or modifying a private copy. Propagation includes copying, +distribution (with or without modification), making available to the +public, and in some countries other activities as well. + + To "convey" a work means any kind of propagation that enables other +parties to make or receive copies. Mere interaction with a user through +a computer network, with no transfer of a copy, is not conveying. + + An interactive user interface displays "Appropriate Legal Notices" +to the extent that it includes a convenient and prominently visible +feature that (1) displays an appropriate copyright notice, and (2) +tells the user that there is no warranty for the work (except to the +extent that warranties are provided), that licensees may convey the +work under this License, and how to view a copy of this License. If +the interface presents a list of user commands or options, such as a +menu, a prominent item in the list meets this criterion. + + 1. Source Code. + + The "source code" for a work means the preferred form of the work +for making modifications to it. "Object code" means any non-source +form of a work. + + A "Standard Interface" means an interface that either is an official +standard defined by a recognized standards body, or, in the case of +interfaces specified for a particular programming language, one that +is widely used among developers working in that language. + + The "System Libraries" of an executable work include anything, other +than the work as a whole, that (a) is included in the normal form of +packaging a Major Component, but which is not part of that Major +Component, and (b) serves only to enable use of the work with that +Major Component, or to implement a Standard Interface for which an +implementation is available to the public in source code form. A +"Major Component", in this context, means a major essential component +(kernel, window system, and so on) of the specific operating system +(if any) on which the executable work runs, or a compiler used to +produce the work, or an object code interpreter used to run it. + + The "Corresponding Source" for a work in object code form means all +the source code needed to generate, install, and (for an executable +work) run the object code and to modify the work, including scripts to +control those activities. However, it does not include the work's +System Libraries, or general-purpose tools or generally available free +programs which are used unmodified in performing those activities but +which are not part of the work. For example, Corresponding Source +includes interface definition files associated with source files for +the work, and the source code for shared libraries and dynamically +linked subprograms that the work is specifically designed to require, +such as by intimate data communication or control flow between those +subprograms and other parts of the work. + + The Corresponding Source need not include anything that users +can regenerate automatically from other parts of the Corresponding +Source. + + The Corresponding Source for a work in source code form is that +same work. + + 2. Basic Permissions. + + All rights granted under this License are granted for the term of +copyright on the Program, and are irrevocable provided the stated +conditions are met. This License explicitly affirms your unlimited +permission to run the unmodified Program. The output from running a +covered work is covered by this License only if the output, given its +content, constitutes a covered work. This License acknowledges your +rights of fair use or other equivalent, as provided by copyright law. + + You may make, run and propagate covered works that you do not +convey, without conditions so long as your license otherwise remains +in force. You may convey covered works to others for the sole purpose +of having them make modifications exclusively for you, or provide you +with facilities for running those works, provided that you comply with +the terms of this License in conveying all material for which you do +not control copyright. Those thus making or running the covered works +for you must do so exclusively on your behalf, under your direction +and control, on terms that prohibit them from making any copies of +your copyrighted material outside their relationship with you. + + Conveying under any other circumstances is permitted solely under +the conditions stated below. Sublicensing is not allowed; section 10 +makes it unnecessary. + + 3. Protecting Users' Legal Rights From Anti-Circumvention Law. + + No covered work shall be deemed part of an effective technological +measure under any applicable law fulfilling obligations under article +11 of the WIPO copyright treaty adopted on 20 December 1996, or +similar laws prohibiting or restricting circumvention of such +measures. + + When you convey a covered work, you waive any legal power to forbid +circumvention of technological measures to the extent such circumvention +is effected by exercising rights under this License with respect to +the covered work, and you disclaim any intention to limit operation or +modification of the work as a means of enforcing, against the work's +users, your or third parties' legal rights to forbid circumvention of +technological measures. + + 4. Conveying Verbatim Copies. + + You may convey verbatim copies of the Program's source code as you +receive it, in any medium, provided that you conspicuously and +appropriately publish on each copy an appropriate copyright notice; +keep intact all notices stating that this License and any +non-permissive terms added in accord with section 7 apply to the code; +keep intact all notices of the absence of any warranty; and give all +recipients a copy of this License along with the Program. + + You may charge any price or no price for each copy that you convey, +and you may offer support or warranty protection for a fee. + + 5. Conveying Modified Source Versions. + + You may convey a work based on the Program, or the modifications to +produce it from the Program, in the form of source code under the +terms of section 4, provided that you also meet all of these conditions: + + a) The work must carry prominent notices stating that you modified + it, and giving a relevant date. + + b) The work must carry prominent notices stating that it is + released under this License and any conditions added under section + 7. This requirement modifies the requirement in section 4 to + "keep intact all notices". + + c) You must license the entire work, as a whole, under this + License to anyone who comes into possession of a copy. This + License will therefore apply, along with any applicable section 7 + additional terms, to the whole of the work, and all its parts, + regardless of how they are packaged. This License gives no + permission to license the work in any other way, but it does not + invalidate such permission if you have separately received it. + + d) If the work has interactive user interfaces, each must display + Appropriate Legal Notices; however, if the Program has interactive + interfaces that do not display Appropriate Legal Notices, your + work need not make them do so. + + A compilation of a covered work with other separate and independent +works, which are not by their nature extensions of the covered work, +and which are not combined with it such as to form a larger program, +in or on a volume of a storage or distribution medium, is called an +"aggregate" if the compilation and its resulting copyright are not +used to limit the access or legal rights of the compilation's users +beyond what the individual works permit. Inclusion of a covered work +in an aggregate does not cause this License to apply to the other +parts of the aggregate. + + 6. Conveying Non-Source Forms. + + You may convey a covered work in object code form under the terms +of sections 4 and 5, provided that you also convey the +machine-readable Corresponding Source under the terms of this License, +in one of these ways: + + a) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by the + Corresponding Source fixed on a durable physical medium + customarily used for software interchange. + + b) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by a + written offer, valid for at least three years and valid for as + long as you offer spare parts or customer support for that product + model, to give anyone who possesses the object code either (1) a + copy of the Corresponding Source for all the software in the + product that is covered by this License, on a durable physical + medium customarily used for software interchange, for a price no + more than your reasonable cost of physically performing this + conveying of source, or (2) access to copy the + Corresponding Source from a network server at no charge. + + c) Convey individual copies of the object code with a copy of the + written offer to provide the Corresponding Source. This + alternative is allowed only occasionally and noncommercially, and + only if you received the object code with such an offer, in accord + with subsection 6b. + + d) Convey the object code by offering access from a designated + place (gratis or for a charge), and offer equivalent access to the + Corresponding Source in the same way through the same place at no + further charge. You need not require recipients to copy the + Corresponding Source along with the object code. If the place to + copy the object code is a network server, the Corresponding Source + may be on a different server (operated by you or a third party) + that supports equivalent copying facilities, provided you maintain + clear directions next to the object code saying where to find the + Corresponding Source. Regardless of what server hosts the + Corresponding Source, you remain obligated to ensure that it is + available for as long as needed to satisfy these requirements. + + e) Convey the object code using peer-to-peer transmission, provided + you inform other peers where the object code and Corresponding + Source of the work are being offered to the general public at no + charge under subsection 6d. + + A separable portion of the object code, whose source code is excluded +from the Corresponding Source as a System Library, need not be +included in conveying the object code work. + + A "User Product" is either (1) a "consumer product", which means any +tangible personal property which is normally used for personal, family, +or household purposes, or (2) anything designed or sold for incorporation +into a dwelling. In determining whether a product is a consumer product, +doubtful cases shall be resolved in favor of coverage. For a particular +product received by a particular user, "normally used" refers to a +typical or common use of that class of product, regardless of the status +of the particular user or of the way in which the particular user +actually uses, or expects or is expected to use, the product. A product +is a consumer product regardless of whether the product has substantial +commercial, industrial or non-consumer uses, unless such uses represent +the only significant mode of use of the product. + + "Installation Information" for a User Product means any methods, +procedures, authorization keys, or other information required to install +and execute modified versions of a covered work in that User Product from +a modified version of its Corresponding Source. The information must +suffice to ensure that the continued functioning of the modified object +code is in no case prevented or interfered with solely because +modification has been made. + + If you convey an object code work under this section in, or with, or +specifically for use in, a User Product, and the conveying occurs as +part of a transaction in which the right of possession and use of the +User Product is transferred to the recipient in perpetuity or for a +fixed term (regardless of how the transaction is characterized), the +Corresponding Source conveyed under this section must be accompanied +by the Installation Information. But this requirement does not apply +if neither you nor any third party retains the ability to install +modified object code on the User Product (for example, the work has +been installed in ROM). + + The requirement to provide Installation Information does not include a +requirement to continue to provide support service, warranty, or updates +for a work that has been modified or installed by the recipient, or for +the User Product in which it has been modified or installed. Access to a +network may be denied when the modification itself materially and +adversely affects the operation of the network or violates the rules and +protocols for communication across the network. + + Corresponding Source conveyed, and Installation Information provided, +in accord with this section must be in a format that is publicly +documented (and with an implementation available to the public in +source code form), and must require no special password or key for +unpacking, reading or copying. + + 7. Additional Terms. + + "Additional permissions" are terms that supplement the terms of this +License by making exceptions from one or more of its conditions. +Additional permissions that are applicable to the entire Program shall +be treated as though they were included in this License, to the extent +that they are valid under applicable law. If additional permissions +apply only to part of the Program, that part may be used separately +under those permissions, but the entire Program remains governed by +this License without regard to the additional permissions. + + When you convey a copy of a covered work, you may at your option +remove any additional permissions from that copy, or from any part of +it. (Additional permissions may be written to require their own +removal in certain cases when you modify the work.) You may place +additional permissions on material, added by you to a covered work, +for which you have or can give appropriate copyright permission. + + Notwithstanding any other provision of this License, for material you +add to a covered work, you may (if authorized by the copyright holders of +that material) supplement the terms of this License with terms: + + a) Disclaiming warranty or limiting liability differently from the + terms of sections 15 and 16 of this License; or + + b) Requiring preservation of specified reasonable legal notices or + author attributions in that material or in the Appropriate Legal + Notices displayed by works containing it; or + + c) Prohibiting misrepresentation of the origin of that material, or + requiring that modified versions of such material be marked in + reasonable ways as different from the original version; or + + d) Limiting the use for publicity purposes of names of licensors or + authors of the material; or + + e) Declining to grant rights under trademark law for use of some + trade names, trademarks, or service marks; or + + f) Requiring indemnification of licensors and authors of that + material by anyone who conveys the material (or modified versions of + it) with contractual assumptions of liability to the recipient, for + any liability that these contractual assumptions directly impose on + those licensors and authors. + + All other non-permissive additional terms are considered "further +restrictions" within the meaning of section 10. If the Program as you +received it, or any part of it, contains a notice stating that it is +governed by this License along with a term that is a further +restriction, you may remove that term. If a license document contains +a further restriction but permits relicensing or conveying under this +License, you may add to a covered work material governed by the terms +of that license document, provided that the further restriction does +not survive such relicensing or conveying. + + If you add terms to a covered work in accord with this section, you +must place, in the relevant source files, a statement of the +additional terms that apply to those files, or a notice indicating +where to find the applicable terms. + + Additional terms, permissive or non-permissive, may be stated in the +form of a separately written license, or stated as exceptions; +the above requirements apply either way. + + 8. Termination. + + You may not propagate or modify a covered work except as expressly +provided under this License. Any attempt otherwise to propagate or +modify it is void, and will automatically terminate your rights under +this License (including any patent licenses granted under the third +paragraph of section 11). + + However, if you cease all violation of this License, then your +license from a particular copyright holder is reinstated (a) +provisionally, unless and until the copyright holder explicitly and +finally terminates your license, and (b) permanently, if the copyright +holder fails to notify you of the violation by some reasonable means +prior to 60 days after the cessation. + + Moreover, your license from a particular copyright holder is +reinstated permanently if the copyright holder notifies you of the +violation by some reasonable means, this is the first time you have +received notice of violation of this License (for any work) from that +copyright holder, and you cure the violation prior to 30 days after +your receipt of the notice. + + Termination of your rights under this section does not terminate the +licenses of parties who have received copies or rights from you under +this License. If your rights have been terminated and not permanently +reinstated, you do not qualify to receive new licenses for the same +material under section 10. + + 9. Acceptance Not Required for Having Copies. + + You are not required to accept this License in order to receive or +run a copy of the Program. Ancillary propagation of a covered work +occurring solely as a consequence of using peer-to-peer transmission +to receive a copy likewise does not require acceptance. However, +nothing other than this License grants you permission to propagate or +modify any covered work. These actions infringe copyright if you do +not accept this License. Therefore, by modifying or propagating a +covered work, you indicate your acceptance of this License to do so. + + 10. Automatic Licensing of Downstream Recipients. + + Each time you convey a covered work, the recipient automatically +receives a license from the original licensors, to run, modify and +propagate that work, subject to this License. You are not responsible +for enforcing compliance by third parties with this License. + + An "entity transaction" is a transaction transferring control of an +organization, or substantially all assets of one, or subdividing an +organization, or merging organizations. If propagation of a covered +work results from an entity transaction, each party to that +transaction who receives a copy of the work also receives whatever +licenses to the work the party's predecessor in interest had or could +give under the previous paragraph, plus a right to possession of the +Corresponding Source of the work from the predecessor in interest, if +the predecessor has it or can get it with reasonable efforts. + + You may not impose any further restrictions on the exercise of the +rights granted or affirmed under this License. For example, you may +not impose a license fee, royalty, or other charge for exercise of +rights granted under this License, and you may not initiate litigation +(including a cross-claim or counterclaim in a lawsuit) alleging that +any patent claim is infringed by making, using, selling, offering for +sale, or importing the Program or any portion of it. + + 11. Patents. + + A "contributor" is a copyright holder who authorizes use under this +License of the Program or a work on which the Program is based. The +work thus licensed is called the contributor's "contributor version". + + A contributor's "essential patent claims" are all patent claims +owned or controlled by the contributor, whether already acquired or +hereafter acquired, that would be infringed by some manner, permitted +by this License, of making, using, or selling its contributor version, +but do not include claims that would be infringed only as a +consequence of further modification of the contributor version. For +purposes of this definition, "control" includes the right to grant +patent sublicenses in a manner consistent with the requirements of +this License. + + Each contributor grants you a non-exclusive, worldwide, royalty-free +patent license under the contributor's essential patent claims, to +make, use, sell, offer for sale, import and otherwise run, modify and +propagate the contents of its contributor version. + + In the following three paragraphs, a "patent license" is any express +agreement or commitment, however denominated, not to enforce a patent +(such as an express permission to practice a patent or covenant not to +sue for patent infringement). To "grant" such a patent license to a +party means to make such an agreement or commitment not to enforce a +patent against the party. + + If you convey a covered work, knowingly relying on a patent license, +and the Corresponding Source of the work is not available for anyone +to copy, free of charge and under the terms of this License, through a +publicly available network server or other readily accessible means, +then you must either (1) cause the Corresponding Source to be so +available, or (2) arrange to deprive yourself of the benefit of the +patent license for this particular work, or (3) arrange, in a manner +consistent with the requirements of this License, to extend the patent +license to downstream recipients. "Knowingly relying" means you have +actual knowledge that, but for the patent license, your conveying the +covered work in a country, or your recipient's use of the covered work +in a country, would infringe one or more identifiable patents in that +country that you have reason to believe are valid. + + If, pursuant to or in connection with a single transaction or +arrangement, you convey, or propagate by procuring conveyance of, a +covered work, and grant a patent license to some of the parties +receiving the covered work authorizing them to use, propagate, modify +or convey a specific copy of the covered work, then the patent license +you grant is automatically extended to all recipients of the covered +work and works based on it. + + A patent license is "discriminatory" if it does not include within +the scope of its coverage, prohibits the exercise of, or is +conditioned on the non-exercise of one or more of the rights that are +specifically granted under this License. You may not convey a covered +work if you are a party to an arrangement with a third party that is +in the business of distributing software, under which you make payment +to the third party based on the extent of your activity of conveying +the work, and under which the third party grants, to any of the +parties who would receive the covered work from you, a discriminatory +patent license (a) in connection with copies of the covered work +conveyed by you (or copies made from those copies), or (b) primarily +for and in connection with specific products or compilations that +contain the covered work, unless you entered into that arrangement, +or that patent license was granted, prior to 28 March 2007. + + Nothing in this License shall be construed as excluding or limiting +any implied license or other defenses to infringement that may +otherwise be available to you under applicable patent law. + + 12. No Surrender of Others' Freedom. + + If conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot convey a +covered work so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you may +not convey it at all. For example, if you agree to terms that obligate you +to collect a royalty for further conveying from those to whom you convey +the Program, the only way you could satisfy both those terms and this +License would be to refrain entirely from conveying the Program. + + 13. Use with the GNU Affero General Public License. + + Notwithstanding any other provision of this License, you have +permission to link or combine any covered work with a work licensed +under version 3 of the GNU Affero General Public License into a single +combined work, and to convey the resulting work. The terms of this +License will continue to apply to the part which is the covered work, +but the special requirements of the GNU Affero General Public License, +section 13, concerning interaction through a network will apply to the +combination as such. + + 14. Revised Versions of this License. + + The Free Software Foundation may publish revised and/or new versions of +the GNU General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + + Each version is given a distinguishing version number. If the +Program specifies that a certain numbered version of the GNU General +Public License "or any later version" applies to it, you have the +option of following the terms and conditions either of that numbered +version or of any later version published by the Free Software +Foundation. If the Program does not specify a version number of the +GNU General Public License, you may choose any version ever published +by the Free Software Foundation. + + If the Program specifies that a proxy can decide which future +versions of the GNU General Public License can be used, that proxy's +public statement of acceptance of a version permanently authorizes you +to choose that version for the Program. + + Later license versions may give you additional or different +permissions. However, no additional obligations are imposed on any +author or copyright holder as a result of your choosing to follow a +later version. + + 15. Disclaimer of Warranty. + + THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY +APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT +HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY +OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, +THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM +IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF +ALL NECESSARY SERVICING, REPAIR OR CORRECTION. + + 16. Limitation of Liability. + + IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS +THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY +GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE +USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF +DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD +PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), +EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF +SUCH DAMAGES. + + 17. Interpretation of Sections 15 and 16. + + If the disclaimer of warranty and limitation of liability provided +above cannot be given local legal effect according to their terms, +reviewing courts shall apply local law that most closely approximates +an absolute waiver of all civil liability in connection with the +Program, unless a warranty or assumption of liability accompanies a +copy of the Program in return for a fee. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +state the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + + Copyright (C) + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . + +Also add information on how to contact you by electronic and paper mail. + + If the program does terminal interaction, make it output a short +notice like this when it starts in an interactive mode: + + Copyright (C) + This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the appropriate +parts of the General Public License. Of course, your program's commands +might be different; for a GUI interface, you would use an "about box". + + You should also get your employer (if you work as a programmer) or school, +if any, to sign a "copyright disclaimer" for the program, if necessary. +For more information on this, and how to apply and follow the GNU GPL, see +. + + The GNU General Public License does not permit incorporating your program +into proprietary programs. If your program is a subroutine library, you +may consider it more useful to permit linking proprietary applications with +the library. If this is what you want to do, use the GNU Lesser General +Public License instead of this License. But first, please read +. diff --git a/local/kaltura/db/access.php b/local/kaltura/db/access.php new file mode 100644 index 0000000000000..e1b21b000602b --- /dev/null +++ b/local/kaltura/db/access.php @@ -0,0 +1,39 @@ +. + +/** + * Kaltura local plug-in access.php + * + * @package local_kaltura + * @author Remote-Learner.net Inc + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + * @copyright (C) 2014 Remote Learner.net Inc http://www.remote-learner.net + */ + +$capabilities = array( + 'local/kaltura:download_trace_logs' => array( + 'captype' => 'read', + 'contextlevel' => CONTEXT_SYSTEM, + 'archetypes' => array( + 'manager' => CAP_ALLOW, + ) + ), + 'local/kaltura:migrate_data' => array( + 'captype' => 'read', + 'contextlevel' => CONTEXT_SYSTEM, + 'archetypes' => array( + 'manager' => CAP_ALLOW, + ) + ), +); \ No newline at end of file diff --git a/local/kaltura/db/install.xml b/local/kaltura/db/install.xml new file mode 100755 index 0000000000000..59ccf34885d6c --- /dev/null +++ b/local/kaltura/db/install.xml @@ -0,0 +1,25 @@ + + + + + + + + + + + + + + + + + + + +
    +
    +
    \ No newline at end of file diff --git a/local/kaltura/db/upgrade.php b/local/kaltura/db/upgrade.php new file mode 100644 index 0000000000000..e8de2b0d4c236 --- /dev/null +++ b/local/kaltura/db/upgrade.php @@ -0,0 +1,67 @@ +. + +/** + * Upgrade code containing changes to the plugin data table. + * + * @package local_kaltura + * @author Remote-Learner.net Inc + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + * @copyright (C) 2014 Remote Learner.net Inc http://www.remote-learner.net + */ +function xmldb_local_kaltura_upgrade($oldversion) { + global $CFG, $DB; + + require_once($CFG->dirroot.'/local/kaltura/locallib.php'); + + $dbman = $DB->get_manager(); + + if ($oldversion < 2014023000) { + // Because the plug-in is being upgraded we need to set the migration flag to true. + set_config('migration_yes', 1, KALTURA_PLUGIN_NAME); + + // Define table local_kaltura_log to be created. + $table = new xmldb_table('local_kaltura_log'); + + // Adding fields to table local_kaltura_log. + $table->add_field('id', XMLDB_TYPE_INTEGER, '10', null, XMLDB_NOTNULL, XMLDB_SEQUENCE, null); + $table->add_field('module', XMLDB_TYPE_CHAR, '50', null, XMLDB_NOTNULL, null, null); + $table->add_field('type', XMLDB_TYPE_CHAR, '3', null, XMLDB_NOTNULL, null, null); + $table->add_field('endpoint', XMLDB_TYPE_CHAR, '255', null, XMLDB_NOTNULL, null, null); + $table->add_field('data', XMLDB_TYPE_TEXT, null, null, XMLDB_NOTNULL, null, null); + $table->add_field('timecreated', XMLDB_TYPE_INTEGER, '20', null, XMLDB_NOTNULL, null, '0'); + + // Adding keys to table local_kaltura_log. + $table->add_key('primary', XMLDB_KEY_PRIMARY, array('id')); + + // Adding indexes to table local_kaltura_log. + $table->add_index('module_idx', XMLDB_INDEX_NOTUNIQUE, array('module')); + $table->add_index('timecreated_idx', XMLDB_INDEX_NOTUNIQUE, array('timecreated')); + + // Conditionally launch create table for local_kaltura_log. + if (!$dbman->table_exists($table)) { + $dbman->create_table($table); + } + + // Kaltura savepoint reached. + upgrade_plugin_savepoint(true, 2014023000, 'local', 'kaltura'); + } + + if ($oldversion < 2014023000.01) { + // Kaltura savepoint reached. + upgrade_plugin_savepoint(true, 2014023000.01, 'local', 'kaltura'); + } +} \ No newline at end of file diff --git a/local/kaltura/download_log.php b/local/kaltura/download_log.php new file mode 100644 index 0000000000000..8aeb35e36625e --- /dev/null +++ b/local/kaltura/download_log.php @@ -0,0 +1,102 @@ +. + +/** + * Download Kaltura logs page. + * + * @package local_kaltura + * @author Remote-Learner.net Inc + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + * @copyright (C) 2014 Remote Learner.net Inc http://www.remote-learner.net + */ + +require_once('../../config.php'); +require_once($CFG->dirroot.'/local/kaltura/download_log_form.php'); + +global $DB; + +$url = new moodle_url('/mod/lti/instructor_edit_tool_type.php'); +$context = context_system::instance(); +$heading = get_string('download_logs_title', 'local_kaltura'); +$site = get_site(); + +$PAGE->navbar->add(get_string('administrationsite')); +$PAGE->navbar->add(get_string('plugins', 'admin')); +$PAGE->navbar->add(get_string('localplugins')); +$PAGE->navbar->add(get_string('pluginname', 'local_kaltura'), new moodle_url('/admin/settings.php', array('section' => 'local_kaltura'))); +$PAGE->navbar->add(get_string('download_logs_title', 'local_kaltura')); +$PAGE->set_url($url); +$PAGE->set_context($context); + +$PAGE->set_context($context); +$PAGE->set_pagelayout('standard'); +$PAGE->set_pagetype('local-kaltura-download-log'); +$PAGE->set_title($heading); +$PAGE->set_heading($site->fullname); + +require_login(null, false); + +require_capability('local/kaltura:download_trace_logs', $context); + +$url = new moodle_url('/admin/settings.php', array('section' => 'local_kaltura')); +$downloadurl = new moodle_url('/local/kaltura/download_log.php'); + +$form = new local_kaltura_download_log_form(); +if ($data = $form->get_data()) { + // User hit cancel. Redirect them back to the settings page. + if (isset($data->cancel)) { + redirect($url); + } + + require_sesskey(); + + // User hit submit button. Check for records since the configured date. + if (isset($data->submitbutton)) { + $rs = $DB->get_recordset_select('local_kaltura_log', 'timecreated >= ?', array($data->logs_start_time), 'timecreated ASC'); + + // Check if the recordset contains any data. + if ($rs->valid()) { + header('Content-Type: text/csv; charset=utf-8'); + header('Content-Disposition: attachment; filename=kalturalogs.csv'); + + // create a file pointer connected to the output stream + $output = fopen('php://output', 'w'); + + // output the column headings + fputcsv($output, array('Request/Response', 'Time', 'Module', 'Endpoint', 'Data (JSON)')); + + foreach ($rs as $record) { + $record->data = json_encode(unserialize($record->data)); + fputcsv($output, array($record->type, userdate($record->timecreated), $record->module, $record->endpoint, $record->data)); + } + + $rs->close(); + die(); + } else { + notice(get_string('no_records', 'local_kaltura'), $downloadurl); + } + } + + if (isset($data->deletelogs)) { + $DB->delete_records_select('local_kaltura_log', 'id > 0'); + notice(get_string('records_deleted', 'local_kaltura'), $downloadurl); + } +} + +echo $OUTPUT->header(); +echo $OUTPUT->heading(get_string('download_logs_title', 'local_kaltura')); +$form->display(); +echo $OUTPUT->footer(); diff --git a/local/kaltura/download_log_form.php b/local/kaltura/download_log_form.php new file mode 100644 index 0000000000000..10d089d4d17a7 --- /dev/null +++ b/local/kaltura/download_log_form.php @@ -0,0 +1,46 @@ +. + +/** + * @package local_kaltura + * @author Remote-Learner.net Inc + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + * @copyright (C) 2014 Remote Learner.net Inc http://www.remote-learner.net + */ + +defined('MOODLE_INTERNAL') || die; + +require_once($CFG->libdir.'/formslib.php'); +/** + * Download Kaltura logs form class. + */ +class local_kaltura_download_log_form extends moodleform { + /** + * This function defines the elements on the form. + */ + public function definition() { + $mform =& $this->_form; + + $mform->addElement('header', 'setup', get_string('options')); + $mform->addElement('date_selector', 'logs_start_time', get_string('download_log_range', 'local_kaltura')); + + $buttonarray=array(); + $buttonarray[] =& $mform->createElement('submit', 'submitbutton', get_string('download')); + $buttonarray[] =& $mform->createElement('submit', 'cancel', get_string('cancel')); + $buttonarray[] =& $mform->createElement('submit', 'deletelogs', get_string('delete_logs', 'local_kaltura')); + $mform->addGroup($buttonarray, 'buttonar', '', array(' '), false); + } +} \ No newline at end of file diff --git a/local/kaltura/lang/en/local_kaltura.php b/local/kaltura/lang/en/local_kaltura.php new file mode 100644 index 0000000000000..4c3efb0065f1e --- /dev/null +++ b/local/kaltura/lang/en/local_kaltura.php @@ -0,0 +1,66 @@ +. + +/** + * Kaltura language file. + * + * @package local_kaltura + * @author Remote-Learner.net Inc + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + * @copyright (C) 2014 Remote Learner.net Inc http://www.remote-learner.net + */ + +$string['admin_secret'] = 'Admin secret'; +$string['admin_secret_desc'] = 'Enter the admin secret for your account.'; +$string['cancelbtn'] = 'Cancel'; +$string['categories_created'] = 'Number of categories created:'; +$string['delete_logs'] = 'Purge all logs'; +$string['download_logs_title'] = 'Download logs'; +$string['download_log_range'] = 'Download logs newer than selected date'; +$string['entries_migrated'] = 'The number of entries migrated:'; +$string['insertbtn'] = 'Embed media'; +$string['invalid_url'] = 'Invalid URL'; +$string['kaf_configuration_hdr'] = 'KAF configuration'; +$string['kaf_uri'] = 'KAF URI'; +$string['kaf_uri_desc'] = 'Type in the server URI of your KAF instance.'; +$string['kaltura_course_reports'] = 'Kaltura Course Media Reports'; +$string['kaltura:download_trace_logs'] = 'Download Kaltura trace logs'; +$string['kaltura:migrate_data'] = 'Migrate Kaltura Data'; +$string['migration_cannot_connect'] = 'Error connecting to Kaltura.'; +$string['migration_complete_redirect'] = 'The migration has been completed.'; +$string['migration_has_stopped'] = 'Due to the large amounts of data only a portion of the migration was completed. The last known location has been saved and you may continue migrating your data.'; +$string['migration_header'] = 'Data migration'; +$string['migration_kaf_url_not_set'] = 'The KAF URI is not set. Please enter a KAF URI before starting the migration'; +$string['migration_not_started'] = 'Click the start/continue button to start the migration.'; +$string['migration_notice'] = 'Data from your account needs to be migrated in order to be used with this version of the plug-ins. Go to the
    Migration page to begin the process.'; +$string['migration_root_category_not_set'] = 'Unable to determine the root category id.'; +$string['migration_profile_id_not_set'] = 'Unable to determine the metadata profile id.'; +$string['migration_select_a_category'] = 'Select a KAF category to migrate to'; +$string['migration_start_continue'] = 'Start / Continue'; +$string['migration_start_over_redirect'] = 'The migration statistics and last known location has been restarted.'; +$string['migration_start_time'] = 'The migration was originally started at:'; +$string['missing_required_info'] = 'Warning: the Partner id or Admin secret is empty. The Kaltura plug-ins will not work.'; +$string['no_records'] = 'No records returned.'; +$string['original_kafcategory'] = 'The KAF category selected for migration.'; +$string['partner_id'] = 'Partner id'; +$string['partner_id_desc'] = 'Enter the partner id for your account.'; +$string['pluginname'] = 'Kaltura package libraries'; +$string['records_deleted'] = 'All Kaltura log records were deleted.'; +$string['server_uri'] = 'Server URI'; +$string['server_uri_desc'] = 'Type in the server URI you want to connect to. Otherwise just type in the default settings (This setting is used for migration purposes).'; +$string['startover'] = 'Restart migration'; +$string['trace_log'] = 'Enable trace logging'; +$string['trace_log_desc'] = 'If enabled, all requests and responses to and from Kaltura are logged. These logs can be used by Kaltura support to diagnose any problems encountered. Enabling this setting may affect Moodle performance. You may download a CSV file of the logs from here.'; diff --git a/local/kaltura/lib.php b/local/kaltura/lib.php new file mode 100644 index 0000000000000..4778a2c55e957 --- /dev/null +++ b/local/kaltura/lib.php @@ -0,0 +1,24 @@ +. + +/** + * Kaltura library file. + * + * @package local_kaltura + * @author Remote-Learner.net Inc + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + * @copyright (C) 2014 Remote Learner.net Inc http://www.remote-learner.net + */ \ No newline at end of file diff --git a/local/kaltura/locallib.php b/local/kaltura/locallib.php new file mode 100644 index 0000000000000..555188bed88f3 --- /dev/null +++ b/local/kaltura/locallib.php @@ -0,0 +1,715 @@ +. + +/** + * Kaltura local library of functions. + * + * @package local_kaltura + * @author Remote-Learner.net Inc + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + * @copyright (C) 2014 Remote Learner.net Inc http://www.remote-learner.net + */ + +if (!defined('MOODLE_INTERNAL')) { + die('Direct access to this script is forbidden.'); +} + +require_once($CFG->dirroot.'/mod/lti/locallib.php'); + +define('KALTURA_PLUGIN_NAME', 'local_kaltura'); +define('KALTURA_DEFAULT_URI', 'www.kaltura.com'); +define('KALTURA_REPORT_DEFAULT_URI', 'http://apps.kaltura.com/hosted_pages'); +define('KAF_MYMEDIA_MODULE', 'mymedia'); +define('KAF_MEDIAGALLERY_MODULE', 'coursegallery'); +define('KAF_BROWSE_EMBED_MODULE', 'browseembed'); +define('KAF_MYMEDIA_ENDPOINT', 'hosted/index/my-media'); +define('KAF_MEDIAGALLERY_ENDPOINT', 'hosted/index/course-gallery'); +define('KAF_BROWSE_EMBED_ENDPOINT', 'browseandembed/index/browseandembed'); +define('KALTURA_LOG_REQUEST', 'REQ'); +define('KALTURA_LOG_RESPONSE', 'RES'); +define('KALTURA_PANEL_HEIGHT', 580); +define('KALTURA_PANEL_WIDTH', 1100); +define('KALTURA_LTI_LEARNER_ROLE', 'Learner'); +define('KALTURA_LTI_INSTRUCTOR_ROLE', 'Instructor'); +define('KALTURA_LTI_ADMIN_ROLE', 'urn:lti:sysrole:ims/lis/Administrator'); +define('KALTURA_REPO_NAME', 'kaltura'); +// For KALTURA_URI_TOKEN +// 1. Do not use characters that are used in regular expressions like {}[]() +// 2. Moodle cleans up urls that look like relative links into complete urls by inserting $CFG->wwwroot +define('KALTURA_URI_TOKEN', 'kaltura-kaf-uri.com'); + +/** + * This function validates whether a requested KAF module is valid. + * @param string $module The name of the module. + * @return bool True if valid, otherwise false. + */ +function local_kaltura_validate_kaf_module_request($module) { + $valid = false; + + switch ($module) { + case KAF_MYMEDIA_MODULE: + $valid = true; + break; + case KAF_MEDIAGALLERY_MODULE: + $valid = true; + break; + case KAF_BROWSE_EMBED_MODULE: + $valid = true; + break; + } + return $valid; +} + +/** + * This function calls @see lti_get_launch_container() to an LTI launch container to display the content. + * @param bool $withblocks Set to true to dislay embed content with Moodle blocks. Otherwise set to false. + * @return int Container value + */ +function local_kaltura_get_lti_launch_container($withblocks = true) { + $lti = new stdClass(); + $container = 0; + + if (!empty($withblocks)) { + $lti->launchcontainer = LTI_LAUNCH_CONTAINER_EMBED; + $container = lti_get_launch_container($lti, array('launchcontainer' => LTI_LAUNCH_CONTAINER_EMBED)); + } else { + $lti->launchcontainer = LTI_LAUNCH_CONTAINER_EMBED_NO_BLOCKS; + $container = lti_get_launch_container($lti, array('launchcontainer' => LTI_LAUNCH_CONTAINER_EMBED_NO_BLOCKS)); + } + + return $container; +} + +/** + * This function validates the parameters to see if all of the requirements for the module are met. + * @param array $params An array of parameters + * @return bool true if valid, otherwise false + */ +function local_kaltura_validate_mymedia_required_params($params) { + $valid = true; + + $expectedkeys = array( + // The activity instance id + 'id' => '', + // The KAL module requested + 'module' => '', + 'course' => new stdClass(), + 'title' => '', + 'width' => '', + 'height' => '', + 'cmid' => '', + 'custom_publishdata' => '', + ); + + // Get keys that reside in both parameters and expectedkeys + $matchingkeys = array_intersect_key($params, $expectedkeys); + + // The number of keys in the result should equal the number of expectedkeys + if (count($expectedkeys) != count($matchingkeys)) { + return false; + } + + $invalid = !is_numeric($params['id']) || !is_numeric($params['width']) || !is_numeric($params['height']) || !is_numeric($params['cmid']) || !is_object($params['course']); + + if ($invalid) { + return false; + } + + return true; +} + +/** + * This function validates the parameters to see if all of the requirements for the module are met. + * @param array $params An array of parameters + * @return bool true if valid, otherwise false + */ +function local_kaltura_validate_mediagallery_required_params($params) { + $valid = true; + + $expectedkeys = array( + // The activity instance id + 'id' => '', + // The KAL module requested + 'module' => '', + 'course' => new stdClass(), + 'title' => '', + 'width' => '', + 'height' => '', + 'cmid' => '', + 'custom_publishdata' => '', + ); + + // Get keys that reside in both parameters and expectedkeys + $matchingkeys = array_intersect_key($params, $expectedkeys); + + // The number of keys in the result should equal the number of expectedkeys + if (count($expectedkeys) != count($matchingkeys)) { + return false; + } + + $invalid = !is_numeric($params['id']) || !is_numeric($params['width']) || !is_numeric($params['height']) || !is_numeric($params['cmid']) || !is_object($params['course']); + + if ($invalid) { + return false; + } + + return true; +} + +/** + * This function validates the parameters to see if all of the requirements for the module are met. + * @param array $params An array of parameters + * @return bool true if valid, otherwise false + */ +function local_kaltura_validate_browseembed_required_params($params) { + $valid = true; + + $expectedkeys = array( + // The activity instance id + 'id' => '', + // The KAL module requested + 'module' => '', + 'course' => new stdClass(), + 'title' => '', + 'width' => '', + 'height' => '', + 'cmid' => '', + 'custom_publishdata' => '', + ); + + // Get keys that reside in both parameters and expectedkeys + $matchingkeys = array_intersect_key($params, $expectedkeys); + + // The number of keys in the result should equal the number of expectedkeys + if (count($expectedkeys) != count($matchingkeys)) { + return false; + } + + $invalid = !is_numeric($params['id']) || !is_numeric($params['width']) || !is_numeric($params['height']) || !is_numeric($params['cmid']) || !is_object($params['course']); + + if ($invalid) { + return false; + } + + return true; +} + +/** + * This function returns the endpoint URL belonging to the module that was requested. + * @param string $module The name of the module being requested. + * @param string Part of the URL that makes up the endpoint pertaining to the module requested. + * @return string Part of the URL for the end point designated for the module. Otherwise an empty string. + */ +function local_kaltura_get_endpoint($module) { + switch ($module) { + case KAF_MYMEDIA_MODULE: + return KAF_MYMEDIA_ENDPOINT; + break; + case KAF_MEDIAGALLERY_MODULE: + return KAF_MEDIAGALLERY_ENDPOINT; + break; + case KAF_BROWSE_EMBED_MODULE: + return KAF_BROWSE_EMBED_ENDPOINT; + break; + } + return ''; +} + +/** + * This function replaces the KALTURA_TOKEN_URI in a source URL with KAF URI domain. + * @param string $url A url which need the kaf_uri added. + * @return string Returns url with added KAF URI domain. + */ +function local_kaltura_add_kaf_uri_token($url) { + $configsettings = local_kaltura_get_config(); + // For records that have been migrated from old kaf uri to token format by search and replace. + if (preg_match('/https?:\/\/'.KALTURA_URI_TOKEN.'/', $url)) { + $url = preg_replace('/https?:\/\/'.KALTURA_URI_TOKEN.'/', $configsettings->kaf_uri, $url); + } + return $url; +} + +/** + * This function formats and returns an object that will be passed to mod_lti locallib.php functions. + * @param array $ltirequest An array of parameters to be converted into a properly formatted mod_lti instance. + * @return object Returns an object that meets the requirements for use with mod_lti locallib.php functions. + */ +function local_kaltura_format_lti_instance_object($ltirequest) { + $configsettings = local_kaltura_get_config(); + + // Convert request parameters into mod_lti friendly format for consumption. + $lti = new stdClass(); + $lti->course = $ltirequest['course']->id; + $lti->id = $ltirequest['id']; + $lti->name = $ltirequest['title']; + $lti->intro = isset($ltirequest['intro']) ? $ltirequest['intro'] : ''; + $lti->instructorchoicesendname = LTI_SETTING_ALWAYS; + $lti->instructorchoicesendemailaddr = LTI_SETTING_ALWAYS; + $lti->custom_publishdata = ''; + $lti->instructorcustomparameters = ''; + $lti->instructorchoiceacceptgrades = LTI_SETTING_NEVER; + $lti->instructorchoiceallowroster = LTI_SETTING_NEVER; + $lti->resourcekey = $configsettings->partner_id; + $lti->password = $configsettings->adminsecret; + // The Kaltura tool URL includes the account partner id. + $newuri = $configsettings->kaf_uri; + $lti->toolurl = $newuri; + if (!preg_match('/\/$/',$newuri)) { + $lti->toolurl .= '/'; + } + $lti->toolurl .= local_kaltura_get_endpoint($ltirequest['module']); + // Do not force SSL. At the module level. + $lti->forcessl = 0; + $lti->cmid = $ltirequest['cmid']; + + // Check if a source URL was passed. This means that a plug-in has requested to view a media entry and not a KAF interface. + if (!isset($ltirequest['source']) || empty($ltirequest['source'])) { + // If the Moodle site is configured to use HTTPS then this property will be used. + $lti->securetool = 'https://'.local_kaltura_format_uri(trim($lti->toolurl)); + $lti->toolurl = 'http://'.local_kaltura_format_uri(trim($lti->toolurl)); + } else { + $url = local_kaltura_format_uri($ltirequest['source']); + // If the Moodle site is configured to use HTTPS then this property will be used. + $lti->securetool = 'https://'.trim($url); + $lti->toolurl = 'http://'.trim($url); + } + + return $lti; +} + +/** + * This function formats an array that is passed to mod_lti locallib.php functions. + * @param object $lti An object returned from @see local_kaltura_format_lti_instance_object(). + * @param bool $withblocks Set to true to display blocks. Otherwise false. + * @return array An array formatted for use by mod_lti locallib.php functions. + */ +function local_kaltura_format_typeconfig($lti, $withblocks = true) { + $typeconfig = array(); + $typeconfig['sendname'] = $lti->instructorchoicesendname; + $typeconfig['sendemailaddr'] = $lti->instructorchoicesendemailaddr; + $typeconfig['customparameters'] = $lti->instructorcustomparameters; + $typeconfig['acceptgrades'] = $lti->instructorchoiceacceptgrades; + $typeconfig['allowroster'] = $lti->instructorchoiceallowroster; + $typeconfig['launchcontainer'] = local_kaltura_get_lti_launch_container($withblocks); + return $typeconfig; +} + +/** + * This function is based off of the code from @see lti_view(). + * @param string $endpoint The URL to access the KAF LTI tool. + * @param string $params The signed parameters returned by @see lti_sign_parameters(). + */ +function local_kaltura_strip_querystring($endpoint, $params) { + $endpointurl = new moodle_url($endpoint); + $endpointparams = $endpointurl->params(); + + // Strip querystring params in endpoint url from $parms to avoid duplication. + if (!empty($endpointparams) && !empty($parms)) { + foreach (array_keys($endpointparams) as $paramname) { + if (isset($parms[$paramname])) { + unset($parms[$paramname]); + } + } + } +} + +/** + * This function converts an LTI request object into a properly formatted LTI request that can be consumed by Moodle's LTI local library. + * The function is modeled closely after @see lti_view(). The code was refactored because the original function relied too heavily on + * there being an LTI tool defined in the LTI activity instance table. + * @param array $ltirequest An array with parameters specifying some required information for an LTI launch. + * @param array $withblocks True if Moodle blocks are to be included on the page else false. + * @return string Returns HTML required to initiate an LTI launch. + */ +function local_kaltura_request_lti_launch($ltirequest, $withblocks = true) { + global $CFG, $USER; + + $requestparams = array(); + + $lti = local_kaltura_format_lti_instance_object($ltirequest); + + $typeconfig = local_kaltura_format_typeconfig($lti, $withblocks); + + // This line was taken from @see lti_add_type. + // Create a salt value to be used for signing passed data to extension services + // The outcome service uses the service salt on the instance. This can be used + // for communication with services not related to a specific LTI instance. + $lti->servicesalt = uniqid('', true); + + // If SSL is forced, use HTTPS. + $endpoint = $lti->toolurl; + if (lti_request_is_using_ssl()) { + $endpoint = $lti->securetool; + } + + $requestparams = lti_build_request((object) $lti, $typeconfig, $ltirequest['course']); + + // Moodle by default uses the Moodle user id. Overriding this parameter to user the Moodle username. + $requestparams['user_id'] = $USER->username; + + // This block of code is loosly based off code from @see lti_view(). + $urlparts = parse_url($CFG->wwwroot); + $requestparams['tool_consumer_instance_guid'] = $urlparts['host']; + + $returnurlparams['unsigned'] = '0'; + + // Add the return URL. We send the launch container along to help us avoid frames-within-frames when the user returns. + $url = new moodle_url('/local/kaltura/service.php', $returnurlparams); + $requestparams['launch_presentation_return_url'] = $url->out(false); + + $serviceurl = new moodle_url('/local/kaltura/service.php'); + $requestparams['lis_outcome_service_url'] = $serviceurl->out(false); + + // Add custom parameters + $requestparams['custom_publishdata'] = local_kaltura_get_kaf_publishing_data(); + + // Specific settings for video presentation requests. + if (isset($ltirequest['custom_disable_add_new'])) { + $requestparams['custom_disable_add_new'] = $ltirequest['custom_disable_add_new']; + } + + if (isset($ltirequest['custom_filter_type'])) { + $requestparams['custom_filter_type'] = $ltirequest['custom_filter_type']; + } + + $params = lti_sign_parameters($requestparams, $endpoint, 'POST', $lti->resourcekey, $lti->password); + + local_kaltura_strip_querystring($endpoint, $params); + + $debuglaunch = 0; + + $content = lti_post_launch_html($params, $endpoint, $debuglaunch); + + // Check if debugging is enabled. + $enablelogging = get_config(KALTURA_PLUGIN_NAME, 'enable_logging'); + if (!empty($enablelogging)) { + local_kaltura_log_data($ltirequest['module'], $endpoint, $params, true); + } + + return $content; +} + +/** + * Writes data to the log table. + * @param string $module The module where the request originated from. + * @param string $endpoint The URL the request went out to. + * @param array $data All parameters used to created the request. + * @param bool $request Set to true if this is a request. Set to false if it is a response. + * @return bool True if the log entry was created. Otherwise false. + */ +function local_kaltura_log_data($module, $endpoint, $data, $request = true) { + global $DB; + + if (!is_array($data)) { + return false; + } + + $record = new stdClass(); + $record->type = KALTURA_LOG_RESPONSE; + + // If this is a request being sent out, validate the module and make sure it is a supported module. + if (!empty($request)) { + // Validate whether the module is one that is supported. + if (!local_kaltura_validate_kaf_module_request($module)) { + return false; + } + + $record->type = KALTURA_LOG_REQUEST; + } + + $record->module = $module; + $record->timecreated = time(); + $record->endpoint = $endpoint; + $record->data = serialize($data); + $DB->insert_record('local_kaltura_log', $record); + + return true; +} + +/** + * This functions removes the HTTP protocol and the trailing slash from a URI. + * @param string $uri The URI to format. + * @return string The formatted URI with the protocol and trailing slash removed. + */ +function local_kaltura_format_uri($uri) { + $newuri = str_replace('https://', '', $uri); + $newuri = str_replace('http://', '', $newuri); + $newuri = str_replace('www.', '', $newuri); + $newuri = rtrim($newuri, '/'); + return $newuri; +} + +/** + * This function creates a JSON string of the courses the user is enrolled in and the LTI roles the user has in the course. + * The JSON string is cached in the user's session global for efficiency purposes. + * @return string A JSON data structure outlining the user's LTI roles in all of their enroled courses. + */ +function local_kaltura_get_kaf_publishing_data() { + global $USER, $SITE; + + $role = is_siteadmin($USER->id) ? KALTURA_LTI_ADMIN_ROLE : KALTURA_LTI_INSTRUCTOR_ROLE; + $json = new stdClass(); + $json->courses = array(); + $hascap = false; + + // If the user is not an admin then retrieve all of the user's enroled courses. + if (KALTURA_LTI_ADMIN_ROLE != $role) { + $courses = enrol_get_users_courses($USER->id, true, 'id,fullname', 'fullname ASC'); + } else { + // Calling refactored code that allows for a limit on the number of courses returned. + $courses = local_kaltura_get_user_capability_course('moodle/course:manageactivities', $USER->id, true, 'id,fullname', 'fullname ASC'); + } + + foreach ($courses as $course) { + if ($course->id === $SITE->id) { + // Don't want to include the site id in this list + continue; + } + + if (KALTURA_LTI_ADMIN_ROLE != $role) { + // Check if the user has the manage capability in the course. + $hascap = has_capability('moodle/course:manageactivities', context_course::instance($course->id), $USER->id, false); + $role = $hascap ? KALTURA_LTI_INSTRUCTOR_ROLE : KALTURA_LTI_LEARNER_ROLE; + } + + // The properties must be nameed "courseId", "courseName" and "roles". + $data = new stdClass(); + $data->courseId = $course->id; + $data->courseName = $course->fullname; + $data->roles = $role; + $json->courses[$course->id] = $data; + } + + // Return an array with no pre-defined keys to structure the JSON the way Kaltura needs it to be. + $json->courses = array_values($json->courses); + + return json_encode($json); +} + +/** + * NOTE: This function is refactored from @see get_user_capability_course() from accesslib.php. The difference is the ability to + * limit the number of records returned. + * + * This function gets the list of courses that this user has a particular capability in. + * It is still not very efficient. + * + * @param string $capability Capability in question. + * @param int $userid User ID or null for current user. + * @param bool $doanything True if 'doanything' is permitted (default). + * @param string $fieldsexceptid Leave blank if you only need 'id' in the course records; + * otherwise use a comma-separated list of the fields you require, not including id. + * @param string $orderby If set, use a comma-separated list of fields from course + * table with sql modifiers (DESC) if needed. + * @param string $limit Limit the set of data returned. + * @return array Array of courses, may have zero entries. Or false if query failed. + */ +function local_kaltura_get_user_capability_course($capability, $userid = null, $doanything = true, $fieldsexceptid = '', $orderby = '', $limit = 200) { + global $DB; + + // Convert fields list and ordering. + $fieldlist = ''; + if ($fieldsexceptid) { + $fields = explode(',', $fieldsexceptid); + foreach($fields as $field) { + $fieldlist .= ',c.'.$field; + } + } + if ($orderby) { + $fields = explode(',', $orderby); + $orderby = ''; + foreach($fields as $field) { + if ($orderby) { + $orderby .= ','; + } + $orderby .= 'c.'.$field; + } + $orderby = 'ORDER BY '.$orderby; + } + + // Obtain a list of everything relevant about all courses including context. + // Note the result can be used directly as a context (we are going to), the course + // fields are just appended. + + $contextpreload = context_helper::get_preload_record_columns_sql('x'); + + $courses = array(); + $sql = "SELECT c.id $fieldlist, $contextpreload + FROM {course} c + JOIN {context} x ON (c.id=x.instanceid + AND x.contextlevel=".CONTEXT_COURSE.") + $orderby"; + $rs = $DB->get_recordset_sql($sql, null, 0, $limit); + + // Check capability for each course in turn. + foreach ($rs as $course) { + context_helper::preload_from_record($course); + $context = context_course::instance($course->id); + if (has_capability($capability, $context, $userid, $doanything)) { + // We've got the capability. Make the record look like a course record + // and store it + $courses[] = $course; + } + } + $rs->close(); + return empty($courses) ? array() : $courses; +} + +/** + * This function gets the local configuration and sanitizes the settings. + * @return object Returns object containing configuration settings for kaltura local plugin. + */ +function local_kaltura_get_config() { + $configsettings = get_config(KALTURA_PLUGIN_NAME); + if (empty($configsettings->kaf_uri)) { + $configsettings->kaf_uri = ""; + } + // If a https url is needed for kaf_uri it should be entered into the kaf_uri setting as https://. + if (!empty($configsettings->kaf_uri) && !preg_match('#^https?://#', $configsettings->kaf_uri)) { + $configsettings->kaf_uri = 'http://'.$configsettings->kaf_uri; + } + return $configsettings; +} + +/** + * This functions checks if a URL contains the host name that is configiured for the plug-in. + * @param string $url The URL to validate. + * @return bool Returns true if the URL contains the configured host name. Otherwise false. + */ +function local_kaltura_url_contains_configured_hostname($url) { + $configuration = local_kaltura_get_config(); + $configuri = local_kaltura_format_uri($configuration->kaf_uri); + + if (empty($configuri)) { + return false; + } + $position = strpos($url, $configuri); + if (false === $position) { + return false; + } + + return true; +} + +/** + * This function returns the URL parameter with a protocol prefixed, if non was detected. http:// is used by default if no protocol is found. + * @param string $url The URL to verify. + * @return string Returns the URL with the protocol. An empty string is returned in the case of an exception being thrown. + */ +function local_kaltura_add_protocol_to_url($url) { + $newurl = ''; + if (0 === strpos($url, 'https://')) { + $newurl = $url; + } else if (0 === strpos($url, 'http://')) { + $newurl = $url; + } else { + $newurl = 'http://'.$url; + } + + try { + $newurl = validate_param($newurl, PARAM_URL); + } catch (invalid_parameter_exception $e) { + return ''; + } + + return $newurl; +} + +/** + * This function searlizes an object or array and base 64 encodes it for storage into a table. + * @param array|object $object An object or array. + * @return string A base 64 encoded string of the parameter. + */ +function local_kaltura_encode_object_for_storage($object) { + // Check if the parameter either an object or array of if it's empty. + $data = $object; + if (!is_array($data)) { + $data = (array) $data; + } + + if (empty($data) || (!is_array($object) && !is_object($object))) { + return ''; + } + + return base64_encode(serialize($object)); +} + +/** + * This function base 64 decodes and unsearlizes an object. + * @param string $object A base 64 encoded string. + * @return array|object An array or object. + */ +function local_kaltura_decode_object_for_storage($object) { + // Check if the parameter is empty. + if (empty($object)) { + return ''; + } + + return unserialize(base64_decode($object)); +} + +/** + * This function takes a KalturaMediaEntry or KalturaDataEntry object and converts it into a Moodle metadata object. + * @param KalturaMediaEntry $object A KalturaMediaEntry object + * @return object|bool A slimed down version of the KalturaMediaEntry object, with slightly different object property names. Or false if an error was found. + */ +function local_kaltura_convert_kaltura_base_entry_object($object) { + $metadata = new stdClass; + + if ($object instanceof KalturaMediaEntry) { + + $metadata->url = ''; + $metadata->dataurl = $object->dataUrl; + $metadata->width = $object->width; + $metadata->height = $object->height; + $metadata->entryid = $object->id; + $metadata->title = $object->name; + $metadata->thumbnailurl = $object->thumbnailUrl; + $metadata->duration = $object->duration; + $metadata->description = $object->description; + $metadata->createdat = $object->createdAt; + $metadata->owner = $object->creatorId; + $metadata->tags = $object->tags; + $metadata->showtitle = 'on'; + $metadata->showdescription = 'on'; + $metadata->showowner = 'on'; + $metadata->player = ''; + $metadata->size = ''; + } else if ($object instanceof KalturaDataEntry) { + + $metadata->url = ''; + $metadata->dataurl = ''; + $metadata->url = ''; + $metadata->width = 0; + $metadata->height = 0; + $metadata->entryid = $object->id; + $metadata->title = $object->name; + $metadata->thumbnailurl = $object->thumbnailUrl; + $metadata->duration = 0; + $metadata->description = $object->description; + $metadata->createdat = $object->createdAt; + $metadata->owner = $object->creatorId; + $metadata->tags = $object->tags; + $metadata->showtitle = 'on'; + $metadata->showdescription = 'on'; + $metadata->showowner = 'on'; + $metadata->player = ''; + $metadata->size = ''; + } else { + $metadata = false; + } + + return $metadata; +} \ No newline at end of file diff --git a/local/kaltura/migration.php b/local/kaltura/migration.php new file mode 100644 index 0000000000000..0d4cc51b72f86 --- /dev/null +++ b/local/kaltura/migration.php @@ -0,0 +1,114 @@ +. + +/** + * Migration page. + * + * @package local_kaltura + * @author Remote-Learner.net Inc + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + * @copyright (C) 2014 Remote Learner.net Inc http://www.remote-learner.net + */ + +require_once('../../config.php'); +require_once($CFG->dirroot.'/local/kaltura/migration_form.php'); +require_once('locallib.php'); +require_once('API/KalturaClient.php'); +require_once($CFG->libdir.'/xmldb/xmldb_object.php'); +require_once($CFG->libdir.'/xmldb/xmldb_table.php'); +require_once('migrationlib.php'); + +$url = new moodle_url('/local/kaltura/migration.php'); +$context = context_system::instance(); +$heading = get_string('migration_header', 'local_kaltura'); +$site = get_site(); + +$PAGE->navbar->add(get_string('administrationsite')); +$PAGE->navbar->add(get_string('plugins', 'admin')); +$PAGE->navbar->add(get_string('localplugins')); +$PAGE->navbar->add(get_string('pluginname', 'local_kaltura'), new moodle_url('/admin/settings.php', array('section' => 'local_kaltura'))); +$PAGE->navbar->add(get_string('migration_header', 'local_kaltura')); + +$PAGE->set_url($url); +$PAGE->set_context($context); + +$PAGE->set_pagelayout('standard'); +$PAGE->set_pagetype('local-kaltura-migration'); +$PAGE->set_title($heading); +$PAGE->set_heading($site->fullname); + +require_login(null, false); + +require_capability('local/kaltura:migrate_data', $context); + +$url = new moodle_url('/admin/settings.php', array('section' => 'local_kaltura')); + +$form = new local_kaltura_migration_form(); +$redirectmessage = ''; + +if ($data = $form->get_data()) { + // User hit cancel. Redirect them back to the settings page. + if (isset($data->cancel)) { + redirect($url); + } + + require_sesskey(); + $migrationstats = new local_kaltura_migration_progress(); + + // User hit submit button. Check for records since the configured date. + if (isset($data->submitbutton)) { + // Set the migration start time and initialize the KAF root category id. + if (0 == local_kaltura_migration_progress::get_migrationstarted()) { + local_kaltura_migration_progress::init_migrationstarted(); + local_kaltura_migration_progress::set_kafcategoryrootid($data->kafcategory); + } + + // An array mapping of old categories to new categories. + $cachedcategories = array(); + + // Migrate entries that belong to categories under the old rood category. + list($categoryentries, $cachedcategories) = local_kaltura_move_entries_to_kaf_category_tree($data->kafcategory, 1); + // Migrate entries that are associated with the old profile id and contain metadata. + $metadataentries = local_kaltura_move_metadata_entries_to_kaf_category_tree($data->kafcategory, 1); + $redirectmessage = get_string('migration_has_stopped', 'local_kaltura'); + + // Migrate video presentation entries. + local_kaltura_migrate_video_presentation_entries($data->kafcategory, $cachedcategories); + + // Update the Kaltura activities. + local_kaltura_update_activities(); + + // If both variables are null, then there is nother more to migrate. + if (is_null($categoryentries) && is_null($metadataentries)) { + // Hide migration is needed message on settings page. + set_config('migration_yes', 0, KALTURA_PLUGIN_NAME); + $redirectmessage = get_string('migration_complete_redirect', 'local_kaltura'); + } + } else if (isset($data->startover)) { + local_kaltura_migration_progress::reset_all(); + $redirectmessage = get_string('migration_start_over_redirect', 'local_kaltura'); + } + + $migrationurl = new moodle_url('/local/kaltura/migration.php'); + redirect($migrationurl, $redirectmessage, 5); +} + +local_kaltura_retrieve_repository_settings(); + +echo $OUTPUT->header(); +echo $OUTPUT->heading(get_string('migration_header', 'local_kaltura')); +$form->display(); +echo $OUTPUT->footer(); diff --git a/local/kaltura/migration_form.php b/local/kaltura/migration_form.php new file mode 100644 index 0000000000000..c12ec9193908f --- /dev/null +++ b/local/kaltura/migration_form.php @@ -0,0 +1,77 @@ +. + +/** + * Migrate data form. + * + * @package local_kaltura + * @author Remote-Learner.net Inc + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + * @copyright (C) 2014 Remote Learner.net Inc http://www.remote-learner.net + */ + +defined('MOODLE_INTERNAL') || die; + +require_once($CFG->libdir.'/formslib.php'); + +/** + * Download Kaltura logs form class. + */ +class local_kaltura_migration_form extends moodleform { + /** + * This function defines the elements on the form. + */ + public function definition() { + $mform =& $this->_form; + + $categories = local_kaltura_get_categories(); + $migrationstats = new local_kaltura_migration_progress(); + + $mform->addElement('header', 'setup', get_string('options')); + + // If was never started, print a status message, otherwise print the date the migration originally started. + $notstarted = get_string('migration_not_started', 'local_kaltura'); + $startedtimestamp = local_kaltura_migration_progress::get_migrationstarted(); + $datestarted = userdate($startedtimestamp); + $message = empty($startedtimestamp) ? $notstarted : $datestarted; + + // Print more stats on the current state of the migration. + $mform->addElement('static', 'migration_start_time', get_string('migration_start_time', 'local_kaltura'), $message); + $mform->addElement('static', 'entries_migrated', get_string('entries_migrated', 'local_kaltura'), local_kaltura_migration_progress::get_entriesmigrated()); + $mform->addElement('static', 'categories created', get_string('categories_created', 'local_kaltura'), local_kaltura_migration_progress::get_categoriescreated()); + + $buttonarray = array(); + + $mform->addElement('select', 'kafcategory', get_string('migration_select_a_category', 'local_kaltura'), $categories); + + $catid = local_kaltura_migration_progress::get_kafcategoryrootid(); + + // If the migration was started perviously, then prevent the user from chaning the migration category by disabling the drop down, but setting the default value. + $migrationstarted = local_kaltura_migration_progress::get_migrationstarted(); + if (!empty($migrationstarted) && !empty($catid) && isset($categories[$catid])) { + $mform->addElement('hidden', 'disabledropdown', $catid); + $mform->setType('disabledropdown', PARAM_INT); + + $mform->setDefault('kafcategory', $catid); + $mform->disabledIf('kafcategory', 'disabledropdown', 'eq', $catid); + } + + $buttonarray[] =& $mform->createElement('submit', 'submitbutton', get_string('migration_start_continue', 'local_kaltura')); + $buttonarray[] =& $mform->createElement('submit', 'startover', get_string('startover', 'local_kaltura')); + $buttonarray[] =& $mform->createElement('submit', 'cancel', get_string('back')); + $mform->addGroup($buttonarray, 'buttonar', '', array(' '), false); + } +} diff --git a/local/kaltura/migrationlib.php b/local/kaltura/migrationlib.php new file mode 100644 index 0000000000000..9410f20d79d05 --- /dev/null +++ b/local/kaltura/migrationlib.php @@ -0,0 +1,1067 @@ +. + +/** + * Kaltura migration functions. The migration consists of two parts. The first part is retrieving all Kaltura media entries that were created anytime before + * the current date; associate those entries to a different category structure used by the KAF instance. The second part is to look at the metadata for the + * Kaltura entry and associate the entry to a category structure used by the KAF instance. Some Kaltura entries may have been uploaded but never used within + * a Moodle course, so this is the reason why we must initially retrieve all entries by created date and not by Kaltura category . + * + * @package local_kaltura + * @author Remote-Learner.net Inc + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + * @copyright (C) 2014 Remote Learner.net Inc http://www.remote-learner.net + */ + +if (!defined('MOODLE_INTERNAL')) { + die('Direct access to this script is forbidden.'); +} + +/* This constant is used in the recursive functions as a hard stop flag. The recursive functions will not go any deeper than this value. */ +define('KALTURA_MIGRATION_HARD_STOP', 5); +/* Constants used for padding height and witch values when migrating kaltura entries for video resource, presentation and media assignment. */ +define('KALTURA_MIGRATION_HEIGHT_PADDING', 100); +define('KALTURA_MIGRATION_WIDTH_PADDING', 50); +define('KALTURA_MIGRATION_DEFAULT_HEIGHT', 285); +define('KALTURA_MIGRATION_DEFAULT_WIDTH', 400); + +/** + * This function creates a connection to Kaltura. + * @return KalturaConfiguration A Kaltura client object. + */ +function local_kaltura_get_kaltura_client() { + global $USER; + + static $client = null; + + if (!is_null($client)) { + return $client; + } + + $configsettings = get_config(KALTURA_PLUGIN_NAME); + $config = new KalturaConfiguration($configsettings->partner_id); + $client = new KalturaClient($config); + + try { + $ks = $client->generateSession($configsettings->adminsecret, $USER->id, KalturaSessionType::ADMIN, $configsettings->partner_id); + $client->setKs($ks); + } catch (Exception $ex) { + $url = new moodle_url('/admin/settings.php', array('section' => 'local_kaltura')); + notice(get_string('migration_cannot_connect', 'local_kaltura'), $url); + } + + return $client; +} + +/** + * This function validates that a root category and a profile id have set. The root category is then queried to find a category id. + */ +function local_kaltura_retrieve_repository_settings() { + $rootcategoryid = get_config(KALTURA_PLUGIN_NAME, 'migration_source_category'); + $metadataprofileid = get_config(KALTURA_PLUGIN_NAME, 'migration_metadata_profile_id'); + + // If the root category id configuration option is empty, try to retrieve the value from the repository config settings. + if (empty($rootcategoryid)) { + $rootcategoryid = get_config(KALTURA_REPO_NAME, 'rootcategory_id'); + + if (empty($rootcategoryid)) { + notice(get_string('migration_root_category_not_set', 'local_kaltura')); + } + + set_config('migration_source_category', $rootcategoryid, KALTURA_PLUGIN_NAME); + } + + // If the metdata profile id configuration option is empty, try to retrieve the value from the repository config settings. + if (empty($metadataprofileid)) { + $metadataprofileid = get_config(KALTURA_REPO_NAME, 'metadata_profile_id'); + + if (empty($metadataprofileid)) { + notice(get_string('migration_profile_id_not_set', 'local_kaltura')); + } + + set_config('migration_metadata_profile_id', $metadataprofileid, KALTURA_PLUGIN_NAME); + } +} + +/** + * This function returns an array of all of the Kaltura categories. + * + * @return array An array of Kaltura category names. + */ +function local_kaltura_get_categories() { + static $list = array(); + + $client = local_kaltura_get_kaltura_client(); + $filter = null; + $pager = null; + + if (empty($list)) { + // Get a list of Kaltura categories. + $result = $client->category->listAction($filter, $pager); + + if ($result instanceof KalturaCategoryListResponse && 0 < count($result->objects)) { + foreach ($result->objects as $category) { + $list[$category->id] = $category->name; + } + asort($list); + } + } + + return $list; +} + +/** + * This function retrieves all Kaltura entries that were created before a specified date; and moves the entries to the new KAF category location. + * @param int $targetparentcatid The root category id configured for the KAF instance. + * @param int $index The page number to return from the paged API output. + * @param int $numofentries The number of entries to return from the API with. + * @return array An array whose index is the Kaltura entry id and value is an array of Kaltura category ids. + */ +function local_kaltura_move_entries_to_kaf_category_tree($targetparentcatid, $index = 1, $numofentries = 100) { + // The timestamp used to retrieve Kaltura entries that were created by or before the date. + static $createdby = 0; + // Which page is currently being processed. + static $pageindex = 1; + // The Kaltura plug-in settings variables. + static $reposettings = null; + // An array whose id is Kaltura entry ids; and value is an array of Kaltura category ids the entry belongs to. + static $entries = null; + // An object whose properties are: id - the 'channels' category id, fullname - the full path of the category. + static $channelscategory = null; + // An array of cached old to new category mappings. array(old category id => new category id). + static $cachedcategories = array(); + // An array of categories that currently exist on Kaltura. This is used to quickly retrieve the name of the category via the category id. + // Ex. array(old category id => category name). + static $currentcategories = null; + static $stop = 0; + + if (is_null($currentcategories)) { + $currentcategories = local_kaltura_get_categories(); + } + + // Retrieve the repository settings. + if (is_null($reposettings)) { + $reposettings = get_config(KALTURA_PLUGIN_NAME); + } + + // Set the timestamp for Kaltura entries created before the created by value. + if (empty($createdby)) { + $time = local_kaltura_migration_progress::get_existingcategoryrun(); + $createdby = empty($time) ? time() : $time; + } + + $client = local_kaltura_get_kaltura_client(); + + // Set the channels category ID. + if (is_null($channelscategory)) { + $channelscategory = local_kaltura_get_channels_id($client, $targetparentcatid); + } + + $pageindex = $index; + + // Create a Kaltura base filter object. + $filter = new KalturaBaseEntryFilter(); + $filter->categoryAncestorIdIn = $reposettings->migration_source_category; + $filter->createdAtLessThanOrEqual = $createdby; + $filter->orderBy = KalturaBaseEntryOrderBy::CREATED_AT_DESC; + + // Set page size and the page index. + $pager = new KalturaFilterPager(); + $pager->pageSize = $numofentries; + $pager->pageIndex = $pageindex; + + // Retrieve the Kaltura entry objects. + $result = $client->baseEntry->listAction($filter, $pager); + + // If the request was successful and the number of entries returned was greater than zero, get the old category ids and assign the entries them to the new KAF categories. + if ($result instanceof KalturaBaseEntryListResponse) { + if (0 < count($result->objects)) { + // Populate the entries array with key: entry id and value: an array of category ids the entry belongs to. + $entries = local_kaltura_get_entry_categories($client, $reposettings->migration_source_category, $result->objects); + + // Iterate over the array of entries and check if the category the entry belongs to has also been created under the new target category. + $cachedcategories = local_kaltura_assign_entries_to_new_categories($client, $entries, $channelscategory, $cachedcategories, $currentcategories); + + $lastentry = end($result->objects); + local_kaltura_migration_progress::set_existingcategoryrun($lastentry->createdAt - 1); + } else { + return null; + } + } + + // Increment the page index. + $pageindex++; + $stop++; + + // Check if the hard stop condition has reached. + if (KALTURA_MIGRATION_HARD_STOP == $stop) { + return array($entries, $cachedcategories); + } + + // Recusive call to retrieve the next set of Kaltura entries. + return local_kaltura_move_entries_to_kaf_category_tree($targetparentcatid, $pageindex, $numofentries); +} + +/** + * This function retrieves all Kaltura entries, created before a specified date and containing profile metadata; and moves the entries to the new KAF category location. + * @param int $targetparentcatid The root category id configured for the KAF instance. + * @param int $index The page number to return from the paged API output. + * @param int $numofentries The number of entries to return from the API with. + * @return array An array whose index is the Kaltura entry id and value is an array of Kaltura category ids. + */ +function local_kaltura_move_metadata_entries_to_kaf_category_tree($targetparentcatid, $index = 1, $numofentries = 100) { + // The timestamp used to retrieve Kaltura entries that were created by or before the date. + static $createdby = 0; + // Which page is currently being processed. + static $pageindex = 1; + // The Kaltura plug-in settings variables. + static $reposettings = null; + // An array whose id is Kaltura entry ids; and value is an array of Kaltura category ids the entry belongs to. + static $entries = null; + // An object whose properties are: id - the 'channels' category id, fullname - the full path of the category. + static $channelscategory = null; + // An object whose properties are: id - the 'Shared Repository' category id, fullname - the full path of the category. + static $sharedrepocategory = null; + // An array of cached old to new category mappings. array(old category id => new category id). + static $cachedcategories = array(); + // An array of categories that currently exist on Kaltura. This is used to quickly retrieve the name of the category via the category id. + // Ex. array(old category id => category name). + static $currentcategories = null; + // A hard stop condition for the recursive method. + static $stop = 0; + + if (is_null($currentcategories)) { + $currentcategories = local_kaltura_get_categories(); + } + // Retrieve the repository settings. + if (is_null($reposettings)) { + $reposettings = get_config(KALTURA_PLUGIN_NAME); + } + + // Set the timestamp for Kaltura entries created before the created by value. + if (empty($createdby)) { + $time = local_kaltura_migration_progress::get_sharedcategoryrun(); + $createdby = empty($time) ? time() : $time; + } + + $client = local_kaltura_get_kaltura_client(); + + // Set the channels category ID. + if (is_null($channelscategory)) { + $channelscategory = local_kaltura_get_channels_id($client, $targetparentcatid); + } + + // Set the siteshared category ID. Using the channels category id as the parent. + if (is_null($sharedrepocategory)) { + $sharedrepocategory = local_kaltura_get_sharedrepo_id($client, $channelscategory->id, $targetparentcatid); + // Add the 'Shared Repository' category id to the array of cached categories. + $cachedcategories['sharedrepository'] = $sharedrepocategory->id; + } + + $pageindex = $index; + + // Retrieve all of the entries were created by a certain time and associated with a specific profile id. + $filter = new KalturaBaseEntryFilter(); + $filter->advancedSearch = new KalturaMetadataSearchItem(); + $filter->advancedSearch->type = KalturaSearchOperatorType::SEARCH_OR; + $filter->advancedSearch->metadataProfileId = $reposettings->migration_metadata_profile_id; + $filter->createdAtLessThanOrEqual = $createdby; + $filter->freeText = '*'; + $filter->orderBy = KalturaBaseEntryOrderBy::CREATED_AT_DESC; + + $pager = new KalturaFilterPager(); + $pager->pageSize = $numofentries; + $pager->pageIndex = $pageindex; + + $result = $client->baseEntry->listAction($filter, $pager); + + // If the request was successful and the number of entries returned was greater than zero, get the old category ids and assign the entries them to the new KAF categories. + if ($result instanceof KalturaBaseEntryListResponse) { + if (0 < count($result->objects)) { + // Populate the entries array with key: entry id and value: an array of category ids the entry belongs to. + list($entries, $currentcategories) = local_kaltura_get_entry_metadata($client, $result->objects, $reposettings->migration_metadata_profile_id, $currentcategories); + + // Iterate over the array of entries and check if the category the entry belongs to has also been created under the new target category. + $cachedcategories = local_kaltura_assign_entries_to_new_course_categories($client, $entries, $channelscategory, $cachedcategories, $currentcategories); + + // Get the date of the last processed entry and set the shared category run date. This allows the user to continue the migration exactly where the + // previous run left off. + $lastentry = end($result->objects); + local_kaltura_migration_progress::set_sharedcategoryrun($lastentry->createdAt - 1); + } else { + return null; + } + } + + // Increment the page index. + $pageindex++; + $stop++; + + // Check if the hard stop condition has reached. + if (KALTURA_MIGRATION_HARD_STOP == $stop) { + return $entries; + } + + // Recusive call to retrieve the next set of Kaltura entries. + return local_kaltura_move_metadata_entries_to_kaf_category_tree($targetparentcatid, $pageindex, $numofentries); +} + +/** + * This function assigns the Kaltura entries to the new KAF categories. + * Future TODO: Improve the progress tracking of this method, by inspecting the results of API calls and find entries that already existed but were part of a multi request. + * + * @param KalturaConfiguration $client A Kaltura client object. + * @param array $entries An array whose key is Kaltura entry ids and value is an array of category ids. + * @param int $parentcategory The 'channels' category object whose properties are id and fullname. + * @param array $cachedcategories An array of cateogires that have been created under the KAF root category. + * The array key is the category name and value is the category ids. + * @param array $currentcategories An array of current category ids and their names @see local_kaltura_get_categories() + * @return array An array of cateogires that have been created under the KAF root category. The array key is the category name and value is the category ids. + */ +function local_kaltura_assign_entries_to_new_categories($client, $entries, $parentcategory, $cachedcategories, $currentcategories) { + $newcategory = 0; + $counter = 1; + + foreach ($entries as $entryid => $entrycategories) { + foreach ($entrycategories as $oldcategoryid) { + // Check if the category exists in the cached categories. + if (isset($cachedcategories[$oldcategoryid])) { + // Check if the entry was already added to the 'InContext' category. If not then assign it to the category. + $filter = new KalturaCategoryEntryFilter(); + $filter->categoryIdEqual = $cachedcategories[$oldcategoryid]; + $filter->entryIdEqual = $entryid; + $pager = null; + $result = $client->categoryEntry->listAction($filter, $pager); + + if ($result instanceof KalturaCategoryEntryListResponse && 0 == $result->totalCount) { + // Assign the entry to the 'InContext' category. + $categoryentry = new KalturaCategoryEntry(); + $categoryentry->categoryId = $cachedcategories[$oldcategoryid]; + $categoryentry->entryId = $entryid; + $result = $client->categoryEntry->add($categoryentry); + + local_kaltura_migration_progress::increment_entriesmigrated(); + } + } else { + // Get the name of the old root category. + $oldrootcategoryname = $currentcategories[$oldcategoryid]; + + // Check if the category exists under the KAF root matching on the category name. + $filter = new KalturaCategoryFilter(); + $filter->parentIdEqual = $parentcategory->id; + $filter->fullNameEqual = "{$parentcategory->fullname}>{$oldrootcategoryname}"; + $pager = null; + $result = $client->category->listAction($filter, $pager); + + // Cache the result or create a new category and cache the result. + if ($result instanceof KalturaCategoryListResponse && 1 == $result->totalCount) { + // Start multi-request, this will send multiple API calls as one batch request. + $client->startMultiRequest(); + // Get the 'InContext' sub category. + $filter = new KalturaCategoryFilter(); + $filter->parentIdEqual = $result->objects[0]->id; + $pager = null; + $client->category->listAction($filter, $pager); + + // Assign the entry to the 'InContext' sub category. + $categoryentry = new KalturaCategoryEntry(); + $categoryentry->categoryId = '{1:result:objects:0:id}'; + $categoryentry->entryId = $entryid; + $client->categoryEntry->add($categoryentry); + + $multirequest = $client->doMultiRequest(); + + local_kaltura_migration_progress::increment_entriesmigrated(); + + // Cache the mappting between the old category id and the 'InContext' category id. + $cachedcategories[$oldcategoryid] = $multirequest[0]->objects[0]->id; + } else { + // Start multi-request, this will send multiple API calls as one batch request. + $client->startMultiRequest(); + + $category = new KalturaCategory(); + $category->parentId = $parentcategory->id; + $category->name = $oldrootcategoryname; + $category->moderation = KalturaNullableBoolean::TRUE_VALUE; + $client->category->add($category); + + // Create the 'InContext' category under the new category. + $category = new KalturaCategory(); + $category->name = 'InContext'; + $category->parentId = '{1:result:id}'; + $category->moderation = KalturaNullableBoolean::TRUE_VALUE; + $client->category->add($category); + + $categoryentry = new KalturaCategoryEntry(); + $categoryentry->categoryId = '{2:result:id}'; + $categoryentry->entryId = $entryid; + $client->categoryEntry->add($categoryentry); + + $multirequest = $client->doMultiRequest(); + + local_kaltura_migration_progress::increment_entriesmigrated(); + // Increment categories twice. Once for the course name, the other for the 'InContext'. + local_kaltura_migration_progress::increment_categoriescreated(); + local_kaltura_migration_progress::increment_categoriescreated(); + + // Cache the mappting between the old category id and the 'InContext' category id. + $cachedcategories[$oldcategoryid] = $multirequest[1]->id; + } + } + } + } + return $cachedcategories; +} + +/** + * This is a refactored function of @see local_kaltura_assign_entries_to_new_categories(). The difference is that this adds a Kaltura media to the category + * Kaltura course category and not the 'InContext' sub-category of the course category. + * Future TODO: Improve the progress tracking of this method, by inspecting the results of API calls and find entries that already existed but were part of a multi request. + * + * @param KalturaConfiguration $client A Kaltura client object. + * @param array $entries An array whose key is Kaltura entry ids and value is an array of category ids. + * @param int $parentcategory The 'channels' category object whose properties are id and fullname. + * @param array $cachedcategories An array of cateogires that have been created under the KAF root category. + * The array key is the category name and value is the category ids. + * @param array $currentcategories An array of current category ids and their names @see local_kaltura_get_categories() + * @return array An array of cateogires that have been created under the KAF root category. The array key is the category name and value is the category ids. + */ +function local_kaltura_assign_entries_to_new_course_categories($client, $entries, $parentcategory, $cachedcategories, $currentcategories) { + $newcategory = 0; + $counter = 1; + + // Check if $entries is an array. + if (!is_array($entries)) { + return $cachedcategories; + } + + foreach ($entries as $entryid => $entrycategories) { + foreach ($entrycategories as $oldcategoryid) { + // Check if the course category exists in the cached categories. + if (isset($cachedcategories[$oldcategoryid])) { + // Check if the entry was already added to the course category. If not then assign it to the category. + $filter = new KalturaCategoryEntryFilter(); + $filter->categoryIdEqual = $cachedcategories[$oldcategoryid]; + $filter->entryIdEqual = $entryid; + $pager = null; + $result = $client->categoryEntry->listAction($filter, $pager); + + if ($result instanceof KalturaCategoryEntryListResponse && 0 == $result->totalCount) { + // Assign the entry to the course category. + $categoryentry = new KalturaCategoryEntry(); + $categoryentry->categoryId = $cachedcategories[$oldcategoryid]; + $categoryentry->entryId = $entryid; + $client->categoryEntry->add($categoryentry); + + local_kaltura_migration_progress::increment_entriesmigrated(); + } + } else { + // Get the name of the old root category. + $oldrootcategoryname = $currentcategories[$oldcategoryid]; + + // Check if the category exists under the KAF root matching on the category name. + $filter = new KalturaCategoryFilter(); + $filter->parentIdEqual = $parentcategory->id; + $filter->fullNameEqual = "{$parentcategory->fullname}>{$oldrootcategoryname}"; + $pager = null; + $result = $client->category->listAction($filter, $pager); + + // Cache the result or create a new category and cache the result. + if ($result instanceof KalturaCategoryListResponse && 1 == $result->totalCount) { + + // Assign the entry to the course category. + $categoryentry = new KalturaCategoryEntry(); + $categoryentry->categoryId = $result->objects[0]->id; + $categoryentry->entryId = $entryid; + $categoryresult = $client->categoryEntry->add($categoryentry); + + // If the result is a KalturaCategoryEntry then cache the category id. + if ($categoryresult instanceof KalturaCategoryEntry) { + // Cache the mapping between the old category id and the course category id. + $cachedcategories[$oldcategoryid] = $categoryresult->categoryId; + + local_kaltura_migration_progress::increment_entriesmigrated(); + } + } else { + // Start multi-request, this will send multiple API calls as one batch request. + $client->startMultiRequest(); + + $category = new KalturaCategory(); + $category->parentId = $parentcategory->id; + $category->name = $oldrootcategoryname; + $category->moderation = KalturaNullableBoolean::TRUE_VALUE; + $client->category->add($category); + + // Add the Kaltura media to the new course category. + $categoryentry = new KalturaCategoryEntry(); + $categoryentry->categoryId = '{1:result:id}'; + $categoryentry->entryId = $entryid; + $client->categoryEntry->add($categoryentry); + + $multirequest = $client->doMultiRequest(); + + local_kaltura_migration_progress::increment_entriesmigrated(); + // Increment categories created. + local_kaltura_migration_progress::increment_categoriescreated(); + + // Cache the mappting between the old category id and the course category id. + $cachedcategories[$oldcategoryid] = $multirequest[0]->id; + } + } + } + } + return $cachedcategories; +} + +/** + * This function returns the 'channels' category id, using the KAF root category id as part of the filter. The 'channels' category is created + * automatically when the user creates a new KAF instance. This function only needs to determine the category id. It does not need to create it. + * @param KalturaConfiguration $client A Kaltura client object. + * @param int $rootcatid The KAF root category id. + * @return object|bool An object whose properties are id and fullname, or false it's not found. + */ +function local_kaltura_get_channels_id($client, $rootcatid) { + // Retrieve the array of categories and get the name of the parent category. + $catnames = local_kaltura_get_categories(); + $parentcatname = $catnames[$rootcatid]; + + $filter = new KalturaCategoryFilter(); + $filter->ancestorIdIn = $rootcatid; + $filter->fullNameStartsWith = "$parentcatname>site>channels"; + $pager = null; + $result = $client->category->listAction($filter, $pager); + + if ($result instanceof KalturaCategoryListResponse && 0 < $result->totalCount) { + $category = new stdClass(); + $category->id = $result->objects[0]->id; + $category->fullname = "$parentcatname>site>channels"; + return $category; + } else { + return false; + } +} + +/** + * This function returns the 'Shared Repository' category id, using the channels category id as part of the filter. If the the category doesn't exist + * then is must be created. + * @param KalturaConfiguration $client A Kaltura client object. + * @param int $channelsid The channels category id. + * @param int $rootcatid The KAF root category id. + * @return object|bool An object whose properties are id and fullname. + */ +function local_kaltura_get_sharedrepo_id($client, $channelsid, $rootcatid) { + // Retrieve the array of categories and get the name of the parent category. + $catnames = local_kaltura_get_categories(); + $parentcatname = $catnames[$rootcatid]; + $siterepocat = new stdClass(); + + $filter = new KalturaCategoryFilter(); + $filter->parentIdEqual = $channelsid; + $filter->fullNameStartsWith = "$parentcatname>site>channels>Shared Repository"; + $pager = null; + $result = $client->category->listAction($filter, $pager); + + // If he category already exists. + if ($result instanceof KalturaCategoryListResponse && 0 < $result->totalCount) { + $siterepocat->id = $result->objects[0]->id; + $siterepocat->fullname = $result->objects[0]->fullName; + return $siterepocat; + } else { + // Create 'Shared Repository' category. + $category = new KalturaCategory(); + $category->parentId = $channelsid; + $category->name = 'Shared Repository'; + $category->moderation = KalturaNullableBoolean::TRUE_VALUE; + $result = $client->category->add($category); + + if ($result instanceof KalturaCategory) { + $siterepocat->id = $result->id; + $siterepocat->fullname = $result->fullName; + } + + local_kaltura_migration_progress::increment_categoriescreated(); + + return $siterepocat; + } +} + +/** + * This function retreives the custom metadata associated with a Kaltura entry. + * @param KalturaConfiguration $client A Kaltura client object. + * @param KalturaBaseEntryListResponse $entrylist An array of Kaltura entry objects. + * @param int $profileid A profile id. + * @param array $currentcategories An array of current category ids and their names @see local_kaltura_get_categories() + * @return Array An array. The first index is an array of Kaltura entry ids array(kaltura entry id => array(categories)). The second index + * is an array of current courses that will need to be created array(old category id => old category name). + */ +function local_kaltura_get_entry_metadata($client, $entrylist, $profileid, $currentcategories) { + $entries = array(); + $categories = array(); + + // Start multi-request, this will send multiple API calls as one batch request. + $client->startMultiRequest(); + + // Iterate ver each entry. Add it to the entries array (setting the entryid as the key), then retrieve the categories the entry belongs to. + foreach ($entrylist as $entry) { + // Call an API function to return all of the categories the entry belongs to. + $entries[$entry->id] = array(); + + $filter = new KalturaMetadataFilter(); + $filter->metadataProfileIdEqual = $profileid; + $filter->metadataObjectTypeEqual = KalturaMetadataObjectType::ENTRY; + $filter->objectIdEqual = $entry->id; + $pager = null; + $metadataplugin = KalturaMetadataClientPlugin::get($client); + $metadataplugin->metadata->listAction($filter, $pager); + } + + $multirequest = $client->doMultiRequest(); + + if (is_array($multirequest)) { + foreach ($multirequest as $metadatalists) { + if (is_array($metadatalists->objects)) { + foreach ($metadatalists->objects as $entrymetadata) { + // Get the metadata XML. + $xml = new SimpleXMLElement($entrymetadata->xml); + if (isset($xml->CourseShare)) { + $tempcat = (array) $xml->CourseShare; + // Add each category to the current categories array, as it will be required by the @see local_kaltura_assign_entries_to_new_categories(). + // With course shared metadata, the category may not actually exist yet. So insert a place holder that can be easily referenced in later functions. + foreach ($tempcat as $categoryname) { + $currentcategories["cs_$categoryname"] = $categoryname; + $categories[] = "cs_$categoryname"; + } + } + + if (1 == $xml->SystemShare) { + $categories[] = 'sharedrepository'; + } + + $entries[$entrymetadata->objectId] = $categories; + $categories = array(); + } + } + } + } + return array($entries, $currentcategories); +} + +/** + * This function retrieves all of the categories belonging to a Kaltura entry. + * @param KalturaConfiguration $client A Kaltura client object. + * @param int $rootcategoryid The Kaltura root category id. + * @param KalturaBaseEntryListResponse $entrylist An array of Kaltura entry objects. + * @return array An array of Kaltura entry ids where the keys of the array are the Kaltura entry ids and the values are array of Kaltura category ids. + */ +function local_kaltura_get_entry_categories($client, $rootcateogryid, $entrylist) { + $entries = array(); + + // Start multi-request, this will send multiple API calls as one batch request. + $client->startMultiRequest(); + + // Iterate ver each entry. Add it to the entries array (setting the entryid as the key), then retrieve the categories the entry belongs to. + foreach ($entrylist as $entry) { + // Call an API function to return all of the categories the entry belongs to. + $entries[$entry->id] = array(); + + $catfilter = new KalturaCategoryEntryFilter(); + $catfilter->entryIdEqual = $entry->id; + $catpager = new KalturaFilterPager(); + // Category limit per entry is 32, 100 is a high-enough limit. + $catpager->pageSize = 100; + $catpager->pageIndex = 1; + $client->categoryEntry->listAction($catfilter, $catpager); + } + + // Send the batch API request. + $multirequest = $client->doMultiRequest(); + $categories = array(); + $entryid = ''; + + // Iterate over an array of KalturaCategoryEntryListResponse results and save the category ids. + if (is_array($multirequest)) { + foreach ($multirequest as $entrylist) { + // Iterate over an array of KalturaCategoryEntry results. + if (is_array($entrylist->objects)) { + foreach ($entrylist->objects as $entrycategory) { + // Check that the categoryFullIds has the root category in it. + if (false === strpos($entrycategory->categoryFullIds, $rootcateogryid)) { + continue; + } + // Entry Id gets set multiple times... + $entryid = $entrycategory->entryId; + $categories[] = $entrycategory->categoryId; + } + } + + // Save the array of categories to the array of entries. + $entries[$entryid] = $categories; + // Reset categories array to make way for a new entry. + $categories = array(); + } + } + + return $entries; +} + +/** + * This function updates records for Kaltura video resrouce, presentation and media assignments; by adding a source URL and padding the width and height. + */ +function local_kaltura_update_activities() { + global $CFG, $DB; + + $configsettings = get_config(KALTURA_PLUGIN_NAME); + $client = local_kaltura_get_kaltura_client(); + + // Check if the KAF URi is initialized. + if (!isset($configsettings->kaf_uri) || empty($configsettings->kaf_uri)) { + $url = new moodle_url('/admin/settings.php', array('section' => 'local_kaltura')); + notice(get_string('migration_kaf_url_not_set', 'local_kaltura'), $url); + } + + // Check if the table exists. + $table = new xmldb_table('kalvidres'); + + if ($DB->get_manager()->table_exists($table)) { + // Migrate Kaltura video resrouce entries. + $sql = 'SELECT * + FROM {kalvidres} + WHERE source IS NULL'; + $records = $DB->get_records_sql($sql); + + foreach ($records as $id => $record) { + if (!is_null($record->entry_id) && !empty($record->entry_id)) { + $source = local_kaltura_build_source_url($record->entry_id, $record->height, $record->width, $record->uiconf_id); + $record->source = $source; + $record->width = $record->width + KALTURA_MIGRATION_WIDTH_PADDING; + $record->height = $record->height + KALTURA_MIGRATION_HEIGHT_PADDING; + + try { + // Retrieve the Kaltura base entry object. + $kalentry = $client->baseEntry->get($record->entry_id); + } + catch(Exception $ex) { + // if from some reason we were not able to get the entry - lets make an empty object to use for empty metadata + // since this is for backward compatibility - we can ignore that for the sake of completing the migration + $kalentry = new stdClass(); + } + $newobject = local_kaltura_convert_kaltura_base_entry_object($kalentry); + // Searlize and base 64 encode the metadata. + $metadata = local_kaltura_encode_object_for_storage($newobject); + $record->metadata = $metadata; + + $DB->update_record('kalvidres', $record, true); + } + } + } + + $table = new xmldb_table('kalvidpres'); + + if ($DB->get_manager()->table_exists($table)) { + // Migrate Kaltura video resrouce entries. + $sql = 'SELECT * + FROM {kalvidpres} + WHERE source IS NULL'; + $records = $DB->get_records_sql($sql); + + foreach ($records as $id => $record) { + if (!is_null($record->entry_id) && !empty($record->entry_id)) { + $player = empty($configsettings->presentation) ? $configsettings->presentation_custom : $configsettings->presentation; + $source = local_kaltura_build_source_url($record->entry_id, $record->height, $record->width, $player); + $record->source = $source; + $record->width = $record->width + KALTURA_MIGRATION_WIDTH_PADDING; + $record->height = $record->height + KALTURA_MIGRATION_HEIGHT_PADDING; + + // Retrieve the Kaltura base entry object. + $kalentry = $client->baseEntry->get($record->entry_id); + $newobject = local_kaltura_convert_kaltura_base_entry_object($kalentry); + // Searlize and base 64 encode the metadata. + $metadata = local_kaltura_encode_object_for_storage($newobject); + $record->metadata = $metadata; + + $DB->update_record('kalvidpres', $record, true); + } + } + } + + $table = new xmldb_table('kalvidassign_submission'); + + if ($DB->get_manager()->table_exists($table)) { + // Migrate Kaltura video resrouce entries. + $sql = 'SELECT * + FROM {kalvidassign_submission} + WHERE source IS NULL'; + $records = $DB->get_records_sql($sql); + + foreach ($records as $id => $record) { + if (!is_null($record->entry_id) && !empty($record->entry_id)) { + + $height = $configsettings->kalvidassign_player_height; + $width = $configsettings->kalvidassign_player_width; + $player = empty($configsettings->player) ? $configsettings->player_custom : $configsettings->player; + + $source = local_kaltura_build_source_url($record->entry_id, $height, $width, $player); + $record->source = $source; + $record->width = $width + KALTURA_MIGRATION_WIDTH_PADDING; + $record->height = $height + KALTURA_MIGRATION_HEIGHT_PADDING; + + // Retrieve the Kaltura base entry object. + $kalentry = $client->baseEntry->get($record->entry_id); + $newobject = local_kaltura_convert_kaltura_base_entry_object($kalentry); + // Searlize and base 64 encode the metadata. + $metadata = local_kaltura_encode_object_for_storage($newobject); + $record->metadata = $metadata; + + $DB->update_record('kalvidassign_submission', $record, true); + } + } + } +} + +/** + * This function updates the name and adminTags property of a KalturaDataEntry (Video presentation). + * @param KalturaConfiguration $client A Kaltura client object. + * @param Array $entrylist A list of Kaltura entries, where the key is the entry id and the value is the video presentation activity name. + */ +function local_kaltura_update_video_presentation_entry($client, $entrylist) { + foreach ($entrylist as $entryid => $activityname) { + $vidpres = new KalturaBaseEntry(); + $vidpres->name = $activityname; + $vidpres->adminTags = 'presentation'; + $client->baseEntry->update($entryid, $vidpres); + } +} + +/** + * This function migrates video presentation entries to the new KAF standard by setting additional properties. + * @param int $kafcategory The KAF root category. + * @param array $cachedcategories An array of cateogires that have been created under the KAF root category. + * @return void. + */ +function local_kaltura_migrate_video_presentation_entries($kafcategory, $cachedcategories) { + global $DB; + + $table = new xmldb_table('kalvidpres'); + + // Check if the video presentation table exists. + if ($DB->get_manager()->table_exists($table)) { + // Retrieve all video presentation records that have not yet been migrated. + $sql = 'SELECT id,name,course,entry_id + FROM {kalvidpres} + WHERE source IS NULL'; + $vidpresrecs = $DB->get_records_sql($sql); + + if (empty($vidpresrecs)) { + return; + } + + // Get a Kaltura session. + $client = local_kaltura_get_kaltura_client(); + + // Get the KAF channels category object. + $channelscategory = local_kaltura_get_channels_id($client, $kafcategory); + + // Initialize arrays used to map video presentation entries to Kaltura categories. + $entrycategories = array(); + $entry = array(); + + // Populate arrays with the mapping data. + foreach ($vidpresrecs as $rec) { + $entrycategories[$rec->entry_id] = array($rec->course); + $entry[$rec->entry_id] = $rec->name; + + // Check if the mapping of a course category to a new category already exists then skip the rest of the loop. + if (isset($cachedcategories[$rec->course])) { + continue; + } + + $cachedcategories[$rec->course] = $rec->course; + } + + // Create KAF categories and add the entries to the categories. + local_kaltura_assign_entries_to_new_categories($client, $entrycategories, $channelscategory, array(), $cachedcategories); + + // Update the entry name and adminTag property for the video presentation object. + local_kaltura_update_video_presentation_entry($client, $entry); + } + + return; +} + +/** + * This function takes a Kaltura entry id height, width and uiconf_id and returns a source URL pointing to the entry. + * @param string $entryid The Kaltura entry id. + * @param int $height The entry height. + * @param int $width The entry width. + * @param int $uiconfid The Kaltura player id. + * @return string A source URL. + */ +function local_kaltura_build_source_url($entryid, $height, $width, $uiconfid) { + $newheight = empty($height) ? KALTURA_MIGRATION_DEFAULT_HEIGHT : $height; + $newwidth = empty($width) ? KALTURA_MIGRATION_DEFAULT_WIDTH : $width; + $url = 'http://'.KALTURA_URI_TOKEN."/browseandembed/index/media/entryid/{$entryid}/showDescription/true/showTitle/true/showTags/true/showDuration/true/showOwner/"; + $url .= "true/showUploadDate/false/playerSize/{$newwidth}x{$newheight}/playerSkin/{$uiconfid}/"; + return $url; +} + +/** + * This class keeps statistics on the last entries that were process, as well as how many categories were created. + * It is also used to allow the use to continue the migration from where it last left off. + */ +class local_kaltura_migration_progress { + /** @var int The timestamp used to retrieve Kaltura entries that were created on or before this date. */ + static protected $existingcategoryrun = 0; + /** @var int The timestamp used to retrieve Kaltura entries where the metadata was created on or before this date. */ + static protected $sharedcategoryrun = 0; + /** @var int The number of categories that have been created. */ + static protected $categoriescreated = 0; + /** @var int The number of entries that have been migrated. */ + static protected $entriesmigrated = 0; + /** @var int The date the migration originally started. */ + static protected $migrationstarted = 0; + /** @var int KAF root category id. */ + static protected $kafcategoryrootid = 0; + + /** + * Constructor initializes static properties. + */ + public function __construct() { + $config = get_config(KALTURA_PLUGIN_NAME); + self::$migrationstarted = (isset($config->migrationstarted) && !empty($config->migrationstarted)) ? $config->migrationstarted : 0; + self::$existingcategoryrun = isset($config->existingcategoryrun) ? $config->existingcategoryrun : 0; + self::$sharedcategoryrun = isset($config->sharedcategoryrun) ? $config->sharedcategoryrun : 0; + self::$categoriescreated = isset($config->categoriescreated) ? $config->categoriescreated : 0; + self::$entriesmigrated = isset($config->entriesmigrated) ? $config->entriesmigrated : 0; + self::$kafcategoryrootid = isset($config->kafcategoryrootid) ? $config->kafcategoryrootid : 0; + } + + /** + * Returns the timestamp value of the date created for the last entry that was processed. + * @return int Unix timestamp. + */ + static public function get_existingcategoryrun() { + return self::$existingcategoryrun; + } + + /** + * Set the timestamp value. + * @param int $data A unix timestamp. + */ + static public function set_existingcategoryrun($data) { + self::$existingcategoryrun = $data; + } + + /** + * Returns the timestampe value of the date created for the last entry metadata that was processed. + * @return int Unix timestamp. + */ + static public function get_sharedcategoryrun() { + return self::$sharedcategoryrun; + } + + /** + * Set the timestamp value. + * @param int $data A unix timestamp. + */ + static public function set_sharedcategoryrun($data) { + self::$sharedcategoryrun = $data; + } + + /** + * Returns the number of categories created. + * @return int Unix timestamp. + */ + static public function get_categoriescreated() { + return self::$categoriescreated; + } + + /** + * Increment categories created. + */ + static public function increment_categoriescreated() { + self::$categoriescreated++; + } + + /** + * Returns the number of entries that were migrated. + * @return int Unix timestamp. + */ + static public function get_entriesmigrated() { + return self::$entriesmigrated; + } + + /** + * Increment entries migrated. + */ + static public function increment_entriesmigrated() { + self::$entriesmigrated++; + } + + /** + * Returns the timestamp for the original date the migration was started. + * @return int Unix timestamp. + */ + static public function get_migrationstarted() { + return self::$migrationstarted; + } + + /** + * Sets the time the migration started time to now. + */ + static public function init_migrationstarted() { + self::$migrationstarted = time(); + } + + /** + * Returns the KAF root category id + * @return int Unix timestamp. + */ + static public function get_kafcategoryrootid() { + return self::$kafcategoryrootid; + } + + /** + * Sets the the KAF root category id. + * @param int $data a Kaltura category id. + */ + static public function set_kafcategoryrootid($data) { + self::$kafcategoryrootid = $data; + } + + /** + * Reset all stats to nothing. + */ + static public function reset_all() { + self::$migrationstarted = 0; + self::$entriesmigrated = 0; + self::$categoriescreated = 0; + self::$sharedcategoryrun = 0; + self::$existingcategoryrun = 0; + self::$kafcategoryrootid = 0; + } + + /** + * Destructor that saves static properties to the DB. + */ + public function __destruct() { + set_config('existingcategoryrun', self::$existingcategoryrun, KALTURA_PLUGIN_NAME); + set_config('sharedcategoryrun', self::$sharedcategoryrun, KALTURA_PLUGIN_NAME); + set_config('categoriescreated', self::$categoriescreated, KALTURA_PLUGIN_NAME); + set_config('entriesmigrated', self::$entriesmigrated, KALTURA_PLUGIN_NAME); + set_config('migrationstarted', self::$migrationstarted, KALTURA_PLUGIN_NAME); + set_config('kafcategoryrootid', self::$kafcategoryrootid, KALTURA_PLUGIN_NAME); + } +} diff --git a/local/kaltura/pix/icon.png b/local/kaltura/pix/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..615c31d68e7c309bb63b6098a4bfbcad17a0bd27 GIT binary patch literal 1912 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 literal 0 HcmV?d00001 diff --git a/local/kaltura/pix/vidThumb.png b/local/kaltura/pix/vidThumb.png new file mode 100644 index 0000000000000000000000000000000000000000..cdf48281daab556c5b8885d8f4a304731376e125 GIT binary patch literal 2404 zcmaJ@dpwhU8($;u5=l|cW}*_?J#yHb+H6W8=T_+5Y&V7-Z1-{qB_%?S4o)4Ul2ehQ z5l<+cJW|o)l&2C&8Zj%$@tvOZynnpC_vdrpzw7t=e81o8x_;O9k2~4Tb*rMhhCB=g zQ*_!!@{q3S($^gUmws=iSIhGc`E^bH%4i7|{qX82-U;!X4uxPB=W=l&;W27m71u%dq25V}9wZxm5;sF5p<3UNY z@fd-450c}LT+*E_Dj0&ecnl^YA_5&@hUV~sFjyQ8x1eEaY9d9L@T1reEz*R|*I!g1 zfqXiT$%U94HgZ9c7QhiewkT<(f49Km{*-0&e_WIF!Z49EE(VJR7Ft>ay14v*D2w$I z&4)a|f9n08!hEkNE{O2}`5Xa{E*)H;{z57)-hl_wAP&!q!wFlwMYmuM#Nh{XxJU<2 zbL1{2o56|Te@DBx;GNifh{mRaP9$5Dl#gaI8F)(zEE$Uf9I!+)0#+Ilv1T~3sW}<9 z*=jRjMKE3Dk~nk$3uHr!T*g0K(l5CSMqqKJnMojzxesJG@;EHy_lEJzU)MtTrQQ!N zU?&QRNEd4Uzl zvlQ)?L5Wqx7&18~p`$pjjc^=k6d!!CQI?w7ODy*+87)suPnuZufFUaq#P{hXlEnD| zYm+jb07sYk8lWnSG?(+Ui-=T&!jT3ygu)}5!DHcI0T`8A1zOANwFF8gCuQK9c4dO! z>gs1B6HF~~TrU>0s}dTvpWYeUldIZsW>Bx3Czu#|F*5Qz+$U;m5~|C7^qbZ31ic%6 z8;_Z)eU{vbz@Lwup4MEW4NrEzfGYP-@xbRe2MT8=QU|K`G?A$VOdV})W#UT8?#j98 zx!7BN1N&<)t(%XqKX80d@~yjD9lnYDqC53*{@&|r)i>n4t0^mBBCb83X;e$iQuH5% z=8WSiVXEt{l$30gCs3C@mc(|32fVqvap3gWYzF&7$t7etOOh$7uFctbM9CwBbSCALzWHuieEFP+n z8$So`1{AoqN^$aJ`FFO|jxY<_as(~%U;~^b?*?cjR9Ht;j7$&$L4;gQU7Z~cHw58Z zPrT(K^zFx1r*C4{23o{{=x-);B`WA^Gcie;H!` zaDGvv{rXB_%wqt&HK)vu4=&^^ZiZ5Je`_{00fFePBmo?Q%?C;du3!`pFe$a z4LI44Z|FBK6?b(x9%Ug;E;SLfgpe}3rl!-%M0F=SbjbH%KCd_Ic|Uik{?F@nr5`iC zXeMFHh`m99`3EWPy5c%wfX{`dw#&<6?A8pOift|JjZxe5C3Rb+ZlY7Nouf0< z<-3Ulct#cS(@S%!bjJ^|3SXReT|aR(D`-Si=jY8=+oaTmpSqz^PR(0?J~wV=CJJ~L z-O`Ei@+MQ&SHPHOgcRe83BudwK3E+u6WQq8ynk?sFf9;>lCe&>o7X8?QqdY*>4&zw zwJ#wuDSfvVihvkX~&eM6bUqo5e0y)2a@#Nf`j&MkBi4i>I zSlAh|dz*kR;u+Gfy(;S5U#M%@jgWn-oITqIf41alN=iy&ql4_4L*jii$(ZX6%M>H- zd7nU+bbQ`k>eFnD->yk~9+0J4Z%zH(k8O3A6fnf|uX<&-@>7bk_wr=B!+DN(0?+t( zVeM3po@KAm?)hz&7k2wENi3@Q@BvZIct)uFT6pv2v5xJDG^kcvV{hL;4`MGg^3hzs zVp6fuK^fh!nnkD{k4S;FsG^an4ZoL5d?!3Q{J*_;=C+0UpxWi0Z>D$shb?-5Y+?x< zpcyv3Ni$6@YIS!WZD(XQB. + +/** + * Kaltura LTI service script used receive data sent from the Kaltura content provider. + * + * @package local_kaltura + * @author Remote-Learner.net Inc + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + * @copyright (C) 2014 Remote Learner.net Inc http://www.remote-learner.net + */ + +require_once(dirname(__FILE__).'/../../config.php'); +require_once($CFG->dirroot.'/local/kaltura/locallib.php'); + +require_login(); + +global $PAGE; + +$url = required_param('url', PARAM_URL); +$width = required_param('width', PARAM_INT); +$height = required_param('height', PARAM_INT); +$entryid = required_param('entry_id', PARAM_TEXT); +$title = required_param('title', PARAM_TEXT); +$thumbnailurl = optional_param('thumbnailUrl', '', PARAM_URL); +$duration = optional_param('duration', '', PARAM_TEXT); +$description = optional_param('description', '', PARAM_TEXT); +$createdat = optional_param('createdAt', '', PARAM_TEXT); +$owner = optional_param('owner', '', PARAM_TEXT); +$tags = optional_param('tags', '', PARAM_TEXT); +$showtitle = optional_param('showTitle', '', PARAM_TEXT); +$showdescription = optional_param('showDescription', '', PARAM_TEXT); +$showtags = optional_param('showTags', '', PARAM_TEXT); +$showdescription = optional_param('showDuration', '', PARAM_TEXT); +$showowner = optional_param('showOwner', '', PARAM_TEXT); +$player = optional_param('player', '', PARAM_TEXT); +$size = optional_param('size', '', PARAM_TEXT); + +$serviceurl = new moodle_url('/local/kaltura/service.php'); + +// Log the request. +$enablelogging = get_config(KALTURA_PLUGIN_NAME, 'enable_logging'); +if (!empty($enablelogging)) { + $param = array( + 'url' => $url, + 'width' => $width, + 'height' => $height, + 'entryid' => $entryid, + '$title' => $title + ); + local_kaltura_log_data(KAF_BROWSE_EMBED_MODULE, $serviceurl->out(), $param, false); +} + +// Create a metadata object and serialize it. +$metadata = new stdClass(); +$metadata->url = $url; +$metadata->width = $width; +$metadata->height = $height; +$metadata->entryid = $entryid; +$metadata->title = $title; +$metadata->thumbnailurl = $thumbnailurl; +$metadata->duration = $duration; +$metadata->description = $description; +$metadata->createdat = $createdat; +$metadata->owner = $owner; +$metadata->tags = $tags; +$metadata->showtitle = $showtitle; +$metadata->showdescription = $showdescription; +$metadata->showowner = $showowner; +$metadata->player = $player; +$metadata->size = $size; + +$metadata = local_kaltura_encode_object_for_storage($metadata); + +$PAGE->set_url($serviceurl); +$PAGE->set_context(context_system::instance()); +$params = array( + 'iframeurl' => urlencode($url), + 'width' => $width, + 'height' => $height, + 'entryid' => $entryid, + 'title' => $title, + 'metadata' => $metadata, +); +$PAGE->requires->yui_module('moodle-local_kaltura-ltiservice', 'M.local_kaltura.init', array($params)); + +echo $OUTPUT->header(); +echo $OUTPUT->footer(); \ No newline at end of file diff --git a/local/kaltura/settings.php b/local/kaltura/settings.php new file mode 100644 index 0000000000000..3928930838cc2 --- /dev/null +++ b/local/kaltura/settings.php @@ -0,0 +1,95 @@ +. + +/** + * Kaltura config settings script. + * + * @package local_kaltura + * @author Remote-Learner.net Inc + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + * @copyright (C) 2014 Remote Learner.net Inc http://www.remote-learner.net + */ + +// It must be included from a Moodle page. +if (!defined('MOODLE_INTERNAL')) { + die('Direct access to this script is forbidden.'); +} + +require_once($CFG->dirroot.'/local/kaltura/locallib.php'); + +if ($hassiteconfig) { + + // Add local plug-in configuration settings link to the navigation block. + $settings = new admin_settingpage('local_kaltura', get_string('pluginname', 'local_kaltura')); + $ADMIN->add('localplugins', $settings); + + $configsettings = get_config(KALTURA_PLUGIN_NAME); + $missinginfo = get_string('missing_required_info', 'local_kaltura'); + $message = ''; + + if (isset($configsettings->kaf_uri) && !empty($configsettings->kaf_uri)) { + $url = local_kaltura_add_protocol_to_url($configsettings->kaf_uri); + if (empty($url)) { + $message = get_string('invalid_url', 'local_kaltura'); + } else { + $message = $url.'/admin'; + $message = html_writer::tag('a', $message, array('href' => $message)); + $message = html_writer::tag('center', $message); + } + } + + if (empty($configsettings->partner_id) || empty($configsettings->adminsecret)) { + $message .= html_writer::empty_tag('br'); + $message .= html_writer::tag('center', $missinginfo); + } + + // Pull the Kaltura repository settings (if exists). + $kalrepoconfig = get_config(KALTURA_REPO_NAME); + $repoprofileid = (!empty($kalrepoconfig) && !empty($kalrepoconfig->metadata_profile_id)) ? $kalrepoconfig->metadata_profile_id : ''; + + $adminsetting = new admin_setting_heading('kaf_url_heading', get_string('kaf_configuration_hdr', 'local_kaltura'), $message); + $adminsetting->plugin = KALTURA_PLUGIN_NAME; + $settings->add($adminsetting); + + $adminsetting = new admin_setting_configtext('kaf_uri', get_string('kaf_uri', 'local_kaltura'), get_string('kaf_uri_desc', 'local_kaltura'), '', PARAM_URL); + $adminsetting->plugin = KALTURA_PLUGIN_NAME; + $settings->add($adminsetting); + + $adminsetting = new admin_setting_configtext('uri', get_string('server_uri', 'local_kaltura'), get_string('server_uri_desc', 'local_kaltura'), KALTURA_DEFAULT_URI, PARAM_URL); + $adminsetting->plugin = KALTURA_PLUGIN_NAME; + $settings->add($adminsetting); + + $adminsetting = new admin_setting_configtext('partner_id', get_string('partner_id', 'local_kaltura'), get_string('partner_id_desc', 'local_kaltura'), '', PARAM_INT); + $adminsetting->plugin = KALTURA_PLUGIN_NAME; + $settings->add($adminsetting); + + $adminsetting = new admin_setting_configtext('adminsecret', get_string('admin_secret', 'local_kaltura'), get_string('admin_secret_desc', 'local_kaltura'), '', PARAM_ALPHANUM); + $adminsetting->plugin = KALTURA_PLUGIN_NAME; + $settings->add($adminsetting); + + $url = new moodle_url('/local/kaltura/download_log.php'); + $adminsetting = new admin_setting_configcheckbox('enable_logging', get_string('trace_log', 'local_kaltura'), get_string('trace_log_desc', 'local_kaltura', $url->out()), 0); + $adminsetting->plugin = KALTURA_PLUGIN_NAME; + $settings->add($adminsetting); + + if (isset($configsettings->migration_yes) && $configsettings->migration_yes == 1) { + $url = new moodle_url('/local/kaltura/migration.php'); + + $adminsetting = new admin_setting_heading('migration_url_heading', get_string('migration_notice', 'local_kaltura', $url->out()), ''); + $adminsetting->plugin = KALTURA_PLUGIN_NAME; + $settings->add($adminsetting); + } +} diff --git a/local/kaltura/styles.css b/local/kaltura/styles.css new file mode 100644 index 0000000000000..588bf360a6ddb --- /dev/null +++ b/local/kaltura/styles.css @@ -0,0 +1,10 @@ +iframe#contentframe { + border-style: none; +} + +#panelcontentframecontainer { + overflow: scroll; + -webkit-overflow-scrolling: touch; + height: 100%; + width: 100%; +} diff --git a/local/kaltura/test.php b/local/kaltura/test.php new file mode 100644 index 0000000000000..57e28944542d5 --- /dev/null +++ b/local/kaltura/test.php @@ -0,0 +1,27 @@ +set_url($url); +$PAGE->set_context($context); + +echo $OUTPUT->header(); + +require_capability('moodle/site:config', $context); + +$session = local_kaltura_login(true, '', 2); + +if ($session) { + echo 'Connection successful'; +} else { + echo 'Connection not successful'; +} diff --git a/local/kaltura/tests/locallib_test.php b/local/kaltura/tests/locallib_test.php new file mode 100644 index 0000000000000..d2bfaa04a79e9 --- /dev/null +++ b/local/kaltura/tests/locallib_test.php @@ -0,0 +1,1293 @@ +. + +/** + * Kaltura local library phpunit tests. + * + * @package local_kaltura + * @author Remote-Learner.net Inc + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + * @copyright (C) 2014 Remote Learner.net Inc http://www.remote-learner.net + */ + +defined('MOODLE_INTERNAL') || die(); + +global $CFG; +require_once($CFG->dirroot.'/local/kaltura/locallib.php'); +require_once($CFG->dirroot.'/local/kaltura/API/KalturaTypes.php'); + +/** + * @group local_kaltura + */ +class local_kaltura_locallib_testcase extends advanced_testcase { + /** + * A Dataprovider method, providing invalid data. + */ + public function mymedia_test_required_param_fail() { + $data = array( + array( + array( + // 'id' => 1, + 'title' => 'title', + 'width' => 100, + 'height' => 100, + 'module' => KAF_MYMEDIA_MODULE, + 'course' => new stdClass(), + 'cmid' => 0, + 'custom_publishdata' => '', + ) + ), + array( + array( + 'id' => 1, + // 'title' => 'title', + 'width' => 100, + 'height' => 100, + 'module' => KAF_MYMEDIA_MODULE, + 'course' => new stdClass(), + 'cmid' => 0, + 'custom_publishdata' => '', + ) + ), + array( + array( + 'id' => 1, + 'title' => 'title', + // 'width' => 100, + 'height' => 100, + 'module' => KAF_MYMEDIA_MODULE, + 'course' => new stdClass(), + 'cmid' => 0, + 'custom_publishdata' => '', + ), + ), + array( + array( + 'id' => 1, + 'title' => 'title', + 'width' => 100, + // 'height' => 100, + 'module' => KAF_MYMEDIA_MODULE, + 'course' => new stdClass(), + 'cmid' => 0, + 'custom_publishdata' => '', + ) + ), + array( + array( + 'id' => 1, + 'title' => 'title', + 'width' => 100, + 'height' => 100, + // 'module' => '', + 'course' => new stdClass(), + 'cmid' => 0, + 'custom_publishdata' => '', + ) + ), + array( + array( + 'id' => 1, + 'title' => 'title', + 'width' => 100, + 'height' => 100, + 'module' => KAF_MYMEDIA_MODULE, + // 'course' => new stdClass(), + 'cmid' => 0, + 'custom_publishdata' => '', + ) + ), + array( + array( + 'id' => 1, + 'title' => 'title', + 'width' => 100, + 'height' => 100, + 'module' => KAF_MYMEDIA_MODULE, + 'course' => new stdClass(), + // 'cmid' => 0, + 'custom_publishdata' => '', + ) + ), + array( + array( + 'id' => 1, + 'title' => 'title', + 'width' => 100, + 'height' => 100, + 'module' => KAF_MYMEDIA_MODULE, + 'course' => new stdClass(), + 'cmid' => 0, + // 'custom_publishdata' => '', + ) + ), + array( + array( + // Non-numeric. + 'id' => 'string', + 'title' => 'title', + 'width' => 100, + 'height' => 100, + 'module' => KAF_MYMEDIA_MODULE, + 'course' => new stdClass(), + 'cmid' => 0, + 'custom_publishdata' => '', + ) + ), + array( + array( + 'id' => 1, + 'title' => 'title', + // Non-numeric. + 'width' => 'string', + 'height' => 100, + 'module' => KAF_MYMEDIA_MODULE, + 'course' => new stdClass(), + 'cmid' => 0, + 'custom_publishdata' => '', + ) + ), + array( + array( + 'id' => 1, + 'title' => 'title', + 'width' => 100, + // Non-numeric. + 'height' => 'string', + 'module' => KAF_MYMEDIA_MODULE, + 'course' => new stdClass(), + 'cmid' => 0, + 'custom_publishdata' => '', + ) + ), + array( + array( + 'id' => 1, + 'title' => 'title', + 'width' => 100, + 'height' => 100, + 'module' => KAF_MYMEDIA_MODULE, + // Not an object. + 'course' => 'string', + 'cmid' => 0, + 'custom_publishdata' => '', + ) + ), + array( + array( + 'id' => 1, + 'title' => 'title', + 'width' => 100, + 'height' => 100, + 'module' => KAF_MYMEDIA_MODULE, + 'course' => new stdClass(), + // Non-numeric. + 'cmid' => 'string', + 'custom_publishdata' => '', + ) + ), + ); + return $data; + } + + /** + * This function tests whether the parameters contain all required fields. + * @param array $data An array of parameters that are invalid. + * @dataProvider mymedia_test_required_param_fail + */ + public function test_local_kaltura_validate_mymedia_required_params_fail($data) { + $this->resetAfterTest(true); + $result = local_kaltura_validate_mymedia_required_params($data); + $this->assertFalse($result); + } + + /** + * A Dataprovider method, providing invalid data. + */ + public function mediagallery_test_required_param_fail() { + $data = array( + array( + array( + // 'id' => 1, + 'title' => 'title', + 'width' => 100, + 'height' => 100, + 'module' => KAF_MEDIAGALLERY_MODULE, + 'course' => new stdClass(), + 'cmid' => 0, + 'custom_publishdata' => '', + ) + ), + array( + array( + 'id' => 1, + // 'title' => 'title', + 'width' => 100, + 'height' => 100, + 'module' => KAF_MEDIAGALLERY_MODULE, + 'course' => new stdClass(), + 'cmid' => 0, + 'custom_publishdata' => '', + ) + ), + array( + array( + 'id' => 1, + 'title' => 'title', + // 'width' => 100, + 'height' => 100, + 'module' => KAF_MEDIAGALLERY_MODULE, + 'course' => new stdClass(), + 'cmid' => 0, + 'custom_publishdata' => '', + ), + ), + array( + array( + 'id' => 1, + 'title' => 'title', + 'width' => 100, + // 'height' => 100, + 'module' => KAF_MEDIAGALLERY_MODULE, + 'course' => new stdClass(), + 'cmid' => 0, + 'custom_publishdata' => '', + ) + ), + array( + array( + 'id' => 1, + 'title' => 'title', + 'width' => 100, + 'height' => 100, + // 'module' => '', + 'course' => new stdClass(), + 'cmid' => 0, + 'custom_publishdata' => '', + ) + ), + array( + array( + 'id' => 1, + 'title' => 'title', + 'width' => 100, + 'height' => 100, + 'module' => KAF_MEDIAGALLERY_MODULE, + // 'course' => new stdClass(), + 'cmid' => 0, + 'custom_publishdata' => '', + ) + ), + array( + array( + 'id' => 1, + 'title' => 'title', + 'width' => 100, + 'height' => 100, + 'module' => KAF_MEDIAGALLERY_MODULE, + 'course' => new stdClass(), + // 'cmid' => 0, + 'custom_publishdata' => '', + ) + ), + array( + array( + 'id' => 1, + 'title' => 'title', + 'width' => 100, + 'height' => 100, + 'module' => KAF_MEDIAGALLERY_MODULE, + 'course' => new stdClass(), + 'cmid' => 0, + // 'custom_publishdata' => '', + ) + ), + array( + array( + // Non-numeric. + 'id' => 'string', + 'title' => 'title', + 'width' => 100, + 'height' => 100, + 'module' => KAF_MEDIAGALLERY_MODULE, + 'course' => new stdClass(), + 'cmid' => 0, + 'custom_publishdata' => '', + ) + ), + array( + array( + 'id' => 1, + 'title' => 'title', + // Non-numeric. + 'width' => 'string', + 'height' => 100, + 'module' => KAF_MEDIAGALLERY_MODULE, + 'course' => new stdClass(), + 'cmid' => 0, + 'custom_publishdata' => '', + ) + ), + array( + array( + 'id' => 1, + 'title' => 'title', + 'width' => 100, + // Non-numeric. + 'height' => 'string', + 'module' => KAF_MEDIAGALLERY_MODULE, + 'course' => new stdClass(), + 'cmid' => 0, + 'custom_publishdata' => '', + ) + ), + array( + array( + 'id' => 1, + 'title' => 'title', + 'width' => 100, + 'height' => 100, + 'module' => KAF_MEDIAGALLERY_MODULE, + // Not an object. + 'course' => 'string', + 'cmid' => 0, + 'custom_publishdata' => '', + ) + ), + array( + array( + 'id' => 1, + 'title' => 'title', + 'width' => 100, + 'height' => 100, + 'module' => KAF_MEDIAGALLERY_MODULE, + 'course' => new stdClass(), + // Non-numeric. + 'cmid' => 'string', + 'custom_publishdata' => '', + ) + ), + ); + return $data; + } + + /** + * This function tests whether the parameters contain all required fields. + * @param array $data An array of parameters that are invalid. + * @dataProvider mediagallery_test_required_param_fail + */ + public function test_local_kaltura_validate_coursegallery_required_params_fail($data) { + $this->resetAfterTest(true); + $result = local_kaltura_validate_mediagallery_required_params($data); + $this->assertFalse($result); + } + + /** + * This function tests whether the parameters contain all required fields. + */ + public function test_local_kaltura_validate_coursegallery_required_params() { + $this->resetAfterTest(true); + $data = array( + 'id' => 1, + 'title' => 'title', + 'width' => 100, + 'height' => 100, + 'module' => KAF_MEDIAGALLERY_MODULE, + 'course' => new stdClass(), + 'cmid' => 0, + 'custom_publishdata' => '' + ); + + $result = local_kaltura_validate_mediagallery_required_params($data); + $this->assertTrue($result); + } + + /** + * A Dataprovider method, providing invalid data. + */ + public function browseembed_test_required_param_fail() { + $data = array( + array( + array( + // 'id' => 1, + 'title' => 'title', + 'width' => 100, + 'height' => 100, + 'module' => KAF_BROWSE_EMBED_MODULE, + 'course' => new stdClass(), + 'cmid' => 0, + 'custom_publishdata' => '', + ) + ), + array( + array( + 'id' => 1, + // 'title' => 'title', + 'width' => 100, + 'height' => 100, + 'module' => KAF_BROWSE_EMBED_MODULE, + 'course' => new stdClass(), + 'cmid' => 0, + 'custom_publishdata' => '', + ) + ), + array( + array( + 'id' => 1, + 'title' => 'title', + // 'width' => 100, + 'height' => 100, + 'module' => KAF_BROWSE_EMBED_MODULE, + 'course' => new stdClass(), + 'cmid' => 0, + 'custom_publishdata' => '', + ), + ), + array( + array( + 'id' => 1, + 'title' => 'title', + 'width' => 100, + // 'height' => 100, + 'module' => KAF_BROWSE_EMBED_MODULE, + 'course' => new stdClass(), + 'cmid' => 0, + 'custom_publishdata' => '', + ) + ), + array( + array( + 'id' => 1, + 'title' => 'title', + 'width' => 100, + 'height' => 100, + // 'module' => '', + 'course' => new stdClass(), + 'cmid' => 0, + 'custom_publishdata' => '', + ) + ), + array( + array( + 'id' => 1, + 'title' => 'title', + 'width' => 100, + 'height' => 100, + 'module' => KAF_BROWSE_EMBED_MODULE, + // 'course' => new stdClass(), + 'cmid' => 0, + 'custom_publishdata' => '', + ) + ), + array( + array( + 'id' => 1, + 'title' => 'title', + 'width' => 100, + 'height' => 100, + 'module' => KAF_BROWSE_EMBED_MODULE, + 'course' => new stdClass(), + // 'cmid' => 0, + 'custom_publishdata' => '', + ) + ), + array( + array( + 'id' => 1, + 'title' => 'title', + 'width' => 100, + 'height' => 100, + 'module' => KAF_BROWSE_EMBED_MODULE, + 'course' => new stdClass(), + 'cmid' => 0, + // 'custom_publishdata' => '', + ) + ), + array( + array( + // Non-numeric. + 'id' => 'string', + 'title' => 'title', + 'width' => 100, + 'height' => 100, + 'module' => KAF_BROWSE_EMBED_MODULE, + 'course' => new stdClass(), + 'cmid' => 0, + 'custom_publishdata' => '', + ) + ), + array( + array( + 'id' => 1, + 'title' => 'title', + // Non-numeric. + 'width' => 'string', + 'height' => 100, + 'module' => KAF_BROWSE_EMBED_MODULE, + 'course' => new stdClass(), + 'cmid' => 0, + 'custom_publishdata' => '', + ) + ), + array( + array( + 'id' => 1, + 'title' => 'title', + 'width' => 100, + // Non-numeric. + 'height' => 'string', + 'module' => KAF_BROWSE_EMBED_MODULE, + 'course' => new stdClass(), + 'cmid' => 0, + 'custom_publishdata' => '', + ) + ), + array( + array( + 'id' => 1, + 'title' => 'title', + 'width' => 100, + 'height' => 100, + 'module' => KAF_BROWSE_EMBED_MODULE, + // Not an object. + 'course' => 'string', + 'cmid' => 0, + 'custom_publishdata' => '', + ) + ), + array( + array( + 'id' => 1, + 'title' => 'title', + 'width' => 100, + 'height' => 100, + 'module' => KAF_BROWSE_EMBED_MODULE, + 'course' => new stdClass(), + // Non-numeric. + 'cmid' => 'string', + 'custom_publishdata' => '', + ) + ), + ); + return $data; + } + + /** + * This function tests whether the parameters contain all required fields. + * @param array $data An array of parameters that are invalid. + * @dataProvider browseembed_test_required_param_fail + */ + public function test_local_kaltura_validate_browseembed_required_params_fail($data) { + $result = local_kaltura_validate_browseembed_required_params($data); + $this->assertFalse($result); + } + + /** + * This function tests whether the parameters contain all required fields. + */ + public function test_local_kaltura_validate_browseembed_required_params() { + $data = array( + 'id' => 1, + 'title' => 'title', + 'width' => 100, + 'height' => 100, + 'module' => KAF_BROWSE_EMBED_MODULE, + 'course' => new stdClass(), + 'cmid' => 0, + 'custom_publishdata' => '' + ); + + $result = local_kaltura_validate_browseembed_required_params($data); + $this->assertTrue($result); + } + + /** + * This function tests the return values for @see local_kaltura_get_lti_launch_container(). + */ + public function test_local_kaltura_get_lti_launch_container() { + global $CFG; + + $this->resetAfterTest(true); + $result = local_kaltura_get_lti_launch_container(true); + $this->assertEquals(LTI_LAUNCH_CONTAINER_EMBED, $result); + + $result = local_kaltura_get_lti_launch_container(false); + $this->assertEquals(LTI_LAUNCH_CONTAINER_EMBED_NO_BLOCKS, $result); + } + + /** + * Data provider for different KAF service names. + */ + public function module_name_test_fail() { + $data = array( + array('nothing'), + array(''), + array(1234) + ); + return $data; + } + + /** + * Test validating available KAF services. + * @param array $data An array of parameters that are invalid. + * @dataProvider module_name_test_fail + */ + public function test_local_kaltura_validate_kaf_module_request_fail($data) { + $this->resetAfterTest(true); + $result = local_kaltura_validate_kaf_module_request($data); + $this->assertFalse($result); + } + + /** + * Data provider for different KAF service names. + */ + public function module_name_test() { + $data = array( + array('mymedia'), + array('coursegallery'), + ); + return $data; + } + + /** + * Test validating available KAF services. + * @param array $data An array of parameters that is valid. + * @dataProvider module_name_test + */ + public function test_local_kaltura_validate_kaf_module_request($data) { + $this->resetAfterTest(true); + $result = local_kaltura_validate_kaf_module_request($data); + $this->assertTrue($result); + } + + /** + * Test that the correct end point is returned. + */ + public function test_local_kaltura_get_endpoint() { + $this->resetAfterTest(true); + $result = local_kaltura_get_endpoint(KAF_MYMEDIA_MODULE); + $this->assertEquals(KAF_MYMEDIA_ENDPOINT, $result); + $result = local_kaltura_get_endpoint(KAF_MEDIAGALLERY_MODULE); + $this->assertEquals(KAF_MEDIAGALLERY_ENDPOINT, $result); + $result = local_kaltura_get_endpoint(KAF_BROWSE_EMBED_MODULE); + $this->assertEquals(KAF_BROWSE_EMBED_ENDPOINT, $result); + } + + /** + * This functions tests properties of the mod_lti object returned by local_kaltura_format_lti_instance_object(). + */ + public function test_local_kaltura_format_lti_instance_object() { + $this->resetAfterTest(true); + + set_config('partner_id', 12345, 'local_kaltura'); + set_config('adminsecret', 54321, 'local_kaltura'); + set_config('kaf_uri', 'http://phpunit.tests/local_kaltura/tests/', 'local_kaltura'); + $expecteduri = 'phpunit.tests/local_kaltura/tests'; + + $configsettings = get_config('local_kaltura'); + + $course = new stdClass(); + $course->id = 1; + $param = array( + 'id' => 1, + 'module' => 'mymedia', + 'course' => $course, + 'title' => 'phpunit test', + 'width' => 100, + 'height' => 100, + 'cmid' => 0, + 'intro' => 'phpunitintro', + ); + + $expected = new stdClass(); + + $result = local_kaltura_format_lti_instance_object($param); + + $this->assertObjectHasAttribute('course', $result); + $this->assertObjectHasAttribute('id', $result); + $this->assertObjectHasAttribute('name', $result); + $this->assertObjectHasAttribute('intro', $result); + $this->assertObjectHasAttribute('instructorchoicesendname', $result); + $this->assertObjectHasAttribute('instructorchoicesendemailaddr', $result); + $this->assertObjectHasAttribute('instructorcustomparameters', $result); + $this->assertObjectHasAttribute('instructorchoiceacceptgrades', $result); + $this->assertObjectHasAttribute('instructorchoiceallowroster', $result); + $this->assertObjectHasAttribute('resourcekey', $result); + $this->assertObjectHasAttribute('password', $result); + $this->assertObjectHasAttribute('toolurl', $result); + $this->assertObjectHasAttribute('securetool', $result); + $this->assertObjectHasAttribute('forcessl', $result); + $this->assertObjectHasAttribute('cmid', $result); + + $this->assertEquals(1, $result->course); + $this->assertEquals(1, $result->id); + $this->assertEquals('phpunit test', $result->name); + $this->assertEquals('phpunitintro', $result->intro); + $this->assertEquals(LTI_SETTING_ALWAYS, $result->instructorchoicesendname); + $this->assertEquals(LTI_SETTING_ALWAYS, $result->instructorchoicesendemailaddr); + $this->assertEquals('', $result->instructorcustomparameters); + $this->assertEquals(LTI_SETTING_NEVER, $result->instructorchoiceacceptgrades); + $this->assertEquals(LTI_SETTING_NEVER, $result->instructorchoiceallowroster); + $this->assertEquals($configsettings->partner_id, $result->resourcekey); + $this->assertEquals($configsettings->adminsecret, $result->password); + $this->assertEquals('http://phpunit.tests/local_kaltura/tests/'.KAF_MYMEDIA_ENDPOINT, $result->toolurl); + $this->assertEquals('https://phpunit.tests/local_kaltura/tests/'.KAF_MYMEDIA_ENDPOINT, $result->securetool); + $this->assertEquals(0, $result->cmid); + } + + /** + * Test the formatting of an array to be used by mod_lti. + */ + public function test_local_kaltura_format_typeconfig() { + $this->resetAfterTest(true); + + $param = new stdClass(); + $param->instructorchoicesendname = 0; + $param->instructorchoicesendemailaddr = 'a@a.com'; + $param->instructorcustomparameters = ''; + $param->instructorchoiceacceptgrades = 0; + $param->instructorchoiceallowroster = 3; + + $expected = array( + 'sendname' => 0, + 'sendemailaddr' => 'a@a.com', + 'customparameters' => '', + 'acceptgrades' => 0, + 'allowroster' => 3, + 'launchcontainer' => 2, + ); + + $result = local_kaltura_format_typeconfig($param); + + ksort($result); + ksort($expected); + $this->assertEquals($expected, $result); + + // call function specifying no blocks to be displayed + $expected['launchcontainer'] = 3; + $result = local_kaltura_format_typeconfig($param, false); + $this->assertEquals($expected, $result); + } + + /** + * Data provider for different KAF service names. + */ + public function invalid_logging_data() { + $data = array( + array( + 'string' + ), + array( + 1 + ), + array( + new stdClass() + ) + ); + return $data; + } + + /** + * Test logging. + * @param array $data Sample data from data provider method. + * @dataProvider module_name_test + */ + public function test_local_kaltura_log_data_invalid_logging_data($data) { + $this->resetAfterTest(true); + + $result = local_kaltura_log_data('mymedia', 'http://localhost', $data, true); + $this->assertFalse($result); + } + + /** + * Test logging. + */ + public function test_local_kaltura_log_data_invalid_module() { + $this->resetAfterTest(true); + + $json = '{"courses":[{"courseId":123,"courseName":"something","roles":"ltirole1,ltirole2"},{"courseId":456,"courseName":"else","roles":"ltirole3,ltirole4"}]'; + $data = array(); + $data['test1'] = 'test2'; + $data['test3'] = 'test4'; + $data['json'] = $json; + + $result = local_kaltura_log_data('invalidmodule', 'http://localhost', $data, true); + $this->assertFalse($result); + } + + /** + * Test logging. + */ + public function test_local_kaltura_log_data_logging_request_data() { + global $DB; + + $this->resetAfterTest(true); + + $json = '{"courses":[{"courseId":123,"courseName":"something","roles":"ltirole1,ltirole2"},{"courseId":456,"courseName":"else","roles":"ltirole3,ltirole4"}]'; + $data = array(); + $data['test1'] = 'test2'; + $data['test3'] = 'test4'; + $data['json'] = $json; + + $result = local_kaltura_log_data(KAF_MYMEDIA_MODULE, 'http://localhost', $data, true); + $this->assertTrue($result); + $record = $DB->get_record('local_kaltura_log', array('module'=> 'mymedia')); + + $this->assertObjectHasAttribute('id', $record); + + $this->assertObjectHasAttribute('module', $record); + $this->assertEquals(KAF_MYMEDIA_MODULE, $record->module); + + $this->assertObjectHasAttribute('type', $record); + $this->assertEquals(KALTURA_LOG_REQUEST, $record->type); + + $this->assertObjectHasAttribute('endpoint', $record); + $this->assertEquals('http://localhost', $record->endpoint); + + $this->assertObjectHasAttribute('data', $record); + $this->assertEquals(serialize($data), $record->data); + + $this->assertObjectHasAttribute('timecreated', $record); + $this->assertNotEquals(0, $record); + + $result = local_kaltura_log_data(KAF_MEDIAGALLERY_MODULE, 'http://localhost', $data, true); + $this->assertTrue($result); + + $record = $DB->get_record('local_kaltura_log', array('module'=> 'coursegallery')); + + $this->assertObjectHasAttribute('id', $record); + + $this->assertObjectHasAttribute('module', $record); + $this->assertEquals(KAF_MEDIAGALLERY_MODULE, $record->module); + + $this->assertObjectHasAttribute('type', $record); + $this->assertEquals(KALTURA_LOG_REQUEST, $record->type); + + $this->assertObjectHasAttribute('endpoint', $record); + $this->assertEquals('http://localhost', $record->endpoint); + + $this->assertObjectHasAttribute('data', $record); + $this->assertEquals(serialize($data), $record->data); + + $this->assertObjectHasAttribute('timecreated', $record); + $this->assertNotEquals(0, $record); + } + + /** + * Test logging. + */ + public function test_local_kaltura_log_data_logging_response_data() { + global $DB; + + $this->resetAfterTest(true); + + $json = '{"courses":[{"courseId":123,"courseName":"something","roles":"ltirole1,ltirole2"},{"courseId":456,"courseName":"else","roles":"ltirole3,ltirole4"}]'; + $data = array(); + $data['test1'] = 'test2'; + $data['test3'] = 'test4'; + $data['json'] = $json; + + $result = local_kaltura_log_data('phpunit response', 'http://localhost', $data, false); + $this->assertTrue($result); + + $record = $DB->get_record('local_kaltura_log', array('module'=> 'phpunit response')); + + $this->assertObjectHasAttribute('id', $record); + + $this->assertObjectHasAttribute('module', $record); + $this->assertEquals('phpunit response', $record->module); + + $this->assertObjectHasAttribute('type', $record); + $this->assertEquals(KALTURA_LOG_RESPONSE, $record->type); + + $this->assertObjectHasAttribute('endpoint', $record); + $this->assertEquals('http://localhost', $record->endpoint); + + $this->assertObjectHasAttribute('data', $record); + $this->assertEquals(serialize($data), $record->data); + + $this->assertObjectHasAttribute('timecreated', $record); + $this->assertNotEquals(0, $record); + } + + /** + * Data provider for test_local_kaltura_format_uri(). + */ + public function uri_format_test() { + return array( + array('http://phpunit.tests/local_kaltura/tests'), + array('http://phpunit.tests/local_kaltura/tests/'), + array('https://phpunit.tests/local_kaltura/tests'), + array('https://phpunit.tests/local_kaltura/tests/'), + array('https://www.phpunit.tests/local_kaltura/tests/'), + ); + } + + /** + * Test local_kaltura_format_uri(). + * @param string $url differnt URI formats. + * @dataProvider uri_format_test + */ + public function test_local_kaltura_format_uri($uri) { + $result = local_kaltura_format_uri($uri); + $this->assertEquals('phpunit.tests/local_kaltura/tests', $result); + } + + /** + * Test local_kaltura_get_kaf_publishing_data(). This test creates 4 coures. Enrolls the user as an editing teacher in coures 1 and 4, + * then enrolls the user as a student in course 2. + */ + public function test_local_kaltura_get_kaf_publishing_data_for_non_admin() { + global $DB; + + $this->resetAfterTest(true); + + // Get the roles. + $sql = "SELECT shortname,id + FROM {role}"; + $role = (array) $DB->get_records_sql($sql); + // Create a test user. + $user = $this->getDataGenerator()->create_user(); + + // Create test courses and assign the user roles. + $coursedata = array( + 'fullname' => 'Test 1', + 'shortname' => 'T1' + ); + $courseone = $this->getDataGenerator()->create_course($coursedata); + + $this->getDataGenerator()->enrol_user($user->id, $courseone->id, $role['editingteacher']->id, 'manual'); + + $coursedata = array( + 'fullname' => 'Test 2', + 'shortname' => 'T2' + ); + $coursetwo = $this->getDataGenerator()->create_course($coursedata); + + $this->getDataGenerator()->enrol_user($user->id, $coursetwo->id, $role['student']->id, 'manual'); + + $coursedata = array( + 'fullname' => 'Test 3', + 'shortname' => 'T3' + ); + $coursethree = $this->getDataGenerator()->create_course($coursedata); + + $coursedata = array( + 'fullname' => 'Test 4', + 'shortname' => 'T4' + ); + $coursefour = $this->getDataGenerator()->create_course($coursedata); + + $this->getDataGenerator()->enrol_user($user->id, $coursefour->id, $role['editingteacher']->id, 'manual'); + + // Set the current user to the test user. + advanced_testcase::setuser($user->id); + + $result = local_kaltura_get_kaf_publishing_data(); + + $json = '{"courses":[{"courseId":"'.$courseone->id.'","courseName":"'.$courseone->fullname.'","roles":"Instructor"}'; + $json .= ',{"courseId":"'.$coursetwo->id.'","courseName":"'.$coursetwo->fullname.'","roles":"Learner"}'; + $json .= ',{"courseId":"'.$coursefour->id.'","courseName":"'.$coursefour->fullname.'","roles":"Instructor"}]}'; + + $this->assertEquals($json, $result); + } + + /** + * Test local_kaltura_get_kaf_publishing_data(). This test creates 4 coures. Enrolls the user as an editing teacher in coures 1 and 4, + * then enrolls the user as a student in course 2. + */ + public function test_local_kaltura_get_kaf_publishing_data_for_admin() { + $this->resetAfterTest(true); + + // Create test courses and assign the user roles. + $coursedata = array( + 'fullname' => 'Test 1', + 'shortname' => 'T1' + ); + $courseone = $this->getDataGenerator()->create_course($coursedata); + + $coursedata = array( + 'fullname' => 'Test 2', + 'shortname' => 'T2' + ); + $coursetwo = $this->getDataGenerator()->create_course($coursedata); + + $coursedata = array( + 'fullname' => 'Test 3', + 'shortname' => 'T3' + ); + $coursethree = $this->getDataGenerator()->create_course($coursedata); + + $coursedata = array( + 'fullname' => 'Test 4', + 'shortname' => 'T4' + ); + $coursefour = $this->getDataGenerator()->create_course($coursedata); + + advanced_testcase::setAdminUser(); + + $result = local_kaltura_get_kaf_publishing_data(); + + $json = '{"courses":[{"courseId":"'.$courseone->id.'","courseName":"'.$courseone->fullname.'","roles":"urn:lti:sysrole:ims\/lis\/Administrator"}'; + $json .= ',{"courseId":"'.$coursetwo->id.'","courseName":"'.$coursetwo->fullname.'","roles":"urn:lti:sysrole:ims\/lis\/Administrator"}'; + $json .= ',{"courseId":"'.$coursethree->id.'","courseName":"'.$coursethree->fullname.'","roles":"urn:lti:sysrole:ims\/lis\/Administrator"}'; + $json .= ',{"courseId":"'.$coursefour->id.'","courseName":"'.$coursefour->fullname.'","roles":"urn:lti:sysrole:ims\/lis\/Administrator"}]}'; + + $this->assertEquals($json, $result); + } + + /** + * Data provider for test_local_kaltura_url_contains_configured_hostname_fail(). + */ + public function uri_hostname_tests_invalid() { + return array( + array('http://phpunit1.tests/local_kaltura/tests'), + array('http://phpunit.2tests/local_kaltura/tests/'), + array('http://tests.phpunit/local_kaltura/tests/'), + ); + } + + /** + * Test test_local_kaltura_url_contains_configured_hostname_fail(). + * @param string $url differnt URI formats. + * @dataProvider uri_hostname_tests_invalid + */ + public function test_local_kaltura_url_contains_configured_hostname_fail($url) { + $this->resetAfterTest(true); + + set_config('kaf_uri', 'phpunit.tests', 'local_kaltura'); + + $result = local_kaltura_url_contains_configured_hostname($url); + $this->assertFalse($result); + } + + /** + * Data provider for test_local_kaltura_url_contains_configured_hostname(). + */ + public function uri_hostname_tests_valid() { + return array( + array('http://phpunit.tests/local_kaltura/'), + array('https://phpunit.tests/local_kaltura/tests/'), + ); + } + + /** + * Test test_local_kaltura_url_contains_configured_hostname(). + * @param string $url differnt URI formats. + * @dataProvider uri_hostname_tests_valid + */ + public function test_local_kaltura_url_contains_configured_hostname($url) { + $this->resetAfterTest(true); + + set_config('kaf_uri', 'phpunit.tests', 'local_kaltura'); + + $result = local_kaltura_url_contains_configured_hostname($url); + $this->assertTrue($result); + } + + /** + * Test local_kaltura_add_protocol_to_url(). + */ + public function test_local_kaltura_add_protocol_to_url() { + $expected = 'http://example.com'; + $url = local_kaltura_add_protocol_to_url($expected); + $this->assertEquals($expected, $url); + + $expected = 'https://example.com'; + $url = local_kaltura_add_protocol_to_url($expected); + $this->assertEquals($expected, $url); + + $expected = 'http://example.com'; + $url = local_kaltura_add_protocol_to_url('example.com'); + $this->assertEquals($expected, $url); + + $url = local_kaltura_add_protocol_to_url('htdddtp://example.com'); + $this->assertEmpty($url); + } + + /** + * Test local_kaltura_add_kaf_uri_token(). + */ + public function test_local_kaltura_add_kaf_uri_token() { + $this->resetAfterTest(true); + + // Set KAF URI to HTTP. + $url = 'http://this-is-a-test-with-phpunit.com'; + set_config('kaf_uri', $url, 'local_kaltura'); + + $path = '/phpunit/testing/test1/'; + $expected = $url.$path; + + // Test HTTP returns with the confgirued URL in HTTP. + $actual = 'http://'.KALTURA_URI_TOKEN.$path; + $result = local_kaltura_add_kaf_uri_token($actual); + + $this->assertEquals($expected, $result); + + // Test HTTPS returns with the configured URL in HTTP. + $actual = 'https://'.KALTURA_URI_TOKEN.$path; + $result = local_kaltura_add_kaf_uri_token($actual); + + $this->assertEquals($expected, $result); + + // Set KAF URI to HTTPS. + $url = 'https://this-is-a-test-with-phpunit.com'; + set_config('kaf_uri', $url, 'local_kaltura'); + $expected = $url.$path; + + // Test HTTP returns with the confgirued URL in HTTPS. + $actual = 'http://'.KALTURA_URI_TOKEN.$path; + $result = local_kaltura_add_kaf_uri_token($actual); + + $this->assertEquals($expected, $result); + + // Test HTTPS returns with the confgirued URL in HTTPS. + $actual = 'https://'.KALTURA_URI_TOKEN.$path; + $result = local_kaltura_add_kaf_uri_token($actual); + + $this->assertEquals($expected, $result); + } + + /** + * Test local_kaltura_encode_object_for_storage() + */ + public function test_local_kaltura_encode_object_for_storage() { + $data = array(); + $result = local_kaltura_encode_object_for_storage($data); + $this->assertEquals('', $result); + + $data = new stdClass(); + $result = local_kaltura_encode_object_for_storage($data); + $this->assertEquals('', $result); + + $data = 'hello'; + $result = local_kaltura_encode_object_for_storage($data); + $this->assertEquals('', $result); + + $data = ''; + $result = local_kaltura_encode_object_for_storage($data); + $this->assertEquals('', $result); + + $data = new stdClass(); + $data->one = 'abc'; + $data->two = 'def'; + $result = local_kaltura_encode_object_for_storage($data); + $expected = base64_encode(serialize($data)); + $this->assertEquals($expected, $result); + + $data = array('one' => 'abc', 'two' => 'def'); + $result = local_kaltura_encode_object_for_storage($data); + $expected = base64_encode(serialize($data)); + $this->assertEquals($expected, $result); + } + + /** + * Test local_kaltura_decode_object_for_storage() + */ + public function test_local_kaltura_decode_object_for_storage() { + $result = local_kaltura_decode_object_for_storage(''); + $this->assertEquals('', $result); + + $expected = new stdClass(); + $expected->one = 'abc'; + $expected->two = 'def'; + $data = base64_encode(serialize($expected)); + $result = local_kaltura_decode_object_for_storage($data); + $this->assertEquals($expected, $result); + + $expected = array('one' => 'abc', 'two' => 'def'); + $data = base64_encode(serialize($expected)); + $result = local_kaltura_decode_object_for_storage($data); + $this->assertEquals($expected, $result); + } + + /** + * Test local_kaltura_convert_kaltura_base_entry_object() + */ + public function test_local_kaltura_convert_kaltura_base_entry_object() { + $result = local_kaltura_convert_kaltura_base_entry_object(new stdclass()); + $this->assertFalse($result); + + // Test converting a video entry. + $time = time(); + $base = new KalturaMediaEntry(); + $base->dataUrl = 'http:/phpunittest.com'; + $base->width = 100; + $base->height = 200; + $base->id = 'phpunit'; + $base->name = 'phpunit title'; + $base->thumbnailUrl = 'http://phpunittest.com/thumb'; + $base->duration = 300; + $base->description = 'phpunit description'; + $base->createdAt = $time; + $base->creatorId = 'phpunit user'; + $base->tags = ''; + + $expected = new stdClass(); + $expected->url = ''; + $expected->dataurl = 'http:/phpunittest.com'; + $expected->width = 100; + $expected->height = 200; + $expected->entryid = 'phpunit'; + $expected->title = 'phpunit title'; + $expected->thumbnailurl = 'http://phpunittest.com/thumb'; + $expected->duration = 300; + $expected->description = 'phpunit description'; + $expected->createdat = $time; + $expected->owner = 'phpunit user'; + $expected->tags = ''; + $expected->showtitle = 'on'; + $expected->showdescription = 'on'; + $expected->showowner = 'on'; + $expected->player = ''; + $expected->size = ''; + + $result = local_kaltura_convert_kaltura_base_entry_object($base); + $this->assertEquals($expected, $result); + + // Test converting a video presentation entry. + $base = new KalturaDataEntry(); + $base->id = 'phpunit'; + $base->name = 'phpunit title'; + $base->description = 'phpunit description'; + $base->creatorId = 'phpunit creator'; + $base->tags = 'phpunit tags'; + $base->createdAt = $time; + $base->thumbnailUrl = 'http://phpunittest.com/thumb'; + + $expected = new stdClass(); + $expected->url = ''; + $expected->dataurl = ''; + $expected->width = 0; + $expected->height = 0; + $expected->entryid = 'phpunit'; + $expected->title = 'phpunit title'; + $expected->thumbnailurl = 'http://phpunittest.com/thumb'; + $expected->duration = 0; + $expected->description = 'phpunit description'; + $expected->createdat = $time; + $expected->owner = 'phpunit creator'; + $expected->tags = 'phpunit tags'; + $expected->showtitle = 'on'; + $expected->showdescription = 'on'; + $expected->showowner = 'on'; + $expected->player = ''; + $expected->size = ''; + + $result = local_kaltura_convert_kaltura_base_entry_object($base); + $this->assertEquals($expected, $result); + } +} diff --git a/local/kaltura/tests/migrationlib_test.php b/local/kaltura/tests/migrationlib_test.php new file mode 100644 index 0000000000000..787db66afa10a --- /dev/null +++ b/local/kaltura/tests/migrationlib_test.php @@ -0,0 +1,194 @@ +. + +/** + * Kaltura local_kaltura_migration_progress class phpunit tests. + * + * @package local_kaltura + * @author Remote-Learner.net Inc + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + * @copyright (C) 2014 Remote Learner.net Inc http://www.remote-learner.net + */ + +defined('MOODLE_INTERNAL') || die(); + +global $CFG; +require_once($CFG->dirroot.'/local/kaltura/locallib.php'); +require_once($CFG->dirroot.'/local/kaltura/migrationlib.php'); + +/** + * @group local_kaltura + */ +class local_kaltura_migrationlib_testcase extends advanced_testcase { + /** + * Test initialization of config values. + */ + public function test_initialization_of_config_values() { + $this->resetAfterTest(true); + + $result = new local_kaltura_migration_progress(); + $result = null; + + $configsettings = get_config(KALTURA_PLUGIN_NAME); + + $this->assertObjectHasAttribute('migrationstarted', $configsettings); + $this->assertObjectHasAttribute('existingcategoryrun', $configsettings); + $this->assertObjectHasAttribute('sharedcategoryrun', $configsettings); + $this->assertObjectHasAttribute('categoriescreated', $configsettings); + $this->assertObjectHasAttribute('entriesmigrated', $configsettings); + $this->assertObjectHasAttribute('kafcategoryrootid', $configsettings); + $this->assertEquals(0, $configsettings->migrationstarted); + $this->assertEquals(0, $configsettings->existingcategoryrun); + $this->assertEquals(0, $configsettings->sharedcategoryrun); + $this->assertEquals(0, $configsettings->categoriescreated); + $this->assertEquals(0, $configsettings->entriesmigrated); + $this->assertEquals(0, $configsettings->kafcategoryrootid); + } + + /** + * Test existingcategory accessor functions. + */ + public function test_existingcategoryrun() { + $this->resetAfterTest(true); + + $result = new local_kaltura_migration_progress(); + local_kaltura_migration_progress::set_existingcategoryrun(11); + $value = local_kaltura_migration_progress::get_existingcategoryrun(); + + $this->assertEquals(11, $value); + + $result = null; + $value = get_config(KALTURA_PLUGIN_NAME, 'existingcategoryrun'); + + $this->assertEquals(11, $value); + } + + /** + * Test sharedcategoryrun accessor functions. + */ + public function test_sharedcategoryrun() { + $this->resetAfterTest(true); + + $result = new local_kaltura_migration_progress(); + local_kaltura_migration_progress::set_sharedcategoryrun(11); + $value = local_kaltura_migration_progress::get_sharedcategoryrun(); + + $this->assertEquals(11, $value); + + $result = null; + $value = get_config(KALTURA_PLUGIN_NAME, 'sharedcategoryrun'); + + $this->assertEquals(11, $value); + } + + /** + * Test kafcategoryrootid functions. + */ + public function test_kafcategoryrootid() { + $this->resetAfterTest(true); + + $result = new local_kaltura_migration_progress(); + local_kaltura_migration_progress::set_kafcategoryrootid(11); + $value = local_kaltura_migration_progress::get_kafcategoryrootid(); + + $this->assertEquals(11, $value); + + $result = null; + $value = get_config(KALTURA_PLUGIN_NAME, 'kafcategoryrootid'); + + $this->assertEquals(11, $value); + } + + /** + * Test categoriescreated functions. + */ + public function test_categoriescreated() { + $this->resetAfterTest(true); + + $result = new local_kaltura_migration_progress(); + local_kaltura_migration_progress::increment_categoriescreated(); + $value = local_kaltura_migration_progress::get_categoriescreated(); + + $this->assertEquals(1, $value); + + $result = null; + $value = get_config(KALTURA_PLUGIN_NAME, 'categoriescreated'); + + $this->assertEquals(1, $value); + } + + /** + * Test entriesmigrated functions. + */ + public function test_entriesmigrated() { + $this->resetAfterTest(true); + + $result = new local_kaltura_migration_progress(); + local_kaltura_migration_progress::increment_entriesmigrated(); + $value = local_kaltura_migration_progress::get_entriesmigrated(); + + $this->assertEquals(1, $value); + + $result = null; + $value = get_config(KALTURA_PLUGIN_NAME, 'entriesmigrated'); + + $this->assertEquals(1, $value); + } + + /** + * Test migrationstarted functions. + */ + public function test_migrationstarted() { + $this->resetAfterTest(true); + + $result = new local_kaltura_migration_progress(); + local_kaltura_migration_progress::init_migrationstarted(); + $value = local_kaltura_migration_progress::get_migrationstarted(); + + $this->assertNotEquals(0, $value); + + $result = null; + $value = get_config(KALTURA_PLUGIN_NAME, 'migrationstarted'); + + $this->assertNotEquals(0, $value); + } + + /** + * Test resetting all migration progress properties functions. + */ + public function test_resetall() { + $this->resetAfterTest(true); + + $result = new local_kaltura_migration_progress(); + local_kaltura_migration_progress::set_existingcategoryrun(11); + local_kaltura_migration_progress::set_sharedcategoryrun(11); + local_kaltura_migration_progress::increment_categoriescreated(); + local_kaltura_migration_progress::increment_entriesmigrated(); + local_kaltura_migration_progress::init_migrationstarted(); + local_kaltura_migration_progress::set_kafcategoryrootid(11); + local_kaltura_migration_progress::reset_all(); + + $result = null; + + $configsettings = get_config(KALTURA_PLUGIN_NAME); + $this->assertEquals(0, $configsettings->migrationstarted); + $this->assertEquals(0, $configsettings->existingcategoryrun); + $this->assertEquals(0, $configsettings->sharedcategoryrun); + $this->assertEquals(0, $configsettings->categoriescreated); + $this->assertEquals(0, $configsettings->entriesmigrated); + $this->assertEquals(0, $configsettings->kafcategoryrootid); + } +} \ No newline at end of file diff --git a/local/kaltura/version.php b/local/kaltura/version.php new file mode 100644 index 0000000000000..95414570b1ef2 --- /dev/null +++ b/local/kaltura/version.php @@ -0,0 +1,32 @@ +. + +/** + * Kaltura version file. + * + * @package local_kaltura + * @author Remote-Learner.net Inc + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL + * @copyright (C) 2014 Remote Learner.net Inc http://www.remote-learner.net + */ + +if (!defined('MOODLE_INTERNAL')) { + die('Direct access to this script is forbidden.'); +} + +$plugin->version = 2014023000.01; +$plugin->component = 'local_kaltura'; +$plugin->release = 'Kaltura release 4.0.00 (RL: TBD)'; +$plugin->requires = 2013111801; +$plugin->maturity = MATURITY_STABLE; diff --git a/local/kaltura/yui/build/moodle-local_kaltura-lticontainer/moodle-local_kaltura-lticontainer-debug.js b/local/kaltura/yui/build/moodle-local_kaltura-lticontainer/moodle-local_kaltura-lticontainer-debug.js new file mode 100644 index 0000000000000..14660e707a1bf --- /dev/null +++ b/local/kaltura/yui/build/moodle-local_kaltura-lticontainer/moodle-local_kaltura-lticontainer-debug.js @@ -0,0 +1,167 @@ +YUI.add('moodle-local_kaltura-lticontainer', function (Y, NAME) { + +// This file is part of Moodle - http://moodle.org/ +// +// Moodle is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// Moodle is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with Moodle. If not, see . + +/** + * YUI module used to resize the LTI launch container. + * + * @package local_kaltura + * @author Remote-Learner.net Inc + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + * @copyright (C) 2014 Remote Learner.net Inc http://www.remote-learner.net + */ + +/** + * This method calls the base class constructor + * @method LTICONTAINER + */ +var LTICONTAINER = function() { + LTICONTAINER.superclass.constructor.apply(this, arguments); +}; + +Y.extend(LTICONTAINER, Y.Base, { + /** + * The last known height of the element. + * @property lastheight + * @type {Integer} + * @default null + */ + lastheight: null, + + /** + * Add padding to make the bottom of the iframe visible. The iframe wasn't visible on some themes. Probably because of border widths, etc. + * @property padding + * @type {Integer} + * @default 15 + */ + padding: 15, + + /** + * Height of window. + * @property viewportheight + * @type {Integer} + * @default 15 + */ + viewportheight: null, + + /** + * Height of the entire document. + * @property documentheight + * @type {Integer} + * @default null + */ + documentheight: null, + + /** + * Height of the body element. + * @property documentheight + * @type {Integer} + * @default null + */ + clientheight: null, + + /** + * User video width size selection. + * @property kalvidwidth + * @type {Integer} + * @default null + */ + kalvidwidth: null, + + /** + * The YUI node object for the iframe container. + * @property ltiframe + * @type {Object} + * @default null + */ + ltiframe: null, + + /** + * Init function for the checkboxselection module + * @property params + * @type {Object} + */ + init : function(params) { + var bodynode = Y.one('body[class~='+params.bodyclass+']'); + + this.lastheight = params.lastheight; + this.padding = params.padding; + this.viewportheight = bodynode.get('winHeight'); + this.documentheight = bodynode.get('docHeight'); + this.clientheight = bodynode.getDOMNode.clientHeight; + this.ltiframe = Y.one('#contentframe'); + this.kalvidwidth = params.kalvidwidth; + + this.resize(); + this.timer = Y.later(250, this, this.resize); + }, + + /** + * This function resizes the iframe height and width. + */ + resize : function() { + if (this.lastheight !== Math.min(this.documentheight, this.viewportheight)) { + var newheight = this.viewportheight - this.ltiframe.getY() - this.padding+"px"; + this.ltiframe.setStyle('height', newheight); + this.lastheight = Math.min(this.documentheight, this.viewportheight); + } + + var kalvidcontent = Y.one('#kalvid_content'); + if (kalvidcontent !== null) { + var maxwidth = kalvidcontent.get('offsetWidth'); + var allowedsize = maxwidth - this.padding; + + if (this.kalvidwidth !== null) { + // Double current user's video width selection as requested by Kaltura. + var newsize = this.kalvidwidth * 2; + + // If "newsize" if over allowed size then set it to the maximum allowed. + if (newsize > allowedsize) { + this.ltiframe.setStyle('width', allowedsize+'px'); + } else { + this.ltiframe.setStyle('width', newsize+'px'); + } + } + } + } +}, +{ + NAME : 'moodle-local_kaltura-lticontainer', + ATTRS : { + bodyclass : { + value : null + }, + lastheight : { + value : null + }, + padding: { + value : 15 + } + } +}); +M.local_kaltura = M.local_kaltura || {}; + +/** + * Entry point for lticontainer module + * @param string params additional parameters. + * @return object the lticontainer object + */ +M.local_kaltura.init = function(params) { + return new LTICONTAINER(params); +}; + + +}, '@VERSION@', {"requires": ["base", "node"]}); diff --git a/local/kaltura/yui/build/moodle-local_kaltura-lticontainer/moodle-local_kaltura-lticontainer-min.js b/local/kaltura/yui/build/moodle-local_kaltura-lticontainer/moodle-local_kaltura-lticontainer-min.js new file mode 100644 index 0000000000000..fbfe81e6b25f3 --- /dev/null +++ b/local/kaltura/yui/build/moodle-local_kaltura-lticontainer/moodle-local_kaltura-lticontainer-min.js @@ -0,0 +1 @@ +YUI.add("moodle-local_kaltura-lticontainer",function(e,t){var n=function(){n.superclass.constructor.apply(this,arguments)};e.extend(n,e.Base,{lastheight:null,padding:15,viewportheight:null,documentheight:null,clientheight:null,kalvidwidth:null,ltiframe:null,init:function(t){var n=e.one("body[class~="+t.bodyclass+"]");this.lastheight=t.lastheight,this.padding=t.padding,this.viewportheight=n.get("winHeight"),this.documentheight=n.get("docHeight"),this.clientheight=n.getDOMNode.clientHeight,this.ltiframe=e.one("#contentframe"),this.kalvidwidth=t.kalvidwidth,this.resize(),this.timer=e.later(250,this,this.resize)},resize:function(){if(this.lastheight!==Math.min(this.documentheight,this.viewportheight)){var t=this.viewportheight-this.ltiframe.getY()-this.padding+"px";this.ltiframe.setStyle("height",t),this.lastheight=Math.min(this.documentheight,this.viewportheight)}var n=e.one("#kalvid_content");if(n!==null){var r=n.get("offsetWidth"),i=r-this.padding;if(this.kalvidwidth!==null){var s=this.kalvidwidth*2;s>i?this.ltiframe.setStyle("width",i+"px"):this.ltiframe.setStyle("width",s+"px")}}}},{NAME:"moodle-local_kaltura-lticontainer",ATTRS:{bodyclass:{value:null},lastheight:{value:null},padding:{value:15}}}),M.local_kaltura=M.local_kaltura||{},M.local_kaltura.init=function(e){return new n(e)}},"@VERSION@",{requires:["base","node"]}); diff --git a/local/kaltura/yui/build/moodle-local_kaltura-lticontainer/moodle-local_kaltura-lticontainer.js b/local/kaltura/yui/build/moodle-local_kaltura-lticontainer/moodle-local_kaltura-lticontainer.js new file mode 100644 index 0000000000000..14660e707a1bf --- /dev/null +++ b/local/kaltura/yui/build/moodle-local_kaltura-lticontainer/moodle-local_kaltura-lticontainer.js @@ -0,0 +1,167 @@ +YUI.add('moodle-local_kaltura-lticontainer', function (Y, NAME) { + +// This file is part of Moodle - http://moodle.org/ +// +// Moodle is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// Moodle is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with Moodle. If not, see . + +/** + * YUI module used to resize the LTI launch container. + * + * @package local_kaltura + * @author Remote-Learner.net Inc + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + * @copyright (C) 2014 Remote Learner.net Inc http://www.remote-learner.net + */ + +/** + * This method calls the base class constructor + * @method LTICONTAINER + */ +var LTICONTAINER = function() { + LTICONTAINER.superclass.constructor.apply(this, arguments); +}; + +Y.extend(LTICONTAINER, Y.Base, { + /** + * The last known height of the element. + * @property lastheight + * @type {Integer} + * @default null + */ + lastheight: null, + + /** + * Add padding to make the bottom of the iframe visible. The iframe wasn't visible on some themes. Probably because of border widths, etc. + * @property padding + * @type {Integer} + * @default 15 + */ + padding: 15, + + /** + * Height of window. + * @property viewportheight + * @type {Integer} + * @default 15 + */ + viewportheight: null, + + /** + * Height of the entire document. + * @property documentheight + * @type {Integer} + * @default null + */ + documentheight: null, + + /** + * Height of the body element. + * @property documentheight + * @type {Integer} + * @default null + */ + clientheight: null, + + /** + * User video width size selection. + * @property kalvidwidth + * @type {Integer} + * @default null + */ + kalvidwidth: null, + + /** + * The YUI node object for the iframe container. + * @property ltiframe + * @type {Object} + * @default null + */ + ltiframe: null, + + /** + * Init function for the checkboxselection module + * @property params + * @type {Object} + */ + init : function(params) { + var bodynode = Y.one('body[class~='+params.bodyclass+']'); + + this.lastheight = params.lastheight; + this.padding = params.padding; + this.viewportheight = bodynode.get('winHeight'); + this.documentheight = bodynode.get('docHeight'); + this.clientheight = bodynode.getDOMNode.clientHeight; + this.ltiframe = Y.one('#contentframe'); + this.kalvidwidth = params.kalvidwidth; + + this.resize(); + this.timer = Y.later(250, this, this.resize); + }, + + /** + * This function resizes the iframe height and width. + */ + resize : function() { + if (this.lastheight !== Math.min(this.documentheight, this.viewportheight)) { + var newheight = this.viewportheight - this.ltiframe.getY() - this.padding+"px"; + this.ltiframe.setStyle('height', newheight); + this.lastheight = Math.min(this.documentheight, this.viewportheight); + } + + var kalvidcontent = Y.one('#kalvid_content'); + if (kalvidcontent !== null) { + var maxwidth = kalvidcontent.get('offsetWidth'); + var allowedsize = maxwidth - this.padding; + + if (this.kalvidwidth !== null) { + // Double current user's video width selection as requested by Kaltura. + var newsize = this.kalvidwidth * 2; + + // If "newsize" if over allowed size then set it to the maximum allowed. + if (newsize > allowedsize) { + this.ltiframe.setStyle('width', allowedsize+'px'); + } else { + this.ltiframe.setStyle('width', newsize+'px'); + } + } + } + } +}, +{ + NAME : 'moodle-local_kaltura-lticontainer', + ATTRS : { + bodyclass : { + value : null + }, + lastheight : { + value : null + }, + padding: { + value : 15 + } + } +}); +M.local_kaltura = M.local_kaltura || {}; + +/** + * Entry point for lticontainer module + * @param string params additional parameters. + * @return object the lticontainer object + */ +M.local_kaltura.init = function(params) { + return new LTICONTAINER(params); +}; + + +}, '@VERSION@', {"requires": ["base", "node"]}); diff --git a/local/kaltura/yui/build/moodle-local_kaltura-ltipanel/moodle-local_kaltura-ltipanel-debug.js b/local/kaltura/yui/build/moodle-local_kaltura-ltipanel/moodle-local_kaltura-ltipanel-debug.js new file mode 100644 index 0000000000000..951d31a0207aa --- /dev/null +++ b/local/kaltura/yui/build/moodle-local_kaltura-ltipanel/moodle-local_kaltura-ltipanel-debug.js @@ -0,0 +1,472 @@ +YUI.add('moodle-local_kaltura-ltipanel', function (Y, NAME) { + +// This file is part of Moodle - http://moodle.org/ +// +// Moodle is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// Moodle is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with Moodle. If not, see . + +/** + * YUI module for displaying an LTI launch within a YUI panel. + * + * @package local_kaltura + * @author Remote-Learner.net Inc + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + * @copyright (C) 2014 Remote Learner.net Inc http://www.remote-learner.net + */ + + /** + * This method calls the base class constructor + * @method LTIPANEL + */ +var LTIPANEL = function() { + LTIPANEL.superclass.constructor.apply(this, arguments); +}; + +Y.extend(LTIPANEL, Y.Base, { + /** + * Contains the object tag needed to launch an LTI session. + * @property panelbodycontent + * @type {String} + * @default null + */ + panelbodycontent: null, + + /** + * Set to true if panel is visible, otherwise false. + * @property panelvisible + * @type {Boolean} + * @default null + */ + panelvisible: false, + + /** + * The panel object + * @property panel + * @type {Object} + * @default null + */ + panel: null, + + /** + * The name of the initiating module. + * @property modulename + * @type {String} + * @default null + */ + modulename: null, + + /** + * The id value of the add media button. + * @property addvidbtnid + * @type {String} + * @default null + */ + addvidbtnid: null, + + /** + * Init function for the checkboxselection module + * @property params + * @type {Object} + */ + init : function(params) { + // Check to make sure parameters are initialized + if ('0' === params.addvidbtnid || '0' === params.ltilaunchurl || 0 === params.courseid || 0 === params.height || 0 === params.width) { + alert('Some parameters were not initialized.'); + return; + } + + this.modulename = params.modulename; + this.addvidbtnid = params.addvidbtnid; + + var addvideobtn = Y.one('#'+params.addvidbtnid); + addvideobtn.on('click', this.open_panel_callback, this, params.ltilaunchurl, params.height, params.width); + }, + + /** + * Event handler callback for when the add video button is clicked. This function creates the a panel element. + * @property e + * @type {Object} + */ + open_panel_callback : function(e, url, height, width) { + var panelheight = parseInt(height, 10) + 45; + var panelwidth = parseInt(width, 10) + 23 + 'px'; + + width = width+'px'; + // Apply special width for mobile devices as requested by Kaltura. + if (Y.UA.ipod !== 0 || Y.UA.ipad !== 0 || Y.UA.iphone !== 0 || Y.UA.android !== 0 || Y.UA.mobile !== null) { + panelwidth = '80%'; + width = '100%'; + } + + var iframe = ""; + this.panelbodycontent = iframe; + if (Y.UA.ipod !== 0 || Y.UA.ipad !== 0 || Y.UA.iphone !== 0) { + // This outer div will constrain the iframe from overlapping over its content region on iOS devices. + this.panelbodycontent = "