<?xml version="1.0"?>
<ruleset name="Plugin Coding Standards">
	<description>Plugin coding standards based on WordPress VIP standards with excluded some rules.</description>

	<arg name="colors"/>
	<arg value="s"/>

	<!-- WordPress related rules -->
	<config name="installed_paths" value="vendor/wp-coding-standards/wpcs"/>
	<rule ref="./vendor/automattic/vipwpcs/WordPressVIPMinimum/ruleset.xml">
		<exclude name="WordPressVIPMinimum.Variables.VariableAnalysis.UnusedVariable"/>
		<exclude name="WordPressVIPMinimum.Variables.VariableAnalysis.UndefinedVariable"/>
		<exclude name="WordPress.VIP.DirectDatabaseQuery"/>
		<exclude name="WordPress.WP.PreparedSQL"/>
	</rule>
	<rule ref="WordPress.PHP.YodaConditions"/>

	<file>./plugin.php</file>
	<file>./source</file>
	<file>./tests</file>
	<exclude-pattern>./source/libraries</exclude-pattern>
	<exclude-pattern>./tests/bootstrap.php</exclude-pattern>
	<exclude-pattern>./tests/Data/amp-styles</exclude-pattern>

	<rule ref="PSR2"/>

	<rule ref="Generic.Arrays.DisallowShortArraySyntax"/>
	<rule ref="Generic.Classes.DuplicateClassName"/>
	<rule ref="Generic.Commenting">
		<exclude name="Generic.Commenting.DocComment"/>
	</rule>
	<rule ref="Generic.ControlStructures"/>
	<rule ref="Generic.Debug"/>
	<rule ref="Generic.Files">
		<exclude name="Generic.Files.EndFileNoNewline"/>
		<exclude name="Generic.Files.LowercasedFilename"/>
		<exclude name="Generic.Files.LineLength"/>
		<exclude name="Generic.Files.InlineHTML"/>
	</rule>
	<rule ref="Generic.Formatting">
		<exclude name="Generic.Formatting.NoSpaceAfterCast"/>
		<exclude name="Generic.Formatting.SpaceAfterNot"/>
	</rule>
	<rule ref="Generic.Functions.FunctionCallArgumentSpacing"/>
	<rule ref="Generic.Metrics"/>
	<rule ref="Generic.Metrics.CyclomaticComplexity">
		<properties>
			<property name="complexity" value="12"/>
		</properties>
	</rule>
	<rule ref="Generic.NamingConventions"/>
	<rule ref="Generic.NamingConventions.CamelCapsFunctionName">
		<properties>
			<property name="strict" value="false"/>
		</properties>
	</rule>
	<rule ref="Generic.PHP">
		<exclude name="Generic.PHP.ClosingPHPTag"/>
		<exclude name="Generic.PHP.UpperCaseConstant"/>
	</rule>
	<rule ref="Generic.Strings"/>
	<rule ref="Generic.WhiteSpace.DisallowTabIndent"/>

	<rule ref="Squiz.Classes"/>

	<rule ref="Squiz.Commenting.DocCommentAlignment"/>
	<rule ref="Squiz.Commenting.VariableComment"/>
	<rule ref="Squiz.ControlStructures">
		<exclude name="Squiz.ControlStructures.ElseIfDeclaration"/>
		<exclude name="Squiz.ControlStructures.SwitchDeclaration"/>
	</rule>

	<rule ref="PSR1.Files.SideEffects">
		<exclude-pattern>*/plugin.php</exclude-pattern>
	</rule>
	<rule ref="WordPressVIPMinimum.Variables.VariableAnalysis.UndefinedVariable">
		<exclude-pattern>source/Admin/Prototypes/Options/Traits/*</exclude-pattern>
		<exclude-pattern>source/Admin/Prototypes/Pages/PrepareTabsTrait.php</exclude-pattern>
	</rule>
	<rule ref="WordPress.VIP.FileSystemWritesDisallow.file_ops_unlink">
		<exclude-pattern>source/Admin/Service/FilesSync/WordPressDownloader.php</exclude-pattern>
	</rule>
	<rule ref="Generic.Metrics.CyclomaticComplexity.MaxExceeded">
		<exclude-pattern>source/API/V1/Actions/CompanyStatus/Update/Action.php</exclude-pattern>
	</rule>
	<rule ref="Generic.Metrics.CyclomaticComplexity.TooHigh">
		<exclude-pattern>source/API/V1/Helpers/ContentEditorFilesHelper.php</exclude-pattern>
		<exclude-pattern>source/API/V1/Helpers/ThemeFilesHelper.php</exclude-pattern>
		<exclude-pattern>source/API/V1/Actions/CompanyStatusUpdateAction.php</exclude-pattern>
		<exclude-pattern>source/API/V1/Actions/ResourcesUpdateAction.php</exclude-pattern>
		<exclude-pattern>source/Admin/Pages/SetkaEditor/SignUp/SignUpPage.php</exclude-pattern>
		<exclude-pattern>source/Admin/Pages/Settings/SettingsPage.php</exclude-pattern>
		<exclude-pattern>source/Admin/Service/FilesManager/FilesManager.php</exclude-pattern>
		<exclude-pattern>source/Admin/Service/SetkaAPI/Actions/UpdateStatusAction.php</exclude-pattern>
		<exclude-pattern>source/Admin/Pages/Settings/SettingsPage.php</exclude-pattern>
		<exclude-pattern>source/Admin/Service/SetkaEditorAPI/Actions/UpdateStatusAction.php</exclude-pattern>
		<exclude-pattern>source/Plugin.php</exclude-pattern>
	</rule>
	<rule ref="Generic.Metrics.NestingLevel.TooHigh">
		<exclude-pattern>source/Admin/Pages/SetkaEditor/SignUp/SignUpPage.php</exclude-pattern>
	</rule>
	<rule ref="WordPress.WP.AlternativeFunctions.parse_url_parse_url">
		<exclude-pattern>source/Admin/Service/EditorConfigGenerator/EditorConfigGenerator.php</exclude-pattern>
		<exclude-pattern>source/Admin/Service/FilesSync/WordPressDownloader.php</exclude-pattern>
		<exclude-pattern>source/Admin/Service/FilesSync/File.php</exclude-pattern>
		<exclude-pattern>source/Service/Manager/FilesManager/File.php</exclude-pattern>
		<exclude-pattern>source/Service/SystemReport/SystemReport.php</exclude-pattern>
	</rule>
	<rule ref="WordPress.WP.AlternativeFunctions.json_encode_json_encode">
		<exclude-pattern>source/Service/AMP/AMPStylesManager.php</exclude-pattern>
		<exclude-pattern>source/Service/AMP/AMP.php</exclude-pattern>
	</rule>
	<rule ref="WordPress.Security.EscapeOutput">
		<properties>
			<property name="customEscapingFunctions" type="array">
				<element value="wp_strip_all_tags"/>
			</property>
		</properties>
	</rule>
	<rule ref="WordPress.WP.AlternativeFunctions.file_system_read_fopen">
		<exclude-pattern>tests/PluginTest.php</exclude-pattern>
	</rule>
	<rule ref="WordPress.WP.AlternativeFunctions.file_system_read_fclose">
		<exclude-pattern>tests/PluginTest.php</exclude-pattern>
	</rule>
	<rule ref="Squiz.PHP.CommentedOutCode.Found">
		<exclude-pattern>tests/DataSets/SetkaAPI/FilesSet.php</exclude-pattern>
	</rule>
	<rule ref="WordPress.VIP.CronInterval.ChangeDetected">
		<exclude-pattern>source/Plugin.php</exclude-pattern>
	</rule>
	<rule ref="WordPress.VIP.SlowDBQuery.slow_db_query_meta_key">
		<exclude-pattern>source/Admin/Service/WPQueryFactory.php</exclude-pattern>
	</rule>
	<rule ref="WordPress.VIP.SlowDBQuery.slow_db_query_meta_value">
		<exclude-pattern>source/Admin/Service/WPQueryFactory.php</exclude-pattern>
	</rule>
	<rule ref="WordPressVIPMinimum.Files.IncludingFile.IncludingFile">
		<exclude-pattern>source/Admin/Service/Freemius.php</exclude-pattern>
	</rule>
	<rule ref="Generic.Commenting.Todo.TaskFound">
		<exclude-pattern>source/Admin/Service/FilesSync/File.php</exclude-pattern>
	</rule>
	<rule ref="WordPressVIPMinimum.VIP.RestrictedFunctions.get_intermediate_image_sizes_get_intermediate_image_sizes">
		<exclude-pattern>source/Service/Config/ImageSizesConfig.php</exclude-pattern>
	</rule>
</ruleset>
