Completed
Branch dependabot/npm_and_yarn/wordpr... (563a96)
by
unknown
57:01 queued 49:08
created
admin/new/pricing/help_tours/Pricing_Edit_Price_Type_Help_Tour.class.php 2 patches
Indentation   +72 added lines, -72 removed lines patch added patch discarded remove patch
@@ -15,84 +15,84 @@
 block discarded – undo
15 15
 class Pricing_Edit_Price_Type_Help_Tour extends EE_Help_Tour
16 16
 {
17 17
 
18
-    protected function _set_tour_properties()
19
-    {
20
-        $this->_label = __('Edit Price Type Tour', 'event_espresso');
21
-        $this->_slug = 'edit-price-type-joyride';
22
-    }
18
+	protected function _set_tour_properties()
19
+	{
20
+		$this->_label = __('Edit Price Type Tour', 'event_espresso');
21
+		$this->_slug = 'edit-price-type-joyride';
22
+	}
23 23
 
24 24
 
25
-    protected function _set_tour_stops()
26
-    {
27
-        $this->_stops = array(
28
-            10 => array(
29
-                'content' => $this->_start(),
30
-            ),
31
-            20 => array(
32
-                'id'      => 'base_type',
33
-                'content' => $this->_basic_type_stop(),
34
-                'options' => array(
35
-                    'tipLocation'    => 'top',
36
-                    'tipAdjustmentY' => -50,
37
-                    'tipAdjustmentX' => -15,
38
-                ),
39
-            ),
40
-            30 => array(
41
-                'id'      => 'PRT_name',
42
-                'content' => $this->_price_type_name_stop(),
43
-                'options' => array(
44
-                    'tipLocation'    => 'top',
45
-                    'tipAdjustmentY' => -40,
46
-                ),
47
-            ),
48
-            40 => array(
49
-                'id'      => 'PRT_name',
50
-                'content' => $this->_percentage_dollar_amount_stop(),
51
-                'options' => array(
52
-                    'tipLocation'    => 'top',
53
-                    'tipAdjustmentY' => 45,
54
-                ),
55
-            ),
56
-            50 => array(
57
-                'id'      => 'PRT_order',
58
-                'content' => $this->_order_of_application_stop(),
59
-                'options' => array(
60
-                    'tipLocation'    => 'top',
61
-                    'tipAdjustmentY' => -40,
62
-                ),
63
-            ),
64
-        );
65
-    }
25
+	protected function _set_tour_stops()
26
+	{
27
+		$this->_stops = array(
28
+			10 => array(
29
+				'content' => $this->_start(),
30
+			),
31
+			20 => array(
32
+				'id'      => 'base_type',
33
+				'content' => $this->_basic_type_stop(),
34
+				'options' => array(
35
+					'tipLocation'    => 'top',
36
+					'tipAdjustmentY' => -50,
37
+					'tipAdjustmentX' => -15,
38
+				),
39
+			),
40
+			30 => array(
41
+				'id'      => 'PRT_name',
42
+				'content' => $this->_price_type_name_stop(),
43
+				'options' => array(
44
+					'tipLocation'    => 'top',
45
+					'tipAdjustmentY' => -40,
46
+				),
47
+			),
48
+			40 => array(
49
+				'id'      => 'PRT_name',
50
+				'content' => $this->_percentage_dollar_amount_stop(),
51
+				'options' => array(
52
+					'tipLocation'    => 'top',
53
+					'tipAdjustmentY' => 45,
54
+				),
55
+			),
56
+			50 => array(
57
+				'id'      => 'PRT_order',
58
+				'content' => $this->_order_of_application_stop(),
59
+				'options' => array(
60
+					'tipLocation'    => 'top',
61
+					'tipAdjustmentY' => -40,
62
+				),
63
+			),
64
+		);
65
+	}
66 66
 
67 67
 
68
-    protected function _start()
69
-    {
70
-        $content = '<h3>' . __('Edit Price Type', 'event_espresso') . '</h3>';
71
-        $content .= '<p>'
72
-                    . __(
73
-                        'This tour of the Edit Price Type page will go over different areas of the screen to help you understand what they are used for.',
74
-                        'event_espresso'
75
-                    ) . '</p>';
76
-        return $content;
77
-    }
68
+	protected function _start()
69
+	{
70
+		$content = '<h3>' . __('Edit Price Type', 'event_espresso') . '</h3>';
71
+		$content .= '<p>'
72
+					. __(
73
+						'This tour of the Edit Price Type page will go over different areas of the screen to help you understand what they are used for.',
74
+						'event_espresso'
75
+					) . '</p>';
76
+		return $content;
77
+	}
78 78
 
79
-    protected function _basic_type_stop()
80
-    {
81
-        return '<p>' . __('Set a price type to be a discount, surcharge, or tax.', 'event_espresso') . '</p>';
82
-    }
79
+	protected function _basic_type_stop()
80
+	{
81
+		return '<p>' . __('Set a price type to be a discount, surcharge, or tax.', 'event_espresso') . '</p>';
82
+	}
83 83
 
84
-    protected function _price_type_name_stop()
85
-    {
86
-        return '<p>' . __('The name of the price type.', 'event_espresso') . '</p>';
87
-    }
84
+	protected function _price_type_name_stop()
85
+	{
86
+		return '<p>' . __('The name of the price type.', 'event_espresso') . '</p>';
87
+	}
88 88
 
89
-    protected function _percentage_dollar_amount_stop()
90
-    {
91
-        return '<p>' . __('Set a price type to be percentage-based or a fixed amount.', 'event_espresso') . '</p>';
92
-    }
89
+	protected function _percentage_dollar_amount_stop()
90
+	{
91
+		return '<p>' . __('Set a price type to be percentage-based or a fixed amount.', 'event_espresso') . '</p>';
92
+	}
93 93
 
94
-    protected function _order_of_application_stop()
95
-    {
96
-        return '<p>' . __('Set the order of application for a price type.', 'event_espresso') . '</p>';
97
-    }
94
+	protected function _order_of_application_stop()
95
+	{
96
+		return '<p>' . __('Set the order of application for a price type.', 'event_espresso') . '</p>';
97
+	}
98 98
 }
Please login to merge, or discard this patch.
Spacing   +6 added lines, -6 removed lines patch added patch discarded remove patch
@@ -67,32 +67,32 @@
 block discarded – undo
67 67
 
68 68
     protected function _start()
69 69
     {
70
-        $content = '<h3>' . __('Edit Price Type', 'event_espresso') . '</h3>';
70
+        $content = '<h3>'.__('Edit Price Type', 'event_espresso').'</h3>';
71 71
         $content .= '<p>'
72 72
                     . __(
73 73
                         'This tour of the Edit Price Type page will go over different areas of the screen to help you understand what they are used for.',
74 74
                         'event_espresso'
75
-                    ) . '</p>';
75
+                    ).'</p>';
76 76
         return $content;
77 77
     }
78 78
 
79 79
     protected function _basic_type_stop()
80 80
     {
81
-        return '<p>' . __('Set a price type to be a discount, surcharge, or tax.', 'event_espresso') . '</p>';
81
+        return '<p>'.__('Set a price type to be a discount, surcharge, or tax.', 'event_espresso').'</p>';
82 82
     }
83 83
 
84 84
     protected function _price_type_name_stop()
85 85
     {
86
-        return '<p>' . __('The name of the price type.', 'event_espresso') . '</p>';
86
+        return '<p>'.__('The name of the price type.', 'event_espresso').'</p>';
87 87
     }
88 88
 
89 89
     protected function _percentage_dollar_amount_stop()
90 90
     {
91
-        return '<p>' . __('Set a price type to be percentage-based or a fixed amount.', 'event_espresso') . '</p>';
91
+        return '<p>'.__('Set a price type to be percentage-based or a fixed amount.', 'event_espresso').'</p>';
92 92
     }
93 93
 
94 94
     protected function _order_of_application_stop()
95 95
     {
96
-        return '<p>' . __('Set the order of application for a price type.', 'event_espresso') . '</p>';
96
+        return '<p>'.__('Set the order of application for a price type.', 'event_espresso').'</p>';
97 97
     }
98 98
 }
Please login to merge, or discard this patch.
new/pricing/help_tours/Pricing_Price_Types_Default_Help_Tour.class.php 2 patches
Indentation   +125 added lines, -125 removed lines patch added patch discarded remove patch
@@ -15,140 +15,140 @@
 block discarded – undo
15 15
 class Pricing_Price_Types_Default_Help_Tour extends EE_Help_Tour
16 16
 {
17 17
 
18
-    protected function _set_tour_properties()
19
-    {
20
-        $this->_label = __('Price Types Tour', 'event_espresso');
21
-        $this->_slug = 'default-price-types-joyride';
22
-    }
18
+	protected function _set_tour_properties()
19
+	{
20
+		$this->_label = __('Price Types Tour', 'event_espresso');
21
+		$this->_slug = 'default-price-types-joyride';
22
+	}
23 23
 
24 24
 
25
-    protected function _set_tour_stops()
26
-    {
27
-        $this->_stops = array(
28
-            10 => array(
29
-                'content' => $this->_start(),
30
-            ),
31
-            20 => array(
32
-                'id'      => 'name',
33
-                'content' => $this->_name_column_stop(),
34
-                'options' => array(
35
-                    'tipLocation'    => 'top',
36
-                    'tipAdjustmentX' => -5,
37
-                    'tipAdjustmentY' => -30,
38
-                ),
39
-            ),
40
-            30 => array(
41
-                'id'      => 'base_type',
42
-                'content' => $this->_base_type_stop(),
43
-                'options' => array(
44
-                    'tipLocation'    => 'top',
45
-                    'tipAdjustmentX' => 120,
46
-                    'tipAdjustmentY' => -30,
47
-                ),
48
-            ),
49
-            40 => array(
50
-                'id'      => 'percent',
51
-                'content' => $this->_percent_column_stop(),
52
-                'options' => array(
53
-                    'tipLocation'    => 'top',
54
-                    'tipAdjustmentX' => 120,
55
-                    'tipAdjustmentY' => -30,
56
-                ),
57
-            ),
58
-            50 => array(
59
-                'id'      => 'order',
60
-                'content' => $this->_order_column_stop(),
61
-                'options' => array(
62
-                    'tipLocation'    => 'left',
63
-                    'tipAdjustmentY' => -30,
64
-                    'tipAdjustmentX' => 100,
65
-                ),
66
-            ),
67
-            60 => array(
68
-                'class'   => 'bulkactions',
69
-                'content' => $this->_bulk_actions_stop(),
70
-                'options' => array(
71
-                    'tipLocation'    => 'left',
72
-                    'tipAdjustmentY' => -50,
73
-                    'tipAdjustmentX' => -75,
74
-                ),
75
-            ),
76
-            70 => array(
77
-                'id'      => 'event-espresso_page_pricing-search-input',
78
-                'content' => $this->_search_stop(),
79
-                'options' => array(
80
-                    'tipLocation'    => 'left',
81
-                    'tipAdjustmentY' => -50,
82
-                    'tipAdjustmentX' => -15,
83
-                ),
84
-            ),
85
-        );
86
-    }
25
+	protected function _set_tour_stops()
26
+	{
27
+		$this->_stops = array(
28
+			10 => array(
29
+				'content' => $this->_start(),
30
+			),
31
+			20 => array(
32
+				'id'      => 'name',
33
+				'content' => $this->_name_column_stop(),
34
+				'options' => array(
35
+					'tipLocation'    => 'top',
36
+					'tipAdjustmentX' => -5,
37
+					'tipAdjustmentY' => -30,
38
+				),
39
+			),
40
+			30 => array(
41
+				'id'      => 'base_type',
42
+				'content' => $this->_base_type_stop(),
43
+				'options' => array(
44
+					'tipLocation'    => 'top',
45
+					'tipAdjustmentX' => 120,
46
+					'tipAdjustmentY' => -30,
47
+				),
48
+			),
49
+			40 => array(
50
+				'id'      => 'percent',
51
+				'content' => $this->_percent_column_stop(),
52
+				'options' => array(
53
+					'tipLocation'    => 'top',
54
+					'tipAdjustmentX' => 120,
55
+					'tipAdjustmentY' => -30,
56
+				),
57
+			),
58
+			50 => array(
59
+				'id'      => 'order',
60
+				'content' => $this->_order_column_stop(),
61
+				'options' => array(
62
+					'tipLocation'    => 'left',
63
+					'tipAdjustmentY' => -30,
64
+					'tipAdjustmentX' => 100,
65
+				),
66
+			),
67
+			60 => array(
68
+				'class'   => 'bulkactions',
69
+				'content' => $this->_bulk_actions_stop(),
70
+				'options' => array(
71
+					'tipLocation'    => 'left',
72
+					'tipAdjustmentY' => -50,
73
+					'tipAdjustmentX' => -75,
74
+				),
75
+			),
76
+			70 => array(
77
+				'id'      => 'event-espresso_page_pricing-search-input',
78
+				'content' => $this->_search_stop(),
79
+				'options' => array(
80
+					'tipLocation'    => 'left',
81
+					'tipAdjustmentY' => -50,
82
+					'tipAdjustmentX' => -15,
83
+				),
84
+			),
85
+		);
86
+	}
87 87
 
88 88
 
89
-    protected function _start()
90
-    {
91
-        $content = '<h3>' . __('Price Types', 'event_espresso') . '</h3>';
92
-        $content .= '<p>'
93
-                    . __(
94
-                        'This tour of the Price Types page will go over different areas of the screen to help you understand what they are used for.',
95
-                        'event_espresso'
96
-                    ) . '</p>';
97
-        return $content;
98
-    }
89
+	protected function _start()
90
+	{
91
+		$content = '<h3>' . __('Price Types', 'event_espresso') . '</h3>';
92
+		$content .= '<p>'
93
+					. __(
94
+						'This tour of the Price Types page will go over different areas of the screen to help you understand what they are used for.',
95
+						'event_espresso'
96
+					) . '</p>';
97
+		return $content;
98
+	}
99 99
 
100
-    protected function _name_column_stop()
101
-    {
102
-        return '<p>'
103
-               . __(
104
-                   'The name of the price type. Can be sorted in ascending or descending order.',
105
-                   'event_espresso'
106
-               ) . '</p>';
107
-    }
100
+	protected function _name_column_stop()
101
+	{
102
+		return '<p>'
103
+			   . __(
104
+				   'The name of the price type. Can be sorted in ascending or descending order.',
105
+				   'event_espresso'
106
+			   ) . '</p>';
107
+	}
108 108
 
109
-    protected function _base_type_stop()
110
-    {
111
-        return '<p>' . __('View if a price type is a discount, surcharge, or tax.', 'event_espresso') . '</p>';
112
-    }
109
+	protected function _base_type_stop()
110
+	{
111
+		return '<p>' . __('View if a price type is a discount, surcharge, or tax.', 'event_espresso') . '</p>';
112
+	}
113 113
 
114
-    protected function _member_column_stop()
115
-    {
116
-        return '<p>'
117
-               . __(
118
-                   'Here you can see if the discount/surcharge is percentage based or a flat monetary amount.',
119
-                   'event_espresso'
120
-               ) . '</p>';
121
-    }
114
+	protected function _member_column_stop()
115
+	{
116
+		return '<p>'
117
+			   . __(
118
+				   'Here you can see if the discount/surcharge is percentage based or a flat monetary amount.',
119
+				   'event_espresso'
120
+			   ) . '</p>';
121
+	}
122 122
 
123
-    protected function _percent_column_stop()
124
-    {
125
-        return '<p>'
126
-               . __(
127
-                   'View if the discount, surcharge, or tax is percentage-based or a fixed amount.',
128
-                   'event_espresso'
129
-               ) . '</p>';
130
-    }
123
+	protected function _percent_column_stop()
124
+	{
125
+		return '<p>'
126
+			   . __(
127
+				   'View if the discount, surcharge, or tax is percentage-based or a fixed amount.',
128
+				   'event_espresso'
129
+			   ) . '</p>';
130
+	}
131 131
 
132
-    protected function _order_column_stop()
133
-    {
134
-        return '<p>'
135
-               . __(
136
-                   'View the order in which each discount, surcharge, or tax will be applied to the base ticket cost. Zero (0) means it will be applied first.',
137
-                   'event_espresso'
138
-               ) . '</p>';
139
-    }
132
+	protected function _order_column_stop()
133
+	{
134
+		return '<p>'
135
+			   . __(
136
+				   'View the order in which each discount, surcharge, or tax will be applied to the base ticket cost. Zero (0) means it will be applied first.',
137
+				   'event_espresso'
138
+			   ) . '</p>';
139
+	}
140 140
 
141
-    protected function _bulk_actions_stop()
142
-    {
143
-        return '<p>' . __('Perform bulk actions to multiple price types.', 'event_espresso') . '</p>';
144
-    }
141
+	protected function _bulk_actions_stop()
142
+	{
143
+		return '<p>' . __('Perform bulk actions to multiple price types.', 'event_espresso') . '</p>';
144
+	}
145 145
 
146
-    protected function _search_stop()
147
-    {
148
-        return '<p>'
149
-               . __(
150
-                   'Search through price types. The following source will be searched: Price Type Name.',
151
-                   'event_espresso'
152
-               ) . '</p>';
153
-    }
146
+	protected function _search_stop()
147
+	{
148
+		return '<p>'
149
+			   . __(
150
+				   'Search through price types. The following source will be searched: Price Type Name.',
151
+				   'event_espresso'
152
+			   ) . '</p>';
153
+	}
154 154
 }
Please login to merge, or discard this patch.
Spacing   +9 added lines, -9 removed lines patch added patch discarded remove patch
@@ -88,12 +88,12 @@  discard block
 block discarded – undo
88 88
 
89 89
     protected function _start()
90 90
     {
91
-        $content = '<h3>' . __('Price Types', 'event_espresso') . '</h3>';
91
+        $content = '<h3>'.__('Price Types', 'event_espresso').'</h3>';
92 92
         $content .= '<p>'
93 93
                     . __(
94 94
                         'This tour of the Price Types page will go over different areas of the screen to help you understand what they are used for.',
95 95
                         'event_espresso'
96
-                    ) . '</p>';
96
+                    ).'</p>';
97 97
         return $content;
98 98
     }
99 99
 
@@ -103,12 +103,12 @@  discard block
 block discarded – undo
103 103
                . __(
104 104
                    'The name of the price type. Can be sorted in ascending or descending order.',
105 105
                    'event_espresso'
106
-               ) . '</p>';
106
+               ).'</p>';
107 107
     }
108 108
 
109 109
     protected function _base_type_stop()
110 110
     {
111
-        return '<p>' . __('View if a price type is a discount, surcharge, or tax.', 'event_espresso') . '</p>';
111
+        return '<p>'.__('View if a price type is a discount, surcharge, or tax.', 'event_espresso').'</p>';
112 112
     }
113 113
 
114 114
     protected function _member_column_stop()
@@ -117,7 +117,7 @@  discard block
 block discarded – undo
117 117
                . __(
118 118
                    'Here you can see if the discount/surcharge is percentage based or a flat monetary amount.',
119 119
                    'event_espresso'
120
-               ) . '</p>';
120
+               ).'</p>';
121 121
     }
122 122
 
123 123
     protected function _percent_column_stop()
@@ -126,7 +126,7 @@  discard block
 block discarded – undo
126 126
                . __(
127 127
                    'View if the discount, surcharge, or tax is percentage-based or a fixed amount.',
128 128
                    'event_espresso'
129
-               ) . '</p>';
129
+               ).'</p>';
130 130
     }
131 131
 
132 132
     protected function _order_column_stop()
@@ -135,12 +135,12 @@  discard block
 block discarded – undo
135 135
                . __(
136 136
                    'View the order in which each discount, surcharge, or tax will be applied to the base ticket cost. Zero (0) means it will be applied first.',
137 137
                    'event_espresso'
138
-               ) . '</p>';
138
+               ).'</p>';
139 139
     }
140 140
 
141 141
     protected function _bulk_actions_stop()
142 142
     {
143
-        return '<p>' . __('Perform bulk actions to multiple price types.', 'event_espresso') . '</p>';
143
+        return '<p>'.__('Perform bulk actions to multiple price types.', 'event_espresso').'</p>';
144 144
     }
145 145
 
146 146
     protected function _search_stop()
@@ -149,6 +149,6 @@  discard block
 block discarded – undo
149 149
                . __(
150 150
                    'Search through price types. The following source will be searched: Price Type Name.',
151 151
                    'event_espresso'
152
-               ) . '</p>';
152
+               ).'</p>';
153 153
     }
154 154
 }
Please login to merge, or discard this patch.
caffeinated/admin/hooks/Global_EE_Caf_Hooks.class.php 2 patches
Indentation   +38 added lines, -38 removed lines patch added patch discarded remove patch
@@ -15,42 +15,42 @@
 block discarded – undo
15 15
 class Global_EE_Caf_Hooks
16 16
 {
17 17
 
18
-    public function __construct()
19
-    {
20
-        $this->_do_hooks();
21
-    }
22
-
23
-
24
-    private function _do_hooks()
25
-    {
26
-        add_filter('FHEE_show_sponsors_meta_box', '__return_false', 10);
27
-        add_filter('FHEE_show_ratings_request_meta_box', '__return_false', 10);
28
-        add_filter(
29
-            'FHEE__EE_Admin_Page_Core__load_global_scripts_styles__loader_containers',
30
-            array($this, 'forums_lazy_loading'),
31
-            10
32
-        );
33
-        add_action(
34
-            'AHEE__EE_Admin_Page__espresso_news_post_box__after_content',
35
-            array($this, 'extra_news_box_content'),
36
-            10
37
-        );
38
-    }
39
-
40
-
41
-    public function extra_news_box_content($content)
42
-    {
43
-        echo '<h3 style="margin:0">' . __('From the Forums', 'event_espresso') . '</h3>';
44
-        echo '<div id="ee_forum_posts_content">';
45
-        $url = 'http://eventespresso.com/forum/event-espresso-support/feed/';
46
-        EE_Admin_Page::cached_rss_display('ee_forum_posts_content', $url);
47
-        echo '</div>';
48
-    }
49
-
50
-
51
-    public function forums_lazy_loading($ids)
52
-    {
53
-        $ids[] = 'ee_forum_posts_content';
54
-        return $ids;
55
-    }
18
+	public function __construct()
19
+	{
20
+		$this->_do_hooks();
21
+	}
22
+
23
+
24
+	private function _do_hooks()
25
+	{
26
+		add_filter('FHEE_show_sponsors_meta_box', '__return_false', 10);
27
+		add_filter('FHEE_show_ratings_request_meta_box', '__return_false', 10);
28
+		add_filter(
29
+			'FHEE__EE_Admin_Page_Core__load_global_scripts_styles__loader_containers',
30
+			array($this, 'forums_lazy_loading'),
31
+			10
32
+		);
33
+		add_action(
34
+			'AHEE__EE_Admin_Page__espresso_news_post_box__after_content',
35
+			array($this, 'extra_news_box_content'),
36
+			10
37
+		);
38
+	}
39
+
40
+
41
+	public function extra_news_box_content($content)
42
+	{
43
+		echo '<h3 style="margin:0">' . __('From the Forums', 'event_espresso') . '</h3>';
44
+		echo '<div id="ee_forum_posts_content">';
45
+		$url = 'http://eventespresso.com/forum/event-espresso-support/feed/';
46
+		EE_Admin_Page::cached_rss_display('ee_forum_posts_content', $url);
47
+		echo '</div>';
48
+	}
49
+
50
+
51
+	public function forums_lazy_loading($ids)
52
+	{
53
+		$ids[] = 'ee_forum_posts_content';
54
+		return $ids;
55
+	}
56 56
 }
Please login to merge, or discard this patch.
Spacing   +1 added lines, -1 removed lines patch added patch discarded remove patch
@@ -40,7 +40,7 @@
 block discarded – undo
40 40
 
41 41
     public function extra_news_box_content($content)
