Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Suggestions: Versatile Features - Dashboard and Management #266

Open
wants to merge 5 commits into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
74 changes: 74 additions & 0 deletions editor/api.php
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,9 @@ class Brizy_Editor_API {
const AJAX_FORM_INTEGRATION_STATUS = 'brizy_form_integration_status';
const AJAX_SUBMIT_FORM = 'brizy_submit_form';

const AJAX_UPDATE_MENU_DATA = 'brizy_update_menu_data';
const AJAX_UPDATE_MENU_ITEM_DATA = 'brizy_update_menu_item_data';

const AJAX_DOWNLOAD_MEDIA = 'brizy_download_media';
const AJAX_MEDIA_METAKEY = 'brizy_get_media_key';

Expand Down Expand Up @@ -108,6 +111,9 @@ private function initialize() {
'update_form_integration_status'
) );
add_action( 'wp_ajax_' . self::AJAX_DELETE_FORM, array( $this, 'delete_form' ) );

add_action( 'wp_ajax_' . self::AJAX_UPDATE_MENU_ITEM_DATA, array( $this, 'update_menu_item_data' ) );
add_action( 'wp_ajax_' . self::AJAX_UPDATE_MENU_DATA, array( $this, 'update_menu_data' ) );
add_action( 'wp_ajax_' . self::AJAX_SET_FEATURED_IMAGE, array( $this, 'set_featured_image' ) );
add_action( 'wp_ajax_' . self::AJAX_SET_FEATURED_IMAGE_FOCAL_POINT, array(
$this,
Expand All @@ -121,6 +127,73 @@ private function initialize() {
add_action( 'wp_ajax_nopriv_' . self::AJAX_SUBMIT_FORM, array( $this, 'submit_form' ) );
}

public function update_menu_item_data() {
if ( ! isset( $_POST['menuItemId'] ) || get_post_type( $_POST['menuItemId'] ) != 'nav_menu_item' ) {
$this->error( 400, 'Unknown menu item' );
}

$json_decode = json_decode( stripslashes( $_POST['menuItemData'] ) );

if ( ! isset( $_POST['menuItemData'] ) || is_null( $json_decode ) ) {
$this->error( 400, 'Bad request' );
}

$menuItems = get_posts( array(
'meta_key' => 'brizy_post_uid',
'meta_value' => $_POST['menuItemId'],
'post_type' => 'nav_menu_item',
) );

if ( count( $menuItems ) == 0 ) {
$this->error( 400, 'Unknown menu item' );;
}

$menu = $menuItems[0];

update_post_meta( (int) $menu->ID, 'brizy_data', $json_decode );

$this->success( array() );
}

public function update_menu_data() {
if ( ! isset( $_POST['menuId'] ) ) {
$this->error( 400, 'Unknown menu' );
}

$json_decode = json_decode( stripslashes( $_POST['menuData'] ) );

if ( ! isset( $_POST['menuData'] ) || is_null( $json_decode ) ) {
$this->error( 400, 'Bad request' );
}


$menu = get_terms( array(
'taxonomy' => 'nav_menu',
'hide_empty' => false,
'meta_query' => array(
'relation' => 'AND',
array(
'key' => 'brizy_uid',
'value' => $_POST['menuId'],
'compare' => '='
)
)
) );


if ( isset( $menu[0] ) ) {
$menu = $menu[0];
} else {
$this->error( 400, 'Unknown menu item' );
}
update_term_meta( (int) $menu->term_id, 'brizy_data', $json_decode );

$this->success( array() );
}




public function set_featured_image() {
$this->authorize();

Expand Down Expand Up @@ -170,6 +243,7 @@ public function remove_featured_image() {
}



public function default_form() {
try {

Expand Down
96 changes: 96 additions & 0 deletions editor/editor/editor.php
Original file line number Diff line number Diff line change
Expand Up @@ -166,6 +166,8 @@ public function config() {
'setFeaturedImage' => Brizy_Editor_API::AJAX_SET_FEATURED_IMAGE,
'setFeaturedImageFocalPoint' => Brizy_Editor_API::AJAX_SET_FEATURED_IMAGE_FOCAL_POINT,
'removeFeaturedImage' => Brizy_Editor_API::AJAX_REMOVE_FEATURED_IMAGE,
'updateMenuData' => Brizy_Editor_API::AJAX_UPDATE_MENU_DATA,
'updateMenuItemData' => Brizy_Editor_API::AJAX_UPDATE_MENU_ITEM_DATA,
),
'plugins' => array(
'dummy' => true,
Expand All @@ -184,6 +186,7 @@ public function config() {
'submitUrl' => add_query_arg( 'action', 'brizy_submit_form', set_url_scheme( admin_url( 'admin-ajax.php' ) ) )
)
),
'menuData' => $this->get_menu_data()
);

return self::$config = apply_filters( 'brizy_editor_config', $config );
Expand Down Expand Up @@ -396,4 +399,97 @@ function addQueryStringToUrl( $link, $query ) {
}


private function get_menu_data() {
$menus = wp_get_nav_menus();
$menu_data = array();

foreach ( $menus as $menu ) {

$custom_menu_data = get_term_meta( $menu->term_id, 'brizy_data', true );

$menu_uid = get_term_meta( $menu->term_id, 'brizy_uid', true );
if ( ! $menu_uid ) {
$menu_uid = md5( $menu->term_id . time() );
update_term_meta( $menu->term_id, 'brizy_uid', $menu_uid );
}

$amenu = array(
'id' => $menu_uid,
'name' => $menu->name,
'items' => array()
);

$amenu = (object) array_merge( $amenu, get_object_vars( is_object( $custom_menu_data ) ? $custom_menu_data : (object) array() ) );

$menu_items = wp_get_nav_menu_items( $menu->term_id );

$menu_items = $this->get_menu_tree( $menu_items );

if ( count( $menu_items ) > 0 ) {
$amenu->items = $menu_items;
}

$menu_data[] = $amenu;
}

return $menu_data;
}

private function get_menu_tree( $items, $parent = 0 ) {
$result_items = array();

foreach ( $items as $item ) {
if ( $item->menu_item_parent != $parent ) {
continue;
}

$menu_uid = get_post_meta( $item->ID, 'brizy_post_uid', true );
if ( ! $menu_uid ) {
$menu_uid = md5( $item->ID . time() );
update_post_meta( $item->ID, 'brizy_post_uid', $menu_uid );
}

$megaMenuItems = $this->getMegaMenuItems();

$menu_data = get_post_meta( $item->ID, 'brizy_data', true );

$item_value = array(
'id' => $menu_uid,
'title' => $item->title,
'url' => $item->url,
'megaMenuItems' => $megaMenuItems
);

$an_item = (object) array(
'type' => 'MenuItem',
);

$an_item->value = (object) array_merge( $item_value, get_object_vars( is_object( $menu_data ) ? $menu_data : (object) array() ) );

$child_items = $this->get_menu_tree( $items, $item->ID );

$an_item->value->items = array();

if ( count( $child_items ) > 0 ) {
$an_item->value->items = $child_items;
}

$result_items[] = $an_item;
}

return $result_items;
}

/**
* @return array
*/
private function getMegaMenuItems() {

return array(
(object) ( array(
'type' => "SectionMegaMenu",
'value' => (object) array( 'items' => array() )
) )
);
}
}