array( 'label' => __( 'Calendar', 'taskbuilder' ), 'plugin' => 'taskbuilder-calendar/taskbuilder-calendar.php', 'icon' => 'calendar.svg', 'placement' => 'menu', 'details_url' => 'https://taskbuilder.net/task-calendar/', 'description' => __( 'Calendar can help to schedule tasks to gain control over your work and keep your day organized.', 'taskbuilder' ), ), 'email_piping' => array( 'label' => __( 'Email Piping', 'taskbuilder' ), 'plugin' => 'taskbuilder-email-piping/wppm-email-piping.php', 'icon' => 'email-piping.svg', 'placement' => 'settings', 'details_url' => 'https://taskbuilder.net/email-piping/', 'description' => __( 'Email Piping converts incoming emails directly into actionable tasks within your project management system.', 'taskbuilder' ), ), 'custom_fields' => array( 'label' => __( 'Custom Fields', 'taskbuilder' ), 'plugin' => 'taskbuilder-custom-field/taskbuildet-custom-field.php', 'icon' => 'cf.svg', 'placement' => 'menu', 'details_url' => 'https://taskbuilder.net/custom-fields/', 'description' => __( 'Custom Fields lets you collect extra information for your tasks and projects beyond the built-in fields.', 'taskbuilder' ), ), 'time_tracker' => array( 'label' => __( 'Time Tracker', 'taskbuilder' ), 'plugin' => 'taskbuilder-timer/wppm-timer.php', 'icon' => 'time-tracker.svg', 'placement' => 'none', 'details_url' => 'https://taskbuilder.net/time-tracker/', 'description' => __( 'Time Tracker records and tracks the time spent on each individual task, like a stop-watch for a task.', 'taskbuilder' ), ), 'gantt_chart' => array( 'label' => __( 'Gantt Chart', 'taskbuilder' ), 'plugin' => 'taskbuilder-gantt-chart/wppm-gantt-chart.php', 'icon' => 'gantt_chart.svg', 'placement' => 'toolbar', 'details_url' => 'https://taskbuilder.net/gantt-chart/', 'description' => __( 'Gantt Chart helps you visualize upcoming deadlines and keep a bird\'s-eye view of the whole project.', 'taskbuilder' ), ), 'duplicate_project' => array( 'label' => __( 'Duplicate Project', 'taskbuilder' ), 'plugin' => 'taskbuilder_clone_project/wppm-clone-project.php', 'icon' => 'clone_project.svg', 'placement' => 'toolbar', 'details_url' => 'https://taskbuilder.net/duplicate-project/', 'description' => __( 'Duplicate Project lets you clone an existing project with its tasks and checklists in one click.', 'taskbuilder' ), ), 'reports' => array( 'label' => __( 'Reports', 'taskbuilder' ), 'plugin' => 'taskbuilder-reports/wppm-reports.php', 'icon' => 'reports-icon.svg', 'placement' => 'menu', 'details_url' => 'https://taskbuilder.net/report/', 'description' => __( 'Reports lets you create detailed project progress reports to view, print, or download as PDF/CSV.', 'taskbuilder' ), ), 'buddypress' => array( 'label' => __( 'Buddypress Integration', 'taskbuilder' ), 'plugin' => 'taskbuilder-buddypress-integration/taskbuilder-buddypress-integration.php', 'icon' => 'user_group.svg', 'placement' => 'settings', 'details_url' => 'https://taskbuilder.net/buddypress/', 'description' => __( 'Buddypress Integration lets you manage projects by department, giving groups frontend access to their tasks.', 'taskbuilder' ), ), 'woocommerce' => array( 'label' => __( 'WooCommerce Integration', 'taskbuilder' ), 'plugin' => 'taskbuilder-woocommerce-integration/taskbuilder-woocommerce-integration.php', 'icon' => 'taskbuilder_wc.svg', 'placement' => 'settings', 'details_url' => 'https://taskbuilder.net/woocommerce/', 'description' => __( 'WooCommerce Integration automatically creates a task with order details after an order is received.', 'taskbuilder' ), ), 'due_date_reminder' => array( 'label' => __( 'Due Date Reminder', 'taskbuilder' ), 'plugin' => 'taskbuilder_due_date_reminder/wppm-due-date-reminder.php', 'icon' => 'due_date_reminder_icon.svg', 'placement' => 'settings', 'details_url' => 'https://taskbuilder.net/due-date-reminder/', 'description' => __( 'Due Date Reminder emails your team before a task\'s due date so deadlines never slip.', 'taskbuilder' ), ), 'users_group' => array( 'label' => __( 'Users Group', 'taskbuilder' ), 'plugin' => 'taskbuilder-usergroup/taskbuilder-usergrop.php', 'icon' => 'user_group.svg', 'placement' => 'menu', 'details_url' => 'https://taskbuilder.net/usergroup/', 'description' => __( 'Users Group lets you assign groups of users to a project and its tasks, just like individual users.', 'taskbuilder' ), ), 'recurrent_task' => array( 'label' => __( 'Recurrent Task', 'taskbuilder' ), 'plugin' => 'taskbuilder-recurrent-task/taskbuilder-recurrent-task.php', 'icon' => 'recurrent_task.svg', 'placement' => 'settings', 'details_url' => 'https://taskbuilder.net/recurrent-task/', 'description' => __( 'Recurrent Task automates repeating tasks on daily, weekly, or monthly intervals so nothing is re-entered by hand.', 'taskbuilder' ), ), 'overdue_notifier' => array( 'label' => __( 'Overdue Notifier', 'taskbuilder' ), 'plugin' => 'taskbuilder_overdue_notifier/wppm-overdue-notifier.php', 'icon' => 'overdue.svg', 'placement' => 'settings', 'details_url' => 'https://taskbuilder.net/overdue-notifier/', 'description' => __( 'Overdue Notifier automatically emails assigned users the moment a task becomes overdue.', 'taskbuilder' ), ), ); } } if ( ! function_exists( 'wppm_is_pro_addon_active' ) ) { function wppm_is_pro_addon_active( $addon_key ) { $addons = wppm_get_pro_addons(); if ( empty( $addons[ $addon_key ]['plugin'] ) ) { return true; } if ( ! function_exists( 'is_plugin_active' ) ) { require_once ABSPATH . 'wp-admin/includes/plugin.php'; } return is_plugin_active( $addons[ $addon_key ]['plugin'] ); } } if ( ! function_exists( 'wppm_pro_upgrade_url' ) ) { function wppm_pro_upgrade_url() { return 'https://taskbuilder.net/pricing/'; } } /** * Small gold "Pro" crown icon used in place of a text badge, wherever a * locked pro addon is advertised (sidebar menu, settings pills, toolbar * buttons, teaser pages). Kept as raw markup so PHP and JS-built strings * can share the exact same icon. */ if ( ! function_exists( 'wppm_pro_badge_svg' ) ) { function wppm_pro_badge_svg( $size = 14 ) { $size = (int) $size; return ''; } } /** * Pro addons that still need advertising for a given placement * ('menu', 'settings', 'toolbar'), keyed the same as wppm_get_pro_addons(). */ /** * Small inline padlock icon, used wherever a locked pro addon needs a lock * glyph. Kept as an SVG (rather than a Font Awesome class) because this * plugin never enqueues Font Awesome itself - on pages where no other * active plugin happens to load it, the "fa-lock" class rendered no glyph * at all, leaving only the CSS-drawn circle behind it. */ if ( ! function_exists( 'wppm_pro_lock_svg' ) ) { function wppm_pro_lock_svg( $size = 14, $color = '#ffffff' ) { $size = (int) $size; $color = esc_attr( $color ); return ''; } } if ( ! function_exists( 'wppm_get_locked_pro_addons_by_placement' ) ) { function wppm_get_locked_pro_addons_by_placement( $placement ) { $locked = array(); foreach ( wppm_get_pro_addons() as $key => $addon ) { if ( $addon['placement'] === $placement && ! wppm_is_pro_addon_active( $key ) ) { $locked[ $key ] = $addon; } } return $locked; } }