sc_html__( 'General Settings', 'elementor' ),
'tab' => Controls_Manager::TAB_SETTINGS,
]
);
$this->add_control(
'post_title',
[
'label' => esc_html__( 'Title', 'elementor' ),
'type' => Controls_Manager::TEXT,
'default' => $this->post->post_title,
'label_block' => true,
]
);
$post_type_object = get_post_type_object( $this->post->post_type );
$can_publish = $post_type_object && current_user_can( $post_type_object->cap->publish_posts );
$is_published = self::STATUS_PUBLISH === $this->post->post_status || self::STATUS_PRIVATE === $this->post->post_status;
if ( $is_published || $can_publish || ! Plugin::$instance->editor->is_edit_mode() ) {
$statuses = $this->get_post_statuses();
if ( 'future' === $this->get_main_post()->post_status ) {
$statuses['future'] = esc_html__( 'Future', 'elementor' );
}
$this->add_control(
'post_status',
[
'label' => esc_html__( 'Status', 'elementor' ),
'type' => Controls_Manager::SELECT,
'default' => $this->get_main_post()->post_status,
'options' => $statuses,
]
);
}
$this->end_controls_section();
}
protected function get_post_statuses() {
return get_post_statuses();
}
protected function get_have_a_look_url() {
return $this->get_permalink();
}
public function handle_revisions_changed( $post_has_changed, $last_revision, $post ) {
// In case default, didn't determine the changes.
if ( ! $post_has_changed ) {
$last_revision_id = $last_revision->ID;
$last_revision_document = Plugin::instance()->documents->get( $last_revision_id );
$post_document = Plugin::instance()->documents->get( $post->ID );
$last_revision_settings = $last_revision_document->get_settings();
$post_settings = $post_document->get_settings();
// TODO: Its better to add crc32 signature for each revision and then only compare one part of the checksum.
$post_has_changed = $last_revision_settings !== $post_settings;
}
return $post_has_changed;
}
private function add_handle_revisions_changed_filter() {
add_filter( 'wp_save_post_revision_post_has_changed', [ $this, 'handle_revisions_changed' ], 10, 3 );
}
private function remove_handle_revisions_changed_filter() {
remove_filter( 'wp_save_post_revision_post_has_changed', [ $this, 'handle_revisions_changed' ] );
}
private function get_runtime_elements_iteration_actions() {
$runtime_elements_iteration_actions = [];
$elements_iteration_actions = $this->get_elements_iteration_actions();
foreach ( $elements_iteration_actions as $elements_iteration_action ) {
if ( $elements_iteration_action->is_action_needed() ) {
$runtime_elements_iteration_actions[] = $elements_iteration_action;
}
}
return $runtime_elements_iteration_actions;
}
private function iterate_elements( $elements, $elements_iteration_actions, $mode ) {
$unique_page_elements = [];
foreach ( $elements_iteration_actions as $elements_iteration_action ) {
$elements_iteration_action->set_mode( $mode );
}
Plugin::$instance->db->iterate_data( $elements, function( array $element_data ) use ( &$unique_page_elements, $elements_iteration_actions ) {
$element_type = 'widget' === $element_data['elType'] ? $element_data['widgetType'] : $element_data['elType'];
$element = Plugin::$instance->elements_manager->create_element_instance( $element_data );
if ( $element ) {
if ( ! in_array( $element_type, $unique_page_elements, true ) ) {
$unique_page_elements[] = $element_type;
foreach ( $elements_iteration_actions as $elements_iteration_action ) {
$elements_iteration_action->unique_element_action( $element );
}
}
foreach ( $elements_iteration_actions as $elements_iteration_action ) {
$elements_iteration_action->element_action( $element );
}
}
return $element_data;
} );
foreach ( $elements_iteration_actions as $elements_iteration_action ) {
$elements_iteration_action->after_elements_iteration();
}
}
private function get_elements_iteration_actions() {
if ( ! $this->elements_iteration_actions ) {
$this->elements_iteration_actions[] = new Assets_Iteration_Action( $this );
}
return $this->elements_iteration_actions;
}
}