| |
| <?php
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| if (!defined('ABSPATH')) {
|
| exit;
|
| }
|
|
|
|
|
| add_action('init', 'mst_register_weekly_summary_post_type', 6);
|
|
|
| function mst_register_weekly_summary_post_type() {
|
| $labels = [
|
| 'name' => _x('Weekly Summaries', 'Post type general name', 'mst-weekly'),
|
| 'singular_name' => _x('Weekly Summary', 'Post type singular name', 'mst-weekly'),
|
| 'menu_name' => _x('Weekly Summaries', 'Admin Menu text', 'mst-weekly'),
|
| 'name_admin_bar' => _x('Weekly Summary', 'Add New on Toolbar', 'mst-weekly'),
|
| 'add_new' => __('Add New Summary', 'mst-weekly'),
|
| 'add_new_item' => __('Add New Weekly Summary', 'mst-weekly'),
|
| 'new_item' => __('New Summary', 'mst-weekly'),
|
| 'edit_item' => __('Edit Weekly Summary', 'mst-weekly'),
|
| 'view_item' => __('View Summary', 'mst-weekly'),
|
| 'all_items' => __('All Summaries', 'mst-weekly'),
|
| 'search_items' => __('Search Summaries', 'mst-weekly'),
|
| 'parent_item_colon' => __('Parent Case:', 'mst-weekly'),
|
| 'not_found' => __('No summaries found.', 'mst-weekly'),
|
| 'not_found_in_trash' => __('No summaries found in Trash.', 'mst-weekly'),
|
| 'archives' => _x('Summary Archives', 'Archive label', 'mst-weekly'),
|
| ];
|
|
|
| $args = [
|
| 'labels' => $labels,
|
| 'description' => __('MST Weekly Case Summaries - hierarchical children of mst_case posts', 'mst-weekly'),
|
|
|
|
|
| 'public' => false,
|
| 'publicly_queryable' => true,
|
| 'show_ui' => true,
|
| 'show_in_menu' => true,
|
| 'show_in_admin_bar' => true,
|
| 'show_in_nav_menus' => false,
|
| 'exclude_from_search'=> true,
|
|
|
|
|
| 'has_archive' => false,
|
| 'rewrite' => [
|
| 'slug' => 'weekly-summary',
|
| 'with_front' => false,
|
| 'feeds' => false,
|
| 'pages' => false,
|
| ],
|
| 'query_var' => 'weekly_summary',
|
|
|
|
|
| 'capability_type' => 'post',
|
| 'map_meta_cap' => true,
|
|
|
|
|
| 'hierarchical' => true,
|
| 'menu_position' => 21,
|
| 'menu_icon' => 'dashicons-calendar-alt',
|
|
|
| 'supports' => [
|
| 'title',
|
| 'author',
|
| 'custom-fields',
|
| 'revisions',
|
| 'comments',
|
| 'page-attributes',
|
| ],
|
|
|
|
|
| 'show_in_rest' => true,
|
| 'rest_base' => 'weekly-summaries',
|
| 'rest_namespace' => 'mst/v1',
|
|
|
|
|
| 'can_export' => true,
|
| 'delete_with_user' => false,
|
| '_builtin' => false,
|
| '_edit_link' => 'post.php?post=%d',
|
| ];
|
|
|
| register_post_type('weekly_case_summary', $args);
|
| }
|
|
|
|
|
| add_action('init', 'mst_register_weekly_summary_meta_fields', 10);
|
|
|
| function mst_register_weekly_summary_meta_fields() {
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| register_post_meta('weekly_case_summary', 'parent_case_id', [
|
| 'type' => 'integer',
|
| 'description' => 'Parent MST Case ID (same as post_parent, for query convenience)',
|
| 'single' => true,
|
| 'show_in_rest' => true,
|
| 'sanitize_callback' => 'absint',
|
| 'auth_callback' => '__return_true',
|
| ]);
|
|
|
|
|
| register_post_meta('weekly_case_summary', 'msti_number', [
|
| 'type' => 'string',
|
| 'description' => 'MSTI case number (inherited from parent)',
|
| 'single' => true,
|
| 'show_in_rest' => true,
|
| 'sanitize_callback' => 'sanitize_text_field',
|
| 'auth_callback' => '__return_true',
|
| ]);
|
|
|
|
|
|
|
|
|
|
|
| register_post_meta('weekly_case_summary', 'treatment_week', [
|
| 'type' => 'integer',
|
| 'description' => 'Week number in treatment (1-52+)',
|
| 'single' => true,
|
| 'show_in_rest' => true,
|
| 'sanitize_callback' => 'absint',
|
| 'auth_callback' => '__return_true',
|
| ]);
|
|
|
| register_post_meta('weekly_case_summary', 'week_start_date', [
|
| 'type' => 'string',
|
| 'description' => 'Week start date (Y-m-d format)',
|
| 'single' => true,
|
| 'show_in_rest' => true,
|
| 'sanitize_callback' => 'sanitize_text_field',
|
| ]);
|
|
|
| register_post_meta('weekly_case_summary', 'week_end_date', [
|
| 'type' => 'string',
|
| 'description' => 'Week end date (Y-m-d format)',
|
| 'single' => true,
|
| 'show_in_rest' => true,
|
| 'sanitize_callback' => 'sanitize_text_field',
|
| ]);
|
|
|
|
|
|
|
|
|
|
|
| register_post_meta('weekly_case_summary', 'overarching_goals_reference', [
|
| 'type' => 'string',
|
| 'description' => 'Reference to overarching goals (from Form 240 Field 132)',
|
| 'single' => true,
|
| 'show_in_rest' => true,
|
| 'sanitize_callback' => 'wp_kses_post',
|
| ]);
|
|
|
|
|
|
|
|
|
|
|
| register_post_meta('weekly_case_summary', 'fit_assessment_summary', [
|
| 'type' => 'string',
|
| 'description' => 'Current fit factors and drivers',
|
| 'single' => true,
|
| 'show_in_rest' => true,
|
| 'sanitize_callback' => 'wp_kses_post',
|
| ]);
|
|
|
| register_post_meta('weekly_case_summary', 'clinical_hypothesis_update', [
|
| 'type' => 'string',
|
| 'description' => 'Updated clinical hypothesis',
|
| 'single' => true,
|
| 'show_in_rest' => true,
|
| 'sanitize_callback' => 'wp_kses_post',
|
| ]);
|
|
|
| register_post_meta('weekly_case_summary', 'hypothesis_testing_results', [
|
| 'type' => 'string',
|
| 'description' => 'Results of hypothesis testing this week',
|
| 'single' => true,
|
| 'show_in_rest' => true,
|
| 'sanitize_callback' => 'wp_kses_post',
|
| ]);
|
|
|
| register_post_meta('weekly_case_summary', 'prioritized_drivers', [
|
| 'type' => 'string',
|
| 'description' => 'Prioritized drivers being targeted',
|
| 'single' => true,
|
| 'show_in_rest' => true,
|
| 'sanitize_callback' => 'wp_kses_post',
|
| ]);
|
|
|
|
|
|
|
|
|
|
|
| register_post_meta('weekly_case_summary', 'previous_goals_summary', [
|
| 'type' => 'string',
|
| 'description' => 'Previous week intermediary goals',
|
| 'single' => true,
|
| 'show_in_rest' => true,
|
| 'sanitize_callback' => 'wp_kses_post',
|
| ]);
|
|
|
| register_post_meta('weekly_case_summary', 'previous_goals_status', [
|
| 'type' => 'string',
|
| 'description' => 'Previous goals status (Met/Partially/Not)',
|
| 'single' => true,
|
| 'show_in_rest' => true,
|
| 'sanitize_callback' => 'wp_kses_post',
|
| ]);
|
|
|
| register_post_meta('weekly_case_summary', 'goal_achievement_percentage', [
|
| 'type' => 'integer',
|
| 'description' => 'Overall goal achievement this week (0-100)',
|
| 'single' => true,
|
| 'show_in_rest' => true,
|
| 'sanitize_callback' => 'absint',
|
| ]);
|
|
|
|
|
|
|
|
|
|
|
| register_post_meta('weekly_case_summary', 'advances_in_treatment', [
|
| 'type' => 'string',
|
| 'description' => 'Progress and advances made this week',
|
| 'single' => true,
|
| 'show_in_rest' => true,
|
| 'sanitize_callback' => 'wp_kses_post',
|
| ]);
|
|
|
| register_post_meta('weekly_case_summary', 'barriers_to_goals', [
|
| 'type' => 'string',
|
| 'description' => 'Barriers encountered this week',
|
| 'single' => true,
|
| 'show_in_rest' => true,
|
| 'sanitize_callback' => 'wp_kses_post',
|
| ]);
|
|
|
| register_post_meta('weekly_case_summary', 'family_engagement_level', [
|
| 'type' => 'integer',
|
| 'description' => 'Overall family engagement level (1-5)',
|
| 'single' => true,
|
| 'show_in_rest' => true,
|
| 'sanitize_callback' => 'absint',
|
| ]);
|
|
|
| register_post_meta('weekly_case_summary', 'youth_engagement_level', [
|
| 'type' => 'integer',
|
| 'description' => 'Youth engagement level (1-5)',
|
| 'single' => true,
|
| 'show_in_rest' => true,
|
| 'sanitize_callback' => 'absint',
|
| ]);
|
|
|
|
|
|
|
|
|
|
|
| register_post_meta('weekly_case_summary', 'tam_score', [
|
| 'type' => 'number',
|
| 'description' => 'Therapist Adherence Measure score (1-5)',
|
| 'single' => true,
|
| 'show_in_rest' => true,
|
| ]);
|
|
|
| register_post_meta('weekly_case_summary', 'sam_score', [
|
| 'type' => 'number',
|
| 'description' => 'Supervisor Adherence Measure score (1-5)',
|
| 'single' => true,
|
| 'show_in_rest' => true,
|
| ]);
|
|
|
| register_post_meta('weekly_case_summary', 'mst_principles_applied', [
|
| 'type' => 'string',
|
| 'description' => 'MST principles applied this week (serialized)',
|
| 'single' => true,
|
| 'show_in_rest' => true,
|
| 'sanitize_callback' => 'sanitize_text_field',
|
| ]);
|
|
|
| register_post_meta('weekly_case_summary', 'behavioral_outcomes', [
|
| 'type' => 'string',
|
| 'description' => 'Measurable behavioral outcomes',
|
| 'single' => true,
|
| 'show_in_rest' => true,
|
| 'sanitize_callback' => 'wp_kses_post',
|
| ]);
|
|
|
| register_post_meta('weekly_case_summary', 'progress_toward_discharge', [
|
| 'type' => 'string',
|
| 'description' => 'Progress toward discharge criteria',
|
| 'single' => true,
|
| 'show_in_rest' => true,
|
| 'sanitize_callback' => 'wp_kses_post',
|
| ]);
|
|
|
|
|
|
|
|
|
|
|
| register_post_meta('weekly_case_summary', 'new_intermediary_goals', [
|
| 'type' => 'string',
|
| 'description' => 'New intermediary goals for next week',
|
| 'single' => true,
|
| 'show_in_rest' => true,
|
| 'sanitize_callback' => 'wp_kses_post',
|
| ]);
|
|
|
| register_post_meta('weekly_case_summary', 'next_week_focus_areas', [
|
| 'type' => 'string',
|
| 'description' => 'Focus areas for next week (serialized)',
|
| 'single' => true,
|
| 'show_in_rest' => true,
|
| 'sanitize_callback' => 'sanitize_text_field',
|
| ]);
|
|
|
| register_post_meta('weekly_case_summary', 'intervention_strategies', [
|
| 'type' => 'string',
|
| 'description' => 'Specific intervention strategies planned',
|
| 'single' => true,
|
| 'show_in_rest' => true,
|
| 'sanitize_callback' => 'wp_kses_post',
|
| ]);
|
|
|
| register_post_meta('weekly_case_summary', 'homework_assigned', [
|
| 'type' => 'string',
|
| 'description' => 'Homework/tasks assigned to family',
|
| 'single' => true,
|
| 'show_in_rest' => true,
|
| 'sanitize_callback' => 'wp_kses_post',
|
| ]);
|
|
|
|
|
|
|
|
|
|
|
| register_post_meta('weekly_case_summary', 'safety_status_this_week', [
|
| 'type' => 'string',
|
| 'description' => 'Safety status for this week',
|
| 'single' => true,
|
| 'show_in_rest' => true,
|
| 'sanitize_callback' => 'sanitize_text_field',
|
| ]);
|
|
|
| register_post_meta('weekly_case_summary', 'safety_concerns_summary', [
|
| 'type' => 'string',
|
| 'description' => 'Summary of safety concerns',
|
| 'single' => true,
|
| 'show_in_rest' => true,
|
| 'sanitize_callback' => 'wp_kses_post',
|
| ]);
|
|
|
| register_post_meta('weekly_case_summary', 'safety_plan_updates', [
|
| 'type' => 'string',
|
| 'description' => 'Updates to safety plan',
|
| 'single' => true,
|
| 'show_in_rest' => true,
|
| 'sanitize_callback' => 'wp_kses_post',
|
| ]);
|
|
|
| register_post_meta('weekly_case_summary', 'crisis_events_this_week', [
|
| 'type' => 'string',
|
| 'description' => 'Any crisis events or escalations',
|
| 'single' => true,
|
| 'show_in_rest' => true,
|
| 'sanitize_callback' => 'wp_kses_post',
|
| ]);
|
|
|
|
|
|
|
|
|
|
|
| register_post_meta('weekly_case_summary', 'contact_logs_summary', [
|
| 'type' => 'string',
|
| 'description' => 'Auto-aggregated summary from Form 301 entries (pre-populated from ACF staging field)',
|
| 'single' => true,
|
| 'show_in_rest' => true,
|
| 'sanitize_callback' => 'wp_kses_post',
|
| ]);
|
|
|
| register_post_meta('weekly_case_summary', 'total_contact_hours', [
|
| 'type' => 'number',
|
| 'description' => 'Total contact hours this week (from Form 301 aggregation)',
|
| 'single' => true,
|
| 'show_in_rest' => true,
|
| ]);
|
|
|
| register_post_meta('weekly_case_summary', 'contact_count', [
|
| 'type' => 'integer',
|
| 'description' => 'Number of contacts this week',
|
| 'single' => true,
|
| 'show_in_rest' => true,
|
| 'sanitize_callback' => 'absint',
|
| ]);
|
|
|
| register_post_meta('weekly_case_summary', 'face_to_face_hours', [
|
| 'type' => 'number',
|
| 'description' => 'Face-to-face contact hours',
|
| 'single' => true,
|
| 'show_in_rest' => true,
|
| ]);
|
|
|
| register_post_meta('weekly_case_summary', 'phone_contact_hours', [
|
| 'type' => 'number',
|
| 'description' => 'Phone contact hours',
|
| 'single' => true,
|
| 'show_in_rest' => true,
|
| ]);
|
|
|
|
|
|
|
|
|
|
|
| register_post_meta('weekly_case_summary', 'ai_generated_summary', [
|
| 'type' => 'string',
|
| 'description' => 'AI-generated case summary (from OpenAI)',
|
| 'single' => true,
|
| 'show_in_rest' => true,
|
| 'sanitize_callback' => 'wp_kses_post',
|
| ]);
|
|
|
| register_post_meta('weekly_case_summary', 'ai_insights', [
|
| 'type' => 'string',
|
| 'description' => 'AI-generated insights and patterns',
|
| 'single' => true,
|
| 'show_in_rest' => true,
|
| 'sanitize_callback' => 'wp_kses_post',
|
| ]);
|
|
|
| register_post_meta('weekly_case_summary', 'ai_recommendations', [
|
| 'type' => 'string',
|
| 'description' => 'AI-generated recommendations',
|
| 'single' => true,
|
| 'show_in_rest' => true,
|
| 'sanitize_callback' => 'wp_kses_post',
|
| ]);
|
|
|
|
|
|
|
|
|
|
|
| register_post_meta('weekly_case_summary', 'summary_status', [
|
| 'type' => 'string',
|
| 'description' => 'Workflow status (Pending/Reviewed/Approved)',
|
| 'single' => true,
|
| 'show_in_rest' => true,
|
| 'default' => 'Pending Supervisor Review',
|
| 'sanitize_callback' => 'sanitize_text_field',
|
| ]);
|
|
|
| register_post_meta('weekly_case_summary', 'supervisor_reviewed_date', [
|
| 'type' => 'string',
|
| 'description' => 'Date supervisor reviewed (Y-m-d H:i:s)',
|
| 'single' => true,
|
| 'show_in_rest' => true,
|
| 'sanitize_callback' => 'sanitize_text_field',
|
| ]);
|
|
|
| register_post_meta('weekly_case_summary', 'supervisor_comments', [
|
| 'type' => 'string',
|
| 'description' => 'Supervisor feedback and comments',
|
| 'single' => true,
|
| 'show_in_rest' => true,
|
| 'sanitize_callback' => 'wp_kses_post',
|
| ]);
|
|
|
| register_post_meta('weekly_case_summary', 'expert_consultation_needed', [
|
| 'type' => 'string',
|
| 'description' => 'Expert consultation needed (Yes/No)',
|
| 'single' => true,
|
| 'show_in_rest' => true,
|
| 'sanitize_callback' => 'sanitize_text_field',
|
| ]);
|
|
|
| register_post_meta('weekly_case_summary', 'consultation_details', [
|
| 'type' => 'string',
|
| 'description' => 'Consultation request details',
|
| 'single' => true,
|
| 'show_in_rest' => true,
|
| 'sanitize_callback' => 'wp_kses_post',
|
| ]);
|
|
|
| register_post_meta('weekly_case_summary', 'gravity_form_entry_id', [
|
| 'type' => 'integer',
|
| 'description' => 'Form 302 entry ID that created this summary',
|
| 'single' => true,
|
| 'show_in_rest' => true,
|
| 'sanitize_callback' => 'absint',
|
| ]);
|
| }
|
|
|
|
|
|
|
|
|
|
|
| add_filter('manage_weekly_case_summary_posts_columns', 'mst_weekly_summary_admin_columns');
|
| add_action('manage_weekly_case_summary_posts_custom_column', 'mst_weekly_summary_admin_column_content', 10, 2);
|
| add_filter('manage_edit-weekly_case_summary_sortable_columns', 'mst_weekly_summary_sortable_columns');
|
|
|
| function mst_weekly_summary_admin_columns($columns) {
|
| $new_columns = [];
|
| $new_columns['cb'] = $columns['cb'];
|
| $new_columns['msti_number'] = __('<strong>MSTI #</strong>', 'mst-weekly');
|
| $new_columns['treatment_week'] = __('<strong>Week</strong>', 'mst-weekly');
|
| $new_columns['title'] = __('Youth Name', 'mst-weekly');
|
| $new_columns['week_period'] = __('Week Period', 'mst-weekly');
|
| $new_columns['parent_case'] = __('Parent Case', 'mst-weekly');
|
| $new_columns['therapist'] = __('Therapist', 'mst-weekly');
|
| $new_columns['summary_status'] = __('Status', 'mst-weekly');
|
| $new_columns['contact_hours'] = __('Contact Hours', 'mst-weekly');
|
| $new_columns['tam_sam'] = __('TAM/SAM', 'mst-weekly');
|
| $new_columns['date'] = __('Submitted', 'mst-weekly');
|
|
|
| return $new_columns;
|
| }
|
|
|
| function mst_weekly_summary_admin_column_content($column, $post_id) {
|
| switch ($column) {
|
| case 'msti_number':
|
| $msti = get_post_meta($post_id, 'msti_number', true);
|
| $parent_id = wp_get_post_parent_id($post_id);
|
|
|
| if ($parent_id) {
|
| echo '<a href="' . get_edit_post_link($parent_id) . '" style="font-weight: bold; color: #0073aa;">' . esc_html($msti) . '</a>';
|
| } else {
|
| echo '<strong style="color: #d63638;">' . esc_html($msti ?: 'No MSTI') . '</strong>';
|
| }
|
| break;
|
|
|
| case 'treatment_week':
|
| $week = get_post_meta($post_id, 'treatment_week', true);
|
| echo '<strong style="font-size: 1.2em; color: #2271b1;">Week ' . esc_html($week ?: '?') . '</strong>';
|
| break;
|
|
|
| case 'week_period':
|
| $start = get_post_meta($post_id, 'week_start_date', true);
|
| $end = get_post_meta($post_id, 'week_end_date', true);
|
| if ($start && $end) {
|
| echo date('M j', strtotime($start)) . ' - ' . date('M j, Y', strtotime($end));
|
| } else {
|
| echo '<em>Not set</em>';
|
| }
|
| break;
|
|
|
| case 'parent_case':
|
| $parent_id = wp_get_post_parent_id($post_id);
|
| if ($parent_id) {
|
| $parent_title = get_the_title($parent_id);
|
| echo '<a href="' . get_edit_post_link($parent_id) . '">' . esc_html($parent_title) . '</a>';
|
| } else {
|
| echo '<em style="color: #d63638;">No parent</em>';
|
| }
|
| break;
|
|
|
| case 'therapist':
|
| $author_id = get_post_field('post_author', $post_id);
|
| echo get_the_author_meta('display_name', $author_id);
|
| break;
|
|
|
| case 'summary_status':
|
| $status = get_post_meta($post_id, 'summary_status', true);
|
| $colors = [
|
| 'Pending Supervisor Review' => '#d63638',
|
| 'Reviewed' => '#dba617',
|
| 'Approved' => '#00a32a',
|
| ];
|
| $color = $colors[$status] ?? '#50575e';
|
| echo '<span style="color: ' . $color . '; font-weight: 500;">' . esc_html($status ?: 'Unknown') . '</span>';
|
| break;
|
|
|
| case 'contact_hours':
|
| $hours = get_post_meta($post_id, 'total_contact_hours', true);
|
| $count = get_post_meta($post_id, 'contact_count', true);
|
| if ($hours) {
|
| echo '<strong>' . number_format($hours, 1) . ' hrs</strong><br><small>(' . intval($count) . ' contacts)</small>';
|
| } else {
|
| echo '<em>Not recorded</em>';
|
| }
|
| break;
|
|
|
| case 'tam_sam':
|
| $tam = get_post_meta($post_id, 'tam_score', true);
|
| $sam = get_post_meta($post_id, 'sam_score', true);
|
| if ($tam || $sam) {
|
| echo 'TAM: ' . ($tam ? number_format($tam, 1) : '?') . '<br>SAM: ' . ($sam ? number_format($sam, 1) : '?');
|
| } else {
|
| echo '<em>Not rated</em>';
|
| }
|
| break;
|
| }
|
| }
|
|
|
| function mst_weekly_summary_sortable_columns($columns) {
|
| $columns['msti_number'] = 'msti_number';
|
| $columns['treatment_week'] = 'treatment_week';
|
| $columns['week_period'] = 'week_start_date';
|
| $columns['therapist'] = 'post_author';
|
| $columns['summary_status'] = 'summary_status';
|
| $columns['contact_hours'] = 'total_contact_hours';
|
| return $columns;
|
| }
|
|
|
|
|
| add_action('pre_get_posts', 'mst_weekly_summary_orderby');
|
|
|
| function mst_weekly_summary_orderby($query) {
|
| if (!is_admin() || !$query->is_main_query()) {
|
| return;
|
| }
|
|
|
| if ($query->get('post_type') === 'weekly_case_summary') {
|
|
|
| if (!$query->get('orderby')) {
|
| $query->set('meta_key', 'treatment_week');
|
| $query->set('orderby', 'meta_value_num');
|
| $query->set('order', 'DESC');
|
| }
|
|
|
|
|
| $orderby = $query->get('orderby');
|
| switch ($orderby) {
|
| case 'treatment_week':
|
| $query->set('meta_key', 'treatment_week');
|
| $query->set('orderby', 'meta_value_num');
|
| break;
|
| case 'msti_number':
|
| $query->set('meta_key', 'msti_number');
|
| $query->set('orderby', 'meta_value');
|
| break;
|
| case 'week_start_date':
|
| $query->set('meta_key', 'week_start_date');
|
| $query->set('orderby', 'meta_value');
|
| break;
|
| case 'summary_status':
|
| $query->set('meta_key', 'summary_status');
|
| $query->set('orderby', 'meta_value');
|
| break;
|
| case 'total_contact_hours':
|
| $query->set('meta_key', 'total_contact_hours');
|
| $query->set('orderby', 'meta_value_num');
|
| break;
|
| }
|
| }
|
| }
|
|
|
|
|
|
|
|
|
|
|
|
|
| add_filter('gform_field_value_msti_case_selection', 'mst_populate_case_for_weekly_summary');
|
|
|
| function mst_populate_case_for_weekly_summary($value) {
|
| if (isset($_GET['msti'])) {
|
| $msti = sanitize_text_field($_GET['msti']);
|
| $cases = get_posts([
|
| 'post_type' => 'mst_case',
|
| 'meta_key' => 'msti_number',
|
| 'meta_value' => $msti,
|
| 'posts_per_page' => 1,
|
| ]);
|
| if (!empty($cases)) {
|
| return $cases[0]->ID;
|
| }
|
| }
|
|
|
| if (isset($_GET['case_id'])) {
|
| return absint($_GET['case_id']);
|
| }
|
|
|
| return $value;
|
| }
|
|
|
|
|
| add_filter('gform_field_value_treatment_week', 'mst_calculate_treatment_week');
|
|
|
| function mst_calculate_treatment_week($value) {
|
| if (isset($_GET['case_id'])) {
|
| $case_id = absint($_GET['case_id']);
|
| $start_date = get_post_meta($case_id, 'treatment_start_date', true);
|
|
|
| if ($start_date) {
|
| $start_timestamp = strtotime($start_date);
|
| $current_timestamp = current_time('timestamp');
|
| $weeks = floor(($current_timestamp - $start_timestamp) / (7 * 24 * 60 * 60)) + 1;
|
| return max(1, $weeks);
|
| }
|
| }
|
|
|
| return $value;
|
| }
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| add_filter('gform_cpt_post_args', 'mst_set_weekly_summary_parent', 10, 4);
|
|
|
| function mst_set_weekly_summary_parent($post_args, $form, $entry, $feed) {
|
|
|
| if ($post_args['post_type'] !== 'weekly_case_summary') {
|
| return $post_args;
|
| }
|
|
|
|
|
| $parent_case_id = rgar($entry, '1');
|
|
|
| if ($parent_case_id) {
|
| $post_args['post_parent'] = absint($parent_case_id);
|
|
|
|
|
| if (defined('WP_DEBUG') && WP_DEBUG) {
|
| error_log(sprintf(
|
| 'MST Weekly Summary: Creating new post for case %d, week %s',
|
| $parent_case_id,
|
| rgar($entry, '9')
|
| ));
|
| }
|
| }
|
|
|
| return $post_args;
|
| }
|
|
|
|
|
| add_action('gform_post_submission', 'mst_link_weekly_summary_to_entry', 10, 2);
|
|
|
| function mst_link_weekly_summary_to_entry($entry, $form) {
|
|
|
| if ($form['id'] != 302) {
|
| return;
|
| }
|
|
|
|
|
| if (isset($entry['post_id']) && $entry['post_id']) {
|
| $post_id = absint($entry['post_id']);
|
| $entry_id = absint($entry['id']);
|
|
|
|
|
| update_post_meta($post_id, 'gravity_form_entry_id', $entry_id);
|
|
|
|
|
| gform_update_meta($entry_id, 'weekly_summary_post_id', $post_id);
|
| }
|
| }
|
|
|
|
|
|
|
|
|
|
|
| add_filter('gppa_object_type_query_args', 'mst_weekly_summary_gppa_filter', 10, 4);
|
|
|
| function mst_weekly_summary_gppa_filter($query_args, $args, $filter_name, $filter) {
|
| if (empty($query_args['post_type']) || $query_args['post_type'] !== 'weekly_case_summary') {
|
| return $query_args;
|
| }
|
|
|
|
|
| $current_user_id = get_current_user_id();
|
| if ($current_user_id > 0) {
|
| $query_args['author'] = $current_user_id;
|
| }
|
|
|
|
|
| if (!empty($_GET['case_id'])) {
|
| $case_id = absint($_GET['case_id']);
|
| $query_args['post_parent'] = $case_id;
|
| }
|
|
|
|
|
| if (empty($query_args['orderby'])) {
|
| $query_args['meta_key'] = 'treatment_week';
|
| $query_args['orderby'] = 'meta_value_num';
|
| $query_args['order'] = 'DESC';
|
| }
|
|
|
| return $query_args;
|
| }
|
|
|
|
|
|
|
|
|
|
|
| add_filter('gravityview_fe_search_criteria', 'mst_weekly_summary_search_filter', 10, 3);
|
|
|
| function mst_weekly_summary_search_filter($search_criteria, $form_id, $args) {
|
| if (isset($_GET['msti'])) {
|
| $msti = sanitize_text_field($_GET['msti']);
|
| $search_criteria['field_filters'][] = [
|
| 'key' => 'msti_number',
|
| 'value' => $msti,
|
| 'operator' => 'is',
|
| ];
|
| }
|
|
|
| if (isset($_GET['week_from']) && isset($_GET['week_to'])) {
|
| $week_from = absint($_GET['week_from']);
|
| $week_to = absint($_GET['week_to']);
|
|
|
| $search_criteria['field_filters'][] = [
|
| 'key' => 'treatment_week',
|
| 'value' => $week_from,
|
| 'operator' => '>=',
|
| ];
|
|
|
| $search_criteria['field_filters'][] = [
|
| 'key' => 'treatment_week',
|
| 'value' => $week_to,
|
| 'operator' => '<=',
|
| ];
|
| }
|
|
|
| return $search_criteria;
|
| }
|
|
|
|
|
|
|
|
|
|
|
|
|
| function mst_get_previous_weekly_summary($case_id, $current_week) {
|
| $previous_week = $current_week - 1;
|
|
|
| if ($previous_week < 1) {
|
| return null;
|
| }
|
|
|
| $summaries = get_posts([
|
| 'post_type' => 'weekly_case_summary',
|
| 'post_parent' => $case_id,
|
| 'posts_per_page' => 1,
|
| 'meta_key' => 'treatment_week',
|
| 'meta_value' => $previous_week,
|
| 'meta_compare' => '=',
|
| ]);
|
|
|
| return !empty($summaries) ? $summaries[0] : null;
|
| }
|
|
|
|
|
| function mst_get_case_weekly_summaries($case_id) {
|
| return get_posts([
|
| 'post_type' => 'weekly_case_summary',
|
| 'post_parent' => $case_id,
|
| 'posts_per_page' => -1,
|
| 'meta_key' => 'treatment_week',
|
| 'orderby' => 'meta_value_num',
|
| 'order' => 'ASC',
|
| ]);
|
| }
|
|
|
|
|
| function mst_get_latest_weekly_summary($case_id) {
|
| $summaries = get_posts([
|
| 'post_type' => 'weekly_case_summary',
|
| 'post_parent' => $case_id,
|
| 'posts_per_page' => 1,
|
| 'meta_key' => 'treatment_week',
|
| 'orderby' => 'meta_value_num',
|
| 'order' => 'DESC',
|
| ]);
|
|
|
| return !empty($summaries) ? $summaries[0] : null;
|
| }
|
|
|
|
|
| function mst_count_weekly_summaries($case_id) {
|
| return count(mst_get_case_weekly_summaries($case_id));
|
| }
|
|
|
|
|
| function mst_weekly_summary_exists($case_id, $week_number) {
|
| $summaries = get_posts([
|
| 'post_type' => 'weekly_case_summary',
|
| 'post_parent' => $case_id,
|
| 'posts_per_page' => 1,
|
| 'meta_query' => [
|
| [
|
| 'key' => 'treatment_week',
|
| 'value' => $week_number,
|
| 'compare' => '=',
|
| ],
|
| ],
|
| ]);
|
|
|
| return !empty($summaries);
|
| }
|
|
|
|
|
| register_activation_hook(__FILE__, 'mst_weekly_summary_activation');
|
|
|
| function mst_weekly_summary_activation() {
|
| mst_register_weekly_summary_post_type();
|
| flush_rewrite_rules();
|
| }
|
|
|
|
|
| register_deactivation_hook(__FILE__, 'mst_weekly_summary_deactivation');
|
|
|
| function mst_weekly_summary_deactivation() {
|
| flush_rewrite_rules();
|
| }
|
| |
| |
Comments