home=Αρχική dashboard=Κεντρικός Πίνακας explore=Εξερεύνηση help=Βοήθεια sign_in=Είσοδος sign_in_with=Είσοδος με sign_out=Έξοδος sign_up=Εγγραφή link_account=Σύνδεση λογαριασμού register=Εγγραφή website=Ιστοσελίδα version=Έκδοση powered_by=Με τη δύναμη του %s page=Σελίδα template=Πρότυπο language=Γλώσσα notifications=Ειδοποιήσεις active_stopwatch=Ενεργή Καταγραφή Χρόνου create_new=Δημιουργία… user_profile_and_more=Προφίλ και ρυθμίσεις… signed_in_as=Είσοδος ως enable_javascript=Αυτή η ιστοσελίδα λειτουργεί καλύτερα με JavaScript. toc=Πίνακας Περιεχομένων licenses=Άδειες return_to_gitea=Επιστροφή στο Gitea username=Όνομα Χρήστη email=Διεύθυνση Email password=Κωδικός πρόσβασης access_token=Διακριτικό Πρόσβασης re_type=Πληκτρολογήστε ξανά το Κωδικό Πρόσβασης captcha=CAPTCHA twofa=Έλεγχος Ταυτότητας Δύο Παραγόντων twofa_scratch=Κωδικός Μίας Χρήσης Δύο Παραγόντων passcode=Κωδικός u2f_insert_key=Εισάγετε το κλειδί ασφαλείας σας u2f_sign_in=Πατήστε το κουμπί στο κλειδί ασφαλείας. Αν το κλειδί ασφαλείας σας δεν έχει κουμπί, τοποθετήστε το ξανά. u2f_press_button=Πατήστε το κουμπί στο κλειδί ασφαλείας… u2f_use_twofa=Χρήση ενός κωδικού δύο παραγόντων από το τηλέφωνό σας u2f_error=Αδυναμία ανάγνωσης του κλειδιού ασφαλείας. u2f_unsupported_browser=Ο περιηγητής (browser) σας δεν υποστηρίζει κλειδιά ασφαλείας U2F. u2f_error_1=Συνέβη ένα άγνωστο σφάλμα. Παρακαλώ προσπαθήστε ξανά. u2f_error_2=Βεβαιωθείτε ότι χρησιμοποιείτε το σωστό, κρυπτογραφημένο (https://) URL. u2f_error_3=Ο διακομιστής δεν μπόρεσε να επεξεργαστεί το αίτημά σας. u2f_error_4=Το κλειδί ασφαλείας δεν επιτρέπεται για αυτό το αίτημα. Βεβαιωθείτε ότι το κλειδί δεν έχει ήδη καταχωρηθεί. u2f_error_5=Λήξη χρόνου πριν το κλειδί να μπορεί να διαβαστεί. Παρακαλώ ξαναφορτώστε τη σελίδα και προσπαθήστε ξανά. u2f_reload=Επαναφόρτωση repository=Αποθετήριο organization=Οργανισμός mirror=Αντίγραφο new_repo=Νέο Αποθετήριο new_migrate=Νέα Μεταφορά new_mirror=Νέο Είδωλο new_fork=Νέο Fork Αποθετηρίου new_org=Νέος Οργανισμός new_project=Νέο Έργο new_project_board=Νέος πίνακας Έργου manage_org=Διαχείριση Οργανισμών admin_panel=Διαχείριση account_settings=Ρυθμίσεις Λογαριασμού settings=Ρυθμίσεις your_profile=Προφίλ your_starred=Με αστέρι your_settings=Ρυθμίσεις all=Όλα sources=Πηγές mirrors=Είδωλα collaborative=Συνεργατικά forks=Forks activities=Δραστηριότητες pull_requests=Pull Requests issues=Ζητήματα milestones=Ορόσημα ok=OK cancel=Ακύρωση save=Αποθήκευση add=Προσθήκη add_all=Προσθήκη Όλων remove=Αφαίρεση remove_all=Αφαίρεση Όλων edit=Επεξεργασία write=Εγγραφή preview=Προεπισκόπηση loading=Φόρτωση… step1=Βήμα 1: step2=Βήμα 2: error=Σφάλμα error404=Η σελίδα που προσπαθείτε να φτάσετε είτε <strong>δεν υπάρχει</strong> είτε <strong>δεν είστε εξουσιοδοτημένοι</strong> για να την δείτε. never=Ποτέ [error] occurred=Παρουσιάστηκε ένα σφάλμα report_message=Αν είστε σίγουροι ότι πρόκειται για σφάλμα Gitea, παρακαλούμε αναζητήστε το ζήτημα στο <a href="https://github.com/go-gitea/gitea/issues">GitHub</a> και ανοίξτε νέο ζήτημα εάν είναι απαραίτητο. missing_csrf=Bad Request: δεν υπάρχει διακριτικό CSRF invalid_csrf=Bad Request: Άκυρο διακριτικό CSRF [startpage] app_desc=Μια ανώδυνη, αυτο-φιλοξενούμενη υπηρεσία Git install=Εύκολο στην εγκατάσταση install_desc=Απλά <a target="_blank" rel="noopener noreferrer" href="https://docs.gitea.io/en-us/install-from-binary/">εκτελέστε το δυαδικό</a> για την πλατφόρμα σας, στείλτε το με <a target="_blank" rel="noopener noreferrer" href="https://github.com/go-gitea/gitea/tree/master/docker">Docker</a>, ή πάρτε το <a target="_blank" rel="noopener noreferrer" href="https://docs.gitea.io/en-us/install-from-package/">πακέτο</a>. platform=Πολυπλατφορμικό platform_desc=Ο Gitea τρέχει οπουδήποτε <a target="_blank" rel="noopener noreferrer" href="http://golang.org/">Go</a> μπορεί να γίνει compile για: Windows, macOS, Linux, ARM, κλπ. Επιλέξτε αυτό που αγαπάτε! lightweight=Ελαφρύ lightweight_desc=Gitea έχει χαμηλές ελάχιστες απαιτήσεις και μπορεί να τρέξει σε ένα οικονομικό Raspberry Pi. Εξοικονομήστε ενέργεια! license=Ανοικτού κώδικα license_desc=Κατεβάστε το <a target="_blank" rel="noopener noreferrer" href="https://code.gitea.io/gitea">code.gitea.io/gitea</a>! Ελάτε μαζί μας και <a target="_blank" rel="noopener noreferrer" href="https://github.com/go-gitea/gitea">συνεισφέρετε</a> για να κάνετε αυτό το έργο ακόμα καλύτερο. Δεν είναι ντροπή να συνεισφέρετε! [install] install=Εγκατάσταση title=Αρχικές Ρυθμίσεις docker_helper=Αν εκτελέσετε το Gitea μέσα στο Docker, παρακαλώ διαβάστε την <a target="_blank" rel="noopener noreferrer" href="%s">τεκμηρίωση</a> πριν αλλάξετε τις ρυθμίσεις. requite_db_desc=Το Gitea απαιτεί MySQL, PostgreSQL, MSSQL ή SQLite3. db_title=Ρυθμίσεις Βάσης Δεδομένων db_type=Τύπος της Βάσης Δεδομένων host=Διακομιστής user=Όνομα Χρήστη password=Συνθηματικό db_name=Όνομα Βάσης Δεδομένων db_helper=Σημείωση για τους χρήστες MySQL: χρησιμοποιήστε την μηχανή αποθήκευσης InnoDB και αν χρησιμοποιείτε "utf8mb4", η έκδοση InnoDB θα πρέπει να είναι μεγαλύτερη από 5.6 . db_schema=Σχήμα db_schema_helper=Αφήστε κενό για την προεπιλογή της βάσης δεδομένων ("public"). ssl_mode=SSL charset=Charset path=Διαδρομή sqlite_helper=Διαδρομή αρχείου για τη βάση δεδομένων SQLite3.<br>Εισάγετε μια απόλυτη διαδρομή αν εκτελείτε το Gitea ως υπηρεσία. err_empty_db_path=Η διαδρομή της βάσης δεδομένων SQLite3 δεν μπορεί να είναι κενή. no_admin_and_disable_registration=Δεν μπορείτε να απενεργοποιήσετε την ιδιο-εγγραφή χρήστη χωρίς να έχετε δημιουργήσει διαχειριστικό λογαριασμό. err_empty_admin_password=Ο κωδικός πρόσβασης του διαχειριστή δεν μπορεί να είναι κενός. err_empty_admin_email=Το email του διαχειριστή δεν μπορεί να είναι κενό. err_admin_name_is_reserved=Το Όνομα χρήστη του Διαχειριστή δεν είναι έγκυρο, είναι δεσμευμένο err_admin_name_pattern_not_allowed=Το Όνομα χρήστη του Διαχειριστή δεν είναι έγκυρο, ταιριάζει σε μια δεσμευμένη μορφή err_admin_name_is_invalid=Το Όνομα Χρήστη του Διαχειριστή δεν είναι έγκυρο general_title=Γενικές Ρυθμίσεις app_name=Τίτλος Ιστοτόπου app_name_helper=Μπορείτε να εισάγετε το όνομα της εταιρείας σας εδώ. repo_path=Ριζική Διαδρομή Αποθετηρίου repo_path_helper=Τα απομακρυσμένα αποθετήρια Git θα αποθηκεύονται σε αυτόν τον κατάλογο. lfs_path=Ριζική Διαδρομή Git LFS lfs_path_helper=Τα αρχεία που παρακολουθούνται από το Git LFS θα αποθηκεύονται σε αυτόν τον φάκελο. Αφήστε κενό για να το απενεργοποιήσετε. run_user=Εκτέλεση Σαν Χρήστη run_user_helper=Εισάγετε το όνομα χρήστη του λειτουργικού συστήματος με το οποίο εκτελείται το Gitea. Σημειώστε ότι αυτός ο χρήστης πρέπει να έχει πρόσβαση στο φάκελο των αποθετηρίων. ssh_port=Θύρα της υπηρεσίας SSH ssh_port_helper=Αριθμός θύρας που ακούει η υπηρεσία SSH. Αφήστε κενό για να το απενεργοποιήσετε. http_port=Η HTTP θύρα που ακούει το Gitea http_port_helper=Αριθμός θύρας που θα ακούει η υπηρεσία web του Gitea. app_url=Βασικό URL του Gitea app_url_helper=Βασική Διεύθυνση για τα URL κλωνοποίησης μέσω HTTP(S) και για τις ειδοποιήσεις μέσω email. log_root_path=Διαδρομή Αρχείων Καταγραφής log_root_path_helper=Τα αρχεία καταγραφής θα γράφονται σε αυτόν τον κατάλογο. optional_title=Προαιρετικές Ρυθμίσεις email_title=Ρυθμίσεις Email smtp_host=Διακομιστής SMTP smtp_from=Αποστολή Email Ως smtp_from_helper=Η διεύθυνση email που θα χρησιμοποιεί το Gitea. Εισάγετε μια απλή διεύθυνση ηλεκτρονικού ταχυδρομείου ή χρησιμοποιήστε τη μορφή "Όνομα" <email@example.com>. mailer_user=Όνομα Χρήστη SMTP mailer_password=Κωδικός SMTP register_confirm=Απαιτείται Επιβεβαίωση της Διεύθυνσης Εmail για Εγγραφή mail_notify=Ενεργοποίηση Ειδοποιήσεων με Email server_service_title=Ρυθμίσεις Διακομιστή και Υπηρεσιών Τρίτων offline_mode=Ενεργοποίηση Τοπικής Λειτουργίας offline_mode_popup=Απενεργοποιήση των δικτύων διανομής περιεχομένου τρίτων και σερβίρετε όλων των πόρων τοπικά. disable_gravatar=Απενεργοποίηση Gravatar disable_gravatar_popup=Απενεργοποιήση του Gravatar και των εξωτερικών πηγών avatar. Θα χρησιμοποιηθεί ένα προεπιλεγμένο avatar εκτός αν ένας χρήστης ανεβάσει τοπικά ένα avatar. federated_avatar_lookup=Ενεργοποίηση Ομόσπονδων Avatars federated_avatar_lookup_popup=Ενεργοποίηση ομόσπονδης αναζήτησης avatar χρησιμοποιώντας το Libravatar. disable_registration=Απενεργοποίηση Αυτοεγγραφής disable_registration_popup=Απενεργοποίηση αυτοεγγραφής χρήστη. Μόνο οι διαχειριστές θα μπορούν να δημιουργήσουν νέους λογαριασμούς χρηστών. allow_only_external_registration_popup=Να Επιτρέπεται Η Εγγραφή Μόνο Μέσω Εξωτερικών Υπηρεσιών openid_signin=Ενεργοποίηση Σύνδεσης μέσω OpenID openid_signin_popup=Ενεργοποίηση σύνδεσης χρήστη μέσω OpenID. openid_signup=Ενεργοποίηση Ιδιοεγγραφής μέσω OpenID openid_signup_popup=Ενεργοποίηση ιδιοεγγραφής χρηστών με βάση το OpenID. enable_captcha=Ενεργοποίηση CAPTCHA στην εγγραφή enable_captcha_popup=Απαιτείται ένα CAPTCHA για τη ιδιοεγγραφή του χρήστη. require_sign_in_view=Απαιτείται Είσοδος για τη Προβολή Σελίδων require_sign_in_view_popup=Περιορισμός πρόσβασης σελίδας σε συνδεδεμένους χρήστες. Οι επισκέπτες θα βλέπουν μόνο τις σελίδες εισόδου και εγγραφής. admin_setting_desc=Η δημιουργία ενός λογαριασμού διαχειριστή είναι προαιρετική. Ο πρώτος εγγεγραμμένος χρήστης θα γίνει αυτόματα διαχειριστής. admin_title=Ρυθμίσεις Λογαριασμού Διαχειριστή admin_name=Όνομα Χρήστη Διαχειριστή admin_password=Κωδικός Πρόσβασης confirm_password=Επιβεβαίωση Κωδικού Πρόσβασης admin_email=Διεύθυνση Email install_btn_confirm=Εγκατάσταση Gitea test_git_failed=Αδυναμία δοκιμής της εντολής 'git': %v sqlite3_not_available=Αυτή η έκδοση Gitea δεν υποστηρίζει την SQLite3. Παρακαλώ κατεβάστε την επίσημη δυαδική έκδοση από το %s (όχι την έκδοση 'gobuild'). invalid_db_setting=Οι ρυθμίσεις της βάσης δεδομένων δεν είναι έγκυρες: %v invalid_repo_path=Η αρχική διαδρομή των αποθετηρίων δεν είναι έγκυρη: %v run_user_not_match=Το όνομα χρήστη 'εκτέλεση ως' δεν είναι το τρέχον όνομα χρήστη: %s -> %s save_config_failed=Αποτυχία αποθήκευσης ρυθμίσεων: %v invalid_admin_setting=Η ρύθμιση λογαριασμού διαχειριστή δεν είναι έγκυρη: %v install_success=Καλώς ορίσατε! Σας ευχαριστούμε που επιλέξατε το Gitea. Διασκεδάστε το και να είστε καλά! invalid_log_root_path=Η διαδρομή της καταγραφής δεν είναι έγκυρη: %v default_keep_email_private=Απόκρυψη διευθύνσεων email από προεπιλογή default_keep_email_private_popup=Απόκρυψη διευθύνσεων email των νέων λογαριασμών χρήστη σαν προεπιλογή. default_allow_create_organization=Να επιτρέπεται η δημιουργία οργανισμών σαν προεπιλογή default_allow_create_organization_popup=Επιτρέψτε σε νέους λογαριασμούς χρηστών να δημιουργούν οργανισμούς σαν προεπιλογή. default_enable_timetracking=Ενεργοποίηση Καταγραφής Χρόνου σαν Προεπιλογή default_enable_timetracking_popup=Ενεργοποίηση καταγραφής χρόνου για νέα αποθετήρια σαν προεπιλογή. no_reply_address=Κρυφό Όνομα Τομέα Email no_reply_address_helper=Όνομα τομέα για χρήστες με μια κρυφή διεύθυνση email. Για παράδειγμα, το όνομα χρήστη 'nikos' θα συνδεθεί στο Git ως 'nikos@noreply.example.org' αν ο κρυφός τομέας email έχει οριστεί ως 'noreply.example.org'. password_algorithm=Αλγόριθμος Hash Κωδικού Πρόσβασης password_algorithm_helper=Ορίστε τον αλγόριθμο hash του κωδικού πρόσβασης. Οι αλγόριθμοι έχουν διαφορετικές απαιτήσεις και αντοχή. Ο `argon2` ενώ έχει καλά χαρακτηριστικά χρησιμοποιεί πολλή μνήμη και μπορεί να είναι ακατάλληλός για μικρά συστήματα. [home] uname_holder=Όνομα Χρήστη ή Διεύθυνση Email password_holder=Κωδικός Πρόσβασης switch_dashboard_context=Εναλλαγή Περιεχομένων Αρχικού Πίνακα my_repos=Αποθετήρια show_more_repos=Περισσότερα αποθετήρια… collaborative_repos=Συνεργατικά Αποθετήρια my_orgs=Οι Οργανισμοί Μου my_mirrors=Τα Αντίγραφα Μου view_home=Προβολή %s search_repos=Βρείτε ένα αποθετήριο… filter=Άλλα Φίλτρα filter_by_team_repositories=Φιλτράρισμα ανά αποθετήρια ομάδας feed_of=Τροφοδοσία του "%s" show_archived=Αρχειοθετήθηκε show_both_archived_unarchived=Εμφάνιση και αρχειοθετημένων και μη αρχειοθετημένων show_only_archived=Εμφάνιση μόνο αρχειοθετημένων show_only_unarchived=Εμφάνιση μόνο μη αρχειοθετημένων show_private=Ιδιωτικό show_both_private_public=Εμφάνιση και δημόσιων και ιδιωτικών show_only_private=Εμφανίζονται μόνο ιδιωτικά show_only_public=Εμφανίζονται μόνο δημόσια issues.in_your_repos=Στα αποθετήρια σας [explore] repos=Αποθετήρια users=Χρήστες organizations=Οργανισμοί search=Αναζήτηση code=Κώδικας search.fuzzy=Fuzzy search.match=Ταίριασμα repo_no_results=Δεν βρέθηκαν αποθετήρια που να ταιρίαζουν με τα κριτήρια. user_no_results=Δεν βρέθηκαν χρήστες που να ταιριάζουν με τα κριτήρια. org_no_results=Δεν βρέθηκαν οργανισμοί που να ταιριάζουν με τα κριτήρια. code_no_results=Δεν βρέθηκε πηγαίος κώδικας που να ταιριάζει με τον όρο αναζήτησης. code_search_results=Αποτελέσματα αναζήτησης για '%s' code_last_indexed_at=Τελευταίο δημιουργία ευρετηρίου στις %s [auth] create_new_account=Εγγραφή Λογαριασμού register_helper_msg=Έχετε ήδη λογαριασμό? Συνδεθείτε τώρα! social_register_helper_msg=Έχετε ήδη λογαριασμό? Συνδέστε το τώρα! disable_register_prompt=Η εγγραφή είναι απενεργοποιημένη. Παρακαλούμε επικοινωνήστε με το διαχειριστή του ιστοτόπου. disable_register_mail=Η Επιβεβαίωση email για την εγγραφή είναι απενεργοποιημένη. remember_me=Απομνημόνευση αυτής της συσκευής forgot_password_title=Ξέχασα Τον Κωδικό Πρόσβασης forgot_password=Ξεχάσατε τον κωδικό πρόσβασης; sign_up_now=Χρειάζεστε λογαριασμό; Εγγραφείτε τώρα. sign_up_successful=Ο λογαριασμός δημιουργήθηκε με επιτυχία. confirmation_mail_sent_prompt=Ένα νέο email επιβεβαίωσης έχει σταλεί στο <b>%s</b>. Παρακαλώ ελέγξτε τα εισερχόμενα σας μέσα στις επόμενες %s για να ολοκληρώσετε τη διαδικασία εγγραφής. must_change_password=Ενημερώστε τον κωδικό πρόσβασης σας allow_password_change=Απαιτείται από το χρήστη να αλλάξει τον κωδικό πρόσβασης (συνιστόμενο) reset_password_mail_sent_prompt=Ένα email επιβεβαίωσης έχει σταλεί στο <b>%s</b>. Παρακαλώ ελέγξτε τα εισερχόμενα σας στις επόμενες %s για να ολοκληρώσετε τη διαδικασία ανάκτησης λογαριασμού. active_your_account=Ενεργοποιήστε Το Λογαριασμό Σας account_activated=Ο λογαριασμός έχει ενεργοποιηθεί prohibit_login=Απαγορεύεται η Σύνδεση prohibit_login_desc=Απαγορεύεται να συνδεθείτε με αυτό το λογαριασμό, παρακαλούμε επικοινωνήστε με το διαχειριστή του ιστοτόπου. resent_limit_prompt=Έχετε ήδη ζητήσει ένα email ενεργοποίησης πρόσφατα. Παρακαλώ περιμένετε 3 λεπτά και προσπαθήστε ξανά. has_unconfirmed_mail=Γεια σας %s, έχετε μια ανεπιβεβαίωτη διεύθυνση ηλεκτρονικού ταχυδρομείου (<b>%s</b>). Εάν δεν έχετε λάβει email επιβεβαίωσης ή χρειάζεται να αποστείλετε εκ νέου ένα νέο, παρακαλώ κάντε κλικ στο παρακάτω κουμπί. resend_mail=Κάντε κλικ εδώ για να στείλετε ξανά το email ενεργοποίησης email_not_associate=Η διεύθυνση ηλεκτρονικού ταχυδρομείου δεν είναι συσχετισμένη με κάποιο λογαριασμό. send_reset_mail=Αποστολή Email Ανάκτησης Λογαριασμού reset_password=Ανάκτηση Λογαριασμού invalid_code=Ο κωδικός επιβεβαίωσης δεν είναι έγκυρος ή έχει λήξει. reset_password_helper=Ανάκτηση Λογαριασμού reset_password_wrong_user=Είστε συνδεδεμένοι ως %s, αλλά ο σύνδεσμος ανάκτησης λογαριασμού είναι για %s password_too_short=Το μήκος του κωδικού πρόσβασης δεν μπορεί να είναι μικρότερο από %d χαρακτήρες. non_local_account=Οι μη τοπικοί χρήστες δεν μπορούν να ενημερώσουν τον κωδικό πρόσβασής τους μέσω του διεπαφής web του Gitea. verify=Επαλήθευση scratch_code=Κωδικός μιας χρήσης use_scratch_code=Χρήση κωδικού μιας χρήσης twofa_scratch_used=Έχετε χρησιμοποιήσει τον κωδικό μιας χρήσης. Έχετε ανακατευθυνθεί στη σελίδα ρυθμίσεων δύο παραγόντων ώστε να μπορείτε να αφαιρέσετε την εγγραφή της συσκευής σας ή να δημιουργήσετε ένα νέο κωδικό μιας χρήσης. twofa_passcode_incorrect=Ο κωδικός σας είναι εσφαλμένος. Αν χάσατε τη συσκευή σας, χρησιμοποιήστε τον κωδικό μιας χρήσης για να συνδεθείτε. twofa_scratch_token_incorrect=Ο κωδικός μιας χρήσης είναι εσφαλμένος. login_userpass=Είσοδος login_openid=OpenID oauth_signup_tab=Εγγραφή Νέου Λογαριασμού oauth_signup_title=Ολοκλήρωση Νέου Λογα<?php /** * @author Bernhard Posselt <dev@bernhard-posselt.com> * @author Lukas Reschke <lukas@statuscode.ch> * @author Morris Jobke <hey@morrisjobke.de> * @author Thomas Müller <thomas.mueller@tmit.eu> * @author Thomas Tanghus <thomas@tanghus.net> * @author Vincent Petry <pvince81@owncloud.com> * * @copyright Copyright (c) 2016, ownCloud, Inc. * @license AGPL-3.0 * * This code is free software: you can redistribute it and/or modify * it under the terms of the GNU Affero General Public License, version 3, * as published by the Free Software Foundation. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Affero General Public License for more details. * * You should have received a copy of the GNU Affero General Public License, version 3, * along with this program. If not, see <http://www.gnu.org/licenses/> * */ /** * Public interface of ownCloud for apps to use. * AppFramework\Controller class */ namespace OCP\AppFramework; use OCP\AppFramework\Http\TemplateResponse; use OCP\AppFramework\Http\JSONResponse; use OCP\AppFramework\Http\DataResponse; use OCP\AppFramework\Http\Response; use OCP\IRequest; /** * Base class to inherit your controllers from * @since 6.0.0 */ abstract class Controller { /** * app name * @var string * @since 7.0.0 */ protected $appName; /** * current request * @var \OCP\IRequest * @since 6.0.0 */ protected $request; /** * @var array * @since 7.0.0 */ private $responders; /** * constructor of the controller * @param string $appName the name of the app * @param IRequest $request an instance of the request * @since 6.0.0 - parameter $appName was added in 7.0.0 - parameter $app was removed in 7.0.0 */ public function __construct($appName, IRequest $request) { $this->appName = $appName; $this->request = $request; // default responders $this->responders = array( 'json' => function ($data) { if ($data instanceof DataResponse) { $response = new JSONResponse( $data->getData(), $data->getStatus() ); $dataHeaders = $data->getHeaders(); $headers = $response->getHeaders(); // do not overwrite Content-Type if it already exists if (isset($dataHeaders['Content-Type'])) { unset($headers['Content-Type']); } $response->setHeaders(array_merge($dataHeaders, $headers)); return $response; } else { return new JSONResponse($data); } } ); } /** * Parses an HTTP accept header and returns the supported responder type * @param string $acceptHeader * @return string the responder type * @since 7.0.0 * @since 9.1.0 Added default parameter */ public function getResponderByHTTPHeader($acceptHeader, $default='json') { $headers = explode(',', $acceptHeader); // return the first matching responder foreach ($headers as $header) { $header = strtolower(trim($header)); $responder = str_replace('application/', '', $header); if (array_key_exists($responder, $this->responders)) { return $responder; } } // no matching header return default return $default; } /** * Registers a formatter for a type * @param string $format * @param \Closure $responder * @since 7.0.0 */ protected function registerResponder($format, \Closure $responder) { $this->responders[$format] = $responder; } /** * Serializes and formats a response * @param mixed $response the value that was returned from a controller and * is not a Response instance * @param string $format the format for which a formatter has been registered * @throws \DomainException if format does not match a registered formatter * @return Response * @since 7.0.0 */ public function buildResponse($response, $format='json') { if(array_key_exists($format, $this->responders)) { $responder = $this->responders[$format]; return $responder($response); } else { throw new \DomainException('No responder registered for format ' . $format . '!'); } } /** * Lets you access post and get parameters by the index * @deprecated 7.0.0 write your parameters as method arguments instead * @param string $key the key which you want to access in the URL Parameter * placeholder, $_POST or $_GET array. * The priority how they're returned is the following: * 1. URL parameters * 2. POST parameters * 3. GET parameters * @param string $default If the key is not found, this value will be returned * @return mixed the content of the array * @since 6.0.0 */ public function params($key, $default=null){ return $this->request->getParam($key, $default); } /** * Returns all params that were received, be it from the request * (as GET or POST) or through the URL by the route * @deprecated 7.0.0 use $this->request instead * @return array the array with all parameters * @since 6.0.0 */ public function getParams() { return $this->request->getParams(); } /** * Returns the method of the request * @deprecated 7.0.0 use $this->request instead * @return string the method of the request (POST, GET, etc) * @since 6.0.0 */ public function method() { return $this->request->getMethod(); } /** * Shortcut for accessing an uploaded file through the $_FILES array * @deprecated 7.0.0 use $this->request instead * @param string $key the key that will be taken from the $_FILES array * @return array the file in the $_FILES element * @since 6.0.0 */ public function getUploadedFile($key) { return $this->request->getUploadedFile($key); } /** * Shortcut for getting env variables * @deprecated 7.0.0 use $this->request instead * @param string $key the key that will be taken from the $_ENV array * @return array the value in the $_ENV element * @since 6.0.0 */ public function env($key) { return $this->request->getEnv($key); } /** * Shortcut for getting cookie variables * @deprecated 7.0.0 use $this->request instead * @param string $key the key that will be taken from the $_COOKIE array * @return array the value in the $_COOKIE element * @since 6.0.0 */ public function cookie($key) { return $this->request->getCookie($key); } /** * Shortcut for rendering a template * @deprecated 7.0.0 return a template response instead * @param string $templateName the name of the template * @param array $params the template parameters in key => value structure * @param string $renderAs user renders a full page, blank only your template * admin an entry in the admin settings * @param string[] $headers set additional headers in name/value pairs * @return \OCP\AppFramework\Http\TemplateResponse containing the page * @since 6.0.0 */ public function render($templateName, array $params=array(), $renderAs='user', array $headers=array()){ $response = new TemplateResponse($this->appName, $templateName); $response->setParams($params); $response->renderAs($renderAs); foreach($headers as $name => $value){ $response->addHeader($name, $value); } return $response; } }
<?php /** * @author Bernhard Posselt <dev@bernhard-posselt.com> * @author Lukas Reschke <lukas@statuscode.ch> * @author Morris Jobke <hey@morrisjobke.de> * @author Thomas Müller <thomas.mueller@tmit.eu> * @author Thomas Tanghus <thomas@tanghus.net> * @author Vincent Petry <pvince81@owncloud.com> * * @copyright Copyright (c) 2016, ownCloud, Inc. * @license AGPL-3.0 * * This code is free software: you can redistribute it and/or modify * it under the terms of the GNU Affero General Public License, version 3, * as published by the Free Software Foundation. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Affero General Public License for more details. * * You should have received a copy of the GNU Affero General Public License, version 3, * along with this program. If not, see <http://www.gnu.org/licenses/> * */ /** * Public interface of ownCloud for apps to use. * AppFramework\Controller class */ namespace OCP\AppFramework; use OCP\AppFramework\Http\TemplateResponse; use OCP\AppFramework\Http\JSONResponse; use OCP\AppFramework\Http\DataResponse; use OCP\AppFramework\Http\Response; use OCP\IRequest; /** * Base class to inherit your controllers from * @since 6.0.0 */ abstract class Controller { /** * app name * @var string * @since 7.0.0 */ protected $appName; /** * current request * @var \OCP\IRequest * @since 6.0.0 */ protected $request; /** * @var array * @since 7.0.0 */ private $responders; /** * constructor of the controller * @param string $appName the name of the app * @param IRequest $request an instance of the request * @since 6.0.0 - parameter $appName was added in 7.0.0 - parameter $app was removed in 7.0.0 */ public function __construct($appName, IRequest $request) { $this->appName = $appName; $this->request = $request; // default responders $this->responders = array( 'json' => function ($data) { if ($data instanceof DataResponse) { $response = new JSONResponse( $data->getData(), $data->getStatus() ); $dataHeaders = $data->getHeaders(); $headers = $response->getHeaders(); // do not overwrite Content-Type if it already exists if (isset($dataHeaders['Content-Type'])) { unset($headers['Content-Type']); } $response->setHeaders(array_merge($dataHeaders, $headers)); return $response; } else { return new JSONResponse($data); } } ); } /** * Parses an HTTP accept header and returns the supported responder type * @param string $acceptHeader * @return string the responder type * @since 7.0.0 * @since 9.1.0 Added default parameter */ public function getResponderByHTTPHeader($acceptHeader, $default='json') { $headers = explode(',', $acceptHeader); // return the first matching responder foreach ($headers as $header) { $header = strtolower(trim($header)); $responder = str_replace('application/', '', $header); if (array_key_exists($responder, $this->responders)) { return $responder; } } // no matching header return default return $default; } /** * Registers a formatter for a type * @param string $format * @param \Closure $responder * @since 7.0.0 */ protected function registerResponder($format, \Closure $responder) { $this->responders[$format] = $responder; } /** * Serializes and formats a response * @param mixed $response the value that was returned from a controller and * is not a Response instance * @param string $format the format for which a formatter has been registered * @throws \DomainException if format does not match a registered formatter * @return Response * @since 7.0.0 */ public function buildResponse($response, $format='json') { if(array_key_exists($format, $this->responders)) { $responder = $this->responders[$format]; return $responder($response); } else { throw new \DomainException('No responder registered for format ' . $format . '!'); } } /** * Lets you access post and get parameters by the index * @deprecated 7.0.0 write your parameters as method arguments instead * @param string $key the key which you want to access in the URL Parameter * placeholder, $_POST or $_GET array. * The priority how they're returned is the following: * 1. URL parameters * 2. POST parameters * 3. GET parameters * @param string $default If the key is not found, this value will be returned * @return mixed the content of the array * @since 6.0.0 */ public function params($key, $default=null){ return $this->request->getParam($key, $default); } /** * Returns all params that were received, be it from the request * (as GET or POST) or through the URL by the route * @deprecated 7.0.0 use $this->request instead * @return array the array with all parameters * @since 6.0.0 */ public function getParams() { return $this->request->getParams(); } /** * Returns the method of the request * @deprecated 7.0.0 use $this->request instead * @return string the method of the request (POST, GET, etc) * @since 6.0.0 */ public function method() { return $this->request->getMethod(); } /** * Shortcut for accessing an uploaded file through the $_FILES array * @deprecated 7.0.0 use $this->request instead * @param string $key the key that will be taken from the $_FILES array * @return array the file in the $_FILES element * @since 6.0.0 */ public function getUploadedFile($key) { return $this->request->getUploadedFile($key); } /** * Shortcut for getting env variables * @deprecated 7.0.0 use $this->request instead * @param string $key the key that will be taken from the $_ENV array * @return array the value in the $_ENV element * @since 6.0.0 */ public function env($key) { return $this->request->getEnv($key); } /** * Shortcut for getting cookie variables * @deprecated 7.0.0 use $this->request instead * @param string $key the key that will be taken from the $_COOKIE array * @return array the value in the $_COOKIE element * @since 6.0.0 */ public function cookie($key) { return $this->request->getCookie($key); } /** * Shortcut for rendering a template * @deprecated 7.0.0 return a template response instead * @param string $templateName the name of the template * @param array $params the template parameters in key => value structure * @param string $renderAs user renders a full page, blank only your template * admin an entry in the admin settings * @param string[] $headers set additional headers in name/value pairs * @return \OCP\AppFramework\Http\TemplateResponse containing the page * @since 6.0.0 */ public function render($templateName, array $params=array(), $renderAs='user', array $headers=array()){ $response = new TemplateResponse($this->appName, $templateName); $response->setParams($params); $response->renderAs($renderAs); foreach($headers as $name => $value){ $response->addHeader($name, $value); } return $response; } }