]> _ Git - physioassist-wordpress.git/blob
0bd9376cd1c19afced5c7ed852c256561ca23bf1
[physioassist-wordpress.git] /
1 <?php
2
3 class WPML_URL_Converter_Factory {
4         /**
5          * @var array
6          */
7         private $settings;
8
9         /**
10          * @var string
11          */
12         private $default_lang_code;
13
14         /**
15          * @var array
16          */
17         private $active_language_codes;
18
19         /**
20          * @var WPML_Resolve_Object_Url_Helper_Factory
21          */
22         private $object_url_helper_factory;
23
24         const SUBDIR = 1;
25         const DOMAIN = 2;
26
27         /**
28          * @param array  $settings
29          * @param string $default_lang_code
30          * @param array  $active_language_codes
31          */
32         public function __construct( $settings, $default_lang_code, $active_language_codes ) {
33                 $this->settings              = $settings;
34                 $this->default_lang_code     = $default_lang_code;
35                 $this->active_language_codes = $active_language_codes;
36         }
37
38         /**
39          * @return WPML_Resolve_Object_Url_Helper_Factory
40          */
41         public function get_object_url_helper_factory() {
42                 if ( ! $this->object_url_helper_factory ) {
43                         $this->object_url_helper_factory = new WPML_Resolve_Object_Url_Helper_Factory();
44                 }
45
46                 return $this->object_url_helper_factory;
47         }
48
49         /**
50          * @param WPML_Resolve_Object_Url_Helper_Factory $factory
51          */
52         public function set_object_url_helper_factory( WPML_Resolve_Object_Url_Helper_Factory $factory ) {
53                 $this->object_url_helper_factory = $factory;
54         }
55
56         /**
57          * @param int $url_type
58          *
59          * @return WPML_URL_Converter
60          */
61         public function create( $url_type ) {
62                 switch ( $url_type ) {
63                         case self::SUBDIR:
64                                 $wpml_url_converter = $this->create_subdir_converter();
65                                 break;
66                         case self::DOMAIN:
67                                 $wpml_url_converter = $this->create_domain_converter();
68                                 break;
69                         default:
70                                 $wpml_url_converter = $this->create_parameter_converter();
71                 }
72
73                 $home_url = new WPML_URL_Converter_Url_Helper();
74                 $wpml_url_converter->set_url_helper( $home_url );
75
76                 return $wpml_url_converter;
77         }
78
79         /**
80          * @return WPML_URL_Cached_Converter
81          */
82         private function create_subdir_converter() {
83                 $dir_default = false;
84                 if ( ! isset( $this->settings['urls'] ) ) {
85                         $this->settings['urls'] = array();
86                 } else {
87                         if ( isset( $this->settings['urls']['directory_for_default_language'] ) ) {
88                                 $dir_default = $this->settings['urls']['directory_for_default_language'];
89                         }
90                 }
91
92                 $strategy = new WPML_URL_Converter_Subdir_Strategy( $dir_default, $this->default_lang_code, $this->active_language_codes, $this->settings['urls'] );
93
94                 return new WPML_URL_Cached_Converter(
95                         $strategy,
96                         $this->get_object_url_helper_factory()->create(),
97                         $this->default_lang_code,
98                         $this->active_language_codes
99                 );
100         }
101
102         /**
103          * @return WPML_URL_Cached_Converter
104          */
105         private function create_domain_converter() {
106                 $domains            = isset( $this->settings['language_domains'] ) ? $this->settings['language_domains'] : array();
107                 $wpml_wp_api        = new WPML_WP_API();
108                 $strategy           = new WPML_URL_Converter_Domain_Strategy( $domains, $this->default_lang_code, $this->active_language_codes );
109                 $wpml_url_converter = new WPML_URL_Cached_Converter(
110                         $strategy,
111                         $this->get_object_url_helper_factory()->create(),
112                         $this->default_lang_code,
113                         $this->active_language_codes
114                 );
115
116                 $wpml_fix_url_domain = new WPML_Lang_Domain_Filters(
117                         $wpml_url_converter,
118                         $wpml_wp_api,
119                         new WPML_Debug_BackTrace( null, 10 )
120                 );
121                 $wpml_fix_url_domain->add_hooks();
122
123                 $xdomain_data_parser = new WPML_XDomain_Data_Parser( $this->settings, new WPML_Data_Encryptor() );
124                 $xdomain_data_parser->init_hooks();
125
126                 return $wpml_url_converter;
127         }
128
129         /**
130          * @return WPML_URL_Cached_Converter
131          */
132         private function create_parameter_converter() {
133                 $strategy           = new WPML_URL_Converter_Parameter_Strategy( $this->default_lang_code, $this->active_language_codes );
134                 $wpml_url_converter = new WPML_URL_Cached_Converter(
135                         $strategy,
136                         $this->get_object_url_helper_factory()->create(),
137                         $this->default_lang_code,
138                         $this->active_language_codes
139                 );
140
141                 $filters = new WPML_Lang_Parameter_Filters();
142                 $filters->add_hooks();
143
144                 return $wpml_url_converter;
145         }
146 }