+ if (all_of(eventString.begin(), eventString.end(), ::isdigit)){
+
+ eventStartMinute = atoi(eventString.c_str());
+
+ } else {
+
+ editResult.editEventResult = CDSENTRY_INVALIDFILE;
+ return editResult;
+
+ }
+
+ eventString = eventData.dateTimeStartData.substr(13,2);
+
+ if (all_of(eventString.begin(), eventString.end(), ::isdigit)){
+
+ eventStartSecond = atoi(eventString.c_str());
+
+ } else {
+
+ editResult.editEventResult = CDSENTRY_INVALIDFILE;
+ return editResult;
+
+ }
+
+ //eventYear = eventStartDate.substr(0, 4);
+
+ // End Date.
+
+ int eventEndYear = 0;
+ int eventEndMonth = 0;
+ int eventEndDay = 0;
+ int eventEndHour = 0;
+ int eventEndMinute = 0;
+ int eventEndSecond = 0;
+ int eventEndDuration = 0;
+
+ if (eventData.dateTimeEndData != ""){
+
+ if (eventData.dateTimeEndData.size() < 16){
+
+ editResult.editEventResult = CDSENTRY_INVALIDFILE;
+ return editResult;
+
+ }
+
+ eventString = eventData.dateTimeEndData.substr(0,4);
+
+ if (all_of(eventString.begin(), eventString.end(), ::isdigit)){
+
+ eventEndYear = atoi(eventString.c_str());
+
+ } else {
+
+ editResult.editEventResult = CDSENTRY_INVALIDFILE;
+ return editResult;
+
+ }
+
+ eventString = eventData.dateTimeEndData.substr(4,2);
+
+ if (all_of(eventString.begin(), eventString.end(), ::isdigit)){
+
+ eventEndMonth = atoi(eventString.c_str());
+
+ } else {
+
+ editResult.editEventResult = CDSENTRY_INVALIDFILE;
+ return editResult;
+
+ }
+
+ eventString = eventData.dateTimeEndData.substr(6,2);
+
+ if (all_of(eventString.begin(), eventString.end(), ::isdigit)){
+
+ eventEndDay = atoi(eventString.c_str());
+
+ } else {
+
+ editResult.editEventResult = CDSENTRY_INVALIDFILE;
+ return editResult;
+
+ }
+
+ eventString = eventData.dateTimeEndData.substr(9,2);
+
+ if (all_of(eventString.begin(), eventString.end(), ::isdigit)){
+
+ eventEndHour = atoi(eventString.c_str());
+
+ } else {
+
+ editResult.editEventResult = CDSENTRY_INVALIDFILE;
+ return editResult;
+
+ }
+
+ eventString = eventData.dateTimeEndData.substr(11,2);
+
+ if (all_of(eventString.begin(), eventString.end(), ::isdigit)){
+
+ eventEndMinute = atoi(eventString.c_str());
+
+ } else {
+
+ editResult.editEventResult = CDSENTRY_INVALIDFILE;
+ return editResult;
+
+ }
+
+ eventString = eventData.dateTimeEndData.substr(13,2);
+
+ if (all_of(eventString.begin(), eventString.end(), ::isdigit)){
+
+ eventEndSecond = atoi(eventString.c_str());
+
+ } else {
+
+ editResult.editEventResult = CDSENTRY_INVALIDFILE;
+ return editResult;
+
+ }
+
+ }
+
+ eventString = eventData.durationData;
+
+ // Process the duration data.
+
+ int eventDurationWeeks = 0;
+ int eventDurationDays = 0;
+ int eventDurationHours = 0;
+ int eventDurationMinutes = 0;
+ int eventDurationSeconds = 0;
+
+ // Get the duration (if DTEND hasn't been specified).
+
+ if (eventData.durationData.size() > 0){
+
+ bool FoundP = false;
+ bool FoundW = false;
+ bool DateTimeMode = false;
+
+ std::string::iterator eventDataChar = eventData.durationData.begin();
+ std::string currentValue = "";
+
+ if (*eventDataChar != 'P'){
+
+ eventDataChar = eventData.durationData.end();
+
+ }
+
+ for(eventDataChar; eventDataChar != eventData.durationData.end(); eventDataChar++){
+
+ // Check if value is a digit.
+
+ if (isdigit(*eventDataChar)){
+
+ currentValue += *eventDataChar;
+
+ } else {
+
+ // Check that the value matches one of the letters.
+
+ if (*eventDataChar == 'W' && DateTimeMode == false){
+
+ eventDurationWeeks = atoi(currentValue.c_str());
+
+ } else if (*eventDataChar == 'D' && DateTimeMode == false){
+
+ eventDurationDays = atoi(currentValue.c_str());
+
+ } else if (*eventDataChar == 'T' && DateTimeMode == false){
+
+ DateTimeMode = true;
+
+ } else if (*eventDataChar == 'H'){
+
+ eventDurationHours = atoi(currentValue.c_str());
+
+ } else if (*eventDataChar == 'M'){
+
+ eventDurationMinutes = atoi(currentValue.c_str());
+
+ } else if (*eventDataChar == 'S'){
+
+ eventDurationSeconds = atoi(currentValue.c_str());
+
+ }
+
+ // Reset the current value.
+
+ currentValue = "";
+
+ }
+
+ }
+
+ }
+
+ // Add the calendar entry.
+
+ std::string sqlParameter = "UPDATE calendarentries SET entryname=(?2), entrydescription=(?3),"
+ " entrystartyear=(?4), entrystartmonth=(?5), entrystartday=(?6), entrystarthour=(?7), entrystartminute=(?8), entrystartsecond=(?9),"
+ " entryendyear=(?10), entryendmonth=(?11), entryendday=(?12), entryendhour=(?13), entryendminute=(?14), entryendsecond=(?15), "
+ " entrydurationweek=(?16), entrydurationday=(?17), entrydurationhour=(?18), entrydurationminute=(?19), entrydurationsecond=(?20) "
+ " WHERE id=(?1)";
+
+ resultCode = sqlite3_prepare_v2(db, sqlParameter.c_str(), -1, &statementHandle, nullptr);
+
+ resultCode = sqlite3_bind_int(statementHandle, 1, eventID);
+
+ if (resultCode != 0){
+ editResult.editEventResult = CDSENTRY_FAILED;
+ return editResult;
+ }
+
+ // Process Entry Name.
+
+ resultCode = sqlite3_bind_text(statementHandle, 2, eventData.summaryData.c_str(), -1, SQLITE_STATIC);
+
+ if (resultCode != 0){
+ editResult.editEventResult = CDSENTRY_FAILED;
+ return editResult;
+ }
+
+ // Process Entry Description.
+
+ string eventDescription;
+
+ try {
+ eventDescription = eventData.descriptionList.at(0);
+ }
+
+ catch (out_of_range &err){
+ eventDescription = "";
+ }
+
+ resultCode = sqlite3_bind_text(statementHandle, 3, eventDescription.c_str(), -1, SQLITE_STATIC);
+
+ if (resultCode != 0){
+ editResult.editEventResult = CDSENTRY_FAILED;
+ return editResult;
+ }
+
+ // Process Entry Start Date information.
+
+ resultCode = sqlite3_bind_int(statementHandle, 4, eventStartYear);
+
+ if (resultCode != 0){
+ editResult.editEventResult = CDSENTRY_FAILED;
+ return editResult;
+ }
+
+ resultCode = sqlite3_bind_int(statementHandle, 5, eventStartMonth);
+
+ if (resultCode != 0){
+ editResult.editEventResult = CDSENTRY_FAILED;
+ return editResult;
+ }
+
+ resultCode = sqlite3_bind_int(statementHandle, 6, eventStartDay);
+
+ if (resultCode != 0){
+ editResult.editEventResult = CDSENTRY_FAILED;
+ return editResult;
+ }
+
+ resultCode = sqlite3_bind_int(statementHandle, 7, eventStartHour);
+
+ if (resultCode != 0){
+ editResult.editEventResult = CDSENTRY_FAILED;
+ return editResult;
+ }
+
+ resultCode = sqlite3_bind_int(statementHandle, 8, eventStartMinute);
+
+ if (resultCode != 0){
+ editResult.editEventResult = CDSENTRY_FAILED;
+ return editResult;
+ }
+
+ resultCode = sqlite3_bind_int(statementHandle, 9, eventStartSecond);
+
+ if (resultCode != 0){
+ editResult.editEventResult = CDSENTRY_FAILED;
+ return editResult;
+ }
+
+ // Process Entry Start End information.
+
+ resultCode = sqlite3_bind_int(statementHandle, 10, eventEndYear);
+
+ if (resultCode != 0){
+ editResult.editEventResult = CDSENTRY_FAILED;
+ return editResult;
+ }
+
+ resultCode = sqlite3_bind_int(statementHandle, 11, eventEndMonth);
+
+ if (resultCode != 0){
+ editResult.editEventResult = CDSENTRY_FAILED;
+ return editResult;
+ }
+
+ resultCode = sqlite3_bind_int(statementHandle, 12, eventEndDay);
+
+ if (resultCode != 0){
+ editResult.editEventResult = CDSENTRY_FAILED;
+ return editResult;
+ }
+
+ resultCode = sqlite3_bind_int(statementHandle, 13, eventEndHour);
+
+ if (resultCode != 0){
+ editResult.editEventResult = CDSENTRY_FAILED;
+ return editResult;
+ }
+
+ resultCode = sqlite3_bind_int(statementHandle, 14, eventEndMinute);
+
+ if (resultCode != 0){
+ editResult.editEventResult = CDSENTRY_FAILED;
+ return editResult;
+ }
+
+ resultCode = sqlite3_bind_int(statementHandle, 15, eventEndSecond);
+
+ if (resultCode != 0){
+ editResult.editEventResult = CDSENTRY_FAILED;
+ return editResult;
+ }
+
+ resultCode = sqlite3_bind_int(statementHandle, 16, eventDurationWeeks);
+
+ if (resultCode != 0){
+ editResult.editEventResult = CDSENTRY_FAILED;
+ return editResult;
+ }
+
+ resultCode = sqlite3_bind_int(statementHandle, 17, eventDurationDays);
+
+ if (resultCode != 0){
+ editResult.editEventResult = CDSENTRY_FAILED;
+ return editResult;
+ }
+
+ resultCode = sqlite3_bind_int(statementHandle, 18, eventDurationHours);
+
+ if (resultCode != 0){
+ editResult.editEventResult = CDSENTRY_FAILED;
+ return editResult;
+ }
+
+ resultCode = sqlite3_bind_int(statementHandle, 19, eventDurationMinutes);
+
+ if (resultCode != 0){
+ editResult.editEventResult = CDSENTRY_FAILED;
+ return editResult;
+ }
+
+ resultCode = sqlite3_bind_int(statementHandle, 20, eventDurationSeconds);
+
+ if (resultCode != 0){
+ editResult.editEventResult = CDSENTRY_FAILED;
+ return editResult;
+ }
+
+ resultCode = sqlite3_step(statementHandle);
+
+ if (resultCode != SQLITE_DONE){
+ editResult.editEventResult = CDSENTRY_FAILED;
+ return editResult;
+ }
+
+ editResult.calendarEntryID = sqlite3_last_insert_rowid(db);
+ editResult.editEventResult = CDSENTRY_OK;
+
+ // Update the checksum.
+
+ UpdateChecksum("internal_updatedata", to_string(GenerateRandomNumber(CDS_RANDOMPOW)));
+
+ return editResult;
+
+}
+
+CDSGetCalendarEntryInfo CalendarDataStorage::GetEvent(int calendarEntryID)
+{
+
+ CDSGetCalendarEntryInfo entryResult;
+
+ // Check if the calendar entry exists.
+
+ int resultCode;
+
+ sqlite3_stmt *findHandle;
+ sqlite3_stmt *statementHandle;
+
+ resultCode = sqlite3_prepare_v2(db, "SELECT id FROM calendarentries WHERE id=(?1);", -1, &findHandle, nullptr);
+
+ if (resultCode != 0){
+ entryResult.getEventResult = CDSENTRY_FAILED;
+ return entryResult;
+ }
+
+ resultCode = sqlite3_bind_int(findHandle, 1, calendarEntryID);
+
+ if (resultCode != 0){
+ entryResult.getEventResult = CDSENTRY_FAILED;
+ return entryResult;
+ }
+
+ resultCode = sqlite3_step(findHandle);
+
+ if (resultCode == SQLITE_ROW){
+
+ } else if (resultCode == SQLITE_DONE) {
+ entryResult.getEventResult = CDSENTRY_NOENTRY;
+ return entryResult;
+ } else {
+ entryResult.getEventResult = CDSENTRY_FAILED;
+ return entryResult;
+ }
+
+ // Get the calendar entry data.
+
+ std::string sqlParameter = "SELECT entryname, entrydescription,"
+ " entrystartyear, entrystartmonth, entrystartday, entrystarthour, entrystartminute, entrystartsecond,"
+ " entryendyear, entryendmonth, entryendday, entryendhour, entryendminute, entryendsecond, "
+ " entrydurationweek, entrydurationday, entrydurationhour, entrydurationminute, entrydurationsecond, "
+ " calendarid, id, filename"
+ " FROM calendarentries WHERE id=(?1)";
+
+ resultCode = sqlite3_prepare_v2(db, sqlParameter.c_str(), -1, &statementHandle, nullptr);
+
+ if (resultCode != 0){
+ entryResult.getEventResult = CDSENTRY_FAILED;
+ return entryResult;
+ }
+
+ resultCode = sqlite3_bind_int(statementHandle, 1, calendarEntryID);
+
+ if (resultCode != 0){
+ entryResult.getEventResult = CDSENTRY_FAILED;
+ return entryResult;
+ }
+
+ resultCode = sqlite3_step(statementHandle);
+
+ if (resultCode == SQLITE_ROW){
+
+ // Get the calendar entry name,
+
+ stringstream entryStream;
+
+ entryStream << sqlite3_column_text(statementHandle, 0);
+ entryResult.entryName = entryStream.str();
+
+ entryStream.str("");
+
+ // Get the calendar entry description.
+
+ entryStream << sqlite3_column_text(statementHandle, 1);
+ entryResult.entryDescription = entryStream.str();
+
+ entryStream.str("");
+
+ // Get the calendar entry filename.
+
+ entryStream << sqlite3_column_text(statementHandle, 21);
+ entryResult.entryFilename = entryStream.str();
+
+ entryStream.str("");
+
+ entryResult.entryStartYear = sqlite3_column_int(statementHandle, 2);
+ entryResult.entryStartMonth = sqlite3_column_int(statementHandle, 3);
+ entryResult.entryStartDay = sqlite3_column_int(statementHandle, 4);
+ entryResult.entryStartHour = sqlite3_column_int(statementHandle, 5);
+ entryResult.entryStartMinute = sqlite3_column_int(statementHandle, 6);
+ entryResult.entryStartSecond = sqlite3_column_int(statementHandle, 7);
+ entryResult.entryEndYear = sqlite3_column_int(statementHandle, 8);
+ entryResult.entryEndMonth = sqlite3_column_int(statementHandle, 9);
+ entryResult.entryEndDay = sqlite3_column_int(statementHandle, 10);
+ entryResult.entryEndHour = sqlite3_column_int(statementHandle, 11);
+ entryResult.entryEndMinute = sqlite3_column_int(statementHandle, 12);
+ entryResult.entryEndSecond = sqlite3_column_int(statementHandle, 13);
+ entryResult.entryDurationWeeks = sqlite3_column_int(statementHandle, 14);
+ entryResult.entryDurationDays = sqlite3_column_int(statementHandle, 15);
+ entryResult.entryDurationHours = sqlite3_column_int(statementHandle, 16);
+ entryResult.entryDurationMinutes = sqlite3_column_int(statementHandle, 17);
+ entryResult.entryDurationSeconds = sqlite3_column_int(statementHandle, 18);
+ entryResult.calendarID = sqlite3_column_int(statementHandle, 19);
+ entryResult.calendarEntryID = sqlite3_column_int(statementHandle, 20);
+
+ } else if (resultCode == SQLITE_DONE) {
+ entryResult.getEventResult = CDSENTRY_NOCALENDAR;
+ return entryResult;
+ } else {
+ entryResult.getEventResult = CDSENTRY_FAILED;
+ return entryResult;
+ }
+
+ entryResult.getEventResult = CDSENTRY_OK;
+
+ return entryResult;
+
+}
+
+CDSEntryResult CalendarDataStorage::DeleteEvent(int calendarEntryID)
+{
+
+ CDSEntryResult deleteResult = CDSENTRY_UNITTESTFAIL;
+
+ // Check if the calendar entry exists.
+
+ int resultCode;