<?php
/**
 * Permalink Settings Administration Screen.
 *
 * @package GeChiUI
 * @subpackage Administration
 */

/** GeChiUI Administration Bootstrap */
require_once __DIR__ . '/admin.php';

if ( ! current_user_can( 'manage_options' ) ) {
	gc_die( __( '抱歉，您不能管理此系统的选项。' ) );
}

// Used in the HTML title tag.
$title       = __( '固定链接设置' );
$parent_file = 'options-general.php';

get_current_screen()->add_help_tab(
	array(
		'id'      => 'overview',
		'title'   => __( '概述' ),
		'content' => '<p>' . __( '固定链接是指向您的文章、页面、分类归档和标签归档等网页的固定URL。之所以称之为“固定链接”，是因为链接到每篇文章的URL应该永久固定，不应修改。' ) . '</p>' .
			'<p>' . __( '此界面可以让您选择您的固定链接结构。您可以选择常见的设置或建立自定义URL结构。' ) . '</p>' .
			'<p>' . __( '调整完成后，记得点击页面下方“保存更改”按钮使设置生效。' ) . '</p>',
	)
);

get_current_screen()->add_help_tab(
	array(
		'id'      => 'permalink-settings',
		'title'   => __( '固定链接设置' ),
		'content' => '<p>' . __( '固定链接可以包含有用的信息，如发布日期、标题或其他元素。您可以从推荐的固定链接格式种选择，也可以选择“自定义结构”来创建您自己的格式。' ) . '</p>' .
			'<p>' . sprintf(
				/* translators: %s: Percent sign (%). */
				__( '如果您选择了“朴素”以外的选项，您的带有结构标签（被%s包含的词）的通用URL路径也将出现在自定义结构字段，您将可以在那里进一步修改您的路径。' ),
				'<code>%</code>'
			) . '</p>' .
			'<p>' . sprintf(
				/* translators: 1: %category%, 2: %tag% */
				__( '若您某篇文章包含多个分类或标签，且固定链接结构包含%1$s或%2$s，则只有排序最靠前的分类或标签才会显示在固定链接中。' ),
				'<code>%category%</code>',
				'<code>%tag%</code>'
			) . '</p>' .
			'<p>' . __( '调整完成后，记得点击页面下方“保存更改”按钮使设置生效。' ) . '</p>',
	)
);

get_current_screen()->add_help_tab(
	array(
		'id'      => 'custom-structures',
		'title'   => __( '自定义结构' ),
		'content' => '<p>' . __( '“可选”字段允许您在文章归档的URL中加入分类名和标签名。比如，“未分类”的文章归档页面的地址可以是<code>/topics/uncategorized</code>（默认情况下是<code>/category/uncategorized</code>）。' ) . '</p>' .
			'<p>' . __( '调整完成后，记得点击页面下方“保存更改”按钮使设置生效。' ) . '</p>',
	)
);

$help_sidebar_content = '<p><strong>' . __( '更多信息：' ) . '</strong></p>' .
						'<p>' . __( '<a href="https://www.gechiui.com/support/settings-permalinks-screen/">固定链接设置文档</a>' ) . '</p>' .
						'<p>' . __( '<a href="https://www.gechiui.com/support/using-permalinks/">固定链接使用文档</a>' ) . '</p>';

if ( $is_nginx ) {
	$help_sidebar_content .= '<p>' . __( '<a href="https://www.gechiui.com/support/nginx/">Nginx配置文档</a>。' ) . '</p>';
}

$help_sidebar_content .= '<p>' . __( '<a href="https://www.gechiui.com/support/">支持</a>' ) . '</p>';

get_current_screen()->set_help_sidebar( $help_sidebar_content );
unset( $help_sidebar_content );

$home_path           = get_home_path();
$iis7_permalinks     = iis7_supports_permalinks();
$permalink_structure = get_option( 'permalink_structure' );

$prefix      = '';
$blog_prefix = '';
if ( ! got_url_rewrite() ) {
	$prefix = '/index.php';
}

/*
 * In a subdirectory configuration of multisite, the `/blog` prefix is used by
 * default on the main site to avoid collisions with other sites created on that
 * network. If the `permalink_structure` option has been changed to remove this
 * base prefix, GeChiUI core can no longer account for the possible collision.
 */
if ( is_multisite() && ! is_subdomain_install() && is_main_site() && 0 === strpos( $permalink_structure, '/blog/' ) ) {
	$blog_prefix = '/blog';
}

