diff --git a/admin/.clasp.json b/admin/.clasp.json new file mode 100644 index 0000000..e1e41e5 --- /dev/null +++ b/admin/.clasp.json @@ -0,0 +1 @@ +{"scriptId":"1ayOszkKcVSChNjDGnC2V2gx5zOqe7LrC6MdQC6WsR30Vhtv1phLkWpeM","rootDir":"/Users/eren.yener/Desktop/repo/erenyener/codex/admin"} diff --git a/admin/.claspignore b/admin/.claspignore new file mode 100644 index 0000000..de04126 --- /dev/null +++ b/admin/.claspignore @@ -0,0 +1,5 @@ +**/** +.git +.doc +!src/** +!appsscript.json \ No newline at end of file diff --git a/admin/README.md b/admin/README.md new file mode 100644 index 0000000..59bda9f --- /dev/null +++ b/admin/README.md @@ -0,0 +1,27 @@ +# Codex Admin Appscripts + + +## Quick Links +[Panel Link](https://docs.google.com/spreadsheets/d/1TSYzDuSMnv_3uVRcM7o0tNyUdRlKy3C6gFHKMVh5fjc/edit#gid=0) + + +## Install + +First download `clasp`: + +```sh +npm install -g @google/clasp +``` + +Then enable the Google Apps Script API: https://script.google.com/home/usersettings + + + + +## Commands + +```sh +clasp login (Login with your LDAP) +clasp pull (Get Latest Code From Google Cloud Scripts) + +``` \ No newline at end of file diff --git a/admin/appsscript.json b/admin/appsscript.json new file mode 100644 index 0000000..c088c19 --- /dev/null +++ b/admin/appsscript.json @@ -0,0 +1,7 @@ +{ + "timeZone": "Europe/Istanbul", + "dependencies": { + }, + "exceptionLogging": "STACKDRIVER", + "runtimeVersion": "V8" +} \ No newline at end of file diff --git a/admin/src/controllers/challange.controller.js b/admin/src/controllers/challange.controller.js new file mode 100644 index 0000000..640eb35 --- /dev/null +++ b/admin/src/controllers/challange.controller.js @@ -0,0 +1,32 @@ +function ChallangeController() { } + +function processAddChallange() { + const challangeController = new ChallangeController(); + challangeController.addChallange(); + return true; +} + +ChallangeController.prototype.renderAddChallangeModal = function () { + + const scriptProperties = PropertiesService.getScriptProperties(); + const token = scriptProperties.getProperty("token") + const data = { token: token }; + + const addProblemModalHtml = HtmlService + .createTemplateFromFile('src/views/add-new-challange-modal/add-new-challange-modal') + .evaluate() + .setXFrameOptionsMode(HtmlService.XFrameOptionsMode.ALLOWALL) + .getContent(); + + const dataScript = ""; + const template = HtmlService.createTemplate(dataScript + addProblemModalHtml) + .evaluate() + .setWidth(800) + .setHeight(350); + + SpreadsheetApp.getUi().showModalDialog(template, 'Add New Challange'); +} + +ChallangeController.prototype.addChallange = function () { + return true; +} diff --git a/admin/src/controllers/problem.controller.js b/admin/src/controllers/problem.controller.js new file mode 100644 index 0000000..fccb66e --- /dev/null +++ b/admin/src/controllers/problem.controller.js @@ -0,0 +1,32 @@ +function ProblemController() { } + +function processAddProblem(problem) { + const problemController = new ProblemController(); + problemController.addProblem(); + return true; +} + +ProblemController.prototype.renderAddProblemModal = function () { + + const scriptProperties = PropertiesService.getScriptProperties(); + const token = scriptProperties.getProperty("token") + const data = { token: token }; + + const addProblemModalHtml = HtmlService + .createTemplateFromFile('src/views/add-new-problem-modal/add-new-problem-modal') + .evaluate() + .setXFrameOptionsMode(HtmlService.XFrameOptionsMode.ALLOWALL) + .getContent(); + + const dataScript = ""; + const template = HtmlService.createTemplate(dataScript + addProblemModalHtml) + .evaluate() + .setWidth(1000) + .setHeight(600); + + SpreadsheetApp.getUi().showModalDialog(template, 'Add New Problem'); +} + +ProblemController.prototype.addProblem = function () { + return true; +} diff --git a/admin/src/controllers/test.controller.js b/admin/src/controllers/test.controller.js new file mode 100644 index 0000000..312636d --- /dev/null +++ b/admin/src/controllers/test.controller.js @@ -0,0 +1,57 @@ +function TestController() { } + +function processAddTest() { + const testController = new TestController(); + testController.addTest(); +} + +TestController.prototype.getTestsSelection = function () { + const testsSheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Tests'); + const activeRange = testsSheet.getActiveRange(); + const activeValues = activeRange.getValues(); + + let tests = []; + for(let row of activeValues){ + tests.push({ + input: row[0], + output: row[1], + isPublic: row[2], + }) + } + + return tests; +} + +TestController.prototype.renderAddTestsModal = function() { + + const addNewTestsHtml = HtmlService + .createTemplateFromFile('src/views/add-new-tests-modal/add-new-tests-modal') + .evaluate() + .setXFrameOptionsMode(HtmlService.XFrameOptionsMode.ALLOWALL) + .getContent(); + + const tests = this.getTestsSelection(); + const scriptProperties = PropertiesService.getScriptProperties(); + const token = scriptProperties.getProperty("token") + const data = { + token: token, + tests:tests + }; + const dataScript = ""; + + const template = HtmlService.createTemplate(dataScript + addNewTestsHtml) + .evaluate() + .setWidth(600) + .setHeight(380); + + + + SpreadsheetApp.getUi().showModalDialog(template, 'Add New Tests'); +} + + +TestController.prototype.addTest = function () { + const testsSheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Tests'); + const activeRange = testsSheet.getActiveRange(); + activeRange.clearContent() +} \ No newline at end of file diff --git a/admin/src/main.js b/admin/src/main.js new file mode 100644 index 0000000..435e90e --- /dev/null +++ b/admin/src/main.js @@ -0,0 +1,30 @@ +function onOpen() { + renderMenu(); +} + +function renderMenu() { + + const ui = SpreadsheetApp.getUi(); + + ui.createMenu('Codex Admin') + .addItem('Add Problem', 'addProblem') + .addItem('Add Challenge', 'addChallange') + .addItem('Add Tests', 'addTests') + .addToUi(); +} + + +function addProblem() { + const problemController = new ProblemController(); + problemController.renderAddProblemModal(); +} + +function addChallange() { + const challangeController = new ChallangeController(); + challangeController.renderAddChallangeModal(); +} + +function addTests() { + const testController = new TestController(); + testController.renderAddTestsModal(); +} \ No newline at end of file diff --git a/admin/src/views/add-new-challange-modal/add-new-challange-modal.html b/admin/src/views/add-new-challange-modal/add-new-challange-modal.html new file mode 100644 index 0000000..b7ef735 --- /dev/null +++ b/admin/src/views/add-new-challange-modal/add-new-challange-modal.html @@ -0,0 +1,55 @@ + + + +
+| Input | +Output | +Is Public | +