Advertisement
klenzel

Abfall übernächster Termin Datum

Feb 18th, 2016
401
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. var abfall = false;
  2. (function(i) {
  3.  
  4.     var Ical = function Ical(){
  5.         this.version = '';
  6.         this.prodid = '';
  7.         this.events = [];
  8.         this.todos = [];
  9.         this.journals = [];
  10.         this.freebusys = [];
  11.     }
  12.     var xprops = 'x-[^:;]+';
  13.     var ianaprops = '[\\w]+[^:;]+'
  14.     var icalParser = {
  15.         icals : [],
  16.         propsList : {
  17.             'event':'(dtstamp|uid|dtstart|class|created|description|geo|last-mod|location|organizer|priority|seq|status|summary|transp|url|recurid|rrule|dtend|duration|attach|attendee|categories|comment|contact|exdate|rstatus|related|resources|rdate|'+xprops+'|'+ianaprops+')',
  18.             'freebusy':'(dtstamp|uid|contact|dtstart|dtend|organizer|url|attendee|comment|freebusy|rstatus|'+xprops+'|'+ianaprops+')',
  19.             'journal':'(dtstamp|uid|class|created|dtstart|last-mod|organizer|recurid|seq|status|summary|url|rrule|attach|attendee|categories|comment|contact|description|exdate|related|rdate|rstatus|'+xprops+'|'+ianaprops+')',
  20.             'todo':'(dtstamp|uid|class|completed|created|description|dtstart|geo|last-mod|location|organizer|percent|priority|recurid|seq|status|summary|url|rrule|due|duration|attach|attendee|categories|comment|contact|exdate|rstatus|related|resources|rdate|'+xprops+'|'+ianaprops+')'
  21.         },
  22.         parseIcal : function(icsString){
  23.             var cals = icsString.match(/BEGIN:VCALENDAR\r?\n(.*\r?\n)+?END:VCALENDAR/ig);
  24.             for(var index in cals){
  25.                 //console.log("--->"+index+" "+cals[index]);
  26.                 var ical = new Ical();
  27.                 ical.version = this.getValue('VERSION',cals[index]);
  28.                 ical.prodid = this.getValue('PRODID',cals[index]);
  29.                 cals[index] = cals[index].replace(/\r\n /g,'');
  30.                 cals[index] = cals[index].replace(/BEGIN:VCALENDAR\r?\n/ig,'');
  31.                 var reg = /BEGIN:(V.*?)\r?\n(.*\r?\n)+?END:\1/gi;
  32.                 matches = cals[index].match(reg);
  33.                 if(matches){
  34.                     for(i=0;i<matches.length;i++){
  35.                         //console.log('---------->'+matches[i]+"\n<------------");
  36.                         this.parseVComponent(matches[i],ical);
  37.                     }
  38.                 }
  39.                 this.icals[this.icals.length] = ical;
  40.             }
  41.         },
  42.         parseVComponent : function(vComponent,ical){
  43.             var nameComponent = vComponent.match(/BEGIN:V([^\s]+)/i)[1].toLowerCase();
  44.             vComponent = vComponent.replace(/\r?\n[\s]+/igm,''); //unfolding
  45.             vComponent = vComponent.replace(/(^begin|^end):.*/igm,'');
  46.             //console.log(nameComponent+' ++++ '+vComponent);
  47.             var props = vComponent.match(new RegExp(this.propsList[nameComponent]+'[:;].*','gim'));
  48.             if(props){
  49.                 var component=[];
  50.                 for(var index in props){
  51.                     var nom = props[index].replace(/[:;].*$/,'');
  52.                     //console.log("--vcompo "+index+" "+nom);
  53.                     var propKey = /*'prop_'+*/nom.toLowerCase();
  54.                     if(component[propKey]===undefined) component[propKey] = [];
  55.                     component[propKey][component[propKey].length] = this.getValue(nom,props[index]);
  56.                     component['raw'] = vComponent;
  57.                 }
  58.                 if(ical[nameComponent+'s'] !== undefined)
  59.                     ical[nameComponent+'s'][ical[nameComponent+'s'].length] = component;
  60.             }
  61.         },
  62.         getValue: function(propName,line){
  63.             //console.log(line);
  64.             var prop={};
  65.             line = line.replace(/^\s+/g,'').replace(/\s+$/gi,'');
  66.             reg = new RegExp('('+propName+')((?:;[^=]*=[^;:\n]*)*):([^\n\r]*)','gi');
  67.             var matches = reg.exec(line);
  68.             if(matches){ //on a trouvé la propriété cherchée
  69.                 //console.log(propName+' ==] params='+RegExp.$2+' / valeur='+RegExp.$3);
  70.                 var valeur = RegExp.$3;
  71.                 var tab_params=[];
  72.                 if(RegExp.$2.length>0){ //il y a des paramètres associés
  73.                     var params = RegExp.$2.substr(1).split(';');
  74.                     var pair;
  75.                     for(k=0;k<params.length;k++){
  76.                         pair = params[k].split('=');
  77.                         if(!pair[1]) pair[1] = pair[0];
  78.                         tab_params[pair[0]] = pair[1];
  79.                     }
  80.                 }
  81.                 prop = { value:valeur,name:propName };
  82.                 if(Object.keys(tab_params).length>0)
  83.                     prop.params = tab_params;
  84.             }
  85.             return prop;
  86.         },
  87.     }
  88.    
  89.    
  90.     /**
  91.     * Funktion um ical Datumsstring (YYYYMMDD) in Date Objekt zu wandeln
  92.     */
  93.     function calenDateFrom(icalStr)  {
  94.         var strYear = icalStr.substr(0,4);
  95.         var strMonth = parseInt(icalStr.substr(4,2),10)-1;
  96.         var strDay = icalStr.substr(6,2);
  97.         var strHour = 0;
  98.         var strMin = 0;
  99.         var strSec = 0;
  100.  
  101.         var oDate =  new Date(strYear,strMonth, strDay, strHour, strMin, strSec)
  102.  
  103.         return oDate;
  104.     }
  105.    
  106.     function calenDateTo(icalStr)  {
  107.         var strYear = icalStr.substr(0,4);
  108.         var strMonth = parseInt(icalStr.substr(4,2),10)-1;
  109.         var strDay = icalStr.substr(6,2);
  110.         var strHour = 23;
  111.         var strMin = 59;
  112.         var strSec = 59;
  113.  
  114.         var oDate =  new Date(strYear,strMonth, strDay, strHour, strMin, strSec)
  115.  
  116.         return oDate;
  117.     }
  118.    
  119.    
  120.     var stopper = 0;
  121.     var zaehler = 1;
  122.     icalParser.parseIcal(input);
  123.     var event = icalParser.icals[0].events[0];
  124.     icalParser.icals[0].events.forEach(function (currentValue, index, originalArray) {
  125.         /**
  126.         *   Prüfen ob das aktuelle Datum zwischen zwei Daten liegt, bzw. auf einen Tag fällt
  127.         */
  128.         var dateFrom = calenDateFrom(currentValue.dtstart[0].value);
  129.         var dateTo = calenDateTo(currentValue.dtend[0].value);
  130.         var dateCheck = new Date();
  131.  
  132.        
  133.        
  134.         if (dateFrom >= dateCheck && stopper == 0 && zaehler == 2){
  135.             abfall = dateTo.getFullYear() + "-" + (dateTo.getMonth() + 1) + "-" + dateTo.getDate() + "T00:00:00"
  136.             stopper = 1;
  137.         }
  138.        
  139.         if (dateFrom >= dateCheck && stopper == 0){
  140.             zaehler += 1;
  141.         }
  142.        
  143.        
  144.     });
  145.     return abfall;
  146.    
  147.    
  148.    
  149. })(input);
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement