TryGhost/Ghost

View on GitHub
ghost/admin/app/components/modals/settings/about.js

Summary

Maintainability
A
25 mins
Test Coverage
import Component from '@glimmer/component';
import config from 'ghost-admin/config/environment';
import semverParse from 'semver/functions/parse';
import {inject} from 'ghost-admin/decorators/inject';
import {inject as service} from '@ember/service';

export default class AboutModal extends Component {
    @service upgradeStatus;

    @inject config;

    constructor() {
        super(...arguments);
        if (this.isTesting === undefined) {
            this.isTesting = config.environment === 'test';
        }
    }

    get copyrightYear() {
        const date = new Date();
        return date.getFullYear();
    }

    get linkToGitHubReleases() {
        if (this.config.version.includes('-pre.')) {
            try {
                const semverVersion = semverParse(this.config.version, {includePrerelease: true});

                if (semverVersion && semverVersion.build?.[0]) {
                    return `https://github.com/TryGhost/Ghost/commit/${semverVersion.build[0]}`;
                }

                return false;
            } catch (e) {
                return false;
            }
        }

        return `https://github.com/TryGhost/Ghost/releases/tag/v${this.config.version}`;
    }

    get showSystemInfo() {
        const isPro = !!this.config.hostSettings?.siteId;

        // Don't show any system info for Pro
        if (isPro) {
            return false;
        }

        return true;
    }

    get showDatabaseWarning() {
        const isProduction = !!this.config.environment.match?.(/production/i);
        const database = this.config.database;

        // Show a warning if we're in production and not using MySQL 8
        if (isProduction && database !== 'mysql8') {
            return true;
        }

        // Show a warning if we're in development and using MySQL 5
        if (!isProduction && database === 'mysql5') {
            return true;
        }

        return false;
    }
}