Διαδικτυακό Ημερολόγιο -...

61
Τ.Ε.Ι ΚΑΒΑΛΑΣ ΣΧΟΛΗ ΔΙΟΙΚΗΣΗΣ ΚΑΙ ΟΙΚΟΝΟΜΙΑΣ ΤΜΗΜΑ ΔΙΑΧΕΙΡΙΣΗΣ ΠΛΗΡΟΦΟΡΙΩΝ Διαδικτυακό Ημερολόγιο Πατσιαβουρίδου Μαγδαλένα (Α.Ε.Μ.: 1723) Επόπτης Καθηγητής: Χατζής Βασίλειος Μαϊος 2014

Transcript of Διαδικτυακό Ημερολόγιο -...

Page 1: Διαδικτυακό Ημερολόγιο - teiemt.grdigilib.teiemt.gr/jspui/bitstream/123456789/466/1/... · 2015-04-26 · Τέλος στο Κεφάλαιο 4, παραθέτεται

Τ.Ε.Ι ΚΑΒΑΛΑΣ ΣΧΟΛΗ ΔΙΟΙΚΗΣΗΣ ΚΑΙ ΟΙΚΟΝΟΜΙΑΣ

ΤΜΗΜΑΔΙΑΧΕΙΡΙΣΗΣ

ΠΛΗΡΟΦΟΡΙΩΝ

Διαδικτυακό Ημερολόγιο

Πατσιαβουρίδου Μαγδαλένα (Α.Ε.Μ.: 1723)

Επόπτης Καθηγητής: Χατζής Βασίλειος

Μαϊος 2014

Page 2: Διαδικτυακό Ημερολόγιο - teiemt.grdigilib.teiemt.gr/jspui/bitstream/123456789/466/1/... · 2015-04-26 · Τέλος στο Κεφάλαιο 4, παραθέτεται

Περιεχόμενα

Περιεχόμενα

ΣΧΕΔΙΑΣΜΟΣ ΚΑΙ ΑΝΑΠΤΥΞΗ ΔΙΑΔΙΚΤΥΑΚΗΣ ΕΦΑΡΜΟΓΗΣΣΦΑΛΜΑ! ΔΕΝ ΕΧΕΙ ΟΡΙΣΤΕΙ ΣΕΛΙΔΟΔΕΙΚΤΗΣ.

ΚΕΦΑΛΑΙΟ 1Ο 4

Εισαγωγή 41.1 Γενικά 41.2 ΙΣΤΟΡΙΚΗ ΑΝΑΔΡΟΜΗ 51.3 ΔΙΑΔΙΚΤΥΑΚΟ ΗΜΕΡΟΛΟΓΙΟ 7

ΚΕΦΑΛΑΙΟ 2Ο 10

Τεχνικά Χαρακτηριστικά 102.1 Ανάλυση απαιτήσεων και λειτουργικά χαρακτηριστικά της εφαρμογής 102.2 Προϋποθέσεις σωστού σχεδιασμού και καλής λειτουργίας της εφαρμογής 11

ΚΕΦΑΛΑΙΟ 3Ο 13

Τεχνολογίες 133.1 H HTML και το Internet 133.2 Η γλώσσα PHP 163.3 - Βάσεις Δεδομένων SQL 203.4 jQuery 263.5 CSS (Cascading Style Sheets) 27

ΚΕΦΑΛΑΙΟ 4Ο 28

Υλοποίηση 284.1 Εγκατάσταση της εφαρμογής 284.2 Παρουσίαση της διεπαφής του ημερολογίου 314.3 Αρχεία κώδικα 35

ΒΙΒΛΙΟΓΡΑΦΙΑ 60

Σελίδα 2 από 61

Page 3: Διαδικτυακό Ημερολόγιο - teiemt.grdigilib.teiemt.gr/jspui/bitstream/123456789/466/1/... · 2015-04-26 · Τέλος στο Κεφάλαιο 4, παραθέτεται

Ευρετήριο Εικόνων και Πινάκων

Ευρετήριο εικόνων και πινάκων

Εικ 1.1 Η πρώτη μορφή του internet......................................................................... 6Εικ. 1.2 Στατιστικα χρηστών internet........................................................................7Εικ 3.1 Operators...............................................................................................22Εικ3.2 Πίνακας notes.......................................................................................... 24Εικ 3.3 Πίνακας Tasks.........................................................................................25Εικ 3.4 Σύνταξη Css........................................................................................... 27Εικ 4.1 Λειτουργία xampp.................................................................................... 29Εικ4.2 Πρόσβαση στο μενού τοπικού server.............................................................. 29Εικ4.3Βάσεις δεδομένων στον τοπικού server............................................................. 29Εικ4.4Βάσεις δεδομένων στον τοπικού server..............................................................30Εικ4.4 Import Βάσεως δεδομένων στον τοπικού server.................................................. 31Εικ4.5 Διεπαφή ημερολογίου................................................................................. 32Εικ4.6 Task σε κάθε ημέρα................................................................................... 33Εικ4.7 Σημειωματάριο ημέρας................................................................................33Εικ4.8 Αναφορά ημέρας.......................................................................................34Εικ 4.9 Προσθήκη συμβάντος................................................................................ 35

Σελίδα 3 από 61

Page 4: Διαδικτυακό Ημερολόγιο - teiemt.grdigilib.teiemt.gr/jspui/bitstream/123456789/466/1/... · 2015-04-26 · Τέλος στο Κεφάλαιο 4, παραθέτεται

Κεφάλαιο 1ο

Εισαγωγή

1.1 ΓενικάΟι περισσότεροι άνθρωποι σήμερα πολύ δύσκολα μπορούν να

φανταστούν τη ζωή τους χωρίς το διαδίκτυο. Το Internet μας παρέχει πρόσβαση σε ειδήσεις, ηλεκτρονικά μηνύματα, αγορές και διασκέδαση κάθε ώρα της ημέρας και της νύκτας. Κάποιοι ισχυρίζονται ότι καμία άλλη εφεύρεση δεν ήταν πιο επαναστατική μετά από την εφεύρεση της τυπογραφίας από τον Gutenberg τον 15ο αιώνα.

Το Διαδίκτυο είναι ένα παγκόσμιο σύστημα διασυνδεδεμένωνδικτύων υπολογιστών, οι οποίοι χρησιμοποιούν καθιερωμένη ομάδα πρωτοκόλλων, η οποία χρησιμοποιείται για να εξυπηρετεί εκατομμύρια χρηστών καθημερινά σε ολόκληρο τον κόσμο. Οι διασυνδεδεμένοι ηλεκτρονικοί υπολογιστές ανά τον κόσμο, οι οποίοι βρίσκονται σε ένα κοινό δίκτυο επικοινωνίας, ανταλλάσσουν μηνύματα (πακέτα) με τη χρήση διαφόρων πρωτοκόλλων (τυποποιημένοι κανόνες επικοινωνίας), τα οποία υλοποιούνται σε επίπεδο υλικού και λογισμικού. Το κοινό αυτό δίκτυο καλείται Διαδίκτυο.

Η επικοινωνία μέσω του διαδικτύου καθίσταται άμεση και αμφίδρομη. Δίνεται η δυνατότητα σε κάθε χρήστη ηλεκτρονικού υπολογιστή συνδεδεμένου στο Διαδίκτυο, να πληροφορηθεί αλλά και να πληροφορήσει ανταλλάσσοντας

Σελίδα 4 από 61

Page 5: Διαδικτυακό Ημερολόγιο - teiemt.grdigilib.teiemt.gr/jspui/bitstream/123456789/466/1/... · 2015-04-26 · Τέλος στο Κεφάλαιο 4, παραθέτεται

Πτυχιακή εργασία της Πατσιαβουρίδου Μαγδαλένας

απόψεις μέσω ενός πιο συμμετοχικοί και λιγότερο ελεγχομένου διαύλου επικοινωνίας. Οι χρήστες αποκτούν ολοένα και περισσότερο την ιδιότητα του παγκοσμίου πολίτη.

Το Διαδίκτυο, σε συνδυασμό με την ολοένα αναπτυσσόμενη ψηφιακή τεχνολογία, έχει δημιουργήσει μία τεράστια αγορά γνώσεων/πληροφοριών. Από τη στιγμή που το Διαδίκτυο είναι ένα δίκτυο συνδεδεμένων υπολογιστών, κάθε χρήστης έχει την δυνατότητα να μοιραστεί πληροφορίες με άλλους χρήστες γενόμενος, πολλές φορές, ο ίδιος δημιουργός και πάροχος των πληροφοριών αυτών.

1.2 ΙΣΤΟΡΙΚΗ ΑΝΑΔΡΟΜΗΟι πρώτες απόπειρες για την δημιουργία ενός διαδικτύου ξεκίνησαν

στις ηπα στη δεκαετία του 1960, και διάφορα δίκτυα ανταλλαγής πακέτων πληροφοριών όπως τα Mark I, ARPANET, CYCLADES, Merit Network, Tymnet και Telenet, αναπτύχθηκαν στις αρχές του ’70, με τη χρήση διάφορων τύπων πρωτοκόλλων. Το 1974, από τη μελέτη των Vint Cerf και Bob Kahn, προέκυψε το πρωτόκολλο TCP (Transmission Control Protocol), που αργότερα (1978) έγινε TCP/IP, προστέθηκε δηλαδή το Internet Protocol (IP), ώσπου το 1983 έγινε το μοναδικό πρωτόκολλο που ακολουθούσε το ARPANET, εξαλείφοντας τα μειονεκτήματα προηγούμενων πρωτοκόλλων. Το 1984 υλοποιείται το πρώτο DNS (Domain Name System) σύστημα στο οποίο καταγράφονται 1000 κεντρικοί κόμβοι και οι υπολογιστές του διαδικτύου πλέον αναγνωρίζονται από διευθύνσεις κωδικοποιημένων αριθμών. Ένα ακόμα σημαντικό βήμα στην ανάπτυξη του Διαδικτύου έκανε το Εθνικό Ίδρυμα Επιστημών (National Science Foundation, NSF) των ΗΠΑ, το οποίο δημιούργησε την πρώτη διαδικτυακή πανεπιστημιακή ραχοκοκκαλιά (backbone), το NSFNet, το 1986. Ακολούθησε η ενσωμάτωση και άλλων σημαντικών δικτύων, όπως το Usenet, το Fidonet και το Bitnet.

Σελίδα 5 από 61

Page 6: Διαδικτυακό Ημερολόγιο - teiemt.grdigilib.teiemt.gr/jspui/bitstream/123456789/466/1/... · 2015-04-26 · Τέλος στο Κεφάλαιο 4, παραθέτεται

Κεφάλαιο 1ο

Ο όρος Διαδίκτυο/Internet ξεκίνησε να χρησιμοποιείται ευρέως την εποχή που συνδέθηκε το ARPANET με το NSFNet και Internet σήμαινε οποιοδήποτε δίκτυο χρησιμοποιούσε TCP/IP. Η μεγάλη άνθιση του Διαδικτύου όμως, ξεκίνησε με την εφαρμογή της υπηρεσίας του Παγκόσμιου Ιστού από τον Τιμ Μπέρνερς- Λι στο ερευνητικό ίδρυμα CERN το 1989, ο οποίος είναι στην ουσία, η "πλατφόρμα", η οποία κάνει εύκολη την πρόσβαση στο Ίντερνετ, ακόμα και στη μορφή που είναι γνωστό σήμερα. Το Διαδίκτυο εξαπλώθηκε ταχύτατα στην Ευρώπη κατά τη δεκαετία του ’80, ενώ στην Ασία στις αρχές του ‘90.

Από τα μέσα της δεκαετίας του ’90 το internet είχε τεράστιο αντίκτυπο στον εμπόριο και τον πολιτισμό, με την εξάπλωση της σχεδόν άμεσης επικοινωνίας μέσω email, των άμεσων μηνυμάτων, των τηλεφωνικών κλήσεων VoIP, των αμφίδρομων βιντεοκλήσεων και του Παγκόσμιο Ιστού, με τα blogs, τα forum συζητήσεων, τα μέσα κοινωνικής δικτύωσης (Facebook, Twitter, Google+ κτλ) και τις ιστοσελίδες online αγορών που περιλαμβάνει. To internet συνεχίζει να μεγαλώνει, οδηγούμενο από ακόμα μεγαλύτερους όγκους online πληροφοριών και γνώσης, εμπορίου, διασκέδασης και κοινωνικής δικτύωσης. Τα όλο και αυξανόμενα ποσά των δεδομένων που μεταδίδονται, οδηγούν στην ανάπτυξη όλο και ταχύτερων δικτύων με τη χρήση νέων τεχνολογιών όπως αυτή των οπτικών ινών κτλ.

Σελίδα 6 από 61

Page 7: Διαδικτυακό Ημερολόγιο - teiemt.grdigilib.teiemt.gr/jspui/bitstream/123456789/466/1/... · 2015-04-26 · Τέλος στο Κεφάλαιο 4, παραθέτεται

Πτυχιακή εργασία της Πατσιαβουρίδου Μαγδαλένας

Worldwide Internet users2005 2010 2013a

World population^- 6 5 billion 6 .9 billion 7 1 billion

Not using the Internet 84% 7 0 % 6 1 %

Using the Internet 16% 3 0 % 3 9 %

Users in the developing world 8% 2 1 % 3 1 %

Users in the developed world 5 1 % 6 7 % 7 7 %

3 Estimate.

Internet users by region2005b 2010b 2013ab

Africa 2% 10% 16%

Americas 36% 49% 61%

Arab States 8% 26% 38%

Asia and Pacific 9% 23% 32%

Commonwealth ofIndependent States 10% 34% 52%

Europe 46% 67% 75%

3 Estimate. bPer 100 inhabitants.Εικ. 1.2 Σττιστικα χρηστών internet

1.3 ΔΙΑΔΙΚΤΥΑΚΟ ΗΜΕΡΟΛΟΓΙΟΑνάμεσα στις εκατομμύρια διαδικτυακές εφαρμογές που έχουν

αναπτυχθεί κατά καιρούς βρίσκονται και εφαρμογές «Διαδικτυακού Ημερολογίου» ή «Web Calendars». Τέτοια λογισμικά είναι εξαιρετικά χρήσιμα, καθώς πολυάσχολα στελέχη μπορεί να τα συμβουλεύονται ανάμεσα σε συναντήσεις, δημοφιλείς κοσμικοί και διοργανωτές εκδηλώσεων μπορούν να κλείνουν ημερομηνίες και να οργανώνουν αποδοτικότερα χρονικά τα events που πρέπει να διεκπεραιώσουν κτλ. Κι όλα αυτά από οποιοδήποτε μέσο με σύνδεση στο internet, υπολογιστή, laptop, tablet ή κινητό, χωρίς να χρειάζεται να έχουν τίποτα αποθηκευμένο στη συσκευή. Αρκεί ένας web browser για να έχουμε πρόσβαση στα ημερολόγια καθώς όλα τα δεδομένα μας είναι αποθηκευμένα σε ένα cloud server. Υπάρχουν διάφορες εφαρμογές διαδικτυακού ημερολογίου στην αγορά, με πιο δημοφιλές το Google Calendar, και ακολουθούν άλλες όπως τα Yahoo Calendar, Outlook Calendar της Microsoft και το iCalendar της Apple.

Σελίδα 7 από 61

Page 8: Διαδικτυακό Ημερολόγιο - teiemt.grdigilib.teiemt.gr/jspui/bitstream/123456789/466/1/... · 2015-04-26 · Τέλος στο Κεφάλαιο 4, παραθέτεται

Κεφάλαιο 1ο

εικ 1.3 Διαδικτυακά ημερολόγια του εμπορίου

Αυτές οι εφαρμογές επιτρέπουν στο χρήστη να δημιουργούν προσωπικά ή κοινόχρηστα ημερολόγια, τα οποία αποθηκεύονται σε ένα cloud υπολογιστικό σύστημα του εκάστοτε παρόχου της υπηρεσίας. Ο χρήστης δε χρειάζεται κάποιο ιδιαίτερο λογισμικό για να έχει πρόσβαση στα ημερολόγια, παρά μόνο τον web browser της προτίμησής του. Η αποθήκευση των ημερολογίων στο internet κάνει ευκολότερο το μοίρασμα πληροφοριών μεταξύ των χρηστών, και συνεπώς απλοποιείται ο προγραμματισμός εκδηλώσεων και η δημιουργία προσκλήσεων. Επίσης, μπορούν να οριστούν διάφορα επίπεδα προσβασιμότητας και ιδιωτικότητας του κάθε ημερολογίου, προσθήκες υπενθυμίσεων, σημειώσεων, τοποθεσιών, εναλλαγές ανάλογα με την ζώνη ώρας, λειτουργία ατζέντας κτλ, προσφέροντας πολλές δυνατότητες στον χρήστη.

Οι τεχνολογίες που χρησιμοποιούνται για τη δημιουργία, τη συντήρηση και την επέκταση των διαδικτυακών ημερολογίων κυμαίνονται από γλώσσες προγραμματισμού όπως η Java, server με λειτουργικό Linux, διεπαφές βασισμένες σε Ajax, χρήση HTML, PHP και βάσεων δεδομένων SQL.

Στα πλαίσια αυτής της πτυχιακής εργασίας, βασιζόμενοι στην ιδέα των διαδικτυακών ημερολογίων που ήδη υπάρχουν, κατασκευάσαμε ένα δικό μας από το μηδέν, κάνοντας χρήση τεχνολογιών όπως οι γλώσσες προγραμματισμού PHP και HTML, βάση δεδομένων SQL και των CSS για να κάνουμε πιο ευπαρουσίαστη την εφαρμογή μας. Αναλυτικές πληροφορίες σχετικά με τα εργαλεία που χρησιμοποιήσαμε, τη διαδικασία που ακολουθήσαμε, τον κώδικα που γράψαμε, καθώς και ένα σύντομο εγχειρίδιο χρήσης, θα παρουσιαστούν στα κεφάλαια που ακολουθούν.

Σκοπός της εργασίας είναι παρουσίαση των σύγχρονων προαναφερθέντων τεχνολογιών και η εξοικείωση με τη χρήση τους, η κατανόηση της

Σελίδα 8 από 61

Page 9: Διαδικτυακό Ημερολόγιο - teiemt.grdigilib.teiemt.gr/jspui/bitstream/123456789/466/1/... · 2015-04-26 · Τέλος στο Κεφάλαιο 4, παραθέτεται

Πτυχιακή εργασία της Πατσιαβουρίδου Μαγδαλένας

αλληλεπίδρασής τους και τελικά η δημιουργία μιας λειτουργικής, ευπαρουσίαστης και σταθερής διαδικτυακής εφαρμογής ημερολογίου.

Στο Κεφάλαιο 2 παρουσιάζεται η ανάλυση απαιτήσεων, τα λειτουργικά χαρακτηριστικά της εφαρμογής καθώς και κάποιες προϋποθέσεις για την εύρυθμη λειτουργία και χρήση της.

Στο Κεφάλαιο 3 γίνεται παρουσίαση και σύντομη ανάλυση των εργαλείων και τεχνολογιών που χρησιμοποιήσαμε για την κατασκευή της εφαρμογής, όπως οι γλώσσες προγραμματισμού PHP 5.5 και HTML, η βάση δεδομένων SQL (και MySQL ειδικότερα) με τους πίνακες που ορίσαμε, η τεχνική unix timestamp, τα Cascading Style Sheets, η jQuery κ.ά.

Τέλος στο Κεφάλαιο 4, παραθέτεται αναλυτικά ο κώδικας που γράψαμε με ταυτόχρονη επεξήγηση μέσω σχολίων, οδηγίες εγκατάστασης της εφαρμογής και οπτικές απεικονίσεις του interface του ημερολογίου.

Σελίδα 9 από 61

Page 10: Διαδικτυακό Ημερολόγιο - teiemt.grdigilib.teiemt.gr/jspui/bitstream/123456789/466/1/... · 2015-04-26 · Τέλος στο Κεφάλαιο 4, παραθέτεται

Κεφάλαιο 2ο

Τεχνικά Χαρακτηριστικά

2.1 Ανάλυση απαιτήσεων και λειτουργικά χαρακτηριστικά της εφαρμογής

Σε αυτή την ενότητα παρουσιάσουμε την ανάλυση απαιτήσεων της εφαρμογής παράλληλα με τα λειτουργικά χαρακτηριστικά της.

S Δημιουργία ηλεκτρονικού ημερολογίου.S Πρώτα μας μέλημα είναι η παρουσίαση του ημερολογιακού μήνα, άρα :

• Είναι απαραίτητη η δυνατότητα επιλογής συγκεκριμένου μήνα και έτους.• Προσθήκη πλήκτρων για μετάβαση στον επόμενο ή προηγούμενο μήνα.• Αν δεν επιλεχθεί η προβολή κάποιου συγκεκριμένου μήνα, θα ορίσουμε

σαν αυτόματη επιλογή την προβολή του τρέχοντος μήνα.• Χρήσιμος και καλαίσθητος είναι ο χρωματικός διαχωρισμός των

τελευταίων ημερών του προηγούμενου μήνα, των ημερών του τρέχοντος μήνα και των πρώτων ημερών του μήνα που ακολουθεί. Όσον αφορά της μέρες του μήνα που διανύουμε, κι αυτές με τη σειρά τους είναι θεμιτό να διαφοροποιούνται χρωματικά σε μέρες που έχουν περάσει, στη σημερινή μέρα, και σε αυτές που ακολουθούν.

• Για κάθε εμφανιζόμενη μέρα, θέλουμε υποσημείωση του πλήθους των συμβάντων που έχουμε προγραμματίσει γι αυτή.

• Απαραίτητος είναι ο αυτόματος υπολογισμός των «δίσεκτων» ετών.• Κάθε απεικόνιση ημέρας, θα πρέπει να έχει ένα ενεργό link για την

