script googleFormQuiz&Certificate

วันที่โพสต์: May 07, 2020 4:27:46 PM

ติดตามครูนรินทร์ รับ script ใหม่ ๆ ก่อนใครที่ https://bit.ly/2VJtwy6

เกียรบัตรรูปแบบเอกลักษณ์ไทย ใสรูปได้

// คลุม ส่วนด้านล่างนี้ copy ไปวางใน Google Script และ โปรดให้ เครดิต อย่าลบทิ้งเลย

// โค้ดนี้ พัฒนาโดย ครูนรินทร์ อนงค์ชัย ครู โรงเรียนเทพอุดมวิทยา สพม. 33 อ.สังขะ จ.สุรินทร์

// ปรับปรุ่ง ครั้งที่ 1 เมื่อ 16/04/2563 ตามคำแนะนำคุณครู มนตรี อกอุ่น โรงเรียนมัธยมทับทิมสยาม 04 จ.สุรินทร์

// ปรับปรุ่ง ครั้งที่ 2 เมื่อ 16/04/2563 ตามคำแนะนำคุณครู สุธาสินี บูรณะศิริศิลป์ โรงเรียนอนุบาลวัดสระแก้ว

// ปรับปรุง ครั้งที่ 3 เมื่อ 18/04/2563 ชื่อไฟล์ เป็น ชื่อเดียวกับ ชื่อคนทำข้อสอบ

// ปรับปรุง ครั้งที่ 4 เมื่อ 20/04/2563 เปลี่ยนเลขอาราบิกเป็นตัวเลขไทย

// ปรับปรุง ครั้งที่ 5 เมื่อ 23/04/2563 เพิ่ม ชื่อไฟล์ เป็น ชื่อเดียวกับ ชื่อคนทำข้อสอบ ปรับความแม่นยำ

// ปรับปรุง ครั้งที่ 6 เมื่อ 23/04/2563 เพิ่ม ปรับความแม่นยำ และ รวดเร็ว โดย ครูยุทธนา แม่นผล สังขะ สุรินทร์

// 1. google slide template ID =====================

var TEMPLATE_ID = 'xxxxx' //เอามาจาก google slide ที่เราออกแบบเกียรติบัตรไว้

// 2. ระบุคะแนนผ่าน ==================================

var PASS_PERCENT = 70;

// 3. สร้าง email====================================

var EMAIL_SUBJECT = 'ขอแสดงความยินดี คุณผ่านการการอบรม'

// 4. เนื้อหาในอีเมล์

var EMAIL_BODY = 'ยินดีด้วย คุณสอบผ่านการอบรม ติดตามบทเรียน Online อื่นจาก สพป.เลย เขต 1 ได้ที่เว็บไซต์ http://covid19school.loei1.go.th'

//=======================นอกนั้นถ้าไม่ถนัด ไม่ต้องแก้ไข นะครับ==========================