42 42
     {
43
-        echo '<h3 style="margin:0">' . __('From the Forums', 'event_espresso') . '</h3>';
43
+        echo '<h3 style="margin:0">'.__('From the Forums', 'event_espresso').'</h3>';
44 44
         echo '<div id="ee_forum_posts_content">';
45 45
         $url = 'http://eventespresso.com/forum/event-espresso-support/feed/';
46 46
         EE_Admin_Page::cached_rss_display('ee_forum_posts_content', $url);
Please login to merge, or discard this patch.
espresso.php 2 patches
Spacing   +6 added lines, -6 removed lines patch added patch discarded remove patch
@@ -38,7 +38,7 @@  discard block
 block discarded – undo
38 38
  * @since           4.0
39 39
  */
40 40
 if (function_exists('espresso_version')) {
41
-    if (! function_exists('espresso_duplicate_plugin_error')) {
41
+    if ( ! function_exists('espresso_duplicate_plugin_error')) {
42 42
         /**
43 43
          *    espresso_duplicate_plugin_error
44 44
          *    displays if more than one version of EE is activated at the same time
@@ -62,7 +62,7 @@  discard block
 block discarded – undo
62 62
     add_action('admin_notices', 'espresso_duplicate_plugin_error', 1);
63 63
 } else {
64 64
     define('EE_MIN_PHP_VER_REQUIRED', '5.4.0');
65
-    if (! version_compare(PHP_VERSION, EE_MIN_PHP_VER_REQUIRED, '>=')) {
65
+    if ( ! version_compare(PHP_VERSION, EE_MIN_PHP_VER_REQUIRED, '>=')) {
66 66
         /**
67 67
          * espresso_minimum_php_version_error
68 68
          *
@@ -116,11 +116,11 @@  discard block
 block discarded – undo
116 116
 
117 117
         register_activation_hook(EVENT_ESPRESSO_MAIN_FILE, 'espresso_plugin_activation');
118 118
 
119
-        require_once __DIR__ . '/core/bootstrap_espresso.php';
119
+        require_once __DIR__.'/core/bootstrap_espresso.php';
120 120
         bootstrap_espresso();
121 121
     }
122 122
 }
123
-if (! function_exists('espresso_deactivate_plugin')) {
123
+if ( ! function_exists('espresso_deactivate_plugin')) {
124 124
     /**
125 125
      *    deactivate_plugin
126 126
      * usage:  espresso_deactivate_plugin( plugin_basename( __FILE__ ));
@@ -131,8 +131,8 @@  discard block
 block discarded – undo
131 131
      */
132 132
     function espresso_deactivate_plugin($plugin_basename = '')
133 133
     {
134
-        if (! function_exists('deactivate_plugins')) {
135
-            require_once ABSPATH . 'wp-admin/includes/plugin.php';
134
+        if ( ! function_exists('deactivate_plugins')) {
135
+            require_once ABSPATH.'wp-admin/includes/plugin.php';
136 136
         }
137 137
         unset($_GET['activate'], $_REQUEST['activate']);
138 138
         deactivate_plugins($plugin_basename);
Please login to merge, or discard this patch.
Indentation   +80 added lines, -80 removed lines patch added patch discarded remove patch
@@ -38,103 +38,103 @@
 block discarded – undo
38 38
  * @since           4.0
39 39
  */
40 40
 if (function_exists('espresso_version')) {
41
-    if (! function_exists('espresso_duplicate_plugin_error')) {
42
-        /**
43
-         *    espresso_duplicate_plugin_error
44
-         *    displays if more than one version of EE is activated at the same time
45
-         */
46
-        function espresso_duplicate_plugin_error()
47
-        {
48
-            ?>
41
+	if (! function_exists('espresso_duplicate_plugin_error')) {
42
+		/**
43
+		 *    espresso_duplicate_plugin_error
44
+		 *    displays if more than one version of EE is activated at the same time
45
+		 */
46
+		function espresso_duplicate_plugin_error()
47
+		{
48
+			?>
49 49
             <div class="error">
50 50
                 <p>
51 51
                     <?php
52
-                    echo esc_html__(
53
-                        'Can not run multiple versions of Event Espresso! One version has been automatically deactivated. Please verify that you have the correct version you want still active.',
54
-                        'event_espresso'
55
-                    ); ?>
52
+					echo esc_html__(
53
+						'Can not run multiple versions of Event Espresso! One version has been automatically deactivated. Please verify that you have the correct version you want still active.',
54
+						'event_espresso'
55
+					); ?>
56 56
                 </p>
57 57
             </div>
58 58
             <?php
59
-            espresso_deactivate_plugin(plugin_basename(__FILE__));
60
-        }
61
-    }
62
-    add_action('admin_notices', 'espresso_duplicate_plugin_error', 1);
59
+			espresso_deactivate_plugin(plugin_basename(__FILE__));
60
+		}
61
+	}
62
+	add_action('admin_notices', 'espresso_duplicate_plugin_error', 1);
63 63
 } else {
64
-    define('EE_MIN_PHP_VER_REQUIRED', '5.4.0');
65
-    if (! version_compare(PHP_VERSION, EE_MIN_PHP_VER_REQUIRED, '>=')) {
66
-        /**
67
-         * espresso_minimum_php_version_error
68
-         *
69
-         * @return void
70
-         */
71
-        function espresso_minimum_php_version_error()
72
-        {
73
-            ?>
64
+	define('EE_MIN_PHP_VER_REQUIRED', '5.4.0');
65
+	if (! version_compare(PHP_VERSION, EE_MIN_PHP_VER_REQUIRED, '>=')) {
66
+		/**
67
+		 * espresso_minimum_php_version_error
68
+		 *
69
+		 * @return void
70
+		 */
71
+		function espresso_minimum_php_version_error()
72
+		{
73
+			?>
74 74
             <div class="error">
75 75
                 <p>
76 76
                     <?php
77
-                    printf(
78
-                        esc_html__(
79
-                            'We\'re sorry, but Event Espresso requires PHP version %1$s or greater in order to operate. You are currently running version %2$s.%3$sIn order to update your version of PHP, you will need to contact your current hosting provider.%3$sFor information on stable PHP versions, please go to %4$s.',
80
-                            'event_espresso'
81
-                        ),
82
-                        EE_MIN_PHP_VER_REQUIRED,
83
-                        PHP_VERSION,
84
-                        '<br/>',
85
-                        '<a href="http://php.net/downloads.php">http://php.net/downloads.php</a>'
86
-                    );
87
-                    ?>
77
+					printf(
78
+						esc_html__(
79
+							'We\'re sorry, but Event Espresso requires PHP version %1$s or greater in order to operate. You are currently running version %2$s.%3$sIn order to update your version of PHP, you will need to contact your current hosting provider.%3$sFor information on stable PHP versions, please go to %4$s.',
80
+							'event_espresso'
81
+						),
82
+						EE_MIN_PHP_VER_REQUIRED,
83
+						PHP_VERSION,
84
+						'<br/>',
85
+						'<a href="http://php.net/downloads.php">http://php.net/downloads.php</a>'
86
+					);
87
+					?>
88 88
                 </p>
89 89
             </div>
90 90
             <?php
91
-            espresso_deactivate_plugin(plugin_basename(__FILE__));
92
-        }
91
+			espresso_deactivate_plugin(plugin_basename(__FILE__));
92
+		}
93 93
 
94
-        add_action('admin_notices', 'espresso_minimum_php_version_error', 1);
95
-    } else {
96
-        define('EVENT_ESPRESSO_MAIN_FILE', __FILE__);
97
-        /**
98
-         * espresso_version
99
-         * Returns the plugin version
100
-         *
101
-         * @return string
102
-         */
103
-        function espresso_version()
104
-        {
105
-            return apply_filters('FHEE__espresso__espresso_version', '4.10.4.rc.008');
106
-        }
94
+		add_action('admin_notices', 'espresso_minimum_php_version_error', 1);
95
+	} else {
96
+		define('EVENT_ESPRESSO_MAIN_FILE', __FILE__);
97
+		/**
98
+		 * espresso_version
99
+		 * Returns the plugin version
100
+		 *
101
+		 * @return string
102
+		 */
103
+		function espresso_version()
104
+		{
105
+			return apply_filters('FHEE__espresso__espresso_version', '4.10.4.rc.008');
106
+		}
107 107
 
108
-        /**
109
-         * espresso_plugin_activation
110
-         * adds a wp-option to indicate that EE has been activated via the WP admin plugins page
111
-         */
112
-        function espresso_plugin_activation()
113
-        {
114
-            update_option('ee_espresso_activation', true);
115
-        }
108
+		/**
109
+		 * espresso_plugin_activation
110
+		 * adds a wp-option to indicate that EE has been activated via the WP admin plugins page
111
+		 */
112
+		function espresso_plugin_activation()
113
+		{
114
+			update_option('ee_espresso_activation', true);
115
+		}
116 116
 
117
-        register_activation_hook(EVENT_ESPRESSO_MAIN_FILE, 'espresso_plugin_activation');
117
+		register_activation_hook(EVENT_ESPRESSO_MAIN_FILE, 'espresso_plugin_activation');
118 118
 
119
-        require_once __DIR__ . '/core/bootstrap_espresso.php';
120
-        bootstrap_espresso();
121
-    }
119
+		require_once __DIR__ . '/core/bootstrap_espresso.php';
120
+		bootstrap_espresso();
121
+	}
122 122
 }
123 123
 if (! function_exists('espresso_deactivate_plugin')) {
124
-    /**
125
-     *    deactivate_plugin
126
-     * usage:  espresso_deactivate_plugin( plugin_basename( __FILE__ ));
127
-     *
128
-     * @access public
129
-     * @param string $plugin_basename - the results of plugin_basename( __FILE__ ) for the plugin's main file
130
-     * @return    void
131
-     */
132
-    function espresso_deactivate_plugin($plugin_basename = '')
133
-    {
134
-        if (! function_exists('deactivate_plugins')) {
135
-            require_once ABSPATH . 'wp-admin/includes/plugin.php';
136
-        }
137
-        unset($_GET['activate'], $_REQUEST['activate']);
138
-        deactivate_plugins($plugin_basename);
139
-    }
124
+	/**
125
+	 *    deactivate_plugin
126
+	 * usage:  espresso_deactivate_plugin( plugin_basename( __FILE__ ));
127
+	 *
128
+	 * @access public
129
+	 * @param string $plugin_basename - the results of plugin_basename( __FILE__ ) for the plugin's main file
130
+	 * @return    void
131
+	 */
132
+	function espresso_deactivate_plugin($plugin_basename = '')
133
+	{
134
+		if (! function_exists('deactivate_plugins')) {
135
+			require_once ABSPATH . 'wp-admin/includes/plugin.php';
136
+		}
137
+		unset($_GET['activate'], $_REQUEST['activate']);
138
+		deactivate_plugins($plugin_basename);
139
+	}
140 140
 }
Please login to merge, or discard this patch.
registration_form/espresso_events_Registration_Form_Hooks.class.php 3 patches
Doc Comments   +1 added lines, -1 removed lines patch added patch discarded remove patch
@@ -52,7 +52,7 @@
 block discarded – undo
52 52
     /**
53 53
      * Callback for FHEE__Events_Admin_Page___insert_update_cpt_item__event_update_callbacks hook
54 54
      *
55
-     * @param $callbacks
55
+     * @param callable[] $callbacks
56 56
      * @return array
57 57
      */
58 58
     public function modify_callbacks($callbacks)
Please login to merge, or discard this patch.
Spacing   +7 added lines, -7 removed lines patch added patch discarded remove patch
@@ -135,7 +135,7 @@  discard block
 block discarded – undo
135 135
                 : array();
136 136
             $EQGids = array_keys($EQGs);
137 137
 
138
-            if (! empty($QSGs)) {
138
+            if ( ! empty($QSGs)) {
139 139
                 $html = count($QSGs) > 10 ? '<div style="height:250px;overflow:auto;">' : '';
140 140
                 foreach ($QSGs as $QSG) {
141 141
                     $checked = in_array($QSG->ID(), $EQGids, true)
@@ -155,16 +155,16 @@  discard block
 block discarded – undo
155 155
                     );
156 156
 
157 157
                     $html .= '
158
-					<p id="event-question-group-' . $QSG->ID() . '">
159
-						<input value="' . $QSG->ID() . '" type="checkbox"'
158
+					<p id="event-question-group-' . $QSG->ID().'">
159
+						<input value="' . $QSG->ID().'" type="checkbox"'
160 160
                              . $visibility
161
-                             . ' name="question_groups[' . $QSG->ID() . ']"' . $checked . ' />
162
-						<a href="' . $edit_link . '" title="'
161
+                             . ' name="question_groups['.$QSG->ID().']"'.$checked.' />
162
+						<a href="' . $edit_link.'" title="'
163 163
                              . sprintf(
164 164
                                  esc_attr__('Edit %s Group', 'event_espresso'),
165 165
                                  $QSG->get('QSG_name')
166 166
                              )
167
-                             . '" target="_blank">' . $QSG->get('QSG_name') . '</a>
167
+                             . '" target="_blank">'.$QSG->get('QSG_name').'</a>
168 168
 					</p>';
169 169
                 }
170 170
                 $html .= count($QSGs) > 10 ? '</div>' : '';
@@ -203,7 +203,7 @@  discard block
 block discarded – undo
203 203
         $current_qgs = array_keys($current_qgs); // we just want the ids
204 204
 
205 205
         // now let's get the groups selected in the editor and update (IF we have data)
206
-        if (! empty($question_groups)) {
206
+        if ( ! empty($question_groups)) {
207 207
             foreach ($question_groups as $id => $val) {
208 208
                 // add to event
209 209
                 if ($val) {
Please login to merge, or discard this patch.
Indentation   +192 added lines, -192 removed lines patch added patch discarded remove patch
@@ -16,210 +16,210 @@
 block discarded – undo
16 16
 class espresso_events_Registration_Form_Hooks extends EE_Admin_Hooks
17 17
 {
18 18
 
19
-    /**
20
-     * @var EE_Event|null
21
-     */
22
-    protected $_event;
23
-
24
-
25
-    protected function _set_hooks_properties()
26
-    {
27
-
28
-        $this->_name = 'registration_form';
29
-        $this->_metaboxes = array(
30
-            0 => array(
31
-                'page_route' => array('edit', 'create_new'),
32
-                'func'       => 'primary_questions',
33
-                'label'      => esc_html__('Questions for Primary Registrant', 'event_espresso'),
34
-                'priority'   => 'default',
35
-                'context'    => 'side',
36
-            ),
37
-        );
38
-
39
-        // hook into the handler for saving question groups
40
-        add_filter(
41
-            'FHEE__Events_Admin_Page___insert_update_cpt_item__event_update_callbacks',
42
-            array($this, 'modify_callbacks'),
43
-            10
44
-        );
45
-
46
-        // hook into revision restores (we're hooking into the global action because EE_Admin_Hooks classes are already
47
-        // restricted by page)
48
-        add_action('AHEE_EE_Admin_Page_CPT__restore_revision', array($this, 'restore_revision'), 10, 2);
49
-    }
50
-
51
-
52
-    /**
53
-     * Callback for FHEE__Events_Admin_Page___insert_update_cpt_item__event_update_callbacks hook
54
-     *
55
-     * @param $callbacks
56
-     * @return array
57
-     */
58
-    public function modify_callbacks($callbacks)
59
-    {
60
-        // now let's add the question group callback
61
-        $callbacks[] = array($this, 'primary_question_group_update');
62
-        return $callbacks;
63
-    }
64
-
65
-
66
-    /**
67
-     * Hooked into revision restores.
68
-     *
69
-     * @param $post_id
70
-     * @param $revision_id
71
-     * @return EE_Base_Class
72
-     * @throws EE_Error
73
-     * @throws InvalidArgumentException
74
-     * @throws ReflectionException
75
-     * @throws InvalidDataTypeException
76
-     * @throws InvalidInterfaceException
77
-     */
78
-    public function restore_revision($post_id, $revision_id)
79
-    {
80
-        $EVT_MDL = EE_Registry::instance()->load_model('Event');
81
-        $post_evt = $EVT_MDL->get_one_by_ID($post_id);
82
-        // restore revision for primary questions
83
-        $post_evt->restore_revision(
84
-            $revision_id,
85
-            ['Question_Group'],
86
-            ['Question_Group' => ['Event_Question_Group.EQG_primary' => true]]
87
-        );
88
-        return $post_evt;
89
-    }
90
-
91
-
92
-    /**
93
-     * Content of metabox.
94
-     *
95
-     * @param $post_id
96
-     * @param $post
97
-     * @throws EE_Error
98
-     * @throws InvalidArgumentException
99
-     * @throws InvalidDataTypeException
100
-     * @throws InvalidInterfaceException
101
-     */
102
-    public function primary_questions($post_id, $post)
103
-    {
104
-        $this->_event = $this->_adminpage_obj->get_event_object();
105
-        $event_id = $this->_event->ID();
106
-        ?>
19
+	/**
20
+	 * @var EE_Event|null
21
+	 */
22
+	protected $_event;
23
+
24
+
25
+	protected function _set_hooks_properties()
26
+	{
27
+
28
+		$this->_name = 'registration_form';
29
+		$this->_metaboxes = array(
30
+			0 => array(
31
+				'page_route' => array('edit', 'create_new'),
32
+				'func'       => 'primary_questions',
33
+				'label'      => esc_html__('Questions for Primary Registrant', 'event_espresso'),
34
+				'priority'   => 'default',
35
+				'context'    => 'side',
36
+			),
37
+		);
38
+
39
+		// hook into the handler for saving question groups
40
+		add_filter(
41
+			'FHEE__Events_Admin_Page___insert_update_cpt_item__event_update_callbacks',
42
+			array($this, 'modify_callbacks'),
43
+			10
44
+		);
45
+
46
+		// hook into revision restores (we're hooking into the global action because EE_Admin_Hooks classes are already
47
+		// restricted by page)
48
+		add_action('AHEE_EE_Admin_Page_CPT__restore_revision', array($this, 'restore_revision'), 10, 2);
49
+	}
50
+
51
+
52
+	/**
53
+	 * Callback for FHEE__Events_Admin_Page___insert_update_cpt_item__event_update_callbacks hook
54
+	 *
55
+	 * @param $callbacks
56
+	 * @return array
57
+	 */
58
+	public function modify_callbacks($callbacks)
59
+	{
60
+		// now let's add the question group callback
61
+		$callbacks[] = array($this, 'primary_question_group_update');
62
+		return $callbacks;
63
+	}
64
+
65
+
66
+	/**
67
+	 * Hooked into revision restores.
68
+	 *
69
+	 * @param $post_id
70
+	 * @param $revision_id
71
+	 * @return EE_Base_Class
72
+	 * @throws EE_Error
73
+	 * @throws InvalidArgumentException
74
+	 * @throws ReflectionException
75
+	 * @throws InvalidDataTypeException
76
+	 * @throws InvalidInterfaceException
77
+	 */
78
+	public function restore_revision($post_id, $revision_id)
79
+	{
80
+		$EVT_MDL = EE_Registry::instance()->load_model('Event');
81
+		$post_evt = $EVT_MDL->get_one_by_ID($post_id);
82
+		// restore revision for primary questions
83
+		$post_evt->restore_revision(
84
+			$revision_id,
85
+			['Question_Group'],
86
+			['Question_Group' => ['Event_Question_Group.EQG_primary' => true]]
87
+		);
88
+		return $post_evt;
89
+	}
90
+
91
+
92
+	/**
93
+	 * Content of metabox.
94
+	 *
95
+	 * @param $post_id
96
+	 * @param $post
97
+	 * @throws EE_Error
98
+	 * @throws InvalidArgumentException
99
+	 * @throws InvalidDataTypeException
100
+	 * @throws InvalidInterfaceException
101
+	 */
102
+	public function primary_questions($post_id, $post)
103
+	{
104
+		$this->_event = $this->_adminpage_obj->get_event_object();
105
+		$event_id = $this->_event->ID();
106
+		?>
107 107
         <div class="inside">
108 108
             <p><strong>
109 109
                     <?php _e('Question Groups', 'event_espresso'); ?>
110 110
                 </strong><br/>
111 111
                 <?php
112
-                printf(
113
-                    esc_html__(
114
-                        'Add a pre-populated %1$sgroup of questions%2$s to your event. The personal information group is required for all events',
115
-                        'event_espresso'
116
-                    ),
117
-                    '<a href="admin.php?page=espresso_registration_form" target="_blank">',
118
-                    '</a>'
119
-                )
120
-                ?>
112
+				printf(
113
+					esc_html__(
114
+						'Add a pre-populated %1$sgroup of questions%2$s to your event. The personal information group is required for all events',
115
+						'event_espresso'
116
+					),
117
+					'<a href="admin.php?page=espresso_registration_form" target="_blank">',
118
+					'</a>'
119
+				)
120
+				?>
121 121
             </p>
122 122
             <?php
123 123
 
124
-            $qsg_where['QSG_deleted'] = false;
125
-            $query_params = apply_filters(
126
-                'FHEE__espresso_events_Registration_Form_Hooks__primary_questions__question_group_query_parameters',
127
-                array($qsg_where, 'order_by' => array('QSG_order' => 'ASC'))
128
-            );
129
-            $QSGs = EEM_Question_Group::instance()->get_all($query_params);
130
-            $EQGs = ! empty($event_id)
131
-                ? $this->_event->get_many_related(
132
-                    'Question_Group',
133
-                    [['Event_Question_Group.EQG_primary' => true]]
134
-                )
135
-                : array();
136
-            $EQGids = array_keys($EQGs);
137
-
138
-            if (! empty($QSGs)) {
139
-                $html = count($QSGs) > 10 ? '<div style="height:250px;overflow:auto;">' : '';
140
-                foreach ($QSGs as $QSG) {
141
-                    $checked = in_array($QSG->ID(), $EQGids, true)
142
-                               || $QSG->get('QSG_system') === 1
143
-                        ? ' checked="checked"'
144
-                        : '';
145
-                    $visibility = $QSG->get('QSG_system') === 1
146
-                        ? ' style="visibility:hidden"'
147
-                        : '';
148
-                    $edit_query_args = $this->_adminpage_obj->is_caf() ? array(
149
-                        'action' => 'edit_question_group',
150
-                        'QSG_ID' => $QSG->ID(),
151
-                    ) : array('action' => 'question_groups');
152
-                    $edit_link = EE_Admin_Page::add_query_args_and_nonce(
153
-                        $edit_query_args,
154
-                        EE_FORMS_ADMIN_URL
155
-                    );
156
-
157
-                    $html .= '
124
+			$qsg_where['QSG_deleted'] = false;
125
+			$query_params = apply_filters(
126
+				'FHEE__espresso_events_Registration_Form_Hooks__primary_questions__question_group_query_parameters',
127
+				array($qsg_where, 'order_by' => array('QSG_order' => 'ASC'))
128
+			);
129
+			$QSGs = EEM_Question_Group::instance()->get_all($query_params);
130
+			$EQGs = ! empty($event_id)
131
+				? $this->_event->get_many_related(
132
+					'Question_Group',
133
+					[['Event_Question_Group.EQG_primary' => true]]
134
+				)
135
+				: array();
136
+			$EQGids = array_keys($EQGs);
137
+
138
+			if (! empty($QSGs)) {
139
+				$html = count($QSGs) > 10 ? '<div style="height:250px;overflow:auto;">' : '';
140
+				foreach ($QSGs as $QSG) {
141
+					$checked = in_array($QSG->ID(), $EQGids, true)
142
+							   || $QSG->get('QSG_system') === 1
143
+						? ' checked="checked"'
144
+						: '';
145
+					$visibility = $QSG->get('QSG_system') === 1
146
+						? ' style="visibility:hidden"'
147
+						: '';
148
+					$edit_query_args = $this->_adminpage_obj->is_caf() ? array(
149
+						'action' => 'edit_question_group',
150
+						'QSG_ID' => $QSG->ID(),
151
+					) : array('action' => 'question_groups');
152
+					$edit_link = EE_Admin_Page::add_query_args_and_nonce(
153
+						$edit_query_args,
154
+						EE_FORMS_ADMIN_URL
155
+					);
156
+
157
+					$html .= '
158 158
 					<p id="event-question-group-' . $QSG->ID() . '">
159 159
 						<input value="' . $QSG->ID() . '" type="checkbox"'
160
-                             . $visibility
161
-                             . ' name="question_groups[' . $QSG->ID() . ']"' . $checked . ' />
160
+							 . $visibility
161
+							 . ' name="question_groups[' . $QSG->ID() . ']"' . $checked . ' />
162 162
 						<a href="' . $edit_link . '" title="'
163
-                             . sprintf(
164
-                                 esc_attr__('Edit %s Group', 'event_espresso'),
165
-                                 $QSG->get('QSG_name')
166
-                             )
167
-                             . '" target="_blank">' . $QSG->get('QSG_name') . '</a>
163
+							 . sprintf(
164
+								 esc_attr__('Edit %s Group', 'event_espresso'),
165
+								 $QSG->get('QSG_name')
166
+							 )
167
+							 . '" target="_blank">' . $QSG->get('QSG_name') . '</a>
168 168
 					</p>';
169
-                }
170
-                $html .= count($QSGs) > 10 ? '</div>' : '';
171
-
172
-                echo $html;
173
-            } else {
174
-                esc_html_e(
175
-                    'There seems to be a problem with your questions. Please contact [email protected]',
176
-                    'event_espresso'
177
-                );
178
-            }
179
-            do_action('AHEE_event_editor_questions_notice');
180
-            ?>
169
+				}
170
+				$html .= count($QSGs) > 10 ? '</div>' : '';
171
+
172
+				echo $html;
173
+			} else {
174
+				esc_html_e(
175
+					'There seems to be a problem with your questions. Please contact [email protected]',
176
+					'event_espresso'
177
+				);
178
+			}
179
+			do_action('AHEE_event_editor_questions_notice');
180
+			?>
181 181
         </div>
182 182
         <?php
183
-    }
184
-
185
-
186
-    /**
187
-     * @param EE_Event $evtobj
188
-     * @param array    $data
189
-     * @return bool
190
-     * @throws EE_Error
191
-     */
192
-    public function primary_question_group_update($evtobj, $data)
193
-    {
194
-        $question_groups = ! empty($data['question_groups']) ? (array) $data['question_groups'] : array();
195
-        $added_qgs = array_keys($question_groups);
196
-        $success = array();
197
-
198
-        // let's get all current question groups associated with this event.
199
-        $current_qgs = $evtobj->get_many_related(
200
-            'Question_Group',
201
-            [['Event_Question_Group.EQG_primary' => true]]
202
-        );
203
-        $current_qgs = array_keys($current_qgs); // we just want the ids
204
-
205
-        // now let's get the groups selected in the editor and update (IF we have data)
206
-        if (! empty($question_groups)) {
207
-            foreach ($question_groups as $id => $val) {
208
-                // add to event
209
-                if ($val) {
210
-                    $qg = $evtobj->_add_relation_to($id, 'Question_Group', ['EQG_primary' => true]);
211
-                }
212
-                $success[] = ! empty($qg) ? 1 : 0;
213
-            }
214
-        }
215
-
216
-        // wait a minute... are there question groups missing in the saved groups that ARE with the current event?
217
-        $removed_qgs = array_diff($current_qgs, $added_qgs);
218
-
219
-        foreach ($removed_qgs as $qgid) {
220
-            $qg = $evtobj->_remove_relation_to($qgid, 'Question_Group', ['EQG_primary' => true]);
221
-            $success[] = ! empty($qg) ? 1 : 0;
222
-        }
223
-        return in_array(0, $success, true) ? false : true;
224
-    }
183
+	}
184
+
185
+
186
+	/**
187
+	 * @param EE_Event $evtobj
188
+	 * @param array    $data
189
+	 * @return bool
190
+	 * @throws EE_Error
191
+	 */
192
+	public function primary_question_group_update($evtobj, $data)
193
+	{
194
+		$question_groups = ! empty($data['question_groups']) ? (array) $data['question_groups'] : array();
195
+		$added_qgs = array_keys($question_groups);
196
+		$success = array();
197
+
198
+		// let's get all current question groups associated with this event.
199
+		$current_qgs = $evtobj->get_many_related(
200
+			'Question_Group',
201
+			[['Event_Question_Group.EQG_primary' => true]]
202
+		);
203
+		$current_qgs = array_keys($current_qgs); // we just want the ids
204
+
205
+		// now let's get the groups selected in the editor and update (IF we have data)
206
+		if (! empty($question_groups)) {
207
+			foreach ($question_groups as $id => $val) {
208
+				// add to event
209
+				if ($val) {
210
+					$qg = $evtobj->_add_relation_to($id, 'Question_Group', ['EQG_primary' => true]);
211
+				}
212
+				$success[] = ! empty($qg) ? 1 : 0;
213
+			}
214
+		}
215
+
216
+		// wait a minute... are there question groups missing in the saved groups that ARE with the current event?
217
+		$removed_qgs = array_diff($current_qgs, $added_qgs);
218
+
219
+		foreach ($removed_qgs as $qgid) {
220
+			$qg = $evtobj->_remove_relation_to($qgid, 'Question_Group', ['EQG_primary' => true]);
221
+			$success[] = ! empty($qg) ? 1 : 0;
222
+		}
223
+		return in_array(0, $success, true) ? false : true;
224
+	}
225 225
 }
Please login to merge, or discard this patch.
core/business/EE_Transaction_Payments.class.php 3 patches
Doc Comments   +1 added lines, -1 removed lines patch added patch discarded remove patch
@@ -137,7 +137,7 @@
 block discarded – undo
137 137
      * @param EE_Transaction $transaction
138 138
      * @param string         $payment_status One of EEM_Payment's statuses, like 'PAP' (Approved).
139 139
      *                                       By default, searches for approved payments
140
-     * @return float|false   float on success, false on fail
140
+     * @return double   float on success, false on fail
141 141
      * @throws \EE_Error
142 142
      */
143 143
     public function recalculate_total_payments_for_transaction(
Please login to merge, or discard this patch.
Indentation   +419 added lines, -419 removed lines patch added patch discarded remove patch
@@ -16,423 +16,423 @@
 block discarded – undo
16 16
 class EE_Transaction_Payments
17 17
 {
18 18
 
19
-    /**
20
-     * @var EE_Transaction_Payments $_instance
21
-     * @access    private
22
-     */
23
-    private static $_instance;
24
-
25
-    /**
26
-     * @deprecated
27
-     * @var string
28
-     */
29
-    protected $_old_txn_status;
30
-
31
-    /**
32
-     * @deprecated
33
-     * @var string
34
-     */
35
-    protected $_new_txn_status;
36
-
37
-
38
-    /**
39
-     * @singleton method used to instantiate class object
40
-     * @access    public
41
-     * @return EE_Transaction_Payments instance
42
-     */
43
-    public static function instance()
44
-    {
45
-        // check if class object is instantiated
46
-        if (! self::$_instance instanceof EE_Transaction_Payments) {
47
-            self::$_instance = new self();
48
-        }
49
-        return self::$_instance;
50
-    }
51
-
52
-
53
-    /**
54
-     * recalculate_transaction_total
55
-     *
56
-     * @access private
57
-     * @param EE_Transaction $transaction
58
-     * @param bool           $update_txn
59
-     * @return bool true if TXN total was updated, false if not
60
-     * @throws \EE_Error
61
-     */
62
-    public function recalculate_transaction_total(EE_Transaction $transaction, $update_txn = true)
63
-    {
64
-        $total_line_item = $transaction->total_line_item();
65
-        if (! $total_line_item instanceof EE_Line_Item) {
66
-            EE_Error::add_error(
67
-                sprintf(
68
-                    __('The Total Line Item for Transaction %1$d\'s was not found or is invalid.', 'event_espresso'),
69
-                    $transaction->ID()
70
-                ),
71
-                __FILE__,
72
-                __FUNCTION__,
73
-                __LINE__
74
-            );
75
-            return false;
76
-        }
77
-        $new_total = $total_line_item->recalculate_total_including_taxes();
78
-        $transaction->set_total($new_total);
79
-        if ($update_txn) {
80
-            return $transaction->save() ? true : false;
81
-        }
82
-        return false;
83
-    }
84
-
85
-
86
-    /**
87
-     * Updates the provided EE_Transaction with all the applicable payments
88
-     * returns a boolean for whether the TXN was saved to the db
89
-     * (meaning a status change occurred)
90
-     * or not saved (which could **still** mean that
91
-     * the TXN status changed, but just was not yet saved).
92
-     * So if passing a value of false for the $update_txn param,
93
-     * then client code needs to take responsibility for saving the TXN
94
-     * regardless of what happens within EE_Transaction_Payments;
95
-     *
96
-     * @param            EE_Transaction /int $transaction_obj_or_id EE_Transaction or its ID
97
-     * @param    boolean $update_txn whether to save the TXN
98
-     * @return    boolean        whether the TXN was saved
99
-     * @throws \EE_Error
100
-     */
101
-    public function calculate_total_payments_and_update_status(EE_Transaction $transaction, $update_txn = true)
102
-    {
103
-        // verify transaction
104
-        if (! $transaction instanceof EE_Transaction) {
105
-            EE_Error::add_error(
106
-                __('Please provide a valid EE_Transaction object.', 'event_espresso'),
107
-                __FILE__,
108
-                __FUNCTION__,
109
-                __LINE__
110
-            );
111
-            return false;
112
-        }
113
-        // calculate total paid
114
-        $total_paid = $this->recalculate_total_payments_for_transaction($transaction);
115
-        // if total paid has changed
116
-        if ($total_paid !== false && (float) $total_paid !== $transaction->paid()) {
117
-            $transaction->set_paid($total_paid);
118
-            // maybe update status, and make sure to save transaction if not done already
119
-            if (! $transaction->update_status_based_on_total_paid($update_txn)) {
120
-                if ($update_txn) {
121
-                    return $transaction->save() ? true : false;
122
-                }
123
-            } else {
124
-                // the status got updated and was saved by
125
-                // update_transaction_status_based_on_total_paid()
126
-                return true;
127
-            }
128
-        }
129
-        return false;
130
-    }
131
-
132
-
133
-    /**
134
-     * recalculate_total_payments_for_transaction
135
-     *
136
-     * @access public
137
-     * @param EE_Transaction $transaction
138
-     * @param string         $payment_status One of EEM_Payment's statuses, like 'PAP' (Approved).
139
-     *                                       By default, searches for approved payments
140
-     * @return float|false   float on success, false on fail
141
-     * @throws \EE_Error
142
-     */
143
-    public function recalculate_total_payments_for_transaction(
144
-        EE_Transaction $transaction,
145
-        $payment_status = EEM_Payment::status_id_approved
146
-    ) {
147
-        // verify transaction
148
-        if (! $transaction instanceof EE_Transaction) {
149
-            EE_Error::add_error(
150
-                __('Please provide a valid EE_Transaction object.', 'event_espresso'),
151
-                __FILE__,
152
-                __FUNCTION__,
153
-                __LINE__
154
-            );
155
-            return false;
156
-        }
157
-        // ensure Payment model is loaded
158
-        EE_Registry::instance()->load_model('Payment');
159
-        // calls EEM_Base::sum()
160
-        return EEM_Payment::instance()->sum(
161
-            // query params
162
-            array(array('TXN_ID' => $transaction->ID(), 'STS_ID' => $payment_status)),
163
-            // field to sum
164
-            'PAY_amount'
165
-        );
166
-    }
167
-
168
-
169
-    /**
170
-     * delete_payment_and_update_transaction
171
-     * Before deleting the selected payment, we fetch it's transaction,
172
-     * then delete the payment, and update the transactions' amount paid.
173
-     *
174
-     * @param EE_Payment $payment
175
-     * @return boolean
176
-     * @throws \EE_Error
177
-     */
178
-    public function delete_payment_and_update_transaction(EE_Payment $payment)
179
-    {
180
-        // verify payment
181
-        if (! $payment instanceof EE_Payment) {
182
-            EE_Error::add_error(
183
-                __('A valid Payment object was not received.', 'event_espresso'),
184
-                __FILE__,
185
-                __FUNCTION__,
186
-                __LINE__
187
-            );
188
-            return false;
189
-        }
190
-        if (! $this->delete_registration_payments_and_update_registrations($payment)) {
191
-            return false;
192
-        }
193
-        if (! $payment->delete()) {
194
-            EE_Error::add_error(
195
-                __('The payment could not be deleted.', 'event_espresso'),
196
-                __FILE__,
197
-                __FUNCTION__,
198
-                __LINE__
199
-            );
200
-            return false;
201
-        }
202
-
203
-        $transaction = $payment->transaction();
204
-        $TXN_status = $transaction->status_ID();
205
-        if ($TXN_status === EEM_Transaction::abandoned_status_code
206
-            || $TXN_status === EEM_Transaction::failed_status_code
207
-            || $payment->amount() === 0
208
-        ) {
209
-            EE_Error::add_success(__('The Payment was successfully deleted.', 'event_espresso'));
210
-            return true;
211
-        }
212
-
213
-
214
-        // if this fails, that just means that the transaction didn't get its status changed and/or updated.
215
-        // however the payment was still deleted.
216
-        if (! $this->calculate_total_payments_and_update_status($transaction)) {
217
-            EE_Error::add_attention(
218
-                __(
219
-                    'It appears that the Payment was deleted but no change was recorded for the Transaction for an unknown reason. Please verify that all data for this Transaction looks correct..',
220
-                    'event_espresso'
221
-                ),
222
-                __FILE__,
223
-                __FUNCTION__,
224
-                __LINE__
225
-            );
226
-            return true;
227
-        }
228
-
229
-        EE_Error::add_success(
230
-            __(
231
-                'The Payment was successfully deleted, and the Transaction has been updated accordingly.',
232
-                'event_espresso'
233
-            )
234
-        );
235
-        return true;
236
-    }
237
-
238
-
239
-    /**
240
-     * delete_registration_payments_and_update_registrations
241
-     *
242
-     * removes all registration payment records associated with a payment
243
-     * and subtracts their amounts from the corresponding registrations REG_paid field
244
-     *
245
-     * @param EE_Payment $payment
246
-     * @param array      $reg_payment_query_params
247
-     * @return bool
248
-     * @throws \EE_Error
249
-     */
250
-    public function delete_registration_payments_and_update_registrations(
251
-        EE_Payment $payment,
252
-        $reg_payment_query_params = array()
253
-    ) {
254
-        $save_payment = false;
255
-        $reg_payment_query_params = ! empty($reg_payment_query_params) ? $reg_payment_query_params
256
-            : array(array('PAY_ID' => $payment->ID()));
257
-        $registration_payments = EEM_Registration_Payment::instance()->get_all($reg_payment_query_params);
258
-        if (! empty($registration_payments)) {
259
-            foreach ($registration_payments as $registration_payment) {
260
-                if ($registration_payment instanceof EE_Registration_Payment) {
261
-                    $amount_paid = $registration_payment->amount();
262
-                    $registration = $registration_payment->registration();
263
-                    if ($registration instanceof EE_Registration) {
264
-                        $registration->set_paid($registration->paid() - $amount_paid);
265
-                        if ($registration->save() !== false) {
266
-                            $registration_payment->delete_permanently();
267
-                            $save_payment = true;
268
-                        }
269
-                    } else {
270
-                        EE_Error::add_error(
271
-                            sprintf(
272
-                                __(
273
-                                    'An invalid Registration object was associated with Registration Payment ID# %1$d.',
274
-                                    'event_espresso'
275
-                                ),
276
-                                $registration_payment->ID()
277
-                            ),
278
-                            __FILE__,
279
-                            __FUNCTION__,
280
-                            __LINE__
281
-                        );
282
-                        return false;
283
-                    }
284
-                } else {
285
-                    EE_Error::add_error(
286
-                        sprintf(
287
-                            __(
288
-                                'An invalid Registration Payment object was associated with payment ID# %1$d.',
289
-                                'event_espresso'
290
-                            ),
291
-                            $payment->ID()
292
-                        ),
293
-                        __FILE__,
294
-                        __FUNCTION__,
295
-                        __LINE__
296
-                    );
297
-                    return false;
298
-                }
299
-            }
300
-        }
301
-        if ($save_payment) {
302
-            $payment->save();
303
-        }
304
-        return true;
305
-    }
306
-
307
-
308
-
309
-    /********************************** DEPRECATED METHODS **********************************/
310
-
311
-
312
-    /**
313
-     * possibly toggles TXN status
314
-     *
315
-     * @deprecated 4.9.1
316
-     * @param EE_Transaction $transaction
317
-     * @param    boolean     $update_txn whether to save the TXN
318
-     * @return    boolean        whether the TXN was saved
319
-     * @throws \EE_Error
320
-     */
321
-    public function update_transaction_status_based_on_total_paid(EE_Transaction $transaction, $update_txn = true)
322
-    {
323
-        EE_Error::doing_it_wrong(
324
-            __CLASS__ . '::' . __FUNCTION__,
325
-            sprintf(
326
-                __('This method is deprecated. Please use "%s" instead', 'event_espresso'),
327
-                'EE_Transaction::update_status_based_on_total_paid()'
328
-            ),
329
-            '4.9.1',
330
-            '5.0.0'
331
-        );
332
-        // verify transaction
333
-        if (! $transaction instanceof EE_Transaction) {
334
-            EE_Error::add_error(
335
-                __('Please provide a valid EE_Transaction object.', 'event_espresso'),
336
-                __FILE__,
337
-                __FUNCTION__,
338
-                __LINE__
339
-            );
340
-            return false;
341
-        }
342
-        // set transaction status based on comparison of TXN_paid vs TXN_total
343
-        return $transaction->update_status_based_on_total_paid($update_txn);
344
-    }
345
-
346
-
347
-    /**
348
-     * @deprecated 4.9.12
349
-     * @return string
350
-     */
351
-    public function old_txn_status()
352
-    {
353
-        EE_Error::doing_it_wrong(
354
-            __METHOD__,
355
-            esc_html__(
356
-                'This logic has been moved into \EE_Transaction::old_txn_status(), please use that method instead.',
357
-                'event_espresso'
358
-            ),
359
-            '4.9.12'
360
-        );
361
-        return $this->_old_txn_status;
362
-    }
363
-
364
-
365
-    /**
366
-     * @deprecated 4.9.12
367
-     * @param string $old_txn_status
368
-     */
369
-    public function set_old_txn_status($old_txn_status)
370
-    {
371
-        EE_Error::doing_it_wrong(
372
-            __METHOD__,
373
-            esc_html__(
374
-                'This logic has been moved into \EE_Transaction::set_old_txn_status(), please use that method instead.',
375
-                'event_espresso'
376
-            ),
377
-            '4.9.12'
378
-        );
379
-        // only set the first time
380
-        if ($this->_old_txn_status === null) {
381
-            $this->_old_txn_status = $old_txn_status;
382
-        }
383
-    }
384
-
385
-
386
-    /**
387
-     * @deprecated 4.9.12
388
-     * @return string
389
-     */
390
-    public function new_txn_status()
391
-    {
392
-        EE_Error::doing_it_wrong(
393
-            __METHOD__,
394
-            esc_html__(
395
-                'This logic has been removed. Please just use \EE_Transaction::status_ID() instead.',
396
-                'event_espresso'
397
-            ),
398
-            '4.9.12'
399
-        );
400
-        return $this->_new_txn_status;
401
-    }
402
-
403
-
404
-    /**
405
-     * @deprecated 4.9.12
406
-     * @param string $new_txn_status
407
-     */
408
-    public function set_new_txn_status($new_txn_status)
409
-    {
410
-        EE_Error::doing_it_wrong(
411
-            __METHOD__,
412
-            esc_html__(
413
-                'This logic has been removed. Please just use \EE_Transaction::set_status() instead.',
414
-                'event_espresso'
415
-            ),
416
-            '4.9.12'
417
-        );
418
-        $this->_new_txn_status = $new_txn_status;
419
-    }
420
-
421
-
422
-    /**
423
-     * @deprecated 4.9.12
424
-     * @return bool
425
-     */
426
-    public function txn_status_updated()
427
-    {
428
-        EE_Error::doing_it_wrong(
429
-            __METHOD__,
430
-            esc_html__(
431
-                'This logic has been moved into \EE_Transaction::txn_status_updated(), please use that method instead.',
432
-                'event_espresso'
433
-            ),
434
-            '4.9.12'
435
-        );
436
-        return $this->_new_txn_status !== $this->_old_txn_status && $this->_old_txn_status !== null ? true : false;
437
-    }
19
+	/**
20
+	 * @var EE_Transaction_Payments $_instance
21
+	 * @access    private
22
+	 */
23
+	private static $_instance;
24
+
25
+	/**
26
+	 * @deprecated
27
+	 * @var string
28
+	 */
29
+	protected $_old_txn_status;
30
+
31
+	/**
32
+	 * @deprecated
33
+	 * @var string
34
+	 */
35
+	protected $_new_txn_status;
36
+
37
+
38
+	/**
39
+	 * @singleton method used to instantiate class object
40
+	 * @access    public
41
+	 * @return EE_Transaction_Payments instance
42
+	 */
43
+	public static function instance()
44
+	{
45
+		// check if class object is instantiated
46
+		if (! self::$_instance instanceof EE_Transaction_Payments) {
47
+			self::$_instance = new self();
48
+		}
49
+		return self::$_instance;
50
+	}
51
+
52
+
53
+	/**
54
+	 * recalculate_transaction_total
55
+	 *
56
+	 * @access private
57
+	 * @param EE_Transaction $transaction
58
+	 * @param bool           $update_txn
59
+	 * @return bool true if TXN total was updated, false if not
60
+	 * @throws \EE_Error
61
+	 */
62
+	public function recalculate_transaction_total(EE_Transaction $transaction, $update_txn = true)
63
+	{
64
+		$total_line_item = $transaction->total_line_item();
65
+		if (! $total_line_item instanceof EE_Line_Item) {
66
+			EE_Error::add_error(
67
+				sprintf(
68
+					__('The Total Line Item for Transaction %1$d\'s was not found or is invalid.', 'event_espresso'),
69
+					$transaction->ID()
70
+				),
71
+				__FILE__,
72
+				__FUNCTION__,
73
+				__LINE__
74
+			);
75
+			return false;
76
+		}
77
+		$new_total = $total_line_item->recalculate_total_including_taxes();
78
+		$transaction->set_total($new_total);
79
+		if ($update_txn) {
80
+			return $transaction->save() ? true : false;
81
+		}
82
+		return false;
83
+	}
84
+
85
+
86
+	/**
87
+	 * Updates the provided EE_Transaction with all the applicable payments
88
+	 * returns a boolean for whether the TXN was saved to the db
89
+	 * (meaning a status change occurred)
90
+	 * or not saved (which could **still** mean that
91
+	 * the TXN status changed, but just was not yet saved).
92
+	 * So if passing a value of false for the $update_txn param,
93
+	 * then client code needs to take responsibility for saving the TXN
94
+	 * regardless of what happens within EE_Transaction_Payments;
95
+	 *
96
+	 * @param            EE_Transaction /int $transaction_obj_or_id EE_Transaction or its ID
97
+	 * @param    boolean $update_txn whether to save the TXN
98
+	 * @return    boolean        whether the TXN was saved
99
+	 * @throws \EE_Error
100
+	 */
101
+	public function calculate_total_payments_and_update_status(EE_Transaction $transaction, $update_txn = true)
102
+	{
103
+		// verify transaction
104
+		if (! $transaction instanceof EE_Transaction) {
105
+			EE_Error::add_error(
106
+				__('Please provide a valid EE_Transaction object.', 'event_espresso'),
107
+				__FILE__,
108
+				__FUNCTION__,
109
+				__LINE__
110
+			);
111
+			return false;
112
+		}
113
+		// calculate total paid
114
+		$total_paid = $this->recalculate_total_payments_for_transaction($transaction);
115
+		// if total paid has changed
116
+		if ($total_paid !== false && (float) $total_paid !== $transaction->paid()) {
117
+			$transaction->set_paid($total_paid);
118
+			// maybe update status, and make sure to save transaction if not done already
119
+			if (! $transaction->update_status_based_on_total_paid($update_txn)) {
120
+				if ($update_txn) {
121
+					return $transaction->save() ? true : false;
122
+				}
123
+			} else {
124
+				// the status got updated and was saved by
125
+				// update_transaction_status_based_on_total_paid()
126
+				return true;
127
+			}
128
+		}
129
+		return false;
130
+	}
131
+
132
+
133
+	/**
134
+	 * recalculate_total_payments_for_transaction
135
+	 *
136
+	 * @access public
137
+	 * @param EE_Transaction $transaction
138
+	 * @param string         $payment_status One of EEM_Payment's statuses, like 'PAP' (Approved).
139
+	 *                                       By default, searches for approved payments
140
+	 * @return float|false   float on success, false on fail
141
+	 * @throws \EE_Error
142
+	 */
143
+	public function recalculate_total_payments_for_transaction(
144
+		EE_Transaction $transaction,
145
+		$payment_status = EEM_Payment::status_id_approved
146
+	) {
147
+		// verify transaction
148
+		if (! $transaction instanceof EE_Transaction) {
149
+			EE_Error::add_error(
150
+				__('Please provide a valid EE_Transaction object.', 'event_espresso'),
151
+				__FILE__,
152
+				__FUNCTION__,
153
+				__LINE__
154
+			);
155
+			return false;
156
+		}
157
+		// ensure Payment model is loaded
158
+		EE_Registry::instance()->load_model('Payment');
159
+		// calls EEM_Base::sum()
160
+		return EEM_Payment::instance()->sum(
161
+			// query params
162
+			array(array('TXN_ID' => $transaction->ID(), 'STS_ID' => $payment_status)),
163
+			// field to sum
164
+			'PAY_amount'
165
+		);
166
+	}
167
+
168
+
169
+	/**
170
+	 * delete_payment_and_update_transaction
171
+	 * Before deleting the selected payment, we fetch it's transaction,
172
+	 * then delete the payment, and update the transactions' amount paid.
173
+	 *
174
+	 * @param EE_Payment $payment
175
+	 * @return boolean
176
+	 * @throws \EE_Error
177
+	 */
178
+	public function delete_payment_and_update_transaction(EE_Payment $payment)
179
+	{
180
+		// verify payment
181
+		if (! $payment instanceof EE_Payment) {
182
+			EE_Error::add_error(
183
+				__('A valid Payment object was not received.', 'event_espresso'),
184
+				__FILE__,
185
+				__FUNCTION__,
186
+				__LINE__
187
+			);
188
+			return false;
189
+		}
190
+		if (! $this->delete_registration_payments_and_update_registrations($payment)) {
191
+			return false;
192
+		}
193
+		if (! $payment->delete()) {
194
+			EE_Error::add_error(
195
+				__('The payment could not be deleted.', 'event_espresso'),
196
+				__FILE__,
197
+				__FUNCTION__,
198
+				__LINE__
199
+			);
200
+			return false;
201
+		}
202
+
203
+		$transaction = $payment->transaction();
204
+		$TXN_status = $transaction->status_ID();
205
+		if ($TXN_status === EEM_Transaction::abandoned_status_code
206
+			|| $TXN_status === EEM_Transaction::failed_status_code
207
+			|| $payment->amount() === 0
208
+		) {
209
+			EE_Error::add_success(__('The Payment was successfully deleted.', 'event_espresso'));
210
+			return true;
211
+		}
212
+
213
+
214
+		// if this fails, that just means that the transaction didn't get its status changed and/or updated.
215
+		// however the payment was still deleted.
216
+		if (! $this->calculate_total_payments_and_update_status($transaction)) {
217
+			EE_Error::add_attention(
218
+				__(
219
+					'It appears that the Payment was deleted but no change was recorded for the Transaction for an unknown reason. Please verify that all data for this Transaction looks correct..',
220
+					'event_espresso'
221
+				),
222
+				__FILE__,
223
+				__FUNCTION__,
224
+				__LINE__
225
+			);
226
+			return true;
227
+		}
228
+
229
+		EE_Error::add_success(
230
+			__(
231
+				'The Payment was successfully deleted, and the Transaction has been updated accordingly.',
232
+				'event_espresso'
233
+			)
234
+		);
235
+		return true;
236
+	}
237
+
238
+
239
+	/**
240
+	 * delete_registration_payments_and_update_registrations
241
+	 *
242
+	 * removes all registration payment records associated with a payment
243
+	 * and subtracts their amounts from the corresponding registrations REG_paid field
244
+	 *
245
+	 * @param EE_Payment $payment
246
+	 * @param array      $reg_payment_query_params
247
+	 * @return bool
248
+	 * @throws \EE_Error
249
+	 */
250
+	public function delete_registration_payments_and_update_registrations(
251
+		EE_Payment $payment,
252
+		$reg_payment_query_params = array()
253
+	) {
254
+		$save_payment = false;
255
+		$reg_payment_query_params = ! empty($reg_payment_query_params) ? $reg_payment_query_params
256
+			: array(array('PAY_ID' => $payment->ID()));
257
+		$registration_payments = EEM_Registration_Payment::instance()->get_all($reg_payment_query_params);
258
+		if (! empty($registration_payments)) {
259
+			foreach ($registration_payments as $registration_payment) {
260
+				if ($registration_payment instanceof EE_Registration_Payment) {
261
+					$amount_paid = $registration_payment->amount();
262
+					$registration = $registration_payment->registration();
263
+					if ($registration instanceof EE_Registration) {
264
+						$registration->set_paid($registration->paid() - $amount_paid);
265
+						if ($registration->save() !== false) {
266
+							$registration_payment->delete_permanently();
267
+							$save_payment = true;
268
+						}
269
+					} else {
270
+						EE_Error::add_error(
271
+							sprintf(
272
+								__(
273
+									'An invalid Registration object was associated with Registration Payment ID# %1$d.',
274
+									'event_espresso'
275
+								),
276
+								$registration_payment->ID()
277
+							),
278
+							__FILE__,
279
+							__FUNCTION__,
280
+							__LINE__
281
+						);
282
+						return false;
283
+					}
284
+				} else {
285
+					EE_Error::add_error(
286
+						sprintf(
287
+							__(
288
+								'An invalid Registration Payment object was associated with payment ID# %1$d.',
289
+								'event_espresso'
290
+							),
291
+							$payment->ID()
292
+						),
293
+						__FILE__,
294
+						__FUNCTION__,
295
+						__LINE__
296
+					);
297
+					return false;
298
+				}
299
+			}
300
+		}
301
+		if ($save_payment) {
302
+			$payment->save();
303
+		}
304
+		return true;
305
+	}
306
+
307
+
308
+
309
+	/********************************** DEPRECATED METHODS **********************************/
310
+
311
+
312
+	/**
313
+	 * possibly toggles TXN status
314
+	 *
315
+	 * @deprecated 4.9.1
316
+	 * @param EE_Transaction $transaction
317
+	 * @param    boolean     $update_txn whether to save the TXN
318
+	 * @return    boolean        whether the TXN was saved
319
+	 * @throws \EE_Error
320
+	 */
321
+	public function update_transaction_status_based_on_total_paid(EE_Transaction $transaction, $update_txn = true)
322
+	{
323
+		EE_Error::doing_it_wrong(
324
+			__CLASS__ . '::' . __FUNCTION__,
325
+			sprintf(
326
+				__('This method is deprecated. Please use "%s" instead', 'event_espresso'),
327
+				'EE_Transaction::update_status_based_on_total_paid()'
328
+			),
329
+			'4.9.1',
330
+			'5.0.0'
331
+		);
332
+		// verify transaction
333
+		if (! $transaction instanceof EE_Transaction) {
334
+			EE_Error::add_error(
335
+				__('Please provide a valid EE_Transaction object.', 'event_espresso'),
336
+				__FILE__,
337
+				__FUNCTION__,
338
+				__LINE__
339
+			);
340
+			return false;
341
+		}
342
+		// set transaction status based on comparison of TXN_paid vs TXN_total
343
+		return $transaction->update_status_based_on_total_paid($update_txn);
344
+	}
345
+
346
+
347
+	/**
348
+	 * @deprecated 4.9.12
349
+	 * @return string
350
+	 */
351
+	public function old_txn_status()
352
+	{
353
+		EE_Error::doing_it_wrong(
354
+			__METHOD__,
355
+			esc_html__(
356
+				'This logic has been moved into \EE_Transaction::old_txn_status(), please use that method instead.',
357
+				'event_espresso'
358
+			),
359
+			'4.9.12'
360
+		);
361
+		return $this->_old_txn_status;
362
+	}
363
+
364
+
365
+	/**
366
+	 * @deprecated 4.9.12
367
+	 * @param string $old_txn_status
368
+	 */
369
+	public function set_old_txn_status($old_txn_status)
370
+	{
371
+		EE_Error::doing_it_wrong(
372
+			__METHOD__,
373
+			esc_html__(
374
+				'This logic has been moved into \EE_Transaction::set_old_txn_status(), please use that method instead.',
375
+				'event_espresso'
376
+			),
377
+			'4.9.12'
378
+		);
379
+		// only set the first time
380
+		if ($this->_old_txn_status === null) {
381
+			$this->_old_txn_status = $old_txn_status;
382
+		}
383
+	}
384
+
385
+
386
+	/**
387
+	 * @deprecated 4.9.12
388
+	 * @return string
389
+	 */
390
+	public function new_txn_status()
391
+	{
392
+		EE_Error::doing_it_wrong(
393
+			__METHOD__,
394
+			esc_html__(
395
+				'This logic has been removed. Please just use \EE_Transaction::status_ID() instead.',
396
+				'event_espresso'
397
+			),
398
+			'4.9.12'
399
+		);
400
+		return $this->_new_txn_status;
401
+	}
402
+
403
+
404
+	/**
405
+	 * @deprecated 4.9.12
406
+	 * @param string $new_txn_status
407
+	 */
408
+	public function set_new_txn_status($new_txn_status)
409
+	{
410
+		EE_Error::doing_it_wrong(
411
+			__METHOD__,
412
+			esc_html__(
413
+				'This logic has been removed. Please just use \EE_Transaction::set_status() instead.',
414
+				'event_espresso'
415
+			),
416
+			'4.9.12'
417
+		);
418
+		$this->_new_txn_status = $new_txn_status;
419
+	}
420
+
421
+
422
+	/**
423
+	 * @deprecated 4.9.12
424
+	 * @return bool
425
+	 */
426
+	public function txn_status_updated()
427
+	{
428
+		EE_Error::doing_it_wrong(
429
+			__METHOD__,
430
+			esc_html__(
431
+				'This logic has been moved into \EE_Transaction::txn_status_updated(), please use that method instead.',
432
+				'event_espresso'
433
+			),
434
+			'4.9.12'
435
+		);
436
+		return $this->_new_txn_status !== $this->_old_txn_status && $this->_old_txn_status !== null ? true : false;
437
+	}
438 438
 }
Please login to merge, or discard this patch.
Spacing   +12 added lines, -12 removed lines patch added patch discarded remove patch
@@ -43,7 +43,7 @@  discard block
 block discarded – undo
43 43
     public static function instance()
44 44
     {
45 45
         // check if class object is instantiated
46
-        if (! self::$_instance instanceof EE_Transaction_Payments) {
46
+        if ( ! self::$_instance instanceof EE_Transaction_Payments) {
47 47
             self::$_instance = new self();
48 48
         }
49 49
         return self::$_instance;
@@ -62,7 +62,7 @@  discard block
 block discarded – undo
62 62
     public function recalculate_transaction_total(EE_Transaction $transaction, $update_txn = true)
63 63
     {
64 64
         $total_line_item = $transaction->total_line_item();
65
-        if (! $total_line_item instanceof EE_Line_Item) {
65
+        if ( ! $total_line_item instanceof EE_Line_Item) {
66 66
             EE_Error::add_error(
67 67
                 sprintf(
68 68
                     __('The Total Line Item for Transaction %1$d\'s was not found or is invalid.', 'event_espresso'),
@@ -101,7 +101,7 @@  discard block
 block discarded – undo
101 101
     public function calculate_total_payments_and_update_status(EE_Transaction $transaction, $update_txn = true)
102 102
     {
103 103
         // verify transaction
104
-        if (! $transaction instanceof EE_Transaction) {
104
+        if ( ! $transaction instanceof EE_Transaction) {
105 105
             EE_Error::add_error(
106 106
                 __('Please provide a valid EE_Transaction object.', 'event_espresso'),
107 107
                 __FILE__,
@@ -116,7 +116,7 @@  discard block
 block discarded – undo
116 116
         if ($total_paid !== false && (float) $total_paid !== $transaction->paid()) {
117 117
             $transaction->set_paid($total_paid);
118 118
             // maybe update status, and make sure to save transaction if not done already
119
-            if (! $transaction->update_status_based_on_total_paid($update_txn)) {
119
+            if ( ! $transaction->update_status_based_on_total_paid($update_txn)) {
120 120
                 if ($update_txn) {
121 121
                     return $transaction->save() ? true : false;
122 122
                 }
@@ -145,7 +145,7 @@  discard block
 block discarded – undo
145 145
         $payment_status = EEM_Payment::status_id_approved
146 146
     ) {
147 147
         // verify transaction
148
-        if (! $transaction instanceof EE_Transaction) {
148
+        if ( ! $transaction instanceof EE_Transaction) {
149 149
             EE_Error::add_error(
150 150
                 __('Please provide a valid EE_Transaction object.', 'event_espresso'),
151 151
                 __FILE__,
@@ -178,7 +178,7 @@  discard block
 block discarded – undo
178 178
     public function delete_payment_and_update_transaction(EE_Payment $payment)
179 179
     {
180 180
         // verify payment
181
-        if (! $payment instanceof EE_Payment) {
181
+        if ( ! $payment instanceof EE_Payment) {
182 182
             EE_Error::add_error(
183 183
                 __('A valid Payment object was not received.', 'event_espresso'),
184 184
                 __FILE__,
@@ -187,10 +187,10 @@  discard block
 block discarded – undo
187 187
             );
188 188
             return false;
189 189
         }
190
-        if (! $this->delete_registration_payments_and_update_registrations($payment)) {
190
+        if ( ! $this->delete_registration_payments_and_update_registrations($payment)) {
191 191
             return false;
192 192
         }
193
-        if (! $payment->delete()) {
193
+        if ( ! $payment->delete()) {
194 194
             EE_Error::add_error(
195 195
                 __('The payment could not be deleted.', 'event_espresso'),
196 196
                 __FILE__,
@@ -213,7 +213,7 @@  discard block
 block discarded – undo
213 213
 
214 214
         // if this fails, that just means that the transaction didn't get its status changed and/or updated.
215 215
         // however the payment was still deleted.
216
-        if (! $this->calculate_total_payments_and_update_status($transaction)) {
216
+        if ( ! $this->calculate_total_payments_and_update_status($transaction)) {
217 217
             EE_Error::add_attention(
218 218
                 __(
219 219
                     'It appears that the Payment was deleted but no change was recorded for the Transaction for an unknown reason. Please verify that all data for this Transaction looks correct..',
@@ -255,7 +255,7 @@  discard block
 block discarded – undo
255 255
         $reg_payment_query_params = ! empty($reg_payment_query_params) ? $reg_payment_query_params
256 256
             : array(array('PAY_ID' => $payment->ID()));
257 257
         $registration_payments = EEM_Registration_Payment::instance()->get_all($reg_payment_query_params);
258
-        if (! empty($registration_payments)) {
258
+        if ( ! empty($registration_payments)) {
259 259
             foreach ($registration_payments as $registration_payment) {
260 260
                 if ($registration_payment instanceof EE_Registration_Payment) {
261 261
                     $amount_paid = $registration_payment->amount();
@@ -321,7 +321,7 @@  discard block
 block discarded – undo
321 321
     public function update_transaction_status_based_on_total_paid(EE_Transaction $transaction, $update_txn = true)
322 322
     {
323 323
         EE_Error::doing_it_wrong(
324
-            __CLASS__ . '::' . __FUNCTION__,
324
+            __CLASS__.'::'.__FUNCTION__,
325 325
             sprintf(
326 326
                 __('This method is deprecated. Please use "%s" instead', 'event_espresso'),
327 327
                 'EE_Transaction::update_status_based_on_total_paid()'
@@ -330,7 +330,7 @@  discard block
 block discarded – undo
330 330
             '5.0.0'
331 331
         );
332 332
         // verify transaction
333
-        if (! $transaction instanceof EE_Transaction) {
333
+        if ( ! $transaction instanceof EE_Transaction) {
334 334
             EE_Error::add_error(
335 335
                 __('Please provide a valid EE_Transaction object.', 'event_espresso'),
336 336
                 __FILE__,
Please login to merge, or discard this patch.
core/db_classes/EE_Answer.class.php 2 patches
Doc Comments   +1 added lines, -1 removed lines patch added patch discarded remove patch
@@ -61,7 +61,7 @@
 block discarded – undo
61 61
      *    Set Answer value
62 62
      *
63 63
      * @access        public
64
-     * @param mixed $ANS_value
64
+     * @param string $ANS_value
65 65
      */
66 66
     public function set_value($ANS_value = '')
67 67
     {
Please login to merge, or discard this patch.
Indentation   +138 added lines, -138 removed lines patch added patch discarded remove patch
@@ -10,144 +10,144 @@
 block discarded – undo
10 10
 class EE_Answer extends EE_Base_Class
11 11
 {
12 12
 
13
-    /**
14
-     *
15
-     * @param array $props_n_values
16
-     * @return EE_Answer
17
-     */
18
-    public static function new_instance($props_n_values = array())
19
-    {
20
-        $has_object = parent::_check_for_object($props_n_values, __CLASS__);
21
-        return $has_object ? $has_object : new self($props_n_values);
22
-    }
23
-
24
-
25
-    /**
26
-     *
27
-     * @param array $props_n_values
28
-     * @return EE_Answer
29
-     */
30
-    public static function new_instance_from_db($props_n_values = array())
31
-    {
32
-        return new self($props_n_values, true);
33
-    }
34
-
35
-
36
-    /**
37
-     *    Set Question ID
38
-     *
39
-     * @access        public
40
-     * @param int $QST_ID
41
-     */
42
-    public function set_question($QST_ID = 0)
43
-    {
44
-        $this->set('QST_ID', $QST_ID);
45
-    }
46
-
47
-
48
-    /**
49
-     *    Set Registration ID
50
-     *
51
-     * @access        public
52
-     * @param int $REG_ID
53
-     */
54
-    public function set_registration($REG_ID = 0)
55
-    {
56
-        $this->set('REG_ID', $REG_ID);
57
-    }
58
-
59
-
60
-    /**
61
-     *    Set Answer value
62
-     *
63
-     * @access        public
64
-     * @param mixed $ANS_value
65
-     */
66
-    public function set_value($ANS_value = '')
67
-    {
68
-        $this->set('ANS_value', $ANS_value);
69
-    }
70
-
71
-
72
-    /**
73
-     *    get Attendee First Name
74
-     *
75
-     * @access        public
76
-     * @return        int
77
-     */
78
-    public function registration_ID()
79
-    {
80
-        return $this->get('REG_ID');
81
-    }
82
-
83
-
84
-    /**
85
-     *    get Attendee Last Name
86
-     *
87
-     * @access        public
88
-     * @return        int
89
-     */
90
-    public function question_ID()
91
-    {
92
-        return $this->get('QST_ID');
93
-    }
94
-
95
-
96
-    /**
97
-     *    get Attendee Address
98
-     *
99
-     * @access        public
100
-     * @return        string
101
-     */
102
-    public function value()
103
-    {
104
-        return $this->get('ANS_value');
105
-    }
106
-
107
-
108
-    /**
109
-     * Gets a pretty form of the value (mostly applies to answers that have multiple answers)
110
-     *
111
-     * @param null $schema
112
-     * @return string
113
-     */
114
-    public function pretty_value($schema = null)
115
-    {
116
-        return $this->get_pretty('ANS_value', $schema);
117
-    }
118
-
119
-
120
-    /**
121
-     * Echoes out a pretty value (even for multi-choice options)
122
-     *
123
-     * @param string $schema
124
-     */
125
-    public function e_value($schema = null)
126
-    {
127
-        $this->e('ANS_value', $schema);
128
-    }
129
-
130
-
131
-    /**
132
-     * Gets the related EE_Question to this EE_Answer
133
-     *
134
-     * @return EE_Question
135
-     */
136
-    public function question()
137
-    {
138
-        return $this->get_first_related('Question');
139
-    }
140
-
141
-
142
-    /**
143
-     * Gets the related EE_Registration to this EE_Answer
144
-     *
145
-     * @return EE_Registration
146
-     */
147
-    public function registration()
148
-    {
149
-        return $this->get_first_related('Registration');
150
-    }
13
+	/**
14
+	 *
15
+	 * @param array $props_n_values
16
+	 * @return EE_Answer
17
+	 */
18
+	public static function new_instance($props_n_values = array())
19
+	{
20
+		$has_object = parent::_check_for_object($props_n_values, __CLASS__);
21
+		return $has_object ? $has_object : new self($props_n_values);
22
+	}
23
+
24
+
25
+	/**
26
+	 *
27
+	 * @param array $props_n_values
28
+	 * @return EE_Answer
29
+	 */
30
+	public static function new_instance_from_db($props_n_values = array())
31
+	{
32
+		return new self($props_n_values, true);
33
+	}
34
+
35
+
36
+	/**
37
+	 *    Set Question ID
38
+	 *
39
+	 * @access        public
40
+	 * @param int $QST_ID
41
+	 */
42
+	public function set_question($QST_ID = 0)
43
+	{
44
+		$this->set('QST_ID', $QST_ID);
45
+	}
46
+
47
+
48
+	/**
49
+	 *    Set Registration ID
50
+	 *
51
+	 * @access        public
52
+	 * @param int $REG_ID
53
+	 */
54
+	public function set_registration($REG_ID = 0)
55
+	{
56
+		$this->set('REG_ID', $REG_ID);
57
+	}
58
+
59
+
60
+	/**
61
+	 *    Set Answer value
62
+	 *
63
+	 * @access        public
64
+	 * @param mixed $ANS_value
65
+	 */
66
+	public function set_value($ANS_value = '')
67
+	{
68
+		$this->set('ANS_value', $ANS_value);
69
+	}
70
+
71
+
72
+	/**
73
+	 *    get Attendee First Name
74
+	 *
75
+	 * @access        public
76
+	 * @return        int
77
+	 */
78
+	public function registration_ID()
79
+	{
80
+		return $this->get('REG_ID');
81
+	}
82
+
83
+
84
+	/**
85
+	 *    get Attendee Last Name
86
+	 *
87
+	 * @access        public
88
+	 * @return        int
89
+	 */
90
+	public function question_ID()
91
+	{
92
+		return $this->get('QST_ID');
93
+	}
94
+
95
+
96
+	/**
97
+	 *    get Attendee Address
98
+	 *
99
+	 * @access        public
100
+	 * @return        string
101
+	 */
102
+	public function value()
103
+	{
104
+		return $this->get('ANS_value');
105
+	}
106
+
107
+
108
+	/**
109
+	 * Gets a pretty form of the value (mostly applies to answers that have multiple answers)
110
+	 *
111
+	 * @param null $schema
112
+	 * @return string
113
+	 */
114
+	public function pretty_value($schema = null)
115
+	{
116
+		return $this->get_pretty('ANS_value', $schema);
117
+	}
118
+
119
+
120
+	/**
121
+	 * Echoes out a pretty value (even for multi-choice options)
122
+	 *
123
+	 * @param string $schema
124
+	 */
125
+	public function e_value($schema = null)
126
+	{
127
+		$this->e('ANS_value', $schema);
128
+	}
129
+
130
+
131
+	/**
132
+	 * Gets the related EE_Question to this EE_Answer
133
+	 *
134
+	 * @return EE_Question
135
+	 */
136
+	public function question()
137
+	{
138
+		return $this->get_first_related('Question');
139
+	}
140
+
141
+
142
+	/**
143
+	 * Gets the related EE_Registration to this EE_Answer
144
+	 *
145
+	 * @return EE_Registration
146
+	 */
147
+	public function registration()
148
+	{
149
+		return $this->get_first_related('Registration');
150
+	}
151 151
 }
152 152
 
153 153
 /* End of file EE_Answer.class.php */
Please login to merge, or discard this patch.
core/db_classes/EE_CPT_Base.class.php 3 patches
Doc Comments   +7 added lines, -7 removed lines patch added patch discarded remove patch
@@ -216,7 +216,7 @@  discard block
 block discarded – undo
216 216
      *
217 217
      * @link   http://codex.wordpress.org/Function_Reference/get_the_post_thumbnail
218 218
      * @access protected
219
-     * @param string|array $size (optional) Image size. Defaults to 'post-thumbnail' but can also be a 2-item array
219
+     * @param string $size (optional) Image size. Defaults to 'post-thumbnail' but can also be a 2-item array
220 220
      *                           representing width and height in pixels (i.e. array(32,32) ).
221 221
      * @param string|array $attr Optional. Query string or array of attributes.
222 222
      * @return string HTML image element
@@ -264,7 +264,7 @@  discard block
 block discarded – undo
264 264
      * This is a method for restoring this_obj using details from the given $revision_id
265 265
      *
266 266
      * @param int   $revision_id       ID of the revision we're getting data from
267
-     * @param array $related_obj_names if included this will be used to restore for related obj
267
+     * @param string[] $related_obj_names if included this will be used to restore for related obj
268 268
      *                                 if not included then we just do restore on the meta.
269 269
      *                                 We will accept an array of related_obj_names for restoration here.
270 270
      * @param array $where_query       You can optionally include an array of key=>value pairs
@@ -320,7 +320,7 @@  discard block
 block discarded – undo
320 320
      *
321 321
      * @param string  $meta_key
322 322
      * @param boolean $single
323
-     * @return mixed <ul><li>If only $id is set it will return all meta values in an associative array.</li>
323
+     * @return string|null <ul><li>If only $id is set it will return all meta values in an associative array.</li>
324 324
      * <li>If $single is set to false, or left blank, the function returns an array containing all values of the
325 325
      * specified key.</li>
326 326
      * <li>If $single is set to true, the function returns the first value of the specified key (not in an
@@ -354,8 +354,8 @@  discard block
 block discarded – undo
354 354
     /**
355 355
      * Wrapper for add_post_meta, http://codex.wordpress.org/Function_Reference/add_post_meta
356 356
      *
357
-     * @param mixed $meta_key
358
-     * @param mixed $meta_value
357
+     * @param string $meta_key
358
+     * @param string $meta_value
359 359
      * @param bool  $unique . If postmeta for this $meta_key already exists, whether to add an additional item or not
360 360
      * @return boolean Boolean true, except if the $unique argument was set to true and a custom field with the given
361 361
      *                 key already exists, in which case false is returned.
@@ -372,7 +372,7 @@  discard block
 block discarded – undo
372 372
     /**
373 373
      * Wrapper for delete_post_meta, http://codex.wordpress.org/Function_Reference/delete_post_meta
374 374
      *
375
-     * @param mixed $meta_key
375
+     * @param string $meta_key
376 376
      * @param mixed $meta_value
377 377
      * @return boolean False for failure. True for success.
378 378
      */
@@ -402,7 +402,7 @@  discard block
 block discarded – undo
402 402
      * Gets all the term-taxonomies for this CPT
403 403
      *
404 404
      * @param array $query_params
405
-     * @return EE_Term_Taxonomy
405
+     * @return EE_Base_Class[]
406 406
      */
407 407
     public function term_taxonomies($query_params = array())
408 408
     {
Please login to merge, or discard this patch.
Indentation   +425 added lines, -425 removed lines patch added patch discarded remove patch
@@ -14,429 +14,429 @@
 block discarded – undo
14 14
 abstract class EE_CPT_Base extends EE_Soft_Delete_Base_Class
15 15
 {
16 16
 
17
-    /**
18
-     * This is a property for holding cached feature images on CPT objects.  Cache's are set on the first
19
-     * "feature_image()" method call.  Each key in the array corresponds to the requested size.
20
-     *
21
-     * @var array
22
-     */
23
-    protected $_feature_image = array();
24
-
25
-    /**
26
-     * @var WP_Post the WP_Post that corresponds with this CPT model object
27
-     */
28
-    protected $_wp_post;
29
-
30
-
31
-    abstract public function wp_user();
32
-
33
-
34
-    /**
35
-     * Returns the WP post associated with this CPT model object. If this CPT is saved, fetches it
36
-     * from the DB. Otherwise, create an unsaved WP_POst object. Caches the post internally.
37
-     *
38
-     * @return WP_Post
39
-     */
40
-    public function wp_post()
41
-    {
42
-        global $wpdb;
43
-        if (! $this->_wp_post instanceof WP_Post) {
44
-            if ($this->ID()) {
45
-                $this->_wp_post = get_post($this->ID());
46
-            } else {
47
-                $simulated_db_result = new stdClass();
48
-                foreach ($this->get_model()->field_settings(true) as $field_name => $field_obj) {
49
-                    if ($this->get_model()->get_table_obj_by_alias($field_obj->get_table_alias())->get_table_name()
50
-                        === $wpdb->posts
51
-                    ) {
52
-                        $column = $field_obj->get_table_column();
53
-
54
-                        if ($field_obj instanceof EE_Datetime_Field) {
55
-                            $value_on_model_obj = $this->get_DateTime_object($field_name);
56
-                        } elseif ($field_obj->is_db_only_field()) {
57
-                            $value_on_model_obj = $field_obj->get_default_value();
58
-                        } else {
59
-                            $value_on_model_obj = $this->get_raw($field_name);
60
-                        }
61
-                        $simulated_db_result->{$column} = $field_obj->prepare_for_use_in_db($value_on_model_obj);
62
-                    }
63
-                }
64
-                $this->_wp_post = new WP_Post($simulated_db_result);
65
-            }
66
-            // and let's make retrieving the EE CPT object easy too
67
-            $classname = get_class($this);
68
-            if (! isset($this->_wp_post->{$classname})) {
69
-                $this->_wp_post->{$classname} = $this;
70
-            }
71
-        }
72
-        return $this->_wp_post;
73
-    }
74
-
75
-    /**
76
-     * When fetching a new value for a post field that uses the global $post for rendering,
77
-     * set the global $post temporarily to be this model object; and afterwards restore it
78
-     *
79
-     * @param string $fieldname
80
-     * @param bool   $pretty
81
-     * @param string $extra_cache_ref
82
-     * @return mixed
83
-     */
84
-    protected function _get_fresh_property($fieldname, $pretty = false, $extra_cache_ref = null)
85
-    {
86
-        global $post;
87
-
88
-        if ($pretty
89
-            && (
90
-                ! (
91
-                    $post instanceof WP_Post
92
-                    && $post->ID
93
-                )
94
-                || (int) $post->ID !== $this->ID()
95
-            )
96
-            && $this->get_model()->field_settings_for($fieldname) instanceof EE_Post_Content_Field) {
97
-            $old_post = $post;
98
-            $post = $this->wp_post();
99
-            $return_value = parent::_get_fresh_property($fieldname, $pretty, $extra_cache_ref);
100
-            $post = $old_post;
101
-        } else {
102
-            $return_value = parent::_get_fresh_property($fieldname, $pretty, $extra_cache_ref);
103
-        }
104
-        return $return_value;
105
-    }
106
-
107
-    /**
108
-     * Adds to the specified event category. If it category doesn't exist, creates it.
109
-     *
110
-     * @param string $category_name
111
-     * @param string $category_description    optional
112
-     * @param int    $parent_term_taxonomy_id optional
113
-     * @return EE_Term_Taxonomy
114
-     */
115
-    public function add_event_category($category_name, $category_description = null, $parent_term_taxonomy_id = null)
116
-    {
117
-        return $this->get_model()->add_event_category(
118
-            $this,
119
-            $category_name,
120
-            $category_description,
121
-            $parent_term_taxonomy_id
122
-        );
123
-    }
124
-
125
-
126
-    /**
127
-     * Removes the event category by specified name from being related ot this event
128
-     *
129
-     * @param string $category_name
130
-     * @return bool
131
-     */
132
-    public function remove_event_category($category_name)
133
-    {
134
-        return $this->get_model()->remove_event_category($this, $category_name);
135
-    }
136
-
137
-
138
-    /**
139
-     * Removes the relation to the specified term taxonomy, and maintains the
140
-     * data integrity of the term taxonomy provided
141
-     *
142
-     * @param EE_Term_Taxonomy $term_taxonomy
143
-     * @return EE_Base_Class the relation was removed from
144
-     */
145
-    public function remove_relation_to_term_taxonomy($term_taxonomy)
146
-    {
147
-        if (! $term_taxonomy) {
148
-            EE_Error::add_error(
149
-                sprintf(
150
-                    __(
151
-                        "No Term_Taxonomy provided which to remove from model object of type %s and id %d",
152
-                        "event_espresso"
153
-                    ),
154
-                    get_class($this),
155
-                    $this->ID()
156
-                ),
157
-                __FILE__,
158
-                __FUNCTION__,
159
-                __LINE__
160
-            );
161
-            return null;
162
-        }
163
-        $term_taxonomy->set_count($term_taxonomy->count() - 1);
164
-        $term_taxonomy->save();
165
-        return $this->_remove_relation_to($term_taxonomy, 'Term_Taxonomy');
166
-    }
167
-
168
-
169
-    /**
170
-     * The main purpose of this method is to return the post type for the model object
171
-     *
172
-     * @access public
173
-     * @return string
174
-     */
175
-    public function post_type()
176
-    {
177
-        return $this->get_model()->post_type();
178
-    }
179
-
180
-
181
-    /**
182
-     * The main purpose of this method is to return the parent for the model object
183
-     *
184
-     * @access public
185
-     * @return int
186
-     */
187
-    public function parent()
188
-    {
189
-        return $this->get('parent');
190
-    }
191
-
192
-
193
-    /**
194
-     * return the _status property
195
-     *
196
-     * @return string
197
-     */
198
-    public function status()
199
-    {
200
-        return $this->get('status');
201
-    }
202
-
203
-
204
-    /**
205
-     * @param string $status
206
-     */
207
-    public function set_status($status)
208
-    {
209
-        $this->set('status', $status);
210
-    }
211
-
212
-
213
-    /**
214
-     * This calls the equivalent model method for retrieving the feature image which in turn is a wrapper for
215
-     * WordPress' get_the_post_thumbnail() function.
216
-     *
217
-     * @link   http://codex.wordpress.org/Function_Reference/get_the_post_thumbnail
218
-     * @access protected
219
-     * @param string|array $size (optional) Image size. Defaults to 'post-thumbnail' but can also be a 2-item array
220
-     *                           representing width and height in pixels (i.e. array(32,32) ).
221
-     * @param string|array $attr Optional. Query string or array of attributes.
222
-     * @return string HTML image element
223
-     */
224
-    protected function _get_feature_image($size, $attr)
225
-    {
226
-        // first let's see if we already have the _feature_image property set AND if it has a cached element on it FOR the given size
227
-        $attr_key = is_array($attr) ? implode('_', $attr) : $attr;
228
-        $cache_key = is_array($size) ? implode('_', $size) . $attr_key : $size . $attr_key;
229
-        $this->_feature_image[ $cache_key ] = isset($this->_feature_image[ $cache_key ])
230
-            ? $this->_feature_image[ $cache_key ] : $this->get_model()->get_feature_image($this->ID(), $size, $attr);
231
-        return $this->_feature_image[ $cache_key ];
232
-    }
233
-
234
-
235
-    /**
236
-     * See _get_feature_image. Returns the HTML to display a featured image
237
-     *
238
-     * @param string       $size
239
-     * @param string|array $attr
240
-     * @return string of html
241
-     */
242
-    public function feature_image($size = 'thumbnail', $attr = '')
243
-    {
244
-        return $this->_get_feature_image($size, $attr);
245
-    }
246
-
247
-
248
-    /**
249
-     * This uses the wp "wp_get_attachment_image_src()" function to return the feature image for the current class
250
-     * using the given size params.
251
-     *
252
-     * @param  string|array $size can either be a string: 'thumbnail', 'medium', 'large', 'full' OR 2-item array
253
-     *                            representing width and height in pixels eg. array(32,32).
254
-     * @return string|boolean          the url of the image or false if not found
255
-     */
256
-    public function feature_image_url($size = 'thumbnail')
257
-    {
258
-        $attachment = wp_get_attachment_image_src(get_post_thumbnail_id($this->ID()), $size);
259
-        return ! empty($attachment) ? $attachment[0] : false;
260
-    }
261
-
262
-
263
-    /**
264
-     * This is a method for restoring this_obj using details from the given $revision_id
265
-     *
266
-     * @param int   $revision_id       ID of the revision we're getting data from
267
-     * @param array $related_obj_names if included this will be used to restore for related obj
268
-     *                                 if not included then we just do restore on the meta.
269
-     *                                 We will accept an array of related_obj_names for restoration here.
270
-     * @param array $where_query       You can optionally include an array of key=>value pairs
271
-     *                                 that allow you to further constrict the relation to being added.
272
-     *                                 However, keep in mind that the columns (keys) given
273
-     *                                 must match a column on the JOIN table and currently
274
-     *                                 only the HABTM models accept these additional conditions.
275
-     *                                 Also remember that if an exact match isn't found for these extra cols/val pairs,
276
-     *                                 then a NEW row is created in the join table.
277
-     *                                 This array is INDEXED by RELATED OBJ NAME (so it corresponds with the obj_names
278
-     *                                 sent);
279
-     * @return void
280
-     */
281
-    public function restore_revision($revision_id, $related_obj_names = array(), $where_query = array())
282
-    {
283
-        // get revision object
284
-        $revision_obj = $this->get_model()->get_one_by_ID($revision_id);
285
-        if ($revision_obj instanceof EE_CPT_Base) {
286
-            // no related_obj_name so we assume we're saving a revision on this object.
287
-            if (empty($related_obj_names)) {
288
-                $fields = $this->get_model()->get_meta_table_fields();
289
-                foreach ($fields as $field) {
290
-                    $this->set($field, $revision_obj->get($field));
291
-                }
292
-                $this->save();
293
-            }
294
-            $related_obj_names = (array) $related_obj_names;
295
-            foreach ($related_obj_names as $related_name) {
296
-                // related_obj_name so we're saving a revision on an object related to this object
297
-                // do we have $where_query params for this related object?  If we do then we include that.
298
-                $cols_n_values = isset($where_query[ $related_name ]) ? $where_query[ $related_name ] : array();
299
-                $where_params = ! empty($cols_n_values) ? array($cols_n_values) : array();
300
-                $related_objs = $this->get_many_related($related_name, $where_params);
301
-                $revision_related_objs = $revision_obj->get_many_related($related_name, $where_params);
302
-                // load helper
303
-                // remove related objs from this object that are not in revision
304
-                // array_diff *should* work cause I think objects are indexed by ID?
305
-                $related_to_remove = EEH_Array::object_array_diff($related_objs, $revision_related_objs);
306
-                foreach ($related_to_remove as $rr) {
307
-                    $this->_remove_relation_to($rr, $related_name, $cols_n_values);
308
-                }
309
-                // add all related objs attached to revision to this object
310
-                foreach ($revision_related_objs as $r_obj) {
311
-                    $this->_add_relation_to($r_obj, $related_name, $cols_n_values);
312
-                }
313
-            }
314
-        }
315
-    }
316
-
317
-
318
-    /**
319
-     * Wrapper for get_post_meta, http://codex.wordpress.org/Function_Reference/get_post_meta
320
-     *
321
-     * @param string  $meta_key
322
-     * @param boolean $single
323
-     * @return mixed <ul><li>If only $id is set it will return all meta values in an associative array.</li>
324
-     * <li>If $single is set to false, or left blank, the function returns an array containing all values of the
325
-     * specified key.</li>
326
-     * <li>If $single is set to true, the function returns the first value of the specified key (not in an
327
-     * array</li></ul>
328
-     */
329
-    public function get_post_meta($meta_key = null, $single = false)
330
-    {
331
-        return get_post_meta($this->ID(), $meta_key, $single);
332
-    }
333
-
334
-
335
-    /**
336
-     * Wrapper for update_post_meta, http://codex.wordpress.org/Function_Reference/update_post_meta
337
-     *
338
-     * @param string $meta_key
339
-     * @param mixed  $meta_value
340
-     * @param mixed  $prev_value
341
-     * @return mixed Returns meta_id if the meta doesn't exist, otherwise returns true on success and false on failure.
342
-     *               NOTE: If the meta_value passed to this function is the same as the value that is already in the
343
-     *               database, this function returns false.
344
-     */
345
-    public function update_post_meta($meta_key, $meta_value, $prev_value = null)
346
-    {
347
-        if (! $this->ID()) {
348
-            $this->save();
349
-        }
350
-        return update_post_meta($this->ID(), $meta_key, $meta_value, $prev_value);
351
-    }
352
-
353
-
354
-    /**
355
-     * Wrapper for add_post_meta, http://codex.wordpress.org/Function_Reference/add_post_meta
356
-     *
357
-     * @param mixed $meta_key
358
-     * @param mixed $meta_value
359
-     * @param bool  $unique . If postmeta for this $meta_key already exists, whether to add an additional item or not
360
-     * @return boolean Boolean true, except if the $unique argument was set to true and a custom field with the given
361
-     *                 key already exists, in which case false is returned.
362
-     */
363
-    public function add_post_meta($meta_key, $meta_value, $unique = false)
364
-    {
365
-        if ($this->ID()) {
366
-            $this->save();
367
-        }
368
-        return add_post_meta($this->ID(), $meta_key, $meta_value, $unique);
369
-    }
370
-
371
-
372
-    /**
373
-     * Wrapper for delete_post_meta, http://codex.wordpress.org/Function_Reference/delete_post_meta
374
-     *
375
-     * @param mixed $meta_key
376
-     * @param mixed $meta_value
377
-     * @return boolean False for failure. True for success.
378
-     */
379
-    public function delete_post_meta($meta_key, $meta_value = '')
380
-    {
381
-        if (! $this->ID()) {
382
-            // there are obviously no postmetas for this if it's not saved
383
-            // so let's just report this as a success
384
-            return true;
385
-        }
386
-        return delete_post_meta($this->ID(), $meta_key, $meta_value);
387
-    }
388
-
389
-
390
-    /**
391
-     * Gets the URL for viewing this event on the front-end
392
-     *
393
-     * @return string
394
-     */
395
-    public function get_permalink()
396
-    {
397
-        return get_permalink($this->ID());
398
-    }
399
-
400
-
401
-    /**
402
-     * Gets all the term-taxonomies for this CPT
403
-     *
404
-     * @param array $query_params
405
-     * @return EE_Term_Taxonomy
406
-     */
407
-    public function term_taxonomies($query_params = array())
408
-    {
409
-        return $this->get_many_related('Term_Taxonomy', $query_params);
410
-    }
411
-
412
-
413
-    /**
414
-     * @return mixed
415
-     */
416
-    public function get_custom_post_statuses()
417
-    {
418
-        return $this->get_model()->get_custom_post_statuses();
419
-    }
420
-
421
-
422
-    /**
423
-     * @return mixed
424
-     */
425
-    public function get_all_post_statuses()
426
-    {
427
-        return $this->get_model()->get_status_array();
428
-    }
429
-
430
-
431
-    /**
432
-     * Don't serialize the WP Post. That's just duplicate data and we want to avoid recursion
433
-     *
434
-     * @return array
435
-     */
436
-    public function __sleep()
437
-    {
438
-        $properties_to_serialize = parent::__sleep();
439
-        $properties_to_serialize = array_diff($properties_to_serialize, array('_wp_post'));
440
-        return $properties_to_serialize;
441
-    }
17
+	/**
18
+	 * This is a property for holding cached feature images on CPT objects.  Cache's are set on the first
19
+	 * "feature_image()" method call.  Each key in the array corresponds to the requested size.
20
+	 *
21
+	 * @var array
22
+	 */
23
+	protected $_feature_image = array();
24
+
25
+	/**
26
+	 * @var WP_Post the WP_Post that corresponds with this CPT model object
27
+	 */
28
+	protected $_wp_post;
29
+
30
+
31
+	abstract public function wp_user();
32
+
33
+
34
+	/**
35
+	 * Returns the WP post associated with this CPT model object. If this CPT is saved, fetches it
36
+	 * from the DB. Otherwise, create an unsaved WP_POst object. Caches the post internally.
37
+	 *
38
+	 * @return WP_Post
39
+	 */
40
+	public function wp_post()
41
+	{
42
+		global $wpdb;
43
+		if (! $this->_wp_post instanceof WP_Post) {
44
+			if ($this->ID()) {
45
+				$this->_wp_post = get_post($this->ID());
46
+			} else {
47
+				$simulated_db_result = new stdClass();
48
+				foreach ($this->get_model()->field_settings(true) as $field_name => $field_obj) {
49
+					if ($this->get_model()->get_table_obj_by_alias($field_obj->get_table_alias())->get_table_name()
50
+						=== $wpdb->posts
51
+					) {
52
+						$column = $field_obj->get_table_column();
53
+
54
+						if ($field_obj instanceof EE_Datetime_Field) {
55
+							$value_on_model_obj = $this->get_DateTime_object($field_name);
56
+						} elseif ($field_obj->is_db_only_field()) {
57
+							$value_on_model_obj = $field_obj->get_default_value();
58
+						} else {
59
+							$value_on_model_obj = $this->get_raw($field_name);
60
+						}
61
+						$simulated_db_result->{$column} = $field_obj->prepare_for_use_in_db($value_on_model_obj);
62
+					}
63
+				}
64
+				$this->_wp_post = new WP_Post($simulated_db_result);
65
+			}
66
+			// and let's make retrieving the EE CPT object easy too
67
+			$classname = get_class($this);
68
+			if (! isset($this->_wp_post->{$classname})) {
69
+				$this->_wp_post->{$classname} = $this;
70
+			}
71
+		}
72
+		return $this->_wp_post;
73
+	}
74
+
75
+	/**
76
+	 * When fetching a new value for a post field that uses the global $post for rendering,
77
+	 * set the global $post temporarily to be this model object; and afterwards restore it
78
+	 *
79
+	 * @param string $fieldname
80
+	 * @param bool   $pretty
81
+	 * @param string $extra_cache_ref
82
+	 * @return mixed
83
+	 */
84
+	protected function _get_fresh_property($fieldname, $pretty = false, $extra_cache_ref = null)
85
+	{
86
+		global $post;
87
+
88
+		if ($pretty
89
+			&& (
90
+				! (
91
+					$post instanceof WP_Post
92
+					&& $post->ID
93
+				)
94
+				|| (int) $post->ID !== $this->ID()
95
+			)
96
+			&& $this->get_model()->field_settings_for($fieldname) instanceof EE_Post_Content_Field) {
97
+			$old_post = $post;
98
+			$post = $this->wp_post();
99
+			$return_value = parent::_get_fresh_property($fieldname, $pretty, $extra_cache_ref);
100
+			$post = $old_post;
101
+		} else {
102
+			$return_value = parent::_get_fresh_property($fieldname, $pretty, $extra_cache_ref);
103
+		}
104
+		return $return_value;
105
+	}
106
+
107
+	/**
108
+	 * Adds to the specified event category. If it category doesn't exist, creates it.
109
+	 *
110
+	 * @param string $category_name
111
+	 * @param string $category_description    optional
112
+	 * @param int    $parent_term_taxonomy_id optional
113
+	 * @return EE_Term_Taxonomy
114
+	 */
115
+	public function add_event_category($category_name, $category_description = null, $parent_term_taxonomy_id = null)
116
+	{
117
+		return $this->get_model()->add_event_category(
118
+			$this,
119
+			$category_name,
120
+			$category_description,
121
+			$parent_term_taxonomy_id
122
+		);
123
+	}
124
+
125
+
126
+	/**
127
+	 * Removes the event category by specified name from being related ot this event
128
+	 *
129
+	 * @param string $category_name
130
+	 * @return bool
131
+	 */
132
+	public function remove_event_category($category_name)
133
+	{
134
+		return $this->get_model()->remove_event_category($this, $category_name);
135
+	}
136
+
137
+
138
+	/**
139
+	 * Removes the relation to the specified term taxonomy, and maintains the
140
+	 * data integrity of the term taxonomy provided
141
+	 *
142
+	 * @param EE_Term_Taxonomy $term_taxonomy
143
+	 * @return EE_Base_Class the relation was removed from
144
+	 */
145
+	public function remove_relation_to_term_taxonomy($term_taxonomy)
146
+	{
147
+		if (! $term_taxonomy) {
148
+			EE_Error::add_error(
149
+				sprintf(
150
+					__(
151
+						"No Term_Taxonomy provided which to remove from model object of type %s and id %d",
152
+						"event_espresso"
153
+					),
154
+					get_class($this),
155
+					$this->ID()
156
+				),
157
+				__FILE__,
158
+				__FUNCTION__,
159
+				__LINE__
160
+			);
161
+			return null;
162
+		}
163
+		$term_taxonomy->set_count($term_taxonomy->count() - 1);
164
+		$term_taxonomy->save();
165
+		return $this->_remove_relation_to($term_taxonomy, 'Term_Taxonomy');
166
+	}
167
+
168
+
169
+	/**
170
+	 * The main purpose of this method is to return the post type for the model object
171
+	 *
172
+	 * @access public
173
+	 * @return string
174
+	 */
175
+	public function post_type()
176
+	{
177
+		return $this->get_model()->post_type();
178
+	}
179
+
180
+
181
+	/**
182
+	 * The main purpose of this method is to return the parent for the model object
183
+	 *
184
+	 * @access public
185
+	 * @return int
186
+	 */
187
+	public function parent()
188
+	{
189
+		return $this->get('parent');
190
+	}
191
+
192
+
193
+	/**
194
+	 * return the _status property
195
+	 *
196
+	 * @return string
197
+	 */
198
+	public function status()
199
+	{
200
+		return $this->get('status');
201
+	}
202
+
203
+
204
+	/**
205
+	 * @param string $status
206
+	 */
207
+	public function set_status($status)
208
+	{
209
+		$this->set('status', $status);
210
+	}
211
+
212
+
213
+	/**
214
+	 * This calls the equivalent model method for retrieving the feature image which in turn is a wrapper for
215
+	 * WordPress' get_the_post_thumbnail() function.
216
+	 *
217
+	 * @link   http://codex.wordpress.org/Function_Reference/get_the_post_thumbnail
218
+	 * @access protected
219
+	 * @param string|array $size (optional) Image size. Defaults to 'post-thumbnail' but can also be a 2-item array
220
+	 *                           representing width and height in pixels (i.e. array(32,32) ).
221
+	 * @param string|array $attr Optional. Query string or array of attributes.
222
+	 * @return string HTML image element
223
+	 */
224
+	protected function _get_feature_image($size, $attr)
225
+	{
226
+		// first let's see if we already have the _feature_image property set AND if it has a cached element on it FOR the given size
227
+		$attr_key = is_array($attr) ? implode('_', $attr) : $attr;
228
+		$cache_key = is_array($size) ? implode('_', $size) . $attr_key : $size . $attr_key;
229
+		$this->_feature_image[ $cache_key ] = isset($this->_feature_image[ $cache_key ])
230
+			? $this->_feature_image[ $cache_key ] : $this->get_model()->get_feature_image($this->ID(), $size, $attr);
231
+		return $this->_feature_image[ $cache_key ];
232
+	}
233
+
234
+
235
+	/**
236
+	 * See _get_feature_image. Returns the HTML to display a featured image
237
+	 *
238
+	 * @param string       $size
239
+	 * @param string|array $attr
240
+	 * @return string of html
241
+	 */
242
+	public function feature_image($size = 'thumbnail', $attr = '')
243
+	{
244
+		return $this->_get_feature_image($size, $attr);
245
+	}
246
+
247
+
248
+	/**
249
+	 * This uses the wp "wp_get_attachment_image_src()" function to return the feature image for the current class
250
+	 * using the given size params.
251
+	 *
252
+	 * @param  string|array $size can either be a string: 'thumbnail', 'medium', 'large', 'full' OR 2-item array
253
+	 *                            representing width and height in pixels eg. array(32,32).
254
+	 * @return string|boolean          the url of the image or false if not found
255
+	 */
256
+	public function feature_image_url($size = 'thumbnail')
257
+	{
258
+		$attachment = wp_get_attachment_image_src(get_post_thumbnail_id($this->ID()), $size);
259
+		return ! empty($attachment) ? $attachment[0] : false;
260
+	}
261
+
262
+
263
+	/**
264
+	 * This is a method for restoring this_obj using details from the given $revision_id
265
+	 *
266
+	 * @param int   $revision_id       ID of the revision we're getting data from
267
+	 * @param array $related_obj_names if included this will be used to restore for related obj
268
+	 *                                 if not included then we just do restore on the meta.
269
+	 *                                 We will accept an array of related_obj_names for restoration here.
270
+	 * @param array $where_query       You can optionally include an array of key=>value pairs
271
+	 *                                 that allow you to further constrict the relation to being added.
272
+	 *                                 However, keep in mind that the columns (keys) given
273
+	 *                                 must match a column on the JOIN table and currently
274
+	 *                                 only the HABTM models accept these additional conditions.
275
+	 *                                 Also remember that if an exact match isn't found for these extra cols/val pairs,
276
+	 *                                 then a NEW row is created in the join table.
277
+	 *                                 This array is INDEXED by RELATED OBJ NAME (so it corresponds with the obj_names
278
+	 *                                 sent);
279
+	 * @return void
280
+	 */
281
+	public function restore_revision($revision_id, $related_obj_names = array(), $where_query = array())
282
+	{
283
+		// get revision object
284
+		$revision_obj = $this->get_model()->get_one_by_ID($revision_id);
285
+		if ($revision_obj instanceof EE_CPT_Base) {
286
+			// no related_obj_name so we assume we're saving a revision on this object.
287
+			if (empty($related_obj_names)) {
288
+				$fields = $this->get_model()->get_meta_table_fields();
289
+				foreach ($fields as $field) {
290
+					$this->set($field, $revision_obj->get($field));
291
+				}
292
+				$this->save();
293
+			}
294
+			$related_obj_names = (array) $related_obj_names;
295
+			foreach ($related_obj_names as $related_name) {
296
+				// related_obj_name so we're saving a revision on an object related to this object
297
+				// do we have $where_query params for this related object?  If we do then we include that.
298
+				$cols_n_values = isset($where_query[ $related_name ]) ? $where_query[ $related_name ] : array();
299
+				$where_params = ! empty($cols_n_values) ? array($cols_n_values) : array();
300
+				$related_objs = $this->get_many_related($related_name, $where_params);
301
+				$revision_related_objs = $revision_obj->get_many_related($related_name, $where_params);
302
+				// load helper
303
+				// remove related objs from this object that are not in revision
304
+				// array_diff *should* work cause I think objects are indexed by ID?
305
+				$related_to_remove = EEH_Array::object_array_diff($related_objs, $revision_related_objs);
306
+				foreach ($related_to_remove as $rr) {
307
+					$this->_remove_relation_to($rr, $related_name, $cols_n_values);
308
+				}
309
+				// add all related objs attached to revision to this object
310
+				foreach ($revision_related_objs as $r_obj) {
311
+					$this->_add_relation_to($r_obj, $related_name, $cols_n_values);
312
+				}
313
+			}
314
+		}
315
+	}
316
+
317
+
318
+	/**
319
+	 * Wrapper for get_post_meta, http://codex.wordpress.org/Function_Reference/get_post_meta
320
+	 *
321
+	 * @param string  $meta_key
322
+	 * @param boolean $single
323
+	 * @return mixed <ul><li>If only $id is set it will return all meta values in an associative array.</li>
324
+	 * <li>If $single is set to false, or left blank, the function returns an array containing all values of the
325
+	 * specified key.</li>
326
+	 * <li>If $single is set to true, the function returns the first value of the specified key (not in an
327
+	 * array</li></ul>
328
+	 */
329
+	public function get_post_meta($meta_key = null, $single = false)
330
+	{
331
+		return get_post_meta($this->ID(), $meta_key, $single);
332
+	}
333
+
334
+
335
+	/**
336
+	 * Wrapper for update_post_meta, http://codex.wordpress.org/Function_Reference/update_post_meta
337
+	 *
338
+	 * @param string $meta_key
339
+	 * @param mixed  $meta_value
340
+	 * @param mixed  $prev_value
341
+	 * @return mixed Returns meta_id if the meta doesn't exist, otherwise returns true on success and false on failure.
342
+	 *               NOTE: If the meta_value passed to this function is the same as the value that is already in the
343
+	 *               database, this function returns false.
344
+	 */
345
+	public function update_post_meta($meta_key, $meta_value, $prev_value = null)
346
+	{
347
+		if (! $this->ID()) {
348
+			$this->save();
349
+		}
350
+		return update_post_meta($this->ID(), $meta_key, $meta_value, $prev_value);
351
+	}
352
+
353
+
354
+	/**
355
+	 * Wrapper for add_post_meta, http://codex.wordpress.org/Function_Reference/add_post_meta
356
+	 *
357
+	 * @param mixed $meta_key
358
+	 * @param mixed $meta_value
359
+	 * @param bool  $unique . If postmeta for this $meta_key already exists, whether to add an additional item or not
360
+	 * @return boolean Boolean true, except if the $unique argument was set to true and a custom field with the given
361
+	 *                 key already exists, in which case false is returned.
362
+	 */
363
+	public function add_post_meta($meta_key, $meta_value, $unique = false)
364
+	{
365
+		if ($this->ID()) {
366
+			$this->save();
367
+		}
368
+		return add_post_meta($this->ID(), $meta_key, $meta_value, $unique);
369
+	}
370
+
371
+
372
+	/**
373
+	 * Wrapper for delete_post_meta, http://codex.wordpress.org/Function_Reference/delete_post_meta
374
+	 *
375
+	 * @param mixed $meta_key
376
+	 * @param mixed $meta_value
377
+	 * @return boolean False for failure. True for success.
378
+	 */
379
+	public function delete_post_meta($meta_key, $meta_value = '')
380
+	{
381
+		if (! $this->ID()) {
382
+			// there are obviously no postmetas for this if it's not saved
383
+			// so let's just report this as a success
384
+			return true;
385
+		}
386
+		return delete_post_meta($this->ID(), $meta_key, $meta_value);
387
+	}
388
+
389
+
390
+	/**
391
+	 * Gets the URL for viewing this event on the front-end
392
+	 *
393
+	 * @return string
394
+	 */
395
+	public function get_permalink()
396
+	{
397
+		return get_permalink($this->ID());
398
+	}
399
+
400
+
401
+	/**
402
+	 * Gets all the term-taxonomies for this CPT
403
+	 *
404
+	 * @param array $query_params
405
+	 * @return EE_Term_Taxonomy
406
+	 */
407
+	public function term_taxonomies($query_params = array())
408
+	{
409
+		return $this->get_many_related('Term_Taxonomy', $query_params);
410
+	}
411
+
412
+
413
+	/**
414
+	 * @return mixed
415
+	 */
416
+	public function get_custom_post_statuses()
417
+	{
418
+		return $this->get_model()->get_custom_post_statuses();
419
+	}
420
+
421
+
422
+	/**
423
+	 * @return mixed
424
+	 */
425
+	public function get_all_post_statuses()
426
+	{
427
+		return $this->get_model()->get_status_array();
428
+	}
429
+
430
+
431
+	/**
432
+	 * Don't serialize the WP Post. That's just duplicate data and we want to avoid recursion
433
+	 *
434
+	 * @return array
435
+	 */
436
+	public function __sleep()
437
+	{
438
+		$properties_to_serialize = parent::__sleep();
439
+		$properties_to_serialize = array_diff($properties_to_serialize, array('_wp_post'));
440
+		return $properties_to_serialize;
441
+	}
442 442
 }
Please login to merge, or discard this patch.
Spacing   +10 added lines, -10 removed lines patch added patch discarded remove patch
@@ -40,7 +40,7 @@  discard block
 block discarded – undo
40 40
     public function wp_post()
41 41
     {
42 42
         global $wpdb;
43
-        if (! $this->_wp_post instanceof WP_Post) {
43
+        if ( ! $this->_wp_post instanceof WP_Post) {
44 44
             if ($this->ID()) {
45 45
                 $this->_wp_post = get_post($this->ID());
46 46
             } else {
@@ -65,7 +65,7 @@  discard block
 block discarded – undo
65 65
             }
66 66
             // and let's make retrieving the EE CPT object easy too
67 67
             $classname = get_class($this);
68
-            if (! isset($this->_wp_post->{$classname})) {
68
+            if ( ! isset($this->_wp_post->{$classname})) {
69 69
                 $this->_wp_post->{$classname} = $this;
70 70
             }
71 71
         }
@@ -144,7 +144,7 @@  discard block
 block discarded – undo
144 144
      */
145 145
     public function remove_relation_to_term_taxonomy($term_taxonomy)
146 146
     {
147
-        if (! $term_taxonomy) {
147
+        if ( ! $term_taxonomy) {
148 148
             EE_Error::add_error(
149 149
                 sprintf(
150 150
                     __(
@@ -225,10 +225,10 @@  discard block
 block discarded – undo
225 225
     {
226 226
         // first let's see if we already have the _feature_image property set AND if it has a cached element on it FOR the given size
227 227
         $attr_key = is_array($attr) ? implode('_', $attr) : $attr;
228
-        $cache_key = is_array($size) ? implode('_', $size) . $attr_key : $size . $attr_key;
229
-        $this->_feature_image[ $cache_key ] = isset($this->_feature_image[ $cache_key ])
230
-            ? $this->_feature_image[ $cache_key ] : $this->get_model()->get_feature_image($this->ID(), $size, $attr);
231
-        return $this->_feature_image[ $cache_key ];
228
+        $cache_key = is_array($size) ? implode('_', $size).$attr_key : $size.$attr_key;
229
+        $this->_feature_image[$cache_key] = isset($this->_feature_image[$cache_key])
230
+            ? $this->_feature_image[$cache_key] : $this->get_model()->get_feature_image($this->ID(), $size, $attr);
231
+        return $this->_feature_image[$cache_key];
232 232
     }
233 233
 
234 234
 
@@ -295,7 +295,7 @@  discard block
 block discarded – undo
295 295
             foreach ($related_obj_names as $related_name) {
296 296
                 // related_obj_name so we're saving a revision on an object related to this object
297 297
                 // do we have $where_query params for this related object?  If we do then we include that.
298
-                $cols_n_values = isset($where_query[ $related_name ]) ? $where_query[ $related_name ] : array();
298
+                $cols_n_values = isset($where_query[$related_name]) ? $where_query[$related_name] : array();
299 299
                 $where_params = ! empty($cols_n_values) ? array($cols_n_values) : array();
300 300
                 $related_objs = $this->get_many_related($related_name, $where_params);
301 301
                 $revision_related_objs = $revision_obj->get_many_related($related_name, $where_params);
@@ -344,7 +344,7 @@  discard block
 block discarded – undo
344 344
      */
345 345
     public function update_post_meta($meta_key, $meta_value, $prev_value = null)
346 346
     {
347
-        if (! $this->ID()) {
347
+        if ( ! $this->ID()) {
348 348
             $this->save();
349 349
         }
350 350
         return update_post_meta($this->ID(), $meta_key, $meta_value, $prev_value);
@@ -378,7 +378,7 @@  discard block
 block discarded – undo
378 378
      */
379 379
     public function delete_post_meta($meta_key, $meta_value = '')
380 380
     {
381
-        if (! $this->ID()) {
381
+        if ( ! $this->ID()) {
382 382
             // there are obviously no postmetas for this if it's not saved
383 383
             // so let's just report this as a success
384 384
             return true;
Please login to merge, or discard this patch.
core/db_classes/EE_CSV.class.php 3 patches
Doc Comments   +6 added lines, -9 removed lines patch added patch discarded remove patch
@@ -326,7 +326,7 @@  discard block
 block discarded – undo
326 326
      * and starts writing the file to PHP's output. Returns the file handle so other functions can
327 327
      * also write to it
328 328
      *
329
-     * @param string $new_filename the name of the file that the user will download
329
+     * @param string|false $filename the name of the file that the user will download
330 330
      * @return resource, like the results of fopen(), which can be used for fwrite, fputcsv2, etc.
331 331
      */
332 332
     public function begin_sending_csv($filename)
@@ -391,10 +391,7 @@  discard block
 block discarded – undo
391 391
      *
392 392
      * @param array   $data                 2D array, first numerically-indexed, and next-level-down preferably indexed
393 393
      *                                      by string
394
-     * @param boolean $add_csv_column_names whether or not we should add the keys in the bottom-most array as a row for
395
-     *                                      headers in the CSV. Eg, if $data looked like
396
-     *                                      array(0=>array('EVT_ID'=>1,'EVT_name'=>'monkey'...), 1=>array(...),...))
397
-     *                                      then the first row we'd write to the CSV would be "EVT_ID,EVT_name,..."
394
+     * @param resource $filehandle
398 395
      * @return boolean if we successfully wrote to the CSV or not. If there's no $data, we consider that a success
399 396
      *                 (because we wrote everything there was...nothing)
400 397
      */
@@ -491,7 +488,7 @@  discard block
 block discarded – undo
491 488
      *                                   next layer is numerically indexed to represent each model object (eg, each
492 489
      *                                   individual event), and the last layer has all the attributes o fthat model
493 490
      *                                   object (eg, the event's id, name, etc)
494
-     * @return boolean success
491
+     * @return boolean|null success
495 492
      */
496 493
     public function write_model_data_to_csv($filehandle, $model_data_array)
497 494
     {
@@ -522,8 +519,8 @@  discard block
 block discarded – undo
522 519
      * and dies (in order to avoid other plugins from messing up the csv output)
523 520
      *
524 521
      * @param string $filename         the filename you want to give the file
525
-     * @param array  $model_data_array 3d array, as described in EE_CSV::write_model_data_to_csv()
526
-     * @return bool | void writes CSV file to output and dies
522
+     * @param boolean  $model_data_array 3d array, as described in EE_CSV::write_model_data_to_csv()
523
+     * @return boolean|null | void writes CSV file to output and dies
527 524
      */
528 525
     public function export_multiple_model_data_to_csv($filename, $model_data_array)
529 526
     {
@@ -537,7 +534,7 @@  discard block
 block discarded – undo
537 534
      * @access public
538 535
      * @param array  $data     - the array of data to be converted to csv and exported
539 536
      * @param string $filename - name for newly created csv file
540
-     * @return TRUE on success, FALSE on fail
537
+     * @return false|null on success, FALSE on fail
541 538
      */
542 539
     public function export_array_to_csv($data = false, $filename = false)
543 540
     {
Please login to merge, or discard this patch.
Indentation   +669 added lines, -669 removed lines patch added patch discarded remove patch
@@ -16,673 +16,673 @@
 block discarded – undo
16 16
 class EE_CSV
17 17
 {
18 18
 
19
-    // instance of the EE_CSV object
20
-    private static $_instance = null;
21
-
22
-
23
-    // multidimensional array to store update & error messages
24
-    // var $_notices = array( 'updates' => array(), 'errors' => array() );
25
-
26
-
27
-    private $_primary_keys;
28
-
29
-    /**
30
-     *
31
-     * @var EE_Registry
32
-     */
33
-    private $EE;
34
-    /**
35
-     * string used for 1st cell in exports, which indicates that the following 2 rows will be metadata keys and values
36
-     */
37
-    const metadata_header = 'Event Espresso Export Meta Data';
38
-
39
-    /**
40
-     *        private constructor to prevent direct creation
41
-     *
42
-     * @Constructor
43
-     * @access private
44
-     * @return void
45
-     */
46
-    private function __construct()
47
-    {
48
-        global $wpdb;
49
-
50
-        $this->_primary_keys = array(
51
-            $wpdb->prefix . 'esp_answer'                  => array('ANS_ID'),
52
-            $wpdb->prefix . 'esp_attendee'                => array('ATT_ID'),
53
-            $wpdb->prefix . 'esp_datetime'                => array('DTT_ID'),
54
-            $wpdb->prefix . 'esp_event_question_group'    => array('EQG_ID'),
55
-            $wpdb->prefix . 'esp_message_template'        => array('MTP_ID'),
56
-            $wpdb->prefix . 'esp_payment'                 => array('PAY_ID'),
57
-            $wpdb->prefix . 'esp_price'                   => array('PRC_ID'),
58
-            $wpdb->prefix . 'esp_price_type'              => array('PRT_ID'),
59
-            $wpdb->prefix . 'esp_question'                => array('QST_ID'),
60
-            $wpdb->prefix . 'esp_question_group'          => array('QSG_ID'),
61
-            $wpdb->prefix . 'esp_question_group_question' => array('QGQ_ID'),
62
-            $wpdb->prefix . 'esp_question_option'         => array('QSO_ID'),
63
-            $wpdb->prefix . 'esp_registration'            => array('REG_ID'),
64
-            $wpdb->prefix . 'esp_status'                  => array('STS_ID'),
65
-            $wpdb->prefix . 'esp_transaction'             => array('TXN_ID'),
66
-            $wpdb->prefix . 'esp_transaction'             => array('TXN_ID'),
67
-            $wpdb->prefix . 'events_detail'               => array('id'),
68
-            $wpdb->prefix . 'events_category_detail'      => array('id'),
69
-            $wpdb->prefix . 'events_category_rel'         => array('id'),
70
-            $wpdb->prefix . 'events_venue'                => array('id'),
71
-            $wpdb->prefix . 'events_venue_rel'            => array('emeta_id'),
72
-            $wpdb->prefix . 'events_locale'               => array('id'),
73
-            $wpdb->prefix . 'events_locale_rel'           => array('id'),
74
-            $wpdb->prefix . 'events_personnel'            => array('id'),
75
-            $wpdb->prefix . 'events_personnel_rel'        => array('id'),
76
-        );
77
-    }
78
-
79
-
80
-    /**
81
-     *        @ singleton method used to instantiate class object
82
-     *        @ access public
83
-     *
84
-     * @return EE_CSV
85
-     */
86
-    public static function instance()
87
-    {
88
-        // check if class object is instantiated
89
-        if (self::$_instance === null or ! is_object(self::$_instance) or ! (self::$_instance instanceof EE_CSV)) {
90
-            self::$_instance = new self();
91
-        }
92
-        return self::$_instance;
93
-    }
94
-
95
-    /**
96
-     * Opens a unicode or utf file (normal file_get_contents has difficulty readin ga unicode file. @see
97
-     * http://stackoverflow.com/questions/15092764/how-to-read-unicode-text-file-in-php
98
-     *
99
-     * @param string $file_path
100
-     * @return string
101
-     * @throws EE_Error
102
-     */
103
-    private function read_unicode_file($file_path)
104
-    {
105
-        $fc = "";
106
-        $fh = fopen($file_path, "rb");
107
-        if (! $fh) {
108
-            throw new EE_Error(sprintf(__("Cannot open file for read: %s<br>\n", 'event_espresso'), $file_path));
109
-        }
110
-        $flen = filesize($file_path);
111
-        $bc = fread($fh, $flen);
112
-        for ($i = 0; $i < $flen; $i++) {
113
-            $c = substr($bc, $i, 1);
114
-            if ((ord($c) != 0) && (ord($c) != 13)) {
115
-                $fc = $fc . $c;
116
-            }
117
-        }
118
-        if ((ord(substr($fc, 0, 1)) == 255) && (ord(substr($fc, 1, 1)) == 254)) {
119
-            $fc = substr($fc, 2);
120
-        }
121
-        return ($fc);
122
-    }
123
-
124
-
125
-    /**
126
-     * Generic CSV-functionality to turn an entire CSV file into a single array that's
127
-     * NOT in a specific format to EE. It's just a 2-level array, with top-level arrays
128
-     * representing each row in the CSV file, and the second-level arrays being each column in that row
129
-     *
130
-     * @param string $path_to_file
131
-     * @return array of arrays. Top-level array has rows, second-level array has each item
132
-     */
133
-    public function import_csv_to_multi_dimensional_array($path_to_file)
134
-    {
135
-        // needed to deal with Mac line endings
136
-        ini_set('auto_detect_line_endings', true);
137
-
138
-        // because fgetcsv does not correctly deal with backslashed quotes such as \"
139
-        // we'll read the file into a string
140
-        $file_contents = $this->read_unicode_file($path_to_file);
141
-        // replace backslashed quotes with CSV enclosures
142
-        $file_contents = str_replace('\\"', '"""', $file_contents);
143
-        // HEY YOU! PUT THAT FILE BACK!!!
144
-        file_put_contents($path_to_file, $file_contents);
145
-
146
-        if (($file_handle = fopen($path_to_file, "r")) !== false) {
147
-            # Set the parent multidimensional array key to 0.
148
-            $nn = 0;
149
-            $csvarray = array();
150
-
151
-            // in PHP 5.3 fgetcsv accepts a 5th parameter, but the pre 5.3 versions of fgetcsv choke if passed more than 4 - is that crazy or what?
152
-            if (version_compare(PHP_VERSION, '5.3.0') < 0) {
153
-                //  PHP 5.2- version
154
-                // loop through each row of the file
155
-                while (($data = fgetcsv($file_handle, 0, ',', '"')) !== false) {
156
-                    $csvarray[] = $data;
157
-                }
158
-            } else {
159
-                // loop through each row of the file
160
-                while (($data = fgetcsv($file_handle, 0, ',', '"', '\\')) !== false) {
161
-                    $csvarray[] = $data;
162
-                }
163
-            }
164
-            # Close the File.
165
-            fclose($file_handle);
166
-            return $csvarray;
167
-        } else {
168
-            EE_Error::add_error(
169
-                sprintf(__("An error occurred - the file: %s could not opened.", "event_espresso"), $path_to_file),
170
-                __FILE__,
171
-                __FUNCTION__,
172
-                __LINE__
173
-            );
174
-            return false;
175
-        }
176
-    }
177
-
178
-
179
-    /**
180
-     * @Import contents of csv file and store values in an array to be manipulated by other functions
181
-     * @access public
182
-     * @param string  $path_to_file         - the csv file to be imported including the path to it's location.
183
-     *                                      If $model_name is provided, assumes that each row in the CSV represents a
184
-     *                                      model object for that model If $model_name ISN'T provided, assumes that
185
-     *                                      before model object data, there is a row where the first entry is simply
186
-     *                                      'MODEL', and next entry is the model's name, (untranslated) like Event, and
187
-     *                                      then maybe a row of headers, and then the model data. Eg.
188
-     *                                      '<br>MODEL,Event,<br>EVT_ID,EVT_name,...<br>1,Monkey
189
-     *                                      Party,...<br>2,Llamarama,...<br>MODEL,Venue,<br>VNU_ID,VNU_name<br>1,The
190
-     *                                      Forest
191
-     * @param string  $model_name           model name if we know what model we're importing
192
-     * @param boolean $first_row_is_headers - whether the first row of data is headers or not - TRUE = headers, FALSE =
193
-     *                                      data
194
-     * @return mixed - array on success - multi dimensional with headers as keys (if headers exist) OR string on fail -
195
-     *               error message like the following array('Event'=>array( array('EVT_ID'=>1,'EVT_name'=>'bob
196
-     *               party',...), array('EVT_ID'=>2,'EVT_name'=>'llamarama',...),
197
-     *                                      ...
198
-     *                                      )
199
-     *                                      'Venue'=>array(
200
-     *                                      array('VNU_ID'=>1,'VNU_name'=>'the shack',...),
201
-     *                                      array('VNU_ID'=>2,'VNU_name'=>'tree house',...),
202
-     *                                      ...
203
-     *                                      )
204
-     *                                      ...
205
-     *                                      )
206
-     */
207
-    public function import_csv_to_model_data_array($path_to_file, $model_name = false, $first_row_is_headers = true)
208
-    {
209
-        $multi_dimensional_array = $this->import_csv_to_multi_dimensional_array($path_to_file);
210
-        if (! $multi_dimensional_array) {
211
-            return false;
212
-        }
213
-        // gotta start somewhere
214
-        $row = 1;
215
-        // array to store csv data in
216
-        $ee_formatted_data = array();
217
-        // array to store headers (column names)
218
-        $headers = array();
219
-        foreach ($multi_dimensional_array as $data) {
220
-            // if first cell is MODEL, then second cell is the MODEL name
221
-            if ($data[0] == 'MODEL') {
222
-                $model_name = $data[1];
223
-                // don't bother looking for model data in this row. The rest of this
224
-                // row should be blank
225
-                // AND pretend this is the first row again
226
-                $row = 1;
227
-                // reset headers
228
-                $headers = array();
229
-                continue;
230
-            }
231
-            if (strpos($data[0], EE_CSV::metadata_header) !== false) {
232
-                $model_name = EE_CSV::metadata_header;
233
-                // store like model data, we just won't try importing it etc.
234
-                $row = 1;
235
-                continue;
236
-            }
237
-
238
-
239
-            // how many columns are there?
240
-            $columns = count($data);
241
-
242
-            $model_entry = array();
243
-            // loop through each column
244
-            for ($i = 0; $i < $columns; $i++) {
245
-                // replace csv_enclosures with backslashed quotes
246
-                $data[ $i ] = str_replace('"""', '\\"', $data[ $i ]);
247
-                // do we need to grab the column names?
248
-                if ($row === 1) {
249
-                    if ($first_row_is_headers) {
250
-                        // store the column names to use for keys
251
-                        $column_name = $data[ $i ];
252
-                        // check it's not blank... sometimes CSV editign programs adda bunch of empty columns onto the end...
253
-                        if (! $column_name) {
254
-                            continue;
255
-                        }
256
-                        $matches = array();
257
-                        if ($model_name == EE_CSV::metadata_header) {
258
-                            $headers[ $i ] = $column_name;
259
-                        } else {
260
-                            // now get the db table name from it (the part between square brackets)
261
-                            $success = preg_match('~(.*)\[(.*)\]~', $column_name, $matches);
262
-                            if (! $success) {
263
-                                EE_Error::add_error(
264
-                                    sprintf(
265
-                                        __(
266
-                                            "The column titled %s is invalid for importing. It must be be in the format of 'Nice Name[model_field_name]' in row %s",
267
-                                            "event_espresso"
268
-                                        ),
269
-                                        $column_name,
270
-                                        implode(",", $data)
271
-                                    ),
272
-                                    __FILE__,
273
-                                    __FUNCTION__,
274
-                                    __LINE__
275
-                                );
276
-                                return false;
277
-                            }
278
-                            $headers[ $i ] = $matches[2];
279
-                        }
280
-                    } else {
281
-                        // no column names means our final array will just use counters for keys
282
-                        $model_entry[ $headers[ $i ] ] = $data[ $i ];
283
-                        $headers[ $i ] = $i;
284
-                    }
285
-                    // and we need to store csv data
286
-                } else {
287
-                    // this column isn' ta header, store it if there is a header for it
288
-                    if (isset($headers[ $i ])) {
289
-                        $model_entry[ $headers[ $i ] ] = $data[ $i ];
290
-                    }
291
-                }
292
-            }
293
-            // save the row's data IF it's a non-header-row
294
-            if (! $first_row_is_headers || ($first_row_is_headers && $row > 1)) {
295
-                $ee_formatted_data[ $model_name ][] = $model_entry;
296
-            }
297
-            // advance to next row
298
-            $row++;
299
-        }
300
-
301
-        // delete the uploaded file
302
-        unlink($path_to_file);
303
-        // echo '<pre style="height:auto;border:2px solid lightblue;">' . print_r( $ee_formatted_data, TRUE ) . '</pre><br /><span style="font-size:10px;font-weight:normal;">' . __FILE__ . '<br />line no: ' . __LINE__ . '</span>';
304
-        // die();
305
-
306
-        // it's good to give back
307
-        return $ee_formatted_data;
308
-    }
309
-
310
-
311
-    public function save_csv_to_db($csv_data_array, $model_name = false)
312
-    {
313
-        EE_Error::doing_it_wrong(
314
-            'save_csv_to_db',
315
-            __(
316
-                'Function moved to EE_Import and renamed to save_csv_data_array_to_db',
317
-                'event_espresso'
318
-            ),
319
-            '4.6.7'
320
-        );
321
-        return EE_Import::instance()->save_csv_data_array_to_db($csv_data_array, $model_name);
322
-    }
323
-
324
-    /**
325
-     * Sends HTTP headers to indicate that the browser should download a file,
326
-     * and starts writing the file to PHP's output. Returns the file handle so other functions can
327
-     * also write to it
328
-     *
329
-     * @param string $new_filename the name of the file that the user will download
330
-     * @return resource, like the results of fopen(), which can be used for fwrite, fputcsv2, etc.
331
-     */
332
-    public function begin_sending_csv($filename)
333
-    {
334
-        // grab file extension
335
-        $ext = substr(strrchr($filename, '.'), 1);
336
-        if ($ext == '.csv' or $ext == '.xls') {
337
-            str_replace($ext, '', $filename);
338
-        }
339
-        $filename .= '.csv';
340
-
341
-        // if somebody's been naughty and already started outputting stuff, trash it
342
-        // and start writing our stuff.
343
-        if (ob_get_length()) {
344
-            @ob_flush();
345
-            @flush();
346
-            @ob_end_flush();
347
-        }
348
-        @ob_start();
349
-        header("Pragma: public");
350
-        header("Expires: 0");
351
-        header("Pragma: no-cache");
352
-        header("Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0");
353
-        // header("Content-Type: application/force-download");
354
-        // header("Content-Type: application/octet-stream");
355
-        // header("Content-Type: application/download");
356
-        header('Content-disposition: attachment; filename=' . $filename);
357
-        header("Content-Type: text/csv; charset=utf-8");
358
-        do_action('AHEE__EE_CSV__begin_sending_csv__headers');
359
-        echo apply_filters(
360
-            'FHEE__EE_CSV__begin_sending_csv__start_writing',
361
-            "\xEF\xBB\xBF"
362
-        ); // makes excel open it as UTF-8. UTF-8 BOM, see http://stackoverflow.com/a/4440143/2773835
363
-        $fh = fopen('php://output', 'w');
364
-        return $fh;
365
-    }
366
-
367
-    /**
368
-     * Writes some meta data to the CSV as a bunch of columns. Initially we're only
369
-     * mentioning the version and timezone
370
-     *
371
-     * @param resource $filehandle
372
-     */
373
-    public function write_metadata_to_csv($filehandle)
374
-    {
375
-        $data_row = array(EE_CSV::metadata_header);// do NOT translate because this exact string is used when importing
376
-        $this->fputcsv2($filehandle, $data_row);
377
-        $meta_data = array(
378
-            0 => array(
379
-                'version'        => espresso_version(),
380
-                'timezone'       => EEH_DTT_Helper::get_timezone(),
381
-                'time_of_export' => current_time('mysql'),
382
-                'site_url'       => site_url(),
383
-            ),
384
-        );
385
-        $this->write_data_array_to_csv($filehandle, $meta_data);
386
-    }
387
-
388
-
389
-    /**
390
-     * Writes $data to the csv file open in $filehandle. uses the array indices of $data for column headers
391
-     *
392
-     * @param array   $data                 2D array, first numerically-indexed, and next-level-down preferably indexed
393
-     *                                      by string
394
-     * @param boolean $add_csv_column_names whether or not we should add the keys in the bottom-most array as a row for
395
-     *                                      headers in the CSV. Eg, if $data looked like
396
-     *                                      array(0=>array('EVT_ID'=>1,'EVT_name'=>'monkey'...), 1=>array(...),...))
397
-     *                                      then the first row we'd write to the CSV would be "EVT_ID,EVT_name,..."
398
-     * @return boolean if we successfully wrote to the CSV or not. If there's no $data, we consider that a success
399
-     *                 (because we wrote everything there was...nothing)
400
-     */
401
-    public function write_data_array_to_csv($filehandle, $data)
402
-    {
403
-
404
-
405
-        // determine if $data is actually a 2d array
406
-        if ($data && is_array($data) && is_array(EEH_Array::get_one_item_from_array($data))) {
407
-            // make sure top level is numerically indexed,
408
-
409
-            if (EEH_Array::is_associative_array($data)) {
410
-                throw new EE_Error(
411
-                    sprintf(
412
-                        __(
413
-                            "top-level array must be numerically indexed. Does these look like numbers to you? %s",
414
-                            "event_espresso"
415
-                        ),
416
-                        implode(",", array_keys($data))
417
-                    )
418
-                );
419
-            }
420
-            $item_in_top_level_array = EEH_Array::get_one_item_from_array($data);
421
-            // now, is the last item in the top-level array of $data an associative or numeric array?
422
-            if (EEH_Array::is_associative_array($item_in_top_level_array)) {
423
-                // its associative, so we want to output its keys as column headers
424
-                $keys = array_keys($item_in_top_level_array);
425
-                echo $this->fputcsv2($filehandle, $keys);
426
-            }
427
-            // start writing data
428
-            foreach ($data as $data_row) {
429
-                echo $this->fputcsv2($filehandle, $data_row);
430
-            }
431
-            return true;
432
-        } else {
433
-            // no data TO write... so we can assume that's a success
434
-            return true;
435
-        }
436
-        // //if 2nd level is indexed by strings, use those as csv column headers (ie, the first row)
437
-        //
438
-        //
439
-        // $no_table = TRUE;
440
-        //
441
-        // // loop through data and add each row to the file/stream as csv
442
-        // foreach ( $data as $model_name => $model_data ) {
443
-        // // test first row to see if it is data or a model name
444
-        // $model = EE_Registry::instance();->load_model($model_name);
445
-        // //if the model really exists,
446
-        // if ( $model ) {
447
-        //
448
-        // // we have a table name
449
-        // $no_table = FALSE;
450
-        //
451
-        // // put the tablename into an array cuz that's how fputcsv rolls
452
-        // $model_name_row = array( 'MODEL', $model_name );
453
-        //
454
-        // // add table name to csv output
455
-        // echo self::fputcsv2($filehandle, $model_name_row);
456
-        //
457
-        // // now get the rest of the data
458
-        // foreach ( $model_data as $row ) {
459
-        // // output the row
460
-        // echo self::fputcsv2($filehandle, $row);
461
-        // }
462
-        //
463
-        // }
464
-        //
465
-        // if ( $no_table ) {
466
-        // // no table so just put the data
467
-        // echo self::fputcsv2($filehandle, $model_data);
468
-        // }
469
-        //
470
-        // } // END OF foreach ( $data )
471
-    }
472
-
473
-    /**
474
-     * Should be called after begin_sending_csv(), and one or more write_data_array_to_csv()s.
475
-     * Calls exit to prevent polluting the CSV file with other junk
476
-     *
477
-     * @param resource $fh filehandle where we're writing the CSV to
478
-     */
479
-    public function end_sending_csv($fh)
480
-    {
481
-        fclose($fh);
482
-        exit(0);
483
-    }
484
-
485
-    /**
486
-     * Given an open file, writes all the model data to it in the format the importer expects.
487
-     * Usually preceded by begin_sending_csv($filename), and followed by end_sending_csv($filehandle).
488
-     *
489
-     * @param resource $filehandle
490
-     * @param array    $model_data_array is assumed to be a 3d array: 1st layer has keys of model names (eg 'Event'),
491
-     *                                   next layer is numerically indexed to represent each model object (eg, each
492
-     *                                   individual event), and the last layer has all the attributes o fthat model
493
-     *                                   object (eg, the event's id, name, etc)
494
-     * @return boolean success
495
-     */
496
-    public function write_model_data_to_csv($filehandle, $model_data_array)
497
-    {
498
-        $this->write_metadata_to_csv($filehandle);
499
-        foreach ($model_data_array as $model_name => $model_instance_arrays) {
500
-            // first: output a special row stating the model
501
-            echo $this->fputcsv2($filehandle, array('MODEL', $model_name));
502
-            // if we have items to put in the CSV, do it normally
503
-
504
-            if (! empty($model_instance_arrays)) {
505
-                $this->write_data_array_to_csv($filehandle, $model_instance_arrays);
506
-            } else {
507
-                // echo "no data to write... so just write the headers";
508
-                // so there's actually NO model objects for that model.
509
-                // probably still want to show the columns
510
-                $model = EE_Registry::instance()->load_model($model_name);
511
-                $column_names = array();
512
-                foreach ($model->field_settings() as $field) {
513
-                    $column_names[ $field->get_nicename() . "[" . $field->get_name() . "]" ] = null;
514
-                }
515
-                $this->write_data_array_to_csv($filehandle, array($column_names));
516
-            }
517
-        }
518
-    }
519
-
520
-    /**
521
-     * Writes the CSV file to the output buffer, with rows corresponding to $model_data_array,
522
-     * and dies (in order to avoid other plugins from messing up the csv output)
523
-     *
524
-     * @param string $filename         the filename you want to give the file
525
-     * @param array  $model_data_array 3d array, as described in EE_CSV::write_model_data_to_csv()
526
-     * @return bool | void writes CSV file to output and dies
527
-     */
528
-    public function export_multiple_model_data_to_csv($filename, $model_data_array)
529
-    {
530
-        $filehandle = $this->begin_sending_csv($filename);
531
-        $this->write_model_data_to_csv($filehandle, $model_data_array);
532
-        $this->end_sending_csv($filehandle);
533
-    }
534
-
535
-    /**
536
-     * @Export contents of an array to csv file
537
-     * @access public
538
-     * @param array  $data     - the array of data to be converted to csv and exported
539
-     * @param string $filename - name for newly created csv file
540
-     * @return TRUE on success, FALSE on fail
541
-     */
542
-    public function export_array_to_csv($data = false, $filename = false)
543
-    {
544
-
545
-        // no data file?? get outta here
546
-        if (! $data or ! is_array($data) or empty($data)) {
547
-            return false;
548
-        }
549
-
550
-        // no filename?? get outta here
551
-        if (! $filename) {
552
-            return false;
553
-        }
554
-
555
-
556
-        // somebody told me i might need this ???
557
-        global $wpdb;
558
-        $prefix = $wpdb->prefix;
559
-
560
-
561
-        $fh = $this->begin_sending_csv($filename);
562
-
563
-
564
-        $this->end_sending_csv($fh);
565
-    }
566
-
567
-
568
-    /**
569
-     * @Determine the maximum upload file size based on php.ini settings
570
-     * @access    public
571
-     * @param int $percent_of_max - desired percentage of the max upload_mb
572
-     * @return int KB
573
-     */
574
-    public function get_max_upload_size($percent_of_max = false)
575
-    {
576
-
577
-        $max_upload = (int) (ini_get('upload_max_filesize'));
578
-        $max_post = (int) (ini_get('post_max_size'));
579
-        $memory_limit = (int) (ini_get('memory_limit'));
580
-
581
-        // determine the smallest of the three values from above
582
-        $upload_mb = min($max_upload, $max_post, $memory_limit);
583
-
584
-        // convert MB to KB
585
-        $upload_mb = $upload_mb * 1024;
586
-
587
-        // don't want the full monty? then reduce the max uplaod size
588
-        if ($percent_of_max) {
589
-            // is percent_of_max like this -> 50 or like this -> 0.50 ?
590
-            if ($percent_of_max > 1) {
591
-                // chnages 50 to 0.50
592
-                $percent_of_max = $percent_of_max / 100;
593
-            }
594
-            // make upload_mb a percentage of the max upload_mb
595
-            $upload_mb = $upload_mb * $percent_of_max;
596
-        }
597
-
598
-        return $upload_mb;
599
-    }
600
-
601
-
602
-    /**
603
-     * @Drop   in replacement for PHP's fputcsv function - but this one works!!!
604
-     * @access private
605
-     * @param resource $fh         - file handle - what we are writing to
606
-     * @param array    $row        - individual row of csv data
607
-     * @param string   $delimiter  - csv delimiter
608
-     * @param string   $enclosure  - csv enclosure
609
-     * @param string   $mysql_null - allows php NULL to be overridden with MySQl's insertable NULL value
610
-     * @return void
611
-     */
612
-    private function fputcsv2($fh, array $row, $delimiter = ',', $enclosure = '"', $mysql_null = false)
613
-    {
614
-        // Allow user to filter the csv delimiter and enclosure for other countries csv standards
615
-        $delimiter = apply_filters('FHEE__EE_CSV__fputcsv2__delimiter', $delimiter);
616
-        $enclosure = apply_filters('FHEE__EE_CSV__fputcsv2__enclosure', $enclosure);
617
-
618
-        $delimiter_esc = preg_quote($delimiter, '/');
619
-        $enclosure_esc = preg_quote($enclosure, '/');
620
-
621
-        $output = array();
622
-        foreach ($row as $field_value) {
623
-            if (is_object($field_value) || is_array($field_value)) {
624
-                $field_value = serialize($field_value);
625
-            }
626
-            if ($field_value === null && $mysql_null) {
627
-                $output[] = 'NULL';
628
-                continue;
629
-            }
630
-
631
-            $output[] = preg_match("/(?:${delimiter_esc}|${enclosure_esc}|\s)/", $field_value) ?
632
-                ($enclosure . str_replace($enclosure, $enclosure . $enclosure, $field_value) . $enclosure)
633
-                : $field_value;
634
-        }
635
-
636
-        fwrite($fh, join($delimiter, $output) . PHP_EOL);
637
-    }
638
-
639
-
640
-    // /**
641
-    //  * @CSV    Import / Export messages
642
-    //  * @access public
643
-    //  * @return void
644
-    //  */
645
-    // public function csv_admin_notices()
646
-    // {
647
-    //
648
-    //     // We play both kinds of music here! Country AND Western! - err... I mean, cycle through both types of notices
649
-    //     foreach (array('updates', 'errors') as $type) {
650
-    //
651
-    //         // if particular notice type is not empty, then "You've got Mail"
652
-    //         if (! empty($this->_notices[ $type ])) {
653
-    //
654
-    //             // is it an update or an error ?
655
-    //             $msg_class = $type == 'updates' ? 'updated' : 'error';
656
-    //             echo '<div id="message" class="' . $msg_class . '">';
657
-    //             // display each notice, however many that may be
658
-    //             foreach ($this->_notices[ $type ] as $message) {
659
-    //                 echo '<p>' . $message . '</p>';
660
-    //             }
661
-    //             // wrap it up
662
-    //             echo '</div>';
663
-    //         }
664
-    //     }
665
-    // }
666
-
667
-    /**
668
-     * Gets the date format to use in teh csv. filterable
669
-     *
670
-     * @param string $current_format
671
-     * @return string
672
-     */
673
-    public function get_date_format_for_csv($current_format = null)
674
-    {
675
-        return apply_filters('FHEE__EE_CSV__get_date_format_for_csv__format', 'Y-m-d', $current_format);
676
-    }
677
-
678
-    /**
679
-     * Gets the time format we want to use in CSV reports. Filterable
680
-     *
681
-     * @param string $current_format
682
-     * @return string
683
-     */
684
-    public function get_time_format_for_csv($current_format = null)
685
-    {
686
-        return apply_filters('FHEE__EE_CSV__get_time_format_for_csv__format', 'H:i:s', $current_format);
687
-    }
19
+	// instance of the EE_CSV object
20
+	private static $_instance = null;
21
+
22
+
23
+	// multidimensional array to store update & error messages
24
+	// var $_notices = array( 'updates' => array(), 'errors' => array() );
25
+
26
+
27
+	private $_primary_keys;
28
+
29
+	/**
30
+	 *
31
+	 * @var EE_Registry
32
+	 */
33
+	private $EE;
34
+	/**
35
+	 * string used for 1st cell in exports, which indicates that the following 2 rows will be metadata keys and values
36
+	 */
37
+	const metadata_header = 'Event Espresso Export Meta Data';
38
+
39
+	/**
40
+	 *        private constructor to prevent direct creation
41
+	 *
42
+	 * @Constructor
43
+	 * @access private
44
+	 * @return void
45
+	 */
46
+	private function __construct()
47
+	{
48
+		global $wpdb;
49
+
50
+		$this->_primary_keys = array(
51
+			$wpdb->prefix . 'esp_answer'                  => array('ANS_ID'),
52
+			$wpdb->prefix . 'esp_attendee'                => array('ATT_ID'),
53
+			$wpdb->prefix . 'esp_datetime'                => array('DTT_ID'),
54
+			$wpdb->prefix . 'esp_event_question_group'    => array('EQG_ID'),
55
+			$wpdb->prefix . 'esp_message_template'        => array('MTP_ID'),
56
+			$wpdb->prefix . 'esp_payment'                 => array('PAY_ID'),
57
+			$wpdb->prefix . 'esp_price'                   => array('PRC_ID'),
58
+			$wpdb->prefix . 'esp_price_type'              => array('PRT_ID'),
59
+			$wpdb->prefix . 'esp_question'                => array('QST_ID'),
60
+			$wpdb->prefix . 'esp_question_group'          => array('QSG_ID'),
61
+			$wpdb->prefix . 'esp_question_group_question' => array('QGQ_ID'),
62
+			$wpdb->prefix . 'esp_question_option'         => array('QSO_ID'),
63
+			$wpdb->prefix . 'esp_registration'            => array('REG_ID'),
64
+			$wpdb->prefix . 'esp_status'                  => array('STS_ID'),
65
+			$wpdb->prefix . 'esp_transaction'             => array('TXN_ID'),
66
+			$wpdb->prefix . 'esp_transaction'             => array('TXN_ID'),
67
+			$wpdb->prefix . 'events_detail'               => array('id'),
68
+			$wpdb->prefix . 'events_category_detail'      => array('id'),
69
+			$wpdb->prefix . 'events_category_rel'         => array('id'),
70
+			$wpdb->prefix . 'events_venue'                => array('id'),
71
+			$wpdb->prefix . 'events_venue_rel'            => array('emeta_id'),
72
+			$wpdb->prefix . 'events_locale'               => array('id'),
73
+			$wpdb->prefix . 'events_locale_rel'           => array('id'),
74
+			$wpdb->prefix . 'events_personnel'            => array('id'),
75
+			$wpdb->prefix . 'events_personnel_rel'        => array('id'),
76
+		);
77
+	}
78
+
79
+
80
+	/**
81
+	 *        @ singleton method used to instantiate class object
82
+	 *        @ access public
83
+	 *
84
+	 * @return EE_CSV
85
+	 */
86
+	public static function instance()
87
+	{
88
+		// check if class object is instantiated
89
+		if (self::$_instance === null or ! is_object(self::$_instance) or ! (self::$_instance instanceof EE_CSV)) {
90
+			self::$_instance = new self();
91
+		}
92
+		return self::$_instance;
93
+	}
94
+
95
+	/**
96
+	 * Opens a unicode or utf file (normal file_get_contents has difficulty readin ga unicode file. @see
97
+	 * http://stackoverflow.com/questions/15092764/how-to-read-unicode-text-file-in-php
98
+	 *
99
+	 * @param string $file_path
100
+	 * @return string
101
+	 * @throws EE_Error
102
+	 */
103
+	private function read_unicode_file($file_path)
104
+	{
105
+		$fc = "";
106
+		$fh = fopen($file_path, "rb");
107
+		if (! $fh) {
108
+			throw new EE_Error(sprintf(__("Cannot open file for read: %s<br>\n", 'event_espresso'), $file_path));
109
+		}
110
+		$flen = filesize($file_path);
111
+		$bc = fread($fh, $flen);
112
+		for ($i = 0; $i < $flen; $i++) {
113
+			$c = substr($bc, $i, 1);
114
+			if ((ord($c) != 0) && (ord($c) != 13)) {
115
+				$fc = $fc . $c;
116
+			}
117
+		}
118
+		if ((ord(substr($fc, 0, 1)) == 255) && (ord(substr($fc, 1, 1)) == 254)) {
119
+			$fc = substr($fc, 2);
120
+		}
121
+		return ($fc);
122
+	}
123
+
124
+
125
+	/**
126
+	 * Generic CSV-functionality to turn an entire CSV file into a single array that's
127
+	 * NOT in a specific format to EE. It's just a 2-level array, with top-level arrays
128
+	 * representing each row in the CSV file, and the second-level arrays being each column in that row
129
+	 *
130
+	 * @param string $path_to_file
131
+	 * @return array of arrays. Top-level array has rows, second-level array has each item
132
+	 */
133
+	public function import_csv_to_multi_dimensional_array($path_to_file)
134
+	{
135
+		// needed to deal with Mac line endings
136
+		ini_set('auto_detect_line_endings', true);
137
+
138
+		// because fgetcsv does not correctly deal with backslashed quotes such as \"
139
+		// we'll read the file into a string
140
+		$file_contents = $this->read_unicode_file($path_to_file);
141
+		// replace backslashed quotes with CSV enclosures
142
+		$file_contents = str_replace('\\"', '"""', $file_contents);
143
+		// HEY YOU! PUT THAT FILE BACK!!!
144
+		file_put_contents($path_to_file, $file_contents);
145
+
146
+		if (($file_handle = fopen($path_to_file, "r")) !== false) {
147
+			# Set the parent multidimensional array key to 0.
148
+			$nn = 0;
149
+			$csvarray = array();
150
+
151
+			// in PHP 5.3 fgetcsv accepts a 5th parameter, but the pre 5.3 versions of fgetcsv choke if passed more than 4 - is that crazy or what?
152
+			if (version_compare(PHP_VERSION, '5.3.0') < 0) {
153
+				//  PHP 5.2- version
154
+				// loop through each row of the file
155
+				while (($data = fgetcsv($file_handle, 0, ',', '"')) !== false) {
156
+					$csvarray[] = $data;
157
+				}
158
+			} else {
159
+				// loop through each row of the file
160
+				while (($data = fgetcsv($file_handle, 0, ',', '"', '\\')) !== false) {
161
+					$csvarray[] = $data;
162
+				}
163
+			}
164
+			# Close the File.
165
+			fclose($file_handle);
166
+			return $csvarray;
167
+		} else {
168
+			EE_Error::add_error(
169
+				sprintf(__("An error occurred - the file: %s could not opened.", "event_espresso"), $path_to_file),
170
+				__FILE__,
171
+				__FUNCTION__,
172
+				__LINE__
173
+			);
174
+			return false;
175
+		}
176
+	}
177
+
178
+
179
+	/**
180
+	 * @Import contents of csv file and store values in an array to be manipulated by other functions
181
+	 * @access public
182
+	 * @param string  $path_to_file         - the csv file to be imported including the path to it's location.
183
+	 *                                      If $model_name is provided, assumes that each row in the CSV represents a
184
+	 *                                      model object for that model If $model_name ISN'T provided, assumes that
185
+	 *                                      before model object data, there is a row where the first entry is simply
186
+	 *                                      'MODEL', and next entry is the model's name, (untranslated) like Event, and
187
+	 *                                      then maybe a row of headers, and then the model data. Eg.
188
+	 *                                      '<br>MODEL,Event,<br>EVT_ID,EVT_name,...<br>1,Monkey
189
+	 *                                      Party,...<br>2,Llamarama,...<br>MODEL,Venue,<br>VNU_ID,VNU_name<br>1,The
190
+	 *                                      Forest
191
+	 * @param string  $model_name           model name if we know what model we're importing
192
+	 * @param boolean $first_row_is_headers - whether the first row of data is headers or not - TRUE = headers, FALSE =
193
+	 *                                      data
194
+	 * @return mixed - array on success - multi dimensional with headers as keys (if headers exist) OR string on fail -
195
+	 *               error message like the following array('Event'=>array( array('EVT_ID'=>1,'EVT_name'=>'bob
196
+	 *               party',...), array('EVT_ID'=>2,'EVT_name'=>'llamarama',...),
197
+	 *                                      ...
198
+	 *                                      )
199
+	 *                                      'Venue'=>array(
200
+	 *                                      array('VNU_ID'=>1,'VNU_name'=>'the shack',...),
201
+	 *                                      array('VNU_ID'=>2,'VNU_name'=>'tree house',...),
202
+	 *                                      ...
203
+	 *                                      )
204
+	 *                                      ...
205
+	 *                                      )
206
+	 */
207
+	public function import_csv_to_model_data_array($path_to_file, $model_name = false, $first_row_is_headers = true)
208
+	{
209
+		$multi_dimensional_array = $this->import_csv_to_multi_dimensional_array($path_to_file);
210
+		if (! $multi_dimensional_array) {
211
+			return false;
212
+		}
213
+		// gotta start somewhere
214
+		$row = 1;
215
+		// array to store csv data in
216
+		$ee_formatted_data = array();
217
+		// array to store headers (column names)
218
+		$headers = array();
219
+		foreach ($multi_dimensional_array as $data) {
220
+			// if first cell is MODEL, then second cell is the MODEL name
221
+			if ($data[0] == 'MODEL') {
222
+				$model_name = $data[1];
223
+				// don't bother looking for model data in this row. The rest of this
224
+				// row should be blank
225
+				// AND pretend this is the first row again
226
+				$row = 1;
227
+				// reset headers
228
+				$headers = array();
229
+				continue;
230
+			}
231
+			if (strpos($data[0], EE_CSV::metadata_header) !== false) {
232
+				$model_name = EE_CSV::metadata_header;
233
+				// store like model data, we just won't try importing it etc.
234
+				$row = 1;
235
+				continue;
236
+			}
237
+
238
+
239
+			// how many columns are there?
240
+			$columns = count($data);
241
+
242
+			$model_entry = array();
243
+			// loop through each column
244
+			for ($i = 0; $i < $columns; $i++) {
245
+				// replace csv_enclosures with backslashed quotes
246
+				$data[ $i ] = str_replace('"""', '\\"', $data[ $i ]);
247
+				// do we need to grab the column names?
248
+				if ($row === 1) {
249
+					if ($first_row_is_headers) {
250
+						// store the column names to use for keys
251
+						$column_name = $data[ $i ];
252
+						// check it's not blank... sometimes CSV editign programs adda bunch of empty columns onto the end...
253
+						if (! $column_name) {
254
+							continue;
255
+						}
256
+						$matches = array();
257
+						if ($model_name == EE_CSV::metadata_header) {
258
+							$headers[ $i ] = $column_name;
259
+						} else {
260
+							// now get the db table name from it (the part between square brackets)
261
+							$success = preg_match('~(.*)\[(.*)\]~', $column_name, $matches);
262
+							if (! $success) {
263
+								EE_Error::add_error(
264
+									sprintf(
265
+										__(
266
+											"The column titled %s is invalid for importing. It must be be in the format of 'Nice Name[model_field_name]' in row %s",
267
+											"event_espresso"
268
+										),
269
+										$column_name,
270
+										implode(",", $data)
271
+									),
272
+									__FILE__,
273
+									__FUNCTION__,
274
+									__LINE__
275
+								);
276
+								return false;
277
+							}
278
+							$headers[ $i ] = $matches[2];
279
+						}
280
+					} else {
281
+						// no column names means our final array will just use counters for keys
282
+						$model_entry[ $headers[ $i ] ] = $data[ $i ];
283
+						$headers[ $i ] = $i;
284
+					}
285
+					// and we need to store csv data
286
+				} else {
287
+					// this column isn' ta header, store it if there is a header for it
288
+					if (isset($headers[ $i ])) {
289
+						$model_entry[ $headers[ $i ] ] = $data[ $i ];
290
+					}
291
+				}
292
+			}
293
+			// save the row's data IF it's a non-header-row
294
+			if (! $first_row_is_headers || ($first_row_is_headers && $row > 1)) {
295
+				$ee_formatted_data[ $model_name ][] = $model_entry;
296
+			}
297
+			// advance to next row
298
+			$row++;
299
+		}
300
+
301
+		// delete the uploaded file
302
+		unlink($path_to_file);
303
+		// echo '<pre style="height:auto;border:2px solid lightblue;">' . print_r( $ee_formatted_data, TRUE ) . '</pre><br /><span style="font-size:10px;font-weight:normal;">' . __FILE__ . '<br />line no: ' . __LINE__ . '</span>';
304
+		// die();
305
+
306
+		// it's good to give back
307
+		return $ee_formatted_data;
308
+	}
309
+
310
+
311
+	public function save_csv_to_db($csv_data_array, $model_name = false)
312
+	{
313
+		EE_Error::doing_it_wrong(
314
+			'save_csv_to_db',
315
+			__(
316
+				'Function moved to EE_Import and renamed to save_csv_data_array_to_db',
317
+				'event_espresso'
318
+			),
319
+			'4.6.7'
320
+		);
321
+		return EE_Import::instance()->save_csv_data_array_to_db($csv_data_array, $model_name);
322
+	}
323
+
324
+	/**
325
+	 * Sends HTTP headers to indicate that the browser should download a file,
326
+	 * and starts writing the file to PHP's output. Returns the file handle so other functions can
327
+	 * also write to it
328
+	 *
329
+	 * @param string $new_filename the name of the file that the user will download
330
+	 * @return resource, like the results of fopen(), which can be used for fwrite, fputcsv2, etc.
331
+	 */
332
+	public function begin_sending_csv($filename)
333
+	{
334
+		// grab file extension
335
+		$ext = substr(strrchr($filename, '.'), 1);
336
+		if ($ext == '.csv' or $ext == '.xls') {
337
+			str_replace($ext, '', $filename);
338
+		}
339
+		$filename .= '.csv';
340
+
341
+		// if somebody's been naughty and already started outputting stuff, trash it
342
+		// and start writing our stuff.
343
+		if (ob_get_length()) {
344
+			@ob_flush();
345
+			@flush();
346
+			@ob_end_flush();
347
+		}
348
+		@ob_start();
349
+		header("Pragma: public");
350
+		header("Expires: 0");
351
+		header("Pragma: no-cache");
352
+		header("Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0");
353
+		// header("Content-Type: application/force-download");
354
+		// header("Content-Type: application/octet-stream");
355
+		// header("Content-Type: application/download");
356
+		header('Content-disposition: attachment; filename=' . $filename);
357
+		header("Content-Type: text/csv; charset=utf-8");
358
+		do_action('AHEE__EE_CSV__begin_sending_csv__headers');
359
+		echo apply_filters(
360
+			'FHEE__EE_CSV__begin_sending_csv__start_writing',
361
+			"\xEF\xBB\xBF"
362
+		); // makes excel open it as UTF-8. UTF-8 BOM, see http://stackoverflow.com/a/4440143/2773835
363
+		$fh = fopen('php://output', 'w');
364
+		return $fh;
365
+	}
366
+
367
+	/**
368
+	 * Writes some meta data to the CSV as a bunch of columns. Initially we're only
369
+	 * mentioning the version and timezone
370
+	 *
371
+	 * @param resource $filehandle
372
+	 */
373
+	public function write_metadata_to_csv($filehandle)
374
+	{
375
+		$data_row = array(EE_CSV::metadata_header);// do NOT translate because this exact string is used when importing
376
+		$this->fputcsv2($filehandle, $data_row);
377
+		$meta_data = array(
378
+			0 => array(
379
+				'version'        => espresso_version(),
380
+				'timezone'       => EEH_DTT_Helper::get_timezone(),
381
+				'time_of_export' => current_time('mysql'),
382
+				'site_url'       => site_url(),
383
+			),
384
+		);
385
+		$this->write_data_array_to_csv($filehandle, $meta_data);
386
+	}
387
+
388
+
389
+	/**
390
+	 * Writes $data to the csv file open in $filehandle. uses the array indices of $data for column headers
391
+	 *
392
+	 * @param array   $data                 2D array, first numerically-indexed, and next-level-down preferably indexed
393
+	 *                                      by string
394
+	 * @param boolean $add_csv_column_names whether or not we should add the keys in the bottom-most array as a row for
395
+	 *                                      headers in the CSV. Eg, if $data looked like
396
+	 *                                      array(0=>array('EVT_ID'=>1,'EVT_name'=>'monkey'...), 1=>array(...),...))
397
+	 *                                      then the first row we'd write to the CSV would be "EVT_ID,EVT_name,..."
398
+	 * @return boolean if we successfully wrote to the CSV or not. If there's no $data, we consider that a success
399
+	 *                 (because we wrote everything there was...nothing)
400
+	 */
401
+	public function write_data_array_to_csv($filehandle, $data)
402
+	{
403
+
404
+
405
+		// determine if $data is actually a 2d array
406
+		if ($data && is_array($data) && is_array(EEH_Array::get_one_item_from_array($data))) {
407
+			// make sure top level is numerically indexed,
408
+
409
+			if (EEH_Array::is_associative_array($data)) {
410
+				throw new EE_Error(
411
+					sprintf(
412
+						__(
413
+							"top-level array must be numerically indexed. Does these look like numbers to you? %s",
414
+							"event_espresso"
415
+						),
416
+						implode(",", array_keys($data))
417
+					)
418
+				);
419
+			}
420
+			$item_in_top_level_array = EEH_Array::get_one_item_from_array($data);
421
+			// now, is the last item in the top-level array of $data an associative or numeric array?
422
+			if (EEH_Array::is_associative_array($item_in_top_level_array)) {
423
+				// its associative, so we want to output its keys as column headers
424
+				$keys = array_keys($item_in_top_level_array);
425
+				echo $this->fputcsv2($filehandle, $keys);
426
+			}
427
+			// start writing data
428
+			foreach ($data as $data_row) {
429
+				echo $this->fputcsv2($filehandle, $data_row);
430
+			}
431
+			return true;
432
+		} else {
433
+			// no data TO write... so we can assume that's a success
434
+			return true;
435
+		}
436
+		// //if 2nd level is indexed by strings, use those as csv column headers (ie, the first row)
437
+		//
438
+		//
439
+		// $no_table = TRUE;
440
+		//
441
+		// // loop through data and add each row to the file/stream as csv
442
+		// foreach ( $data as $model_name => $model_data ) {
443
+		// // test first row to see if it is data or a model name
444
+		// $model = EE_Registry::instance();->load_model($model_name);
445
+		// //if the model really exists,
446
+		// if ( $model ) {
447
+		//
448
+		// // we have a table name
449
+		// $no_table = FALSE;
450
+		//
451
+		// // put the tablename into an array cuz that's how fputcsv rolls
452
+		// $model_name_row = array( 'MODEL', $model_name );
453
+		//
454
+		// // add table name to csv output
455
+		// echo self::fputcsv2($filehandle, $model_name_row);
456
+		//
457
+		// // now get the rest of the data
458
+		// foreach ( $model_data as $row ) {
459
+		// // output the row
460
+		// echo self::fputcsv2($filehandle, $row);
461
+		// }
462
+		//
463
+		// }
464
+		//
465
+		// if ( $no_table ) {
466
+		// // no table so just put the data
467
+		// echo self::fputcsv2($filehandle, $model_data);
468
+		// }
469
+		//
470
+		// } // END OF foreach ( $data )
471
+	}
472
+
473
+	/**
474
+	 * Should be called after begin_sending_csv(), and one or more write_data_array_to_csv()s.
475
+	 * Calls exit to prevent polluting the CSV file with other junk
476
+	 *
477
+	 * @param resource $fh filehandle where we're writing the CSV to
478
+	 */
479
+	public function end_sending_csv($fh)
480
+	{
481
+		fclose($fh);
482
+		exit(0);
483
+	}
484
+
485
+	/**
486
+	 * Given an open file, writes all the model data to it in the format the importer expects.
487
+	 * Usually preceded by begin_sending_csv($filename), and followed by end_sending_csv($filehandle).
488
+	 *
489
+	 * @param resource $filehandle
490
+	 * @param array    $model_data_array is assumed to be a 3d array: 1st layer has keys of model names (eg 'Event'),
491
+	 *                                   next layer is numerically indexed to represent each model object (eg, each
492
+	 *                                   individual event), and the last layer has all the attributes o fthat model
493
+	 *                                   object (eg, the event's id, name, etc)
494
+	 * @return boolean success
495
+	 */
496
+	public function write_model_data_to_csv($filehandle, $model_data_array)
497
+	{
498
+		$this->write_metadata_to_csv($filehandle);
499
+		foreach ($model_data_array as $model_name => $model_instance_arrays) {
500
+			// first: output a special row stating the model
501
+			echo $this->fputcsv2($filehandle, array('MODEL', $model_name));
502
+			// if we have items to put in the CSV, do it normally
503
+
504
+			if (! empty($model_instance_arrays)) {
505
+				$this->write_data_array_to_csv($filehandle, $model_instance_arrays);
506
+			} else {
507
+				// echo "no data to write... so just write the headers";
508
+				// so there's actually NO model objects for that model.
509
+				// probably still want to show the columns
510
+				$model = EE_Registry::instance()->load_model($model_name);
511
+				$column_names = array();
512
+				foreach ($model->field_settings() as $field) {
513
+					$column_names[ $field->get_nicename() . "[" . $field->get_name() . "]" ] = null;
514
+				}
515
+				$this->write_data_array_to_csv($filehandle, array($column_names));
516
+			}
517
+		}
518
+	}
519
+
520
+	/**
521
+	 * Writes the CSV file to the output buffer, with rows corresponding to $model_data_array,
522
+	 * and dies (in order to avoid other plugins from messing up the csv output)
523
+	 *
524
+	 * @param string $filename         the filename you want to give the file
525
+	 * @param array  $model_data_array 3d array, as described in EE_CSV::write_model_data_to_csv()
526
+	 * @return bool | void writes CSV file to output and dies
527
+	 */
528
+	public function export_multiple_model_data_to_csv($filename, $model_data_array)
529
+	{
530
+		$filehandle = $this->begin_sending_csv($filename);
531
+		$this->write_model_data_to_csv($filehandle, $model_data_array);
532
+		$this->end_sending_csv($filehandle);
533
+	}
534
+
535
+	/**
536
+	 * @Export contents of an array to csv file
537
+	 * @access public
538
+	 * @param array  $data     - the array of data to be converted to csv and exported
539
+	 * @param string $filename - name for newly created csv file
540
+	 * @return TRUE on success, FALSE on fail
541
+	 */
542
+	public function export_array_to_csv($data = false, $filename = false)
543
+	{
544
+
545
+		// no data file?? get outta here
546
+		if (! $data or ! is_array($data) or empty($data)) {
547
+			return false;
548
+		}
549
+
550
+		// no filename?? get outta here
551
+		if (! $filename) {
552
+			return false;
553
+		}
554
+
555
+
556
+		// somebody told me i might need this ???
557
+		global $wpdb;
558
+		$prefix = $wpdb->prefix;
559
+
560
+
561
+		$fh = $this->begin_sending_csv($filename);
562
+
563
+
564
+		$this->end_sending_csv($fh);
565
+	}
566
+
567
+
568
+	/**
569
+	 * @Determine the maximum upload file size based on php.ini settings
570
+	 * @access    public
571
+	 * @param int $percent_of_max - desired percentage of the max upload_mb
572
+	 * @return int KB
573
+	 */
574
+	public function get_max_upload_size($percent_of_max = false)
575
+	{
576
+
577
+		$max_upload = (int) (ini_get('upload_max_filesize'));
578
+		$max_post = (int) (ini_get('post_max_size'));
579
+		$memory_limit = (int) (ini_get('memory_limit'));
580
+
581
+		// determine the smallest of the three values from above
582
+		$upload_mb = min($max_upload, $max_post, $memory_limit);
583
+
584
+		// convert MB to KB
585
+		$upload_mb = $upload_mb * 1024;
586
+
587
+		// don't want the full monty? then reduce the max uplaod size
588
+		if ($percent_of_max) {
589
+			// is percent_of_max like this -> 50 or like this -> 0.50 ?
590
+			if ($percent_of_max > 1) {
591
+				// chnages 50 to 0.50
592
+				$percent_of_max = $percent_of_max / 100;
593
+			}
594
+			// make upload_mb a percentage of the max upload_mb
595
+			$upload_mb = $upload_mb * $percent_of_max;
596
+		}
597
+
598
+		return $upload_mb;
599
+	}
600
+
601
+
602
+	/**
603
+	 * @Drop   in replacement for PHP's fputcsv function - but this one works!!!
604
+	 * @access private
605
+	 * @param resource $fh         - file handle - what we are writing to
606
+	 * @param array    $row        - individual row of csv data
607
+	 * @param string   $delimiter  - csv delimiter
608
+	 * @param string   $enclosure  - csv enclosure
609
+	 * @param string   $mysql_null - allows php NULL to be overridden with MySQl's insertable NULL value
610
+	 * @return void
611
+	 */
612
+	private function fputcsv2($fh, array $row, $delimiter = ',', $enclosure = '"', $mysql_null = false)
613
+	{
614
+		// Allow user to filter the csv delimiter and enclosure for other countries csv standards
615
+		$delimiter = apply_filters('FHEE__EE_CSV__fputcsv2__delimiter', $delimiter);
616
+		$enclosure = apply_filters('FHEE__EE_CSV__fputcsv2__enclosure', $enclosure);
617
+
618
+		$delimiter_esc = preg_quote($delimiter, '/');
619
+		$enclosure_esc = preg_quote($enclosure, '/');
620
+
621
+		$output = array();
622
+		foreach ($row as $field_value) {
623
+			if (is_object($field_value) || is_array($field_value)) {
624
+				$field_value = serialize($field_value);
625
+			}
626
+			if ($field_value === null && $mysql_null) {
627
+				$output[] = 'NULL';
628
+				continue;
629
+			}
630
+
631
+			$output[] = preg_match("/(?:${delimiter_esc}|${enclosure_esc}|\s)/", $field_value) ?
632
+				($enclosure . str_replace($enclosure, $enclosure . $enclosure, $field_value) . $enclosure)
633
+				: $field_value;
634
+		}
635
+
636
+		fwrite($fh, join($delimiter, $output) . PHP_EOL);
637
+	}
638
+
639
+
640
+	// /**
641
+	//  * @CSV    Import / Export messages
642
+	//  * @access public
643
+	//  * @return void
644
+	//  */
645
+	// public function csv_admin_notices()
646
+	// {
647
+	//
648
+	//     // We play both kinds of music here! Country AND Western! - err... I mean, cycle through both types of notices
649
+	//     foreach (array('updates', 'errors') as $type) {
650
+	//
651
+	//         // if particular notice type is not empty, then "You've got Mail"
652
+	//         if (! empty($this->_notices[ $type ])) {
653
+	//
654
+	//             // is it an update or an error ?
655
+	//             $msg_class = $type == 'updates' ? 'updated' : 'error';
656
+	//             echo '<div id="message" class="' . $msg_class . '">';
657
+	//             // display each notice, however many that may be
658
+	//             foreach ($this->_notices[ $type ] as $message) {
659
+	//                 echo '<p>' . $message . '</p>';
660
+	//             }
661
+	//             // wrap it up
662
+	//             echo '</div>';
663
+	//         }
664
+	//     }
665
+	// }
666
+
667
+	/**
668
+	 * Gets the date format to use in teh csv. filterable
669
+	 *
670
+	 * @param string $current_format
671
+	 * @return string
672
+	 */
673
+	public function get_date_format_for_csv($current_format = null)
674
+	{
675
+		return apply_filters('FHEE__EE_CSV__get_date_format_for_csv__format', 'Y-m-d', $current_format);
676
+	}
677
+
678
+	/**
679
+	 * Gets the time format we want to use in CSV reports. Filterable
680
+	 *
681
+	 * @param string $current_format
682
+	 * @return string
683
+	 */
684
+	public function get_time_format_for_csv($current_format = null)
685
+	{
686
+		return apply_filters('FHEE__EE_CSV__get_time_format_for_csv__format', 'H:i:s', $current_format);
687
+	}
688 688
 }
Please login to merge, or discard this patch.
Spacing   +48 added lines, -48 removed lines patch added patch discarded remove patch
@@ -48,31 +48,31 @@  discard block
 block discarded – undo
48 48
         global $wpdb;
49 49
 
50 50
         $this->_primary_keys = array(
51
-            $wpdb->prefix . 'esp_answer'                  => array('ANS_ID'),
52
-            $wpdb->prefix . 'esp_attendee'                => array('ATT_ID'),
53
-            $wpdb->prefix . 'esp_datetime'                => array('DTT_ID'),
54
-            $wpdb->prefix . 'esp_event_question_group'    => array('EQG_ID'),
55
-            $wpdb->prefix . 'esp_message_template'        => array('MTP_ID'),
56
-            $wpdb->prefix . 'esp_payment'                 => array('PAY_ID'),
57
-            $wpdb->prefix . 'esp_price'                   => array('PRC_ID'),
58
-            $wpdb->prefix . 'esp_price_type'              => array('PRT_ID'),
59
-            $wpdb->prefix . 'esp_question'                => array('QST_ID'),
60
-            $wpdb->prefix . 'esp_question_group'          => array('QSG_ID'),
61
-            $wpdb->prefix . 'esp_question_group_question' => array('QGQ_ID'),
62
-            $wpdb->prefix . 'esp_question_option'         => array('QSO_ID'),
63
-            $wpdb->prefix . 'esp_registration'            => array('REG_ID'),
64
-            $wpdb->prefix . 'esp_status'                  => array('STS_ID'),
65
-            $wpdb->prefix . 'esp_transaction'             => array('TXN_ID'),
66
-            $wpdb->prefix . 'esp_transaction'             => array('TXN_ID'),
67
-            $wpdb->prefix . 'events_detail'               => array('id'),
68
-            $wpdb->prefix . 'events_category_detail'      => array('id'),
69
-            $wpdb->prefix . 'events_category_rel'         => array('id'),
70
-            $wpdb->prefix . 'events_venue'                => array('id'),
71
-            $wpdb->prefix . 'events_venue_rel'            => array('emeta_id'),
72
-            $wpdb->prefix . 'events_locale'               => array('id'),
73
-            $wpdb->prefix . 'events_locale_rel'           => array('id'),
74
-            $wpdb->prefix . 'events_personnel'            => array('id'),
75
-            $wpdb->prefix . 'events_personnel_rel'        => array('id'),
51
+            $wpdb->prefix.'esp_answer'                  => array('ANS_ID'),
52
+            $wpdb->prefix.'esp_attendee'                => array('ATT_ID'),
53
+            $wpdb->prefix.'esp_datetime'                => array('DTT_ID'),
54
+            $wpdb->prefix.'esp_event_question_group'    => array('EQG_ID'),
55
+            $wpdb->prefix.'esp_message_template'        => array('MTP_ID'),
56
+            $wpdb->prefix.'esp_payment'                 => array('PAY_ID'),
57
+            $wpdb->prefix.'esp_price'                   => array('PRC_ID'),
58
+            $wpdb->prefix.'esp_price_type'              => array('PRT_ID'),
59
+            $wpdb->prefix.'esp_question'                => array('QST_ID'),
60
+            $wpdb->prefix.'esp_question_group'          => array('QSG_ID'),
61
+            $wpdb->prefix.'esp_question_group_question' => array('QGQ_ID'),
62
+            $wpdb->prefix.'esp_question_option'         => array('QSO_ID'),
63
+            $wpdb->prefix.'esp_registration'            => array('REG_ID'),
64
+            $wpdb->prefix.'esp_status'                  => array('STS_ID'),
65
+            $wpdb->prefix.'esp_transaction'             => array('TXN_ID'),
66
+            $wpdb->prefix.'esp_transaction'             => array('TXN_ID'),
67
+            $wpdb->prefix.'events_detail'               => array('id'),
68
+            $wpdb->prefix.'events_category_detail'      => array('id'),
69
+            $wpdb->prefix.'events_category_rel'         => array('id'),
70
+            $wpdb->prefix.'events_venue'                => array('id'),
71
+            $wpdb->prefix.'events_venue_rel'            => array('emeta_id'),
72
+            $wpdb->prefix.'events_locale'               => array('id'),
73
+            $wpdb->prefix.'events_locale_rel'           => array('id'),
74
+            $wpdb->prefix.'events_personnel'            => array('id'),
75
+            $wpdb->prefix.'events_personnel_rel'        => array('id'),
76 76
         );
77 77
     }
78 78
 
@@ -104,7 +104,7 @@  discard block
 block discarded – undo
104 104
     {
105 105
         $fc = "";
106 106
         $fh = fopen($file_path, "rb");
107
-        if (! $fh) {
107
+        if ( ! $fh) {
108 108
             throw new EE_Error(sprintf(__("Cannot open file for read: %s<br>\n", 'event_espresso'), $file_path));
109 109
         }
110 110
         $flen = filesize($file_path);
@@ -112,7 +112,7 @@  discard block
 block discarded – undo
112 112
         for ($i = 0; $i < $flen; $i++) {
113 113
             $c = substr($bc, $i, 1);
114 114
             if ((ord($c) != 0) && (ord($c) != 13)) {
115
-                $fc = $fc . $c;
115
+                $fc = $fc.$c;
116 116
             }
117 117
         }
118 118
         if ((ord(substr($fc, 0, 1)) == 255) && (ord(substr($fc, 1, 1)) == 254)) {
@@ -207,7 +207,7 @@  discard block
 block discarded – undo
207 207
     public function import_csv_to_model_data_array($path_to_file, $model_name = false, $first_row_is_headers = true)
208 208
     {
209 209
         $multi_dimensional_array = $this->import_csv_to_multi_dimensional_array($path_to_file);
210
-        if (! $multi_dimensional_array) {
210
+        if ( ! $multi_dimensional_array) {
211 211
             return false;
212 212
         }
213 213
         // gotta start somewhere
@@ -243,23 +243,23 @@  discard block
 block discarded – undo
243 243
             // loop through each column
244 244
             for ($i = 0; $i < $columns; $i++) {
245 245
                 // replace csv_enclosures with backslashed quotes
246
-                $data[ $i ] = str_replace('"""', '\\"', $data[ $i ]);
246
+                $data[$i] = str_replace('"""', '\\"', $data[$i]);
247 247
                 // do we need to grab the column names?
248 248
                 if ($row === 1) {
249 249
                     if ($first_row_is_headers) {
250 250
                         // store the column names to use for keys
251
-                        $column_name = $data[ $i ];
251
+                        $column_name = $data[$i];
252 252
                         // check it's not blank... sometimes CSV editign programs adda bunch of empty columns onto the end...
253
-                        if (! $column_name) {
253
+                        if ( ! $column_name) {
254 254
                             continue;
255 255
                         }
256 256
                         $matches = array();
257 257
                         if ($model_name == EE_CSV::metadata_header) {
258
-                            $headers[ $i ] = $column_name;
258
+                            $headers[$i] = $column_name;
259 259
                         } else {
260 260
                             // now get the db table name from it (the part between square brackets)
261 261
                             $success = preg_match('~(.*)\[(.*)\]~', $column_name, $matches);
262
-                            if (! $success) {
262
+                            if ( ! $success) {
263 263
                                 EE_Error::add_error(
264 264
                                     sprintf(
265 265
                                         __(
@@ -275,24 +275,24 @@  discard block
 block discarded – undo
275 275
                                 );
276 276
                                 return false;
277 277
                             }
278
-                            $headers[ $i ] = $matches[2];
278
+                            $headers[$i] = $matches[2];
279 279
                         }
280 280
                     } else {
281 281
                         // no column names means our final array will just use counters for keys
282
-                        $model_entry[ $headers[ $i ] ] = $data[ $i ];
283
-                        $headers[ $i ] = $i;
282
+                        $model_entry[$headers[$i]] = $data[$i];
283
+                        $headers[$i] = $i;
284 284
                     }
285 285
                     // and we need to store csv data
286 286
                 } else {
287 287
                     // this column isn' ta header, store it if there is a header for it
288
-                    if (isset($headers[ $i ])) {
289
-                        $model_entry[ $headers[ $i ] ] = $data[ $i ];
288
+                    if (isset($headers[$i])) {
289
+                        $model_entry[$headers[$i]] = $data[$i];
290 290
                     }
291 291
                 }
292 292
             }
293 293
             // save the row's data IF it's a non-header-row
294
-            if (! $first_row_is_headers || ($first_row_is_headers && $row > 1)) {
295
-                $ee_formatted_data[ $model_name ][] = $model_entry;
294
+            if ( ! $first_row_is_headers || ($first_row_is_headers && $row > 1)) {
295
+                $ee_formatted_data[$model_name][] = $model_entry;
296 296
             }
297 297
             // advance to next row
298 298
             $row++;
@@ -353,7 +353,7 @@  discard block
 block discarded – undo
353 353
         // header("Content-Type: application/force-download");
354 354
         // header("Content-Type: application/octet-stream");
355 355
         // header("Content-Type: application/download");
356
-        header('Content-disposition: attachment; filename=' . $filename);
356
+        header('Content-disposition: attachment; filename='.$filename);
357 357
         header("Content-Type: text/csv; charset=utf-8");
358 358
         do_action('AHEE__EE_CSV__begin_sending_csv__headers');
359 359
         echo apply_filters(
@@ -372,7 +372,7 @@  discard block
 block discarded – undo
372 372
      */
373 373
     public function write_metadata_to_csv($filehandle)
374 374
     {
375
-        $data_row = array(EE_CSV::metadata_header);// do NOT translate because this exact string is used when importing
375
+        $data_row = array(EE_CSV::metadata_header); // do NOT translate because this exact string is used when importing
376 376
         $this->fputcsv2($filehandle, $data_row);
377 377
         $meta_data = array(
378 378
             0 => array(
@@ -501,7 +501,7 @@  discard block
 block discarded – undo
501 501
             echo $this->fputcsv2($filehandle, array('MODEL', $model_name));
502 502
             // if we have items to put in the CSV, do it normally
503 503
 
504
-            if (! empty($model_instance_arrays)) {
504
+            if ( ! empty($model_instance_arrays)) {
505 505
                 $this->write_data_array_to_csv($filehandle, $model_instance_arrays);
506 506
             } else {
507 507
                 // echo "no data to write... so just write the headers";
@@ -510,7 +510,7 @@  discard block
 block discarded – undo
510 510
                 $model = EE_Registry::instance()->load_model($model_name);
511 511
                 $column_names = array();
512 512
                 foreach ($model->field_settings() as $field) {
513
-                    $column_names[ $field->get_nicename() . "[" . $field->get_name() . "]" ] = null;
513
+                    $column_names[$field->get_nicename()."[".$field->get_name()."]"] = null;
514 514
                 }
515 515
                 $this->write_data_array_to_csv($filehandle, array($column_names));
516 516
             }
@@ -543,12 +543,12 @@  discard block
 block discarded – undo
543 543
     {
544 544
 
545 545
         // no data file?? get outta here
546
-        if (! $data or ! is_array($data) or empty($data)) {
546
+        if ( ! $data or ! is_array($data) or empty($data)) {
547 547
             return false;
548 548
         }
549 549
 
550 550
         // no filename?? get outta here
551
-        if (! $filename) {
551
+        if ( ! $filename) {
552 552
             return false;
553 553
         }
554 554
 
@@ -629,11 +629,11 @@  discard block
 block discarded – undo
629 629
             }
630 630
 
631 631
             $output[] = preg_match("/(?:${delimiter_esc}|${enclosure_esc}|\s)/", $field_value) ?
632
-                ($enclosure . str_replace($enclosure, $enclosure . $enclosure, $field_value) . $enclosure)
632
+                ($enclosure.str_replace($enclosure, $enclosure.$enclosure, $field_value).$enclosure)
633 633
                 : $field_value;
634 634
         }
635 635
 
636
-        fwrite($fh, join($delimiter, $output) . PHP_EOL);
636
+        fwrite($fh, join($delimiter, $output).PHP_EOL);
637 637
     }
638 638
 
639 639
 
Please login to merge, or discard this patch.