Skip to content

Instantly share code, notes, and snippets.

@biarm
Created April 25, 2015 14:44
Show Gist options
  • Save biarm/fa5e52082c835bb4d9d5 to your computer and use it in GitHub Desktop.
Save biarm/fa5e52082c835bb4d9d5 to your computer and use it in GitHub Desktop.
// Глобальные переменные
var email = Session.getEffectiveUser().getEmail(); // адрес пользователя
email = email.toLowerCase();
var date = new Date();
var SPREADSHEET_ID = "0ApcwrJ2inIl8dGxpdlJ4VGJTM0RYX1c3Ulo4b3hJbXc";
var doc = SpreadsheetApp.openById(SPREADSHEET_ID);
var s = doc.getActiveSheet();
var userName = Session.getEffectiveUser().getUsername();
var total = 0; // Общее количество баллов
var score = [ ]; // Массив отметок
var Max = 16; // Общее количество вопросов
var row = s.getLastRow(); // Номер строки с последней записью
// Проверяем, есть ли пользователь в списке
var NumUser = FindUser(email);
Logger.log(row); Logger.log(NumUser);
if (NumUser>row) // Новый пользователь
{
s.getRange(NumUser,1).setValue(date);
s.getRange(NumUser,2).setValue('Имя');
s.getRange(NumUser,3).setValue(email);
var fullName = 'Введите имя';
}
else {var fullName = s.getRange(NumUser,2).getValue(); // Берем имя из таблицы
s.getRange(NumUser,22).setValue(date); } // Записываем время выполнения текущего задания
Logger.log(fullName);
function doGet(e) {
var app = UiApp.createApplication().setTitle('Проверка заданий');
// Задаем сетку (таблицу) на интерфейсной панели
// Вносим автоматически в текстовые поля информацию о пользователе
// При проверке первого задания пользователь записывает свое имя в соотв. поле
var grid = app.createGrid(2, 2).setId('grid');
grid.setWidget(0, 0, app.createLabel('Ваше имя:').setStyleAttribute("fontWeight", "bold"));
grid.setWidget(0, 1, app.createTextBox().setName('UserFullName').setValue(fullName));
grid.setWidget(1, 0, app.createLabel('email').setStyleAttribute("fontWeight", "bold"));
grid.setWidget(1, 1, app.createTextBox().setName('mail').setValue(email));
// Создаем интерфейсную панель
var panel = app.createVerticalPanel()
.setId("panel");
var Label1 = app.createLabel('Выполните задание')
.setId('instruction1')
.setStyleAttribute('margin-top', '20px')
.setStyleAttribute("fontWeight", "bold");
var Label2 = app.createLabel('Для проверки найдите его в списке и щелкните кнопку')
.setId('instruction2')
.setStyleAttribute("fontWeight", "bold");
var thanks1 = app.createLabel('Результаты проверки:')
.setVisible(false)
.setId('thanks1')
.setStyleAttribute('margin-left', '20px')
.setStyleAttribute('margin-top', '20px')
.setStyleAttribute("fontWeight", "bold");
var Result = app.createGrid(Max, 2).setId('Result').setVisible(false); // Таблица заданий с результатами
for (var i = 0; i < Max; i++)
{
Result.setWidget(i, 0, app.createLabel('Задание' + (i + 1)).setStyleAttribute("fontWeight", "bold"));
Result.setWidget(i, 1, app.createTextBox().setId('Task'+ (i + 1)).setValue(score[i]))
.setStyleAttribute("fontWeight", "bold")
.setStyleAttribute('backgroundColor', "#dddd00");;
}
var WellDone = app.createLabel('Отлично! Вы справились со всеми заданиями!')
.setVisible(false)
.setId('Done')
.setStyleAttribute('margin-left', '20px')
.setStyleAttribute('margin-top', '20px')
.setStyleAttribute('color', '#800000')
.setStyleAttribute('fontWeight', "bold");
var NotDone = app.createLabel('ВЫ НЕ ЗАВЕРШИЛИ РАБОТУ')
.setVisible(false)
.setId('NotDone')
.setStyleAttribute('margin-left', '20px')
.setStyleAttribute('margin-top', '20px')
.setStyleAttribute('color', '#800000')
.setStyleAttribute('fontWeight', "bold");
var warning = app.createLabel('Вы не выбрали номер задания')
.setVisible(false)
.setId('warning')
.setStyleAttribute('margin-top', '10px')
.setStyleAttribute("fontWeight", "bold")
.setStyleAttribute("color", "red");
var warning1 = app.createLabel('Имя должно соответствовать тому, с которым вы регистрировались на курсе')
.setVisible(true)
.setId('warning1')
.setStyleAttribute('margin-top', '10px')
.setStyleAttribute("fontWeight", "bold")
.setStyleAttribute("color", "#800000");
var ListOfTasks = app.createListBox(false).setId('ListId').setName('ListName')
.setVisibleItemCount(1)
.setWidth(210)
.setStyleAttribute('margin-top', '20px')
.setStyleAttribute("fontWeight", "bold")
.setStyleAttribute("color", "#000000")
.setStyleAttribute("background", "#ffffff")
.setTitle('Выберите номер задания')
.addItem('Выберите номер задания')
.addItem('Задание 1')
.addItem('Задание 2')
.addItem('Задание 3')
.addItem('Задание 4')
.addItem('Задание 5')
.addItem('Задание 6')
.addItem('Задание 7')
.addItem('Задание 8')
.addItem('Задание 9')
.addItem('Задание 10')
.addItem('Задание 11')
.addItem('Задание 12')
.addItem('Задание 13')
.addItem('Задание 14')
.addItem('Задание 15')
.addItem('Задание 16')
.addItem('Завершение работы');
var button = app.createButton('Отправить на проверку').setId('send')
.setStyleAttribute("fontWeight", "bold")
.setStyleAttribute("color", "#000000")
.setWidth(210);
var handler = app.createServerHandler('CheckTask');
button.addClickHandler(handler);
handler.addCallbackElement(panel);
//Logger.log(ListOfTasks.Items);
// Добавляем все созданные элементы
panel.add(grid);
panel.add(Label1);
panel.add(Label2);
panel.add(ListOfTasks);
panel.add(button);
panel.add(warning);
panel.add(warning1);
panel.add(thanks1);
panel.add(Result);
panel.add(WellDone);
panel.add(NotDone);
app.add(panel);
return app;
}
// Создаем выпадающий список для выбора задания
function CheckTask(eventInfo) {
var app = UiApp.getActiveApplication();
app.getElementById('warning1').setVisible(false);
var value = eventInfo.parameter.ListName;
var SertificateName = eventInfo.parameter.UserFullName;
if (SertificateName == 'Введите имя') {app.getElementById('warning1').setVisible(true);}
else {
switch (value) {
case 'Задание 1':
findMessage(SertificateName);
break;
case 'Задание 2':
RecievedMessage(SertificateName);
break;
case 'Задание 3':
SentMessageCopy(SertificateName);
break;
case 'Задание 4':
testFolderExist(SertificateName);
break;
case 'Задание 5':
folderStarred(SertificateName);
break;
case 'Задание 6':
checkCopy(SertificateName);
break;
case 'Задание 7':
testFile(SertificateName);
break;
case 'Задание 8':
editorShared(SertificateName);
break;
case 'Задание 9':
SentMessageAttachments(SertificateName)
break;
case 'Задание 10':
GoogleSearch(SertificateName,1);
break;
case 'Задание 11':
GoogleSearch(SertificateName,2);
break;
case 'Задание 12':
SentFile(SertificateName);
break;
case 'Задание 13':
MapAttached(SertificateName);
break;
case 'Задание 14':
SentForma(SertificateName);
break;
case 'Задание 15':
SentMessageSite(SertificateName);
break;
case 'Задание 16':
SentGooglePlus(SertificateName);
break;
case 'Завершение работы':
Sertificate(SertificateName);
break;
default:
app.getElementById('warning').setVisible(true);
break;
}}
return app;
}
// Функция поиска пользователя в таблице продвижения
function FindUser(mail)
{
var i = 2;
while ((i <= row) && s.getRange(i,3).getValue()!= mail)
{i++;}
return(i);
}
function ScanResults () // Сканируем таблицу и записываем результаты в массив
{
for (var i = 0; i <Max; i++)
{ score[i] = s.getRange(NumUser,i+4).getValue();
// Logger.log(score[i]);
}
}
function BackToPanel() {
// Возвращаемся на интерфейсную панель
// Скрываем ненужную информацию
// Выводим сообщение о результатах
ScanResults();
var app = UiApp.getActiveApplication();
app.getElementById('thanks1').setVisible(true);
app.getElementById('send').setVisible(false);
app.getElementById('grid').setVisible(false);
app.getElementById('instruction1').setVisible(false);
app.getElementById('instruction2').setVisible(false);
app.getElementById('ListId').setVisible(false);
app.getElementById('warning').setVisible(false);
app.getElementById('Result').setVisible(true);
for (var i = 0; i < Max; i++)
{
if (score[i] != 'ВЫПОЛНЕНО') {colorText = '#800000';}
else {colorText = '#008000';}
app.getElementById('Task'+ (i + 1)).setValue(score[i]).setStyleAttribute('color', colorText);
}
if (total == Max) {app.getElementById('Done').setVisible(true);}
else {app.getElementById('NotDone').setVisible(true);}
app.close();
// The following line is REQUIRED for the widget to actually close.
return app;
}
/////////////////////////////////////////////////////////////////////////////////
// Проверка выполнения заданий и запись отметки в таблицу продвижения //
/////////////////////////////////////////////////////////////////////////////////
/////////// Проверка Задания 1. Отправка письма с заднной темой ///////////
/////////////////////////////////////////////////////////////////////////////////
function findMessage(name) {
s.getRange(NumUser,2).setValue(name); // Запись имени в таблицу продвижения
// Ищем отправленное письмо с указанным адресом
var hisMail = 'kozma.prutkov1803@gmail.com';
var threadsSent = GmailApp.search('to:kozma.prutkov1803@gmail.com'); // все цепочки с адресом Козьмы
if (threadsSent.length == 0) // Писем с указанным адресом не нашлось
{ s.getRange(NumUser,4).setValue("ЕСТЬ ОШИБКИ")
.setBackground("#ffff00");}
else { findMessageSubject()} // Ищем письмо с заданной темой
// Возвращаемся на интерфейсную панель
Logger.log('Возврат');
BackToPanel();
}
function findMessageSubject() {
// Ищем письмо с указанной темой
var threadsSent = GmailApp.search('to:kozma.prutkov1803@gmail.com'); // Все цепочки с адресом Козьмы
var MsgSent = GmailApp.getMessagesForThreads(threadsSent); // Двумерный массив писем в этих цепочках
var flag = false; // Индикатор успешности поиска
var i = 0;
while (i < MsgSent.length && !flag) // Перебор по цепочкам
{ var j = 0;
while (j < MsgSent[i].length && !flag) // Перебор писем в заданной цепочке
{ var subject = MsgSent[i][j].getSubject(); // Определяем поле subject
// Logger.log(subject);
if (subject == 'Привет' || subject == 'ПРИВЕТ' | subject == 'привет')
{flag = true;}
j++;
}
i++;
}
if (!flag)
{ s.getRange(NumUser,4).setValue("ЕСТЬ ОШИБКИ")
.setBackground("#ffff00");}
else
{ s.getRange(NumUser,4).setValue("ВЫПОЛНЕНО")
.setBackground("#00ff00");}
}
///////////////////// Конец проверки Задания 1 //////////////////////
/////////////////////////////////////////////////////////////////////////////////
/////////// Проверка Задания 2. Полученное письмо помечено меткой /////////
/////////////////////////////////////////////////////////////////////////////////
function RecievedMessage(name) {
s.getRange(NumUser,2).setValue(name); // Запись имени в таблицу продвижения
var threadsRecieved = GmailApp.search('from:kozma.prutkov1803@gmail.com'); // Все цепочки с адресом Козьмы
if (threadsRecieved.length == 0) // Письма с указанным адресом не нашлось)
{ s.getRange(NumUser,5).setValue("ЕСТЬ ОШИБКИ")
.setBackground("#ffff00");}
else {RecivedMessageMarked()} // Проверяем, помечено ли письмо
// Возвращаемся на интерфейсную панель
BackToPanel();
}
function RecivedMessageMarked() {
var threadsRecieved = GmailApp.search('from:kozma.prutkov1803@gmail.com');// Все цепочки с адресом Козьмы
Logger.log(threadsRecieved.length);
var flag = false; // Индикатор успешности поиска
var i = 0;
while (i < threadsRecieved.length && !flag) // Перебор по цепочкам
{
var Important = threadsRecieved[i].isImportant();
var Starred = threadsRecieved[i].hasStarredMessages();
var Label = threadsRecieved[i].getLabels();
if (Label.length == 0) {
var b = false;
}
else {
var b = Label[0].getName() == 'Песочница' || Label[0].getName() == 'песочница' || Label[0].getName() == 'ПЕСОЧНИЦА';
}
if (Important && Starred && b) {flag = true;}
i++;
Logger.log(flag);
}
if (flag)
{s.getRange(NumUser,5).setValue("ВЫПОЛНЕНО")
.setBackground("#00ff00");}
else {s.getRange(NumUser,5).setValue("ЕСТЬ ОШИБКИ")
.setBackground("#ffff00");}
}
///////////////////// Конец проверки Задания 2 //////////////////////
/////////////////////////////////////////////////////////////////////////////////
/////////// Проверка Задания 3. Письмо включает копию и скрытую копию ////
/////////////////////////////////////////////////////////////////////////////////
function SentMessageCopy(name) {
s.getRange(NumUser,2).setValue(name); // Запись имени в таблицу продвижения
var threadsSent = GmailApp.search('to:ostap.bender1803@gmail.com');
if (threadsSent.length == 0) // Письма с указанным адресом не нашлось)
{ s.getRange(NumUser,6).setValue("ЕСТЬ ОШИБКИ")
.setBackground("#ffff00");}
else {SentMessageCcBcc()} // Проверяем, имеет ли письмо копии
// Возвращаемся на интерфейсную панель
BackToPanel();
}
function SentMessageCcBcc() {
Logger.log('ostap');
var threadsSent = GmailApp.search('to:ostap.bender1803@gmail.com'); // Все цепочки сообщений Остапу
var Messages = GmailApp.getMessagesForThreads(threadsSent); // Двумерный массив сообщений Остапу
var flag = false; // Индикатор успешности поиска
var i = 0;
while (i < Messages.length && !flag) // Перебор по цепочкам
{ var j = 0;
while (j < Messages[i].length && !flag) // Перебор по письмам внутри цепочки
{
var Cc = Messages[i][j].getCc(); // Проверяем копию
Cc = Cc.toLowerCase();
var posCc = Cc.indexOf(email); // Копия на нужный адрес
var Bcc = Messages[i][j].getBcc(); // Проверяем скрытую копию
Bcc = Bcc.toLowerCase();
var posBcc = Bcc.indexOf('kozma.prutkov1803@gmail.com'); // Скрытая копия на нужный адрес
flag = (posCc != -1) & (posBcc != -1);
Logger.log(Cc);
Logger.log(posCc);
Logger.log(posBcc);
Logger.log(flag);
j++;
}
i++;
}
if (flag)
{s.getRange(NumUser,6).setValue("ВЫПОЛНЕНО")
.setBackground("#00ff00"); }
else {s.getRange(NumUser,6).setValue("ЕСТЬ ОШИБКИ")
.setBackground("#ffff00");}
}
///////////////////// Конец проверки Задания 3 //////////////////////
/////////////////////////////////////////////////////////////////////////////////
/////////// Проверка Задания 4. Создание папки с заданным именем //////////
/////////////////////////////////////////////////////////////////////////////////
function testFolderExist(name){
s.getRange(NumUser,2).setValue(name); // Запись имени в таблицу продвижения
if (testFolder('092014')) {
s.getRange(NumUser,7).setValue("ВЫПОЛНЕНО")
.setBackground("#00ff00");
}
else{
s.getRange(NumUser,7).setValue("ЕСТЬ ОШИБКИ")
.setBackground("#ffff00");
}
// Возвращаемся на интерфейсную панель
BackToPanel();
}
function testFolder(folderName){
var exist = true;
try{var testFolder = DocsList.getFolder(folderName)}
catch(err){exist=false}
return exist;
}
///////////////////// Конец проверки Задания 4 //////////////////////
/////////////////////////////////////////////////////////////////////////////////
/////////// Проверка Задания 5. Пометить папку звездочкой /////////
////////////////////////////////////////////////////////////////////////////////
function folderStarred(name) {
s.getRange(NumUser,2).setValue(name); // Запись имени в таблицу продвижения
var folders = DriveApp.getFoldersByName('092014');
var flag = true;
while (folders.hasNext() && flag)
{var folder = folders.next();
if (folder.isStarred()) {
s.getRange(NumUser,8).setValue("ВЫПОЛНЕНО")
.setBackground("#00ff00");
flag = !flag;
}
}
if (flag) {
s.getRange(NumUser,8).setValue("ЕСТЬ ОШИБКИ")
.setBackground("#ffff00");
}
BackToPanel();
}
///////////////////// Конец проверки Задания 5 //////////////////////
/////////////////////////////////////////////////////////////////////////////////
/////////// Проверка Задания 6. Создание копии документа /////////////
/////////////////////////////////////////////////////////////////////////////////
function checkCopy(name) {
s.getRange(NumUser,2).setValue(name); // Запись имени в таблицу продвижения
var files = DriveApp.getFilesByName('Мой рабочий лист конференции');
var flag = true;
while (files.hasNext() && flag) {
var file = files.next();
var fileId = file.getId();
var content = DocumentApp.openById(fileId).getText();
if (content = 'Рабочий лист конференции')
{
s.getRange(NumUser,9).setValue("ВЫПОЛНЕНО")
.setBackground("#00ff00");
flag = !flag;
}
}
if (flag)
{s.getRange(NumUser,9).setValue("ЕСТЬ ОШИБКИ")
.setBackground("#ffff00");}
// Возвращаемся на интерфейсную панель
BackToPanel();
}
///////////////////// Конец проверки Задания 6 //////////////////////
/////////////////////////////////////////////////////////////////////////////////
/////////// Проверка Задания 7. Создание файла с заданным именем ////////
/////////////////////////////////////////////////////////////////////////////////
function testFile(name){
s.getRange(NumUser,2).setValue(name); // Запись имени в таблицу продвижения
var folder = DocsList.getFolder('092014');
var file = folder.getFiles();
var flag = true;
var i = 0;
while (i < file.length && flag)
{
if (file[i].getName() == 'тест'){
s.getRange(NumUser,10).setValue("ВЫПОЛНЕНО")
.setBackground("#00ff00");
flag = !flag;
}
i++;
}
if (flag) { s.getRange(NumUser,10).setValue("ЕСТЬ ОШИБКИ")
.setBackground("#ffff00");}
// Возвращаемся на интерфейсную панель
BackToPanel();
}
///////////////////// Конец проверки Задания 7 //////////////////////
//////////////////////////////////////////////////////////////////////////////////
/////////// Проверка Задания 8. Расшаривание файла /////////////
/////////////////////////////////////////////////////////////////////////////////
function editorShared(name) {
s.getRange(NumUser,2).setValue(name); // Запись имени в таблицу продвижения
var files = DriveApp.getFilesByName('тест');
var flag = true;
while (files.hasNext() && flag) {
var file = files.next();
var editors = file.getEditors();
var i = 0;
while (i < editors.length && flag)
{
var curEditor = editors[i].getName();
if (curEditor == 'Козьма Прутков') {
s.getRange(NumUser,11).setValue("ВЫПОЛНЕНО")
.setBackground("#00ff00");
flag = !flag;
}
i++;
}
}
if (flag)
{ s.getRange(NumUser,11).setValue("ЕСТЬ ОШИБКИ")
.setBackground("#ffff00"); }
// Возвращаемся на интерфейсную панель
BackToPanel();
}
///////////////////// Конец проверки Задания 8 //////////////////////
/////////////////////////////////////////////////////////////////////////////////
/////////// Проверка Задания 9. Письмо содержит вложение ////
/////////////////////////////////////////////////////////////////////////////////
function SentMessageAttachments(name) {
s.getRange(NumUser,2).setValue(name); // Запись имени в таблицу продвижения
var threadsSent = GmailApp.search('to:kozma.prutkov1803@gmail.com subject:"ВЛОЖЕНИЕ"');
if (threadsSent.length == 0) // Письма с указанным адресом и темой не нашлось
{ s.getRange(NumUser,12).setValue("ЕСТЬ ОШИБКИ")
.setBackground("#ffff00");}
else {SentMessageAttachment()} // Проверяем, имеет ли письмо нужное вложение
// Возвращаемся на интерфейсную панель
BackToPanel();
}
function SentMessageAttachment() {
var threadsSent = GmailApp.search('to:kozma.prutkov1803@gmail.com subject:"ВЛОЖЕНИЕ"'); // Все цепочки писем Козьме с темой ВЛОЖЕНИЕ
var Messages = GmailApp.getMessagesForThreads(threadsSent); // Все письма цепочек (двумерный массив)
var flag = false; // Индикатор успешности поиска
var stroka = '<https://docs.google.com/document/d/';
var i = 0 ;
while (i < Messages.length && !flag) {
var j = 0;
while (j < Messages[i].length && !flag) {
var link = Messages[i][j].getPlainBody();
Logger.log(link);
if ((link.indexOf('тест') != -1 || link.indexOf('ТЕСТ') != -1 || link.indexOf('Тест') != -1) &&
link.indexOf(stroka) != -1)
{ flag = true;}
j++;
} // Конец цикла по j
i++;
} // Конец цикла по i
if (flag)
{s.getRange(NumUser,12).setValue("ВЫПОЛНЕНО")
.setBackground("#00ff00"); }
else {s.getRange(NumUser,12).setValue("ЕСТЬ ОШИБКИ")
.setBackground("#ffff00");}
}
///////////////////// Конец проверки Задания 9 //////////////////////
/////////////////////////////////////////////////////////////////////////////////
/////////// Проверка Заданий 10-11. Выполнен поиск информации //////////
/////////////////////////////////////////////////////////////////////////////////
function GoogleSearch (name,n) {
// n - номер задания на поиск информации
s.getRange(NumUser,2).setValue(name); // Запись имени в таблицу продвижения
var threads = GmailApp.search('to:kozma.prutkov1803@gmail.com subject:"ПОИСК" OR "КАРТИНКА"');
var flag = false; // Индикаторы успешности поиска нужного письма
// Если письма с таким subject не найдены, задание ЕСТЬ ОШИБКИ
if (n == 1) {var nColomn = 13;}
if (n == 2) {var nColomn = 14;}
Logger.log(threads.length);
if (threads.length == 0)
{s.getRange(NumUser,nColomn).setValue("ЕСТЬ ОШИБКИ")
.setBackground("#ffff00");}
else {
flag = GoogleSearchAnswer(n); Logger.log(flag);
if (flag)
{s.getRange(NumUser,nColomn).setValue("ВЫПОЛНЕНО")
.setBackground("#00ff00"); }
else {s.getRange(NumUser,nColomn).setValue("ЕСТЬ ОШИБКИ")
.setBackground("#ffff00");}
}
// Возвращаемся на интерфейсную панель
BackToPanel();
}
function GoogleSearchAnswer(n) {
var flag = false;
if (n == 1)
{ var threads = GmailApp.search('to:kozma.prutkov1803@gmail.com subject:"ПОИСК"'); // Все цепочки со словом ПОИСК
var messages = GmailApp.getMessagesForThreads(threads); // Соответствующий двумерный массив сообщений
var subStrA = 'Зильбер';
var subStrB = 'зильбер';
var subStrC = 'ЗИЛЬБЕР';
var subStrD = 'Зи́льбер';
}
if (n == 2)
{ var threads = GmailApp.search('to:kozma.prutkov1803@gmail.com subject:"КАРТИНКА"'); // Все цепочки со словом КАРТИНКА
var messages = GmailApp.getMessagesForThreads(threads); // Соответствующий двумерный массив сообщений
var subStrA = 'Гомель';
var subStrB = 'гомель';
var subStrC = 'ГОМЕЛЬ';
var substrD = 'ГОМЕЛЬ';
}
var i = 0; // Просмотр цепочек
while (i < messages.length && !flag)
{var j = 0; // Просмотр сообщений в каждой цепочке
while (j < messages[i].length && !flag)
{ var body = messages[i][j].getBody();
Logger.log(body); Logger.log(body.indexOf(subStrD));
if( body.indexOf(subStrA) != -1 || body.indexOf(subStrB) != -1 || body.indexOf(subStrC) != -1 || body.indexOf(subStrD) != -1) { flag = true;}
j++;
}
i++;
}
Logger.log(flag);
return flag;
}
/////////////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////////
/////////// Проверка Задания 12. К письму приаттачен файл с картинкой ////
/////////////////////////////////////////////////////////////////////////////////
function SentFile(name) {
s.getRange(NumUser,2).setValue(name); // Запись имени в таблицу продвижения
var threads = GmailApp.search('to:kozma.prutkov1803@gmail.com subject:"ФАЙЛ"');
if (threads.length == 0) // Письма с указанным адресом и темой не нашлось)
{ s.getRange(NumUser,15).setValue("ЕСТЬ ОШИБКИ")
.setBackground("#ffff00");}
else {SentFileCheck()} // Проверяем, имеет ли письмо нужное вложение
// Возвращаемся на интерфейсную панель
BackToPanel();
}
function SentFileCheck() {
var threads = GmailApp.search('to:kozma.prutkov1803@gmail.com subject:"ФАЙЛ"'); // Все цепочки уазанными адресом и темой
var Messages = GmailApp.getMessagesForThreads(threads); // Двумерный массив сообщений цепочек
var flag = false; // Индикатор успешности поиска
var i = 0;
while (i < Messages.length && !flag) // Перебор по цепочкам
{ var j = 0;
while (j < Messages[i].length && !flag) // Перебор по письмам внутри цепочки
{ var Attachments = Messages[i][j].getAttachments(); // Массив вложений
var k = 0; // Перебор вложений
while (k < Attachments.length && !flag)
{ var nameAttachment = Attachments[k].getName(); // Определяем имя вложения
nameAttachment = nameAttachment.toLowerCase();
flag = nameAttachment == 'sculpture1.jpg';
k++;
}
j++;
}
i++;
}
if (flag)
{s.getRange(NumUser,15).setValue("ВЫПОЛНЕНО")
.setBackground("#00ff00"); }
else {s.getRange(NumUser,15).setValue("ЕСТЬ ОШИБКИ")
.setBackground("#ffff00");}
}
///////////////////// Конец проверки Задания 12 ////////////////////////
/////////////////////////////////////////////////////////////////////////////////////
/////////// Проверка Задания 13. Письмо содержит ссылку на карту ////
/////////////////////////////////////////////////////////////////////////////////////
function MapAttached(name) {
s.getRange(NumUser,2).setValue(name); // Запись имени в таблицу продвижения
var threadsSent = GmailApp.search('to:kozma.prutkov1803@gmail.com subject:"КАРТА"');
if (threadsSent.length == 0) // Письма с указанным адресом и темой не нашлось
{ s.getRange(NumUser,16).setValue("ЕСТЬ ОШИБКИ")
.setBackground("#ffff00");}
else {SentMessageMapLink()} // Проверяем, имеет ли письмо ссылку на Гуглокарту
// Возвращаемся на интерфейсную панель
BackToPanel();
}
function SentMessageMapLink() {
var threadsSent = GmailApp.search('to:kozma.prutkov1803@gmail.com subject:"КАРТА"'); // Все цепочки писем Козьме с темой КАРТА
var Messages = GmailApp.getMessagesForThreads(threadsSent); // Все письма цепочек (двумерный массив)
var flag = false; // Индикатор успешности поиска
var stroka = 'https://mapsengine.google.com/map/';
var stroka1 = 'maps/d';
var i = 0 ;
while (i < Messages.length && !flag) {
var j = 0;
while (j < Messages[i].length && !flag) {
var link = Messages[i][j].getPlainBody();
Logger.log(link);
if ( link.indexOf(stroka) != -1 || link.indexOf(stroka1) != -1)
{ flag = true;}
j++;
} // Конец цикла по j
i++;
} // Конец цикла по i
if (flag)
{s.getRange(NumUser,16).setValue("ВЫПОЛНЕНО")
.setBackground("#00ff00"); }
else {s.getRange(NumUser,16).setValue("ЕСТЬ ОШИБКИ")
.setBackground("#ffff00");}
// Возвращаемся на интерфейсную панель
BackToPanel();
}
///////////////////// Конец проверки Задания 13 //////////////////////
/////////////////////////////////////////////////////////////////////////////////
/////////// Проверка Задания 14. Создание формы ////
/////////////////////////////////////////////////////////////////////////////////
function SentForma(name) {
s.getRange(NumUser,2).setValue(name); // Запись имени в таблицу продвижения
Logger.log('sentforma');
var threads = GmailApp.search('to:kozma.prutkov1803@gmail.com subject:"ФОРМА"');
Logger.log(threads.length);
if (threads.length == 0) // Письма с указанным адресом и темой не нашлось)
{ s.getRange(NumUser,17).setValue("ЕСТЬ ОШИБКИ")
.setBackground("#ffff00");}
else {SentFormaCheck()} // Проверяем, имеет ли письмо нужное вложение
// Возвращаемся на интерфейсную панель
BackToPanel();
}
function SentFormaCheck() {
var threads = GmailApp.search('to:kozma.prutkov1803@gmail.com subject:"ФОРМА"'); // Все цепочки писем Козьме с темой ФОРМА
var Messages = GmailApp.getMessagesForThreads(threads); // Все письма цепочек (двумерный массив)
var flag = false; // Индикатор успешности поиска формы
//var stroka = 'forms/d/';
var stroka = '<https://docs.google.com/forms/d/';
Logger.log(Messages.length);
var i = 0 ;
while (i < Messages.length && !flag) {
var j = 0;
Logger.log(Messages[i].length);
while (j < Messages[i].length && !flag) {
var link = Messages[i][j].getPlainBody();
Logger.log(link);
if ( link.indexOf(stroka) != -1)
{ flag = true;}
j++;
} // Конец цикла по j
i++;
} // Конец цикла по i
if (flag)
{FormaCheck(link);}
else {s.getRange(NumUser,17).setValue("ЕСТЬ ОШИБКИ")
.setBackground("#ffff00");}
}
function FormaCheck(text) {
var first = text.indexOf('<');
var last = text.indexOf('>');
var link ='';
for (var i = first+1; i<last; i++)
{link = link + text[i];}
first = link.indexOf('/d/'); first = first + 3;
var link1 = 'https://docs.google.com/forms/d/';
var i = first;
while (link[i] != '/')
{link1 = link1 + link[i];
i++; }
link1 = link1 +'/viewform';
Logger.log('loglog');
Logger.log(link1);
var form = FormApp.openByUrl(link1);
//var form = FormApp.openByUrl('https://docs.google.com/forms/d/1jKmgH73i75vX3dnYXr4j_Dqi4tXV5jTbOCz3-S_mJPY/viewform');
var items=form.getItems();
Logger.log(items.length);
if (items.length < 3)
{s.getRange(NumUser,17).setValue("ЕСТЬ ОШИБКИ")
.setBackground("#ffff00");}
else {FormaCheckTypes(items);}
}
function FormaCheckTypes(items){
var ntext = 0;
var nradio = 0;
var ncheckbox = 0;
for (var i = 0; i < items.length; i++)
{if (items[i].getType() == FormApp.ItemType.TEXT) {ntext++;}
if (items[i].getType() == FormApp.ItemType.MULTIPLE_CHOICE) {nradio++;}
if (items[i].getType() == FormApp.ItemType.CHECKBOX) {ncheckbox++;}
}
if (ntext*nradio*ncheckbox > 0)
{s.getRange(NumUser,17).setValue("ВЫПОЛНЕНО")
.setBackground("#00ff00"); }
else {s.getRange(NumUser,17).setValue("ЕСТЬ ОШИБКИ")
.setBackground("#ffff00");}
}
///////////////////// Конец проверки Задания 14 //////////////////////
/////////////////////////////////////////////////////////////////////////////////
/////////// Проверка Задания 15. Создание сайта ////
/////////////////////////////////////////////////////////////////////////////////
function SentMessageSite(name) {
s.getRange(NumUser,2).setValue(name); // Запись имени в таблицу продвижения
var threadsSent = GmailApp.search('to:kozma.prutkov1803@gmail.com subject:"САЙТ"'); // Все цепочки писем Козьме с темой САЙТ
var Messages = GmailApp.getMessagesForThreads(threadsSent); // Все письма цепочек (двумерный массив)
var flag = false; // Индикатор успешности поиска
var stroka = 'https://sites.google.com/site/';
var i = 0 ;
while (i < Messages.length && !flag) {
var j = 0;
while (j < Messages[i].length && !flag) {
var link = Messages[i][j].getPlainBody();
Logger.log(link);
if ( link.indexOf(stroka) != -1)
{ flag = true;}
j++;
} // Конец цикла по j
i++;
} // Конец цикла по i
if (flag)
{s.getRange(NumUser,18).setValue("ВЫПОЛНЕНО")
.setBackground("#00ff00"); }
else {s.getRange(NumUser,18).setValue("ЕСТЬ ОШИБКИ")
.setBackground("#ffff00");}
// Возвращаемся на интерфейсную панель
BackToPanel();
}
///////////////////// Конец проверки Задания 15 //////////////////////
///////////////////////////////////////////////////////////////////////////////////////////////
/////////// Проверка Задания 14а. Форма в письме - вариант без типов вопросов ////
///////////////////////////////////////////////////////////////////////////////////////////////
function SentFormShort() {
var threadsSent = GmailApp.search('to:kozma.prutkov1803@gmail.com subject:"ФОРМА"'); // Все цепочки писем Козьме с темой САЙТ
var Messages = GmailApp.getMessagesForThreads(threadsSent); // Все письма цепочек (двумерный массив)
var flag = false; // Индикатор успешности поиска
var threadsSent = GmailApp.search('to:kozma.prutkov1803@gmail.com subject:"ФОРМА"'); // Все цепочки писем Козьме с темой САЙТ
var Messages = GmailApp.getMessagesForThreads(threadsSent); // Все письма цепочек (двумерный массив)
var flag = false; // Индикатор успешности поиска
var stroka = 'forms/d/';
var i = 0 ;
while (i < Messages.length && !flag) {
var j = 0;
while (j < Messages[i].length && !flag) {
var link = Messages[i][j].getPlainBody();
Logger.log(link);
if ( link.indexOf(stroka) != -1)
{ flag = true;}
j++;
} // Конец цикла по j
i++;
} // Конец цикла по i
if (flag)
{s.getRange(NumUser,17).setValue("ВЫПОЛНЕНО")
.setBackground("#00ff00"); }
else {s.getRange(NumUser,17).setValue("ЕСТЬ ОШИБКИ")
.setBackground("#ffff00");}
// Возвращаемся на интерфейсную панель
BackToPanel();
}
///////////////////////////////////////////////////////////////////////////////////////////////
/////////// Проверка Задания 16. Создание аккаунта Google+ ////
///////////////////////////////////////////////////////////////////////////////////////////////
function SentGooglePlus(name) {
s.getRange(NumUser,2).setValue(name); // Запись имени в таблицу продвижения
var threadsSent = GmailApp.search('to:kozma.prutkov1803@gmail.com subject:"АККАУНТ"'); // Все цепочки писем Козьме с темой АККАУНТ
var Messages = GmailApp.getMessagesForThreads(threadsSent); // Все письма цепочек (двумерный массив)
var flag = false; // Индикатор успешности поиска
var stroka = 'https://plus.google.com/';
var i = 0 ;
while (i < Messages.length && !flag) {
var j = 0;
while (j < Messages[i].length && !flag) {
var link = Messages[i][j].getPlainBody();
Logger.log(link);
if ( link.indexOf(stroka) != -1)
{ flag = true;}
j++;
} // Конец цикла по j
i++;
} // Конец цикла по i
if (flag)
{s.getRange(NumUser,19).setValue("ВЫПОЛНЕНО")
.setBackground("#00ff00"); }
else {s.getRange(NumUser,19).setValue("ЕСТЬ ОШИБКИ")
.setBackground("#ffff00");}
// Возвращаемся на интерфейсную панель
BackToPanel();
}
//////////////////////////////////////////////////////
/////////// Завершение работы ////
//////////////////////////////////////////////////////
function Sertificate(name) {
// Подсчет баллов по основной таблице
s.getRange(NumUser,2).setValue(name);
total = 0;
for (var i = 4; i <= 19; i++)
{ if (s.getRange(NumUser,i).getValue() == 'ВЫПОЛНЕНО') total++;
}
s.getRange(NumUser,20).setValue(total)
.setBackground("#ffff00");
if (total == Max)
{s.getRange(NumUser,21).setValue("ВСЕ ЗАДАНИЯ ВЫПОЛНЕНЫ")
.setBackground("#00ff00");
s.getRange(NumUser,20).setBackground("#00ff00"); }
else { s.getRange(NumUser,21).setValue("НЕ ВСЕ ЗАДАНИЯ ВЫПОЛНЕНЫ")
.setBackground("#ffff00");}
// Возвращаемся на интерфейсную панель
BackToPanel();
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment