function init(consumerKey, consumerSecret,scope,expiration,appName){ _authorizeToTrello(consumerKey,consumerSecret,scope,expiration,appName); } function _authorizeToTrello(consumerKey,consumerSecret,scope,expiration,appName) { var oauthConfig = UrlFetchApp.addOAuthService("trello"); oauthConfig.setAccessTokenUrl("https://trello.com/1/OAuthGetAccessToken"); oauthConfig.setRequestTokenUrl("https://trello.com/1/OAuthGetRequestToken"); oauthConfig.setAuthorizationUrl("https://trello.com/1/OAuthAuthorizeToken?scope="+scope+"&expiration="+expiration+"&name="+appName); //From // https://trello.com/1/appKey/generate oauthConfig.setConsumerKey(consumerKey); oauthConfig.setConsumerSecret(consumerSecret); } function getBoardsData(boardId, queryParameters){ var requestParams = { "method": "GET", "oAuthServiceName": "trello", "oAuthUseToken": "always", }; var url= "https://api.trello.com/1/boards/" + boardId + "?"+queryParameters; Logger.log("TrelloAPI: Fetching url " + url); var jsondata = UrlFetchApp.fetch(url, requestParams); var object = JSON.parse(jsondata.getContentText()); return object; } function getBoard(boardId){ return getBoardsData(boardId, "lists=open&list_fields=name&fields=name,desc,prefs,labelNames"); } function getBoardMembers(boardId){ var requestParams = { "method": "GET", "oAuthServiceName": "trello", "oAuthUseToken": "always", }; var url= "https://api.trello.com/1/boards/" + boardId + "/members"; Logger.log("TrelloAPI: Fetching url " + url); var jsondata = UrlFetchApp.fetch(url, requestParams); var object = JSON.parse(jsondata.getContentText()); return object; } function getBoardsForOrg(orgId){ var requestParams = { "method": "GET", "oAuthServiceName": "trello", "oAuthUseToken": "always", }; var url= "https://api.trello.com/1/organizations/" + orgId+"/?boards=open&board_fields=name,desc,prefs,labelNames"; Logger.log("TrelloAPI: Fetching url " + url); var jsondata = UrlFetchApp.fetch(url, requestParams); var object = JSON.parse(jsondata.getContentText()); return object; } function createChecklistForCard(cardId, name){ var payload = { "name" : name, }; var requestParams = { "method": "POST", "oAuthServiceName": "trello", "oAuthUseToken": "always", "muteHttpExceptions":false, "payload":payload }; var url= "https://api.trello.com/1/cards/"+cardId+"/checklists"; Logger.log("TrelloAPI: Fetching url " + url); var jsondata = UrlFetchApp.fetch(url, requestParams); var object = JSON.parse(jsondata.getContentText()); return object; } function createChecklistItem(checklistId, name, checked){ var payload = { "name" : name, "checked": checked }; var requestParams = { "method": "POST", "oAuthServiceName": "trello", "oAuthUseToken": "always", "muteHttpExceptions":false, "payload":payload }; var url= "https://api.trello.com/1/checklists/"+checklistId + "/checkItems"; Logger.log("TrelloAPI: Fetching url " + url); var jsondata = UrlFetchApp.fetch(url, requestParams); var object = JSON.parse(jsondata.getContentText()); return object; } function createBoard(name, desc, idOrganization){ var payload = { "name" : name, "desc": desc, }; if(idOrganization){ payload["idOrganization"]=idOrganization; payload["prefs_permissionLevel"]="org"; } Logger.log(payload); var requestParams = { "method": "POST", "oAuthServiceName": "trello", "oAuthUseToken": "always", "muteHttpExceptions":false, "payload":payload }; var url= "https://api.trello.com/1/boards/"; Logger.log("TrelloAPI: Fetching url " + url); var jsondata = UrlFetchApp.fetch(url, requestParams); var object = JSON.parse(jsondata.getContentText()); return object; } //objLabelNames should be {"green":"Name1","yellow":"Name2","orange":"Name3","red":"Name4","purple":"Name5", "blue":"Name6"} function updateBoard(board_id, objLabelNames,name,desc){ var payload = { }; if(name){ payload["name"]=name; } if(desc){ payload["desc"]=desc; } if(objLabelNames){ if(objLabelNames.green){ payload["labelNames/green"]=objLabelNames.green; } if(objLabelNames.yellow){ payload["labelNames/yellow"]=objLabelNames.yellow; } if(objLabelNames.orange){ payload["labelNames/orange"]=objLabelNames.orange; } if(objLabelNames.red){ payload["labelNames/red"]=objLabelNames.red; } if(objLabelNames.purple){ payload["labelNames/purple"]=objLabelNames.purple; } if(objLabelNames.blue){ payload["labelNames/blue"]=objLabelNames.blue; } } Logger.log(payload); var requestParams = { "method": "PUT", "oAuthServiceName": "trello", "oAuthUseToken": "always", "muteHttpExceptions":false, "payload":payload }; var url= "https://api.trello.com/1/boards/"+board_id; Logger.log("TrelloAPI: Fetching url " + url); var jsondata = UrlFetchApp.fetch(url, requestParams); var object = JSON.parse(jsondata.getContentText()); return object; } function updateBoardPrefs(board_id, backgroundColor){ var payload = { value:"grey" }; Logger.log(payload); var requestParams = { "method": "PUT", "oAuthServiceName": "trello", "oAuthUseToken": "always", "muteHttpExceptions":false, "payload":payload }; var url= "https://api.trello.com/1/boards/"+board_id+"/prefs/background"; Logger.log("TrelloAPI: Fetching url " + url); var jsondata = UrlFetchApp.fetch(url, requestParams); var object = JSON.parse(jsondata.getContentText()); return object; } function updateBoardSelfJoin(board_id, bSelfJoin){ var payload = { value:bSelfJoin }; Logger.log(payload); var requestParams = { "method": "PUT", "oAuthServiceName": "trello", "oAuthUseToken": "always", "muteHttpExceptions":false, "payload":payload }; var url= "https://api.trello.com/1/boards/"+board_id+"/prefs/selfJoin"; Logger.log("TrelloAPI: Fetching url " + url); var jsondata = UrlFetchApp.fetch(url, requestParams); var object = JSON.parse(jsondata.getContentText()); return object; } function createCard(boardId, idList, name, desc, closed, labels, idMembers, idAttachmentCover, pos, due){ var payload = { "boardId" : boardId, "idList": idList, "name" : name, "desc": desc, "labels":labels, }; if(due){ payload["due"]=due; } Logger.log(payload); var requestParams = { "method": "POST", "oAuthServiceName": "trello", "oAuthUseToken": "always", "muteHttpExceptions":false, "payload":payload }; var url= "https://api.trello.com/1/cards/"; Logger.log("TrelloAPI: Fetching url " + url); var jsondata = UrlFetchApp.fetch(url, requestParams); var object = JSON.parse(jsondata.getContentText()); return object; } function updateCardLabels(cardId, labels){ var payload = { "labels":labels, }; Logger.log(payload); var requestParams = { "method": "PUT", "oAuthServiceName": "trello", "oAuthUseToken": "always", "muteHttpExceptions":false, "payload":payload }; var url= "https://api.trello.com/1/cards/"+cardId; Logger.log("TrelloAPI: Fetching url " + url); var jsondata = UrlFetchApp.fetch(url, requestParams); var object = JSON.parse(jsondata.getContentText()); return object; } function getEstimateFromTrelloString(title){ var regex = /\(([0-9]+)\)/; var matches = title.match(regex); if(matches != null){ return Number(matches[1]); }else { return 0; } } function getTrelloStringWithoutEstimate(title){ var regex1=/\([^)]+\)/; var regex2 = /\[([^]+)\]/; title = title.replace(regex1,""); title = title.replace(regex2,""); return title.trim(); } function getUsedFromTrelloString(title){ var regex = /\[([0-9]+)\]/; var matches = title.match(regex); if(matches != null){ return Number(matches[1]); }else { return 0; } } function getRemainingFromTrelloString(title){ var estimate = getEstimateFromTrelloString(title); if(estimate!=0){ var used = getUsedFromTrelloString(title); return estimate-used; }else { return 0; } } function testGetEstimateFromTrelloString(text){ var estimate = getEstimateFromTrelloString(text); Logger.log("Estimate:" + estimate); } function testGetUsedFromTrelloString(text){ var used = getUsedFromTrelloString(text); Logger.log("Used:" + used); } function testGeRemainingFromTrelloString(text){ var remaining = getRemainingFromTrelloString(text); Logger.log("Remaining:" + remaining); } function testGetTrelloStringWithoutEstimate(text){ var str = getTrelloStringWithoutEstimate(text); Logger.log("Withouth estimates:" + str); } function test(){ var testTitle1 = "Change WebDynpro to store in cookie a dynamic table of fields instead of dictionary structure (95) [2]"; testGetEstimateFromTrelloString(testTitle1); testGetUsedFromTrelloString(testTitle1); testGeRemainingFromTrelloString(testTitle1); testGetTrelloStringWithoutEstimate(testTitle1); var testTitle2 = "title with nothing in it"; testGetEstimateFromTrelloString(testTitle2); testGetUsedFromTrelloString(testTitle2); testGeRemainingFromTrelloString(testTitle2); testGetTrelloStringWithoutEstimate(testTitle2); }