diff --git a/src/main/java/com/cloudcraftgaming/discal/api/enums/GoodTimezone.java b/src/main/java/com/cloudcraftgaming/discal/api/enums/GoodTimezone.java new file mode 100644 index 00000000..17f8f558 --- /dev/null +++ b/src/main/java/com/cloudcraftgaming/discal/api/enums/GoodTimezone.java @@ -0,0 +1,10 @@ +package com.cloudcraftgaming.discal.api.enums; + +/** + * Created by Nova Fox on 1___7___18. + * Website: www.cloudcraftgaming.com + * For Project: DisCal-Discord-Bot + */ +public enum GoodTimezone { + Africa___Abidjan, Africa___Accra, Africa___Addis_Ababa, Africa___Algiers, Africa___Asmara, Africa___Asmera, Africa___Bamako, Africa___Bangui, Africa___Banjul, Africa___Bissau, Africa___Blantyre, Africa___Brazzaville, Africa___Bujumbura, Africa___Cairo, Africa___Casablanca, Africa___Ceuta, Africa___Conakry, Africa___Dakar, Africa___Dar_es_Salaam, Africa___Djibouti, Africa___Douala, Africa___El_Aaiun, Africa___Freetown, Africa___Gaborone, Africa___Harare, Africa___Johannesburg, Africa___Kampala, Africa___Khartoum, Africa___Kigali, Africa___Kinshasa, Africa___Lagos, Africa___Libreville, Africa___Lome, Africa___Luanda, Africa___Lubumbashi, Africa___Lusaka, Africa___Malabo, Africa___Maputo, Africa___Maseru, Africa___Mbabane, Africa___Monrovia, Africa___Ndjamena, Africa___Niamey, Africa___Nouakchott, Africa___Ouagadougou, Africa___Sao_Tome, Africa___Timbuktu, Africa___Tunis, Africa___Windhoek, America___Anchorage, America___Anguilla, America___Antigua, America___Araguaina, America___Argentina___Buenos_Aires, America___Aruba, America___Asuncion, America___Bahia, America___Barbados, America___Belem, America___Belize, America___Boa_Vista, America___Bogota, America___Buenos_Aires, America___Campo_Grande, America___Cancun, America___Caracas, America___Cayenne, America___Cayman, America___Chicago, America___Costa_Rica, America___Cuiaba, America___Curacao, America___Danmarkshavn, America___Dawson_Creek, America___Denver, America___Dominica, America___Edmonton, America___El_Salvador, America___Ensenada, America___Fortaleza, America___Godthab, America___Grand_Turk, America___Grenada, America___Guadeloupe, America___Guatemala, America___Guayaquil, America___Guyana, America___Halifax, America___Havana, America___Hermosillo, America___Iqaluit, America___Jamaica, America___La_Paz, America___Lima, America___Los_Angeles, America___Maceio, America___Managua, America___Manaus, America___Marigot, America___Martinique, America___Mazatlan, America___Mexico_City, America___Miquelon, America___Montevideo, America___Montserrat, America___Nassau, America___New_York, America___Noronha, America___Panama, America___Paramaribo, America___Phoenix, America___Port_of_Spain, America___Porto_Acre, America___Porto_Velho, America___Puerto_Rico, America___Recife, America___Regina, America___Rio_Branco, America___Santa_Isabel, America___Santiago, America___Santo_Domingo, America___Sao_Paulo, America___Scoresbysund, America___Shiprock, America___St_Barthelemy, America___St_Johns, America___St_Kitts, America___St_Lucia, America___St_Thomas, America___St_Vincent, America___Tegucigalpa, America___Thule, America___Tijuana, America___Toronto, America___Tortola, America___Vancouver, America___Virgin, America___Whitehorse, America___Winnipeg, America___Yellowknife, Antarctica___Casey, Antarctica___Davis, Antarctica___DumontDUrville, Antarctica___Mawson, Antarctica___McMurdo, Antarctica___Palmer, Antarctica___Rothera, Antarctica___South_Pole, Antarctica___Syowa, Antarctica___Vostok, Arctic___Longyearbyen, Asia___Aden, Asia___Almaty, Asia___Amman, Asia___Aqtau, Asia___Aqtobe, Asia___Ashgabat, Asia___Ashkhabad, Asia___Baghdad, Asia___Bahrain, Asia___Baku, Asia___Bangkok, Asia___Beirut, Asia___Bishkek, Asia___Brunei, Asia___Calcutta, Asia___Chongqing, Asia___Chungking, Asia___Colombo, Asia___Dacca, Asia___Damascus, Asia___Dhaka, Asia___Dili, Asia___Dubai, Asia___Dushanbe, Asia___Gaza, Asia___Harbin, Asia___Ho_Chi_Minh, Asia___Hong_Kong, Asia___Hovd, Asia___Irkutsk, Asia___Istanbul, Asia___Jakarta, Asia___Jayapura, Asia___Jerusalem, Asia___Kabul, Asia___Kamchatka, Asia___Karachi, Asia___Kathmandu, Asia___Katmandu, Asia___Kolkata, Asia___Krasnoyarsk, Asia___Kuala_Lumpur, Asia___Kuwait, Asia___Macao, Asia___Macau, Asia___Magadan, Asia___Makassar, Asia___Manila, Asia___Muscat, Asia___Nicosia, Asia___Novosibirsk, Asia___Omsk, Asia___Phnom_Penh, Asia___Pyongyang, Asia___Qatar, Asia___Qyzylorda, Asia___Rangoon, Asia___Riyadh, Asia___Saigon, Asia___Seoul, Asia___Shanghai, Asia___Singapore, Asia___Taipei, Asia___Tashkent, Asia___Tbilisi, Asia___Tehran, Asia___Tel_Aviv, Asia___Thimbu, Asia___Thimphu, Asia___Tokyo, Asia___Ujung_Pandang, Asia___Ulaanbaatar, Asia___Ulan_Bator, Asia___Vientiane, Asia___Vladivostok, Asia___Yakutsk, Asia___Yekaterinburg, Asia___Yerevan, Atlantic___Azores, Atlantic___Bermuda, Atlantic___Canary, Atlantic___Cape_Verde, Atlantic___Faeroe, Atlantic___Faroe, Atlantic___Jan_Mayen, Atlantic___Reykjavik, Atlantic___South_Georgia, Atlantic___St_Helena, Atlantic___Stanley, Brazil___Acre, Brazil___DeNoronha, Brazil___East, Brazil___West, CST6CDT, Canada___Atlantic, Canada___Eastern, Canada___Mountain, Canada___Newfoundland, Canada___Pacific, Canada___Yukon, Chile___Continental, Chile___EasterIsland, Cuba, Egypt, Eire, Etc___GMT, Europe___Amsterdam, Europe___Andorra, Europe___Athens, Europe___Belgrade, Europe___Berlin, Europe___Bratislava, Europe___Brussels, Europe___Bucharest, Europe___Budapest, Europe___Chisinau, Europe___Copenhagen, Europe___Dublin, Europe___Gibraltar, Europe___Helsinki, Europe___Istanbul, Europe___Kaliningrad, Europe___Kiev, Europe___Lisbon, Europe___Ljubljana, Europe___London, Europe___Luxembourg, Europe___Madrid, Europe___Malta, Europe___Mariehamn, Europe___Minsk, Europe___Monaco, Europe___Moscow, Europe___Nicosia, Europe___Oslo, Europe___Paris, Europe___Podgorica, Europe___Prague, Europe___Riga, Europe___Rome, Europe___Samara, Europe___San_Marino, Europe___Sarajevo, Europe___Skopje, Europe___Sofia, Europe___Stockholm, Europe___Tallinn, Europe___Tirane, Europe___Tiraspol, Europe___Vaduz, Europe___Vatican, Europe___Vienna, Europe___Vilnius, Europe___Warsaw, Europe___Zagreb, Europe___Zurich, Hongkong, Iceland, Indian___Antananarivo, Indian___Chagos, Indian___Christmas, Indian___Cocos, Indian___Comoro, Indian___Kerguelen, Indian___Mahe, Indian___Maldives, Indian___Mauritius, Indian___Mayotte, Indian___Reunion, Iran, Israel, Jamaica, Japan, Kwajalein, Libya, Mexico___BajaNorte, Mexico___BajaSur, Mexico___General, NZ, Navajo, PRC, Pacific___Apia, Pacific___Auckland, Pacific___Chuuk, Pacific___Easter, Pacific___Efate, Pacific___Enderbury, Pacific___Fakaofo, Pacific___Fiji, Pacific___Funafuti, Pacific___Galapagos, Pacific___Gambier, Pacific___Guadalcanal, Pacific___Guam, Pacific___Honolulu, Pacific___Johnston, Pacific___Kiritimati, Pacific___Kosrae, Pacific___Kwajalein, Pacific___Majuro, Pacific___Marquesas, Pacific___Midway, Pacific___Nauru, Pacific___Niue, Pacific___Norfolk, Pacific___Noumea, Pacific___Pago_Pago, Pacific___Palau, Pacific___Pitcairn, Pacific___Pohnpei, Pacific___Ponape, Pacific___Port_Moresby, Pacific___Rarotonga, Pacific___Saipan, Pacific___Samoa, Pacific___Tahiti, Pacific___Tarawa, Pacific___Tongatapu, Pacific___Wake, Pacific___Wallis, Poland, Portugal, ROC, ROK, Singapore, Turkey, UCT, US___Alaska, US___Arizona, US___Eastern, US___Hawaii, US___Mountain, US___Samoa, UTC, Universal, Zulu +} \ No newline at end of file diff --git a/src/main/java/com/cloudcraftgaming/discal/api/network/discord/DiscordLoginHandler.java b/src/main/java/com/cloudcraftgaming/discal/api/network/discord/DiscordLoginHandler.java index 9217b0ae..2ebcad1a 100644 --- a/src/main/java/com/cloudcraftgaming/discal/api/network/discord/DiscordLoginHandler.java +++ b/src/main/java/com/cloudcraftgaming/discal/api/network/discord/DiscordLoginHandler.java @@ -1,5 +1,6 @@ package com.cloudcraftgaming.discal.api.network.discord; +import com.cloudcraftgaming.discal.api.enums.GoodTimezone; import com.cloudcraftgaming.discal.api.object.BotSettings; import com.cloudcraftgaming.discal.api.utils.ExceptionHandler; import com.cloudcraftgaming.discal.api.utils.GuildUtils; @@ -51,6 +52,8 @@ public class DiscordLoginHandler { //Get guilds... m.put("guilds", GuildUtils.getGuilds(userInfo.getString("id"))); + m.put("goodTz", GoodTimezone.values()); + DiscordAccountHandler.getHandler().addAccount(m, request.session().id()); //Finally redirect to the dashboard seamlessly. diff --git a/src/main/java/com/cloudcraftgaming/discal/api/object/web/WebCalendar.java b/src/main/java/com/cloudcraftgaming/discal/api/object/web/WebCalendar.java new file mode 100644 index 00000000..ee8522be --- /dev/null +++ b/src/main/java/com/cloudcraftgaming/discal/api/object/web/WebCalendar.java @@ -0,0 +1,118 @@ +package com.cloudcraftgaming.discal.api.object.web; + +import com.cloudcraftgaming.discal.api.calendar.CalendarAuth; +import com.cloudcraftgaming.discal.api.object.GuildSettings; +import com.cloudcraftgaming.discal.api.object.calendar.CalendarData; +import com.cloudcraftgaming.discal.api.utils.ExceptionHandler; +import com.cloudcraftgaming.discal.bot.internal.calendar.calendar.CalendarMessageFormatter; +import com.google.api.services.calendar.model.Calendar; + +/** + * Created by Nova Fox on 1/7/18. + * Website: www.cloudcraftgaming.com + * For Project: DisCal-Discord-Bot + */ +public class WebCalendar { + private String id; + private String address; + private String link; + private String name; + private String description; + private String timezone; + + private boolean external; + + //Getters + public String getId() { + return id; + } + + public String getAddress() { + return address; + } + + public String getLink() { + return link; + } + + public String getName() { + return name; + } + + public String getDescription() { + return description; + } + + public String getTimezone() { + return timezone; + } + + public boolean isExternal() { + return external; + } + + //Setters + public void setId(String _id) { + id = _id; + } + + public void setAddress(String _address) { + address = _address; + } + + public void setLink(String _link) { + link = _link; + } + + public void setName(String _name) { + name = _name; + } + + public void setDescription(String _desc) { + description = _desc; + } + + public void setTimezone(String _tz) { + timezone = _tz; + } + + public void setExternal(boolean _ext) { + external = _ext; + } + + //Functions + public WebCalendar fromCalendar(CalendarData cd, GuildSettings gs) { + if (cd.getCalendarAddress().equalsIgnoreCase("primary")) { + id = "primary"; + address = "primary"; + link = "N/a"; + name = "N/a"; + description = "N/a"; + timezone = "N/a"; + } else { + id = cd.getCalendarId(); + address = cd.getCalendarAddress(); + link = CalendarMessageFormatter.getCalendarLink(id); + external = cd.isExternal(); + try { + if (cd.isExternal()) { + Calendar cal = CalendarAuth.getCalendarService(gs).calendars().get(id).execute(); + name = cal.getSummary(); + description = cal.getDescription(); + timezone = cal.getTimeZone().replaceAll("/", "___"); + } else { + Calendar cal = CalendarAuth.getCalendarService().calendars().get(id).execute(); + name = cal.getSummary(); + description = cal.getDescription(); + timezone = cal.getTimeZone().replaceAll("/", "___"); + } + } catch (Exception e) { + ExceptionHandler.sendException(null, "[WEB] Failed to get calendar!", e, this.getClass()); + name = "ERROR!"; + description = "ERROR"; + timezone = "ERROR"; + } + } + return this; + } +} \ No newline at end of file diff --git a/src/main/java/com/cloudcraftgaming/discal/api/object/web/WebGuild.java b/src/main/java/com/cloudcraftgaming/discal/api/object/web/WebGuild.java index 12b2548a..d22039ca 100644 --- a/src/main/java/com/cloudcraftgaming/discal/api/object/web/WebGuild.java +++ b/src/main/java/com/cloudcraftgaming/discal/api/object/web/WebGuild.java @@ -28,6 +28,8 @@ public class WebGuild { private List roles = new ArrayList<>(); private List channels = new ArrayList<>(); + private WebCalendar calendar; + //Getters public String getId() { return id; @@ -57,6 +59,10 @@ public class WebGuild { return channels; } + public WebCalendar getCalendar() { + return calendar; + } + //Setters public void setId(String _id) { id = _id; @@ -78,6 +84,10 @@ public class WebGuild { botNick = _nick; } + public void setCalendar(WebCalendar _cal) { + calendar = _cal; + } + //Functions public WebGuild fromGuild(IGuild g) { @@ -102,6 +112,8 @@ public class WebGuild { channels.add(new WebChannel().fromChannel(c, settings)); } + calendar = new WebCalendar().fromCalendar(DatabaseManager.getManager().getMainCalendar(Long.valueOf(id)), settings); + return this; } } \ No newline at end of file diff --git a/src/main/java/com/cloudcraftgaming/discal/web/handler/DashboardHandler.java b/src/main/java/com/cloudcraftgaming/discal/web/handler/DashboardHandler.java index a5a8e555..44f8d838 100644 --- a/src/main/java/com/cloudcraftgaming/discal/web/handler/DashboardHandler.java +++ b/src/main/java/com/cloudcraftgaming/discal/web/handler/DashboardHandler.java @@ -182,6 +182,7 @@ public class DashboardHandler { g.getChannels().add(new WebChannel().fromChannel(c, g.getSettings())); } } + //TODO: Handle calendar name/description/timezone updating. //Finally redirect back to the dashboard response.redirect("/dashboard/guild", 301); @@ -191,4 +192,25 @@ public class DashboardHandler { } return response.body(); } + + public static String handleCalendarCreate(Request request, Response response) { + try { + String name = request.queryParams("cal-name"); + String desc = request.queryParams("cal-desc"); + String tz = request.queryParams("cal-timezone").replace("___", "/"); + + //TODO: Create calendar + Map m = DiscordAccountHandler.getHandler().getAccount(request.session().id()); + WebGuild g = (WebGuild) m.get("selected"); + + //TODO: refresh selected guild's calendar to display properly... + + //Finally redirect back to the dashboard + response.redirect("/dashboard/guild", 301); + } catch (Exception e) { + ExceptionHandler.sendException(null, "[WEB] Calendar create failed!", e, DashboardHandler.class); + halt(500, "Internal Server Exception"); + } + return response.body(); + } } \ No newline at end of file diff --git a/src/main/java/com/cloudcraftgaming/discal/web/utils/SparkUtils.java b/src/main/java/com/cloudcraftgaming/discal/web/utils/SparkUtils.java index f49716e3..6002993e 100644 --- a/src/main/java/com/cloudcraftgaming/discal/web/utils/SparkUtils.java +++ b/src/main/java/com/cloudcraftgaming/discal/web/utils/SparkUtils.java @@ -77,6 +77,9 @@ public class SparkUtils { get("/select", DashboardHandler::handleGuildSelect); get("/guild", DashboardHandler::handleSettingsSelect); get("/update", DashboardHandler::handleSettingsUpdate); + path("/create", () -> { + get("/calendar", DashboardHandler::handleCalendarCreate); + }); }); }); diff --git a/src/main/resources/web/public/pages/dashboard/guild.html b/src/main/resources/web/public/pages/dashboard/guild.html index 93d43296..a15df1ed 100644 --- a/src/main/resources/web/public/pages/dashboard/guild.html +++ b/src/main/resources/web/public/pages/dashboard/guild.html @@ -172,10 +172,85 @@

+ + +
+
+
Create A Calendar Below!
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+
Edit Your Calendar Below
+ + + +

+
+ + +
+
+
+
+ + +
+
+
+
+ + +
+
Event Settings
+
+

+ It's a work in progress. Soon you will be able to create/edit/manage/delete events from + here!! +

@@ -188,10 +263,20 @@ onclick="useSimpleAnnouncements(this.checked)"> +
+
+

+ It's a work in progress. Soon you will be able to create/edit/manage/delete + announcements from here!! +

RSVP Settings
+
+

+ It's a work in progress. Soon you will be able to control RSVPs from here!! +