' .
// translators: %s: PHP_VERSION.
__( 'It seems you are running an outdated version of PHP: %s.', 'upstream' ) .
'
' .
'' .
// translators: $s: min php version required.
__(
'For security reasons, UpStream requires at least PHP version %s to run.',
'upstream'
) . '
' .
'' . __( 'Please, consider upgrading your PHP version.', 'upstream' ) . '
',
PHP_VERSION,
$min_phpversion_required
);
} elseif ( version_compare( $wp_version, $min_wpversion_required, '<' ) ) { // Check WordPress version.
$error_message = sprintf(
'' .
// translators: %s: wp_version.
__(
'It seems you are running an outdated version of WordPress: %s.',
'upstream'
) . '
' .
'' .
// translators: %s: min wp_version required.
__(
'For security reasons, UpStream requires at least version %s to run.',
'upstream'
) . '
' .
'' . __( 'Please, consider upgrading your WordPress.', 'upstream' ) . '
',
$wp_version,
$min_wpversion_required
);
}
if ( isset( $error_message ) ) {
$error_message .= '' . __( 'Go Back', 'upstream' ) . '';
wp_die( wp_kses_post( $error_message ) );
}
}
/**
* Upstream_install_debug
*
* @param string $message Error message.
*/
function upstream_install_debug( $message ) {
$message = sprintf( '[%s] %s', gmdate( 'Y-m-d H:i:s T O' ), $message ) . "\n";
error_log( $message, 3, str_replace( '//', '/', WP_CONTENT_DIR . '/debug-upstream.log' ) );
}
/**
* Upstream_install
*
* @param bool $network_wide Is network wide.
*/
function upstream_install( $network_wide = false ) {
global $wpdb;
upstream_install_debug( 'upstream_check_min_requirements' );
upstream_check_min_requirements();
if ( is_multisite() && $network_wide ) {
upstream_install_debug( 'is_multisite/network wide' );
foreach ( $wpdb->get_col( "SELECT blog_id FROM $wpdb->blogs LIMIT 100" ) as $blog_id ) {
upstream_install_debug( 'handling blog' . $blog_id );
switch_to_blog( $blog_id );
upstream_install_debug( 'upstream_run_install' );
upstream_run_install();
upstream_install_debug( 'restore_current_blog' );
restore_current_blog();
}
} else {
upstream_install_debug( 'upstream_run_install' );
upstream_run_install();
}
upstream_install_debug( 'flush_rewrite_rules' );
flush_rewrite_rules();
}
register_activation_hook( UPSTREAM_PLUGIN_FILE, 'upstream_install' );
register_deactivation_hook( UPSTREAM_PLUGIN_FILE, 'upstream_uninstall' );
add_action( 'upstream_update_data', 'upstream_update_data', 10, 2 );
/**
* Run the UpStream Install process
*
* @return void
* @since 2.5
*/
function upstream_run_install() {
upstream_install_debug( 'wp_get_current_user' );
$user = wp_get_current_user();
upstream_install_debug( 'user->add_cap' );
$user->add_cap( 'manage_upstream' );
// Setup the Downloads Custom Post Type.
upstream_install_debug( 'upstream_setup_post_types' );
upstream_setup_post_types();
// Setup the Download Taxonomies.
upstream_install_debug( 'upstream_setup_taxonomies' );
upstream_setup_taxonomies();
// Add the default options.
upstream_install_debug( 'upstream_add_default_options' );
upstream_add_default_options();
// Clear the permalinks.
upstream_install_debug( 'flush_rewrite_rules' );
flush_rewrite_rules( false );
// Add upgraded_from option.
upstream_install_debug( 'current_version = get_option' );
$current_version = get_option( 'upstream_version', false );
$fresh_install = empty( $current_version );
if ( ! $fresh_install ) {
update_option( 'upstream_version_upgraded_from', $current_version );
}
upstream_install_debug( 'update_option' );
update_option( 'upstream_version', UPSTREAM_VERSION );
// Create UpStream roles.
upstream_install_debug( 'roles = new UpStream_Roles' );
$roles = new UpStream_Roles();
upstream_install_debug( 'roles->add_roles' );
$roles->add_roles();
if ( $fresh_install ) {
upstream_install_debug( 'upstream_run_fresh_install' );
upstream_run_fresh_install();
// Make sure we don't redirect if activating from network, or bulk.
if ( ! is_network_admin() && ! isset( $_GET['activate-multi'] ) ) {
// Add the transient to redirect.
upstream_install_debug( 'set_transient' );
set_transient( '_upstream_activation_redirect', true, 30 );
}
} else {
upstream_install_debug( 'upstream_run_reinstall' );
upstream_run_reinstall();
upstream_install_debug( 'do_action' );
do_action( 'upstream_update_data', $current_version, UPSTREAM_VERSION );
}
}
/**
* Run the fresh UpStream Install process
*
* @return void
* @since 2.5
*/
function upstream_run_fresh_install() {
// Add default capabilities for roles.
$roles = new UpStream_Roles();
$roles->add_default_caps();
}
/**
* Run the UpStream Reinstall process
*
* @return void
* @since 2.5
*/
function upstream_run_reinstall() {
}
/**
* Runs the UpStream uninstall process.
*/
function upstream_uninstall() {
flush_rewrite_rules();
// RSD: deactivate any child plugins.
if ( is_plugin_active( 'UpStream-Reports-PDF/upstream-reports-pdf.php' ) ||
is_plugin_active( 'upstream-reports-pdf/upstream-reports-pdf.php' )
) {
add_action( 'update_option_active_plugins', 'upstream_deactivate_dependency_reports_pdf' );
}
if ( is_plugin_active( 'UpStream-Reports/upstream-reports.php' ) ||
is_plugin_active( 'upstream-reports/upstream-reports.php' )
) {
add_action( 'update_option_active_plugins', 'upstream_deactivate_dependency_reports' );
}
if ( is_plugin_active( 'UpStream-Copy-Project/upstream-copy-project.php' ) ||
is_plugin_active( 'upstream-copy-project/upstream-copy-project.php' )
) {
add_action( 'update_option_active_plugins', 'upstream_deactivate_dependency_copy_project' );
}
if ( is_plugin_active( 'UpStream-Custom-Fields/upstream-custom-fields.php' ) ||
is_plugin_active( 'upstream-custom-fields/upstream-custom-fields.php' )
) {
add_action( 'update_option_active_plugins', 'upstream_deactivate_dependency_custom_fields' );
}
if ( is_plugin_active( 'UpStream-Customizer/upstream-customizer.php' ) ||
is_plugin_active( 'upstream-customizer/upstream-customizer.php' )
) {
add_action( 'update_option_active_plugins', 'upstream_deactivate_dependency_customizer' );
}
if ( is_plugin_active( 'UpStream-Email-Notifications/upstream-email-notifications.php' ) ||
is_plugin_active( 'upstream-email-notifications/upstream-email-notifications.php' )
) {
add_action( 'update_option_active_plugins', 'upstream_deactivate_dependency_email_notifications' );
}
if ( is_plugin_active( 'UpStream-Calendar-View/upstream-calendar-view.php' ) ||
is_plugin_active( 'upstream-calendar-view/upstream-calendar-view.php' )
) {
add_action( 'update_option_active_plugins', 'upstream_deactivate_dependency_calendar_view' );
}
if ( is_plugin_active( 'UpStream-Frontend-Edit/upstream-frontend-edit.php' ) ||
is_plugin_active( 'upstream-frontend-edit/upstream-frontend-edit.php' )
) {
add_action( 'update_option_active_plugins', 'upstream_deactivate_dependency_frontend_edit' );
}
if ( is_plugin_active( 'UpStream-Project-Timeline/upstream-project-timeline.php' ) ||
is_plugin_active( 'upstream-project-timeline/upstream-project-timeline.php' )
) {
add_action( 'update_option_active_plugins', 'upstream_deactivate_dependency_project_timeline' );
}
if ( is_plugin_active( 'UpStream-Advanced-Permissions/upstream-advanced-permissions.php' ) ||
is_plugin_active( 'upstream-advanced-permissions/upstream-advanced-permissions.php' )
) {
add_action( 'update_option_active_plugins', 'upstream_deactivate_dependency_advanced_permissions' );
}
if ( is_plugin_active( 'UpStream-API/upstream-api.php' ) ||
is_plugin_active( 'upstream-api/upstream-api.php' )
) {
add_action( 'update_option_active_plugins', 'upstream_deactivate_dependency_api' );
}
if ( is_plugin_active( 'UpStream-Forms/upstream-forms.php' ) ||
is_plugin_active( 'upstream-forms/upstream-forms.php' )
) {
add_action( 'update_option_active_plugins', 'upstream_deactivate_dependency_forms' );
}
if ( is_plugin_active( 'UpStream-Shortcodes/upstream-shortcodes.php' ) ||
is_plugin_active( 'upstream-shortcodes/upstream-shortcodes.php' )
) {
add_action( 'update_option_active_plugins', 'upstream_deactivate_dependency_shortcodes' );
}
if ( is_plugin_active( 'UpStream-Naming/upstream-name-replacement.php' ) ||
is_plugin_active( 'upstream-name-replacement/upstream-name-replacement.php' )
) {
add_action( 'update_option_active_plugins', 'upstream_deactivate_dependency_name_replacement' );
}
if ( is_plugin_active( 'UpStream-Reporting/upstream-reporting.php' ) ||
is_plugin_active( 'upstream-reporting/upstream-reporting.php' )
) {
add_action( 'update_option_active_plugins', 'upstream_deactivate_dependency_reporting' );
}
if ( is_plugin_active( 'UpStream-Time-Tracking-and-Budgeting/upstream-time-tracking.php' ) ||
is_plugin_active( 'upstream-time-tracking/upstream-time-tracking.php' )
) {
add_action( 'update_option_active_plugins', 'upstream_deactivate_dependency_time_tracking_budgeting' );
}
}
/**
* Upstream_deactivate_dependency_shortcodes.
*/
function upstream_deactivate_dependency_shortcodes() {
deactivate_plugins(
array(
'UpStream-Shortcodes/upstream-shortcodes.php',
'upstream-shortcodes/upstream-shortcodes.php',
)
);
}
/**
* Upstream_deactivate_dependency_forms.
*/
function upstream_deactivate_dependency_forms() {
deactivate_plugins(
array(
'UpStream-Forms/upstream-forms.php',
'upstream-forms/upstream-forms.php',
)
);
}
/**
* Upstream_deactivate_dependency_api.
*/
function upstream_deactivate_dependency_api() {
deactivate_plugins(
array(
'UpStream-API/upstream-api.php',
'upstream-api/upstream-api.php',
)
);
}
/**
* Upstream_deactivate_dependency_advanced_permissions.
*/
function upstream_deactivate_dependency_advanced_permissions() {
deactivate_plugins(
array(
'UpStream-Advanced-Permissions/upstream-advanced-permissions.php',
'upstream-advanced-permissions/upstream-advanced-permissions.php',
)
);
}
/**
* Upstream_deactivate_dependency_calendar_view.
*/
function upstream_deactivate_dependency_calendar_view() {
deactivate_plugins(
array(
'UpStream-Calendar-View/upstream-calendar-view.php',
'upstream-calendar-view/upstream-calendar-view.php',
)
);
}
/**
* Upstream_deactivate_dependency_reports_pdf.
*/
function upstream_deactivate_dependency_reports_pdf() {
deactivate_plugins(
array(
'UpStream-Reports-PDF/upstream-reports-pdf.php',
'upstream-reports-pdf/upstream-reports-pdf.php',
)
);
}
/**
* Upstream_deactivate_dependency_reports.
*/
function upstream_deactivate_dependency_reports() {
deactivate_plugins(
array(
'UpStream-Reports/upstream-reports.php',
'upstream-reports/upstream-reports.php',
)
);
}
/**
* Upstream_deactivate_dependency_copy_project.
*/
function upstream_deactivate_dependency_copy_project() {
deactivate_plugins(
array(
'UpStream-Copy-Project/upstream-copy-project.php',
'upstream-copy-project/upstream-copy-project.php',
)
);
}
/**
* Upstream_deactivate_dependency_project_timeline.
*/
function upstream_deactivate_dependency_project_timeline() {
deactivate_plugins(
array(
'UpStream-Project-Timeline/upstream-project-timeline.php',
'upstream-project-timeline/upstream-project-timeline.php',
)
);
}
/**
* Upstream_deactivate_dependency_frontend_edit.
*/
function upstream_deactivate_dependency_frontend_edit() {
deactivate_plugins(
array(
'UpStream-Frontend-Edit/upstream-frontend-edit.php',
'upstream-frontend-edit/upstream-frontend-edit.php',
)
);
}
/**
* Upstream_deactivate_dependency_email_notifications.
*/
function upstream_deactivate_dependency_email_notifications() {
deactivate_plugins(
array(
'UpStream-Email-Notifications/upstream-email-notifications.php',
'upstream-email-notifications/upstream-email-notifications.php',
)
);
}
/**
* Upstream_deactivate_dependency_customizer.
*/
function upstream_deactivate_dependency_customizer() {
deactivate_plugins(
array(
'UpStream-Customizer/upstream-customizer.php',
'upstream-customizer/upstream-customizer.php',
)
);
}
/**
* Upstream_deactivate_dependency_custom_fields.
*/
function upstream_deactivate_dependency_custom_fields() {
deactivate_plugins(
array(
'UpStream-Custom-Fields/upstream-custom-fields.php',
'upstream-custom-fields/upstream-custom-fields.php',
)
);
}
/**
* Upstream_deactivate_dependency_name_replacement.
*/
function upstream_deactivate_dependency_name_replacement() {
deactivate_plugins(
array(
'UpStream-Naming/upstream-name-replacement.php',
'upstream-name-replacement/upstream-name-replacement.php',
)
);
}
/**
* Upstream_deactivate_dependency_reporting.
*/
function upstream_deactivate_dependency_reporting() {
deactivate_plugins(
array(
'UpStream-Reporting/upstream-reporting.php',
'upstream-reporting/upstream-reporting.php',
)
);
}
/**
* Upstream_deactivate_dependency_time_tracking_budgeting.
*/
function upstream_deactivate_dependency_time_tracking_budgeting() {
deactivate_plugins(
array(
'UpStream-Time-Tracking-and-Budgeting/upstream-time-tracking.php',
'upstream-time-tracking/upstream-time-tracking.php',
)
);
}
/**
* Upstream_add_default_options.
*/
function upstream_add_default_options() {
// general options.
$general = get_option( 'upstream_general' );
if ( ! $general || empty( $general ) ) {
$general['project']['single'] = 'Project';
$general['project']['plural'] = 'Projects';
$general['client']['single'] = 'Client';
$general['client']['plural'] = 'Clients';
$general['milestone']['single'] = 'Milestone';
$general['milestone']['plural'] = 'Milestones';
$general['milestone_category']['single'] = 'Milestone Category';
$general['milestone_category']['plural'] = 'Milestone Categories';
$general['task']['single'] = 'Task';
$general['task']['plural'] = 'Tasks';
$general['bug']['single'] = 'Bug';
$general['bug']['plural'] = 'Bugs';
$general['file']['single'] = 'File';
$general['file']['plural'] = 'Files';
$general['login_heading'] = 'Project Login';
$general['admin_email'] = get_bloginfo( 'admin_email' );
update_option( 'upstream_general', $general );
}
$cached_ids = array();
$generate_random_id = function () use ( &$cached_ids ) {
do {
$random_id = upstream_generate_random_string( 5, 'abcdefghijklmnopqrstuvwxyz0123456789' );
} while ( isset( $cached_ids[ $random_id ] ) ); // Isset is faster than in_array in this case.
$cached_ids[ $random_id ] = null;
return $random_id;
};
// project options.
$projects = get_option( 'upstream_projects' );
if ( ! $projects || empty( $projects ) ) {
$projects['statuses'][0]['name'] = 'In Progress';
$projects['statuses'][0]['color'] = '#5cbfd1';
$projects['statuses'][0]['type'] = 'open';
$projects['statuses'][0]['id'] = $generate_random_id();
$projects['statuses'][1]['name'] = 'Overdue';
$projects['statuses'][1]['color'] = '#d15d5c';
$projects['statuses'][1]['type'] = 'open';
$projects['statuses'][1]['id'] = $generate_random_id();
$projects['statuses'][2]['name'] = 'Closed';
$projects['statuses'][2]['color'] = '#6b6b6b';
$projects['statuses'][2]['type'] = 'closed';
$projects['statuses'][2]['id'] = $generate_random_id();
update_option( 'upstream_projects', $projects );
}
// task options.
$tasks = get_option( 'upstream_tasks' );
if ( ! $tasks || empty( $tasks ) ) {
$tasks['statuses'][0]['name'] = 'In Progress';
$tasks['statuses'][0]['color'] = '#5cbfd1';
$tasks['statuses'][0]['type'] = 'open';
$tasks['statuses'][0]['id'] = $generate_random_id();
$tasks['statuses'][1]['name'] = 'Overdue';
$tasks['statuses'][1]['color'] = '#d15d5c';
$tasks['statuses'][1]['type'] = 'open';
$tasks['statuses'][1]['id'] = $generate_random_id();
$tasks['statuses'][2]['name'] = 'Completed';
$tasks['statuses'][2]['color'] = '#5cd165';
$tasks['statuses'][2]['type'] = 'closed';
$tasks['statuses'][2]['id'] = $generate_random_id();
$tasks['statuses'][3]['name'] = 'Closed';
$tasks['statuses'][3]['color'] = '#6b6b6b';
$tasks['statuses'][3]['type'] = 'closed';
$tasks['statuses'][3]['id'] = $generate_random_id();
update_option( 'upstream_tasks', $tasks );
}
// bug options.
$bugs = get_option( 'upstream_bugs' );
if ( ! $bugs || empty( $bugs ) ) {
$bugs['statuses'][0]['name'] = 'In Progress';
$bugs['statuses'][0]['color'] = '#5cbfd1';
$bugs['statuses'][0]['type'] = 'open';
$bugs['statuses'][0]['id'] = $generate_random_id();
$bugs['statuses'][1]['name'] = 'Overdue';
$bugs['statuses'][1]['color'] = '#d15d5c';
$bugs['statuses'][1]['type'] = 'open';
$bugs['statuses'][1]['id'] = $generate_random_id();
$bugs['statuses'][2]['name'] = 'Completed';
$bugs['statuses'][2]['color'] = '#5cd165';
$bugs['statuses'][2]['type'] = 'closed';
$bugs['statuses'][2]['id'] = $generate_random_id();
$bugs['statuses'][3]['name'] = 'Closed';
$bugs['statuses'][3]['color'] = '#6b6b6b';
$bugs['statuses'][3]['type'] = 'closed';
$bugs['statuses'][3]['id'] = $generate_random_id();
$bugs['severities'][0]['name'] = 'Critical';
$bugs['severities'][0]['color'] = '#d15d5c';
$bugs['severities'][0]['id'] = $generate_random_id();
$bugs['severities'][1]['name'] = 'Standard';
$bugs['severities'][1]['color'] = '#d17f5c';
$bugs['severities'][1]['id'] = $generate_random_id();
$bugs['severities'][2]['name'] = 'Minor';
$bugs['severities'][2]['color'] = '#d1a65c';
$bugs['severities'][2]['id'] = $generate_random_id();
update_option( 'upstream_bugs', $bugs );
}
}
if ( version_compare( get_bloginfo( 'version' ), '5.1', '>=' ) ) {
/**
* Upstream_new_blog_created
*
* @param string $site Site name.
*/
function upstream_new_blog_created( $site ) {
upstream_install_debug( 'upstream_new_blog_created ' . $site );
$blog_id = $site->blog_id;
if ( is_plugin_active_for_network( plugin_basename( UPSTREAM_PLUGIN_FILE ) ) ) {
upstream_install_debug( 'switch_to_blog' );
switch_to_blog( $blog_id );
upstream_install_debug( 'upstream_install' );
upstream_install();
upstream_install_debug( 'restore_current_blog' );
restore_current_blog();
}
}
add_action( 'wp_insert_site', 'upstream_new_blog_created', 10, 6 );
} else {
/**
* When a new Blog is created in multisite, see if UpStream is network activated, and run the installer
*
* @param int $blog_id The Blog ID created.
* @param int $user_id The User ID set as the admin.
* @param string $domain The URL.
* @param string $path Site Path.
* @param int $site_id The Site ID.
* @param array $meta Blog Meta.
*
* @return void
* @since 1.0.0
*/
function upstream_new_blog_created( $blog_id, $user_id, $domain, $path, $site_id, $meta ) {
up_debug();
if ( is_plugin_active_for_network( plugin_basename( UPSTREAM_PLUGIN_FILE ) ) ) {
switch_to_blog( $blog_id );
upstream_install();
restore_current_blog();
}
}
add_action( 'wpmu_new_blog', 'upstream_new_blog_created', 10, 6 );
}
/**
* Post-installation
*
* Runs just after plugin installation and exposes the
* upstream_after_install hook.
*
* @return void
* @since 1.0.0
*/
function upstream_after_install() {
up_debug();
if ( ! is_admin() ) {
return;
}
$activated = get_transient( '_upstream_activation_redirect' );
if ( false !== $activated ) {
// add the default options.
// upstream_add_default_project().
delete_transient( '_upstream_activation_redirect' );
if ( ! isset( $_GET['activate-multi'] ) ) {
set_transient( '_upstream_redirected', true, 360 );
wp_redirect( admin_url( 'post-new.php?post_type=project' ) );
exit;
}
}
}
add_action( 'admin_init', 'upstream_after_install', 100 );
/**
* Show a success notice after install and redirect.
*/
function upstream_install_success_notice() {
up_debug();
$redirected = get_transient( '_upstream_redirected' );
$get_data = isset( $_GET ) ? wp_unslash( $_GET ) : array();
if ( false !== $redirected && isset( $get_data['page'] ) && sanitize_text_field( $get_data['page'] ) == 'upstream_general' ) {
// Delete the transient.
// delete_transient( '_upstream_redirected' ).
$class = 'notice notice-info is-dismissible';
$message = '' . __( 'Success! UpStream is up and running.', 'upstream' ) . '
';
$message .= __(
'Step 1. Please go through each settings tab below and configure the options.',
'upstream'
) . '
';
$message .= __(
'Step 2. Add a new Client by navigating to Projects > New Client',
'upstream'
) . '
';
$message .= __(
'Step 3. Add your first Project by navigating to Projects > New Project',
'upstream'
) . '
';
printf( '', esc_attr( $class ), esc_html( $message ) );
}
}
add_action( 'admin_notices', 'upstream_install_success_notice' );
/**
* The original data update function. This is superceded by rev2 as of version 1.27.
*
* @param string $old_version The old_version.
* @param string $new_version The new_version.
* @throws Exception Exception.
*/
function upstream_update_data( $old_version, $new_version ) {
up_debug();
// Ignore if we are on the same version.
if ( $old_version === $new_version ) {
return;
}
if ( version_compare( $new_version, '1.22.0', '=' ) ) {
// Make sure administrator and managers are able to.
$roles = array(
'upstream_manager',
'administrator',
'upstream_user',
);
foreach ( $roles as $role ) {
$role = get_role( $role );
if ( is_object( $role ) ) {
$role->add_cap( 'project_title_field', true );
$role->add_cap( 'project_status_field', true );
$role->add_cap( 'project_owner_field', true );
$role->add_cap( 'project_client_field', true );
$role->add_cap( 'project_users_field', true );
$role->add_cap( 'project_start_date_field', true );
$role->add_cap( 'project_end_date_field', true );
}
}
}
if ( version_compare( $old_version, '1.22.1', '<' ) ) {
// Force to fix bug statuses and severities with empty ID.
delete_option( 'upstream:created_bugs_args_ids' );
UpStream_Options_Bugs::create_bugs_statuses_ids();
}
$has_finished_migration = get_option( '_upstream_migration_finished_1.24.0', null );
if ( empty( $has_finished_migration ) && version_compare( $old_version, '1.24.0', '<' ) ) {
$this->upstreamMilestoneTags();
// Default labels for Milestone Categories.
$general = get_option( 'upstream_general' );
$general['milestone_category']['single'] = 'Milestone Category';
$general['milestone_category']['plural'] = 'Milestone Categories';
update_option( 'upstream_general', $general );
// Make sure administrator and managers are able to work with the new milestones.
$roles = array(
'upstream_manager',
'administrator',
'upstream_user',
);
foreach ( $roles as $role ) {
$role = get_role( $role );
if ( is_object( $role ) ) {
$capabilities = array(
// Post type.
'edit_milestone',
'read_milestone',
'delete_milestone',
'edit_milestones',
'edit_others_milestones',
'publish_milestones',
'read_private_milestones',
'delete_milestones',
'delete_private_milestones',
'delete_published_milestones',
'delete_others_milestones',
'edit_private_milestones',
'edit_published_milestones',
// Terms.
'manage_milestone_terms',
'edit_milestone_terms',
'delete_milestone_terms',
'assign_milestone_terms',
);
foreach ( $capabilities as $capability ) {
$role->add_cap( $capability, true );
}
}
}
// If we have projects, create new milestones based on current ones.
$projects = get_posts(
array(
'post_type' => 'project',
'post_status' => 'any',
'posts_per_page' => -1,
'meta_query' => array(
'relation' => 'OR',
array(
'key' => '_upstream_milestones_migrated',
'compare' => 'NOT EXISTS',
),
array(
'key' => '_upstream_milestones_migrated',
'value' => 1,
'compare' => '!=',
),
),
)
);
if ( ! empty( $projects ) ) {
// Migrate the milestones.
$default_milestones = get_option( 'upstream_milestones', array() );
if ( ! empty( $default_milestones ) ) {
foreach ( $projects as $project ) {
\UpStream\Milestones::migrate_legacy_milestones_for_project( $project->ID );
}
}
}
update_option( '_upstream_migration_finished_1.24.0', true );
}
$has_finished_migration = get_option( '_upstream_migration_finished_1.24.1', null );
if ( empty( $has_finished_migration ) && version_compare( $old_version, '1.24.1', '<' ) ) {
// If we have unpublished projects, create new milestones based on current ones.
$projects = get_posts(
array(
'post_type' => 'project',
'post_status' => 'any',
'posts_per_page' => -1,
'meta_query' => array(
'relation' => 'OR',
array(
'key' => '_upstream_milestones_migrated',
'compare' => 'NOT EXISTS',
),
array(
'key' => '_upstream_milestones_migrated',
'value' => 1,
'compare' => '!=',
),
),
)
);
if ( ! empty( $projects ) ) {
// Migrate the milestones.
$default_milestones = get_option( 'upstream_milestones', array() );
if ( ! empty( $default_milestones ) ) {
foreach ( $projects as $project ) {
\UpStream\Milestones::migrate_legacy_milestones_for_project( $project->ID );
}
}
}
update_option( '_upstream_migration_finished_1.24.1', true );
}
$version = '1.24.2';
$migration_option = '_upstream_migration_finished_' . $version;
$has_finished_migration = get_option( $migration_option, null );
if ( empty( $has_finished_migration ) && version_compare( $old_version, $version, '<' ) ) {
// If we have unpublished projects, create new milestones based on current ones.
$projects = get_posts(
array(
'post_type' => 'project',
'post_status' => 'any',
'posts_per_page' => -1,
)
);
if ( ! empty( $projects ) ) {
foreach ( $projects as $project ) {
\UpStream\Milestones::fix_milestone_orders_on_project( $project->ID );
}
}
update_option( $migration_option, true );
}
// do the first new migration to get everything to 1.27.
$migration_id = 'M0000001';
$migration_option = '_upstream_migration_finished_' . $migration_id;
$has_finished_migration = get_option( $migration_option, null );
if ( empty( $has_finished_migration ) ) {
if ( ! class_exists( 'Upstream_Counts' ) ) {
include_once UPSTREAM_PLUGIN_DIR . '/includes/class-upstream-counts.php';
}
$counts = new Upstream_Counts( 0 );
$projects = $counts->projects;
if ( ! empty( $projects ) ) {
foreach ( $projects as $project ) {
$project_object = new UpStream_Project( $project->ID );
$project_object->update_project_meta();
}
}
update_option( $migration_option, true );
}
}
/**
* Show a message if the plugin needs to be reactivated
*/
function upstream_reactivate_notice() {
up_debug();
$class = 'notice notice-info is-dismissible';
$message = '' . __( 'UpStream needs to be reactivated.', 'upstream' ) . '
';
$message .= __(
'In order to complete the upgrade to this version, you will need to deactivate and re-activate Upstream. Make sure Remove Data under the UpStream menu is unchecked so you do not lose any data.',
'upstream'
) . '
';
printf( '', esc_attr( $class ), esc_html( $message ) );
}
/**
* This is a replacement for upstream_update_data(). It is used to update any data from the
* 1.27 release and after.
*
* @since 1.27
*/
function upstream_update_data_rev_2() {
if ( ! is_admin() || ! current_user_can( 'activate_plugins' ) ) {
return;
}
$current_version = get_option( 'upstream_version', false );
if ( empty( $current_version ) ) {
// if current version is not set, this is a new install.
return;
} elseif ( UPSTREAM_VERSION === $current_version ) {
// already at current verison... check if last migration was done
// (meaning all should have been done) otherwise return.
$migration_id = 'M0000002';
$migration_option = '_upstream_migration_finished_' . $migration_id;
$has_finished_migration = get_option( $migration_option, null );
if ( $has_finished_migration ) {
return;
} else {
$has_finished_migration = false;
}
} elseif ( version_compare( $current_version, '1.26.0', '<' ) ) {
// if current version is less than 1.26 don't use this function at all
// wait until someone reactivates the plugin and then this function can run.
add_action( 'admin_notices', 'upstream_reactivate_notice' );
return;
}
$migration_id = 'M0000001';
$migration_option = '_upstream_migration_finished_' . $migration_id;
$has_finished_migration = get_option( $migration_option, null );
if ( empty( $has_finished_migration ) ) {
if ( ! class_exists( 'Upstream_Counts' ) ) {
include_once UPSTREAM_PLUGIN_DIR . '/includes/class-upstream-counts.php';
}
$counts = new Upstream_Counts( 0 );
$projects = $counts->projects;
if ( ! empty( $projects ) ) {
foreach ( $projects as $project ) {
$project_object = new UpStream_Project( $project->ID );
$project_object->update_project_meta();
}
}
update_option( $migration_option, true );
}
$migration_id = 'M0000002';
$migration_option = '_upstream_migration_finished_' . $migration_id;
$has_finished_migration = get_option( $migration_option, null );
if ( empty( $has_finished_migration ) ) {
global $wpdb;
require_once ABSPATH . 'wp-admin/includes/upgrade.php';
if ( function_exists( 'maybe_create_table' ) ) {
$sql = 'CREATE TABLE ' . $wpdb->prefix . 'upfs_files ( upfsid VARCHAR(60), orig_filename VARCHAR(255), saved_filename VARCHAR(255), mime_type VARCHAR(255), file_size INT, access_rules TEXT, PRIMARY KEY (upfsid) )';
$r = maybe_create_table( $wpdb->prefix . 'upfs_files', $sql );
}
update_option( $migration_option, true );
}
// if we made any migrations, update the upstream version to the current one.
update_option( 'upstream_version_upgraded_from', $current_version );
update_option( 'upstream_version', UPSTREAM_VERSION );
}
add_action( 'admin_init', 'upstream_update_data_rev_2', 90 );
/**
* Upstream_change_role_name
*/
function upstream_change_role_name() {
global $wp_roles;
if ( ! isset( $wp_roles ) ) {
$wp_roles_obj = new WP_Roles();
} else {
$wp_roles_obj = $wp_roles;
}
$wp_roles_obj->roles['upstream_client_user']['name'] = __( 'UpStream Client User', 'upstream' );
$wp_roles_obj->role_names['upstream_client_user'] = __( 'UpStream Client User', 'upstream' );
}
add_action( 'init', 'upstream_change_role_name' );