source: trunk/prototype/modules/calendar/index.php @ 5381

Revision 5381, 17.4 KB checked in by acoutinho, 12 years ago (diff)

Ticket #2434 - Melhorias e correcoes de bugs e limpeza de codigo

Line 
1<?php
2
3        $GLOBALS['phpgw_info']['flags'] = Array(  'currentapp'    =>      'expressoCalendar',
4                                                  'noheader'      =>      false,
5                                                  'nonavbar'      =>      false,
6                                                  'noappheader'   =>      true,
7                                                  'noappfooter'   =>      true,
8                                                  'nofooter'      =>      true  );
9
10        include('../../../header.inc.php');
11       
12        $_SESSION['flags']['currentapp']  = 'expressoCalendar';
13       
14       
15        $_SESSION['wallet']['Sieve']['user']          = $GLOBALS['phpgw_info']['user']['account_lid'];
16        $_SESSION['wallet']['Sieve']['password']      = $GLOBALS['phpgw_info']['user']['passwd'];
17
18        $_SESSION['wallet']['Cyrus']['user']          = $GLOBALS['phpgw_info']['user']['account_lid'];
19        $_SESSION['wallet']['Cyrus']['password']      = $GLOBALS['phpgw_info']['user']['passwd'];
20
21        $_SESSION['wallet']['user']['uid']            =  $GLOBALS['phpgw_info']['user']['userid'];
22        $_SESSION['wallet']['user']['uidNumber']      =  $GLOBALS['phpgw_info']['user']['account_id'];
23        $_SESSION['wallet']['user']['password']       =  $GLOBALS['phpgw_info']['user']['passwd'];
24        $_SESSION['wallet']['user']['cn']             =  $GLOBALS['phpgw_info']['user']['cn'];
25        $_SESSION['wallet']['user']['mail']           =  $GLOBALS['phpgw_info']['user']['email'];
26                       
27        //Configuração caldav
28        $_SESSION['config']['expressoCalendar']['useCaldav'] = false;
29        $_SESSION['wallet']['caldav']['url'] = 'http://davical.prognus.com.br/caldav.php';
30        /////////////////////////////////////////////////////////////////////////////////////////////////////
31       
32        $_SESSION['wallet']['PostgreSQL']['user']     = $GLOBALS['phpgw_info']['server']['db_user'];
33        $_SESSION['wallet']['PostgreSQL']['password'] = $GLOBALS['phpgw_info']['server']['db_pass'];
34        $_SESSION['wallet']['PostgreSQL']['dbname']   = $GLOBALS['phpgw_info']['server']['db_name'];
35        $_SESSION['wallet']['PostgreSQL']['host']     = $GLOBALS['phpgw_info']['server']['db_host'];
36?>
37<html>
38<head>
39<meta http-equiv="Content-Type" content="text/html;charset=utf-8" />
40<script>
41        function dump(arr,level) {
42                var dumped_text = "";
43                if(!level) level = 0;
44
45                //The padding given at the beginning of the line.
46                var level_padding = "";
47                for(var j=0;j<level+1;j++) level_padding += "    ";
48
49                if(typeof(arr) == 'object') { //Array/Hashes/Objects
50                        for(var item in arr) {
51                                var value = arr[item];
52
53                                if(typeof(value) == 'object') { //If it is an array,
54                                        dumped_text += level_padding + "'" + item + "' ...\n";
55                                        dumped_text += dump(value,level+1);
56                                } else {
57                                        dumped_text += level_padding + "'" + item + "' => \"" + value + "\"\n";
58                                }
59                        }
60                } else { //Stings/Chars/Numbers etc.
61                        dumped_text = "===>"+arr+"<===("+typeof(arr)+")";
62                }
63                return dumped_text;
64        }
65</script>
66<!--<link rel='stylesheet' type='text/css' href="../../../templates/jquery-ui/redmond/jquery-ui.css"/>-->
67
68<!--<link rel='stylesheet' type='text/css' href='../fullcalendar/fullcalendar.css' />-->
69<link rel="stylesheet" type="text/css" href="css/reset.css" />
70<link rel='stylesheet' type='text/css' href='../../app/plugins/fullcalendar/fullcalendar.css' />
71<link rel='stylesheet' type='text/css' href='../../app/plugins/fullcalendar/fullcalendar.print.css' media='print' />
72<link rel='stylesheet' type='text/css' href='../../app/plugins/jquery/jquery-ui.custom.css'/>
73<link rel='stylesheet' type='text/css' href='../../app/plugins/icalendar/jquery.icalendar.css'/>
74<link type="text/css" href="../../app/plugins/fgmenu/fg.menu.css" media="screen" rel="stylesheet" />
75<!--<link type="text/css" href="../../fgmenu/theme/ui.all.css" media="screen" rel="stylesheet" />-->
76
77<link rel='stylesheet' type='text/css' href='../../app/plugins/fileupload/jquery.fileupload-ui.css'/>
78<link rel="stylesheet" href="../../app/plugins/jquery.pagination/pagination.css" />
79
80<!-- JPicker -->
81<link rel="Stylesheet" type="text/css" href="../../app/plugins/jpicker/css/jPicker-1.1.6.min.css" />
82<link rel="Stylesheet" type="text/css" href="../../app/plugins/jpicker/jPicker.css" />
83
84<link rel="Stylesheet" type="text/css" href="../../app/plugins/farbtastic/farbtastic.css" />
85<link rel="Stylesheet" type="text/css" href="../../app/plugins/timepicker/jquery-ui-timepicker-addon.css" />
86<link rel="stylesheet" type="text/css" href='../../app/plugins/zebradialog/css/zebra_dialog.css'></link>
87
88<link rel="stylesheet" type="text/css" href="css/layout.css" />
89<link rel="stylesheet" type="text/css" href="css/style.css" />
90
91<script type='text/javascript' src='../../app/plugins/datejs/date-pt-BR.js'></script>
92<script type='text/javascript' src='../../app/plugins/jquery/jquery.min.js'></script>
93<script type='text/javascript' src='../../app/plugins/icalendar/jquery.icalendar.js'></script>
94<script type='text/javascript' src='../../app/plugins/jquery/jquery-ui.custom.min.js'></script>
95<script type='text/javascript' src="../../app/plugins/jquery/i18n/jquery.ui.datepicker-pt-BR.js"></script>
96<script type='text/javascript' src="../../app/plugins/timepicker/jquery-ui-timepicker-addon.js"></script>
97<script type='text/javascript' src="../../app/plugins/timepicker/localization/jquery-ui-timepicker-pt-BR.js"></script>
98<script type='text/javascript' src='../../app/plugins/json2/json2.js'></script>
99<script type='text/javascript' src='../../app/plugins/store/jquery.store.js'></script>
100<script type='text/javascript' src='../../app/plugins/fileupload/jquery.fileupload.js'></script>
101<script type='text/javascript' src='../../app/plugins/fileupload/jquery.fileupload-ui.js'></script>
102<script type='text/javascript' src='../../app/plugins/fileupload/jquery.iframe-transport.js'></script>
103<script type='text/javascript' src='../../app/plugins/store/jquery.store.js'></script>
104<script type="text/javascript" src="../../app/plugins/jquery.pagination/jquery.pagination.js"></script>
105<script type='text/javascript' src='../../app/plugins/mask/jquery.maskedinput.js'></script>
106<script type='text/javascript' src='../../app/plugins/alphanumeric/jquery.alphanumeric.js'></script>
107<script type='text/javascript' src='../../app/plugins/watermark/jquery.watermarkinput.js'></script>
108<script type='text/javascript' src='../../app/plugins/encoder/encoder.js'></script>
109<script type='text/javascript' src='../../app/datalayer.js'></script>
110
111<!-- Datejs -->   
112<!-- <script type='text/javascript' src='../../datejs/core.js'></script> -->
113<!--<script type='text/javascript' src='../../app/plugins/datejs/date-pt-BR.js'></script>-->
114<!-- <script type='text/javascript' src='../../app/plugins/datejs/globalization/pt-BR.js'></script> -->
115<script type='text/javascript' src='../../app/plugins/datejs/sugarpak.js'></script>
116<script type='text/javascript' src='../../app/plugins/datejs/parser.js'></script>
117
118<!--  <script type='text/javascript' src='../../datejs/time.js'></script>  -->
119<script type='text/javascript' src='../../app/plugins/dateFormat/dateFormat.js'></script>
120<script type='text/javascript' src='js/base64.js'></script>
121<script type='text/javascript' src='js/helpers.js'></script>
122<script type='text/javascript' src='js/calendar.codecs.js'></script>
123
124
125
126<!--<script type='text/javascript' src='../fullcalendar/fullcalendar.min.js'></script>-->
127<script type='text/javascript' src='../../app/plugins/fullcalendar/fullcalendar.js'></script>
128<script type='text/javascript' src='js/I18n.js'></script>
129<script type='text/javascript' src='../../app/plugins/jquery.dateFormat/jquery.dateFormat.js'></script>
130
131<script type='text/javascript' src='../../app/plugins/zebradialog/javascript/zebra_dialog.js'></script>
132<script type='text/javascript' src='../../app/plugins/scrollto/jquery.scrollTo.js'></script>
133<!-- <script type='text/javascript' src='../../app/plugins/view/jquerymx-1.0.custom.min.js'></script> -->
134<script type='text/javascript' src='../../app/plugins/ejs/ejs.js'></script>
135
136<script type="text/javascript" src="../../app/plugins/fgmenu/fg.menu.js"></script>
137
138<script type="text/javascript" src="../../app/plugins/qtip/jquery.qtip-1.0.0-rc3.min.js"></script>
139
140<!-- JPicker -->
141<script src="../../app/plugins/jpicker/jpicker-1.1.6.min.js" type="text/javascript"></script>
142
143<script src="../../app/plugins/farbtastic/farbtastic.js" type="text/javascript"></script>
144
145<script type='text/javascript'>
146
147
148$(document).ready(function() {
149
150        refresh_calendars();
151        $tabs = $('#tabs').tabs({
152            add: function( event, ui ) {
153                        User.lastView = $tabs.tabs('option' ,'selected');
154                        $tabs.tabs('select', '#' + ui.panel.id);
155                },
156                remove: function( event, ui ) {
157                        $tabs.tabs('select', User.lastView);
158                },
159                show: function( event, ui ){
160                        delete Calendar.currentViewKey;
161                        $('#calendar').fullCalendar('refetchEvents');
162                }
163        })
164        .tabs('option', 'tabTemplate', "<li><a href='#{href}'>#{label}</a><span class='ui-icon ui-icon-close'>Remove Tab</span></li>" );
165
166        /**
167          * Make a button to close the tab
168          */
169        $tabs.find( "span.ui-icon-close" ).live( "click", function() {
170                var index = $( "li", $tabs ).index( $( this ).parent() );
171                if($tabs.tabs('option' ,'selected') == index){
172                        if($tabs.tabs("length") == 2 && User.lastView != 1)
173                                $tabs.tabs( "select", 0);
174                        $tabs.tabs( "select", User.lastView);
175                }
176                if($tabs.tabs('option' ,'selected') == 0 || $tabs.tabs('option' ,'selected') == 1)
177                        User.lastView = $tabs.tabs('option' ,'selected');
178                if(index != -1)
179                  $tabs.tabs( "remove", index );       
180                       
181               
182                });     
183        $('.button.config-menu').button({
184            icons: {
185                primary: "ui-icon-gear",
186                secondary: "ui-icon-triangle-1-s"
187            },
188            text: false
189        });
190      $('.button.add').button({
191              icons: {
192                      secondary: "ui-icon-plus"
193              }
194      })
195
196                var miniCalendar = $('.block-vertical-toolbox .mini-calendar').datepicker({
197                        dateFormat: 'yy-m-d',
198                        //dateFormat: 'DD, d MM, yy',
199                        //inline: true,
200                        firstDay: dayOfWeek(User.preferences.weekStart),
201                        onSelect: function(dateText, inst)
202                        {       
203                                $tabs.tabs("select", "#calendar");
204                                var date = dateText.split('-');
205                                var dateFullCalendar = $.fullCalendar.formatDate($('#calendar').fullCalendar('getDate'), "yyyy-MM-dd").split('-');
206                                $('#calendar').fullCalendar('gotoDate',date[0],date[1]-1,date[2]);
207                                $('#calendar').fullCalendar( 'changeView', 'agendaDay' );
208                        }                       
209                })
210                .find('.ui-icon-circle-triangle-e').removeClass('ui-icon-circle-triangle-e').addClass('ui-icon-triangle-1-e').end()
211                .find('.ui-icon-circle-triangle-w').removeClass('ui-icon-circle-triangle-w').addClass('ui-icon-triangle-1-w');
212               
213                //Onclick do mês
214                $('.ui-datepicker-title .ui-datepicker-month').live('click',function(){
215                        $tabs.tabs("select", "#calendar");
216                        $('#calendar').fullCalendar('gotoDate',$(this).siblings('span').html(), Date.getMonthNumberFromName($(this).html() == 'Março' ? 'Mar' : $(this).html()),'01');
217                        $('#calendar').fullCalendar( 'changeView', 'month');
218                });
219                //Onclick do ano
220                $('.ui-datepicker-title .ui-datepicker-year').live('click',function(){
221                        $tabs.tabs("select", "#calendar");
222                        $('#calendar').fullCalendar('gotoDate',$(this).html(), '0', '01');
223                        $('.fc-button-year').click();
224                });
225               
226        //Onclick em um dia do calendário anual
227        $( ".fc-day-number" ).live( "click", function() {
228                       
229                var date = $(this).parents('[class*="fc-day-"]').attr('class').match(/fc-day-(\d{4})-(\d{2})-(\d{2})/);
230
231                if (date) date.shift();
232                else return false;
233
234                $('#calendar').fullCalendar('gotoDate',date[0],date[1]-1,date[2]);
235                $('#calendar').fullCalendar( 'changeView', 'agendaDay' );
236        });     
237
238        $('.main-search input.search').keydown(function(event){
239                if(event.keyCode == 13) {
240                        Encoder.EncodeType = "entity";
241                        //$(this).val($(this).val());
242                                       
243                        add_events_list($(this).val());
244                        $(this).val('');
245                }
246        });
247                               
248        $('.block-horizontal-toolbox .main-config-menu').menu({
249                content: $('.main-config-menu-content').html(),
250                positionOpts: {
251                        posX: 'left',
252                        posY: 'bottom',
253                        offsetX: -140,
254                        offsetY: 0,
255                        directionH: 'right',
256                        directionV: 'down',
257                        detectH: true, // do horizontal collision detection 
258                        detectV: true, // do vertical collision detection
259                        linkToFront: false
260                },
261                flyOut: true,
262                showSpeed: 100,
263                crumbDefaultText: '>'
264        });
265             
266                $('#trash').droppable({
267                        drop: function(event, ui){
268                                //              calendar.fullCalendar( 'removeEvents', ui.draggable.attr('event-id') );
269                                DataLayer.remove( "event", ui.draggable.attr('event-id') );
270                                $(this).switchClass('empty','full');
271                        },
272                        tolerance: "touch"
273                });
274
275      /* initialize the calendar
276      -----------------------------------------------------------------*/
277                $(".button.add.add-event").click(function(event){
278                        var startEvent = new Date();
279                        if(startEvent.toString('mm') < 30)
280                                startEvent.add({minutes: 30 - parseInt(startEvent.toString('mm'))});
281                        else
282                                startEvent.add({hours: 1, minutes: '-'+startEvent.toString('mm')});
283                        var endEvent = function(date){
284                                if(!!User.preferences.defaultCalendar){
285                                        return Calendar.signatureOf[User.preferences.defaultCalendar].calendar.defaultDuration != "" ?
286                                                (parseInt(date.getTime()) + Calendar.signatureOf[User.preferences.defaultCalendar].calendar.defaultDuration * 60000)
287                                                : (User.preferences.defaultDuration * 60000);
288                                }else
289                                        return parseInt(date.getTime()) + (User.preferences.defaultDuration * 60000);
290                        };     
291                        eventDetails({
292                                startTime: startEvent.getTime(),
293                                endTime: endEvent(startEvent)
294                        }, true );
295                });
296
297        var calendar = $('#calendar').fullCalendar({
298
299                defaultView: User.preferences.defaultCalView,
300                timeFormat: User.preferences.hourFormat,
301                axisFormat: User.preferences.hourFormat,
302                eventSources: Calendar.sources,
303
304                header: {
305                        left: 'prev,next today,basicWeek,basicDay',
306                        center: 'title',
307                        right: 'agendaDay,agendaWeek,month,year'
308                },
309                firstDay: dayOfWeek(User.preferences.weekStart),
310                editable: true,
311                selectable: true,
312                selectHelper: true,
313                droppable: true, // this allows things to be dropped onto the calendar !!!
314                timeFormat: {
315                        agenda: 'HH:mm{ - HH:mm}',
316                        '': 'HH:mm{ - HH:mm} }'
317                },
318                titleFormat: {
319                        month: 'MMMM yyyy',                             
320                        week: "dd[ yyyy] { 'a'[ MMM] dd 'de' MMMM '-' yyyy}",
321                        day: 'dddd,  dd MMM, yyyy'
322                },
323                columnFormat:{
324                        month: 'ddd',   
325                        week: 'ddd dd/MM',
326                        day: 'dddd dd/MM' 
327                },
328                monthNames: ['Janeiro','Fevereiro','Março','Abril','Maio','Junho','Julho', 'Agosto', 'Setembro', 'Outubro', 'Novembro', 'Dezembro' ],
329                monthNamesShort: ['Jan','Fev','Mar','Abr','Mai','Jun','Jul','Ago','Set','Out','Nov','Dez'],
330                dayNames: [ 'Domingo', 'Segunda', 'Terça', 'Quarta', 'Quinta', 'Sexta', 'Sábado'],
331                dayNamesShort: ['Dom','Seg','Ter','Qua','Qui','Sex','Sáb'],
332                dayNamesShortest: ['D','S','T','Q','Q','S','S'],
333                allDayText: 'Dia todo',
334                buttonText: {
335                        today: 'hoje',
336                        month: 'mês',
337                        week: 'semana',
338                        day: 'dia',
339                        year: 'ano'
340                },
341               
342                eventRender: function( event, element, view ){
343                        $(element).attr( 'event-id', event.id );
344                },
345
346                select: function( start, end, allDay, event, view ){
347                        eventDetails( { 'start': start,
348                                        'end': end,
349                                        'allDay': allDay } );
350                },
351
352                eventDrop: function( event ){
353                        DataLayer.put( "schedulable:calendar", event );
354                },
355
356                eventResize: function( event ){
357                        DataLayer.put( "schedulable:calendar", event );
358                },
359
360                eventClick: function( evt, event, view ){
361                        eventDetails( DataLayer.get( "schedulable", evt.id), true);
362                }
363        });
364         
365        if($(window).height() < $('body').height()){
366                var hei = $('body').height() - $(window).height();
367                hei = $('#divAppbox').height() - hei;
368                $('#divAppbox').css('max-height', hei);
369                $('#divAppbox').css('min-height', hei);
370                $('body').css('overflow-y','hidden');
371                delete hei;
372         }
373         
374         $(window).resize(function(){
375                $('#divAppbox').css('max-height', $(window).height() - 104);
376                $('#divAppbox').css('min-height', $(window).height() - 104);
377                $('#divAppbox').css('overflow-x', 'auto');
378                $('#divAppbox').css('overflow-y', 'scroll');
379        });       
380        //Todo chamada do metodo que adiciona ao full calendar o botao de listagem de eventos 
381        //listEvents();
382});
383</script>
384</head>
385
386<body>
387        <div id="wrap" class="expresso-calendar-container" style="text-align:left;">
388                <div class="block-horizontal-toolbox">
389                        <a class="button config-menu main-config-menu" href="#"></a>
390                        <div class="main-config-menu-content hidden">
391                                <ul>
392                                        <li><a href="#" onclick="add_tab_preferences();" class="menu-command configurations">Prefer&ecirc;ncias</a></l
393                                        <li><a href="#" onclick="add_tab_configure_calendar();" class="menu-command configurations">Configura&ccedil;&atilde;o de agendas</a></li>
394                                        <li><a href="#" onclick="show_modal_import_export(0);" class="menu-pass-through">Importar</a></li>
395                                        <li><a href="#" onclick="show_modal_import_export(1);" class="menu-pass-through">Exportar</a></li>
396                                </ul>
397                        </div>         
398                        <fieldset class="search-field main-search ui-corner-all">
399                                <span class="ui-icon ui-icon-search"></span>
400                                <input class="search" type="text" />
401                        </fieldset>
402                </div>
403               
404                <div class="block-vertical-toolbox">
405                        <a class="button add add-event" href="#">Adicionar evento</a>
406                        <!--<a class="button add" href="#" onclick="add_events_list();">Lista de Eventos</a>-->
407                        <div class="mini-calendar"></div>
408
409                        <div class="calendars-list"></div>
410
411                        <div id="trash" class="ui-corner-all empty hidden"  align="middle" valign="middle"><label>Lixeira</label></div>
412                </div>
413
414                <div id="tabs">
415                        <ul>
416                                <li><a href="#calendar">Agenda</a></li>
417                                <li><a href="#tab_events_list_" onclick="add_events_list();">Lista de Eventos</a></li>
418                                <!--<li><a href="#sandbox2">Sandbox</a></li>-->
419                        </ul>
420                        <div id="calendar"> </div>
421                        <div id="tab_events_list_"> </div>
422                        <div id="sandbox2">     </div>
423                </div>
424               
425                <div id="sandbox" class="expresso-calendar-container hidden"> </div>
426                <div id="div-import-export-calendar" class="expresso-calendar-container"> </div>
427                <div id="div-alarm" class="expresso-alarm-container"> </div>
428        </div>
429</body>
430
431</html>
432
Note: See TracBrowser for help on using the repository browser.