Submit
Path:
~
/
/
usr
/
local
/
sitepad
/
editor
/
site-data
/
plugins
/
kkart-pro
/
packages
/
kkart-admin
/
src
/
Notes
/
File Content:
Note.php
<?php /** * Kkart Admin (Dashboard) Notes. * * The Kkart admin notes class gets admin notes data from storage and checks validity. */ namespace Automattic\Kkart\Admin\Notes; defined( 'ABSPATH' ) || exit; /** * Note class. */ class Note extends \KKART_Data { // Note types. const E_KKART_ADMIN_NOTE_ERROR = 'error'; // used for presenting error conditions. const E_KKART_ADMIN_NOTE_WARNING = 'warning'; // used for presenting warning conditions. const E_KKART_ADMIN_NOTE_UPDATE = 'update'; // i.e. used when a new version is available. const E_KKART_ADMIN_NOTE_INFORMATIONAL = 'info'; // used for presenting informational messages. const E_KKART_ADMIN_NOTE_MARKETING = 'marketing'; // used for adding marketing messages. const E_KKART_ADMIN_NOTE_SURVEY = 'survey'; // used for adding survey messages. // Note status codes. const E_KKART_ADMIN_NOTE_PENDING = 'pending'; // the note is pending - hidden but not actioned. const E_KKART_ADMIN_NOTE_UNACTIONED = 'unactioned'; // the note has not yet been actioned by a user. const E_KKART_ADMIN_NOTE_ACTIONED = 'actioned'; // the note has had its action completed by a user. const E_KKART_ADMIN_NOTE_SNOOZED = 'snoozed'; // the note has been snoozed by a user. /** * This is the name of this object type. * * @var string */ protected $object_type = 'admin-note'; /** * Cache group. * * @var string */ protected $cache_group = 'admin-note'; /** * Note constructor. Loads note data. * * @param mixed $data Note data, object, or ID. */ public function __construct( $data = '' ) { // Set default data here to allow `content_data` to be an object. $this->data = array( 'name' => '-', 'type' => self::E_KKART_ADMIN_NOTE_INFORMATIONAL, 'locale' => 'en_US', 'title' => '-', 'content' => '-', 'content_data' => new \stdClass(), 'status' => self::E_KKART_ADMIN_NOTE_UNACTIONED, 'source' => 'kkart', 'date_created' => '0000-00-00 00:00:00', 'date_reminder' => '', 'is_snoozable' => false, 'actions' => array(), 'layout' => 'plain', 'image' => '', 'is_deleted' => false, ); parent::__construct( $data ); if ( $data instanceof Note ) { $this->set_id( absint( $data->get_id() ) ); } elseif ( is_numeric( $data ) ) { $this->set_id( $data ); } elseif ( is_object( $data ) && ! empty( $data->note_id ) ) { $this->set_id( $data->note_id ); unset( $data->icon ); // Icons are deprecated. $this->set_props( (array) $data ); $this->set_object_read( true ); } else { $this->set_object_read( true ); } $this->data_store = \KKART_Data_Store::load( 'admin-note' ); if ( $this->get_id() > 0 ) { $this->data_store->read( $this ); } } /** * Merge changes with data and clear. * * @since 3.0.0 */ public function apply_changes() { $this->data = array_replace_recursive( $this->data, $this->changes ); // @codingStandardsIgnoreLine // Note actions need to be replaced wholesale. // Merging arrays doesn't allow for deleting note actions. if ( isset( $this->changes['actions'] ) ) { $this->data['actions'] = $this->changes['actions']; } $this->changes = array(); } /* |-------------------------------------------------------------------------- | Helpers |-------------------------------------------------------------------------- | | Methods for getting allowed types, statuses. | */ /** * Get allowed types. * * @return array */ public static function get_allowed_types() { $allowed_types = array( self::E_KKART_ADMIN_NOTE_ERROR, self::E_KKART_ADMIN_NOTE_WARNING, self::E_KKART_ADMIN_NOTE_UPDATE, self::E_KKART_ADMIN_NOTE_INFORMATIONAL, self::E_KKART_ADMIN_NOTE_MARKETING, self::E_KKART_ADMIN_NOTE_SURVEY, ); return apply_filters( 'kkart_note_types', $allowed_types ); } /** * Get allowed statuses. * * @return array */ public static function get_allowed_statuses() { $allowed_statuses = array( self::E_KKART_ADMIN_NOTE_PENDING, self::E_KKART_ADMIN_NOTE_ACTIONED, self::E_KKART_ADMIN_NOTE_UNACTIONED, self::E_KKART_ADMIN_NOTE_SNOOZED, ); return apply_filters( 'kkart_note_statuses', $allowed_statuses ); } /* |-------------------------------------------------------------------------- | Getters |-------------------------------------------------------------------------- | | Methods for getting data from the note object. | */ /** * Returns all data for this object. * * Override \KKART_Data::get_data() to avoid errantly including meta data * from ID collisions with the posts table. * * @return array */ public function get_data() { return array_merge( array( 'id' => $this->get_id() ), $this->data ); } /** * Get note name. * * @param string $context What the value is for. Valid values are 'view' and 'edit'. * @return string */ public function get_name( $context = 'view' ) { return $this->get_prop( 'name', $context ); } /** * Get note type. * * @param string $context What the value is for. Valid values are 'view' and 'edit'. * @return string */ public function get_type( $context = 'view' ) { return $this->get_prop( 'type', $context ); } /** * Get note locale. * * @param string $context What the value is for. Valid values are 'view' and 'edit'. * @return string */ public function get_locale( $context = 'view' ) { return $this->get_prop( 'locale', $context ); } /** * Get note title. * * @param string $context What the value is for. Valid values are 'view' and 'edit'. * @return string */ public function get_title( $context = 'view' ) { return $this->get_prop( 'title', $context ); } /** * Get note content. * * @param string $context What the value is for. Valid values are 'view' and 'edit'. * @return string */ public function get_content( $context = 'view' ) { return $this->get_prop( 'content', $context ); } /** * Get note content data (i.e. values that would be needed for re-localization) * * @param string $context What the value is for. Valid values are 'view' and 'edit'. * @return array */ public function get_content_data( $context = 'view' ) { return $this->get_prop( 'content_data', $context ); } /** * Get note status. * * @param string $context What the value is for. Valid values are 'view' and 'edit'. * @return string */ public function get_status( $context = 'view' ) { return $this->get_prop( 'status', $context ); } /** * Get note source. * * @param string $context What the value is for. Valid values are 'view' and 'edit'. * @return string */ public function get_source( $context = 'view' ) { return $this->get_prop( 'source', $context ); } /** * Get date note was created. * * @param string $context What the value is for. Valid values are 'view' and 'edit'. * @return KKART_DateTime|NULL object if the date is set or null if there is no date. */ public function get_date_created( $context = 'view' ) { return $this->get_prop( 'date_created', $context ); } /** * Get date on which user should be reminded of the note (if any). * * @param string $context What the value is for. Valid values are 'view' and 'edit'. * @return KKART_DateTime|NULL object if the date is set or null if there is no date. */ public function get_date_reminder( $context = 'view' ) { return $this->get_prop( 'date_reminder', $context ); } /** * Get note snoozability. * * @param string $context What the value is for. Valid values are 'view' and 'edit'. * @return bool Whether or not the note can be snoozed. */ public function get_is_snoozable( $context = 'view' ) { return $this->get_prop( 'is_snoozable', $context ); } /** * Get actions on the note (if any). * * @param string $context What the value is for. Valid values are 'view' and 'edit'. * @return array */ public function get_actions( $context = 'view' ) { return $this->get_prop( 'actions', $context ); } /** * Get note layout (the old notes won't have one). * * @param string $context What the value is for. Valid values are 'view' and 'edit'. * @return array */ public function get_layout( $context = 'view' ) { return $this->get_prop( 'layout', $context ); } /** * Get note image (if any). * * @param string $context What the value is for. Valid values are 'view' and 'edit'. * @return array */ public function get_image( $context = 'view' ) { return $this->get_prop( 'image', $context ); } /** * Get deleted status. * * @param string $context What the value is for. Valid values are 'view' and 'edit'. * @return array */ public function get_is_deleted( $context = 'view' ) { return $this->get_prop( 'is_deleted', $context ); } /* |-------------------------------------------------------------------------- | Setters |-------------------------------------------------------------------------- | | Methods for setting note data. These should not update anything in the | database itself and should only change what is stored in the class | object. | */ /** * Set note name. * * @param string $name Note name. */ public function set_name( $name ) { // Don't allow empty names. if ( empty( $name ) ) { $this->error( 'admin_note_invalid_data', __( 'The admin note name prop cannot be empty.', 'kkart' ) ); } $this->set_prop( 'name', $name ); } /** * Set note type. * * @param string $type Note type. */ public function set_type( $type ) { if ( empty( $type ) ) { $this->error( 'admin_note_invalid_data', __( 'The admin note type prop cannot be empty.', 'kkart' ) ); } if ( ! in_array( $type, self::get_allowed_types(), true ) ) { $this->error( 'admin_note_invalid_data', sprintf( /* translators: %s: admin note type. */ __( 'The admin note type prop (%s) is not one of the supported types.', 'kkart' ), $type ) ); } $this->set_prop( 'type', $type ); } /** * Set note locale. * * @param string $locale Note locale. */ public function set_locale( $locale ) { if ( empty( $locale ) ) { $this->error( 'admin_note_invalid_data', __( 'The admin note locale prop cannot be empty.', 'kkart' ) ); } $this->set_prop( 'locale', $locale ); } /** * Set note title. * * @param string $title Note title. */ public function set_title( $title ) { if ( empty( $title ) ) { $this->error( 'admin_note_invalid_data', __( 'The admin note title prop cannot be empty.', 'kkart' ) ); } $this->set_prop( 'title', $title ); } /** * Set note icon (Deprecated). * * @param string $icon Note icon. */ public function set_icon( $icon ) { kkart_deprecated_function( 'set_icon', '4.3' ); } /** * Set note content. * * @param string $content Note content. */ public function set_content( $content ) { $allowed_html = array( 'br' => array(), 'em' => array(), 'strong' => array(), 'a' => array( 'href' => true, 'rel' => true, 'name' => true, 'target' => true, 'download' => array( 'valueless' => 'y', ), ), 'p' => array(), ); $content = wp_kses( $content, $allowed_html ); if ( empty( $content ) ) { $this->error( 'admin_note_invalid_data', __( 'The admin note content prop cannot be empty.', 'kkart' ) ); } $this->set_prop( 'content', $content ); } /** * Set note data for potential re-localization. * * @todo Set a default empty array? https://github.com/kkart/kkart-admin/pull/1763#pullrequestreview-212442921. * @param object $content_data Note data. */ public function set_content_data( $content_data ) { $allowed_type = false; // Make sure $content_data is stdClass Object or an array. if ( ! ( $content_data instanceof \stdClass ) ) { $this->error( 'admin_note_invalid_data', __( 'The admin note content_data prop must be an instance of stdClass.', 'kkart' ) ); } $this->set_prop( 'content_data', $content_data ); } /** * Set note status. * * @param string $status Note status. */ public function set_status( $status ) { if ( empty( $status ) ) { $this->error( 'admin_note_invalid_data', __( 'The admin note status prop cannot be empty.', 'kkart' ) ); } if ( ! in_array( $status, self::get_allowed_statuses(), true ) ) { $this->error( 'admin_note_invalid_data', sprintf( /* translators: %s: admin note status property. */ __( 'The admin note status prop (%s) is not one of the supported statuses.', 'kkart' ), $status ) ); } $this->set_prop( 'status', $status ); } /** * Set note source. * * @param string $source Note source. */ public function set_source( $source ) { if ( empty( $source ) ) { $this->error( 'admin_note_invalid_data', __( 'The admin note source prop cannot be empty.', 'kkart' ) ); } $this->set_prop( 'source', $source ); } /** * Set date note was created. NULL is not allowed * * @param string|integer $date UTC timestamp, or ISO 8601 DateTime. If the DateTime string has no timezone or offset, WordPress site timezone will be assumed. */ public function set_date_created( $date ) { if ( empty( $date ) ) { $this->error( 'admin_note_invalid_data', __( 'The admin note date prop cannot be empty.', 'kkart' ) ); } $this->set_date_prop( 'date_created', $date ); } /** * Set date admin should be reminded of note. NULL IS allowed * * @param string|integer|null $date UTC timestamp, or ISO 8601 DateTime. If the DateTime string has no timezone or offset, WordPress site timezone will be assumed. Null if there is no date. */ public function set_date_reminder( $date ) { $this->set_date_prop( 'date_reminder', $date ); } /** * Set note snoozability. * * @param bool $is_snoozable Whether or not the note can be snoozed. */ public function set_is_snoozable( $is_snoozable ) { return $this->set_prop( 'is_snoozable', $is_snoozable ); } /** * Clear actions from a note. */ public function clear_actions() { $this->set_prop( 'actions', array() ); } /** * Set note layout. * * @param string $layout Note layout. */ public function set_layout( $layout ) { // If we don't receive a layout we will set it by default as "plain". if ( empty( $layout ) ) { $layout = 'plain'; } $valid_layouts = array( 'banner', 'plain', 'thumbnail' ); if ( in_array( $layout, $valid_layouts, true ) ) { $this->set_prop( 'layout', $layout ); } else { $this->error( 'admin_note_invalid_data', __( 'The admin note layout has a wrong prop value.', 'kkart' ) ); } } /** * Set note image. * * @param string $image Note image. */ public function set_image( $image ) { $this->set_prop( 'image', $image ); } /** * Set note deleted status. NULL is not allowed * * @param bool $is_deleted Note deleted status. */ public function set_is_deleted( $is_deleted ) { $this->set_prop( 'is_deleted', $is_deleted ); } /** * Add an action to the note * * @param string $name Action name (not presented to user). * @param string $label Action label (presented as button label). * @param string $url Action URL, if navigation needed. Optional. * @param string $status Status to transition parent Note to upon click. Defaults to 'actioned'. * @param boolean $primary Whether or not this is the primary action. Defaults to false. * @param string $actioned_text The label to display after the note has been actioned but before it is dismissed in the UI. */ public function add_action( $name, $label, $url = '', $status = self::E_KKART_ADMIN_NOTE_ACTIONED, $primary = false, $actioned_text = '' ) { $name = kkart_clean( $name ); $label = kkart_clean( $label ); $query = esc_url_raw( $url ); $status = kkart_clean( $status ); $primary = (bool) $primary; $actioned_text = kkart_clean( $actioned_text ); if ( empty( $name ) ) { $this->error( 'admin_note_invalid_data', __( 'The admin note action name prop cannot be empty.', 'kkart' ) ); } if ( empty( $label ) ) { $this->error( 'admin_note_invalid_data', __( 'The admin note action label prop cannot be empty.', 'kkart' ) ); } $action = array( 'name' => $name, 'label' => $label, 'query' => $query, 'status' => $status, 'primary' => $primary, 'actioned_text' => $actioned_text, ); $note_actions = $this->get_prop( 'actions', 'edit' ); $note_actions[] = (object) $action; $this->set_prop( 'actions', $note_actions ); } /** * Set actions on a note. * * @param array $actions Note actions. */ public function set_actions( $actions ) { $this->set_prop( 'actions', $actions ); } }
Edit
Rename
Chmod
Delete
FILE
FOLDER
Name
Size
Permission
Action
ChooseNiche.php
2287 bytes
0644
ConfirmTaxSettings.php
1166 bytes
0644
CouponPageMoved.php
3540 bytes
0644
CustomizeStoreWithBlocks.php
2199 bytes
0644
DataStore.php
13209 bytes
0644
DeactivatePlugin.php
2209 bytes
0644
DeprecatedNotes.php
20450 bytes
0644
DrawAttention.php
2132 bytes
0644
EUVATNumber.php
1534 bytes
0644
EditProductsOnTheMove.php
1558 bytes
0644
FirstProduct.php
2026 bytes
0644
GivingFeedbackNotes.php
1469 bytes
0644
GoogleAdsAndMarketing.php
2754 bytes
0644
HistoricalData.php
2104 bytes
0644
HomeScreenFeedback.php
2133 bytes
0644
InsightFirstSale.php
1625 bytes
0644
InstallJPAndKKARTSPlugins.php
3778 bytes
0644
KkartPayments.php
5353 bytes
0644
KkartSubscriptions.php
1675 bytes
0644
LaunchChecklist.php
1525 bytes
0644
ManageOrdersOnTheGo.php
1467 bytes
0644
Marketing.php
1094 bytes
0644
MigrateFromShopify.php
2059 bytes
0644
MobileApp.php
1234 bytes
0644
NavigationFeedback.php
1182 bytes
0644
NavigationFeedbackFollowUp.php
1722 bytes
0644
NeedSomeInspiration.php
1829 bytes
0644
NewSalesRecord.php
4005 bytes
0644
Note.php
16968 bytes
0644
NoteTraits.php
2857 bytes
0644
Notes.php
8336 bytes
0644
OnboardingEmailMarketing.php
1193 bytes
0644
OnboardingPayments.php
1591 bytes
0644
OnlineClothingStore.php
2570 bytes
0644
OrderMilestones.php
8098 bytes
0644
PerformanceOnMobile.php
1519 bytes
0644
PersonalizeStore.php
1797 bytes
0644
RealTimeOrderAlerts.php
1436 bytes
0644
ReviewShippingSettings.php
1479 bytes
0644
SellingOnlineCourses.php
2256 bytes
0644
SetUpAdditionalPaymentTypes.php
2602 bytes
0644
StartDropshippingBusiness.php
2336 bytes
0644
TestCheckout.php
2627 bytes
0644
TrackingOptIn.php
2613 bytes
0644
WooSubscriptionsNotes.php
13825 bytes
0644
N4ST4R_ID | Naxtarrr