Add website fields to project meta box
Adds a 'This project is a website' toggle to the Repository meta box. When checked, site fields (URL, platform, optional screenshot) replace the git-repo fields; when unchecked, repo fields are shown and site fields are cleared. Existing posts default to repo mode. - admin/metabox.php: checkbox, site URL/platform/screenshot inputs with media-library picker, JS toggle, save handler that switches modes - includes/helper-functions.php: projects_portfolio_is_website / get _site_url / get_site_platform / get_site_screenshot_url helpers - templates/single-projects.php: website-mode rendering (Visit Site button, platform row, screenshot) - tests/test-metabox.php: website-mode persistence + mode-switch tests - tests/wp-stubs.php: sanitize_text_field, absint stubs
This commit is contained in:
@@ -13,23 +13,31 @@ $settings = projects_portfolio_settings();
|
||||
$project_id = get_the_ID();
|
||||
$download_count = (int) get_post_meta( $project_id, '_projects_portfolio_download_count', true );
|
||||
|
||||
$repo_url = get_post_meta( $project_id, '_projects_portfolio_repo_url', true );
|
||||
if ( '' === $repo_url ) {
|
||||
$repo_url = get_post_meta( $project_id, '_projects_portfolio_github_url', true );
|
||||
$is_website = projects_portfolio_is_website( $project_id );
|
||||
|
||||
if ( $is_website ) {
|
||||
$site_url = projects_portfolio_get_site_url( $project_id );
|
||||
$site_platform = projects_portfolio_get_site_platform( $project_id );
|
||||
$site_shot_url = projects_portfolio_get_site_screenshot_url( $project_id, 'large' );
|
||||
} else {
|
||||
$repo_url = get_post_meta( $project_id, '_projects_portfolio_repo_url', true );
|
||||
if ( '' === $repo_url ) {
|
||||
$repo_url = get_post_meta( $project_id, '_projects_portfolio_github_url', true );
|
||||
}
|
||||
|
||||
$repo_data = projects_portfolio_get_repo_data( $project_id );
|
||||
$version = projects_portfolio_get_version( $project_id );
|
||||
$owner = projects_portfolio_get_owner( $project_id );
|
||||
|
||||
$owner_avatar = $repo_data['owner']['avatar_url'] ?? '';
|
||||
$owner_name = $repo_data['owner']['login'] ?? '';
|
||||
$owner_url = $repo_data['owner']['html_url'] ?? '';
|
||||
$last_updated = $repo_data['updated_at'] ?? '';
|
||||
$language = $repo_data['language'] ?? '';
|
||||
$license = $repo_data['license']['name'] ?? 'None';
|
||||
$browse_url = $repo_url ? projects_portfolio_get_repo_browse_url( $project_id ) : '';
|
||||
}
|
||||
|
||||
$repo_data = projects_portfolio_get_repo_data( $project_id );
|
||||
$version = projects_portfolio_get_version( $project_id );
|
||||
$owner = projects_portfolio_get_owner( $project_id );
|
||||
|
||||
$owner_avatar = $repo_data['owner']['avatar_url'] ?? '';
|
||||
$owner_name = $repo_data['owner']['login'] ?? '';
|
||||
$owner_url = $repo_data['owner']['html_url'] ?? '';
|
||||
$last_updated = $repo_data['updated_at'] ?? '';
|
||||
$language = $repo_data['language'] ?? '';
|
||||
$license = $repo_data['license']['name'] ?? 'None';
|
||||
$browse_url = $repo_url ? projects_portfolio_get_repo_browse_url( $project_id ) : '';
|
||||
|
||||
if ( $last_updated ) {
|
||||
$last_updated = date_i18n( get_option( 'date_format' ), strtotime( $last_updated ) );
|
||||
}
|
||||
@@ -49,6 +57,13 @@ if ( $last_updated ) {
|
||||
</div>
|
||||
|
||||
<div class="project-main-content">
|
||||
<?php if ( ! empty( $site_shot_url ) ) : ?>
|
||||
<div class="project-screenshot">
|
||||
<a href="<?php echo esc_url( $site_url ); ?>" target="_blank" rel="noopener noreferrer">
|
||||
<img src="<?php echo esc_url( $site_shot_url ); ?>" alt="<?php echo esc_attr( get_the_title() ); ?>" />
|
||||
</a>
|
||||
</div>
|
||||
<?php endif; ?>
|
||||
<div class="project-description">
|
||||
<h1 class="project-title">
|
||||
<?php
|
||||
@@ -68,7 +83,15 @@ if ( $last_updated ) {
|
||||
<a href="<?php echo esc_url( site_url( '/download/' . $project_id ) ); ?>" class="button project-download-button">
|
||||
<?php esc_html_e( 'Download Now', 'projects-wp' ); ?>
|
||||
</a>
|
||||
<?php if ( $repo_url ) : ?>
|
||||
<?php if ( $is_website ) : ?>
|
||||
<?php if ( ! empty( $site_url ) ) : ?>
|
||||
<a href="<?php echo esc_url( $site_url ); ?>" class="button project-repo-button" target="_blank" rel="noopener noreferrer">
|
||||
<?php esc_html_e( 'Visit Site', 'projects-wp' ); ?>
|
||||
</a>
|
||||
<?php else : ?>
|
||||
<p><?php esc_html_e( 'Website:', 'projects-wp' ); ?> <?php esc_html_e( 'No URL linked.', 'projects-wp' ); ?></p>
|
||||
<?php endif; ?>
|
||||
<?php elseif ( ! empty( $repo_url ) ) : ?>
|
||||
<a href="<?php echo esc_url( $browse_url ); ?>" class="button project-repo-button" target="_blank" rel="noopener noreferrer">
|
||||
<?php esc_html_e( 'View Repo', 'projects-wp' ); ?>
|
||||
</a>
|
||||
@@ -84,7 +107,15 @@ if ( $last_updated ) {
|
||||
?>
|
||||
<table class="project-meta-table">
|
||||
<tbody>
|
||||
<?php if ( $settings['templates']['version'] ) : ?>
|
||||
<?php if ( $is_website ) : ?>
|
||||
<?php if ( $site_platform ) : ?>
|
||||
<tr>
|
||||
<th><?php esc_html_e( 'Platform:', 'projects-wp' ); ?></th>
|
||||
<td><?php echo nl2br( esc_html( $site_platform ) ); // phpcs:ignore ?></td>
|
||||
</tr>
|
||||
<?php endif; ?>
|
||||
<?php else : ?>
|
||||
<?php if ( $settings['templates']['version'] ) : ?>
|
||||
<tr>
|
||||
<th><?php esc_html_e( 'Version:', 'projects-wp' ); ?></th>
|
||||
<td><?php esc_html_e( $version ); ?></td>
|
||||
@@ -141,12 +172,13 @@ if ( $last_updated ) {
|
||||
<?php
|
||||
endif;
|
||||
endif;
|
||||
endif; // end repo-mode meta rows (else branch of $is_website).
|
||||
?>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
|
||||
<?php if ( $settings['templates']['github_owner'] && $owner_avatar && $owner_name ) : ?>
|
||||
<?php if ( ! $is_website && $settings['templates']['github_owner'] && $owner_avatar && $owner_name ) : ?>
|
||||
<div class="project-owner">
|
||||
<span class="project-owner-avatar" style="display:block !important;width:50px !important;height:50px !important;min-width:50px !important;min-height:50px !important;max-width:50px !important;max-height:50px !important;border-radius:50% !important;background-image:url('<?php echo esc_url( $owner_avatar ); ?>') !important;background-size:40px 40px !important;background-position:center center !important;background-repeat:no-repeat !important;flex-shrink:0 !important;flex-grow:0 !important;" aria-label="<?php echo esc_attr( $owner_name ); ?>" role="img"></span>
|
||||
<span class="project-owner-name">
|
||||
|
||||
Reference in New Issue
Block a user