Custom function to save certificate automatically on server
-
Dear developers,
I’m having a problem creating custom code within the Learnpress Certificates plugin. I want to save the certificate automatically on the server, since I want the certificate to be send along with the “Passed course” mail.
I found the certificate created in the javascript file:
/wp-content/plugins/learnpress-certificates/assets/js/frontend-certificate.js
The canvas is there transformed to an base64 url, which I want to send using a POST to a custom made PHP file. This PHP file then saves the file on the server, so I can attach it to the mail later in class.lpr-email.php.Here is the code that I’m having now:
frontend-certificate.js;(function($){ window.certificates = []; function loadImage( src, callback ){ var img = new Image(); img.src = src; img.onload = function(){ $.isFunction( callback ) && callback({width: this.width, height: this.height}); } } function download(url, name){ // make the link. set the href and download. emulate dom click $('<a>').attr({ href:url, download:name })[0].click(); } function downloadPNG(canvas, name){ // convert the canvas to a data url and download it. download(canvas.toDataURL(), name+'.png'); } function downloadSVG(canvas, name) { var data = canvas.toSVG(); var locfile = new Blob([data], {type: "image/svg+xml;charset=utf-8"}); var locfilesrc = URL.createObjectURL(locfile); download(locfilesrc, name + '.svg'); } <strong> function saveImage(canvas){ var url = "saveImage.php" var dataURL = canvas.toDataURL("image/png"); $.ajax({ type: "POST", url: url, data: {img: dataURL} }).done(function(o) { alert("Succes..."); }); }</strong> window.showCert = showCert = function( $cert, certificate ){ alert("0"); $(document.body).block_ui({position: 'fixed', 'z-index': 99999, backgroundColor: '#000'});///append('<div id="user-certificate-block" />'); $cert.appendTo($(document.body)).css({top: $(document.body).scrollTop()+50}).fadeIn(); $('.close', $cert).click(function(evt){ evt.preventDefault(); $(document.body).unblock_ui(); $(this).closest('.user-certificate').fadeOut(); }); var $certificate = new fabric.Canvas( $('canvas', $cert).get(0) ); window.certificates.push($certificate); var frame = { width: $cert.width() }; <strong>saveImage($certificate);</strong> loadImage( certificate.url, function( dimensions ){ frame.ratio = frame.width / dimensions.width; frame.height = dimensions.height * frame.ratio; $certificate.selection = false; $certificate.setWidth( frame.width ); $certificate.setHeight( frame.height ); $certificate.calcOffset(); fabric.Image.fromURL( certificate.url, function(img) { $certificate.backgroundImage = img; $certificate.backgroundImage.width = frame.width; $certificate.backgroundImage.height = frame.height; }); $.each(certificate.layers, function(){ var args = this; if( ! args.type ) return; $.each(['fontSize', 'top', 'left'], function(){ args[this] = args[this] * frame.ratio; }); var layer = new fabric.Text(args.text, args); $certificate.add(layer); layer.lockMovementX = layer.lockMovementY = true; layer.lockScalingX = lockScalingY = true; layer.lockRotation = true; layer.hasBorders = false; layer.hasControls = false; layer.setControlsVisibility({ mt: false, mb: false, ml: false, mr: false, tl: false, tr: false, bl: false, br: false, mtr: false }); }, this); setTimeout(function() { $certificate.renderAll(); }, 150); $('.cert-download-png', $cert).unbind('click').click(function(e){ e.preventDefault(); downloadPNG( $certificate, $(this).data('name') ); saveImage($certificate); }); $('.cert-download-svg', $cert).unbind('click').click(function(e){ e.preventDefault(); downloadSVG( $certificate, $(this).data('name') ); }); }); } })(jQuery);
And the custom PHP file:
saveImage.php<?php //Get the base-64 string from data $filteredData=substr($_POST['img'], strpos($_POST['img'], ",")+1); //Decode the string $unencodedData=base64_decode($filteredData); //Save the image file_put_contents('img.png', $unencodedData); ?>
Both files are situated in:
wp-content/plugins/learnpress-certificates/assets/jsHope you guys can find a solution. Thanks in advance.
- The topic ‘Custom function to save certificate automatically on server’ is closed to new replies.