'user', 'id' => $user_id]); } /** * Daily first login free points. * * @param string $user_login * @param \WP_User $user */ public function on_wp_login($user_login, $user = null): void { unset($user_login); $user_id = $user instanceof \WP_User ? (int) $user->ID : 0; if ($user_id <= 0 || !class_exists('AKSRT\\Credits\\PointsFree')) { return; } $today = (new \DateTimeImmutable('today', wp_timezone()))->format('Y-m-d'); $last = (string) get_user_meta($user_id, PointsFree::META_LOGIN, true); if ($last === $today) { return; } $granted = PointsFree::grant($user_id, 'login', 0, ['type' => 'user', 'id' => $user_id]); if (!is_wp_error($granted) && $granted >= 0) { update_user_meta($user_id, PointsFree::META_LOGIN, $today); } } /** * @param string $new_status * @param string $old_status * @param \WP_Post $post */ public function on_post_status($new_status, $old_status, $post): void { if (!($post instanceof \WP_Post) || $post->post_type !== 'post') { return; } if ($new_status !== 'publish' || $old_status === 'publish') { return; } $user_id = (int) $post->post_author; if ($user_id <= 0 || !class_exists('AKSRT\\Credits\\PointsFree')) { return; } if (get_post_meta($post->ID, 'aksrt_credit_post_rewarded', true)) { return; } $granted = PointsFree::grant($user_id, 'post_new', 0, ['type' => 'post', 'id' => (int) $post->ID]); if (!is_wp_error($granted) && $granted > 0) { update_post_meta($post->ID, 'aksrt_credit_post_rewarded', 1); } } public function on_comment_inserted(int $comment_id, $comment): void { $cfg = class_exists('\AKSRT\Settings\Settings') ? \AKSRT\Settings\Settings::get_credit_settings() : []; $reward = is_array($cfg['comment_reward'] ?? null) ? $cfg['comment_reward'] : []; // Legacy on_approved=true → wait for transition; default true. $on_approved = !isset($reward['on_approved']) || !empty($reward['on_approved']); if ($on_approved) { return; } $comment = $comment instanceof \WP_Comment ? $comment : get_comment($comment_id); if (!($comment instanceof \WP_Comment) || (int) $comment->comment_approved !== 1) { return; } $this->reward_comment($comment); } public function on_comment_transition($new_status, $old_status, $comment): void { unset($old_status); if ($new_status !== 'approved' || !($comment instanceof \WP_Comment)) { return; } $this->reward_comment($comment); } private function reward_comment(\WP_Comment $comment): void { $user_id = (int) $comment->user_id; if ($user_id <= 0 || !class_exists('AKSRT\\Credits\\PointsFree')) { return; } if (get_comment_meta($comment->comment_ID, 'aksrt_credit_rewarded', true)) { return; } $cfg = class_exists('\AKSRT\Settings\Settings') ? \AKSRT\Settings\Settings::get_credit_settings() : []; $reward = is_array($cfg['comment_reward'] ?? null) ? $cfg['comment_reward'] : []; $min_length = (int) ($reward['min_length'] ?? 0); if ($min_length > 0 && mb_strlen(wp_strip_all_tags((string) $comment->comment_content)) < $min_length) { return; } $granted = PointsFree::grant($user_id, 'comment_new', 0, [ 'type' => 'comment', 'id' => (int) $comment->comment_ID, ]); if (!is_wp_error($granted)) { update_comment_meta($comment->comment_ID, 'aksrt_credit_rewarded', $granted > 0 ? 1 : 'capped'); } } /** * @param int $post_id * @param int $actor_id liker * @param bool $active */ public function on_post_liked(int $post_id, int $actor_id, bool $active): void { if (!$active || $post_id <= 0 || !class_exists('AKSRT\\Credits\\PointsFree')) { return; } $post = get_post($post_id); if (!$post || $post->post_type !== 'post') { return; } $author = (int) $post->post_author; if ($author <= 0 || $author === $actor_id) { return; } PointsFree::grant($author, 'post_like', 0, ['type' => 'post', 'id' => $post_id]); } public function on_post_favorited(int $post_id, int $actor_id, bool $active): void { if (!$active || $post_id <= 0 || !class_exists('AKSRT\\Credits\\PointsFree')) { return; } $post = get_post($post_id); if (!$post || $post->post_type !== 'post') { return; } $author = (int) $post->post_author; if ($author <= 0 || $author === $actor_id) { return; } PointsFree::grant($author, 'post_favorite', 0, ['type' => 'post', 'id' => $post_id]); } public function on_comment_liked(int $comment_id, int $actor_id, bool $active): void { if (!$active || $comment_id <= 0 || !class_exists('AKSRT\\Credits\\PointsFree')) { return; } $comment = get_comment($comment_id); if (!$comment) { return; } $author = (int) $comment->user_id; if ($author <= 0 || $author === $actor_id) { return; } PointsFree::grant($author, 'comment_like', 0, ['type' => 'comment', 'id' => $comment_id]); } public function on_user_followed(int $follower_id, int $following_id): void { if ($following_id <= 0 || $follower_id === $following_id || !class_exists('AKSRT\\Credits\\PointsFree')) { return; } PointsFree::grant($following_id, 'followed', 0, ['type' => 'user', 'id' => $follower_id]); } }