προβολή των λεπτομερειών της.S Όσον αφορά την παρουσίαση λεπτομερειών ημέρας, αυτές περιλαμβάνουν :

• Εμφάνιση της επιλεγμένης ημερομηνίας• Εμφάνιση της ημέρας της εβδομάδας στην επιλεγμένης ημερομηνίας• Προβολή του «Σημειωματάριου» της ημέρας, με δυνατότητα εισαγωγής

κειμένου και αποθήκευση, εμφάνιση κειμένου που έχει εισαχθεί στο παρελθόν και επεξεργασία προγενέστερου κειμένου και αποθήκευση του.

• Παρουσίαση «Συμβάντων» ημέρας, με δυνατότητα προσθήκης νέουσυμβάντος, διάρκειάς του (όλη μέρα, επιλογή ώρας εκκίνησης και λήξης με ακρίβεια 5 λεπτών), επανάληψης συμβάντος πχ. κάθε μέρα, ανά

Σελίδα 10 από 61

Page 11: Διαδικτυακό Ημερολόγιο - teiemt.grdigilib.teiemt.gr/jspui/bitstream/123456789/466/1/... · 2015-04-26 · Τέλος στο Κεφάλαιο 4, παραθέτεται

Πτυχιακή εργασία της Πατσιαβουρίδου Μαγδαλένας

εβδομάδα (ισχύς για την επιλεγμένη ημερομηνία και κάθε αντίστοιχη μέρα της εβδομάδας για κάθε εβδομάδα μετά την παρούσα), ανά μήνα (ισχύς για την επιλεγμένη ημερομηνία και κάθε αντίστοιχη μέρα του μήνα μετά την επιλεγμένη) και κάθε χρόνο (ισχύς για την επιλεγμένη ημερομηνία και κάθε αντίστοιχη μέρα του χρόνου, για κάθε χρόνο μετά από αυτόν που διανύουμε). Επίσης, δίνεται η δυνατότητα προσθήκης περιγραφής συμβάντος με την εισαγωγή κειμένου.

• Εμφάνιση συμβάντων ημέρας, αυτών που αντιστοιχούν ακριβώς στηνεπιλεγμένη ημερομηνία, καθώς και εμφάνιση συμβάντων αντιστοιχισμένα σε επιλεγμένη ημερομηνία από «επαναλήψεις» προηγούμενων ημερών.

• Διαγραφή συμβάντος.

2.2 Προϋποθέσεις σωστού σχεδιασμού και καλής λειτουργίας της εφαρμογής

Ο ακρογωνιαίος λίθος σε κάθε σχεδιασμό και ανάπτυξη μιας εφαρμογής είναι η κατανόηση του προβλήματος που καλούμαστε να αντιμετωπίσουμε. Τα περισσότερα λάθη όσον αφορά στην ανάπτυξη, την προσβασιμότητα και τη λειτουργικότητα ιστοσελίδων και εφαρμογών είναι αποτέλεσμα της ελλειπούς επίγνωσης του προβλήματος και όχι αδιαφορίας ή έλλειψης τεχνογνωσίας.

Για να είναι επιτυχημένο, ως προς την ανάπτυξή του, ένα λογισμικό θα πρέπει να υπακούει σε 4 βασικές αρχές. Να είναι :

S Αντιληπτό, δηλαδή διαθέσιμο στις αισθήσεις είτε μέσω ενός φυλλομετρητή είτε μέσω άλλων ειδικών τεχνολογιών.

S Εύχρηστο, δηλαδή οι χρήστες να μπορούν να αλληλεπιδρούν με όλα τα ελεγκτικά και διαδραστικά στοιχεία του λογισμικού, αξιοποιώντας στο έπακρο τις δυνατότητές του.

S Κατανοητό, δηλαδή τα περιεχόμενα να είναι ξεκάθαρα και σαφή και να αποφεύγεται σύγχυση και αμφισημία.

S Ανθεκτικό, δηλαδή να γίνεται χρήση τεχνολογιών που καθιστούν το λογισμικό σταθερό και τη λειτουργία του εύρυθμη.

Κάποιες άλλες αρχές, χρήσιμες στην ανάπτυξη κυρίως των web εφαρμογών, όπως είναι το διαδικτυακό ημερολόγιο που κατασκευάσαμε στα πλαίσια της παρούσας πτυχιακής εργασίας, παρουσιάζονται στη συνέχεια.

S Προσφορά κατάλληλου εναλλακτικού κειμένου, σαν λύση σε μη κειμενικά περιεχόμενα ιστοσελίδων, χάριν επεξήγησης.

S Χρήση κεφαλίδων σε πίνακες δεδομένων, για τη διευκόλυνση στην οργάνωση, πλοήγηση και κατανόηση των δεδομένων.

Σελίδα 11 από 61

Page 12: Διαδικτυακό Ημερολόγιο - teiemt.grdigilib.teiemt.gr/jspui/bitstream/123456789/466/1/... · 2015-04-26 · Τέλος στο Κεφάλαιο 4, παραθέτεται

Κεφάλαιο 2ο

S Εξασφάλιση άρτιας συμπλήρωσης και αποστολής φορμών από το χρήστη.S Εξασφάλιση ότι οι σύνδεσμοι (links) είναι κατανοητοί και χωρίς επιπλέον κείμενο,

και αποφυγή πλεονασμών.S Ύπαρξη διαθέσιμων υπότιτλων σε πολυμέσα για καλύτερη κατανόησηS Προσβασιμότητα σε μη-HTML περιεχόμενα, όπως αρχεία PDF, Word,

PowerPoint και Flash.S Επιλογή στο χρήστη να υπερπηδά και να αποφεύγει επαναλαμβανόμενα

στοιχεία σε μια σελίδα, για αμεσότερη πρόσβαση στο κυρίως περιεχόμενο.S Χρήση χρώματος για υποδείξεις και ενίσχυση της κατανόησης, αλλά όχι

αποκλειστική χρήση του σαν μέσο μετάδοσης πληροφορίας.S Ευανάγνωστο και σαφές κείμενο, με χρήση αναγνώσιμων γραμματοσειρών και

κατάλληλη χρήση κεφαλίδων και λιστών.S Σχεδίαση βάσης προτύπων, καθώς οι ιστοσελίδες που συμμορφώνονται με την

HTML και είναι προσβάσιμες, είναι ανθεκτικότερες και βελτιστοποιούν τη θέση τους στις μηχανές αναζήτησης. Τα CSS επιτρέπουν το διαχωρισμό των περιεχομένων από την παρουσίαση, προσφέροντας μεγαλύτερη ελαστικότητα και προσβασιμότητα στην πληροφορία.

Σελίδα 12 από 61

Page 13: Διαδικτυακό Ημερολόγιο - teiemt.grdigilib.teiemt.gr/jspui/bitstream/123456789/466/1/... · 2015-04-26 · Τέλος στο Κεφάλαιο 4, παραθέτεται

Κεφάλαιο 3ο

Τεχνολογίες

3.1 H HTML και το Internet

Κάθε σελίδα που εμφανίζεται στο Internet είναι ένα αρχείο γραμμένο με τη γλώσσα HTML (HyperText Markup Language, Γλώσσα Χαρακτηρισμού Υπερ-Κειμένου), που περιλαμβάνει το κείμενο της σελίδας, τη δομή της και τους συνδέσμους προς άλλα έγγραφα, εικόνες ή άλλα μέσα.

Ο φυλλομετρητής (Web browser) παίρνει τις πληροφορίες από τον web server, τις μορφοποιεί και τις εμφανίζει κατάλληλα για το σύστημά μας. Διαφορετικά προγράμματα φυλλομετρητή μπορεί να μορφοποιούν και να εμφανίζουν το ίδιο αρχείο με διαφορετικό τρόπο, ανάλογα με τις δυνατότητες του συστήματος στο οποίο τρέχουν και τις επιλογές διαμόρφωσης του προγράμματος του φυλλομετρητή. Μια web σελίδα ή ιστοσελίδα (web page) είναι ένα μεμονωμένο στοιχείο μιας παρουσίασης για το Web και περιέχεται σ’ ένα αρχείο στον δίσκο, το οποίο ανακτάται από έναν web server και μορφοποιείται μέσω ενός φυλλομετρητή.

Η αρχική σελίδα (home page) είναι η πρώτη ή κορυφαία σελίδα μιας παρουσίασης για το Web, είναι δηλαδή το σημείο εισόδου ή εκκίνησης για τις υπόλοιπες σελίδες της παρουσίασης και η πρώτη σελίδα που θα συναντήσουν οι αναγνώστες της παρουσίασής μας. Η αρχική σελίδα περιέχει συνήθως μια σύνοψη του περιεχομένου της παρουσίασης με τη μορφή ενός πίνακα περιεχομένων ή μιας ομάδας εικονιδίων.

3.1.1 Τι είναι η HTML

Η HTML είναι το ακρωνύμιο των λέξεων HyperText Markup Language, δηλ. Γλώσσα Χαρακτηρισμού Υπερ-Κειμένου και βασίζεται στη γλώσσα SGML, Standard Generalized Markup Language, που είναι ένα πολύ μεγαλύτερο σύστημα επεξεργασίας εγγράφων. Η HTML ορίζει ένα σύνολο κοινών στυλ για τις Web σελίδες, όπως τίτλοι (titles), επικεφαλίδες (headings), παράγραφοι (paragraphs), λίστες (lists) και πίνακες (tables). Ορίζει επίσης στυλ χαρακτήρων, όπως η έντονη γραφή (boldface) και οι ενότητες κώδικα.

Σελίδα 13 από 61

Page 14: Διαδικτυακό Ημερολόγιο - teiemt.grdigilib.teiemt.gr/jspui/bitstream/123456789/466/1/... · 2015-04-26 · Τέλος στο Κεφάλαιο 4, παραθέτεται

Κεφάλαιο 3ο

Κάθε στοιχείο έχει ένα όνομα και περιέχεται μέσα στα σύμβολα <>, που αποκαλούνται tags (ετικέτες). Όταν γράφουμε μια Web σελίδα με την HTML, στην ουσία δίνουμε τίτλους στα διάφορα στοιχεία της σελίδας μ’ αυτά τα tags.Οι φυλλομετρητές, μαζί με τη δυνατότητά τους να ανακτούν σελίδες από το Web, λειτουργούν επίσης και σαν μορφοποιητές για την HTML. Όταν διαβάζουμε μια σελίδα γραμμένη με την HTML σ’ έναν φυλλομετρητή, ο φυλλομετρητής διαβάζει (διερμηνεύει) τα tags της HTML και μορφοποιεί το κείμενο και τις εικόνες στην οθόνη. Διαφορετικοί φυλλομετρητές, οι οποίοι τρέχουν σε διαφορετικούς υπολογιστές, μπορεί να αντιστοιχίζουν διαφορετικά στυλ σε κάθε στοιχείο μιας σελίδας. Αυτό σημαίνει ότι οι σελίδες που δημιουργούμε με την HTML μπορεί να δείχνουν εντελώς διαφορετικές από σύστημα σε σύστημα και από φυλλομετρητή σε φυλλομετρητή. Δηλαδή, οι πραγματικές πληροφορίες και οι σύνδεσμοι που περιέχουν οι σελίδες μας θα είναι πάντα εκεί, αλλά η εμφάνιση των σελίδων στην οθόνη θα είναι διαφορετική.

3.1.2 Δομή μιας HTML σελίδας

Οι σελίδες που γράφουμε με την HTML είναι απλά αρχεία κειμένου σε μορφή ASCII, που σημαίνει ότι δεν περιέχουν πληροφορίες για κάποιο λειτουργικό σύστημα ή πρόγραμμα, αλλά μπορούν να διαβαστούν από οποιονδήποτε συντάκτη υποστηρίζει απλό κείμενο. Τα αρχεία της HTML περιέχουν τα ακόλουθα :

Το κείμενο της σελίδας.Τα tags (ετικέτες) της HTML, τα οποία υποδεικνύουν τα στοιχεία, τη δομή και τη

μορφοποίηση των σελίδων, καθώς επίσης και τους συνδέσμους υπερ-κειμένου προς άλλες σελίδες ή προς αρχεία άλλων μορφών (πχ πολυμέσα)

Τα περισσότερα tags έχουν την εξής μορφή :

<ΌνομαTag> Επηρεαζόμενο κείμενο </ΟνομαΤβ9>

Τα tags της HTML έχουν γενικά μια ετικέτα αρχής (ανοίγματος) και μια τέλους (κλεισίματος), τα οποία περικλείουν το κείμενο που επηρεάζουν. To tag αρχής ενεργοποιεί μια λειτουργία ή ένα χαρακτηριστικό, όπως για παράδειγμα την έντονη γραφή, ενώ το tag τέλους την απενεργοποιεί. Τα tags τέλους έχουν το ίδιο όνομα με τα tag αρχήςμ αλλά με πρόθεμα τον χαρακτήρα ‘ / ‘ .

Δεν αποτελούν ζευγάρι όλα τα tags της HTML, καθώς ορισμένα είναι «μονομελή», ενώ άλλα περιέχουν επιπλέον πληροφορίες και κείμενο ανάμεσα στα σύμβολα < και > . Επίσης, όλα τα tags στην HTML δεν κάνουν διάκριση μεταξύ κεφαλαίων και πεζών γραμμάτων, δηλαδή μπορούμε να γράφουμε είτε με κεφαλαία είτε με μικρά, ακόμα και με οποιονδήποτε συνδυασμό τους. Γενικά είναι προτιμότερο να τα γράφουμε κεφαλαία ώστε να είναι πιο ευδιάκριτα μέσα στο κείμενο της σελίδας.

Σελίδα 14 από 61

Page 15: Διαδικτυακό Ημερολόγιο - teiemt.grdigilib.teiemt.gr/jspui/bitstream/123456789/466/1/... · 2015-04-26 · Τέλος στο Κεφάλαιο 4, παραθέτεται

Πτυχιακή εργασία της Πατσιαβουρίδου Μαγδαλένας

Τα αρχεία της HTML πρέπει να τα γράφουμε σε συντάκτες κειμένων, δηλαδή προγράμματα που μπορούν να αποθηκεύσουν αρχεία κειμένου σε μορφή ASCII, όπως είναι το Notepad, Notepad++ , Wordpad, το Edit του DOS και τα vi, emacs και pico του UNIX. To όνομα του αρχείου θα πρέπει να έχει επέκταση .html ή htm.

H HTML χρησιμοποιεί τρία tags για την περιγραφή της συνολικής δομής μιας σελίδας, τα οποία περιέχουν ορισμένες απλές πληροφορίες κεφαλίδας. Αυτά προσδιορίζουν τη σελίδα μας στους φυλλομετρητές και παρέχουν απλές πληροφορίες γι αυτήν, όπως τον τίτλο ή το συγγραφέα της, πριν από τη φόρτωση ολόκληρης της σελίδας.

To tag <HTML> : η πρώτη ετικέτα που ελέγχει τη δομή μιας σελίδας γραμμένης σε κώδικα HTML και υποδεικνύει ότι το περιεχόμενο του αρχείου περιέχει κώδικά γραμμένο σε αυτή τη γλώσσα. Όλο το κείμενο και οι εντολές σε μια HTML σελίδα θα πρέπει να τοποθετούνται ανάμεσα σε tags αρχής και τέλους <HTML> , ως εξής :

<HTML>.... Κείμενο σελίδας .... <HTML>

Το tag <HEAD> : προσδιορίζει ότι οι γραμμές που περιέχονται ανάμεσα στην αρχή και στο τέλος του είναι ο πρόλογος για το υπόλοιπο του αρχείου. Σε αυτή την ενότητα συνήθως τοποθετούμε μόνο τον τίτλο της σελίδας.

<HTML><HEAD><TITLE> Τίτλος </TITLE> </HEAD>

</HTML>

Το tag <BODY> : το υπόλοιπο της HTML σελίδας, δηλαδή όλο το κείμενο και οποιοδήποτε άλλο περιεχόμενο, όπως σύνδεσμοι, εικόνες κτλ περικλείεται σε μια τέτοια ετικέτα.

<HTML><HEAD><TITLE> Τίτλος </TITLE> </HEAD><BODY>.....κυρίως κείμενο..</BODY></HTML>

Όλες οι ετικέτες της HTML σχηματίζουν ξεχωριστές, ένθετες ενότητες κειμένου και θα πρέπει να δίνεται ιδιαίτερη προσοχή ώστε να μην υπάρχει επικάλυψη μεταξύ των tags.

Το tag <TITLE> : Κάθε HMTL σελίδα χρειάζεται έναν τίτλο, ο οποίος θα υποδεικνύει το περιεχόμενό της, και θα εμφανίζεται στη γραμμή τίτλου των δημοφιλέστερων φυλλομετρητών.

Σελίδα 15 από 61

Page 16: Διαδικτυακό Ημερολόγιο - teiemt.grdigilib.teiemt.gr/jspui/bitstream/123456789/466/1/... · 2015-04-26 · Τέλος στο Κεφάλαιο 4, παραθέτεται

Κεφάλαιο 3ο

Οι ετικέτες <TITLE> τοποθετούνται πάντα μέσα στο ζευγάρι των tags <HEAD> όπως φαίνεται στο προηγούμενο σχήμα.

Τα tags επικεφαλίδων : Οι επικεφαλίδες χρησιμοποιούνται για το διαχωρισμό των ενοτήτων κειμένου, όπως ακριβώς και σε ένα βιβλίο. Έχουν τη μορφή

<H1> Επιθυμητός τίτλος </H1>

και ορίζονται με ετικέτες από H1 έως H6. Οι επικεφαλίδες δεν αριθμούνται όταν εμφανίζονται στην οθόνη, αλλά έχουν κάποιο χαρακτηριστικό που τις ξεχωρίζει από το υπόλοιπο κείμενο, όπως μεγαλύτερο μέγεθος, εντονότερο κείμενο ή υπογράμμιση. Το μέγεθος του κειμένου ελαττώνεται πηγαίνοντας από το H1 στο H6.

Τα tags παραγράφων : είναι τα <P> και </P> (η συγκεκριμένη ετικέτα τέλους είναι προαιρετική) και η αλλαγή παραγράφου σημαίνει το ξεκίνημα μιας νέας γραμμής και επιπλέον κατακόρυφη απόσταση μεταξύ των παραγράφων. Το <br> είναι κενό στοιχείο, δεν έχει περιεχόμενο, ούτε χρειάζεται ετικέτα τερματισμού.

Παρουσιάσαμε εν συντομία κάποια βασικά στοιχεία της γλώσσας HTML. Επιπλέον αισθητικές παρεμβάσεις στη σελίδα μας μπορούμε να κάνουμε χρησιμοποιώντας κάποια tags, όπως το <STYLE> ή CSS (Cascade Style Sheets) για τα οποία θα μιλήσουμε στη συνέχεια.

3.2 Η γλώσσα PHP

3.2.1- Εισαγωγή στην PHP

H PHP είναι μια γλώσσα προγραμματισμού για web servers, ιδιαίτερα χρήσιμη για δυναμικές ιστοσελίδες, οι οποίες μπορούν να διασυνδεθούν με κάποιες βάσεις δεδομένων. Η PHP είναι δωρεάν για χρήση, και αρκετά δημοφιλής σε πλατφόρμες Unix, Linux αλλά και Windows.

Η γλώσσα προγραμματισμού PHP (Hypertext PreProcessor) έχει το ιδιαίτερο χαρακτηριστικό ότι ο κώδικάς της πρώτα μεταγλωττίζεται στον server και έπειτα φορτώνεται σαν ένα κανονικό html έγγραφο, χωρίς ο χρήστης να είναι σε θέση να δει τον αρχικό κώδικα. Με την τεχνολογία της PHP μπορούμε να δημιουργήσουμε δυναμικές ιστοσελίδες (dynamic web pages). Ανταγωνιστικές τεχνολογίες είναι η ASP (Active Server Pages) της εταιρίας Microsoft, καθώς και η CFML (Cold Fusion Markup Language).

Ένα μικρό παράδειγμα κώδικα σε PHP είναι το ακόλουθο :

echo ""; echo "Hello"; echo "";?>

Σελίδα 16 από 61

Page 17: Διαδικτυακό Ημερολόγιο - teiemt.grdigilib.teiemt.gr/jspui/bitstream/123456789/466/1/... · 2015-04-26 · Τέλος στο Κεφάλαιο 4, παραθέτεται

Πτυχιακή εργασία της Πατσιαβουρίδου Μαγδαλένας

Μπορούμε να γράψουμε τις παραπάνω γραμμές κώδικα σε ένα Notepad των Windows, να αποθηκεύσουμε το αρχείο σε έναν web server και αν αυτός υποστηρίζει την τεχνολογία PHP, θα εμφανιστεί το μήνυμα «Hello» στην οθόνη μας. Αν επιχειρήσουμε να δούμε τον πηγαίο κώδικα (source code) θα υπάρχουν μόνο τα tags της HTML, χωρίς τις επισημάνσεις της Php. Οι ετικέτες χρησιμοποιούνται για να δηλώσουμε ένα block κώδικα της Php, την αρχή και το τέλος του, ώστε να μπορεί το επεξεργαστεί ο web server. Επίσης, μπορούμε να τοποθετήσουμε κώδικα σε HTML μέσα σε αντίστοιχο της Php, και θα εκτελεστεί κανονικά.

Η εντολή echo χρησιμοποιείται για να στείλουμε ένα κείμενο (string) στον φυλλομετρητή. Όλες οι εντολές της Php πρέπει να τελειώνουν με το χαρακτήρα « ; » και μπορούν επεκταθούν και σε περισσότερες από μια γραμμές.

3.2.2 Οι μεταβλητές στην PHP