function getGoogleFormQuizScore() {

var sum_score = 0;

var total_score = 0;

var emailTo = [];

var form = FormApp.getActiveForm();

var formResponses = form.getResponses();

//=========== รับค่า คำตอบ ชื่อของ ผู้ทำข้อสอบ ====================

for (var i = 0; i < formResponses.length; i++) {

var formResponse = formResponses[formResponses.length-1];

}

var itemResponses = formResponse.getItemResponses();

var itemResponse = itemResponses[0];

var user_name = itemResponse.getResponse(); //ตำแหน่ง ที่ 1

//--------------------------------------------------------------------

var getItems = form.getItems();

var item_title = getItems[3];

var folder_ftitle = item_title.getTitle();

Logger.log(folder_ftitle);

var form_title = folder_ftitle +' (File responses)';

var image_folder = DriveApp.getFoldersByName(form_title)

while (image_folder.hasNext()) {

var folder = image_folder.next();

folder.setSharing(DriveApp.Access.ANYONE, DriveApp.Permission.VIEW);

}

Logger.log('form title', form_title);

//-----------------------------------------------------------------------------------

//=============== รัน เลขที่เกียรติบัตร ให้มี เลข 0 นำหน้า ========================

var form_submit = formResponses.length + 1;

var str = "" + form_submit;

var pad = "000000"; //จำนวนหลักที่คาดว่ามีคนเข้าใช้งาน

var running_id = pad.substring(0, pad.length - str.length) + str + "/" + getThaiYear();

// =================== เอาข้อมูลทั้งหมด ไป แทนที่ข้อความ ใน google slide ==================

//======================== ดึงข้อมูลชื่อคนสอบ อีเมล์

var response = form.getResponses().reverse()[0];

var email_back_to = response.getRespondentEmail(); // เอาไปใส่ ใน code ส่งอีเมล์

Logger.log(email_back_to);

var items = form.getItems();

for (var i=0; i<items.length; i++) {

var question = items[i];

// =========== ดึงข้อมูลชื่อคนสอบ และ ดึงข้อมูลตำแหน่ง แก้ไข 20/04/2020

var name_question = items[0];

var position_question = items[1];

// ======== ดึงข้อมูล ชื่อโรงเรียน 24/04/2563

var school_question = items[2];

//-------------------------------------------------------------

var image_question = items[3];

// ===========

var qTitle = question.getTitle();

var qType = question.getType();

var responseForItem = response.getResponseForItem(question); // === แก้ไข 20/04/2020

// =========== ดึงข้อมูลชื่อคนสอบ 20/04/2020

var name_responseForItem = response.getResponseForItem(name_question);

var name_answer = name_responseForItem.getResponse();

// =========== ดึงข้อมูลตำแหน่ง แก้ไข 20/04/2020

var position_responseForItem = response.getResponseForItem(position_question);

var position_answer = position_responseForItem.getResponse() ;

// =========== ดึงข้อมูล โรงเรียน แก้ไข 24/04/2020

var school_responseForItem = response.getResponseForItem(school_question);

var school_answer = position_responseForItem.getResponse() ;

//-------------------------------------------------------------------

var image_responseForItem = response.getResponseForItem(image_question);

var image_id = position_responseForItem.getResponse() ;

//=========ขั้นตอนเก็บค่าคะแนน=========================================

var answer = responseForItem ? responseForItem.getResponse() : null;

var item = castQuizItem_(question, qType);

if (item && typeof item.getPoints === "function") {

var maxScore = item.getPoints();

var gradableResponseForItem = response.getGradableResponseForItem(question);

var score = gradableResponseForItem.getScore();

Logger.log(String(qType), qTitle, answer, maxScore, score );

sum_score = sum_score + score;

total_score = total_score + maxScore;

}

}

Logger.log('image_uploaded', image_id)

var sum_total = sum_score*100/total_score; //======= รวมคะแนน ====================

var percentage = sum_total.toFixed(2);

if(percentage == 100){

percentage = sum_total.toFixed(0); // ถ้าคะแนนเป็น 100 ไม่ต้อมี .00 ==================

}

if (percentage >= PASS_PERCENT && email_back_to == response.getRespondentEmail()){

// ========== copy Slide ====== เท็มเพลตเกียรติบัตรที่สร้างด้วย googl slide

var file = DriveApp.getFileById(TEMPLATE_ID).makeCopy()

var copyFile = file.makeCopy('เกียรติบัตรผ่านการอบรมของ '+user_name);

var copyId = copyFile.getId()

var copyDoc = SlidesApp.openById(copyId);

var slides = copyDoc.getSlides();

var templateSlide = slides[0];

var shapes = templateSlide.getShapes();

//--------------------------------------------------------------------------

Logger.log("สวัสดีครับ ",name_answer,"ตำแหน่ง",position_answer,"ที่อยู่อีเมล์", email_back_to);

Logger.log("ข้อสอบนี้มีคะแนน คะแนนเต็ม =",total_score,"คะแนนที่ได้ ",sum_score, "คิดเป็น ร้อยละ", percentage);

Logger.log("ผลการสอบ", "คุณผ่าน ขอแสดงความยินดีด้วยครับ");

//-------------------------------------------------------------------------------------

// var IMAGE_URL_1 = 'https://drive.google.com/uc?export=view&id='+ image_id;

var IMAGE_URL_1 = 'https://doc.google.com/uc?export=view&id='+ image_id;

templateSlide.insertImage(IMAGE_URL_1, 20, 380, 150, 225).sendToBack();

//--------------------------------

shapes.forEach(function (shape) {

shape.getText().replaceAllText("{{name}}", name_answer);

shape.getText().replaceAllText("{{position}}", position_answer);

shape.getText().replaceAllText('{{school}}', school_answer);

shape.getText().replaceAllText("{{email}}", email_back_to);

shape.getText().replaceAllText("{{score}}", thaiNumber(percentage));

shape.getText().replaceAllText("{{id}}", thaiNumber(running_id));

shape.getText().replaceAllText("{{date}}", getThaiDate());

shape.getText().replaceAllText('{{month}}',getThaiMonth());

shape.getText().replaceAllText('{{year}}', getThaiYear());

});

//รอให้ การทำงาน ข้อต้น เสร็จ/ตรวจสอบว่า ทำงานเสร็จแล้ว ให้ทำงาน ลำดับต่อไป =====================

copyDoc.saveAndClose();

// ========== สร้างไฟล์ pdf

var newFile = DriveApp.createFile(copyFile.getAs("application/pdf"));

//===============คำสั่ง ส่งอีเมล์ ==== ถ้าผ่านเก็บสำเนา ถ้าไม่ผ่าน ไม่เก็บสำเนา ยังไม่แก้ ===============

MailApp.sendEmail(email_back_to, EMAIL_SUBJECT, EMAIL_BODY, {attachments: [newFile],});

} else {

// ถ้าไม่ผ่าน ไม่ต้องสร้าง pdf ส่งอีเมล์ แจ้ง ว่าไม่ผ่าน

MailApp.sendEmail( email_back_to, "ผลการสอบของคุณ", "ขอแสดงความเสียใจ คุณสอบไม่ผ่าน");

}

// ================ ขั้นตอน พิจารณา ลบไฟล์สำเนามาทิ้ง ======================================

//ไฟล์ google slide สำเนาต้นฉบับ ถ้าไม่ต้องการ ลบไฟล ใส่ เครื่องหมาย // คอมเมนต์ ไว้หน้า code บรรทัดต่อไป

file.setTrashed(true);

// ถ้าไม่ต้องการ ลบไฟล์ pdf ให้ ใส่ เครื่องหมาย // คอมเมนต์ ไว้หน้า code บรรทัดต่อไป

newFile.setTrashed(true);

//ไฟล์ google slide สำเนาต้นฉบับที่ถูกแทนที่ ด้วยข้อความใหม่ ถ้าไม่ต้องการ ลบไฟล ใส่ เครื่องหมาย // คอมเมนต์ ไว้หน้า code บรรทัดต่อไป

copyFile.setTrashed(true);

}

