summaryrefslogtreecommitdiffstats
path: root/giglogadmin.php
blob: b9155cb4cf8f0ed9e2a0060571a550d61cc47f37 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
<?php
/**
 * Gigolog Admin
 *
 * @package     giglogadmin
 * @author      Andrea Chirulescu, Harald Eilertsen
 * @copyright   2021 Andrea Chirulescu, Harald Eilertsen
 * @license     AGPL-3.0-or-later
 *
 * @wordpress-plugin
 * Plugin Name: Giglog Admin
 * Plugin URI:  https://code.volse.no/wp/plugins/giglogadmin
 * Description: Scheduling journalists and photographers to cover concerts or events.
 * Version:     0.1.0
 * Author:      Andrea Chirulescu, Harald Eilertsen
 * License:     AGPLv3
 * License URI: https://www.gnu.org/licenses/agpl-3.0.txt
 *
 * SPDX-FileCopyrightText: 2021 Andrea Chirulescu <andrea.chirulescu@gmail.com>
 * SPDX-FileCopyrightText: 2021 Harald Eilertsen <haraldei@anduin.net>
 *
 * SPDX-License-Identifier: AGPL-3.0-or-later
 */

if ( !class_exists( 'GiglogAdmin_Plugin' ) ) {

    class GiglogAdmin_Plugin
    {
        static public function init(): void {
            if ( !defined('GIGLOGADMIN_UNIT_TEST') ) {
                require_once __DIR__ . '/includes/admin/register_db_tables.php';
            }

            require_once __DIR__ . '/includes/venue.php';
            require_once __DIR__ . '/includes/concert.php';
            require_once __DIR__ . '/includes/view-helpers/select_field.php';

            if (is_admin()) {
                require_once __DIR__ . '/includes/admin/views/giglog_admin_page.php';
                require_once __DIR__ . '/includes/admin/views/giglog_import_gigs.php';
                require_once __DIR__ . '/includes/admin/helpfiles/instrunctions.php';
                require_once __DIR__ . '/includes/admin/helpfiles/instr_reviewers.php';
                require_once __DIR__ . '/includes/admin/helpfiles/instr_photog.php';

                add_action( 'admin_menu', array( 'GiglogAdmin_Plugin', 'add_admin_pages' ));
                add_action( 'admin_menu', array( 'GiglogAdmin_Plugin', 'add_help_pages' ));

                add_filter( 'wp_nav_menu_args', array( 'GiglogAdmin_Plugin', 'nav_menu_args' ));
            }
            else {
                require_once __DIR__ . '/includes/admin/views/_concerts_table.php';
                require_once __DIR__ . '/includes/giglog_visitor_display.php';
            }
        }

        static function activate(): void {
        }

        static function deactivate(): void {
        }

        /**
         * Adds the 'Giglog' top level menu to the left side WordPress admin
         * menu. Other subpages will come later.
         *
         * @return void
         */
        static function add_admin_pages(): void {
            if ( ! current_user_can( 'manage_options' ) ) {
                return;
            }
            $top = add_menu_page(
                "Giglog admin",             // Page title
                "Giglog",                   // Menu title
                "upload_files",             // Will show for users with this capability
                "giglog",                   // menu slug
                array( 'GiglogAdmin_AdminPage', 'render_html' ),     // callable
                'dashicons-tickets-alt',    // Icon url
                11);                        // Position, just below 'Media'

            add_action( 'load-' . $top, array( 'GiglogAdmin_AdminPage', 'update' ) );

            $import_hook = add_submenu_page(
                "giglog",                   // parent slug
                "Import gigs",              // page title
                "Import gigs",              // menu title
                "upload_files",             // required capability
                "giglog_import",            // menu slug
                array( 'GiglogAdmin_ImportGigsPage', 'render_html' ));   // callable

            if ($import_hook !== false) {
                add_action(
                    'load-' . $import_hook,
                    array( 'GiglogAdmin_ImportGigsPage', 'submit_form' ) );
            }

            wp_register_style( 'css_style', plugins_url( '/includes/css/main.css', __FILE__ ) );
            wp_enqueue_style('css_style');
        }

        static function add_help_pages(): void {
            if ( ! current_user_can( 'manage_options' ) ) {
                return;
            }
            add_menu_page(
                "Help for ET users",        // Page title
                "Help for ET users",        // Menu title
                "upload_files",             // Will show for users with this capability
                "helpfiles",                // menu slug
                array( 'Instructions_Page', 'render_instr_html' ),     // callable
                'dashicons-tickets-alt',    // Icon url
                10);                        // Position, just below 'Media'

            add_submenu_page(
                "helpfiles",                // parent slug
                "Reviewer help files",      // page title
                "Reviewer help files",      // menu title
                "upload_files",             // required capability
                "reviewer_help",            // menu slug
                array( 'Instructions_Reviewers', 'render_instr_rev_html' ));   // callable

            add_submenu_page(
                "helpfiles",                 // parent slug
                "Photogalleries help files", // page title
                "Photogalleries help files", // menu title
                "upload_files",              // required capability
                "photog_help",               // menu slug
                array( 'Instructions_Photogs', 'render_instr_photo_html' ));   // callable
        }

        /*
         * Show menus based on whether user is logged in or not.
         *
         * Giglog admin pages should only be visible for logged in users/can eventually
         * be customized by role if needed
         */
        static function nav_menu_args( array $args = [] ) : array {
            if ( is_user_logged_in() ) {
                $args['menu'] = 'Loggedusers';
            } else {
                $args['menu'] = 'Notloggedusers';
            }

            return $args;
        }

    }

    register_activation_hook( __FILE__, array( 'GiglogAdmin_Plugin', 'activate' ));
    register_deactivation_hook( __FILE__, array( 'GiglogAdmin_Plugin', 'deactivate' ));

    GiglogAdmin_Plugin::init();
}