Στην PHP χρησιμοποιούνται μεταβλητές (variables) για την αποθήκευση και ανάκτηση δεδομένων, τα οποία χρησιμοποιούνται συχνά και μπορεί να περιέχουν κείμενο ή και αριθμούς. Όλες οι μεταβλητές πρέπει να αρχίζουν με το χαρακτήρα $ και το όνομά τους μπορεί να αποτελείται από γράμματα και ψηφία, να περιέχει τον χαρακτήρα « _ » (underscore), ξεκινώντας υποχρεωτικά όμως με γράμμα.

Οι εντολή ελέγχου i f και επανάληψης for χρησιμοποιούνται παρομοίως με τις υπόλοιπες γλώσσες προγραμματισμού.

Η PHP μας παρέχει τη δυνατότητα να εξακριβώσουμε ποιον φυλλομετρητή (browser) χρησιμοποιεί ο επισκέπτης της ιστοσελίδας μας. Ένα από τα δυνατότερα χαρακτηριστικά της είναι ο τρόπος που χειρίζεται τις φόρμες της HTML, καθώς όλα τα στοιχεία της μεταβλητής δημιουργούν μια μεταβλητή με το ίδιο όνομα.

Μια κανονική έκφραση (regular expression) είναι ένα κομμάτι κειμένου (string) που περιέχει ειδικές εντολές, οι οποίες του δίνουν τη δυνατότητα να χρησιμοποιηθεί με κάποιες συναρτήσεις της PHP για εντοπισμό και διαχείριση κειμένου. Η βασικότερη απ αυτές είναι η ereg() και μπορεί να χρησιμοποιηθεί για να καθορίσουμε αν μια κανονική έκφραση ικανοποιείται από ένα συγκεκριμένο string κειμένου. Αξιοποιώντας τις δυνατότητες που μας δίνονται μπορούμε να κάνουμε αντικατάσταση strings με regular expressions, χρήση tags, δημιουργία έντονου και πλάγιου κειμένου, παραγράφων, χρήση υπερσυνδέσμων και σελιδοποίηση. Ακόμα, μπορούμε να επέμβουμε σε βάσεις δεδομένων SQL, κάνοντας ταξινόμηση, αυτόματη υποβολή περιεχομένου, διαλογή και κλείδωμα πινάκων, μετονομασία, ομαδοποίηση και δημιουργία κανονισμών χρήσης τους. Αναφερθήκαμε επιγραμματικά στα παραπάνω, καθώς θα χρειαζόταν ένα ολόκληρο πολυσέλιδο κεφάλαιο για να αναλυθούν αυτές τις δυνατότητες της PHP, πράγμα που δεν εμπίπτει στα πλαίσια της παρούσας πτυχιακής εργασίας.

Σελίδα 17 από 61

Page 18: Διαδικτυακό Ημερολόγιο - teiemt.grdigilib.teiemt.gr/jspui/bitstream/123456789/466/1/... · 2015-04-26 · Τέλος στο Κεφάλαιο 4, παραθέτεται

Κεφάλαιο 3ο

3.2.3 Η λειτουργία «date»

Θα αναφερθούμε λίγο πιο αναλυτικά στη λειτουργία (function) «date» της PHP, καθώς είναι η βασική λειτουργία που χρησιμοποιήσαμε στην ανάπτυξη της εφαρμογής μας για να παίρνουμε δεδομένα ημερομηνιών και άλλων χρονολογιών. Έχει τη μορφή :

string date ( string $format [, int $timestamp = time() ] )

Επιστρέφει ένα κομμάτι κειμένου (string) σύμφωνα με το δεδομένο πρότυπο string χρησιμοποιώντας τον δεδομένο ακέραιο «timestamp» ή την τρέχουσα ώρα, αν δεν έχει προκαθοριστεί κάποιο timestamp.

Οι ακόλουθες παράμετροι αναγνωρίζονται στο format string.

Μορφή

χαρακτήραΠεριγραφή

Παράδειγμα επιστρεφόμενων

τιμών

Day _ _

D Ημέρα του μήνα, 2 ψηφία αρχίζοντας με μηδέν 01 έως 31

D Αναπαράσταση κειμένου ημέρας, 3 ψηφία Mon έως Sun

J Ημέρα του μήνα, χωρίς μηδενικά στην αρχή 1 to 31

l (πεζό 'L') Πλήρης αναπαράσταση με κείμενο της ημέρας

της εβδομάδας

Sunday έως Saturday

N ISO-8601 αριθμητική αναπαράσταση της ημέρας

της εβδομάδας (προστέθηκε στην PHP 5.1.0)

1 (για Monday) έως 7 (για Sunday)

S Αγγλικό τακτικό επίθεμα της ημέρας του μήνα, 2

χαρακτήρες

st, nd, rd or th.

W Αριθμητική αναπαράσταση της ημέρας της

εβδομάδας

0 (για την Sunday) έως 6 (για το

Saturday)

Z Ημέρα του χρόνου (ξεκινώντας από το 0) 0 έως 365

Week _ _

W ISO-8601 αριθμός εβδομάδας του χρόνου , οι Παράδειγμα: 42 (η 42η εβδομάδα

εβδομάδες ξεκινούν από Δευτέρα (προστέθηκε στην PHP του χρόνου)

4.1.0)

Month _ _

F Πλήρης αναπαράσταση του μήνα σε κείμενο,

όπως January ή March

January έως December

M Αριθμητική αναπαράσταση του μήνα, ξεκινώντας

με μηδενικά

01 έως 12

M Σύντομη αναπαράσταση ενός μήνα σε κείμενο,

με 3 γράμματα

Jan έως Dec

Σελίδα 18 από 61

Page 19: Διαδικτυακό Ημερολόγιο - teiemt.grdigilib.teiemt.gr/jspui/bitstream/123456789/466/1/... · 2015-04-26 · Τέλος στο Κεφάλαιο 4, παραθέτεται

Πτυχιακή εργασία της Πατσιαβουρίδου Μαγδαλένας

Μορφή

χαρακτήραΠεριγραφή

τιμών

Παράδειγμα επιστρεφόμενων

N Αριθμητική αναπαράσταση του μήνα, χωρίς 1 έως 12

μηδενικά στην αρχή

T Αριθμός ημερών ενός δεδομένου μήνα 28 έως 31

Year _ _

L Αν είναι δίσεκτο έτος 1 αν είναι δίσεκτο, αλλιώς 0.

Y Πλήρης αριθμητική αναπαράσταση του έτους , 4 Π.χ.: 1999 ή 2003

ψηφία

y Αναπαράσταση του έτους με 2 ψηφία Π.χ.: 99 ή 03

Time _ _

a Πεζά γράμματα, προ μεσημβρίας ή μετά am ή pm

μεσημβρίας

A Κεφαλαία γράμματα, προ μεσημβρίας ή μετά AM ή PM

μεσημβρίας

B Swatch Internet time 000 έως 999

g 12-ωρη μορφή ώρας χωρίς αρχικά μηδενικά 1 έως 12

G 24- ωρη μορφή ώρας χωρίς αρχικά μηδενικά 0 έως 23

h 12- ωρη μορφή ώρας με αρχικά μηδενικά 01 έως 12

H 24- ωρη μορφή ώρας με αρχικά μηδενικά 00 έως 23

i Λεπτά, με αρχικά μηδενικά 00 έως 59

s Δευτερόλεπτα, με αρχικά μηδενικά 00 έως 59

u Μικροδευτερόλεπτα (προστέθηκε στην PHP Π.χ.: 654321

5.2.2). Σημειώστε ότι η date() πάντα θα παράγει

000000 αφού δέχεται ακέραιη παράμετρο, όπου η

DateTime::format() υποστηρίζει τα microseconds.

Timezone _ _

e Αναγνωριστικό ζώνης ώρας (προστέθηκε στην Π.χ.: UTC,GMT,Atlantic/Azores

PHP 5.1.0)

I (κεφαλαίο i) Αν είναι ή όχι σε daylight saving time

0.

1 αν Daylight Saving Time, αλλιώς

O Διαφορά με την ώρα Greenwich (GMT) σε ώρες. Π.χ.: +0200

P Διαφορά με την ώρα Greenwich (GMT) με Π.χ.: +02:00

διαχωριστικό ανάμεσα στις ώρες και τα λεπτά

(προστέθηκε στην PHP 5.1.3)

T Συντομογραφία ζώνης ώρας Π.χ. : EST,MDT ...

Z Απόκλιση ζώνης ώρας σε δευτερόλεπτα. Η -43200 έως 50400

Σελίδα 19 από 61

Page 20: Διαδικτυακό Ημερολόγιο - teiemt.grdigilib.teiemt.gr/jspui/bitstream/123456789/466/1/... · 2015-04-26 · Τέλος στο Κεφάλαιο 4, παραθέτεται

Κεφάλαιο 3ο

Μορφή

χαρακτήραΠεριγραφή

τιμώ ν

Παράδειγμα επ ιστρεφόμενω ν

απόκλιση για ζώνες δυτικά του UTC είναι πάντα αρνητική,

και για αυτές ανατολικά του UTC είναι πάντα θετική.

Full

Date/Time

--- —

c ISO 8601 ημερομηνία (προστέθηκε στην PHP 5) 2004-02-12T15:19:21+00:00

r » RFC 2822 μορφοποιημένη ημερομηνία

+0200

Π.χ.: Thu, 21 Dec 2000 16:01:07

U Δευτερόλεπτα από την Unix Epoch (January 1

1970 00:00:00 GMT)

βλέπε time()

3.2.4 Η λειτουργία timestamp

Το Unix Timestamp είναι ένας τρόπος να υπολογίζουμε το χρόνο σαν ένα τρεχούμενο σύνολο δευτερολέπτων. Η απαρχή της καταμέτρησης αυτής θεωρείται η 1η Ιανουαρίου 1970 UTC (Unix Epoch). Ως εκ τούτου, το unix timestamp είναι ο αριθμός των δευτερολέπτων μεταξύ του unix epoch και μια επιλεγμένης ημερομηνίας. Υπάρχει το πλεονέκτημα ότι αυτό το μέγεθος δεν αλλάζει ακόμα κι αν κινούμαστε στην υδρόγειο. Αυτό είναι πολύ χρήσιμο στα πληροφοριακά συστήματα για τον εντοπισμό και την ταξινόμηση χρονολογημένων πληροφοριών σε δυναμικές και κατανεμημένες εφαρμογές τόσο online όσο και μονόπλευρα από τη μεριά του χρήστη.

3.3 Βάσεις Δεδομένων SQL

3.3.1 Εισαγωγή

Η SQL (Structured Query Language) είναι μια γλώσσα υπολογιστών, που σχεδιάστηκε για τη διαχείριση δεδομένων, σε ένα σύστημα διαχείρισης σχεσιακών βάσεων δεδομένων (Relational Database Management System, RDBMS), η οποία αρχικά βασίστηκε στη σχεσιακή άλγεβρα. Η γλώσσα περιλαμβάνει δυνατότητες ανάκτησης και ενημέρωσης δεδομένων, δημιουργίας και τροποποίησης σχημάτων και σχεσιακών πινάκων, αλλά και ελέγχου πρόσβασης στα δεδομένα.

H SQL αναπτύχθηκε στην IBM στην αρχή της δεκαετία του 1970. Αυτή η πρώτη έκδοση που αρχικά ονομαζόταν SEQUEL, είχε ως σκοπό να χειριστεί και να ανακτήσει τα στοιχεία που αποθηκεύτηκαν στο πρώτο RDBMS της IBM, το System R. Την ίδια περίοδο αναπτύχθηκε στο

Σελίδα 20 από 61

Page 21: Διαδικτυακό Ημερολόγιο - teiemt.grdigilib.teiemt.gr/jspui/bitstream/123456789/466/1/... · 2015-04-26 · Τέλος στο Κεφάλαιο 4, παραθέτεται

Πτυχιακή εργασία της Πατσιαβουρίδου Μαγδαλένας

ΜΙΤ το πρώτο σύστημα διαχείρισης σχεσιακών βάσεων δεδομένων (RDBMS) και η INGRES στο Πανεπιστήμιο Berkeley. Στα τέλη της δεκαετίας η Relational Software εισήγαγε την πρώτη διαθέσιμη εμπορικά εφαρμογή του SQL, λίγες εβδομάδες νωρίτερα από την IBM.

3.3.2 Γλωσσικά στοιχεία

Η γλώσσα SQL υποδιαιρείται σε διάφορα γλωσσικά στοιχεία που περιλαμβάνουν :• Clauses, προαιρετικές σε ορισμένες περιπτώσεις, αλλά απαραίτητα συστατικά

όλων των δηλώσεων και ερωτήσεων.• Expressions, που παράγουν είτε κλιμακωτές τιμές, είτε πίνακες αποτελούμενους

από στήλες και σειρές δεδομένων.• Predicates, που διευκρινίζουν τους όρους που μπορούν να αξιολογηθούν σαν

σωστό ή λάθος.• Queries, που ανακτούν τα στοιχεία βασιζόμενες σε ειδικά κριτήρια.• Statements, που μπορούν να επιδρούν στα σχήματα και τα στοιχεία, ή να

ελέγξουν τη ροή του προγράμματος και τις συνδέσεις με άλλα προγράμματα.• Οι εκφράσεις σε SQL περιλαμβάνουν και το χαρακτήρα τερματισμού « ; ».• Το κενό γενικά αγνοείται στις statements και τις queries της SQL, αλλά είναι

απαραίτητο για να ξεχωρίζει τα statements, όπως και στην κανονική γραφή κειμένου.

3.3.3 Operators

O p e ra to r Π ερ ιγ ρ α φ ή

= Ι σ ο ύ τ α ι μ ε

< >Δ ε ν ισ ο ύ τ α ι μ ε (τα π ε ρ ι σ σ ό τ ε ρ α ϋ Β Μ Θ ε π ί σ η ς δ έ χ ο ν τ α ι τ ο ! = α ν τ ί

γ ια τ ο < > )

> Μ ε γ α λ ύ τ ε ρ ο α π ό

Σελίδα 21 από 61

Page 22: Διαδικτυακό Ημερολόγιο - teiemt.grdigilib.teiemt.gr/jspui/bitstream/123456789/466/1/... · 2015-04-26 · Τέλος στο Κεφάλαιο 4, παραθέτεται

Κεφάλαιο 3ο

< Μ ι κ ρ ό τ ε ρ ο α π ό

> = Μ ε γ α λ ύ τ ε ρ ο ή ίσ ο

< = Μ ι κ ρ ό τ ε ρ ο ή ί σ ο

BETWEEN Μ ε τ α ξ ύ ε ν ό ς κ α θ ο ρ ι σ μ έ ν ο υ ε ύ ρ ο υ ς

L IK E Τ α ιρ ιά ζ ε ι μ ε έ ν α π ρ ό τ υ π ο χ α ρ α κ τ ή ρ α

IN Ί σ ο μ ε μ ια α π ό τις π ο λ λ α π λ έ ς δ υ ν α τ έ ς τ ιμ έ ς

I S ή I S NOT Σ ύ γ κ ρ ι σ η μ ε τ ο null ( κ ε ν ό δ ε δ ο μ έ ν ω ν )

I S NOT

D I S T I N C T FROMΊ σ ο μ ε τιμή ή και τα 2 ε ίνα ι null ( κ ε ν ό δ ε δ ο μ έ ν ω ν )

ASΧ ρ η σ ι μ ο π ο ι ε ί τ α ι γ ια α λ λ α γ ή τ ο υ ο ν ό μ α τ ο ς π ε δ ί ο υ κ α τ ά τ η ν

ε μ φ ά ν ι σ η

Εικ 3.1 OperatorsΚάποιες από τις σημαντικότερες SQL εντολές είναι :

• SELECT - άντληση δεδομένων από τη βάση• UPDATE - ενημέρωση δεδομένων στη βάση• DELETE - διαγραφή δεδομένων από τη βάση• INSERT INTO - εισαγωγή νέων δεδομένων στη βάση• CREATE DATABASE - δημιουργία νέας βάσης• ALTER DATABASE - τροποποίηση της βάσης• CREATE TABLE - δημιουργία νέου πίνακα• ALTER TABLE - τροποποίηση έναν πίνακα• DROP TABLE - διαγραφή ενός πίνακα• CREATE INDEX - δημιουργία δείκτη (κλειδί αναζήτησης)

Σελίδα 22 από 61

Page 23: Διαδικτυακό Ημερολόγιο - teiemt.grdigilib.teiemt.gr/jspui/bitstream/123456789/466/1/... · 2015-04-26 · Τέλος στο Κεφάλαιο 4, παραθέτεται

Πτυχιακή εργασία της Πατσιαβουρίδου Μαγδαλένας

• DROP INDEX - διαγραφή ενός δείκτηΓια τον καλύτερο σχεδιασμό και βελτιστοποίηση μιας βάσης δεδομένων συχνά γίνεται

χρήση και των ακόλουθων εντολών :• FROM - υποδεικνύει από ποιο πίνακα θα τραβήξουμε τα δεδομένα που μας

ενδιαφέρουν• JOIN - ορίζει τους κανόνες για την ένωση πινάκων.• WHERE - θέτει όρους σύγκρισης στα δεδομένα που επιστρέφονται από τη βάση,

θέτει φίλτρα αληθείας.• GROUP ΒΥ - ομαδοποιεί τα δεδομένα σύμφωνα με ορισμένα κριτήρια• ORDER BY - ταξινομεί τα δεδομένα σύμφωνα με ορισμένα κριτήρια

Άλλες εντολές για τη μεταχείριση των δεδομένων, διαμόρφωση των πινάκων και τις συναλλαγές μεταξύ τους, είναι πχ η INSERT, UPDATE, DELETE, MERGE, START - SAVE TRANSACTION κτλ.

3.3.4 - Τύποι Δεδομένων■ Κάθε στήλη πίνακα SQL δηλώνει τι τύπο δεδομένων περιέχει. Η ANSI SQL

περιλαμβάνει τους παρακάτω τύπους δεδομένων.■ String Χαρακτήρων - Χαρακτήρες, κενά, μέγιστου μήκους n, μπορεί να περιέχει

και εθνικούς χαρακτήρες.■ Bit Strings■ Αριθμούς - Ακέραιους, πραγματικούς, κινητής υποδιαστολής, διπλής

υποδιαστολής κτλ■ Ημερομηνία και Χρόνο

-DATE : τιμές για ημερομηνία (πχ 2014-2-21)-TIME : τιμές για χρόνο, ώρα (πχ 15:51:36)-TIME WITH TIMEZONE ή TIMEZ : ίδιο με το TIME, αλλά περιέχει πληροφορίες και

για τη ζώνη ώρας-TIMESTAMP : DATE και TIME σε μια μεταβλητή (πχ 2014-2-21 15:51:36)TIMESTAMP WITH TIMEZONE ή TIMESTAMPZ : ίδιο με το timestamp περιέχει και

πληροφορίες για τη ζώνη ώρας.Η SQL παρέχει διάφορες λειτουργίες για τη δημιουργία μιας μεταβλητής ημερομηνίας

και ώρας, καθώς και να το διαχωρισμό στα επιμέρους στοιχεία της, όπως λεπτά, δευτερόλεπτα κτλ.

3.3.5 MySQLΣε αυτή την υποενότητα θα γίνει αναφορά στην MySQL (MySequel) που είναι

και η βάση που χρησιμοποιήσαμε στην κατασκευή της εφαρμογής μας. Είναι το δεύτερο πιο

Σελίδα 23 από 61

Page 24: Διαδικτυακό Ημερολόγιο - teiemt.grdigilib.teiemt.gr/jspui/bitstream/123456789/466/1/... · 2015-04-26 · Τέλος στο Κεφάλαιο 4, παραθέτεται

Κεφάλαιο 3ο

διαδεδομένο RDBMS ανοιχτού κώδικα και σήμερα ανήκει στην Oracle Corporation. Είναι μια δημοφιλής επιλογή για χρήση σε εφαρμογές web, καθώς είναι πολύ αξιόπιστη συνδυαζόμενη με τεχνολογίες όπως τα Linux, Apache, PHP και Python. Υπάρχουν πολλές εκδόσεις για εμπορική χρήση, προσφέροντας ακόμα μεγαλύτερη λειτουργικότητα. Εφαρμογές που κάνουν χρήση των βάσεων δεδομένων MySQL περιλαμβάνουν τις Joomla, WordPress, Drupal, MODx, αλλά και κολοσσούς όπως τις Wikipedia, Google, Facebook, Twitter, Flickr και Youtube.

Ο χρήστης μπορεί να χρησιμοποιήσει τη γραμμή εντολών (command line) που περιλαμβάνεται, είτε κάποιες γραφικές διεπαφές (front-end) για μεγαλύτερη ευκολία και λειτουργικότητα στη δημιουργία και διαχείριση MySQL βάσεων δεδομένων, την κατασκευή δομών βάσεων, την απόθήκευση, επιθεώρηση και μεταχείριση των δεδομένων. Τέτοιες διεπαφές είναι πχ οι Admirer, DBEdit, HeidiSQL, LibreOffice Base, Navicat, phpMy Admin κ.ά.

Είναι γραμμένη σε C/C++ και είναι συμβατή με όλα τα δημοφιλή λειτουργικά, όπως τα Microrsoft Windows, OS X, Linux, UnixWare, Solaris, Symbian κ.ά.

3.3.6 Η δική μας βάση calendarΗ βάση μας είναι στημένη σε MySQL. Έχει όνομα ’’calendar” και Collation

”utf8_general_ci”.Αποτελείται από 2 πίνακες. Τον πίνακα “notes” ο οποίος περιέχει τα

«σημειωματάρια» της κάθε ημέρας, και τον πίνακα “tasks” ο οποίος περιέχει τα «συμβάντα» της κάθε ημέρας.

Πίνακας notes

2<ο ca er 'ar'n°tes@ id : int(255} d date : varcharflOO} d notes : longteoct

Εικ3.2 Πίνακας notes• Πεδίο “id” -> Integer. Πρόκειται για το primary_key του πίνακα το οποίο

