diff --git a/.gitignore b/.gitignore
index 3f9c8036..d9ebf3d4 100644
--- a/.gitignore
+++ b/.gitignore
@@ -62,10 +62,7 @@ wp-content/mu-plugins/wpe-wp-sign-on-plugin*
/wp-admin
/wp-includes
/wp-content/themes/*
-!/wp-content/themes/academyAfrica
-!/wp-content/themes/hello-elementor
/wp-content/plugins/*
-!/wp-content/plugins/index.php
/wp-content/mu-plugins
.htaccess
apple-touch-icon-precomposed.png
@@ -74,6 +71,7 @@ favicon.ico
wpe-deploy-status-academyafrica
robots.txt
wordpress
+node_modules
# large/disallowed file types
# a CDN should be used for these
@@ -111,3 +109,8 @@ wordpress
*.avi
.env
+
+!/wp-content/themes/academyAfrica
+!/wp-content/themes/hello-elementor
+!/wp-content/plugins/index.php
+!/wp-content/plugins/academy-africa
diff --git a/wp-content/plugins/academy-africa/academy-africa.php b/wp-content/plugins/academy-africa/academy-africa.php
new file mode 100644
index 00000000..52692743
--- /dev/null
+++ b/wp-content/plugins/academy-africa/academy-africa.php
@@ -0,0 +1,44 @@
+is_compatible()) {
+ add_action('elementor/init', [$this, 'init']);
+ }
+ }
+
+ /**
+ * Compatibility Check
+ *
+ * Checks if the installed version of Elementor meets the plugin's minimum requirement.
+ *
+ * @since 1.0.0
+ * @access public
+ */
+
+ public function is_compatible()
+ {
+ // Check if Elementor installed and activated
+ if (!did_action('elementor/loaded')) {
+ add_action('admin_notices', [$this, 'admin_notice_missing_main_plugin']);
+ return false;
+ }
+
+ // Check if the installed version of Elementor meets the plugin's minimum requirement.
+ if (!version_compare(ELEMENTOR_VERSION, self::MINIMUM_ELEMENTOR_VERSION, '>=')) {
+ add_action('admin_notices', [$this, 'admin_notice_minimum_elementor_version']);
+ return false;
+ }
+
+ // Check if the installed version of PHP meets the plugin's minimum requirement.
+ if (!version_compare(PHP_VERSION, self::MINIMUM_PHP_VERSION, '>=')) {
+ add_action('admin_notices', [$this, 'admin_notice_minimum_php_version']);
+ return false;
+ }
+
+ return true;
+ }
+
+ /**
+ * Admin notice
+ *
+ * Warning when the site doesn't have Elementor installed or activated.
+ *
+ * @since 1.0.0
+ * @access public
+ */
+ public function admin_notice_missing_main_plugin()
+ {
+ if (isset($_GET['activate'])) unset($_GET['activate']);
+
+ $message = sprintf(
+ /* translators: 1: Plugin name 2: Elementor */
+ esc_html__('"%1$s" requires "%2$s" to be installed and activated.', 'academy-africa'),
+ '' . esc_html__('academyAfrica Elementor Addon', 'academy-africa') . '',
+ '' . esc_html__('Elementor', 'academy-africa') . ''
+ );
+
+ printf('
', $message);
+ }
+
+ /**
+ * Admin notice
+ *
+ * Warning when the site doesn't have a minimum required Elementor version.
+ *
+ * @since 1.0.0
+ * @access public
+ */
+ public function admin_notice_minimum_elementor_version()
+ {
+ if (isset($_GET['activate'])) unset($_GET['activate']);
+
+ $message = sprintf(
+ /* translators: 1: Plugin name 2: Elementor 3: Required Elementor version */
+ esc_html__('"%1$s" requires "%2$s" version %3$s or greater.', 'academy-africa'),
+ '' . esc_html__('academyAfrica Elementor Addon', 'academy-africa') . '',
+ '' . esc_html__('Elementor', 'academy-africa') . '',
+ self::MINIMUM_ELEMENTOR_VERSION
+ );
+
+ printf('', $message);
+ }
+
+ /**
+ * Admin notice
+ *
+ * Warning when the site doesn't have a minimum required PHP version.
+ *
+ * @since 1.0.0
+ * @access public
+ */
+ public function admin_notice_minimum_php_version()
+ {
+ if (isset($_GET['activate'])) unset($_GET['activate']);
+
+ $message = sprintf(
+ /* translators: 1: Plugin name 2: PHP 3: Required PHP version */
+ esc_html__('"%1$s" requires "%2$s" version %3$s or greater.', 'academy-africa'),
+ '' . esc_html__('academyAfrica Elementor Addon', 'academy-africa') . '',
+ '' . esc_html__('PHP', 'academy-africa') . '',
+ self::MINIMUM_PHP_VERSION
+ );
+
+ printf('', $message);
+ }
+
+ /**
+ * Initialize the plugin
+ *
+ * Load the plugin only after Elementor (and other plugins) are loaded.
+ *
+ * @since 1.0.0
+ * @access public
+ */
+
+ public function init()
+ {
+
+ add_action('elementor/widgets/register', [$this, 'register_widgets']);
+ add_action('elementor/frontend/after_enqueue_styles', [$this, 'register_widget_styles']);
+ add_action('elementor/elements/categories_registered', [$this, 'add_elementor_widget_categories']);
+ }
+
+ /**
+ * Include Widgets files
+ *
+ * Load widgets files
+ *
+ * @since 1.0.0
+ * @access private
+ */
+ public function register_widgets($widgets_manager)
+ {
+ // Include Widget files
+ require_once(__DIR__ . '/widgets/hero.php');
+ require_once(__DIR__ . '/widgets/header.php');
+
+ // Register widget
+ $widgets_manager->register(new \Academy_Africa_Hero());
+ $widgets_manager->register(new \Academy_Africa_Header());
+ }
+
+ public function register_widget_styles()
+ {
+ wp_enqueue_style(
+ 'academy-africa',
+ plugins_url('assets/css/academy-africa.css', __FILE__),
+ [],
+ [],
+ filemtime(plugin_dir_path(__FILE__) . 'assets/css/academy-africa.css.css')
+ );
+
+ wp_enqueue_style(
+ 'academy-africa-header',
+ plugins_url('assets/css/header.css', __FILE__),
+ [
+ 'academy-africa'
+ ],
+ filemtime(plugin_dir_path(__FILE__) . 'assets/css/header.css')
+ );
+ }
+
+ /**
+ * Add custom category
+ *
+ * @since 1.0.0
+ * @access public
+ */
+ public function add_elementor_widget_categories($elements_manager){
+ $elements_manager->add_category(
+ 'academy-africa',
+ [
+ 'title' => __('Academy Africa', 'academy-africa'),
+ 'icon' => 'fa fa-plug',
+ ]
+ );
+ }
+}
diff --git a/wp-content/plugins/academy-africa/includes/widgets/header.php b/wp-content/plugins/academy-africa/includes/widgets/header.php
new file mode 100644
index 00000000..70f5acc3
--- /dev/null
+++ b/wp-content/plugins/academy-africa/includes/widgets/header.php
@@ -0,0 +1,173 @@
+name] = $menu->name;
+ }
+ return $menu_names;
+ }
+
+
+ protected function register_controls()
+ {
+ $this->start_controls_section(
+ 'section_header',
+ [
+ 'label' => __('Header', 'academy-africa'),
+ ]
+ );
+ // Select menu
+ $this->add_control(
+ 'select_menu',
+ [
+ 'label' => __('Select Menu', 'academy-africa'),
+ 'type' => \Elementor\Controls_Manager::SELECT,
+ 'default' => 'primary',
+ 'options' => $this->get_menus(),
+ ]
+ );
+
+ // Sign in button text
+ $this->add_control(
+ 'sign_in_button_text',
+ [
+ 'label' => __('Sign In Button Text', 'academy-africa'),
+ 'type' => \Elementor\Controls_Manager::TEXT,
+ 'default' => __('Sign In', 'academy-africa'),
+ 'placeholder' => __('Sign In', 'academy-africa'),
+ ]
+ );
+
+ // Search bar placeholder text
+ $this->add_control(
+ 'search_bar_placeholder_text',
+ [
+ 'label' => __('Search Bar Placeholder Text', 'academy-africa'),
+ 'type' => \Elementor\Controls_Manager::TEXT,
+ 'default' => __('Search Courses', 'academy-africa'),
+ 'placeholder' => __('Search Courses', 'academy-africa'),
+ ]
+ );
+
+ $this->end_controls_section();
+ }
+
+ function getSiteName()
+ {
+ return get_bloginfo('name');
+ }
+
+ function get_custom_logo_url()
+ {
+ $custom_logo_id = get_theme_mod('custom_logo');
+ $image = wp_get_attachment_image_src($custom_logo_id, 'full');
+ return $image[0];
+ }
+
+ function get_menu_items($name)
+ {
+ $list = wp_get_nav_menu_items($name);
+ $menu_items = [];
+ foreach ($list as $item) {
+ $menu_items[] = [
+ 'title' => $item->title,
+ 'url' => $item->url,
+ 'id' => $item->ID,
+ 'parent_id' => $item->menu_item_parent,
+ ];
+ }
+ $menu = [];
+ foreach ($menu_items as $item) {
+ if ($item['parent_id'] == 0) {
+ $menu[$item['id']] = $item;
+ } else {
+ $menu[$item['parent_id']]['children'][] = $item;
+ }
+ }
+ return $menu;
+ }
+
+ protected function render()
+ {
+ $settings = $this->get_settings_for_display();
+ $selected_menu = $settings['select_menu'];
+ $menus = $selected_menu ? $this->get_menu_items($selected_menu) : [];
+
+ $this->add_inline_editing_attributes('sign_in_button_text', 'none');
+?>
+
+
+
+
+ Hello World
+
+