$category_base = get_option( 'category_base' );
$tag_base      = get_option( 'tag_base' );

$structure_updated        = false;
$htaccess_update_required = false;

if ( isset( $_POST['permalink_structure'] ) || isset( $_POST['category_base'] ) ) {
	check_admin_referer( 'update-permalink' );

	if ( isset( $_POST['permalink_structure'] ) ) {
		if ( isset( $_POST['selection'] ) && 'custom' !== $_POST['selection'] ) {
			$permalink_structure = $_POST['selection'];
		} else {
			$permalink_structure = $_POST['permalink_structure'];
		}

		if ( ! empty( $permalink_structure ) ) {
			$permalink_structure = preg_replace( '#/+#', '/', '/' . str_replace( '#', '', $permalink_structure ) );
			if ( $prefix && $blog_prefix ) {
				$permalink_structure = $prefix . preg_replace( '#^/?index\.php#', '', $permalink_structure );
			} else {
				$permalink_structure = $blog_prefix . $permalink_structure;
			}
		}

		$permalink_structure = sanitize_option( 'permalink_structure', $permalink_structure );

		$gc_rewrite->set_permalink_structure( $permalink_structure );

		$structure_updated = true;
	}

	if ( isset( $_POST['category_base'] ) ) {
		$category_base = $_POST['category_base'];

		if ( ! empty( $category_base ) ) {
			$category_base = $blog_prefix . preg_replace( '#/+#', '/', '/' . str_replace( '#', '', $category_base ) );
		}

		$gc_rewrite->set_category_base( $category_base );
	}

	if ( isset( $_POST['tag_base'] ) ) {
		$tag_base = $_POST['tag_base'];

		if ( ! empty( $tag_base ) ) {
			$tag_base = $blog_prefix . preg_replace( '#/+#', '/', '/' . str_replace( '#', '', $tag_base ) );
		}

		$gc_rewrite->set_tag_base( $tag_base );
	}
}

if ( $iis7_permalinks ) {
	if ( ( ! file_exists( $home_path . 'web.config' ) && win_is_writable( $home_path ) ) || win_is_writable( $home_path . 'web.config' ) ) {
		$writable = true;
	} else {
		$writable = false;
	}
} elseif ( $is_nginx ) {
	$writable = false;
} else {
	if ( ( ! file_exists( $home_path . '.htaccess' ) && is_writable( $home_path ) ) || is_writable( $home_path . '.htaccess' ) ) {
		$writable = true;
	} else {
		$writable       = false;
		$existing_rules = array_filter( extract_from_markers( $home_path . '.htaccess', 'GeChiUI' ) );
		$new_rules      = array_filter( explode( "\n", $gc_rewrite->mod_rewrite_rules() ) );

		$htaccess_update_required = ( $new_rules !== $existing_rules );
	}
}

$using_index_permalinks = $gc_rewrite->using_index_permalinks();

if ( $structure_updated ) {
	$message = __( '固定链接结构已更新。' );

	if ( ! is_multisite() && $permalink_structure && ! $using_index_permalinks ) {
		if ( $iis7_permalinks ) {
			if ( ! $writable ) {
				$message = sprintf(
					/* translators: %s: web.config */
					__( '您现在需要更新%s文件。' ),
					'<code>web.config</code>'
				);
			} else {
				$message = sprintf(
					/* translators: %s: web.config */
					__( '固定链接结构已更新。请去除%s文件的写权限！' ),
					'<code>web.config</code>'
				);
			}
		} elseif ( ! $is_nginx && $htaccess_update_required && ! $writable ) {
			$message = sprintf(
				/* translators: %s: .htaccess */
				__( '您现在需要更新%s文件。' ),
				'<code>.htaccess</code>'
			);
		}
	}

	if ( ! get_settings_errors() ) {
		add_settings_error( 'general', 'settings_updated', $message, 'success' );
	}

	set_transient( 'settings_errors', get_settings_errors(), 30 );

	gc_redirect( admin_url( 'options-permalink.php?settings-updated=true' ) );
	exit;
}

flush_rewrite_rules();