χρησιμοποιείται ως id για την κάθε γραμμή. Λειτουργεί με AUTO-INCREMENT και αυξάνεται αυτόματα με κάθε εισαγωγή νέας γραμμής.

• Πεδίο «date». Varchar μήκους 100. Εκεί μπαίνει η ημερομηνία στην οποία αντιστοιχεί το σημειωματάριο

• Πεδίο «notes». Longtext ώστε να παίρνει μεγάλο μήκος χαρακτήρων. Εκεί σώζονται οι σημειώσεις της εκάστοτε ημέρας.

Παράδειγμα Query: “SELECT * FROM notes WHERE date = ’24-05-2014’;”

Πίνακας tasks

Σελίδα 24 από 61

Page 25: Διαδικτυακό Ημερολόγιο - teiemt.grdigilib.teiemt.gr/jspui/bitstream/123456789/466/1/... · 2015-04-26 · Τέλος στο Κεφάλαιο 4, παραθέτεται

Πτυχιακή εργασία της Πατσιαβουρίδου Μαγδαλένας

Εικ 3.3 Πίνακας Tasks

• Πεδίο “id” -> Integer. Πρόκειται για το primary_key του πίνακα το οποίο χρησιμοποιείται ως id για την κάθε γραμμή. Λειτουργεί με AUTO-INCREMENT και αυξάνεται αυτόματα με κάθε εισαγωγή νέας γραμμής.

• Πεδίο «date». Varchar μήκους 100. Εκεί μπαίνει η ημερομηνία στην οποία αντιστοιχεί το σημειωματάριο

• Πεδίο “replication_type”. Varchar μήκους 100. Εδώ σώζουμε τον «τύπο» επανάληψης ενός συμβάντος. Πχ. “NONE”, “DAY”, “MONTH”, “YEAR”.

• Πεδίο “replication_day”. Integer. Εδώ, στην περίπτωση επανάληψης τύπου «Εβδομάδα» σώζεται η θέση της ημέρας μέσα στην εβδομάδα και στην περίπτωση επανάληψης τύπου «Μήνας» η μέρα του μήνα.

• Πεδίο ”replication_month”. Integer. Εδώ σώζεται ο μήνας του χρόνου στην περίπτωση επανάληψης τύπου «χρόνος».

• Πεδίο “notes”. Longtext ώστε να παίρνει μεγάλο μήκος χαρακτήρων. Εκεί σώζονται οι σημειώσεις του εκάστοτε συμβάντος.

• Πεδίο “start_time”. Varchar μήκους 50. Εδώ σώζεται η ώρα εκκίνησης του συμβάντος.

• Πεδίο “end_time”. Varchar μήκους 50. Εδώ σώζεται η ώρα λήξης του συμβάντος.• Πεδίο “all_day”. Bit καθώς χρησιμοποιείται ως Boolean μεταβλητή στον κώδικα.

Εδώ δηλώνεται αν ένα συμβάν συμβαίνει «Όλη την ημέρα», οπότε και δεν λαμβάνεται υπόψη η ώρα.

Σελίδα 25 από 61

Page 26: Διαδικτυακό Ημερολόγιο - teiemt.grdigilib.teiemt.gr/jspui/bitstream/123456789/466/1/... · 2015-04-26 · Τέλος στο Κεφάλαιο 4, παραθέτεται

Κεφάλαιο 3ο

3.4 jQueryΗ jQuery είναι μια μικρή σε μέγεθος, απλή, γρήγορη και περιεκτική βιβλιοθήκη

(framework) Javascript ανοιχτού κώδικα και πρωτοεμφανίστηκε το 2006. Συνδυάζοντας την απλότητα, την ευελιξία και την επεκτασιμότητα, άλλαξε τον τρόπο με τον οποίο οι προγραμματιστές γράφουν Javascript.

Αυτή η βιβλιοθήκη εντολών μας παρέχει δυνατότητες επιλογής και διαμόρφωσης HTML στοιχείων, διαμόρφωσης CSS στοιχείων, διεργασιών HTML γεγονότων, εφέ και animations, χρήσης AJAX και πλήθώρας άλλων εφαρμογών.

Για να ενσωματώσουμε την βιβλιοθήκη σε ένα html αρχείο, προσθέτουμε στο <head> μέρος της σελίδας μας τον εξής κώδικα:

<script type="text/javascript" src="jquery.js"></script>

Η σύνταξή της είναι πολύ απλή : $(επιλογή).δράση()• Το $ είναι το σύμβολο που υποδηλώνει την jQuery.• Ο (επιλογέας) είναι το ερώ τημα^^^) για το HTML στοιχείο που θέλουμε.• Η δράση (action) είναι αυτό που θα συμβεί στο επιλεγμένο στοιχείο.

Π.χ. $(this).hide() - Κρύβει το επιλεγμένο αντικείμενο.

Η jQuery έχει τη δυνατότητα να χρησιμοποιεί τα ονόματα των CSS στύλ για να επιλέξει HTML στοιχεία :

Π.χ. Το $(“p”) επιλέγει όλα τα στοιχεία <p>Κάποια από τα βασικά γεγονότα (events) της jQuery είναι :

■ $(document).ready(function) - Έλεγχος ολοκλήρωσης φόρτωσης μιας σελίδας■ $(selector).click(function) - Έλεγχος για το κλικ σε ένα στοιχείο■ $(selector).dblclick(function) - Έλεγχος για το διπλό κλικ σε ένα στοιχείο■ $(selector).focus(function) - Έλεγχος εστίασης σε ένα στοιχείο■ $(selector).mouseover(function) - Έλεγχος για το hover του ποντικιού σε ένα

στοιχείοΚάποια παραδείγματα εφέ της jQuery είναι :

■ $(selector).hide() - Απόκρυψη επιλεγμενων στοιχείων■ $(selector).show() - Εμφάνιση επιλεγμένων στοιχείων■ $(selector).toggle() - Εμφάνιση/Απόκρυψη επιλεγμένων στοιχείων■ $(selector).slideDown() - Slide down■ $(selector).slideUp() - Slide up■ $(selector).slideToggle() - Slide up/down■ $(selector).fadeIn() - Εμφάνιση (fade in)■ $(selector).fadeOut() - Απόκρυψη (fade out)■ $(selector).fadeTo() - Απόκρυψη σε ορισμένο opacity■ $(selector).animation() - Εφαρμογή animation σε επιλεγμένα στοιχεία

Σελίδα 26 από 61

Page 27: Διαδικτυακό Ημερολόγιο - teiemt.grdigilib.teiemt.gr/jspui/bitstream/123456789/466/1/... · 2015-04-26 · Τέλος στο Κεφάλαιο 4, παραθέτεται

Πτυχιακή εργασία της Πατσιαβουρίδου Μαγδαλένας

Συνδυάζοντας τις δυνατότητες της jQuery με τα CSS (στα οποία θα αναφερθούμε στην επόμενη παράγραφο) μπορούμε να δημιουργήσουμε ένα πολύ καλαίσθητο περιβάλλον, λειτουργικό και με όμορφα animations.

3.5 CSS (Cascading Style Sheets)Όπως είδαμε και σε προηγούμενη παράγραφο, η γλώσσα προγραμματισμού ιστοσελίδων

και εφαρμογών HTML, χρησιμοποιείται για τη δημιουργία και την περιγραφή στοιχείων σε μια ιστοσελίδα. Όταν ο browser διαβάζει ένα κείμενο σε μια σελίδα, λαμβάνει υπόψη του τα paragraph tags, τα οποία χρησιμοποιούνται για να περιγράψουν αντικείμενα. Ότι βρίσκεται ανάμεσα σε tags, παίρνει την αντίστοιχες ιδιότητες. Μέσω των επιλογέων (selectors) μπορούμε να επικεντρωθούμε σε συγκεκριμένα στοιχεία στην HTML σελίδα και να τους διαμορφώσουμε στυλ.

Η σύνταξη μιας CSS εντολής είναι :

ΕΠΙΛΟΓΗ ΑΓΚΥΛΗ ΕΡΩΤΗΜΑΤΙΚΟ ΔΗΛΩΣΗ ΑΓΚΥΛΗ

{color:blue; font-size: 12px;}ΙΔΙΟΤΗΤΑ ΤΙΜΗ ΙΔΙΟΤΗΤΑ

Εικ 3.4 Σύνταξη CssΕπειδή τα tags στην HTML είναι περιορισμένα, τα CSS μας δίνουν τη δυνατότητα να

δηλώσουμε τα δικά μας μοναδικά ή μη στοιχεία, και να τους διαμορφώσουμε το στυλ. Αυτό επιτυγχάνεται με τη χρήση division tags της HTML (divs), ID και CLASS. Τα ID και classes είναι διαφορετικά στοιχεία και επιτρέπεται να έχουν το ίδιο όνομα. Τα ID δηλώνουν μοναδικά στοιχεία και είναι ορθότερο να μην εμφανίζουμε το ίδιο στοιχεία πάνω από μια φορά στη σελίδα μας. Αντίθετα, μπορούμε να έχουμε απεριόριστα αντίγραφα κλάσεων μέσα στη σελίδα μας. Το cascading αναφέρεται στο φαινόμενο του καταρράκτη, και ουσιαστικά υποδεικνύει την κληρονομικότητα που έχουν τα στοιχεία των CSS.

Οι σύνδεσμοι (links) είναι μακράν τα πιο σημαντικά στοιχεία που υπάρχουν στην HTML, αφού αυτά ουσιαστικά κάνουν τις σελίδες μας διαδραστικές. Επίσης, χρησιμοποιώντας CSS μπορούμε να δώσουμε χρώμα και εικόνα στο παρασκήνιο (background) της σελίδας ή κάποιου στοιχείου της

Σελίδα 27 από 61

Page 28: Διαδικτυακό Ημερολόγιο - teiemt.grdigilib.teiemt.gr/jspui/bitstream/123456789/466/1/... · 2015-04-26 · Τέλος στο Κεφάλαιο 4, παραθέτεται

Κεφάλαιο 4ο

Υλοποίηση

Σε αυτό το κεφάλαιο θα παραθέσουμε των κώδικα που γράψαμε για τη δημιουργία του web calendar, σχόλια και screenshots της εφαρμογής, οδηγίες εγκατάστασης και κάποιες οδηγίες χρήσεις, παρουσιάζοντας τις δυνατότητες της εφαρμογής μας.

4.1 Εγκατάσταση της εφαρμογήςΑρχικά πρέπει να στήσουν έναν local server ώστε να μπορεί να τρέξει η web

εφαρμογή μας. Από την ιστοσελίδα www.apachefriends.org κατεβάζουμε την τελευταία έκδοση του XAMPP, ώστε να υποστηρίζει PHP 5.5, στην οποία είναι γραμμένο μέρος της εφαρμογής μας. Το XAMPP είναι ένα πακέτο προγραμμάτων ελεύθερου λογισμικού, ανοιχτού κώδικα και ανεξαρτήτου πλατφόρμας, το οποίο περιέχει τον εξυπηρετητή ιστοσελίδων Http Apache, τη βάση δεδομένων SQL, και διερμηνέα για κώδικα γραμμένο σε γλώσσες προγραμματισμού PHP και Perl, αλλά εξυπηρετεί και δυναμικές ιστοσελίδες τεχνολογίας PHP και MySQL. Όταν το XAMPP εγκατασταθεί στον υπολογιστή διαχειρίζεται το localhost ως απομακρυσμένο κόμβο, ο οποίος συνδέεται με το πρωτόκολλα μεταφοράς αρχείων FTP.

Μετά την εγκατάσταση κάνουμε εκκίνηση (start) στα modules «Apache» και «MySQL».

Σελίδα 28 από 61

Page 29: Διαδικτυακό Ημερολόγιο - teiemt.grdigilib.teiemt.gr/jspui/bitstream/123456789/466/1/... · 2015-04-26 · Τέλος στο Κεφάλαιο 4, παραθέτεται

Πτυχιακή εργασία της Πατσιαβουρίδου Μαγδαλένας

Εικ 4.1 Λειτουργία xamppΣτον Apache HTTP Server τρέχει η PHP και αναλαμβάνει την «εξυπηρέτηση» του

website που στήνουμε. MySQL είναι η βάση δεδομένων μας, πάνω στην οποία σώζονται τα δεδομένα του «σημειωματάριου» του ημερολογίου καθώς και τα «συμβάντα» των ημερών.

Ανοίγουμε τον browser της προτίμησής μας και πηγαίνουμε στη διεύθυνση «http://localhost/phpmyadmin», όπου θα δημιουργήσουμε τη βάση δεδομένων μας και θα εισάγουμε το sql script με το «σχήμα» των πινάκων που χρειαζόμαστε.

Y & phpMyAd

Q localhost/phpmyadmin/Εικ4.2 Πρόσβαση στο μενού τοπικού server

Το phpmyadmin είναι ένα δωρεάν εργαλείο ανοιχτού κώδικα γραμμένο σε PHP με σκοπό να διευκολύνει στη διαχείριση βάσεων MySQL με τη χρήση web browser. Μπορεί να πραγματοποιήσει διάφορες λειτουργίες όπως δημιουργία, μορφοποίηση και διαγραφή βάσεων δεδομένων, πινάκων και πεδίων, εκτελώντας εντολές SQL.

Πατάμε πάνω στο πλήκτρο «databases» phpMyAdmin ώ u a m fS 9

General Settings

y sql S ta tu s ISS U se rs © E x p o r t © Im p o rt S e t t in g s S y n c h ro n iz e

Εικ4.3Βάσεις δεδομένων στον τοπικού serverΚι έπειτα στην εισαγωγή νέας βάσης δεδομένων, βάζουμε για όνομα της βάσης

«calendar», collation «utf8_general_ci» και πατάμε «create».

Σελίδα 29 από 61

Page 30: Διαδικτυακό Ημερολόγιο - teiemt.grdigilib.teiemt.gr/jspui/bitstream/123456789/466/1/... · 2015-04-26 · Τέλος στο Κεφάλαιο 4, παραθέτεται

Κεφάλαιο 4ο

127.0.0.1

L .J Databases Ο SQL Status h_=J Users Q Export Θ Import

Databases

W Create database ^

calendar utfB_general_ci T Create

Εικ4.4Βάσεις δεδομένων στον τοπικού server

Αφού δημιουργηθεί η βάση, την επιλέγουμε από το μενού αριστερά και πατάμε το πλήκτρο «import».

Αφού ανοίξει το μενού import Πατάμε στο «Επιλογή αρχείου» και βρίσκουμε το αρχείο ‘calendar.sql” μέσα στο φάκελο “_setup\database” του project και πατάμε το πλήκτρο Go.

Σελίδα 30 από 61

Page 31: Διαδικτυακό Ημερολόγιο - teiemt.grdigilib.teiemt.gr/jspui/bitstream/123456789/466/1/... · 2015-04-26 · Τέλος στο Κεφάλαιο 4, παραθέτεται

Πτυχιακή εργασία της Πατσιαβουρίδου Μαγδαλένας

Εικ4.4 Import Βάσεως δεδομένων στον τοπικού server

4.2 Παρουσίαση της διεπαφής του ημερολογίου

Γράφοντας http://localhost/calendar στον browser, μπαίνουμε στο project. Αν γνωρίζουμε την IP του υπολογιστή που τρέχει το project μπορούμε να έχουν πρόσβαση κι από άλλο υπολογιστή που βρίσκεται στο ίδιο δίκτυο, χρησιμοποιώντας αντί για localhost την IP. Πχ http://192.168.1.155/calendar . Με επιπλέον ρυθμίσεις στο δίκτυο μας μπορούμε να βγάλουμε το project live και στο internet.

Δ ευ τέρ α Τ ρ ίτη Τ ετά ρ τη Π έμ π τη Π α ρ α σ κ ευ ή Σ ά β β α τ ο Κ υ ρ ια κ ή

28Σ υ μ β ά ν τ α

0

29Σ υ μ β ά ν τ α

0

30Σ υ μ β ά ν τ α

0

1Σ υ μ β ά ν τ α

0

2Σ υ μ β ά ν τ α

0

3Σ υ μ β ά ν τ α

0

4Σ υ μ β ά ν τ α

5Σ υ μ β ά ν τ α

‘ 0

6Σ υ μ β ά ν τ α

0

7Σ υ μ β ά ν τ α

0

8Σ υ μ β ά ν τ α

0

9Σ υ μ β ά ν τ α

0

ΤοΣ υ μ β ά ν τ α

0

1 1

L U

Σελίδα 31 από 61

Page 32: Διαδικτυακό Ημερολόγιο - teiemt.grdigilib.teiemt.gr/jspui/bitstream/123456789/466/1/... · 2015-04-26 · Τέλος στο Κεφάλαιο 4, παραθέτεται

Κεφάλαιο 4ο

Εικ4.5 Διεπαφή ημερολογίου

Αυτή είναι η κεντρική οθόνη της εφαρμογής μας, στο πάνω μέρος τις οποίας υπάρχει μια κεφαλίδα με το όνομα της εφαρμογής και του σχεδιαστή.

Όπως απεικονίζεται στο παραπάνω σχήμα, με κίτρινο χρώμα απεικονίζονται οι μέρες του μήνα που έχουν περάσει, με κόκκινο χρώμα η τρέχουσα μέρα ενώ με πράσινο χρώμα οι μέρες του μήνα που ακολουθούν κι απομένουν. Με πορτοκαλί πλαίσιο σημειώνονται στα Σαββατοκύριακα του μήνα.

Από το τμήμα

Σελίδα 32 από 61

Page 33: Διαδικτυακό Ημερολόγιο - teiemt.grdigilib.teiemt.gr/jspui/bitstream/123456789/466/1/... · 2015-04-26 · Τέλος στο Κεφάλαιο 4, παραθέτεται

Πτυχιακή εργασία της Πατσιαβουρίδου Μαγδαλένας

μπορούμε να επιλέξουμε σε dropdown λίστα το μήνα που χρόνου που μας ενδιαφέρει καθώς και το έτος, πληκτρολογώντας στο αντίστοιχο πεδίο. Τα βέλη μας διευκολύνουν για μεταφορά στον προηγούμενα ή επόμενο μήνα.

Παρατηρούμε ότι στα κουτάκια του ημερολογίου υπάρχει κείμενο που αναφέρεται στον αριθμό των συμβάντων που είναι προγραμματισμένα για τη συγκεκριμένη μέρα.

Εικ4.6 Task σε κάθε ημέρα

Πατώντας με το ποντίκι πάνω σε οποιαδήποτε μέρα, μεταβαίνουμε στην οθόνη των λεπτομερειών της επιλεγμένης ημέρας.

Εικ4.7 Σημειωματάριο ημέρας

Σελίδα 33 από 61

Page 34: Διαδικτυακό Ημερολόγιο - teiemt.grdigilib.teiemt.gr/jspui/bitstream/123456789/466/1/... · 2015-04-26 · Τέλος στο Κεφάλαιο 4, παραθέτεται

Κεφάλαιο 4ο

Υπάρχει διαθέσιμο πεδίο συμπλήρωσης κειμένου για τη δημιουργία σημειώσεων που αφορούν την επιλεγμένη μέρα στο πάνω μέρος της οθόνης, και πατώντας στο εικονίδιο με τη δισκέτα, αποθηκεύονται.

Παρασκευή - 16-5-2014Σημειωματάριο Ημέρας

Η

Ακριβώς από κάτω φαίνονται τα ήδη προγραμματισμένα συμβάντα της τρέχουσας ημέρας. Παρουσιάζεται η ώρα που είναι προγραμματισμένο ένα γεγονός, και λεπτομέρειες για το γεγονός αυτό σε μορφή κειμένου. Για να διαγράψουμε το συμβάν, πατάμε με το ποντίκι πάνω στο εικονίδιο « Χ » κάτω δεξιά.

Εικ4.8 Αναφορά ημέρας

Στη συνέχεια φαίνεται το πεδίο για την προσθήκη και τον ορισμό νέου συμβάντος. Από δύο dropdown λίστες ορίζουμε την ώρα αρχής και το τέλους του συμβάντος, και από μια τρίτη ακριβώς δίπλα, το είδος της επανάληψης που επιθυμούμε. Στο κενό πεδίο ακριβώς από κάτω εισάγουμε σε μορφή κειμένου λεπτομέρειες για το συμβάν που προγραμματίζουμε. Για την επιβεβαίωση της προσθήκης του νέου συμβάντος, επιλέγουμε με τον ποντίκι το εικονίδιο « + » κάτω δεξιά.

Σελίδα 34 από 61

Page 35: Διαδικτυακό Ημερολόγιο - teiemt.grdigilib.teiemt.gr/jspui/bitstream/123456789/466/1/... · 2015-04-26 · Τέλος στο Κεφάλαιο 4, παραθέτεται

Πτυχιακή εργασία της Πατσιαβουρίδου Μαγδαλένας

Εικ 4.9 Προσθήκη συμβάντος

4.3 Αρχεία κώδικα

Θα ξεκινήσουμε να παραθέτουμε τον κώδικα από τα πιο σημαντικά αρχεία κατ αρχήν, όπως το DateUtil, γραμμένο σε PHP. Για μεγαλύτερη διευκόλυνση την επεξήγηση του κώδικα έχουμε προσθέσει in-line comments στα αρχεία.

Σελίδα 35 από 61

Page 36: Διαδικτυακό Ημερολόγιο - teiemt.grdigilib.teiemt.gr/jspui/bitstream/123456789/466/1/... · 2015-04-26 · Τέλος στο Κεφάλαιο 4, παραθέτεται

Κεφάλαιο 4ο

2425262728293031323334353637383940414243444546474849505154

θ

$

57 Π

65 Η

69 Π

8485868788

8990919293949596979899

100 101