//================เปลี่ยนวันที่เป็นแบบไทย=======================================

function getThaiDate() {

var date = new Date();

var DATE = date.getDate();

return thaiNumber(DATE);

}

function getThaiMonth() {

var date = new Date();

var DATE = date.getDate();

var MONTH = ["มกราคม","กุมภาพันธ์","มีนาคม","เมษายน","พฤษภาคม","มิถุนายน","กรกฎาคม","สิงหาคม","กันยายน","ตุลาคม","พฤศจิกายน","ธันวาคม"];

var THAI_MONTH = MONTH[date.getMonth()];

return THAI_MONTH

}

//==============================เปลี่ยนปี ค.ศ.เป็น พ.ศ.==============

function getThaiYear() {

var date = new Date();

var YEAR = date.getFullYear();

var THAI_YEAR = YEAR + 543;

return thaiNumber(THAI_YEAR);

}

// ============ ฟั่งชั่นเปลี่ยน เลขอาราบิก เป็น เลขไทย =========================

function thaiNumber(num){

var array = {"1":"๑", "2":"๒", "3":"๓", "4" : "๔", "5" : "๕", "6" : "๖", "7" : "๗", "8" : "๘", "9" : "๙", "0" : "๐"};

var str = num.toString();

for (var val in array) {

str = str.split(val).join(array[val]);

}

return str;

}

// ==== ฟังก์ชั่น ตรวจสอบว่า ได้เฉพาะ ข้อสอบแบบ ตัวเลือก เท่านั้น ข้อสอบแบบอื่น จะไม่นำคะแนน มารวม ===================

function castQuizItem_(item, itemType) {

if (itemType === FormApp.ItemType.MULTIPLE_CHOICE) {

return item.asMultipleChoiceItem();

} if (itemType === FormApp.ItemType.TEXT) {

return item.asTextItem();

}

return null;

}