require_once ABSPATH . 'gc-admin/admin-header.php';
?>
<div class="wrap">
	<div class="page-header"><h2 class="header-title"><?php echo esc_html( $title ); ?></h2></div>
	<form name="form" action="options-permalink.php" method="post">
		<?php gc_nonce_field( 'update-permalink' ); ?>
		<?php
		if ( is_multisite() && ! is_subdomain_install() && is_main_site() && 0 === strpos( $permalink_structure, '/blog/' ) ) {
			$permalink_structure = preg_replace( '|^/?blog|', '', $permalink_structure );
			$category_base       = preg_replace( '|^/?blog|', '', $category_base );
			$tag_base            = preg_replace( '|^/?blog|', '', $tag_base );
		}

		$structures = array(
			0 => '',
			1 => $prefix . '/%year%/%monthnum%/%day%/%postname%/',
			2 => $prefix . '/%year%/%monthnum%/%postname%/',
			3 => $prefix . '/' . _x( '归档', 'sample permalink base' ) . '/%post_id%',
			4 => $prefix . '/%postname%/',
		);
		?>
	<div class="card">
		<div class="card-header">
			<h4 class="card-title"><?php _e( '常用设置' ); ?></h4>
		</div>
		<div class="card-body">
			<p>
			<?php
				printf(
					/* translators: %s: Documentation URL. */
					__( 'GeChiUI让您能够为您的固定链接和归档建立自定义URL结构。自定义URL结构可以为您的链接提高美感、可用性和前向兼容性。这里有<a href="%s">一些可用的标签</a>，以及一些入门范例。' ),
					__( 'https://www.gechiui.com/support/using-permalinks/' )
				);
				?>
			</p>
			<table class="form-table permalink-structure">
				<tr>
					<th scope="row"><label><input name="selection" type="radio" value="" <?php checked( '', $permalink_structure ); ?> /> <?php _e( '朴素' ); ?></label></th>
					<td><code><?php echo get_option( 'home' ); ?>/?p=123</code></td>
				</tr>
				<tr>
					<th scope="row"><label><input name="selection" type="radio" value="<?php echo esc_attr( $structures[1] ); ?>" <?php checked( $structures[1], $permalink_structure ); ?> /> <?php _e( '日期和名称型' ); ?></label></th>
					<td><code><?php echo get_option( 'home' ) . $blog_prefix . $prefix . '/' . gmdate( 'Y' ) . '/' . gmdate( 'm' ) . '/' . gmdate( 'd' ) . '/' . _x( 'sample-post', 'sample permalink structure' ) . '/'; ?></code></td>
				</tr>
				<tr>
					<th scope="row"><label><input name="selection" type="radio" value="<?php echo esc_attr( $structures[2] ); ?>" <?php checked( $structures[2], $permalink_structure ); ?> /> <?php _e( '月份和名称型' ); ?></label></th>
					<td><code><?php echo get_option( 'home' ) . $blog_prefix . $prefix . '/' . gmdate( 'Y' ) . '/' . gmdate( 'm' ) . '/' . _x( 'sample-post', 'sample permalink structure' ) . '/'; ?></code></td>
				</tr>
				<tr>
					<th scope="row"><label><input name="selection" type="radio" value="<?php echo esc_attr( $structures[3] ); ?>" <?php checked( $structures[3], $permalink_structure ); ?> /> <?php _e( '数字型' ); ?></label></th>
					<td><code><?php echo get_option( 'home' ) . $blog_prefix . $prefix . '/' . _x( '归档', 'sample permalink base' ) . '/123'; ?></code></td>
				</tr>
				<tr>
					<th scope="row"><label><input name="selection" type="radio" value="<?php echo esc_attr( $structures[4] ); ?>" <?php checked( $structures[4], $permalink_structure ); ?> /> <?php _e( '文章名' ); ?></label></th>
					<td><code><?php echo get_option( 'home' ) . $blog_prefix . $prefix . '/' . _x( 'sample-post', 'sample permalink structure' ) . '/'; ?></code></td>
				</tr>
				<tr>
					<th scope="row">
						<label><input name="selection" id="custom_selection" type="radio" value="custom" <?php checked( ! in_array( $permalink_structure, $structures, true ) ); ?> />
						<?php _e( '自定义结构' ); ?>
						</label>
					</th>
					<td>
						<code><?php echo get_option( 'home' ) . $blog_prefix; ?></code>
						<input name="permalink_structure" id="permalink_structure" type="text" value="<?php echo esc_attr( $permalink_structure ); ?>" class="regular-text code" />
						<div class="available-structure-tags hide-if-no-js">
							<div id="custom_selection_updated" aria-live="assertive" class="screen-reader-text"></div>
							<?php
							$available_tags = array(
								/* translators: %s: Permalink structure tag. */
								'year'     => __( '%s（文章的年份，四位数字，形如2004。）' ),
								/* translators: %s: Permalink structure tag. */
								'monthnum' => __( '%s（月份，形如05。）' ),
								/* translators: %s: Permalink structure tag. */
								'day'      => __( '%s（日期，形如28。）' ),
								/* translators: %s: Permalink structure tag. */
								'hour'     => __( '%s（小时，形如15。）' ),
								/* translators: %s: Permalink structure tag. */
								'minute'   => __( '%s（分钟，形如43。）' ),
								/* translators: %s: Permalink structure tag. */
								'second'   => __( '%s（秒数，形如33。）' ),
								/* translators: %s: Permalink structure tag. */
								'post_id'  => __( '%s（文章的唯一ID，形如423。）' ),
								/* translators: %s: Permalink structure tag. */
								'postname' => __( '%s（处理过的文章标题（别名）。）' ),
								/* translators: %s: Permalink structure tag. */
								'category' => __( '%s（分类别名，嵌套的子分类在URL中会显示为嵌套的文件夹。）' ),
								/* translators: %s: Permalink structure tag. */
								'author'   => __( '%s（处理过的作者名。）' ),
							);

							/**
							 * Filters the list of available permalink structure tags on the Permalinks settings page.
							 *
						
							 *
							 * @param string[] $available_tags An array of key => value pairs of available permalink structure tags.
							 */
							$available_tags = apply_filters( 'available_permalink_structure_tags', $available_tags );

							/* translators: %s: Permalink structure tag. */
							$structure_tag_added = __( '%s已加入固定链接结构' );

							/* translators: %s: Permalink structure tag. */
							$structure_tag_already_used = __( '%s（已在固定链接结构中使用）' );

							if ( ! empty( $available_tags ) ) :
								?>
								<p><?php _e( '可用标签：' ); ?></p>
								<ul role="list">
									<?php
									foreach ( $available_tags as $tag => $explanation ) {
										?>
										<li>
											<button type="button"
													class="button button-secondary"
													aria-label="<?php echo esc_attr( sprintf( $explanation, $tag ) ); ?>"
													data-added="<?php echo esc_attr( sprintf( $structure_tag_added, $tag ) ); ?>"
													data-used="<?php echo esc_attr( sprintf( $structure_tag_already_used, $tag ) ); ?>">
												<?php echo '%' . $tag . '%'; ?>
											</button>
										</li>
										<?php
									}
									?>
								</ul>
							<?php endif; ?>
						</div>
					</td>
				</tr>
			</table>
		</div>
	</div>
	<div class="card">
	    <div class="card-header">
	        <h4 class="card-title"><?php _e( '可选' ); ?></h4>
		</div>
		<div class="card-body">
			<p>
			<?php
			/* translators: %s: Placeholder that must come at the start of the URL. */
			printf( __( '如果您喜欢，您可以在此给您的分类和标签自定义URL。比如，使用<code>topics</code>作为您的分类基础将会使您的分类链接变成<code>%s/topics/uncategorized/</code>。如果您留空此处，默认值将被使用。' ), get_option( 'home' ) . $blog_prefix . $prefix );
			?>
			</p>
			<table class="form-table" role="presentation">
				<tr>
					<th><label for="category_base"><?php /* translators: Prefix for category permalinks. */ _e( '分类前缀' ); ?></label></th>
					<td><?php echo $blog_prefix; ?> <input name="category_base" id="category_base" type="text" value="<?php echo esc_attr( $category_base ); ?>" class="regular-text code" /></td>
				</tr>
				<tr>
					<th><label for="tag_base"><?php _e( '标签前缀' ); ?></label></th>
					<td><?php echo $blog_prefix; ?> <input name="tag_base" id="tag_base" type="text" value="<?php echo esc_attr( $tag_base ); ?>" class="regular-text code" /></td>
				</tr>
				<?php do_settings_fields( 'permalink', 'optional' ); ?>
			</table>
			<?php do_settings_sections( 'permalink' ); ?>
		</div>
	</div>
	<?php submit_button(); ?>
	</form>
	<?php if ( ! is_multisite() ) { ?>
		<?php
		if ( $iis7_permalinks ) :
			if ( isset( $_POST['submit'] ) && $permalink_structure && ! $using_index_permalinks && ! $writable ) :
				if ( file_exists( $home_path . 'web.config' ) ) :
					?>
	<p id="iis-description-a">
					<?php
					printf(
						/* translators: 1: web.config, 2: Documentation URL, 3: CTRL + a, 4: Element code. */
						__( '如果您的%1$s文件<a href="%2$s">可写</a>，我们即会自动帮您完成，但其目前不可写，所以以下是您需要加入您的%1$s文件中的URL重写规则。点击文本框并按%3$s来全选，然后将其粘贴入%1$s内的%4$s元素中。' ),
						'<code>web.config</code>',
						__( 'https://www.gechiui.com/support/changing-file-permissions/' ),
						'<kbd>CTRL + a</kbd>',
						'<code>/&lt;configuration&gt;/&lt;system.webServer&gt;/&lt;rewrite&gt;/&lt;rules&gt;</code>'
					);
					?>
	</p>
	<form action="options-permalink.php" method="post">
					<?php gc_nonce_field( 'update-permalink' ); ?>
		<p><label for="rules"><?php _e( '重写规则：' ); ?></label><br /><textarea rows="9" class="large-text readonly" name="rules" id="rules" readonly="readonly" aria-describedby="iis-description-a"><?php echo esc_textarea( $gc_rewrite->iis7_url_rewrite_rules() ); ?></textarea></p>
	</form>
	<p>
					<?php
					printf(
						/* translators: %s: web.config */
						__( '如果您暂时将%s文件设置为可写，请在规则保存后恢复其原有权限。' ),
						'<code>web.config</code>'
					);
					?>
	</p>
			<?php else : ?>
	<p id="iis-description-b">
				<?php
				printf(
					/* translators: 1: Documentation URL, 2: web.config, 3: CTRL + a */
					__( '如果您的系统根目录<a href="%1$s">可写</a>，我们即会自动帮您完成，但其目前不可写，所以以下是您需要加入您的%2$s文件中的URL重写规则。请在系统根目录中创建名为%2$s的文件，点击文本框并按%3$s来全选，并粘贴入%2$s文件。' ),
					__( 'https://www.gechiui.com/support/changing-file-permissions/' ),
					'<code>web.config</code>',
					'<kbd>CTRL + a</kbd>'
				);
				?>
	</p>
	<form action="options-permalink.php" method="post">
				<?php gc_nonce_field( 'update-permalink' ); ?>
		<p><label for="rules"><?php _e( '重写规则：' ); ?></label><br /><textarea rows="18" class="large-text readonly" name="rules" id="rules" readonly="readonly" aria-describedby="iis-description-b"><?php echo esc_textarea( $gc_rewrite->iis7_url_rewrite_rules( true ) ); ?></textarea></p>
	</form>
	<p>
				<?php
				printf(
					/* translators: %s: web.config */
					__( '如果您暂时将您的系统根目录设置为可写供我们自动创建%s文件，请不要忘记在文件创建完成后恢复相应的权限。' ),
					'<code>web.config</code>'
				);
				?>
	</p>
			<?php endif; ?>
		<?php endif; ?>
			<?php
	else :
		if ( $permalink_structure && ! $using_index_permalinks && ! $writable && $htaccess_update_required ) :
			?>
	<p id="htaccess-description">
			<?php
			printf(
				/* translators: 1: .htaccess, 2: Documentation URL, 3: CTRL + a */
				__( '如果您的%1$s文件<a href="%2$s">可写</a>，我们即会自动帮您完成，但其目前不可写，所以以下是您需要加入您的%1$s文件中的mod_rewrite规则。点击文本框并按%3$s来全选。' ),
				'<code>.htaccess</code>',
				__( 'https://www.gechiui.com/support/changing-file-permissions/' ),
				'<kbd>CTRL + a</kbd>'
			);
			?>
	</p>
	<form action="options-permalink.php" method="post">
			<?php gc_nonce_field( 'update-permalink' ); ?>
		<p><label for="rules"><?php _e( '重写规则：' ); ?></label><br /><textarea rows="8" class="large-text readonly" name="rules" id="rules" readonly="readonly" aria-describedby="htaccess-description"><?php echo esc_textarea( $gc_rewrite->mod_rewrite_rules() ); ?></textarea></p>
	</form>
		<?php endif; ?>
	<?php endif; ?>
	<?php } // End if ! is_multisite(). ?>
</div>

<?php require_once ABSPATH . 'gc-admin/admin-footer.php'; ?>
