00001 #include<gtk/gtk.h>
00002 #include<stdio.h>
00003 #include<stdlib.h>
00004 #include<string.h>
00005 #include<mysql/mysql.h>
00006 #include<time.h>
00007 #include<sys/stat.h>
00008 #include "encode.h"
00009
00010 #define BUFFER 100
00011 #define BUFFER200 200
00012 #define BUFFER500 500
00013 #define BUFFER2500 2500
00014 #define BUFFER5000 5000
00015 #define MAX_BUFF_SIZE 4096
00016 #define PRIMARY_KEY_ERROR 1062
00017
00018 GtkWidget *AddContact();
00019 GtkWidget *EditDeleteExportContact();
00020 GtkWidget *Todo();
00021 char *ExportContact();
00022 void ResizeAndSetImage(char *);
00023 void handler(GtkWidget *, gpointer);
00024 void ButtonAddHandler(GtkWidget *, gpointer);
00025 void SelectDate(GtkWidget *widget, gpointer data);
00026 void GetDate(GtkWidget *widget, gpointer data);
00027 void CloseCalendar(GtkWidget *widget, gpointer data);
00028 void SearchAcquaintance(GtkWidget *widget, gpointer data);
00029 void Validation(GtkWidget *widget, gpointer data);
00030 void SetImage(GtkWidget *widget, gpointer data);
00031 void GetData(GtkTextBuffer *buffer,gpointer user_data);
00032 void SearchTodo(GtkWidget *widget, gpointer data);
00033 void InitializePDMDB();
00034 void ExitProgram();
00035 int EstablishDbConnection(MYSQL **mysql_conn, const char username[BUFFER],const char password[BUFFER],const char database[BUFFER], const char server[BUFFER]);
00036
00037
00038
00039
00040 int AddContactToDB(char firstname[BUFFER200], char lastname[BUFFER200], char mobilenumber[50], char landlinenumber[50], char address[BUFFER2500], char email[BUFFER200],
00041 char imagefilename[BUFFER500]);
00042
00043
00044 int EditContactToDB(int contact, char firstname[BUFFER200], char lastname[BUFFER200], char mobilenumber[50], char landlinenumber[50], char address[BUFFER2500], char email[BUFFER200],
00045 char imagefilename[BUFFER500]);
00046
00047
00048 int DeleteContactToDB(int contactid);
00049
00050 int ExportContactFromDB(char filename[BUFFER500], char firstname[BUFFER200], char lastname[BUFFER200], char mobilenumber[50], char landlinenumber[50], char address[BUFFER2500],
00051 char email[BUFFER200], char imagefilename[BUFFER500]);
00052
00053
00054
00055 int AddTodo(char subject[BUFFER500], char note[BUFFER5000], char duedate[BUFFER]);
00056
00057
00058 int EditTodo(int todoid, char subject[BUFFER500], char note[BUFFER5000], char duedate[BUFFER]);
00059
00060
00061 int DeleteTodo(int todoid);
00062
00063 void GetTodo(int todoid, char subject[BUFFER500], char note[BUFFER5000], char duedate[BUFFER]);
00064
00065 void GetAllTodoInfo(int** todoid, char*** subject, int* count);
00066
00067 void GetAllContactInfo(int** contactid, char*** fname, char*** lname, int* count);
00068 void GetContact(int contactid, char firstname[BUFFER200], char lastname[BUFFER200], char mobilenumber[50], char landlinenumber[50],
00069 char address[BUFFER2500], char email[BUFFER200], char imagefilename[BUFFER500]);
00070 int GetMaxContactID();
00071 int EncodeImage(char imagefilename[BUFFER500]);
00072
00073 GtkWidget *window;
00074 GtkWidget *tableMain;
00075 GtkWidget *frameMain;
00076
00077
00078 GtkWidget *textDate;
00079 GtkWidget *textSubject;
00080 GtkWidget *textContent;
00081
00082
00083 GtkWidget *textFirstName;
00084 GtkWidget *textLastName;
00085 GtkWidget *textMobile;
00086 GtkWidget *textLandline;
00087 GtkWidget *textEmail;
00088 GtkWidget *textHome;
00089 GtkWidget *buttonImage;
00090 GtkWidget *image;
00091 GtkWidget *comboSearch;
00092 GtkWidget *comboSearchTodo;
00093
00094 MYSQL *default_sql_conn = NULL;
00095
00096 char CS_USER[20] = "cs3002_user";
00097 char CS_PASSWORD[20] = "cs3002_password";
00098 char CS_DATABASE[20] = "cs3002_database";
00099 char CS_SERVER[20] = "localhost";
00100
00101 int flag = 0;
00102 int flag2 = 0;
00103 int contactID;
00104 int todoID;
00105 int cnt = 0;
00106 int count =0;
00107 int i = 0;
00108 char date[11];
00109 char **firstname ,**lastname ;
00110 char **subjectTodo;
00111 char getImageFileName[BUFFER500];
00112 char subTodo[BUFFER200];
00113 char name[402];
00114 const gchar *imageFileName;
00115 int *allContactID;
00116 int *allTodoID;
00117 char homeAddress[BUFFER2500],newPath[1000];
00118 char note[BUFFER2500];
00119 char currentDate[11];
00120
00127 int main( int argc, char *argv[])
00128 {
00129
00130
00131 GtkWidget *window;
00132
00133
00134 GtkWidget *tableContact;
00135 GtkWidget *tableTodo;
00136
00137
00138
00139
00140 GtkWidget *frameTodo;
00141 GtkWidget *frameContact;
00142
00143
00144 GtkWidget *buttonContactAdd;
00145 GtkWidget *buttonContactEdit;
00146 GtkWidget *buttonContactDelete;
00147 GtkWidget *buttonContactExport;
00148
00149
00150 GtkWidget *buttonTodoAdd;
00151 GtkWidget *buttonTodoEdit;
00152 GtkWidget *buttonTodoDelete;
00153
00154
00155 gtk_init(&argc, &argv);
00156 InitializePDMDB();
00157
00158 time_t now;
00159 struct tm *d;
00160 time(&now);
00161 d = localtime(&now);
00162
00163 strftime(currentDate, 15, "%Y-%m-%d", d);
00164
00165 char current_working_dir[BUFFER500];
00166 struct stat st;
00167
00168 getcwd(current_working_dir,BUFFER500);
00169
00170 strcat(current_working_dir,"/pics");
00171
00172 if(stat(current_working_dir,&st) != 0)
00173 system("mkdir pics");
00174
00175 window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
00176 gtk_window_set_default_icon_from_file ("app.jpg",NULL);
00177 gtk_window_set_title(GTK_WINDOW(window), "Data Manager");
00178 gtk_window_set_default_size(GTK_WINDOW(window), 600, BUFFER500);
00179 gtk_window_set_position(GTK_WINDOW(window), GTK_WIN_POS_CENTER);
00180 gtk_window_set_resizable(GTK_WINDOW(window),FALSE);
00181
00182
00183 tableMain = gtk_table_new(12, 2, TRUE);
00184 gtk_container_add(GTK_CONTAINER(window), tableMain);
00185
00186
00187 frameContact = gtk_frame_new("Contact");
00188 frameTodo = gtk_frame_new("Todo");
00189 frameMain = gtk_frame_new(NULL);
00190
00191
00192 tableContact = gtk_table_new(1, 4, TRUE);
00193 tableTodo = gtk_table_new(1, 3, TRUE);
00194
00195
00196
00197 buttonContactAdd = gtk_button_new_with_label("Add Contact");
00198 buttonContactEdit = gtk_button_new_with_label("Edit Contact");
00199 buttonContactDelete = gtk_button_new_with_label("Delete Contact");
00200 buttonContactExport = gtk_button_new_with_label("Export Contact");
00201
00202
00203 buttonTodoAdd = gtk_button_new_with_label("Add Todo");
00204 buttonTodoEdit = gtk_button_new_with_label("Edit Todo");
00205 buttonTodoDelete = gtk_button_new_with_label("Delete Todo");
00206
00207
00208 gtk_table_attach_defaults(GTK_TABLE(tableContact), buttonContactAdd, 0, 1, 0, 1 );
00209 gtk_table_attach_defaults(GTK_TABLE(tableContact),buttonContactEdit, 1, 2, 0, 1 );
00210 gtk_table_attach_defaults(GTK_TABLE(tableContact),buttonContactDelete, 2, 3, 0, 1 );
00211 gtk_table_attach_defaults(GTK_TABLE(tableContact),buttonContactExport, 3, 4, 0, 1 );
00212
00213
00214 gtk_table_attach_defaults(GTK_TABLE(tableTodo), buttonTodoAdd, 0, 1, 0, 1 );
00215 gtk_table_attach_defaults(GTK_TABLE(tableTodo),buttonTodoEdit, 1, 2, 0, 1 );
00216 gtk_table_attach_defaults(GTK_TABLE(tableTodo),buttonTodoDelete, 2, 3, 0, 1 );
00217
00218
00219 gtk_container_add(GTK_CONTAINER(frameContact),tableContact);
00220
00221
00222 gtk_container_add(GTK_CONTAINER(frameTodo),tableTodo);
00223
00224
00225
00226
00227
00228
00229
00230
00231 gtk_table_attach_defaults(GTK_TABLE(tableMain), frameContact, 0, 1, 0, 1 );
00232 gtk_table_attach_defaults(GTK_TABLE(tableMain),frameTodo, 1, 2, 0, 1 );
00233
00234
00235 g_signal_connect(G_OBJECT(buttonContactAdd),"clicked",G_CALLBACK(handler), NULL);
00236 g_signal_connect(G_OBJECT(buttonContactEdit),"clicked",G_CALLBACK(handler), NULL);
00237 g_signal_connect(G_OBJECT(buttonContactDelete),"clicked",G_CALLBACK(handler), NULL);
00238 g_signal_connect(G_OBJECT(buttonContactExport),"clicked",G_CALLBACK(handler), NULL);
00239 g_signal_connect(G_OBJECT(buttonTodoAdd),"clicked",G_CALLBACK(handler), NULL);
00240 g_signal_connect(G_OBJECT(buttonTodoEdit),"clicked",G_CALLBACK(handler), NULL);
00241 g_signal_connect(G_OBJECT(buttonTodoDelete),"clicked",G_CALLBACK(handler), NULL);
00242 g_signal_connect_swapped(G_OBJECT(window), "destroy",G_CALLBACK(gtk_main_quit), NULL);
00243 gtk_widget_show_all(window);
00244 gtk_main();
00245
00246 return 0;
00247 }
00248
00254 void ButtonAddHandler(GtkWidget *widget, gpointer data)
00255 {
00256 const gchar *firstName, *lastName, *mobileNumber, *landlineNumber, *email;
00257 const gchar *subject,*dueDate;
00258 char dialogMessage[30];
00259 int ret;
00260 int error = 0;
00261 GtkMessageType type;
00262 GtkWidget *dialog;
00263 if(flag == 1 || flag ==2 || flag == 3 || flag == 7)
00264 {
00265 firstName = gtk_entry_get_text(GTK_ENTRY(textFirstName));
00266 if(firstName[0] == '\0')
00267 {
00268 strcpy(dialogMessage,"Please enter the first name");
00269 type = GTK_MESSAGE_ERROR;
00270 error =1;
00271 }
00272 lastName = gtk_entry_get_text(GTK_ENTRY(textLastName));
00273 mobileNumber = gtk_entry_get_text(GTK_ENTRY(textMobile));
00274 landlineNumber = gtk_entry_get_text(GTK_ENTRY(textLandline));
00275 email = gtk_entry_get_text(GTK_ENTRY(textEmail));
00276 }
00277 else if(flag == 4 || flag == 5 || flag == 6)
00278 {
00279 subject = gtk_entry_get_text(GTK_ENTRY(textSubject));
00280 if(subject[0] == '\0')
00281 {
00282 strcpy(dialogMessage,"Please enter subject");
00283 type = GTK_MESSAGE_ERROR;
00284 error =1;
00285 }
00286 }
00287 if(error == 0)
00288 {
00289 if(flag == 1)
00290 {
00291 ret = AddContactToDB(firstName, lastName, mobileNumber,landlineNumber,homeAddress,email, newPath);
00292 if(ret == -1)
00293 {
00294 strcpy(dialogMessage,"Error Occured");
00295 type = GTK_MESSAGE_ERROR;
00296 }
00297 else
00298 {
00299 strcpy(dialogMessage,"Saved Successfully");
00300 type = GTK_MESSAGE_INFO;
00301 }
00302 }
00303 else if(flag == 2)
00304 {
00305 ret = EditContactToDB(contactID, firstName, lastName, mobileNumber,landlineNumber,homeAddress,email, newPath);
00306 if(ret != 1)
00307 {
00308 strcpy(dialogMessage,"Error Occured");
00309 type = GTK_MESSAGE_ERROR;
00310 }
00311 else
00312 {
00313 strcpy(dialogMessage,"Saved Successfully");
00314 type = GTK_MESSAGE_INFO;
00315 gtk_widget_destroy(frameMain);
00316 frameMain = EditDeleteExportContact();
00317 gtk_table_attach_defaults(GTK_TABLE(tableMain),frameMain, 0, 2, 1, 12 );
00318 gtk_widget_show_all(frameMain);
00319 }
00320 }
00321 else if(flag == 3)
00322 {
00323 ret = DeleteContactToDB(contactID);
00324 char systemCommand[BUFFER];
00325 if(ret != 1)
00326 {
00327 strcpy(dialogMessage,"Error Occured");
00328 type = GTK_MESSAGE_ERROR;
00329 }
00330 else
00331 {
00332 strcpy(dialogMessage,"Deleted Successfully");
00333 type = GTK_MESSAGE_INFO;
00334 strcpy(systemCommand,"rm -f ");
00335 strcat(systemCommand,newPath);
00336 system(systemCommand);
00337 gtk_widget_destroy(frameMain);
00338 frameMain = EditDeleteExportContact();
00339 gtk_table_attach_defaults(GTK_TABLE(tableMain),frameMain, 0, 2, 1, 12 );
00340 gtk_widget_show_all(frameMain);
00341 }
00342 }
00343 else if(flag == 7)
00344 {
00345 char *fileName = ExportContact();
00346 ret = ExportContactFromDB(fileName, firstName, lastName, mobileNumber, landlineNumber, homeAddress, email, getImageFileName);
00347 if(ret != 1)
00348 {
00349 strcpy(dialogMessage,"Error Occured");
00350 type = GTK_MESSAGE_ERROR;
00351 }
00352 else
00353 {
00354 strcpy(dialogMessage,"Exported Successfully");
00355 type = GTK_MESSAGE_INFO;
00356 }
00357 }
00358 else if(flag == 4)
00359 {
00360 ret =AddTodo(subject,note,date);
00361 if(ret == -1)
00362 {
00363 strcpy(dialogMessage,"Error Occured");
00364 type = GTK_MESSAGE_ERROR;
00365 }
00366 else
00367 {
00368 strcpy(dialogMessage,"Saved Successfully");
00369 type = GTK_MESSAGE_INFO;
00370 }
00371 }
00372 else if(flag == 5)
00373 {
00374 ret = EditTodo(todoID,subject,note,date);
00375 if(ret != 1)
00376 {
00377 strcpy(dialogMessage,"Error Occured");
00378 type = GTK_MESSAGE_ERROR;
00379 }
00380 else
00381 {
00382 strcpy(dialogMessage,"Saved Successfully");
00383 type = GTK_MESSAGE_INFO;
00384 gtk_widget_destroy(frameMain);
00385 frameMain = Todo();
00386 gtk_table_attach_defaults(GTK_TABLE(tableMain),frameMain, 0, 2, 1, 12 );
00387 gtk_widget_show_all(frameMain);
00388 }
00389 }
00390 else if(flag == 6)
00391 {
00392 ret = DeleteTodo(todoID);
00393 if(ret == -1)
00394 {
00395 strcpy(dialogMessage,"Error Occured");
00396 type = GTK_MESSAGE_ERROR;
00397 }
00398 else
00399 {
00400 strcpy(dialogMessage,"Deleted Successfully");
00401 type = GTK_MESSAGE_INFO;
00402 gtk_widget_destroy(frameMain);
00403 frameMain = Todo();
00404 gtk_table_attach_defaults(GTK_TABLE(tableMain),frameMain, 0, 2, 1, 12 );
00405 gtk_widget_show_all(frameMain);
00406 }
00407 }
00408 }
00409 dialog = gtk_message_dialog_new(GTK_WINDOW(window),GTK_DIALOG_DESTROY_WITH_PARENT,type,GTK_BUTTONS_OK,dialogMessage);
00410
00411 gtk_dialog_run(GTK_DIALOG(dialog));
00412
00413 gtk_widget_destroy(dialog);
00414 if((flag == 1)&&(ret >= 0))
00415 {
00416 newPath[0] = '\0';
00417 email = gtk_entry_get_text(GTK_ENTRY(textEmail));
00418 gtk_entry_set_text(GTK_ENTRY(textFirstName),"");
00419 gtk_entry_set_text(GTK_ENTRY(textLastName),"");
00420 gtk_entry_set_text(GTK_ENTRY(textMobile),"");
00421 gtk_entry_set_text(GTK_ENTRY(textLandline),"");
00422 gtk_image_clear(GTK_IMAGE(image));
00423
00424 }
00425 if((flag == 4)&&(ret >= 0))
00426 {
00427 gtk_entry_set_text(GTK_ENTRY(textSubject),"");
00428 gtk_entry_set_text(GTK_ENTRY(textDate),date);
00429 }
00430
00431 }
00432
00439 void GetData(GtkTextBuffer *buffer,gpointer user_data)
00440 {
00441 GtkTextIter start, end;
00442 gtk_text_buffer_get_iter_at_offset (buffer, &start,0);
00443 gtk_text_buffer_get_iter_at_offset (buffer, &end,2499);
00444 gchar *txt;
00445 txt=gtk_text_buffer_get_text(buffer,&start,&end,FALSE);
00446 if(flag <= 3 || flag == 7)
00447 strcpy(homeAddress,txt);
00448 else if(flag >=4 && flag <= 6)
00449 strcpy(note,txt);
00450 }
00451
00457 void handler(GtkWidget *widget, gpointer data)
00458 {
00459 char ch[BUFFER];
00460 strcpy(ch,gtk_button_get_label(GTK_BUTTON(widget)));
00461 gtk_widget_destroy(frameMain);
00462 if(!strcmp(ch,"Add Contact"))
00463 {
00464 flag = 1;
00465 frameMain = AddContact();
00466 }
00467 else if(!strcmp(ch,"Edit Contact"))
00468 {
00469 flag = 2;
00470 frameMain = EditDeleteExportContact();
00471 }
00472 else if(!strcmp(ch,"Delete Contact"))
00473 {
00474 flag = 3;
00475 frameMain = EditDeleteExportContact();
00476 }
00477 else if(!strcmp(ch,"Add Todo"))
00478 {
00479 flag = 4;
00480 strcpy(date, currentDate);
00481 frameMain = Todo();
00482 }
00483 else if(!strcmp(ch,"Edit Todo"))
00484 {
00485 flag = 5;
00486 frameMain = Todo();
00487 }
00488 else if(!strcmp(ch,"Delete Todo"))
00489 {
00490 flag = 6;
00491 frameMain = Todo();
00492 }
00493 else if(!strcmp(ch,"Export Contact"))
00494 {
00495 flag = 7;
00496 frameMain = EditDeleteExportContact();
00497 }
00498 gtk_table_attach_defaults(GTK_TABLE(tableMain),frameMain, 0, 2, 1, 12 );
00499 gtk_widget_show_all(frameMain);
00500 }
00501
00506 GtkWidget *AddContact()
00507 {
00508 GtkWidget *frame;
00509 GtkWidget *table;
00510 GtkWidget *scroll;
00511 GtkTextBuffer *buffer;
00512
00513 GtkWidget *buttonAdd;
00514
00515 GtkWidget *labelFirstName;
00516 GtkWidget *labelLastName;
00517 GtkWidget *labelMobile;
00518 GtkWidget *labelLandline;
00519 GtkWidget *labelEmail;
00520 GtkWidget *labelHome;
00521 GtkWidget *labelImage;
00522
00523
00524 scroll = gtk_scrolled_window_new (NULL,NULL);
00525 frame = gtk_frame_new(NULL);
00526 table = gtk_table_new(7, 8, TRUE);
00527
00528 labelFirstName = gtk_label_new("Acquaintance Name");
00529 labelLastName = gtk_label_new("Family Name");
00530 labelMobile = gtk_label_new("Mobile No.");
00531 labelLandline = gtk_label_new("Landline No.");
00532 labelEmail = gtk_label_new("Email Address");
00533 labelHome = gtk_label_new("Home Address");
00534 labelImage = gtk_label_new("Upload Image");
00535
00536 textFirstName = gtk_entry_new_with_max_length(BUFFER200);
00537 textLastName = gtk_entry_new_with_max_length(BUFFER200);
00538 textMobile = gtk_entry_new_with_max_length(10);
00539 textLandline = gtk_entry_new_with_max_length(10);
00540 textEmail = gtk_entry_new_with_max_length(BUFFER200);
00541 textHome = gtk_text_view_new();
00542 image = gtk_image_new_from_file("question.jpg");
00543
00544
00545
00546 buttonImage = gtk_file_chooser_button_new("Upload Image" , GTK_FILE_CHOOSER_ACTION_OPEN);
00547 buttonAdd = gtk_button_new_with_label(" Save ");
00548
00549 gtk_table_attach_defaults(GTK_TABLE(table), labelFirstName, 0, 2, 0, 1 );
00550 gtk_table_attach_defaults(GTK_TABLE(table), labelLastName, 4, 6, 0, 1 );
00551 gtk_table_attach_defaults(GTK_TABLE(table), labelLandline, 0, 2, 1, 2 );
00552 gtk_table_attach_defaults(GTK_TABLE(table), labelMobile, 4, 6, 1, 2 );
00553 gtk_table_attach_defaults(GTK_TABLE(table), labelHome, 0, 2, 2, 5 );
00554 gtk_table_attach_defaults(GTK_TABLE(table), labelEmail, 0, 2, 5, 6 );
00555 gtk_table_attach_defaults(GTK_TABLE(table), labelImage, 4, 6, 5, 6 );
00556
00557 gtk_table_attach_defaults(GTK_TABLE(table),textFirstName, 2, 4, 0, 1 );
00558 gtk_table_attach_defaults(GTK_TABLE(table),textLastName, 6, 8, 0, 1 );
00559 gtk_table_attach_defaults(GTK_TABLE(table), textLandline, 2, 4, 1, 2 );
00560 gtk_table_attach_defaults(GTK_TABLE(table), textMobile, 6, 8, 1, 2 );
00561 gtk_table_attach_defaults(GTK_TABLE(table), scroll, 2, 4, 2, 5 );
00562 gtk_container_add(GTK_CONTAINER(scroll),textHome);
00563 gtk_widget_set_size_request(image,250,185);
00564 gtk_table_attach (GTK_TABLE(table), image, 5, 8, 2, 5, GTK_SHRINK,GTK_SHRINK,0,0);
00565 gtk_table_attach_defaults(GTK_TABLE(table), textEmail, 2, 4, 5, 6 );
00566 gtk_table_attach (GTK_TABLE(table), buttonImage, 6, 8, 5, 6, GTK_FILL,GTK_EXPAND,0,0);
00567
00568 gtk_table_attach (GTK_TABLE(table), buttonAdd, 6,8,6,7, GTK_EXPAND,GTK_EXPAND,0,0);
00569 buffer = gtk_text_view_get_buffer(GTK_TEXT_VIEW(textHome));
00570 gtk_container_add(GTK_CONTAINER(frame),table);
00571 g_signal_connect(G_OBJECT(buttonAdd),"clicked",G_CALLBACK(ButtonAddHandler), NULL);
00572 g_signal_connect(G_OBJECT(textMobile), "changed", G_CALLBACK(Validation),(gpointer)textMobile);
00573 g_signal_connect(G_OBJECT(textLandline), "changed", G_CALLBACK(Validation),(gpointer)textLandline);
00574 g_signal_connect(G_OBJECT(buttonImage), "file-set", G_CALLBACK(SetImage),(gpointer)textMobile);
00575 g_signal_connect(G_OBJECT(buffer),"changed",G_CALLBACK(GetData),NULL);
00576 return frame;
00577 }
00578
00583 GtkWidget *EditDeleteExportContact()
00584 {
00585 GtkWidget *frame;
00586 GtkWidget *table;
00587 GtkWidget *scroll;
00588 GtkTextBuffer *buffer;
00589
00590 GtkWidget *buttonAdd;
00591
00592 GtkWidget *labelFirstName;
00593 GtkWidget *labelLastName;
00594 GtkWidget *labelMobile;
00595 GtkWidget *labelLandline;
00596 GtkWidget *labelEmail;
00597 GtkWidget *labelHome;
00598 GtkWidget *labelImage;
00599 GtkWidget *labelSearch;
00600
00601
00602 scroll = gtk_scrolled_window_new (NULL,NULL);
00603 frame = gtk_frame_new(NULL);
00604 table = gtk_table_new(8, 8, TRUE);
00605
00606 labelFirstName = gtk_label_new("Acquaintance Name");
00607 labelLastName = gtk_label_new("Family Name");
00608 labelMobile = gtk_label_new("Mobile No.");
00609 labelLandline = gtk_label_new("Landline No.");
00610 labelEmail = gtk_label_new("Email Address");
00611 labelHome = gtk_label_new("Home Address");
00612 labelSearch = gtk_label_new("Search Acquaintance");
00613
00614 textFirstName = gtk_entry_new_with_max_length(BUFFER200);
00615 textLastName = gtk_entry_new_with_max_length(BUFFER200);
00616 textMobile = gtk_entry_new_with_max_length(10);
00617 textLandline = gtk_entry_new_with_max_length(10);
00618 textEmail = gtk_entry_new_with_max_length(BUFFER200);
00619 textHome = gtk_text_view_new();
00620 comboSearch = gtk_combo_box_new_text();
00621 image = gtk_image_new_from_file("question.jpg");
00622
00623 if(flag == 2)
00624 {
00625 labelImage = gtk_label_new("Upload Image");
00626 buttonImage = gtk_file_chooser_button_new("Upload Image" , GTK_FILE_CHOOSER_ACTION_OPEN);
00627 gtk_table_attach_defaults(GTK_TABLE(table), labelImage, 4, 6, 6, 7 );
00628 gtk_table_attach (GTK_TABLE(table), buttonImage, 6, 8, 6, 7, GTK_FILL,GTK_EXPAND,0,0);
00629 buttonAdd = gtk_button_new_with_label("Save Changes");
00630 g_signal_connect(G_OBJECT(buttonImage), "file-set", G_CALLBACK(SetImage),NULL);
00631 }
00632 else if(flag == 3)
00633 {
00634 buttonAdd = gtk_button_new_with_label(" Delete ");
00635 }
00636 else if(flag == 7)
00637 {
00638 buttonAdd = gtk_button_new_with_label(" Export ");
00639 }
00640 if(flag ==3 || flag == 7)
00641 {
00642 gtk_entry_set_editable(GTK_ENTRY(textFirstName),FALSE);
00643 gtk_entry_set_editable(GTK_ENTRY(textLastName),FALSE);
00644 gtk_entry_set_editable(GTK_ENTRY(textEmail),FALSE);
00645 gtk_entry_set_editable(GTK_ENTRY(textMobile),FALSE);
00646 gtk_entry_set_editable(GTK_ENTRY(textLandline),FALSE);
00647 gtk_text_view_set_editable(GTK_TEXT_VIEW(textHome),FALSE);
00648 }
00649
00650 gtk_table_attach_defaults(GTK_TABLE(table), labelSearch, 1, 3, 0, 1 );
00651 gtk_table_attach_defaults(GTK_TABLE(table), labelFirstName, 0, 2, 1, 2 );
00652 gtk_table_attach_defaults(GTK_TABLE(table), labelLastName, 4, 6, 1, 2 );
00653 gtk_table_attach_defaults(GTK_TABLE(table), labelLandline, 0, 2, 2, 3 );
00654 gtk_table_attach_defaults(GTK_TABLE(table), labelMobile, 4, 6, 2, 3 );
00655 gtk_table_attach_defaults(GTK_TABLE(table), labelHome, 0, 2, 3, 6 );
00656 gtk_table_attach_defaults(GTK_TABLE(table), labelEmail, 0, 2, 6, 7 );
00657
00658 gtk_table_attach (GTK_TABLE(table), comboSearch, 3, 6, 0, 1 , GTK_FILL,GTK_SHRINK,0,0);
00659 gtk_table_attach_defaults(GTK_TABLE(table),textFirstName, 2, 4, 1, 2 );
00660 gtk_table_attach_defaults(GTK_TABLE(table),textLastName, 6, 8, 1, 2 );
00661 gtk_table_attach_defaults(GTK_TABLE(table), textLandline, 2, 4, 2, 3 );
00662 gtk_table_attach_defaults(GTK_TABLE(table), textMobile, 6, 8, 2, 3 );
00663 gtk_table_attach_defaults(GTK_TABLE(table), scroll, 2, 4, 3, 6 );
00664 gtk_container_add(GTK_CONTAINER(scroll),textHome);
00665 gtk_widget_set_size_request(image,250,185);
00666 gtk_table_attach (GTK_TABLE(table), image, 5, 8, 3, 6, GTK_SHRINK,GTK_SHRINK,0,0);
00667 gtk_table_attach_defaults(GTK_TABLE(table), textEmail, 2, 4, 6, 7 );
00668 gtk_table_attach (GTK_TABLE(table), buttonAdd, 6,8,7,8, GTK_EXPAND,GTK_EXPAND,0,0);
00669 GetAllContactInfo(&allContactID,&firstname,&lastname,&cnt);
00670 if(cnt == 0)
00671 {
00672 gtk_entry_set_editable(GTK_ENTRY(textFirstName),FALSE);
00673 gtk_entry_set_editable(GTK_ENTRY(textLastName),FALSE);
00674 gtk_entry_set_editable(GTK_ENTRY(textEmail),FALSE);
00675 gtk_entry_set_editable(GTK_ENTRY(textMobile),FALSE);
00676 gtk_entry_set_editable(GTK_ENTRY(textLandline),FALSE);
00677 gtk_text_view_set_editable(GTK_TEXT_VIEW(textHome),FALSE);
00678 }
00679 for(i = 0; i < cnt; i++)
00680 {
00681 sprintf(name,"%s %s",firstname[i],lastname[i]);
00682 gtk_combo_box_insert_text(GTK_COMBO_BOX(comboSearch),i,name);
00683 }
00684
00685
00686 buffer = gtk_text_view_get_buffer(GTK_TEXT_VIEW(textHome));
00687
00688 gtk_container_add(GTK_CONTAINER(frame),table);
00689 g_signal_connect(G_OBJECT(buttonAdd),"clicked",G_CALLBACK(ButtonAddHandler), NULL);
00690 g_signal_connect(G_OBJECT(comboSearch),"changed",G_CALLBACK(SearchAcquaintance), NULL);
00691 g_signal_connect(G_OBJECT(textMobile), "changed", G_CALLBACK(Validation),(gpointer)textMobile);
00692 g_signal_connect(G_OBJECT(textLandline), "changed", G_CALLBACK(Validation),(gpointer)textMobile);
00693 g_signal_connect(G_OBJECT(buffer),"changed",G_CALLBACK(GetData),NULL);
00694
00695 gtk_combo_box_set_active(GTK_COMBO_BOX(comboSearch),0);
00696
00697 return frame;
00698 }
00699
00704 void SetImage(GtkWidget *widget, gpointer data)
00705 {
00706 imageFileName = gtk_file_chooser_get_filename (GTK_FILE_CHOOSER (buttonImage));
00707 ResizeAndSetImage(imageFileName);
00708 }
00709
00713 void ResizeAndSetImage(char *imageFileName)
00714 {
00715 char systemCommand[1000],newName[BUFFER500];
00716 int maxContactID=0;
00717 if(!strcmp(imageFileName,"(null)"))
00718 {
00719 gtk_image_set_from_file (GTK_IMAGE(image),"question.jpg");
00720 }
00721 else
00722 {
00723 if(flag == 1)
00724 {
00725 maxContactID = GetMaxContactID() + 1;
00726 sprintf(newName,"%d",maxContactID);
00727 strcat(newName,".jpg");
00728 strcpy(newPath,"pics/");
00729 strcat(newPath,newName);
00730 }
00731 strcpy(systemCommand,"convert -size 5X5 '");
00732 strcat(systemCommand,imageFileName);
00733 strcat(systemCommand,"' '");
00734 strcat(systemCommand,newPath);
00735 strcat(systemCommand,"'");
00736 system(systemCommand);
00737 gtk_image_set_from_file (GTK_IMAGE(image),newPath);
00738 }
00739 }
00740
00746 void SearchAcquaintance(GtkWidget *widget, gpointer data)
00747 {
00748 int index = -1;
00749 char firstName[BUFFER200], lastName[BUFFER200], mobileNumber[50], landlineNumber[50],address[BUFFER2500], email[BUFFER200];
00750 GtkTextBuffer *buffer;
00751 gint len;
00752 index = gtk_combo_box_get_active(GTK_COMBO_BOX(widget));
00753 if(index != -1)
00754 {
00755 contactID = allContactID[index];
00756 newPath[0] = '\0';
00757 gtk_image_clear(GTK_IMAGE(image));
00758 GetContact(contactID, firstName,lastName,mobileNumber, landlineNumber,address,email,getImageFileName);
00759 strcpy(newPath,getImageFileName);
00760 if(newPath[0] == '\0')
00761 gtk_image_set_from_file (GTK_IMAGE(image),"question.jpg");
00762 else
00763 gtk_image_set_from_file (GTK_IMAGE(image),newPath);
00764 gtk_entry_set_text(GTK_ENTRY(textFirstName),firstName);
00765 gtk_entry_set_text(GTK_ENTRY(textLastName),lastName);
00766 gtk_entry_set_text(GTK_ENTRY(textMobile),mobileNumber);
00767 gtk_entry_set_text(GTK_ENTRY(textLandline),landlineNumber);
00768 gtk_entry_set_text(GTK_ENTRY(textEmail),email);
00769 if(flag == 2)
00770 gtk_file_chooser_button_set_title(GTK_FILE_CHOOSER_BUTTON (buttonImage),getImageFileName);
00771 len = strlen(address);
00772 buffer = gtk_text_view_get_buffer (GTK_TEXT_VIEW (textHome));
00773 gtk_text_buffer_set_text (buffer,address, -1);
00774 }
00775 }
00776
00782 void SearchTodo(GtkWidget *widget, gpointer data)
00783 {
00784 int index = -1;
00785 char subject[BUFFER500],duedate[11],notes[BUFFER2500];
00786 GtkTextBuffer *buffer;
00787 gint len;
00788 index = gtk_combo_box_get_active(GTK_COMBO_BOX(widget));
00789 if(index != -1)
00790 {
00791 todoID = allTodoID[index];
00792 GetTodo(todoID,subject,notes,duedate);
00793 gtk_entry_set_text(GTK_ENTRY(textSubject),subject);
00794 gtk_entry_set_text(GTK_ENTRY(textDate),duedate);
00795 len = strlen(notes);
00796 buffer = gtk_text_view_get_buffer (GTK_TEXT_VIEW (textContent));
00797 gtk_text_buffer_set_text (buffer,notes, -1);
00798 }
00799 }
00800
00805 GtkWidget *Todo()
00806 {
00807 GtkWidget *frame;
00808 GtkWidget *table;
00809 GtkWidget *scroll;
00810 GtkTextBuffer *buffer;
00811
00812 GtkWidget *buttonAdd;
00813 GtkWidget *buttonDate;
00814 GtkWidget *labelSubject;
00815 GtkWidget *labelDate;
00816 GtkWidget *labelContent;
00817 GtkWidget *labelSearch;
00818
00819
00820 textSubject = gtk_entry_new_with_max_length(BUFFER500);
00821 scroll = gtk_scrolled_window_new (NULL,NULL);
00822 frame = gtk_frame_new(NULL);
00823 table = gtk_table_new(7, 7, FALSE);
00824
00825 labelSubject = gtk_label_new("Subject");
00826 labelDate = gtk_label_new("Date");
00827 labelContent = gtk_label_new("Note");
00828
00829 textDate = gtk_entry_new_with_max_length(11);
00830 gtk_entry_set_text(GTK_ENTRY(textDate),date);
00831 textContent = gtk_text_view_new();
00832 buttonDate = gtk_button_new_with_label("..");
00833 gtk_entry_set_editable(GTK_ENTRY(textDate),FALSE);
00834 buffer = gtk_text_view_get_buffer(GTK_TEXT_VIEW(textContent));
00835
00836 if(flag == 4)
00837 {
00838 buttonAdd = gtk_button_new_with_label("Save");
00839 }
00840 else if(flag == 5 || flag ==6)
00841 {
00842 labelSearch = gtk_label_new("Search Todo");
00843 comboSearchTodo = gtk_combo_box_new_text();
00844 gtk_table_attach_defaults (GTK_TABLE(table), labelSearch,0, 2, 0, 1);
00845 gtk_table_attach (GTK_TABLE(table), comboSearchTodo, 2, 5, 0, 1 , GTK_FILL,GTK_SHRINK,0,0);
00846 g_signal_connect(G_OBJECT(comboSearchTodo),"changed",G_CALLBACK(SearchTodo), NULL);
00847 }
00848 if(flag == 5)
00849 {
00850 buttonAdd = gtk_button_new_with_label("Save Changes");
00851 }
00852 else if(flag == 6)
00853 {
00854 buttonAdd = gtk_button_new_with_label("Delete");
00855 gtk_text_view_set_editable(GTK_TEXT_VIEW(textContent),FALSE);
00856 gtk_entry_set_editable(GTK_ENTRY(textSubject),FALSE);
00857 }
00858
00859
00860 gtk_table_attach_defaults(GTK_TABLE(table), labelSubject, 0, 1, 1, 2 );
00861 gtk_table_attach_defaults(GTK_TABLE(table), labelDate, 3, 4, 1, 2 );
00862 gtk_table_attach_defaults(GTK_TABLE(table), labelContent, 0, 1, 2, 6 );
00863
00864 gtk_table_attach_defaults(GTK_TABLE(table),textSubject, 1, 3, 1, 2 );
00865 gtk_table_attach_defaults(GTK_TABLE(table), textDate, 4, 6, 1, 2 );
00866 gtk_table_attach (GTK_TABLE(table), buttonDate, 6, 7, 1, 2 ,GTK_SHRINK,GTK_SHRINK,0,0);
00867 gtk_button_set_alignment(GTK_BUTTON(buttonDate),0.0,0.0);
00868 gtk_table_attach_defaults(GTK_TABLE(table), scroll, 1, 6, 2, 6 );
00869 gtk_container_add(GTK_CONTAINER(scroll),textContent);
00870
00871 gtk_table_attach (GTK_TABLE(table), buttonAdd, 4,6,6,7, GTK_FILL,GTK_EXPAND,0,0);
00872
00873
00874 if(flag == 5 || flag == 6)
00875 {
00876 GetAllTodoInfo(&allTodoID,&subjectTodo,&count);
00877
00878 for(i = 0; i < count; i++)
00879 {
00880 sprintf(subTodo,"%s",subjectTodo[i]);
00881 gtk_combo_box_insert_text(GTK_COMBO_BOX(comboSearchTodo),i,subTodo);
00882 }
00883 gtk_combo_box_set_active(GTK_COMBO_BOX(comboSearchTodo),0);
00884 }
00885 gtk_container_add(GTK_CONTAINER(frame),table);
00886 g_signal_connect(G_OBJECT(buttonAdd),"clicked",G_CALLBACK(ButtonAddHandler), NULL);
00887 if(flag != 6)
00888 g_signal_connect(G_OBJECT(buttonDate),"clicked",G_CALLBACK(SelectDate), NULL);
00889 g_signal_connect(G_OBJECT(buffer),"changed",G_CALLBACK(GetData),NULL);
00890 return frame;
00891 }
00892
00898 void SelectDate(GtkWidget *widget, gpointer data)
00899 {
00900 if(flag2 == 0)
00901 {
00902 GtkWidget *calendarWindow;
00903 GtkWidget *calendar;
00904 flag2 = 1;
00905 calendarWindow = gtk_window_new (GTK_WINDOW_TOPLEVEL);
00906 gtk_window_set_title(GTK_WINDOW(calendarWindow), "Calendar");
00907 gtk_window_set_default_size(GTK_WINDOW(calendarWindow), BUFFER, BUFFER);
00908 gtk_window_set_position(GTK_WINDOW(calendarWindow),GTK_WIN_POS_MOUSE);
00909 gtk_window_set_transient_for(GTK_WINDOW(calendarWindow),GTK_WINDOW(window));
00910 gtk_window_set_keep_above(GTK_WINDOW(calendarWindow),TRUE);
00911 gtk_window_set_skip_taskbar_hint(GTK_WINDOW(calendarWindow),TRUE);
00912 calendar = gtk_calendar_new();
00913 gtk_container_add(GTK_CONTAINER(calendarWindow), calendar);
00914 gtk_widget_show_all(calendarWindow);
00915 g_signal_connect(G_OBJECT(calendarWindow),"delete_event",G_CALLBACK(CloseCalendar),NULL);
00916 g_signal_connect(G_OBJECT(calendar),"day-selected",G_CALLBACK(GetDate), NULL);
00917 }
00918 }
00919
00925 void CloseCalendar(GtkWidget *widget, gpointer data)
00926 {
00927 flag2 = 0;
00928 gtk_widget_destroy(widget);
00929
00930 }
00931
00937 void GetDate(GtkWidget *widget, gpointer data)
00938 {
00939 guint year,month,day;
00940 gtk_calendar_get_date(GTK_CALENDAR(widget), &year, &month, &day);
00941 sprintf(date,"%d-%d-%d",year,month+1,day);
00942 gtk_entry_set_text(GTK_ENTRY(textDate),date);
00943 }
00944
00948 char *ExportContact()
00949 {
00950 GtkWidget *dialog;
00951 char *fileName;
00952 dialog = gtk_file_chooser_dialog_new ("Save File",
00953 GTK_WINDOW(window),
00954 GTK_FILE_CHOOSER_ACTION_SAVE,
00955 GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL,
00956 GTK_STOCK_SAVE, GTK_RESPONSE_ACCEPT,
00957 NULL);
00958 gtk_file_chooser_set_do_overwrite_confirmation (GTK_FILE_CHOOSER (dialog), TRUE);
00959 gtk_file_chooser_set_current_folder (GTK_FILE_CHOOSER (dialog), "/home");
00960 gtk_file_chooser_set_current_name (GTK_FILE_CHOOSER (dialog), "*.vcf");
00961
00962 if (gtk_dialog_run (GTK_DIALOG (dialog)) == GTK_RESPONSE_ACCEPT)
00963 {
00964 fileName = gtk_file_chooser_get_filename (GTK_FILE_CHOOSER (dialog));
00965 }
00966 gtk_widget_destroy (dialog);
00967 return fileName;
00968 }
00969
00980 int AddContactToDB(char firstname[BUFFER200], char lastname[BUFFER200], char mobilenumber[50], char landlinenumber[50], char address[BUFFER2500], char email[BUFFER200], char imagefilename[BUFFER500])
00981 {
00982
00983 int ret_value,contactid = -1;
00984 char insert_stmt[MAX_BUFF_SIZE], *id = NULL;
00985
00986 sprintf(insert_stmt, "INSERT into contact values(%d,'%s','%s','%s', '%s', '%s', '%s', '%s',CURDATE(),CURDATE());",(int)id, firstname, lastname, mobilenumber, landlinenumber, address, email, imagefilename);
00987 ret_value = mysql_query (default_sql_conn, insert_stmt);
00988
00989 if (ret_value == 0)
00990 {
00991 printf ("\n contact inserted successfully.\n");
00992
00993 contactid = GetMaxContactID();
00994 }
00995 else if(mysql_errno (default_sql_conn) == PRIMARY_KEY_ERROR)
00996 {
00997 fprintf(stderr,"\nCould not insert record. contactid already exists.");
00998 }
00999 else
01000 {
01001 fprintf (stderr, "\nCould not insert record - Error Number : %d. %s\n", mysql_errno (default_sql_conn), mysql_error (default_sql_conn));
01002 }
01003
01004 return contactid;
01005 }
01006
01018 int EditContactToDB(int contactid, char firstname[BUFFER200], char lastname[BUFFER200], char mobilenumber[50], char landlinenumber[50],
01019 char address[BUFFER2500], char email[BUFFER200], char imagefilename[BUFFER500])
01020 {
01021
01022 int ret_value;
01023 char update_stmt[MAX_BUFF_SIZE];
01024
01025
01026 sprintf(update_stmt,"UPDATE contact SET firstname = '%s',lastname = '%s',mobilenumber = '%s',landlinenumber = '%s',address = '%s',email = '%s',imagefilename = '%s' where contactid = %d;",firstname, lastname, mobilenumber, landlinenumber, address, email, imagefilename, contactid);
01027
01028
01029 ret_value = mysql_query (default_sql_conn, update_stmt);
01030
01031 if (ret_value == 0)
01032 {
01033 unsigned long rows_affected = (unsigned long) mysql_affected_rows (default_sql_conn);
01034 if(rows_affected <= 0 )
01035 {
01036 printf ("\nRecord update operation : Id not found in the database. No rows modified. \n" );
01037 return -2;
01038 }
01039 else
01040 {
01041 printf ("\nRecord update operation : %lu row(s) Modified. \n",rows_affected );
01042 return 1;
01043 }
01044 }
01045 else
01046 {
01047 fprintf (stderr, "Record update operation failed : Error Code: %d. %s\n", mysql_errno (default_sql_conn), mysql_error (default_sql_conn));
01048 }
01049
01050 return -1;
01051
01052 }
01053
01058 int DeleteContactToDB(int contactid)
01059 {
01060
01061 char delete_stmt[MAX_BUFF_SIZE];
01062 int ret_value;
01063
01064 sprintf(delete_stmt, "DELETE FROM contact WHERE contactid = %d", contactid);
01065
01066 ret_value = mysql_query (default_sql_conn, delete_stmt);
01067
01068 if (ret_value == 0)
01069 {
01070 unsigned long rows_affected = (unsigned long) mysql_affected_rows (default_sql_conn);
01071 if(rows_affected <= 0 )
01072 {
01073 printf ("\nRecord delete operation : Id not found in the database. No rows deleted. \n" );
01074 return -2;
01075 }
01076 else
01077 {
01078 printf ("\nRecord delete operation : %lu row deleted. \n",rows_affected );
01079 return 1;
01080 }
01081 }
01082 else
01083 {
01084 fprintf (stderr, "Record delete operation failed : Error Code: %d. %s\n", mysql_errno (default_sql_conn), mysql_error (default_sql_conn));
01085 }
01086
01087 return -1;
01088
01089 }
01090
01094 void InitializePDMDB()
01095 {
01096 int ret_value = 0;
01097
01098 if(EstablishDbConnection(&default_sql_conn, CS_USER, CS_PASSWORD, CS_DATABASE,CS_SERVER) != 1)
01099 {
01100 exit(0);
01101 }
01102
01103
01104
01105 ret_value = mysql_query (default_sql_conn, "create table if not exists contact (contactid INTEGER AUTO_INCREMENT, firstname varchar(200), lastname varchar(200), mobilenumber varchar(50), landlinenumber varchar(50), address varchar(2500), email VARCHAR(200), imagefilename varchar(500), createddate DATE, lastmodifieddate DATE,PRIMARY KEY(contactid))");
01106
01107 if (ret_value != 0)
01108 {
01109 fprintf (stderr, "Could not create contact table in cs3002_database as %d: %s\n", mysql_errno (default_sql_conn),
01110 mysql_error (default_sql_conn));
01111 ExitProgram();
01112 }
01113
01114 ret_value = mysql_query (default_sql_conn, " create table if not exists todo (todoid INTEGER AUTO_INCREMENT, subject varchar(500), note varchar(5000), duedate DATE, createddate DATE, lastmodifieddate DATE,PRIMARY KEY(todoid))");
01115
01116 if (ret_value != 0)
01117 {
01118 fprintf (stderr, "Could not create todo table in cs3002_database as %d: %s\n", mysql_errno (default_sql_conn),
01119 mysql_error (default_sql_conn));
01120 ExitProgram();
01121 }
01122
01123 }
01124
01134 int EstablishDbConnection(MYSQL **mysql_conn, const char username[BUFFER], const char password[BUFFER], const char database[BUFFER], const char server[BUFFER])
01135 {
01136
01137 (*mysql_conn) = mysql_init (NULL);
01138 if ((*mysql_conn) == NULL)
01139 {
01140 fprintf (stderr, "MySQL initialization failed\n");
01141 return -1;
01142 }
01143
01144 (*mysql_conn) = mysql_real_connect ((*mysql_conn), server, username, password, database, 0, NULL, CLIENT_FOUND_ROWS);
01145
01146 if ((*mysql_conn) == NULL)
01147 {
01148 printf ("Connection failed\n");
01149 return -2;
01150 }
01151 return 1;
01152 }
01153
01157 void ExitProgram()
01158 {
01159 mysql_close (default_sql_conn);
01160 exit(0);
01161 }
01162
01168 void Validation(GtkWidget *widget, gpointer data)
01169 {
01170 char *valueEntered=gtk_entry_get_text(GTK_ENTRY(widget));
01171 int len=strlen(valueEntered);
01172 int lastPressedKey=valueEntered[len-1];
01173 if(lastPressedKey<48 || lastPressedKey>57)
01174 {
01175 gtk_editable_delete_text(GTK_EDITABLE(widget),len-1,-1);
01176 }
01177
01178 }
01179
01187 void GetAllContactInfo(int** contactid, char*** fname, char*** lname, int* count)
01188 {
01189
01190 MYSQL_RES *result;
01191 MYSQL_ROW sqlrow;
01192 int return_val,index = 0;
01193
01194 int *contact = (*contactid);
01195 char **firstname = (*fname);
01196 char **lastname = (*lname);
01197
01198
01199 return_val = mysql_query (default_sql_conn, "select contactid,firstname,lastname from contact");
01200
01201 if (return_val != 0)
01202 {
01203 printf ("\nListing of records failed : %s\n", mysql_error (default_sql_conn));
01204 }
01205 else
01206 {
01207 result = mysql_store_result (default_sql_conn);
01208 int num_rows = (int)mysql_num_rows(result);
01209 (*count) = num_rows;
01210
01211 contact = (int*)calloc(num_rows,sizeof(int));
01212 firstname = (char**)calloc(num_rows,sizeof(char*));
01213 lastname = (char**)calloc(num_rows,sizeof(char*));
01214
01215 if(result != NULL)
01216 {
01217 while((sqlrow = mysql_fetch_row (result)))
01218 {
01219 firstname[index] = (char*)malloc(sizeof(char));
01220 lastname[index] = (char*)malloc(sizeof(char));
01221 contact[index] = atoi(sqlrow[0]);
01222 strcpy(firstname[index],sqlrow[1]);
01223 strcpy(lastname[index],sqlrow[2]);
01224 index++;
01225 }
01226 if(mysql_errno(default_sql_conn))
01227 {
01228 printf ("Error occurred while retrieving records from the database : %s\n", mysql_error (default_sql_conn));
01229 }
01230 }
01231 mysql_free_result(result);
01232 }
01233 (*fname) = firstname;
01234 (*lname) = lastname ;
01235 (*contactid) = contact;
01236
01237 }
01238
01250 void GetContact(int contactid, char firstname[BUFFER200], char lastname[BUFFER200], char mobilenumber[50], char landlinenumber[50],
01251 char address[BUFFER2500], char email[BUFFER200], char imagefilename[BUFFER500])
01252 {
01253
01254 char search_stmt[MAX_BUFF_SIZE];
01255 int ret_val;
01256
01257 MYSQL_RES *result;
01258 MYSQL_ROW sqlrow;
01259
01260 sprintf(search_stmt,"SELECT * FROM contact WHERE contactid = %d",contactid);
01261
01262 ret_val = mysql_query (default_sql_conn, search_stmt);
01263
01264 if (ret_val != 0)
01265 {
01266 printf ("Failed to fetch the record : %s\n", mysql_error (default_sql_conn));
01267 }
01268 else
01269 {
01270 result = mysql_use_result (default_sql_conn);
01271 if(result != NULL)
01272 {
01273 while((sqlrow = mysql_fetch_row (result)))
01274 {
01275 if(atoi(sqlrow[0]) > 0)
01276 {
01277 strcpy(firstname,sqlrow[1]);
01278 strcpy(lastname,sqlrow[2]);
01279 strcpy(mobilenumber,sqlrow[3]);
01280 strcpy(landlinenumber,sqlrow[4]);
01281 strcpy(address,sqlrow[5]);
01282 strcpy(email,sqlrow[6]);
01283 strcpy(imagefilename,sqlrow[7]);
01284 }
01285 }
01286 if(mysql_errno(default_sql_conn))
01287 {
01288 printf ("Error occurred while retrieving records from the database : %s\n", mysql_error (default_sql_conn));
01289 }
01290 }
01291 mysql_free_result(result);
01292 }
01293
01294 }
01295
01308 int ExportContactFromDB(char filename[BUFFER500], char firstname[BUFFER200], char lastname[BUFFER200], char mobilenumber[50], char landlinenumber[50], char address[BUFFER2500],char email[BUFFER200], char imagefilename[BUFFER500])
01309 {
01310
01311 char content[10000], *enc_res_filename = "pdm_encresult", temp[BUFFER5000];
01312 FILE *temp_fp = NULL, *destin_fp = NULL;
01313 int IsEncodeSuccess = -1;
01314
01315 char addr[BUFFER2500];
01316 int i = 0, j= 0, addrlength = 0;
01317
01318 fprintf(stderr,"address %s. \n",address);
01319
01320 destin_fp = fopen(filename,"w");
01321 if(destin_fp == NULL)
01322 {
01323 fprintf(stderr,"Fatal error : Failed to open file %s. \n",filename);
01324 return -1;
01325 }
01326
01327 strcpy(content, "BEGIN:VCARD\nVERSION:3.0\n");
01328
01329
01330 sprintf(temp,"N:%s;%s\n",lastname,firstname);
01331 strcat(content,temp);
01332 sprintf(temp,"FN:%s %s\n",firstname,lastname);
01333 strcat(content,temp);
01334
01335
01336 sprintf(temp,"TEL;X-EVOLUTION-UI-SLOT=1;TYPE=WORK,VOICE:%s\n",mobilenumber);
01337 strcat(content,temp);
01338 sprintf(temp,"TEL;X-EVOLUTION-UI-SLOT=2;TYPE=HOME,VOICE:%s\n",landlinenumber);
01339 strcat(content,temp);
01340
01341
01342
01343 addrlength = strlen(address);
01344
01345 for(j = 0, i = 0; i < addrlength; i++)
01346 {
01347 if(address[i] == '\n')
01348 {
01349 addr[j] = '\\';
01350 j++;
01351 addr[j] = 'n';
01352 j++;
01353 }
01354 else
01355 {
01356 addr[j] = address[i];
01357 j++;
01358 }
01359 }
01360 addr[j] = '\0';
01361
01362 sprintf(temp,"ADR;TYPE=HOME:;;%s\n",addr);
01363 strcat(content,temp);
01364 sprintf(temp,"LABEL;TYPE=HOME:%s\n",addr);
01365 strcat(content,temp);
01366
01367
01368 sprintf(temp,"EMAIL;X-EVOLUTION-UI-SLOT=2;TYPE=HOME:%s\n",email);
01369 strcat(content,temp);
01370
01371
01372 fwrite(content,1,strlen(content),destin_fp);
01373
01374
01375 if(imagefilename != NULL && strlen(imagefilename) > 0)
01376 {
01377 IsEncodeSuccess = EncodeImage(imagefilename);
01378 }
01379
01380
01381 if(IsEncodeSuccess == 1)
01382 {
01383 temp_fp = fopen(enc_res_filename,"r");
01384 if(temp_fp != NULL)
01385 {
01386 strcpy(temp, "PHOTO;TYPE=JPEG;ENCODING=BASE64:\n");
01387 fwrite(temp,1,strlen(temp),destin_fp);
01388 while((fscanf(temp_fp,"%s",temp) != EOF))
01389 {
01390 strcpy(content," ");
01391 strcat(content,temp);
01392 strcat(content,"\n");
01393 fwrite(content,1,strlen(content),destin_fp);
01394 }
01395 }
01396 }
01397
01398
01399 strcpy(temp,"\nEND:VCARD");
01400 fwrite(temp,1,strlen(temp),destin_fp);
01401
01402 fclose(destin_fp);
01403 return 1;
01404
01405 }
01406
01412 int EncodeImage(char imagefilename[BUFFER500])
01413 {
01414
01415 char *enc_res_filename = "pdm_encresult";
01416 int ret_val = -1;
01417 FILE *fp = NULL;
01418
01419 fp = fopen(enc_res_filename,"w");
01420 if(fp == NULL)
01421 {
01422 fprintf(stderr,"Fatal error : Failed to temp file %s. \n",enc_res_filename);
01423 return -1;
01424 }
01425 fclose(fp);
01426
01427 fp = fopen(imagefilename,"r");
01428 if(fp == NULL)
01429 {
01430 fprintf(stderr,"Fatal error : Failed to image file %s. \n",imagefilename);
01431 return -1;
01432 }
01433 fclose(fp);
01434
01435 ret_val = b64('e', imagefilename, enc_res_filename, 64);
01436
01437 if(ret_val != 0)
01438 return -1;
01439 else
01440 return 1;
01441
01442 }
01443
01448 int GetMaxContactID()
01449 {
01450
01451 int ret_value,contactid = -1;
01452 MYSQL_ROW sqlrow;
01453 MYSQL_RES *result;
01454
01455 ret_value = mysql_query (default_sql_conn, "select max(contactid) from contact;");
01456
01457 if (ret_value != 0)
01458 {
01459 printf ("Retrieval of record failed : %s\n", mysql_error (default_sql_conn));
01460 }
01461 else
01462 {
01463 result = mysql_store_result (default_sql_conn);
01464 if(result != NULL)
01465 {
01466 while((sqlrow = mysql_fetch_row (result)))
01467 {
01468 if(sqlrow[0] == NULL)
01469 contactid = 0;
01470 else if(atoi(sqlrow[0]) > 0)
01471 contactid = atoi(sqlrow[0]);
01472 }
01473 if(mysql_errno(default_sql_conn))
01474 {
01475 printf ("Error occurred while retrieving records from the database : %s\n", mysql_error (default_sql_conn));
01476 }
01477 }
01478 mysql_free_result(result);
01479 }
01480
01481 return contactid;
01482
01483 }
01484
01491 int AddTodo(char subject[BUFFER500], char note[BUFFER5000], char duedate[BUFFER])
01492 {
01493
01494 int ret_value,todoid = -1;
01495 char insert_stmt[MAX_BUFF_SIZE], *id = NULL;
01496 MYSQL_ROW sqlrow;
01497 MYSQL_RES *result;
01498
01499 sprintf(insert_stmt, "INSERT into todo values(%d,'%s','%s','%s',CURDATE(),CURDATE());",(int)id, subject, note, duedate);
01500
01501 ret_value = mysql_query (default_sql_conn, insert_stmt);
01502
01503 if (ret_value == 0)
01504 {
01505 printf ("\n todo inserted successfully.\n");
01506
01507
01508
01509 ret_value = mysql_query (default_sql_conn, "select max(todoid) from todo;");
01510
01511 if (ret_value != 0)
01512 {
01513 printf ("Retrieval of record failed : %s\n", mysql_error (default_sql_conn));
01514 }
01515 else
01516 {
01517 result = mysql_use_result (default_sql_conn);
01518 if(result != NULL)
01519 {
01520 while((sqlrow = mysql_fetch_row (result)))
01521 {
01522 if(atoi(sqlrow[0]) > 0)
01523 todoid = atoi(sqlrow[0]);
01524 }
01525 if(mysql_errno(default_sql_conn))
01526 {
01527 printf ("Error occurred while retrieving records from the database : %s\n", mysql_error (default_sql_conn));
01528 }
01529 }
01530 mysql_free_result(result);
01531 return todoid;
01532 }
01533 }
01534 else if(mysql_errno (default_sql_conn) == PRIMARY_KEY_ERROR)
01535 {
01536 fprintf(stderr,"\nCould not insert record. todo-id already exists.");
01537 }
01538 else
01539 {
01540 fprintf (stderr, "\nCould not insert record - Error Number : %d. %s\n", mysql_errno (default_sql_conn), mysql_error (default_sql_conn));
01541 }
01542 return -1;
01543 }
01544
01552 int EditTodo(int todoid, char subject[BUFFER500], char note[BUFFER5000], char duedate[BUFFER])
01553 {
01554
01555 int ret_value;
01556 char update_stmt[MAX_BUFF_SIZE];
01557
01558 sprintf(update_stmt,"UPDATE todo SET subject = '%s',note = '%s',duedate = '%s' where todoid = %d;",subject, note, duedate,todoid);
01559 ret_value = mysql_query (default_sql_conn, update_stmt);
01560
01561 if (ret_value == 0)
01562 {
01563 unsigned long rows_affected = (unsigned long) mysql_affected_rows (default_sql_conn);
01564 if(rows_affected <= 0 )
01565 {
01566 printf ("\nRecord update operation : Id not found in the database. No rows modified. \n" );
01567 return -2;
01568 }
01569 else
01570 {
01571 printf ("\nRecord update operation : %lu row(s) Modified. \n",rows_affected );
01572 return 1;
01573 }
01574 }
01575 else
01576 {
01577 fprintf (stderr, "Record update operation failed : Error Code: %d. %s\n", mysql_errno (default_sql_conn), mysql_error (default_sql_conn));
01578 }
01579
01580 return -1;
01581
01582 }
01583
01588 int DeleteTodo(int todoid)
01589 {
01590
01591 char delete_stmt[MAX_BUFF_SIZE];
01592 int ret_value;
01593
01594 sprintf(delete_stmt, "DELETE FROM todo WHERE todoid = %d", todoid);
01595
01596 ret_value = mysql_query (default_sql_conn, delete_stmt);
01597
01598 if (ret_value == 0)
01599 {
01600 unsigned long rows_affected = (unsigned long) mysql_affected_rows (default_sql_conn);
01601 if(rows_affected <= 0 )
01602 {
01603 printf ("\nRecord delete operation : Id not found in the database. No rows deleted. \n" );
01604 return -2;
01605 }
01606 else
01607 {
01608 printf ("\nRecord delete operation : %lu row deleted. \n",rows_affected );
01609 return 1;
01610 }
01611 }
01612 else
01613 {
01614 fprintf (stderr, "Record delete operation failed : Error Code: %d. %s\n", mysql_errno (default_sql_conn), mysql_error (default_sql_conn));
01615 }
01616
01617 return -1;
01618
01619 }
01620
01628 void GetTodo(int todoid, char subject[BUFFER500], char note[BUFFER5000], char duedate[BUFFER])
01629 {
01630
01631 char search_stmt[MAX_BUFF_SIZE];
01632 int ret_val;
01633
01634 MYSQL_RES *result;
01635 MYSQL_ROW sqlrow;
01636
01637 sprintf(search_stmt,"SELECT * FROM todo WHERE todoid = %d",todoid);
01638
01639 ret_val = mysql_query (default_sql_conn, search_stmt);
01640
01641 if (ret_val != 0)
01642 {
01643 printf ("Failed to fetch the record : %s\n", mysql_error (default_sql_conn));
01644 }
01645 else
01646 {
01647 result = mysql_use_result (default_sql_conn);
01648 if(result != NULL)
01649 {
01650 while((sqlrow = mysql_fetch_row (result)))
01651 {
01652 if(atoi(sqlrow[0]) > 0)
01653 {
01654 strcpy(subject,sqlrow[1]);
01655 strcpy(note,sqlrow[2]);
01656 strcpy(duedate,sqlrow[3]);
01657 }
01658 }
01659 if(mysql_errno(default_sql_conn))
01660 {
01661 printf ("Error occurred while retrieving records from the database : %s\n", mysql_error (default_sql_conn));
01662 }
01663 }
01664 mysql_free_result(result);
01665 }
01666
01667 }
01668
01675 void GetAllTodoInfo(int** todoid, char*** subject, int* count)
01676 {
01677
01678 MYSQL_RES *result = NULL;
01679 MYSQL_ROW sqlrow;
01680 int return_val,index = 0;
01681
01682 int *todo = (*todoid);
01683 char **sub = (*subject);
01684
01685 return_val = mysql_query (default_sql_conn, "select todoid,subject from todo");
01686
01687 if (return_val != 0)
01688 {
01689 printf ("\nListing of records failed : %s\n", mysql_error (default_sql_conn));
01690 }
01691 else
01692 {
01693 result = mysql_store_result (default_sql_conn);
01694 int num_rows = (int)mysql_num_rows(result);
01695 (*count) = num_rows;
01696
01697 todo = (int*)calloc(num_rows,sizeof(int));
01698 sub = (char**)calloc(num_rows,sizeof(char*));
01699
01700 if(result != NULL)
01701 {
01702 while((sqlrow = mysql_fetch_row (result)))
01703 {
01704 sub[index] = (char*)calloc(strlen(sqlrow[1]) + 1,sizeof(char));
01705 todo[index] = atoi(sqlrow[0]);
01706 strcpy(sub[index],sqlrow[1]);
01707 sub[index][strlen(sqlrow[1])] = '\0';
01708 index++;
01709 }
01710 if(mysql_errno(default_sql_conn))
01711 {
01712 printf ("Error occurred while retrieving records from the database : %s\n", mysql_error (default_sql_conn));
01713 }
01714 }
01715 mysql_free_result(result);
01716 }
01717
01718 (*subject) = sub;
01719 (*todoid) = todo;
01720
01721 }