From 8669159b08f381ae7137b6a29a152f1ff79b1eba Mon Sep 17 00:00:00 2001 From: Nosolored Date: Fri, 20 Sep 2019 12:29:01 +0200 Subject: [PATCH 1/3] Add option to delete certificate --- app/cache/.gitkeep | 0 plugin/customcertificate/lang/english.php | 3 + plugin/customcertificate/lang/spanish.php | 4 ++ .../src/CustomCertificatePlugin.php | 44 +++++++++++++ plugin/customcertificate/src/index.php | 62 ++++++++++++------- .../src/print_certificate.php | 20 +----- 6 files changed, 92 insertions(+), 41 deletions(-) delete mode 100644 app/cache/.gitkeep diff --git a/app/cache/.gitkeep b/app/cache/.gitkeep deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/plugin/customcertificate/lang/english.php b/plugin/customcertificate/lang/english.php index b0acb74d17..8f4e2e3b14 100644 --- a/plugin/customcertificate/lang/english.php +++ b/plugin/customcertificate/lang/english.php @@ -71,3 +71,6 @@ $strings['InfoFromDefaultCertificate'] = "The content of the certificate is base $strings['to'] = " to "; $strings['formatDownloadDate'] = " to %sth %s, %s"; $strings['PrintCertificate'] = "Print certificate"; +$strings['QuestionDelete'] = "Do you want to delete the specific diploma and use the default certificate?"; +$strings['SuccessDelete'] = "Successfully deleted"; +$strings['ProblemDelete'] = "Problem deleting the certificate"; diff --git a/plugin/customcertificate/lang/spanish.php b/plugin/customcertificate/lang/spanish.php index 775071e9da..13e265b798 100644 --- a/plugin/customcertificate/lang/spanish.php +++ b/plugin/customcertificate/lang/spanish.php @@ -73,3 +73,7 @@ $strings['to'] = " a "; $strings['formatDownloadDate'] = " a %s de %s de %s"; $strings['MessageUpdate'] = "El proceso de actualización ha terminado"; $strings['PrintCertificate'] = "Imprimir certificado"; +$strings['QuestionDelete'] = "¿Desea eliminar el diploma específico y volver a usar el certificado por defecto?"; +$strings['SuccessDelete'] = "Borrado con éxito"; +$strings['ProblemDelete'] = "Hubo un problema al borrar el certificado"; + diff --git a/plugin/customcertificate/src/CustomCertificatePlugin.php b/plugin/customcertificate/src/CustomCertificatePlugin.php index 63d5050306..6ed2cf2f03 100644 --- a/plugin/customcertificate/src/CustomCertificatePlugin.php +++ b/plugin/customcertificate/src/CustomCertificatePlugin.php @@ -285,4 +285,48 @@ class CustomCertificatePlugin extends Plugin } } } + + /** + * Get certificate info. + * + * @param int $courseId + * @param int $sessionId + * @param int $accessUrlId + * + * @return array + */ + public static function getInfoCertificate($courseId, $sessionId = 0, $accessUrlId = 1) + { + $table = Database::get_main_table(self::TABLE_CUSTOMCERTIFICATE); + $sql = "SELECT * FROM $table + WHERE c_id=$courseId AND session_id=$sessionId AND access_url_id=$accessUrlId"; + $result = Database::query($sql); + $result_array = []; + if (Database::num_rows($result) > 0) { + $result_array = Database::fetch_array($result); + } + + return $result_array; + } + + /** + * Get default certificate info. + * + * @param int $accessUrlId + * + * @return array + */ + public static function getInfoCertificateDefault($accessUrlId) + { + $table = Database::get_main_table(self::TABLE_CUSTOMCERTIFICATE); + $sql = "SELECT * FROM $table + WHERE certificate_default=1 AND access_url_id=$accessUrlId"; + $result = Database::query($sql); + $result_array = []; + if (Database::num_rows($result) > 0) { + $result_array = Database::fetch_array($result); + } + + return $result_array; + } } diff --git a/plugin/customcertificate/src/index.php b/plugin/customcertificate/src/index.php index 4d16dd1cd2..5d485cc7ca 100644 --- a/plugin/customcertificate/src/index.php +++ b/plugin/customcertificate/src/index.php @@ -1,6 +1,7 @@ + $(function () { + $("#delete_certificate").click(function (e) { + e.preventDefault(); + e.stopPropagation(); + + if (confirm("'.$plugin->get_lang("QuestionDelete").'")) { + var courseId = '.$courseId.'; + var sessionId = '.$sessionId.'; + var accessUrlId = '.$accessUrlId.'; + var plugin_path = "'.api_get_path(WEB_PLUGIN_PATH).'"; + var ajax_path = plugin_path + "customcertificate/src/customcertificate.ajax.php?a=delete_certificate"; + $.ajax({ + data: {courseId: courseId, sessionId: sessionId, accessUrlId: accessUrlId}, + url: ajax_path, + type: "POST", + success: function (response) { + window.location.reload(); + } + }); + } + }); + + }); +'; // Get info certificate -$infoCertificate = Database::select( - '*', - $table, - ['where' => [ - 'access_url_id = ? AND c_id = ? AND session_id = ?' => [$accessUrlId, $courseId, $sessionId], ], - ], - 'first' -); +$infoCertificate = CustomCertificatePlugin::getInfoCertificate($courseId, $sessionId, $accessUrlId); $form = new FormValidator( 'formEdit', @@ -172,12 +191,7 @@ if ($form->validate()) { // Certificate Default if (intval($formValues['use_default'] == 1)) { - $infoCertificateDefault = Database::select( - '*', - $table, - ['where' => ['access_url_id = ? AND certificate_default = ? ' => [$accessUrlId, 1]]], - 'first' - ); + $infoCertificateDefault = CustomCertificatePlugin::getInfoCertificateDefault($accessUrlId); if (!empty($infoCertificateDefault)) { foreach ($fieldList as $field) { if (!empty($infoCertificateDefault[$field]) && !$checkLogo[$field]) { @@ -199,14 +213,9 @@ if ($form->validate()) { } if (empty($infoCertificate)) { - $infoCertificate = Database::select( - '*', - $table, - ['where' => ['access_url_id = ? AND certificate_default = ? ' => [$accessUrlId, 1]]], - 'first' - ); + $infoCertificate = CustomCertificatePlugin::getInfoCertificateDefault($accessUrlId); - if (!is_array($infoCertificate)) { + if (empty($infoCertificate)) { $infoCertificate = [ 'type_date_expediction' => '', 'year' => '', @@ -215,9 +224,7 @@ if (empty($infoCertificate)) { 'date_change' => '', ]; } - if (!empty($infoCertificate)) { - $useDefault = true; - } + $useDefault = true; } // Display the header @@ -226,6 +233,13 @@ $actionsLeft = Display::url( Display::return_icon('certificate.png', get_lang('Certificate'), '', ICON_SIZE_MEDIUM), 'print_certificate.php'.$urlParams ); +if (!empty($courseId) && !$useDefault) { + $actionsLeft .= Display::url( + Display::return_icon('delete.png', $plugin->get_lang('DeleteCertificate'), '', ICON_SIZE_MEDIUM), + 'delete_certificate.php'.$urlParams, + ['id' => 'delete_certificate'] + ); +} echo Display::toolbarAction( 'toolbar-document', diff --git a/plugin/customcertificate/src/print_certificate.php b/plugin/customcertificate/src/print_certificate.php index ace1411a3a..0570d7ac39 100644 --- a/plugin/customcertificate/src/print_certificate.php +++ b/plugin/customcertificate/src/print_certificate.php @@ -46,7 +46,7 @@ if (empty($courseCode)) { } if (empty($sessionId)) { - $sessionId = isset($_REQUEST['session_id']) ? (int) $_REQUEST['session_id'] : ''; + $sessionId = isset($_REQUEST['session_id']) ? (int) $_REQUEST['session_id'] : 0; } $accessUrlId = api_get_current_access_url_id(); @@ -83,28 +83,14 @@ $useDefault = false; $path = api_get_path(SYS_UPLOAD_PATH).'certificates/'; // Get info certificate -$infoCertificate = Database::select( - '*', - $table, - ['where' => ['access_url_id = ? AND c_id = ? AND session_id = ?' => [$accessUrlId, $courseId, $sessionId]]], - 'first' -); +$infoCertificate = CustomCertificatePlugin::getInfoCertificate($courseId, $sessionId, $accessUrlId); if (!is_array($infoCertificate)) { $infoCertificate = []; } if (empty($infoCertificate)) { - $infoCertificate = Database::select( - '*', - Database::get_main_table(CustomCertificatePlugin::TABLE_CUSTOMCERTIFICATE), - ['where' => ['access_url_id = ? AND certificate_default = ? ' => [$accessUrlId, 1]]], - 'first' - ); - - if (!is_array($infoCertificate)) { - $infoCertificate = []; - } + $infoCertificate = CustomCertificatePlugin::getInfoCertificateDefault($accessUrlId); if (empty($infoCertificate)) { Display::display_header($plugin->get_lang('PrintCertificate')); From 2f84f93e0f739f64670fa5b8e725a4e442a3b179 Mon Sep 17 00:00:00 2001 From: Nosolored Date: Fri, 20 Sep 2019 13:22:42 +0200 Subject: [PATCH 2/3] Fix code climate --- plugin/customcertificate/lang/spanish.php | 1 - .../src/CustomCertificatePlugin.php | 18 +++++++++--------- 2 files changed, 9 insertions(+), 10 deletions(-) diff --git a/plugin/customcertificate/lang/spanish.php b/plugin/customcertificate/lang/spanish.php index 13e265b798..92a6101018 100644 --- a/plugin/customcertificate/lang/spanish.php +++ b/plugin/customcertificate/lang/spanish.php @@ -76,4 +76,3 @@ $strings['PrintCertificate'] = "Imprimir certificado"; $strings['QuestionDelete'] = "¿Desea eliminar el diploma específico y volver a usar el certificado por defecto?"; $strings['SuccessDelete'] = "Borrado con éxito"; $strings['ProblemDelete'] = "Hubo un problema al borrar el certificado"; - diff --git a/plugin/customcertificate/src/CustomCertificatePlugin.php b/plugin/customcertificate/src/CustomCertificatePlugin.php index 6ed2cf2f03..1e6bbcfb1f 100644 --- a/plugin/customcertificate/src/CustomCertificatePlugin.php +++ b/plugin/customcertificate/src/CustomCertificatePlugin.php @@ -301,12 +301,12 @@ class CustomCertificatePlugin extends Plugin $sql = "SELECT * FROM $table WHERE c_id=$courseId AND session_id=$sessionId AND access_url_id=$accessUrlId"; $result = Database::query($sql); - $result_array = []; + $resultArray = []; if (Database::num_rows($result) > 0) { - $result_array = Database::fetch_array($result); + $resultArray = Database::fetch_array($result); } - - return $result_array; + + return $resultArray; } /** @@ -320,13 +320,13 @@ class CustomCertificatePlugin extends Plugin { $table = Database::get_main_table(self::TABLE_CUSTOMCERTIFICATE); $sql = "SELECT * FROM $table - WHERE certificate_default=1 AND access_url_id=$accessUrlId"; + WHERE certificate_default=1 AND access_url_id=$accessUrlId"; $result = Database::query($sql); - $result_array = []; + $resultArray = []; if (Database::num_rows($result) > 0) { - $result_array = Database::fetch_array($result); + $resultArray = Database::fetch_array($result); } - - return $result_array; + + return $resultArray; } } From 4311dee81b7825a6a997fada9d774f6669c380ff Mon Sep 17 00:00:00 2001 From: Nosolored Date: Mon, 30 Sep 2019 11:57:22 +0200 Subject: [PATCH 3/3] Fix casting and add ajax file --- app/cache/.gitkeep | 0 .../src/CustomCertificatePlugin.php | 8 ++- .../src/customcertificate.ajax.php | 54 +++++++++++++++++++ 3 files changed, 61 insertions(+), 1 deletion(-) create mode 100644 app/cache/.gitkeep create mode 100644 plugin/customcertificate/src/customcertificate.ajax.php diff --git a/app/cache/.gitkeep b/app/cache/.gitkeep new file mode 100644 index 0000000000..e69de29bb2 diff --git a/plugin/customcertificate/src/CustomCertificatePlugin.php b/plugin/customcertificate/src/CustomCertificatePlugin.php index f45601ceb6..9fcb6e7303 100644 --- a/plugin/customcertificate/src/CustomCertificatePlugin.php +++ b/plugin/customcertificate/src/CustomCertificatePlugin.php @@ -295,8 +295,12 @@ class CustomCertificatePlugin extends Plugin * * @return array */ - public static function getInfoCertificate($courseId, $sessionId = 0, $accessUrlId = 1) + public static function getInfoCertificate($courseId, $sessionId = 0, $accessUrlId) { + $courseId = (int) $courseId; + $sessionId = (int) $sessionId; + $accessUrlId = !empty($accessUrlId) ? (int) $accessUrlId : 1; + $table = Database::get_main_table(self::TABLE_CUSTOMCERTIFICATE); $sql = "SELECT * FROM $table WHERE c_id=$courseId AND session_id=$sessionId AND access_url_id=$accessUrlId"; @@ -318,6 +322,8 @@ class CustomCertificatePlugin extends Plugin */ public static function getInfoCertificateDefault($accessUrlId) { + $accessUrlId = !empty($accessUrlId) ? (int) $accessUrlId : 1; + $table = Database::get_main_table(self::TABLE_CUSTOMCERTIFICATE); $sql = "SELECT * FROM $table WHERE certificate_default=1 AND access_url_id=$accessUrlId"; diff --git a/plugin/customcertificate/src/customcertificate.ajax.php b/plugin/customcertificate/src/customcertificate.ajax.php new file mode 100644 index 0000000000..0028674fef --- /dev/null +++ b/plugin/customcertificate/src/customcertificate.ajax.php @@ -0,0 +1,54 @@ +get('enable_plugin_customcertificate') == 'true'; +$action = isset($_GET['a']) ? $_GET['a'] : null; + +$em = Database::getManager(); + +switch ($action) { + case 'delete_certificate': + if (api_is_anonymous()) { + break; + } + + $table = Database::get_main_table(CustomCertificatePlugin::TABLE_CUSTOMCERTIFICATE); + $courseId = isset($_POST['courseId']) ? (int) $_POST['courseId'] : 0; + $sessionId = isset($_POST['sessionId']) ? (int) $_POST['sessionId'] : 0; + $accessUrlId = isset($_POST['accessUrlId']) ? (int) $_POST['accessUrlId'] : 1; + if (!empty($courseId)) { + $sql = "DELETE FROM $table + WHERE c_id=$courseId AND session_id=$sessionId AND access_url_id=$accessUrlId"; + $rs = Database::query($sql); + echo Display::addFlash( + Display::return_message( + get_plugin_lang("SuccessDelete", "CustomCertificatePlugin"), + 'success' + ) + ); + } else { + echo Display::addFlash( + Display::return_message( + get_plugin_lang("ProblemDelete", "CustomCertificatePlugin"), + 'error', + false + ) + ); + } + + break; +}