: str_replace(): Passing null to parameter #2 ($replace) of type array|string is deprecated in
if ( ! class_exists( 'PPW_API' ) ) {
'PASSWORD_UPDATE_SUCCESSFULLY' => 'Great! You’ve updated the password successfully.',
'PASSWORD_UPDATE_FAILURE' => 'Opps! Something went wrong. Please try again.',
public function register_rest_routes() {
'check-content-password/(?P<id>\d+)',
'ppwp_check_content_password',
'description' => __( 'Post ID' ),
'sanitize_callback' => 'absint',
'description' => __( 'Page index' ),
'sanitize_callback' => 'absint',
'description' => __( 'Form index' ),
'sanitize_callback' => 'absint',
'permission_callback' => '__return_true',
'ppwp_get_master_passwords',
'permission_callback' => array( $this, 'can_access' ),
'permission_callback' => array( $this, 'can_access' ),
'permission_callback' => array( $this, 'can_access' ),
'master-passwords/status',
'permission_callback' => array( $this, 'can_access' ),
'add_new_master_password',
'permission_callback' => array( $this, 'can_access' ),
'/master-passwords/bulk-delete',
'bulk_delete_master_passwords',
'permission_callback' => array( $this, 'can_access' ),
'/master-passwords/all-expired-delete',
'all_expired_delete_master_passwords',
'permission_callback' => array( $this, 'can_access' ),
'permission_callback' => '__return_true',
'pcp/(?P<id>\d+)/settings',
'permission_callback' => array( $this, 'can_access' ),
'show_in_index' => false,
'pcp/(?P<id>\d+)/settings',
'permission_callback' => array( $this, 'can_access' ),
'show_in_index' => false,
public function can_access() {
return ppw_allow_manage_passwords();
public function ppwp_get_master_passwords() {
$ppwp_db = new PPW_Repository_Passwords();
'result' => $ppwp_db->get_master_passwords_info(),
* @param string $days_to_expired Number of days.
* @throws Exception Emits Exception in case of an error with DateTime.
private function get_expired_time_stamp( $days_to_expired ) {
$curr_date = new DateTime();
$expired_date = $curr_date->modify( intval( $days_to_expired ) . ' day' );
return $expired_date->getTimestamp();
* @param WP_REST_Request $request The REST API request to process.
* @return WP_REST_Response The REST response.
* @throws Exception Exception.
public function add_new_master_password( $request ) {
$passwords = $request->get_param( 'password' );
$usage_limit = $request->get_param( 'usage_limit' );
$expired_dates = $request->get_param( 'expired_dates' );
$role_type = $request->get_param( 'role_type' );
$roles_selected = $request->get_param( 'roles_selected' );
$label = $request->get_param( 'label' );
$post_types = $request->get_param( 'post_types' );
$protection_types = $request->get_param( 'protection_types' );
$ppwp_repo = new PPW_Repository_Passwords();
foreach ( $passwords as $password ) {
if ( $ppwp_repo->find_by_master_password( $password ) || '' === $password ) {
$roles = PPW_Constants::PPW_MASTER_GLOBAL;
if ( 'roles' === $role_type ) {
$roles = $roles_selected;
foreach ( $passwords as $password ) {
$is_added = $ppwp_repo->add_new_password(
'created_time' => time(),
'campaign_app_type' => $roles,
'usage_limit' => $usage_limit ? $usage_limit : null,
'expired_date' => $expired_dates ? $this->get_expired_time_stamp( $expired_dates ) : null,
'post_types' => $post_types,
'protection_types' => $protection_types
} catch ( Exception $exception ) {
'message' => $exception->getMessage(),
* @param object $request Request from body.
* @return WP_REST_Response The REST response.
public function delete_password( $request ) {
$id = $request->get_param( 'id' );
$ppwp_repo = new PPW_Repository_Passwords();
$is_deleted = $ppwp_repo->delete( $id );
* Bulk delete master password.
* @param object $request Request from body.
* @return WP_REST_Response The REST response.
public function bulk_delete_master_passwords( $request ) {
$ids = $request->get_param( 'ids' );
$ppwp_repo = new PPW_Repository_Passwords();
$is_deleted = $ppwp_repo->bulk_delete_passwords( $ids );
'message' => 'Great! You’ve deleted the passwords successfully.'
* All Expired delete master password.
* @param object $request Request from body.
* @return WP_REST_Response The REST response.
public function all_expired_delete_master_passwords( $request ) {
$ids = $request->get_param( 'ids' );
$campaign_app_type='master_';
$ppwp_repo = new PPW_Repository_Passwords();
$is_deleted = $ppwp_repo->delete_all_expired_password($ids, $campaign_app_type);
'message' => 'Great! You’ve deleted all the expired passwords successfully.'
'message' => 'An error occurred, or no expired passwords were detected.'
* @param object $request Request from body.
* @return WP_REST_Response The REST response.
public function update_password( $request ) {
$data = $request->get_param( 'data' );
$id = $request->get_param( 'id' );
$ppwp_repo = new PPW_Repository_Passwords();
$is_updated = $ppwp_repo->update_password(
'message' => self::MESSAGES['PASSWORD_UPDATE_SUCCESSFULLY'],
'message' => self::MESSAGES['PASSWORD_UPDATE_FAILURE'],
* @param object $request Request from body.
* @return WP_REST_Response The REST response.
public function change_status( $request ) {
$id = $request->get_param( 'id' );
$is_activated = $request->get_param( 'is_activated' );
$ppwp_repo = new PPW_Repository_Passwords();
$is_updated = $ppwp_repo->update_password(
'is_activated' => $is_activated,
'message' => self::MESSAGES['PASSWORD_UPDATE_SUCCESSFULLY'],
'message' => self::MESSAGES['PASSWORD_UPDATE_FAILURE'],
* Checking the content passwords
* @param array $data Post data.
public function ppwp_check_content_password( $data ) {
do_action( PPW_Constants::HOOK_RESTRICT_CONTENT_BEFORE_CHECK_PWD, $data );
'message' => _x( apply_filters( PPW_Constants::HOOK_RESTRICT_CONTENT_ERROR_MESSAGE, PPW_Constants::DEFAULT_WRONG_PASSWORD_MESSAGE ), PPW_Constants::CONTEXT_PCP_PASSWORD_FORM, PPW_Constants::DOMAIN ),
$is_valid_data = apply_filters( PPW_Constants::HOOK_SHORT_CODE_VALID_POST_DATA, $this->is_valid_data_content_password( $data ) );
if ( ! $is_valid_data ) {
$post = get_post( $data['id'] );
if ( is_null( $post ) ) {