/home/techb158/public_html/wp-content/plugins/kirki/app/Services
Edit: /home/techb158/public_html/wp-content/plugins/kirki/app/Services/PageService.php (10355B)
$payload->post_title,
'post_name' => $payload->post_title,
// Check if type = kirki_page then change it to wp page type. cause we only set template if page type is kirki_page.
'post_type' => $payload->post_type === PostTypes::PAGE ? PostTypes::WP_PAGE : $payload->post_type,
];
$page = PageModel::create_post($page_data);
if (!empty($payload->blocks)) {
// This is for popup creation. cause popup has predefined blocks.
Page::save_blocks($page->ID, $payload->blocks);
}
if (!empty($payload->conditions)) {
// This is for template creation. cause popup has predefined conditions.
PostMeta::update_meta_value($page->ID, PageMetaKeys::TEMPLATE_CONDITIONS, $payload->conditions);
}
// @todo: Need to remove this code. after checking collection_type used or not
if (!empty($payload->collection_type)) {
PostMeta::update_meta_value($page->ID, PageMetaKeys::TEMPLATE_COLLECTION_TYPE, $payload->collection_type);
}
if (!empty($payload->utility_page_type)) {
PostMeta::update_meta_value($page->ID, PageMetaKeys::UTILITY_PAGE_TYPE, $payload->utility_page_type);
}
Page::save_editor_mode($page->ID);
switch ($payload->post_type) {
case PostTypes::WP_PAGE:
case PostTypes::PAGE:
PostMeta::update_meta_value($page->ID, PageMetaKeys::PAGE_TEMPLATE, Canvas::get_full_canvas_template_path());
break;
case PostTypes::UTILITY:
if (!empty($payload->utility_page_type)) {
Template::assign_utility_page_template($page->ID, $payload->utility_page_type);
soft_flush_rewrite_rules();
}
break;
default:
break;
}
if (
!empty($payload->custom_template)
&& isset($payload->custom_template['url'])
&& !empty(($payload->custom_template['url']))
) {
Template::assign_custom_page_template($page->ID, $payload->custom_template['url']);
}
if (!empty($payload->content_manager_collection_id) && !empty($payload->content_manager_page_kind)) {
try {
(new ContentManagerTemplateService())->initialize(
$page->ID,
(int) $payload->content_manager_collection_id,
$payload->content_manager_page_kind
);
} catch (\Throwable $error) {
PageModel::delete_post($page->ID, true);
throw $error;
}
}
return $page;
}
/**
* Update page data
*
* @param PageModel $page
* @param EditPageDTO $payload
*
* @return PageModel
*/
public function update(PageModel $page, EditPageDTO $payload)
{
$post_payload = collection($payload->to_array())->filter(fn ($value) => !is_null($value))->to_array();
if (!empty($post_payload)) {
$page = PageModel::update_post($page->ID, $post_payload);
if ($page->post_type === PostTypes::UTILITY) {
soft_flush_rewrite_rules();
}
}
return $page;
}
public function update_popup_data(PageModel $popup, EditPopupDTO $payload)
{
if (!is_null($payload->blocks)) {
Page::save_blocks($popup->ID, $payload->blocks);
}
if (!is_null($payload->styleBlocks)) {
Page::save_style_blocks($popup->ID, $payload->styleBlocks);
}
if (!is_null($payload->usedFonts)) {
Page::save_used_font_list($popup->ID, $payload->usedFonts);
}
return $popup;
}
/**
* Save editor page data
*
* @return int|false - when not staging return false otherwise return staging version
*/
public function save_page_data(EditorPagePayloadDTO $payload, string $page_content_type)
{
if (is_null($payload->page) || empty($payload->data)) {
return false;
}
Page::save_editor_mode($payload->page->ID);
$staging_version = false;
$page_data = $payload->data;
if($payload->is_staging) {
$staging_version = Page::get_most_recent_stage_version($payload->page->ID);
Page::set_last_edited_datetime_of_stage_version($payload->page->ID);
}
switch ($page_content_type) {
case PageContentTypes::BLOCKS:
Page::save_blocks($payload->page->ID, ['blocks' => $page_data['blocks'] ?? []], $staging_version);
break;
case PageContentTypes::STYLES:
$styles = $page_data['styles'] ?? [];
Page::save_style_blocks($payload->page->ID, $styles, $staging_version);
break;
case PageContentTypes::USED_STYLES:
Page::save_used_global_style_block_ids($payload->page->ID, $page_data['usedStyles'] ?? [], $staging_version);
break;
case PageContentTypes::USED_STYLE_IDS_RANDOM:
Page::save_used_style_block_ids($payload->page->ID, $page_data['usedStyleIdsRandom'] ?? [], $staging_version);
break;
case PageContentTypes::USED_FONTS:
Page::save_used_font_list($payload->page->ID, $page_data['usedFonts'] ?? [], $staging_version);
break;
case PageContentTypes::CUSTOM_FONTS:
// Save others data if isset. this is only used for template import
if (!isset($page_data['customFonts'])) {
break;
}
$custom_fonts = GlobalData::get_global_custom_fonts();
foreach ($page_data['customFonts'] as $key => $custom_font) {
$custom_fonts[$key] = $custom_font;
}
GlobalData::update_global_custom_fonts($custom_fonts);
break;
case PageContentTypes::VIEWPORT_LIST:
// Save others data if isset. this is only used for template import
if (!isset($page_data['viewportList'])) {
break;
}
$controller_data = GlobalData::get_global_ui_controller();
if (!$controller_data) {
$controller_data = [
'viewport' => [
'active' => 'md',
'defaults'=> ["md", "tablet", "mobileLandscape", "mobile"],
'list' => $page_data['viewportList'],
'mdWidth' => 1200,
"scale" => 1,
"width" => 2484,
"zoom" => 1
]
];
}
$controller_data['viewport']['list'] = $page_data['viewportList'];
GlobalData::update_global_ui_controller($controller_data);
break;
}
return $staging_version;
}
/**
* Toggle disabled page symbols
*
* @param TogglePageSymbolDTO $payload
*
* @return bool
*/
public function toggle_disabled_page_symbols(TogglePageSymbolDTO $payload)
{
$prev_status = PostMeta::get_meta_value($payload->post_id, PageMetaKeys::DISABLED_PAGE_SYMBOLS, []);
if (!is_array($prev_status)) {
$prev_status = [];
}
$current_status = array_merge($prev_status, [$payload->symbol_type => $payload->disable]);
PostMeta::update_meta_value($payload->post_id, PageMetaKeys::DISABLED_PAGE_SYMBOLS, $current_status);
return true;
}
/**
* Duplicate page
*
* @param PageModel $current_page
*
* @return PageModel New page
*/
public function duplicate_page(PageModel $current_page)
{
$new_page = PageModel::create_post([
'post_title' => $current_page->post_title . ' (copy)',
'post_content' => $current_page->post_content,
'post_name' => $current_page->post_name,
'post_type' => $current_page->post_type,
'post_status' => $current_page->post_status,
]);
$current_page_block = PostMeta::get_meta_value($current_page->ID, PageMetaKeys::BLOCKS);
if (!empty($current_page_block)) {
Page::save_blocks($new_page->ID, $current_page_block);
Page::save_editor_mode($new_page->ID);
}
/**
* Also duplicate _wp_page_template meta if exists
*/
$current_page_template = PostMeta::get_meta_value($current_page->ID, PageMetaKeys::PAGE_TEMPLATE);
if (!empty($current_page_template)) {
$current_page_template = Canvas::normalize_full_canvas_template_path($current_page_template);
PostMeta::update_meta_value($new_page->ID, PageMetaKeys::PAGE_TEMPLATE, $current_page_template);
}
/**
* Also duplicate this page style blocks if exists
*/
$current_post_styles = PostMeta::get_meta_value($current_page->ID, PageMetaKeys::STYLE_BLOCKS, []);
if (!empty($current_post_styles)) {
Page::save_style_blocks($new_page->ID, $current_post_styles);
}
$current_used_fonts = PostMeta::get_meta_value($current_page->ID, PageMetaKeys::USED_FONT_LIST, []);
if (!empty($current_used_fonts)) {
Page::save_used_font_list($new_page->ID, $current_used_fonts);
}
if ($current_page->post_type === PostTypes::UTILITY) {
soft_flush_rewrite_rules();
}
return $new_page;
}
public function delete_page(PageModel $page) {
$is_deleted = PageModel::delete_post($page->ID);
if (!$is_deleted) {
throw new Exception(esc_html__('Page not deleted.', 'kirki'), Response::FORBIDDEN);
}
if ($page->post_type === PostTypes::UTILITY) {
soft_flush_rewrite_rules();
}
return $is_deleted;
}
/**
* Get all pages
*
* @param PageFilterDTO $filter_dto
*
* @return Paginator
*/
public function paginated(PageFilterDTO $filter_dto)
{
$front_page_id = $filter_dto->current_page === 1 ? Page::get_front_page_id() : 0;
$paginated = PageModel::query()
->with([
'meta' => function (QueryBuilder $query) {
$query->where_in('meta_key', PageMetaKeys::get_single_post_keys());
}])
->filter_post_type($filter_dto->post_types)
->filter_status($filter_dto->post_statuses)
->where_not_in('ID', $filter_dto->exclude_page_ids)
->search($filter_dto->query)
->order_by_raw('CASE WHEN `ID` = %d THEN 0 ELSE 1 END', [$front_page_id])
->order_by('ID', 'DESC')
->paginate($filter_dto->limit, $filter_dto->current_page);
return $paginated;
}
}