文件操作 - dashboard.html
返回文件管理
返回主菜单
删除本文件
文件: /usr/local/cwpsrv/var/services/users/cwp_theme/original/modules/wordpress_manager/dashboard.html
编辑文件内容
<div class="row border-bottom white-bg dashboard-header" style="padding-bottom:0;"> <div class="col-lg-12"> <div style="display:flex;justify-content:space-between;align-items:center;"> <h2>{{langmod.WPM_TITLE}}</h2> <div> <button class="btn btn-default wpm-btn-scan" onclick="wpmScanInstallations()" id="wpm-btn-scan-main" style="margin-right: 10px;"> <i class="fa fa-search"></i> {{langmod.WPM_SCAN_INSTALLATIONS|default("Scan Installations")}} </button> <button class="btn btn-primary wpm-btn-install" onclick="wpmOpenInstall()"> <i class="fa fa-plus"></i> {{langmod.WPM_NEW_INSTALLATION}} </button> </div> </div> <ol class="breadcrumb" style="margin-bottom:0;"> <li><a href="?">Home</a></li> <li class="active"><strong>{{langmod.WPM_TITLE}}</strong></li> </ol> </div> </div> <!-- Stats Bar Modern --> <div class="wpm-stats-bar-modern"> <div class="wpm-stat-card"> <div class="wpm-stat-icon wpm-stat-installations"> <i class="fa fa-wordpress"></i> </div> <div class="wpm-stat-content"> <span class="wpm-stat-num">{{mod.installations|length}}</span> <span class="wpm-stat-label">{{langmod.WPM_INSTALLATIONS}}</span> </div> </div> <div class="wpm-stat-card"> <div class="wpm-stat-icon wpm-stat-updates"> <i class="fa fa-refresh"></i> </div> <div class="wpm-stat-content"> <span class="wpm-stat-num" id="wpm-updates-count">0</span> <span class="wpm-stat-label">{{langmod.WPM_UPDATES}}</span> </div> </div> {% if mod.wp_cli %} <div class="wpm-stat-card"> <div class="wpm-stat-icon wpm-stat-cli"> <i class="fa fa-check-circle"></i> </div> <div class="wpm-stat-content"> <span class="wpm-stat-num"><i class="fa fa-check" style="font-size:18px;color:#1ab394;"></i></span> <span class="wpm-stat-label">{{langmod.WPM_WPCLI_ACTIVE}}</span> </div> </div> {% endif %} <div class="wpm-stat-card-divider"></div> <div class="wpm-stat-card"> <div class="wpm-stat-icon wpm-stat-vulnerabilities"> <i class="fa fa-bug"></i> </div> <div class="wpm-stat-content"> <span class="wpm-stat-num" id="wpm-vuln-count">0</span> <span class="wpm-stat-label">{{langmod.WPM_VULNERABILITIES}}</span> </div> </div> <div class="wpm-stat-card"> <div class="wpm-stat-icon wpm-stat-plugins"> <i class="fa fa-plug"></i> </div> <div class="wpm-stat-content"> <span class="wpm-stat-num" id="wpm-plugin-count">0</span> <span class="wpm-stat-label">{{langmod.WPM_PLUGINS_TOTAL}}</span> </div> </div> <div class="wpm-stat-card"> <div class="wpm-stat-icon wpm-stat-themes"> <i class="fa fa-paint-brush"></i> </div> <div class="wpm-stat-content"> <span class="wpm-stat-num" id="wpm-theme-count">0</span> <span class="wpm-stat-label">{{langmod.WPM_THEMES_TOTAL}}</span> </div> </div> <div class="wpm-stat-card"> <div class="wpm-stat-icon wpm-stat-status"> <i class="fa fa-check-circle"></i> </div> <div class="wpm-stat-content"> <span class="wpm-stat-num" id="wpm-status-icon" style="font-size:16px;">✓</span> <span class="wpm-stat-label" id="wpm-status-text">{{langmod.WPM_ALL_HEALTHY}}</span> </div> </div> </div> <!-- Filter & Search Card --> <div class="wpm-filter-card"> <div class="wpm-filter-card-title"><i class="fa fa-filter"></i> {{langmod.WPM_FILTERS}}</div> <div class="wpm-filter-controls"> <div class="wpm-search-wrap wpm-filter-item"> <i class="fa fa-search wpm-search-icon"></i> <input type="text" id="wpm-search" class="form-control" placeholder="{{langmod.WPM_SEARCH_INSTALLATIONS}}..." onkeyup="wpmSearchInstallations(this.value)"> </div> <select id="wpm-filter" class="form-control wpm-filter-item" onchange="wpmFilterByTag(this.value)"> <option value="all">{{langmod.WPM_FILTER_ALL}}</option> <option value="active">{{langmod.WPM_FILTER_ACTIVE}}</option> <option value="vulnerable">{{langmod.WPM_FILTER_VULNERABLE}}</option> <option value="updates">{{langmod.WPM_FILTER_UPDATES}}</option> </select> <select id="wpm-sort" class="form-control wpm-filter-item" onchange="wpmSortBy(this.value)"> <option value="name">{{langmod.WPM_SORT_BY_NAME}}</option> <option value="date">{{langmod.WPM_SORT_BY_DATE}}</option> <option value="status">{{langmod.WPM_SORT_BY_STATUS}}</option> <option value="size">{{langmod.WPM_SORT_BY_SIZE}}</option> </select> <div class="wpm-filter-spacer"></div> <button class="btn btn-default wpm-filter-tag-btn" onclick="wpmLoadTags()" title="{{langmod.WPM_FILTER_BY_TAG}}"> <i class="fa fa-tag"></i> {{langmod.WPM_FILTER_BY_TAG}} </button> </div> </div> <!-- Installations List (one per row) --> <div id="wpm-installations-grid"> {% if mod.installations|length > 0 %} {% for inst in mod.installations %} <div class="wpm-install-col" data-path="{{inst.path}}" data-domain="{{inst.domain}}" data-tags="{{inst.tags|default([])|join(', ')|default('') }}"> <div class="wpm-card wpm-card-{{inst.status}}" data-path="{{inst.path}}" data-domain="{{inst.domain}}" data-wpbd="{{inst.wpbd}}"> <!-- Zona 0: Preview Thumbnail --> <div class="wpm-card-preview"> <img src="https://s0.wp.com/mshots/v1/{{inst.url|url_encode}}?w=320&h=240" alt="{{inst.domain}} preview" class="wpm-preview-loading" onload="this.classList.remove('wpm-preview-loading');this.classList.add('wpm-preview-loaded');" onerror="this.parentElement.innerHTML='<div class=\'wpm-card-preview-placeholder\'><i class=\'fa fa-globe\'></i><span>Preview</span></div>';" loading="lazy"> </div> <!-- Zona 1: Identidad --> <div class="wpm-card-identity"> <div class="wpm-identity-top"> <div class="wpm-card-icon"> <i class="fa fa-wordpress wpm-icon-wordpress"></i> {% if inst.status == 'broken' %} <i class="fa fa-exclamation-triangle wpm-icon-broken" title="{{langmod.WPM_BROKEN}}"></i> {% endif %} </div> <div class="wpm-card-title"> <h4 class="wpm-card-name">{{inst.name|default(inst.domain)}}</h4> <a href="{{inst.url}}" target="_blank" class="wpm-card-domain" title="{{inst.url}}">{{inst.domain}}</a> {% if inst.path is not empty %} <span class="wpm-card-path" title="{{inst.path}}">{{inst.path}}</span> {% endif %} </div> </div> <div class="wpm-identity-meta"> <span class="wpm-meta-item"><strong>{{langmod.WPM_VERSION}}</strong> {{inst.version}}</span> <span class="wpm-meta-sep">·</span> <span class="wpm-meta-item"><strong>PHP</strong> {{inst.php_version}}</span> {% if inst.tags is not empty and inst.tags|length > 0 %} <span class="wpm-meta-sep">·</span> <div class="wpm-tags-inline"> {% for tag in inst.tags %} <span class="badge badge-info">{{tag}}</span> {% endfor %} </div> {% endif %} </div> {% if inst.core_update or inst.plugin_updates > 0 or inst.theme_updates > 0 or inst.vulnerabilities > 0 %} <div class="wpm-identity-badges"> {% if inst.core_update %} <span class="badge badge-warning" data-tooltip="Core Update"><i class="fa fa-arrow-up"></i> WP</span> {% endif %} {% if inst.plugin_updates > 0 %} <span class="badge badge-warning" data-tooltip="{{inst.plugin_updates}} Plugins Update"><i class="fa fa-plug"></i> {{inst.plugin_updates}}</span> {% endif %} {% if inst.theme_updates > 0 %} <span class="badge badge-warning" data-tooltip="{{inst.theme_updates}} Themes Update"><i class="fa fa-paint-brush"></i> {{inst.theme_updates}}</span> {% endif %} {% if inst.vulnerabilities > 0 %} <span class="badge badge-danger" onclick="wpmOpenVulnerabilities('{{inst.path}}')" style="cursor:pointer;" data-tooltip="{{inst.vulnerabilities}} Vulnerabilities"><i class="fa fa-bug"></i> {{inst.vulnerabilities}}</span> {% endif %} </div> {% endif %} </div> <!-- Zona 2: Stats --> <div class="wpm-card-stats"> <div class="wpm-stat-mini" onclick="wpmOpenPlugins('{{inst.path}}')" title="{{langmod.WPM_PLUGINS}}"> <span class="wpm-stat-mini-num">{{inst.plugins_count}}</span> <span class="wpm-stat-mini-label">{{langmod.WPM_PLUGINS}}</span> </div> <div class="wpm-stat-mini" onclick="wpmOpenThemes('{{inst.path}}')" title="{{langmod.WPM_THEMES}}"> <span class="wpm-stat-mini-num">{{inst.themes_count}}</span> <span class="wpm-stat-mini-label">{{langmod.WPM_THEMES}}</span> </div> </div> <!-- Zona 3: Toolbar --> <div class="wpm-card-toolbar"> <button class="wpm-btn-icon" onclick="wpmOpenPreview('{{inst.url}}', '{{inst.domain}}', '{{inst.path}}')" title="{{langmod.WPM_PREVIEW|default('Preview')}}"> <i class="fa fa-eye"></i> </button> <button class="wpm-btn-icon" onclick="wpmOpenLogin('{{inst.url}}', '{{inst.domain}}', '{{inst.path}}')" title="{{langmod.WPM_LOGIN}}"> <i class="fa fa-sign-in"></i> </button> <button class="wpm-btn-icon" onclick="wpmCheckUpdates('{{inst.path}}', this)" title="{{langmod.WPM_UPDATE}}"> <i class="fa fa-refresh"></i> </button> <button class="wpm-btn-icon" onclick="wpmOpenSecurity('{{inst.path}}')" title="{{langmod.WPM_SECURITY}}"> <i class="fa fa-shield"></i> </button> <button class="wpm-btn-icon" onclick="wpmBackup('{{inst.path}}')" title="{{langmod.WPM_BACKUP}}"> <i class="fa fa-download"></i> </button> <button class="wpm-btn-icon wpm-btn-icon-desktop" onclick="wpmOpenPlugins('{{inst.path}}')" title="{{langmod.WPM_PLUGINS_THEMES|default('Plugins & Themes')}}"> <i class="fa fa-puzzle-piece"></i> </button> <button class="wpm-btn-icon wpm-btn-icon-desktop" onclick="wpmOpenCache('{{inst.path}}')" title="{{langmod.WPM_CACHE|default('Cache')}}"> <i class="fa fa-bolt"></i> </button> <div class="wpm-toolbar-separator"></div> <div class="wpm-toolbar-dropdown" data-path="{{inst.path}}" data-domain="{{inst.domain}}" data-wpbd="{{inst.wpbd}}" data-url="{{inst.url}}"> <button class="wpm-btn-icon" onclick="wpmToggleDropdown(this)" title="{{langmod.WPM_MORE_ACTIONS|default('More Actions')}}"> <i class="fa fa-ellipsis-v"></i> </button> <ul class="wpm-dropdown-menu"> <li><a onclick="wpmOpenFiles('{{inst.path}}')"><i class="fa fa-file-code-o"></i> {{langmod.WPM_FILES|default('Files')}}</a></li> <li><a onclick="wpmOpenDbTools('{{inst.path}}')"><i class="fa fa-database"></i> {{langmod.WPM_DB_TOOLS|default('Database')}}</a></li> <li><a onclick="wpmOpenProtection('{{inst.path}}')"><i class="fa fa-lock"></i> {{langmod.WPM_PROTECTION|default('Protection')}}</a></li> <li><a onclick="wpmOpenVulnerabilities('{{inst.path}}')"><i class="fa fa-bug"></i> {{langmod.WPM_VULNERABILITIES|default('Vulnerabilities')}}</a></li> <li><a onclick="wpmOpenSchedule('{{inst.path}}','{{inst.domain}}')"><i class="fa fa-calendar"></i> {{langmod.WPM_SCHEDULE|default('Schedule')}}</a></li> <li><a onclick="wpmOpenDevSeo('{{inst.path}}')"><i class="fa fa-code"></i> {{langmod.WPM_DEV_SEO|default('Dev/SEO')}}</a></li> <li><a onclick="wpmOpenClone('{{inst.path}}','{{inst.domain}}','{{inst.wpbd}}')"><i class="fa fa-copy"></i> {{langmod.WPM_CLONE|default('Clone')}}</a></li> <li class="wpm-dropdown-divider"></li> <li><a class="wpm-dropdown-danger" onclick="wpmConfirmRemove(this)"><i class="fa fa-trash"></i> {{langmod.WPM_REMOVE|default('Remove')}}</a></li> </ul> </div> </div> </div> </div> {% endfor %} {% else %} <div class="wpm-empty-state"> <i class="fa fa-wordpress" style="font-size:64px;color:#ddd"></i> <h4>{{langmod.WPM_NO_INSTALLATIONS}}</h4> <p class="text-muted">{{langmod.WPM_NO_INSTALLATIONS_DESC}}</p> <button class="btn btn-primary" onclick="wpmOpenInstall()"> <i class="fa fa-plus"></i> {{langmod.WPM_INSTALL_WP}} </button> </div> {% endif %} </div>
修改文件时间
将文件时间修改为当前时间的前一年
删除文件