/*Η function επιστρέφει το όνομα της ημέρας από την αντιστοιχηση από το ISO-8601

*/public static function getDayName ( SdayOfWeek ) {

$index = ltrim (SdayOfWeek, O');$result = DateUtil: : getDaysOfWeek: () [Sindex] ; return $result;

}/*

H function επιστρέφει έναν πίνακα με τα ονόματα των μηνών*/public static function getMonths() {

Smonths [ „] = 'Ιανουάριος';$months[2] = 'Φεβρουάριος';Smonths[3] = 'Μάρτιος';$months[4] = 'Απρίλιος';$months[5] = ’Μάιος';$iconths [ o ] = 'Ιούνιος';Smonths[ ] = ’Ιούλιος';Smonths[3] = Αύγουστος';Smonths[9] = 'Σεπτ έμβριος';Smonths[2:] = 'Οκτώβριος';Smonths[_1 ] = 'Νοέμβριος';Smonths[_2] = 'Δεκέμβριος';

return Smonths;>

/*H f u n c t i o n ε π ι σ τ ρ έ φ ε ι τ ο ό ν ο μ α τ ο υ π ί ν α κ α π ο υ ζ η τ ε ί τ α ι*/

p u b l i c s t a t i c f u n c t i o n g e tM o n th N a m e ( $ m o n t h I n d e x ) {

S i n d e x = l t r i m ( $ m o n t h I n d e x , O ' ) ;S r e s u l t = D a t e U t i l : : g e t M o n t h s ( ) [ $ i n d e x j ; r e t u r n $ r e s u l t ;

/*H f u n c t i o n ε π ι σ τ ρ έ φ ε ι τ η ν HTML ε ν ό ς SELECT μ ε ό λ ο υ ς τ ο υ ς μ ή ν ε ς τ ο υ χ ρ ό ν ο , ε π ι λ ε γ μ έ ν ο α υ τ ό ν π ο υ έ χ ε ι π ε ρ α σ τ ε ί ω ς ό ρ ι σ μ α , ό ν ο μ α inputKai ID α υ τ ά π ο υ έ χ ο υ ν π ε ρ α σ τ ε ί σ τ ο α ν τ ί σ τ ο ι χ ο ό ρ ι σ μ α

*/p u b l i c s t a t i c f u n c t i o n g e t M o n t h s S e l e c t B o x ( $ s e l e c t e d M o n t h , S s e l e c t N a m e , $ s e l e c t l d ) {

$ m o n th s = D a t e U t i l : : g e t M o n t h s (> ;$ r e s u l t = " < s e l e c t n a m e = \" n . S s e l e c t N a m e . " \" i d = \ n " . S s e l e c t l d . f o r ( $ i = l ; $ i < = s i z e o f ( $ m o n t h s ) ; $ i + + ) {

S s e l e c t e d =i f ( S s e l e c t e d M o n t h = $ i ) {

S s e l e c t e d = ns e l e c t e d = \ " s e l e c t e d \ " n ;

I I >$ r e s u l t . = " < o p t i o n v a l u e = \ " " . $ i . " \" " . S s e l e c t e d . " . $ m o n t h s [ $ i ] . " < / o p t i o n > " ;

{ >S r e s u l t . = " < / s e l e c t > " ;

r e t u r n S r e s u l t ;

>/*

H f u n c t i o n ε π ι σ τ ρ έ φ ε ι τ ο t i m e s t a m p τ η ς ο ρ ι σ μ έ ν η ς η μ ε ρ ο μ η ν ί α ς

*/public static function timestampFromDate ( Sdate ) {

Stimestamp = strtotime($date); return Stimestamp;

>

/*H function επιστρέφει τον αριθμό ημερών που έχει ο μήνας που ζητείται στο Γρηγοριανό ημερολόγιο

*/public static function numberOfDaysInMonth ( $month, Syear ) {

$num = cal_days_in_month(CAL_GREGORIAN, $month,Syear); return $num;

}

Σελίδα 36 από 61

Page 37: Διαδικτυακό Ημερολόγιο - teiemt.grdigilib.teiemt.gr/jspui/bitstream/123456789/466/1/... · 2015-04-26 · Τέλος στο Κεφάλαιο 4, παραθέτεται

Πτυχιακή εργασία της Πατσιαβουρίδου Μαγδαλένας

102 A1 0 31 0 41 0 5 -1 0 6 R1 0 71 0 81 0 91 1 0 Π111 1121 1 31 1 41 1 51 1 6 -1 1 71 1 81 1 9120121 -

1 2 3 φ1 2 41 2 51 2 6 -1 2 7 Η1 2 81 2 91 3 01 3 1 Π1 3 21 3 31 3 41 3 51 3 61 3 7 -1 3 81 3 91 4 01 4 11 4 2 -

1 4 4 φ

1 4 5

1 4 6 -1 4 7 φ

1 4 8

1 4 9

1 5 01 5 1 φ

1 5 2

1 5 3 -

1 5 41 5 5

1 5 6 -

1 5 7

1 5 8 φ1 5 9

1 6 0 -

1 6 1 φ

1 6 21 6 3

1 6 4

1 6 5 φ

1 6 61 6 7 -

1 6 8

1 6 9

1 7 0 -

/*Η f u n c t i o n ε π ι σ τ ρ έ φ ε ι έ ν α ν π ί ν α κ α μ ε ο ρ ίσ μ α τ α τ ο ν ε π ό μ ε ν ο μ ή ν α κ α ι τ ο ν α ν τ ί σ τ ο ι χ ο χ ρ ό ν ο α π ό α υ τ ό ν π ο υ ζ τ η τ ε ί τ α ι π χ . α ν ο μ ή ν α ς ε ί ν α ι ο Δ ε κ έ μ β ρ ι ο ς , ε π ι σ τ ρ έ φ ε ι μ ή ν α Ι ο κ α ι τ ο ν ε π ό μ ε ν ο χ ρ ό ν ο κ τ λ .*/

p u b l i c s t a t i c f u n c t i o n g e tN e x tM o n th Y e a r A r r a y ( S t h is M o n t h , $ t h i s Y e a r ) {$ n e x tM o n th = n u l l ;$ y e a r = n u l l ;

i f ( S t h is M o n t h == 12 ) {S n e x tM o n th = 1;S y e a r = S t h i s Y e a r + 1;

; e l s e {S n e x tM o n th = S t h is M o n t h + 1 ;S y e a r = S t h i s Y e a r ;

j >S r e s u l t = a r r a y ( 'm o n th ' => S n e x tM o n th , ' y e a r ' => S y e a r ) ;

r e t u r n S r e s u l t ;>/*H f u n c t i o n ε π ι σ τ ρ έ φ ε ι έ ν α ν π ί ν α κ α μ ε ο ρ ίσ μ α τ α τ ο ν π ρ ο η γ ο ύ μ ε ν ο μ ή ν α κ α ι τ ο ν α ν τ ί σ τ ο ι χ ο χ ρ ό ν ο α π ό α υ τ ό ν π ο υ ζ τ η τ ε ί τ α ι π χ . α ν ο μ ή ν α ς ε ί ν α ι ο Ι α ν ο υ ά ρ ι ο ς , ε π ι σ τ ρ έ φ ε ι μ ή ν α 1 2 ο κ α ι τ ο ν π ρ ο η γ ο ύ μ ε ν ο χ ρ ό ν ο κ τ λ .*/

p u b l i c s t a t i c f u n c t i o n g e t P r e v io u s M o n th Y e a r A r r a y ( S t h is M o n t h , S t h i s Y e a r ) {S p r e v io u s M o n th = n u l l ;S y e a r = n u l l ;

i f ( S t h is M o n t h = _ ) {S p r e v io u s M o n th = 1 2 ;S y e a r = S t h i s Y e a r - 1 ;

> e l s e {S p r e v io u s M o n th = S t h is M o n t h - _ ;S y e a r = S t h i s Y e a r ;I >

S r e s u l t = a r r a y ( 'm o n th ' => S p r e v io u s M o n th , ' y e a r ' => S y e a r ) ;

r e t u r n S r e s u l t ;>/*

H function ελέγχει αν η μέρα που ελέγχεται έχει περάσει σε σχέση με το σήμερα*/public static function checklfIsPastDay ( $date, $todayTlinestamp ) {

SdayTimeStamp = DateUtil::timestampFromDate($date);

Sresult = false;if ( SdayTimeStamp < StodayTimestamp ) {

$result = true;| >

return Sresult;>/*

H function ελέγχει αν η μέρα που ελέγχεται δεν έχει περάσει σε σχέση με το σήμερα*/public static function checklfIsNextDay ( Sdate, StodayTimestamp ) {

SdayTiir.eStamp = DateUtil::timestampFromDate(Sdate);

Sresult = false;if ( SdayTimeStamp > StodayTimestamp ) {

Sresult = true;I >

return Sresult;>

Σελίδα 37 από 61

Page 38: Διαδικτυακό Ημερολόγιο - teiemt.grdigilib.teiemt.gr/jspui/bitstream/123456789/466/1/... · 2015-04-26 · Τέλος στο Κεφάλαιο 4, παραθέτεται

Κεφάλαιο 4ο

1 7 2 ή

1 7 3

1 7 4 -

1 7 5 Η

1 7 61 7 7

1 7 8

1 7 9 R

1 8 0

1 8 1 -

1 8 2

1 8 3

1 8 4 -

1 8 5

1 8 6 Η

1 8 7

1 8 8 -

1 8 9 Π

1 9 0

1 9 1 -

1 9 2

1 9 3 φ

1 9 4

1 9 5 -

1 9 6 φ

1 9 7

1 9 8

1 9 9 -

/*Η function ελέγχει αν η μέρα που ελέγχεται είναι η σημερινή

*/p u b l i c s t a t i c f u n c t i o n c h e c k l f l s T o d a y ( $ d a t e , S t o d a y T im e s t a m p ) {

$ d a y T im e S t a ir p = D a t e U t i l : : t im e s t a m p F r o m D a t e ( S d a t e ) ;

$ r e s u l t = f a l s e ;

i f ( S d a y T im e S ta m p = = S t o d a y T i m e s t a m p ) {

$ r e s u l t = t r u e ;

| }r e t u r n $ r e s u l t ;

>/*

H function δημιουργεί την Ημερομηνία από τα ορίσματα μέρα, μήνα, χρόνο*/p u b l i c s t a t i c f u n c t i o n p r e p a r e D a t e S t r i n g ( $ d a y O f M o n t h , S m o n th , $ y e a r ) {

r e t u r n S d a y O fM o n th . . $ m o n th . . $ y e a r ;

>/*

H function επιστρέφει τη θέση τηε δωσμένης μέρας μέσα στην εβδομάδα, πχ. η 22 Απριλίου 2014 είναι Τρίτη, άρα επιστρέφει 2*/p u b l i c s t a t i c f u n c t i o n g e t D a y ln W e e k F o r D a t e ( $ d a y , $ m o n t h , $ y e a r ) {

$ s p e c i f i e d D a t e = D a t e U t i l : : p r e p a r e D a t e S t r i n g ( $ d a y , S m o n th , $ y e a r ) ;

r e t u r n d a t e ( ' N D a t e U t i l : : t i m e s t a m p F r o m D a t e ( d a t e ( $ s p e c i f i e d D a t e ) ) ) ;

>

Συνεχίζουμε με το αρχείο DBhelper.php που συμπληρώνει τον φάκελο Util μαζί με το DateUtil.php που παρουσιάσαμε νωρίτερα.

Φ c l a s s D B H e lp e r {

//m y S Q L c o n n e c t i o n p a r a m e t e r s p r i v a t e s t a t i c S d a t a b a s e H o s t = " l o c a l h o s t " ; p r i v a t e s t a t i c S d a ta b a se N a m e = " c a le n d a r " ; p r i v a t e s t a t i c S d a ta b a s e U s e r N a m e = " r o o t " ; p r i v a t e s t a t i c S d a t a b a s e P a s s w o r d = "";

p u b l i c s t a t i c f u n c t i o n g e t D a t a b a s e C o n n e c t i o n () {

/ / Δ η μ ι ο υ ρ γ ί α σ ύ ν δ ε σ η ς μ ε τη βά ση$ c o n = m y s q l i _ c o n n e c t ( D B H e lp e r : : $ d a t a b a s e H o s t , D B H e lp e r : : $ d a ta b a s e U s e r N a m e , D B H e lp e r : : $ d a t a b a s e P a s s w o r d , D B H e lp e r : : $ d a t a b a s e N a m e ) ;

18 Π/ / C h e c k c o n n e c t i o n i f ( m y s q l i _ c o n n e c t _ e r r n o ( $ c o n ) ) {

d i e ( 'C o u ld n o t c o n n e c t : ' . m y s q l i _ c o n n e c t _ e r r o r ( ) ) ;

>m y s q l i _ s e t _ c h a r s e t ( S c o n , " u t f S " ) ;

r e t u r n S c o n ;

Θα προχωρήσουμε με την παρουσίαση του αρχείου ΟθΙθπάθΓϋθγ, το οποίο χρησιμοποιεί σαν εισαγωγή τα ϋθΙθϋΙΙΙ και ΡΒήθΙρθΓ.

Σελίδα 38 από 61

Page 39: Διαδικτυακό Ημερολόγιο - teiemt.grdigilib.teiemt.gr/jspui/bitstream/123456789/466/1/... · 2015-04-26 · Τέλος στο Κεφάλαιο 4, παραθέτεται

Πτυχιακή εργασία της Πατσιαβουρίδου Μαγδαλένας

2 72 82 9303 13233343 536373 83 9404142434445464748495 051525 354555 75 85 960 61 62636465666768

697 07 17 27 3747 57 67 77 87 98 0

//Φ Ε ΡΝ Ω ΤΑ TASKS ΑΠΟ ΤΗ ΒΑΣΗ ( ΕΛΕΓΧΩ ΚΑΙ Γ ΙΑ REPLICATIONS )S c a s k s Q u e r y = " SELECT * FROM c a s k s t WHERE t . d a c e = . $ d a c e . " ’ ";/ /ΕΛΕΓΟΧ Γ ΙΑ REPLICATION "ΚΑΘΕ ΜΕΡΑ"S c a s k s Q u e r y . = " OR ( c . r e p l i c a t i o n _ t y p e = 'DAY' AND UNIXJTIM ESTAM P(STR_TO_DATE(C. d a t e , ' %d-%ir-%Y') ) <= UNIX_TIMESTAMP(STR_TO_DATE( ’ " . $ d a t e . ' %d-%m-%Y') ) ) ";/ /ΕΛΕΓΧΟΣ Γ ΙΑ REPLICATION "ΚΑΘΕ ΕΒΔΟΜΑΔΑ" ( ΕΛΕΓΧΩ ΑΝ Η ΘΕΣΗ ΤΗΣ ΜΕΡΑΣ ΜΕΣΑ ΣΤΗΝ ΕΒΔΟΜΑΔΑ Ε ΙΝ Α Ι Ι Δ Ι Α ΜΕ ΑΥΤΗ TOY TASK )S c a s k s Q u e r y . = " OR ( t . r e p l i c a c i o n _ c y p e = 'WEEK* AND t . r e p l i c a c i o n _ d a y =". $ d a y In W e e k . " AND UN I X_T IME STAMP (STR_TO_DATE ( t . d a c e , · %d-%rr.-%Y’ ) ) <= UNIX_TIMESTAMP (STR_TO_DATE ( ' " . $ d a C e . ' %d-%rr-%Y' ) ) ) ";/ /ΕΛΕΓΧΟΣ Γ ΙΑ REPLICATION "ΚΑΘΕ ΜΗΝΑ" ( ΕΛΕΓΧΩ ΑΝ Η ΜΕΡΑ ΜΟΥ ΜΕΣΑ ΣΤΟ ΜΗΝΑ Ε ΙΝ Α Ι Ι Δ Ι Α ΜΕ ΑΥΤΗ TOY TASK)S c a s k s Q u e r y .= " OR ( c . r e p l i c a c i o r . _ c y p e = 'MONTH' AND c . r e p l i c a c i o r . _ d a y =". S d a y . " AND D N IX _TIM ESTA M P(STR _TO _D A TE(C .dace, '% d-% m-% Y')) < = DNIX_TIMESTAMP(STR_TO_DATE( ' " . S d aC e . ' %d-%rc-%Y') ) ) ";//ΕΛ ΕΓΧΟ Σ Γ ΙΑ REPLICATION "ΚΑΘΕ ΧΡΟΝΟ" ( ΕΛΕΓΧΩ ΑΝ Η ΜΕΡΑ ΜΟΥ ΜΕΣΑ ΣΤΟ ΜΗΝΑ ΚΑΙ Ο ΜΗΝΑΣ ΜΟΥ Ε ΙΝ Α Ι Ι Δ Ι Α ΜΕ ΑΥΤΗ TOY TASK)S c a s k s Q u e r y .= " O R ( c . r e p l i c a c i o n _ c y p e = 'YEAR' AND C . r e p l i c a c i o r . _ d a y =" .S d a y . " AND c . r e p l i c a c i o n _ m o n c r . =".S m o n c h . " AND UNIXJTIMESTAMP (STR_TO_DATE (C . d a c e , ' %d-%ir.-%Y') ) < = UNIX_T IME STAMP (STR_TO_DATE ( ' " . S d a c e . " ' , ' %d-%rr-%Y' ) ) ) ";/ / Τ Α ΑΠΟΤΕΛΕΣΜΑΤΑ ΤΑΞΙΝΟΜΗΜΕΝΑ ΑΡΧΙΚΑ ME TO AN Ε ΙΝ Α Ι ΟΛΗ ΜΕΡΑ, ΑΛΛΙΩΣ ΜΕ ΤΗΝ ΩΡΑ ΕΚΚΙΝΗΣΗΣ ΑΥΞΟΥΣΑS c a s k s Q u e r y . = " ORDER BY c . a l l _ d a y A SC , c . s c a r c _ c i m e ASC

/ / d i e ( S c a s k s Q u e r y ) ;/ / Σ τ ο π ε δ ί ο τω ν T a s k s β ά ζω τ ο α π ο τ έ λ ε σ μ α τ ο m s q l i _ q u e r y S c a s k s Q u e r y R e s u lc = m y s q l i _ q u e r y ( S c o n , S c a s k s Q u e r y ) ;

//Κ Λ Ε ΙΣΙΜ Ο ΣΥΝΔΕΣΗΣ ME ΤΗ ΒΑΣΗ m y s q l i _ c l o s e ( S c o n ) ;/ / -----------------------------------ΕΠΙΚΟΙΝΩΝΙΑ ME ΒΑΣΗ Τ Ε Λ Ο Σ ---------------------------------------------------/ /

Σελίδα 39 από 61

Page 40: Διαδικτυακό Ημερολόγιο - teiemt.grdigilib.teiemt.gr/jspui/bitstream/123456789/466/1/... · 2015-04-26 · Τέλος στο Κεφάλαιο 4, παραθέτεται

Κεφάλαιο 4ο

787980 81 8283848586

8788

89909192 -939495 Η96979899

100 101 102

1031 0 4 [105 φ106107108109110

111

112113114115116117118119120

1 21 φ122

123124125126127128129130131132133

//ΕΙΣΑΓΩΓΗ ΤΙΜΩΝ ΣΤΟ OBJECT//Δ η μ ιο υ ρ γ ώ έ ν α ν έ ο O b je c t τύ π ο υ C a len d a rD a y $ C a len d a rD a y = new C a le n d a r D a y ( ) ;

S C a len d a rD a y - > n o t e s S C a len d a rD a y -> ta s lc 3

= $ n o t e s ;= S ta s k s Q u e r y R e s u lt ;

r e t u r n S C a len d a rD a y ;}

H f u n c t i o n π α ίρ ν ε ι ως ο ρ ίμ α σ τ α τ ο μ ή να π ο υ θ έ λ ο υ μ ε ν α ε τ ο ιμ ά σ ο υ μ ε k o l το t im e s ta m p τ η ς σ η μ ε ρ ιν ή ς μ έρ α ςκ α ι ε π ισ τ ρ έ φ ε ι έ ν α ν π ίν α κ α μ ε τ ι μ έ ς α ν τ ι κ ε ί μ ε ν α τύ π ο υ C a len d a rD a y π ο υ α ν τ ι σ τ ο ι χ ο ύ ν σ τη ν κ ά θ ε μ έρ α τ ο υ ε μ φ α ν ιζ ό μ ε ν ο υ ΠΙΝΑΚΑ γ ι α τ η ν εμ φ ά νισ η τ ο υ μ ή να .

- Ξ ε κ ι ν ά ε ι β ά ζ ο ν τ α ς τ ι ς τ ε λ ε υ τ α ί ε ς μ έ ρ ε ς τ ο υ π ρ ο η γ ο ύ μ ε ν ο υ μ ήνα γ ι α τ η ν εβ δ ομ ά δ α π ου π ρ ω τ ο ξ ε κ ιν ά ε ι ο μ ή να ς π ο υ μ α ς ε ν δ ια φ έ ρ ε ι - Σ υ ν χ ί ζ ε ι β ά ζ ο ν τ α ς τ ι ς μ έ ρ ε ς τ ο υ μ ή να που δ ε ίχ ν ο υ μ ε-Τ ε λ ε ι ώ ν ε ι β ά ζ ο ν τ α ς τ ι ς μ έ ρ ε ς τ ο υ ε π ό μ ε ν ο υ μ ή να μ έ χ ρ ι ν α γ ε μ ί σ ε ι κ α ι η τ ε λ ε υ τ α ί α εβ δ ομ ά δ α τ ο υ π ίν α κ α των 6 εβδομάδω ν

//ΜΗΝΑΣ ΜΕ ΣΤΡΟΓΓΥΛΕΣ ΕΒΔΟΜΑΔΕΣ = 6 ΕΒΔΟΜΑΔΕΣ = 42 ΜΕΡΕΣ. ΠΕΡΙΣΣΕΥΟΥΝ ΜΕΡΕΣ ΠΡΙΝ ΚΑΙ ΜΕΤΑ. ( ΠΑΡΑΔΕΙΓΜΑ ΜΑΡΤΙΟΣ 2 0 1 4 ΠΟΥ ΧΡΕΙΑΖΕΤΑΙ 6 ΕΒΔΟΜΑΔΕΣ )*/p u b l i c s t a t i c f u n c t io n p rep a reM o n th C a len d a r ( S v is ib le M o n th , S v i s ib l e Y e a r , S tod ayT im estam p ) {

Sm onthC alendar = a r r a y ( ) ;

/ /Α π ό τη D a t e U t i l βρ ίσκω π ό σ ε ς μ έ ρ ε ς έ χ ε ι ο μ ή να ς που δ ε ίχ ν ο υ μ εSmonthNumberOfDays = D a t e ü t i l : inum berO fD aysInM onth( S v is ib le M o n th , S v is ib le Y e a r ) ;

/ /Α π ό τη D a t e U t i l βρίσκω τη θέση τη ς πρώ της μ έρ α ς το υ μ ήνα μ έσ α στη ν εβδομάδα που α ν τ ι σ τ ο ι χ ε ίSraon th F irstD ay ln d exIn W eek = d a t e ( ’N ' , D a t e U t i l : : tim esta m p F ro m D a te( d a t e ( Ό 1 - ' .S v is ib le M o n th . . S v i s i b l e Y e a r ) ) ) ;

//ΒΑΖΩ ΤΙΣ ΜΕΡΕΣ TOY ΠΡΟΗΓΟΥΜΕΝΟΥ ΜΗΝΑ ΜΕΣΑ ΣΤΗΝ ΠΡΩΤΗ ΕΒΔΟΜΑΔΑ ΤΟΥ ΗΜΕΡΟΛΟΓΙΟΥ / /Α π ό τη D a t e U t i l βρ ίσκω τ ο ν π ρ ο η γο ύ μ ε νο μ ήνα απ ό α υ τ ό ν π ο υ δ ε ίχ ν ο υ μ εS p rev iou sM on th Y earA rray = D a t e U t i l : : g e tP r e v io u sM o n th Y e a r A r r a y ( S v is ib le M o n th , S v is ib le Y e a r ) ;/ /Α π ό τη D a t e U t i l βρ ίσκω τ ο ν α ρ ιθ μ ό ημερών τ ο υ π ρ ο η γο ύμ ενο υ μήναSpreviousM onthN um berO fD ays = D a t e U t i l : :num berO fD aysInM onth( S p rev io u sM o n th Y ea rA rra y [ 'm o n t - ' ] , S p rev io u sM o n th Y ea rA rra y [ ' y e a r ' ] ) ;//Β ά ζ ω σ τ ο ν π ίν α κ α των ημερών τ ι ς τ ε λ ε υ τ α ί ε ς μ έ ρ ε ς το υ π ρ ο η γο ύμ ενο υ μ ή να α π ό τη ν πρώτη μ έρ α τ η ς εβ δομ ά δα ς μ έ χ ρ ι τη ν ημέρα που ξ ε κ ιν ά ε ι ο ν έ ο ς μ ήνα ς f o r ( S i = SpreviousM onthN um berO fD ays - S m on th F irstD ay ln d exIn W eek + 2 ; S i <= SpreviousM onthN um berO fD ays; $ i+ + ) {

/ /Ε τ ο ιμ ά ζ ω τα π ε δ ία τη ς η μ έρ α ς από τη f u n c t io n "prep areC alen d arD ay" μ ε γ ε μ ά τ α όλα τα π ε δ ία από τη βάση.SC alendarD ay = C a len d a rD a y : : p r e p a r e C a le n d a r D a y ( S i , S p rev io u sM o n th Y ea rA rra y [ 'm o n th '] , S p rev io u sM o n th Y ea rA rra y [ ’ y e a r ' ] ) ;

//ΕΛΕΓΧΟΣ ΓΙΑ ΤΟ ΑΝ ΕΙΝΑΙ ΜΕΡΑ ΠΟΥ ΕΧΕΙ ΠΕΡΑΣΕΙ ΚΑΙ ΓΙΑ ΤΟ ΑΝ ΕΙΝΑΙ Η ΣΗΜΕΡΙΝΗ ΜΕΡΑ / /Γ έ μ ισ μ α των βοη θητικώ ν π ε δ ίω ν τ η ς ημ έρα ςS d a te S tr in g = D a t e U t i l : : p r e p a r e D a t e S t r in g ( S C alendarD ay ->dayO fM onth , S C alen d arD ay ->m onth , S C alendarD ay -> y e a r ) ;SC alendarD ay - > is P a s tD a y = D a t e U t i l : : c h e c k l f I s P a s tD a y ( S d a t e S t r in g , S tod ayT im estam p ) ;SC alendarD ay -> is T o d a y = D a t e U t i l : : c h e c k l f I s T o d a y ( S d a te S t r in g , S tod ayT im estam p ) ;S C alen d arD ay -> is N e x tD a y = D a t e U t i l : : c h e c k I f I s N e x t D a y ( S d a t e S t r in g , S todayT im estam p ) ;SC alendarD ay -> isIn C u r r e n tM o n th = f a l s e ;

Σελίδα 40 από 61

Page 41: Διαδικτυακό Ημερολόγιο - teiemt.grdigilib.teiemt.gr/jspui/bitstream/123456789/466/1/... · 2015-04-26 · Τέλος στο Κεφάλαιο 4, παραθέτεται

Πτυχιακή εργασία της Πατσιαβουρίδου Μαγδαλένας

1341 3 51 3 61 3 71 3 81 3 9 01 4 01 4 11421 4 31441 4 51 4 61471481 4 91 5 01 5 11521 5 31541 5 51 5 61 5 71 5 8 01 5 91 6 01 6 1162

1 6 41 6 51 6 61 6 71 6 81 6 91 7 01 7 11 7 21 7 31 7 41 7 51 7 61 7 71 7 81 7 91 8 0

/ /Β ά ζ ω τη μ έ ρ α σ τ ο ν π ίν α κ α μ ε τ ι ς μ έ ρ ε ς τω ν 6 εβ δομ ά δω ν a r r a y _ p u s h (S m o n th C a le n d a r ,$ C a le n d a r D a y ) ;}

//3 Α Ζ Ω ΟΛΕΣ ΤΙΣ ΜΕΡΕΣ ΤΟΥ ΜΗΝΑ ΠΟΥ ΘΕΛΩf o r ( $ i = S m o n th F ir s tD a y ln d e x I n W e e k ; S i < S m o n th F ir s tD a y ln d e x I n W e e k + Sm onthN um berO fD ays; $ i+ + ) {

/ /Ε τ ο ιμ ά ζ ω τ α π ε δ ί α τ η ς η μ έ ρ α ς α π ό τη f u n c t i o n " p r e p a r e C a le n d a r D a y " μ ε γ ε μ ά τ α ό λ α τ α π ε δ ί α α π ό τη β ά σ η .S C a le n d a r D a y = C a le n d a r D a y : :p r e p a r e C a le n d a r D a y ( S i - S m o n th F ir s tD a y ln d e x I n W e e k + 1 , S v i s ib l e M o n t h , S v i s i b l e Y e a r ) ;

//ΕΛΕΓΧΟΣ ΓΙΑ TO AN ΕΙΝΑΙ ΜΕΡΑ ΠΟΥ ΕΧΕΙ ΠΕΡΑΣΕΙ ΚΑΙ ΓΙΑ ΤΟ ΑΝ ΕΙΝΑΙ Η ΣΗΜΕΡΙΝΗ ΜΕΡΑ / /Γ έ μ ι σ μ α τω ν β ο η θ η τ ικ ώ ν π ε δ ίω ν τ η ς η μ έ ρ α ςS d a t e S t r i n g = D a t e U t i l : : p r e p a r e D a t e S t r i n g ( S C a le n d a r D a y -> d a y O fM o n th , S C a le n d a r D a y -> m o n th , S C a le n d a r D a y - > y e a r ) ; S C a le n d a r D a y - > i s P a s t D a y = D a t e U t i l : : c h e c k l f I s P a s t D a y ( S d a t e S t r i n g , S to d a y T im e s ta m p ) ;S C a le n d a r D a y - > i s T o d a y = D a t e U t i l : : c h e c k l f I s T o d a y ( S d a t e S t r i n g , S to d a y T im e s ta m p ) ;S C a le n d a r D a y - > i s N e x t D a y = D a t e U t i l : : c h e c k l f I s N e x t D a y ( S d a t e S t r i n g , S to d a y T im e s ta m p ) ;S C a le n d a r D a y - > i s In C u r r e n tM o n th = t r u e ;

/ /Β ά ζ ω τη μ έ ρ α σ τ ο ν π ίν α κ α μ ε τ ι ς μ έ ρ ε ς τω ν 6 εβ δομ ά δω ν a r r a y _ p u s h (S m o n th C a le n d a r ,S C a le n d a r D a y ) ;>

//Β Α Ζ Ω ΤΙΣ ΜΕΡΕΣ ΤΟΥ ΕΠΟΜΕΝΟΥ ΜΗΝΑ ΣΤΗΝ ΤΕΛΕΥΤΑΙΑ ΕΒΔΟΜΑΔΑS n e x tM o n th Y e a r A r r a y = D a t e U t i l : : g e tN e x tM o n th Y e a r A r r a y ( S v i s ib l e M o n t h , S v i s i b l e Y e a r ) ; f o r ( S i = S m o n th F ir s tD a y ln d e x I n W e e k + Sm onthN um berO fD ays; S i <= 4 2 ; $ i+ + ) {

S d a y O fn ex tM o n th = S i - (S m o n th F ir s tD a y ln d e x I n W e e k + Sm onthN um berO fD ays - 1 ) ;

/ /Ε τ ο ιμ ά ζ ω τ α π ε δ ί α τ η ς η μ έ ρ α ς α π ό τη f u n c t i o n " p r e p a r e C a le n d a r D a y " μ ε γ ε μ ά τ α ό λ α τ α π ε δ ί α α π ό τη β ά σ η .S C a le n d a r D a y = C a le n d a r D a y : : p r e p a r e C a le n d a r D a y ( S d a y O fn e x tM o n th , S n e x tM o n th Y e a r A r r a y [ 'm o n t h ' ] , S n e x tM o n th Y e a r A r r a y [ ' y e a r ’ ] ) ;

//ΕΛΕΓΧΟΣ Γ ΙΑ TO AN ΕΙΝ Α Ι ΜΕΡΑ ΠΟΥ ΕΧΕΙ ΠΕΡΑΣΕΙ ΚΑΙ Γ ΙΑ ΤΟ ΑΝ Ε ΙΝ Α Ι Η ΣΗΜΕΡΙΝΗ ΜΕΡΑ / / Γ έ μ ι σ μ α τω ν β ο η θ η τ ικ ώ ν π ε δ ίω ν τ η ς η μ έ ρ α ςS d a t e S t r i n g = D a t e U t i l : i p r e p a r e D a t e S t r i n g ( S C a le n d a r D a y -> d a y O fM o n th , S C a le n d a r D a y -> m o n th , S C a le n d a r D a y - > y e a r ) ; S C a le n d a r D a y - > i s P a s t D a y = D a t e U t i l : : c h e c k l f I s P a s t D a y ( S d a t e S t r i n g , S to d a y T im e s ta m p ) ;S C a le n d a r D a y - > i s T o d a y = D a t e U t i l : : c h e c k l f I s T o d a y ( S d a t e S t r i n g , S to d a y T im e s ta m p ) ;S C a le n d a r D a y - > i s N e x t D a y = D a t e U t i l : : c h e c k l f I s N e x t D a y ( S d a t e S t r i n g , S to d a y T im e s ta m p ) ;S C a le n d a r D a y -> is I n C u r r e n t M o n t h = f a l s e ;

/ /Β ά ζ ω τη μ έ ρ α σ τ ο ν π ίν α κ α μ ε τ ι ς μ έ ρ ε ς τω ν 6 εβ δ ο μ ά δ ω ν a r r a y _ p u s h ( S m o n t h C a le n d a r ,S C a le n d a r D a y ) ;>

r e t u r n S m o n th C a le n d a r ;

Όσον αφορά τον template, στον αντίστοιχο φάκελο υπάρχουν 2 μικρά αρχεία, τα header.php και footer.php, τα οποία αντιστοιχούν στην κεφαλίδα και το υποσέλιδο της διαδικτυακής εφαρμογής μας.

Το αρχείο header.php :

Σελίδα 41 από 61

Page 42: Διαδικτυακό Ημερολόγιο - teiemt.grdigilib.teiemt.gr/jspui/bitstream/123456789/466/1/... · 2015-04-26 · Τέλος στο Κεφάλαιο 4, παραθέτεται

Κεφάλαιο 4ο

< !DOCTYPE HTML>FI<htrGl>y<head>

<ir.eta http-equiv=" Content-Type” content®"text/html; charset=utf-8"><title>H\eKxpovικό HncpoX0yio</title>clink rel="icon" type="img/ico" href="<?php echo $contextRoot;?>images/favicon.ico"> Clink rel="stylesheet" href="<?php echo $contextRoot;?>css/reset.css" type="text/css"> <linic rel="stylesheet" href="C?php echo $contextRoot;?>css/style.css" type="text/css">

Cscript src="<?php echo $contextRoot; ?>js/jquery. js"x/script>

-</head><body>

<div id="header"><div>

<div class="logo inline_block"><a href="<?php echo $contextRoot; ?>index.php"x/a>

</div><div class®"inline_block">

<hl>HXeKipovικό HuepoX0yio</hl><ίι1>Μάγδαλένοι Πατσιαβουρίδου, AM:1723</hl>

</dlv></div>

</div>

<dlv id®"contents">

Hc?php//TIMEZONE$dateTimeZone ="Europe/Athens"

-?>

Το αρχείο footer :

1 234 $56

910

1112

</div><div id="footer">

<div class="clearfix"><P>

© 2014 ΜΑΓΔΑΛΕΝΑ ΠΑΤΕΙΑΒΟΥΡΙΔΟΥ.i i </p >

</div></div>

</body></htir.l>

All Rights Reserved.

Στη συνέχεια παρουσιάζουμε τον κώδικα ενός από τα πιο σημαντικά αρχεία, του ΐπάοχ.ρΚρ.

Σελίδα 42 από 61

Page 43: Διαδικτυακό Ημερολόγιο - teiemt.grdigilib.teiemt.gr/jspui/bitstream/123456789/466/1/... · 2015-04-26 · Τέλος στο Κεφάλαιο 4, παραθέτεται

Πτυχιακή εργασία της Πατσιαβουρίδου Μαγδαλένας

ι23

4

5

67

8 9

1011121 3

1 4

1 5

1 6

1 7

1 8

1 9

B|<?php

$contextRoot =

//-------------- ΕΙΣΑΓΩΓΗ DAT EÛT IL------------------- //include_once $contextRoot . "util/Dateütil.php";

//-------------- ΕΙΣΑΓΩΓΗ HEADER--------------------//include $contextRoot . "tercplate/header.php";

//-------------- ΣΗΜΕΡΑ ΑΡΧΗ--------------------//StodayDate = date('d-m-Y', time(>);StodayDayOfWeeklndex = date('N'f time());$todayMonth = date('m', time());$todayYear = date('Y'f time());$todayTime3tair.p = DateUtil : : timestaicpFromDate ($todayDate) ;//------------- ΣΗΜΕΡΑ ΤΕΛΟΣ--------------------//

Σελίδα 43 από 61

Page 44: Διαδικτυακό Ημερολόγιο - teiemt.grdigilib.teiemt.gr/jspui/bitstream/123456789/466/1/... · 2015-04-26 · Τέλος στο Κεφάλαιο 4, παραθέτεται

Κεφάλαιο 4ο

535455565 7585960 61 6263646566

6768

6970717 27 3747 5767 7787980

2 32 42 52 62 72 82 93 03 13 23 3343 53 63 73 83 94 04 1424 3444 54 64 7484 95 05 1

//-----------ΕΜΦΑΝΙΖΟΜΕΝΟΣ ΜΗΝΑΣ----------------//$visibleMonth = null;$visibleYear = null;//---- Φόρτωμα του εμφανιζόμενου μήνα από τη request

£]if ($_SERVER["REQUEST_METHOD"] = "GET") {

//ελέγχω αν υπάρχει στη request μήνας Φ if(isset($_GET['visibleMonth'])){

$visibleMonth = $_GET["visibleMonth"];>//ελέγχω αν υπάρχει στη request έτος

Φ if(isset($_GET[■visibleYear'])){$visibleYear = $_GET["visibleYear"];

>}//— Αν δεν υπάρχει συγκεκριμένος μήνας στη request δείχνουμε τον μήνα που είμαστε τώρα

ξ \ ί £ ( (!isset($visibleMonth) || trim($visibleMonth)==='') || (!isset($visibleYear) || trim($visibleYear)==='') ) { $visibleMonth = $todayMonth;$visibleYear = $todayYear;

>//-------- ΕΜΦΑΝΙΖΟΜΕΝΟΣ ΜΗΝΑΣ ΤΕΛΟΣ------------//

//------- ΠΡΟΗΓΟΥΜΕΝΟΣ/ ΕΠΟΜΕΝΟΣ ΜΗΝΑΣ--------//SpreviousMonthYearArray = DateUtil::getPreviousMonthYearArray( $visibleMonth , $visibleYear );$nextMonthYearArray = DateUtil::getNextMonthYearArray( $visibleMonth , $visibleYear );//------- ΠΡΟΗΓΟΥΜΕΝΟΣ/ ΕΠΟΜΕΝΟΣ ΜΗΝΑΣ ΤΕΛΟΣ--------//

//---------- ΗΜΕΡΟΛΟΓΙΟ ΜΗΝΑ---------------- ////Από το model της CalendarDay φέρνω τον πίνακα με όλες τις εμφανιζόμενες μέρες στον πίνακά μας $monthCalendar = CalendarDay: rprepareMonthCalendar ( SvisibieMonth, SvisibleYear, $todayTirr.estamp );

//Αυτή η function τυπώνει την κάθε μέρα μέσα στο κάθε κελί του πίνακα [^function printCalendarDaylnMonth( $calendarDay ) {

global $contextRoot;

//Ελέγχω τι CSS Class θα πάρει η μέρα ώστε να φαίνεται με το αντίστοιχο χρώμα $boxClass =if ( $calendarDay->isInCurrentMonth == true ) {

if ( $calendarDay->isToday = true ) { //Σήμερα $boxClass = "today";

} else if ( $calendarDay->isPastDay == true ) { //Μέρα που έχει περάσει $boxClass = "pastDay";

> else if ( $calendarDay->isNextDay == true ) { //Μέρα που δεν έχουμε φτάσει ακόμα $boxClass = "nextDay";

! >} else { //Αν η μέρα δεν ανήκει στον εμφανιζόμενο μήνα, τη δείχνω ως ανενεργή

$boxClass = "disabledDay";}//Αρχή του div που δείχνει την ημέρα με την αντίστοιχη CSS Class echo "<div class=\"dayBox " . $boxClass .

//Δημιουργώ ένα LINK σε όλο το κουτάκι το οποίο οδηγάεl στη σελίδα που δείχνει τις λεπτομέρειες της μέρας echo "<a href=\"" .$contextRoot. "day/viewDay.php?visibieDay=" .ScalendarDay->dayOfMonth. "&visibleMonth“" |.$calendarDay->month."&visibleYear=" .$calendarDay->year. "\"<div class=\"dayTableContentsX">";

Σελίδα 44 από 61

Page 45: Διαδικτυακό Ημερολόγιο - teiemt.grdigilib.teiemt.gr/jspui/bitstream/123456789/466/1/... · 2015-04-26 · Τέλος στο Κεφάλαιο 4, παραθέτεται

Πτυχιακή εργασία της Πατσιαβουρίδου Μαγδαλένας

8 18283848 5868788

8 990919293949596979899

//Τυπώνω τον αριθμό της μέρας· μέσα στο μήναecho "<ρ class=\"dayNumber\">" . $calendarDay->dayOfMonth

//--- ΕΜΦΑΝΙΣΗ TOY ΑΡΙΘΜΟΥ Τ ΩΝ ΣΥΜΒΑΝΤΩΝ ΤΗΣ Η Μ Ε Ρ Α Σ .echo n<div class=\ "uasksInDayV:*";$tasJcsCount = 0;

R if ( $calendarDay->tasJcs != null ) {$tasJcsCount = $calendarDay->tas]cs->num_rows;

- >echo "<ρ>Συμβάντα</ρ>";echo "<p class=\ "tasJcsCour.cX ">" . $taslcsCount . "</p>"; echo "</div>";

echo " < / d i v X / a > " ; //ΤΕΛΟΣ a href | dayTabieConrents echo "</div>";

-}//------------- ΗΜΕΡΟΛΟΓΙΟ Μ Η Ν Α ΤΑΛΟΣ------------ //

"</p>”;

1 0 2

1 0 3 Π1041051 0 61 0 7 Π1081091 1 0

1111 12 φ1 1 3 -114115116117 φ1181 1 9120

121 1 2 2

123124125 -124 -125126 []127 φ128129130131132 -133134 -135136137138139140 φ141 -142143 -144

< ! — ΗΜΕΡΟΛΟΓΙΟ ΕΜΦΑΝΙΖΟΜΕΝΟΥ ΜΗΝΑ — >< d i v id = " c a le n d a r " c la s s = " m a r g in _ a u to " >

< ! — Τυπώνω τ ο ό ν ο μ α τ ο υ ε μ φ α ν ιζ ό μ ε ν ο υ Μήνα — >< h l x ? p h p e c h o D a t e U t i l : : getM onthN am e ( S v is ib le M o n t h ) . " " . S v i s i b l e Y e a r ? X / h l >< ! — NAVIGATION ΚΟΥΜΠΙΑ — >< d iv id = " m o n th N a v ig a t io n " c la s s = " m a r g in _ a u t o t e x t _ a l i g n _ c e n t e r " >

< ! — ΚΟΥΜΠΙ ΠΡΟΗΓΟΥΜΕΝΟΣ ΜΗΝΑΣ — >< ! — ό τ α ν τ ο κ ο υ μ π ί π α τ ι έ τ α ι , σ τ η ν o n C l ic k τ ρ έ χ ε ι η f u n c t i o n : goT oM onthY ear μ ε ο ρ ίσ μ α τ α τ ο ν π ρ ο η γ ο ύ μ ε ν ο μ ή να — >< a h r e f= " # " c l a s s = " i n l i n e _ b l o c k " o n C lic k = " g o T o M o n th Y e a r ( <?p h p e c h o $ p r e v io u s M o n th Y e a r A r r a y [ 'm o n th ' ] ; ?> ,<?p h p e c h o S p r e v io u sM o n th Y e a r A r r a y [ ' y e a r ' ] ; ?> ) ; " >|<im g c la s s = " n e x tB a c k B u t to n " src= " < ? p h p e c h o $ c o n t e x t R o o t ; ? > im a g e s /b a c k .p n g " 3 ΐί= " Π ρ ο η γ ο ύ μ ε ν ο ς Μ ήνας" ί ϊ ί 1 ε = " Π ρ ο η γ ο ύ μ ε ν ο ς Μ ήνας" / x / a >

< ! — ΦΟΡΜΑ ΕΠΙΛΟΓΗΣ ΕΜΦΑΝΙΖΟΜΕΝΟΥ ΜΗΝΑ — >< ! — JAVASCRIPT FUNCTIONS ΓΙΑ ΑΛΛΑΓΗ ΤΙΜΩΝ ΠΑΤΩΝΤΑΣ ΚΟΥΜΠΙΑ ΟΠΩΣ ΕΠΟΜΕΝΟΣ/ΠΡΟΗΓΟΥΜΕΝΟΣ ΜΗΝΑΣ — >< s c r i p t >

function goT oM onthY ear ( m onth , y e a r ) {/ /Β ά ζ ω σ τ ο in p u t τ ο υ μ ή ν α τ η ν τ ιμ ή τ ο υ μ ή να π ο υ έ χ ε ι π ε ρ ά σ ε ι ως π α ρ ά μ ε τ ρ ο ς$ ( " # v i s ib l e M o n t h I n p u t " ) . v a l ( m onth ) ;/ /Β ά ζ ω σ τ ο in p u t τ ο υ έ τ ο υ ς τ η ν τ ιμ ή τ ο υ έ τ ο υ ς π ο υ έ χ ε ι π ε ρ ά σ ε ι ως π α ρ ά μ ε τ ρ ο ς S ( " # v i s i b l e Y e a r I n p u t " ) . v a l ( y e a r ) ;/ /Π ο σ τ ά ρ ω τη φ όρμα ε π ι λ ο γ ή ς ε μ φ α ν ιζ ό μ ε ν ο υ μ ή να $ (" # s e le c tM o n th Y e a r F o r m " ) . s u b m i t ( ) ;>

< / s c r i p t >< ! — Η φόρμα ε π ιλ ο γ ή ς ε μ φ α ν ιζό μ ε ν ο υ μ ή να — ><form id = " se lectM on th Y earF orm " c la s s = " i n l i n e _ b l o c k m arg in _au to" m eth od = " get" a c tio n = " < ? p h p e c h o h tm lsp e c ia lc h a r s($ _ S E R V E R [ "PHP_SELF"]) ; ?>">

<?php//Φ έρ νω από τη ν κλάση D a t e U t i l τη ν HTML τ ο υ s e l e c t ε π ιλ ο γ ή ς μήναe c h o D a t e U t i l : : g e tM o n th s S e le c tB o x ( $ v is ib le M o n th , ' v i s ib l e M o n t h ' , 1v i s ib le M o n t h ln p u t ' ) ;//Τ υπώ νω τη ν HTML ε π ιλ ο γ ή ς έτ ο υ ςe c h o "<rr.put id = \" v i s ib l e Y e a r I n p u t \" ty p e= \" n u m b er \" n a m e = \" v is ib le Y e a r \" v a lu e = \" " . S v is ib le Y e a r .?>< in p u t typ e= " su b m it" v a lu e= " G o " />

< /form >< ! — ΦΟΡΜΑ ΕΠΙΛΟΓΗΣ ΕΜΦΑΝΙΖΟΜΕΝΟΥ ΜΗΝΑ ΤΕΛΟΣ — >

< ! — ΚΟΥΜΠΙ ΕΠΟΜΕΝΟΣ ΜΗΝΑΣ — >< ! — ότα ν το κ ουμ πί π α τ ι έ τ α ι , σ τη ν o n C lic k τ ρ έ χ ε ι η f u n c t io n : goToM onthYear μ ε ο ρ ίσ μ α τ α τ ο ν ε π ό μ εν ο μ ήνα — ><a h re f= " # " c la s s = " in l in e _ b lo c k " onC lick="goT oM onthY ear ( <?php e c h o S n extM on th Y earA rray[ 'm o n th '] ; ?> ,<?php e c h o SnextM on th Y earA rray[ ' y e a r ' J ; ?> ) ;" >|<img c la s s= " n e x tB a c k B u tto n " src="<?p hp e c h o S c o n te x tR o o t; ? > im a g e s /n e x t .p n g " β ^ = " Ε π ό μ ε ν ο ς Μήνας" ί ϊ ί1 β = " Ε π ό μ ε ν ο ς Μήνας" / x / a >

< /d iv >

Σελίδα 45 από 61

Page 46: Διαδικτυακό Ημερολόγιο - teiemt.grdigilib.teiemt.gr/jspui/bitstream/123456789/466/1/... · 2015-04-26 · Τέλος στο Κεφάλαιο 4, παραθέτεται

Κεφάλαιο 4ο

143144145146 Q147148149150151152153154155156 g157158159 g160 161 162163164165166167168 168169170171172173174175176177178179180 g181 182183184185186187188 189

<!— Ο πίνακας των 6 εβδομάδων μέσα στις οποίες εμιρανίζεται ο μήνας. — ><!— Σε κάθε "μέρα" τρέχει η php function printCalendarDaylnMonth με όρισμα την ημέρα με θέση X στον πίνακα των εμ<ρανlζόμενων ημερών η οποία τυπώνει το εσωτερικό του αντίστοιχου κελιού του πίνακα — >Ctable class="calendarTablen>

<thead><th>AeuT épa</th><th>Tpirn</th><ίΐι>Τετάρτη</ίίι><th>üépnT η</th><ςη>Ποιρο(σκευή</ίΐι><th class="weekend">Εάββατο</ίίι><th clas3="weekend">Kupιακή</th>

</thead><tbody>

< !— ΕΒΔΟΜΑΔΑ 1 — ><tr>

<tdx?php echo printCalendarDaylnMonth ( SmonthCalendar[: ] ); ?></td><tdx?php echo printCalendarDaylnMonth ( SmonthCalendar[1] ); ?></td><tdx?php echo printCalendarDaylnMonth ( $monthCalendar [2 ] ); ?></td><tdx?php echo printCalendarDaylnMonth ( SmonthCalendar[3] ); ? x / t d ><tdx?php echo printCalendarDaylnMonth ( SmonthCalendar [ - ] ); ? x / t d ><td class="weekend"X?php echo printCalendarDaylnMonth ( SmonthCalendar; ] );<td clas3="weekend"X?php echo printCalendarDaylnMonth ( SmonthCalendar;:] );

</tr>

< ! — ΕΒΔΟΜΑΔΑ 2 — ><tr>

< t d x ? p h p echo printCalendarDaylnMonth ( SmonthCalendar p ] ); ? x / t d >< t d x ? p h p echo printCalendarDaylnMonth ( $monthCalendar [ f ] ); ? x / t d >< t d x ? p h p echo printCalendarDaylnMonth ( $monthCalendar [ 9] ); ? x / t d >< t d x ? p h p echo printCalendarDaylnMonth ( SmonthCalendar[1 :] ); ? x / t d >< t d x ? p h p echo printCalendarDaylnMonth ( $ir.onthCalendar ] ); ? x / t d ><td class="weekend"X?php echo printCalendarDaylnMonth( SmonthCalendar[_2]<td class="weekend"x?php echo printCalendarDaylnMonth! SmonthCalendar[1 S]

</tr>

< !— ΕΒΔΟΜΑΔΑ 3 — ><tr>

< t d x ? p h p echo printCalendarDaylnMonth! SmonthCalendar [ .4] ); ? x / t d >< t d x ? p h p echo printCalendarDaylnMonth! $monthCalendar [ 1 : ] ); ? x / t d >< t d x ? p h p echo printCalendarDaylnMonth! SmonthCalendar [ 16 ] ); ? X / t d >< t d x ? p h p echo printCalendarDaylnMonth! SmonthCalendar ] ); ? x / t d >< t d x ? p h p echo printCalendarDaylnMonth! SmonthCalendar[_ï] ); ?></td><td class="weekend"x?php echo printCalendarDaylnMonth! SmonthCalendar [·]<td class="weekend"X?php echo printCalendarDaylnMonth! SmonthCalendar[2 :]

</tr>

? x / t d >? x / t d >

) ; ? X / t d >) ; ? x / t d >

) ; ? x / t d > ) ; ? x / t d >

Σελίδα 46 από 61

Page 47: Διαδικτυακό Ημερολόγιο - teiemt.grdigilib.teiemt.gr/jspui/bitstream/123456789/466/1/... · 2015-04-26 · Τέλος στο Κεφάλαιο 4, παραθέτεται

Πτυχιακή εργασία της Πατσιαβουρίδου Μαγδαλένας

190191192193194195196197198199200

201

202

20 320 420 520 620 720 820 9210 211 21221 321 421 521 621 721 821 9220

221

222

22 322422 522 622 722 822 923 023 123 223 323423 523 623 7

<! — ΕΒΔΟΜΑΔΑ<tr>

< t d X ? p h p< t d x ? p h p < t d x ? p h p < t d x ? p h p < t d x ? p h p <td class3 <td class=

</tr>

<!— ΕΒΔΟΜΑΔΑ <tr>

< t d x ? p h p < t d x ? p h p < t d x ? p h p < t d x ? p h p < t d X ? p h p <cd class= <td class3

</tr>

<!— ΕΒΔΟΜΑΔΑ <tr>

< t d x ? p h p < t d x ? p h p < t d x ? p h p < t d x ? p h p < t d x ? p h p <td class3 <td class3

</tr>

4 — >

echo printCalendarDaylnMonth! SmonthCalendar' 2 ] ); ? x / t d > echo printCalendarDaylnMonth( SmonthCalendar[22] ); ? x / t d > echo printCalendarDaylnMonth( SmonthCalendar[23] ); ? X / t d > echo printCalendarDaylnMonth ( SmonthCalendar [2 2 ] ); ? x / t d > echo printCalendarDaylnMonth( SmonthCalendar[2£] ); ? x / t d >"weekend"X ? p h p echo printCalendarDaylnMonth( SmonthCalendar[2 -] ); ? X / t d > ;"weekend"X?php echo printCalendarDaylnMonth ( SmonthCalendar [27 ] ); ? x / t d >

echo printCalendarDaylnMonth( SmonthCalendar[2 £] ); ? x / t d > echo printCalendarDaylnMonth( SmonthCalendar[25] ); ? x / t d > echo printCalendarDaylnMonth( SmonthCalendar; 2 ] ); ? x / t d > echo printCalendarDaylnMonth( SmonthCalendar[22] ); ? X / t d > echo printCalendarDaylnMonth( SmonthCalendar[3 2 ] ); ? x / t d >:"weekend"X?php echo printCalendarDaylnMonth( SmonthCalendar[ £] ); ? X / t d > "weekend"X?php echo printCalendarDaylnMonth! SmonthCalendar [£ 2 ] ); ? X / t d >

6 — >

echo printCalendarDaylnMonth! SmonthCalendar[£Ξ] ); ? x / t d > echo printCalendarDaylnMonth! SmonthCalendar[ '] ); ? x / t d > echo printCalendarDaylnMonth! SmonthCalendar[ ^ ] ); ? x / t d > echo printCalendarDaylnMonth! SmonthCalendar[££] ); ? X / t d > echo printCalendarDaylnMonth! SmonthCalendar[£3] ); ? x / t d >:"weekend"X?php echo printCalendarDaylnMonth! SmonthCalendar [- ] ); ? X / t d > :"weekend"x?php echo printCalendarDaylnMonth! SmonthCalendar[-: ] ); ? X / t d >

</tbody>

</table><!— ΗΜΕΡΟΛΟΓΙΟ ΕΜΦΑΝΙΖΟΜΕΝΟΥ ΜΗΝΑ ΤΕΛΟΣ

^]<?php

//Βάζω το FOOTER του site.include ScontextRoot . "template/footer.php";

Ακολουθεί το αρχείο viewDay.php, που είναι λίγο μεγαλύτερο από τα υπόλοιπα και βρίσκεται στο φάκελο day.

Σελίδα 47 από 61

Page 48: Διαδικτυακό Ημερολόγιο - teiemt.grdigilib.teiemt.gr/jspui/bitstream/123456789/466/1/... · 2015-04-26 · Τέλος στο Κεφάλαιο 4, παραθέτεται

Κεφάλαιο 4ο

Σελίδα 48 από 61

Page 49: Διαδικτυακό Ημερολόγιο - teiemt.grdigilib.teiemt.gr/jspui/bitstream/123456789/466/1/... · 2015-04-26 · Τέλος στο Κεφάλαιο 4, παραθέτεται

Πτυχιακή εργασία της Πατσιαβουρίδου Μαγδαλένας

828 38 48 58 6

8 78 8

8 99 0919293949 596979 89 9

100 101 102

1 0 31 0 41 0 51 0 61 0 71 0 8 1 0 9110

111112113114115116117118119120 121 122

123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160 161

/ / ---------- AN TO ACTION Ε ΙΝ Α Ι ΠΡΟΣΘΗΚΗ ΣΥΜΒΑΝΤΟΣ, ΒΡΙΣΚΩ Τ ΙΣ ΥΠΟΛΟΙΠΕΣ ΜΕΤΑΒΛΗΤΕΣ ΚΑΙ ΤΟ ΣΩΖΩi f ( S e c t i o n = = "ADD_TASK" ) {

//Παίρνω από τη request όλες τις απαιτούμενες παραμέτρους για την προσθήκη συμβάντοςS a l l D a y = n u l l ;i f ( i s s e t ($ _ G E T [' a l l D a y ' ] ) ) {

S a l l D a y = $_G E T [ " a l l D a y " ] ;

; >S s t a r t T i m e = n u l l ;

i f ( i s s e t ( $_GET [ ' s t a r t T ir n e * ]))■ {S s t a r t T i m e = $ _ G E T [ " s t a r t T im e " ] ;

| }S e n d T im e = n u l l ;i f ( i s s e t ($_G E T [ ' e n d T im e ' ] ) ) {

S e n d T im e = $_G E T [ " e n d T im e " ] ;

; }S r e p l i c a t i o n T y p e = n u l l ;i f ( i s s e t ($_G E T [ 1r e p l i c a t i o n T y p e ' ] ) ) {

S r e p l i c a t i o n T y p e = $_G E T [ " r e p l i c a t i o n T y p e " J ;>S n o t e s = n u l l ;i f ( i s s e t (S _ G E T [' n o t e s ' J ) ) {

S n o t e s = $_G E T [ " n o t e s " ] ;; j >/ /Α ν το r e p l i c a t i o n Type ε ί ν α ι ΕΒΔΟΜΑΔΑ, βάζω στη μεταβλητή r e p l ic a t io n D a y τη θέση τη ς μ έρ α ς στη ν εβδομάδα / /Α ν το r e p l i c a t i o n Type ε ί ν α ι ΜΗΝΑΣ, βάζω στη μεταβλητή r e p l ic a t io n D a y τη θέση τη ς μ έρ α ς στο μήνα//Α ν το r e p l i c a t i o n Type ε ί ν α ι ΧΡΟΝΟΣ, βάζω στη μεταβλητή r e p l ic a t io n D a y τη θέση τη ς μ έρ α ς σ το μήνα και π ο ιο ς μή να ς α ν τ ισ τ ο ιχ ε ί S r e p lic a t io n D a y = "";S r e p lic a t io n M o n th =i f ( S r e p l ic a t io n T y p e =» "WEEK" ) {

S r e p lic a t io n D a y = d a t e ( 'Ν ' , S v is ib le D a te T im e sta m p ) ;> e l s e i f ( S r e p l ic a t io n T y p e = "MONTH" ) {

S r e p lic a t io n D a y = S v is ib le D a y ;> e l s e i f ( S r e p l ic a t io n T y p e = "YEAR" ) {

S r e p lic a t io n D a y = S v is ib le D a y ;S r e p lic a t io n M o n th = S v is ib le M o n th ;}

/ /Α π ό τη m odel c l a s s T ask τρέχω τη fu n c t io n που σ ώ ζει το Συμβάν στη βάσηT a s k ::a d d ( S v is ib le D a t e , S n o te s , S s ta r tT im e , SendTim e, S a llD a y , S r e p l ic a t io n T y p e , S r e p l ic a t io n D a y , S r e p lic a tio n M o n th ) ;

//Κ άνω r e f r e s h h e a d e r ( " lo c a t io n : 1 . S c o n te x tR o o t . " d a y /v iew D a y .p h p ? v is ib leD a y = " .S v is ib le D a y . " S v is ib leM o n th * " .S v is ib le M o n th . " & visib leY ear= " . S v i s ib l e Y e a r ) ;>

/ / -------AN TO ACTION ΕΙΝΑΙ ΑΠΟΘΗΚΕΥΣΗ ΣΗΜΕΙΩΣΕΩΝi f ( S e c t io n == "SAVE_NOTES" ) {

i f ( i s s e t ($_GET[' n o t e s ' ] ) ) {S n o te s = S_GET[ " n o te s" ] ;

/ / — ΣΩΖΩ ΤΙΣ ΣΗΜΕΙΩΣΕΙΣ D a y N o tes: : saveO rO p d ate( S n o te s , S v is ib le D a t e ) ;

-}

/ / ----- ΚΑΝΩ r e f r e s hh e a d e r ( " lo c a t io n : " .S c o n te x tR o o t . " d a y /v iew D a y .p h p ? v is ib leD a y = " .S v is ib le D a y . "& visib leM onth=" .S v is ib le M o n th . " & v is ib le Y e a r = n .S v i s ib l e Y e a r ) ;

/ /H fu n c t io n τυπ ώ νει όλα τα συμβάντα που έχ ο υ ν π ε ρ α σ τ ε ί ως όρ ισμα y fu n c t io n p r in tT a s k s ( S ta s k s ) {

g lo b a l S c o n te x tR o o t; g lo b a l S v is ib le D a y ; g lo b a l S v is ib le M o n th ; g lo b a l S v is ib le Y e a r ;

/ /L o o p στα α π οτελ έσ μ α τα που έχ ο υ ν έ ρ θ ε ι ως t a s k s από τη βάση Η w h i le ( Srow = m y s q li_ f e t c h _ a r r a y (S ta s k s ) ) {

//Β ά ζω σε μ ετ α β λ η τέ ς τ ι ς τ ι μ έ ς το υ κάθε συμβάντος S id = $ r o w [' i d ' ] ;S sta r tT im e = Srow [ ' s t a r t _ t im e ' ] ;SendTime = Srow I ' e n d _ tim e ' ] ;S a llD a y = S ro w [' a l l _ d a y ' ] ;S n o te s = Srow [ ' n o t e s ' ] ;

Σελίδα 49 από 61

Page 50: Διαδικτυακό Ημερολόγιο - teiemt.grdigilib.teiemt.gr/jspui/bitstream/123456789/466/1/... · 2015-04-26 · Τέλος στο Κεφάλαιο 4, παραθέτεται

Κεφάλαιο 4ο

-HTML ΑΡΧΗ-

,S v i s ib l e D a t e . " < /h l> '

τυπωθούν

1 6 2

1 6 3

1 6 4

1 6 5

1 6 6

1 6 7

1 6 8

1 6 9

1 7 0

1 7 1

1 7 2

1 7 3

1 7 4

1 7 5

1 7 6

1 7 7

1 7 8

1 7 9

1 8 0

1 8 1

1 8 2

1 8 3

1 8 4

1 8 5

1 8 6

1 8 7

1 8 8

1 8 9 1881 8 91 9 01 9 11 9 21 9 31 9 41 9 51 9 61 9 71 9 81 9 9200 201

2022 0 32 0 42 0 52 0 62 0 72 0 82 0 9210 211

2122 1 3

2 1 42 1 52 1 62 1 72 1 82 1 92 2 0 221 222

2 2 32 2 42 2 52 2 62 2 72 2 82 2 92 3 02 3 12 3 22 3 32 3 42 3 52 3 62 3 72 3 82 3 92 4 0

//Τ υ π ώ νω τ ο d i v τ ο υ σ υ μ β ά ν τ ο ςe c h o " < d iv c l a s s = X " t a s k C e l l ro u n d e d C o r n e r sX ">";

/ / Α ν ε ί ν α ι συ μ β ά ν γ ια Ό Λ Η τ η ν η μ έ ρ α , τ ο τυπώνω i f ( S a l lD a y = X ) {

e c h o " < sp a n cla s3= X " ta3k T in ieX " M X \n M ep a < /sp a n > " ;> e l s e {

/ / α ν έ χ ε ι σ υ γ κ ε κ ρ ιμ έ ν ε ς ώ ρ ες , τυπώνω τ ι ς ώ ρ ες e c h o "<3pan c l a s s = \ " task T im eX ">Α πό: π . S s t a r t T im e .} Έως: " . S en d T im e . " < /sp a n > " ,

//Τ υ π ώ νω τ ι ς σ η μ ε ιώ σ ε ις τ ο υ σ υ μ β ά ν τ ο ςe c h o " < p x t e x t a r e a c la s s = X " n c te s A r e a T a s k X " d is a b le d = X " d is a b le d X ">" S n o t e s . " < / t e x t a r e a X / p > " ;

< ! — Ε μ φ α ν ίζω έ ν α κ ο υ μ π ί μ ε π α ρ α μ έ τ ρ ο υ ς "ΠΡΑΞΗ = ΔΙΑΓΡΑΦΗ ΣΥΜΒΑΝΤΟΣ" κ α ι ο ρ ίσ μ α τ α γ ι α π ο ι α μ έρ α μ ιλ ά μ ε κ α ι τ ο ID τ ο υ c a s k σ τη βάση γ ι α ν α δ ια γ ρ ά φ ε ι — >< d iv c l a s s = " a l i g n _ r i g h t " >

< a h r e f= " < ? p h p e c h o S c o n t e x t R o o t ; ? > d a y /v ie w D a y .p h p ? v is ib le D a y = < ? p h p e c h o $ v i s i b l e D a y ; ?> S v is ib le M o n th = < ? p h p e c h o S v ls ib le M o n t h ; ? > & v is ib le Y e a r = < ? p h p e c h o $ v i s l b l e Y e a r ; ?>6action=D E L E T E _T A SIT £taskId=<?php e c h o S id ; ? > " x im g c la s s = " s m a l lB u t t o n " sr c = " < ? p h p e c h o S c o n te x tR o o c ; ?> im a g e s / d e l e t e .p n g " t it le = " A ia y p o ( ip n σ υ μ β ά ντος"/ X / a >

< /d iv >< ?phpe c h o " < /d iv > " ; //ΤΕΛΟΣ t a s k

//Τ υπώ νω τη ν ημέρα που εμ φ α ν ίζε τ α ι μ ε τη ν η μ ερ ομ η νία τη ς e ch o "< hl c l a s s “ \" m a rg in _ a u tc ■>■ . SCalendarDay->dayNam e

[p < d iv><>ι2>Σημειωματάριο Ημέρας</1ι2>< ! — Δημιουργώ μ ια ΦΟΡΜΑ η ο π ο ία α να λα μ β ά νει τη ν αποθήκευση το υ ση μ ειοω μ α τα ρίου τη ς ημ έρας — ><form id = " fon n " m ethod="get" a c t io n = " " >

< ! — Βάζω ως "κρυφές" μ ετ α β λ η τ έ ς την εμ φ α νιζό μ ενη μ έρ α και τη ν ΠΡΑΞΗ ΑΠΟΘΗΚΕΥΣΗ ΣΗΜΕΙΩΜΑΤΑΡΙΟΥ — >< in p u t ty p e= " h id d en " nam e="action" value="SAVE_NOTES"/>< in p u t ty p e= " h id d en " r.arr.e="visibleD ay" value="< ?php ec h o S v is ib le D a y ; ?>"/>< in p u t cype= "hidden" nam e= " visib leM on th " value="< ?php e ch o S v ls ib le M o n th ; ?>" />< in p u t ty p e= " h id d en " r .am e= " v isib leY ear" value="< ?php ech o S v is ib le Y e a r ; ?> " />

< ! — Βάζω μ ια t e x c a r e μ έσα στη ν ο π ο ία γράφ ουμε τ ι ς σ η μ ε ιώ σ ε ις μ α ς κ α ι στη ν ο π ο ία εμ φ α ν ίζε τ α ι αν υπάρχουν ήδη σ η μ ε ιώ σ ε ις από τη ν εμ φ α νιζό μ ενη μ έρ α — > C te x ta r e a c la s s= " n o te sA r e a " nam e="notes" m ax len gth = " 1000" X ?p h p ec h o $ C a le n d a r D a y -> n o te s[ ' n o t e s 1] ? X / t e x t a r e a >< d iv c la s s = " a l ig n _ r ig h t " >

< in p u t ty p e = " im age" c l a s s · " sm a llB u tto n " src="<?php ec h o S c o n te x tR o o t; ? > im a g e s /sa v e .p n g " ΐΐτ ΐβ = " Α π οθ ή κ ευσ η σημειώ σεω ν" / X / in p u t >< /d iv >

< /form >< /d iv >

< ! — Κάτω από εδώ τυπ ώ νονται <1ι2>Σνμβάντα η μ έρας</ίι2>

E l< d iv c la s s = " ta s k s " >

: συμβάντα τη ς ημέρας -

<?php/ /Α ν η μ έρ α δ ε ν έ χ ε ι συμβάντα , τυπώνω πως δ ε ν υπάρχουν i f ( $ C a len d arD ay-> task s-> n u m _row s == ) {

ech o " «Δϊ πιάρχουν συμβάντα yl αυτή τη μέρ α < /ρ> " ;} e l s e {

//Α λ λ ιώ ς τρέχω τη f u n c t io n p r in tT a s k s μ ε ό ρ ισ μ α τα T ask s p r in tT a s k s ( S C a len d a rD a y -> ta sk s ) ;>

ιη ς εμ φ α ν ιζό μ ε ν η ς ημέρας c

?>L < /d iv >

< /b r>< ό 2 > Π ρ ο σ θ ή κ η σ υ μ β ά ν τ ο ς < /Η 2 >

P < d iv c la s s = " ta s k s " >< ! — Δημιουργώ μ ια φόρμα στη ν ο π ο ία δ η μ ιο υ ρ γ ε ίτ α <form id="form " m eth o d ·" get" a c t i o n · " ">

< ! — Βάζω ως κρυφά π ε δ ία τη ν ΠΡΑΞΗ "ΑΠΟΘΗΚΕΥΣΗ ΣΥΜΒΑΝΤΟΣ" και < in p u t ty p e= " h id d en " nam e="action" v a lu e ·" ADD_TASK"/>< in p u t ty p e= " h id d en " n a m e= " v isib leD ay" v a lu e “ "<?php ec h o S v is ib le D a y ; ?> " /> < in p u t ty p e= " h id d en " n am e= "visib leM onth" value="< ?php e ch o S v is ib le M o n th ; ?> " /> < in p u t ty p e= " h id d en " n a m e= " v isib leY ea r" value="< ?php ec h o S v is ib le Y e a r ; ?> " />

έν α ν έ ο συμβάν κα ι α π ο σ τ έλ λ ετ α ι γ ι α αποθήκευση —

τη ν εμ φ α νιζό μ ενη η μ ερ ομ η νία — >

Σελίδα 50 από 61

Page 51: Διαδικτυακό Ημερολόγιο - teiemt.grdigilib.teiemt.gr/jspui/bitstream/123456789/466/1/... · 2015-04-26 · Τέλος στο Κεφάλαιο 4, παραθέτεται

Πτυχιακή εργασία της Πατσιαβουρίδου Μαγδαλένας

2 4 12 4 22 4 32 4 42 4 52 4 62 4 72 4 82 4 92 5 02 5 12 5 22 5 32 5 42 5 52 5 62 5 72 5 82 5 92 6 0 2 6 1 2 6 22 6 32 6 42 6 52 6 62 6 7

2 6 82 6 92 7 02 7 12 7 22 7 32 7 42 7 52 7 62 7 72 7 82 7 92 8 0 2 8 1 2 8 22 8 32 8 42 8 52 8 62 8 72 8 82 8 92 9 02 9 12 9 22 9 32 9 42 9 52 9 6

2972 9 8299300301302303304305306307308309

Ξ

$

Β?

< ! — Εχω έ ν α C heckbox σ το ο π ο ίο δηλώνω α ν το συμβάν ε ί ν α ι γ ι α ΟΛΗ ΤΗΝ ΗΜΕΡΑ — >< la b e l>

Cspan>Win pepc*</span>< ! — Αν τ ο checkB ox π α τη θ εί , τ ρ έ χ ε ι η j a v a s c r i p t fu n c t io n " a llD a y T o g g le"σ τη ν ο π ο ία α ν " ε ν ε ρ γ ο π ο ιη θ ε ί" το ch eck b o x κ ρ ύ β ε ι τη ν επ ιλ ο γ ή ώρας, α ν α π ε ν ε ρ γ ο π ο ιη θ ε ί ε μ φ α ν ίζ ε ι τη ν επ ιλ ο γ ή ώρας — > C in p u t id = " a llD ayC h eck b ox" typ e= " ch eck b ox" o n C lic k = " a llD a y T o g g le {)" nam e="allD ay" / >

< / la b e l>< s c r ip t >

function a l lD a y T o g g le () {if( $ (" # a llD a y C h e c k b o x " ). i s ( ' : c h e c k e d ') ) {

//Κ ρύβω τη ν ε π ιλ ο γ ή ώρας $ (" # fr o m L a b e l" ) . h i d e ( ) ;$ ( " f t o L a b e l" ) . h i d e ( ) ;

} else {/ /ε μ φ α ν ίζ ω τη ν ε π ιλ ο γ ή ώρας $ (" # f rom L abel") . sh o w ( ) ;$ ( " f t o L a b e l" ) . sh ow () ;>>

< / s c r i p t >

< ! — To S e l e c t όπου γ ί ν ε τ α ι η επ ιλ ο γ ή ώρας έν α ρ ξη ς ε ν ό ς σ υ μ β ά ντος — >C la b e l id = " fro m L a b e l">

< span>Ano</ span>< ! — Από τη m odel c l a s s T ask φέρνω μέσω τη f u n c t io n " g e tA v a ila b le T im e s S e le c tB o x " το SELECT μ ε τ ι ς δ ια θ έ σ ιμ ε ς ώ ρες — > <?php ec h o T ask: : g e t A v a ila b le T im e s S e le c tB o x ( "startTrrr.e", "taskStartTime" ) ; ?>

< / la b e l>< ! — To S e l e c t όπου γ ί ν ε τ α ι η επ ιλ ο γ ή ώρας λ ή ξη ς ε ν ό ς σ υμ βά ντος — > c l a b e l id = " to L a b e l" >

< span>Ecag< / span>< ! — Από τη m odel c l a s s T ask φέρνω μέσω τη f u n c t io n " g e tA v a ila b le T im e sS e le c tB o x " τ ο SELECT μ ε τ ι ς δ ια θ έ σ ιμ ε ς ώ ρες — > <?php ec h o T a s k : : g e tA v a ila b le T im e s S e le c tB o x ( "endTim e", "taskEndTim e" ) ; ?>

< / la b e l>

< ! — To SELECT ε π ιλ ο γ ή ς τύπ ου "Επανάληψης" το υ συμ βά ντος — >< la b e l>

<3ρβη>Επανάληψη</3ρβη>< ! — Από τη m odel c l a s s T ask φέρνω μέσω τη f u n c t io n " g e tA v a ila b le R e p lic a t io n T y p e s S e le c tB o x " τ ο SELECT μ ε τ ι ς δ ια θ έ σ ιμ ε ς ε π ιλ ο γ έ ς γ ι α τα ε ίδ η επανάληψης — ><?php e c h o T a s k : : g e tA v a ila b le R e p lic a t io n T y p e s S e le c tB o x ( " r e p l ic a t io n T y p e " , " ta sk R e p lic a tio n T y p e " ) ; ?>

< / la b e l>

< ! — To TEXTAREA όπου γράφ ουμε τ ι ς σ η μ ε ιώ σ ε ις ε ν ό ς συμ βά ντος — >< d iv >

< la b e l>< sp an > n ep ιγραφ ή < /span>C te x ta r e a c la s s= " n o te sA r e a " r.am e="notes" m a x le n g th = " 1 0 0 0 " > < /te x ta r e a >

< / la b e l>< /d iv >

< ! — To SUBMIT κουμπί γ ι α τη ν αποστολή των δεδομένω ν τη ς φόρμας γ ι α τη δ η μ ιο ο υ ρ γ ία το υ συμ βά ντος — >C d i v c l a s s = " a l i g n _ r i g h t " >

C i n p u t t y p e = " i m a g e " c l a s s = " s m a l l B u t t o n " s r c = " C ? p h p e c h o $ c o n t e x t R o o t ; ? > i m a g e s / a d d . p n g " ί ϊ ί 1 β = " Π ρ ο σ θ ή κ η ν έ ο υ σ υ μ β ά ν τ ο ς . " / > C / i n p u t > - C / d i v >

E )c? p h p

i n c l u d e $ c o n t e x t R o o t . " t e m p l a t e . / f o o t e r .p h p " ;

-? >

Αρχείο DayNotes.php του φακέλου model :

Σελίδα 51 από 61

Page 52: Διαδικτυακό Ημερολόγιο - teiemt.grdigilib.teiemt.gr/jspui/bitstream/123456789/466/1/... · 2015-04-26 · Τέλος στο Κεφάλαιο 4, παραθέτεται

Κεφάλαιο 4ο

Αρχείο task.php του φακέλου model :

Σελίδα 52 από 61

Page 53: Διαδικτυακό Ημερολόγιο - teiemt.grdigilib.teiemt.gr/jspui/bitstream/123456789/466/1/... · 2015-04-26 · Τέλος στο Κεφάλαιο 4, παραθέτεται

Πτυχιακή εργασία της Πατσιαβουρίδου Μαγδαλένας

Σελίδα 53 από 61

Page 54: Διαδικτυακό Ημερολόγιο - teiemt.grdigilib.teiemt.gr/jspui/bitstream/123456789/466/1/... · 2015-04-26 · Τέλος στο Κεφάλαιο 4, παραθέτεται

Κεφάλαιο 4ο

Το αισθητικό τμήμα της εφαρμογής μας ρυθμίζεται κατά μεγάλο μέρος από τον κώδικα στο αρχείο style του φακέλου css.

Σελίδα 54 από 61

Page 55: Διαδικτυακό Ημερολόγιο - teiemt.grdigilib.teiemt.gr/jspui/bitstream/123456789/466/1/... · 2015-04-26 · Τέλος στο Κεφάλαιο 4, παραθέτεται

Πτυχιακή εργασία της Πατσιαβουρίδου Μαγδαλένας

□body {background-color: #fffmargin: 0

-Jimg {border :

ΗΞ.-.Ε I?# header {

b a c k g r o u n d - c o l o r : #eee ;border-bottom: lpx so l i d #e6e6e6;padding: 27px 0;text-align: center;

□ #h e a d e r > div, #f o o t e r > div {v;: dt ri 9 2 O p x ;

auto ;margin:padding: 2 Opx ;

Lcgc♦header logo {

float : left ;

# header . logo a {/images/logo.png) n o - r epeat c e nter top;back g r o u n d : u r l (

color: # 0 0 0 ;display: block;font: 1 5 p x/30px 'Play';helgnt: 1 2 8 p x ;

: 1 2 8 p x ;text-decoration: none;text-transform: uppercase;

CONTENTS♦contents {

min-height: 51 Opxwidth: 1 0 5 0 p x ;

auto ;marg i npadding: 54px 4Opx

color: #3e3e3e;- ■ - - ' : 30px;

font-weight : normal ;line-height: 3 Opx ;margin: 0 3 Opx ;text-align: center;

color: # 2 c 2 c 2 c ;f o n t -size: 24px;font-weight: normal ;line-height: 24px

12px ;margin:

color: #585858;font-size : 16px ;

color: #585858;

Σελίδα 55 από 61

Page 56: Διαδικτυακό Ημερολόγιο - teiemt.grdigilib.teiemt.gr/jspui/bitstream/123456789/466/1/... · 2015-04-26 · Τέλος στο Κεφάλαιο 4, παραθέτεται

Κεφάλαιο 4ο

6 566

6 768

6 97 07 17 27 37 47 57 67 77 87 9

8 0 8 1

8 28 3848 5868 788

8 99 09 19 29 39 49 59 6

9 7

989 9

100 101 1021 0 31 0 4

1 0 5

1 0 61 0 7

1 0 8

1 0 9110 111 1121 1 3

1 1 41 1 5

1 1 61 1 7

1 1 8

1 1 9120 121 1221 2 31 2 4

1 2 5

1 2 6

/*------------------------------ FOOTER□ #footer {

background-color: #eee; border-top: lpx solid #d8d8d8; padding: 30px 0;

>Fl#footer p {

font-size: 12px; line-height: 30px; padding-left: lOpx;

ΐΐΐΐ

I!

/*--------------------------------------.inline_block {

display: inline-block;).margin_auto {

margin: auto;).full_width {

width: 100%;).text_align_center {

text-align: center;).roundedCorners {

border-radius: lOpx;).align_right {

text-align:right;}

CALENDAR

H ■smallButton { width:44px; height:44px; margi n :5px;

-)Stable (

border-collapse:collapse ? width:1050px;

Htable th {background-color: #FAB273; font-size: 15px; line-height: 30px; text-decoration: none;

->□ table, th, td {

border: lpx solid black;

Rtable th, td {width:150px;

*/

Σελίδα 56 από 61

Page 57: Διαδικτυακό Ημερολόγιο - teiemt.grdigilib.teiemt.gr/jspui/bitstream/123456789/466/1/... · 2015-04-26 · Τέλος στο Κεφάλαιο 4, παραθέτεται

Πτυχιακή εργασία της Πατσιαβουρίδου Μαγδαλένας

128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160 161 162163164165166167168169170171172173174175176177178179180 181 182183184185186

□table td {height:200px;

tab le th {

□ ta b le t h .w eek en d {background-color: #FAB273;

□ .w e e k en d {background-color: #FA8219;

□ ·dayTableContents {width:100%; text-align: center; text-decorat i o n : none;

}R .dayNumber {

font-size:80px; font-we i ght:bold; margin: 0 0 30px;

□ .tasksCount {font-size:20px;

□ ·dayB ox {width:125px; height:190px; margin:lOpx; border-radius:5 px;

L}□ . t o d a y {

background-color: #FC5D83;

□ .pastDay {background-color: #FAF7A0;

□ .disabledDay {background-color: #E8E8E8;

□ .n e x tD a y {background-color: #99F2BB;

□ .n e x tB a c k B u t to n {width: 50px; height: 50px;

Σελίδα 57 από 61

Page 58: Διαδικτυακό Ημερολόγιο - teiemt.grdigilib.teiemt.gr/jspui/bitstream/123456789/466/1/... · 2015-04-26 · Τέλος στο Κεφάλαιο 4, παραθέτεται

Κεφάλαιο 4ο

1 8 7

1 8 8

1 8 91 9 0

1 9 11 9 2

1 9 31 9 4

1 9 5

1 9 61 9 7

1 9 81 9 9

200 201 2022 0 3

2 0 4

2 0 52 0 62 0 7

2 0 8

2 0 9210 211

Ej3#monthNavigation {

R .n o te s A re a {width:1 00 % ; height:150px; r e s i ze: none;

}R .r .o te s A re a T a sk {

height:5 0 p x ; width:9 9 5 p x ; margin :2 0 p x ; res i ze: none;

>R . t a s k C e l l {

border: 3 p x solid;border-color: Grey;

}□ . ta sk T im e {

margin :2 0 p x ;

Τέλος, έχουμε άλλον ένα φάκελο, με το όνομα images στον οποίο αποθηκεύουμε τις εικόνες που χρησιμοποιούμε στην εφαρμογή και καλούνται από functions στον κώδικα που έχουμε γράψει.

Το σύνολο των φακέλων που αποτελούν την εφαρμογή και περιέχουν τα αρχεία που περιγράψαμε πιο πάνω είναι :

Σελίδα 58 από 61

Page 59: Διαδικτυακό Ημερολόγιο - teiemt.grdigilib.teiemt.gr/jspui/bitstream/123456789/466/1/... · 2015-04-26 · Τέλος στο Κεφάλαιο 4, παραθέτεται

Πτυχιακή εργασία της Πατσιαβουρίδου Μαγδαλένας

► Computer ► ΤΙ30992200Α (G) ► xampp ► htdocs > calendar

ÀName Date modified Type Size

J . css 16/5/2014 2:23 πμ File folder

M day 16/5/2014 4:07 μμ File folder

images 16/5/2014 2:23 πμ File folder

U p 16/5/2014 2:23 πμ File folder

model 16/5/2014 4:07 μμ File folder

template 16/5/2014 2:23 πμ File folder

J i util 16/5/20142:23 πμ File folder

I"1] .DS.Store 11/5/2014 5:04 μμ DS.STORE File 7 KB

_ index.php 11/5/2014 5:04 μμ PHP File 12 KB

Σελίδα 59 από 61

Page 60: Διαδικτυακό Ημερολόγιο - teiemt.grdigilib.teiemt.gr/jspui/bitstream/123456789/466/1/... · 2015-04-26 · Τέλος στο Κεφάλαιο 4, παραθέτεται

Βιβλιογραφία

1. International Telecommunication Union : http://www.itu.int/

2. http://www.htmldog.com/

3. http://html.net/tutorials/

4. http://www.unixtimestamp.com/

5. http://www.codecademy.com/

6. http://jquery.com/

7. http://microo.net/

8. http://www.greektuts.net/

9. www.wikipedia.org

10. http://computer.howstuffworks.com/

11. Merit Network, Inc.

12. calendar.live.com

13. http://www.unixtimestamp.com/index.php

14. http://pacific.jour.auth.gr/

15. calendar.yahoo.com

16. http://www.htmlgoodies.com/

17. http://www.mysql.com/

18. http://www.w3schools.com/

19. http://www.sqlcourse.com/

20. http://www.echoecho.com/

21. http://www.php.net/

22. http://www.tutorialspoint.com/

23. http://www.calendars.net/

24. http://www.calendarlabs.com/

Σελίδα 60 από 61

Page 61: Διαδικτυακό Ημερολόγιο - teiemt.grdigilib.teiemt.gr/jspui/bitstream/123456789/466/1/... · 2015-04-26 · Τέλος στο Κεφάλαιο 4, παραθέτεται

Σελίδα 61 από 61