Changeset 6996 for trunk/prototype/modules/calendar
- Timestamp:
- 08/10/12 19:11:37 (12 years ago)
- Location:
- trunk/prototype/modules/calendar
- Files:
-
- 22 edited
- 32 copied
Legend:
- Unmodified
- Added
- Removed
-
trunk/prototype/modules/calendar/constants.php
r6861 r6996 2 2 3 3 define('EVENT_ID', 1); 4 define('TASK_ID', 2); 5 6 define('SIGNATURE_TYPE_NORMAL', 0); 7 define('SIGNATURE_TYPE_DEFAULT', 1); 8 9 define('CALENDAR_TYPE_EVENT', 0); 10 define('CALENDAR_TYPE_TASK_GROUP', 1); 4 11 5 12 define('STATUS_CONFIRMED', 1); … … 50 57 define('CALENDAR_ACL_SHARED', 's'); 51 58 define('CALENDAR_ACL_REQUIRED', 'p'); 59 60 define('PRIORITY_HIGH', 1); 61 define('PRIORITY_NORMAL', 2); 62 define('PRIORITY_LOW', 3); 63 64 define('STATUS_TODO_NEED_ACTION', 1); 65 define('STATUS_TODO_IN_PROGRESS', 2); 66 define('STATUS_TODO_COMPLETED', 3); 67 define('STATUS_TODO_CANCELLED', 4); 52 68 ?> -
trunk/prototype/modules/calendar/css/layout.css
r6944 r6996 217 217 /* -- event details styles -- */ 218 218 219 .new-event-win.active {219 .new-event-win.active, .new-task-win.active { 220 220 width:700px;height:510px;text-align:left; 221 221 } 222 222 223 .new-event-win > .content.ui-tabs.ui-widget-content {223 .new-event-win > .content.ui-tabs.ui-widget-content, .new-task-win > .content.ui-tabs.ui-widget-content { 224 224 border: none; 225 225 } 226 226 227 .new-event-win ul.attendee-permissions-list, li.attendee-permissions-list{text-align: left;} 227 .new-event-win ul.attendee-permissions-list, li.attendee-permissions-list, .new-task-win ul.attendee-permissions-list{text-align: left;} 228 .new-activity-win.active { 229 width:700px;height:510px;text-align:left; 230 } 231 232 .new-activity-win > .content.ui-tabs.ui-widget-content { 233 border: none; 234 } 235 .new-activity-win ul.attendee-permissions-list, li.attendee-permissions-list{text-align: left;} 228 236 229 237 li.attendee-permissions-list input{width: 20px !important; margin: 3px 0 0 0 !important;} … … 234 242 p.request-update label{width: 150px !important;} 235 243 236 .new-event-win .menu-addevent {244 .new-event-win .menu-addevent, .new-task-win .menu-addevent { 237 245 text-align: right; 238 246 } 239 247 240 fieldset.block-add-attendee .add-attendee-search { max-width: 250px; margin: 5px;} 241 fieldset.block-add-attendee .add-attendee-search input { max-width: 220px; width: 220px; padding: 0 0 0 7px;} 242 fieldset.block-add-attendee .search-result-list { width: 255px; max-height: 215px; overflow: auto;} 243 fieldset.block-add-attendee .search-result-list .ui-widget-content { border: none;} 244 fieldset.block-add-attendee .search-result-list .empty { margin-left: 5px; } 248 .new-event-win fieldset.block-add-attendee .add-attendee-search { max-width: 250px; margin: 5px;} 249 .new-task-win fieldset.block-add-attendee .add-attendee-search { max-width: 323px; margin: 5px;} 250 251 .new-event-win fieldset.block-add-attendee .add-attendee-search input { max-width: 220px; width: 220px; padding: 0 0 0 7px;} 252 .new-task-win fieldset.block-add-attendee .add-attendee-search input { max-width: 290px; width: 290px; padding: 0 0 0 7px;} 253 254 .new-activity-win .menu-addevent { text-align: right; } 255 fieldset.block-add-attendee .add-attendee-search, fieldset.block-add-activity .add-activity-search { max-width: 250px; margin: 5px;} 256 fieldset.block-add-attendee .add-attendee-search input, fieldset.block-add-activity .add-activity-search input { max-width: 220px; width: 220px; padding: 0 0 0 7px;} 257 fieldset.block-add-attendee .search-result-list, fieldset.block-add-activity .search-result-list { width: 255px; max-height: 215px; overflow: auto;} 258 fieldset.block-add-attendee .search-result-list .ui-widget-content, fieldset.block-add-activity .search-result-list .ui-widget-content { border: none;} 259 fieldset.block-add-attendee .search-result-list .empty, fieldset.block-add-activity .search-result-list .empty { margin-left: 5px; } 245 260 fieldset.block-add-user .add-user-search {max-width: 235px;} 246 261 fieldset.block-add-user .search-result-list {max-width: 245px;} 247 fieldset.block-add-user .search-result-list .ui-widget-content {/*max-width: 245px;*/} 248 249 .block-attendee-list, .block-add-attendee { float:left;} 262 263 fieldset.block-add-user .search-result-list .ui-widget-content, fieldset.block-add-user .search-result-list .ui-widget-content {max-width: 245px;} 264 265 #calendar_addactivity_details8 .block-attendee-list, #calendar_addactivity_details8 .block-activity-list { width:430px; margin-right: 5px; } 266 267 .block-activity-list, .block-activity-group-select{width: 405px} 268 .block-add-activity.search{width: 298px} 269 270 .block-attendee-list, .block-activity-list, .block-add-activity, .block-activity-group-select { float:left;} 250 271 .block-attendee-list { width:400px; margin-right: 5px; } 251 .block-add-attendee { width:260px; margin-right: 5px; } 252 .block-attendee-list dd, .block-add-attendee dd { border: 1px solid #BFBFBF; } 253 .block-attendee-list dt, .block-add-attendee dt { background-color:#FFF; margin: 5px 0 -6px 5px; font-weight: bold; display: table; position: relative;} 272 .new-event-win .block-add-attendee { width:260px; margin-right: 5px; } 273 .new-task-win .block-add-attendee { width:335px; margin-right: 5px; } 274 .block-attendee-list dd, .block-add-attendee dd, .block-activity-list dd, .block-add-activity dd, .block-activity-group-select dd { border: 1px solid #BFBFBF; } 275 .block-attendee-list dt, .block-add-attendee dt,.block-activity-list dt, .block-add-activity dt, .block-activity-group-select dt { background-color:#FFF; margin: 5px 0 -6px 5px; font-weight: bold; display: table; position: relative; display: table;} 254 276 .block-attendee-list dd.attendee-list { height: 196px; } 255 .block-attendee-list dd.attendee-list ul { max-height: 186px; overflow: auto; margin-top: 10px;} 256 .block-attendee-list dd.attendee-list-add {border-top:none !important; border:1px solid #BFBFBF;} 257 .block-attendee-list dd.attendee-list-add fieldset.add-attendee-input { border:none !important; margin: 0; padding: 0 } 258 .block-attendee-list dd.attendee-list-brief { border:none !important; margin: 5px 0; color:#777; } 259 260 dl.block-add-attendee { 277 .block-attendee-list dd.attendee-list ul, .block-activity-list dd.task-activity-list ul { max-height: 186px; overflow: auto; margin-top: 10px;} 278 .block-attendee-list dd.attendee-list-add, .block-activity-list dd.activity-list-add {border-top:none !important; border:1px solid #BFBFBF;} 279 .block-attendee-list dd.attendee-list-add fieldset.add-attendee-input, .block-activity-list dd.activity-list-add fieldset.add-activity-input { border:none !important; margin: 0; padding: 0 } 280 .block-attendee-list dd.attendee-list-brief, .block-activity-list dd.activity-list-brief { border:none !important; margin: 5px 0; color:#777; } 281 #calendar_addactivity_details8 .block-attendee-list, #calendar_addactivity_details8 .block-activity-list { width:430px; margin-right: 5px; } 282 283 /* Pesquisa de tarefas */ 284 .block-activity-group-select dd.task-activity-list { height: 181px; } 285 .block-activity-group-select dd.group-select { height: 40px; } 286 287 fieldset.block-add-activity ul.search-result-list li{ width: 9999px; } 288 fieldset.block-add-activity ul.search-result-list{width: 290px;} 289 290 fieldset.block-add-activity fieldset.add-activity-search{max-width: 320px; width: 282px} 291 fieldset.block-add-activity fieldset.add-activity-search input{max-width: 260px; width: 245px;} 292 293 .block-activity-group-select dd.group-select select{margin: 12px 8px;} 294 .block-activity-group-select dd.task-activity-list{padding: 10px 5px} 295 296 /** Pesquisa de tarefas **/ 297 298 select.group-addactivity-details-txt-timezone{width: 175px;} 299 300 301 dl.block-add-attendee, dl.block-add-activity { 261 302 float: right; 262 303 display: block; 263 304 } 264 305 265 dl.block-add-attendee dd.add-attendee { 306 dl.block-add-activity dd.add-activity{ 307 width: 295px; 308 min-height: 254px; 309 display: block; 310 } 311 312 .new-event-win dl.block-add-attendee dd.add-attendee{ 266 313 width: 260px; 267 314 min-height: 260px; 268 315 display: block; 269 316 } 317 318 .new-task-win dl.block-add-attendee dd.add-attendee { 319 width: 343px; 320 min-height: 260px; 321 display: block; 322 } 323 324 .new-activity-win dl.block-activity-group-select li.task{overflow: hidden; position: relative;} 325 .new-activity-win dl.block-activity-group-select ul{overflow: hidden;} 326 327 #calendar_addactivity_details8 dl.block-add-attendee dd.add-attendee ,#calendar_addactivity_details8 dl.block-add-activity dd.add-activity { 328 width: 260px; 329 min-height: 292px; 330 display: block; 331 } 332 270 333 271 334 ul.attendees-count {clear:left; float:left;} … … 280 343 .attendees-list .me .add-attendee-options-read { max-height: 16px; height:16px; max-width: 16px; width:16px; display: inline; padding: 0; margin: 0 0 5px 0;} 281 344 282 .attendees-list .me .add-attendee-options-button { position: absolute; top: 171px;}345 .attendees-list .me .add-attendee-options-button {top: 4px;} 283 346 .attendees-list .hover-attendee { background-color: #DFEFFC;} 347 .task-activity-list .hover-activity { background: #DFEFFC;} 284 348 /* 285 349 .attendees-list .attendee-options-button-edit { position: absolute; top:0; right:25px;} … … 288 352 */ 289 353 290 .attendee-options { position: absolute; top: 0; left: 287px; background-color: white; z-index: 100; width: 90px; background-color: #FFF; padding: 0 20px 0 3px; text-align: right;}291 .attendees-list .not-attendee { height:16px; }354 .attendee-options, .activity-options{ position: absolute; top: 0; left: 287px; background-color: white; z-index: 100; width: 90px; background-color: #FFF; padding: 0 20px 0 3px; text-align: right;} 355 .attendees-list .not-attendee, .activitys-list .not-activity { height:16px; } 292 356 293 357 .list-delegates{margin: 0 0 0 25px;} … … 296 360 297 361 .attendees-list .me .add-attendee-search input { max-width: 125px; } 298 .attendees-list li.organizer, .attendees-list li.me-delegated 362 .attendees-list li.organizer, .attendees-list li.me-delegated, .activitys-list li.organizer {margin-bottom: 3px;} 299 363 .attendees-list .organizer .button.swap { 300 364 float: right; … … 338 402 } 339 403 dd.attendee-list ul.attendee-list li label[title=''] { display:none } 404 dd.task-activity-list ul.task-activity-list li { 405 overflow: hidden; 406 position: relative; 407 } 408 409 410 dd.task-activity-list ul.task-activity-list li label.name, 411 dd.task-activity-list ul.task-activity-list li label.mail { 412 width: 99999px; 413 min-width: 99999px; 414 } 415 416 ul.task-activity-list li label.name{display: table-cell;} 417 418 dd.task-activity-list ul.task-activity-list li label[title=''] { display:none } 340 419 /* 341 420 dd.attendee-list ul.attendee-list li .button.close { … … 404 483 /* -- calendar list styles -- */ 405 484 406 .my-calendars .button.new 485 .my-calendars .button.new, .my-groups-task .button.new{ 407 486 float:right; 408 487 width: 15px; … … 410 489 } 411 490 412 .my-calendars .status-list {491 .my-calendars .status-list, .my-groups-task .status-list { 413 492 display: inline-block; 414 493 margin: 0px 0pc -4px -5px; … … 416 495 } 417 496 418 .my-calendars .list-calendars-item, .signed-calendars .list-calendars-item {497 .my-calendars .list-calendars-item, .signed-calendars .list-calendars-item, .my-groups-task .list-calendars-item{ 419 498 position: relative; 420 499 overflow: hidden; 421 500 } 422 .my-calendars .list-calendars-item div, .signed-calendars .list-calendars-item div {501 .my-calendars .list-calendars-item div, .signed-calendars .list-calendars-item div, .my-groups-task .list-calendars-item div{ 423 502 overflow:hidden; 424 503 width:6000px; … … 426 505 } 427 506 428 .my-calendars .cal-list-options-btn, .signed-calendars .cal-list-options-btn {507 .my-calendars .cal-list-options-btn, .signed-calendars .cal-list-options-btn, .my-groups-task .cal-list-options-btn { 429 508 position: absolute; 430 509 top: 2px; … … 714 793 715 794 .button.add.button-add-attachment{margin: -9px 0 0 8px;} 716 .button.btn-danger.delete{margin: 0 0 0 0;} 795 .button.btn-success.fileinput-button{width: 85px;} 796 .button.btn-danger.delete{margin: 0 0 0 0; min-width: 143px;} 717 797 718 798 .button.upload{top: 4px;} … … 729 809 .lbl-archive-nome{width:40px !important;} 730 810 .row.fileupload-buttonbar{margin-top: -14px; padding: 0.2em 0.7em;} 811 .row.fileupload-buttonbar-task{margin-top: 0; padding: 0.2em 0.7em;} 731 812 732 813 .archive-nome{width: 73px;} … … 745 826 /* -- alarm dysplay -- */ 746 827 747 .new-event-alarm {828 .new-event-alarm, .new-task-alarm{ 748 829 margin: 5px; 749 830 font: bold; 750 831 } 751 832 752 .title-event-alarm {833 .title-event-alarm, .title-task-alarm{ 753 834 margin: 5px; 754 835 } 755 836 756 .description-event-alarm {837 .description-event-alarm, .description-task-alarm{ 757 838 margin: 5px; 758 839 } 759 840 760 .inicialize-event-alarm {841 .inicialize-event-alarm, .inicialize-task-alarm{ 761 842 margin: 5px; 762 843 } … … 861 942 .ui-dialog .ui-button-text-only .ui-button-text { padding: 0.4em 1em; } 862 943 863 .new-event-win fieldset { border: none; margin: 0; padding: 0; } 864 .new-event-win fieldset.tab-level2 { padding: 0px 5px; } 865 .new-event-win fieldset fieldset, .new-event-win fieldset.tab-level2 fieldset { padding: 5px 0; } 944 .new-event-win fieldset, .new-task-win fieldset { border: none; margin: 0; padding: 0; } 945 .new-event-win fieldset.tab-level2, .new-task-win fieldset.tab-level2 { padding: 0px 5px; } 946 .new-event-win fieldset fieldset, .new-task-win fieldset.tab-level2 fieldset, 947 .new-task-win fieldset fieldset, .new-task-win fieldset.tab-level2 fieldset{ padding: 5px 0; } 948 949 .new-activity-win fieldset { border: none; margin: 0; padding: 0; } 950 .new-activity-win fieldset.tab-level2 { padding: 0px 5px; } 951 .new-activity-win fieldset fieldset, .new-activity-win fieldset.tab-level2 fieldset { padding: 5px 0; } 866 952 867 953 .hidden { … … 904 990 } 905 991 992 .new-event-win form.form-addevent { padding: 9px; } 993 994 .new-activity-win div.div-addtask { padding: 0; width: 774px; border: 0;} 995 .new-activity-win div.div-addactivity { padding: 0; width: 734px; border: 0;} 996 .new-activity-win form.form-addevent { padding: 9px; } 906 997 .ui-dialog .ui-dialog-content { padding: 0; } 907 .new-event-win div.div-addevent { padding: 0; width: 700px; border: 0;} 908 .new-event-win form.form-addevent { padding: 9px; } 998 .new-event-win div.div-addevent{ padding: 0; width: 700px; border: 0;} 999 .new-task-win div.div-addtask { padding: 0; width: 774px; border: 0;} 1000 .new-event-win form.form-addevent, .new-task-win form.form-addtask { padding: 9px; } 1001 .new-activity-win div.div-addevent { padding: 0; width: 700px; border: 0;} 1002 .new-activity-win form.form-addevent { padding: 9px; } 909 1003 910 1004 .expresso-calendar-container input[type="text"] { height: 18px; } … … 929 1023 930 1024 .expresso-calendar-container input.h1, 931 .new-event-win input.h1 {1025 .new-event-win input.h1, .new-task-win input.h1, .new-activity-win input.h1 { 932 1026 font-size: 150%; 933 1027 font-weight: bold; … … 936 1030 } 937 1031 938 .new-event-win textarea {1032 .new-event-win textarea, .new-task-win textarea, .new-activity-win textarea { 939 1033 width:600px; 940 1034 height: 210px; … … 945 1039 span.input-group { display: block; } 946 1040 /*p.input-group label { vertical-align: top; }*/ 947 .new-event-win p.input-group label { display: inline-block; width: 65px;} 948 .new-event-win p.input-group label.input-group { display: inline-block; width: 110px; font-weight: bold;} 1041 .new-event-win p.input-group label, .new-task-win p.input-group label { display: inline-block; width: 65px;} 1042 .new-event-win p.input-group label.input-group, .new-task-win p.input-group label.input-group { display: inline-block; width: 110px; font-weight: bold;} 1043 .new-activity-win p.input-group label { display: inline-block; width: 65px;} 1044 .new-activity-win p.input-group label.input-group { display: inline-block; width: 110px; font-weight: bold;} 949 1045 950 1046 input.number {text-align: right} … … 966 1062 .new-event-win fieldset.event-repeat-container label, 967 1063 .new-event-win p.input-group.event-repeat-weekly label, 968 .new-event-win p.input-group.event-repeat-monthly label { 1064 .new-event-win p.input-group.event-repeat-monthly label, 1065 .new-task-win fieldset.task-repeat-container label, 1066 .new-task-win p.input-group.task-repeat-weekly label, 1067 .new-task-win p.input-group.task-repeat-monthly label 1068 { 969 1069 width: auto; 970 1070 } … … 973 1073 .new-event-win fieldset.search-field, 974 1074 .new-event-win fieldset.block-add-attendee-permissions, 975 .new-event-win fieldset.block-attendee-list { 1075 .new-event-win fieldset.block-attendee-list, 1076 .new-task-win fieldset.input-field-rounded, 1077 .new-task-win fieldset.search-field, 1078 .new-task-win fieldset.block-add-attendee-permissions, 1079 .new-task-win fieldset.block-attendee-list 1080 { 976 1081 border:1px solid #CFCFCF; 977 1082 } 978 1083 979 .new-event-win fieldset.block-attendee-list { width: 300px; max-height:180px; padding: 5px; float: left;} 980 .new-event-win fieldset.block-attendee-list ul { height:160px; overflow: auto;} 1084 .new-event-win fieldset.block-attendee-list, .new-task-win fieldset.block-attendee-list { width: 300px; max-height:180px; padding: 5px; float: left;} 1085 .new-event-win fieldset.block-attendee-list ul, .new-task-win fieldset.block-attendee-list ul { height:160px; overflow: auto;} 1086 /**/ 1087 .new-activity-win fieldset.event-repeat-container label, 1088 .new-activity-win p.input-group.event-repeat-weekly label, 1089 .new-activity-win p.input-group.event-repeat-monthly label { 1090 width: auto; 1091 } 1092 1093 .new-activity-win fieldset.input-field-rounded, 1094 .new-activity-win fieldset.search-field, 1095 .new-activity-win fieldset.block-add-attendee-permissions, 1096 .new-activity-win fieldset.block-attendee-list { 1097 border:1px solid #CFCFCF; 1098 } 1099 1100 .new-activity-win fieldset.block-attendee-list { width: 300px; max-height:180px; padding: 5px; float: left;} 1101 .new-activity-win fieldset.block-attendee-list ul { height:160px; overflow: auto;} 981 1102 982 1103 … … 1148 1269 } 1149 1270 1150 .events-list-win table img {1151 width: 12px;1152 height: 12px;1153 padding: 0 2px;1154 }1155 1271 1156 1272 .events-list-win table span { font-size:12px; } -
trunk/prototype/modules/calendar/css/style.css
r6921 r6996 45 45 .ui-dialog .ui-button-text-only .ui-button-text { padding: 0.4em 1em; } 46 46 47 .new-event-win fieldset { border: none; margin: 0; padding: 0; } 48 .new-event-win fieldset.tab-level2 { padding: 0px 5px; min-height: 310px; max-height: 310px; overflow: auto;} 49 .new-event-win .overflow_add_calender { overflow: auto; max-height: 320px; } 50 .new-event-win fieldset#calendar_addevent_details7 { overflow: hidden} 51 .new-event-win fieldset#calendar_addevent_details5 .button-files-upload{margin: 15px 0 0 0} 52 .new-event-win fieldset fieldset, .new-event-win fieldset.tab-level2 fieldset { padding: 5px 0; } 47 .new-event-win fieldset, .new-task-win fieldset { border: none; margin: 0; padding: 0; } 48 .new-event-win fieldset.tab-level2, .new-task-win fieldset.tab-level2 { padding: 0px 5px; min-height: 110px; max-height: 310px; overflow: hidden;} 49 .new-event-win .overflow_add_calender, .new-task-win .overflow_add_calender { overflow: auto; max-height: 320px; } 50 .new-event-win fieldset#calendar_addevent_details7, .new-task-win fieldset#calendar_addevent_details7 { overflow: hidden} 51 .new-event-win fieldset#calendar_addevent_details5 .button-files-upload, .new-task-win fieldset#calendar_addevent_details5 .button-files-upload{margin: 15px 0 0 0} 52 .new-event-win fieldset fieldset, .new-event-win fieldset.tab-level2 fieldset, .new-task-win fieldset fieldset, .new-event-win fieldset.tab-level2 fieldset { padding: 5px 0; } 53 54 .new-activity-win fieldset { border: none; margin: 0; padding: 0; } 55 .new-activity-win fieldset.tab-level2 { padding: 0px 5px; min-height: 250px; max-height: 310px; overflow: auto;} 56 57 .new-activity-win .overflow_add_calender { overflow: auto; max-height: 320px; } 58 .new-activity-win fieldset#calendar_addevent_details7 { overflow: hidden} 59 .new-activity-win fieldset#calendar_addevent_details5 .button-files-upload{margin: 15px 0 0 0} 60 .new-activity-win fieldset fieldset, .new-activity-win fieldset.tab-level2 fieldset { padding: 5px 0; } 53 61 54 62 .hidden { … … 92 100 93 101 .ui-dialog .ui-dialog-content { padding: 0; } 94 .new-event-win div.div-addevent { padding: 0; width: 700px; border: 0;} 95 .new-event-win form.form-addevent { padding: 9px; } 102 .new-event-win div.div-addevent{ padding: 0; width: 700px; border: 0;} 103 .new-task-win div.div-addtask { padding: 0; width: 774px; border: 0;} 104 105 .new-event-win form.form-addevent, 106 .new-task-win form.form-addtask, 107 .new-activity-win form.form-addactivity { padding: 9px; } 108 109 .new-activity-win input.time{width: 45px;} 110 .new-activity-win input.date{width: 80px;} 111 112 .new-activity-win div.div-addactivity { padding: 0; width: 734px; border: 0;} 113 .new-activity-win form.form-addactivity { padding: 9px; } 96 114 97 115 .expresso-calendar-container input[type="text"] { height: 18px; } … … 116 134 117 135 .expresso-calendar-container input.h1, 118 .new-event-win input.h1 { 136 .new-event-win input.h1, 137 .new-task-win input.h1{ 119 138 font-size: 150%; 120 139 font-weight: bold; … … 122 141 height: 150%; 123 142 } 124 125 .new-event-win textarea { 143 .new-activity-win input.h1 { 144 font-size: 150%; 145 font-weight: bold; 146 width: 100%; 147 height: 150%; 148 } 149 150 .expresso-calendar-container input.h1, 151 .new-task-win input.h1 { 152 font-size: 150%; 153 font-weight: bold; 154 width: 64%; 155 height: 150%; 156 } 157 158 .new-event-win textarea, .new-task-win textarea { 126 159 width:600px; 127 160 height: 210px; … … 130 163 } 131 164 165 .new-activity-win textarea { 166 width:600px; 167 height: 210px; 168 border: 1px solid #CFCFCF; 169 padding: 0px; 170 } 132 171 span.input-group { display: block; } 133 172 /*p.input-group label { vertical-align: top; }*/ 134 .new-event-win p.input-group label { display: inline-block; width: 65px;} 135 .new-event-win p.input-group label.input-group { display: inline-block; width: 110px; font-weight: bold;} 173 .new-event-win p.input-group label, .new-task-win p.input-group label { display: inline-block; width: 65px;} 174 .new-event-win p.input-group label.input-group, .new-task-win p.input-group label.input-group { display: inline-block; width: 110px; font-weight: bold;} 175 .new-activity-win p.input-group label { display: inline-block; width: 65px;} 176 .new-activity-win p.input-group label.input-group { display: inline-block; width: 110px; font-weight: bold;} 136 177 137 178 input.number {text-align: right} … … 153 194 .new-event-win fieldset.event-repeat-container label, 154 195 .new-event-win p.input-group.event-repeat-weekly label, 155 .new-event-win p.input-group.event-repeat-monthly label { 196 .new-event-win p.input-group.event-repeat-monthly label, 197 .new-task-win fieldset.task-repeat-container label, 198 .new-task-win p.input-group.task-repeat-weekly label, 199 .new-task-win p.input-group.task-repeat-monthly label 200 { 156 201 width: auto; 202 } 203 204 .new-activity-win fieldset.event-repeat-container label, 205 .new-activity-win p.input-group.event-repeat-weekly label, 206 .new-activity-win p.input-group.event-repeat-monthly label { 207 width: auto; 157 208 } 158 209 … … 160 211 .new-event-win fieldset.search-field, 161 212 .new-event-win fieldset.block-add-attendee-permissions, 162 .new-event-win fieldset.block-attendee-list { 213 .new-event-win fieldset.block-attendee-list, 214 .new-task-win fieldset.input-field-rounded, 215 .new-task-win fieldset.search-field, 216 .new-task-win fieldset.block-add-attendee-permissions, 217 .new-task-win fieldset.block-attendee-list{ 163 218 border:1px solid #CFCFCF; 164 219 } 165 220 221 .new-event-win fieldset.block-attendee-list, .new-task-win fieldset.block-attendee-list { width: 300px; max-height:180px; padding: 5px; float: left;} 222 .new-event-win fieldset.block-attendee-list ul, .new-task-win fieldset.block-attendee-list ul { height:160px; overflow: auto;} 223 224 .new-activity-win fieldset.input-field-rounded, 225 .new-activity-win fieldset.search-field, 226 .new-activity-win fieldset.block-add-attendee-permissions, 227 .new-activity-win fieldset.block-attendee-list { 228 border:1px solid #CFCFCF; 229 } 230 /*Duvida*/ 166 231 .new-event-win fieldset.block-attendee-list { width: 300px; max-height:180px; padding: 5px; float: left;} 167 232 .new-event-win fieldset.block-attendee-list ul { height:160px; overflow: auto;} 233 234 .new-activity-win fieldset.block-attendee-list { width: 300px; max-height:180px; padding: 5px; float: left;} 235 .new-activity-win fieldset.block-attendee-list ul { height:160px; overflow: auto;} 168 236 169 237 … … 223 291 .block-vertical-toolbox .button.add { 224 292 width:190px; 225 } 293 margin-bottom: 5px; 294 } 295 296 div.qtip div.add-simple-task input{width: 188px} 297 div.qtip div.add-simple-task textarea{width: 184px} 298 226 299 227 300 .fc-header .fc-state-active, .fc-header .ui-state-active { … … 335 408 } 336 409 337 .events-list-win table img {338 width: 12px;339 height: 12px;340 padding: 0 2px;341 }342 343 410 .events-list-win table span { font-size:12px; } 344 411 .events-list-win table .same-start-date * { border: 0; } … … 348 415 .events-list-win table th.start-date-multiple-events { border-bottom: 1px solid #ccc; } 349 416 417 .events-list-win .fc-header-right.list-right{width: 26%} 418 350 419 .events-list-win table .title { 351 420 font-size: 150%; … … 361 430 .expresso-calendar-container .search-field input { border:none;} 362 431 363 .ui-tabs .ui-tabs-panel { padding: 0; margin-top: 1 0px;}432 .ui-tabs .ui-tabs-panel { padding: 0; margin-top: 11px;} 364 433 365 434 .ui-tabs .ui-tabs-nav li .ui-icon-close { … … 459 528 460 529 input.inputNumber {width:80px; text-align: left;} 530 531 .div-addtask #calendar_addtask_details1 .h1{ 532 width: 100%; 533 } 534 535 .div-addtask #calendar_addtask_details2 textarea { 536 width: 670px; 537 } 538 539 .div-addtask{ 540 width: 760px; 541 } 542 543 .calendar-addevent-details-txt-timezone, .calendar-addtask-details-txt-timezone{width: 217px;} 544 545 .div-addtask #calendar_addtask_details1 .time-previsao { width: 40px; } 546 547 .div-addtask #calendar_addtask_details1 .date-previsao{ width: 80px; } 548 549 .div-addtask #calendar_addtask_details1 .start-time{ width: 40px; } 550 .div-addtask #calendar_addtask_details1 .start-date{ width: 80px; } 551 .div-addtask #calendar_addtask_details1 .end-time{ width: 40px; } 552 .div-addtask #calendar_addtask_details1 .end-date{ width: 80px; } 553 .div-addtask #calendar_addtask_details1 .previsao-termino { margin: 0 0 0 30px; } 554 .div-addtask #calendar_addtask_details1 .subitem { margin: 5px; display: block;} 555 .div-addtask #calendar_addtask_details1 .subitem .span_done{ margin: 0 30px;} 556 .div-addtask #calendar_addtask_details1 .subitem .span_done img{position: relative; top:4px; width:16px; height:16px;} 557 .div-addtask #calendar_addtask_details1 .calendar_addevent_details_lnk_timezone { margin: 0 0 0 20px;} 558 .div-addtask #calendar_addtask_details1 .subitem .done { width: 45px;} 559 560 @-moz-document url-prefix() {.div-addtask #calendar_addtask_details1 .ui-spinner-buttons{ top: -14px !important;}} 561 562 @media screen and (-webkit-min-device-pixel-ratio:0){.div-addtask #calendar_addtask_details1 .ui-spinner-buttons{ top: -2px !important;}} 563 564 .div-addtask #calendar_addtask_details1 .ui-spinner-buttons .ui-spinner-up{height: 7px !important;} 565 .div-addtask #calendar_addtask_details1 .ui-spinner-buttons .ui-spinner-down{height: 8px !important;} 566 567 .div-addtask #calendar_addtask_details1 .subitem .span_done.noAction{background-image: url("../img/gray.png"); background-repeat: no-repeat; } 568 .div-addtask #calendar_addtask_details1 .subitem .span_done.inProcess{background-image: url("../img/yellow.png"); background-repeat: no-repeat;} 569 .div-addtask #calendar_addtask_details1 .subitem .span_done.finished{background-image: url("../img/green.png"); background-repeat: no-repeat;} 570 .div-addtask #calendar_addtask_details1 .subitem .span_done.canceled{background-image: url("../img/red.png"); background-repeat: no-repeat;} 571 .div-addtask #calendar_addtask_details1 .subitem .span_done label{position: relative; left: 28px;} 572 573 .div-addtask fieldset#calendar_addtask_details5.tab-level2{margin: 0} 574 575 .div-addtask #calendar_addtask_details8 .parent {width: 746px; min-height: 208px; float: left;} 576 /*.div-addtask #calendar_addtask_details8 .parent .child-top {width: 745px; height: 20px; background: #E8F4FD; border-left: 1px solid #CCC; border-right: 1px solid #CCC; border-bottom: 1px solid #CCC;}*/ 577 .div-addtask #calendar_addtask_details8 .parent .child-top {width: 745px; height: 25px; background: #E8F4FD; border-left: 1px solid #CCC; border-right: 1px solid #CCC; border-bottom: 1px solid #CCC; border-top: 1px solid #CCC;} 578 .div-addtask #calendar_addtask_details8 .parent .child-bottom {width: 745px; height: 208px; overflow: auto; float: left; border-left: 1px solid #CCC; border-right: 1px solid #CCC; border-bottom: 1px solid #CCC;} 579 .div-addtask #calendar_addtask_details8 .parent .child-bottom .child-bottom-each { height: 20px; } 580 .div-addtask #calendar_addtask_details8 .parent .child-bottom .child-bottom-each:hover { background: #FFF2F2; cursor: pointer;} 581 582 .div-addtask #calendar_addtask_details8 .parent .child-bottom .child-bottom-each .date-hour {overflow: hidden; width: 140px; float: left; height: 20px} 583 .div-addtask #calendar_addtask_details8 .parent .child-bottom .child-bottom-each .date-hour span { margin: 8px; float: left; } 584 .div-addtask #calendar_addtask_details8 .parent .child-bottom .child-bottom-each .user{overflow: hidden; width: 150px; float: left; height: 20px; border-left: 1px solid #CCC; } 585 .div-addtask #calendar_addtask_details8 .parent .child-bottom .child-bottom-each .user span{ margin: 8px; float: left; } 586 .div-addtask #calendar_addtask_details8 .parent .child-bottom .child-bottom-each .attribute{overflow: hidden; width: 130px; float: left; height: 20px; border-left: 1px solid #CCC; } 587 .div-addtask #calendar_addtask_details8 .parent .child-bottom .child-bottom-each .attribute span{ margin: 8px; float: left; } 588 .div-addtask #calendar_addtask_details8 .parent .child-bottom .child-bottom-each .beforeValue{overflow: hidden; width: 150px; float: left; height: 20px; border-left: 1px solid #CCC; } 589 .div-addtask #calendar_addtask_details8 .parent .child-bottom .child-bottom-each .beforeValue span{ margin: 8px; float: left; } 590 .div-addtask #calendar_addtask_details8 .parent .child-bottom .child-bottom-each .afterValue{overflow: hidden; width: 150px; float: left; height: 20px; border-left: 1px solid #CCC; } 591 .div-addtask #calendar_addtask_details8 .parent .child-bottom .child-bottom-each .afterValue span{ margin: 8px; float: left; } 592 593 .div-addtask #calendar_addtask_details8 .parent .child-top .date-hour { width: 140px; float: left; background: #E8F4FD; height: 20px; text-align: center; } 594 .div-addtask #calendar_addtask_details8 .parent .child-top .date-hour span{ display: block; padding: 6px; font-weight: bold; color: #2E6E9E; } 595 .div-addtask #calendar_addtask_details8 .parent .child-top .user { width: 150px; float: left; background: #E8F4FD; height: 20px; font-weight: bold; color: #2E6E9E; text-align: center;} 596 .div-addtask #calendar_addtask_details8 .parent .child-top .user span{display: block; padding: 6px;} 597 .div-addtask #calendar_addtask_details8 .parent .child-top .attribute { width: 130px; float: left; background: #E8F4FD; height: 20px; font-weight: bold; color: #2E6E9E; text-align: center;} 598 .div-addtask #calendar_addtask_details8 .parent .child-top .attribute span{display: block; padding: 6px;} 599 .div-addtask #calendar_addtask_details8 .parent .child-top .beforeValue { width: 150px; float: left; background: #E8F4FD; height: 20px; font-weight: bold; color: #2E6E9E; text-align: center;} 600 .div-addtask #calendar_addtask_details8 .parent .child-top .beforeValue span{display: block; padding: 6px; } 601 .div-addtask #calendar_addtask_details8 .parent .child-top .afterValue { width: 150px; float: left; background: #E8F4FD; height: 20px; font-weight: bold; color: #2E6E9E; text-align: center;} 602 .div-addtask #calendar_addtask_details8 .parent .child-top .afterValue span{display: block; padding: 6px; } 603 604 /*Atividades*/ 605 606 .div-addactivity{ width: 734px;} 607 .div-addactivity #group_addactivity_details1 .h1{ width: 100%;} 608 .div-addactivity #group_addactivity_details2 textarea { width: 635px; } 609 .div-addactivity #group_addactivity_details1 .time-due { width: 40px; } 610 .div-addactivity #group_addactivity_details1 .date-due{ width: 80px; } 611 612 .div-addactivity #group_addactivity_details1 .start-time{ width: 40px; } 613 .div-addactivity #group_addactivity_details1 .start-date{ width: 80px; } 614 .div-addactivity #group_addactivity_details1 .end-time{ width: 40px; } 615 .div-addactivity #group_addactivity_details1 .end-date{ width: 80px; } 616 .div-addactivity #group_addactivity_details1 .previsao-termino { margin: 0 0 0 30px; } 617 .div-addactivity #group_addactivity_details1 .subitem { margin: 5px; display: block;} 618 .div-addactivity #group_addactivity_details1 .subitem .span_done{ margin: 0 30px;} 619 .div-addactivity #group_addactivity_details1 .calendar_addevent_details_lnk_timezone { margin: 0 0 0 20px;} 620 .div-addactivity #group_addactivity_details1 .subitem .done { width: 45px;} 621 622 .div-addactivity #group_addactivity_details1 .subitem .span_done.noAction{background-image: url("../img/gray.png"); background-repeat: no-repeat; } 623 .div-addactivity #group_addactivity_details1 .subitem .span_done.inProcess{background-image: url("../img/yellow.png"); background-repeat: no-repeat;} 624 .div-addactivity #group_addactivity_details1 .subitem .span_done.finished{background-image: url("../img/green.png"); background-repeat: no-repeat;} 625 .div-addactivity #group_addactivity_details1 .subitem .span_done.canceled{background-image: url("../img/red.png"); background-repeat: no-repeat;} 626 .div-addactivity #group_addactivity_details1 .subitem .span_done label{position: relative; left: 28px;} 627 628 .div-addactivity #group_addactivity_details5.tab-level2{margin-top: 2px;} 629 .div-addactivity #group_addactivity_details5 .button-files-upload { margin: 0 0 0 5px; } 630 631 /**********************************************************************************************************/ 632 .div-addactivity #group_addactivity_details6 .parent {width: 695px; min-height: 208px; float: left;} 633 /*.div-addactivity #group_addactivity_details6 .parent .child-top {width: 745px; height: 20px; background: #E8F4FD; border-left: 1px solid #CCC; border-right: 1px solid #CCC; border-bottom: 1px solid #CCC;}*/ 634 .div-addactivity #group_addactivity_details6 .parent .child-top {width: 695px; height: 25px; background: #E8F4FD; border-left: 1px solid #CCC; border-right: 1px solid #CCC; border-bottom: 1px solid #CCC; border-top: 1px solid #CCC;} 635 .div-addactivity #group_addactivity_details6 .parent .child-bottom {width: 695px; height: 208px; overflow: auto; float: left; border-left: 1px solid #CCC; border-right: 1px solid #CCC; border-bottom: 1px solid #CCC;} 636 .div-addactivity #group_addactivity_details6 .parent .child-bottom .child-bottom-each { height: 20px; } 637 .div-addactivity #group_addactivity_details6 .parent .child-bottom .child-bottom-each:hover { background: #FFF2F2; cursor: pointer;} 638 639 .div-addactivity #group_addactivity_details6 .parent .child-bottom .task { height: 25px; text-align: center; background: #FEFEAD; border-bottom: 1px solid #CCC;} 640 .div-addactivity #group_addactivity_details6 .parent .child-bottom .task.left {border-top: 1px solid #CCC;} 641 .div-addactivity #group_addactivity_details6 .parent .child-bottom .task span{padding: 5px; display: block;} 642 643 .div-addactivity #group_addactivity_details6 .parent .child-bottom .child-bottom-each .date-hour {overflow: hidden; width: 140px; float: left; height: 20px} 644 .div-addactivity #group_addactivity_details6 .parent .child-bottom .child-bottom-each .date-hour span { margin: 8px; float: left; } 645 .div-addactivity #group_addactivity_details6 .parent .child-bottom .child-bottom-each .user{overflow: hidden; width: 145px; float: left; height: 20px; border-left: 1px solid #CCC; } 646 .div-addactivity #group_addactivity_details6 .parent .child-bottom .child-bottom-each .user span{ margin: 8px; float: left; } 647 .div-addactivity #group_addactivity_details6 .parent .child-bottom .child-bottom-each .attribute{overflow: hidden; width: 130px; float: left; height: 20px; border-left: 1px solid #CCC; } 648 .div-addactivity #group_addactivity_details6 .parent .child-bottom .child-bottom-each .attribute span{ margin: 8px; float: left; } 649 .div-addactivity #group_addactivity_details6 .parent .child-bottom .child-bottom-each .beforeValue{overflow: hidden; width: 130px; float: left; height: 20px; border-left: 1px solid #CCC; } 650 .div-addactivity #group_addactivity_details6 .parent .child-bottom .child-bottom-each .beforeValue span{ margin: 8px; float: left; } 651 .div-addactivity #group_addactivity_details6 .parent .child-bottom .child-bottom-each .afterValue{overflow: hidden; width: 129px; float: left; height: 20px; border-left: 1px solid #CCC; } 652 .div-addactivity #group_addactivity_details6 .parent .child-bottom .child-bottom-each .afterValue span{ margin: 8px; float: left; } 653 654 .div-addactivity #group_addactivity_details6 .parent .child-top .date-hour { width: 140px; float: left; background: #E8F4FD; height: 20px; text-align: center; } 655 .div-addactivity #group_addactivity_details6 .parent .child-top .date-hour span{ display: block; padding: 6px; font-weight: bold; color: #2E6E9E; } 656 .div-addactivity #group_addactivity_details6 .parent .child-top .user { width: 145px; float: left; background: #E8F4FD; height: 20px; font-weight: bold; color: #2E6E9E; text-align: center;} 657 .div-addactivity #group_addactivity_details6 .parent .child-top .user span{display: block; padding: 6px; } 658 .div-addactivity #group_addactivity_details6 .parent .child-top .attribute { width: 130px; float: left; background: #E8F4FD; height: 20px; font-weight: bold; color: #2E6E9E; text-align: center;} 659 .div-addactivity #group_addactivity_details6 .parent .child-top .attribute span{display: block; padding: 6px; } 660 .div-addactivity #group_addactivity_details6 .parent .child-top .beforeValue { width: 130px; float: left; background: #E8F4FD; height: 20px; font-weight: bold; color: #2E6E9E; text-align: center;} 661 .div-addactivity #group_addactivity_details6 .parent .child-top .beforeValue span{display: block; padding: 6px; } 662 .div-addactivity #group_addactivity_details6 .parent .child-top .afterValue { width: 129px; float: left; background: #E8F4FD; height: 20px; font-weight: bold; color: #2E6E9E; text-align: center;} 663 .div-addactivity #group_addactivity_details6 .parent .child-top .afterValue span{display: block; padding: 6px; } -
trunk/prototype/modules/calendar/export.php
r5863 r6996 46 46 { 47 47 $event = Controller::read(array('concept' => 'schedulable' , 'id' => $params['event'])); 48 49 50 51 52 53 54 55 56 48 $attachmentRelation = Controller::find( array( 'concept' => 'schedulableToAttachment' ) , false ,array( 'filter' => array('=', 'schedulable' , $event['id']) )); 49 if(is_array($attachmentRelation)){ 50 $attachments = array(); 51 foreach($attachmentRelation as $key => $value) 52 if(isset($value['attachment']) || !!$value['attachment']) 53 $attachments[$key] = $value['attachment']; 54 //Pega os anexos sem source 55 $event['attachments'] = Controller::find( array( 'concept' => 'attachment' ) , false ,array( 'filter' => array('IN', 'id' , $attachments) )); 56 } 57 57 58 58 $repeat = Controller::find( array( 'concept' => 'repeat' ) , false ,array( 'filter' => array('=', 'schedulable' , $event['id']) )); -
trunk/prototype/modules/calendar/interceptors/DBMapping.php
r6849 r6996 10 10 class DBMapping extends Helpers { 11 11 12 static function encodeCreateSchedulable(&$uri, &$params, &$criteria, $original) { 13 $params['type_id'] = EVENT_ID; 14 15 if (!is_numeric($params['startTime'])) 16 $params['startTime'] = self::parseTimeDate($params['startTime'], $params['timezone']); 17 18 if (!is_numeric($params['endTime'])) { 19 $params['endTime'] = self::parseTimeDate($params['endTime'], $params['timezone']); 20 21 if ($params['allDay']) 22 $params['endTime'] = $params['endTime'] + 86400000; 23 } 24 25 $params['rangeEnd'] = $params['endTime']; 26 $params['rangeStart'] = $params['startTime']; 27 28 /////////////////////////////////////////////////////////////////// 29 30 $params['dtstamp'] = (isset($params['dtstamp'])) ? $params['dtstamp'] : time() . '000'; 31 $params['lastUpdate'] = (isset($params['lastUpdate'])) ? $params['lastUpdate'] : time() . '000'; 32 $params['type'] = EVENT_ID; 33 $params['uid'] = isset($params['uid']) ? $params['uid'] : self::_makeUid(); 34 } 12 static function encodeCreateSchedulable(&$uri, &$params, &$criteria, $original) 13 { 14 15 if (isset($params['startTime']) && !is_numeric($params['startTime'])){ 16 $params['startTime'] = self::parseTimeDate($params['startTime'], $params['timezone']); 17 $params['rangeStart'] = $params['startTime']; 18 } 19 if (isset($params['endTime']) && !is_numeric($params['endTime'])) { 20 $params['endTime'] = self::parseTimeDate($params['endTime'], $params['timezone']); 21 22 if ($params['allDay']) 23 $params['endTime'] = $params['endTime'] + 86400000; 24 25 $params['rangeEnd'] = $params['endTime']; 26 } 27 28 if (isset($params['due']) && $params['due'] != '' && !is_numeric($params['due'])) 29 $params['due'] = self::parseTimeDate($params['due'], $params['timezone']); 30 31 /////////////////////////////////////////////////////////////////// 32 33 $params['dtstamp'] = (isset($params['dtstamp'])) ? $params['dtstamp'] : time() . '000'; 34 $params['lastUpdate'] = (isset($params['lastUpdate'])) ? $params['lastUpdate'] : time() . '000'; 35 $params['uid'] = isset($params['uid']) ? $params['uid'] : self::_makeUid(); 36 } 35 37 36 38 static function parseTimeDate($time, $timezone) { … … 66 68 if (isset($params['type'])) 67 69 $params['type'] = self::codeAlarmType($params['type']); 70 else{ 71 $alarm = Controller::read( array('concept' => 'alarm' , 'id' => $params['id'] )); 72 73 $params['unit'] = $alarm['unit']; 74 } 75 $params['offset'] = $params['time'] * 1000; 76 77 78 switch( strtolower($params['unit']) ) 79 { 80 case 'd': $params['offset'] *= 24; 81 case 'h': $params['offset'] *= 60; 82 case 'm': $params['offset'] *= 60; 83 } 84 68 85 } 69 86 … … 119 136 .'calendar_object.dtstart as "startTime", calendar_object.summary as "summary", ' 120 137 .'calendar_object.description as "description", calendar_object.dtend as "endTime" , ' 138 .'calendar_object.priority as "priority", calendar_object.due as "due", ' 139 .'calendar_object.percentage as "percentage", calendar_object.status as "status", ' 121 140 .'calendar_object.location as "location", calendar_object.allday as "allDay", ' 122 141 .'calendar_object.transp as "transparent", calendar_object.class_id as "class", ' … … 127 146 .'calendar FROM calendar_to_calendar_object , calendar_object ' 128 147 .'WHERE ( calendar_to_calendar_object.calendar_id IN (\'' . implode('\',\'', $criteria['filter'][2][2]) . '\')) ' 129 .'AND calendar_to_calendar_object.calendar_object_id = calendar_object.id '; 148 .'AND calendar_to_calendar_object.calendar_object_id = calendar_object.id ' 149 .'AND calendar_object.id NOT IN(select calendar_object_task_id from calendar_task_to_activity_object where owner = \'' . Config::me('uidNumber') . '\') '; 130 150 131 151 if(isset($criteria['searchEvent']) && $criteria['searchEvent']){ … … 157 177 $params = array_merge($params, $occ); 158 178 } 179 $params = self::deepnessFindEvent($uri, $params, $criteria, $original); 180 return false; 181 } 182 } 183 184 public function findTask(&$uri, &$params, &$criteria, $original) { 185 186 if (isset($criteria['filterTasks']) && $criteria['filterTasks']) { 187 188 $sql = ' SELECT calendar_object.id as id ,calendar_object.cal_uid as "uid", calendar_object.type_id as "type", ' 189 .'calendar_object.dtstart as "startTime", calendar_object.summary as "summary", ' 190 .'calendar_object.description as "description", calendar_object.dtend as "endTime" , ' 191 .'calendar_object.priority as "priority", calendar_object.due as "due", ' 192 .'calendar_object.percentage as "percentage", calendar_object.status as "status", ' 193 .'calendar_object.location as "location", calendar_object.allday as "allDay", ' 194 .'calendar_object.transp as "transparent", calendar_object.class_id as "class", ' 195 .'calendar_object.repeat as "repeat", calendar_object.range_start as "rangeStart", ' 196 .'calendar_object.range_end as "rangeEnd", calendar_object.last_update as "lastUpdate", ' 197 .'calendar_object.dtstamp as "dtstamp", calendar_object.sequence as "sequence", ' 198 .'calendar_object.tzid as "timezone" ,calendar_to_calendar_object.calendar_id as ' 199 .'calendar FROM calendar_to_calendar_object , calendar_object ' 200 .'WHERE ( calendar_to_calendar_object.calendar_id IN (\'' . implode('\',\'', $criteria['filter'][3][2]) . '\')) ' 201 .'AND calendar_to_calendar_object.calendar_object_id = calendar_object.id ' 202 .'AND calendar_to_calendar_object.calendar_object_id NOT IN (select calendar_object_activity_id from calendar_task_to_activity_object where owner = \'' . Config::me("uidNumber") . '\' ) ' 203 .'AND calendar_to_calendar_object.calendar_object_id NOT IN (select calendar_object_task_id from calendar_task_to_activity_object where owner = \'' . Config::me("uidNumber") . '\' ) '; 204 205 if(isset($criteria['filter'][4])) 206 $sql .= 'AND (((upper("summary") like upper(\'%'.$criteria['filter'][4][1][2].'%\') OR upper("description") like upper(\'%'.$criteria['filter'][4][1][2].'%\'))))'; 207 208 $sql .= 'AND (range_start >= \'' . $criteria['filter'][2][2] . '\' AND type_id <= \'' . $criteria['filter'][1][2] . '\')'; 209 210 $params = Controller::service('PostgreSQL')->execResultSql($sql); 159 211 $params = self::deepnessFindEvent($uri, $params, $criteria, $original); 160 212 return false; … … 405 457 public function encodeUpdateSchedulable(&$uri, &$params, &$criteria, $original) { 406 458 407 $event = Controller::read(array('concept' => 'schedulable', 'id' => $params['id'])); 408 409 if (isset($params['startTime'])) { 410 411 if (!is_numeric($params['startTime'])) 412 $params['startTime'] = self::parseTimeDate($params['startTime'], $event['timezone']); 413 414 $params['rangeStart'] = $params['startTime']; 415 }if (isset($params['endTime'])) { 416 417 if (!is_numeric($params['endTime'])) { 418 $params['endTime'] = self::parseTimeDate($params['endTime'], $event['timezone']); 419 420 if ((isset($params['allDay']) && $params['allDay']) || ( !isset($params['allDay']) && $event['allDay'])) 421 $params['endTime'] = $params['endTime'] + 86400000; 422 } 423 $params['rangeEnd'] = $params['endTime']; 424 } 459 $event = Controller::read(array('concept' => 'schedulable', 'id' => $params['id'])); 460 461 if (isset($params['startTime'])) { 462 463 if (!is_numeric($params['startTime'])) 464 $params['startTime'] = self::parseTimeDate($params['startTime'], $event['timezone']); 465 466 $params['rangeStart'] = $params['startTime']; 467 } 468 469 if (isset($params['endTime'])) { 470 471 if (!is_numeric($params['endTime'])) { 472 $params['endTime'] = self::parseTimeDate($params['endTime'], $event['timezone']); 473 474 if ((isset($params['allDay']) && $params['allDay']) || ( !isset($params['allDay']) && $event['allDay'])) 475 $params['endTime'] = $params['endTime'] + 86400000; 476 } 477 $params['rangeEnd'] = $params['endTime']; 478 } 479 480 481 if (isset($params['due']) && $params['due'] != '' && !is_numeric($params['due'])) 482 $params['due'] = self::parseTimeDate($params['due'], $event['timezone']); 483 484 485 if($event['type'] == '2'){ 486 487 $criteria['historic'] = $params; 488 $criteria['beforeValue'] = $event; 489 490 if(isset($params['startTime']) && $params['startTime'] == $event['startTime']) 491 unset($criteria['historic']['startTime']); 492 493 if(isset($params['endTime']) && $params['endTime'] == $event['endTime']) 494 unset($criteria['historic']['endTime']); 495 496 if(isset($params['due']) && $params['due'] == $event['due']) 497 unset($criteria['historic']['due']); 498 499 //necessário para atulizar a atividade de composta pela tarefa aqui sendo atualizada 500 if(isset($criteria['historic']['startTime']) || isset($criteria['historic']['endTime'])){ 501 $taskToActivity = Controller::find(array('concept' => 'taskToActivity'), false, array('filter' => array('AND', array('=', 'schedulable', $event['id']), array('=', 'owner', Config::me('uidNumber'))), 'deepness' => 2)); 502 503 if(!empty($taskToActivity)){ 504 $activity = Controller::read(array('concept' => 'schedulable', 'id' => $taskToActivity[0]['activity']), array('startTime', 'endTime', 'rangeStart', 'rangeEnd')); 505 $start = $params['startTime']; 506 $end = $params['endTime']; 507 foreach($taskToActivity as $t){ 508 if($t['task']['id'] != $params['id']){ 509 $start = $t['task']['startTime'] < $start ? $t['task']['startTime'] : $start; 510 $end = $t['task']['endTime'] < $end ? $t['task']['endTime'] : $end; 511 } 512 } 513 514 $toUpdate = array(); 515 516 if($start != $activity['startTime']) 517 $toUpdate['starTime'] = $start; 518 519 if($end != $activity['endTime']) 520 $toUpdate['endTime'] = $end; 521 522 if(!empty($toUpdate)) 523 Controller::update(array('concept' => 'schedulable', 'id' => $activity['id']), $toUpdate); 524 } 525 } 526 527 unset($criteria['historic']['rangeEnd']); 528 unset($criteria['historic']['rangeStart']); 529 unset($criteria['historic']['class']); 530 unset($criteria['historic']['type']); 531 unset($criteria['historic']['allDay']); 532 unset($criteria['historic']['id']); 533 } 425 534 } 426 535 … … 453 562 } 454 563 564 565 static function prepareParticipantHistoric(&$uri, &$params, &$criteria, $original){ 566 $participant = Controller::read(array('concept' => 'participant', 'id' => $uri['id'])); 567 $schedulable = Controller::read(array('concept' => 'schedulable', 'id' => $participant['schedulable'])); 568 569 570 if($schedulable['type'] == '2') 571 $criteria['historic']['participant'] = $participant; 572 } 573 574 static function removeParticipantHistoric(&$uri, &$params, &$criteria, $original){ 575 if(isset($criteria['historic'])){ 576 577 $participant = $criteria['historic']['participant']; 578 579 Controller::create(array('concept' => 'calendarHistoric'), 580 array('schedulable' => $participant['schedulable'], 581 'user' => Config::me('uidNumber'), 582 'time' => time() . '000', 583 'attribute' => 'participant', 584 'beforeValue' => $participant['user'], 585 'afterValue' => '' 586 ) 587 ); 588 589 } 590 591 } 592 593 static function createParticipantHistoric(&$uri, &$params, &$criteria, $original){ 594 595 if(isset($original['properties']) && $original['properties']['isOrganizer'] != '1'){ 596 if(!isset($criteria['event'])){ 597 $event = Controller::read(array('concept' => 'schedulable', 'id' => $original['properties']['schedulable'])); 598 $criteria['event'] = $event; 599 }else 600 $event = $criteria['event']; 601 602 if($event['type'] == '2'){ 603 Controller::create(array('concept' => 'calendarHistoric'), 604 array('schedulable' => $original['properties']['schedulable'], 605 'user' => Config::me('uidNumber'), 606 'time' => time() . '000', 607 'attribute' => 'participant', 608 'beforeValue' => '', 609 'afterValue' => $original['properties']['user'] 610 ) 611 ); 612 } 613 } 614 } 615 616 static function createHistoric(&$uri, &$result, &$criteria, $original) { 617 618 if(isset($criteria['historic']) && count($criteria['historic'])){ 619 $time = time() . '000'; 620 621 foreach($criteria['historic'] as $k => $v){ 622 Controller::create(array('concept' => 'calendarHistoric'), 623 array('schedulable' => $uri['id'], 624 'user' => Config::me('uidNumber'), 625 'time' => $time, 626 'attribute' => $k, 627 'beforeValue' => $criteria['beforeValue'][$k], 628 'afterValue' => $v 629 ) 630 ); 631 } 632 } 633 } 634 455 635 /////////////////////////////////////////////////////////////////////////////////////////////////////////////// 456 636 … … 466 646 } 467 647 468 public function createCreateSchedulableToAttachment(&$uri, &$params, &$criteria, $original) { 469 if (array_key_exists('attachments', $original['properties'])) 470 foreach ($original['properties']['attachments'] as $key => $value) { 471 if (isset($params['id'])) 472 Controller::create(array('concept' => 'schedulableToAttachment'), array('attachment' => $value['attachment'], 'schedulable' => $params['id'])); 473 } 648 //TODO: Remover apos suporte a ManytoMany na api 649 public function createTasksToActivity(&$uri, &$result, &$criteria, $original) { 650 651 if(isset($original['properties']['taskToActivity']) && $original['properties']['taskToActivity']){ 652 653 foreach($original['properties']['taskToActivity'] as $relational) 654 655 Controller::create(array('concept' => 'taskToActivity'), array('task' => $relational['task'], 'owner' => $relational['owner'], 'activity' => $result['id'])); 656 657 } 658 } 659 660 public function removeAttachmentHistoric(&$uri, &$params, &$criteria, $original) { 661 662 if(isset($criteria['historic'])){ 663 $attachment = $criteria['historic']['attachment']; 664 665 $attachment['attachment'] = Controller::read(array('concept' => 'attachment', 'id' => $attachment['attachment']), array('name')); 666 Controller::create(array('concept' => 'calendarHistoric'), 667 array('schedulable' => $attachment['schedulable'], 668 'user' => Config::me('uidNumber'), 669 'time' => time() . '000', 670 'attribute' => 'attachment', 671 'beforeValue' => $attachment['attachment']['name'], 672 'afterValue' => '' 673 ) 674 ); 675 676 } 677 678 } 679 680 public function createAttachmentHistoric(&$uri, &$params, &$criteria, $original) { 681 $event = Controller::read(array('concept' => 'schedulable', 'id' => $original['properties']['schedulable'])); 682 683 if($event['type'] == '2'){ 684 $attachment = Controller::read(array('concept' => 'attachment', 'id' => $original['properties']['attachment']), array('name')); 685 686 Controller::create(array('concept' => 'calendarHistoric'), 687 array('schedulable' => $original['properties']['schedulable'], 688 'user' => Config::me('uidNumber'), 689 'time' => time() . '000', 690 'attribute' => 'attachment', 691 'beforeValue' => '', 692 'afterValue' => $attachment['name'] 693 ) 694 ); 695 696 } 474 697 } 475 698 … … 512 735 513 736 //TODO: Remover apos suporte a deepness na api 737 public function deepnessFindTask(&$uri, &$result, &$criteria, $original) { 738 if (isset($original['criteria']['deepness']) && $original['criteria']['deepness'] != 0) 739 foreach($result as &$value) 740 $value['task'] = Controller::read(array('concept' => 'schedulable', 'id' => $value['task'])); 741 742 743 return $result; 744 } 745 746 //TODO: Remover apos suporte a deepness na api 747 public function deepnessFindHistoric(&$uri, &$result, &$criteria, $original) { 748 if (isset($original['criteria']['deepness']) && $original['criteria']['deepness'] != 0) { 749 foreach($result as &$v){ 750 $v['user'] = Controller::read(array('concept' => 'user', 'id' => $v['user'])); 751 752 if($v['attribute'] == 'participant'){ 753 if($v['beforeValue'] != '') 754 $v['beforeValue'] = Controller::read(array('concept' => 'user', 'id' => $v['beforeValue'])); 755 756 if($v['afterValue'] != '') 757 $v['afterValue'] = Controller::read(array('concept' => 'user', 'id' => $v['afterValue'])); 758 } 759 } 760 } 761 } 762 763 //TODO: Remover apos suporte a deepness na api 514 764 public function deepnessFindEvent(&$uri, &$result, &$criteria, $original) { 515 765 if (isset($original['criteria']['deepness']) && $original['criteria']['deepness'] != 0) { … … 543 793 544 794 $result[$i]['DayLigth'] = $DayLigth; 795 796 if(((int)$v['type']) == 2){ 797 798 $taskToActivity = Controller::find(array('concept' => 'taskToActivity'), false, array('filter' => array('AND', array('=', 'activity', $v['id']), array('=','owner', Config::me('uidNumber'))) , 'deepness' => 2)); 799 800 if($taskToActivity) 801 $result[$i]['taskToActivity'] = $taskToActivity; 802 803 $result[$i]['historic'] = Controller::find(array('concept' => 'calendarHistoric'), false, array('filter' => array('=', 'schedulable', $v['id']) , 'deepness' => 2)); 804 805 } 545 806 546 807 if (isset($v['id'])) { … … 608 869 } 609 870 871 } 872 873 if(isset($result['id']) && $result['type'] == '2'){ 874 $result['historic'] = Controller::find( array( 'concept' => 'calendarHistoric' ), false, array( 'filter' => array( '=', 'schedulable', $result['id'] ) ) ); 610 875 } 611 876 } … … 791 1056 792 1057 static private function countMyCalendarsEvent($id, $owner) { 793 $sig = Controller::find(array('concept' => 'calendarSignature'), array('user', 'calendar', 'isOwner'), array('filter' => array('AND', array('=', ' user', $owner), array('=', 'isOwner', '1'))));1058 $sig = Controller::find(array('concept' => 'calendarSignature'), array('user', 'calendar', 'isOwner'), array('filter' => array('AND', array('=', 'isOwner', '1'), array('=', 'user', $owner)))); 794 1059 $calendars = array(); 795 1060 foreach ($sig as $val) … … 807 1072 if(isset($criteria['filter']) && $criteria['filter'] && isset($criteria['filter'][1][2])){ 808 1073 $idSchedulable = $criteria['filter'][1][2]; 809 1074 $idCalendar = $criteria['filter'][2][2]; 810 1075 $owner = $criteria['filter'][3][2]; 811 1076 … … 844 1109 845 1110 $uri['id'] = $idSchedulable; 1111 1112 if(isset($criteria['filter']) && isset($criteria['filter'][4]) && isset($criteria['filter'][4][2])){ 1113 Controller::deleteALL(array('concept' => 'taskToActivity'), null, array('filter' => array('=', 'activity', $idSchedulable))); 1114 } 846 1115 } 847 1116 … … 894 1163 $schedulableAttachment = Controller::read(array('concept' => 'schedulableToAttachment'), false, array('filter' => array( '=', 'attachment' , $original['URI']['id'] ))); 895 1164 $uri['id'] = $schedulableAttachment[0]['id']; 1165 1166 $params = $schedulableAttachment[0]; 1167 1168 $event = Controller::read(array('concept' => 'schedulable', 'id' => $params['schedulable'])); 1169 if($event['type'] == '2') 1170 $criteria['historic']['attachment'] = $schedulableAttachment[0]; 1171 896 1172 } 897 1173 } 898 1174 899 1175 public function deleteAttachmentDependences(&$uri, &$params, &$criteria, $original) { 900 Controller::delete(array('concept' => 'attachment', 'id' => $original['URI']['id']));1176 Controller::delete(array('concept' => 'attachment', 'id' => (isset($params['attachment']) ? $params['attachment'] : $original['URI']['id']))); 901 1177 } 902 1178 … … 908 1184 } 909 1185 1186 1187 public function createDefaultGroup(&$uri, &$result, &$criteria, $original) { 1188 if( $original['criteria']['filter'][1][0] == '=' && 1189 $original['criteria']['filter'][1][1] == 'user' && 1190 $original['criteria']['filter'][1][2] == $_SESSION['phpgw_session']['account_id']){ 1191 1192 $existDefaultGroup = false; 1193 1194 foreach($result as $v){ 1195 if($v['type'] == 1 && $v['calendar']['type'] == 1) 1196 $existDefaultGroup = true; 1197 } 1198 1199 if(!$existDefaultGroup){ 1200 1201 $cal = array('name' => 'Sem grupo', 1202 'description' => 'Sem grupo', 1203 'timezone' => (date_default_timezone_get()) ? date_default_timezone_get() : 'America/Sao_Paulo', 1204 'dtstamp' => time() . '000', 1205 'type' => '1' 1206 ); 1207 1208 $calCreated = Controller::create(array('concept' => 'calendar'), $cal); 1209 1210 $sig = array('user' => $_SESSION['wallet']['user']['uidNumber'], 1211 'calendar' => $calCreated['id'], 1212 'isOwner' => '1', 1213 'dtstamp' => time() . '000', 1214 'fontColor' => 'FFFFFF', 1215 'backgroundColor' => '3366CC', 1216 'borderColor' => '3366CC', 1217 'type' => '1' 1218 ); 1219 1220 $sigCreated = Controller::create(array('concept' => 'calendarSignature'), $sig); 1221 $sigCreated = Controller::read(array('concept' => 'calendarSignature', 'id' => $sigCreated['id']), false, array('deepness' => 2 )); 1222 1223 array_push($result, $sigCreated); 1224 } 1225 1226 } 1227 1228 } 1229 910 1230 public function createDefaultSignature(&$uri, &$result, &$criteria, $original) { 1231 1232 if(count($result) == 0 && isset($criteria['filter'][3]) && isset($criteria['filter'][3]['isRecursion'])){ 1233 throw new Exception('It was not possible to find to calendar!'); 1234 return false; 1235 } 911 1236 912 1237 //Caso uma busca não retorne nenhum resultado e foi buscado pelas assinaturas do usuario logado apenas … … 916 1241 if (count($result) > 0) { 917 1242 foreach ($result as $value) { 918 if (isset($value['isOwner']) && $value['isOwner'] != 0)919 $isValidSignature = true;1243 if (isset($value['isOwner']) && $value['isOwner'] != 0 && isset($value['type']) && $value['type'] == 0) 1244 $isValidSignature = true; 920 1245 } 921 1246 } … … 928 1253 929 1254 if (Config::module('useCaldav', 'expressoCalendar')) { 930 require_once ROOTPATH . '/modules/calendar/interceptors/DAViCalAdapter.php'; 931 932 $calendario = DAViCalAdapter::findCalendars(); 1255 require_once ROOTPATH . '/modules/calendar/interceptors/DAViCalAdapter.php'; 1256 $calendario = DAViCalAdapter::findCalendars(); 933 1257 } 934 1258 935 1259 if (Config::module('useCaldav', 'expressoCalendar') && is_array($calendario) && count($calendario) > 0) { 936 foreach ($calendario as $i => $v) { 937 938 $urlA = explode('/', $v->url); 939 $name = isset($v->displayname) ? $v->displayname : $urlA[(count($urlA) - 2)]; 940 $cal = array('name' => $name, 941 'description' => isset($v->description) ? $v->description : $name, 942 'timezone' => isset($v->timezone) ? $v->timezone : (date_default_timezone_get()) ? date_default_timezone_get() : 'America/Sao_Paulo', 943 'dtstamp' => time() . '000', 944 'location' => $urlA[(count($urlA) - 3)] . '/' . $urlA[(count($urlA) - 2)] 945 ); 946 947 $calCreated = Controller::create(array('concept' => 'calendar'), $cal); 948 949 950 951 $sig = array('user' => $_SESSION['wallet']['user']['uidNumber'], 952 'calendar' => $calCreated['id'], 953 'isOwner' => '1', 954 'dtstamp' => time() . '000', 955 'fontColor' => 'FFFFFF', 956 'backgroundColor' => '3366CC', 957 'borderColor' => '3366CC', 958 ); 959 960 $sigCreated = Controller::create(array('concept' => 'calendarSignature'), $sig); 961 962 963 DAViCalAdapter::importCollection($v->url, $calCreated['id']); 964 } 1260 foreach ($calendario as $i => $v) { 1261 1262 $urlA = explode('/', $v->url); 1263 $name = isset($v->displayname) ? $v->displayname : $urlA[(count($urlA) - 2)]; 1264 $cal = array('name' => $name, 1265 'description' => isset($v->description) ? $v->description : $name, 1266 'timezone' => isset($v->timezone) ? $v->timezone : (date_default_timezone_get()) ? date_default_timezone_get() : 'America/Sao_Paulo', 1267 'dtstamp' => time() . '000', 1268 'location' => $urlA[(count($urlA) - 3)] . '/' . $urlA[(count($urlA) - 2)] 1269 ); 1270 1271 $calCreated = Controller::create(array('concept' => 'calendar'), $cal); 1272 1273 if(!$calCreated){ 1274 throw new Exception('Error to create calendar'); 1275 return false; 1276 } 1277 1278 $sig = array('user' => $_SESSION['wallet']['user']['uidNumber'], 1279 'calendar' => $calCreated['id'], 1280 'isOwner' => '1', 1281 'dtstamp' => time() . '000', 1282 'fontColor' => 'FFFFFF', 1283 'backgroundColor' => '3366CC', 1284 'borderColor' => '3366CC', 1285 ); 1286 1287 $sigCreated = Controller::create(array('concept' => 'calendarSignature'), $sig); 1288 1289 if(!$sigCreated){ 1290 throw new Exception('Error to create signature'); 1291 return false; 1292 } 1293 1294 DAViCalAdapter::importCollection($v->url, $calCreated['id']); 1295 } 965 1296 } else { 966 //Criaremos uma agenda padrão 967 $cal = array('name' => 'Calendario', 968 'description' => 'Calendario Padrão', 969 'timezone' => (date_default_timezone_get()) ? date_default_timezone_get() : 'America/Sao_Paulo', 970 'dtstamp' => time() . '000' 971 ); 972 973 $calCreated = Controller::create(array('concept' => 'calendar'), $cal); 974 975 $sig = array('user' => $_SESSION['wallet']['user']['uidNumber'], 976 'calendar' => $calCreated['id'], 977 'isOwner' => '1', 978 'dtstamp' => time() . '000', 979 'fontColor' => 'FFFFFF', 980 'backgroundColor' => '3366CC', 981 'borderColor' => '3366CC', 982 ); 983 984 $sigCreated = Controller::create(array('concept' => 'calendarSignature'), $sig); 985 } 986 987 $result = Controller::find($original['URI'], $original['properties'] ? $original['properties'] : null, $original['criteria']); 1297 //Criaremos uma agenda padrão 1298 $cal = array('name' => 'Calendario', 1299 'description' => 'Calendario Padrão', 1300 'timezone' => (date_default_timezone_get()) ? date_default_timezone_get() : 'America/Sao_Paulo', 1301 'dtstamp' => time() . '000' 1302 ); 1303 1304 $calCreated = Controller::create(array('concept' => 'calendar'), $cal); 1305 1306 $sig = array('user' => $_SESSION['wallet']['user']['uidNumber'], 1307 'calendar' => $calCreated['id'], 1308 'isOwner' => '1', 1309 'dtstamp' => time() . '000', 1310 'fontColor' => 'FFFFFF', 1311 'backgroundColor' => '3366CC', 1312 'borderColor' => '3366CC', 1313 ); 1314 1315 $sigCreated = Controller::create(array('concept' => 'calendarSignature'), $sig); 1316 } 1317 1318 $original['criteria']['filter'][] = array('isRecursion' => true); 1319 $result = Controller::find($original['URI'], $original['properties'] ? $original['properties'] : null, $original['criteria']); 988 1320 return false; 989 }1321 } 990 1322 } 991 1323 … … 1017 1349 1018 1350 public function davcalCreateCollection(&$uri, &$params, &$criteria, $original) { 1019 if (Config::module('useCaldav', 'expressoCalendar')) {1020 require_once ROOTPATH . '/modules/calendar/interceptors/DAViCalAdapter.php';1021 DAViCalAdapter::mkcalendar($params['location'], $params['name'], isset($params['description']) ? $params['description'] : '' );1022 }1351 if (Config::module('useCaldav', 'expressoCalendar')) { 1352 require_once ROOTPATH . '/modules/calendar/interceptors/DAViCalAdapter.php'; 1353 DAViCalAdapter::mkcalendar($params['location'], $params['name'], isset($params['description']) ? $params['description'] : '' ); 1354 } 1023 1355 } 1024 1356 1025 1357 public function davcalDeleteCollection(&$uri, &$params, &$criteria, $original) { 1026 if (Config::module('useCaldav', 'expressoCalendar') && Config::module('onRemoveCascadeCalDav')) {1027 require_once ROOTPATH . '/modules/calendar/interceptors/DAViCalAdapter.php';1028 $calendar = Controller::read($uri);1029 DAViCalAdapter::rmCalendar($calendar['location']);1030 }1358 if (Config::module('useCaldav', 'expressoCalendar') && Config::module('onRemoveCascadeCalDav')) { 1359 require_once ROOTPATH . '/modules/calendar/interceptors/DAViCalAdapter.php'; 1360 $calendar = Controller::read($uri); 1361 DAViCalAdapter::rmCalendar($calendar['location']); 1362 } 1031 1363 } 1032 1364 1033 1365 public function davcalUpdateCollection(&$uri, &$params, &$criteria, $original) { 1034 if (Config::module('useCaldav', 'expressoCalendar')) {1035 require_once ROOTPATH . '/modules/calendar/interceptors/DAViCalAdapter.php';1036 if (isset($params['location'])) {1037 $calendar = Controller::read($uri);1038 if ($calendar['location'] !== $params['location'])1039 DAViCalAdapter::mvcalendar($calendar['location'], $params['location']);1040 }1041 }1366 if (Config::module('useCaldav', 'expressoCalendar')) { 1367 require_once ROOTPATH . '/modules/calendar/interceptors/DAViCalAdapter.php'; 1368 if (isset($params['location'])) { 1369 $calendar = Controller::read($uri); 1370 if ($calendar['location'] !== $params['location']) 1371 DAViCalAdapter::mvcalendar($calendar['location'], $params['location']); 1372 } 1373 } 1042 1374 } 1043 1375 -
trunk/prototype/modules/calendar/js/calendar.codecs.js
r6533 r6996 22 22 fontColor: "fff", 23 23 timezone: 'America/Sao_Paulo', 24 weekStart: 'SUN' 24 weekStart: 'SUN', 25 useDesktopNotification: 0 25 26 }; 26 27 … … 31 32 } 32 33 } 34 35 updateActivity = false; 33 36 34 37 constantsParticipant = { … … 195 198 DataLayer.commit( false, false, function(){ 196 199 Calendar.rerenderView(true); 200 if(updateActivity) 201 refreshTaskActivity(); 197 202 }); 198 203 } … … 262 267 user: User.me.id, 263 268 calendar: { 264 id: Calendar.calendarOf[form.signature].id,269 id: !!!parseInt(form.type) ? Calendar.calendarOf[form.signature].id : Calendar.groupOf[form.signature].id, 265 270 name: Encoder.htmlEncode(form.name), 266 271 description: Encoder.htmlEncode(form.description), … … 384 389 385 390 391 }); 392 393 DataLayer.codec( "schedulable", "taskEdit", { 394 395 decoder: function( evtObj ){ 396 Encoder.EncodeType = "entity"; 397 398 if( notArray = $.type(evtObj) !== "array" ) 399 evtObj = [ evtObj ]; 400 401 var pref = User.preferences; 402 403 var res = $.map(evtObj, function( form ){ 404 405 return DataLayer.merge({ 406 id: form.idTask, 407 percentage: form.percentage, 408 type: '2', 409 status: form.taskStatus, 410 participants : $.map(form.attendee, function( attendee, i ){ 411 if(isNaN(attendee)){ 412 return{ 413 id: attendee, 414 acl: form.attendeeAcl[i], 415 delegatedFrom: !!form.delegatedFrom[i] ? form.delegatedFrom[i] : 0, 416 isOrganizer: (form.attendee_organizer == attendee ? 1 : 0 ), 417 isExternal: !!parseInt(form.attendeeType[i]) ? 1 : 0, 418 acl: form.attendeeAcl[i].replace('o', '') 419 }; 420 }else{ 421 if(DataLayer.get('participant', attendee).user == User.me.id){ 422 var me = { 423 user: User.me.id, 424 status: form.status, 425 id: attendee, 426 isOrganizer: 0, 427 receiveNotification : (!!form.receiveNotification ? 1 : 0), 428 alarms: typeof(form.alarmTime) != 'undefined' ? 429 $.map( form.alarmTime || [], function( alarmTime, i ){ 430 431 if( alarmTime === "" ) 432 return( null ); 433 434 return !!form.alarmId[i] ? 435 { 436 type: form.alarmType[i], 437 unit: form.alarmUnit[i], 438 time: form.alarmTime[i], 439 id: form.alarmId[i] 440 } : 441 { 442 type: form.alarmType[i], 443 unit: form.alarmUnit[i], 444 time: form.alarmTime[i] 445 }; 446 }) : [] 447 }; 448 449 if(form.startDate){ 450 var tzId = DataLayer.get('schedulable', form.idEvent).timezone || User.preferences.timezone, 451 formatString = pref.dateFormat + " " + pref.hourFormat; 452 453 DataLayer.put('notification', { 454 participant: me.id, 455 type: 'suggestion', 456 startTime: Date.parseExact(form.startDate + (!!form.allDay ? " 00:00": " "+$.trim(form.startHour)) , formatString ).toString('yyyy-MM-dd HH:mm:00'), 457 endTime: Date.parseExact(form.endDate + ( !!form.allDay ? " 00:00": " "+$.trim(form.endHour)), formatString ).toString('yyyy-MM-dd HH:mm:00'), 458 allDay: ( !!form.allDay ? 1 : 0 ), 459 schedulable: form.idEvent 460 }); 461 462 } 463 return me; 464 }else return(null); 465 }; 466 }) 467 }, (form.group != form.lastGroup? {calendar: form.group, lastCalendar: form.lastGroup} : {})) 468 }); 469 return notArray ? res[0] : res; 470 }, 471 472 encoder: function( evtObj ){} 473 386 474 }); 387 475 … … 510 598 calendar: objEvent.calendar, 511 599 summary: objEvent.summary, 600 type: !!objEvent.type ? objEvent.type : 1, 512 601 description: objEvent.description, 513 602 timezone: objEvent.timezone, … … 595 684 }); 596 685 686 DataLayer.codec( "schedulable", "task", { 687 688 decoder: function( evtObj ){ 689 Encoder.EncodeType = "entity"; 690 691 if( notArray = $.type(evtObj) !== "array" ) 692 evtObj = [ evtObj ]; 693 694 var pref = User.preferences; 695 696 var res = $.map(evtObj, function( form ){ 697 698 var tzId = form.timezone || Calendar.signatureOf[form.group].calendar.timezone || User.preferences.timezone, 699 700 formatString = pref.dateFormat + " " + pref.hourFormat; 701 702 return DataLayer.merge({ 703 "class": form["class"], 704 startTime: Date.parseExact(form.startDate + " "+$.trim(form.startHour) , formatString ).toString(!!form.allDay ? 'yyyy-MM-dd 00:00:00' : 'yyyy-MM-dd HH:mm:00'), 705 endTime: Date.parseExact(form.endDate + " "+$.trim(form.endHour), formatString ).toString(!!form.allDay ? 'yyyy-MM-dd 00:00:00' : 'yyyy-MM-dd HH:mm:00'), //+ (!!form.allDay ? 86400000 : 0) , 706 due: (form.dueDate == '' )? 0 : Date.parseExact(form.dueDate + " "+$.trim(form.dueTime) , formatString ).toString(!!form.allDay ? 'yyyy-MM-dd 00:00:00' : 'yyyy-MM-dd HH:mm:00'), 707 allDay: ( !!form.allDay ? 1 : 0 ), 708 status: form.taskStatus, 709 id: form.idTask, 710 location: form.location, 711 type: !!form.type ? form.type : 2, 712 percentage: form.percentage, 713 priority: form.priority, 714 category: form.category, 715 summary: form.summary == '' ? 'Tarefa sem título' : form.summary, 716 description: form.description, 717 timezone: tzId, 718 attachments: $.map(form.attachment || [], function( attachment, i ){ 719 return { 720 attachment: attachment 721 } 722 }), 723 participants: $.map( form.attendee || [], function( attendee, i ){ 724 725 if( !attendee || attendee === "" ) 726 return( null ); 727 728 var participant = {}; 729 participant.user = (attendee!= User.me.id) ? DataLayer.get('participant', attendee).user : attendee ; 730 731 if( participant.user === User.me.id ){ 732 return DataLayer.merge({ 733 id: attendee, 734 isOrganizer: (form.attendee_organizer == attendee ? 1 : 0 ), 735 alarms: participant.alarms = $.map( form.alarmTime || [], function( alarmTime, i ){ 736 if( alarmTime === "" ) 737 return( null ); 738 return !!form.alarmId[i] ? { 739 type: form.alarmType[i], 740 unit: form.alarmUnit[i], 741 time: form.alarmTime[i], 742 id: form.alarmId[i] 743 }: 744 745 { 746 type: form.alarmType[i], 747 unit: form.alarmUnit[i], 748 time: form.alarmTime[i] 749 }; 750 }), 751 status: !!form.status ? form.status : 3 752 }, (form.delegatedFrom[i] != '0' && form.delegatedFrom[i] != '') ? { 753 delegatedFrom: form.delegatedFrom[i] 754 } : {}); 755 }else{ 756 return { 757 id: attendee, 758 isOrganizer: (form.attendee_organizer == attendee ? 1 : 0 ), 759 isExternal: !!parseInt(form.attendeeType[i]) ? 1 : 0 760 }; 761 }; 762 }) 763 }, form.lastGroup ? (( form.lastGroup == form.group ) ? {} : {calendar: form.group, lastGroup: form.lastGroup}) : {calendar: form.group}); 764 }); 765 766 return notArray ? res[0] : res; 767 }, 768 769 encoder: function( evtObj ){ 770 771 var notArray = false; 772 773 if( notArray = $.type(evtObj) !== "array" ) 774 evtObj = [ evtObj ]; 775 776 var statusParticipants = {}, isAttendee = false, 777 778 statusLabels = [ '', 'accepted', 'tentative', 'cancelled', 'unanswered', 'delegated' ], 779 780 participantInfo = {}, delegatedFrom = {}, me = DataLayer.copy( User.me ); 781 782 var delegateAttendee = {}; 783 784 for( var i = 0; i < statusLabels.length; i++ ) 785 statusParticipants[ statusLabels[i] ] = 0; 786 787 var res = $.map(evtObj, function( objEvent ){ 788 789 if(!(typeof(objEvent) == 'object')) 790 return (null); 791 792 var limitAttendee = false; 793 794 return { 795 "class": objEvent["class"], 796 id: objEvent.id, 797 location: objEvent.location, 798 category: objEvent.category, 799 taskStatus: objEvent.status, 800 groups: Calendar.groups, 801 group: objEvent.group ? objEvent.group : objEvent.calendar, 802 summary: objEvent.summary, 803 type: !!objEvent.type ? objEvent.type : 2, 804 description: objEvent.description, 805 timezone: objEvent.timezone, 806 timezones: Timezone.timezones, 807 percentage: (objEvent.percentage) ? objEvent.percentage : '0', 808 priority: objEvent.priority, 809 startDate: new Date( parseInt(objEvent.startTime) ).setTimezoneOffset( Timezone.timezone( objEvent.timezone ) ).toString( User.preferences.dateFormat ), 810 startHour: dateCalendar.formatDate(Timezone.getDateEvent(new Date( parseInt(objEvent.startTime)), objEvent.timezone, objEvent.calendar, objEvent.DayLigth, 'startTime'), User.preferences.hourFormat), 811 endDate: new Date( parseInt(objEvent.endTime) - (!!parseInt(objEvent.allDay) ? 86400000 : 0) ).setTimezoneOffset( Timezone.timezone( objEvent.timezone ) ).toString( User.preferences.dateFormat ), 812 endHour: dateCalendar.formatDate(Timezone.getDateEvent(new Date(parseInt(objEvent.endTime)), objEvent.timezone, objEvent.calendar, objEvent.DayLigth, 'endTime'), User.preferences.hourFormat), 813 dueDate: (!objEvent.due || objEvent.due == '' || objEvent.due == '0') ? '' : new Date( parseInt(objEvent.due) ).setTimezoneOffset( Timezone.timezone( objEvent.timezone ) ).toString( User.preferences.dateFormat ), 814 dueTime: (!objEvent.due || objEvent.due == '' || objEvent.due == '0') ? '' : dateCalendar.formatDate(Timezone.getDateEvent(new Date( parseInt(objEvent.due)), objEvent.timezone, objEvent.calendar, objEvent.DayLigth, 'startTime'), User.preferences.hourFormat), 815 allDay: !!parseInt( objEvent.allDay ), 816 historic: !!objEvent.historic ? decodeHistoric(objEvent) : [] , 817 attachments: $.map(objEvent.attachments || [], function( attachment, i ){ 818 var attach = DataLayer.get('schedulableToAttachment', attachment, false); 819 //TODO - Verificar na API retorno de id sobre os conceitos em que s?o utilizados tabelas de liga??o 820 if(!attach.name) return(null); 821 822 var ext = attach.name.split('.'); 823 attach.name = attach.name.length < 10 ? attach.name : ( ext.length == 1 ? attach.name.substr(0, 10) : (attach.name.substr(0, 6) + '.' + ext[ext.length -1])); 824 attach.size = formatBytes(attach.size); 825 return attach; 826 }), 827 attendee: $.map(objEvent.participants || [], function( participant, i ){ 828 829 if(delegateAttendee[participant]) 830 return(null); 831 832 var attend = DataLayer.get('participant', (participant.id || participant)); 833 attend.user = DataLayer.get('user', attend.user); 834 835 statusParticipants[ statusLabels[attend.status] ]++; 836 837 if(attend.user.mail == User.me.mail) 838 isAttendee = true; 839 840 if( attend.user.id === me.id ){ 841 participantInfo.user = { 842 id: attend.id, 843 status : attend.status, 844 delegatedFrom: attend.delegatedFrom || '0', 845 acl: attend.acl, 846 receiveNotification : attend.receiveNotification, 847 alarms : $.map(attend.alarms || [], function( alarm ){ 848 var alarm = DataLayer.get('alarm', alarm); 849 return (alarm == "" ? (null) : alarm); 850 }) 851 }; 852 me = attend; 853 return(null); 854 }; 855 856 var person = { 857 id: attend.id, 858 name: attend.user.name != 'false' ? attend.user.name : '', 859 mail: attend.user.mail, 860 status : attend.status, 861 isExternal: attend.isExternal, 862 acl: attend.acl, 863 delegatedFrom: attend.delegatedFrom 864 }; 865 866 if(!!parseInt(attend.delegatedFrom)){ 867 delegatedFrom[attend.delegatedFrom] = DataLayer.copy(person); 868 return(null); 869 } 870 871 if( !!parseInt(attend.isOrganizer)){ 872 participantInfo.organizer = DataLayer.copy(person); 873 return(null); 874 }; 875 876 return (person); 877 }), 878 organizer: participantInfo.organizer || me, 879 isOrganizer: (participantInfo.organizer || me).id == me.id, 880 alarms: !!participantInfo.user ? participantInfo.user.alarms : [], 881 status: !!participantInfo.user ? participantInfo.user.status : 1, 882 isAttendee: isAttendee, 883 me: me, 884 delegatedFrom: delegatedFrom, 885 statusParticipants: (objEvent.sizeAttendees != "") ? objEvent.statusAttendees : statusParticipants, 886 sizeAttendeeLimit: (objEvent.sizeAttendees != "") ? objEvent.sizeAttendees : false 887 }; 888 }); 889 return (notArray ? res[0] : res); 890 } 891 }); 892 893 function decodeHistoric ( evt ) { 894 var historic = evt.historic; 895 var decoded = []; 896 var attributeDecoded = { 897 'startTime': 'Data de inicio', 898 'endTime' : 'Data de fim', 899 'summary' : 'Título', 900 'description': 'Descrição', 901 'status': 'Status', 902 'percentage': 'Porcentagem', 903 'priority': 'Priorudade', 904 'due' : 'Previsão de término' 905 } 906 907 var statusDecoded = { 908 1: 'Sem ações', 909 2: 'Em processo', 910 3: 'Finalzada', 911 4: 'Cancelada', 912 } 913 914 var decodeDate = function(time){ 915 return new Date( parseInt( time) ).setTimezoneOffset( Timezone.timezone( evt.timezone ) ).toString( User.preferences.dateFormat+' - '+User.preferences.hourFormat ); 916 }; 917 918 var decodeItem = function(historic){ 919 switch(historic.attribute){ 920 case 'startTime': 921 case 'endTime' : 922 case 'due': 923 return { 924 user :$.type(historic.user) == 'object' ? historic.user : DataLayer.get('user', historic.user), 925 attribute : attributeDecoded[historic.attribute], 926 beforeValue : decodeDate(historic.beforeValue), 927 afterValue : decodeDate(historic.afterValue), 928 time: decodeDate(historic.time) 929 } 930 break; 931 case 'participant': 932 return{ 933 user :$.type(historic.user) == 'object' ? historic.user : DataLayer.get('user', historic.user), 934 attribute : historic.beforeValue == '' ? ('Novo participante') : ('Rem. participante'), 935 beforeValue : historic.beforeValue == '' ? '' : historic.beforeValue.mail, 936 afterValue : historic.afterValue == '' ? '' : historic.afterValue.mail, 937 time: decodeDate(historic.time) 938 } 939 break; 940 case 'attachment': 941 return{ 942 user : $.type(historic.user) == 'object' ? historic.user : DataLayer.get('user', historic.user), 943 attribute : historic.beforeValue == '' ? ('Novo anexo') : ('Rem. anexo'), 944 beforeValue : historic.beforeValue, 945 afterValue : historic.afterValue, 946 time: decodeDate(historic.time) 947 } 948 case 'percentage': 949 return{ 950 user :$.type(historic.user) == 'object' ? historic.user : DataLayer.get('user', historic.user), 951 attribute :attributeDecoded[historic.attribute], 952 beforeValue : historic.beforeValue+' %', 953 afterValue : historic.afterValue+' %', 954 time: decodeDate(historic.time) 955 } 956 case 'status': 957 return{ 958 user :$.type(historic.user) == 'object' ? historic.user : DataLayer.get('user', historic.user), 959 attribute :attributeDecoded[historic.attribute], 960 beforeValue : statusDecoded[historic.beforeValue], 961 afterValue : statusDecoded[historic.afterValue], 962 time: decodeDate(historic.time) 963 } 964 break; 965 default: 966 return { 967 user : $.type(historic.user) == 'object' ? historic.user : DataLayer.get('user', historic.user), 968 attribute : attributeDecoded[historic.attribute], 969 beforeValue : historic.beforeValue, 970 afterValue : historic.afterValue, 971 time: decodeDate(historic.time) 972 } 973 break; 974 975 } 976 } 977 978 for(var i = 0; i < historic.length; i++) 979 decoded.push(decodeItem(historic[i])); 980 981 return decoded; 982 983 } 984 985 DataLayer.codec( "schedulable", "taskSearch", { 986 987 decoder: function( evtObj ){ 988 989 }, 990 991 encoder: function( evtObj ){ 992 993 var notArray = false; 994 995 if( notArray = $.type(evtObj) !== "array" ) 996 evtObj = [ evtObj ]; 997 998 var res = $.map(evtObj, function( objEvent ){ 999 1000 if(!(typeof(objEvent) == 'object')) 1001 return (null); 1002 1003 return { 1004 id: objEvent.id, 1005 description: !!objEvent.summary ? objEvent.summary : objEvent.description, 1006 startDate: new Date( parseInt(objEvent.startTime) ).setTimezoneOffset( Timezone.timezone( objEvent.timezone ) ).toString( User.preferences.dateFormat ), 1007 startHour: dateCalendar.formatDate(Timezone.getDateEvent(new Date( parseInt(objEvent.startTime)), objEvent.timezone, objEvent.calendar, objEvent.DayLigth, 'startTime'), User.preferences.hourFormat), 1008 endDate: new Date( parseInt(objEvent.endTime) - (!!parseInt(objEvent.allDay) ? 86400000 : 0) ).setTimezoneOffset( Timezone.timezone( objEvent.timezone ) ).toString( User.preferences.dateFormat ), 1009 endHour: dateCalendar.formatDate(Timezone.getDateEvent(new Date(parseInt(objEvent.endTime)), objEvent.timezone, objEvent.calendar, objEvent.DayLigth, 'endTime'), User.preferences.hourFormat), 1010 dueDate: (!objEvent.due || objEvent.due == '' || objEvent.due == '0') ? '' : new Date( parseInt(objEvent.due) ).setTimezoneOffset( Timezone.timezone( objEvent.timezone ) ).toString( User.preferences.dateFormat ), 1011 dueTime: (!objEvent.due || objEvent.due == '' || objEvent.due == '0') ? '' : dateCalendar.formatDate(Timezone.getDateEvent(new Date( parseInt(objEvent.due)), objEvent.timezone, objEvent.calendar, objEvent.DayLigth, 'startTime'), User.preferences.hourFormat), 1012 allDay: !!parseInt( objEvent.allDay ), 1013 percentage: (objEvent.percentage) ? objEvent.percentage : '0', 1014 status: objEvent.status 1015 } 1016 }); 1017 return (notArray ? res[0] : res); 1018 } 1019 }); 1020 1021 DataLayer.codec( "schedulable", "activity", { 1022 1023 decoder: function( evtObj ){ 1024 Encoder.EncodeType = "entity"; 1025 1026 if( notArray = $.type(evtObj) !== "array" ) 1027 evtObj = [ evtObj ]; 1028 1029 var pref = User.preferences; 1030 1031 var res = $.map(evtObj, function( form ){ 1032 1033 var tzId = form.timezone || Calendar.signatureOf[form.group].calendar.timezone || User.preferences.timezone, 1034 formatString = pref.dateFormat + " " + pref.hourFormat; 1035 1036 var decodeParticipants = function(attend){ 1037 return [DataLayer.merge( 1038 { 1039 user: User.me.id, 1040 isOrganizer: 1, 1041 acl: 'row', 1042 alarms: $.map( form.alarmTime || [], function( alarmTime, i ){ 1043 if( alarmTime === "" ) 1044 return( null ); 1045 return !!form.alarmId[i] ? { 1046 type: form.alarmType[i], 1047 unit: form.alarmUnit[i], 1048 time: form.alarmTime[i], 1049 id: form.alarmId[i] 1050 }: 1051 1052 { 1053 type: form.alarmType[i], 1054 unit: form.alarmUnit[i], 1055 time: form.alarmTime[i] 1056 }; 1057 }) 1058 }, attend != '0' ? {id: attend} : {})]; 1059 }; 1060 1061 return DataLayer.merge({ 1062 "class": form["class"], 1063 startTime: Date.parseExact(form.startDate + " "+$.trim(form.startHour) , formatString ).toString(!!form.allDay ? 'yyyy-MM-dd 00:00:00' : 'yyyy-MM-dd HH:mm:00'), 1064 endTime: Date.parseExact(form.endDate + " "+$.trim(form.endHour), formatString ).toString(!!form.allDay ? 'yyyy-MM-dd 00:00:00' : 'yyyy-MM-dd HH:mm:00'), //+ (!!form.allDay ? 86400000 : 0) , 1065 due: (form.dueDate == '' )? 0 : Date.parseExact(form.dueDate + " "+$.trim(form.dueHour) , formatString ).toString(!!form.allDay ? 'yyyy-MM-dd 00:00:00' : 'yyyy-MM-dd HH:mm:00'), 1066 allDay: ( !!form.allDay ? 1 : 0 ), 1067 status: form.activityStatus, 1068 id: form.idActivity, 1069 type: !!form.type ? form.type : 2, 1070 percentage: form.percentage, 1071 priority: form.priority, 1072 category: form.category, 1073 summary: form.summary == '' ? 'Atividade sem título' : form.summary, 1074 description: form.description, 1075 timezone: tzId, 1076 attachments: $.map(form.attachment || [], function( attachment, i ){ 1077 return { 1078 attachment: attachment 1079 } 1080 }), 1081 participants: decodeParticipants(form.idAttendee), 1082 taskToActivity:$.map( form.idtask || [], function( task, i ){ 1083 1084 return DataLayer.merge({ 1085 task: task, 1086 owner: User.me.id 1087 }, form.idTaskToActivity[i] != '' ? {id: form.idTaskToActivity[i]} : {}); 1088 1089 }) 1090 }, form.lastGroup ? (( form.lastGroup == form.group ) ? {} : {calendar: form.group, lastGroup: form.lastGroup}) : {calendar: form.group}); 1091 }); 1092 1093 return notArray ? res[0] : res; 1094 }, 1095 1096 encoder: function( evtObj ){ 1097 1098 var notArray = false; 1099 1100 if( notArray = $.type(evtObj) !== "array" ) 1101 evtObj = [ evtObj ]; 1102 1103 var res = $.map(evtObj, function( objEvent ){ 1104 1105 if(!(typeof(objEvent) == 'object')) 1106 return (null); 1107 1108 var historic = []; 1109 1110 var decodeTasks = function(obj){ 1111 1112 var tasks = {}, task = {}; 1113 1114 for(var i =0; i < obj.taskToActivity.length; i++){ 1115 1116 taskToActivity = DataLayer.get('taskToActivity', obj.taskToActivity[i]); 1117 task = taskToActivity.task; 1118 1119 if($.type(task) != 'object') 1120 task = DataLayer.get('schedulable', task); 1121 1122 tasks[task.id] = { 1123 taskToActivity: taskToActivity.id, 1124 allDay: !!parseInt(task.allDay), 1125 dueDate: (!task.due || task.due == '' || task.due == '0') ? '' : new Date( parseInt(task.due) ).setTimezoneOffset( Timezone.timezone( task.timezone ) ).toString( User.preferences.dateFormat ), 1126 dueTime: (!task.due || task.due == '' || task.due == '0') ? '' : dateCalendar.formatDate(Timezone.getDateEvent(new Date( parseInt(task.due)), task.timezone, obj.calendar, obj.DayLigth, 'startTime'), User.preferences.hourFormat), 1127 startDate: new Date( parseInt(task.startTime) ).setTimezoneOffset( Timezone.timezone( task.timezone ) ).toString( User.preferences.dateFormat ), 1128 startHour: dateCalendar.formatDate(Timezone.getDateEvent(new Date( parseInt(task.startTime)), task.timezone, task.calendar, obj.DayLigth, 'startTime'), User.preferences.hourFormat), 1129 endDate: new Date( parseInt(task.endTime) - (!!parseInt(task.allDay) ? 86400000 : 0) ).setTimezoneOffset( Timezone.timezone( task.timezone ) ).toString( User.preferences.dateFormat ), 1130 endHour: dateCalendar.formatDate(Timezone.getDateEvent(new Date(parseInt(task.endTime)), task.timezone, obj.calendar, obj.DayLigth, 'endTime'), User.preferences.hourFormat), 1131 status: task.status, 1132 percentage: task.percentage 1133 } 1134 1135 tasks[task.id].description = tasks[task.id].startDate + ' - ' + (!!task.summary ? task.summary : task.description); 1136 1137 historic.push({'task': (!!task.summary ? task.summary : task.description) , 'historic': decodeHistoric(task)}); 1138 } 1139 1140 tasks.length = obj.taskToActivity.length; 1141 return tasks; 1142 1143 }; 1144 1145 return { 1146 "class": objEvent["class"], 1147 id: objEvent.id, 1148 location: objEvent.location, 1149 category: objEvent.category, 1150 activityStatus: objEvent.status, 1151 groups: Calendar.groups, 1152 group: objEvent.group ? objEvent.group : objEvent.calendar, 1153 summary: objEvent.summary, 1154 type: !!objEvent.type ? objEvent.type : 2, 1155 description: objEvent.description, 1156 timezone: objEvent.timezone, 1157 timezones: Timezone.timezones, 1158 percentage: (objEvent.percentage) ? objEvent.percentage : '0', 1159 priority: objEvent.priority, 1160 startDate: new Date( parseInt(objEvent.startTime) ).setTimezoneOffset( Timezone.timezone( objEvent.timezone ) ).toString( User.preferences.dateFormat ), 1161 startHour: dateCalendar.formatDate(Timezone.getDateEvent(new Date( parseInt(objEvent.startTime)), objEvent.timezone, objEvent.calendar, objEvent.DayLigth, 'startTime'), User.preferences.hourFormat), 1162 endDate: new Date( parseInt(objEvent.endTime) - (!!parseInt(objEvent.allDay) ? 86400000 : 0) ).setTimezoneOffset( Timezone.timezone( objEvent.timezone ) ).toString( User.preferences.dateFormat ), 1163 endHour: dateCalendar.formatDate(Timezone.getDateEvent(new Date(parseInt(objEvent.endTime)), objEvent.timezone, objEvent.calendar, objEvent.DayLigth, 'endTime'), User.preferences.hourFormat), 1164 dueDate: (!objEvent.due || objEvent.due == '' || objEvent.due == '0') ? '' : new Date( parseInt(objEvent.due) ).setTimezoneOffset( Timezone.timezone( objEvent.timezone ) ).toString( User.preferences.dateFormat ), 1165 dueTime: (!objEvent.due || objEvent.due == '' || objEvent.due == '0') ? '' : dateCalendar.formatDate(Timezone.getDateEvent(new Date( parseInt(objEvent.due)), objEvent.timezone, objEvent.calendar, objEvent.DayLigth, 'startTime'), User.preferences.hourFormat), 1166 allDay: !!parseInt( objEvent.allDay ), 1167 historic: historic, 1168 tasks: objEvent.taskToActivity ? decodeTasks(objEvent) : {}, 1169 attachments: $.map(objEvent.attachments || [], function( attachment, i ){ 1170 var attach = DataLayer.get('schedulableToAttachment', attachment, false); 1171 //TODO - Verificar na API retorno de id sobre os conceitos em que s?o utilizados tabelas de liga??o 1172 if(!attach.name) return(null); 1173 1174 var ext = attach.name.split('.'); 1175 attach.name = attach.name.length < 10 ? attach.name : ( ext.length == 1 ? attach.name.substr(0, 10) : (attach.name.substr(0, 6) + '.' + ext[ext.length -1])); 1176 attach.size = formatBytes(attach.size); 1177 return attach; 1178 }), 1179 me : User.me, 1180 attendee: $.map(objEvent.participants || [], function( participant, i ){ 1181 1182 var attend = DataLayer.get('participant', (participant.id || participant)); 1183 attend.user = DataLayer.get('user', attend.user); 1184 1185 return { 1186 id: attend.id, 1187 alarms : $.map(attend.alarms || [], function( alarm ){ 1188 var alarm = DataLayer.get('alarm', alarm); 1189 return (alarm == "" ? (null) : alarm); 1190 }) 1191 }; 1192 }) 1193 1194 }; 1195 }); 1196 return (notArray ? res[0] : res); 1197 } 1198 }); 597 1199 598 1200 function decodeOwnerCalendar(calendar){ … … 727 1329 id: form.idEvent, 728 1330 location: form.location, 1331 type: 1, 729 1332 category: form.category, 730 summary: form.summary ,1333 summary: form.summary == '' ? 'Evento sem título' : form.summary, 731 1334 description: form.description, 732 1335 timezone: tzId, … … 800 1403 801 1404 var pref = User.preferences; 802 803 var res = DataLayer.encode('schedulable:preview', evtObj); 1405 var res = []; 1406 1407 for(var i = 0; i < evtObj.length; i++){ 1408 res.push(DataLayer.encode('schedulable:' + (evtObj[i].type == '1' ? 'preview' : ( !!evtObj[i].taskToActivity ? 'activity': 'task')) , evtObj[i])); 1409 } 804 1410 805 1411 if( !notArray ){ … … 814 1420 815 1421 for (var i=0; i < res.length; i++) { 1422 1423 res[i].type = (res[i].type == '2' && !!res[i].tasks) ? '3' : res[i].type; 816 1424 817 1425 var startDate = Date.parseExact( res[i]['startDate'], User.preferences.dateFormat ); … … 836 1444 'endDate': new Date( occurrences[ii] + duration ).toString( User.preferences.dateFormat ) 837 1445 } ); 838 839 840 841 842 res2.repeat = typeRepeat[res[i].repeat.frequency]; 1446 1447 if(res[i].repeat) 1448 res2.repeat = typeRepeat[res[i].repeat.frequency]; 843 1449 844 1450 while (counter.compareTo( currentDate ) == 0) { … … 864 1470 865 1471 return notArray ? res[0] : res; 1472 } 1473 1474 }); 1475 1476 1477 DataLayer.codec( "schedulable", "print", { 1478 1479 decoder: function( evtObj ){ 1480 1481 }, 1482 1483 1484 encoder: function( evtObj ){ 1485 1486 if(!(!!evtObj)) 1487 evtObj = []; 1488 1489 var notArray = false; 1490 1491 if( notArray = $.type(evtObj) !== "array" ) 1492 evtObj = [ evtObj ]; 1493 1494 var pref = User.preferences; 1495 var res = []; 1496 1497 for(var i = 0; i < evtObj.length; i++){ 1498 res.push(DataLayer.encode('schedulable:' + (evtObj[i].type == '1' ? 'preview' : 'task'), evtObj[i])); 1499 } 1500 1501 if( !notArray ){ 1502 var dates = {}; 1503 1504 var typeRepeat = { 1505 'none': false, 1506 'daily': 'Repetição diária', 1507 'weekly': 'Repetição semanal', 1508 'monthly': 'Repetição mensal', 1509 'yearly': 'repetição anual' 1510 } 1511 1512 for (var i=0; i < res.length; i++) { 1513 var startDate = Date.parseExact( res[i]['startDate'], User.preferences.dateFormat ); 1514 var endDate = Date.parseExact( res[i]['endDate'], User.preferences.dateFormat ); 1515 1516 var duration = parseInt( endDate.getTime() ) - parseInt( startDate.getTime() ); 1517 1518 var occurrences = [ startDate.getTime() ]; 1519 1520 if( res[i].occurrences ) 1521 { 1522 occurrences = res[i].occurrences; 1523 } 1524 1525 for( var ii = 0; ii < occurrences.length; ii++ ) 1526 { 1527 var currentDate = new Date( occurrences[ii] ); 1528 var counter = currentDate.clone(); 1529 1530 var res2 = $.extend( {}, res[i], { 1531 'startDate': currentDate.toString( User.preferences.dateFormat ), 1532 'endDate': new Date( occurrences[ii] + duration ).toString( User.preferences.dateFormat ) 1533 }); 1534 1535 if(res[i].repeat) 1536 res2.repeat = typeRepeat[res[i].repeat.frequency]; 1537 1538 var index = dateCalendar.dayNames[counter.getDay()] +' '+counter.toString('dd/MM'); 1539 1540 if(!dates[index] || !$.isArray(dates[index].events)) 1541 dates[index] = {events: []}; 1542 1543 res2['isOneDay'] = res2.startDate == res2.endDate ? true : false; 1544 1545 dates[index].events.push(res2); 1546 1547 } 1548 } 1549 1550 var calendarView = $('#calendar').fullCalendar('getView'); 1551 var start = calendarView.start.getTime(); 1552 var end = (calendarView.end.getTime() - (calendarView.name == 'month' ? 86400000 : 0 )); 1553 var next = start; 1554 var response = []; 1555 1556 while (next){ 1557 var index = dateCalendar.dayNames[new Date(next).getDay()] +' '+ new Date(next).toString('dd/MM'); 1558 1559 var event = {}; 1560 event[index] = {events: dates[index] ? dates[index].events : false}; 1561 1562 response[response.length] = event; 1563 next = (next + 86400000) > end ? false : (next + 86400000); 1564 } 1565 res = {events: response}; 1566 } 1567 1568 return notArray ? res[0] : res; 866 1569 } 867 1570 … … 952 1655 attendee = DataLayer.get('participant', evt.participants[i]); 953 1656 if(attendee.user == User.me.id) 954 return (attendee.acl.indexOf('w') >= 0 || attendee.acl.indexOf('o') >= 0 ) ? { 1657 return (attendee.acl.indexOf('w') >= 0 || attendee.acl.indexOf('o') >= 0 ) ? 1658 { 955 1659 selectable: true, 956 1660 className: 'fullcalendar-context-menu event-id-'+idEvent+' calendar-id-'+calendar.id+ (isRecurrence ? ' isRecurrence Recurrence-id-'+Recurrence : '') … … 978 1682 return returns; 979 1683 } 980 return DataLayer.merge({ 1684 return DataLayer.merge( 1685 { 981 1686 editable: aclSignature.acl['write'] && !isRecurrence, 982 1687 disableResizing : (((aclSignature.acl['busy'] && !aclSignature.acl['write']) || (!aclSignature.acl['write'] && aclSignature.acl['read'])) ? true : false), 983 1688 disableDragging : (((aclSignature.acl['busy'] && !aclSignature.acl['write']) || (!aclSignature.acl['write'] && aclSignature.acl['read'])) ? true: false), 984 1689 className: mountClass(aclSignature.acl) 985 }, aclSignature.acl['busy'] ? { 986 title: 'Ocupado', 987 selectable: false 988 } : { 989 selectable: true 990 }); 1690 }, aclSignature.acl['busy'] ? 1691 { 1692 title: 'Ocupado', 1693 selectable: false 1694 } : { 1695 selectable: true 1696 }); 991 1697 } 992 993 1698 } 994 1699 … … 1005 1710 1006 1711 //occurrences = DataLayer.unique( occurrences ).sort(); 1007 1008 for( var i = 0; i < occurrences.length; i++ ) 1009 grouped[ evt.calendar ].push( DataLayer.merge({ 1010 id: evt.URI || evt.id+ '-' + i, 1011 title: Encoder.htmlDecode(evt.summary), 1012 start: Timezone.getDateCalendar(new Date( parseInt( occurrences[i] ) ), calendar.timezone, !!evt.DayLigth ? evt.DayLigth.calendar.startTime : Timezone.daylightSaving), 1013 end: Timezone.getDateCalendar(new Date( parseInt( occurrences[i] ) + duration - (!!parseInt(evt.allDay) ? 86400000 : 0)), calendar.timezone, !!evt.DayLigth ? evt.DayLigth.calendar.startTime : Timezone.daylightSaving), 1014 allDay: parseInt( evt.allDay ), 1015 isRepeat: isRepeat, 1016 occurrence: i, 1017 calendar: evt.calendar 1018 }, eventEditable(evt.id, isRepeat, i ) ) ); 1712 var typeEvent; 1713 for( var i = 0; i < occurrences.length; i++ ){ 1714 1715 typeEvent = (evt.type == 2 && evt.taskToActivity ? 3 : evt.type) 1716 grouped[ evt.calendar ].push( DataLayer.merge( 1717 { 1718 id: evt.URI || evt.id+ '-' + i, 1719 title: Encoder.htmlDecode(evt.summary), 1720 start: Timezone.getDateCalendar(new Date( parseInt( occurrences[i] ) ), calendar.timezone, !!evt.DayLigth ? evt.DayLigth.calendar.startTime : Timezone.daylightSaving), 1721 end: Timezone.getDateCalendar(new Date( parseInt( occurrences[i] ) + duration - (!!parseInt(evt.allDay) ? 86400000 : 0)), calendar.timezone, !!evt.DayLigth ? evt.DayLigth.calendar.startTime : Timezone.daylightSaving), 1722 allDay: parseInt( evt.allDay ), 1723 isRepeat: isRepeat, 1724 occurrence: i, 1725 type: typeEvent, 1726 calendar: evt.calendar 1727 }, (parseInt(typeEvent) == 1 ? eventEditable(evt.id, isRepeat, i ) : (parseInt(typeEvent) == 2 ? {editable: true, disableResizing: false, disableDragging: false} : {editable: false, disableResizing: true, disableDragging: true}) )) ); 1728 } 1019 1729 }); 1020 1730 … … 1049 1759 ] 1050 1760 ], 1051 ['IN', 'calendar', Calendar.calendarIds]1761 ['IN', 'calendar', $.merge( Calendar.calendarIds, Calendar.groupIds )] 1052 1762 ], 1053 1763 criteria: { -
trunk/prototype/modules/calendar/js/calendar.shared.js
r6992 r6996 1 1 function show_modal_shared(calendarId){ 2 3 var html = DataLayer.render('templates/shared_calendar.ejs', { 2 $('.qtip.qtip-blue').remove(); 3 4 var html = DataLayer.render('templates/shared_calendar.ejs', { 4 5 calendar: Calendar.calendars, 5 6 signature : Calendar.signatures … … 337 338 338 339 function show_modal_search_shared(){ 340 $('.qtip.qtip-blue').remove(); 339 341 340 342 var html = DataLayer.render('templates/shared_calendar.ejs', {}); -
trunk/prototype/modules/calendar/js/helpers.js
r6956 r6996 101 101 } 102 102 103 /* 104 function listEvents(){ 105 var list = $('.fc-header-right').find('.fc-button.fc-button-agendaDay').clone(); 103 function printNow(){ 104 105 var window_print = window.open('','ExpressoCalendar','width=800,height=600,scrollbars=yes'); 106 window_print.document.open(); 107 108 var start = $("#calendar").fullCalendar('getView').visStart.getTime()/1000; 109 var end = $("#calendar").fullCalendar('getView').visEnd.getTime()/1000; 110 var criteria = DataLayer.criteria("schedulable:calendar", {'start':start, 'end':end} ); 111 112 var data = DataLayer.get("schedulable:print", criteria); 113 114 if($("#calendar").fullCalendar('getView').name == "month"){ 115 window_print.document.write(DataLayer.render('templates/calendar_month_print.ejs', { 116 'InfoPage' : $("#calendar").fullCalendar('getView').title, 117 'days' : data 118 } )); 119 } 120 if($("#calendar").fullCalendar('getView').name == "agendaDay"){ 121 window_print.document.write(DataLayer.render('templates/calendar_day_print.ejs', { 122 'InfoPage' : $("#calendar").fullCalendar('getView').title, 123 'days' : data 124 } )); 125 } 126 if($("#calendar").fullCalendar('getView').name == "agendaWeek"){ 127 window_print.document.write(DataLayer.render('templates/calendar_week_print.ejs', { 128 'InfoPage' : $("#calendar").fullCalendar('getView').title, 129 'days' : data 130 })); 131 132 var aux = 0; 133 setTimeout(function(){$(window_print.document).find(".all-day").each(function(){ 134 if($(this).height() > aux) 135 aux = $(this).height(); 136 }); 137 $(window_print.document).find(".all-day").each(function(){ 138 $(this).height(aux); 139 }); 140 $(window_print.document).find(".all-day-line .write").height(aux); 141 aux = 0; 142 },20); 143 } 144 if($("#calendar").fullCalendar('getView').name == "year"){ 145 window_print.document.write(DataLayer.render('templates/calendar_year_print.ejs', { 146 'html' : $('#calendar .fc-content').html(), 147 'header': $('#calendar').find('.fc-header-center h2').text() 148 } )); 149 } 150 window_print.document.close(); 151 setTimeout(window_print.print(), 300); 152 } 153 154 function printEvents(){ 155 //var html = DataLayer.render( path + 'templates/attendee_permissions.ejs', {} ); 156 var print = $('.fc-header-right').find('.fc-button.fc-button-agendaDay').clone(); 157 106 158 $('.fc-header-right').find('.fc-button-year').toggleClass('fc-corner-right'); 107 list.addClass('fc-corner-right'); 108 list.addClass('fc-button-listagem'); 109 list.removeClass('fc-button-agendaDay'); 110 list.removeClass('fc-corner-left'); 111 list.find('.fc-button-content').html('Listagem'); 112 $('.fc-header-right').append(list); 113 } 114 */ 159 print.addClass('fc-corner-right'); 160 print.addClass('fc-button-print'); 161 print.removeClass('fc-button-agendaDay'); 162 print.removeClass('fc-corner-left'); 163 print.find('.fc-button-content').html('Imprimir'); 164 $('.fc-header-right').append(print); 165 $('.fc-button-print').click(function(){ 166 alert('A tela de impressão será melhor visualizada com a preferência "Paisagem" do seu browser selecionada.'); 167 printNow(); 168 }); 169 } 115 170 116 171 /* … … 122 177 function eventDetails( objEvent, decoded, path, isMail, repeat) 123 178 { 179 180 $('.qtip.qtip-blue').remove(); 181 124 182 attendees = {}; 125 183 … … 399 457 modal:true, 400 458 autoOpen: false, 401 width:70 2,459 width:701, 402 460 position: 'center', 403 461 close: function(event, ui) { … … 936 994 // load template of attendees 937 995 var blkAddAtendee = UI.dialogs.addEvent.find('#calendar_addevent_details6').append(attendeeHtml); 938 if(objEvent.attendee.length) 939 callbackAttendee(); 996 if(objEvent.attendee.length) 997 callbackAttendee(); 940 998 /** 941 942 999 Opções de delegação do participante/organizer 1000 */ 943 1001 blkAddAtendee.find(".button.participant-delegate").button({ 944 1002 icons: { … … 968 1026 969 1027 UI.dialogs.addEvent.find(".attendee-list-add .add-attendee-input input").Watermark("digite um email para convidar"); 970 /* Trata a edição de um novo participante adicionado971 * 972 1028 /* 1029 * Trata a edição de um novo participante adicionado 1030 */ 973 1031 var hasNewAttendee = false; 974 1032 … … 978 1036 979 1037 blkAddAtendee.find('.attendee-list-add .add-attendee-input input').keydown(function(event) { 980 981 1038 if (event.keyCode == '13' && $(this).val() != '' || (event.keyCode == undefined && $(this).val() != '')) { 982 1039 Encoder.EncodeType = "entity"; … … 990 1047 991 1048 /** 992 993 1049 * email válido? 1050 */ 994 1051 info.match(/^[\w!#$%&'*+\/=?^`{|}~-]+(\.[\w!#$%&'*+\/=?^`{|}~-]+)*@(([\w-]+\.)+[A-Za-z]{2,6}|\[\d{1,3}(\.\d{1,3}){3}\])$/) ? 995 1052 newAttendeeEmail = info : newAttendeeName = info; 996 1053 997 1054 /** 998 999 1000 1001 1002 1003 1004 1005 1055 * 1) busca no banco para saber se o usuário já existe 1056 * 1.1) se existe, atualiza as info na lista de participantes e nao abre o tooltip 1057 * 1.2) se não existe 1058 * a) salva como novo usuario externo no banco (apenas com email) 1059 * b) exibe tooltip pedindo o nome 1060 * c) se o usuário preenche tooltip e salva, atualiza com o nome o usuário recém criado 1061 * d) se o usuário cancela o tooltip, fica o usuário salvo apenas com email e sem nome 1062 */ 1006 1063 1007 1064 var user = DataLayer.get('user', ["=", "mail", $(this).val()]); … … 1012 1069 1013 1070 /** 1014 1015 1071 * guarda o último tooltip aberto referente à lista de participantes 1072 */ 1016 1073 lastEditAttendeeToolTip = []; 1017 1074 1018 1075 /** 1019 1020 1076 * Valida email e salva um participante externo 1077 */ 1021 1078 var saveContact = function() { 1022 1079 Encoder.EncodeType = "entity"; … … 1192 1249 $(this).val(''); 1193 1250 1194 } else if (!skipAddNewLine) { 1251 } else if (!skipAddNewLine) { 1195 1252 /** 1196 1197 1198 1253 * a) salva como novo usuario externo no banco (apenas com email) e... 1254 * adiciona novo contato externo à lista de convidados 1255 */ 1199 1256 1200 1257 userId = DataLayer.put('user', { … … 1285 1342 1286 1343 /** 1287 1288 1344 * Trata a busca de usuários para adição de participantes 1345 */ 1289 1346 blkAddAtendee.find('.add-attendee-search .ui-icon-search').click(function(event) { 1290 1347 blkAddAtendee.find('.add-attendee-search input').keydown(); … … 1374 1431 } 1375 1432 }); 1433 1376 1434 //$('.block-add-attendee .search-result-list').selectable(); 1377 1435 … … 1395 1453 }); 1396 1454 }); 1397 $('.attachment-list input').remove(); 1398 $('.row.fileupload-buttonbar .attachments-list p').remove(); 1455 $('div.new-event-win .attachment-list input').remove(); 1456 $('div.new-event-win .row.fileupload-buttonbar .attachments-list p').remove(); 1457 $('div.new-event-win .btn-danger.delete').addClass('hidden'); 1399 1458 } 1400 1459 }}); … … 1415 1474 text: false 1416 1475 }); 1417 var maxSizeFile = 2000000; 1418 $('#fileupload').fileupload({ 1419 sequentialUploads: true, 1420 add: function (e, data) { 1421 if(data.files[0].size < maxSizeFile) 1422 data.submit(); 1423 }, 1424 change: function (e, data) { 1425 $.each(data.files, function (index, file) { 1426 var attach = {}; 1427 attach.fileName = file.name; 1428 var ext = file.name.split('.'); 1429 if(file.name.length > 10) 1430 attach.fileName = ext.length == 1 ? file.name.substr(0, 10) : file.name.substr(0, 6) + '.' + ext[ext.length -1]; 1431 attach.fileSize = formatBytes(file.size); 1432 if(file.size > maxSizeFile) 1433 attach.error = 'Tamanho de arquivo nao permitido!!' 1434 1435 $('.attachments-list').append(DataLayer.render(path+'templates/attachment_add_itemlist.ejs', { 1436 file : attach 1437 })); 1438 1439 if(file.size < maxSizeFile){ 1440 $('.fileinput-button.new').append(data.fileInput[0]).removeClass('new'); 1441 $('.attachments-list').find('[type=file]').addClass('hidden'); 1442 1443 }else 1444 $('.fileinput-button.new').removeClass('new'); 1445 1446 1447 $('.attachments-list').find('.button.close').button({ 1448 icons: { 1449 primary: "ui-icon-close" 1450 }, 1451 text: false 1452 }).click(function(){ 1453 var idAttach = $(this).parent().find('input[name="fileId[]"]').val(); 1454 $('.attachment-list').find('input[value="'+idAttach+'"]') 1455 $(this).parent().remove(); 1456 }); 1457 1458 }) 1459 }, 1460 done: function(e, data){ 1461 var currentUpload = $('.progress.after-upload:first').removeClass('after-upload').addClass('on-complete').hide(); 1462 1463 if(!!data.result && data.result != "[]"){ 1464 var newAttach = (attch = jQuery.parseJSON(data.result)) ? attch : jQuery.parseJSON(data.result[0].activeElement.childNodes[0].data); 1465 $('.attachment-list').append('<input tyepe="hidden" name="attachment[]" value="'+newAttach['attachment'][0][0].id+'"/>'); 1466 currentUpload.removeClass('on-complete').parents('p') 1467 .append('<input type="hidden" name="fileId[]" value="'+newAttach['attachment'][0][0].id+'"/>') 1468 .find('.status-upload').addClass('ui-icon ui-icon-check'); 1469 }else 1470 currentUpload.removeClass('on-complete').parents('p').find('.status-upload').addClass('ui-icon ui-icon-cancel'); 1471 } 1472 }); 1473 $('.attachments-list .button').button(); 1474 1475 if(!!window.FormData) 1476 $('#fileupload').bind('fileuploadstart', function () { 1477 var widget = $(this), 1478 progressElement = $('#fileupload-progress').fadeIn(), 1479 interval = 500, 1480 total = 0, 1481 loaded = 0, 1482 loadedBefore = 0, 1483 progressTimer, 1484 progressHandler = function (e, data) { 1485 loaded = data.loaded; 1486 total = data.total; 1487 }, 1488 stopHandler = function () { 1489 widget 1490 .unbind('fileuploadprogressall', progressHandler) 1491 .unbind('fileuploadstop', stopHandler); 1492 window.clearInterval(progressTimer); 1493 progressElement.fadeOut(function () { 1494 progressElement.html(''); 1495 }); 1496 }, 1497 formatTime = function (seconds) { 1498 var date = new Date(seconds * 1000); 1499 return ('0' + date.getUTCHours()).slice(-2) + ':' + 1500 ('0' + date.getUTCMinutes()).slice(-2) + ':' + 1501 ('0' + date.getUTCSeconds()).slice(-2); 1502 }, 1503 /* formatBytes = function (bytes) { 1504 if (bytes >= 1000000000) { 1505 return (bytes / 1000000000).toFixed(2) + ' GB'; 1506 } 1507 if (bytes >= 1000000) { 1508 return (bytes / 1000000).toFixed(2) + ' MB'; 1509 } 1510 if (bytes >= 1000) { 1511 return (bytes / 1000).toFixed(2) + ' KB'; 1512 } 1513 return bytes + ' B'; 1514 },*/ 1515 formatPercentage = function (floatValue) { 1516 return (floatValue * 100).toFixed(2) + ' %'; 1517 }, 1518 updateProgressElement = function (loaded, total, bps) { 1519 progressElement.html( 1520 formatBytes(bps) + 'ps | ' + 1521 formatTime((total - loaded) / bps) + ' | ' + 1522 formatPercentage(loaded / total) + ' | ' + 1523 formatBytes(loaded) + ' / ' + formatBytes(total) 1524 ); 1525 }, 1526 intervalHandler = function () { 1527 var diff = loaded - loadedBefore; 1528 if (!diff) { 1529 return; 1530 } 1531 loadedBefore = loaded; 1532 updateProgressElement( 1533 loaded, 1534 total, 1535 diff * (1000 / interval) 1536 ); 1537 }; 1538 widget 1539 .bind('fileuploadprogressall', progressHandler) 1540 .bind('fileuploadstop', stopHandler); 1541 progressTimer = window.setInterval(intervalHandler, interval); 1542 }); 1476 1477 extendsFileupload('event', path); 1543 1478 1544 1479 if(objEvent.isShared){ … … 1557 1492 } 1558 1493 1559 disponibily(objEvent, path, attendees );1494 disponibily(objEvent, path, attendees, 'event'); 1560 1495 1561 1496 /*Seleciona a agenda padrão para criação de um evento*/ … … 1573 1508 1574 1509 UI.dialogs.addEvent.dialog('open'); 1575 //$('[href="#calendar_addevent_details7"]').trigger('click'); 1576 //$('[href="#calendar_addevent_details2"]').trigger('click'); 1510 1577 1511 } 1578 1512 … … 1691 1625 1692 1626 1693 function add_tab_configure_calendar(calendar )1627 function add_tab_configure_calendar(calendar, type) 1694 1628 { 1629 $('.qtip.qtip-blue').remove(); 1630 1695 1631 var calendars = []; 1696 1632 var signatures = []; … … 1698 1634 var calendarAlarms = []; 1699 1635 1700 for (var i=0; i<Calendar.signatures.length; i++) { 1701 calendars[i] = Calendar.signatures[i].calendar; 1702 signatures[i] = Calendar.signatures[i]; 1703 signatures[i].numberDefaultAlarm = signatures[i].defaultAlarms != '' ? signatures[i].defaultAlarms.length: 0; 1704 if (calendar && calendars[i].id == calendar) 1705 previewActiveCalendarConf = i; 1706 } 1707 1708 if(!(document.getElementById('configure_tab'))) 1636 for (var i=0; i<Calendar.signatures.length; i++) { 1637 if(parseInt(Calendar.signatures[i].calendar.type) == type){ 1638 calendars.push(Calendar.signatures[i].calendar); 1639 signatures.push(Calendar.signatures[i]); 1640 length = signatures.length - 1; 1641 signatures[length].numberDefaultAlarm = signatures[length].defaultAlarms != '' ? signatures[length].defaultAlarms.length: 0; 1642 if (calendar && calendars[length].id == calendar) 1643 previewActiveCalendarConf = length; 1644 } 1645 } 1646 var tab_selector = ['configure_tab', 'configure_tab_group']; 1647 if(!(document.getElementById(tab_selector[type]))) 1709 1648 { 1710 1649 $('.positionHelper').css('display', 'none'); 1711 1650 $('.cal-list-options-btn').removeClass('fg-menu-open ui-state-active'); 1712 var tab_title = "Configurações de agendas"; 1713 $tabs.tabs( "add", "#configure_tab", tab_title ); 1651 if(type == 0){ 1652 var tab_title = "Configurações de agendas"; 1653 }else{ 1654 var tab_title = "Configurações de Grupos"; 1655 } 1656 $tabs.tabs( "add", "#"+tab_selector[type], tab_title ); 1714 1657 1715 1658 var dataColorPicker = { … … 1734 1677 DataLayer.render( 'templates/configure_calendars_itemlist.ejs', { 1735 1678 user:User, 1679 type:0, 1736 1680 calendar:calendars[nowActive], 1737 1681 signature:signatures[nowActive] 1738 1682 }, function( form_template ){ 1739 var form_content = jQuery(' .accordion-user-calendars .ui-accordion-content').eq(nowActive).html( form_template ).find('form');1683 var form_content = jQuery('#'+tab_selector[type]+' .accordion-user-calendars .ui-accordion-content').eq(nowActive).html( form_template ).find('form'); 1740 1684 form_content.find('.preferences-alarms-list .button').button({ 1741 1685 text:false, … … 1756 1700 1757 1701 form_content.find('.button-add-alarms').click(function(){ 1758 DataLayer.render( 'templates/alarms_add_itemlist.ejs', { }, function( template ){1702 DataLayer.render( 'templates/alarms_add_itemlist.ejs', {type: 0}, function( template ){ 1759 1703 jQuery('.preferences-alarms-list').append(template) 1760 1704 .find('li:last label:eq(0)').remove().end() … … 1862 1806 DataLayer.render( 'templates/configure_calendars.ejs', { 1863 1807 user:User, 1808 type: 0, 1864 1809 calendars:calendars, 1865 1810 signatures:signatures 1866 1811 }, function( template ){ 1867 var template_content = jQuery('# configure_tab').html( template ).find('.configure-calendars-win');1812 var template_content = jQuery('#'+tab_selector[type]).html( template ).find('.configure-calendars-win'); 1868 1813 template_content.find('.button').button().filter('.save').click(function(evt){ 1869 1814 if(calendarAlarms.length) 1870 1815 DataLayer.removeFilter('calendarSignatureAlarm', {filter: ['IN','id', calendarAlarms]}); 1871 1816 template_content.find('form').submit(); 1872 $tabs.tabs( "remove", "# configure_tab");1817 $tabs.tabs( "remove", "#"+tab_selector[type]); 1873 1818 DataLayer.commit( false, false, function( received ){ 1874 1819 delete Calendar.currentViewKey; … … 1879 1824 Calendar.load(); 1880 1825 }).end().filter('.cancel').click(function(evt){ 1881 $tabs.tabs( "remove", "# configure_tab");1826 $tabs.tabs( "remove", "#"+tab_selector[type]); 1882 1827 }); 1883 1828 … … 1905 1850 $('.positionHelper').css('display','none'); 1906 1851 $('.cal-list-options-btn').removeClass('fg-menu-open ui-state-active'); 1907 $tabs.tabs("select", "# configure_tab");1852 $tabs.tabs("select", "#"+tab_selector[type]); 1908 1853 $('.accordion-user-calendars').accordion( "activate" , previewActiveCalendarConf ); 1909 1854 … … 1913 1858 } 1914 1859 1915 function getSelectedCalendars( reverse ){ 1860 function getSelectedCalendars( reverse, type ){ 1861 var selector = ""; 1862 if(type == 0) 1863 selector = ".my-calendars"; 1864 if(type == 1) 1865 selector = ".my-groups-task"; 1916 1866 var selecteds = {}; 1917 1867 var cont = 0; 1918 1868 jQuery(function() { 1919 jQuery( ".my-calendars.calendar-view").each(function(i, obj) {1869 jQuery(selector+" .calendar-view").each(function(i, obj) { 1920 1870 var check_box = obj; 1921 1871 if( reverse ? !check_box.checked : check_box.checked ) { … … 1975 1925 1976 1926 function remove_event(eventId, idCalendar){ 1977 $.Zebra_Dialog('Tem certeza que deseja excluir o evento?', {1927 $.Zebra_Dialog('Tem certeza que deseja excluir?', { 1978 1928 'type': 'question', 1979 1929 'overlay_opacity': '0.5', … … 2029 1979 2030 1980 2031 function remove_calendar( ){1981 function remove_calendar(type){ 2032 1982 /* Pode ser assim $('.cal-list-options-btn.ui-state-active').attr('class').replace(/[a-zA-Z-]+/g, ''); */ 2033 $.Zebra_Dialog('Todos os eventos desta agenda serão removidos. Deseja prosseguir com a operação?', { 1983 if(!!parseInt(type)) 1984 var title = 'Todas as tarefas deste grupo serão removidas. Deseja prosseguir com a operação?'; 1985 else 1986 var title = 'Todos os eventos desta agenda serão removidos. Deseja prosseguir com a operação?'; 1987 $.Zebra_Dialog(title, { 2034 1988 'type': 'question', 2035 1989 'overlay_opacity': '0.5', … … 2047 2001 delete Calendar.currentViewKey; 2048 2002 Calendar.load(); 2049 refresh_calendars( );2003 refresh_calendars(type); 2050 2004 }); 2051 2005 } … … 2056 2010 } 2057 2011 2058 function refresh_calendars( ){2012 function refresh_calendars(type){ 2059 2013 2060 2014 var colorsSuggestions = colors_suggestions(); … … 2091 2045 }); 2092 2046 } 2047 2093 2048 doMenu(); 2049 var currentToolTip = null; 2094 2050 $('#divAppbox').on('scroll',function(){ 2095 2051 if ($('.cal-list-options-btn.fg-menu-open.ui-state-active')){ 2096 2052 var offset = $('.cal-list-options-btn.fg-menu-open.ui-state-active').offset(); 2097 2053 if (offset) 2098 2054 $('.positionHelper').css('top',offset.top); 2099 2055 } 2056 2100 2057 if ($('.button.config-menu.fg-menu-open')){ 2101 2058 var offset = $('.button.config-menu.fg-menu-open').offset(); 2102 2059 if (offset) 2103 2060 $('.positionHelper').css('top',offset.top); 2104 2061 } 2062 2063 2064 if ($(".new-group.qtip-active").length || $(".new-calendar.qtip-active").length) 2065 $('.qtip-active').css('top',currentToolTip.offset().top - 50); 2066 2105 2067 }); 2068 2106 2069 $('ul.list-calendars .cal-list-options-btn').on('click',function(){doMenu();}); 2107 2070 2071 2072 /***************************************New Calendar***************************************/ 2108 2073 meu_container.find(".button.new-calendar").button({ 2109 2074 icons: { … … 2112 2077 text: false 2113 2078 }).click(function () { 2114 2115 if( $('.qtip.qtip-blue.qtip-active').val() !== ''){ 2116 $(this).qtip({ 2117 show: { 2118 ready: true, 2119 solo: true, 2120 when: { 2121 event: 'click' 2122 } 2123 }, 2124 hide: false, 2125 content: { 2126 text: $('<div></div>').html( DataLayer.render( 'templates/calendar_quick_add.ejs', {} ) ), 2127 title: { 2128 text:'Nova Agenda', 2129 button: '<a class="button close" href="#">close</a>' 2130 } 2131 }, 2132 style: { 2133 name: 'blue', 2134 tip: { 2135 corner: 'leftMiddle' 2136 }, 2137 border: { 2138 width: 4, 2139 radius: 8 2140 }, 2141 width: { 2142 min: 230, 2143 max:230 2144 } 2145 }, 2146 position: { 2147 corner: { 2148 target: 'rightMiddle', 2149 tooltip: 'leftMiddle' 2150 }, 2151 adjust: { 2152 x:0, 2153 y:-12 2154 } 2155 } 2156 }) 2157 .qtip("api").onShow = function(arg0) { 2158 $('.qtip-active .button.close').button({ 2159 icons: { 2160 primary: "ui-icon-close" 2161 }, 2162 text: false 2163 }) 2164 .click(function(){ 2165 meu_container.find(".button.new-calendar").qtip('destroy'); 2166 }); 2167 //TODO emplementar tratamento de duplicação de valores no location 2168 $('.qtip-active .button.save').button().click(function(){ 2169 for(var i = 0; i < Calendar.calendars.length; i++){ 2170 if(Calendar.calendars[i].location == ( User.me.uid + '/' + $('.qtip-active input').val())){ 2171 $.Zebra_Dialog('O nome desta agenda já está sendo utilizada em uma Url de outra agenda. Por favor, informe outro nome para agenda.',{ 2172 'overlay_opacity': '0.5', 2173 'type': 'warning' 2174 }); 2175 meu_container.find(".button.new").qtip('destroy'); 2176 return; 2177 } 2178 } 2079 currentToolTip = $(this); 2080 var typeCalendar = !!parseInt($(this).attr('class').match(/[0-9]+/g)) ? 2081 {type: 'new-group', title: 'Novo Grupo', typeValue: 1, prompt: 'Nome do grupo'} : 2082 {type: 'new-calendar', title: 'Nova Agenda', typeValue: 0, prompt: 'Nome da agenda'} 2083 2084 if(!$('.qtip.qtip-blue.qtip-active.'+typeCalendar.type).length){ 2085 2086 $('.qtip.qtip-blue').remove(); 2087 2088 $(this).qtip({ 2089 show: { 2090 ready: true, 2091 solo: true, 2092 when: { 2093 event: 'click' 2094 } 2095 }, 2096 hide: false, 2097 content: { 2098 text: $('<div></div>').html( DataLayer.render( 'templates/calendar_quick_add.ejs', {} ) ), 2099 title: { 2100 text: typeCalendar.title, 2101 button: '<a class="button close" href="#">close</a>' 2102 } 2103 }, 2104 style: { 2105 name: 'blue', 2106 tip: { 2107 corner: 'leftMiddle' 2108 }, 2109 border: { 2110 width: 4, 2111 radius: 8 2112 }, 2113 width: { 2114 min: 230, 2115 max:230 2116 } 2117 }, 2118 position: { 2119 corner: { 2120 target: 'rightMiddle', 2121 tooltip: 'leftMiddle' 2122 }, 2123 adjust: { 2124 x:0, 2125 y: -12 2126 2127 } 2128 } 2129 }) 2130 .qtip("api").onShow = function(arg0) { 2179 2131 2180 var selected; 2181 var color = $('.cal-colors-options-btn').each(function(index){ 2182 if ($(this).is('.color-selected')) 2183 selected = index; 2184 }); 2185 DataLayer.put( "calendarSignature", { 2186 user: User.me.id, 2187 calendar: { 2188 name: Encoder.htmlEncode($('.qtip-active input').val()), 2189 timezone: User.preferences.timezone 2190 }, 2191 isOwner: 1, 2192 fontColor: colorsSuggestions[selected]['font'].substring(1) , 2193 backgroundColor: colorsSuggestions[selected]['background'].substring(1) , 2194 borderColor: colorsSuggestions[selected]['border'].substring(1) 2195 }); 2196 DataLayer.commit( false, false, function( received ){ 2197 delete Calendar.currentViewKey; 2198 Calendar.load(); 2199 refresh_calendars(); 2200 }); 2201 meu_container.find(".button.new").qtip('destroy'); 2202 }); 2203 2204 $('.qtip-active .button.cancel').button().click(function(){ 2205 meu_container.find(".button.new").qtip('destroy'); 2206 }); 2207 2208 $(".qtip-active input").Watermark("Nome da agenda"); 2209 2210 $('.qtip-active').keydown(function(event) { 2211 if (event.keyCode == '27') { 2212 meu_container.find(".button.new").qtip('destroy'); 2213 } 2214 }); 2215 2216 $('.colors-options').prepend(buttons_colors); 2217 $('.colors-options .signed-cal-colors-options-btn-0').addClass('color-selected'); 2218 2219 var buttons = $('.cal-colors-options-btn').button(); 2220 2221 buttons.click(function(){ 2222 buttons.removeClass('color-selected'); 2223 $(this).addClass('color-selected'); 2224 }); 2225 } 2226 } 2132 $('.qtip-active .button.close').button({ 2133 icons: { 2134 primary: "ui-icon-close" 2135 }, 2136 text: false 2137 }) 2138 .click(function(){ 2139 $('.qtip.qtip-blue').remove(); 2140 }); 2141 2142 $('.qtip-active').addClass(typeCalendar.type); 2143 2144 $('.qtip-active .button.save').button().click(function(){ 2145 if(!typeCalendar.typeValue) 2146 for(var i = 0; i < Calendar.calendars.length; i++){ 2147 if(Calendar.calendars[i].location == ( User.me.uid + '/' + $('.qtip-active input').val())){ 2148 $.Zebra_Dialog('O nome desta agenda já está sendo utilizada em uma Url de outra agenda. Por favor, informe outro nome para agenda.',{ 2149 'overlay_opacity': '0.5', 2150 'type': 'warning' 2151 }); 2152 $('.qtip.qtip-blue').remove(); 2153 return; 2154 } 2155 } 2156 2157 var selected; 2158 var color = $('.cal-colors-options-btn').each(function(index){ 2159 if ($(this).is('.color-selected')) 2160 selected = index; 2161 }); 2162 DataLayer.put( "calendarSignature", { 2163 user: User.me.id, 2164 calendar: { 2165 name: Encoder.htmlEncode($('.qtip-active input').val()), 2166 timezone: User.preferences.timezone, 2167 type: typeCalendar.typeValue 2168 }, 2169 isOwner: 1, 2170 fontColor: colorsSuggestions[selected]['font'].substring(1) , 2171 backgroundColor: colorsSuggestions[selected]['background'].substring(1) , 2172 borderColor: colorsSuggestions[selected]['border'].substring(1) 2173 }); 2174 DataLayer.commit( false, false, function( received ){ 2175 delete Calendar.currentViewKey; 2176 Calendar.load(); 2177 refresh_calendars(); 2178 }); 2179 $('.qtip.qtip-blue').remove(); 2180 }); 2181 2182 $('.qtip-active .button.cancel').button().click(function(){ 2183 meu_container.find(".button.new").qtip('destroy'); 2184 }); 2185 2186 $(".qtip-active input").Watermark(typeCalendar.prompt); 2187 2188 $('.qtip-active').keydown(function(event) { 2189 if (event.keyCode == '27') 2190 meu_container.find(".button.new").qtip('destroy'); 2191 }); 2192 2193 $('.colors-options').prepend(buttons_colors); 2194 $('.colors-options .signed-cal-colors-options-btn-0').addClass('color-selected'); 2195 2196 var buttons = $('.cal-colors-options-btn').button(); 2197 2198 buttons.click(function(){ 2199 buttons.removeClass('color-selected'); 2200 $(this).addClass('color-selected'); 2201 }); 2202 } 2203 } 2227 2204 }); 2228 2205 2229 2206 $("img.cal-list-img").click(function(evt) { 2230 $(".cal-list-options_1").toggleClass( "hidden" );2207 $(".cal-list-options_1").toggleClass( "hidden" ); 2231 2208 }); 2232 2209 2210 $(".my-groups-task a.title-my-calendars").click(function() { 2211 $(".my-groups-task ul.my-list-calendars").toggleClass("hidden") 2212 $('.my-groups-task .status-list').toggleClass("ui-icon-triangle-1-s"); 2213 $('.my-groups-task .status-list').toggleClass("ui-icon-triangle-1-e"); 2214 }); 2215 2233 2216 $(".my-calendars a.title-my-calendars").click(function() { 2234 $(".my-calendars ul.my-list-calendars").toggleClass("hidden")2235 $('.my-calendars .status-list').toggleClass("ui-icon-triangle-1-s");2236 $('.my-calendars .status-list').toggleClass("ui-icon-triangle-1-e");2217 $(".my-calendars ul.my-list-calendars").toggleClass("hidden") 2218 $('.my-calendars .status-list').toggleClass("ui-icon-triangle-1-s"); 2219 $('.my-calendars .status-list').toggleClass("ui-icon-triangle-1-e"); 2237 2220 }); 2238 2221 2239 2222 $(".signed-calendars a.title-signed-calendars").click(function() { 2240 $(".signed-calendars ul.signed-list-calendars").toggleClass( "hidden");2223 $(".signed-calendars ul.signed-list-calendars").toggleClass( "hidden"); 2241 2224 }); 2242 2225 … … 2270 2253 2271 2254 $('.calendar-view').click(function(evt){ 2272 if($tabs.tabs('option' ,'selected') == 1){2273 pageselectCallback('', 0 );2255 if($tabs.tabs('option' ,'selected') != 0){ 2256 pageselectCallback('', 0, false, type); 2274 2257 } 2275 2258 … … 2285 2268 } 2286 2269 2287 function add_events_list(keyword )2270 function add_events_list(keyword, type) 2288 2271 { 2289 2272 var tab_title = ""; 2290 2273 if (keyword){ 2291 if(keyword.length < 10) 2292 tab_title = keyword; 2293 else 2294 tab_title = keyword.substr(0,10) + '..."'; 2274 type = 2; 2275 if(keyword.length < 10) 2276 tab_title = keyword; 2277 else 2278 tab_title = keyword.substr(0,10) + '..."'; 2295 2279 }else{ 2296 tab_title = "Lista de eventos"; 2297 } 2280 if(type){ 2281 if(!!parseInt(type)) 2282 tab_title = "Lista de tarefas"; 2283 else 2284 tab_title = "Lista de eventos"; 2285 } 2286 } 2287 var tab_selector = ['tab_events_list_', 'tab_tasks_list_', 'tab_all_list_']; 2298 2288 keyword = ( keyword || '' ).replace( /\s+/g, "_" ); 2299 2289 2300 if(!(document.getElementById( 'tab_events_list_'+ (Base64.encode(keyword)).replace(/[^\w\s]/gi, "") )))2290 if(!(document.getElementById(tab_selector[type] + (Base64.encode(keyword)).replace(/[^\w\s]/gi, "") ))) 2301 2291 { 2302 2292 Encoder.EncodeType = "entity"; 2303 $tabs.tabs( "add", "# tab_events_list_"+ (Base64.encode(keyword)).replace(/[^\w\s]/gi, ""), Encoder.htmlEncode(tab_title) );2293 $tabs.tabs( "add", "#"+tab_selector[type] + (Base64.encode(keyword)).replace(/[^\w\s]/gi, ""), Encoder.htmlEncode(tab_title) ); 2304 2294 } 2305 2295 else /* Tab already opened */ 2306 2296 { 2307 $tabs.tabs("option", "selected", 2);2308 2309 2310 pageselectCallback(keyword, 0 ); // load page 1 and insert data on event_list.ejs2297 //$tabs.tabs("option", "selected", 2); 2298 } 2299 2300 pageselectCallback(keyword, 0, false, type); // load page 1 and insert data on event_list.ejs 2311 2301 2312 2302 $('.preferences-win.active .button.save, .preferences-win.active .button.cancel, .preferences-win.active .button.import, .preferences-win.active .button.export').button(); … … 2328 2318 if(paginator.indexOf('next') > 0){ 2329 2319 if(parseInt($(currentView+' [name = results]').val()) > 25) 2330 pageselectCallback($(currentView+' [name = keyword]').val(), ((parseInt($(currentView+' [name = page_index]').val())) +1) );2320 pageselectCallback($(currentView+' [name = keyword]').val(), ((parseInt($(currentView+' [name = page_index]').val())) +1), false, 2); 2331 2321 }else{ 2332 2322 if(parseInt($(currentView+' [name = page_index]').val()) > 0) 2333 pageselectCallback($(currentView+' [name = keyword]').val(), ((parseInt($(currentView+' [name = page_index]').val())) -1) );2323 pageselectCallback($(currentView+' [name = keyword]').val(), ((parseInt($(currentView+' [name = page_index]').val())) -1), false, 2); 2334 2324 } 2335 2325 }); … … 2369 2359 } 2370 2360 2371 function paginatorList(currentView, view ){2372 $(currentView+' .events-list.events-list-win.active .list-events-paginator .fc-header-title').html('<h2>'+mountTitleList( parseInt($( '[name = page_index]').val()),view)+'</h2>');2361 function paginatorList(currentView, view, type){ 2362 $(currentView+' .events-list.events-list-win.active .list-events-paginator .fc-header-title').html('<h2>'+mountTitleList( parseInt($(currentView+' [name = page_index]').val()),view)+'</h2>'); 2373 2363 $(currentView+' .events-list.events-list-win.active .header-paginator .fc-header-right .fc-button').removeClass('fc-state-active') 2374 2364 if(view == 'basicDay') … … 2390 2380 var goView = $(this).attr('class'); 2391 2381 if(goView.indexOf('agendaDay') > 0) 2392 pageselectCallback($(currentView+' [name = keyword]').val(), 0, ' ', 'agendaDay');2382 pageselectCallback($(currentView+' [name = keyword]').val(), 0, 'agendaDay', type); 2393 2383 else if(goView.indexOf('month') > 0) 2394 pageselectCallback($(currentView+' [name = keyword]').val(), 0, ' ', 'month');2384 pageselectCallback($(currentView+' [name = keyword]').val(), 0, 'month', type); 2395 2385 else if(goView.indexOf('year') > 0) 2396 pageselectCallback($(currentView+' [name = keyword]').val(), 0, ' ', 'year');2386 pageselectCallback($(currentView+' [name = keyword]').val(), 0, 'year', type); 2397 2387 else if(goView.indexOf('agendaWeek') > 0) 2398 pageselectCallback($(currentView+' [name = keyword]').val(), 0, ' ', 'agendaWeek');2388 pageselectCallback($(currentView+' [name = keyword]').val(), 0, 'agendaWeek', type); 2399 2389 2400 2390 }); … … 2412 2402 var paginator = $(this).attr('class'); 2413 2403 if(paginator.indexOf('next') > 0) 2414 pageselectCallback($(currentView+' [name = keyword]').val(), ((parseInt($( '[name = page_index]').val())) +1), '', view);2404 pageselectCallback($(currentView+' [name = keyword]').val(), ((parseInt($(currentView+' [name = page_index]').val())) +1), view, type); 2415 2405 else 2416 pageselectCallback($(currentView+' [name = keyword]').val(), ((parseInt($( '[name = page_index]').val())) -1), '', view);2406 pageselectCallback($(currentView+' [name = keyword]').val(), ((parseInt($(currentView+' [name = page_index]').val())) -1), view, type); 2417 2407 }); 2418 2408 } 2419 2409 2420 function paginatorListEvent(currentView, typeView, view){ 2410 function printEventList(view){ 2411 $('.fc-button-print.print-list-events').click(function(){ 2412 var window_print = window.open('','ExpressoCalendar','width=800,height=600,scrollbars=yes'); 2413 var listEvents = $(view).clone(); 2414 listEvents.find('.fc-button').remove(); 2415 listEvents.find('.details-event-list').remove(); 2416 listEvents.find('.list-events-paginator').attr( "align" , "center" ); 2417 listEvents = listEvents.html(); 2418 type = $(this).parents('.ui-tabs-panel').attr("id").split("_")[1]; 2419 var data = { 2420 type : type == "tasks" ? "task-list" : ( type == "events" ? "event-list" : "search"), 2421 html : listEvents 2422 } 2423 window_print.document.open(); 2424 window_print.document.write(DataLayer.render('templates/calendar_list_print.ejs', data)); 2425 window_print.document.close(); 2426 window_print.print(); 2427 }); 2428 } 2429 2430 function paginatorListEvent(currentView, typeView, view, type){ 2421 2431 if(!!$(currentView).find('.fc-calendar').length) 2422 2432 return; … … 2430 2440 $(currentView+' .events-list.events-list-win.active .fc-header .fc-header-center').addClass('list-events-paginator'); 2431 2441 $(currentView+' .events-list.events-list-win.active .fc-header .list-events-paginator').removeClass('fc-header-center'); 2432 2442 2433 2443 //Adicionar class no header padronizar com a tela principal 2434 $(currentView+' .events-list.events-list-win.active .fc-header').addClass('header-paginator'); 2435 $(currentView+' .events-list.events-list-win.active .header-paginator').removeClass('fc-header'); 2436 2444 $(currentView+' .events-list.events-list-win.active .fc-header .fc-button-print').addClass('print-list-events'); 2445 $(currentView+' .events-list.events-list-win.active .fc-header').addClass('header-paginator'); 2446 $(currentView+' .events-list.events-list-win.active .header-paginator').removeClass('fc-header'); 2447 2448 printEventList(currentView); 2449 2437 2450 if(typeView == 'search'){ 2438 $(currentView+' .events-list.events-list-win.active .header-paginator .fc-header-right ').remove()2451 $(currentView+' .events-list.events-list-win.active .header-paginator .fc-header-right span.fc-button:not(.fc-button-print)').remove(); 2439 2452 $(currentView+' .events-list.events-list-win.active .list-events-paginator .fc-header-title').html('<h2>Resultados para: '+$(currentView+' [name = keyword]').val()+'</h2>'); 2440 2453 if((parseInt($(currentView+' [name = page_index]').val()) == 0) && (parseInt($(currentView+' [name = results]').val()) <= 25)) … … 2442 2455 paginatorSearch(currentView); 2443 2456 }else 2444 paginatorList(currentView, view );2457 paginatorList(currentView, view, type); 2445 2458 } 2446 2459 … … 2450 2463 case 'basicDay': 2451 2464 case 'agendaDay': 2452 rangeStart = new Date ().add({2465 rangeStart = new Date.today().add({ 2453 2466 days: page_index 2454 2467 }).getTime(); 2455 rangeEnd = rangeStart ;2468 rangeEnd = rangeStart + 86400000; 2456 2469 break; 2457 2470 case 'agendaWeek': … … 2519 2532 } 2520 2533 2521 function pageselectCallback(keyword, page_index, jq, view){ 2522 2523 var selecteds = getSelectedCalendars(); 2524 if(!selecteds && (keyword != '' && keyword != null)){ 2525 jQuery('#tab_events_list_' + ((Base64.encode(keyword)).replace(/[^\w\s]/gi, "")|| '')).html( 2526 '<div title="Lista de eventos" class="events-list events-list-win active empty">' + 2527 '<label>Por favor selecione ao menos uma agenda.</label>' + 2534 function pageselectCallback(keyword, page_index, view, type){ 2535 $('.qtip.qtip-blue').remove(); 2536 var tab_selector = ['tab_events_list_', 'tab_tasks_list_', 'tab_all_list_']; 2537 var tab_title = ['Lista de eventos', 'Lista de tarefas']; 2538 var label_noselect_calendar = ['Por favor selecione ao menos uma agenda.', 'Por favor selecione ao menos um grupo.', 'Por favor selecione ao menos uma agenda ou grupo.']; 2539 var label_nofound_search = ['Não foi encontrado nenhum evento correspondente à sua pesquisa.', 'Não foi encontrado nenhuma tarefa ou atividade correspondente à sua pesquisa.', 'Não foi encontrado nenhum evento ou tarefa ou atividade correspondente à sua pesquisa.']; 2540 var label_nofound = ['Não foram encontrados eventos neste intervalo.', 'Não foram encontradas tarefas ou atividades neste intervalo.', 'Não foram encontrados eventos ou tarefas ou atividades neste intervalo.']; 2541 var selecteds = getSelectedCalendars(false, type); 2542 2543 if(!selecteds && (keyword != '' && keyword != null)){ 2544 jQuery('#'+tab_selector[type] + ((Base64.encode(keyword)).replace(/[^\w\s]/gi, "")|| '')).html( 2545 '<div title="'+tab_title[type]+'" class="events-list events-list-win active empty">' + 2546 '<label>'+label_noselect_calendar[type]+'</label>' + 2528 2547 '</div>' 2529 2548 ); … … 2545 2564 var results = DataLayer.get('schedulable:detail', criteria); 2546 2565 keyword = ( keyword || '' ).replace( /\s+/g, "_" ); 2547 }2566 } 2548 2567 // não há resultados 2549 2568 2550 var currentView = '# tab_events_list_'+ ((Base64.encode(keyword)).replace(/[^\w\s]/gi, "") || '');2569 var currentView = '#'+tab_selector[type] + ((Base64.encode(keyword)).replace(/[^\w\s]/gi, "") || ''); 2551 2570 2552 2571 if ((((typeof(results) == 'undefined') || (!results.events_list )) && selecteds) &&(keyword != '' && keyword != null)) { 2553 2572 $(currentView).html( 2554 '<div title=" Lista de eventos" class="events-list events-list-win active empty">' +2555 '<label> Não foi encontrado nenhum evento correspondente à sua pesquisa.</label>' +2573 '<div title="'+title+'" class="events-list events-list-win active empty">' + 2574 '<label>'+label_nofound_search[type]+'</label>' + 2556 2575 '</div>' 2557 2576 ); … … 2561 2580 results['page_index'] = page_index; 2562 2581 results['keyword'] = keyword; 2563 2582 results['tab_title'] = tab_title[type]; 2564 2583 DataLayer.render( 'templates/event_list.ejs', results, function( html ){ 2565 2584 … … 2567 2586 $('.events-list-win .menu-container .button').button(); 2568 2587 2569 $(".event-details-item").parent().click(function( ){2570 2588 $(".event-details-item").parent().click(function(event){ 2589 event.stopImmediatePropagation(); 2571 2590 $(this).siblings("div.details-event-list").toggleClass("hidden") 2572 .find('.button.delete').click(function( ){2591 .find('.button.delete').click(function(event){ 2573 2592 var eventId = $(this).siblings('[name="eventid"]').val(); 2574 2593 var calendarId = $(this).siblings('[name="calendarid"]').val(); 2575 2576 2594 remove_event(eventId, calendarId); 2595 event.stopImmediatePropagation() 2577 2596 }) 2578 .end().find('.button.edit').click(function(){ 2579 eventDetails( DataLayer.get( "schedulable", $(this).siblings('[name="eventid"]').val() ), true ); 2597 .end().find('.button.edit').click(function(event){ 2598 if($(this).siblings('[name="eventtype"]').val() == 1) 2599 eventDetails( DataLayer.get( "schedulable", $(this).siblings('[name="eventid"]').val() ), true ); 2600 else 2601 taskDetails( DataLayer.get( "schedulable", $(this).siblings('[name="eventid"]').val() ), true ); 2602 2603 event.stopImmediatePropagation() 2604 }) 2605 .end().find('.button.print').click(function(event){ 2606 var window_print = window.open('','ExpressoCalendar','width=800,height=600,scrollbars=yes'); 2607 var html = $(this).parents("td:first").clone(); 2608 html.find(".menu-container.footer-container").remove(); 2609 var html = html.html(); 2610 var data = { 2611 type : $(this).parents('.details-event-list').hasClass("details-event") ? "event-detail" : "task-detail", 2612 html : html 2613 } 2614 window_print.document.open(); 2615 window_print.document.write(DataLayer.render('templates/calendar_list_print.ejs', data)); 2616 window_print.document.close(); 2617 window_print.print(); 2618 2619 event.stopImmediatePropagation() 2580 2620 }); 2581 2621 2582 2622 }); 2583 paginatorListEvent(currentView, (keyword == '' || keyword == null) ? 'list' : 'search', !!view ? view : User.preferences.defaultCalView );2623 paginatorListEvent(currentView, (keyword == '' || keyword == null) ? 'list' : 'search', !!view ? view : User.preferences.defaultCalView, type); 2584 2624 }); 2585 2625 }else{ 2586 2626 $(currentView).html( 2587 '<div title=" Lista de eventos" class="events-list events-list-win active empty">' +2627 '<div title="'+title+'" class="events-list events-list-win active empty">' + 2588 2628 '<input type="hidden" name="page_index" value="'+page_index+'"></inpunt>'+ 2589 2629 '<input type="hidden" name="keyword" value="'+keyword+'"></inpunt>'+ 2590 '<label class="empty-result"> Não foram encontrados eventos neste intervalo.</label>' +2630 '<label class="empty-result">'+label_nofound[type]+'</label>' + 2591 2631 '</div>' 2592 2632 ); 2593 paginatorListEvent(currentView, 'list', !!view ? view : User.preferences.defaultCalView );2594 } 2595 } 2596 if(currentView != '# tab_events_list_')2633 paginatorListEvent(currentView, 'list', !!view ? view : User.preferences.defaultCalView, type); 2634 } 2635 } 2636 if(currentView != '#'+tab_selector[type]) 2597 2637 $tabs.tabs("select", currentView); 2598 2638 } 2599 2639 2600 function show_modal_import_export(tab, calendarId) { 2640 function show_modal_import_export(tab, calendarId, typeView){ 2641 $('.qtip.qtip-blue').remove(); 2601 2642 DataLayer.render( 'templates/import_export.ejs', { 2602 calendars: Calendar.calendars, 2603 owner: User.me.id 2643 calendars: typeView == 0 ? Calendar.calendars : Calendar.groups, 2644 owner: User.me.id, 2645 typeView: typeView 2604 2646 }, function( html ){ 2605 2647 2606 2648 if (!UI.dialogs.importCalendar) { 2607 2649 UI.dialogs.importCalendar = jQuery('#div-import-export-calendar') 2608 .append('<div title="Importar e Exportar Eventos" class="import-export import-export-win active"> <div>')2650 .append('<div title="Importar e Exportar "' + (typeView == 0 ? 'Eventos' : 'Tarefas') + '" class="import-export import-export-win active"> <div>') 2609 2651 .find('.import-export-win.active').html(html).dialog({ 2610 2652 resizable: false, … … 2831 2873 } 2832 2874 } 2875 2876 function extendsFileupload(view, path){ 2877 var viewName = 'div.new-'+view+'-win'; 2878 2879 path = !!path ? path : ''; 2880 2881 var maxSizeFile = 2000000; 2882 $('#fileupload'+view).fileupload({ 2883 sequentialUploads: true, 2884 add: function (e, data) { 2885 if(data.files[0].size < maxSizeFile) 2886 data.submit(); 2887 }, 2888 change: function (e, data) { 2889 $.each(data.files, function (index, file) { 2890 var attach = {}; 2891 attach.fileName = file.name; 2892 var ext = file.name.split('.'); 2893 if(file.name.length > 10) 2894 attach.fileName = ext.length == 1 ? file.name.substr(0, 10) : file.name.substr(0, 6) + '.' + ext[ext.length -1]; 2895 attach.fileSize = formatBytes(file.size); 2896 if(file.size > maxSizeFile) 2897 attach.error = 'Tamanho de arquivo nao permitido!!' 2898 2899 $(viewName+' .attachments-list').append(DataLayer.render(path+'templates/attachment_add_itemlist.ejs', { 2900 file : attach 2901 })); 2902 2903 if(file.size < maxSizeFile){ 2904 $(viewName+' .fileinput-button.new').append(data.fileInput[0]).removeClass('new'); 2905 $(viewName+' .attachments-list').find('[type=file]').addClass('hidden'); 2906 2907 }else 2908 $(viewName+' .fileinput-button.new').removeClass('new'); 2909 2910 2911 $(viewName+' .attachments-list').find('.button.close').button({ 2912 icons: { 2913 primary: "ui-icon-close" 2914 }, 2915 text: false 2916 }).click(function(){ 2917 var idAttach = $(this).parent().find('input[name="fileId[]"]').val(); 2918 $(viewName+' .attachment-list').find('input[value="'+idAttach+'"]').remove(); 2919 $(this).parent().remove(); 2920 2921 if(!$(viewName+' .attachment-list input').length) 2922 $(viewName+' .btn-danger.delete').addClass('hidden'); 2923 2924 }); 2925 2926 }) 2927 }, 2928 done: function(e, data){ 2929 var currentUpload = $(viewName+' .progress.after-upload:first').removeClass('after-upload').addClass('on-complete').hide(); 2930 2931 if(!!data.result && data.result != "[]"){ 2932 $(viewName+' .btn-danger.delete').removeClass('hidden'); 2933 var newAttach = (attch = jQuery.parseJSON(data.result)) ? attch : jQuery.parseJSON(data.result[0].activeElement.childNodes[0].data); 2934 $(viewName+' .attachment-list').append('<input tyepe="hidden" name="attachment[]" value="'+newAttach['attachment'][0][0].id+'"/>'); 2935 currentUpload.removeClass('on-complete').parents('p') 2936 .append('<input type="hidden" name="fileId[]" value="'+newAttach['attachment'][0][0].id+'"/>') 2937 .find('.status-upload').addClass('ui-icon ui-icon-check'); 2938 }else 2939 currentUpload.removeClass('on-complete').parents('p').find('.status-upload').addClass('ui-icon ui-icon-cancel'); 2940 } 2941 }); 2942 $('.attachments-list .button').button(); 2943 2944 if(!!window.FormData) 2945 $('#fileupload'+view).bind('fileuploadstart', function () { 2946 var widget = $(this), 2947 progressElement = $('#fileupload-progress-'+view).fadeIn(), 2948 interval = 500, 2949 total = 0, 2950 loaded = 0, 2951 loadedBefore = 0, 2952 progressTimer, 2953 progressHandler = function (e, data) { 2954 loaded = data.loaded; 2955 total = data.total; 2956 }, 2957 stopHandler = function () { 2958 widget 2959 .unbind('fileuploadprogressall', progressHandler) 2960 .unbind('fileuploadstop', stopHandler); 2961 window.clearInterval(progressTimer); 2962 progressElement.fadeOut(function () { 2963 progressElement.html(''); 2964 }); 2965 }, 2966 formatTime = function (seconds) { 2967 var date = new Date(seconds * 1000); 2968 return ('0' + date.getUTCHours()).slice(-2) + ':' + 2969 ('0' + date.getUTCMinutes()).slice(-2) + ':' + 2970 ('0' + date.getUTCSeconds()).slice(-2); 2971 }, 2972 /* formatBytes = function (bytes) { 2973 if (bytes >= 1000000000) { 2974 return (bytes / 1000000000).toFixed(2) + ' GB'; 2975 } 2976 if (bytes >= 1000000) { 2977 return (bytes / 1000000).toFixed(2) + ' MB'; 2978 } 2979 if (bytes >= 1000) { 2980 return (bytes / 1000).toFixed(2) + ' KB'; 2981 } 2982 return bytes + ' B'; 2983 },*/ 2984 formatPercentage = function (floatValue) { 2985 return (floatValue * 100).toFixed(2) + ' %'; 2986 }, 2987 updateProgressElement = function (loaded, total, bps) { 2988 progressElement.html( 2989 formatBytes(bps) + 'ps | ' + 2990 formatTime((total - loaded) / bps) + ' | ' + 2991 formatPercentage(loaded / total) + ' | ' + 2992 formatBytes(loaded) + ' / ' + formatBytes(total) 2993 ); 2994 }, 2995 intervalHandler = function () { 2996 var diff = loaded - loadedBefore; 2997 if (!diff) { 2998 return; 2999 } 3000 loadedBefore = loaded; 3001 updateProgressElement( 3002 loaded, 3003 total, 3004 diff * (1000 / interval) 3005 ); 3006 }; 3007 widget 3008 .bind('fileuploadprogressall', progressHandler) 3009 .bind('fileuploadstop', stopHandler); 3010 progressTimer = window.setInterval(intervalHandler, interval); 3011 }); 3012 3013 } -
trunk/prototype/modules/calendar/js/init.js
r6444 r6996 147 147 }, true ); 148 148 }); 149 150 var currentToolTip = null; 151 $('#divAppbox').on('scroll',function(){ 152 if ($(".new-task").length) 153 currentToolTip.qtip('destroy'); 154 }); 155 156 /* Quick add task 157 -----------------------------------------------------------------*/ 158 $(".button.add.add-task").click(function(event){ 159 currentToolTip = $(this); 160 var componente = $(this); 161 162 if(!$('div.qtip.qtip-blue.new-task').length){ 163 164 $('div.qtip.qtip-blue').remove(); 165 166 $(componente).qtip({ 167 show: { 168 ready: true, 169 solo: true, 170 when: { 171 event: 'click' 172 } 173 }, 174 hide: false, 175 content: { 176 text: $('<div></div>').html( DataLayer.render( 'templates/task_quick_add.ejs', {"componente" : componente} ) ), 177 title: { 178 text:'Nova tarefa', 179 button: '<a class="button close" href="#">close</a>' 180 } 181 }, 182 style: { 183 name: 'blue', 184 tip: { 185 corner: 'leftMiddle' 186 }, 187 border: { 188 width: 4, 189 radius: 8 190 }, 191 width: { 192 min: 225, 193 max:225 194 } 195 }, 196 position: { 197 corner: { 198 target: 'rightMiddle', 199 tooltip: 'leftMiddle' 200 }, 201 adjust: { 202 x:0, 203 y:0 204 } 205 } 206 }) 207 .qtip("api").onShow = function(arg0) { 208 209 /*------------------------------------------------------------------------*/ 210 /* Seta os valores padrões nos inputs do qtip */ 211 $('div.qtip div.add-simple-task input.task').Watermark("Tarefa sem título"); 212 $('div.qtip div.add-simple-task textarea').Watermark("Descrição"); 213 /*------------------------------------------------------------------------*/ 214 215 $('.qtip-active .button.close').button({ 216 icons: { 217 primary: "ui-icon-close" 218 }, 219 text: false 220 }) 221 .click(function(){ 222 $(componente).qtip('destroy'); 223 }); 224 225 $('.qtip-active .button.save').button().click(function(){ 226 227 var title = $('div.qtip div.add-simple-task input.task').val(); 228 var description = $('div.qtip div.add-simple-task textarea').val(); 229 230 var calendar, timezone = ''; 231 232 for (var i = 0; i < Calendar.signatures.length; i++){ 233 if(Calendar.signatures[i].type == 1 && Calendar.signatures[i].calendar.type == 1){ 234 calendar = Calendar.signatures[i].calendar.id; 235 timezone = Calendar.signatures[i].calendar.timezone; 236 break; 237 } 238 } 239 240 DataLayer.put('schedulable', 241 { 242 summary: title, 243 description: description, 244 type: '2', 245 calendar: calendar, 246 timezone: timezone, 247 status: '1', 248 startTime: new Date().toString('yyyy-MM-dd 00:00:00'), 249 endTime: new Date().toString('yyyy-MM-dd 00:00:00'), 250 allDay: '1', 251 participants: 252 [{ 253 user: User.me.id, 254 isOrganizer: 1, 255 acl: 'row' 256 }] 257 }); 258 259 $(componente).qtip('destroy'); 260 261 }); 262 263 $('.qtip-active .button.advanced').button().click(function(){ 264 265 var startEvent = new Date(); 266 var configData = (startEvent.toString('mm') < 30) ? {minutes: (30 - parseInt(startEvent.toString('mm')))} : {hours: 1, minutes: '-'+startEvent.toString('mm')}; 267 startEvent.add(configData); 268 269 var componente = $(this); 270 var description = $('div.qtip div.add-simple-task textarea[name="description"]').val(); 271 272 taskDetails({ 273 summary: $('div.qtip div.add-simple-task input[name="summary"]').val(), 274 description: description == 'Descrição' ? '' : description, 275 startTime: startEvent.getTime(), 276 endTime: dateCalendar.decodeRange(startEvent, (!!User.preferences.defaultCalendar ? ( !!Calendar.signatureOf[User.preferences.defaultCalendar].calendar.defaultDuration ? 277 (Calendar.signatureOf[User.preferences.defaultCalendar].calendar.defaultDuration) : (User.preferences.defaultDuration)) : (User.preferences.defaultDuration))) 278 }, true ); 279 280 $(componente).qtip('destroy'); 281 }); 282 283 $('.qtip-active .button.cancel').button().click(function(){ 284 $(componente).qtip('destroy'); 285 }); 286 287 $('.qtip-active .button').button(); 288 289 $('div.qtip.qtip-blue.qtip-active').addClass('new-task'); 290 } 291 } 292 }); 293 294 $(".button.add.add-activity").click(function(event){ 295 var startEvent = new Date(); 296 var configData = (startEvent.toString('mm') < 30) ? {minutes: (30 - parseInt(startEvent.toString('mm')))} : {hours: 1, minutes: '-'+startEvent.toString('mm')}; 297 startEvent.add(configData); 298 299 activityDetails({ 300 startTime: startEvent.getTime(), 301 endTime: dateCalendar.decodeRange(startEvent, (!!User.preferences.defaultCalendar ? ( !!Calendar.signatureOf[User.preferences.defaultCalendar].calendar.defaultDuration ? 302 (Calendar.signatureOf[User.preferences.defaultCalendar].calendar.defaultDuration) : (User.preferences.defaultDuration)) : (User.preferences.defaultDuration))) 303 }, true ); 304 305 }); 149 306 150 307 var calendar = $('#calendar').fullCalendar(DataLayer.merge({ … … 189 346 year: 'ano' 190 347 }, 348 349 eventRender: function( event, element, view ){ 191 350 /* 192 eventRender: function( event, element, view ){ 193 $(element).attr( 'event-id', event.id ); 194 }, 195 */ 351 * TODO - Encontrar icones mais filé 352 */ 353 var img_icon = ""; 354 if(event.type == 1) 355 img_icon = "mini-event.png"; 356 if(event.type == 2) 357 img_icon = "mini-task.png"; 358 if(event.type == 3) 359 img_icon = "activity_icon.jpg"; 360 361 362 element.find(".fc-event-inner.fc-event-skin").prepend($('<img style="width: 11px; height: 13px;" class="" src="../prototype/modules/calendar/img/' + img_icon + '"></img>')); 363 }, 364 196 365 select: function( start, end, allDay, event, view ){ 197 366 if (view.name == "month") { … … 285 454 eventClick: function( evt, event, view ){ 286 455 evt.id = evt.id.split('-')[0]; 287 if(evt.selectable){288 if(evt.isRepeat){289 $.Zebra_Dialog(evt.title + ' é um evento com repetição.', {290 'type': 'question',291 'overlay_opacity': '0.5',292 'buttons': ['Editar todas ocorrências', 'Editar essa ocorrência'],293 'onClose': function(clicked) {294 if(clicked == 'Editar todas ocorrências') {295 eventDetails( DataLayer.get( "schedulable", evt.id), true);296 }else{297 /*298 * TODO - repeat foi adicionado pois melhorias devem ser feitas no rollback do299 *DataLayer, repeat somente é usado quando se trata da criação de um evento300 *pela edição de uma ocorrência.301 */302 var repeat = mount_exception(evt.id, evt.occurrence);303 304 $('.calendar-copy-move input[name="typeEvent"]').val("3");305 306 eventDetails(copyAndMoveTo(false , evt.id , false, "3", evt), true, '', false, repeat);307 }308 }309 });310 311 }else{312 var schedulable = DataLayer.get( "schedulable", evt.id);313 schedulable.calendar = evt.calendar; 314 eventDetails( schedulable, true);315 316 } 317 456 457 switch (parseInt(evt.type)){ 458 case 1: 459 if(evt.selectable){ 460 if(evt.isRepeat){ 461 $.Zebra_Dialog(evt.title + ' é um evento com repetição.', { 462 'type': 'question', 463 'overlay_opacity': '0.5', 464 'buttons': ['Editar todas ocorrências', 'Editar essa ocorrência'], 465 'onClose': function(clicked) { 466 if(clicked == 'Editar todas ocorrências') { 467 eventDetails( DataLayer.get( "schedulable", evt.id), true); 468 }else{ 469 /* 470 * TODO - repeat foi adicionado pois melhorias devem ser feitas no rollback do 471 *DataLayer, repeat somente é usado quando se trata da criação de um evento 472 *pela edição de uma ocorrência. 473 */ 474 var repeat = mount_exception(evt.id, evt.occurrence); 475 476 $('.calendar-copy-move input[name="typeEvent"]').val("3"); 477 478 eventDetails(copyAndMoveTo(false , evt.id , false, "3", evt), true, '', false, repeat); 479 } 480 } 481 }); 482 }else{ 483 var schedulable = DataLayer.get( "schedulable", evt.id); 484 schedulable.group = evt.calendar; 485 eventDetails( schedulable, true); 486 } 318 487 } 488 break; 489 case 2: 490 var task = DataLayer.get( "schedulable", evt.id); 491 task.group = evt.calendar; 492 taskDetails( task, true); 493 break; 494 case 3: 495 var activity = DataLayer.get( "schedulable", evt.id); 496 activity.group = evt.calendar; 497 activityDetails( activity, true); 498 break; 499 } 319 500 }, 320 501 … … 322 503 contentMenu(); 323 504 } 324 }, dateCalendar)); 325 505 }, dateCalendar)); 506 507 326 508 contentMenu(); 327 509 … … 346 528 }); 347 529 //Todo chamada do metodo que adiciona ao full calendar o botao de listagem de eventos 348 //listEvents();530 printEvents(); 349 531 }); 532 533 534 function useDesktopNotification(){ 535 return !!parseInt(User.preferences.useDesktopNotification); 536 } -
trunk/prototype/modules/calendar/js/load.js
r6444 r6996 1 1 Refresh = { 2 //Tempo em que ap ós a ultima sincronização será verificado atualizações2 //Tempo em que após a ultima sincronização será verificado atualizações 3 3 timeRefresh : 180, 4 4 clookRefresh: false, … … 8 8 delete DataLayer.tasks[this.clookRefresh]; 9 9 10 //Realiza agendamentos de atualiza ção de view somente se o módulo aberto for expressoCalendar10 //Realiza agendamentos de atualização de view somente se o módulo aberto for expressoCalendar 11 11 if(User.moduleName == "expressoCalendar"){ 12 12 this.clookRefresh = (parseInt(($.now()) / 1000) + this.timeRefresh); … … 54 54 } 55 55 56 this.calendarIds = [], this. signatureOf = {}, this.calendars = [], this.calendarOf= {};56 this.calendarIds = [], this.groupIds = [], this.signatureOf = {}, this.calendars = [], this.groups = [], this.calendarOf = {}, this.groupOf= {}; 57 57 58 58 for( var i = 0; i < this.signatures.length; i++ ){ 59 59 if(this.signatures[i].isOwner == "0") 60 60 this.signatures[i].permission = DataLayer.encode('calendarToPermission:detail', this.signatures[i].permission); 61 this.signatureOf[ this.calendarIds[i] = ( this.calendars[ this.calendars.length ] = this.calendarOf[ this.signatures[i].id ] = this.signatures[i].calendar ).id ] = this.signatures[i]; 61 62 if(this.signatures[i].calendar.type == '1') 63 this.signatureOf[ this.groupIds[this.groupIds.length] = ( this.groups[ this.groups.length ] = this.groupOf[ this.signatures[i].id ] = this.signatures[i].calendar ).id ] = this.signatures[i]; 64 else 65 this.signatureOf[ this.calendarIds[ this.calendarIds.length] = ( this.calendars[ this.calendars.length ] = this.calendarOf[ this.signatures[i].id ] = this.signatures[i].calendar ).id ] = this.signatures[i]; 62 66 } 63 67 … … 67 71 68 72 rerenderView: function(force){ 69 //TODO - Remover if quando centralizar o objeto User que contem as informa ções do usuário logado em um local acessÃvel a todos módulos73 //TODO - Remover if quando centralizar o objeto User que contem as informações do usuário logado em um local acessível a todos módulos 70 74 if(User.moduleName == "expressoCalendar"){ 71 75 if((typeof($tabs) != "undefined") && $tabs.tabs('option' ,'selected') == 0){ … … 89 93 contentMenu(); 90 94 }else if((typeof($tabs) != "undefined") && $tabs.tabs('option' ,'selected') != 0) 91 pageselectCallback($('.events-list-win.active [name=keyword]').val(), 0); 95 96 pageselectCallback($('.events-list-win.active [name=keyword]').val(), 0, false, ($tabs.tabs('option' ,'selected') > 2) ? 2 : ($tabs.tabs('option' ,'selected') == 1) ? 0 : 1); 92 97 } 93 98 } 94 99 } 95 100 96 Alarms = {97 load: function(){98 var eventsDay = DataLayer.get('alarm:schedulable',['=', 'date', Date.today().getTime()]);99 if(eventsDay)100 for(var i = 0; i < eventsDay.length; i++){101 this.addAlarm( eventsDay[i] );102 }103 },104 105 addAlarm: function( eventDay ){106 if(!DataLayer.tasks[parseInt(eventDay.sendTime)]){107 DataLayer.task( parseInt(eventDay.sendTime) , function( timestamp ){108 var path = User.moduleName == 'expressoCalendar' ? '' : '../prototype/modules/calendar/';109 DataLayer.render(path+'templates/alarm.ejs',{110 event: eventDay111 }, function( html ){112 $.Zebra_Dialog(html , {113 'type': 'question',114 'overlay_opacity': '0.5',115 'buttons': ['Fechar'],116 'onClose': function(clicked) {}117 });118 });119 });120 }121 }122 }123 124 101 Calendar.load(); 125 Alarms.load(); -
trunk/prototype/modules/calendar/js/map.disponibility.js
r6444 r6996 8 8 9 9 10 function updateMap( data){11 var start_date = $(".new- event-win.active .start-date").val();12 var end_date = $(".new- event-win.active .end-date").val();13 var start_time = $(".new- event-win.active .start-time").val();14 var end_time = $(".new- event-win.active .end-time").val();15 var isAllDay = $('.new- event-win.active input[name="allDay"]').is(':checked');10 function updateMap(viewName){ 11 var start_date = $(".new-"+viewName+"-win.active .start-date").val(); 12 var end_date = $(".new-"+viewName+"-win.active .end-date").val(); 13 var start_time = $(".new-"+viewName+"-win.active .start-time").val(); 14 var end_time = $(".new-"+viewName+"-win.active .end-time").val(); 15 var isAllDay = $('.new-'+viewName+'-win.active input[name="allDay"]').is(':checked'); 16 16 17 17 var formatString = User.preferences.dateFormat + " " + User.preferences.hourFormat; … … 21 21 22 22 23 var event = $( "#new_event_map").fullCalendar('clientEvents', 'map')[0];23 var event = $('.new-'+viewName+'-win .map_disponibility').fullCalendar('clientEvents', 'map')[0]; 24 24 25 25 … … 28 28 event.end = endDate; 29 29 event.allDay = isAllDay; 30 $( "#new_event_map").fullCalendar( 'updateEvent', event )30 $('.new-'+viewName+'-win .map_disponibility').fullCalendar( 'updateEvent', event ) 31 31 } 32 32 … … 35 35 36 36 37 function disponibily(objEvent, path, attendees ){37 function disponibily(objEvent, path, attendees, viewName){ 38 38 var formatString = User.preferences.dateFormat + " " + User.preferences.hourFormat; 39 39 var startDate = Date.parseExact( objEvent.startDate + " " + $.trim(objEvent.startHour) , formatString ); 40 40 var endDate = Date.parseExact( objEvent.endDate + " " + $.trim(objEvent.endHour) , formatString ); 41 42 var dialogName = {event: 'addEvent', task: 'addTask', activity: 'addActivity'} 41 43 42 44 var mapHtml = DataLayer.render( path+'templates/availability_map.ejs', {}); 43 $( "#calendar_addevent_details7").html(mapHtml);44 $( "#new_event_map").fullCalendar(DataLayer.merge({45 $('#calendar_add'+viewName+'_details7').html(mapHtml); 46 $('.new-'+viewName+'-win .map_disponibility').fullCalendar(DataLayer.merge({ 45 47 height : 300, 46 48 timeFormat: User.preferences.hourFormat, … … 77 79 if(!allDay){ 78 80 $('[name="allDay"]').attr("checked", false); 79 UI.dialogs .addEvent.find('.start-time, .end-time').removeClass('hidden');81 UI.dialogs[dialogName[viewName]].find('.start-time, .end-time').removeClass('hidden'); 80 82 81 83 $('[name="startHour"]').val(start.toString(User.preferences.hourFormat)); … … 85 87 }else{ 86 88 $('[name="allDay"]').attr("checked", true); 87 UI.dialogs .addEvent.find('.start-time, .end-time').addClass('hidden');89 UI.dialogs[dialogName[viewName]].find('.start-time, .end-time').addClass('hidden'); 88 90 } 89 91 }, … … 98 100 className : "map-event", 99 101 backgroundColor : "transparent !important", 100 editable : objEvent.acl .write || objEvent.acl.organization102 editable : objEvent.acl ? (objEvent.acl.write || objEvent.acl.organization) : true 101 103 } 102 104 ], … … 104 106 if(event.allDay){ 105 107 $('[name="allDay"]').attr("checked", true); 106 UI.dialogs .addEvent.find('.start-time, .end-time').addClass('hidden');108 UI.dialogs[dialogName[viewName]].find('.start-time, .end-time').addClass('hidden'); 107 109 108 110 $('[name="startDate"]').val(dateCalendar.toString(event.start, User.preferences.dateFormat)); … … 111 113 }else{ 112 114 $('[name="allDay"]').attr("checked", false); 113 UI.dialogs .addEvent.find('.start-time, .end-time').removeClass('hidden');115 UI.dialogs[dialogName[viewName]].find('.start-time, .end-time').removeClass('hidden'); 114 116 115 117 $('[name="startHour"]').val(dateCalendar.formatDate(event.start, User.preferences.hourFormat)); … … 132 134 var eventSource = new Array(); 133 135 var updateMapView = function(){ 134 updateMap( );135 var view = $( "#new_event_map").fullCalendar('getView');136 updateMap(viewName); 137 var view = $('.new-'+viewName+'-win .map_disponibility').fullCalendar('getView'); 136 138 var map = {}; 137 $( "#new_event_map").fullCalendar( 'removeEventSource', eventSource );139 $('.new-'+viewName+'-win .map_disponibility').fullCalendar( 'removeEventSource', eventSource ); 138 140 eventSource = new Array(); 139 141 map = {startTime : view.start.getTime(), endTime : view.end.getTime(), attendees: {}, timezone: (objEvent.timezone || User.preferences.timezone)}; … … 167 169 } 168 170 if(eventSource.length) 169 $( "#new_event_map").fullCalendar( 'addEventSource', eventSource );171 $('.new-'+viewName+'-win .map_disponibility').fullCalendar( 'addEventSource', eventSource ); 170 172 }; 171 $('[href="#calendar_addevent_details7"]').click(function(eventData, eventObject){ 172 $("#new_event_map").fullCalendar( 'gotoDate', Date.parseExact($('[name="startDate"]').val() + " " + $.trim($('[name="startHour"]').val()), formatString) , formatString); 173 //if(eventObject == undefined) 174 updateMapView(); 173 $('[href="#calendar_add'+viewName+'_details7"]').click(function(eventData, eventObject){ 174 $('.new-'+viewName+'-win .map_disponibility').fullCalendar( 'gotoDate', Date.parseExact($('[name="startDate"]').val() + " " + $.trim($('[name="startHour"]').val()), formatString) , formatString); 175 updateMapView(); 175 176 }); 176 $( "#new_event_map").find(".fc-button-prev, .fc-button-next, .fc-button-today").click(function(){177 $('.new-'+viewName+'-win .map_disponibility').find(".fc-button-prev, .fc-button-next, .fc-button-today").click(function(){ 177 178 updateMapView(); 178 179 }); -
trunk/prototype/modules/calendar/templates/alarms_add_itemlist.ejs
r6393 r6996 1 <% 1 <%if(data.alarm){ 2 2 for(var i = 0; i < data.alarm.defaultAlarms.length; i++){%> 3 3 <li class="input-group"> … … 16 16 <input type="hidden" name="alarmId[]" value="" /> 17 17 <input type="hidden" name="isDefaultAlarm[]" value="<%=data.alarm.useAlarmDefault ? 1 : 0%>" /> 18 <label> antes de cada evento.</label> 18 <%if(!!!parseInt(data.type)){%> 19 <label>antes de cada evento.</label> 20 <%}else{%> 21 <label>antes de cada tarefa.</label> 22 <%}%> 19 23 <a class="button remove tiny"></a> 20 24 </li> … … 35 39 </select> 36 40 <input type="hidden" name="alarmId[]" value="" /> 37 <label> antes de cada evento.</label> 41 <%if(!!!parseInt(data.type)){%> 42 <label>antes de cada evento.</label> 43 <%}else{%> 44 <label>antes de cada tarefa.</label> 45 <%}%> 38 46 <a class="button remove tiny"></a> 39 47 </li> -
trunk/prototype/modules/calendar/templates/availability_map.ejs
r5636 r6996 1 <fieldset id="availability_map"class="tab-level2">2 <div id="new_event_map" class="map" style="width : 100%;">1 <fieldset class="tab-level2"> 2 <div class="map_disponibility" style="width : 100%;"> 3 3 </div> 4 4 </fieldset> -
trunk/prototype/modules/calendar/templates/calendar_list.ejs
r5927 r6996 1 <% 2 var signatures = {'calendar': [], 'taskGroup': [], 'sharedCalendar': []}; 3 for(var i = 0; i < data.signatures.length; i++) 4 { 5 if(data.signatures[i].calendar.type == 1){ 6 signatures['taskGroup'].push(data.signatures[i]); 7 }else{ 8 signatures[data.signatures[i].isOwner == 1 ? 'calendar' : 'sharedCalendar'].push(data.signatures[i]); 9 } 10 } 11 %> 12 1 13 <div class="all-list-calendars"> 2 <% var signature = data.signatures %> 3 <% var external = false %> 4 <div class="my-calendars"> 5 <a title='Minhas agendas' class="title-my-calendars" aria-expanded='false' role='button' tabindex='0'>Minhas agendas</a> 14 15 <div class="my-groups-task"> 16 <a title='Grupos de tarefas' class="title-my-calendars" aria-expanded='false' role='button' tabindex='0'>Grupos de tarefas</a> 6 17 <span class="status-list ui-icon ui-icon-triangle-1-s"></span> 7 <a href="#" class="button new new-calendar ">Nova Agenda</a>18 <a href="#" class="button new new-calendar 1">Novo Grupo</a> 8 19 <ul class="list-calendars my-list-calendars"> 9 <% for (var i=0; i < signature.length; i++) { 10 if(signature[i].isOwner == 1){ 11 %> 12 <li class="list-calendars-item list-calendars-item-<%= signature[i].calendar.id %>" title="<%= signature[i].calendar.name %>"> 20 <% for (var i=0; i < signatures['taskGroup'].length; i++) {%> 21 <li class="list-calendars-item list-calendars-item-<%= signatures['taskGroup'][i].calendar.id %>" title="<%= signatures['taskGroup'][i].calendar.name %>"> 13 22 14 23 <div> 15 <input class="calendar-view" type="checkbox" name="" value="<%= signature [i].calendar.id %>" checked="checked"/>16 <label><%= signature [i].calendar.name %></label>24 <input class="calendar-view" type="checkbox" name="" value="<%= signatures['taskGroup'][i].calendar.id %>" checked="checked"/> 25 <label><%= signatures['taskGroup'][i].calendar.name %></label> 17 26 18 27 </div> 19 <a class="cal-list-options-btn my-cal-list-options-btn-<%= signature [i].calendar.id %>" style="background-color:#<%=signature[i].backgroundColor%>; border-color:#<%= signature[i].borderColor%>;">28 <a class="cal-list-options-btn my-cal-list-options-btn-<%= signatures['taskGroup'][i].calendar.id %>" style="background-color:#<%=signatures['taskGroup'][i].backgroundColor%>; border-color:#<%= signatures['taskGroup'][i].borderColor%>;"> 20 29 <img src="../prototype/modules/calendar/img/arrow_down.png" width="10" height="10" class="cal-list-img"/> 21 30 </a> 22 31 23 32 24 <div class="cal-list-options my-cal-list-options-<%= signature [i].calendar.id %> hidden">33 <div class="cal-list-options my-cal-list-options-<%= signatures['taskGroup'][i].calendar.id %> hidden"> 25 34 <ul> 26 <li><a href="#" onclick="add_tab_configure_calendar(<%= signature[i].calendar.id%>);">Configurações</a></li> 27 <li><a href="#" onclick="show_modal_import_export(0, <%= signature[i].calendar.id%>);">Importar</a></li> 28 <li><a href="#" onclick="show_modal_import_export(1, <%= signature[i].calendar.id%>);">Exportar</a></li> 29 <li><a href="#" onclick="show_modal_shared(<%= signature[i].calendar.id%>);">Compartilhar agenda</a></li> 30 <li><a href="#" onclick="remove_calendar();">Remover agenda</a></li> 35 <li><a href="#" onclick="add_tab_configure_calendar(<%= signatures['taskGroup'][i].calendar.id%>, 1);">Configurações</a></li> 36 <li><a href="#" onclick="show_modal_import_export(0,<%= signatures['taskGroup'][i].calendar.id%>, 1);">Importar</a></li> 37 <li><a href="#" onclick="show_modal_import_export(1,<%= signatures['taskGroup'][i].calendar.id%>, 1);">Exportar</a></li> 38 <%if(signatures['taskGroup'][i].type == '0'){%> 39 <li><a href="#" onclick="remove_calendar(1);">Remover Grupo</a></li> 40 <%}%> 31 41 </ul> 32 42 33 43 </div> 34 44 </li> 35 <% 36 }else 37 external = true; 38 } 39 %> 45 <%}%> 46 47 </ul> 48 </div> 49 50 <div class="my-calendars"> 51 <a title='Minhas agendas' class="title-my-calendars" aria-expanded='false' role='button' tabindex='0'>Minhas agendas</a> 52 <span class="status-list ui-icon ui-icon-triangle-1-s"></span> 53 <a href="#" class="button new new-calendar 0">Nova Agenda</a> 54 <ul class="list-calendars my-list-calendars"> 55 <% for (var i=0; i < signatures.calendar.length; i++) {%> 56 <li class="list-calendars-item list-calendars-item-<%= signatures['calendar'][i].calendar.id %>" title="<%= signatures['calendar'][i].calendar.name %>"> 57 58 <div> 59 <input class="calendar-view" type="checkbox" name="" value="<%= signatures['calendar'][i].calendar.id %>" checked="checked"/> 60 <label><%= signatures['calendar'][i].calendar.name %></label> 61 62 </div> 63 <a class="cal-list-options-btn my-cal-list-options-btn-<%= signatures['calendar'][i].calendar.id %>" style="background-color:#<%=signatures['calendar'][i].backgroundColor%>; border-color:#<%= signatures['calendar'][i].borderColor%>;"> 64 <img src="../prototype/modules/calendar/img/arrow_down.png" width="10" height="10" class="cal-list-img"/> 65 </a> 66 67 68 <div class="cal-list-options my-cal-list-options-<%= signatures['calendar'][i].calendar.id %> hidden"> 69 <ul> 70 <li><a href="#" onclick="add_tab_configure_calendar(<%= signatures['calendar'][i].calendar.id%>, 0);">Configurações</a></li> 71 <li><a href="#" onclick="show_modal_import_export(0, <%= signatures['calendar'][i].calendar.id%>, 0);">Importar</a></li> 72 <li><a href="#" onclick="show_modal_import_export(1, <%= signatures['calendar'][i].calendar.id%>, 0);">Exportar</a></li> 73 <li><a href="#" onclick="show_modal_shared(<%= signatures['calendar'][i].calendar.id%>);">Compartilhar agenda</a></li> 74 <li><a href="#" onclick="remove_calendar(0);">Remover agenda</a></li> 75 </ul> 76 77 </div> 78 </li> 79 <%}%> 40 80 41 81 </ul> … … 47 87 <a href="#" class="button new new-calendar-shared tiny">Nova Agenda</a> 48 88 49 <% if (external) { %>50 89 <ul class="list-calendars signed-list-calendars"> 51 <% for (var i=0; i < signature.length; i++) { 52 if(signature[i].isOwner == 0){ 53 %> 54 <li class="list-calendars-item list-calendars-item-<%= signature[i].calendar.id %>" title="<%= signature[i].calendar.name %>"> 90 <% for (var i=0; i < signatures['sharedCalendar'].length; i++) {%> 91 <li class="list-calendars-item list-calendars-item-<%= signatures['sharedCalendar'][i].calendar.id %>" title="<%= signatures['sharedCalendar'][i].calendar.name %>"> 55 92 <div> 56 <input class="calendar-view" type="checkbox" name="" value="<%= signature[i].calendar.id %>" checked="checked"/>57 <label><%= signature[i].calendar.name %></label>58 </div>59 <a class="cal-list-options-btn my-cal-list-options-btn-<%= signature [i].calendar.id %>" style="background-color:#<%=signature[i].backgroundColor%>; border-color:#<%= signature[i].borderColor%>;">93 <input class="calendar-view" type="checkbox" name="" value="<%= signatures['sharedCalendar'][i].calendar.id %>" checked="checked"/> 94 <label><%= signatures['sharedCalendar'][i].calendar.name %></label> 95 </div> 96 <a class="cal-list-options-btn my-cal-list-options-btn-<%= signatures['sharedCalendar'][i].calendar.id %>" style="background-color:#<%=signatures['sharedCalendar'][i].backgroundColor%>; border-color:#<%= signatures['sharedCalendar'][i].borderColor%>;"> 60 97 <img src="../prototype/modules/calendar/img/arrow_down.png" width="10" height="10" class="cal-list-img"/></a> 61 <div class="cal-list-options my-cal-list-options-<%= signature [i].calendar.id %> hidden">98 <div class="cal-list-options my-cal-list-options-<%= signatures['sharedCalendar'][i].calendar.id %> hidden"> 62 99 <ul> 63 <li><a href="#" onclick="add_tab_configure_calendar(<%= signature [i].calendar.id %>);">Configurações</a></li>64 <li><a href="#" onclick="show_modal_import_export(0, <%= signature [i].calendar.id %>);">Importar</a></li>65 <li><a href="#" onclick="show_modal_import_export(1, <%= signature [i].calendar.id %>);">Exportar</a></li>66 <%if(!signature [i].permission.acl['required']){%>67 <li><a href="#" onclick="cancel_signature (<%= signature[i].id %>);">Cancelar assinatura</a></li>100 <li><a href="#" onclick="add_tab_configure_calendar(<%= signatures['sharedCalendar'][i].calendar.id %>, 0);">Configurações</a></li> 101 <li><a href="#" onclick="show_modal_import_export(0, <%= signatures['sharedCalendar'][i].calendar.id%>, 0);">Importar</a></li> 102 <li><a href="#" onclick="show_modal_import_export(1, <%= signatures['sharedCalendar'][i].calendar.id%>, 0);">Exportar</a></li> 103 <%if(!signatures['sharedCalendar'][i].permission.acl['required']){%> 104 <li><a href="#" onclick="cancel_signatures['sharedCalendar'](<%= signatures['sharedCalendar'][i].id %>);">Cancelar assinatura</a></li> 68 105 <%}%> 69 106 </ul> … … 72 109 73 110 </li> 74 <% 75 } 76 } 77 %> 111 <%}%> 78 112 </ul> 79 <% } %>80 113 </div> 81 114 </div> -
trunk/prototype/modules/calendar/templates/configure_calendars.ejs
r5341 r6996 1 <%if(!!parseInt(data.type)){%> 2 <div class="configure-calendars-win active" title="Configurações do Grupo de Tarefas"> 3 <h3>Preferências do Grupo de Tarefas</h3> 4 <%}else{%> 1 5 <div class="configure-calendars-win active" title="Configurações da Agenda"> 2 6 <h3>Preferências da Agenda</h3> 7 <%}%> 3 8 <div class="header-menu-container"> 4 9 <a class="button cancel" href="#">Cancelar</a> … … 6 11 </div> 7 12 <% for (var i=0; i<data.signatures.length; i++) { %> 8 <fieldset class="user-calendar" title="<%= data.calendars[i].name%>" > 9 <legend><%= data.calendars[i].name%></legend> 10 11 </fieldset> 13 <fieldset class="user-calendar" title="<%= data.calendars[i].name%>" > 14 <legend><%= data.calendars[i].name%></legend> 15 </fieldset> 12 16 <%} //for each signatures %> 13 17 <!-- -
trunk/prototype/modules/calendar/templates/configure_calendars_itemlist.ejs
r6498 r6996 1 <%var isOwner = parseInt(data.signature.isOwner) ? '' : 'readonly="readonly"'%> 1 <%var isOwner = parseInt(data.signature.isOwner) ? '' : 'readonly="readonly"'; 2 var isGroup = !!parseInt(data.signature.calendar.type);%> 2 3 <form method="POST" action="calendarSignature:configure"> 3 4 <input type="hidden" name="signature" value="<%=data.signature.id%>" /> 5 <input type="hidden" name="type" value="<%=data.signature.calendar.type%>" /> 4 6 5 7 <fieldset class="configurations-basic"> … … 7 9 8 10 <p class="input-group"> 11 <%if(!isGroup){%> 9 12 <label for="name">Nome da agenda:</label> 13 <%}else{%> 14 <label for="name">Nome do grupo:</label> 15 <%}%> 10 16 <input name="name" value="<%=data.calendar.name%>" <%= isOwner %> type="text" class=""/> 11 17 </p> … … 15 21 <input name="description" value="<%=data.calendar.description%>" <%= isOwner %> type="text" class=""/> 16 22 </p> 17 23 <%if(!isGroup){%> 18 24 <p class="input-group"> 19 25 <label for="duration">Duração padrão de evento:</label> 20 26 <input name="duration" value="<%=data.calendar.defaultDuration%>" <%= isOwner %> type="text" class="number"/> 21 27 </p> 22 28 <%}%> 23 29 <p class="input-group"> 30 <%if(!isGroup){%> 24 31 <label for="timezone">Fuso horário da agenda:</label> 25 <%if(data.signature.isOwner == 0){%> 32 <%}else{%> 33 <label for="timezone">Fuso horário do grupo:</label> 34 <%} if(data.signature.isOwner == 0){%> 26 35 <input name="timezone" value="<%=data.calendar.timezone%>" size="50" readonly="readonly" type="text" class=""/> 27 36 <%}else{%> … … 29 38 <%}%> 30 39 </p> 31 40 <%if(!isGroup){%> 32 41 <p class="input-group"> 33 42 <label for="location">URL:</label> 34 43 <input name="location" value="<%=data.calendar.location%>" <%= isOwner %> type="text" class=""/> 35 44 </p> 36 45 <%}%> 37 46 </fieldset> 38 47 39 48 <fieldset class="configurations-colors"> 49 <%if(!isGroup){%> 40 50 <legend class="">Cores dos eventos desta agenda</legend> 41 51 <%} else{%> 52 <legend class="">Cores das tarefas deste grupo</legend> 53 <%}%> 42 54 <div class="calendar-colorpicker"></div> 43 55 </fieldset> … … 86 98 </select> 87 99 <input type="hidden" name="alarmId[]" value="<%=data.signature.defaultAlarms[i].id%>" /> 100 <%if(!isGroup){%> 88 101 <label>antes de cada evento.</label> 102 <%}else{%> 103 <label>antes de cada tarefa.</label> 104 <%}%> 89 105 <a class="button remove tiny">Excluir</a> 90 106 </li> -
trunk/prototype/modules/calendar/templates/event_add.ejs
r6525 r6996 171 171 <div class="overflow_add_calender"> 172 172 <fieldset id="calendar_addevent_details5" class="tab-level2"> 173 <form id="fileupload " action="attachment:detail" method="POST">173 <form id="fileuploadevent" action="attachment:detail" method="POST"> 174 174 <!-- The fileupload-buttonbar contains buttons to add/delete files and start/cancel the upload --> 175 175 <div class="row fileupload-buttonbar"> … … 183 183 <%}%> 184 184 <%if(data.event.acl.organization || data.event.acl.write){%> 185 <button type="button" class="button btn-danger delete ">185 <button type="button" class="button btn-danger delete <%= data.event && data.event.attachments && data.event.attachments.length ? '' : 'hidden' %>"> 186 186 <i class="icon-trash icon-white"></i> Remover Todos 187 187 </button> 188 188 <%}%> 189 189 </div> 190 <div id="fileupload-progress "></div>190 <div id="fileupload-progress-event"></div> 191 191 <div class="files-list"> 192 192 <ul class="attachments-list"> -
trunk/prototype/modules/calendar/templates/event_list.ejs
r6525 r6996 1 <div title="Lista de eventos" class="events-list events-list-win active"> 1 <% 2 3 var decoder = {status: {1: 'Sem ações', 2: 'Em processo', 3: 'Completo', 4: 'Cancelado'}, priority: {1: 'Alta', 2: 'Normal', 3: 'Baixa'}} 4 5 %> 6 7 <div title="<%=data.tab_title%>" class="events-list events-list-win active"> 2 8 3 9 … … 43 49 <td> 44 50 <span> 51 <% 52 var img_type = ""; 53 var title_type = ""; 54 if(_event.type == '1'){ 55 img_type = "../prototype/modules/calendar/img/big-event.png"; 56 title_type = "Evento"; 57 }if(_event.type == '2'){ 58 img_type = "../prototype/modules/calendar/img/big-task.png"; 59 title_type = "Tarefa"; 60 }if(_event.type == '3'){ 61 img_type = "../prototype/modules/calendar/img/activity_icon.jpg"; 62 title_type = "Atividade"; 63 } 64 %> 65 <img title="<%= title_type %>" src="<%= img_type %>"> 45 66 <a class="title event-details-item" title='<%= _event.summary %>' aria-expanded='false' role='button' tabindex='0'><%= _event.summary %></a> 46 67 <!-- TODO: FAZER FUNCIONAR DESTA FORMA --> … … 86 107 %> 87 108 </span> 88 <div class="details-event-list hidden ">109 <div class="details-event-list hidden <%= (title_type == "Evento" ? "details-event" : "details-task") %>"> 89 110 <fieldset class="fields-details-event-list"> 90 111 <%if(_event.allDay){%> 91 112 <p class="input-group date-info"> 92 <label>Duração </label>113 <label>Duração:</label> 93 114 <span class="">Dia inteiro</span> 94 115 </p> … … 108 129 </p> 109 130 <%}%> 110 <%if(_event.repeat ){%> 131 <%if(_event.type == '1'){ 132 if(_event.repeat ){%> 111 133 <p class="input-group"> 112 134 <label>Repetição</label> 113 135 <span><%= _event.repeat %></span> 114 136 </p> 115 <%}%> 116 <p class="input-group"> 117 <label>Lembretes</label> 118 <% if(_event.alarms) { %> 137 <%}}%> 138 <p class="input-group"> 139 <label>Lembretes:</label> 140 <% if(_event.alarms) { 141 var string_alarm = ""; 142 if(_event.type == '1') 143 string_alarm = 'do evento'; 144 if(_event.type == '2') 145 string_alarm = 'da tarefa'; 146 if(_event.type == '3') 147 string_alarm = 'da atividade'; 148 %> 119 149 <span class="large" > 120 150 <% for (var l=0; l < _event.alarms.length; l++) { %> 121 <span class="large" >Você será notificado por um <%=dateCalendar.alarmtype[_event.alarms[l].type]%> <%= _event.alarms[l].time %> <%= dateCalendar.timeunit[_event.alarms[l].unit]%><%=_event.alarms[l].time > 1 ? 's' : '' %> antes do evento</span>151 <span class="large" >Você será notificado por um <%=dateCalendar.alarmtype[_event.alarms[l].type]%> <%= _event.alarms[l].time %> <%= dateCalendar.timeunit[_event.alarms[l].unit]%><%=_event.alarms[l].time > 1 ? 's' : '' %> antes <%=string_alarm%></span> 122 152 <% } %> 123 153 </span> 124 154 <% } %> 125 155 </p> 126 <p class="input-group"> 127 <label>Local</label> 156 <%if(_event.type == '1'){%> 157 <p class="input-group"> 158 <label>Local:</label> 128 159 <span><%= _event.location %></span> 129 160 </p> 130 <p class="input-group"> 131 <label>Descrição </label> 161 <%}%> 162 <p class="input-group"> 163 <label>Descrição:</label> 132 164 <span class="large" ><%= _event.description %></span> 133 165 </p> 134 <!--<p class="input-group"> 166 <%if(_event.type != '1'){%> 167 <p class="input-group"> 168 <label>Prioridade:</label> 169 <span><%= decoder['priority'][_event.priority] %></span> 170 </p> 171 <p class="input-group"> 172 <label>% Conlusão:</label> 173 <span><%= _event.percentage %>%</span> 174 </p> 175 <p class="input-group"> 176 <label>Status:</label> 177 <span><%= decoder['status'][_event.status] %></span> 178 </p> 179 <% } %> 180 <!-- <p class="input-group"> 135 181 <label>Privacidade</label> 136 182 <span><%= _event.privacy %></span> 137 </p>--> 138 <p class="input-group"> 139 <label>Organizador</label> 140 <span class="large"><%= _event.organizer.user ? _event.organizer.user.name : _event.organizer.name %> (<%= _event.organizer.user ? _event.organizer.user.mail : _event.organizer.mail %>)</span> 141 </p> 142 <p class="input-group"> 143 <label>Participantes</label> 183 </p> --> 184 <%if(_event.organizer && _event.organizer.user){%> 185 <p class="input-group"> 186 <label>Organizador:</label> 187 <span class="large"><%= _event.organizer.user ? _event.organizer.user.name : _event.organizer.name %> (<%= _event.organizer.user ? _event.organizer.user.mail : _event.organizer.mail %>)</span> 188 </p> 189 <%}%> 190 <%if(_event.type != '3'){%> 191 <p class="input-group"> 192 <label>Participantes:</label> 144 193 <% if(_event.attendee) { %> 145 194 <span class="large" > … … 150 199 <% } %> 151 200 </p> 152 <p class="input-group"> 153 <label>Presença</label> 201 <%} 202 if(_event.type == '3'){%> 203 <p class="input-group"> 204 <label>Tarefas</label> 205 <% if(_event.tasks) { %> 206 <span class="large" > 207 <% for (var m in _event.tasks) { %> 208 <span class="large"><%=_event.tasks[m].description%></span> 209 <%}%> 210 </span> 211 <% } %> 212 </p> 213 <%}%> 214 215 <p class="input-group"> 216 <label>Presença:</label> 154 217 <span> 155 <% var status_name; 156 if (_event.status == 1) 157 status_name = "Eu vou"; 158 else if (_event.status == 2) 159 status_name = "Talvez"; 160 else if (_event.status == 3) 161 status_name = "Eu não vou"; 162 %> 163 <%= status_name %> 164 </span> <!-- Ta hardcodificado isso aqui? --> 165 </p> 218 <% var status_name; 219 if (_event.status == 1) 220 status_name = "Eu vou"; 221 else if (_event.status == 2) 222 status_name = "Talvez"; 223 else if (_event.status == 3) 224 status_name = "Eu não vou"; 225 %> 226 <%= status_name %> 227 </span> <!-- Ta hardcodificado isso aqui? --> 228 </p> 229 166 230 </fieldset> 167 231 <div class="menu-container footer-container"> 168 232 <input name="eventid" type="hidden" value="<%=_event.id%>"></input> 169 <input name="calendarid" type="hidden" value="<%=_event.calendar%>"></input> 233 <input name="eventtype" type="hidden" value="<%=_event.type%>"></input> 234 <input name="calendarid" type="hidden" value="<%=_event.calendar ? _event.calendar : _event.group%>"></input> 235 <a title="Imprimir" class="button print" href="#">Imprimir</a> 170 236 <a title="Excluir" class="button delete" href="#">Excluir</a> 171 237 <a title="Editar" class="button edit" href="#">Editar</a> -
trunk/prototype/modules/calendar/templates/import_export.ejs
r5901 r6996 15 15 <input type="hidden" name="type" value="iCal"> 16 16 <input type="hidden" name="params[owner]" value="<%= data.owner %>"> 17 <legend class="hidden">Importar agenda</legend>17 <legend class="hidden">Importar <%=data.typeView == 0 ? 'eventos' : 'tarefas'%></legend> 18 18 <p class="input-group"> 19 19 <label for="data">Arquivo:</label> … … 21 21 <input type="file" name="data" value=""/> 22 22 <span class="tip">Escolha o arquivo que contenha um ou vários eventos. A Agenda do Expresso pode importar informações de evento no formato iCal.</span> 23 <label for="calendar"> Agenda:</label>23 <label for="calendar"><%=data.typeView == 0 ? 'Agenda:' : 'Grupo:'%></label> 24 24 <select name="params[calendar]"> 25 25 <% for( var i = 0; i < data.calendars.length; i++ ){ %> … … 27 27 <% } %> 28 28 </select> 29 <span class="tip"> Agenda daqual os eventos serão importados</span>29 <span class="tip"><%=data.typeView == 0 ? 'Agenda da' : 'Grupo do'%> qual os eventos serão importados</span> 30 30 </p> 31 31 </fieldset> … … 42 42 <legend class="hidden">Exportar agenda</legend> 43 43 <p class="input-group"> 44 <label for="calendar"> Agenda:</label>44 <label for="calendar"><%=data.typeView == 0 ? 'Agenda:' : 'Grupo:'%></label> 45 45 <select name="calendar"> 46 46 <!--<option value="cal_all">Todas agendas</option>--> … … 49 49 <% } %> 50 50 </select> 51 <span class="tip">Escolha a agenda que deseja exportar. A Agenda do Expresso pode exportar informações de eventono formato iCal.</span>51 <span class="tip">Escolha <%=data.typeView == 0 ? 'a agenda' : 'o grupo'%> que deseja exportar. <%=data.typeView == 0 ? 'A Agenda' : 'O Grupo'%> do Expresso pode exportar informações de <%=data.typeView == 0 ? 'eventos' : 'tarefas'%> no formato iCal.</span> 52 52 </p> 53 53 </fieldset> -
trunk/prototype/modules/calendar/templates/index.ejs
r6525 r6996 27 27 <link rel="Stylesheet" type="text/css" href="<?= PLUGINSURL ?>/timepicker/jquery-ui-timepicker-addon.css" /> 28 28 <link rel="stylesheet" type="text/css" href='<?= PLUGINSURL ?>/zebradialog/css/zebra_dialog.css'></link> 29 <link rel="stylesheet" type="text/css" href='<?= PLUGINSURL ?>/jquery.spinner/jquery.spinner.css'></link> 29 30 30 31 <link rel="stylesheet" type="text/css" href="<?= MODULESURL ?>/css/layout.css" /> … … 71 72 <script type="text/javascript" src="<?= PLUGINSURL ?>/qtip/jquery.qtip-1.0.0-rc3.min.js"></script> 72 73 <script type="text/javascript" src="<?= PLUGINSURL ?>/contextmenu/jquery.contextMenu.js"></script> 74 <script type='text/javascript' src='<?= PLUGINSURL ?>/jquery.spinner/jquery.spinner.min.js'></script> 73 75 74 76 <!-- JPicker --> … … 87 89 88 90 <script type='text/javascript' src='<?= MODULESURL ?>/js/map.disponibility.js'></script> 91 92 <script type='text/javascript' src='<?= MODULESURL ?>/js/activity.helpers.js'></script> 93 <script type='text/javascript' src='<?= MODULESURL ?>/js/task.helpers.js'></script> 89 94 <script type='text/javascript' src='<?= MODULESURL ?>/js/helpers.js'></script> 90 95 <script type='text/javascript' src='<?= MODULESURL ?>/js/calendar.shared.js'></script> … … 92 97 <script type='text/javascript' src='<?= MODULESURL ?>/js/calendar.codecs.js'></script> 93 98 <script type='text/javascript' src='<?= MODULESURL ?>/js/load.js'></script> 99 <script type='text/javascript' src='<?= MODULESURL ?>/js/calendar.alarms.js'></script> 94 100 95 101 <script type='text/javascript' src='<?= MODULESURL ?>/js/I18n.js'></script> … … 97 103 <script type="text/javascript" src="<?= MODULESURL ?>/js/init.js"></script> 98 104 <script type="text/javascript" src="<?= MODULESURL ?>/js/drag_area.js"></script> 105 <script type="text/javascript" src="<?= MODULESURL ?>/js/desktop.notification.js"></script> 99 106 100 107 </head> … … 107 114 <ul> 108 115 <li><a href="#" onclick="add_tab_preferences();" class="menu-command configurations">Preferências</a></li> 109 <li><a href="#" onclick="add_tab_configure_calendar();" class="menu-command configurations">Configuração de agendas</a></li> 116 <li><a href="#" onclick="add_tab_configure_calendar(false, 0);" class="menu-command configurations">Configuração de agendas</a></li> 117 <li><a href="#" onclick="add_tab_configure_calendar(false, 1);" class="menu-command configurations">Configuração de grupos</a></li> 110 118 <li><a href="#" onclick="show_modal_import_export(0);" class="menu-pass-through">Importar</a></li> 111 119 <li><a href="#" onclick="show_modal_import_export(1);" class="menu-pass-through">Exportar</a></li> … … 120 128 <div class="block-vertical-toolbox"> 121 129 <a class="button add add-event" href="#">Adicionar evento</a> 130 <a class="button add add-task" href="#">Adicionar tarefa</a> 131 <a class="button add add-activity" href="#">Adicionar atividade</a> 122 132 <!--<a class="button add" href="#" onclick="add_events_list();">Lista de Eventos</a>--> 123 133 <div class="mini-calendar"></div> … … 131 141 <ul> 132 142 <li><a href="#calendar">Agenda</a></li> 133 <li><a href="#tab_events_list_" onclick="add_events_list();">Lista de Eventos</a></li> 143 <li><a href="#tab_events_list_" onclick="add_events_list(false, 0);">Lista de Eventos</a></li> 144 <li><a href="#tab_tasks_list_" onclick="add_events_list(false, 1);">Lista de Tarefas</a></li> 134 145 <!--<li><a href="#sandbox2">Sandbox</a></li>--> 135 146 </ul> 136 147 <div id="calendar"> </div> 137 148 <div id="tab_events_list_"> </div> 149 <div id="tab_tasks_list_"> </div> 138 150 <div id="sandbox2"> </div> 139 151 <div id="calendarShared"> </div> … … 147 159 </div> 148 160 </body> 149 150 161 </html> 151 -
trunk/prototype/modules/calendar/templates/participants_add_itemlist.ejs
r6203 r6996 2 2 <div style="overflow:hidden; width:100%; display:table;"> 3 3 <div class="attendee-options"> 4 <%if( !data[0].isD irty && (data[0].acl.organization || data[0].acl.write || data[0].acl.inviteGuests)){%>4 <%if( !data[0].isDelegate && (!data[0].isDirty && data[0].notEvent) || (!data[0].isDirty && data[0].acl && (data[0].acl.organization || data[0].acl.write || data[0].acl.inviteGuests))){%> 5 5 <a href="#" class="button delegate attendee-options-button-delegate new">Delegar participação a este participante</a> 6 6 <%}%> 7 <%if( data[0].acl.organization || data[0].acl.write){%>7 <%if(!data[0].noEvent && data[0].acl && (data[0].acl.organization || data[0].acl.write)){%> 8 8 <a class="button edit attendee-options-button-edit new">Editar permissões</a> 9 9 <%}%> … … 14 14 <input type="hidden" name="attendee[]" value="<%= data[0].id %>"> 15 15 <input type="hidden" name="attendeeType[]" value="<%=data[0].isExternal%>"> 16 <input type="hidden" name="attendeeAcl[]" value="r"> 16 <%if(!data[0].noEvent){%> 17 <input type="hidden" name="attendeeAcl[]" value="r"> 18 <%}%> 17 19 <input type="hidden" name="delegatedFrom[]" value="0"> 18 20 <label title="<%= data[0].name ? data[0].name : '' %>" class="name"><%= data[0].name ? data[0].name : '' %></label> … … 20 22 21 23 </div> 22 23 24 </li> -
trunk/prototype/modules/calendar/templates/preferences_calendar.ejs
r6921 r6996 71 71 </p> 72 72 73 <p class="input-group"> 74 <label for="defaultCalendar">Agenda padrão:</label> 75 <select name="defaultCalendar" > 76 <%for(var i = 0; i < data.calendars.length; i++){%> 77 <option value="<%=data.calendars[i].id%>"> <%= data.calendars[i].name %></option> 78 <%}%> 79 </select> 80 </p> 81 73 82 <p class="input-group"> 74 <label for="defaultCalendar">Agenda padrão:</label> 75 <select name="defaultCalendar" > 76 <%for(var i = 0; i < data.calendars.length; i++){%> 77 <option value="<%=data.calendars[i].id%>"> <%= data.calendars[i].name %></option> 78 <%}%> 83 <label for="useDesktopNotification">Usar alarme desktop:</label> 84 <select name="useDesktopNotification" > 85 <option value="1" <%= data.preferences.useDesktopNotification == '1' ? 'selected="selected"' : '' %>>Sim</option> 86 <option value="0" <%= data.preferences.useDesktopNotification != '1' ? 'selected="selected"' : '' %>>Não</option> 79 87 </select> 80 88 </p>
Note: See TracChangeset
for help on using the changeset viewer.