Version Description
April 8, 2015 =
Added: Download invoice button on My account page
Added: Norwegian language files
Added: Settings sections into settings pages
Added: Checkbox to reset invoice number counter
Added: Refunds on invoice template
Added: Item tax and different total taxes on invoice template
Fixed: Updating plugin removed all invoices -- Invoices into uploads dir
Fixed: Order number not formatted
Fixed: Invoice not viewable and removable in IE on Order details page
Improved: Completely refactored code
Improved: Dutch language file
Download this release
Release Info
Developer | baaaaas |
Plugin | WooCommerce PDF Invoices |
Version | 2.2.0 |
Comparing to | |
See all releases |
Code changes from version 2.1.0 to 2.2.0
- admin/classes/be-woocommerce-pdf-invoices.php +387 -0
- admin/classes/bewpi-general-settings.php +214 -0
- admin/classes/bewpi-settings.php +174 -0
- admin/classes/bewpi-template-settings.php +535 -0
- admin/classes/woocommerce-pdf-invoices.php +0 -339
- admin/classes/wpi-general-settings.php +0 -231
- admin/classes/wpi-settings.php +0 -99
- admin/classes/wpi-template-settings.php +0 -724
- assets/css/admin.css +33 -9
- assets/img/my-company-logo-blue.png +0 -0
- assets/js/admin.js +7 -2
- bootstrap.php +34 -19
- includes/classes/bewpi-document.php +130 -0
- includes/classes/bewpi-invoice.php +344 -0
- includes/classes/wpi-document.php +0 -191
- includes/classes/wpi-invoice.php +0 -289
- includes/views/templates/invoice-micro.php +173 -65
- lang/be-woocommerce-pdf-invoices-nb_NO.mo +0 -0
- lang/be-woocommerce-pdf-invoices-nb_NO.po +370 -0
- lang/be-woocommerce-pdf-invoices-nl_NL.mo +0 -0
- lang/be-woocommerce-pdf-invoices-nl_NL.po +331 -224
- lib/mpdf/ttfontdata/dejavusanscondensedBI.GDEFdata.php +14 -0
- lib/mpdf/ttfontdata/dejavusanscondensedBI.GPOSdata.php +414 -0
- lib/mpdf/ttfontdata/dejavusanscondensedBI.GSUBGPOStables.dat +0 -0
- lib/mpdf/ttfontdata/dejavusanscondensedBI.GSUBdata.php +368 -0
- lib/mpdf/ttfontdata/dejavusanscondensedBI.cw.dat +0 -0
- lib/mpdf/ttfontdata/dejavusanscondensedBI.gid.dat +0 -0
- lib/mpdf/ttfontdata/dejavusanscondensedBI.mtx.php +3671 -0
- readme.md +19 -0
- readme.txt +28 -12
- tmp/.htaccess +1 -1
- tmp/index.php +0 -0
admin/classes/be-woocommerce-pdf-invoices.php
ADDED
@@ -0,0 +1,387 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
if ( ! defined( 'ABSPATH' ) ) {
|
3 |
+
exit; // Exit if accessed directly
|
4 |
+
}
|
5 |
+
|
6 |
+
if ( ! class_exists( 'BE_WooCommerce_PDF_Invoices' ) ) {
|
7 |
+
|
8 |
+
/**
|
9 |
+
* Implements main function for attaching invoice to email and show invoice buttons.
|
10 |
+
*/
|
11 |
+
class BE_WooCommerce_PDF_Invoices {
|
12 |
+
|
13 |
+
/**
|
14 |
+
* Constant options key
|
15 |
+
* @var string
|
16 |
+
*/
|
17 |
+
private $options_key = 'bewpi-invoices';
|
18 |
+
|
19 |
+
/**
|
20 |
+
* All the settings tabs for the settings page.
|
21 |
+
* @var array
|
22 |
+
*/
|
23 |
+
private $settings_tabs = array(
|
24 |
+
'bewpi_general_settings' => 'General',
|
25 |
+
'bewpi_template_settings' => 'Template'
|
26 |
+
);
|
27 |
+
|
28 |
+
/**
|
29 |
+
* Default textdomain.
|
30 |
+
* @var string
|
31 |
+
*/
|
32 |
+
private $textdomain = 'be-woocommerce-pdf-invoices';
|
33 |
+
|
34 |
+
/**
|
35 |
+
* Initialize plugin and register actions and filters.
|
36 |
+
*
|
37 |
+
* @param $general_settings
|
38 |
+
* @param $template_settings
|
39 |
+
*/
|
40 |
+
public function __construct() {
|
41 |
+
|
42 |
+
new BEWPI_General_Settings();
|
43 |
+
new BEWPI_Template_Settings();
|
44 |
+
|
45 |
+
/*
|
46 |
+
* Initialize WooCommerce PDF Invoices
|
47 |
+
*/
|
48 |
+
add_action( 'init', array( &$this, 'init' ) );
|
49 |
+
|
50 |
+
/**
|
51 |
+
* Adds the Email It In email as an extra recipient
|
52 |
+
*/
|
53 |
+
add_filter( 'woocommerce_email_headers', array( &$this, 'add_recipient_to_email_headers' ), 10, 2 );
|
54 |
+
|
55 |
+
/**
|
56 |
+
* Attach invoice to a specific WooCommerce email
|
57 |
+
*/
|
58 |
+
add_filter( 'woocommerce_email_attachments', array( &$this, 'attach_invoice_to_email' ), 99, 3 );
|
59 |
+
|
60 |
+
/**
|
61 |
+
* AJAX calls to download invoice
|
62 |
+
*/
|
63 |
+
add_action( 'wp_ajax_bewpi_download_invoice', array( &$this, 'bewpi_download_invoice' ) );
|
64 |
+
add_action( 'wp_ajax_nopriv_bewpi_download_invoice', array( &$this, 'bewpi_download_invoice' ) );
|
65 |
+
}
|
66 |
+
|
67 |
+
/**
|
68 |
+
* Some preps
|
69 |
+
*/
|
70 |
+
public function init() {
|
71 |
+
|
72 |
+
/**
|
73 |
+
* Init invoice actions to view, delete or save invoice.
|
74 |
+
*/
|
75 |
+
$this->invoice_actions();
|
76 |
+
|
77 |
+
/**
|
78 |
+
* Loads the global textdomain for the plugin.
|
79 |
+
*/
|
80 |
+
$this->load_textdomain();
|
81 |
+
|
82 |
+
/**
|
83 |
+
* Creates invoices folder in the uploads dir.
|
84 |
+
*/
|
85 |
+
$this->create_invoices_dir();
|
86 |
+
|
87 |
+
/**
|
88 |
+
* Adds Invoices submenu to WooCommerce menu.
|
89 |
+
*/
|
90 |
+
add_action( 'admin_menu', array( &$this, 'add_woocommerce_submenu_page' ) );
|
91 |
+
|
92 |
+
/**
|
93 |
+
* Enqueue admin scripts
|
94 |
+
*/
|
95 |
+
add_action( 'admin_enqueue_scripts', array( &$this, 'admin_enqueue_scripts' ) );
|
96 |
+
|
97 |
+
/**
|
98 |
+
* Add actions to overview order page.
|
99 |
+
*/
|
100 |
+
add_action( 'woocommerce_admin_order_actions_end', array( &$this, 'woocommerce_order_page_action_view_invoice' ) );
|
101 |
+
|
102 |
+
/**
|
103 |
+
* Adds a meta box to the order details page.
|
104 |
+
*/
|
105 |
+
add_action( 'add_meta_boxes', array( &$this, 'add_meta_box_to_order_page' ) );
|
106 |
+
|
107 |
+
/**
|
108 |
+
* Adds a download link for the pdf invoice on the my account page
|
109 |
+
*/
|
110 |
+
add_filter( 'woocommerce_my_account_my_orders_actions', array( $this, 'add_my_account_download_pdf_action' ), 10, 2 );
|
111 |
+
}
|
112 |
+
|
113 |
+
/**
|
114 |
+
* Callback to sniff for specific plugin actions to view, create or delete invoice.
|
115 |
+
*/
|
116 |
+
private function invoice_actions() {
|
117 |
+
if( isset( $_GET['bewpi_action'] ) && isset( $_GET['post'] ) && is_numeric( $_GET['post'] ) && isset( $_GET['nonce'] ) ) {
|
118 |
+
$action = $_GET['bewpi_action'];
|
119 |
+
$order_id = $_GET['post'];
|
120 |
+
$nonce = $_REQUEST["nonce"];
|
121 |
+
|
122 |
+
if ( !wp_verify_nonce( $nonce, $action ) ) {
|
123 |
+
die( 'Invalid request' );
|
124 |
+
} else if ( empty( $order_id ) ) {
|
125 |
+
die( 'Invalid order ID' );
|
126 |
+
} else {
|
127 |
+
|
128 |
+
$invoice = new BEWPI_Invoice( $order_id );
|
129 |
+
|
130 |
+
switch( $_GET['bewpi_action'] ) {
|
131 |
+
case "view":
|
132 |
+
$invoice->view( true );
|
133 |
+
break;
|
134 |
+
case "cancel":
|
135 |
+
$invoice->delete();
|
136 |
+
break;
|
137 |
+
case "create":
|
138 |
+
$invoice->save( "F" );
|
139 |
+
break;
|
140 |
+
}
|
141 |
+
}
|
142 |
+
}
|
143 |
+
}
|
144 |
+
|
145 |
+
/**
|
146 |
+
* Loads the textdomain and localizes the plugin options tabs.
|
147 |
+
*/
|
148 |
+
private function load_textdomain() {
|
149 |
+
load_plugin_textdomain( $this->textdomain, false, BEWPI_LANG_DIR );
|
150 |
+
$this->settings_tabs['bewpi_general_settings'] = __( 'General', $this->textdomain );
|
151 |
+
$this->settings_tabs['bewpi_template_settings'] = __( 'Template', $this->textdomain );
|
152 |
+
}
|
153 |
+
|
154 |
+
/**
|
155 |
+
* Creates invoices dir in uploads folder
|
156 |
+
*/
|
157 |
+
private function create_invoices_dir() {
|
158 |
+
//if ( !wp_mkdir_p( BEWPI_INVOICES_DIR . date( 'Y' ) . '/' ) )
|
159 |
+
wp_mkdir_p( BEWPI_INVOICES_DIR . date( 'Y' ) . '/' );
|
160 |
+
copy( BEWPI_DIR . 'tmp/.htaccess', BEWPI_INVOICES_DIR . date( 'Y' ) . '/.htaccess' );
|
161 |
+
copy( BEWPI_DIR . 'tmp/index.php', BEWPI_INVOICES_DIR . date( 'Y' ) . '/index.php' );
|
162 |
+
}
|
163 |
+
|
164 |
+
/**
|
165 |
+
* Adds submenu to WooCommerce menu.
|
166 |
+
*/
|
167 |
+
public function add_woocommerce_submenu_page() {
|
168 |
+
add_submenu_page(
|
169 |
+
'woocommerce',
|
170 |
+
__( 'Invoices', $this->textdomain ),
|
171 |
+
__( 'Invoices', $this->textdomain ),
|
172 |
+
'manage_options', $this->options_key,
|
173 |
+
array( &$this, 'options_page' )
|
174 |
+
);
|
175 |
+
}
|
176 |
+
|
177 |
+
/**
|
178 |
+
* Admin scripts
|
179 |
+
*/
|
180 |
+
public function admin_enqueue_scripts() {
|
181 |
+
wp_enqueue_script( 'admin_settings_script', BEWPI_URL . '/assets/js/admin.js' );
|
182 |
+
wp_register_style( 'admin_settings_css', BEWPI_URL . '/assets/css/admin.css', false, '1.0.0' );
|
183 |
+
wp_enqueue_style( 'admin_settings_css' );
|
184 |
+
}
|
185 |
+
|
186 |
+
/**
|
187 |
+
* Callback function for adding plugin options tabs.
|
188 |
+
*/
|
189 |
+
private function plugin_options_tabs() {
|
190 |
+
$current_tab = isset( $_GET['tab'] ) ? $_GET['tab'] : 'bewpi_general_settings';
|
191 |
+
|
192 |
+
screen_icon();
|
193 |
+
echo '<h2 class="nav-tab-wrapper">';
|
194 |
+
foreach ( $this->settings_tabs as $tab_key => $tab_caption ) {
|
195 |
+
$active = $current_tab == $tab_key ? 'nav-tab-active' : '';
|
196 |
+
echo '<a class="nav-tab ' . $active . '" href="?page=' . 'bewpi-invoices' . '&tab=' . $tab_key . '">' . $tab_caption . '</a>';
|
197 |
+
}
|
198 |
+
echo '</h2>';
|
199 |
+
}
|
200 |
+
|
201 |
+
/**
|
202 |
+
* The options page..
|
203 |
+
*/
|
204 |
+
public function options_page() {
|
205 |
+
$tab = isset( $_GET['tab'] ) ? $_GET['tab'] : 'bewpi_general_settings';
|
206 |
+
?>
|
207 |
+
<script type="text/javascript">
|
208 |
+
window.onload = function () {
|
209 |
+
// Change footer text into rate text for WPI.
|
210 |
+
document.getElementById("footer-thankyou").innerHTML = "If you like <strong>WooCommerce PDF Invoices</strong> please leave us a <a href='https://wordpress.org/support/view/plugin-reviews/woocommerce-pdf-invoices?rate=5#postform'>★★★★★</a> rating. A huge thank you in advance!";
|
211 |
+
document.getElementById("footer-upgrade").innerHTML = "Version <?php echo BEWPI_VERSION; ?>";
|
212 |
+
};
|
213 |
+
</script>
|
214 |
+
<div class="wrap">
|
215 |
+
<?php $this->plugin_options_tabs(); ?>
|
216 |
+
<form class="be_woocommerce_pdf_invoices_settings_form" method="post" action="options.php" enctype="multipart/form-data">
|
217 |
+
<?php wp_nonce_field( 'update-options' ); ?>
|
218 |
+
<?php settings_fields( $tab ); ?>
|
219 |
+
<?php do_settings_sections( $tab ); ?>
|
220 |
+
<?php submit_button(); ?>
|
221 |
+
</form>
|
222 |
+
</div>
|
223 |
+
<?php
|
224 |
+
}
|
225 |
+
|
226 |
+
/**
|
227 |
+
* Adds the Email It In email as an extra recipient
|
228 |
+
*
|
229 |
+
* @param $headers
|
230 |
+
* @param $status
|
231 |
+
* @return string
|
232 |
+
*/
|
233 |
+
function add_recipient_to_email_headers($headers, $status) {
|
234 |
+
$general_options = get_option( 'bewpi_general_settings' );
|
235 |
+
if ( $status == $general_options['bewpi_email_type']
|
236 |
+
&& $general_options['bewpi_email_it_in']
|
237 |
+
&& !empty( $general_options['bewpi_email_it_in_account'] ) ) {
|
238 |
+
$email_it_in_account = $general_options['bewpi_email_it_in_account'];
|
239 |
+
$headers .= 'BCC: <' . $email_it_in_account . '>' . "\r\n";
|
240 |
+
}
|
241 |
+
return $headers;
|
242 |
+
}
|
243 |
+
|
244 |
+
/**
|
245 |
+
* Attaches invoice to a specific WooCommerce email. Invoice will only be generated when it does not exists already.
|
246 |
+
* @param $attachments
|
247 |
+
* @param $status
|
248 |
+
* @param $order
|
249 |
+
* @return array
|
250 |
+
*/
|
251 |
+
function attach_invoice_to_email( $attachments, $status, $order ) {
|
252 |
+
$general_options = get_option( 'bewpi_general_settings' );
|
253 |
+
if ( $status == $general_options['bewpi_email_type']
|
254 |
+
|| $general_options['bewpi_new_order']
|
255 |
+
&& $status == "new_order" ) :
|
256 |
+
|
257 |
+
$invoice = new BEWPI_Invoice( $order->id );
|
258 |
+
|
259 |
+
if ( !$invoice->exists() ) :
|
260 |
+
$filename = $invoice->save( "F" );
|
261 |
+
else :
|
262 |
+
$filename = $invoice->get_filename();
|
263 |
+
endif;
|
264 |
+
|
265 |
+
$attachments[] = $filename;
|
266 |
+
endif;
|
267 |
+
return $attachments;
|
268 |
+
}
|
269 |
+
|
270 |
+
/**
|
271 |
+
* Adds a box to the main column on the Post and Page edit screens.
|
272 |
+
*/
|
273 |
+
function add_meta_box_to_order_page() {
|
274 |
+
add_meta_box(
|
275 |
+
'order_page_create_invoice',
|
276 |
+
__( 'PDF Invoice', $this->textdomain ),
|
277 |
+
array( &$this, 'woocommerce_order_details_page_meta_box_create_invoice' ),
|
278 |
+
'shop_order',
|
279 |
+
'side',
|
280 |
+
'high'
|
281 |
+
);
|
282 |
+
}
|
283 |
+
|
284 |
+
/**
|
285 |
+
* Shows the view invoice button on the all orders page.
|
286 |
+
*
|
287 |
+
* @param $order
|
288 |
+
*/
|
289 |
+
public function woocommerce_order_page_action_view_invoice( $order ) {
|
290 |
+
$invoice = new BEWPI_Invoice( $order->id );
|
291 |
+
if( $invoice->exists() )
|
292 |
+
$this->show_invoice_button( 'View invoice', $order->id, 'view', '', array('class="button tips wpi-admin-order-create-invoice-btn"') );
|
293 |
+
}
|
294 |
+
|
295 |
+
/**
|
296 |
+
* Shows invoice number info on the order details page.
|
297 |
+
* @param $date
|
298 |
+
* @param $number
|
299 |
+
*/
|
300 |
+
private function show_invoice_number_info($date, $number) {
|
301 |
+
echo '<table class="invoice-info" width="100%">
|
302 |
+
<tr>
|
303 |
+
<td>' . __('Invoiced on:', $this->textdomain ) . '</td>
|
304 |
+
<td align="right"><b>' . $date . '</b></td>
|
305 |
+
</tr>
|
306 |
+
<tr>
|
307 |
+
<td>' . __('Invoice number:', $this->textdomain ) . '</td>
|
308 |
+
<td align="right"><b>' . $number . '</b></td>
|
309 |
+
</tr>
|
310 |
+
</table>';
|
311 |
+
}
|
312 |
+
|
313 |
+
/**
|
314 |
+
* Show a specific invoice button to for example view, create or delete an invoice.
|
315 |
+
*
|
316 |
+
* @param $title
|
317 |
+
* @param $order_id
|
318 |
+
* @param $wpi_action
|
319 |
+
* @param $btn_title
|
320 |
+
* @param array $arr
|
321 |
+
*/
|
322 |
+
private function show_invoice_button( $title, $order_id, $wpi_action, $btn_title, $arr = array() ) {
|
323 |
+
$title = __( $title, $this->textdomain );
|
324 |
+
$href = admin_url() . 'post.php?post=' . $order_id . '&action=edit&bewpi_action=' . $wpi_action . '&nonce=' . wp_create_nonce($wpi_action);
|
325 |
+
$btn_title = __( $btn_title, $this->textdomain );
|
326 |
+
|
327 |
+
$attr = '';
|
328 |
+
foreach($arr as $str) {
|
329 |
+
$attr .= $str . ' ';
|
330 |
+
}
|
331 |
+
|
332 |
+
$btn = '<a title="' . $title . '" href="' . $href . '" ' . $attr . '>' . $btn_title .'</a>';
|
333 |
+
echo $btn;
|
334 |
+
}
|
335 |
+
|
336 |
+
/**
|
337 |
+
* Show all the meta box actions/buttons on the order details page to create, view or cancel/delete an invoice.
|
338 |
+
* @param $post
|
339 |
+
*/
|
340 |
+
public function woocommerce_order_details_page_meta_box_create_invoice( $post ) {
|
341 |
+
$invoice = new BEWPI_Invoice( $post->ID );
|
342 |
+
|
343 |
+
if( $invoice->exists() ) {
|
344 |
+
$this->show_invoice_number_info( $invoice->get_formatted_invoice_date(), $invoice->get_formatted_number() );
|
345 |
+
$this->show_invoice_button( __( 'View invoice', $this->textdomain ), $post->ID, 'view', __( 'View', $this->textdomain ), array('class="invoice-btn button grant_access"') );
|
346 |
+
$this->show_invoice_button( __( 'Cancel invoice', $this->textdomain ), $post->ID, 'cancel', __( 'Cancel', $this->textdomain ), array('class="invoice-btn button grant_access"', 'onclick="return confirm(\'' . __( 'Are you sure to delete the invoice?', $this->textdomain ) . '\')"' ) );
|
347 |
+
} else {
|
348 |
+
$this->show_invoice_button( __( 'Create invoice', $this->textdomain ), $post->ID, 'create', __( 'Create', $this->textdomain ), array('class="invoice-btn button grant_access"') );
|
349 |
+
}
|
350 |
+
}
|
351 |
+
|
352 |
+
/**
|
353 |
+
* AJAX action to download invoice
|
354 |
+
*/
|
355 |
+
public function bewpi_download_invoice() {
|
356 |
+
if( isset( $_GET['action'] ) && isset( $_GET['order_id'] ) && isset( $_GET['nonce'] ) ) {
|
357 |
+
$action = $_GET['action'];
|
358 |
+
$order_id = $_GET['order_id'];
|
359 |
+
$nonce = $_REQUEST["nonce"];
|
360 |
+
|
361 |
+
if ( !wp_verify_nonce( $nonce, $action ) ) {
|
362 |
+
die( 'Invalid request' );
|
363 |
+
} else if ( empty( $order_id ) ) {
|
364 |
+
die( 'Invalid order ID' );
|
365 |
+
} else {
|
366 |
+
$invoice = new BEWPI_Invoice( $order_id );
|
367 |
+
$invoice->view( true );
|
368 |
+
}
|
369 |
+
}
|
370 |
+
}
|
371 |
+
|
372 |
+
/**
|
373 |
+
* Display download link on My Account page
|
374 |
+
*/
|
375 |
+
public function add_my_account_download_pdf_action( $actions, $order ) {
|
376 |
+
$invoice = new BEWPI_Invoice( $order->id );
|
377 |
+
if ( $invoice->exists() && $invoice->is_download_allowed( $order->post_status ) ) {
|
378 |
+
$url = admin_url( 'admin-ajax.php?action=bewpi_download_invoice&order_id=' . $order->id . '&nonce=' . wp_create_nonce( 'bewpi_download_invoice' ) );
|
379 |
+
$actions['invoice'] = array(
|
380 |
+
'url' => $url,
|
381 |
+
'name' => __( 'Download invoice (PDF)', $this->textdomain )
|
382 |
+
);
|
383 |
+
}
|
384 |
+
return $actions;
|
385 |
+
}
|
386 |
+
}
|
387 |
+
}
|
admin/classes/bewpi-general-settings.php
ADDED
@@ -0,0 +1,214 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
if ( ! defined( 'ABSPATH' ) ) {
|
3 |
+
exit; // Exit if accessed directly
|
4 |
+
}
|
5 |
+
|
6 |
+
if ( ! class_exists( 'BEWPI_General_Settings' ) ) {
|
7 |
+
|
8 |
+
/**
|
9 |
+
* Implements the template settings.
|
10 |
+
*/
|
11 |
+
class BEWPI_General_Settings extends BEWPI_Settings {
|
12 |
+
|
13 |
+
/**
|
14 |
+
* Constant template settings key
|
15 |
+
* @var string
|
16 |
+
*/
|
17 |
+
private $settings_key = 'bewpi_general_settings';
|
18 |
+
|
19 |
+
/**
|
20 |
+
* Initializes the template settings.
|
21 |
+
*/
|
22 |
+
public function __construct() {
|
23 |
+
/**
|
24 |
+
* Loads all the template settings.
|
25 |
+
*/
|
26 |
+
add_action( 'init', array( &$this, 'load_settings' ) );
|
27 |
+
|
28 |
+
/**
|
29 |
+
* Register all template settings.
|
30 |
+
*/
|
31 |
+
add_action( 'admin_init', array( &$this, 'create_settings' ) );
|
32 |
+
|
33 |
+
/**
|
34 |
+
* Displays all messages registered to 'template_settings'
|
35 |
+
*/
|
36 |
+
add_action( 'admin_notices', array( &$this, 'show_settings_notices' ) );
|
37 |
+
}
|
38 |
+
|
39 |
+
/**
|
40 |
+
* Load all settings into settings var and merge with defaults.
|
41 |
+
*/
|
42 |
+
public function load_settings() {
|
43 |
+
$defaults = $this->get_defaults();
|
44 |
+
$defaults['bewpi_settings_key'] = $this->settings_key;
|
45 |
+
$options = (array) get_option( $this->settings_key );
|
46 |
+
$options = array_merge( $defaults, $options );
|
47 |
+
update_option( $this->settings_key, $options );
|
48 |
+
}
|
49 |
+
|
50 |
+
/**
|
51 |
+
* Get all default values from the settings array.
|
52 |
+
* @return array
|
53 |
+
*/
|
54 |
+
private function get_defaults() {
|
55 |
+
$defaults = array();
|
56 |
+
foreach ( $this->the_settings() as $setting ) :
|
57 |
+
$defaults[ $setting['name'] ] = $setting['default'];
|
58 |
+
endforeach;
|
59 |
+
return $defaults;
|
60 |
+
}
|
61 |
+
|
62 |
+
/**
|
63 |
+
* Register all settings fields.
|
64 |
+
*/
|
65 |
+
public function create_settings() {
|
66 |
+
$this->add_settings_sections();
|
67 |
+
register_setting(
|
68 |
+
$this->settings_key,
|
69 |
+
$this->settings_key,
|
70 |
+
array( &$this, 'validate_input' )
|
71 |
+
);
|
72 |
+
$this->add_settings_fields();
|
73 |
+
}
|
74 |
+
|
75 |
+
/**
|
76 |
+
* Settings array
|
77 |
+
* @return array
|
78 |
+
*/
|
79 |
+
private function the_settings() {
|
80 |
+
$settings = array(
|
81 |
+
// General section
|
82 |
+
array(
|
83 |
+
'id' => 'bewpi-email-type',
|
84 |
+
'name' => $this->prefix . 'email_type',
|
85 |
+
'title' => __( 'Attach to Email', $this->textdomain ),
|
86 |
+
'callback' => array( &$this, 'select_callback' ),
|
87 |
+
'page' => $this->settings_key,
|
88 |
+
'section' => 'email',
|
89 |
+
'type' => 'text',
|
90 |
+
'desc' => '',
|
91 |
+
'options' => array(
|
92 |
+
array(
|
93 |
+
'name' => __( 'Processing order', $this->textdomain ),
|
94 |
+
'value' => 'customer_processing_order'
|
95 |
+
),
|
96 |
+
array(
|
97 |
+
'name' => __( 'Completed order', $this->textdomain ),
|
98 |
+
'value' => 'customer_completed_order'
|
99 |
+
),
|
100 |
+
array(
|
101 |
+
'name' => __( 'Customer invoice', $this->textdomain ),
|
102 |
+
'value' => 'customer_invoice'
|
103 |
+
)
|
104 |
+
),
|
105 |
+
'default' => 'customer_invoice'
|
106 |
+
),
|
107 |
+
array(
|
108 |
+
'id' => 'bewpi-new-order',
|
109 |
+
'name' => $this->prefix . 'new_order',
|
110 |
+
'title' => '',
|
111 |
+
'callback' => array( &$this, 'input_callback' ),
|
112 |
+
'page' => $this->settings_key,
|
113 |
+
'section' => 'email',
|
114 |
+
'type' => 'checkbox',
|
115 |
+
'desc' => __( 'Attach to New order Email', $this->textdomain ),
|
116 |
+
'class' => 'bewpi-new-order-option-title',
|
117 |
+
'default' => 0
|
118 |
+
),
|
119 |
+
array(
|
120 |
+
'id' => 'bewpi-email-it-in',
|
121 |
+
'name' => $this->prefix . 'email_it_in',
|
122 |
+
'title' => '',
|
123 |
+
'callback' => array( &$this, 'input_callback' ),
|
124 |
+
'page' => $this->settings_key,
|
125 |
+
'section' => 'cloud_storage',
|
126 |
+
'type' => 'checkbox',
|
127 |
+
'desc' => __( 'Enable Email It In', $this->textdomain ),
|
128 |
+
'class' => 'bewpi-email-it-in-option-title',
|
129 |
+
'default' => 0
|
130 |
+
),
|
131 |
+
// Header section
|
132 |
+
array(
|
133 |
+
'id' => 'bewpi-email-it-in-account',
|
134 |
+
'name' => $this->prefix . 'email-it-in-account',
|
135 |
+
'title' => __( 'Email It In account', $this->textdomain ),
|
136 |
+
'callback' => array( &$this, 'input_callback' ),
|
137 |
+
'page' => $this->settings_key,
|
138 |
+
'section' => 'cloud_storage',
|
139 |
+
'type' => 'text',
|
140 |
+
'desc' => sprintf( __( 'Get your account from your Email It In %suser account%s.', $this->textdomain ), '<a href="https://www.emailitin.com/user_account">', '</a>' ),
|
141 |
+
'default' => ''
|
142 |
+
)
|
143 |
+
);
|
144 |
+
return $settings;
|
145 |
+
}
|
146 |
+
|
147 |
+
/**
|
148 |
+
* Adds all the different settings sections
|
149 |
+
*/
|
150 |
+
private function add_settings_sections() {
|
151 |
+
add_settings_section(
|
152 |
+
'email',
|
153 |
+
__( 'Email Options', $this->textdomain ),
|
154 |
+
array( &$this, 'email_desc_callback' ),
|
155 |
+
$this->settings_key
|
156 |
+
);
|
157 |
+
add_settings_section(
|
158 |
+
'cloud_storage',
|
159 |
+
__( 'Cloud Storage Options', $this->textdomain ),
|
160 |
+
array( &$this, 'cloud_storage_desc_callback' ),
|
161 |
+
$this->settings_key
|
162 |
+
);
|
163 |
+
}
|
164 |
+
|
165 |
+
public function email_desc_callback() { }
|
166 |
+
public function cloud_storage_desc_callback() { printf( __( 'Signup at %s to send invoices to your Dropbox, OneDrive, Google Drive or Egnyte and enter your account below.', $this->textdomain ), '<a href="https://emailitin.com">Email It In</a>' ); }
|
167 |
+
|
168 |
+
/**
|
169 |
+
* Adds settings fields
|
170 |
+
*/
|
171 |
+
private function add_settings_fields() {
|
172 |
+
$the_settings = $this->the_settings();
|
173 |
+
foreach ( $the_settings as $setting ) :
|
174 |
+
add_settings_field(
|
175 |
+
$setting['name'],
|
176 |
+
$setting['title'],
|
177 |
+
$setting['callback'],
|
178 |
+
$setting['page'],
|
179 |
+
$setting['section'],
|
180 |
+
$setting
|
181 |
+
);
|
182 |
+
endforeach;
|
183 |
+
}
|
184 |
+
|
185 |
+
/**
|
186 |
+
* Show all settings notices.
|
187 |
+
*/
|
188 |
+
public function show_settings_notices() {
|
189 |
+
settings_errors( $this->settings_key );
|
190 |
+
}
|
191 |
+
|
192 |
+
/**
|
193 |
+
* Validates all settings
|
194 |
+
* @param $input
|
195 |
+
* @return mixed|void
|
196 |
+
*/
|
197 |
+
public function validate_input( $input ) {
|
198 |
+
$output = array();
|
199 |
+
foreach ( $input as $key => $value ) :
|
200 |
+
if ( isset( $input[$key] ) ) :
|
201 |
+
// Strip all HTML and PHP tags and properly handle quoted strings
|
202 |
+
$output[$key] = stripslashes( $input[ $key ] );
|
203 |
+
endif;
|
204 |
+
endforeach;
|
205 |
+
|
206 |
+
// Sanitize Email
|
207 |
+
if ( isset( $input['email_it_in_account'] ) ) :
|
208 |
+
$output['email_it_in_account'] = sanitize_email( $input['email_it_in_account'] );
|
209 |
+
endif;
|
210 |
+
|
211 |
+
return apply_filters( 'validate_input', $output, $input );
|
212 |
+
}
|
213 |
+
}
|
214 |
+
}
|
admin/classes/bewpi-settings.php
ADDED
@@ -0,0 +1,174 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
if ( ! defined( 'ABSPATH' ) ) {
|
3 |
+
exit; // Exit if accessed directly
|
4 |
+
}
|
5 |
+
|
6 |
+
if ( ! class_exists( 'BEWPI_Settings' ) ) {
|
7 |
+
|
8 |
+
/**
|
9 |
+
* Abstract class with validation functions to validate all the template and general settings.
|
10 |
+
* Class BEWPI_Settings
|
11 |
+
*/
|
12 |
+
abstract class BEWPI_Settings {
|
13 |
+
|
14 |
+
/**
|
15 |
+
* The textdomain
|
16 |
+
* @var string
|
17 |
+
*/
|
18 |
+
public $textdomain = 'be-woocommerce-pdf-invoices';
|
19 |
+
|
20 |
+
/**
|
21 |
+
* Options and settings prefix
|
22 |
+
* @var string
|
23 |
+
*/
|
24 |
+
public $prefix = 'bewpi_';
|
25 |
+
|
26 |
+
/**
|
27 |
+
* For <textarea>.
|
28 |
+
* @var array
|
29 |
+
*/
|
30 |
+
private $allowed_tags = array('<b>', '<i>', '<br>', '<br/>');
|
31 |
+
|
32 |
+
/**
|
33 |
+
* Validates an email.
|
34 |
+
* @param $email
|
35 |
+
* @return bool
|
36 |
+
*/
|
37 |
+
protected function validate_email($email) {
|
38 |
+
return is_email(sanitize_email($email)) ? true : false;
|
39 |
+
}
|
40 |
+
|
41 |
+
/**
|
42 |
+
* Validates a string.
|
43 |
+
* @param $str
|
44 |
+
* @return bool
|
45 |
+
*/
|
46 |
+
protected function is_valid_str($str) {
|
47 |
+
return is_string(sanitize_text_field($str));
|
48 |
+
}
|
49 |
+
|
50 |
+
/**
|
51 |
+
* Validates an integer.
|
52 |
+
* @param $int
|
53 |
+
* @return bool
|
54 |
+
*/
|
55 |
+
protected function is_valid_int($int) {
|
56 |
+
return intval($int) && absint($int);
|
57 |
+
}
|
58 |
+
|
59 |
+
/**
|
60 |
+
* Validates a textarea.
|
61 |
+
* @param $str
|
62 |
+
* @return bool
|
63 |
+
*/
|
64 |
+
protected function strip_str( $str ) {
|
65 |
+
$str = preg_replace("/<([a-z][a-z0-9]*)[^>]*?(\/?)>/i", '<$1$2>', $str); // Removes the attributes in the HTML tags
|
66 |
+
return strip_tags($str, '<b><i><br><br/>');
|
67 |
+
}
|
68 |
+
|
69 |
+
/**
|
70 |
+
* Check for a valid hex color string like '#c1c2b4'
|
71 |
+
* @param $hex
|
72 |
+
*/
|
73 |
+
protected function is_valid_hex_color($hex)
|
74 |
+
{
|
75 |
+
$valid = false;
|
76 |
+
if (preg_match('/^#[a-f0-9]{6}$/i', $hex)) {
|
77 |
+
return true;
|
78 |
+
} else if (preg_match('/^[a-f0-9]{6}$/i', $hex)) { // Check for a hex color string without hash like 'c1c2b4'
|
79 |
+
return '#' . $hex;
|
80 |
+
}
|
81 |
+
return false;
|
82 |
+
}
|
83 |
+
|
84 |
+
/**
|
85 |
+
* Gets all the tags that are allowed to use for the textarea's.
|
86 |
+
* @return string|void
|
87 |
+
*/
|
88 |
+
protected function get_allowed_tags_str() {
|
89 |
+
( count( $this->allowed_tags ) > 0 ) ? $str = __('Feel free to use ', $this->textdomain) : $str = '';
|
90 |
+
foreach ($this->allowed_tags as $i => $tag) {
|
91 |
+
($i == count($this->allowed_tags) - 1) ? $str .= sprintf('<b>%s</b>.', htmlspecialchars( $tag ) ) : $str .= sprintf('<b>%s</b> ', htmlspecialchars( $tag ) );
|
92 |
+
}
|
93 |
+
return $str;
|
94 |
+
}
|
95 |
+
|
96 |
+
public function select_callback( $args ) {
|
97 |
+
$options = get_option( $args['page'] );
|
98 |
+
?>
|
99 |
+
<select id="<?php echo $args['id']; ?>" name="<?php echo $args['page'] . '[' .$args['name'] . ']'; ?>">
|
100 |
+
<?php
|
101 |
+
foreach ( $args['options'] as $option ) :
|
102 |
+
?>
|
103 |
+
<option value="<?php echo $option['value']; ?>" <?php selected( $options[ $args['name'] ], $option['value'] ); ?>><?php echo $option['name']; ?></option>
|
104 |
+
<?php
|
105 |
+
endforeach;
|
106 |
+
?>
|
107 |
+
</select>
|
108 |
+
<div class="bewpi-notes"><?php echo $args['desc']; ?></div>
|
109 |
+
<?php
|
110 |
+
}
|
111 |
+
|
112 |
+
public function input_callback( $args ) {
|
113 |
+
$options = get_option( $args['page'] );
|
114 |
+
$class = ( isset( $args['class'] ) ) ? $args['class'] : "bewpi-notes";
|
115 |
+
?>
|
116 |
+
<input id="<?php echo $args['id']; ?>"
|
117 |
+
name="<?php echo $args['page'] . '[' .$args['name'] . ']'; ?>"
|
118 |
+
type="<?php echo $args['type']; ?>"
|
119 |
+
value="<?php if ( $args['type'] === "checkbox" ) { echo 1; } else { echo $options[ $args['name'] ]; } ?>"
|
120 |
+
<?php if ( $args['type'] === "checkbox" ) checked( $options[ $args['name'] ] ); ?>
|
121 |
+
<?php
|
122 |
+
if ( isset ( $args['attrs'] ) ) :
|
123 |
+
foreach ( $args['attrs'] as $attr ) :
|
124 |
+
echo $attr;
|
125 |
+
endforeach;
|
126 |
+
endif;
|
127 |
+
?>
|
128 |
+
/>
|
129 |
+
<?php if ( $args['type'] === "checkbox" ) { ?>
|
130 |
+
<label class="<?php echo $class; ?>"><?php echo $args['desc']; ?></label>
|
131 |
+
<?php } else { ?>
|
132 |
+
<div class="<?php echo $class; ?>"><?php echo $args['desc']; ?></div>
|
133 |
+
<?php } ?>
|
134 |
+
<?php
|
135 |
+
}
|
136 |
+
|
137 |
+
public function logo_callback( $args ) {
|
138 |
+
$options = get_option( $args['page'] );
|
139 |
+
?>
|
140 |
+
<input id="<?php echo $args['id']; ?>"
|
141 |
+
name="<?php echo $args['name']; ?>"
|
142 |
+
type="<?php echo $args['type']; ?>"
|
143 |
+
accept="image/*"
|
144 |
+
/>
|
145 |
+
<div class="bewpi-notes"><?php echo $args['desc']; ?></div>
|
146 |
+
<input id="<?php echo $args['id'] . '-value'; ?>"
|
147 |
+
name="<?php echo $args['name']; ?>"
|
148 |
+
type="hidden"
|
149 |
+
value="<?php echo $options[ $args['name'] ]; ?>"
|
150 |
+
/>
|
151 |
+
|
152 |
+
<?php
|
153 |
+
if ( !empty( $options[$args['name']] ) ) :
|
154 |
+
?>
|
155 |
+
<div id="<?php echo $args['id'] . '-wrapper'; ?>">
|
156 |
+
<img id="<?php echo $args['id'] . '-image'; ?>" src="<?php echo esc_attr( $options[$args['name']] ); ?>" />
|
157 |
+
<img id="<?php echo $args['id'] . '-delete'; ?>" src="<?php echo BEWPI_URL . '/assets/img/delete-icon.png'; ?>" onclick="Settings.removeCompanyLogo()" title="<?php _e( 'Remove logo', $this->textdomain ); ?>"/>
|
158 |
+
</div>
|
159 |
+
<?php
|
160 |
+
endif;
|
161 |
+
}
|
162 |
+
|
163 |
+
public function textarea_callback( $args ) {
|
164 |
+
$options = get_option( $args['page'] );
|
165 |
+
?>
|
166 |
+
<textarea id="<?php echo $args['id']; ?>"
|
167 |
+
name="<?php echo $args['page'] . '[' .$args['name'] . ']'; ?>"
|
168 |
+
rows="5"
|
169 |
+
><?php echo esc_textarea( $options[$args['name']] ); ?></textarea>
|
170 |
+
<div class="bewpi-notes"><?php echo $args['desc']; ?></div>
|
171 |
+
<?php
|
172 |
+
}
|
173 |
+
}
|
174 |
+
}
|
admin/classes/bewpi-template-settings.php
ADDED
@@ -0,0 +1,535 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
if ( ! defined( 'ABSPATH' ) ) {
|
3 |
+
exit; // Exit if accessed directly
|
4 |
+
}
|
5 |
+
|
6 |
+
if ( ! class_exists( 'BEWPI_Template_Settings' ) ) {
|
7 |
+
|
8 |
+
/**
|
9 |
+
* Implements the template settings.
|
10 |
+
*/
|
11 |
+
class BEWPI_Template_Settings extends BEWPI_Settings {
|
12 |
+
|
13 |
+
/**
|
14 |
+
* Constant template settings key
|
15 |
+
* @var string
|
16 |
+
*/
|
17 |
+
private $settings_key = 'bewpi_template_settings';
|
18 |
+
|
19 |
+
/**
|
20 |
+
* Initializes the template settings.
|
21 |
+
*/
|
22 |
+
public function __construct() {
|
23 |
+
/**
|
24 |
+
* Loads all the template settings.
|
25 |
+
*/
|
26 |
+
add_action( 'init', array( &$this, 'load_settings' ) );
|
27 |
+
|
28 |
+
/**
|
29 |
+
* Register all template settings.
|
30 |
+
*/
|
31 |
+
add_action( 'admin_init', array( &$this, 'create_settings' ) );
|
32 |
+
|
33 |
+
/**
|
34 |
+
* Displays all messages registered to 'template_settings'
|
35 |
+
*/
|
36 |
+
add_action( 'admin_notices', array( &$this, 'show_settings_notices' ) );
|
37 |
+
}
|
38 |
+
|
39 |
+
/**
|
40 |
+
* Load all settings into settings var and merge with defaults.
|
41 |
+
*/
|
42 |
+
public function load_settings() {
|
43 |
+
$defaults = $this->get_defaults();
|
44 |
+
$defaults['bewpi_settings_key'] = $this->settings_key;
|
45 |
+
$defaults['bewpi_last_invoice_number'] = 1;
|
46 |
+
$options = (array) get_option( $this->settings_key );
|
47 |
+
$options = array_merge( $defaults, $options );
|
48 |
+
update_option( $this->settings_key, $options );
|
49 |
+
}
|
50 |
+
|
51 |
+
/**
|
52 |
+
* Gets all default settings values from the settings array.
|
53 |
+
* @return array
|
54 |
+
*/
|
55 |
+
private function get_defaults() {
|
56 |
+
$defaults = array();
|
57 |
+
foreach ( $this->the_settings() as $setting ) :
|
58 |
+
$defaults[ $setting['name'] ] = $setting['default'];
|
59 |
+
endforeach;
|
60 |
+
return $defaults;
|
61 |
+
}
|
62 |
+
|
63 |
+
/**
|
64 |
+
* Register all settings fields.
|
65 |
+
*/
|
66 |
+
public function create_settings() {
|
67 |
+
$this->add_settings_sections();
|
68 |
+
register_setting(
|
69 |
+
$this->settings_key,
|
70 |
+
$this->settings_key,
|
71 |
+
array( &$this, 'validate_input' )
|
72 |
+
);
|
73 |
+
$this->add_settings_fields();
|
74 |
+
}
|
75 |
+
|
76 |
+
/**
|
77 |
+
* The settings array.
|
78 |
+
* @return array
|
79 |
+
*/
|
80 |
+
private function the_settings() {
|
81 |
+
$settings = array(
|
82 |
+
// General section
|
83 |
+
array(
|
84 |
+
'id' => 'bewpi-template-filename',
|
85 |
+
'name' => $this->prefix . 'template_filename',
|
86 |
+
'title' => __( 'Template', $this->textdomain ),
|
87 |
+
'callback' => array( &$this, 'select_callback' ),
|
88 |
+
'page' => $this->settings_key,
|
89 |
+
'section' => 'general',
|
90 |
+
'type' => 'text',
|
91 |
+
'desc' => '',
|
92 |
+
'options' => array(
|
93 |
+
array(
|
94 |
+
'id' => 1,
|
95 |
+
'name' => 'Micro',
|
96 |
+
'value' => 'invoice-micro.php'
|
97 |
+
)
|
98 |
+
),
|
99 |
+
'default' => 'invoice-micro.php'
|
100 |
+
),
|
101 |
+
array(
|
102 |
+
'id' => 'bewpi-color-theme',
|
103 |
+
'name' => $this->prefix . 'color_theme',
|
104 |
+
'title' => __( 'Color theme', $this->textdomain ),
|
105 |
+
'callback' => array( &$this, 'input_callback' ),
|
106 |
+
'page' => $this->settings_key,
|
107 |
+
'section' => 'general',
|
108 |
+
'type' => 'color',
|
109 |
+
'desc' => '',
|
110 |
+
'default' => '#11B0E7'
|
111 |
+
),
|
112 |
+
array(
|
113 |
+
'id' => 'bewpi-date-format',
|
114 |
+
'name' => $this->prefix . 'date_format',
|
115 |
+
'title' => __( 'Date format', $this->textdomain ),
|
116 |
+
'callback' => array( &$this, 'input_callback' ),
|
117 |
+
'page' => $this->settings_key,
|
118 |
+
'section' => 'general',
|
119 |
+
'type' => 'text',
|
120 |
+
'desc' => sprintf( __( '%sFormat%s of invoice date and order date.', $this->textdomain ),
|
121 |
+
'<a href="http://php.net/manual/en/datetime.formats.date.php">', '</a>' ), // F jS Y or d.m.y or d-m-Y
|
122 |
+
'default' => 'd-m-Y',
|
123 |
+
'attrs' => array(
|
124 |
+
'required'
|
125 |
+
)
|
126 |
+
),
|
127 |
+
// Header section
|
128 |
+
array(
|
129 |
+
'id' => 'bewpi-company-name',
|
130 |
+
'name' => $this->prefix . 'company_name',
|
131 |
+
'title' => __( 'Company name', $this->textdomain ),
|
132 |
+
'callback' => array( &$this, 'input_callback' ),
|
133 |
+
'page' => $this->settings_key,
|
134 |
+
'section' => 'header',
|
135 |
+
'type' => 'text',
|
136 |
+
'desc' => '',
|
137 |
+
'default' => ''
|
138 |
+
),
|
139 |
+
array(
|
140 |
+
'id' => 'bewpi-company-logo',
|
141 |
+
'name' => $this->prefix . 'company_logo',
|
142 |
+
'title' => __( 'Company logo', $this->textdomain ),
|
143 |
+
'callback' => array( &$this, 'logo_callback' ),
|
144 |
+
'page' => $this->settings_key,
|
145 |
+
'section' => 'header',
|
146 |
+
'type' => 'file',
|
147 |
+
'desc' => '',
|
148 |
+
'default' => ''
|
149 |
+
),
|
150 |
+
array(
|
151 |
+
'id' => 'bewpi-company-address',
|
152 |
+
'name' => $this->prefix . 'company_address',
|
153 |
+
'title' => __( 'Company address', $this->textdomain ),
|
154 |
+
'callback' => array( &$this, 'textarea_callback' ),
|
155 |
+
'page' => $this->settings_key,
|
156 |
+
'section' => 'header',
|
157 |
+
'type' => 'text',
|
158 |
+
'desc' => '',
|
159 |
+
'default' => ''
|
160 |
+
),
|
161 |
+
array(
|
162 |
+
'id' => 'bewpi-company-details',
|
163 |
+
'name' => $this->prefix . 'company_details',
|
164 |
+
'title' => __( 'Company details', $this->textdomain ),
|
165 |
+
'callback' => array( &$this, 'textarea_callback' ),
|
166 |
+
'page' => $this->settings_key,
|
167 |
+
'section' => 'header',
|
168 |
+
'type' => 'text',
|
169 |
+
'desc' => '',
|
170 |
+
'default' => ''
|
171 |
+
),
|
172 |
+
array(
|
173 |
+
'id' => 'bewpi-intro-text',
|
174 |
+
'name' => $this->prefix . 'intro_text',
|
175 |
+
'title' => __( 'Intro text', $this->textdomain ),
|
176 |
+
'callback' => array( &$this, 'textarea_callback' ),
|
177 |
+
'page' => $this->settings_key,
|
178 |
+
'section' => 'header',
|
179 |
+
'type' => 'text',
|
180 |
+
'desc' => '',
|
181 |
+
'default' => ''
|
182 |
+
),
|
183 |
+
// Footer section
|
184 |
+
array(
|
185 |
+
'id' => 'bewpi-terms',
|
186 |
+
'name' => $this->prefix . 'terms',
|
187 |
+
'title' => __( 'Terms & conditions, policies etc.', $this->textdomain ),
|
188 |
+
'callback' => array( &$this, 'textarea_callback' ),
|
189 |
+
'page' => $this->settings_key,
|
190 |
+
'section' => 'footer',
|
191 |
+
'type' => 'text',
|
192 |
+
'desc' => '',
|
193 |
+
'default' => ''
|
194 |
+
),
|
195 |
+
array(
|
196 |
+
'id' => 'bewpi-show-customer-notes',
|
197 |
+
'name' => $this->prefix . 'show_customer_notes',
|
198 |
+
'title' => '',
|
199 |
+
'callback' => array( &$this, 'input_callback' ),
|
200 |
+
'page' => $this->settings_key,
|
201 |
+
'section' => 'footer',
|
202 |
+
'type' => 'checkbox',
|
203 |
+
'desc' => 'Show customer notes',
|
204 |
+
'class' => 'bewpi-customer-notes-option-title',
|
205 |
+
'default' => 1
|
206 |
+
),
|
207 |
+
// Invoice number section
|
208 |
+
array(
|
209 |
+
'id' => 'bewpi-invoice-number-type',
|
210 |
+
'name' => $this->prefix . 'invoice_number_type',
|
211 |
+
'title' => __( 'Type', $this->textdomain ),
|
212 |
+
'callback' => array( &$this, 'select_callback' ),
|
213 |
+
'page' => $this->settings_key,
|
214 |
+
'section' => 'invoice_number',
|
215 |
+
'type' => 'text',
|
216 |
+
'desc' => '',
|
217 |
+
'options' => array(
|
218 |
+
array(
|
219 |
+
'name' => __( 'WooCommerce order number', $this->textdomain ),
|
220 |
+
'value' => 'woocommerce_order_number'
|
221 |
+
),
|
222 |
+
array(
|
223 |
+
'name' => __( 'Sequential number', $this->textdomain ),
|
224 |
+
'value' => 'sequential_number'
|
225 |
+
)
|
226 |
+
),
|
227 |
+
'default' => 'woocommerce_order_number'
|
228 |
+
),
|
229 |
+
array(
|
230 |
+
'id' => 'bewpi-reset-counter',
|
231 |
+
'name' => $this->prefix . 'reset_counter',
|
232 |
+
'title' => '',
|
233 |
+
'callback' => array( &$this, 'input_callback' ),
|
234 |
+
'page' => $this->settings_key,
|
235 |
+
'section' => 'invoice_number',
|
236 |
+
'type' => 'checkbox',
|
237 |
+
'desc' => 'Reset invoice counter',
|
238 |
+
'class' => 'bewpi-reset-counter-option-title',
|
239 |
+
'default' => 0,
|
240 |
+
'attrs' => array(
|
241 |
+
'onchange="Settings.enableDisableNextInvoiceNumbering(this)"'
|
242 |
+
)
|
243 |
+
),
|
244 |
+
array(
|
245 |
+
'id' => 'bewpi-next-invoice-number',
|
246 |
+
'name' => $this->prefix . 'next_invoice_number',
|
247 |
+
'title' => __( 'Next', $this->textdomain ),
|
248 |
+
'callback' => array( &$this, 'input_callback' ),
|
249 |
+
'page' => $this->settings_key,
|
250 |
+
'section' => 'invoice_number',
|
251 |
+
'type' => 'number',
|
252 |
+
'desc' => sprintf( __( 'Reset the invoice counter and start with next invoice number. %s %sNote:%s Only available with sequential numbering type and you need to check the checkbox to actually reset the value.', $this->textdomain ), '<br/>', '<b>', '</b>' ),
|
253 |
+
'default' => '',
|
254 |
+
'attrs' => array(
|
255 |
+
'disabled'
|
256 |
+
)
|
257 |
+
),
|
258 |
+
array(
|
259 |
+
'id' => 'bewpi-invoice-number-digits',
|
260 |
+
'name' => $this->prefix . 'invoice_number_digits',
|
261 |
+
'title' => __( 'Digits', $this->textdomain ),
|
262 |
+
'callback' => array( &$this, 'input_callback' ),
|
263 |
+
'page' => $this->settings_key,
|
264 |
+
'section' => 'invoice_number',
|
265 |
+
'type' => 'number',
|
266 |
+
'desc' => '',
|
267 |
+
'default' => 3,
|
268 |
+
'attrs' => array(
|
269 |
+
'min="3"',
|
270 |
+
'max="6"',
|
271 |
+
'required'
|
272 |
+
)
|
273 |
+
),
|
274 |
+
array(
|
275 |
+
'id' => 'bewpi-invoice-number-prefix',
|
276 |
+
'name' => $this->prefix . 'invoice_number_prefix',
|
277 |
+
'title' => __( '[prefix]', $this->textdomain ),
|
278 |
+
'callback' => array( &$this, 'input_callback' ),
|
279 |
+
'page' => $this->settings_key,
|
280 |
+
'section' => 'invoice_number',
|
281 |
+
'type' => 'text',
|
282 |
+
'desc' => '',
|
283 |
+
'default' => ''
|
284 |
+
),
|
285 |
+
array(
|
286 |
+
'id' => 'bewpi-invoice-number-suffix',
|
287 |
+
'name' => $this->prefix . 'invoice_number_suffix',
|
288 |
+
'title' => __( '[suffix]', $this->textdomain ),
|
289 |
+
'callback' => array( &$this, 'input_callback' ),
|
290 |
+
'page' => $this->settings_key,
|
291 |
+
'section' => 'invoice_number',
|
292 |
+
'type' => 'text',
|
293 |
+
'desc' => '',
|
294 |
+
'default' => ''
|
295 |
+
),
|
296 |
+
array(
|
297 |
+
'id' => 'bewpi-invoice-number-format',
|
298 |
+
'name' => $this->prefix . 'invoice_number_format',
|
299 |
+
'title' => __( 'Format', $this->textdomain ),
|
300 |
+
'callback' => array( &$this, 'input_callback' ),
|
301 |
+
'page' => $this->settings_key,
|
302 |
+
'section' => 'invoice_number',
|
303 |
+
'type' => 'text',
|
304 |
+
'desc' => sprintf( __( 'Feel free to use the placeholders %s %s %s %s and %s. %s %sNote:%s %s is required.', $this->textdomain ), '<b>[prefix]</b>', '<b>[suffix]</b>', '<b>[number]</b>', '<b>[Y]</b>', '<b>[y]</b>', '<br/>', '<b>', '</b>', '<b>[number]</b>' ),
|
305 |
+
'default' => '[number]-[Y]',
|
306 |
+
'attrs' => array(
|
307 |
+
'required'
|
308 |
+
)
|
309 |
+
),
|
310 |
+
array(
|
311 |
+
'id' => 'bewpi-reset-counter-yearly',
|
312 |
+
'name' => $this->prefix . 'reset_counter_yearly',
|
313 |
+
'title' => '',
|
314 |
+
'callback' => array( &$this, 'input_callback' ),
|
315 |
+
'page' => $this->settings_key,
|
316 |
+
'section' => 'invoice_number',
|
317 |
+
'type' => 'checkbox',
|
318 |
+
'desc' => 'Reset on 1st of january',
|
319 |
+
'class' => 'bewpi-reset-counter-yearly-option-title',
|
320 |
+
'default' => 1
|
321 |
+
),
|
322 |
+
// Visible columns section
|
323 |
+
array(
|
324 |
+
'id' => 'bewpi-show-sku',
|
325 |
+
'name' => $this->prefix . 'show_sku',
|
326 |
+
'title' => '',
|
327 |
+
'callback' => array( &$this, 'input_callback' ),
|
328 |
+
'page' => $this->settings_key,
|
329 |
+
'section' => 'visible_columns',
|
330 |
+
'type' => 'checkbox',
|
331 |
+
'desc' => 'SKU',
|
332 |
+
'class' => 'bewpi-visible-columns-option-title',
|
333 |
+
'default' => 0
|
334 |
+
),
|
335 |
+
array(
|
336 |
+
'id' => 'bewpi-show-subtotal',
|
337 |
+
'name' => $this->prefix . 'show_subtotal',
|
338 |
+
'title' => '',
|
339 |
+
'callback' => array( &$this, 'input_callback' ),
|
340 |
+
'page' => $this->settings_key,
|
341 |
+
'section' => 'visible_columns',
|
342 |
+
'type' => 'checkbox',
|
343 |
+
'desc' => 'Subtotal',
|
344 |
+
'class' => 'bewpi-visible-columns-option-title',
|
345 |
+
'default' => 1
|
346 |
+
),
|
347 |
+
array(
|
348 |
+
'id' => 'bewpi-show-tax',
|
349 |
+
'name' => $this->prefix . 'show_tax',
|
350 |
+
'title' => '',
|
351 |
+
'callback' => array( &$this, 'input_callback' ),
|
352 |
+
'page' => $this->settings_key,
|
353 |
+
'section' => 'visible_columns',
|
354 |
+
'type' => 'checkbox',
|
355 |
+
'desc' => 'Tax',
|
356 |
+
'class' => 'bewpi-visible-columns-option-title',
|
357 |
+
'default' => 1
|
358 |
+
),
|
359 |
+
array(
|
360 |
+
'id' => 'bewpi-show-discount',
|
361 |
+
'name' => $this->prefix . 'show_discount',
|
362 |
+
'title' => '',
|
363 |
+
'callback' => array( &$this, 'input_callback' ),
|
364 |
+
'page' => $this->settings_key,
|
365 |
+
'section' => 'visible_columns',
|
366 |
+
'type' => 'checkbox',
|
367 |
+
'desc' => 'Discount',
|
368 |
+
'class' => 'bewpi-visible-columns-option-title',
|
369 |
+
'default' => 1
|
370 |
+
),
|
371 |
+
array(
|
372 |
+
'id' => 'bewpi-show-shipping',
|
373 |
+
'name' => $this->prefix . 'show_shipping',
|
374 |
+
'title' => '',
|
375 |
+
'callback' => array( &$this, 'input_callback' ),
|
376 |
+
'page' => $this->settings_key,
|
377 |
+
'section' => 'visible_columns',
|
378 |
+
'type' => 'checkbox',
|
379 |
+
'desc' => 'Shipping',
|
380 |
+
'class' => 'bewpi-visible-columns-option-title',
|
381 |
+
'default' => 1
|
382 |
+
)
|
383 |
+
);
|
384 |
+
return $settings;
|
385 |
+
}
|
386 |
+
|
387 |
+
/**
|
388 |
+
* Adds all the different settings sections.
|
389 |
+
*/
|
390 |
+
private function add_settings_sections() {
|
391 |
+
add_settings_section(
|
392 |
+
'general',
|
393 |
+
__( 'General Options', $this->textdomain ),
|
394 |
+
array( &$this, 'general_desc_callback' ),
|
395 |
+
$this->settings_key
|
396 |
+
);
|
397 |
+
add_settings_section(
|
398 |
+
'invoice_number',
|
399 |
+
__( 'Invoice Number Options', $this->textdomain ),
|
400 |
+
array( &$this, 'invoice_number_desc_callback' ),
|
401 |
+
$this->settings_key
|
402 |
+
);
|
403 |
+
add_settings_section(
|
404 |
+
'header',
|
405 |
+
__( 'Header Options', $this->textdomain ),
|
406 |
+
array( &$this, 'header_desc_callback' ),
|
407 |
+
$this->settings_key
|
408 |
+
);
|
409 |
+
add_settings_section(
|
410 |
+
'footer',
|
411 |
+
__( 'Footer Options', $this->textdomain ),
|
412 |
+
array( &$this, 'footer_desc_callback' ),
|
413 |
+
$this->settings_key
|
414 |
+
);
|
415 |
+
add_settings_section(
|
416 |
+
'visible_columns',
|
417 |
+
__( 'Visible Columns', $this->textdomain ),
|
418 |
+
array( &$this, 'visible_columns_desc_callback' ),
|
419 |
+
$this->settings_key
|
420 |
+
);
|
421 |
+
}
|
422 |
+
|
423 |
+
public function general_desc_callback() { _e( 'These are the general template options.', $this->textdomain ); }
|
424 |
+
public function invoice_number_desc_callback() { _e( 'These are the invoice number options.', $this->textdomain ); }
|
425 |
+
public function header_desc_callback() { _e( 'The header will be visible on every page. ' . $this->get_allowed_tags_str(), $this->textdomain ); }
|
426 |
+
public function footer_desc_callback() { _e( 'The footer will be visible on every page. ' . $this->get_allowed_tags_str(), $this->textdomain ); }
|
427 |
+
public function visible_columns_desc_callback() { _e( 'Enable or disable the columns.', $this->textdomain ); }
|
428 |
+
|
429 |
+
/**
|
430 |
+
* Adds all settings fields.
|
431 |
+
*/
|
432 |
+
private function add_settings_fields() {
|
433 |
+
$the_settings = $this->the_settings();
|
434 |
+
foreach ( $the_settings as $setting ) :
|
435 |
+
add_settings_field(
|
436 |
+
$setting['name'],
|
437 |
+
$setting['title'],
|
438 |
+
$setting['callback'],
|
439 |
+
$setting['page'],
|
440 |
+
$setting['section'],
|
441 |
+
$setting
|
442 |
+
);
|
443 |
+
endforeach;
|
444 |
+
}
|
445 |
+
|
446 |
+
/**
|
447 |
+
* Show all settings notices.
|
448 |
+
*/
|
449 |
+
public function show_settings_notices() {
|
450 |
+
settings_errors( $this->settings_key );
|
451 |
+
}
|
452 |
+
|
453 |
+
/**
|
454 |
+
* @param $input
|
455 |
+
* Validate all settings
|
456 |
+
* @return mixed|void
|
457 |
+
*/
|
458 |
+
public function validate_input( $input ) {
|
459 |
+
$output = array();
|
460 |
+
$template_options = get_option( $this->settings_key );
|
461 |
+
$the_settings = $this->the_settings();
|
462 |
+
|
463 |
+
// Uncheck checkboxes
|
464 |
+
foreach ( $the_settings as $setting ) :
|
465 |
+
if ( $setting['type'] === 'checkbox' && ! isset( $input[ $setting['name'] ] ) ) :
|
466 |
+
// Checkbox is unchecked
|
467 |
+
$output[ $setting['name'] ] = 0;
|
468 |
+
endif;
|
469 |
+
endforeach;
|
470 |
+
|
471 |
+
// Strip strings
|
472 |
+
foreach( $input as $key => $value ) :
|
473 |
+
if( isset( $input[$key] ) ) :
|
474 |
+
// Strip all HTML and PHP tags and properly handle quoted strings
|
475 |
+
$output[$key] = $this->strip_str( stripslashes( $input[ $key ] ) );
|
476 |
+
endif;
|
477 |
+
endforeach;
|
478 |
+
|
479 |
+
// File upload -- Company logo
|
480 |
+
if ( isset( $input['bewpi_company_logo'] ) )
|
481 |
+
$output['bewpi_company_logo'] = $input['bewpi_company_logo'];
|
482 |
+
|
483 |
+
if ( isset( $_FILES['bewpi_company_logo'] ) && $_FILES['bewpi_company_logo']['error'] == 0 ) {
|
484 |
+
$file = $_FILES['bewpi_company_logo'];
|
485 |
+
if ( $file['size'] <= 200000 ) {
|
486 |
+
$override = array( 'test_form' => false );
|
487 |
+
$company_logo = wp_handle_upload( $file, $override );
|
488 |
+
$validate_file_code = validate_file( $company_logo['url'] );
|
489 |
+
if ( $validate_file_code === 0 ) {
|
490 |
+
$output['bewpi_company_logo'] = $company_logo['url'];
|
491 |
+
} else {
|
492 |
+
switch ( $validate_file_code ) {
|
493 |
+
case 1:
|
494 |
+
add_settings_error(
|
495 |
+
esc_attr( $this->settings_key ),
|
496 |
+
'file-invalid-2',
|
497 |
+
__( 'File is invalid and contains either \'..\' or \'./\'.', $this->textdomain )
|
498 |
+
);
|
499 |
+
break;
|
500 |
+
case 2:
|
501 |
+
add_settings_error(
|
502 |
+
esc_attr( $this->settings_key ),
|
503 |
+
'file-invalid-3',
|
504 |
+
__( 'File is invalid and contains \':\' after the first character.', $this->textdomain )
|
505 |
+
);
|
506 |
+
break;
|
507 |
+
}
|
508 |
+
}
|
509 |
+
} else {
|
510 |
+
add_settings_error(
|
511 |
+
esc_attr( $this->settings_key ),
|
512 |
+
'file-invalid-1',
|
513 |
+
__( 'File should be less then 2MB.', $this->textdomain )
|
514 |
+
);
|
515 |
+
}
|
516 |
+
} else if ( isset( $_POST['bewpi_company_logo'] ) && !empty( $_POST['bewpi_company_logo'] ) ) {
|
517 |
+
$output['bewpi_company_logo'] = $_POST['bewpi_company_logo'];
|
518 |
+
}
|
519 |
+
|
520 |
+
// Invoice number
|
521 |
+
if ( !isset( $input['bewpi_next_invoice_number'] ) ) {
|
522 |
+
// Reset the next invoice number so it's visible in the disabled input field.
|
523 |
+
$output['bewpi_next_invoice_number'] = $template_options['bewpi_next_invoice_number'];
|
524 |
+
}
|
525 |
+
|
526 |
+
// We don't want to loose the invoice counter value
|
527 |
+
if ( ! empty( $template_options['bewpi_last_invoice_number'] ) ) {
|
528 |
+
$output['bewpi_last_invoice_number'] = $template_options['bewpi_last_invoice_number'];
|
529 |
+
}
|
530 |
+
|
531 |
+
// Return the array processing any additional functions filtered by this action
|
532 |
+
return apply_filters( 'validate_input', $output, $input );
|
533 |
+
}
|
534 |
+
}
|
535 |
+
}
|
admin/classes/woocommerce-pdf-invoices.php
DELETED
@@ -1,339 +0,0 @@
|
|
1 |
-
<?php
|
2 |
-
if ( ! defined( 'ABSPATH' ) ) {
|
3 |
-
exit; // Exit if accessed directly
|
4 |
-
}
|
5 |
-
|
6 |
-
if ( ! class_exists( 'BE_WooCommerce_PDF_Invoices' ) ) {
|
7 |
-
|
8 |
-
/**
|
9 |
-
* Implements main function for attaching invoice to email and show invoice buttons.
|
10 |
-
*/
|
11 |
-
class BE_WooCommerce_PDF_Invoices {
|
12 |
-
|
13 |
-
/**
|
14 |
-
* All general user settings
|
15 |
-
* @var array
|
16 |
-
*/
|
17 |
-
public $general_settings;
|
18 |
-
|
19 |
-
/**
|
20 |
-
* All template user settings
|
21 |
-
* @var array
|
22 |
-
*/
|
23 |
-
public $template_settings;
|
24 |
-
|
25 |
-
/**
|
26 |
-
* Constant options key
|
27 |
-
* @var string
|
28 |
-
*/
|
29 |
-
private $options_key = 'wpi-invoices';
|
30 |
-
|
31 |
-
/**
|
32 |
-
* All the settings tabs for the settings page.
|
33 |
-
* @var array
|
34 |
-
*/
|
35 |
-
private $settings_tabs = array(
|
36 |
-
'general_settings' => 'General',
|
37 |
-
'template_settings' => 'Template'
|
38 |
-
);
|
39 |
-
|
40 |
-
/**
|
41 |
-
* Default textdomain.
|
42 |
-
* @var string
|
43 |
-
*/
|
44 |
-
private $textdomain = 'be-woocommerce-pdf-invoices';
|
45 |
-
|
46 |
-
/**
|
47 |
-
* Initialize plugin and register actions and filters.
|
48 |
-
*
|
49 |
-
* @param $general_settings
|
50 |
-
* @param $template_settings
|
51 |
-
*/
|
52 |
-
public function __construct($general_settings, $template_settings) {
|
53 |
-
|
54 |
-
$this->general_settings = $general_settings;
|
55 |
-
|
56 |
-
$this->template_settings = $template_settings;
|
57 |
-
|
58 |
-
/**
|
59 |
-
* Set textdomain.
|
60 |
-
*/
|
61 |
-
add_action( 'init', array( &$this, 'init_load_textdomain' ) );
|
62 |
-
|
63 |
-
/**
|
64 |
-
* Plugin actions to create, view or delete invoice.
|
65 |
-
*/
|
66 |
-
add_action( 'init', array( &$this, 'init_plugin_actions' ) );
|
67 |
-
|
68 |
-
/**
|
69 |
-
* Initialize all the ajax calls.
|
70 |
-
*/
|
71 |
-
//add_action( 'init', array( &$this, 'init_ajax_calls' ) );
|
72 |
-
|
73 |
-
/**
|
74 |
-
* Delete invoices from tmp folder.
|
75 |
-
*/
|
76 |
-
//add_action( 'admin_init', array( &$this, 'delete_pdf_invoices' ) );
|
77 |
-
|
78 |
-
/**
|
79 |
-
* Adds submenu to WooCommerce menu.
|
80 |
-
*/
|
81 |
-
add_action( 'admin_menu', array( &$this, 'add_woocommerce_submenu_page' ) );
|
82 |
-
|
83 |
-
/**
|
84 |
-
* Enqueue admin scripts
|
85 |
-
*/
|
86 |
-
add_action( 'admin_enqueue_scripts', array( &$this, 'admin_enqueue_scripts' ) );
|
87 |
-
|
88 |
-
/**
|
89 |
-
* Adds the Email It In email as an extra recipient
|
90 |
-
*/
|
91 |
-
add_filter( 'woocommerce_email_headers', array( &$this, 'add_recipient_to_email_headers' ), 10, 2 );
|
92 |
-
|
93 |
-
/**
|
94 |
-
* Attach invoice to a specific WooCommerce email
|
95 |
-
*/
|
96 |
-
add_filter( 'woocommerce_email_attachments', array( &$this, 'attach_invoice_to_email' ), 99, 3 );
|
97 |
-
|
98 |
-
/**
|
99 |
-
* Adds some actions to the all orders page.
|
100 |
-
*/
|
101 |
-
add_action( 'woocommerce_admin_order_actions_end', array( &$this, 'woocommerce_order_page_action_view_invoice' ) );
|
102 |
-
|
103 |
-
/**
|
104 |
-
* Adds a meta box to the order details page.
|
105 |
-
*/
|
106 |
-
add_action( 'add_meta_boxes', array( &$this, 'add_meta_box_to_order_page' ) );
|
107 |
-
}
|
108 |
-
|
109 |
-
/**
|
110 |
-
* Callback to sniff for specific plugin actions to view, create or delete invoice.
|
111 |
-
*/
|
112 |
-
public function init_plugin_actions() {
|
113 |
-
if( isset( $_GET['wpi_action'] ) && isset( $_GET['post'] ) && is_numeric( $_GET['post'] ) && isset( $_GET['nonce'] ) ) {
|
114 |
-
$action = $_GET['wpi_action'];
|
115 |
-
$order_id = $_GET['post'];
|
116 |
-
$nonce = $_REQUEST["nonce"];
|
117 |
-
|
118 |
-
if (!wp_verify_nonce($nonce, $action)) {
|
119 |
-
die( 'Invalid request' );
|
120 |
-
} else if( empty($order_id) ) {
|
121 |
-
die( 'Invalid order ID');
|
122 |
-
} else {
|
123 |
-
$invoice = new WPI_Invoice(new WC_Order($order_id), $this->textdomain);
|
124 |
-
switch( $_GET['wpi_action'] ) {
|
125 |
-
case "view":
|
126 |
-
$invoice->view_invoice( true );
|
127 |
-
break;
|
128 |
-
case "cancel":
|
129 |
-
$invoice->delete();
|
130 |
-
break;
|
131 |
-
case "create":
|
132 |
-
$invoice->generate("F");
|
133 |
-
break;
|
134 |
-
}
|
135 |
-
}
|
136 |
-
}
|
137 |
-
}
|
138 |
-
|
139 |
-
/**
|
140 |
-
* No need for AJAX calls right now.
|
141 |
-
*/
|
142 |
-
/*public function init_ajax_calls() {
|
143 |
-
add_action( 'wp_ajax_wpi_show_invoice', array( &$this, 'wpi_show_invoice' ) );
|
144 |
-
add_action( 'wp_ajax_nopriv_wpi_show_invoice', array( &$this, 'wpi_show_invoice' ) );
|
145 |
-
}*/
|
146 |
-
|
147 |
-
/**
|
148 |
-
* Loads the textdomain and localizes the plugin options tabs.
|
149 |
-
*/
|
150 |
-
public function init_load_textdomain() {
|
151 |
-
load_plugin_textdomain( $this->textdomain, false, WPI_LANG_DIR );
|
152 |
-
$this->settings_tabs['general_settings'] = __( 'General', $this->textdomain );
|
153 |
-
$this->settings_tabs['template_settings'] = __( 'Template', $this->textdomain );
|
154 |
-
}
|
155 |
-
|
156 |
-
/**
|
157 |
-
* Delete pdf invoices from the tmp folder.
|
158 |
-
*/
|
159 |
-
/*public function delete_pdf_invoices() {
|
160 |
-
array_map('unlink', glob( WPI_TMP_DIR . "*.pdf"));
|
161 |
-
}*/
|
162 |
-
|
163 |
-
/**
|
164 |
-
* Adds submenu to WooCommerce menu.
|
165 |
-
*/
|
166 |
-
public function add_woocommerce_submenu_page() {
|
167 |
-
add_submenu_page( 'woocommerce', __( 'Invoices', $this->textdomain ), __( 'Invoices', $this->textdomain ), 'manage_options', $this->options_key, array( &$this, 'options_page' ) );
|
168 |
-
}
|
169 |
-
|
170 |
-
/**
|
171 |
-
* Admin scripts
|
172 |
-
*/
|
173 |
-
public function admin_enqueue_scripts() {
|
174 |
-
wp_enqueue_script( 'admin_settings_script', WPI_URL . '/assets/js/admin.js' );
|
175 |
-
wp_register_style( 'admin_settings_css', WPI_URL . '/assets/css/admin.css', false, '1.0.0' );
|
176 |
-
wp_enqueue_style( 'admin_settings_css' );
|
177 |
-
}
|
178 |
-
|
179 |
-
/**
|
180 |
-
* Callback function for adding plugin options tabs.
|
181 |
-
*/
|
182 |
-
private function plugin_options_tabs() {
|
183 |
-
$current_tab = isset( $_GET['tab'] ) ? $_GET['tab'] : 'general_settings';
|
184 |
-
|
185 |
-
screen_icon();
|
186 |
-
echo '<h2 class="nav-tab-wrapper">';
|
187 |
-
foreach ( $this->settings_tabs as $tab_key => $tab_caption ) {
|
188 |
-
$active = $current_tab == $tab_key ? 'nav-tab-active' : '';
|
189 |
-
echo '<a class="nav-tab ' . $active . '" href="?page=' . 'wpi-invoices' . '&tab=' . $tab_key . '">' . $tab_caption . '</a>';
|
190 |
-
}
|
191 |
-
echo '</h2>';
|
192 |
-
}
|
193 |
-
|
194 |
-
/**
|
195 |
-
* The options page..
|
196 |
-
*/
|
197 |
-
public function options_page() {
|
198 |
-
$tab = isset( $_GET['tab'] ) ? $_GET['tab'] : 'general_settings';
|
199 |
-
?>
|
200 |
-
<div class="wrap">
|
201 |
-
<?php $this->plugin_options_tabs(); ?>
|
202 |
-
<form class="be_woocommerce_pdf_invoices_settings_form" method="post" action="options.php" enctype="multipart/form-data">
|
203 |
-
<?php wp_nonce_field( 'update-options' ); ?>
|
204 |
-
<?php settings_fields( $tab ); ?>
|
205 |
-
<?php do_settings_sections( $tab ); ?>
|
206 |
-
<?php submit_button(); ?>
|
207 |
-
</form>
|
208 |
-
</div>
|
209 |
-
<?php
|
210 |
-
}
|
211 |
-
|
212 |
-
/**
|
213 |
-
* Adds the Email It In email as an extra recipient
|
214 |
-
*
|
215 |
-
* @param $headers
|
216 |
-
* @param $status
|
217 |
-
* @return string
|
218 |
-
*/
|
219 |
-
function add_recipient_to_email_headers($headers, $status) {
|
220 |
-
$general_settings = (array) $this->general_settings->settings;
|
221 |
-
if( $status == $general_settings['email_type'] ) {
|
222 |
-
if( $general_settings['email_it_in']
|
223 |
-
&& $general_settings['email_it_in_account'] != "" ) {
|
224 |
-
$email_it_in_account = $general_settings['email_it_in_account'];
|
225 |
-
$headers .= 'BCC: <' . $email_it_in_account . '>' . "\r\n";
|
226 |
-
}
|
227 |
-
}
|
228 |
-
return $headers;
|
229 |
-
}
|
230 |
-
|
231 |
-
/**
|
232 |
-
* Attaches invoice to a specific WooCommerce email. Invoice will only be generated when it does not exists already.
|
233 |
-
* @param $attachments
|
234 |
-
* @param $status
|
235 |
-
* @param $order
|
236 |
-
* @return array
|
237 |
-
*/
|
238 |
-
function attach_invoice_to_email( $attachments, $status, $order ) {
|
239 |
-
$general_settings = $this->general_settings->settings;
|
240 |
-
if( $status == $general_settings['email_type']
|
241 |
-
|| $general_settings['new_order'] && $status == "new_order" ) {
|
242 |
-
|
243 |
-
$invoice = new WPI_Invoice($order, $this->textdomain);
|
244 |
-
|
245 |
-
if( $invoice->exists() ) {
|
246 |
-
$path_to_pdf = WPI_TMP_DIR . $invoice->get_formatted_invoice_number() . ".pdf";
|
247 |
-
} else {
|
248 |
-
$path_to_pdf = $invoice->generate("F");
|
249 |
-
}
|
250 |
-
|
251 |
-
$attachments[] = $path_to_pdf;
|
252 |
-
}
|
253 |
-
return $attachments;
|
254 |
-
}
|
255 |
-
|
256 |
-
/**
|
257 |
-
* Adds a box to the main column on the Post and Page edit screens.
|
258 |
-
*/
|
259 |
-
function add_meta_box_to_order_page() {
|
260 |
-
add_meta_box(
|
261 |
-
'order_page_create_invoice',
|
262 |
-
__( 'PDF Invoice', $this->textdomain ),
|
263 |
-
array( &$this, 'woocommerce_order_details_page_meta_box_create_invoice' ),
|
264 |
-
'shop_order',
|
265 |
-
'side',
|
266 |
-
'high'
|
267 |
-
);
|
268 |
-
}
|
269 |
-
|
270 |
-
/**
|
271 |
-
* Shows the view invoice button on the all orders page.
|
272 |
-
*
|
273 |
-
* @param $order
|
274 |
-
*/
|
275 |
-
public function woocommerce_order_page_action_view_invoice( $order ) {
|
276 |
-
$invoice = new WPI_Invoice(new WC_Order($order->id), $this->textdomain);
|
277 |
-
if( $invoice->exists() ) {
|
278 |
-
$this->show_invoice_button('View invoice', $order->id, 'view', '', array('class="button tips wpi-admin-order-create-invoice-btn"') );
|
279 |
-
}
|
280 |
-
}
|
281 |
-
|
282 |
-
/**
|
283 |
-
* Shows invoice number info on the order details page.
|
284 |
-
* @param $date
|
285 |
-
* @param $number
|
286 |
-
*/
|
287 |
-
private function show_invoice_number_info($date, $number) {
|
288 |
-
echo '<table class="invoice-info" width="100%">
|
289 |
-
<tr>
|
290 |
-
<td>' . __('Invoiced on:', $this->textdomain ) . '</td>
|
291 |
-
<td align="right"><b>' . $date . '</b></td>
|
292 |
-
</tr>
|
293 |
-
<tr>
|
294 |
-
<td>' . __('Invoice number:', $this->textdomain ) . '</td>
|
295 |
-
<td align="right"><b>' . $number . '</b></td>
|
296 |
-
</tr>
|
297 |
-
</table>';
|
298 |
-
}
|
299 |
-
|
300 |
-
/**
|
301 |
-
* Show a specific invoice button to for example view, create or delete an invoice.
|
302 |
-
*
|
303 |
-
* @param $title
|
304 |
-
* @param $order_id
|
305 |
-
* @param $wpi_action
|
306 |
-
* @param $btn_title
|
307 |
-
* @param array $arr
|
308 |
-
*/
|
309 |
-
private function show_invoice_button($title, $order_id, $wpi_action, $btn_title, $arr = array()) {
|
310 |
-
$title = __( $title, $this->textdomain );
|
311 |
-
$href = admin_url() . 'post.php?post=' . $order_id . '&action=edit&wpi_action=' . $wpi_action . '&nonce=' . wp_create_nonce($wpi_action);
|
312 |
-
$btn_title = __( $btn_title, $this->textdomain );
|
313 |
-
|
314 |
-
$attr = '';
|
315 |
-
foreach($arr as $str) {
|
316 |
-
$attr .= $str . ' ';
|
317 |
-
}
|
318 |
-
|
319 |
-
$btn = '<a title="' . $title . '" href="' . $href . '" ' . $attr . '><button type="button" class="button grant_access">' . $btn_title . '</button></a>';
|
320 |
-
echo $btn;
|
321 |
-
}
|
322 |
-
|
323 |
-
/**
|
324 |
-
* Show all the meta box actions/buttons on the order details page to create, view or cancel/delete an invoice.
|
325 |
-
* @param $post
|
326 |
-
*/
|
327 |
-
public function woocommerce_order_details_page_meta_box_create_invoice( $post ) {
|
328 |
-
$invoice = new WPI_Invoice(new WC_Order($post->ID), $this->textdomain);
|
329 |
-
|
330 |
-
if( $invoice->exists() ) {
|
331 |
-
$this->show_invoice_number_info( $invoice->get_formatted_invoice_date(), $invoice->get_formatted_invoice_number() );
|
332 |
-
$this->show_invoice_button( __( 'View invoice', $this->textdomain ), $post->ID, 'view', __( 'View', $this->textdomain ), array('class="invoice-btn"') );
|
333 |
-
$this->show_invoice_button( __( 'Cancel invoice', $this->textdomain ), $post->ID, 'cancel', __( 'Cancel', $this->textdomain ), array('class="invoice-btn"', 'onclick="return confirm(\'' . __( 'Are you sure to delete the invoice?', $this->textdomain ) . '\')"' ) );
|
334 |
-
} else {
|
335 |
-
$this->show_invoice_button( __( 'Create invoice', $this->textdomain ), $post->ID, 'create', __( 'Create', $this->textdomain ), array('class="invoice-btn"') );
|
336 |
-
}
|
337 |
-
}
|
338 |
-
}
|
339 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
admin/classes/wpi-general-settings.php
DELETED
@@ -1,231 +0,0 @@
|
|
1 |
-
<?php
|
2 |
-
if ( ! defined( 'ABSPATH' ) ) {
|
3 |
-
exit; // Exit if accessed directly
|
4 |
-
}
|
5 |
-
|
6 |
-
if ( ! class_exists( 'WPI_General_Settings' ) ) {
|
7 |
-
|
8 |
-
/**
|
9 |
-
* Implements general settings.
|
10 |
-
*/
|
11 |
-
class WPI_General_Settings extends WPI_Settings
|
12 |
-
{
|
13 |
-
|
14 |
-
/**
|
15 |
-
* Constant general settings key.
|
16 |
-
* @var string
|
17 |
-
*/
|
18 |
-
private $settings_key = 'general_settings';
|
19 |
-
|
20 |
-
/**
|
21 |
-
*
|
22 |
-
* @var array
|
23 |
-
*/
|
24 |
-
private $defaults = array(
|
25 |
-
'email_type' => 'customer_invoice',
|
26 |
-
'new_order' => 0,
|
27 |
-
'email_it_in' => 0,
|
28 |
-
'email_it_in_account' => ''
|
29 |
-
);
|
30 |
-
|
31 |
-
/**
|
32 |
-
* All settings from db.
|
33 |
-
* @var array
|
34 |
-
*/
|
35 |
-
public $settings = array();
|
36 |
-
|
37 |
-
/**
|
38 |
-
* Initializes the general options.
|
39 |
-
*/
|
40 |
-
public function __construct()
|
41 |
-
{
|
42 |
-
/**
|
43 |
-
* Load all settings into settings array
|
44 |
-
*/
|
45 |
-
add_action('init', array(&$this, 'load_settings'));
|
46 |
-
|
47 |
-
/**
|
48 |
-
* Register settings.
|
49 |
-
*/
|
50 |
-
add_action('admin_init', array(&$this, 'register_settings'));
|
51 |
-
|
52 |
-
/**
|
53 |
-
* Displays all messages registered to 'template_settings'
|
54 |
-
*/
|
55 |
-
add_action('admin_notices', array(&$this, 'show_settings_notices'));
|
56 |
-
}
|
57 |
-
|
58 |
-
/**
|
59 |
-
* Load all settings into settings var and merge with defaults.
|
60 |
-
*/
|
61 |
-
public function load_settings()
|
62 |
-
{
|
63 |
-
$this->settings = (array)get_option($this->settings_key); // Get all settings from database
|
64 |
-
$this->settings = array_merge($this->defaults, $this->settings); // Merge defaults with settings
|
65 |
-
update_option($this->settings_key, $this->settings);
|
66 |
-
}
|
67 |
-
|
68 |
-
/**
|
69 |
-
* Register all settings fields etc.
|
70 |
-
*/
|
71 |
-
public function register_settings()
|
72 |
-
{
|
73 |
-
register_setting($this->settings_key, $this->settings_key, array(&$this, 'validate'));
|
74 |
-
add_settings_section('section_general', __('General Settings', $this->textdomain), '', $this->settings_key);
|
75 |
-
add_settings_field('email_type_option', __('Attach to Email', $this->textdomain), array(&$this, 'email_type_option'), $this->settings_key, 'section_general',
|
76 |
-
array(
|
77 |
-
array(
|
78 |
-
'id' => 'customer_processing_order',
|
79 |
-
'name' => __('Processing order', $this->textdomain)
|
80 |
-
),
|
81 |
-
array(
|
82 |
-
'id' => 'customer_completed_order',
|
83 |
-
'name' => __('Completed order', $this->textdomain)
|
84 |
-
),
|
85 |
-
array(
|
86 |
-
'id' => 'customer_invoice',
|
87 |
-
'name' => __('Customer invoice', $this->textdomain)
|
88 |
-
)
|
89 |
-
)
|
90 |
-
);
|
91 |
-
add_settings_field('new_order', __('Attach to New order Email', $this->textdomain), array(&$this, 'new_order_option'), $this->settings_key, 'section_general');
|
92 |
-
add_settings_field('email_it_in', __('Automatically send invoice to Google Drive, Egnyte, Dropbox or OneDrive', $this->textdomain), array(&$this, 'email_it_in_option'), $this->settings_key, 'section_general');
|
93 |
-
add_settings_field('email_it_in_account', __('Email It In account', $this->textdomain), array(&$this, 'email_it_in_account_option'), $this->settings_key, 'section_general');
|
94 |
-
}
|
95 |
-
|
96 |
-
/**
|
97 |
-
* Settings notices callback to show the notices.
|
98 |
-
*/
|
99 |
-
public function show_settings_notices()
|
100 |
-
{
|
101 |
-
settings_errors($this->settings_key);
|
102 |
-
}
|
103 |
-
|
104 |
-
/**
|
105 |
-
* Callback to determine wich email type should contain the invoice.
|
106 |
-
* @param $args
|
107 |
-
*/
|
108 |
-
public function email_type_option($args)
|
109 |
-
{
|
110 |
-
?>
|
111 |
-
<select id="email-type-option" name="<?php echo $this->settings_key; ?>[email_type]">
|
112 |
-
<!--<option selected hidden>-- Select --</option>-->
|
113 |
-
<?php
|
114 |
-
foreach ($args as $email) {
|
115 |
-
?>
|
116 |
-
<option
|
117 |
-
value="<?php echo $email['id']; ?>" <?php selected($this->settings['email_type'], $email['id']); ?>><?php echo $email['name']; ?></option>
|
118 |
-
<?php
|
119 |
-
}
|
120 |
-
?>
|
121 |
-
</select>
|
122 |
-
<?php
|
123 |
-
}
|
124 |
-
|
125 |
-
/**
|
126 |
-
* Callback with checkbox to add the invoice to the new order email type.
|
127 |
-
*/
|
128 |
-
public function new_order_option()
|
129 |
-
{
|
130 |
-
?>
|
131 |
-
<input type="checkbox" name="<?php echo $this->settings_key; ?>[new_order]"
|
132 |
-
value="1" <?php checked($this->settings['new_order']); ?>/>
|
133 |
-
<div class="notes"><?php _e('For bookkeeping purposes.', $this->textdomain); ?></div>
|
134 |
-
<?php
|
135 |
-
}
|
136 |
-
|
137 |
-
/**
|
138 |
-
* Enable or disable the Email It In option.
|
139 |
-
*/
|
140 |
-
public function email_it_in_option()
|
141 |
-
{
|
142 |
-
?>
|
143 |
-
<input type="checkbox" name="<?php echo $this->settings_key; ?>[email_it_in]"
|
144 |
-
value="1" <?php checked($this->settings['email_it_in']); ?>/>
|
145 |
-
<div
|
146 |
-
class="notes"><?php printf(__('Signup at %s and enter your account below.', $this->textdomain), '<a href="https://emailitin.com">emailitin.com</a>'); ?></div>
|
147 |
-
<?php
|
148 |
-
}
|
149 |
-
|
150 |
-
/**
|
151 |
-
* Email It In account for sending the invoice to.
|
152 |
-
*/
|
153 |
-
public function email_it_in_account_option()
|
154 |
-
{
|
155 |
-
?>
|
156 |
-
<input type="text" name="<?php echo $this->settings_key; ?>[email_it_in_account]"
|
157 |
-
value="<?php echo $this->settings['email_it_in_account']; ?>"/>
|
158 |
-
<div class="notes">
|
159 |
-
<?php printf(__('Enter your %s account.', $this->textdomain), 'Email It In'); ?>
|
160 |
-
</div>
|
161 |
-
<?php
|
162 |
-
}
|
163 |
-
|
164 |
-
/**
|
165 |
-
* Validate all the general options.
|
166 |
-
* Later will be refactored to individual validation callabacks.
|
167 |
-
*
|
168 |
-
* @param $input
|
169 |
-
* @return array
|
170 |
-
*/
|
171 |
-
public function validate($input)
|
172 |
-
{
|
173 |
-
$output = array();
|
174 |
-
|
175 |
-
// Validate email type
|
176 |
-
|
177 |
-
if ( isset( $input['email_type'] ) ) {
|
178 |
-
if ($this->is_valid_str($input['email_type'])) {
|
179 |
-
$output['email_type'] = $input['email_type'];
|
180 |
-
} else {
|
181 |
-
add_settings_error(
|
182 |
-
esc_attr($this->settings_key),
|
183 |
-
'invalid-email-type',
|
184 |
-
__('Invalid type of Email.', $this->textdomain)
|
185 |
-
);
|
186 |
-
}
|
187 |
-
}
|
188 |
-
|
189 |
-
// Validate new order email
|
190 |
-
if ( isset( $input['new_order'] ) ) {
|
191 |
-
if ($this->is_valid_int($input['new_order'])) {
|
192 |
-
$output['new_order'] = $input['new_order'];
|
193 |
-
} else {
|
194 |
-
add_settings_error(
|
195 |
-
esc_attr($this->settings_key),
|
196 |
-
'invalid-new-order-email-value',
|
197 |
-
__('Please don\'t try to change the values.', $this->textdomain)
|
198 |
-
);
|
199 |
-
}
|
200 |
-
}
|
201 |
-
|
202 |
-
// Validate new order email
|
203 |
-
if ( isset( $input['email_it_in'] ) ) {
|
204 |
-
if( $this->validate_checkbox($input['email_it_in']) ) {
|
205 |
-
$output['email_it_in'] = $input['email_it_in'];
|
206 |
-
} else {
|
207 |
-
add_settings_error(
|
208 |
-
esc_attr($this->settings_key),
|
209 |
-
'invalid-email-it-in-value',
|
210 |
-
__('Please don\'t try to change the values.', $this->textdomain)
|
211 |
-
);
|
212 |
-
}
|
213 |
-
}
|
214 |
-
|
215 |
-
// Validate Email
|
216 |
-
if( isset( $input['email_it_in_account'] ) && $input['email_it_in_account'] != "" ) {
|
217 |
-
if (is_email(sanitize_email($input['email_it_in_account']))) {
|
218 |
-
$output['email_it_in_account'] = $input['email_it_in_account'];
|
219 |
-
} else {
|
220 |
-
add_settings_error(
|
221 |
-
esc_attr($this->settings_key),
|
222 |
-
'invalid-email',
|
223 |
-
__('Invalid Email address.', $this->textdomain)
|
224 |
-
);
|
225 |
-
}
|
226 |
-
}
|
227 |
-
|
228 |
-
return $output;
|
229 |
-
}
|
230 |
-
}
|
231 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
admin/classes/wpi-settings.php
DELETED
@@ -1,99 +0,0 @@
|
|
1 |
-
<?php
|
2 |
-
if ( ! defined( 'ABSPATH' ) ) {
|
3 |
-
exit; // Exit if accessed directly
|
4 |
-
}
|
5 |
-
|
6 |
-
if ( ! class_exists( 'WPI_Settings' ) ) {
|
7 |
-
|
8 |
-
/**
|
9 |
-
* Abstract class with validation functions to validate all the template and general settings.
|
10 |
-
* Class WPI_Settings
|
11 |
-
*/
|
12 |
-
abstract class WPI_Settings {
|
13 |
-
|
14 |
-
/**
|
15 |
-
* The textdomain
|
16 |
-
* @var string
|
17 |
-
*/
|
18 |
-
public $textdomain = 'be-woocommerce-pdf-invoices';
|
19 |
-
|
20 |
-
/**
|
21 |
-
* For <textarea>.
|
22 |
-
* @var array
|
23 |
-
*/
|
24 |
-
private $allowed_tags = array('<b>', '<i>', '<br>', '<br/>');
|
25 |
-
|
26 |
-
/**
|
27 |
-
* Validates an email.
|
28 |
-
* @param $email
|
29 |
-
* @return bool
|
30 |
-
*/
|
31 |
-
protected function validate_email($email) {
|
32 |
-
return is_email(sanitize_email($email)) ? true : false;
|
33 |
-
}
|
34 |
-
|
35 |
-
/**
|
36 |
-
* Validates a string.
|
37 |
-
* @param $str
|
38 |
-
* @return bool
|
39 |
-
*/
|
40 |
-
protected function is_valid_str($str) {
|
41 |
-
return is_string(sanitize_text_field($str));
|
42 |
-
}
|
43 |
-
|
44 |
-
/**
|
45 |
-
* Validates an integer.
|
46 |
-
* @param $int
|
47 |
-
* @return bool
|
48 |
-
*/
|
49 |
-
protected function is_valid_int($int) {
|
50 |
-
return intval($int) && absint($int);
|
51 |
-
}
|
52 |
-
|
53 |
-
/**
|
54 |
-
* Validates a textarea.
|
55 |
-
* @param $str
|
56 |
-
* @return bool
|
57 |
-
*/
|
58 |
-
protected function validate_textarea($str) {
|
59 |
-
$str = preg_replace("/<([a-z][a-z0-9]*)[^>]*?(\/?)>/i", '<$1$2>', $str); // Removes the attributes in the HTML tags
|
60 |
-
return is_string(strip_tags($str, '<b><i><br><br/>'));
|
61 |
-
}
|
62 |
-
|
63 |
-
/**
|
64 |
-
* Validates a checkbox
|
65 |
-
* @param $int
|
66 |
-
* @return bool
|
67 |
-
*/
|
68 |
-
protected function validate_checkbox($int) {
|
69 |
-
return $int == 1 || $int == 0;
|
70 |
-
}
|
71 |
-
|
72 |
-
/**
|
73 |
-
* Check for a valid hex color string like '#c1c2b4'
|
74 |
-
* @param $hex
|
75 |
-
*/
|
76 |
-
protected function is_valid_hex_color($hex)
|
77 |
-
{
|
78 |
-
$valid = false;
|
79 |
-
if (preg_match('/^#[a-f0-9]{6}$/i', $hex)) {
|
80 |
-
return true;
|
81 |
-
} else if (preg_match('/^[a-f0-9]{6}$/i', $hex)) { // Check for a hex color string without hash like 'c1c2b4'
|
82 |
-
return '#' . $hex;
|
83 |
-
}
|
84 |
-
return false;
|
85 |
-
}
|
86 |
-
|
87 |
-
/**
|
88 |
-
* Gets all the tags that are allowed to use for the textarea's.
|
89 |
-
* @return string|void
|
90 |
-
*/
|
91 |
-
protected function get_allowed_tags_str() {
|
92 |
-
( count( $this->allowed_tags ) > 0 ) ? $str = __('Allowed tags: ', $this->textdomain) : $str = '';
|
93 |
-
foreach ($this->allowed_tags as $i => $tag) {
|
94 |
-
($i == count($this->allowed_tags) - 1) ? $str .= sprintf('%s.', htmlspecialchars($tag)) : $str .= sprintf('%s', htmlspecialchars($tag));
|
95 |
-
}
|
96 |
-
return $str;
|
97 |
-
}
|
98 |
-
}
|
99 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
admin/classes/wpi-template-settings.php
DELETED
@@ -1,724 +0,0 @@
|
|
1 |
-
<?php
|
2 |
-
if ( ! defined( 'ABSPATH' ) ) {
|
3 |
-
exit; // Exit if accessed directly
|
4 |
-
}
|
5 |
-
|
6 |
-
if ( ! class_exists( 'WPI_Template_Settings' ) ) {
|
7 |
-
|
8 |
-
/**
|
9 |
-
* Implements the template settings.
|
10 |
-
*/
|
11 |
-
class WPI_Template_Settings extends WPI_Settings {
|
12 |
-
|
13 |
-
/**
|
14 |
-
* Constant template settings key
|
15 |
-
* @var string
|
16 |
-
*/
|
17 |
-
private $settings_key = 'template_settings';
|
18 |
-
|
19 |
-
/**
|
20 |
-
* Default template settings.
|
21 |
-
* @var array
|
22 |
-
*/
|
23 |
-
private $defaults = array(
|
24 |
-
'template' => 'invoice-micro.php',
|
25 |
-
'color_theme' => '#11B0E7',
|
26 |
-
'company_name' => '',
|
27 |
-
'company_logo' => '',
|
28 |
-
'intro_text' => '',
|
29 |
-
'company_address' => '',
|
30 |
-
'company_details' => '',
|
31 |
-
'terms' => '',
|
32 |
-
'show_discount' => 1,
|
33 |
-
'show_subtotal' => 1,
|
34 |
-
'show_tax' => 1,
|
35 |
-
'show_shipping' => 1,
|
36 |
-
'show_customer_notes' => 1,
|
37 |
-
'show_sku' => 0,
|
38 |
-
'invoice_number_type' => 'woocommerce_order_number',
|
39 |
-
'next_invoice_number' => 1,
|
40 |
-
'invoice_number_digits' => 3,
|
41 |
-
'invoice_prefix' => '',
|
42 |
-
'invoice_suffix' => '',
|
43 |
-
'invoice_format' => '[number]',
|
44 |
-
'reset_invoice_number' => 0,
|
45 |
-
'invoice_date_format' => 'd-m-Y',
|
46 |
-
'order_date_format' => 'd-m-Y',
|
47 |
-
'last_invoiced_year' => '',
|
48 |
-
'last_invoice_number' => 1
|
49 |
-
);
|
50 |
-
|
51 |
-
/**
|
52 |
-
* All the template settings.
|
53 |
-
* @var array
|
54 |
-
*/
|
55 |
-
public $settings = array();
|
56 |
-
|
57 |
-
/**
|
58 |
-
* All the different templates.
|
59 |
-
* @var array
|
60 |
-
*/
|
61 |
-
private $templates = array(
|
62 |
-
array(
|
63 |
-
'name' => 'Micro',
|
64 |
-
'filename' => 'invoice-micro.php'
|
65 |
-
)
|
66 |
-
);
|
67 |
-
|
68 |
-
/**
|
69 |
-
* Initializes the template settings.
|
70 |
-
*/
|
71 |
-
public function __construct() {
|
72 |
-
|
73 |
-
/**
|
74 |
-
* Loads all the template settings.
|
75 |
-
*/
|
76 |
-
add_action('init', array(&$this, 'load_settings'));
|
77 |
-
|
78 |
-
/**
|
79 |
-
* Register all template settings.
|
80 |
-
*/
|
81 |
-
add_action('admin_init', array($this, 'register_settings'));
|
82 |
-
|
83 |
-
/**
|
84 |
-
* Displays all messages registered to 'template_settings'
|
85 |
-
*/
|
86 |
-
add_action('admin_notices', array(&$this, 'show_settings_notices'));
|
87 |
-
}
|
88 |
-
|
89 |
-
/**
|
90 |
-
* Load all settings into settings var and merge with defaults.
|
91 |
-
*/
|
92 |
-
public function load_settings() {
|
93 |
-
$this->settings = (array)get_option($this->settings_key);
|
94 |
-
$this->settings = array_merge($this->defaults, $this->settings);
|
95 |
-
update_option($this->settings_key, $this->settings);
|
96 |
-
}
|
97 |
-
|
98 |
-
/**
|
99 |
-
* Register all settings fields.
|
100 |
-
*/
|
101 |
-
public function register_settings()
|
102 |
-
{
|
103 |
-
register_setting($this->settings_key, $this->settings_key, array(&$this, 'validate'));
|
104 |
-
add_settings_section('section_template', __('Template Settings', $this->textdomain), '', $this->settings_key);
|
105 |
-
add_settings_field('template', __('Template', $this->textdomain), array(&$this, 'template_option'), $this->settings_key, 'section_template', $this->templates);
|
106 |
-
add_settings_field('color_theme', __('Color theme', $this->textdomain), array(&$this, 'color_theme_option'), $this->settings_key, 'section_template');
|
107 |
-
add_settings_field('company_name', __('Company name', $this->textdomain), array(&$this, 'company_name_option'), $this->settings_key, 'section_template');
|
108 |
-
add_settings_field('company_logo', __('Company logo', $this->textdomain), array(&$this, 'company_logo_option'), $this->settings_key, 'section_template');
|
109 |
-
add_settings_field('intro_text', __('Intro text', $this->textdomain), array(&$this, 'intro_text_option'), $this->settings_key, 'section_template');
|
110 |
-
add_settings_field('company_address', __('Company address', $this->textdomain), array(&$this, 'company_address_option'), $this->settings_key, 'section_template');
|
111 |
-
add_settings_field('company_details', __('Company details', $this->textdomain), array(&$this, 'company_details_option'), $this->settings_key, 'section_template');
|
112 |
-
add_settings_field('terms', __('Terms & conditions, policies etc.', $this->textdomain), array(&$this, 'terms_option'), $this->settings_key, 'section_template');
|
113 |
-
add_settings_field('invoice_number_type', __('Invoice number type', $this->textdomain), array(&$this, 'invoice_number_type_option'), $this->settings_key, 'section_template');
|
114 |
-
add_settings_field('next_invoice_number', __('Next invoice number', $this->textdomain), array(&$this, 'next_invoice_number_option'), $this->settings_key, 'section_template');
|
115 |
-
add_settings_field('invoice_number_digits', __('Number of digits', $this->textdomain), array(&$this, 'invoice_number_digits_option'), $this->settings_key, 'section_template');
|
116 |
-
add_settings_field('invoice_prefix', __('Invoice number prefix', $this->textdomain), array(&$this, 'invoice_prefix_option'), $this->settings_key, 'section_template');
|
117 |
-
add_settings_field('invoice_suffix', __('Invoice number suffix', $this->textdomain), array(&$this, 'invoice_suffix_option'), $this->settings_key, 'section_template');
|
118 |
-
add_settings_field('invoice_format', __('Invoice number format', $this->textdomain), array(&$this, 'invoice_format_option'), $this->settings_key, 'section_template');
|
119 |
-
add_settings_field('reset_invoice_number', __('Reset on 1st January', $this->textdomain), array(&$this, 'reset_invoice_number_option'), $this->settings_key, 'section_template');
|
120 |
-
add_settings_field('invoice_date_format', __('Invoice date format', $this->textdomain), array(&$this, 'invoice_date_format_option'), $this->settings_key, 'section_template');
|
121 |
-
add_settings_field('order_date_format', __('Order date format', $this->textdomain), array(&$this, 'order_date_format_option'), $this->settings_key, 'section_template');
|
122 |
-
add_settings_field('show_sku', __('Show SKU', $this->textdomain), array(&$this, 'show_sku_option'), $this->settings_key, 'section_template');
|
123 |
-
add_settings_field('show_discount', __('Show discount', $this->textdomain), array(&$this, 'show_discount_option'), $this->settings_key, 'section_template');
|
124 |
-
add_settings_field('show_subtotal', __('Show subtotal', $this->textdomain), array(&$this, 'show_subtotal_option'), $this->settings_key, 'section_template');
|
125 |
-
add_settings_field('show_tax', __('Show tax', $this->textdomain), array(&$this, 'show_tax_option'), $this->settings_key, 'section_template');
|
126 |
-
add_settings_field('show_shipping', __('Show shipping', $this->textdomain), array(&$this, 'show_shipping_option'), $this->settings_key, 'section_template');
|
127 |
-
add_settings_field('show_customer_notes', __('Show customer notes', $this->textdomain), array(&$this, 'show_customer_notes_option'), $this->settings_key, 'section_template');
|
128 |
-
//add_settings_field( 'preview_invoice', 'Preview invoice', array( &$this, 'preview_invoice_option' ), $this->settings_key, 'section_template' );
|
129 |
-
}
|
130 |
-
|
131 |
-
/**
|
132 |
-
* Show all settings notices.
|
133 |
-
*/
|
134 |
-
public function show_settings_notices() {
|
135 |
-
settings_errors($this->settings_key);
|
136 |
-
}
|
137 |
-
|
138 |
-
/**
|
139 |
-
* @param $args
|
140 |
-
*/
|
141 |
-
public function template_option($args)
|
142 |
-
{
|
143 |
-
?>
|
144 |
-
<select id="template-type-option" name="<?php echo $this->settings_key; ?>[template]">
|
145 |
-
<?php
|
146 |
-
foreach ($args as $template) {
|
147 |
-
?>
|
148 |
-
<option
|
149 |
-
value="<?php echo $template['filename']; ?>" <?php selected($this->settings['template'], $template['filename']); ?>><?php echo $template['name']; ?></option>
|
150 |
-
<?php
|
151 |
-
}
|
152 |
-
?>
|
153 |
-
</select>
|
154 |
-
<?php
|
155 |
-
}
|
156 |
-
|
157 |
-
/**
|
158 |
-
* @param $args
|
159 |
-
*/
|
160 |
-
public function color_theme_option($args)
|
161 |
-
{
|
162 |
-
?>
|
163 |
-
<input id="color-picker" type="color" name="<?php echo $this->settings_key; ?>[color_theme]"
|
164 |
-
value="<?php echo $this->settings['color_theme']; ?>"/>
|
165 |
-
<div class="notes"><?php _e('Color theme of the invoice.', $this->textdomain); ?></div>
|
166 |
-
<?php
|
167 |
-
}
|
168 |
-
|
169 |
-
/**
|
170 |
-
*
|
171 |
-
*/
|
172 |
-
public function company_name_option()
|
173 |
-
{
|
174 |
-
?>
|
175 |
-
<input type="text"
|
176 |
-
name="<?php echo $this->settings_key; ?>[company_name]"
|
177 |
-
value="<?php echo $this->settings['company_name']; ?>"/>
|
178 |
-
<?php
|
179 |
-
}
|
180 |
-
|
181 |
-
/**
|
182 |
-
*
|
183 |
-
*/
|
184 |
-
public function company_logo_option()
|
185 |
-
{
|
186 |
-
?>
|
187 |
-
<div
|
188 |
-
class="notes"><?php _e('Please upload an image less then 200Kb and make sure it\'s a jpeg, jpg or png.', $this->textdomain); ?></div>
|
189 |
-
<br/>
|
190 |
-
<input id="upload-file" type="file" name="company_logo" accept="image/*"/>
|
191 |
-
<input type="hidden" id="company-logo-value" name="company_logo"
|
192 |
-
value="<?php echo esc_attr($this->settings['company_logo']); ?>"/>
|
193 |
-
<?php
|
194 |
-
if ($this->settings['company_logo'] != "") {
|
195 |
-
?>
|
196 |
-
<div id="company-logo-wrapper">
|
197 |
-
<img id="company-logo" src="<?php echo esc_attr($this->settings['company_logo']); ?>"/>
|
198 |
-
<img id="delete" src="<?php echo WPI_URL . '/assets/img/delete-icon.png'; ?>"
|
199 |
-
onclick="Settings.removeCompanyLogo()" title="<?php _e('Remove logo', $this->textdomain); ?>"/>
|
200 |
-
</div>
|
201 |
-
<?php
|
202 |
-
}
|
203 |
-
?>
|
204 |
-
<?php
|
205 |
-
}
|
206 |
-
|
207 |
-
/**
|
208 |
-
*
|
209 |
-
*/
|
210 |
-
public function intro_text_option()
|
211 |
-
{
|
212 |
-
?>
|
213 |
-
<div class="notes block"><?php echo $this->get_allowed_tags_str(); ?></div>
|
214 |
-
<textarea name="<?php echo $this->settings_key; ?>[intro_text]" rows="5"
|
215 |
-
cols="50"><?php _e(esc_textarea($this->settings['intro_text'], $this->textdomain)); ?></textarea>
|
216 |
-
<?php
|
217 |
-
}
|
218 |
-
|
219 |
-
/**
|
220 |
-
*
|
221 |
-
*/
|
222 |
-
public function company_address_option()
|
223 |
-
{
|
224 |
-
?>
|
225 |
-
<div class="notes block"><?php echo $this->get_allowed_tags_str(); ?></div>
|
226 |
-
<textarea name="<?php echo $this->settings_key; ?>[company_address]" rows="5"
|
227 |
-
cols="50"><?php echo esc_textarea($this->settings['company_address']); ?></textarea>
|
228 |
-
<?php
|
229 |
-
}
|
230 |
-
|
231 |
-
/**
|
232 |
-
*
|
233 |
-
*/
|
234 |
-
public function company_details_option()
|
235 |
-
{
|
236 |
-
?>
|
237 |
-
<div class="notes block"><?php echo $this->get_allowed_tags_str(); ?></div>
|
238 |
-
<textarea name="<?php echo $this->settings_key; ?>[company_details]" rows="5"
|
239 |
-
cols="50"><?php echo esc_textarea($this->settings['company_details']); ?></textarea>
|
240 |
-
<?php
|
241 |
-
}
|
242 |
-
|
243 |
-
/**
|
244 |
-
*
|
245 |
-
*/
|
246 |
-
public function terms_option()
|
247 |
-
{
|
248 |
-
?>
|
249 |
-
<div class="notes block"><?php echo $this->get_allowed_tags_str(); ?></div>
|
250 |
-
<textarea name="<?php echo $this->settings_key; ?>[terms]" rows="5"
|
251 |
-
cols="50"><?php _e(esc_textarea($this->settings['terms'], $this->textdomain)); ?></textarea>
|
252 |
-
<?php
|
253 |
-
}
|
254 |
-
|
255 |
-
/**
|
256 |
-
* Wich type of invoice number should we use? WooCommerce order number or sequential?
|
257 |
-
*/
|
258 |
-
public function invoice_number_type_option() {
|
259 |
-
?>
|
260 |
-
<select id="invoice-number-type-option" name="<?php echo $this->settings_key; ?>[invoice_number_type]">
|
261 |
-
<option value="woocommerce_order_number" <?php selected($this->settings['invoice_number_type'], 'woocommerce_order_number'); ?>><?php _e( 'WooCommerce order number', $this->textdomain ); ?></option>
|
262 |
-
<option value="sequential_number" <?php selected($this->settings['invoice_number_type'], 'sequential_number'); ?>><?php _e( 'Sequential number', $this->textdomain ); ?></option>
|
263 |
-
</select>
|
264 |
-
<?php
|
265 |
-
}
|
266 |
-
|
267 |
-
/**
|
268 |
-
*
|
269 |
-
*/
|
270 |
-
public function show_subtotal_option()
|
271 |
-
{
|
272 |
-
?>
|
273 |
-
<input type="checkbox"
|
274 |
-
name="<?php echo $this->settings_key; ?>[show_subtotal]"
|
275 |
-
value="1"
|
276 |
-
<?php checked($this->settings['show_subtotal']); ?> />
|
277 |
-
<?php
|
278 |
-
}
|
279 |
-
|
280 |
-
/**
|
281 |
-
*
|
282 |
-
*/
|
283 |
-
public function show_tax_option()
|
284 |
-
{
|
285 |
-
?>
|
286 |
-
<input type="checkbox"
|
287 |
-
name="<?php echo $this->settings_key; ?>[show_tax]"
|
288 |
-
value="1"
|
289 |
-
<?php checked($this->settings['show_tax']); ?> />
|
290 |
-
<?php
|
291 |
-
}
|
292 |
-
|
293 |
-
/**
|
294 |
-
*
|
295 |
-
*/
|
296 |
-
public function show_discount_option()
|
297 |
-
{
|
298 |
-
?>
|
299 |
-
<input type="checkbox"
|
300 |
-
name="<?php echo $this->settings_key; ?>[show_discount]"
|
301 |
-
value="1"
|
302 |
-
<?php checked($this->settings['show_discount']); ?> />
|
303 |
-
<?php
|
304 |
-
}
|
305 |
-
|
306 |
-
/**
|
307 |
-
*
|
308 |
-
*/
|
309 |
-
public function show_shipping_option()
|
310 |
-
{
|
311 |
-
?>
|
312 |
-
<input type="checkbox"
|
313 |
-
name="<?php echo $this->settings_key; ?>[show_shipping]"
|
314 |
-
value="1"
|
315 |
-
<?php checked($this->settings['show_shipping']); ?> />
|
316 |
-
<?php
|
317 |
-
}
|
318 |
-
|
319 |
-
/**
|
320 |
-
*
|
321 |
-
*/
|
322 |
-
public function show_customer_notes_option()
|
323 |
-
{
|
324 |
-
?>
|
325 |
-
<input type="checkbox"
|
326 |
-
name="<?php echo $this->settings_key; ?>[show_customer_notes]"
|
327 |
-
value="1"
|
328 |
-
<?php checked($this->settings['show_customer_notes']); ?> />
|
329 |
-
<?php
|
330 |
-
}
|
331 |
-
|
332 |
-
/**
|
333 |
-
*
|
334 |
-
*/
|
335 |
-
public function show_sku_option()
|
336 |
-
{
|
337 |
-
?>
|
338 |
-
<input type="checkbox"
|
339 |
-
name="<?php echo $this->settings_key; ?>[show_sku]"
|
340 |
-
value="1"
|
341 |
-
<?php checked($this->settings['show_sku']); ?> />
|
342 |
-
<?php
|
343 |
-
}
|
344 |
-
|
345 |
-
/**
|
346 |
-
*
|
347 |
-
*/
|
348 |
-
public function next_invoice_number_option()
|
349 |
-
{
|
350 |
-
?>
|
351 |
-
<input type="text"
|
352 |
-
name="<?php echo $this->settings_key; ?>[next_invoice_number]"
|
353 |
-
value="<?php echo $this->settings['next_invoice_number']; ?>"/>
|
354 |
-
<div class="notes"><?php _e('Invoice number to use for next invoice.', $this->textdomain); ?></div>
|
355 |
-
<?php
|
356 |
-
}
|
357 |
-
|
358 |
-
/**
|
359 |
-
*
|
360 |
-
*/
|
361 |
-
public function invoice_number_digits_option()
|
362 |
-
{
|
363 |
-
?>
|
364 |
-
<input type="number"
|
365 |
-
name="<?php echo $this->settings_key; ?>[invoice_number_digits]"
|
366 |
-
value="<?php echo $this->settings['invoice_number_digits']; ?>"
|
367 |
-
min="3"
|
368 |
-
max="6"
|
369 |
-
/>
|
370 |
-
<div class="notes"><?php _e('Number of zero digits.', $this->textdomain); ?></div>
|
371 |
-
<?php
|
372 |
-
}
|
373 |
-
|
374 |
-
/**
|
375 |
-
*
|
376 |
-
*/
|
377 |
-
public function invoice_prefix_option()
|
378 |
-
{
|
379 |
-
?>
|
380 |
-
<input type="text"
|
381 |
-
name="<?php echo $this->settings_key; ?>[invoice_prefix]"
|
382 |
-
value="<?php echo $this->settings['invoice_prefix']; ?>"/>
|
383 |
-
<div
|
384 |
-
class="notes"><?php _e('Prefix text for the invoice number. Not required.', $this->textdomain); ?></div>
|
385 |
-
<?php
|
386 |
-
}
|
387 |
-
|
388 |
-
/**
|
389 |
-
*
|
390 |
-
*/
|
391 |
-
public function invoice_suffix_option()
|
392 |
-
{
|
393 |
-
?>
|
394 |
-
<input type="text"
|
395 |
-
name="<?php echo $this->settings_key; ?>[invoice_suffix]"
|
396 |
-
value="<?php echo $this->settings['invoice_suffix']; ?>"/>
|
397 |
-
<div
|
398 |
-
class="notes"><?php _e('Suffix text for the invoice number. Not required.', $this->textdomain); ?></div>
|
399 |
-
<?php
|
400 |
-
}
|
401 |
-
|
402 |
-
/**
|
403 |
-
*
|
404 |
-
*/
|
405 |
-
public function invoice_format_option()
|
406 |
-
{
|
407 |
-
?>
|
408 |
-
<input type="text"
|
409 |
-
name="<?php echo $this->settings_key; ?>[invoice_format]"
|
410 |
-
value="<?php echo $this->settings['invoice_format']; ?>"/>
|
411 |
-
<div
|
412 |
-
class="notes"><?php printf( __( 'Available placeholder are %s %s %s %s and %s. %s is required.', $this->textdomain ), '[prefix]', '[suffix]', '[number]', '[Y]', '[y]', '[number]' ); ?></div>
|
413 |
-
<?php
|
414 |
-
}
|
415 |
-
|
416 |
-
/**
|
417 |
-
*
|
418 |
-
*/
|
419 |
-
public function reset_invoice_number_option()
|
420 |
-
{
|
421 |
-
?>
|
422 |
-
<input type="checkbox"
|
423 |
-
name="<?php echo $this->settings_key; ?>[reset_invoice_number]"
|
424 |
-
value="1"
|
425 |
-
<?php checked($this->settings['reset_invoice_number']); ?> />
|
426 |
-
<div class="notes"><?php _e('Reset on the first of January.', $this->textdomain); ?></div>
|
427 |
-
<?php
|
428 |
-
}
|
429 |
-
|
430 |
-
/**
|
431 |
-
*
|
432 |
-
*/
|
433 |
-
public function invoice_date_format_option()
|
434 |
-
{
|
435 |
-
?>
|
436 |
-
<input type="text"
|
437 |
-
name="<?php echo $this->settings_key; ?>[invoice_date_format]"
|
438 |
-
value="<?php echo $this->settings['invoice_date_format']; ?>"/>
|
439 |
-
<div
|
440 |
-
class="notes"><?php printf(__('%sFormat%s of the date. Examples: %s or %s.', $this->textdomain), '<a href="http://php.net/manual/en/datetime.formats.date.php">', '</a>', '"m.d.y"', '"F jS Y"'); ?></div>
|
441 |
-
<?php
|
442 |
-
}
|
443 |
-
|
444 |
-
/**
|
445 |
-
*
|
446 |
-
*/
|
447 |
-
public function order_date_format_option()
|
448 |
-
{
|
449 |
-
?>
|
450 |
-
<input type="text"
|
451 |
-
name="<?php echo $this->settings_key; ?>[order_date_format]"
|
452 |
-
value="<?php echo $this->settings['order_date_format']; ?>"/>
|
453 |
-
<div
|
454 |
-
class="notes"><?php printf(__('Order date %sformat%s. Examples: %s or %s.', $this->textdomain), '<a href="http://php.net/manual/en/datetime.formats.date.php">', '</a>', '"m.d.y"', '"F jS Y"'); ?></div>
|
455 |
-
<?php
|
456 |
-
}
|
457 |
-
|
458 |
-
/**
|
459 |
-
*
|
460 |
-
*/
|
461 |
-
/*function preview_invoice_option() {
|
462 |
-
?>
|
463 |
-
<a href="<?php echo admin_url('admin-ajax.php'); ?>?action=wpi_preview_invoice&security=<?php echo wp_create_nonce('wpi_preview_invoice'); ?>" target="_blank">Preview</a>
|
464 |
-
<?php
|
465 |
-
}*/
|
466 |
-
|
467 |
-
/**
|
468 |
-
* Gets a template from the templates array by id.
|
469 |
-
* @param $template_id
|
470 |
-
* @return string
|
471 |
-
*/
|
472 |
-
public function get_template($template_id)
|
473 |
-
{
|
474 |
-
$template = "";
|
475 |
-
foreach ($this->templates as $template) {
|
476 |
-
if ($template['id'] == $template_id) {
|
477 |
-
return $template;
|
478 |
-
}
|
479 |
-
}
|
480 |
-
return $template;
|
481 |
-
}
|
482 |
-
|
483 |
-
/**
|
484 |
-
* Validates all the settings values.
|
485 |
-
*
|
486 |
-
* @param $input
|
487 |
-
* @return array
|
488 |
-
*/
|
489 |
-
public function validate($input)
|
490 |
-
{
|
491 |
-
$output = array();
|
492 |
-
|
493 |
-
// Validate template id
|
494 |
-
if( isset( $input['template_id'] ) ) {
|
495 |
-
if ($this->is_valid_int($input['template_id'])) {
|
496 |
-
$output['template_id'] = $input['template_id'];
|
497 |
-
} else {
|
498 |
-
add_settings_error(
|
499 |
-
esc_attr($this->settings_key),
|
500 |
-
'invalid-template-value',
|
501 |
-
__('Invalid template.', $this->textdomain)
|
502 |
-
);
|
503 |
-
}
|
504 |
-
}
|
505 |
-
|
506 |
-
// Validate color theme.
|
507 |
-
if( isset( $input['color_theme'] ) ) {
|
508 |
-
if (is_string($this->is_valid_hex_color($input['color_theme']))) {
|
509 |
-
$output['color_theme'] = $this->is_valid_hex_color($input['color_theme']);
|
510 |
-
} else if ($this->is_valid_hex_color($input['color_theme'])) {
|
511 |
-
$output['color_theme'] = $input['color_theme'];
|
512 |
-
} else {
|
513 |
-
add_settings_error(
|
514 |
-
esc_attr($this->settings_key),
|
515 |
-
'invalid-color-hex',
|
516 |
-
__('Invalid color theme code.', $this->textdomain)
|
517 |
-
);
|
518 |
-
}
|
519 |
-
}
|
520 |
-
|
521 |
-
// Validate company name
|
522 |
-
if( isset( $input['company_name'] ) ) {
|
523 |
-
if ($this->is_valid_str($input['company_name'])) {
|
524 |
-
$output['company_name'] = $input['company_name'];
|
525 |
-
} else {
|
526 |
-
add_settings_error(
|
527 |
-
esc_attr($this->settings_key),
|
528 |
-
'invalid-company-name',
|
529 |
-
__('Invalid company name.', $this->textdomain)
|
530 |
-
);
|
531 |
-
}
|
532 |
-
}
|
533 |
-
|
534 |
-
// Validate company logo
|
535 |
-
if(isset( $_FILES['company_logo']) ) {
|
536 |
-
$output['company_logo'] = $this->upload_file();
|
537 |
-
} else if( isset( $input['company_logo'] ) ) {
|
538 |
-
$output['company_logo'] = $input['company_logo'];
|
539 |
-
}
|
540 |
-
|
541 |
-
// Validate textarea's
|
542 |
-
$ta_errors = 0;
|
543 |
-
$textarea_values = array(
|
544 |
-
'intro_text' => ( isset( $input['intro_text'] ) ) ? $input['intro_text'] : '',
|
545 |
-
'company_address' => ( isset( $input['company_address'] ) ) ? $input['company_address'] : '',
|
546 |
-
'company_details' => ( isset( $input['company_details'] ) ) ? $input['company_details'] : '',
|
547 |
-
'terms' => ( isset( $input['terms'] ) ) ? $input['terms'] : ''
|
548 |
-
);
|
549 |
-
foreach ($textarea_values as $key => $value) {
|
550 |
-
($this->validate_textarea($value)) ? $output[$key] = $value : $ta_errors += 1;
|
551 |
-
}
|
552 |
-
|
553 |
-
if ($ta_errors > 0) {
|
554 |
-
add_settings_error(
|
555 |
-
esc_attr($this->settings_key),
|
556 |
-
'invalid_textarea_value',
|
557 |
-
__('Invalid input into one of the textarea\'s.', $this->textdomain)
|
558 |
-
);
|
559 |
-
}
|
560 |
-
|
561 |
-
if( isset( $input['invoice_number_type'] ) ) {
|
562 |
-
if ($this->is_valid_str($input['invoice_number_type'])) {
|
563 |
-
$output['invoice_number_type'] = $input['invoice_number_type'];
|
564 |
-
} else {
|
565 |
-
add_settings_error(
|
566 |
-
esc_attr($this->settings_key),
|
567 |
-
'invalid-invoice-number-type',
|
568 |
-
__('Invalid type of invoice number.', $this->textdomain)
|
569 |
-
);
|
570 |
-
}
|
571 |
-
}
|
572 |
-
|
573 |
-
// Validate next invoice number
|
574 |
-
if( isset( $input['next_invoice_number'] ) ) {
|
575 |
-
if ($this->is_valid_int($input['next_invoice_number'])) {
|
576 |
-
$output['next_invoice_number'] = $input['next_invoice_number'];
|
577 |
-
} else {
|
578 |
-
add_settings_error(
|
579 |
-
esc_attr($this->settings_key),
|
580 |
-
'invalid_next_invoice_number',
|
581 |
-
__('Invalid (next) invoice number.', $this->textdomain)
|
582 |
-
);
|
583 |
-
}
|
584 |
-
}
|
585 |
-
|
586 |
-
// Validate zero digits
|
587 |
-
$ind_errors = 0;
|
588 |
-
if( isset( $input['invoice_number_digits'] ) ) {
|
589 |
-
if ($this->is_valid_int($input['invoice_number_digits'])) {
|
590 |
-
($input['invoice_number_digits'] >= 3 && $input['invoice_number_digits'] <= 6)
|
591 |
-
? $output['invoice_number_digits'] = $input['invoice_number_digits']
|
592 |
-
: $ind_errors += 1;
|
593 |
-
} else {
|
594 |
-
$ind_errors += 1;
|
595 |
-
}
|
596 |
-
}
|
597 |
-
|
598 |
-
if ($ind_errors > 0) {
|
599 |
-
add_settings_error(
|
600 |
-
esc_attr($this->settings_key),
|
601 |
-
'invalid_invoice_number_digits',
|
602 |
-
__('Invalid invoice number digits.', $this->textdomain)
|
603 |
-
);
|
604 |
-
}
|
605 |
-
|
606 |
-
// Validate invoice number prefix and suffix.
|
607 |
-
if( isset( $input['invoice_prefix'] ) ) {
|
608 |
-
$output['invoice_prefix'] = esc_html($input['invoice_prefix']);
|
609 |
-
}
|
610 |
-
|
611 |
-
if( isset( $input['invoice_suffix'] ) ) {
|
612 |
-
$output['invoice_suffix'] = esc_html($input['invoice_suffix']);
|
613 |
-
}
|
614 |
-
|
615 |
-
// Validate invoice number format
|
616 |
-
if( isset( $input['invoice_format'] ) ) {
|
617 |
-
if ($this->is_valid_str($input['invoice_format'])) {
|
618 |
-
if (strpos($input['invoice_format'], '[number]') !== false) {
|
619 |
-
$output['invoice_format'] = $input['invoice_format'];
|
620 |
-
} else {
|
621 |
-
add_settings_error(
|
622 |
-
esc_attr($this->settings_key),
|
623 |
-
'invalid_invoice_format-1',
|
624 |
-
__('The [number] placeholder is required as invoice number format.', $this->textdomain)
|
625 |
-
);
|
626 |
-
}
|
627 |
-
} else {
|
628 |
-
add_settings_error(
|
629 |
-
esc_attr($this->settings_key),
|
630 |
-
'invalid_invoice_format-2',
|
631 |
-
__('Invalid invoice number format.', $this->textdomain)
|
632 |
-
);
|
633 |
-
}
|
634 |
-
}
|
635 |
-
|
636 |
-
// Validate all checkboxes
|
637 |
-
$cb_errors = 0;
|
638 |
-
$checkbox_values = array(
|
639 |
-
'reset_invoice_number' => ( isset( $input['reset_invoice_number'] ) ) ? $input['reset_invoice_number'] : '',
|
640 |
-
'show_sku' => ( isset( $input['show_sku'] ) ) ? $input['show_sku'] : '',
|
641 |
-
'show_discount' => ( isset( $input['show_discount'] ) ) ? $input['show_discount'] : '',
|
642 |
-
'show_subtotal' => ( isset( $input['show_subtotal'] ) ) ? $input['show_subtotal'] : '',
|
643 |
-
'show_tax' => ( isset( $input['show_tax'] ) ) ? $input['show_tax'] : '',
|
644 |
-
'show_shipping' => ( isset( $input['show_shipping'] ) ) ? $input['show_shipping'] : '',
|
645 |
-
'show_customer_notes' => ( isset( $input['show_customer_notes'] ) ) ? $input['show_customer_notes'] : ''
|
646 |
-
);
|
647 |
-
|
648 |
-
foreach ($checkbox_values as $key => $value) {
|
649 |
-
if( $value != '' ) {
|
650 |
-
($this->validate_checkbox($value)) ? $output[$key] = $value : $output[$key] = 0;
|
651 |
-
}
|
652 |
-
}
|
653 |
-
|
654 |
-
if ($cb_errors > 0) {
|
655 |
-
add_settings_error(
|
656 |
-
esc_attr($this->settings_key),
|
657 |
-
'invalid-checkbox-value',
|
658 |
-
__('Please don\'t try to change the values.', $this->textdomain)
|
659 |
-
);
|
660 |
-
}
|
661 |
-
|
662 |
-
if( isset( $input['invoice_date_format'] ) ) {
|
663 |
-
if ($this->is_valid_str($input['invoice_date_format'])) {
|
664 |
-
$output['invoice_date_format'] = $input['invoice_date_format'];
|
665 |
-
} else {
|
666 |
-
add_settings_error(
|
667 |
-
esc_attr($this->settings_key),
|
668 |
-
'invalid-date-format',
|
669 |
-
__('Invalid date format.', $this->textdomain)
|
670 |
-
);
|
671 |
-
}
|
672 |
-
}
|
673 |
-
|
674 |
-
return $output;
|
675 |
-
}
|
676 |
-
|
677 |
-
/**
|
678 |
-
* Checks if the company logo has changed and uploads new logo's.
|
679 |
-
* @return string
|
680 |
-
*/
|
681 |
-
private function upload_file() {
|
682 |
-
$return = "";
|
683 |
-
|
684 |
-
if ($_FILES['company_logo']['error'] == 0) {
|
685 |
-
$file = $_FILES['company_logo'];
|
686 |
-
if ($file['size'] <= 200000) {
|
687 |
-
$override = array('test_form' => false);
|
688 |
-
$company_logo = wp_handle_upload($file, $override);
|
689 |
-
$validate_file_code = validate_file($company_logo['url']);
|
690 |
-
if ($validate_file_code == 0) {
|
691 |
-
$return = $company_logo['url'];
|
692 |
-
} else {
|
693 |
-
switch ($validate_file_code) {
|
694 |
-
case 1:
|
695 |
-
add_settings_error(
|
696 |
-
esc_attr($this->settings_key),
|
697 |
-
'file-invalid-1',
|
698 |
-
__('File is invalid and contains either \'..\' or \'./\'.', $this->textdomain)
|
699 |
-
);
|
700 |
-
break;
|
701 |
-
case 2:
|
702 |
-
add_settings_error(
|
703 |
-
esc_attr($this->settings_key),
|
704 |
-
'file-invalid-2',
|
705 |
-
__('File is invalid and contains \':\' after the first character.', $this->textdomain)
|
706 |
-
);
|
707 |
-
break;
|
708 |
-
}
|
709 |
-
}
|
710 |
-
} else {
|
711 |
-
add_settings_error(
|
712 |
-
esc_attr($this->settings_key),
|
713 |
-
'file-invalid-3',
|
714 |
-
__('Please upload image with extension jpg, jpeg or png.', $this->textdomain)
|
715 |
-
);
|
716 |
-
}
|
717 |
-
} else if (!empty($_POST['company_logo'])) {
|
718 |
-
$return = $_POST['company_logo'];
|
719 |
-
}
|
720 |
-
|
721 |
-
return $return;
|
722 |
-
}
|
723 |
-
}
|
724 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
assets/css/admin.css
CHANGED
@@ -3,26 +3,30 @@
|
|
3 |
.be_woocommerce_pdf_invoices_settings_form textarea {
|
4 |
width: 348px;
|
5 |
}
|
6 |
-
|
|
|
|
|
|
|
|
|
7 |
margin-top: 10px;
|
8 |
position: relative;
|
9 |
-
|
10 |
padding: 21px 21px 0 0;
|
11 |
}
|
12 |
-
#company-logo {
|
13 |
position: relative;
|
14 |
-
|
15 |
}
|
16 |
-
#company-logo-wrapper:hover #delete{
|
17 |
display: block;
|
18 |
}
|
19 |
-
#delete{
|
20 |
position: absolute;
|
21 |
top: 0;
|
22 |
right: 0;
|
23 |
display: none;
|
24 |
-
height:
|
25 |
-
width:
|
26 |
cursor: pointer;
|
27 |
}
|
28 |
.wpi-admin-order-create-invoice-btn {
|
@@ -55,5 +59,25 @@
|
|
55 |
margin-bottom: 10px;
|
56 |
}
|
57 |
.invoice-btn {
|
58 |
-
margin-right: 3px;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
59 |
}
|
3 |
.be_woocommerce_pdf_invoices_settings_form textarea {
|
4 |
width: 348px;
|
5 |
}
|
6 |
+
.be_woocommerce_pdf_invoices_settings_form input[type="number"],
|
7 |
+
#bewpi-color-theme {
|
8 |
+
width: 70px;
|
9 |
+
}
|
10 |
+
#bewpi-company-logo-wrapper {
|
11 |
margin-top: 10px;
|
12 |
position: relative;
|
13 |
+
display: inline-block;
|
14 |
padding: 21px 21px 0 0;
|
15 |
}
|
16 |
+
#bewpi-company-logo-image {
|
17 |
position: relative;
|
18 |
+
max-height: 150px;
|
19 |
}
|
20 |
+
#bewpi-company-logo-wrapper:hover #bewpi-company-logo-delete{
|
21 |
display: block;
|
22 |
}
|
23 |
+
#bewpi-company-logo-delete{
|
24 |
position: absolute;
|
25 |
top: 0;
|
26 |
right: 0;
|
27 |
display: none;
|
28 |
+
height: 25px;
|
29 |
+
width: 25px;
|
30 |
cursor: pointer;
|
31 |
}
|
32 |
.wpi-admin-order-create-invoice-btn {
|
59 |
margin-bottom: 10px;
|
60 |
}
|
61 |
.invoice-btn {
|
62 |
+
margin-right: 3px !important;
|
63 |
+
}
|
64 |
+
#footer-left #footer-thankyou {
|
65 |
+
font-style: normal !important;
|
66 |
+
}
|
67 |
+
.bewpi-visible-columns-option-title,
|
68 |
+
.bewpi-reset-counter-option-title,
|
69 |
+
.bewpi-reset-counter-yearly-option-title,
|
70 |
+
.bewpi-customer-notes-option-title,
|
71 |
+
.bewpi-new-order-option-title,
|
72 |
+
.bewpi-email-it-in-option-title {
|
73 |
+
/*display: inline-block;*/
|
74 |
+
}
|
75 |
+
.bewpi-visible-columns-option-title,
|
76 |
+
.bewpi-customer-notes-option-title {
|
77 |
+
/*font-weight: bold;*/
|
78 |
+
}
|
79 |
+
.bewpi-notes {
|
80 |
+
font-size: 13px;
|
81 |
+
font-style: italic;
|
82 |
+
margin-top: 3px;
|
83 |
}
|
assets/img/my-company-logo-blue.png
ADDED
Binary file
|
assets/js/admin.js
CHANGED
@@ -1,9 +1,9 @@
|
|
1 |
var Settings = {};
|
2 |
|
3 |
Settings.removeCompanyLogo = function () {
|
4 |
-
var elem = document.getElementById('company-logo-wrapper');
|
5 |
elem.parentNode.removeChild(elem);
|
6 |
-
document.getElementById('company-logo-value').value = '';
|
7 |
};
|
8 |
|
9 |
Settings.previewInvoice = function (data) {
|
@@ -18,3 +18,8 @@ Settings.previewInvoice = function (data) {
|
|
18 |
// done
|
19 |
};
|
20 |
};
|
|
|
|
|
|
|
|
|
|
1 |
var Settings = {};
|
2 |
|
3 |
Settings.removeCompanyLogo = function () {
|
4 |
+
var elem = document.getElementById('bewpi-company-logo-wrapper');
|
5 |
elem.parentNode.removeChild(elem);
|
6 |
+
document.getElementById('bewpi-company-logo-value').value = '';
|
7 |
};
|
8 |
|
9 |
Settings.previewInvoice = function (data) {
|
18 |
// done
|
19 |
};
|
20 |
};
|
21 |
+
|
22 |
+
Settings.enableDisableNextInvoiceNumbering = function (elem) {
|
23 |
+
var nextInvoiceNumberInput = document.getElementById('bewpi-next-invoice-number');
|
24 |
+
( elem.checked ) ? nextInvoiceNumberInput.disabled = false : nextInvoiceNumberInput.disabled = true;
|
25 |
+
};
|
bootstrap.php
CHANGED
@@ -1,7 +1,7 @@
|
|
1 |
<?php
|
2 |
|
3 |
/**
|
4 |
-
* @version 2.
|
5 |
* @package WooCommerce PDF Invoices
|
6 |
* @author baaaaas
|
7 |
*
|
@@ -9,7 +9,7 @@
|
|
9 |
* Plugin Name: WooCommerce PDF Invoices
|
10 |
* Plugin URI:
|
11 |
* Description: Automatically or manually create and send PDF Invoices for WooCommerce orders and connect with Dropbox, Google Drive, OneDrive or Egnyte.
|
12 |
-
* Version: 2.
|
13 |
* Author: baaaaas
|
14 |
* Author URI:
|
15 |
* License: GPL-2.0+
|
@@ -18,24 +18,39 @@
|
|
18 |
* Domain Path: /lang
|
19 |
*/
|
20 |
|
21 |
-
if ( ! defined( 'ABSPATH' ) )
|
22 |
die( 'Access denied.' );
|
23 |
-
|
24 |
-
|
25 |
-
define( '
|
26 |
-
|
27 |
-
|
28 |
-
define( '
|
29 |
-
|
30 |
-
|
31 |
-
|
32 |
-
|
33 |
-
|
34 |
-
|
35 |
-
|
36 |
-
|
37 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
38 |
|
39 |
if ( class_exists( 'BE_WooCommerce_PDF_Invoices' ) ) {
|
40 |
-
|
41 |
}
|
1 |
<?php
|
2 |
|
3 |
/**
|
4 |
+
* @version 2.2.0
|
5 |
* @package WooCommerce PDF Invoices
|
6 |
* @author baaaaas
|
7 |
*
|
9 |
* Plugin Name: WooCommerce PDF Invoices
|
10 |
* Plugin URI:
|
11 |
* Description: Automatically or manually create and send PDF Invoices for WooCommerce orders and connect with Dropbox, Google Drive, OneDrive or Egnyte.
|
12 |
+
* Version: 2.2.0
|
13 |
* Author: baaaaas
|
14 |
* Author URI:
|
15 |
* License: GPL-2.0+
|
18 |
* Domain Path: /lang
|
19 |
*/
|
20 |
|
21 |
+
if ( ! defined( 'ABSPATH' ) )
|
22 |
die( 'Access denied.' );
|
23 |
+
|
24 |
+
if( !defined( 'BEWPI_VERSION' ) )
|
25 |
+
define( 'BEWPI_VERSION', '2.2.0' );
|
26 |
+
|
27 |
+
if( !defined( 'BEWPI_URL' ) )
|
28 |
+
define( 'BEWPI_URL', plugins_url( '', __FILE__ ) . '/' );
|
29 |
+
|
30 |
+
if( !defined( 'BEWPI_DIR' ) )
|
31 |
+
define( 'BEWPI_DIR', plugin_dir_path( __FILE__ ) . '/' );
|
32 |
+
|
33 |
+
if( !defined( 'BEWPI_TEMPLATES_DIR' ) )
|
34 |
+
define( 'BEWPI_TEMPLATES_DIR', plugin_dir_path( __FILE__ ) . '/includes/views/templates/' );
|
35 |
+
|
36 |
+
if( !defined( 'BEWPI_LANG_DIR' ) )
|
37 |
+
define( 'BEWPI_LANG_DIR', basename( dirname( __FILE__ ) ) . '/lang/' );
|
38 |
+
|
39 |
+
$wp_upload_dir = wp_upload_dir();
|
40 |
+
|
41 |
+
if ( !defined( 'BEWPI_INVOICES_DIR' ) )
|
42 |
+
define( 'BEWPI_INVOICES_DIR', $wp_upload_dir['basedir'] . '/bewpi-invoices/' );
|
43 |
+
|
44 |
+
if ( !defined( 'BEWPI_LIB_DIR' ) )
|
45 |
+
define( 'BEWPI_LIB_DIR', plugin_dir_path( __FILE__ ) . '/lib/' );
|
46 |
+
|
47 |
+
require_once( BEWPI_DIR . 'admin/classes/be-woocommerce-pdf-invoices.php' );
|
48 |
+
require_once( BEWPI_DIR . 'admin/classes/bewpi-settings.php' );
|
49 |
+
require_once( BEWPI_DIR . 'admin/classes/bewpi-general-settings.php' );
|
50 |
+
require_once( BEWPI_DIR . 'admin/classes/bewpi-template-settings.php' );
|
51 |
+
require_once( BEWPI_DIR . 'includes/classes/bewpi-document.php' );
|
52 |
+
require_once( BEWPI_DIR . 'includes/classes/bewpi-invoice.php' );
|
53 |
|
54 |
if ( class_exists( 'BE_WooCommerce_PDF_Invoices' ) ) {
|
55 |
+
new BE_WooCommerce_PDF_Invoices();
|
56 |
}
|
includes/classes/bewpi-document.php
ADDED
@@ -0,0 +1,130 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
if ( ! defined( 'ABSPATH' ) ) {
|
3 |
+
exit; // Exit if accessed directly
|
4 |
+
}
|
5 |
+
|
6 |
+
if ( ! class_exists( 'BEWPI_Document' ) ) {
|
7 |
+
|
8 |
+
class BEWPI_Document{
|
9 |
+
|
10 |
+
/**
|
11 |
+
* Textdomain from the plugin.
|
12 |
+
* @var
|
13 |
+
*/
|
14 |
+
protected $textdomain = 'be-woocommerce-pdf-invoices';
|
15 |
+
|
16 |
+
/**
|
17 |
+
* All options from general tab.
|
18 |
+
* @var array
|
19 |
+
*/
|
20 |
+
protected $general_options;
|
21 |
+
|
22 |
+
/**
|
23 |
+
* All options from template tab.
|
24 |
+
* @var array
|
25 |
+
*/
|
26 |
+
protected $template_options;
|
27 |
+
|
28 |
+
/**
|
29 |
+
* Name of the file.
|
30 |
+
* @var
|
31 |
+
*/
|
32 |
+
protected $file;
|
33 |
+
|
34 |
+
/**
|
35 |
+
* Full path to document.
|
36 |
+
* @var
|
37 |
+
*/
|
38 |
+
protected $filename;
|
39 |
+
|
40 |
+
/**
|
41 |
+
* Title of the document.
|
42 |
+
* @var string
|
43 |
+
*/
|
44 |
+
protected $title;
|
45 |
+
|
46 |
+
/**
|
47 |
+
* Author of the document.
|
48 |
+
* @var
|
49 |
+
*/
|
50 |
+
protected $author;
|
51 |
+
|
52 |
+
/**
|
53 |
+
* @param $order
|
54 |
+
*/
|
55 |
+
public function __construct() {
|
56 |
+
$this->general_options = get_option( 'bewpi_general_settings' );
|
57 |
+
$this->template_options = get_option( 'bewpi_template_settings' );
|
58 |
+
$this->title = $this->template_options['bewpi_company_name'] . " - Invoice";
|
59 |
+
$this->author = $this->template_options['bewpi_company_name'];
|
60 |
+
}
|
61 |
+
|
62 |
+
/**
|
63 |
+
* Generates the invoice with MPDF lib.
|
64 |
+
* @param $dest
|
65 |
+
* @return string
|
66 |
+
*/
|
67 |
+
protected function generate( $dest, $document ) {
|
68 |
+
set_time_limit(0);
|
69 |
+
include BEWPI_LIB_DIR . 'mpdf/mpdf.php';
|
70 |
+
$mpdf = new mPDF('', 'A4', 0, '', 17, 17, 20, 50, 0, 0, '');
|
71 |
+
$mpdf->useOnlyCoreFonts = true; // false is default
|
72 |
+
$mpdf->SetTitle( $this->title );
|
73 |
+
$mpdf->SetAuthor( $this->author );
|
74 |
+
$mpdf->showWatermarkText = false;
|
75 |
+
$mpdf->SetDisplayMode('fullpage');
|
76 |
+
$mpdf->useSubstitutions = false;
|
77 |
+
ob_start();
|
78 |
+
require_once $document->template_filename;
|
79 |
+
$html = ob_get_contents();
|
80 |
+
ob_end_clean();
|
81 |
+
$mpdf->SetHTMLFooter( $document->footer );
|
82 |
+
$mpdf->WriteHTML( $html );
|
83 |
+
$mpdf->Output( $document->filename, $dest );
|
84 |
+
}
|
85 |
+
|
86 |
+
/**
|
87 |
+
* Get the invoice if exist and show.
|
88 |
+
* @param $download
|
89 |
+
*/
|
90 |
+
public function view( $download ) {
|
91 |
+
if ( $download ) {
|
92 |
+
header('Content-type: application / pdf');
|
93 |
+
header('Content-Disposition: attachment; filename="' . $this->file . '"');
|
94 |
+
header('Content-Transfer-Encoding: binary');
|
95 |
+
header('Content-Length: ' . filesize( $this->filename ));
|
96 |
+
header('Accept-Ranges: bytes');
|
97 |
+
} else {
|
98 |
+
header('Content-type: application/pdf');
|
99 |
+
header('Content-Disposition: inline; filename="' . $this->file . '"');
|
100 |
+
header('Content-Transfer-Encoding: binary');
|
101 |
+
header('Accept-Ranges: bytes');
|
102 |
+
}
|
103 |
+
@readfile( $this->filename );
|
104 |
+
exit;
|
105 |
+
}
|
106 |
+
|
107 |
+
/**
|
108 |
+
* Delete invoice from tmp dir.
|
109 |
+
*/
|
110 |
+
public function delete() {
|
111 |
+
return unlink( $this->filename );
|
112 |
+
}
|
113 |
+
|
114 |
+
/**
|
115 |
+
* Checks if the invoice exists.
|
116 |
+
* @return bool
|
117 |
+
*/
|
118 |
+
public function exists() {
|
119 |
+
return file_exists( $this->filename );
|
120 |
+
}
|
121 |
+
|
122 |
+
/**
|
123 |
+
* Gets the file path.
|
124 |
+
* @return mixed
|
125 |
+
*/
|
126 |
+
public function get_filename() {
|
127 |
+
return $this->filename;
|
128 |
+
}
|
129 |
+
}
|
130 |
+
}
|
includes/classes/bewpi-invoice.php
ADDED
@@ -0,0 +1,344 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
if ( ! defined( 'ABSPATH' ) ) {
|
3 |
+
exit; // Exit if accessed directly
|
4 |
+
}
|
5 |
+
|
6 |
+
if ( ! class_exists( 'BEWPI_Invoice' ) ) {
|
7 |
+
|
8 |
+
/**
|
9 |
+
* Makes the invoice.
|
10 |
+
* Class BEWPI_Invoice
|
11 |
+
*/
|
12 |
+
class BEWPI_Invoice extends BEWPI_Document{
|
13 |
+
|
14 |
+
/**
|
15 |
+
* @var WC_Order
|
16 |
+
*/
|
17 |
+
public $order;
|
18 |
+
|
19 |
+
/**
|
20 |
+
* Invoice number
|
21 |
+
* @var integer
|
22 |
+
*/
|
23 |
+
protected $number;
|
24 |
+
|
25 |
+
/**
|
26 |
+
* Formatted invoice number with prefix and/or suffix
|
27 |
+
* @var string
|
28 |
+
*/
|
29 |
+
protected $formatted_number;
|
30 |
+
|
31 |
+
/**
|
32 |
+
* Creation date.
|
33 |
+
* @var datetime
|
34 |
+
*/
|
35 |
+
protected $date;
|
36 |
+
|
37 |
+
/**
|
38 |
+
* Creation year
|
39 |
+
* @var datetime
|
40 |
+
*/
|
41 |
+
protected $year;
|
42 |
+
|
43 |
+
/**
|
44 |
+
* Invoice footer
|
45 |
+
* @var string
|
46 |
+
*/
|
47 |
+
protected $footer;
|
48 |
+
|
49 |
+
/**
|
50 |
+
* Number of columns for the products table
|
51 |
+
* @var integer
|
52 |
+
*/
|
53 |
+
protected $number_of_columns;
|
54 |
+
|
55 |
+
/**
|
56 |
+
* Colspan data for product table cells
|
57 |
+
* @var array
|
58 |
+
*/
|
59 |
+
protected $colspan;
|
60 |
+
|
61 |
+
/**
|
62 |
+
* Width of the description cell of the product table
|
63 |
+
* @var string
|
64 |
+
*/
|
65 |
+
protected $desc_cell_width;
|
66 |
+
|
67 |
+
/**
|
68 |
+
* Initialize invoice with WooCommerce order
|
69 |
+
* @param string $order
|
70 |
+
*/
|
71 |
+
public function __construct( $order_id ) {
|
72 |
+
parent::__construct();
|
73 |
+
$this->order = wc_get_order( $order_id );
|
74 |
+
$this->template_filename = BEWPI_TEMPLATES_DIR . $this->template_options['bewpi_template_filename'];
|
75 |
+
$this->footer = $this->get_footer();
|
76 |
+
$this->formatted_number = get_post_meta( $this->order->id, '_bewpi_formatted_invoice_number', true );
|
77 |
+
|
78 |
+
// Check if the invoice already exists.
|
79 |
+
if( ! empty( $this->formatted_number ) )
|
80 |
+
$this->init();
|
81 |
+
}
|
82 |
+
|
83 |
+
/**
|
84 |
+
* Gets all the existing invoice data from database or creates new invoice number.
|
85 |
+
*/
|
86 |
+
private function init() {
|
87 |
+
$this->number = get_post_meta( $this->order->id, '_bewpi_invoice_number', true );
|
88 |
+
$this->year = get_post_meta( $this->order->id, '_bewpi_invoice_year', true );
|
89 |
+
$this->file = $this->formatted_number . '.pdf';
|
90 |
+
$this->filename = BEWPI_INVOICES_DIR . $this->year . '/' . $this->file;
|
91 |
+
$this->date = get_post_meta( $this->order->id, '_bewpi_invoice_date', true );
|
92 |
+
}
|
93 |
+
|
94 |
+
/**
|
95 |
+
* Format the invoice number with prefix and/or suffix.
|
96 |
+
* @return mixed
|
97 |
+
*/
|
98 |
+
public function get_formatted_number( $insert = false ) {
|
99 |
+
$invoice_number_format = $this->template_options['bewpi_invoice_number_format'];
|
100 |
+
// Format number with the number of digits
|
101 |
+
$digit_str = "%0" . $this->template_options['bewpi_invoice_number_digits'] . "s";
|
102 |
+
$digitized_invoice_number = sprintf( $digit_str, $this->number );
|
103 |
+
$year = date('Y');
|
104 |
+
$y = date('y');
|
105 |
+
|
106 |
+
// Format invoice number
|
107 |
+
$formatted_invoice_number = str_replace(
|
108 |
+
array( '[prefix]', '[suffix]', '[number]', '[Y]', '[y]' ),
|
109 |
+
array( $this->template_options['bewpi_invoice_number_prefix'], $this->template_options['bewpi_invoice_number_suffix'], $digitized_invoice_number, $year, $y ),
|
110 |
+
$invoice_number_format );
|
111 |
+
|
112 |
+
// Insert formatted invoicenumber into db
|
113 |
+
if ( $insert )
|
114 |
+
add_post_meta( $this->order->id, '_bewpi_formatted_invoice_number', $formatted_invoice_number );
|
115 |
+
|
116 |
+
return $formatted_invoice_number;
|
117 |
+
}
|
118 |
+
|
119 |
+
/**
|
120 |
+
* Create invoice date
|
121 |
+
* @return bool|string
|
122 |
+
*/
|
123 |
+
public function get_formatted_invoice_date( $insert = false ) {
|
124 |
+
$date_format = $this->template_options['bewpi_date_format'];
|
125 |
+
( !empty( $date_format ) ) ? $this->date = date( $date_format ) : $this->date = date('d-m-Y');
|
126 |
+
if( $insert ) add_post_meta($this->order->id, '_bewpi_invoice_date', $this->date);
|
127 |
+
return $this->date;
|
128 |
+
}
|
129 |
+
|
130 |
+
/*
|
131 |
+
* Format the order date and return
|
132 |
+
*/
|
133 |
+
public function get_formatted_order_date() {
|
134 |
+
$order_date = $date = DateTime::createFromFormat('Y-m-d H:i:s', $this->order->order_date);
|
135 |
+
if ( !empty ( $this->template_options['bewpi_date_format'] ) ) {
|
136 |
+
$date_format = $this->template_options['bewpi_date_format'];
|
137 |
+
$formatted_date = $order_date->format($date_format);
|
138 |
+
} else {
|
139 |
+
$formatted_date = $order_date->format($order_date, "d-m-Y");
|
140 |
+
}
|
141 |
+
return $formatted_date;
|
142 |
+
}
|
143 |
+
|
144 |
+
/**
|
145 |
+
* The footer for the invoice.
|
146 |
+
* @return string
|
147 |
+
*/
|
148 |
+
protected function get_footer() {
|
149 |
+
ob_start(); ?>
|
150 |
+
|
151 |
+
<table class="foot small-font">
|
152 |
+
<tbody>
|
153 |
+
<tr>
|
154 |
+
<td class="border" colspan="2">
|
155 |
+
<?php echo $this->template_options['bewpi_terms']; ?><br/>
|
156 |
+
<?php
|
157 |
+
if ( $this->template_options['bewpi_show_customer_notes'] && $this->order->post->post_excerpt != "" ) :
|
158 |
+
echo '<p><strong>' . __( 'Customer note', $this->textdomain ) . '</strong> ' . $this->order->post->post_excerpt . '</p>';
|
159 |
+
/*$customer_order_notes = $this->order->get_customer_order_notes();
|
160 |
+
if ( count( $customer_order_notes ) > 0 ) {
|
161 |
+
echo '<p><strong>' . __('Customer note', $this->textdomain) . '</strong>' . $customer_order_notes[0]->comment_content . '</p>';
|
162 |
+
}*/
|
163 |
+
endif;
|
164 |
+
?>
|
165 |
+
</td>
|
166 |
+
</tr>
|
167 |
+
<tr>
|
168 |
+
<td class="company-details"><p><?php echo nl2br( $this->template_options['bewpi_company_details'] ); ?></p></td>
|
169 |
+
<td class="payment"><p><?php printf( __( '%sPayment%s via', $this->textdomain ), '<b>', '</b>' ); ?> <?php echo $this->order->payment_method_title; ?></p></td>
|
170 |
+
</tr>
|
171 |
+
</tbody>
|
172 |
+
</table>
|
173 |
+
|
174 |
+
<?php $html = ob_get_contents();
|
175 |
+
ob_end_clean();
|
176 |
+
|
177 |
+
return $html;
|
178 |
+
}
|
179 |
+
|
180 |
+
/**
|
181 |
+
* Number of table columns that will be displayed
|
182 |
+
* @return int
|
183 |
+
*/
|
184 |
+
public function get_number_of_columns() {
|
185 |
+
$number_of_columns = 4;
|
186 |
+
if ( $this->template_options['bewpi_show_sku'] ) $number_of_columns++;
|
187 |
+
$order_taxes = $this->order->get_taxes();
|
188 |
+
if ( $this->template_options['bewpi_show_tax'] && wc_tax_enabled() && empty( $legacy_order ) && ! empty( $order_taxes ) ) :
|
189 |
+
foreach ( $order_taxes as $tax_id => $tax_item ) :
|
190 |
+
$number_of_columns++;
|
191 |
+
endforeach;
|
192 |
+
endif;
|
193 |
+
return $number_of_columns;
|
194 |
+
}
|
195 |
+
|
196 |
+
/**
|
197 |
+
* Calculates colspan for table footer cells
|
198 |
+
* @return array
|
199 |
+
*/
|
200 |
+
public function get_colspan() {
|
201 |
+
$colspan = array();
|
202 |
+
$number_of_columns = $this->get_number_of_columns();
|
203 |
+
$number_of_left_half_columns = 3;
|
204 |
+
$this->desc_cell_width = '30%';
|
205 |
+
|
206 |
+
// The product table will be split into 2 where on the right 5 columns are the max
|
207 |
+
if ( $number_of_columns <= 4 ) :
|
208 |
+
$number_of_left_half_columns = 1;
|
209 |
+
$this->desc_cell_width = '50%';
|
210 |
+
elseif ( $number_of_columns <= 6 ) :
|
211 |
+
$number_of_left_half_columns = 2;
|
212 |
+
$this->desc_cell_width = '37.50%';
|
213 |
+
endif;
|
214 |
+
|
215 |
+
$colspan['left'] = $number_of_left_half_columns;
|
216 |
+
$colspan['right'] = $number_of_columns - $number_of_left_half_columns;
|
217 |
+
$colspan['right_left'] = round( ( $colspan['right'] / 2 ), 0, PHP_ROUND_HALF_DOWN );
|
218 |
+
$colspan['right_right'] = round( ( $colspan['right'] / 2 ), 0, PHP_ROUND_HALF_UP );
|
219 |
+
|
220 |
+
return $colspan;
|
221 |
+
}
|
222 |
+
|
223 |
+
/**
|
224 |
+
* Reset invoice number counter if user did check the checkbox.
|
225 |
+
* @return bool
|
226 |
+
*/
|
227 |
+
private function reset_counter() {
|
228 |
+
// Check if the user resetted the invoice counter and set the number.
|
229 |
+
if ( $this->template_options['bewpi_reset_counter'] ) {
|
230 |
+
if ( $this->template_options['bewpi_next_invoice_number'] > 0 ) {
|
231 |
+
$this->number = $this->template_options['bewpi_next_invoice_number'];
|
232 |
+
$this->template_options['bewpi_reset_counter'] = 0;
|
233 |
+
return true;
|
234 |
+
}
|
235 |
+
}
|
236 |
+
return false;
|
237 |
+
}
|
238 |
+
|
239 |
+
/**
|
240 |
+
* Reset the invoice number counter if user did check the checkbox.
|
241 |
+
* @return bool
|
242 |
+
*/
|
243 |
+
private function new_year_reset() {
|
244 |
+
if ( $this->template_options['bewpi_reset_counter_yearly'] ) {
|
245 |
+
$last_year = ( isset( $this->template_options['bewpi_last_invoiced_year'] ) ) ? $this->template_options['bewpi_last_invoiced_year'] : '';
|
246 |
+
|
247 |
+
if ( !empty( $last_year ) && is_numeric( $last_year ) ) {
|
248 |
+
$date = getdate();
|
249 |
+
$current_year = $date['year'];
|
250 |
+
if ($last_year < $current_year) {
|
251 |
+
// Set new year as last invoiced year and reset invoice number
|
252 |
+
$this->number = 1;
|
253 |
+
return true;
|
254 |
+
}
|
255 |
+
}
|
256 |
+
}
|
257 |
+
return false;
|
258 |
+
}
|
259 |
+
|
260 |
+
/**
|
261 |
+
* Generates and saves the invoice to the uploads folder.
|
262 |
+
* @param $dest
|
263 |
+
* @return string
|
264 |
+
*/
|
265 |
+
public function save( $dest ) {
|
266 |
+
if ( $this->exists() ) die( 'Invoice already exists. First delete invoice.' );
|
267 |
+
|
268 |
+
// If the invoice is manually deleted from dir, delete data from database.
|
269 |
+
$this->delete();
|
270 |
+
|
271 |
+
if ( $this->template_options['bewpi_invoice_number_type'] === "sequential_number" ) :
|
272 |
+
if ( !$this->reset_counter() && !$this->new_year_reset() ) :
|
273 |
+
$this->number = $this->template_options['bewpi_last_invoice_number'] + 1;
|
274 |
+
endif;
|
275 |
+
else :
|
276 |
+
$this->number = $this->order->get_order_number();
|
277 |
+
endif;
|
278 |
+
|
279 |
+
$this->number_of_columns = $this->get_number_of_columns();
|
280 |
+
$this->colspan = $this->get_colspan();
|
281 |
+
$this->formatted_number = $this->get_formatted_number( true );
|
282 |
+
$this->year = date( 'Y' );
|
283 |
+
$this->filename = BEWPI_INVOICES_DIR . $this->year . '/' . $this->formatted_number . '.pdf';
|
284 |
+
|
285 |
+
add_post_meta( $this->order->id, '_bewpi_invoice_number', $this->number );
|
286 |
+
add_post_meta( $this->order->id, '_bewpi_invoice_year', $this->year );
|
287 |
+
|
288 |
+
$this->template_options['bewpi_last_invoice_number'] = $this->number;
|
289 |
+
$this->template_options['bewpi_last_invoiced_year'] = $this->year;
|
290 |
+
update_option( 'bewpi_template_settings', $this->template_options );
|
291 |
+
|
292 |
+
parent::generate( $dest, $this );
|
293 |
+
|
294 |
+
return $this->filename;
|
295 |
+
}
|
296 |
+
|
297 |
+
/**
|
298 |
+
* View or download the invoice.
|
299 |
+
* @param $download
|
300 |
+
*/
|
301 |
+
public function view( $download ) {
|
302 |
+
if ( !$this->exists() ) die( 'No invoice found. First create invoice.' );
|
303 |
+
parent::view( $download );
|
304 |
+
}
|
305 |
+
|
306 |
+
/**
|
307 |
+
* Delete all invoice data from database and the file.
|
308 |
+
*/
|
309 |
+
public function delete() {
|
310 |
+
delete_post_meta( $this->order->id, '_bewpi_invoice_number' );
|
311 |
+
delete_post_meta( $this->order->id, '_bewpi_formatted_invoice_number' );
|
312 |
+
delete_post_meta( $this->order->id, '_bewpi_invoice_date' );
|
313 |
+
delete_post_meta( $this->order->id, '_bewpi_invoice_year' );
|
314 |
+
|
315 |
+
if ( $this->exists() )
|
316 |
+
parent::delete();
|
317 |
+
}
|
318 |
+
|
319 |
+
/**
|
320 |
+
* @param $order_status
|
321 |
+
* Customer is only allowed to download invoice if the status of the order matches the email type option.
|
322 |
+
* @return bool
|
323 |
+
*/
|
324 |
+
public function is_download_allowed( $order_status ) {
|
325 |
+
$allowed = false;
|
326 |
+
if ( $this->general_options['bewpi_email_type'] === "customer_processing_order"
|
327 |
+
&& $order_status === "wc-processing" || $order_status === "wc-completed" ) {
|
328 |
+
$allowed = true;
|
329 |
+
}
|
330 |
+
return $allowed;
|
331 |
+
}
|
332 |
+
|
333 |
+
public function get_total() {
|
334 |
+
$total = "";
|
335 |
+
if ( $this->order->get_total_refunded() > 0 ) :
|
336 |
+
$total_after_refund = $this->order->get_total() - $this->order->get_total_refunded();
|
337 |
+
$total = '<del class="total-without-refund">' . strip_tags( $this->order->get_formatted_order_total() ) . '</del> <ins>' . wc_price( $total_after_refund, array( 'currency' => $this->order->get_order_currency() ) ) . '</ins>';
|
338 |
+
else :
|
339 |
+
$total = $this->order->get_formatted_order_total();
|
340 |
+
endif;
|
341 |
+
return $total;
|
342 |
+
}
|
343 |
+
}
|
344 |
+
}
|
includes/classes/wpi-document.php
DELETED
@@ -1,191 +0,0 @@
|
|
1 |
-
<?php
|
2 |
-
if ( ! defined( 'ABSPATH' ) ) {
|
3 |
-
exit; // Exit if accessed directly
|
4 |
-
}
|
5 |
-
|
6 |
-
if ( ! class_exists( 'WPI_Document' ) ) {
|
7 |
-
|
8 |
-
class WPI_Document{
|
9 |
-
|
10 |
-
/**
|
11 |
-
* @var
|
12 |
-
*/
|
13 |
-
protected $order;
|
14 |
-
|
15 |
-
/**
|
16 |
-
* Textdomain from the plugin.
|
17 |
-
* @var
|
18 |
-
*/
|
19 |
-
protected $textdomain = 'be-woocommerce-pdf-invoices';
|
20 |
-
|
21 |
-
/**
|
22 |
-
* All settings from general tab.
|
23 |
-
* @var array
|
24 |
-
*/
|
25 |
-
protected $general_settings;
|
26 |
-
|
27 |
-
/**
|
28 |
-
* All settings from template tab.
|
29 |
-
* @var array
|
30 |
-
*/
|
31 |
-
protected $template_settings;
|
32 |
-
|
33 |
-
/**
|
34 |
-
* Path to invoice in tmp dir.
|
35 |
-
* @var
|
36 |
-
*/
|
37 |
-
protected $file;
|
38 |
-
|
39 |
-
/**
|
40 |
-
* @param $order
|
41 |
-
*/
|
42 |
-
public function __construct( $order ) {
|
43 |
-
|
44 |
-
$this->order = $order;
|
45 |
-
|
46 |
-
$this->general_settings = (array)get_option('general_settings');
|
47 |
-
|
48 |
-
$this->template_settings = (array)get_option('template_settings');
|
49 |
-
|
50 |
-
}
|
51 |
-
|
52 |
-
/**
|
53 |
-
* Generates the invoice with MPDF lib.
|
54 |
-
* @param $dest
|
55 |
-
* @return string
|
56 |
-
*/
|
57 |
-
public function generate($dest) {
|
58 |
-
if( !$this->exists() ) {
|
59 |
-
|
60 |
-
$this->delete_all_post_meta();
|
61 |
-
|
62 |
-
$last_invoice_number = $this->template_settings['last_invoice_number'];
|
63 |
-
|
64 |
-
// Get the up following invoice number
|
65 |
-
$next_invoice_number = $this->get_next_invoice_number($last_invoice_number);
|
66 |
-
|
67 |
-
if ($this->template_settings['invoice_number_type'] == 'sequential_number') {
|
68 |
-
|
69 |
-
// Create new invoice number and insert into database.
|
70 |
-
$this->create_invoice_number($next_invoice_number);
|
71 |
-
|
72 |
-
// Get the new invoice number from db.
|
73 |
-
$this->number = $this->get_invoice_number();
|
74 |
-
|
75 |
-
} else {
|
76 |
-
|
77 |
-
$this->number = $this->order->id;
|
78 |
-
|
79 |
-
}
|
80 |
-
|
81 |
-
$this->template_settings['last_invoice_number'] = $this->number;
|
82 |
-
|
83 |
-
$this->formatted_number = $this->format_invoice_number();
|
84 |
-
|
85 |
-
update_option('template_settings', $this->template_settings);
|
86 |
-
|
87 |
-
$this->date = $this->get_formatted_invoice_date( true );
|
88 |
-
|
89 |
-
// Go generate
|
90 |
-
set_time_limit(0);
|
91 |
-
include WPI_DIR . "lib/mpdf/mpdf.php";
|
92 |
-
|
93 |
-
$mpdf = new mPDF('', 'A4', 0, '', 17, 17, 20, 50, 0, 0, '');
|
94 |
-
$mpdf->useOnlyCoreFonts = true; // false is default
|
95 |
-
$mpdf->SetTitle(($this->template_settings['company_name'] != "") ? $this->template_settings['company_name'] . " - Invoice" : "Invoice");
|
96 |
-
$mpdf->SetAuthor(($this->template_settings['company_name'] != "") ? $this->template_settings['company_name'] : "");
|
97 |
-
$mpdf->showWatermarkText = false;
|
98 |
-
$mpdf->SetDisplayMode('fullpage');
|
99 |
-
$mpdf->useSubstitutions = false;
|
100 |
-
|
101 |
-
ob_start();
|
102 |
-
|
103 |
-
require_once $this->get_template();
|
104 |
-
|
105 |
-
$html = ob_get_contents();
|
106 |
-
|
107 |
-
ob_end_clean();
|
108 |
-
|
109 |
-
$footer = $this->get_footer();
|
110 |
-
|
111 |
-
$mpdf->SetHTMLFooter($footer);
|
112 |
-
|
113 |
-
$mpdf->WriteHTML($html);
|
114 |
-
|
115 |
-
$file = WPI_TMP_DIR . $this->formatted_number . ".pdf";
|
116 |
-
|
117 |
-
$mpdf->Output($file, $dest);
|
118 |
-
|
119 |
-
return $file;
|
120 |
-
|
121 |
-
} else {
|
122 |
-
die('Invoice already exists.');
|
123 |
-
}
|
124 |
-
}
|
125 |
-
|
126 |
-
/**
|
127 |
-
* Get the invoice if exist and show.
|
128 |
-
* @param $download
|
129 |
-
*/
|
130 |
-
public function view_invoice($download) {
|
131 |
-
if ($this->exists()) {
|
132 |
-
$file = WPI_TMP_DIR . $this->formatted_number . ".pdf";
|
133 |
-
$filename = $this->formatted_number . ".pdf";
|
134 |
-
|
135 |
-
if ($download) {
|
136 |
-
header('Content-type: application / pdf');
|
137 |
-
header('Content-Disposition: attachment; filename="' . $filename . '"');
|
138 |
-
header('Content-Transfer-Encoding: binary');
|
139 |
-
header('Content-Length: ' . filesize($file));
|
140 |
-
header('Accept-Ranges: bytes');
|
141 |
-
} else {
|
142 |
-
header('Content-type: application/pdf');
|
143 |
-
header('Content-Disposition: inline; filename="' . $filename . '"');
|
144 |
-
header('Content-Transfer-Encoding: binary');
|
145 |
-
header('Accept-Ranges: bytes');
|
146 |
-
}
|
147 |
-
|
148 |
-
@readfile($file);
|
149 |
-
exit;
|
150 |
-
|
151 |
-
} else {
|
152 |
-
die('No invoice found.');
|
153 |
-
}
|
154 |
-
}
|
155 |
-
|
156 |
-
/**
|
157 |
-
* Delete invoice from tmp dir.
|
158 |
-
*/
|
159 |
-
public function delete() {
|
160 |
-
if ($this->exists()) {
|
161 |
-
unlink($this->file);
|
162 |
-
}
|
163 |
-
$this->delete_all_post_meta();
|
164 |
-
}
|
165 |
-
|
166 |
-
/**
|
167 |
-
* Checks if the invoice exists.
|
168 |
-
* @return bool
|
169 |
-
*/
|
170 |
-
public function exists() {
|
171 |
-
$this->file = WPI_TMP_DIR . $this->get_formatted_invoice_number() . ".pdf";
|
172 |
-
return file_exists($this->file);
|
173 |
-
}
|
174 |
-
|
175 |
-
/**
|
176 |
-
* Gets the file path.
|
177 |
-
* @return mixed
|
178 |
-
*/
|
179 |
-
public function get_file() {
|
180 |
-
return $this->file;
|
181 |
-
}
|
182 |
-
|
183 |
-
/**
|
184 |
-
* Gets the template from template dir.
|
185 |
-
* @return string
|
186 |
-
*/
|
187 |
-
private function get_template() {
|
188 |
-
return WPI_TEMPLATES_DIR . $this->template_settings['template'];
|
189 |
-
}
|
190 |
-
}
|
191 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
includes/classes/wpi-invoice.php
DELETED
@@ -1,289 +0,0 @@
|
|
1 |
-
<?php
|
2 |
-
if ( ! defined( 'ABSPATH' ) ) {
|
3 |
-
exit; // Exit if accessed directly
|
4 |
-
}
|
5 |
-
|
6 |
-
if ( ! class_exists( 'WPI_Invoice' ) ) {
|
7 |
-
|
8 |
-
/**
|
9 |
-
* Makes the invoice.
|
10 |
-
* Class WPI_Invoice
|
11 |
-
*/
|
12 |
-
class WPI_Invoice extends WPI_Document{
|
13 |
-
|
14 |
-
/*
|
15 |
-
* WooCommerce order
|
16 |
-
*/
|
17 |
-
public $order;
|
18 |
-
|
19 |
-
/**
|
20 |
-
* Invoice number
|
21 |
-
* @var
|
22 |
-
*/
|
23 |
-
protected $number;
|
24 |
-
|
25 |
-
/**
|
26 |
-
* Formatted invoice number with prefix and/or suffix
|
27 |
-
* @var
|
28 |
-
*/
|
29 |
-
protected $formatted_number;
|
30 |
-
|
31 |
-
/**
|
32 |
-
* Invoice number database meta key
|
33 |
-
* @var string
|
34 |
-
*/
|
35 |
-
protected $invoice_number_meta_key = '_bewpi_invoice_number';
|
36 |
-
|
37 |
-
/**
|
38 |
-
* Creation date.
|
39 |
-
* @var
|
40 |
-
*/
|
41 |
-
protected $date;
|
42 |
-
|
43 |
-
/**
|
44 |
-
* Initialize invoice with WooCommerce order and plugin textdomain.
|
45 |
-
* @param string $order
|
46 |
-
* @param $textdomain
|
47 |
-
*/
|
48 |
-
public function __construct( $order ) {
|
49 |
-
|
50 |
-
parent::__construct( $order );
|
51 |
-
|
52 |
-
// Init if the invoice already exists.
|
53 |
-
if( get_post_meta( $this->order->id, '_bewpi_invoice_date', true ) === '' )
|
54 |
-
return;
|
55 |
-
|
56 |
-
$this->init();
|
57 |
-
}
|
58 |
-
|
59 |
-
/**
|
60 |
-
* Gets all the existing invoice data from database or creates new invoice number.
|
61 |
-
*/
|
62 |
-
private function init() {
|
63 |
-
( $this->template_settings['invoice_number_type'] === 'sequential_number' )
|
64 |
-
? $this->number = get_post_meta($this->order->id, '_bewpi_invoice_number', true)
|
65 |
-
: $this->number = $this->order->id;
|
66 |
-
$this->formatted_number = get_post_meta($this->order->id, '_bewpi_formatted_invoice_number', true);
|
67 |
-
$this->date = get_post_meta( $this->order->id, '_bewpi_invoice_date', true );
|
68 |
-
}
|
69 |
-
|
70 |
-
/**
|
71 |
-
* Gets next invoice number based on the user input.
|
72 |
-
* @param $order_id
|
73 |
-
*/
|
74 |
-
protected function get_next_invoice_number( $last_invoice_number ) {
|
75 |
-
// Check if it has been the first of january.
|
76 |
-
if ($this->template_settings['reset_invoice_number']) {
|
77 |
-
$last_year = $this->template_settings['last_invoiced_year'];
|
78 |
-
|
79 |
-
if ( !empty( $last_year ) && is_numeric($last_year)) {
|
80 |
-
$date = getdate();
|
81 |
-
$current_year = $date['year'];
|
82 |
-
if ($last_year < $current_year) {
|
83 |
-
// Set new year as last invoiced year and reset invoice number
|
84 |
-
return 1;
|
85 |
-
}
|
86 |
-
}
|
87 |
-
}
|
88 |
-
|
89 |
-
// Check if the next invoice number should be used.
|
90 |
-
$next_invoice_number = $this->template_settings['next_invoice_number'];
|
91 |
-
if ( !empty( $next_invoice_number )
|
92 |
-
&& empty( $last_invoice_number )
|
93 |
-
|| $next_invoice_number > $last_invoice_number) {
|
94 |
-
return $next_invoice_number;
|
95 |
-
}
|
96 |
-
|
97 |
-
return $last_invoice_number;
|
98 |
-
}
|
99 |
-
|
100 |
-
/**
|
101 |
-
* Create invoice date
|
102 |
-
* @return bool|string
|
103 |
-
*/
|
104 |
-
public function get_formatted_invoice_date( $add_post_meta = false ) {
|
105 |
-
$date_format = $this->template_settings['invoice_date_format'];
|
106 |
-
//$date = DateTime::createFromFormat('Y-m-d H:i:s', $this->order->order_date);
|
107 |
-
//$date = date( $date_format );
|
108 |
-
|
109 |
-
if ($date_format != "") {
|
110 |
-
//$formatted_date = $date->format($date_format);
|
111 |
-
$this->date = date($date_format);
|
112 |
-
} else {
|
113 |
-
//$formatted_date = $date->format($date, "d-m-Y");
|
114 |
-
$this->date = date('d-m-Y');
|
115 |
-
}
|
116 |
-
|
117 |
-
if( $add_post_meta )
|
118 |
-
add_post_meta($this->order->id, '_bewpi_invoice_date', $this->date);
|
119 |
-
|
120 |
-
return $this->date;
|
121 |
-
}
|
122 |
-
|
123 |
-
/*
|
124 |
-
* Format the order date and return
|
125 |
-
*/
|
126 |
-
public function get_formatted_order_date() {
|
127 |
-
$order_date = $date = DateTime::createFromFormat('Y-m-d H:i:s', $this->order->order_date);
|
128 |
-
|
129 |
-
if ( !empty ( $this->template_settings['order_date_format'] ) ) {
|
130 |
-
$date_format = $this->template_settings['order_date_format'];
|
131 |
-
$formatted_date = $order_date->format($date_format);
|
132 |
-
} else {
|
133 |
-
$formatted_date = $order_date->format($order_date, "d-m-Y");
|
134 |
-
}
|
135 |
-
|
136 |
-
return $formatted_date;
|
137 |
-
}
|
138 |
-
|
139 |
-
/**
|
140 |
-
* Creates new invoice number with SQL MAX CAST.
|
141 |
-
* @param $order_id
|
142 |
-
* @param $number
|
143 |
-
*/
|
144 |
-
protected function create_invoice_number($next_number) {
|
145 |
-
global $wpdb;
|
146 |
-
|
147 |
-
// attempt the query up to 3 times for a much higher success rate if it fails (due to Deadlock)
|
148 |
-
$success = false;
|
149 |
-
for ($i = 0; $i < 3 && !$success; $i++) {
|
150 |
-
// this seems to me like the safest way to avoid order number clashes
|
151 |
-
$query = $wpdb->prepare(
|
152 |
-
"
|
153 |
-
INSERT INTO {$wpdb->postmeta} (post_id, meta_key, meta_value)
|
154 |
-
SELECT %d, %s, IF( MAX( CAST( meta_value as UNSIGNED ) ) IS NULL, %d, MAX( CAST( meta_value as UNSIGNED ) ) + 1 )
|
155 |
-
FROM {$wpdb->postmeta}
|
156 |
-
WHERE meta_key = %s
|
157 |
-
",
|
158 |
-
$this->order->id, $this->invoice_number_meta_key, $next_number, $this->invoice_number_meta_key
|
159 |
-
);
|
160 |
-
$success = $wpdb->query($query);
|
161 |
-
}
|
162 |
-
|
163 |
-
return $success;
|
164 |
-
}
|
165 |
-
|
166 |
-
/**
|
167 |
-
* Format the invoice number with prefix and/or suffix.
|
168 |
-
* @return mixed
|
169 |
-
*/
|
170 |
-
protected function format_invoice_number() {
|
171 |
-
$invoice_number_format = $this->template_settings['invoice_format'];
|
172 |
-
$digit_str = "%0" . $this->template_settings['invoice_number_digits'] . "s";
|
173 |
-
$this->number = sprintf($digit_str, $this->number);
|
174 |
-
$year = date('Y');
|
175 |
-
$y = date('y');
|
176 |
-
|
177 |
-
$invoice_number_format = str_replace(
|
178 |
-
array( '[prefix]', '[suffix]', '[number]', '[Y]', '[y]' ),
|
179 |
-
array( $this->template_settings['invoice_prefix'], $this->template_settings['invoice_suffix'], $this->number, $year, $y ),
|
180 |
-
$invoice_number_format );
|
181 |
-
|
182 |
-
add_post_meta($this->order->id, '_bewpi_formatted_invoice_number', $invoice_number_format);
|
183 |
-
|
184 |
-
return $invoice_number_format;
|
185 |
-
}
|
186 |
-
|
187 |
-
/**
|
188 |
-
* When an invoice gets generated again then the post meta needs to get deleted.
|
189 |
-
*/
|
190 |
-
protected function delete_all_post_meta() {
|
191 |
-
delete_post_meta( $this->order->id, '_bewpi_invoice_number' );
|
192 |
-
delete_post_meta( $this->order->id, '_bewpi_formatted_invoice_number' );
|
193 |
-
delete_post_meta( $this->order->id, '_bewpi_invoice_date' );
|
194 |
-
}
|
195 |
-
|
196 |
-
/**
|
197 |
-
* Returns MPDF footer.
|
198 |
-
* @return string
|
199 |
-
*/
|
200 |
-
protected function get_footer() {
|
201 |
-
ob_start(); ?>
|
202 |
-
|
203 |
-
<table class="foot">
|
204 |
-
<tbody>
|
205 |
-
<tr>
|
206 |
-
<td class="border" colspan="2">
|
207 |
-
<?php echo $this->template_settings['terms']; ?>
|
208 |
-
<br/>
|
209 |
-
<?php
|
210 |
-
$customer_order_notes = $this->order->get_customer_order_notes();
|
211 |
-
if ( count( $customer_order_notes ) > 0 ) { ?>
|
212 |
-
<p>
|
213 |
-
<strong><?php _e('Customer note', $this->textdomain); ?> </strong><?php echo $customer_order_notes[0]->comment_content; ?>
|
214 |
-
</p>
|
215 |
-
<?php } ?>
|
216 |
-
</td>
|
217 |
-
</tr>
|
218 |
-
<tr>
|
219 |
-
<td class="company-details">
|
220 |
-
<p>
|
221 |
-
<?php echo nl2br($this->template_settings['company_details']); ?>
|
222 |
-
</p>
|
223 |
-
</td>
|
224 |
-
<td class="payment">
|
225 |
-
<p>
|
226 |
-
<?php printf( __( '%sPayment%s via', $this->textdomain ), '<b>', '</b>' ); ?> <?php echo $this->order->payment_method_title; ?>
|
227 |
-
</p>
|
228 |
-
</td>
|
229 |
-
</tr>
|
230 |
-
</tbody>
|
231 |
-
</table>
|
232 |
-
|
233 |
-
<?php $html = ob_get_contents();
|
234 |
-
|
235 |
-
ob_end_clean();
|
236 |
-
|
237 |
-
return $html;
|
238 |
-
}
|
239 |
-
|
240 |
-
/**
|
241 |
-
* Get's the invoice number from db.
|
242 |
-
* @param $order_id
|
243 |
-
* @return mixed
|
244 |
-
*/
|
245 |
-
public function get_invoice_number() {
|
246 |
-
global $wpdb;
|
247 |
-
|
248 |
-
$results = $wpdb->get_results(
|
249 |
-
$wpdb->prepare(
|
250 |
-
"
|
251 |
-
SELECT meta_value
|
252 |
-
FROM $wpdb->postmeta
|
253 |
-
WHERE post_id = %d
|
254 |
-
AND meta_key = %s
|
255 |
-
", $this->order->id, $this->invoice_number_meta_key
|
256 |
-
)
|
257 |
-
);
|
258 |
-
|
259 |
-
if (count($results) == 1) {
|
260 |
-
return $results[0]->meta_value;
|
261 |
-
}
|
262 |
-
}
|
263 |
-
|
264 |
-
/**
|
265 |
-
* Getter for formatted invoice number.
|
266 |
-
* @return mixed
|
267 |
-
*/
|
268 |
-
public function get_formatted_invoice_number() {
|
269 |
-
return $this->formatted_number;
|
270 |
-
}
|
271 |
-
|
272 |
-
/**
|
273 |
-
* Gets the year from the WooCommerce order date.
|
274 |
-
* @return bool|string
|
275 |
-
*/
|
276 |
-
public function get_formatted_order_year() {
|
277 |
-
return date("Y", strtotime($this->order->order_date));
|
278 |
-
}
|
279 |
-
|
280 |
-
/**
|
281 |
-
* Get total with or without refunds
|
282 |
-
*/
|
283 |
-
public function get_formatted_total() {
|
284 |
-
if( $this->order->get_total_refunded() > 0 ) {
|
285 |
-
$total = wc_price( $this->order->get_total() - $this->order->get_total_refunded() );
|
286 |
-
}
|
287 |
-
}
|
288 |
-
}
|
289 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
includes/views/templates/invoice-micro.php
CHANGED
@@ -25,14 +25,15 @@
|
|
25 |
table.products td, table.products th {
|
26 |
padding: 5px;
|
27 |
}
|
28 |
-
tr.product td {
|
29 |
border-bottom: 1px solid #CECECE;
|
30 |
}
|
31 |
td.total, td.grand-total {
|
32 |
border-top: 4px solid #8D8D8D;
|
|
|
33 |
}
|
34 |
td.grand-total {
|
35 |
-
font-size: 16px;
|
36 |
}
|
37 |
table, tbody, h1 {
|
38 |
margin: 0;
|
@@ -119,16 +120,44 @@
|
|
119 |
.foot td {
|
120 |
border: 1px solid white;
|
121 |
}
|
|
|
|
|
|
|
122 |
.number, .grand-total {
|
123 |
-
color: <?php echo $this->
|
|
|
|
|
|
|
124 |
}
|
125 |
.foot td.border {
|
126 |
-
border-bottom: 8px solid <?php echo $this->
|
127 |
}
|
128 |
/* End change colors */
|
129 |
.space td {
|
130 |
padding-bottom: 50px;
|
131 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
132 |
</style>
|
133 |
</head>
|
134 |
<body>
|
@@ -137,14 +166,14 @@
|
|
137 |
<tbody>
|
138 |
<tr>
|
139 |
<td class="logo">
|
140 |
-
<?php if( !empty( $this->
|
141 |
-
<img class="company-logo" src="<?php echo $this->
|
142 |
<?php } else { ?>
|
143 |
-
<h1 class="company-logo"><?php echo $this->
|
144 |
<?php } ?>
|
145 |
</td>
|
146 |
<td class="info">
|
147 |
-
<?php echo nl2br( $this->
|
148 |
</td>
|
149 |
</tr>
|
150 |
</tbody>
|
@@ -152,12 +181,12 @@
|
|
152 |
<table class="two-column customer">
|
153 |
<tbody>
|
154 |
<tr>
|
155 |
-
<td>
|
156 |
-
<b
|
157 |
<?php echo $this->order->get_formatted_billing_address(); ?>
|
158 |
</td>
|
159 |
-
<td class="address">
|
160 |
-
<b
|
161 |
<?php echo $this->order->get_formatted_shipping_address(); ?>
|
162 |
</td>
|
163 |
</tr>
|
@@ -168,40 +197,54 @@
|
|
168 |
<tr>
|
169 |
<td class="invoice-details">
|
170 |
<h1 class="title"><?php _e( 'Invoice', $this->textdomain ); ?></h1>
|
171 |
-
<span class="number"><?php echo $this->
|
172 |
<span class="small-font"><?php echo $this->get_formatted_invoice_date(); ?></span><br/><br/>
|
173 |
<span class="small-font"><?php printf( __( 'Order Number %s', $this->textdomain ), $this->order->get_order_number() ); ?></span><br/>
|
174 |
<span class="small-font"><?php printf( __( 'Order Date %s', $this->textdomain ), $this->get_formatted_order_date() ); ?></span><br/>
|
175 |
</td>
|
176 |
-
<td class="total-amount" bgcolor="<?php echo $this->
|
177 |
<span>
|
178 |
<h1 class="amount"><?php echo wc_price( $this->order->get_total(), array( 'currency' => $this->order->get_order_currency() ) ); ?></h1>
|
179 |
-
<p class="small-font"><?php echo $this->
|
180 |
</span>
|
181 |
</td>
|
182 |
</tr>
|
183 |
</tbody>
|
184 |
</table>
|
185 |
-
<table class="products">
|
186 |
<thead>
|
187 |
-
<tr>
|
188 |
<th class="align-left"><?php _e( 'Description', $this->textdomain ); ?></th>
|
189 |
<?php
|
190 |
-
if( $this->
|
191 |
-
$colspan = 3;
|
192 |
echo '<th class="align-left">' . __( "SKU", $this->textdomain ) . '</th>';
|
193 |
-
}
|
194 |
-
$colspan = 2; }
|
195 |
?>
|
196 |
-
|
197 |
-
<th class="align-left"><?php _e( '
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
198 |
<th class="align-right"><?php _e( 'Total', $this->textdomain ); ?></th>
|
199 |
</tr>
|
200 |
</thead>
|
201 |
<tbody>
|
202 |
<?php foreach( $this->order->get_items( 'line_item' ) as $item_id => $item ) {
|
203 |
$product = wc_get_product( $item['product_id'] ); ?>
|
204 |
-
<tr class="product">
|
205 |
<td>
|
206 |
<?php echo $product->get_title(); ?>
|
207 |
<?php
|
@@ -243,70 +286,135 @@
|
|
243 |
}
|
244 |
?>
|
245 |
</td>
|
246 |
-
|
247 |
-
|
248 |
-
|
249 |
-
|
250 |
-
|
251 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
252 |
</td>
|
253 |
-
|
254 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
255 |
</td>
|
256 |
</tr>
|
257 |
<?php } ?>
|
258 |
<!-- Space -->
|
259 |
<tr class="space">
|
260 |
-
|
261 |
-
<td colspan="2"></td>
|
262 |
</tr>
|
|
|
263 |
<!-- Discount -->
|
264 |
-
<?php if( $this->
|
265 |
<tr class="discount after-products">
|
266 |
-
<td colspan="<?php echo $colspan; ?>"></td>
|
267 |
-
<td
|
268 |
-
<td
|
269 |
</tr>
|
270 |
<?php } ?>
|
271 |
<!-- Shipping -->
|
272 |
-
<?php if( $this->
|
273 |
<tr class="shipping after-products">
|
274 |
-
<td colspan="<?php echo $colspan; ?>"></td>
|
275 |
-
<td
|
276 |
-
<td
|
277 |
</tr>
|
278 |
<?php } ?>
|
279 |
<!-- Subtotal -->
|
280 |
-
<?php if( $this->
|
281 |
<tr class="subtotal after-products">
|
282 |
-
<td colspan="<?php echo $colspan; ?>"></td>
|
283 |
-
<td
|
284 |
-
<td
|
285 |
</tr>
|
286 |
<?php } ?>
|
287 |
<!-- Tax -->
|
288 |
-
<?php if( $this->
|
289 |
-
|
290 |
-
|
291 |
-
|
292 |
-
|
293 |
-
|
|
|
|
|
|
|
|
|
294 |
<?php } ?>
|
295 |
<!-- Total -->
|
296 |
-
<tr>
|
297 |
-
<td colspan="<?php echo $colspan; ?>"></td>
|
298 |
-
<td
|
299 |
-
<td class="grand-total align-right"
|
300 |
-
<?php echo wc_price( $this->order->get_total(), array( 'currency' => $this->order->get_order_currency() ) ); ?>
|
301 |
-
</td>
|
302 |
</tr>
|
303 |
-
|
304 |
-
|
305 |
-
|
306 |
-
<td
|
307 |
-
|
308 |
-
|
309 |
-
</tr>
|
|
|
310 |
</tbody>
|
311 |
</table>
|
312 |
</div>
|
25 |
table.products td, table.products th {
|
26 |
padding: 5px;
|
27 |
}
|
28 |
+
tr.product-row td {
|
29 |
border-bottom: 1px solid #CECECE;
|
30 |
}
|
31 |
td.total, td.grand-total {
|
32 |
border-top: 4px solid #8D8D8D;
|
33 |
+
padding-bottom: 0; margin-bottom: 0;
|
34 |
}
|
35 |
td.grand-total {
|
36 |
+
font-size: 16px !important;
|
37 |
}
|
38 |
table, tbody, h1 {
|
39 |
margin: 0;
|
120 |
.foot td {
|
121 |
border: 1px solid white;
|
122 |
}
|
123 |
+
.refunded {
|
124 |
+
color: #a00 !important;
|
125 |
+
}
|
126 |
.number, .grand-total {
|
127 |
+
color: <?php echo $this->template_options['bewpi_color_theme']; ?>;
|
128 |
+
}
|
129 |
+
.total-without-refund {
|
130 |
+
color: #757575 !important;
|
131 |
}
|
132 |
.foot td.border {
|
133 |
+
border-bottom: 8px solid <?php echo $this->template_options['bewpi_color_theme']; ?>;
|
134 |
}
|
135 |
/* End change colors */
|
136 |
.space td {
|
137 |
padding-bottom: 50px;
|
138 |
}
|
139 |
+
<?php
|
140 |
+
// Create css for outlining the product cells.
|
141 |
+
$righter_product_row_tds_css = "";
|
142 |
+
for ( $td = $this->colspan['left'] + 1; $td <= $this->number_of_columns; $td++ ) {
|
143 |
+
if ( $td !== $this->number_of_columns ) {
|
144 |
+
$righter_product_row_tds_css .= "tr.product-row td:nth-child(" . $td . "),";
|
145 |
+
} else {
|
146 |
+
$righter_product_row_tds_css .= "tr.product-row td:nth-child(" . $td . ")";
|
147 |
+
$righter_product_row_tds_css .= "{ width: " . ( 50 / $this->colspan['right'] ) . "%; }";
|
148 |
+
}
|
149 |
+
}
|
150 |
+
echo $righter_product_row_tds_css;
|
151 |
+
?>
|
152 |
+
tr.product-row td:nth-child(1) { /* Description td */
|
153 |
+
width: <?php echo $this->desc_cell_width; ?>;
|
154 |
+
}
|
155 |
+
table.products {
|
156 |
+
table-layout: fixed;
|
157 |
+
}
|
158 |
+
table.products td {
|
159 |
+
overflow: hidden;
|
160 |
+
}
|
161 |
</style>
|
162 |
</head>
|
163 |
<body>
|
166 |
<tbody>
|
167 |
<tr>
|
168 |
<td class="logo">
|
169 |
+
<?php if( !empty( $this->template_options['bewpi_company_logo'] ) ) { ?>
|
170 |
+
<img class="company-logo" src="<?php echo $this->template_options['bewpi_company_logo']; ?>"/>
|
171 |
<?php } else { ?>
|
172 |
+
<h1 class="company-logo"><?php echo $this->template_options['bewpi_company_name']; ?></h1>
|
173 |
<?php } ?>
|
174 |
</td>
|
175 |
<td class="info">
|
176 |
+
<?php echo nl2br( $this->template_options['bewpi_company_address'] ); ?>
|
177 |
</td>
|
178 |
</tr>
|
179 |
</tbody>
|
181 |
<table class="two-column customer">
|
182 |
<tbody>
|
183 |
<tr>
|
184 |
+
<td class="address small-font">
|
185 |
+
<b><?php _e( 'Invoice to', $this->textdomain ); ?></b><br/>
|
186 |
<?php echo $this->order->get_formatted_billing_address(); ?>
|
187 |
</td>
|
188 |
+
<td class="address small-font">
|
189 |
+
<b><?php _e( 'Ship to', $this->textdomain ); ?></b><br/>
|
190 |
<?php echo $this->order->get_formatted_shipping_address(); ?>
|
191 |
</td>
|
192 |
</tr>
|
197 |
<tr>
|
198 |
<td class="invoice-details">
|
199 |
<h1 class="title"><?php _e( 'Invoice', $this->textdomain ); ?></h1>
|
200 |
+
<span class="number"><?php echo $this->get_formatted_number(); ?></span><br/>
|
201 |
<span class="small-font"><?php echo $this->get_formatted_invoice_date(); ?></span><br/><br/>
|
202 |
<span class="small-font"><?php printf( __( 'Order Number %s', $this->textdomain ), $this->order->get_order_number() ); ?></span><br/>
|
203 |
<span class="small-font"><?php printf( __( 'Order Date %s', $this->textdomain ), $this->get_formatted_order_date() ); ?></span><br/>
|
204 |
</td>
|
205 |
+
<td class="total-amount" bgcolor="<?php echo $this->template_options['bewpi_color_theme']; ?>">
|
206 |
<span>
|
207 |
<h1 class="amount"><?php echo wc_price( $this->order->get_total(), array( 'currency' => $this->order->get_order_currency() ) ); ?></h1>
|
208 |
+
<p class="small-font"><?php echo $this->template_options['bewpi_intro_text']; ?></p>
|
209 |
</span>
|
210 |
</td>
|
211 |
</tr>
|
212 |
</tbody>
|
213 |
</table>
|
214 |
+
<table class="products small-font">
|
215 |
<thead>
|
216 |
+
<tr class="table-headers">
|
217 |
<th class="align-left"><?php _e( 'Description', $this->textdomain ); ?></th>
|
218 |
<?php
|
219 |
+
if( $this->template_options['bewpi_show_sku'] ) {
|
|
|
220 |
echo '<th class="align-left">' . __( "SKU", $this->textdomain ) . '</th>';
|
221 |
+
}
|
|
|
222 |
?>
|
223 |
+
<th class="align-left"><?php _e( 'Cost', $this->textdomain ); ?></th>
|
224 |
+
<th class="align-left"><?php _e( 'Qty', $this->textdomain ); ?></th>
|
225 |
+
|
226 |
+
<!-- Tax -->
|
227 |
+
<?php
|
228 |
+
$order_taxes = $this->order->get_taxes();
|
229 |
+
if ( $this->template_options['bewpi_show_tax'] && wc_tax_enabled() && empty( $legacy_order ) && ! empty( $order_taxes ) ) :
|
230 |
+
foreach ( $order_taxes as $tax_id => $tax_item ) :
|
231 |
+
$column_label = ! empty( $tax_item['label'] ) ? $tax_item['label'] : __( 'VAT', $this->textdomain );
|
232 |
+
?>
|
233 |
+
<th class="align-left">
|
234 |
+
<?php echo esc_attr( $column_label ); ?>
|
235 |
+
</th>
|
236 |
+
<?php
|
237 |
+
endforeach;
|
238 |
+
endif;
|
239 |
+
?>
|
240 |
+
|
241 |
<th class="align-right"><?php _e( 'Total', $this->textdomain ); ?></th>
|
242 |
</tr>
|
243 |
</thead>
|
244 |
<tbody>
|
245 |
<?php foreach( $this->order->get_items( 'line_item' ) as $item_id => $item ) {
|
246 |
$product = wc_get_product( $item['product_id'] ); ?>
|
247 |
+
<tr class="product-row">
|
248 |
<td>
|
249 |
<?php echo $product->get_title(); ?>
|
250 |
<?php
|
286 |
}
|
287 |
?>
|
288 |
</td>
|
289 |
+
<?php
|
290 |
+
if ( $this->template_options['bewpi_show_sku'] ) :
|
291 |
+
echo '<td>';
|
292 |
+
echo ( $product->get_sku() != '' ) ? $product->get_sku() : '-';
|
293 |
+
echo '</td>';
|
294 |
+
endif;
|
295 |
+
?>
|
296 |
+
<td>
|
297 |
+
<?php
|
298 |
+
if ( isset( $item['line_total'] ) ) {
|
299 |
+
if ( isset( $item['line_subtotal'] ) && $item['line_subtotal'] != $item['line_total'] ) {
|
300 |
+
echo '<del>' . wc_price( $this->order->get_item_subtotal( $item, false, true ), array( 'currency' => $this->order->get_order_currency() ) ) . '</del> ';
|
301 |
+
}
|
302 |
+
echo wc_price( $this->order->get_item_total( $item, false, true ), array( 'currency' => $this->order->get_order_currency() ) );
|
303 |
+
}
|
304 |
+
?>
|
305 |
+
</td>
|
306 |
+
<td>
|
307 |
+
<?php
|
308 |
+
echo $item['qty'];
|
309 |
+
|
310 |
+
if ( $refunded_qty = $this->order->get_qty_refunded_for_item( $item_id ) )
|
311 |
+
echo '<br/><small class="refunded">-' . $refunded_qty . '</small>';
|
312 |
+
?>
|
313 |
</td>
|
314 |
+
<?php
|
315 |
+
if ( empty( $legacy_order ) && wc_tax_enabled() && $this->template_options['bewpi_show_tax'] ) :
|
316 |
+
$line_tax_data = isset( $item['line_tax_data'] ) ? $item['line_tax_data'] : '';
|
317 |
+
$tax_data = maybe_unserialize( $line_tax_data );
|
318 |
+
|
319 |
+
foreach ( $this->order->get_taxes() as $tax_item ) :
|
320 |
+
$tax_item_id = $tax_item['rate_id'];
|
321 |
+
$tax_item_total = isset( $tax_data['total'][ $tax_item_id ] ) ? $tax_data['total'][ $tax_item_id ] : '';
|
322 |
+
$tax_item_subtotal = isset( $tax_data['subtotal'][ $tax_item_id ] ) ? $tax_data['subtotal'][ $tax_item_id ] : '';
|
323 |
+
?>
|
324 |
+
|
325 |
+
<td class="item-tax">
|
326 |
+
<?php
|
327 |
+
if ( '' != $tax_item_total ) {
|
328 |
+
if ( isset( $tax_item_subtotal ) && $tax_item_subtotal != $tax_item_total ) {
|
329 |
+
echo '<del>' . wc_price( wc_round_tax_total( $tax_item_subtotal ), array( 'currency' => $this->order->get_order_currency() ) ) . '</del> ';
|
330 |
+
}
|
331 |
+
|
332 |
+
echo wc_price( wc_round_tax_total( $tax_item_total ), array( 'currency' => $this->order->get_order_currency() ) );
|
333 |
+
} else {
|
334 |
+
echo '–';
|
335 |
+
}
|
336 |
+
|
337 |
+
if ( $refunded = $this->order->get_tax_refunded_for_item( $item_id, $tax_item_id ) ) {
|
338 |
+
echo '<br/><small class="refunded">-' . wc_price( $refunded, array( 'currency' => $this->order->get_order_currency() ) ) . '</small>';
|
339 |
+
}
|
340 |
+
?>
|
341 |
+
</td>
|
342 |
+
|
343 |
+
<?php
|
344 |
+
endforeach;
|
345 |
+
endif;
|
346 |
+
?>
|
347 |
+
<td class="align-right item-total" width="">
|
348 |
+
<?php
|
349 |
+
if ( isset( $item['line_total'] ) ) {
|
350 |
+
if ( isset( $item['line_subtotal'] ) && $item['line_subtotal'] != $item['line_total'] ) {
|
351 |
+
echo '<del>' . wc_price( $item['line_subtotal'], array( 'currency' => $this->order->get_order_currency() ) ) . '</del> ';
|
352 |
+
}
|
353 |
+
echo wc_price( $item['line_total'], array( 'currency' => $this->order->get_order_currency() ) );
|
354 |
+
}
|
355 |
+
|
356 |
+
if ( $refunded = $this->order->get_total_refunded_for_item( $item_id ) ) {
|
357 |
+
echo '<br/><small class="refunded">-' . wc_price( $refunded, array( 'currency' => $this->order->get_order_currency() ) ) . '</small>';
|
358 |
+
}
|
359 |
+
?>
|
360 |
</td>
|
361 |
</tr>
|
362 |
<?php } ?>
|
363 |
<!-- Space -->
|
364 |
<tr class="space">
|
365 |
+
<td colspan="<?php echo $this->number_of_columns; ?>"></td>
|
|
|
366 |
</tr>
|
367 |
+
<!-- Table footers -->
|
368 |
<!-- Discount -->
|
369 |
+
<?php if( $this->template_options['bewpi_show_discount'] ) { ?>
|
370 |
<tr class="discount after-products">
|
371 |
+
<td colspan="<?php echo $this->colspan['left']; ?>"></td>
|
372 |
+
<td colspan="<?php echo $this->colspan['right_left']; ?>"><?php _e( 'Discount', $this->textdomain ); ?></td>
|
373 |
+
<td colspan="<?php echo $this->colspan['right_right']; ?>" class="align-right"><?php echo wc_price( $this->order->get_total_discount(), array( 'currency' => $this->order->get_order_currency() ) ); ?></td>
|
374 |
</tr>
|
375 |
<?php } ?>
|
376 |
<!-- Shipping -->
|
377 |
+
<?php if( $this->template_options['bewpi_show_shipping'] ) { ?>
|
378 |
<tr class="shipping after-products">
|
379 |
+
<td colspan="<?php echo $this->colspan['left']; ?>"></td>
|
380 |
+
<td colspan="<?php echo $this->colspan['right_left']; ?>"><?php _e( 'Shipping', $this->textdomain ); ?></td>
|
381 |
+
<td colspan="<?php echo $this->colspan['right_right']; ?>" class="align-right"><?php echo wc_price( $this->order->get_total_shipping(), array( 'currency' => $this->order->get_order_currency() ) ); ?></td>
|
382 |
</tr>
|
383 |
<?php } ?>
|
384 |
<!-- Subtotal -->
|
385 |
+
<?php if( $this->template_options['bewpi_show_subtotal'] ) { ?>
|
386 |
<tr class="subtotal after-products">
|
387 |
+
<td colspan="<?php echo $this->colspan['left']; ?>"></td>
|
388 |
+
<td colspan="<?php echo $this->colspan['right_left']; ?>"><?php _e( 'Subtotal', $this->textdomain ); ?></td>
|
389 |
+
<td colspan="<?php echo $this->colspan['right_right']; ?>" class="align-right"><?php echo wc_price( $this->order->get_subtotal(), array( 'currency' => $this->order->get_order_currency() ) ); ?></td>
|
390 |
</tr>
|
391 |
<?php } ?>
|
392 |
<!-- Tax -->
|
393 |
+
<?php if( $this->template_options['bewpi_show_tax'] && wc_tax_enabled() ) {
|
394 |
+
foreach ( $this->order->get_tax_totals() as $code => $tax ) : ?>
|
395 |
+
<tr class="after-products">
|
396 |
+
<td colspan="<?php echo $this->colspan['left']; ?>"></td>
|
397 |
+
<td colspan="<?php echo $this->colspan['right_left']; ?>">
|
398 |
+
<?php printf( __( 'VAT %s', true, $this->textdomain ), WC_Tax::get_rate_percent( $tax->rate_id ) ); ?>
|
399 |
+
</td>
|
400 |
+
<td colspan="<?php echo $this->colspan['right_right']; ?>" class="align-right"><?php echo $tax->formatted_amount; ?></td>
|
401 |
+
</tr>
|
402 |
+
<?php endforeach; ?>
|
403 |
<?php } ?>
|
404 |
<!-- Total -->
|
405 |
+
<tr class="after-products">
|
406 |
+
<td colspan="<?php echo $this->colspan['left']; ?>"></td>
|
407 |
+
<td colspan="<?php echo $this->colspan['right_left']; ?>" class="total"><?php _e( 'Total', $this->textdomain ); ?></td>
|
408 |
+
<td colspan="<?php echo $this->colspan['right_right']; ?>" class="grand-total align-right"><?php echo $this->get_total(); ?></td>
|
|
|
|
|
409 |
</tr>
|
410 |
+
<!-- Refunded -->
|
411 |
+
<?php if ( $this->order->get_total_refunded() > 0 ) { ?>
|
412 |
+
<tr class="after-products">
|
413 |
+
<td colspan="<?php echo $this->colspan['left']; ?>"></td>
|
414 |
+
<td colspan="<?php echo $this->colspan['right_left']; ?>" class="refunded"><?php _e( 'Refunded', $this->textdomain ); ?></td>
|
415 |
+
<td colspan="<?php echo $this->colspan['right_right']; ?>" class="refunded align-right"><?php echo '-' . wc_price( $this->order->get_total_refunded() ) ?></td>
|
416 |
+
</tr>
|
417 |
+
<?php } ?>
|
418 |
</tbody>
|
419 |
</table>
|
420 |
</div>
|
lang/be-woocommerce-pdf-invoices-nb_NO.mo
ADDED
Binary file
|
lang/be-woocommerce-pdf-invoices-nb_NO.po
ADDED
@@ -0,0 +1,370 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
msgid ""
|
2 |
+
msgstr ""
|
3 |
+
"Project-Id-Version: WooCommerce PDF Invoices\n"
|
4 |
+
"POT-Creation-Date: 2015-03-30 15:38+0100\n"
|
5 |
+
"PO-Revision-Date: 2015-04-09 12:59+0100\n"
|
6 |
+
"Last-Translator: Mosaika.fr <bonjour@mosaika.fr>\n"
|
7 |
+
"Language-Team: Anders Sorensen <anders@zorensen.no>\n"
|
8 |
+
"Language: nb_NO\n"
|
9 |
+
"MIME-Version: 1.0\n"
|
10 |
+
"Content-Type: text/plain; charset=UTF-8\n"
|
11 |
+
"Content-Transfer-Encoding: 8bit\n"
|
12 |
+
"X-Generator: Poedit 1.7.5\n"
|
13 |
+
"X-Poedit-Basepath: ..\n"
|
14 |
+
"X-Poedit-SourceCharset: UTF-8\n"
|
15 |
+
"X-Poedit-KeywordsList: __;_e;_n:1,2;_x:1,2c;_ex:1,2c;_nx:4c,1,2;esc_attr__;"
|
16 |
+
"esc_attr_e;esc_attr_x:1,2c;esc_html__;esc_html_e;esc_html_x:1,2c;_n_noop:1,2;"
|
17 |
+
"_nx_noop:3c,1,2;__ngettext_noop:1,2\n"
|
18 |
+
"Plural-Forms: nplurals=2; plural=(n > 1);\n"
|
19 |
+
"X-Poedit-SearchPath-0: .\n"
|
20 |
+
"X-Poedit-SearchPathExcluded-0: *.js\n"
|
21 |
+
|
22 |
+
#: admin/classes/woocommerce-pdf-invoices.php:152
|
23 |
+
msgid "General"
|
24 |
+
msgstr "Generelt"
|
25 |
+
|
26 |
+
#: admin/classes/woocommerce-pdf-invoices.php:153
|
27 |
+
#: admin/classes/wpi-template-settings.php:104
|
28 |
+
msgid "Template"
|
29 |
+
msgstr "Mal"
|
30 |
+
|
31 |
+
#: admin/classes/woocommerce-pdf-invoices.php:167
|
32 |
+
msgid "Invoices"
|
33 |
+
msgstr "Fakturaer"
|
34 |
+
|
35 |
+
#: admin/classes/woocommerce-pdf-invoices.php:262
|
36 |
+
msgid "PDF Invoice"
|
37 |
+
msgstr "PDF Faktura"
|
38 |
+
|
39 |
+
#: admin/classes/wpi-general-settings.php:74
|
40 |
+
msgid "General Settings"
|
41 |
+
msgstr "Generelle innstillinger"
|
42 |
+
|
43 |
+
#: admin/classes/wpi-general-settings.php:75
|
44 |
+
msgid "Attach to Email"
|
45 |
+
msgstr "Legg ved e-post"
|
46 |
+
|
47 |
+
#: admin/classes/wpi-general-settings.php:79
|
48 |
+
msgid "Processing order"
|
49 |
+
msgstr "Behandler bestilling"
|
50 |
+
|
51 |
+
#: admin/classes/wpi-general-settings.php:83
|
52 |
+
msgid "Completed order"
|
53 |
+
msgstr "Fullført bestilling"
|
54 |
+
|
55 |
+
#: admin/classes/wpi-general-settings.php:87
|
56 |
+
msgid "Customer invoice"
|
57 |
+
msgstr "Kundefaktura"
|
58 |
+
|
59 |
+
#: admin/classes/wpi-general-settings.php:91
|
60 |
+
msgid "Attach to New order Email"
|
61 |
+
msgstr "Legg til ny bestilling e-post"
|
62 |
+
|
63 |
+
#: admin/classes/wpi-general-settings.php:92
|
64 |
+
msgid "Automatically send invoice to Google Drive, Egnyte, Dropbox or OneDrive"
|
65 |
+
msgstr ""
|
66 |
+
"Send automatisk faktura til Google Drive, Egnyte, Dropbox eller OneDrive"
|
67 |
+
|
68 |
+
#: admin/classes/wpi-general-settings.php:93
|
69 |
+
msgid "Email It In account"
|
70 |
+
msgstr "Email It In konto"
|
71 |
+
|
72 |
+
#: admin/classes/wpi-general-settings.php:133
|
73 |
+
msgid "For bookkeeping purposes."
|
74 |
+
msgstr "For regnskapsmessige årsaker."
|
75 |
+
|
76 |
+
#: admin/classes/wpi-general-settings.php:146
|
77 |
+
#, php-format
|
78 |
+
msgid "Signup at %s and enter your account below."
|
79 |
+
msgstr "Registrer deg på %s og skriv inn kontoen din under."
|
80 |
+
|
81 |
+
#: admin/classes/wpi-general-settings.php:159
|
82 |
+
#, php-format
|
83 |
+
msgid "Enter your %s account."
|
84 |
+
msgstr "Skriv inn din %s konto."
|
85 |
+
|
86 |
+
#: admin/classes/wpi-general-settings.php:184
|
87 |
+
msgid "Invalid type of Email."
|
88 |
+
msgstr "Ugyldig e-post."
|
89 |
+
|
90 |
+
#: admin/classes/wpi-general-settings.php:197
|
91 |
+
#: admin/classes/wpi-general-settings.php:210
|
92 |
+
#: admin/classes/wpi-template-settings.php:630
|
93 |
+
msgid "Please don't try to change the values."
|
94 |
+
msgstr "Vennligst ikke endre disse verdiene."
|
95 |
+
|
96 |
+
#: admin/classes/wpi-general-settings.php:223
|
97 |
+
msgid "Invalid Email address."
|
98 |
+
msgstr "Ugyldig e-post adresse."
|
99 |
+
|
100 |
+
#: admin/classes/wpi-settings.php:92
|
101 |
+
msgid "Allowed tags: "
|
102 |
+
msgstr "Tillatte koder: "
|
103 |
+
|
104 |
+
#: admin/classes/wpi-template-settings.php:103
|
105 |
+
msgid "Template Settings"
|
106 |
+
msgstr "Malinnstillinger"
|
107 |
+
|
108 |
+
#: admin/classes/wpi-template-settings.php:105
|
109 |
+
msgid "Color theme"
|
110 |
+
msgstr "Fargetema"
|
111 |
+
|
112 |
+
#: admin/classes/wpi-template-settings.php:106
|
113 |
+
msgid "Company name"
|
114 |
+
msgstr "Firmanavn"
|
115 |
+
|
116 |
+
#: admin/classes/wpi-template-settings.php:107
|
117 |
+
msgid "Company logo"
|
118 |
+
msgstr "Firmalogo"
|
119 |
+
|
120 |
+
#: admin/classes/wpi-template-settings.php:108
|
121 |
+
msgid "Intro text"
|
122 |
+
msgstr "Introtekst"
|
123 |
+
|
124 |
+
#: admin/classes/wpi-template-settings.php:109
|
125 |
+
msgid "Company address"
|
126 |
+
msgstr "Firmaadresse"
|
127 |
+
|
128 |
+
#: admin/classes/wpi-template-settings.php:110
|
129 |
+
msgid "Company details"
|
130 |
+
msgstr "Firmadetaljer"
|
131 |
+
|
132 |
+
#: admin/classes/wpi-template-settings.php:111
|
133 |
+
msgid "Terms & conditions, policies etc."
|
134 |
+
msgstr "Betingelser, vilkår etc."
|
135 |
+
|
136 |
+
#: admin/classes/wpi-template-settings.php:112
|
137 |
+
msgid "Invoice number type"
|
138 |
+
msgstr "Fakturanummer -type"
|
139 |
+
|
140 |
+
#: admin/classes/wpi-template-settings.php:113
|
141 |
+
msgid "Next invoice number"
|
142 |
+
msgstr "Neste fakturanummer"
|
143 |
+
|
144 |
+
#: admin/classes/wpi-template-settings.php:114
|
145 |
+
msgid "Number of digits"
|
146 |
+
msgstr "Ugyldig fakturanummer tall."
|
147 |
+
|
148 |
+
#: admin/classes/wpi-template-settings.php:115
|
149 |
+
msgid "Invoice number prefix"
|
150 |
+
msgstr "Fakturanummer prefiks"
|
151 |
+
|
152 |
+
#: admin/classes/wpi-template-settings.php:116
|
153 |
+
msgid "Invoice number suffix"
|
154 |
+
msgstr "Fakturanummer suffiks"
|
155 |
+
|
156 |
+
#: admin/classes/wpi-template-settings.php:117
|
157 |
+
msgid "Invoice number format"
|
158 |
+
msgstr "Fakturanummer -format"
|
159 |
+
|
160 |
+
#: admin/classes/wpi-template-settings.php:118
|
161 |
+
msgid "Reset on 1st January"
|
162 |
+
msgstr "Tilbakestill 1. Januar"
|
163 |
+
|
164 |
+
#: admin/classes/wpi-template-settings.php:119
|
165 |
+
msgid "Invoice date format"
|
166 |
+
msgstr "Faktura datoformat"
|
167 |
+
|
168 |
+
#: admin/classes/wpi-template-settings.php:120
|
169 |
+
msgid "Show SKU"
|
170 |
+
msgstr "Vis SKU"
|
171 |
+
|
172 |
+
#: admin/classes/wpi-template-settings.php:121
|
173 |
+
msgid "Show discount"
|
174 |
+
msgstr "Vis rabatt"
|
175 |
+
|
176 |
+
#: admin/classes/wpi-template-settings.php:122
|
177 |
+
msgid "Show subtotal"
|
178 |
+
msgstr "Vis subtotal"
|
179 |
+
|
180 |
+
#: admin/classes/wpi-template-settings.php:123
|
181 |
+
msgid "Show tax"
|
182 |
+
msgstr "Vis MVA"
|
183 |
+
|
184 |
+
#: admin/classes/wpi-template-settings.php:124
|
185 |
+
msgid "Show shipping"
|
186 |
+
msgstr "Vis frakt"
|
187 |
+
|
188 |
+
#: admin/classes/wpi-template-settings.php:125
|
189 |
+
msgid "Show customer notes"
|
190 |
+
msgstr "Vis kundenotat"
|
191 |
+
|
192 |
+
#: admin/classes/wpi-template-settings.php:163
|
193 |
+
msgid "Color theme of the invoice."
|
194 |
+
msgstr "Fargetema på faktura"
|
195 |
+
|
196 |
+
#: admin/classes/wpi-template-settings.php:186
|
197 |
+
msgid ""
|
198 |
+
"Please upload an image less then 200Kb and make sure it's a jpeg, jpg or png."
|
199 |
+
msgstr ""
|
200 |
+
"Vennligst last opp et bilde mindre enn 200kb og være sikker på at det er er "
|
201 |
+
"jpeg, jpg eller png."
|
202 |
+
|
203 |
+
#: admin/classes/wpi-template-settings.php:197
|
204 |
+
msgid "Remove logo"
|
205 |
+
msgstr "Fjern logo"
|
206 |
+
|
207 |
+
#: admin/classes/wpi-template-settings.php:352
|
208 |
+
msgid "Invoice number to use for next invoice."
|
209 |
+
msgstr "Fakturanummer å bruke for neste faktura"
|
210 |
+
|
211 |
+
#: admin/classes/wpi-template-settings.php:368
|
212 |
+
msgid "Number of zero digits."
|
213 |
+
msgstr "Antall nullsiffer."
|
214 |
+
|
215 |
+
#: admin/classes/wpi-template-settings.php:382
|
216 |
+
msgid "Prefix text for the invoice number. Not required."
|
217 |
+
msgstr "Prefiks tekst for fakturanummer. Ikke obligatorisk."
|
218 |
+
|
219 |
+
#: admin/classes/wpi-template-settings.php:396
|
220 |
+
msgid "Suffix text for the invoice number. Not required."
|
221 |
+
msgstr "Suffiks tekst for fakturanummer. Ikke obligatorisk."
|
222 |
+
|
223 |
+
#: admin/classes/wpi-template-settings.php:410
|
224 |
+
msgid ""
|
225 |
+
"Use [prefix], [suffix] and [number] as placeholders. [number] is required."
|
226 |
+
msgstr ""
|
227 |
+
"Bruk [prefix], [suffix] og [number] som plassholdere. [number] er "
|
228 |
+
"obligatorisk."
|
229 |
+
|
230 |
+
#: admin/classes/wpi-template-settings.php:424
|
231 |
+
msgid "Reset on the first of January."
|
232 |
+
msgstr "Tilbakestill 1. Januar."
|
233 |
+
|
234 |
+
#: admin/classes/wpi-template-settings.php:438
|
235 |
+
#, php-format
|
236 |
+
msgid "%sFormat%s of the date. Examples: %s or %s."
|
237 |
+
msgstr "%sFormat%s på dato. Eksempler: %s eller %s."
|
238 |
+
|
239 |
+
#: admin/classes/wpi-template-settings.php:485
|
240 |
+
msgid "Invalid template."
|
241 |
+
msgstr "Ugyldig mal."
|
242 |
+
|
243 |
+
#: admin/classes/wpi-template-settings.php:500
|
244 |
+
msgid "Invalid color theme code."
|
245 |
+
msgstr "Ugyldig fargetema -kode."
|
246 |
+
|
247 |
+
#: admin/classes/wpi-template-settings.php:513
|
248 |
+
msgid "Invalid company name."
|
249 |
+
msgstr "Ugyldig firmanavn."
|
250 |
+
|
251 |
+
#: admin/classes/wpi-template-settings.php:541
|
252 |
+
msgid "Invalid input into one of the textarea's."
|
253 |
+
msgstr "Ugyldig verdi i en av tekstområdene."
|
254 |
+
|
255 |
+
#: admin/classes/wpi-template-settings.php:553
|
256 |
+
msgid "Invalid (next) invoice number."
|
257 |
+
msgstr "Ugyldig (neste) fakturanummer."
|
258 |
+
|
259 |
+
#: admin/classes/wpi-template-settings.php:574
|
260 |
+
msgid "Invalid invoice number digits."
|
261 |
+
msgstr "Ugyldig fakturanummer tall."
|
262 |
+
|
263 |
+
#: admin/classes/wpi-template-settings.php:596
|
264 |
+
msgid "The [number] placeholder is required as invoice number format."
|
265 |
+
msgstr "[number] plassholder er obligatorisk som fakturanummer -format."
|
266 |
+
|
267 |
+
#: admin/classes/wpi-template-settings.php:603
|
268 |
+
msgid "Invalid invoice number format."
|
269 |
+
msgstr "Ugyldig fakturanummer -format."
|
270 |
+
|
271 |
+
#: admin/classes/wpi-template-settings.php:641
|
272 |
+
msgid "Invalid date format."
|
273 |
+
msgstr "Ugyldig datoformat."
|
274 |
+
|
275 |
+
#: admin/classes/wpi-template-settings.php:670
|
276 |
+
msgid "File is invalid and contains either '..' or './'."
|
277 |
+
msgstr "Filen er ugyldig og inneholder '..' eller './'."
|
278 |
+
|
279 |
+
#: admin/classes/wpi-template-settings.php:677
|
280 |
+
msgid "File is invalid and contains ':' after the first character."
|
281 |
+
msgstr "Filen er ugyldig og inneholder ':' etter første bokstav."
|
282 |
+
|
283 |
+
#: admin/classes/wpi-template-settings.php:686
|
284 |
+
msgid "Please upload image with extension jpg, jpeg or png."
|
285 |
+
msgstr "Vennligst last opp bilde i .jpg, .jpeg eller .png -format."
|
286 |
+
|
287 |
+
#: includes/classes/wpi-invoice.php:340
|
288 |
+
msgid "Customer note"
|
289 |
+
msgstr "Kundenotat: "
|
290 |
+
|
291 |
+
#: includes/views/templates/invoice-micro.php:156
|
292 |
+
msgid "Invoice"
|
293 |
+
msgstr "Faktura"
|
294 |
+
|
295 |
+
#: includes/views/templates/invoice-micro.php:174
|
296 |
+
msgid "Description"
|
297 |
+
msgstr "Produkt"
|
298 |
+
|
299 |
+
#: includes/views/templates/invoice-micro.php:178
|
300 |
+
msgid "SKU"
|
301 |
+
msgstr "SKU"
|
302 |
+
|
303 |
+
#: includes/views/templates/invoice-micro.php:182
|
304 |
+
msgid "Quantity"
|
305 |
+
msgstr "Ant"
|
306 |
+
|
307 |
+
#: includes/views/templates/invoice-micro.php:183
|
308 |
+
msgid "Unit price"
|
309 |
+
msgstr "Pris"
|
310 |
+
|
311 |
+
#: includes/views/templates/invoice-micro.php:184
|
312 |
+
#: includes/views/templates/invoice-micro.php:240
|
313 |
+
msgid "Total"
|
314 |
+
msgstr "Total"
|
315 |
+
|
316 |
+
#: includes/views/templates/invoice-micro.php:209
|
317 |
+
msgid "Discount"
|
318 |
+
msgstr "Rabatt"
|
319 |
+
|
320 |
+
#: includes/views/templates/invoice-micro.php:217
|
321 |
+
msgid "Shipping"
|
322 |
+
msgstr "Frakt"
|
323 |
+
|
324 |
+
#: includes/views/templates/invoice-micro.php:225
|
325 |
+
msgid "Subtotal"
|
326 |
+
msgstr "Subtotal"
|
327 |
+
|
328 |
+
#: includes/views/templates/invoice-micro.php:233
|
329 |
+
msgid "Tax"
|
330 |
+
msgstr "MVA"
|
331 |
+
|
332 |
+
#~ msgid "Signup at %s and enter your account beyond."
|
333 |
+
#~ msgstr "Meld je aan op %s en vul je account onderstaand in."
|
334 |
+
|
335 |
+
#~ msgid "%sFormat%s of the date. Examples: %s or %s"
|
336 |
+
#~ msgstr "%sFormat%s van de datum. Bijvoorbeeld: %s of %s"
|
337 |
+
|
338 |
+
#~ msgid "Show invoice"
|
339 |
+
#~ msgstr "Toon factuur"
|
340 |
+
|
341 |
+
#~ msgid "Create invoice"
|
342 |
+
#~ msgstr "Maak factuur"
|
343 |
+
|
344 |
+
#~ msgid "%sFormat%s of the date."
|
345 |
+
#~ msgstr "%sFormat%s van de datum."
|
346 |
+
|
347 |
+
#~ msgid "Use [prefix], [suffix] and [number] as placeholders."
|
348 |
+
#~ msgstr "Gebruik [suffix], [prefix] en [number] als aanduidingen."
|
349 |
+
|
350 |
+
#~ msgid "Choose the color witch fits your company."
|
351 |
+
#~ msgstr "Kies uw bedrijfskleur."
|
352 |
+
|
353 |
+
#~ msgid ""
|
354 |
+
#~ "Choose the format for the invoice number. Use [prefix], [suffix] and "
|
355 |
+
#~ "[number] as placeholders."
|
356 |
+
#~ msgstr ""
|
357 |
+
#~ "Kies het formaat voor het factuurnummer. Gebruik [prefix], [suffix] en "
|
358 |
+
#~ "[number] als aanduidingen."
|
359 |
+
|
360 |
+
#~ msgid "Text to greet, congratulate or thank the customer. "
|
361 |
+
#~ msgstr "Tekst om de klant te groeten, te feliciteren of te bedanken. "
|
362 |
+
|
363 |
+
#~ msgid "Some text"
|
364 |
+
#~ msgstr "De vertaling werkt!!!!"
|
365 |
+
|
366 |
+
#~ msgid "Text to greet, congratulate or thank the customer."
|
367 |
+
#~ msgstr "Tekst om de klant te begroeten, te bedanken of te feliciteren."
|
368 |
+
|
369 |
+
#~ msgid "Start all over on the first of January."
|
370 |
+
#~ msgstr "Opnieuw beginnen op de eerste van januari."
|
lang/be-woocommerce-pdf-invoices-nl_NL.mo
CHANGED
Binary file
|
lang/be-woocommerce-pdf-invoices-nl_NL.po
CHANGED
@@ -1,8 +1,8 @@
|
|
1 |
msgid ""
|
2 |
msgstr ""
|
3 |
"Project-Id-Version: WooCommerce PDF Invoices\n"
|
4 |
-
"POT-Creation-Date: 2015-04-
|
5 |
-
"PO-Revision-Date: 2015-04-
|
6 |
"Last-Translator: \n"
|
7 |
"Language-Team: \n"
|
8 |
"Language: nl_NL\n"
|
@@ -19,384 +19,491 @@ msgstr ""
|
|
19 |
"X-Poedit-SearchPath-0: .\n"
|
20 |
"X-Poedit-SearchPathExcluded-0: *.js\n"
|
21 |
|
22 |
-
#: admin/classes/woocommerce-pdf-invoices.php:
|
23 |
msgid "General"
|
24 |
msgstr "Algemeen"
|
25 |
|
26 |
-
#: admin/classes/woocommerce-pdf-invoices.php:
|
27 |
-
#: admin/classes/
|
28 |
msgid "Template"
|
29 |
msgstr ""
|
30 |
|
31 |
-
#: admin/classes/woocommerce-pdf-invoices.php:
|
|
|
32 |
msgid "Invoices"
|
33 |
msgstr "Facturen"
|
34 |
|
35 |
-
#: admin/classes/woocommerce-pdf-invoices.php:
|
36 |
msgid "PDF Invoice"
|
37 |
msgstr "PDF Factuur"
|
38 |
|
39 |
-
#: admin/classes/woocommerce-pdf-invoices.php:
|
40 |
msgid "Invoiced on:"
|
41 |
msgstr "Gefactureerd op:"
|
42 |
|
43 |
-
#: admin/classes/woocommerce-pdf-invoices.php:
|
44 |
msgid "Invoice number:"
|
45 |
msgstr "Factuurnummer:"
|
46 |
|
47 |
-
#: admin/classes/woocommerce-pdf-invoices.php:
|
48 |
msgid "View invoice"
|
49 |
msgstr "Toon factuur"
|
50 |
|
51 |
-
#: admin/classes/woocommerce-pdf-invoices.php:
|
52 |
msgid "View"
|
53 |
msgstr "Bekijk"
|
54 |
|
55 |
-
#: admin/classes/woocommerce-pdf-invoices.php:
|
56 |
msgid "Cancel invoice"
|
57 |
msgstr "Factuur annuleren"
|
58 |
|
59 |
-
#: admin/classes/woocommerce-pdf-invoices.php:
|
60 |
msgid "Cancel"
|
61 |
msgstr "Annuleer"
|
62 |
|
63 |
-
#: admin/classes/woocommerce-pdf-invoices.php:
|
64 |
msgid "Are you sure to delete the invoice?"
|
65 |
msgstr "Weet u zeker dat u de factuur wilt verwijderen?"
|
66 |
|
67 |
-
#: admin/classes/woocommerce-pdf-invoices.php:
|
68 |
msgid "Create invoice"
|
69 |
msgstr "Maak factuur"
|
70 |
|
71 |
-
#: admin/classes/woocommerce-pdf-invoices.php:
|
72 |
msgid "Create"
|
73 |
msgstr "Aanmaken"
|
74 |
|
75 |
-
#: admin/classes/
|
76 |
-
msgid "
|
77 |
-
msgstr "
|
78 |
|
79 |
-
#: admin/classes/
|
80 |
msgid "Attach to Email"
|
81 |
msgstr "Voeg toe aan Email"
|
82 |
|
83 |
-
#: admin/classes/
|
84 |
msgid "Processing order"
|
85 |
msgstr "Bestelling wordt verwerkt"
|
86 |
|
87 |
-
#: admin/classes/
|
88 |
msgid "Completed order"
|
89 |
msgstr "Bestelling voltooid"
|
90 |
|
91 |
-
#: admin/classes/
|
92 |
msgid "Customer invoice"
|
93 |
msgstr "Klant factuur"
|
94 |
|
95 |
-
#: admin/classes/
|
96 |
msgid "Attach to New order Email"
|
97 |
msgstr "Voeg toe aan New order Email"
|
98 |
|
99 |
-
#: admin/classes/
|
100 |
-
msgid "
|
101 |
-
msgstr "
|
102 |
|
103 |
-
#: admin/classes/
|
104 |
msgid "Email It In account"
|
105 |
msgstr ""
|
106 |
|
107 |
-
#: admin/classes/
|
108 |
-
msgid "For bookkeeping purposes."
|
109 |
-
msgstr "Voor boekhoudkundige doeleinden."
|
110 |
-
|
111 |
-
#: admin/classes/wpi-general-settings.php:146
|
112 |
-
#, php-format
|
113 |
-
msgid "Signup at %s and enter your account below."
|
114 |
-
msgstr "Meld je aan op %s en geef je account onderstaand in."
|
115 |
-
|
116 |
-
#: admin/classes/wpi-general-settings.php:159
|
117 |
#, php-format
|
118 |
-
msgid "
|
119 |
-
msgstr "
|
120 |
|
121 |
-
#: admin/classes/
|
122 |
-
msgid "
|
123 |
-
msgstr "
|
124 |
|
125 |
-
#: admin/classes/
|
126 |
-
|
127 |
-
|
128 |
-
msgid "Please don't try to change the values."
|
129 |
-
msgstr "Probeer de waardes niet te wijzigen a.u.b."
|
130 |
|
131 |
-
#: admin/classes/
|
132 |
-
|
133 |
-
|
|
|
|
|
|
|
|
|
|
|
134 |
|
135 |
-
#: admin/classes/
|
136 |
-
msgid "
|
137 |
-
msgstr "
|
138 |
|
139 |
-
#: admin/classes/
|
140 |
-
msgid "
|
141 |
-
msgstr "
|
142 |
|
143 |
-
#: admin/classes/
|
144 |
msgid "Color theme"
|
145 |
msgstr "Kleur thema"
|
146 |
|
147 |
-
#: admin/classes/
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
148 |
msgid "Company name"
|
149 |
msgstr "Bedrijfsnaam"
|
150 |
|
151 |
-
#: admin/classes/
|
152 |
msgid "Company logo"
|
153 |
msgstr "Bedrijfslogo"
|
154 |
|
155 |
-
#: admin/classes/
|
156 |
-
msgid "Intro text"
|
157 |
-
msgstr "Introtekst"
|
158 |
-
|
159 |
-
#: admin/classes/wpi-template-settings.php:110
|
160 |
msgid "Company address"
|
161 |
msgstr "Bedrijfsadres"
|
162 |
|
163 |
-
#: admin/classes/
|
164 |
msgid "Company details"
|
165 |
msgstr "Algemene bedrijfsgegevens"
|
166 |
|
167 |
-
#: admin/classes/
|
|
|
|
|
|
|
|
|
168 |
msgid "Terms & conditions, policies etc."
|
169 |
msgstr "Algemene voorwaarden"
|
170 |
|
171 |
-
#: admin/classes/
|
172 |
-
msgid "
|
173 |
-
msgstr "Type factuurnummer"
|
174 |
-
|
175 |
-
#: admin/classes/wpi-template-settings.php:114
|
176 |
-
msgid "Next invoice number"
|
177 |
-
msgstr "Eerstvolgende factuurnummer"
|
178 |
-
|
179 |
-
#: admin/classes/wpi-template-settings.php:115
|
180 |
-
msgid "Number of digits"
|
181 |
-
msgstr "Aantal cijfers"
|
182 |
-
|
183 |
-
#: admin/classes/wpi-template-settings.php:116
|
184 |
-
msgid "Invoice number prefix"
|
185 |
-
msgstr "Factuurnummer voorvoegsel"
|
186 |
-
|
187 |
-
#: admin/classes/wpi-template-settings.php:117
|
188 |
-
msgid "Invoice number suffix"
|
189 |
-
msgstr "Factuurnummer achtervoegsel"
|
190 |
-
|
191 |
-
#: admin/classes/wpi-template-settings.php:118
|
192 |
-
msgid "Invoice number format"
|
193 |
-
msgstr "Factuurnummer format"
|
194 |
-
|
195 |
-
#: admin/classes/wpi-template-settings.php:119
|
196 |
-
msgid "Reset on 1st January"
|
197 |
-
msgstr "Reset op 1 januari"
|
198 |
-
|
199 |
-
#: admin/classes/wpi-template-settings.php:120
|
200 |
-
msgid "Invoice date format"
|
201 |
-
msgstr "Factuur datumnotatie"
|
202 |
-
|
203 |
-
#: admin/classes/wpi-template-settings.php:121
|
204 |
-
msgid "Order date format"
|
205 |
-
msgstr "Notatie bestellingsdatum"
|
206 |
-
|
207 |
-
#: admin/classes/wpi-template-settings.php:122
|
208 |
-
msgid "Show SKU"
|
209 |
-
msgstr "Toon SKU"
|
210 |
-
|
211 |
-
#: admin/classes/wpi-template-settings.php:123
|
212 |
-
msgid "Show discount"
|
213 |
-
msgstr "Toon korting"
|
214 |
-
|
215 |
-
#: admin/classes/wpi-template-settings.php:124
|
216 |
-
msgid "Show subtotal"
|
217 |
-
msgstr "Toon subtotaal"
|
218 |
-
|
219 |
-
#: admin/classes/wpi-template-settings.php:125
|
220 |
-
msgid "Show tax"
|
221 |
-
msgstr "Toon BTW"
|
222 |
-
|
223 |
-
#: admin/classes/wpi-template-settings.php:126
|
224 |
-
msgid "Show shipping"
|
225 |
-
msgstr "Toon verzendkosten"
|
226 |
-
|
227 |
-
#: admin/classes/wpi-template-settings.php:127
|
228 |
-
msgid "Show customer notes"
|
229 |
-
msgstr "Toon notities klant"
|
230 |
-
|
231 |
-
#: admin/classes/wpi-template-settings.php:165
|
232 |
-
msgid "Color theme of the invoice."
|
233 |
-
msgstr "Kleurthema van de factuur."
|
234 |
-
|
235 |
-
#: admin/classes/wpi-template-settings.php:188
|
236 |
-
msgid ""
|
237 |
-
"Please upload an image less then 200Kb and make sure it's a jpeg, jpg or png."
|
238 |
msgstr ""
|
239 |
-
"Upload een afbeelding van maximaal 200Kb en zorg dat het een jpeg, jpg of "
|
240 |
-
"png is."
|
241 |
-
|
242 |
-
#: admin/classes/wpi-template-settings.php:199
|
243 |
-
msgid "Remove logo"
|
244 |
-
msgstr "Verwijder logo"
|
245 |
|
246 |
-
#: admin/classes/
|
247 |
msgid "WooCommerce order number"
|
248 |
msgstr "WooCommerce ordernummer"
|
249 |
|
250 |
-
#: admin/classes/
|
251 |
msgid "Sequential number"
|
252 |
msgstr "Volgnummer"
|
253 |
|
254 |
-
#: admin/classes/
|
255 |
-
msgid "
|
256 |
-
msgstr "
|
257 |
|
258 |
-
#: admin/classes/
|
259 |
-
|
260 |
-
|
261 |
-
|
262 |
-
|
263 |
-
|
264 |
-
msgstr "
|
|
|
|
|
|
|
265 |
|
266 |
-
#: admin/classes/
|
267 |
-
msgid "
|
268 |
-
msgstr "
|
269 |
|
270 |
-
#: admin/classes/
|
271 |
-
|
272 |
-
|
273 |
-
msgstr "Beschikbare aanduidingen zijn %s %s %s %s of %s. %s is verplicht."
|
274 |
|
275 |
-
#: admin/classes/
|
276 |
-
msgid "
|
277 |
-
msgstr "
|
278 |
|
279 |
-
#: admin/classes/
|
280 |
-
|
281 |
-
|
282 |
-
msgstr "%sFormat%s van de datum. Bijvoorbeeld: %s of %s."
|
283 |
|
284 |
-
#: admin/classes/
|
285 |
#, php-format
|
286 |
-
msgid "
|
287 |
-
|
|
|
|
|
|
|
|
|
288 |
|
289 |
-
#: admin/classes/
|
290 |
-
msgid "
|
291 |
-
msgstr "
|
292 |
|
293 |
-
#: admin/classes/
|
294 |
-
msgid "
|
295 |
-
msgstr "
|
296 |
|
297 |
-
#: admin/classes/
|
298 |
-
msgid "
|
299 |
-
msgstr "
|
300 |
|
301 |
-
#: admin/classes/
|
302 |
-
msgid "
|
303 |
-
msgstr "
|
304 |
|
305 |
-
#: admin/classes/
|
306 |
-
msgid "
|
307 |
-
msgstr "
|
308 |
|
309 |
-
#: admin/classes/
|
310 |
-
msgid "
|
311 |
-
msgstr "
|
312 |
|
313 |
-
#: admin/classes/
|
314 |
-
msgid "
|
315 |
-
msgstr "
|
316 |
|
317 |
-
#: admin/classes/
|
318 |
-
msgid "The
|
319 |
-
msgstr "De
|
320 |
|
321 |
-
#: admin/classes/
|
322 |
-
msgid "
|
323 |
-
msgstr "
|
324 |
|
325 |
-
#: admin/classes/
|
326 |
-
msgid "
|
327 |
-
msgstr "
|
328 |
|
329 |
-
#: admin/classes/
|
330 |
msgid "File is invalid and contains either '..' or './'."
|
331 |
msgstr "Bestand is niet valide en bevat ofwel '..' of './'."
|
332 |
|
333 |
-
#: admin/classes/
|
334 |
msgid "File is invalid and contains ':' after the first character."
|
335 |
msgstr "Bestand is niet valide en bevat ':' na het eerste teken."
|
336 |
|
337 |
-
#: admin/classes/
|
338 |
-
msgid "
|
339 |
-
msgstr "
|
340 |
|
341 |
-
#: includes/classes/
|
342 |
msgid "Customer note"
|
343 |
msgstr "Opmerking klant"
|
344 |
|
345 |
-
#: includes/classes/
|
346 |
#, php-format
|
347 |
msgid "%sPayment%s via"
|
348 |
msgstr "%sBetaling%s met"
|
349 |
|
350 |
-
#: includes/views/templates/invoice-micro.php:
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
351 |
msgid "Invoice"
|
352 |
msgstr "Factuur"
|
353 |
|
354 |
-
#: includes/views/templates/invoice-micro.php:
|
355 |
#, php-format
|
356 |
msgid "Order Number %s"
|
357 |
msgstr "Bestelnummer %s"
|
358 |
|
359 |
-
#: includes/views/templates/invoice-micro.php:
|
360 |
#, php-format
|
361 |
msgid "Order Date %s"
|
362 |
msgstr "Besteldatum: %s"
|
363 |
|
364 |
-
#: includes/views/templates/invoice-micro.php:
|
365 |
msgid "Description"
|
366 |
msgstr "Beschrijving"
|
367 |
|
368 |
-
#: includes/views/templates/invoice-micro.php:
|
369 |
msgid "SKU"
|
370 |
msgstr "Productcode"
|
371 |
|
372 |
-
#: includes/views/templates/invoice-micro.php:
|
373 |
-
msgid "
|
|
|
|
|
|
|
|
|
374 |
msgstr "Aantal"
|
375 |
|
376 |
-
#: includes/views/templates/invoice-micro.php:
|
377 |
-
msgid "
|
378 |
-
msgstr "
|
379 |
|
380 |
-
#: includes/views/templates/invoice-micro.php:
|
381 |
-
#: includes/views/templates/invoice-micro.php:
|
382 |
msgid "Total"
|
383 |
msgstr "Totaal"
|
384 |
|
385 |
-
#: includes/views/templates/invoice-micro.php:
|
386 |
msgid "Discount"
|
387 |
msgstr "Korting"
|
388 |
|
389 |
-
#: includes/views/templates/invoice-micro.php:
|
390 |
msgid "Shipping"
|
391 |
msgstr "Verzending"
|
392 |
|
393 |
-
#: includes/views/templates/invoice-micro.php:
|
394 |
msgid "Subtotal"
|
395 |
msgstr "Subtotaal"
|
396 |
|
397 |
-
#: includes/views/templates/invoice-micro.php:
|
398 |
-
|
399 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
400 |
|
401 |
#~ msgid ""
|
402 |
#~ "Use [prefix], [suffix] and [number] as placeholders. [number] is required."
|
1 |
msgid ""
|
2 |
msgstr ""
|
3 |
"Project-Id-Version: WooCommerce PDF Invoices\n"
|
4 |
+
"POT-Creation-Date: 2015-04-23 23:33+0100\n"
|
5 |
+
"PO-Revision-Date: 2015-04-23 23:46+0100\n"
|
6 |
"Last-Translator: \n"
|
7 |
"Language-Team: \n"
|
8 |
"Language: nl_NL\n"
|
19 |
"X-Poedit-SearchPath-0: .\n"
|
20 |
"X-Poedit-SearchPathExcluded-0: *.js\n"
|
21 |
|
22 |
+
#: admin/classes/be-woocommerce-pdf-invoices.php:150
|
23 |
msgid "General"
|
24 |
msgstr "Algemeen"
|
25 |
|
26 |
+
#: admin/classes/be-woocommerce-pdf-invoices.php:151
|
27 |
+
#: admin/classes/bewpi-template-settings.php:86
|
28 |
msgid "Template"
|
29 |
msgstr ""
|
30 |
|
31 |
+
#: admin/classes/be-woocommerce-pdf-invoices.php:169
|
32 |
+
#: admin/classes/be-woocommerce-pdf-invoices.php:170
|
33 |
msgid "Invoices"
|
34 |
msgstr "Facturen"
|
35 |
|
36 |
+
#: admin/classes/be-woocommerce-pdf-invoices.php:275
|
37 |
msgid "PDF Invoice"
|
38 |
msgstr "PDF Factuur"
|
39 |
|
40 |
+
#: admin/classes/be-woocommerce-pdf-invoices.php:302
|
41 |
msgid "Invoiced on:"
|
42 |
msgstr "Gefactureerd op:"
|
43 |
|
44 |
+
#: admin/classes/be-woocommerce-pdf-invoices.php:306
|
45 |
msgid "Invoice number:"
|
46 |
msgstr "Factuurnummer:"
|
47 |
|
48 |
+
#: admin/classes/be-woocommerce-pdf-invoices.php:344
|
49 |
msgid "View invoice"
|
50 |
msgstr "Toon factuur"
|
51 |
|
52 |
+
#: admin/classes/be-woocommerce-pdf-invoices.php:344
|
53 |
msgid "View"
|
54 |
msgstr "Bekijk"
|
55 |
|
56 |
+
#: admin/classes/be-woocommerce-pdf-invoices.php:345
|
57 |
msgid "Cancel invoice"
|
58 |
msgstr "Factuur annuleren"
|
59 |
|
60 |
+
#: admin/classes/be-woocommerce-pdf-invoices.php:345
|
61 |
msgid "Cancel"
|
62 |
msgstr "Annuleer"
|
63 |
|
64 |
+
#: admin/classes/be-woocommerce-pdf-invoices.php:345
|
65 |
msgid "Are you sure to delete the invoice?"
|
66 |
msgstr "Weet u zeker dat u de factuur wilt verwijderen?"
|
67 |
|
68 |
+
#: admin/classes/be-woocommerce-pdf-invoices.php:347
|
69 |
msgid "Create invoice"
|
70 |
msgstr "Maak factuur"
|
71 |
|
72 |
+
#: admin/classes/be-woocommerce-pdf-invoices.php:347
|
73 |
msgid "Create"
|
74 |
msgstr "Aanmaken"
|
75 |
|
76 |
+
#: admin/classes/be-woocommerce-pdf-invoices.php:380
|
77 |
+
msgid "Download invoice (PDF)"
|
78 |
+
msgstr "Download factuur (PDF)"
|
79 |
|
80 |
+
#: admin/classes/bewpi-general-settings.php:85
|
81 |
msgid "Attach to Email"
|
82 |
msgstr "Voeg toe aan Email"
|
83 |
|
84 |
+
#: admin/classes/bewpi-general-settings.php:93
|
85 |
msgid "Processing order"
|
86 |
msgstr "Bestelling wordt verwerkt"
|
87 |
|
88 |
+
#: admin/classes/bewpi-general-settings.php:97
|
89 |
msgid "Completed order"
|
90 |
msgstr "Bestelling voltooid"
|
91 |
|
92 |
+
#: admin/classes/bewpi-general-settings.php:101
|
93 |
msgid "Customer invoice"
|
94 |
msgstr "Klant factuur"
|
95 |
|
96 |
+
#: admin/classes/bewpi-general-settings.php:115
|
97 |
msgid "Attach to New order Email"
|
98 |
msgstr "Voeg toe aan New order Email"
|
99 |
|
100 |
+
#: admin/classes/bewpi-general-settings.php:127
|
101 |
+
msgid "Enable Email It In"
|
102 |
+
msgstr "Inschakelen Email It In"
|
103 |
|
104 |
+
#: admin/classes/bewpi-general-settings.php:135
|
105 |
msgid "Email It In account"
|
106 |
msgstr ""
|
107 |
|
108 |
+
#: admin/classes/bewpi-general-settings.php:140
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
109 |
#, php-format
|
110 |
+
msgid "Get your account from your Email It In %suser account%s."
|
111 |
+
msgstr "Verkrijg uw account van uw Email It In %sgebruikersaccount%s."
|
112 |
|
113 |
+
#: admin/classes/bewpi-general-settings.php:153
|
114 |
+
msgid "Email Options"
|
115 |
+
msgstr "Email Opties"
|
116 |
|
117 |
+
#: admin/classes/bewpi-general-settings.php:159
|
118 |
+
msgid "Cloud Storage Options"
|
119 |
+
msgstr "Online Opslag Opties"
|
|
|
|
|
120 |
|
121 |
+
#: admin/classes/bewpi-general-settings.php:166
|
122 |
+
#, php-format
|
123 |
+
msgid ""
|
124 |
+
"Signup at %s to send invoices to your Dropbox, OneDrive, Google Drive or "
|
125 |
+
"Egnyte and enter your account below."
|
126 |
+
msgstr ""
|
127 |
+
"Meld je aan op %s en verzend facturen naar je Dropbox, OneDrive, Google "
|
128 |
+
"Drive of Egnyte en voer je account onderstaand in."
|
129 |
|
130 |
+
#: admin/classes/bewpi-settings.php:89
|
131 |
+
msgid "Feel free to use "
|
132 |
+
msgstr "Gebruik"
|
133 |
|
134 |
+
#: admin/classes/bewpi-settings.php:153
|
135 |
+
msgid "Remove logo"
|
136 |
+
msgstr "Verwijder logo"
|
137 |
|
138 |
+
#: admin/classes/bewpi-template-settings.php:104
|
139 |
msgid "Color theme"
|
140 |
msgstr "Kleur thema"
|
141 |
|
142 |
+
#: admin/classes/bewpi-template-settings.php:115
|
143 |
+
msgid "Date format"
|
144 |
+
msgstr "Datum format"
|
145 |
+
|
146 |
+
#: admin/classes/bewpi-template-settings.php:120
|
147 |
+
#, php-format
|
148 |
+
msgid "%sFormat%s of invoice date and order date."
|
149 |
+
msgstr "%sNotatie%s van factuurdatum en orderdatum."
|
150 |
+
|
151 |
+
#: admin/classes/bewpi-template-settings.php:131
|
152 |
msgid "Company name"
|
153 |
msgstr "Bedrijfsnaam"
|
154 |
|
155 |
+
#: admin/classes/bewpi-template-settings.php:142
|
156 |
msgid "Company logo"
|
157 |
msgstr "Bedrijfslogo"
|
158 |
|
159 |
+
#: admin/classes/bewpi-template-settings.php:153
|
|
|
|
|
|
|
|
|
160 |
msgid "Company address"
|
161 |
msgstr "Bedrijfsadres"
|
162 |
|
163 |
+
#: admin/classes/bewpi-template-settings.php:164
|
164 |
msgid "Company details"
|
165 |
msgstr "Algemene bedrijfsgegevens"
|
166 |
|
167 |
+
#: admin/classes/bewpi-template-settings.php:175
|
168 |
+
msgid "Intro text"
|
169 |
+
msgstr "Introtekst"
|
170 |
+
|
171 |
+
#: admin/classes/bewpi-template-settings.php:187
|
172 |
msgid "Terms & conditions, policies etc."
|
173 |
msgstr "Algemene voorwaarden"
|
174 |
|
175 |
+
#: admin/classes/bewpi-template-settings.php:211
|
176 |
+
msgid "Type"
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
177 |
msgstr ""
|
|
|
|
|
|
|
|
|
|
|
|
|
178 |
|
179 |
+
#: admin/classes/bewpi-template-settings.php:219
|
180 |
msgid "WooCommerce order number"
|
181 |
msgstr "WooCommerce ordernummer"
|
182 |
|
183 |
+
#: admin/classes/bewpi-template-settings.php:223
|
184 |
msgid "Sequential number"
|
185 |
msgstr "Volgnummer"
|
186 |
|
187 |
+
#: admin/classes/bewpi-template-settings.php:247
|
188 |
+
msgid "Next"
|
189 |
+
msgstr "Volgende"
|
190 |
|
191 |
+
#: admin/classes/bewpi-template-settings.php:252
|
192 |
+
#, php-format
|
193 |
+
msgid ""
|
194 |
+
"Reset the invoice counter and start with next invoice number. %s %sNote:%s "
|
195 |
+
"Only available with sequential numbering type and you need to check the "
|
196 |
+
"checkbox to actually reset the value."
|
197 |
+
msgstr ""
|
198 |
+
"Reset de factuurteller en start met het volgende factuurnummer. %s %sLet wel:"
|
199 |
+
"%s Alleen beschikbaar bij sequentiële nummering type en vergeet niet het "
|
200 |
+
"selectievak te selecteren om de waarde ook werkelijk te resetten."
|
201 |
|
202 |
+
#: admin/classes/bewpi-template-settings.php:261
|
203 |
+
msgid "Digits"
|
204 |
+
msgstr "Aantal nullen."
|
205 |
|
206 |
+
#: admin/classes/bewpi-template-settings.php:277
|
207 |
+
msgid "[prefix]"
|
208 |
+
msgstr "[prefix]"
|
|
|
209 |
|
210 |
+
#: admin/classes/bewpi-template-settings.php:288
|
211 |
+
msgid "[suffix]"
|
212 |
+
msgstr "[suffix]"
|
213 |
|
214 |
+
#: admin/classes/bewpi-template-settings.php:299
|
215 |
+
msgid "Format"
|
216 |
+
msgstr "Notatie"
|
|
|
217 |
|
218 |
+
#: admin/classes/bewpi-template-settings.php:304
|
219 |
#, php-format
|
220 |
+
msgid ""
|
221 |
+
"Feel free to use the placeholders %s %s %s %s and %s. %s %sNote:%s %s is "
|
222 |
+
"required."
|
223 |
+
msgstr ""
|
224 |
+
"Voel je vrij om het gebruik van de aanduidingen %s %s %s %s en %s te "
|
225 |
+
"gebruiken. %s % sLet wel: %s %s is vereist."
|
226 |
|
227 |
+
#: admin/classes/bewpi-template-settings.php:393
|
228 |
+
msgid "General Options"
|
229 |
+
msgstr "Algemene Opties"
|
230 |
|
231 |
+
#: admin/classes/bewpi-template-settings.php:399
|
232 |
+
msgid "Invoice Number Options"
|
233 |
+
msgstr "Factuurnummer Opties"
|
234 |
|
235 |
+
#: admin/classes/bewpi-template-settings.php:405
|
236 |
+
msgid "Header Options"
|
237 |
+
msgstr "Kopregel Opties"
|
238 |
|
239 |
+
#: admin/classes/bewpi-template-settings.php:411
|
240 |
+
msgid "Footer Options"
|
241 |
+
msgstr "Voetregel Opties"
|
242 |
|
243 |
+
#: admin/classes/bewpi-template-settings.php:417
|
244 |
+
msgid "Visible Columns"
|
245 |
+
msgstr "Zichtbare Kolommen"
|
246 |
|
247 |
+
#: admin/classes/bewpi-template-settings.php:423
|
248 |
+
msgid "These are the general template options."
|
249 |
+
msgstr "Dit zijn de algemene template opties."
|
250 |
|
251 |
+
#: admin/classes/bewpi-template-settings.php:424
|
252 |
+
msgid "These are the invoice number options."
|
253 |
+
msgstr "Dit zijn de factuurnummer opties."
|
254 |
|
255 |
+
#: admin/classes/bewpi-template-settings.php:425
|
256 |
+
msgid "The header will be visible on every page. "
|
257 |
+
msgstr "De kopregel is zichtbaar op iedere pagina."
|
258 |
|
259 |
+
#: admin/classes/bewpi-template-settings.php:426
|
260 |
+
msgid "The footer will be visible on every page. "
|
261 |
+
msgstr "De voetregel is zichtbaar op iedere pagina."
|
262 |
|
263 |
+
#: admin/classes/bewpi-template-settings.php:427
|
264 |
+
msgid "Enable or disable the columns."
|
265 |
+
msgstr "In- of uitschakelen van de kolommen."
|
266 |
|
267 |
+
#: admin/classes/bewpi-template-settings.php:497
|
268 |
msgid "File is invalid and contains either '..' or './'."
|
269 |
msgstr "Bestand is niet valide en bevat ofwel '..' of './'."
|
270 |
|
271 |
+
#: admin/classes/bewpi-template-settings.php:504
|
272 |
msgid "File is invalid and contains ':' after the first character."
|
273 |
msgstr "Bestand is niet valide en bevat ':' na het eerste teken."
|
274 |
|
275 |
+
#: admin/classes/bewpi-template-settings.php:513
|
276 |
+
msgid "File should be less then 2MB."
|
277 |
+
msgstr "Bestand moet minder dan 2MB zijn."
|
278 |
|
279 |
+
#: includes/classes/bewpi-invoice.php:158
|
280 |
msgid "Customer note"
|
281 |
msgstr "Opmerking klant"
|
282 |
|
283 |
+
#: includes/classes/bewpi-invoice.php:169
|
284 |
#, php-format
|
285 |
msgid "%sPayment%s via"
|
286 |
msgstr "%sBetaling%s met"
|
287 |
|
288 |
+
#: includes/views/templates/invoice-micro.php:185
|
289 |
+
msgid "Invoice to"
|
290 |
+
msgstr "Facturatie aan"
|
291 |
+
|
292 |
+
#: includes/views/templates/invoice-micro.php:189
|
293 |
+
msgid "Ship to"
|
294 |
+
msgstr "Verzend naar"
|
295 |
+
|
296 |
+
#: includes/views/templates/invoice-micro.php:199
|
297 |
msgid "Invoice"
|
298 |
msgstr "Factuur"
|
299 |
|
300 |
+
#: includes/views/templates/invoice-micro.php:202
|
301 |
#, php-format
|
302 |
msgid "Order Number %s"
|
303 |
msgstr "Bestelnummer %s"
|
304 |
|
305 |
+
#: includes/views/templates/invoice-micro.php:203
|
306 |
#, php-format
|
307 |
msgid "Order Date %s"
|
308 |
msgstr "Besteldatum: %s"
|
309 |
|
310 |
+
#: includes/views/templates/invoice-micro.php:217
|
311 |
msgid "Description"
|
312 |
msgstr "Beschrijving"
|
313 |
|
314 |
+
#: includes/views/templates/invoice-micro.php:220
|
315 |
msgid "SKU"
|
316 |
msgstr "Productcode"
|
317 |
|
318 |
+
#: includes/views/templates/invoice-micro.php:223
|
319 |
+
msgid "Cost"
|
320 |
+
msgstr "Kosten"
|
321 |
+
|
322 |
+
#: includes/views/templates/invoice-micro.php:224
|
323 |
+
msgid "Qty"
|
324 |
msgstr "Aantal"
|
325 |
|
326 |
+
#: includes/views/templates/invoice-micro.php:231
|
327 |
+
msgid "VAT"
|
328 |
+
msgstr "BTW"
|
329 |
|
330 |
+
#: includes/views/templates/invoice-micro.php:241
|
331 |
+
#: includes/views/templates/invoice-micro.php:407
|
332 |
msgid "Total"
|
333 |
msgstr "Totaal"
|
334 |
|
335 |
+
#: includes/views/templates/invoice-micro.php:372
|
336 |
msgid "Discount"
|
337 |
msgstr "Korting"
|
338 |
|
339 |
+
#: includes/views/templates/invoice-micro.php:380
|
340 |
msgid "Shipping"
|
341 |
msgstr "Verzending"
|
342 |
|
343 |
+
#: includes/views/templates/invoice-micro.php:388
|
344 |
msgid "Subtotal"
|
345 |
msgstr "Subtotaal"
|
346 |
|
347 |
+
#: includes/views/templates/invoice-micro.php:398
|
348 |
+
#, php-format
|
349 |
+
msgid "VAT %s"
|
350 |
+
msgstr "BTW %s"
|
351 |
+
|
352 |
+
#: includes/views/templates/invoice-micro.php:414
|
353 |
+
msgid "Refunded"
|
354 |
+
msgstr "Terugbetaald"
|
355 |
+
|
356 |
+
#~ msgid "General Settings"
|
357 |
+
#~ msgstr "Algemene Opties"
|
358 |
+
|
359 |
+
#~ msgid ""
|
360 |
+
#~ "Automatically send invoice to Google Drive, Egnyte, Dropbox or OneDrive"
|
361 |
+
#~ msgstr "Verzend automatisch naar Google Drive, Egnyte, Dropbox of OneDrive"
|
362 |
+
|
363 |
+
#~ msgid "For bookkeeping purposes."
|
364 |
+
#~ msgstr "Voor boekhoudkundige doeleinden."
|
365 |
+
|
366 |
+
#~ msgid "Signup at %s and enter your account below."
|
367 |
+
#~ msgstr "Meld je aan op %s en geef je account onderstaand in."
|
368 |
+
|
369 |
+
#~ msgid "Enter your %s account."
|
370 |
+
#~ msgstr "Het %s account."
|
371 |
+
|
372 |
+
#~ msgid "Invalid type of Email."
|
373 |
+
#~ msgstr "Ongeldig type Email."
|
374 |
+
|
375 |
+
#~ msgid "Please don't try to change the values."
|
376 |
+
#~ msgstr "Probeer de waardes niet te wijzigen a.u.b."
|
377 |
+
|
378 |
+
#~ msgid "Invalid Email address."
|
379 |
+
#~ msgstr "Ongeldig Emailadres."
|
380 |
+
|
381 |
+
#~ msgid "Allowed tags: "
|
382 |
+
#~ msgstr "Toegestane tags: "
|
383 |
+
|
384 |
+
#~ msgid "Template Settings"
|
385 |
+
#~ msgstr "Template Opties"
|
386 |
+
|
387 |
+
#~ msgid "Invoice number type"
|
388 |
+
#~ msgstr "Type factuurnummer"
|
389 |
+
|
390 |
+
#~ msgid "Next invoice number"
|
391 |
+
#~ msgstr "Eerstvolgende factuurnummer"
|
392 |
+
|
393 |
+
#~ msgid "Number of digits"
|
394 |
+
#~ msgstr "Aantal cijfers"
|
395 |
+
|
396 |
+
#~ msgid "Invoice number prefix"
|
397 |
+
#~ msgstr "Factuurnummer voorvoegsel"
|
398 |
+
|
399 |
+
#~ msgid "Invoice number suffix"
|
400 |
+
#~ msgstr "Factuurnummer achtervoegsel"
|
401 |
+
|
402 |
+
#~ msgid "Invoice number format"
|
403 |
+
#~ msgstr "Factuurnummer format"
|
404 |
+
|
405 |
+
#~ msgid "Reset on 1st January"
|
406 |
+
#~ msgstr "Reset op 1 januari"
|
407 |
+
|
408 |
+
#~ msgid "Invoice date format"
|
409 |
+
#~ msgstr "Factuur datumnotatie"
|
410 |
+
|
411 |
+
#~ msgid "Order date format"
|
412 |
+
#~ msgstr "Notatie bestellingsdatum"
|
413 |
+
|
414 |
+
#~ msgid "Show SKU"
|
415 |
+
#~ msgstr "Toon SKU"
|
416 |
+
|
417 |
+
#~ msgid "Show discount"
|
418 |
+
#~ msgstr "Toon korting"
|
419 |
+
|
420 |
+
#~ msgid "Show subtotal"
|
421 |
+
#~ msgstr "Toon subtotaal"
|
422 |
+
|
423 |
+
#~ msgid "Show tax"
|
424 |
+
#~ msgstr "Toon BTW"
|
425 |
+
|
426 |
+
#~ msgid "Show shipping"
|
427 |
+
#~ msgstr "Toon verzendkosten"
|
428 |
+
|
429 |
+
#~ msgid "Show customer notes"
|
430 |
+
#~ msgstr "Toon notities klant"
|
431 |
+
|
432 |
+
#~ msgid "Color theme of the invoice."
|
433 |
+
#~ msgstr "Kleurthema van de factuur."
|
434 |
+
|
435 |
+
#~ msgid ""
|
436 |
+
#~ "Please upload an image less then 200Kb and make sure it's a jpeg, jpg or "
|
437 |
+
#~ "png."
|
438 |
+
#~ msgstr ""
|
439 |
+
#~ "Upload een afbeelding van maximaal 200Kb en zorg dat het een jpeg, jpg of "
|
440 |
+
#~ "png is."
|
441 |
+
|
442 |
+
#~ msgid "Invoice number to use for next invoice."
|
443 |
+
#~ msgstr "Factuurnummer te gebruiken voor de volgende factuur."
|
444 |
+
|
445 |
+
#~ msgid "Number of zero digits."
|
446 |
+
#~ msgstr "Aantal nullen."
|
447 |
+
|
448 |
+
#~ msgid "Prefix text for the invoice number. Not required."
|
449 |
+
#~ msgstr "Voorvoegsel van het factuurnummer is niet verplicht."
|
450 |
+
|
451 |
+
#~ msgid "Suffix text for the invoice number. Not required."
|
452 |
+
#~ msgstr "Achtervoegsel van het factuurnummer is niet verplicht."
|
453 |
+
|
454 |
+
#~ msgid "Available placeholder are %s %s %s %s and %s. %s is required."
|
455 |
+
#~ msgstr "Beschikbare aanduidingen zijn %s %s %s %s of %s. %s is verplicht."
|
456 |
+
|
457 |
+
#~ msgid "Reset on the first of January."
|
458 |
+
#~ msgstr "Reset op de eerste van januari."
|
459 |
+
|
460 |
+
#~ msgid "%sFormat%s of the date. Examples: %s or %s."
|
461 |
+
#~ msgstr "%sFormat%s van de datum. Bijvoorbeeld: %s of %s."
|
462 |
+
|
463 |
+
#~ msgid "Order date %sformat%s. Examples: %s or %s."
|
464 |
+
#~ msgstr "Notatie %sbestellingsdatum%s. Voorbeelden: %s of %s."
|
465 |
+
|
466 |
+
#~ msgid "Invalid template."
|
467 |
+
#~ msgstr "Ongeldige template."
|
468 |
+
|
469 |
+
#~ msgid "Invalid color theme code."
|
470 |
+
#~ msgstr "Ongeldige kleurcode."
|
471 |
+
|
472 |
+
#~ msgid "Invalid company name."
|
473 |
+
#~ msgstr "Ongeldige bedsrijfsnaam."
|
474 |
+
|
475 |
+
#~ msgid "Invalid input into one of the textarea's."
|
476 |
+
#~ msgstr "Ongeldige invoer in een van de textarea's."
|
477 |
+
|
478 |
+
#~ msgid "Invalid type of invoice number."
|
479 |
+
#~ msgstr "Ongeldig type factuurnummer."
|
480 |
+
|
481 |
+
#~ msgid "Invalid (next) invoice number."
|
482 |
+
#~ msgstr "Ongeldig (eerstvolgend) factuurnummer."
|
483 |
+
|
484 |
+
#~ msgid "Invalid invoice number digits."
|
485 |
+
#~ msgstr "Ongeldige factuurnummer cijfers."
|
486 |
+
|
487 |
+
#~ msgid "The [number] placeholder is required as invoice number format."
|
488 |
+
#~ msgstr "De aanduiding [number] is vereist."
|
489 |
+
|
490 |
+
#~ msgid "Invalid invoice number format."
|
491 |
+
#~ msgstr "Ongeldig factuurnummer format."
|
492 |
+
|
493 |
+
#~ msgid "Invalid date format."
|
494 |
+
#~ msgstr "Ongeldige datumnotatie."
|
495 |
+
|
496 |
+
#~ msgid "Please upload image with extension jpg, jpeg or png."
|
497 |
+
#~ msgstr "Gelieve te uploaden een afbeelding met extensie jpg, jpeg of png."
|
498 |
+
|
499 |
+
#~ msgid "Quantity"
|
500 |
+
#~ msgstr "Aantal"
|
501 |
+
|
502 |
+
#~ msgid "Unit price"
|
503 |
+
#~ msgstr "Prijs per stuk"
|
504 |
+
|
505 |
+
#~ msgid "Tax"
|
506 |
+
#~ msgstr "BTW"
|
507 |
|
508 |
#~ msgid ""
|
509 |
#~ "Use [prefix], [suffix] and [number] as placeholders. [number] is required."
|
lib/mpdf/ttfontdata/dejavusanscondensedBI.GDEFdata.php
ADDED
@@ -0,0 +1,14 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
$GSUB_offset = 22792;
|
3 |
+
$GPOS_offset = 788;
|
4 |
+
$GSUB_length = 3516;
|
5 |
+
$GlyphClassBases = ' 00020| 00021| 00022| 00023| 00024| 00025| 00026| 00027| 00028| 00029| 0002A| 0002B| 0002C| 0002D| 0002E| 0002F| 00030| 00031| 00032| 00033| 00034| 00035| 00036| 00037| 00038| 00039| 0003A| 0003B| 0003C| 0003D| 0003E| 0003F| 00040| 00041| 00042| 00043| 00044| 00045| 00046| 00047| 00048| 00049| 0004A| 0004B| 0004C| 0004D| 0004E| 0004F| 00050| 00051| 00052| 00053| 00054| 00055| 00056| 00057| 00058| 00059| 0005A| 0005B| 0005C| 0005D| 0005E| 0005F| 00060| 00061| 00062| 00063| 00064| 00065| 00066| 00067| 00068| 00069| 0006A| 0006B| 0006C| 0006D| 0006E| 0006F| 00070| 00071| 00072| 00073| 00074| 00075| 00076| 00077| 00078| 00079| 0007A| 0007B| 0007C| 0007D| 0007E| 000A0| 000A1| 000A2| 000A3| 000A4| 000A5| 000A6| 000A7| 000A8| 000A9| 000AA| 000AB| 000AC| 000AD| 000AE| 000AF| 000B0| 000B1| 000B2| 000B3| 000B4| 000B5| 000B6| 000B7| 000B8| 000B9| 000BA| 000BB| 000BC| 000BD| 000BE| 000BF| 000C0| 000C1| 000C2| 000C3| 000C4| 000C5| 000C6| 000C7| 000C8| 000C9| 000CA| 000CB| 000CC| 000CD| 000CE| 000CF| 000D0| 000D1| 000D2| 000D3| 000D4| 000D5| 000D6| 000D7| 000D8| 000D9| 000DA| 000DB| 000DC| 000DD| 000DE| 000DF| 000E0| 000E1| 000E2| 000E3| 000E4| 000E5| 000E6| 000E7| 000E8| 000E9| 000EA| 000EB| 000EC| 000ED| 000EE| 000EF| 000F0| 000F1| 000F2| 000F3| 000F4| 000F5| 000F6| 000F7| 000F8| 000F9| 000FA| 000FB| 000FC| 000FD| 000FE| 000FF| 00100| 00101| 00102| 00103| 00104| 00105| 00106| 00107| 00108| 00109| 0010A| 0010B| 0010C| 0010D| 0010E| 0010F| 00110| 00111| 00112| 00113| 00114| 00115| 00116| 00117| 00118| 00119| 0011A| 0011B| 0011C| 0011D| 0011E| 0011F| 00120| 00121| 00122| 00123| 00124| 00125| 00126| 00127| 00128| 00129| 0012A| 0012B| 0012C| 0012D| 0012E| 0012F| 00130| 00131| 00132| 00133| 00134| 00135| 00136| 00137| 00138| 00139| 0013A| 0013B| 0013C| 0013D| 0013E| 0013F| 00140| 00141| 00142| 00143| 00144| 00145| 00146| 00147| 00148| 00149| 0014A| 0014B| 0014C| 0014D| 0014E| 0014F| 00150| 00151| 00152| 00153| 00154| 00155| 00156| 00157| 00158| 00159| 0015A| 0015B| 0015C| 0015D| 0015E| 0015F| 00160| 00161| 00162| 00163| 00164| 00165| 00166| 00167| 00168| 00169| 0016A| 0016B| 0016C| 0016D| 0016E| 0016F| 00170| 00171| 00172| 00173| 00174| 00175| 00176| 00177| 00178| 00179| 0017A| 0017B| 0017C| 0017D| 0017E| 0017F| 00180| 00181| 00182| 00183| 00184| 00185| 00186| 00187| 00188| 00189| 0018A| 0018B| 0018C| 0018D| 0018E| 0018F| 00190| 00191| 00192| 00193| 00194| 00195| 00196| 00197| 00198| 00199| 0019A| 0019B| 0019C| 0019D| 0019E| 0019F| 001A0| 001A1| 001A2| 001A3| 001A4| 001A5| 001A6| 001A7| 001A8| 001A9| 001AA| 001AB| 001AC| 001AD| 001AE| 001AF| 001B0| 001B1| 001B2| 001B3| 001B4| 001B5| 001B6| 001B7| 001B8| 001B9| 001BA| 001BB| 001BC| 001BD| 001BE| 001BF| 001C0| 001C1| 001C2| 001C3| 001C4| 001C5| 001C6| 001C7| 001C8| 001C9| 001CA| 001CB| 001CC| 001CD| 001CE| 001CF| 001D0| 001D1| 001D2| 001D3| 001D4| 001D5| 001D6| 001D7| 001D8| 001D9| 001DA| 001DB| 001DC| 001DD| 001DE| 001DF| 001E0| 001E1| 001E2| 001E3| 001E4| 001E5| 001E6| 001E7| 001E8| 001E9| 001EA| 001EB| 001EC| 001ED| 001EE| 001EF| 001F0| 001F1| 001F2| 001F3| 001F4| 001F5| 001F6| 001F7| 001F8| 001F9| 001FA| 001FB| 001FC| 001FD| 001FE| 001FF| 00200| 00201| 00202| 00203| 00204| 00205| 00206| 00207| 00208| 00209| 0020A| 0020B| 0020C| 0020D| 0020E| 0020F| 00210| 00211| 00212| 00213| 00214| 00215| 00216| 00217| 00218| 00219| 0021A| 0021B| 0021C| 0021D| 0021E| 0021F| 00220| 00221| 00222| 00223| 00224| 00225| 00226| 00227| 00228| 00229| 0022A| 0022B| 0022C| 0022D| 0022E| 0022F| 00230| 00231| 00232| 00233| 00234| 00235| 00236| 00237| 00238| 00239| 0023A| 0023B| 0023C| 0023D| 0023E| 0023F| 00240| 00241| 00242| 00243| 00244| 00245| 00246| 00247| 00248| 00249| 0024A| 0024B| 0024C| 0024D| 0024E| 0024F| 00250| 00251| 00252| 00253| 00254| 00255| 00256| 00257| 00258| 00259| 0025A| 0025B| 0025C| 0025D| 0025E| 0025F| 00260| 00261| 00262| 00263| 00264| 00265| 00266| 00267| 00268| 00269| 0026A| 0026B| 0026C| 0026D| 0026E| 0026F| 00270| 00271| 00272| 00273| 00274| 00275| 00276| 00277| 00278| 00279| 0027A| 0027B| 0027C| 0027D| 0027E| 0027F| 00280| 00281| 00282| 00283| 00284| 00285| 00286| 00287| 00288| 00289| 0028A| 0028B| 0028C| 0028D| 0028E| 0028F| 00290| 00291| 00292| 00293| 00294| 00295| 00296| 00297| 00298| 00299| 0029A| 0029B| 0029C| 0029D| 0029E| 0029F| 002A0| 002A1| 002A2| 002A3| 002A4| 002A5| 002A6| 002A7| 002A8| 002A9| 002AA| 002AB| 002AC| 002AD| 002AE| 002AF| 002B0| 002B1| 002B2| 002B3| 002B4| 002B5| 002B6| 002B7| 002B8| 002B9| 002BA| 002BB| 002BC| 002BD| 002BE| 002BF| 002C0| 002C1| 002C2| 002C3| 002C4| 002C5| 002C6| 002C7| 002C8| 002C9| 002CA| 002CB| 002CC| 002CD| 002CE| 002CF| 002D0| 002D1| 002D2| 002D3| 002D4| 002D5| 002D6| 002D7| 002D8| 002D9| 002DA| 002DB| 002DC| 002DD| 002DE| 002DF| 002E0| 002E1| 002E2| 002E3| 002E4| 002E5| 002E6| 002E7| 002E8| 002E9| 002EC| 002ED| 002EE| 002F3| 002F7| 00315| 0031A| 0031B| 00321| 00322| 00334| 00335| 00336| 00337| 00338| 00345| 0034F| 00358| 0035C| 0035F| 00362| 00370| 00371| 00372| 00373| 00374| 00375| 00376| 00377| 0037A| 0037B| 0037C| 0037D| 0037E| 00384| 00385| 00386| 00387| 00388| 00389| 0038A| 0038C| 0038E| 0038F| 00390| 00391| 00392| 00393| 00394| 00395| 00396| 00397| 00398| 00399| 0039A| 0039B| 0039C| 0039D| 0039E| 0039F| 003A0| 003A1| 003A3| 003A4| 003A5| 003A6| 003A7| 003A8| 003A9| 003AA| 003AB| 003AC| 003AD| 003AE| 003AF| 003B0| 003B1| 003B2| 003B3| 003B4| 003B5| 003B6| 003B7| 003B8| 003B9| 003BA| 003BB| 003BC| 003BD| 003BE| 003BF| 003C0| 003C1| 003C2| 003C3| 003C4| 003C5| 003C6| 003C7| 003C8| 003C9| 003CA| 003CB| 003CC| 003CD| 003CE| 003CF| 003D0| 003D1| 003D2| 003D3| 003D4| 003D5| 003D6| 003D7| 003D8| 003D9| 003DA| 003DB| 003DC| 003DD| 003DE| 003DF| 003E0| 003E1| 003E2| 003E3| 003E4| 003E5| 003E6| 003E7| 003E8| 003E9| 003EA| 003EB| 003EC| 003ED| 003EE| 003EF| 003F0| 003F1| 003F2| 003F3| 003F4| 003F5| 003F6| 003F7| 003F8| 003F9| 003FA| 003FB| 003FC| 003FD| 003FE| 003FF| 00400| 00401| 00402| 00403| 00404| 00405| 00406| 00407| 00408| 00409| 0040A| 0040B| 0040C| 0040D| 0040E| 0040F| 00410| 00411| 00412| 00413| 00414| 00415| 00416| 00417| 00418| 00419| 0041A| 0041B| 0041C| 0041D| 0041E| 0041F| 00420| 00421| 00422| 00423| 00424| 00425| 00426| 00427| 00428| 00429| 0042A| 0042B| 0042C| 0042D| 0042E| 0042F| 00430| 00431| 00432| 00433| 00434| 00435| 00436| 00437| 00438| 00439| 0043A| 0043B| 0043C| 0043D| 0043E| 0043F| 00440| 00441| 00442| 00443| 00444| 00445| 00446| 00447| 00448| 00449| 0044A| 0044B| 0044C| 0044D| 0044E| 0044F| 00450| 00451| 00452| 00453| 00454| 00455| 00456| 00457| 00458| 00459| 0045A| 0045B| 0045C| 0045D| 0045E| 0045F| 00460| 00461| 00462| 00463| 00464| 00465| 00466| 00467| 00468| 00469| 0046A| 0046B| 0046C| 0046D| 0046E| 0046F| 00470| 00471| 00472| 00473| 00474| 00475| 00476| 00477| 00478| 00479| 0047A| 0047B| 0047C| 0047D| 0047E| 0047F| 00480| 00481| 00482| 00488| 00489| 0048A| 0048B| 0048C| 0048D| 0048E| 0048F| 00490| 00491| 00492| 00493| 00494| 00495| 00496| 00497| 00498| 00499| 0049A| 0049B| 0049C| 0049D| 0049E| 0049F| 004A0| 004A1| 004A2| 004A3| 004A4| 004A5| 004A6| 004A7| 004A8| 004A9| 004AA| 004AB| 004AC| 004AD| 004AE| 004AF| 004B0| 004B1| 004B2| 004B3| 004B4| 004B5| 004B6| 004B7| 004B8| 004B9| 004BA| 004BB| 004BC| 004BD| 004BE| 004BF| 004C0| 004C1| 004C2| 004C3| 004C4| 004C5| 004C6| 004C7| 004C8| 004C9| 004CA| 004CB| 004CC| 004CD| 004CE| 004CF| 004D0| 004D1| 004D2| 004D3| 004D4| 004D5| 004D6| 004D7| 004D8| 004D9| 004DA| 004DB| 004DC| 004DD| 004DE| 004DF| 004E0| 004E1| 004E2| 004E3| 004E4| 004E5| 004E6| 004E7| 004E8| 004E9| 004EA| 004EB| 004EC| 004ED| 004EE| 004EF| 004F0| 004F1| 004F2| 004F3| 004F4| 004F5| 004F6| 004F7| 004F8| 004F9| 004FA| 004FB| 004FC| 004FD| 004FE| 004FF| 00500| 00501| 00502| 00503| 00504| 00505| 00506| 00507| 00508| 00509| 0050A| 0050B| 0050C| 0050D| 0050E| 0050F| 00510| 00511| 00512| 00513| 00514| 00515| 00516| 00517| 00518| 00519| 0051A| 0051B| 0051C| 0051D| 0051E| 0051F| 00520| 00521| 00522| 00523| 00524| 00525| 00531| 00532| 00533| 00534| 00535| 00536| 00537| 00538| 00539| 0053A| 0053B| 0053C| 0053D| 0053E| 0053F| 00540| 00541| 00542| 00543| 00544| 00545| 00546| 00547| 00548| 00549| 0054A| 0054B| 0054C| 0054D| 0054E| 0054F| 00550| 00551| 00552| 00553| 00554| 00555| 00556| 00559| 0055A| 0055B| 0055C| 0055D| 0055E| 0055F| 00561| 00562| 00563| 00564| 00565| 00566| 00567| 00568| 00569| 0056A| 0056B| 0056C| 0056D| 0056E| 0056F| 00570| 00571| 00572| 00573| 00574| 00575| 00576| 00577| 00578| 00579| 0057A| 0057B| 0057C| 0057D| 0057E| 0057F| 00580| 00581| 00582| 00583| 00584| 00585| 00586| 00589| 0058A| 005B9| 005BA| 005BE| 005C0| 005C1| 005C2| 005C3| 005C6| 005D0| 005D1| 005D2| 005D3| 005D4| 005D5| 005D6| 005D7| 005D8| 005D9| 005DA| 005DB| 005DC| 005DD| 005DE| 005DF| 005E0| 005E1| 005E2| 005E3| 005E4| 005E5| 005E6| 005E7| 005E8| 005E9| 005EA| 005F0| 005F1| 005F2| 005F3| 005F4| 00E3F| 00E81| 00E82| 00E84| 00E87| 00E88| 00E8A| 00E8D| 00E94| 00E95| 00E96| 00E97| 00E99| 00E9A| 00E9B| 00E9C| 00E9D| 00E9E| 00E9F| 00EA1| 00EA2| 00EA3| 00EA5| 00EA7| 00EAA| 00EAB| 00EAD| 00EAE| 00EAF| 00EB0| 00EB2| 00EB3| 00EBD| 00EC0| 00EC1| 00EC2| 00EC3| 00EC4| 00EC6| 00ED0| 00ED1| 00ED2| 00ED3| 00ED4| 00ED5| 00ED6| 00ED7| 00ED8| 00ED9| 00EDC| 00EDD| 010A0| 010A1| 010A2| 010A3| 010A4| 010A5| 010A6| 010A7| 010A8| 010A9| 010AA| 010AB| 010AC| 010AD| 010AE| 010AF| 010B0| 010B1| 010B2| 010B3| 010B4| 010B5| 010B6| 010B7| 010B8| 010B9| 010BA| 010BB| 010BC| 010BD| 010BE| 010BF| 010C0| 010C1| 010C2| 010C3| 010C4| 010C5| 010D0| 010D1| 010D2| 010D3| 010D4| 010D5| 010D6| 010D7| 010D8| 010D9| 010DA| 010DB| 010DC| 010DD| 010DE| 010DF| 010E0| 010E1| 010E2| 010E3| 010E4| 010E5| 010E6| 010E7| 010E8| 010E9| 010EA| 010EB| 010EC| 010ED| 010EE| 010EF| 010F0| 010F1| 010F2| 010F3| 010F4| 010F5| 010F6| 010F7| 010F8| 010F9| 010FA| 010FB| 010FC| 01401| 01402| 01403| 01404| 01405| 01406| 01407| 01409| 0140A| 0140B| 0140C| 0140D| 0140E| 0140F| 01410| 01411| 01412| 01413| 01414| 01415| 01416| 01417| 01418| 01419| 0141A| 0141B| 0141D| 0141E| 0141F| 01420| 01421| 01422| 01423| 01424| 01425| 01426| 01427| 01428| 01429| 0142A| 0142B| 0142C| 0142D| 0142E| 0142F| 01430| 01431| 01432| 01433| 01434| 01435| 01437| 01438| 01439| 0143A| 0143B| 0143C| 0143D| 0143E| 0143F| 01440| 01441| 01442| 01443| 01444| 01445| 01446| 01447| 01448| 01449| 0144A| 0144C| 0144D| 0144E| 0144F| 01450| 01451| 01452| 01454| 01455| 01456| 01457| 01458| 01459| 0145A| 0145B| 0145C| 0145D| 0145E| 0145F| 01460| 01461| 01462| 01463| 01464| 01465| 01466| 01467| 01468| 01469| 0146A| 0146B| 0146C| 0146D| 0146E| 0146F| 01470| 01471| 01472| 01473| 01474| 01475| 01476| 01477| 01478| 01479| 0147A| 0147B| 0147C| 0147D| 0147E| 0147F| 01480| 01481| 01482| 01483| 01484| 01485| 01486| 01487| 01488| 01489| 0148A| 0148B| 0148C| 0148D| 0148E| 0148F| 01490| 01491| 01492| 01493| 01494| 01495| 01496| 01497| 01498| 01499| 0149A| 0149B| 0149C| 0149D| 0149E| 0149F| 014A0| 014A1| 014A2| 014A3| 014A4| 014A5| 014A6| 014A7| 014A8| 014A9| 014AA| 014AB| 014AC| 014AD| 014AE| 014AF| 014B0| 014B1| 014B2| 014B3| 014B4| 014B5| 014B6| 014B7| 014B8| 014B9| 014BA| 014BB| 014BC| 014BD| 014C0| 014C1| 014C2| 014C3| 014C4| 014C5| 014C6| 014C7| 014C8| 014C9| 014CA| 014CB| 014CC| 014CD| 014CE| 014CF| 014D0| 014D1| 014D2| 014D3| 014D4| 014D5| 014D6| 014D7| 014D8| 014D9| 014DA| 014DB| 014DC| 014DD| 014DE| 014DF| 014E0| 014E1| 014E2| 014E3| 014E4| 014E5| 014E6| 014E7| 014E8| 014E9| 014EA| 014EC| 014ED| 014EE| 014EF| 014F0| 014F1| 014F2| 014F3| 014F4| 014F5| 014F6| 014F7| 014F8| 014F9| 014FA| 014FB| 014FC| 014FD| 014FE| 014FF| 01500| 01501| 01502| 01503| 01504| 01505| 01506| 01507| 01510| 01511| 01512| 01513| 01514| 01515| 01516| 01517| 01518| 01519| 0151A| 0151B| 0151C| 0151D| 0151E| 0151F| 01520| 01521| 01522| 01523| 01524| 01525| 01526| 01527| 01528| 01529| 0152A| 0152B| 0152C| 0152D| 0152E| 0152F| 01530| 01531| 01532| 01533| 01534| 01535| 01536| 01537| 01538| 01539| 0153A| 0153B| 0153C| 0153D| 0153E| 01540| 01541| 01542| 01543| 01544| 01545| 01546| 01547| 01548| 01549| 0154A| 0154B| 0154C| 0154D| 0154E| 0154F| 01550| 01552| 01553| 01554| 01555| 01556| 01557| 01558| 01559| 0155A| 0155B| 0155C| 0155D| 0155E| 0155F| 01560| 01561| 01562| 01563| 01564| 01565| 01566| 01567| 01568| 01569| 0156A| 01574| 01575| 01576| 01577| 01578| 01579| 0157A| 0157B| 0157C| 0157D| 0157E| 0157F| 01580| 01581| 01582| 01583| 01584| 01585| 0158A| 0158B| 0158C| 0158D| 0158E| 0158F| 01590| 01591| 01592| 01593| 01594| 01595| 01596| 015A0| 015A1| 015A2| 015A3| 015A4| 015A5| 015A6| 015A7| 015A8| 015A9| 015AA| 015AB| 015AC| 015AD| 015AE| 015AF| 015DE| 015E1| 01646| 01647| 0166E| 0166F| 01670| 01671| 01672| 01673| 01674| 01675| 01676| 01D00| 01D01| 01D02| 01D03| 01D04| 01D05| 01D06| 01D07| 01D08| 01D09| 01D0A| 01D0B| 01D0C| 01D0D| 01D0E| 01D0F| 01D10| 01D11| 01D12| 01D13| 01D14| 01D16| 01D17| 01D18| 01D19| 01D1A| 01D1B| 01D1C| 01D1D| 01D1E| 01D1F| 01D20| 01D21| 01D22| 01D23| 01D26| 01D27| 01D28| 01D29| 01D2A| 01D2B| 01D2C| 01D2D| 01D2E| 01D30| 01D31| 01D32| 01D33| 01D34| 01D35| 01D36| 01D37| 01D38| 01D39| 01D3A| 01D3B| 01D3C| 01D3D| 01D3E| 01D3F| 01D40| 01D41| 01D42| 01D43| 01D44| 01D45| 01D46| 01D47| 01D48| 01D49| 01D4A| 01D4B| 01D4C| 01D4D| 01D4E| 01D4F| 01D50| 01D51| 01D52| 01D53| 01D54| 01D55| 01D56| 01D57| 01D58| 01D59| 01D5A| 01D5B| 01D5D| 01D5E| 01D5F| 01D60| 01D61| 01D62| 01D63| 01D64| 01D65| 01D66| 01D67| 01D68| 01D69| 01D6A| 01D77| 01D78| 01D7B| 01D7D| 01D85| 01D9B| 01D9C| 01D9D| 01D9E| 01D9F| 01DA0| 01DA1| 01DA2| 01DA3| 01DA4| 01DA5| 01DA6| 01DA7| 01DA8| 01DA9| 01DAA| 01DAB| 01DAC| 01DAD| 01DAE| 01DAF| 01DB0| 01DB1| 01DB2| 01DB3| 01DB4| 01DB5| 01DB6| 01DB7| 01DB8| 01DB9| 01DBA| 01DBB| 01DBC| 01DBD| 01DBE| 01DBF| 01E00| 01E01| 01E02| 01E03| 01E04| 01E05| 01E06| 01E07| 01E08| 01E09| 01E0A| 01E0B| 01E0C| 01E0D| 01E0E| 01E0F| 01E10| 01E11| 01E12| 01E13| 01E14| 01E15| 01E16| 01E17| 01E18| 01E19| 01E1A| 01E1B| 01E1C| 01E1D| 01E1E| 01E1F| 01E20| 01E21| 01E22| 01E23| 01E24| 01E25| 01E26| 01E27| 01E28| 01E29| 01E2A| 01E2B| 01E2C| 01E2D| 01E2E| 01E2F| 01E30| 01E31| 01E32| 01E33| 01E34| 01E35| 01E36| 01E37| 01E38| 01E39| 01E3A| 01E3B| 01E3C| 01E3D| 01E3E| 01E3F| 01E40| 01E41| 01E42| 01E43| 01E44| 01E45| 01E46| 01E47| 01E48| 01E49| 01E4A| 01E4B| 01E4C| 01E4D| 01E4E| 01E4F| 01E50| 01E51| 01E52| 01E53| 01E54| 01E55| 01E56| 01E57| 01E58| 01E59| 01E5A| 01E5B| 01E5C| 01E5D| 01E5E| 01E5F| 01E60| 01E61| 01E62| 01E63| 01E64| 01E65| 01E66| 01E67| 01E68| 01E69| 01E6A| 01E6B| 01E6C| 01E6D| 01E6E| 01E6F| 01E70| 01E71| 01E72| 01E73| 01E74| 01E75| 01E76| 01E77| 01E78| 01E79| 01E7A| 01E7B| 01E7C| 01E7D| 01E7E| 01E7F| 01E80| 01E81| 01E82| 01E83| 01E84| 01E85| 01E86| 01E87| 01E88| 01E89| 01E8A| 01E8B| 01E8C| 01E8D| 01E8E| 01E8F| 01E90| 01E91| 01E92| 01E93| 01E94| 01E95| 01E96| 01E97| 01E98| 01E99| 01E9A| 01E9B| 01E9C| 01E9D| 01E9E| 01E9F| 01EA0| 01EA1| 01EA2| 01EA3| 01EA4| 01EA5| 01EA6| 01EA7| 01EA8| 01EA9| 01EAA| 01EAB| 01EAC| 01EAD| 01EAE| 01EAF| 01EB0| 01EB1| 01EB2| 01EB3| 01EB4| 01EB5| 01EB6| 01EB7| 01EB8| 01EB9| 01EBA| 01EBB| 01EBC| 01EBD| 01EBE| 01EBF| 01EC0| 01EC1| 01EC2| 01EC3| 01EC4| 01EC5| 01EC6| 01EC7| 01EC8| 01EC9| 01ECA| 01ECB| 01ECC| 01ECD| 01ECE| 01ECF| 01ED0| 01ED1| 01ED2| 01ED3| 01ED4| 01ED5| 01ED6| 01ED7| 01ED8| 01ED9| 01EDA| 01EDB| 01EDC| 01EDD| 01EDE| 01EDF| 01EE0| 01EE1| 01EE2| 01EE3| 01EE4| 01EE5| 01EE6| 01EE7| 01EE8| 01EE9| 01EEA| 01EEB| 01EEC| 01EED| 01EEE| 01EEF| 01EF0| 01EF1| 01EF2| 01EF3| 01EF4| 01EF5| 01EF6| 01EF7| 01EF8| 01EF9| 01EFA| 01EFB| 01F00| 01F01| 01F02| 01F03| 01F04| 01F05| 01F06| 01F07| 01F08| 01F09| 01F0A| 01F0B| 01F0C| 01F0D| 01F0E| 01F0F| 01F10| 01F11| 01F12| 01F13| 01F14| 01F15| 01F18| 01F19| 01F1A| 01F1B| 01F1C| 01F1D| 01F20| 01F21| 01F22| 01F23| 01F24| 01F25| 01F26| 01F27| 01F28| 01F29| 01F2A| 01F2B| 01F2C| 01F2D| 01F2E| 01F2F| 01F30| 01F31| 01F32| 01F33| 01F34| 01F35| 01F36| 01F37| 01F38| 01F39| 01F3A| 01F3B| 01F3C| 01F3D| 01F3E| 01F3F| 01F40| 01F41| 01F42| 01F43| 01F44| 01F45| 01F48| 01F49| 01F4A| 01F4B| 01F4C| 01F4D| 01F50| 01F51| 01F52| 01F53| 01F54| 01F55| 01F56| 01F57| 01F59| 01F5B| 01F5D| 01F5F| 01F60| 01F61| 01F62| 01F63| 01F64| 01F65| 01F66| 01F67| 01F68| 01F69| 01F6A| 01F6B| 01F6C| 01F6D| 01F6E| 01F6F| 01F70| 01F71| 01F72| 01F73| 01F74| 01F75| 01F76| 01F77| 01F78| 01F79| 01F7A| 01F7B| 01F7C| 01F7D| 01F80| 01F81| 01F82| 01F83| 01F84| 01F85| 01F86| 01F87| 01F88| 01F89| 01F8A| 01F8B| 01F8C| 01F8D| 01F8E| 01F8F| 01F90| 01F91| 01F92| 01F93| 01F94| 01F95| 01F96| 01F97| 01F98| 01F99| 01F9A| 01F9B| 01F9C| 01F9D| 01F9E| 01F9F| 01FA0| 01FA1| 01FA2| 01FA3| 01FA4| 01FA5| 01FA6| 01FA7| 01FA8| 01FA9| 01FAA| 01FAB| 01FAC| 01FAD| 01FAE| 01FAF| 01FB0| 01FB1| 01FB2| 01FB3| 01FB4| 01FB6| 01FB7| 01FB8| 01FB9| 01FBA| 01FBB| 01FBC| 01FBD| 01FBE| 01FBF| 01FC0| 01FC1| 01FC2| 01FC3| 01FC4| 01FC6| 01FC7| 01FC8| 01FC9| 01FCA| 01FCB| 01FCC| 01FCD| 01FCE| 01FCF| 01FD0| 01FD1| 01FD2| 01FD3| 01FD6| 01FD7| 01FD8| 01FD9| 01FDA| 01FDB| 01FDD| 01FDE| 01FDF| 01FE0| 01FE1| 01FE2| 01FE3| 01FE4| 01FE5| 01FE6| 01FE7| 01FE8| 01FE9| 01FEA| 01FEB| 01FEC| 01FED| 01FEE| 01FEF| 01FF2| 01FF3| 01FF4| 01FF6| 01FF7| 01FF8| 01FF9| 01FFA| 01FFB| 01FFC| 01FFD| 01FFE| 02000| 02001| 02002| 02003| 02004| 02005| 02006| 02007| 02008| 02009| 0200A| 0200B| 0200C| 0200D| 0200E| 0200F| 02010| 02011| 02012| 02013| 02014| 02015| 02016| 02017| 02018| 02019| 0201A| 0201B| 0201C| 0201D| 0201E| 0201F| 02020| 02021| 02022| 02023| 02024| 02025| 02026| 02027| 02028| 02029| 0202A| 0202B| 0202C| 0202D| 0202E| 0202F| 02030| 02031| 02032| 02033| 02034| 02035| 02036| 02037| 02038| 02039| 0203A| 0203B| 0203D| 0203E| 0203F| 02040| 02041| 02042| 02043| 02044| 02045| 02046| 0204A| 0204B| 0204C| 0204D| 0204E| 0204F| 02050| 02051| 02052| 02053| 02054| 02055| 02056| 02057| 02058| 02059| 0205A| 0205B| 0205C| 0205D| 0205E| 0205F| 02060| 02061| 02062| 02063| 02064| 0206A| 0206B| 0206C| 0206D| 0206E| 0206F| 02070| 02071| 02074| 02075| 02076| 02077| 02078| 02079| 0207A| 0207B| 0207C| 0207D| 0207E| 0207F| 02080| 02081| 02082| 02083| 02084| 02085| 02086| 02087| 02088| 02089| 0208A| 0208B| 0208C| 0208D| 0208E| 02090| 02091| 02092| 02093| 02094| 02095| 02096| 02097| 02098| 02099| 0209A| 0209B| 0209C| 020A0| 020A1| 020A2| 020A3| 020A4| 020A5| 020A6| 020A7| 020A9| 020AA| 020AB| 020AC| 020AD| 020AE| 020AF| 020B0| 020B1| 020B2| 020B3| 020B4| 020B5| 020B8| 020B9| 020BA| 02101| 02102| 02103| 02104| 02107| 02108| 02109| 0210B| 0210C| 0210D| 0210E| 0210F| 02110| 02111| 02112| 02113| 02114| 02115| 02116| 02117| 02118| 02119| 0211A| 0211B| 0211C| 0211D| 0211E| 0211F| 02122| 02123| 02124| 02125| 02126| 02127| 02128| 02129| 0212A| 0212B| 0212C| 0212D| 0212E| 0212F| 02130| 02131| 02132| 02133| 02134| 02135| 02136| 02137| 02138| 02139| 0213A| 0213C| 0213D| 0213E| 0213F| 02140| 02141| 02142| 02143| 02144| 02145| 02146| 02147| 02148| 02149| 0214B| 0214E| 02150| 02151| 02152| 02153| 02154| 02155| 02156| 02157| 02158| 02159| 0215A| 0215B| 0215C| 0215D| 0215E| 0215F| 02160| 02161| 02162| 02163| 02164| 02165| 02166| 02167| 02168| 02169| 0216A| 0216B| 0216C| 0216D| 0216E| 0216F| 02170| 02171| 02172| 02173| 02174| 02175| 02176| 02177| 02178| 02179| 0217A| 0217B| 0217C| 0217D| 0217E| 0217F| 02180| 02181| 02182| 02183| 02184| 02185| 02189| 02190| 02191| 02192| 02193| 02194| 02195| 02196| 02197| 02198| 02199| 0219A| 0219B| 0219C| 0219D| 0219E| 0219F| 021A0| 021A1| 021A2| 021A3| 021A4| 021A5| 021A6| 021A7| 021A8| 021A9| 021AA| 021AB| 021AC| 021AD| 021AE| 021AF| 021B0| 021B1| 021B2| 021B3| 021B4| 021B5| 021B6| 021B7| 021B8| 021B9| 021BA| 021BB| 021BC| 021BD| 021BE| 021BF| 021C0| 021C1| 021C2| 021C3| 021C4| 021C5| 021C6| 021C7| 021C8| 021C9| 021CA| 021CB| 021CC| 021CD| 021CE| 021CF| 021D0| 021D1| 021D2| 021D3| 021D4| 021D5| 021D6| 021D7| 021D8| 021D9| 021DA| 021DB| 021DC| 021DD| 021DE| 021DF| 021E0| 021E1| 021E2| 021E3| 021E4| 021E5| 021E6| 021E7| 021E8| 021E9| 021EA| 021EB| 021EC| 021ED| 021EE| 021EF| 021F0| 021F1| 021F2| 021F3| 021F4| 021F5| 021F6| 021F7| 021F8| 021F9| 021FA| 021FB| 021FC| 021FD| 021FE| 021FF| 02200| 02201| 02202| 02203| 02204| 02205| 02206| 02207| 02208| 02209| 0220A| 0220B| 0220C| 0220D| 0220E| 0220F| 02210| 02211| 02212| 02213| 02214| 02215| 02216| 02217| 02218| 02219| 0221A| 0221B| 0221C| 0221D| 0221E| 0221F| 02220| 02221| 02222| 02223| 02224| 02225| 02226| 02227| 02228| 02229| 0222A| 0222B| 0222C| 0222D| 0222E| 0222F| 02230| 02231| 02232| 02233| 02234| 02235| 02236| 02237| 02238| 02239| 0223A| 0223B| 0223C| 0223D| 0223E| 0223F| 02240| 02241| 02242| 02243| 02244| 02245| 02246| 02247| 02248| 02249| 0224A| 0224B| 0224C| 0224D| 0224E| 0224F| 02250| 02251| 02252| 02253| 02254| 02255| 02256| 02257| 02258| 02259| 0225A| 0225B| 0225C| 0225D| 0225E| 0225F| 02260| 02261| 02262| 02263| 02264| 02265| 02266| 02267| 02268| 02269| 0226A| 0226B| 0226C| 0226D| 0226E| 0226F| 02270| 02271| 02272| 02273| 02274| 02275| 02276| 02277| 02278| 02279| 0227A| 0227B| 0227C| 0227D| 0227E| 0227F| 02280| 02281| 02282| 02283| 02284| 02285| 02286| 02287| 02288| 02289| 0228A| 0228B| 0228C| 0228D| 0228E| 0228F| 02290| 02291| 02292| 02293| 02294| 02295| 02296| 02297| 02298| 02299| 0229A| 0229B| 0229C| 0229D| 0229E| 0229F| 022A0| 022A1| 022A2| 022A3| 022A4| 022A5| 022A6| 022A7| 022A8| 022A9| 022AA| 022AB| 022AC| 022AD| 022AE| 022AF| 022B0| 022B1| 022B2| 022B3| 022B4| 022B5| 022B6| 022B7| 022B8| 022B9| 022BA| 022BB| 022BC| 022BD| 022BE| 022BF| 022C0| 022C1| 022C2| 022C3| 022C4| 022C5| 022C6| 022C7| 022C8| 022C9| 022CA| 022CB| 022CC| 022CD| 022CE| 022CF| 022D0| 022D1| 022D2| 022D3| 022D4| 022D5| 022D6| 022D7| 022D8| 022D9| 022DA| 022DB| 022DC| 022DD| 022DE| 022DF| 022E0| 022E1| 022E2| 022E3| 022E4| 022E5| 022E6| 022E7| 022E8| 022E9| 022EA| 022EB| 022EC| 022ED| 022EE| 022EF| 022F0| 022F1| 022F2| 022F3| 022F4| 022F5| 022F6| 022F7| 022F8| 022F9| 022FA| 022FB| 022FC| 022FD| 022FE| 022FF| 02300| 02301| 02302| 02303| 02304| 02305| 02306| 02307| 02308| 02309| 0230A| 0230B| 0230C| 0230D| 0230E| 0230F| 02310| 02311| 02318| 02319| 0231C| 0231D| 0231E| 0231F| 02320| 02321| 02324| 02325| 02326| 02327| 02328| 0232B| 0232C| 02373| 02374| 02375| 0237A| 0237D| 02387| 02394| 0239B| 0239C| 0239D| 0239E| 0239F| 023A0| 023A1| 023A2| 023A3| 023A4| 023A5| 023A6| 023A7| 023A8| 023A9| 023AA| 023AB| 023AC| 023AD| 023AE| 023CE| 023CF| 023E3| 023E5| 023E8| 02422| 02423| 02460| 02461| 02462| 02463| 02464| 02465| 02466| 02467| 02468| 02469| 02580| 02581| 02582| 02583| 02584| 02585| 02586| 02587| 02588| 02589| 0258A| 0258B| 0258C| 0258D| 0258E| 0258F| 02590| 02591| 02592| 02593| 02594| 02595| 02596| 02597| 02598| 02599| 0259A| 0259B| 0259C| 0259D| 0259E| 0259F| 025A0| 025A1| 025A2| 025A3| 025A4| 025A5| 025A6| 025A7| 025A8| 025A9| 025AA| 025AB| 025AC| 025AD| 025AE| 025AF| 025B0| 025B1| 025B2| 025B3| 025B4| 025B5| 025B6| 025B7| 025B8| 025B9| 025BA| 025BB| 025BC| 025BD| 025BE| 025BF| 025C0| 025C1| 025C2| 025C3| 025C4| 025C5| 025C6| 025C7| 025C8| 025C9| 025CA| 025CB| 025CC| 025CD| 025CE| 025CF| 025D0| 025D1| 025D2| 025D3| 025D4| 025D5| 025D6| 025D7| 025D8| 025D9| 025DA| 025DB| 025DC| 025DD| 025DE| 025DF| 025E0| 025E1| 025E2| 025E3| 025E4| 025E5| 025E6| 025E7| 025E8| 025E9| 025EA| 025EB| 025EC| 025ED| 025EE| 025EF| 025F0| 025F1| 025F2| 025F3| 025F4| 025F5| 025F6| 025F7| 025F8| 025F9| 025FA| 025FB| 025FC| 025FD| 025FE| 025FF| 02600| 02601| 02602| 02603| 02604| 02605| 02606| 02607| 02608| 02609| 0260A| 0260B| 0260C| 0260D| 0260E| 0260F| 02610| 02611| 02612| 02613| 02614| 02615| 02616| 02617| 02618| 02619| 0261A| 0261B| 0261C| 0261D| 0261E| 0261F| 02620| 02621| 02622| 02623| 02624| 02625| 02626| 02627| 02628| 02629| 0262A| 0262B| 0262C| 0262D| 0262E| 0262F| 02630| 02631| 02632| 02633| 02634| 02635| 02636| 02637| 02638| 02639| 0263A| 0263B| 0263C| 0263D| 0263E| 0263F| 02640| 02641| 02642| 02643| 02644| 02645| 02646| 02647| 02648| 02649| 0264A| 0264B| 0264C| 0264D| 0264E| 0264F| 02650| 02651| 02652| 02653| 02654| 02655| 02656| 02657| 02658| 02659| 0265A| 0265B| 0265C| 0265D| 0265E| 0265F| 02660| 02661| 02662| 02663| 02664| 02665| 02666| 02667| 02668| 02669| 0266A| 0266B| 0266C| 0266D| 0266E| 0266F| 02670| 02671| 02672| 02673| 02674| 02675| 02676| 02677| 02678| 02679| 0267A| 0267B| 0267C| 0267D| 0267E| 0267F| 02680| 02681| 02682| 02683| 02684| 02685| 02686| 02687| 02688| 02689| 0268A| 0268B| 0268C| 0268D| 0268E| 0268F| 02690| 02691| 02692| 02693| 02694| 02695| 02696| 02697| 02698| 02699| 0269A| 0269B| 0269C| 026A0| 026A1| 026A2| 026A3| 026A4| 026A5| 026A6| 026A7| 026A8| 026A9| 026AA| 026AB| 026AC| 026AD| 026AE| 026AF| 026B0| 026B1| 026B2| 026B3| 026B4| 026B5| 026B6| 026B7| 026B8| 026C0| 026C1| 026C2| 026C3| 026E2| 02701| 02702| 02703| 02704| 02706| 02707| 02708| 02709| 0270C| 0270D| 0270E| 0270F| 02710| 02711| 02712| 02713| 02714| 02715| 02716| 02717| 02718| 02719| 0271A| 0271B| 0271C| 0271D| 0271E| 0271F| 02720| 02721| 02722| 02723| 02724| 02725| 02726| 02727| 02729| 0272A| 0272B| 0272C| 0272D| 0272E| 0272F| 02730| 02731| 02732| 02733| 02734| 02735| 02736| 02737| 02738| 02739| 0273A| 0273B| 0273C| 0273D| 0273E| 0273F| 02740| 02741| 02742| 02743| 02744| 02745| 02746| 02747| 02748| 02749| 0274A| 0274B| 0274D| 0274F| 02750| 02751| 02752| 02756| 02758| 02759| 0275A| 0275B| 0275C| 0275D| 0275E| 02761| 02762| 02763| 02764| 02765| 02766| 02767| 02768| 02769| 0276A| 0276B| 0276C| 0276D| 0276E| 0276F| 02770| 02771| 02772| 02773| 02774| 02775| 02776| 02777| 02778| 02779| 0277A| 0277B| 0277C| 0277D| 0277E| 0277F| 02780| 02781| 02782| 02783| 02784| 02785| 02786| 02787| 02788| 02789| 0278A| 0278B| 0278C| 0278D| 0278E| 0278F| 02790| 02791| 02792| 02793| 02794| 02798| 02799| 0279A| 0279B| 0279C| 0279D| 0279E| 0279F| 027A0| 027A1| 027A2| 027A3| 027A4| 027A5| 027A6| 027A7| 027A8| 027A9| 027AA| 027AB| 027AC| 027AD| 027AE| 027AF| 027B1| 027B2| 027B3| 027B4| 027B5| 027B6| 027B7| 027B8| 027B9| 027BA| 027BB| 027BC| 027BD| 027BE| 027C5| 027C6| 027E0| 027E6| 027E7| 027E8| 027E9| 027EA| 027EB| 027F0| 027F1| 027F2| 027F3| 027F4| 027F5| 027F6| 027F7| 027F8| 027F9| 027FA| 027FB| 027FC| 027FD| 027FE| 027FF| 02800| 02801| 02802| 02803| 02804| 02805| 02806| 02807| 02808| 02809| 0280A| 0280B| 0280C| 0280D| 0280E| 0280F| 02810| 02811| 02812| 02813| 02814| 02815| 02816| 02817| 02818| 02819| 0281A| 0281B| 0281C| 0281D| 0281E| 0281F| 02820| 02821| 02822| 02823| 02824| 02825| 02826| 02827| 02828| 02829| 0282A| 0282B| 0282C| 0282D| 0282E| 0282F| 02830| 02831| 02832| 02833| 02834| 02835| 02836| 02837| 02838| 02839| 0283A| 0283B| 0283C| 0283D| 0283E| 0283F| 02840| 02841| 02842| 02843| 02844| 02845| 02846| 02847| 02848| 02849| 0284A| 0284B| 0284C| 0284D| 0284E| 0284F| 02850| 02851| 02852| 02853| 02854| 02855| 02856| 02857| 02858| 02859| 0285A| 0285B| 0285C| 0285D| 0285E| 0285F| 02860| 02861| 02862| 02863| 02864| 02865| 02866| 02867| 02868| 02869| 0286A| 0286B| 0286C| 0286D| 0286E| 0286F| 02870| 02871| 02872| 02873| 02874| 02875| 02876| 02877| 02878| 02879| 0287A| 0287B| 0287C| 0287D| 0287E| 0287F| 02880| 02881| 02882| 02883| 02884| 02885| 02886| 02887| 02888| 02889| 0288A| 0288B| 0288C| 0288D| 0288E| 0288F| 02890| 02891| 02892| 02893| 02894| 02895| 02896| 02897| 02898| 02899| 0289A| 0289B| 0289C| 0289D| 0289E| 0289F| 028A0| 028A1| 028A2| 028A3| 028A4| 028A5| 028A6| 028A7| 028A8| 028A9| 028AA| 028AB| 028AC| 028AD| 028AE| 028AF| 028B0| 028B1| 028B2| 028B3| 028B4| 028B5| 028B6| 028B7| 028B8| 028B9| 028BA| 028BB| 028BC| 028BD| 028BE| 028BF| 028C0| 028C1| 028C2| 028C3| 028C4| 028C5| 028C6| 028C7| 028C8| 028C9| 028CA| 028CB| 028CC| 028CD| 028CE| 028CF| 028D0| 028D1| 028D2| 028D3| 028D4| 028D5| 028D6| 028D7| 028D8| 028D9| 028DA| 028DB| 028DC| 028DD| 028DE| 028DF| 028E0| 028E1| 028E2| 028E3| 028E4| 028E5| 028E6| 028E7| 028E8| 028E9| 028EA| 028EB| 028EC| 028ED| 028EE| 028EF| 028F0| 028F1| 028F2| 028F3| 028F4| 028F5| 028F6| 028F7| 028F8| 028F9| 028FA| 028FB| 028FC| 028FD| 028FE| 028FF| 02906| 02907| 0290A| 0290B| 02940| 02941| 02983| 02984| 029CE| 029CF| 029D0| 029D1| 029D2| 029D3| 029D4| 029D5| 029EB| 029FA| 029FB| 02A00| 02A01| 02A02| 02A0C| 02A0D| 02A0E| 02A0F| 02A10| 02A11| 02A12| 02A13| 02A14| 02A15| 02A16| 02A17| 02A18| 02A19| 02A1A| 02A1B| 02A1C| 02A2F| 02A6A| 02A6B| 02A7D| 02A7E| 02A7F| 02A80| 02A81| 02A82| 02A83| 02A84| 02A85| 02A86| 02A87| 02A88| 02A89| 02A8A| 02A8B| 02A8C| 02A8D| 02A8E| 02A8F| 02A90| 02A91| 02A92| 02A93| 02A94| 02A95| 02A96| 02A97| 02A98| 02A99| 02A9A| 02A9B| 02A9C| 02A9D| 02A9E| 02A9F| 02AA0| 02AAE| 02AAF| 02AB0| 02AB1| 02AB2| 02AB3| 02AB4| 02AB5| 02AB6| 02AB7| 02AB8| 02AB9| 02ABA| 02AF9| 02AFA| 02B00| 02B01| 02B02| 02B03| 02B04| 02B05| 02B06| 02B07| 02B08| 02B09| 02B0A| 02B0B| 02B0C| 02B0D| 02B0E| 02B0F| 02B10| 02B11| 02B12| 02B13| 02B14| 02B15| 02B16| 02B17| 02B18| 02B19| 02B1A| 02B1F| 02B20| 02B21| 02B22| 02B23| 02B24| 02B53| 02B54| 02C60| 02C61| 02C62| 02C63| 02C64| 02C65| 02C66| 02C67| 02C68| 02C69| 02C6A| 02C6B| 02C6C| 02C6D| 02C6E| 02C6F| 02C70| 02C71| 02C72| 02C73| 02C74| 02C75| 02C76| 02C77| 02C79| 02C7A| 02C7B| 02C7C| 02C7D| 02C7E| 02C7F| 02D00| 02D01| 02D02| 02D03| 02D04| 02D05| 02D06| 02D07| 02D08| 02D09| 02D0A| 02D0B| 02D0C| 02D0D| 02D0E| 02D0F| 02D10| 02D11| 02D12| 02D13| 02D14| 02D15| 02D16| 02D17| 02D18| 02D19| 02D1A| 02D1B| 02D1C| 02D1D| 02D1E| 02D1F| 02D20| 02D21| 02D22| 02D23| 02D24| 02D25| 02E18| 02E1F| 02E22| 02E23| 02E24| 02E25| 02E2E| 04DC0| 04DC1| 04DC2| 04DC3| 04DC4| 04DC5| 04DC6| 04DC7| 04DC8| 04DC9| 04DCA| 04DCB| 04DCC| 04DCD| 04DCE| 04DCF| 04DD0| 04DD1| 04DD2| 04DD3| 04DD4| 04DD5| 04DD6| 04DD7| 04DD8| 04DD9| 04DDA| 04DDB| 04DDC| 04DDD| 04DDE| 04DDF| 04DE0| 04DE1| 04DE2| 04DE3| 04DE4| 04DE5| 04DE6| 04DE7| 04DE8| 04DE9| 04DEA| 04DEB| 04DEC| 04DED| 04DEE| 04DEF| 04DF0| 04DF1| 04DF2| 04DF3| 04DF4| 04DF5| 04DF6| 04DF7| 04DF8| 04DF9| 04DFA| 04DFB| 04DFC| 04DFD| 04DFE| 04DFF| 0A4D0| 0A4D1| 0A4D2| 0A4D3| 0A4D4| 0A4D5| 0A4D6| 0A4D7| 0A4D8| 0A4D9| 0A4DA| 0A4DB| 0A4DC| 0A4DD| 0A4DE| 0A4DF| 0A4E0| 0A4E1| 0A4E2| 0A4E3| 0A4E4| 0A4E5| 0A4E6| 0A4E7| 0A4E8| 0A4E9| 0A4EA| 0A4EB| 0A4EC| 0A4ED| 0A4EE| 0A4EF| 0A4F0| 0A4F1| 0A4F2| 0A4F3| 0A4F4| 0A4F5| 0A4F6| 0A4F7| 0A4F8| 0A4F9| 0A4FA| 0A4FB| 0A4FC| 0A4FD| 0A4FE| 0A4FF| 0A644| 0A645| 0A646| 0A647| 0A64C| 0A64D| 0A650| 0A651| 0A654| 0A655| 0A656| 0A657| 0A662| 0A663| 0A664| 0A665| 0A666| 0A667| 0A668| 0A669| 0A66A| 0A66B| 0A66C| 0A66D| 0A66E| 0A68A| 0A68B| 0A68C| 0A68D| 0A694| 0A695| 0A708| 0A709| 0A70A| 0A70B| 0A70C| 0A70D| 0A70E| 0A70F| 0A710| 0A711| 0A712| 0A713| 0A714| 0A715| 0A716| 0A71B| 0A71C| 0A71D| 0A71E| 0A71F| 0A722| 0A723| 0A724| 0A725| 0A726| 0A727| 0A728| 0A729| 0A72A| 0A72B| 0A730| 0A731| 0A732| 0A733| 0A734| 0A735| 0A736| 0A737| 0A738| 0A739| 0A73A| 0A73B| 0A73C| 0A73D| 0A73E| 0A73F| 0A740| 0A741| 0A746| 0A747| 0A748| 0A749| 0A74A| 0A74B| 0A74E| 0A74F| 0A750| 0A751| 0A752| 0A753| 0A756| 0A757| 0A764| 0A765| 0A766| 0A767| 0A780| 0A781| 0A782| 0A783| 0A789| 0A78A| 0A78B| 0A78C| 0A78D| 0A78E| 0A790| 0A791| 0A7A0| 0A7A1| 0A7A2| 0A7A3| 0A7A4| 0A7A5| 0A7A6| 0A7A7| 0A7A8| 0A7A9| 0A7AA| 0A7FA| 0A7FB| 0A7FC| 0A7FD| 0A7FE| 0A7FF| 0E002| 0E003| 0E004| 0E005| 0E006| 0E007| 0E008| 0E009| 0E00A| 0E00B| 0E00C| 0E00D| 0E00E| 0E00F| 0E010| 0E011| 0E012| 0E013| 0E014| 0E015| 0E016| 0E017| 0E018| 0E019| 0E01A| 0E01B| 0E01C| 0E01D| 0E01E| 0E01F| 0E020| 0E021| 0E022| 0E023| 0E024| 0E025| 0E026| 0E027| 0E028| 0E029| 0E02A| 0E02B| 0E02C| 0E02D| 0E02E| 0E02F| 0E030| 0E031| 0E032| 0E033| 0E034| 0E035| 0E036| 0E037| 0E038| 0E039| 0E03A| 0E03B| 0E03C| 0E03D| 0E03E| 0E03F| 0E040| 0E041| 0E042| 0E043| 0E044| 0E045| 0E046| 0E047| 0E048| 0E049| 0E04A| 0E04B| 0E04C| 0E04D| 0E04E| 0E04F| 0E050| 0E051| 0E052| 0E053| 0E054| 0E055| 0E056| 0E057| 0E058| 0E059| 0E05A| 0E05B| 0E05C| 0E05D| 0E05E| 0E05F| 0E060| 0E061| 0E062| 0E063| 0E064| 0E065| 0E066| 0E067| 0E068| 0E069| 0E06A| 0E06B| 0E06C| 0E06D| 0E06E| 0E06F| 0E070| 0E071| 0E072| 0E073| 0E074| 0E075| 0E076| 0E077| 0E078| 0E079| 0E07A| 0E07B| 0E07C| 0E07D| 0E07E| 0E07F| 0E080| 0E081| 0E082| 0E083| 0E084| 0E085| 0E086| 0E087| 0E088| 0E089| 0E08A| 0E08B| 0E08C| 0E08D| 0E08E| 0E08F| 0E090| 0E091| 0E092| 0E093| 0E094| 0E095| 0E096| 0E097| 0E098| 0E099| 0E09A| 0E09B| 0E09C| 0E09D| 0E09E| 0E09F| 0E0A0| 0E0A1| 0E0A2| 0E0A3| 0E0A4| 0E0A5| 0E0A6| 0E0A7| 0E0A8| 0E0A9| 0E0AA| 0E0AB| 0E0AC| 0E0AD| 0E0AE| 0E0AF| 0E0B0| 0E0B1| 0E0B2| 0E0B3| 0E0B4| 0E0B5| 0E0B6| 0E0B7| 0E0B8| 0E0B9| 0E0BA| 0E0BB| 0E0BC| 0E0BD| 0E0BE| 0E0BF| 0E0C0| 0E0C1| 0E0C2| 0E0C3| 0E0C4| 0E0C5| 0E0C6| 0E0C7| 0E0C8| 0E0C9| 0E0CA| 0E0CB| 0E0CC| 0E0CD| 0E0CE| 0E0CF| 0E0D0| 0E0D1| 0E0D2| 0E0D3| 0E0D4| 0E0D5| 0E0D6| 0E0D7| 0E0D8| 0E0D9| 0E0DA| 0E0DB| 0E0DC| 0E0DD| 0E0DE| 0E0DF| 0E0E0| 0E0E1| 0E0E2| 0E0E3| 0E0E4| 0E0E5| 0E0E6| 0E0E7| 0E0E8| 0E0E9| 0E0EA| 0E0EB| 0E0EC| 0E0ED| 0E0EE| 0E0EF| 0E0F0| 0E0F1| 0E0F2| 0E0F3| 0E0F4| 0E0F5| 0E0F6| 0E0F7| 0E0F8| 0E0F9| 0E0FA| 0E0FB| 0E0FC| 0E0FD| 0E0FE| 0E0FF| 0E100| 0E101| 0E102| 0E103| 0E104| 0E105| 0E106| 0E107| 0E108| 0E109| 0E10A| 0E10B| 0E10C| 0E10D| 0E10E| 0E10F| 0E110| 0E111| 0E112| 0E113| 0E114| 0E115| 0E116| 0E117| 0E118| 0E119| 0E11A| 0E11B| 0E11C| 0E11D| 0E11E| 0E11F| 0E120| 0E121| 0E122| 0E123| 0E124| 0E125| 0E126| 0E127| 0E128| 0E129| 0E12A| 0E12B| 0E12C| 0E12D| 0E12E| 0E12F| 0E130| 0E131| 0E132| 0E133| 0E134| 0E135| 0E136| 0E137| 0E138| 0E139| 0E13A| 0E13B| 0E13C| 0E13D| 0E13E| 0E13F| 0E140| 0E141| 0E142| 0E143| 0E144| 0E145| 0E146| 0E147| 0E148| 0E149| 0E14A| 0E14B| 0E14C| 0E14D| 0E14E| 0E14F| 0E150| 0E151| 0E152| 0E153| 0E154| 0E155| 0E156| 0E157| 0E158| 0E159| 0E15A| 0E15B| 0E15C| 0E15D| 0E15E| 0E15F| 0E160| 0E161| 0E162| 0E163| 0E164| 0E165| 0E166| 0E167| 0E168| 0E169| 0E16A| 0E16B| 0E16C| 0E16D| 0E16E| 0E16F| 0E170| 0E171| 0E172| 0E173| 0E174| 0E175| 0E176| 0E177| 0E178| 0E179| 0E17A| 0E17B| 0E17C| 0E17D| 0E17E| 0E17F| 0E180| 0E181| 0E182| 0E183| 0E184| 0E185| 0E186| 0E187| 0E188| 0E189| 0E18A| 0E18B| 0E18C| 0E18D| 0E18E| 0E18F| 0E190| 0E191| 0E192| 0E193| 0E194| 0E195| 0E196| 0E197| 0E198| 0E199| 0E19A| 0E19B| 0E19C| 0E19D| 0E19E| 0E19F| 0E1A0| 0E1A1| 0E1A2| 0E1A3| 0E1A4| 0E1A5| 0E1A6| 0E1A7| 0E1A8| 0E1A9| 0E1AA| 0E1AB| 0E1AC| 0E1AD| 0E1AE| 0E1AF| 0E1B0| 0E1B1| 0E1B2| 0E1B3| 0E1B4| 0E1B5| 0E1B6| 0E1B7| 0E1B8| 0E1B9| 0E1BA| 0E1BB| 0E1BC| 0E1BD| 0E1BE| 0E1BF| 0E1C0| 0E1C1| 0E1C2| 0E1C3| 0E1C4| 0E1C5| 0E1C6| 0E1C7| 0E1C8| 0E1C9| 0E1CA| 0E1CB| 0E1CC| 0E1CD| 0E1CE| 0E1CF| 0E1D0| 0E1D1| 0E1D2| 0E1D3| 0E1D4| 0E1D5| 0E1D6| 0E1D7| 0E1D8| 0E1D9| 0E1DA| 0E1DB| 0E1DC| 0E1DD| 0E1DE| 0E1DF| 0E1E0| 0E1E1| 0E1E2| 0E1E3| 0E1E4| 0E1E5| 0E1E6| 0E1E7| 0E1E8| 0E1E9| 0E1EA| 0E1EB| 0E1EC| 0E1ED| 0E1EE| 0E1EF| 0E1F0| 0E1F1| 0E1F2| 0E1F3| 0E1F4| 0E1F5| 0E1F6| 0E1F7| 0E1F8| 0E1F9| 0E1FA| 0E1FB| 0E1FC| 0E1FD| 0E1FE| 0E1FF| 0E200| 0E201| 0E202| 0E203| 0E20F| 0E210| 0E211| 0E212| 0E213| 0E214| 0E215| 0E216| 0E217| 0E218| 0E219| 0E21A| 0E21B| 0E21C| 0E21D| 0E21E| 0E21F| 0E220| 0E221| 0E222| 0E223| 0E224| 0E225| 0E226| 0E227| 0E228| 0E229| 0E22A| 0E22B| 0E22C| 0E22D| 0E22E| 0E22F| 0E230| 0E231| 0E232| 0E233| 0E234| 0E235| 0E236| 0E237| 0E239| 0E23A| 0E23B| 0E23C| 0E23D| 0E23E| 0E23F| 0E240| 0E241| 0E242| 0E243| 0E244| 0EF00| 0EF01| 0EF02| 0EF03| 0EF04| 0EF05| 0EF06| 0EF07| 0EF08| 0EF09| 0EF0A| 0EF0B| 0EF0C| 0EF0D| 0EF0E| 0EF0F| 0EF10| 0EF11| 0EF12| 0EF13| 0EF14| 0EF15| 0EF16| 0EF17| 0EF18| 0EF19| 0F400| 0F401| 0F402| 0F403| 0F404| 0F405| 0F406| 0F407| 0F408| 0F409| 0F40A| 0F40B| 0F40C| 0F40D| 0F40E| 0F40F| 0F410| 0F411| 0F412| 0F413| 0F414| 0F415| 0F416| 0F417| 0F418| 0F419| 0F41A| 0F41B| 0F41C| 0F41D| 0F41E| 0F41F| 0F420| 0F421| 0F422| 0F423| 0F424| 0F425| 0F426| 0F428| 0F429| 0F42A| 0F42B| 0F42C| 0F42D| 0F42E| 0F42F| 0F430| 0F431| 0F432| 0F433| 0F434| 0F435| 0F436| 0F437| 0F438| 0F439| 0F43A| 0F43B| 0F43C| 0F43D| 0F43E| 0F43F| 0F440| 0F441| 0F5C5| 0FB1D| 0FB1F| 0FB20| 0FB21| 0FB22| 0FB23| 0FB24| 0FB25| 0FB26| 0FB27| 0FB28| 0FB29| 0FB2A| 0FB2B| 0FB2C| 0FB2D| 0FB2E| 0FB2F| 0FB30| 0FB31| 0FB32| 0FB33| 0FB34| 0FB35| 0FB36| 0FB37| 0FB38| 0FB39| 0FB3A| 0FB3B| 0FB3C| 0FB3D| 0FB3E| 0FB3F| 0FB40| 0FB41| 0FB42| 0FB43| 0FB44| 0FB45| 0FB46| 0FB47| 0FB48| 0FB49| 0FB4A| 0FB4B| 0FB4C| 0FB4D| 0FB4E| 0FB4F| 0FE00| 0FE01| 0FE02| 0FE03| 0FE04| 0FE05| 0FE06| 0FE07| 0FE08| 0FE09| 0FE0A| 0FE0B| 0FE0C| 0FE0D| 0FE0E| 0FE0F| 0FE20| 0FE22| 0FFF9| 0FFFA| 0FFFB| 0FFFC| 0FFFD';
|
6 |
+
$GlyphClassMarks = ' 00300| 00301| 00302| 00303| 00304| 00305| 00306| 00307| 00308| 00309| 0030A| 0030B| 0030C| 0030D| 0030E| 0030F| 00310| 00311| 00312| 00313| 00314| 00316| 00317| 00318| 00319| 0031C| 0031D| 0031E| 0031F| 00320| 00323| 00324| 00325| 00326| 00327| 00328| 00329| 0032A| 0032B| 0032C| 0032D| 0032E| 0032F| 00330| 00331| 00332| 00333| 00339| 0033A| 0033B| 0033C| 0033D| 0033E| 0033F| 00340| 00341| 00342| 00343| 00344| 00346| 00347| 00348| 00349| 0034A| 0034B| 0034C| 0034D| 0034E| 00351| 00352| 00353| 00357| 0035A| 0035D| 0035E| 00360| 00361| 00483| 00484| 00485| 00486| 00487| 005B0| 005B1| 005B2| 005B3| 005B4| 005B5| 005B6| 005B7| 005B8| 005BB| 005BC| 005BD| 005BF| 005C7| 00EB1| 00EB4| 00EB5| 00EB6| 00EB7| 00EB8| 00EB9| 00EBB| 00EBC| 00EC8| 00EC9| 00ECA| 00ECB| 00ECC| 00ECD| 01DC4| 01DC5| 01DC6| 01DC7| 01DC8| 01DC9| 020D0| 020D1| 020D6| 020D7| 020DB| 020DC| 020E1| 0E204| 0E205| 0E206| 0E207| 0E208| 0E209| 0E20A| 0E20B| 0E20C| 0E20D| 0E20E| 0E238| 0FB1E| 0FE21| 0FE23';
|
7 |
+
$GlyphClassLigatures = ' 00587| 0203C| 02047| 02048| 02049| 020A8| 02100| 02105| 02106| 02120| 02121| 0213B| 0FB00| 0FB01| 0FB02| 0FB03| 0FB04| 0FB05| 0FB06| 0FB13| 0FB14| 0FB15| 0FB16| 0FB17';
|
8 |
+
$GlyphClassComponents = '';
|
9 |
+
$MarkGlyphSets = array (
|
10 |
+
);
|
11 |
+
$MarkAttachmentType = array (
|
12 |
+
0 => ' 00300| 00301| 00302| 00303| 00304| 00305| 00306| 00307| 00308| 00309| 0030A| 0030B| 0030C| 0030D| 0030E| 0030F| 00310| 00311| 00312| 00313| 00314| 00316| 00317| 00318| 00319| 0031C| 0031D| 0031E| 0031F| 00320| 00323| 00324| 00325| 00326| 00327| 00328| 00329| 0032A| 0032B| 0032C| 0032D| 0032E| 0032F| 00330| 00331| 00332| 00333| 00339| 0033A| 0033B| 0033C| 0033D| 0033E| 0033F| 00340| 00341| 00342| 00343| 00344| 00346| 00347| 00348| 00349| 0034A| 0034B| 0034C| 0034D| 0034E| 00351| 00352| 00353| 00357| 0035A| 0035D| 0035E| 00360| 00361| 00483| 00484| 00485| 00486| 00487| 005B0| 005B1| 005B2| 005B3| 005B4| 005B5| 005B6| 005B7| 005B8| 005BB| 005BC| 005BD| 005BF| 005C7| 00EB1| 00EB4| 00EB5| 00EB6| 00EB7| 00EB8| 00EB9| 00EBB| 00EBC| 00EC8| 00EC9| 00ECA| 00ECB| 00ECC| 00ECD| 01DC4| 01DC5| 01DC6| 01DC7| 01DC8| 01DC9| 020D0| 020D1| 020D6| 020D7| 020DB| 020DC| 020E1| 0E204| 0E205| 0E206| 0E207| 0E208| 0E209| 0E20A| 0E20B| 0E20C| 0E20D| 0E20E| 0E238| 0FB1E| 0FE21| 0FE23',
|
13 |
+
);
|
14 |
+
?>
|
lib/mpdf/ttfontdata/dejavusanscondensedBI.GPOSdata.php
ADDED
@@ -0,0 +1,414 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
$LuCoverage = array (
|
3 |
+
0 =>
|
4 |
+
array (
|
5 |
+
0 =>
|
6 |
+
array (
|
7 |
+
3768 => 0,
|
8 |
+
3769 => 1,
|
9 |
+
),
|
10 |
+
),
|
11 |
+
1 =>
|
12 |
+
array (
|
13 |
+
0 =>
|
14 |
+
array (
|
15 |
+
3784 => 0,
|
16 |
+
3785 => 1,
|
17 |
+
3786 => 2,
|
18 |
+
3787 => 3,
|
19 |
+
3788 => 4,
|
20 |
+
3789 => 5,
|
21 |
+
),
|
22 |
+
),
|
23 |
+
2 =>
|
24 |
+
array (
|
25 |
+
0 =>
|
26 |
+
array (
|
27 |
+
792 => 0,
|
28 |
+
793 => 1,
|
29 |
+
796 => 2,
|
30 |
+
797 => 3,
|
31 |
+
798 => 4,
|
32 |
+
799 => 5,
|
33 |
+
805 => 6,
|
34 |
+
810 => 7,
|
35 |
+
812 => 8,
|
36 |
+
813 => 9,
|
37 |
+
825 => 10,
|
38 |
+
826 => 11,
|
39 |
+
827 => 12,
|
40 |
+
840 => 13,
|
41 |
+
851 => 14,
|
42 |
+
858 => 15,
|
43 |
+
),
|
44 |
+
1 =>
|
45 |
+
array (
|
46 |
+
768 => 0,
|
47 |
+
769 => 1,
|
48 |
+
770 => 2,
|
49 |
+
771 => 3,
|
50 |
+
772 => 4,
|
51 |
+
773 => 5,
|
52 |
+
774 => 6,
|
53 |
+
775 => 7,
|
54 |
+
776 => 8,
|
55 |
+
777 => 9,
|
56 |
+
778 => 10,
|
57 |
+
779 => 11,
|
58 |
+
780 => 12,
|
59 |
+
781 => 13,
|
60 |
+
782 => 14,
|
61 |
+
783 => 15,
|
62 |
+
784 => 16,
|
63 |
+
785 => 17,
|
64 |
+
829 => 18,
|
65 |
+
831 => 19,
|
66 |
+
832 => 20,
|
67 |
+
833 => 21,
|
68 |
+
834 => 22,
|
69 |
+
836 => 23,
|
70 |
+
838 => 24,
|
71 |
+
842 => 25,
|
72 |
+
843 => 26,
|
73 |
+
844 => 27,
|
74 |
+
849 => 28,
|
75 |
+
850 => 29,
|
76 |
+
855 => 30,
|
77 |
+
7620 => 31,
|
78 |
+
7621 => 32,
|
79 |
+
7622 => 33,
|
80 |
+
7623 => 34,
|
81 |
+
7624 => 35,
|
82 |
+
7625 => 36,
|
83 |
+
8400 => 37,
|
84 |
+
8401 => 38,
|
85 |
+
8406 => 39,
|
86 |
+
8407 => 40,
|
87 |
+
8411 => 41,
|
88 |
+
8412 => 42,
|
89 |
+
8417 => 43,
|
90 |
+
57860 => 44,
|
91 |
+
57861 => 45,
|
92 |
+
57862 => 46,
|
93 |
+
57863 => 47,
|
94 |
+
57864 => 48,
|
95 |
+
57865 => 49,
|
96 |
+
57866 => 50,
|
97 |
+
57867 => 51,
|
98 |
+
57868 => 52,
|
99 |
+
57869 => 53,
|
100 |
+
57870 => 54,
|
101 |
+
57912 => 55,
|
102 |
+
),
|
103 |
+
),
|
104 |
+
3 =>
|
105 |
+
array (
|
106 |
+
0 =>
|
107 |
+
array (
|
108 |
+
1468 => 0,
|
109 |
+
),
|
110 |
+
),
|
111 |
+
4 =>
|
112 |
+
array (
|
113 |
+
0 =>
|
114 |
+
array (
|
115 |
+
1456 => 0,
|
116 |
+
1457 => 1,
|
117 |
+
1458 => 2,
|
118 |
+
1459 => 3,
|
119 |
+
1460 => 4,
|
120 |
+
1461 => 5,
|
121 |
+
1462 => 6,
|
122 |
+
1463 => 7,
|
123 |
+
1464 => 8,
|
124 |
+
1467 => 9,
|
125 |
+
1469 => 10,
|
126 |
+
1479 => 11,
|
127 |
+
),
|
128 |
+
),
|
129 |
+
5 =>
|
130 |
+
array (
|
131 |
+
0 =>
|
132 |
+
array (
|
133 |
+
1471 => 0,
|
134 |
+
64286 => 1,
|
135 |
+
),
|
136 |
+
),
|
137 |
+
6 =>
|
138 |
+
array (
|
139 |
+
0 =>
|
140 |
+
array (
|
141 |
+
3768 => 0,
|
142 |
+
3769 => 1,
|
143 |
+
3772 => 2,
|
144 |
+
),
|
145 |
+
),
|
146 |
+
7 =>
|
147 |
+
array (
|
148 |
+
0 =>
|
149 |
+
array (
|
150 |
+
3761 => 0,
|
151 |
+
3764 => 1,
|
152 |
+
3765 => 2,
|
153 |
+
3766 => 3,
|
154 |
+
3767 => 4,
|
155 |
+
3771 => 5,
|
156 |
+
3784 => 6,
|
157 |
+
3785 => 7,
|
158 |
+
3786 => 8,
|
159 |
+
3787 => 9,
|
160 |
+
3788 => 10,
|
161 |
+
3789 => 11,
|
162 |
+
),
|
163 |
+
),
|
164 |
+
8 =>
|
165 |
+
array (
|
166 |
+
0 =>
|
167 |
+
array (
|
168 |
+
65057 => 0,
|
169 |
+
65059 => 1,
|
170 |
+
),
|
171 |
+
1 =>
|
172 |
+
array (
|
173 |
+
808 => 0,
|
174 |
+
),
|
175 |
+
2 =>
|
176 |
+
array (
|
177 |
+
768 => 0,
|
178 |
+
769 => 1,
|
179 |
+
),
|
180 |
+
3 =>
|
181 |
+
array (
|
182 |
+
807 => 0,
|
183 |
+
),
|
184 |
+
4 =>
|
185 |
+
array (
|
186 |
+
790 => 0,
|
187 |
+
791 => 1,
|
188 |
+
792 => 2,
|
189 |
+
793 => 3,
|
190 |
+
796 => 4,
|
191 |
+
797 => 5,
|
192 |
+
798 => 6,
|
193 |
+
799 => 7,
|
194 |
+
800 => 8,
|
195 |
+
803 => 9,
|
196 |
+
804 => 10,
|
197 |
+
805 => 11,
|
198 |
+
806 => 12,
|
199 |
+
809 => 13,
|
200 |
+
810 => 14,
|
201 |
+
811 => 15,
|
202 |
+
812 => 16,
|
203 |
+
813 => 17,
|
204 |
+
814 => 18,
|
205 |
+
815 => 19,
|
206 |
+
816 => 20,
|
207 |
+
817 => 21,
|
208 |
+
818 => 22,
|
209 |
+
819 => 23,
|
210 |
+
825 => 24,
|
211 |
+
826 => 25,
|
212 |
+
827 => 26,
|
213 |
+
828 => 27,
|
214 |
+
839 => 28,
|
215 |
+
840 => 29,
|
216 |
+
841 => 30,
|
217 |
+
845 => 31,
|
218 |
+
846 => 32,
|
219 |
+
851 => 33,
|
220 |
+
858 => 34,
|
221 |
+
),
|
222 |
+
5 =>
|
223 |
+
array (
|
224 |
+
768 => 0,
|
225 |
+
769 => 1,
|
226 |
+
770 => 2,
|
227 |
+
771 => 3,
|
228 |
+
772 => 4,
|
229 |
+
773 => 5,
|
230 |
+
774 => 6,
|
231 |
+
775 => 7,
|
232 |
+
776 => 8,
|
233 |
+
777 => 9,
|
234 |
+
778 => 10,
|
235 |
+
779 => 11,
|
236 |
+
780 => 12,
|
237 |
+
781 => 13,
|
238 |
+
782 => 14,
|
239 |
+
783 => 15,
|
240 |
+
784 => 16,
|
241 |
+
785 => 17,
|
242 |
+
786 => 18,
|
243 |
+
787 => 19,
|
244 |
+
788 => 20,
|
245 |
+
829 => 21,
|
246 |
+
830 => 22,
|
247 |
+
831 => 23,
|
248 |
+
832 => 24,
|
249 |
+
833 => 25,
|
250 |
+
834 => 26,
|
251 |
+
835 => 27,
|
252 |
+
836 => 28,
|
253 |
+
838 => 29,
|
254 |
+
842 => 30,
|
255 |
+
843 => 31,
|
256 |
+
844 => 32,
|
257 |
+
849 => 33,
|
258 |
+
850 => 34,
|
259 |
+
855 => 35,
|
260 |
+
1155 => 36,
|
261 |
+
1156 => 37,
|
262 |
+
1157 => 38,
|
263 |
+
1158 => 39,
|
264 |
+
1159 => 40,
|
265 |
+
7620 => 41,
|
266 |
+
7621 => 42,
|
267 |
+
7622 => 43,
|
268 |
+
7623 => 44,
|
269 |
+
7624 => 45,
|
270 |
+
7625 => 46,
|
271 |
+
8400 => 47,
|
272 |
+
8401 => 48,
|
273 |
+
8406 => 49,
|
274 |
+
8407 => 50,
|
275 |
+
8411 => 51,
|
276 |
+
8412 => 52,
|
277 |
+
8417 => 53,
|
278 |
+
57860 => 54,
|
279 |
+
57861 => 55,
|
280 |
+
57862 => 56,
|
281 |
+
57863 => 57,
|
282 |
+
57864 => 58,
|
283 |
+
57865 => 59,
|
284 |
+
57866 => 60,
|
285 |
+
57867 => 61,
|
286 |
+
57868 => 62,
|
287 |
+
57869 => 63,
|
288 |
+
57870 => 64,
|
289 |
+
57912 => 65,
|
290 |
+
),
|
291 |
+
),
|
292 |
+
9 =>
|
293 |
+
array (
|
294 |
+
0 =>
|
295 |
+
array (
|
296 |
+
45 => 0,
|
297 |
+
65 => 1,
|
298 |
+
66 => 2,
|
299 |
+
67 => 3,
|
300 |
+
68 => 4,
|
301 |
+
70 => 5,
|
302 |
+
71 => 6,
|
303 |
+
75 => 7,
|
304 |
+
76 => 8,
|
305 |
+
79 => 9,
|
306 |
+
80 => 10,
|
307 |
+
81 => 11,
|
308 |
+
82 => 12,
|
309 |
+
83 => 13,
|
310 |
+
84 => 14,
|
311 |
+
85 => 15,
|
312 |
+
86 => 16,
|
313 |
+
87 => 17,
|
314 |
+
88 => 18,
|
315 |
+
89 => 19,
|
316 |
+
90 => 20,
|
317 |
+
97 => 21,
|
318 |
+
102 => 22,
|
319 |
+
107 => 23,
|
320 |
+
114 => 24,
|
321 |
+
118 => 25,
|
322 |
+
119 => 26,
|
323 |
+
121 => 27,
|
324 |
+
192 => 28,
|
325 |
+
193 => 29,
|
326 |
+
194 => 30,
|
327 |
+
195 => 31,
|
328 |
+
196 => 32,
|
329 |
+
198 => 33,
|
330 |
+
199 => 34,
|
331 |
+
208 => 35,
|
332 |
+
210 => 36,
|
333 |
+
211 => 37,
|
334 |
+
212 => 38,
|
335 |
+
213 => 39,
|
336 |
+
214 => 40,
|
337 |
+
216 => 41,
|
338 |
+
217 => 42,
|
339 |
+
218 => 43,
|
340 |
+
219 => 44,
|
341 |
+
220 => 45,
|
342 |
+
221 => 46,
|
343 |
+
224 => 47,
|
344 |
+
225 => 48,
|
345 |
+
226 => 49,
|
346 |
+
227 => 50,
|
347 |
+
228 => 51,
|
348 |
+
229 => 52,
|
349 |
+
253 => 53,
|
350 |
+
255 => 54,
|
351 |
+
256 => 55,
|
352 |
+
258 => 56,
|
353 |
+
260 => 57,
|
354 |
+
262 => 58,
|
355 |
+
264 => 59,
|
356 |
+
266 => 60,
|
357 |
+
268 => 61,
|
358 |
+
270 => 62,
|
359 |
+
272 => 63,
|
360 |
+
286 => 64,
|
361 |
+
313 => 65,
|
362 |
+
317 => 66,
|
363 |
+
320 => 67,
|
364 |
+
321 => 68,
|
365 |
+
340 => 69,
|
366 |
+
341 => 70,
|
367 |
+
344 => 71,
|
368 |
+
345 => 72,
|
369 |
+
350 => 73,
|
370 |
+
352 => 74,
|
371 |
+
356 => 75,
|
372 |
+
357 => 76,
|
373 |
+
366 => 77,
|
374 |
+
376 => 78,
|
375 |
+
381 => 79,
|
376 |
+
699 => 80,
|
377 |
+
8208 => 81,
|
378 |
+
8216 => 82,
|
379 |
+
8218 => 83,
|
380 |
+
8220 => 84,
|
381 |
+
8222 => 85,
|
382 |
+
42788 => 86,
|
383 |
+
42816 => 87,
|
384 |
+
42817 => 88,
|
385 |
+
),
|
386 |
+
),
|
387 |
+
10 =>
|
388 |
+
array (
|
389 |
+
0 =>
|
390 |
+
array (
|
391 |
+
61185 => 0,
|
392 |
+
61186 => 1,
|
393 |
+
61187 => 2,
|
394 |
+
61188 => 3,
|
395 |
+
61189 => 4,
|
396 |
+
61191 => 5,
|
397 |
+
61192 => 6,
|
398 |
+
61193 => 7,
|
399 |
+
61194 => 8,
|
400 |
+
61195 => 9,
|
401 |
+
61197 => 10,
|
402 |
+
61198 => 11,
|
403 |
+
61199 => 12,
|
404 |
+
61200 => 13,
|
405 |
+
61201 => 14,
|
406 |
+
61203 => 15,
|
407 |
+
61204 => 16,
|
408 |
+
61205 => 17,
|
409 |
+
61206 => 18,
|
410 |
+
61207 => 19,
|
411 |
+
),
|
412 |
+
),
|
413 |
+
);
|
414 |
+
?>
|
lib/mpdf/ttfontdata/dejavusanscondensedBI.GSUBGPOStables.dat
ADDED
Binary file
|
lib/mpdf/ttfontdata/dejavusanscondensedBI.GSUBdata.php
ADDED
@@ -0,0 +1,368 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
$GSLuCoverage = array (
|
3 |
+
0 =>
|
4 |
+
array (
|
5 |
+
0 =>
|
6 |
+
array (
|
7 |
+
1506 => 0,
|
8 |
+
),
|
9 |
+
),
|
10 |
+
1 =>
|
11 |
+
array (
|
12 |
+
0 =>
|
13 |
+
array (
|
14 |
+
105 => 0,
|
15 |
+
106 => 1,
|
16 |
+
303 => 2,
|
17 |
+
585 => 3,
|
18 |
+
616 => 4,
|
19 |
+
669 => 5,
|
20 |
+
768 => 6,
|
21 |
+
769 => 7,
|
22 |
+
770 => 8,
|
23 |
+
771 => 9,
|
24 |
+
772 => 10,
|
25 |
+
773 => 11,
|
26 |
+
774 => 12,
|
27 |
+
775 => 13,
|
28 |
+
776 => 14,
|
29 |
+
777 => 15,
|
30 |
+
778 => 16,
|
31 |
+
779 => 17,
|
32 |
+
780 => 18,
|
33 |
+
781 => 19,
|
34 |
+
782 => 20,
|
35 |
+
783 => 21,
|
36 |
+
784 => 22,
|
37 |
+
785 => 23,
|
38 |
+
786 => 24,
|
39 |
+
787 => 25,
|
40 |
+
788 => 26,
|
41 |
+
829 => 27,
|
42 |
+
830 => 28,
|
43 |
+
831 => 29,
|
44 |
+
832 => 30,
|
45 |
+
833 => 31,
|
46 |
+
834 => 32,
|
47 |
+
835 => 33,
|
48 |
+
836 => 34,
|
49 |
+
838 => 35,
|
50 |
+
842 => 36,
|
51 |
+
843 => 37,
|
52 |
+
844 => 38,
|
53 |
+
849 => 39,
|
54 |
+
850 => 40,
|
55 |
+
855 => 41,
|
56 |
+
1011 => 42,
|
57 |
+
1110 => 43,
|
58 |
+
1112 => 44,
|
59 |
+
1155 => 45,
|
60 |
+
1156 => 46,
|
61 |
+
1157 => 47,
|
62 |
+
1158 => 48,
|
63 |
+
7725 => 49,
|
64 |
+
7883 => 50,
|
65 |
+
8400 => 51,
|
66 |
+
8401 => 52,
|
67 |
+
8406 => 53,
|
68 |
+
8407 => 54,
|
69 |
+
8520 => 55,
|
70 |
+
8521 => 56,
|
71 |
+
),
|
72 |
+
),
|
73 |
+
2 =>
|
74 |
+
array (
|
75 |
+
0 =>
|
76 |
+
array (
|
77 |
+
741 => 0,
|
78 |
+
742 => 1,
|
79 |
+
743 => 2,
|
80 |
+
744 => 3,
|
81 |
+
745 => 4,
|
82 |
+
),
|
83 |
+
1 =>
|
84 |
+
array (
|
85 |
+
741 => 0,
|
86 |
+
742 => 1,
|
87 |
+
743 => 2,
|
88 |
+
744 => 3,
|
89 |
+
745 => 4,
|
90 |
+
),
|
91 |
+
2 =>
|
92 |
+
array (
|
93 |
+
741 => 0,
|
94 |
+
742 => 1,
|
95 |
+
743 => 2,
|
96 |
+
744 => 3,
|
97 |
+
745 => 4,
|
98 |
+
),
|
99 |
+
3 =>
|
100 |
+
array (
|
101 |
+
741 => 0,
|
102 |
+
742 => 1,
|
103 |
+
743 => 2,
|
104 |
+
744 => 3,
|
105 |
+
745 => 4,
|
106 |
+
),
|
107 |
+
4 =>
|
108 |
+
array (
|
109 |
+
741 => 0,
|
110 |
+
742 => 1,
|
111 |
+
743 => 2,
|
112 |
+
744 => 3,
|
113 |
+
745 => 4,
|
114 |
+
),
|
115 |
+
5 =>
|
116 |
+
array (
|
117 |
+
741 => 0,
|
118 |
+
),
|
119 |
+
6 =>
|
120 |
+
array (
|
121 |
+
742 => 0,
|
122 |
+
),
|
123 |
+
7 =>
|
124 |
+
array (
|
125 |
+
743 => 0,
|
126 |
+
),
|
127 |
+
8 =>
|
128 |
+
array (
|
129 |
+
744 => 0,
|
130 |
+
),
|
131 |
+
9 =>
|
132 |
+
array (
|
133 |
+
745 => 0,
|
134 |
+
),
|
135 |
+
),
|
136 |
+
3 =>
|
137 |
+
array (
|
138 |
+
0 =>
|
139 |
+
array (
|
140 |
+
1073 => 0,
|
141 |
+
),
|
142 |
+
),
|
143 |
+
4 =>
|
144 |
+
array (
|
145 |
+
0 =>
|
146 |
+
array (
|
147 |
+
330 => 0,
|
148 |
+
),
|
149 |
+
),
|
150 |
+
5 =>
|
151 |
+
array (
|
152 |
+
0 =>
|
153 |
+
array (
|
154 |
+
102 => 0,
|
155 |
+
),
|
156 |
+
),
|
157 |
+
6 =>
|
158 |
+
array (
|
159 |
+
0 =>
|
160 |
+
array (
|
161 |
+
1381 => 0,
|
162 |
+
1396 => 1,
|
163 |
+
1406 => 2,
|
164 |
+
),
|
165 |
+
),
|
166 |
+
7 =>
|
167 |
+
array (
|
168 |
+
0 =>
|
169 |
+
array (
|
170 |
+
115 => 0,
|
171 |
+
),
|
172 |
+
),
|
173 |
+
8 =>
|
174 |
+
array (
|
175 |
+
0 =>
|
176 |
+
array (
|
177 |
+
383 => 0,
|
178 |
+
),
|
179 |
+
),
|
180 |
+
9 =>
|
181 |
+
array (
|
182 |
+
0 =>
|
183 |
+
array (
|
184 |
+
33 => 0,
|
185 |
+
63 => 1,
|
186 |
+
70 => 2,
|
187 |
+
82 => 3,
|
188 |
+
83 => 4,
|
189 |
+
84 => 5,
|
190 |
+
97 => 6,
|
191 |
+
99 => 7,
|
192 |
+
),
|
193 |
+
),
|
194 |
+
10 =>
|
195 |
+
array (
|
196 |
+
0 =>
|
197 |
+
array (
|
198 |
+
1471 => 0,
|
199 |
+
),
|
200 |
+
),
|
201 |
+
11 =>
|
202 |
+
array (
|
203 |
+
0 =>
|
204 |
+
array (
|
205 |
+
1471 => 0,
|
206 |
+
),
|
207 |
+
),
|
208 |
+
12 =>
|
209 |
+
array (
|
210 |
+
0 =>
|
211 |
+
array (
|
212 |
+
910 => 0,
|
213 |
+
933 => 1,
|
214 |
+
939 => 2,
|
215 |
+
946 => 3,
|
216 |
+
952 => 4,
|
217 |
+
960 => 5,
|
218 |
+
966 => 6,
|
219 |
+
),
|
220 |
+
),
|
221 |
+
13 =>
|
222 |
+
array (
|
223 |
+
0 =>
|
224 |
+
array (
|
225 |
+
910 => 0,
|
226 |
+
933 => 1,
|
227 |
+
939 => 2,
|
228 |
+
946 => 3,
|
229 |
+
952 => 4,
|
230 |
+
960 => 5,
|
231 |
+
966 => 6,
|
232 |
+
),
|
233 |
+
),
|
234 |
+
14 =>
|
235 |
+
array (
|
236 |
+
0 =>
|
237 |
+
array (
|
238 |
+
73 => 0,
|
239 |
+
74 => 1,
|
240 |
+
97 => 2,
|
241 |
+
108 => 3,
|
242 |
+
330 => 4,
|
243 |
+
),
|
244 |
+
),
|
245 |
+
15 =>
|
246 |
+
array (
|
247 |
+
0 =>
|
248 |
+
array (
|
249 |
+
73 => 0,
|
250 |
+
74 => 1,
|
251 |
+
97 => 2,
|
252 |
+
108 => 3,
|
253 |
+
121 => 4,
|
254 |
+
330 => 5,
|
255 |
+
),
|
256 |
+
),
|
257 |
+
16 =>
|
258 |
+
array (
|
259 |
+
0 =>
|
260 |
+
array (
|
261 |
+
768 => 0,
|
262 |
+
769 => 1,
|
263 |
+
770 => 2,
|
264 |
+
771 => 3,
|
265 |
+
774 => 4,
|
266 |
+
775 => 5,
|
267 |
+
776 => 6,
|
268 |
+
778 => 7,
|
269 |
+
779 => 8,
|
270 |
+
780 => 9,
|
271 |
+
783 => 10,
|
272 |
+
785 => 11,
|
273 |
+
),
|
274 |
+
),
|
275 |
+
17 =>
|
276 |
+
array (
|
277 |
+
0 =>
|
278 |
+
array (
|
279 |
+
105 => 0,
|
280 |
+
106 => 1,
|
281 |
+
303 => 2,
|
282 |
+
585 => 3,
|
283 |
+
616 => 4,
|
284 |
+
669 => 5,
|
285 |
+
1011 => 6,
|
286 |
+
1110 => 7,
|
287 |
+
1112 => 8,
|
288 |
+
7725 => 9,
|
289 |
+
7883 => 10,
|
290 |
+
8520 => 11,
|
291 |
+
8521 => 12,
|
292 |
+
),
|
293 |
+
),
|
294 |
+
18 =>
|
295 |
+
array (
|
296 |
+
0 =>
|
297 |
+
array (
|
298 |
+
741 => 0,
|
299 |
+
742 => 1,
|
300 |
+
743 => 2,
|
301 |
+
744 => 3,
|
302 |
+
745 => 4,
|
303 |
+
),
|
304 |
+
),
|
305 |
+
19 =>
|
306 |
+
array (
|
307 |
+
0 =>
|
308 |
+
array (
|
309 |
+
741 => 0,
|
310 |
+
742 => 1,
|
311 |
+
743 => 2,
|
312 |
+
744 => 3,
|
313 |
+
745 => 4,
|
314 |
+
),
|
315 |
+
),
|
316 |
+
20 =>
|
317 |
+
array (
|
318 |
+
0 =>
|
319 |
+
array (
|
320 |
+
741 => 0,
|
321 |
+
742 => 1,
|
322 |
+
743 => 2,
|
323 |
+
744 => 3,
|
324 |
+
745 => 4,
|
325 |
+
),
|
326 |
+
),
|
327 |
+
21 =>
|
328 |
+
array (
|
329 |
+
0 =>
|
330 |
+
array (
|
331 |
+
741 => 0,
|
332 |
+
742 => 1,
|
333 |
+
743 => 2,
|
334 |
+
744 => 3,
|
335 |
+
745 => 4,
|
336 |
+
),
|
337 |
+
),
|
338 |
+
22 =>
|
339 |
+
array (
|
340 |
+
0 =>
|
341 |
+
array (
|
342 |
+
741 => 0,
|
343 |
+
742 => 1,
|
344 |
+
743 => 2,
|
345 |
+
744 => 3,
|
346 |
+
745 => 4,
|
347 |
+
),
|
348 |
+
),
|
349 |
+
23 =>
|
350 |
+
array (
|
351 |
+
0 =>
|
352 |
+
array (
|
353 |
+
741 => 0,
|
354 |
+
742 => 1,
|
355 |
+
743 => 2,
|
356 |
+
744 => 3,
|
357 |
+
745 => 4,
|
358 |
+
),
|
359 |
+
),
|
360 |
+
24 =>
|
361 |
+
array (
|
362 |
+
0 =>
|
363 |
+
array (
|
364 |
+
1506 => 0,
|
365 |
+
),
|
366 |
+
),
|
367 |
+
);
|
368 |
+
?>
|
lib/mpdf/ttfontdata/dejavusanscondensedBI.cw.dat
ADDED
Binary file
|
lib/mpdf/ttfontdata/dejavusanscondensedBI.gid.dat
ADDED
Binary file
|
lib/mpdf/ttfontdata/dejavusanscondensedBI.mtx.php
ADDED
@@ -0,0 +1,3671 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
$name='DejaVuSansCondensed-BoldOblique';
|
3 |
+
$type='TTF';
|
4 |
+
$desc=array (
|
5 |
+
'CapHeight' => 729,
|
6 |
+
'XHeight' => 547,
|
7 |
+
'FontBBox' => '[-960 -385 1799 1121]',
|
8 |
+
'Flags' => 262212,
|
9 |
+
'Ascent' => 928,
|
10 |
+
'Descent' => -236,
|
11 |
+
'Leading' => 0,
|
12 |
+
'ItalicAngle' => -11,
|
13 |
+
'StemV' => 165,
|
14 |
+
'MissingWidth' => 540,
|
15 |
+
);
|
16 |
+
$unitsPerEm=2048;
|
17 |
+
$up=-63;
|
18 |
+
$ut=44;
|
19 |
+
$strp=259;
|
20 |
+
$strs=50;
|
21 |
+
$ttffile='C:/wamp/www/wordpress/wp-content/plugins/woocommerce-pdf-invoices/lib/mpdf/ttfonts/DejaVuSansCondensed-BoldOblique.ttf';
|
22 |
+
$TTCfontID='0';
|
23 |
+
$originalsize=600936;
|
24 |
+
$sip=false;
|
25 |
+
$smp=false;
|
26 |
+
$BMPselected=true;
|
27 |
+
$fontkey='dejavusanscondensedBI';
|
28 |
+
$panose=' 0 0 2 b 8 6 3 3 4 b 2 4';
|
29 |
+
$haskerninfo=true;
|
30 |
+
$haskernGPOS=true;
|
31 |
+
$hassmallcapsGSUB=false;
|
32 |
+
$fontmetrics='win';
|
33 |
+
// TypoAscender/TypoDescender/TypoLineGap = 760, -240, 200
|
34 |
+
// usWinAscent/usWinDescent = 928, -236
|
35 |
+
// hhea Ascent/Descent/LineGap = 928, -236, 0
|
36 |
+
$useOTL=255;
|
37 |
+
$rtlPUAstr='\x{0EF00}-\x{0EF19}';
|
38 |
+
$GSUBScriptLang=array (
|
39 |
+
'DFLT' => 'DFLT ',
|
40 |
+
'arab' => 'DFLT KUR SND URD ',
|
41 |
+
'armn' => 'DFLT ',
|
42 |
+
'brai' => 'DFLT ',
|
43 |
+
'cans' => 'DFLT ',
|
44 |
+
'cher' => 'DFLT ',
|
45 |
+
'cyrl' => 'DFLT MKD SRB ',
|
46 |
+
'geor' => 'DFLT ',
|
47 |
+
'grek' => 'DFLT ',
|
48 |
+
'hani' => 'DFLT ',
|
49 |
+
'hebr' => 'DFLT ',
|
50 |
+
'kana' => 'DFLT ',
|
51 |
+
'lao ' => 'DFLT ',
|
52 |
+
'latn' => 'DFLT ISM KSM LSM MOL NSM ROM SKS SSM ',
|
53 |
+
'math' => 'DFLT ',
|
54 |
+
'nko ' => 'DFLT ',
|
55 |
+
'ogam' => 'DFLT ',
|
56 |
+
'runr' => 'DFLT ',
|
57 |
+
'tfng' => 'DFLT ',
|
58 |
+
'thai' => 'DFLT ',
|
59 |
+
);
|
60 |
+
$GSUBFeatures=array (
|
61 |
+
'DFLT' =>
|
62 |
+
array (
|
63 |
+
'DFLT' =>
|
64 |
+
array (
|
65 |
+
'ccmp' =>
|
66 |
+
array (
|
67 |
+
0 => 2,
|
68 |
+
),
|
69 |
+
'dlig' =>
|
70 |
+
array (
|
71 |
+
0 => 9,
|
72 |
+
),
|
73 |
+
),
|
74 |
+
),
|
75 |
+
'arab' =>
|
76 |
+
array (
|
77 |
+
'DFLT' =>
|
78 |
+
array (
|
79 |
+
'ccmp' =>
|
80 |
+
array (
|
81 |
+
0 => 0,
|
82 |
+
1 => 2,
|
83 |
+
),
|
84 |
+
),
|
85 |
+
'KUR ' =>
|
86 |
+
array (
|
87 |
+
'ccmp' =>
|
88 |
+
array (
|
89 |
+
0 => 2,
|
90 |
+
),
|
91 |
+
),
|
92 |
+
'SND ' =>
|
93 |
+
array (
|
94 |
+
'ccmp' =>
|
95 |
+
array (
|
96 |
+
0 => 2,
|
97 |
+
),
|
98 |
+
),
|
99 |
+
'URD ' =>
|
100 |
+
array (
|
101 |
+
'ccmp' =>
|
102 |
+
array (
|
103 |
+
0 => 2,
|
104 |
+
),
|
105 |
+
),
|
106 |
+
),
|
107 |
+
'armn' =>
|
108 |
+
array (
|
109 |
+
'DFLT' =>
|
110 |
+
array (
|
111 |
+
'ccmp' =>
|
112 |
+
array (
|
113 |
+
0 => 2,
|
114 |
+
),
|
115 |
+
'dlig' =>
|
116 |
+
array (
|
117 |
+
0 => 6,
|
118 |
+
),
|
119 |
+
),
|
120 |
+
),
|
121 |
+
'brai' =>
|
122 |
+
array (
|
123 |
+
'DFLT' =>
|
124 |
+
array (
|
125 |
+
'ccmp' =>
|
126 |
+
array (
|
127 |
+
0 => 2,
|
128 |
+
),
|
129 |
+
),
|
130 |
+
),
|
131 |
+
'cans' =>
|
132 |
+
array (
|
133 |
+
'DFLT' =>
|
134 |
+
array (
|
135 |
+
'ccmp' =>
|
136 |
+
array (
|
137 |
+
0 => 2,
|
138 |
+
),
|
139 |
+
),
|
140 |
+
),
|
141 |
+
'cher' =>
|
142 |
+
array (
|
143 |
+
'DFLT' =>
|
144 |
+
array (
|
145 |
+
'ccmp' =>
|
146 |
+
array (
|
147 |
+
0 => 2,
|
148 |
+
),
|
149 |
+
),
|
150 |
+
),
|
151 |
+
'cyrl' =>
|
152 |
+
array (
|
153 |
+
'DFLT' =>
|
154 |
+
array (
|
155 |
+
'ccmp' =>
|
156 |
+
array (
|
157 |
+
0 => 1,
|
158 |
+
1 => 2,
|
159 |
+
),
|
160 |
+
),
|
161 |
+
'MKD ' =>
|
162 |
+
array (
|
163 |
+
'ccmp' =>
|
164 |
+
array (
|
165 |
+
0 => 1,
|
166 |
+
1 => 2,
|
167 |
+
),
|
168 |
+
'locl' =>
|
169 |
+
array (
|
170 |
+
0 => 3,
|
171 |
+
),
|
172 |
+
),
|
173 |
+
'SRB ' =>
|
174 |
+
array (
|
175 |
+
'ccmp' =>
|
176 |
+
array (
|
177 |
+
0 => 1,
|
178 |
+
1 => 2,
|
179 |
+
),
|
180 |
+
'locl' =>
|
181 |
+
array (
|
182 |
+
0 => 3,
|
183 |
+
),
|
184 |
+
),
|
185 |
+
),
|
186 |
+
'geor' =>
|
187 |
+
array (
|
188 |
+
'DFLT' =>
|
189 |
+
array (
|
190 |
+
'ccmp' =>
|
191 |
+
array (
|
192 |
+
0 => 2,
|
193 |
+
),
|
194 |
+
),
|
195 |
+
),
|
196 |
+
'grek' =>
|
197 |
+
array (
|
198 |
+
'DFLT' =>
|
199 |
+
array (
|
200 |
+
'ccmp' =>
|
201 |
+
array (
|
202 |
+
0 => 1,
|
203 |
+
1 => 2,
|
204 |
+
),
|
205 |
+
'aalt' =>
|
206 |
+
array (
|
207 |
+
0 => 12,
|
208 |
+
),
|
209 |
+
'salt' =>
|
210 |
+
array (
|
211 |
+
0 => 13,
|
212 |
+
),
|
213 |
+
),
|
214 |
+
),
|
215 |
+
'hani' =>
|
216 |
+
array (
|
217 |
+
'DFLT' =>
|
218 |
+
array (
|
219 |
+
'ccmp' =>
|
220 |
+
array (
|
221 |
+
0 => 2,
|
222 |
+
),
|
223 |
+
),
|
224 |
+
),
|
225 |
+
'hebr' =>
|
226 |
+
array (
|
227 |
+
'DFLT' =>
|
228 |
+
array (
|
229 |
+
'ccmp' =>
|
230 |
+
array (
|
231 |
+
0 => 0,
|
232 |
+
1 => 2,
|
233 |
+
),
|
234 |
+
'aalt' =>
|
235 |
+
array (
|
236 |
+
0 => 10,
|
237 |
+
),
|
238 |
+
'salt' =>
|
239 |
+
array (
|
240 |
+
0 => 11,
|
241 |
+
),
|
242 |
+
),
|
243 |
+
),
|
244 |
+
'kana' =>
|
245 |
+
array (
|
246 |
+
'DFLT' =>
|
247 |
+
array (
|
248 |
+
'ccmp' =>
|
249 |
+
array (
|
250 |
+
0 => 2,
|
251 |
+
),
|
252 |
+
),
|
253 |
+
),
|
254 |
+
'lao ' =>
|
255 |
+
array (
|
256 |
+
'DFLT' =>
|
257 |
+
array (
|
258 |
+
'ccmp' =>
|
259 |
+
array (
|
260 |
+
0 => 2,
|
261 |
+
),
|
262 |
+
),
|
263 |
+
),
|
264 |
+
'latn' =>
|
265 |
+
array (
|
266 |
+
'DFLT' =>
|
267 |
+
array (
|
268 |
+
'ccmp' =>
|
269 |
+
array (
|
270 |
+
0 => 1,
|
271 |
+
1 => 2,
|
272 |
+
),
|
273 |
+
'liga' =>
|
274 |
+
array (
|
275 |
+
0 => 5,
|
276 |
+
),
|
277 |
+
'dlig' =>
|
278 |
+
array (
|
279 |
+
0 => 7,
|
280 |
+
),
|
281 |
+
'hlig' =>
|
282 |
+
array (
|
283 |
+
0 => 8,
|
284 |
+
),
|
285 |
+
'salt' =>
|
286 |
+
array (
|
287 |
+
0 => 14,
|
288 |
+
),
|
289 |
+
'aalt' =>
|
290 |
+
array (
|
291 |
+
0 => 15,
|
292 |
+
),
|
293 |
+
),
|
294 |
+
'ISM ' =>
|
295 |
+
array (
|
296 |
+
'ccmp' =>
|
297 |
+
array (
|
298 |
+
0 => 1,
|
299 |
+
1 => 2,
|
300 |
+
),
|
301 |
+
'locl' =>
|
302 |
+
array (
|
303 |
+
0 => 4,
|
304 |
+
),
|
305 |
+
'liga' =>
|
306 |
+
array (
|
307 |
+
0 => 5,
|
308 |
+
),
|
309 |
+
'dlig' =>
|
310 |
+
array (
|
311 |
+
0 => 7,
|
312 |
+
),
|
313 |
+
'hlig' =>
|
314 |
+
array (
|
315 |
+
0 => 8,
|
316 |
+
),
|
317 |
+
'salt' =>
|
318 |
+
array (
|
319 |
+
0 => 14,
|
320 |
+
),
|
321 |
+
'aalt' =>
|
322 |
+
array (
|
323 |
+
0 => 15,
|
324 |
+
),
|
325 |
+
),
|
326 |
+
'KSM ' =>
|
327 |
+
array (
|
328 |
+
'ccmp' =>
|
329 |
+
array (
|
330 |
+
0 => 1,
|
331 |
+
1 => 2,
|
332 |
+
),
|
333 |
+
'locl' =>
|
334 |
+
array (
|
335 |
+
0 => 4,
|
336 |
+
),
|
337 |
+
'liga' =>
|
338 |
+
array (
|
339 |
+
0 => 5,
|
340 |
+
),
|
341 |
+
'dlig' =>
|
342 |
+
array (
|
343 |
+
0 => 7,
|
344 |
+
),
|
345 |
+
'hlig' =>
|
346 |
+
array (
|
347 |
+
0 => 8,
|
348 |
+
),
|
349 |
+
'salt' =>
|
350 |
+
array (
|
351 |
+
0 => 14,
|
352 |
+
),
|
353 |
+
'aalt' =>
|
354 |
+
array (
|
355 |
+
0 => 15,
|
356 |
+
),
|
357 |
+
),
|
358 |
+
'LSM ' =>
|
359 |
+
array (
|
360 |
+
'ccmp' =>
|
361 |
+
array (
|
362 |
+
0 => 1,
|
363 |
+
1 => 2,
|
364 |
+
),
|
365 |
+
'locl' =>
|
366 |
+
array (
|
367 |
+
0 => 4,
|
368 |
+
),
|
369 |
+
'liga' =>
|
370 |
+
array (
|
371 |
+
0 => 5,
|
372 |
+
),
|
373 |
+
'dlig' =>
|
374 |
+
array (
|
375 |
+
0 => 7,
|
376 |
+
),
|
377 |
+
'hlig' =>
|
378 |
+
array (
|
379 |
+
0 => 8,
|
380 |
+
),
|
381 |
+
'salt' =>
|
382 |
+
array (
|
383 |
+
0 => 14,
|
384 |
+
),
|
385 |
+
'aalt' =>
|
386 |
+
array (
|
387 |
+
0 => 15,
|
388 |
+
),
|
389 |
+
),
|
390 |
+
'MOL ' =>
|
391 |
+
array (
|
392 |
+
'ccmp' =>
|
393 |
+
array (
|
394 |
+
0 => 1,
|
395 |
+
1 => 2,
|
396 |
+
),
|
397 |
+
'liga' =>
|
398 |
+
array (
|
399 |
+
0 => 5,
|
400 |
+
),
|
401 |
+
'dlig' =>
|
402 |
+
array (
|
403 |
+
0 => 7,
|
404 |
+
),
|
405 |
+
'hlig' =>
|
406 |
+
array (
|
407 |
+
0 => 8,
|
408 |
+
),
|
409 |
+
'salt' =>
|
410 |
+
array (
|
411 |
+
0 => 14,
|
412 |
+
),
|
413 |
+
'aalt' =>
|
414 |
+
array (
|
415 |
+
0 => 15,
|
416 |
+
),
|
417 |
+
),
|
418 |
+
'NSM ' =>
|
419 |
+
array (
|
420 |
+
'ccmp' =>
|
421 |
+
array (
|
422 |
+
0 => 1,
|
423 |
+
1 => 2,
|
424 |
+
),
|
425 |
+
'locl' =>
|
426 |
+
array (
|
427 |
+
0 => 4,
|
428 |
+
),
|
429 |
+
'liga' =>
|
430 |
+
array (
|
431 |
+
0 => 5,
|
432 |
+
),
|
433 |
+
'dlig' =>
|
434 |
+
array (
|
435 |
+
0 => 7,
|
436 |
+
),
|
437 |
+
'hlig' =>
|
438 |
+
array (
|
439 |
+
0 => 8,
|
440 |
+
),
|
441 |
+
'salt' =>
|
442 |
+
array (
|
443 |
+
0 => 14,
|
444 |
+
),
|
445 |
+
'aalt' =>
|
446 |
+
array (
|
447 |
+
0 => 15,
|
448 |
+
),
|
449 |
+
),
|
450 |
+
'ROM ' =>
|
451 |
+
array (
|
452 |
+
'ccmp' =>
|
453 |
+
array (
|
454 |
+
0 => 1,
|
455 |
+
1 => 2,
|
456 |
+
),
|
457 |
+
'liga' =>
|
458 |
+
array (
|
459 |
+
0 => 5,
|
460 |
+
),
|
461 |
+
'dlig' =>
|
462 |
+
array (
|
463 |
+
0 => 7,
|
464 |
+
),
|
465 |
+
'hlig' =>
|
466 |
+
array (
|
467 |
+
0 => 8,
|
468 |
+
),
|
469 |
+
'salt' =>
|
470 |
+
array (
|
471 |
+
0 => 14,
|
472 |
+
),
|
473 |
+
'aalt' =>
|
474 |
+
array (
|
475 |
+
0 => 15,
|
476 |
+
),
|
477 |
+
),
|
478 |
+
'SKS ' =>
|
479 |
+
array (
|
480 |
+
'ccmp' =>
|
481 |
+
array (
|
482 |
+
0 => 1,
|
483 |
+
1 => 2,
|
484 |
+
),
|
485 |
+
'locl' =>
|
486 |
+
array (
|
487 |
+
0 => 4,
|
488 |
+
),
|
489 |
+
'liga' =>
|
490 |
+
array (
|
491 |
+
0 => 5,
|
492 |
+
),
|
493 |
+
'dlig' =>
|
494 |
+
array (
|
495 |
+
0 => 7,
|
496 |
+
),
|
497 |
+
'hlig' =>
|
498 |
+
array (
|
499 |
+
0 => 8,
|
500 |
+
),
|
501 |
+
'salt' =>
|
502 |
+
array (
|
503 |
+
0 => 14,
|
504 |
+
),
|
505 |
+
'aalt' =>
|
506 |
+
array (
|
507 |
+
0 => 15,
|
508 |
+
),
|
509 |
+
),
|
510 |
+
'SSM ' =>
|
511 |
+
array (
|
512 |
+
'ccmp' =>
|
513 |
+
array (
|
514 |
+
0 => 1,
|
515 |
+
1 => 2,
|
516 |
+
),
|
517 |
+
'locl' =>
|
518 |
+
array (
|
519 |
+
0 => 4,
|
520 |
+
),
|
521 |
+
'liga' =>
|
522 |
+
array (
|
523 |
+
0 => 5,
|
524 |
+
),
|
525 |
+
'dlig' =>
|
526 |
+
array (
|
527 |
+
0 => 7,
|
528 |
+
),
|
529 |
+
'hlig' =>
|
530 |
+
array (
|
531 |
+
0 => 8,
|
532 |
+
),
|
533 |
+
'salt' =>
|
534 |
+
array (
|
535 |
+
0 => 14,
|
536 |
+
),
|
537 |
+
'aalt' =>
|
538 |
+
array (
|
539 |
+
0 => 15,
|
540 |
+
),
|
541 |
+
),
|
542 |
+
),
|
543 |
+
'math' =>
|
544 |
+
array (
|
545 |
+
'DFLT' =>
|
546 |
+
array (
|
547 |
+
'ccmp' =>
|
548 |
+
array (
|
549 |
+
0 => 2,
|
550 |
+
),
|
551 |
+
),
|
552 |
+
),
|
553 |
+
'nko ' =>
|
554 |
+
array (
|
555 |
+
'DFLT' =>
|
556 |
+
array (
|
557 |
+
'ccmp' =>
|
558 |
+
array (
|
559 |
+
0 => 0,
|
560 |
+
1 => 2,
|
561 |
+
),
|
562 |
+
),
|
563 |
+
),
|
564 |
+
'ogam' =>
|
565 |
+
array (
|
566 |
+
'DFLT' =>
|
567 |
+
array (
|
568 |
+
'ccmp' =>
|
569 |
+
array (
|
570 |
+
0 => 2,
|
571 |
+
),
|
572 |
+
),
|
573 |
+
),
|
574 |
+
'runr' =>
|
575 |
+
array (
|
576 |
+
'DFLT' =>
|
577 |
+
array (
|
578 |
+
'ccmp' =>
|
579 |
+
array (
|
580 |
+
0 => 2,
|
581 |
+
),
|
582 |
+
),
|
583 |
+
),
|
584 |
+
'tfng' =>
|
585 |
+
array (
|
586 |
+
'DFLT' =>
|
587 |
+
array (
|
588 |
+
'ccmp' =>
|
589 |
+
array (
|
590 |
+
0 => 2,
|
591 |
+
),
|
592 |
+
),
|
593 |
+
),
|
594 |
+
'thai' =>
|
595 |
+
array (
|
596 |
+
'DFLT' =>
|
597 |
+
array (
|
598 |
+
'ccmp' =>
|
599 |
+
array (
|
600 |
+
0 => 2,
|
601 |
+
),
|
602 |
+
),
|
603 |
+
),
|
604 |
+
);
|
605 |
+
$GSUBLookups=array (
|
606 |
+
0 =>
|
607 |
+
array (
|
608 |
+
'Type' => 6,
|
609 |
+
'Flag' => 1,
|
610 |
+
'SubtableCount' => 1,
|
611 |
+
'Subtables' =>
|
612 |
+
array (
|
613 |
+
0 => 23770,
|
614 |
+
),
|
615 |
+
'MarkFilteringSet' => '',
|
616 |
+
),
|
617 |
+
1 =>
|
618 |
+
array (
|
619 |
+
'Type' => 6,
|
620 |
+
'Flag' => 0,
|
621 |
+
'SubtableCount' => 1,
|
622 |
+
'Subtables' =>
|
623 |
+
array (
|
624 |
+
0 => 23850,
|
625 |
+
),
|
626 |
+
'MarkFilteringSet' => '',
|
627 |
+
),
|
628 |
+
2 =>
|
629 |
+
array (
|
630 |
+
'Type' => 6,
|
631 |
+
'Flag' => 0,
|
632 |
+
'SubtableCount' => 10,
|
633 |
+
'Subtables' =>
|
634 |
+
array (
|
635 |
+
0 => 24730,
|
636 |
+
1 => 24818,
|
637 |
+
2 => 24906,
|
638 |
+
3 => 24994,
|
639 |
+
4 => 25082,
|
640 |
+
5 => 25170,
|
641 |
+
6 => 25236,
|
642 |
+
7 => 25308,
|
643 |
+
8 => 25380,
|
644 |
+
9 => 25452,
|
645 |
+
),
|
646 |
+
'MarkFilteringSet' => '',
|
647 |
+
),
|
648 |
+
3 =>
|
649 |
+
array (
|
650 |
+
'Type' => 1,
|
651 |
+
'Flag' => 0,
|
652 |
+
'SubtableCount' => 1,
|
653 |
+
'Subtables' =>
|
654 |
+
array (
|
655 |
+
0 => 25518,
|
656 |
+
),
|
657 |
+
'MarkFilteringSet' => '',
|
658 |
+
),
|
659 |
+
4 =>
|
660 |
+
array (
|
661 |
+
'Type' => 1,
|
662 |
+
'Flag' => 0,
|
663 |
+
'SubtableCount' => 1,
|
664 |
+
'Subtables' =>
|
665 |
+
array (
|
666 |
+
0 => 25530,
|
667 |
+
),
|
668 |
+
'MarkFilteringSet' => '',
|
669 |
+
),
|
670 |
+
5 =>
|
671 |
+
array (
|
672 |
+
'Type' => 4,
|
673 |
+
'Flag' => 0,
|
674 |
+
'SubtableCount' => 1,
|
675 |
+
'Subtables' =>
|
676 |
+
array (
|
677 |
+
0 => 25542,
|
678 |
+
),
|
679 |
+
'MarkFilteringSet' => '',
|
680 |
+
),
|
681 |
+
6 =>
|
682 |
+
array (
|
683 |
+
'Type' => 4,
|
684 |
+
'Flag' => 0,
|
685 |
+
'SubtableCount' => 1,
|
686 |
+
'Subtables' =>
|
687 |
+
array (
|
688 |
+
0 => 25602,
|
689 |
+
),
|
690 |
+
'MarkFilteringSet' => '',
|
691 |
+
),
|
692 |
+
7 =>
|
693 |
+
array (
|
694 |
+
'Type' => 4,
|
695 |
+
'Flag' => 0,
|
696 |
+
'SubtableCount' => 1,
|
697 |
+
'Subtables' =>
|
698 |
+
array (
|
699 |
+
0 => 25678,
|
700 |
+
),
|
701 |
+
'MarkFilteringSet' => '',
|
702 |
+
),
|
703 |
+
8 =>
|
704 |
+
array (
|
705 |
+
'Type' => 4,
|
706 |
+
'Flag' => 0,
|
707 |
+
'SubtableCount' => 1,
|
708 |
+
'Subtables' =>
|
709 |
+
array (
|
710 |
+
0 => 25702,
|
711 |
+
),
|
712 |
+
'MarkFilteringSet' => '',
|
713 |
+
),
|
714 |
+
9 =>
|
715 |
+
array (
|
716 |
+
'Type' => 4,
|
717 |
+
'Flag' => 0,
|
718 |
+
'SubtableCount' => 1,
|
719 |
+
'Subtables' =>
|
720 |
+
array (
|
721 |
+
0 => 25726,
|
722 |
+
),
|
723 |
+
'MarkFilteringSet' => '',
|
724 |
+
),
|
725 |
+
10 =>
|
726 |
+
array (
|
727 |
+
'Type' => 1,
|
728 |
+
'Flag' => 1,
|
729 |
+
'SubtableCount' => 1,
|
730 |
+
'Subtables' =>
|
731 |
+
array (
|
732 |
+
0 => 25882,
|
733 |
+
),
|
734 |
+
'MarkFilteringSet' => '',
|
735 |
+
),
|
736 |
+
11 =>
|
737 |
+
array (
|
738 |
+
'Type' => 1,
|
739 |
+
'Flag' => 1,
|
740 |
+
'SubtableCount' => 1,
|
741 |
+
'Subtables' =>
|
742 |
+
array (
|
743 |
+
0 => 25894,
|
744 |
+
),
|
745 |
+
'MarkFilteringSet' => '',
|
746 |
+
),
|
747 |
+
12 =>
|
748 |
+
array (
|
749 |
+
'Type' => 1,
|
750 |
+
'Flag' => 0,
|
751 |
+
'SubtableCount' => 1,
|
752 |
+
'Subtables' =>
|
753 |
+
array (
|
754 |
+
0 => 25906,
|
755 |
+
),
|
756 |
+
'MarkFilteringSet' => '',
|
757 |
+
),
|
758 |
+
13 =>
|
759 |
+
array (
|
760 |
+
'Type' => 1,
|
761 |
+
'Flag' => 0,
|
762 |
+
'SubtableCount' => 1,
|
763 |
+
'Subtables' =>
|
764 |
+
array (
|
765 |
+
0 => 25944,
|
766 |
+
),
|
767 |
+
'MarkFilteringSet' => '',
|
768 |
+
),
|
769 |
+
14 =>
|
770 |
+
array (
|
771 |
+
'Type' => 1,
|
772 |
+
'Flag' => 0,
|
773 |
+
'SubtableCount' => 1,
|
774 |
+
'Subtables' =>
|
775 |
+
array (
|
776 |
+
0 => 25982,
|
777 |
+
),
|
778 |
+
'MarkFilteringSet' => '',
|
779 |
+
),
|
780 |
+
15 =>
|
781 |
+
array (
|
782 |
+
'Type' => 3,
|
783 |
+
'Flag' => 0,
|
784 |
+
'SubtableCount' => 1,
|
785 |
+
'Subtables' =>
|
786 |
+
array (
|
787 |
+
0 => 26012,
|
788 |
+
),
|
789 |
+
'MarkFilteringSet' => '',
|
790 |
+
),
|
791 |
+
16 =>
|
792 |
+
array (
|
793 |
+
'Type' => 1,
|
794 |
+
'Flag' => 0,
|
795 |
+
'SubtableCount' => 1,
|
796 |
+
'Subtables' =>
|
797 |
+
array (
|
798 |
+
0 => 26070,
|
799 |
+
),
|
800 |
+
'MarkFilteringSet' => '',
|
801 |
+
),
|
802 |
+
17 =>
|
803 |
+
array (
|
804 |
+
'Type' => 1,
|
805 |
+
'Flag' => 0,
|
806 |
+
'SubtableCount' => 1,
|
807 |
+
'Subtables' =>
|
808 |
+
array (
|
809 |
+
0 => 26128,
|
810 |
+
),
|
811 |
+
'MarkFilteringSet' => '',
|
812 |
+
),
|
813 |
+
18 =>
|
814 |
+
array (
|
815 |
+
'Type' => 1,
|
816 |
+
'Flag' => 0,
|
817 |
+
'SubtableCount' => 1,
|
818 |
+
'Subtables' =>
|
819 |
+
array (
|
820 |
+
0 => 26190,
|
821 |
+
),
|
822 |
+
'MarkFilteringSet' => '',
|
823 |
+
),
|
824 |
+
19 =>
|
825 |
+
array (
|
826 |
+
'Type' => 1,
|
827 |
+
'Flag' => 0,
|
828 |
+
'SubtableCount' => 1,
|
829 |
+
'Subtables' =>
|
830 |
+
array (
|
831 |
+
0 => 26206,
|
832 |
+
),
|
833 |
+
'MarkFilteringSet' => '',
|
834 |
+
),
|
835 |
+
20 =>
|
836 |
+
array (
|
837 |
+
'Type' => 1,
|
838 |
+
'Flag' => 0,
|
839 |
+
'SubtableCount' => 1,
|
840 |
+
'Subtables' =>
|
841 |
+
array (
|
842 |
+
0 => 26222,
|
843 |
+
),
|
844 |
+
'MarkFilteringSet' => '',
|
845 |
+
),
|
846 |
+
21 =>
|
847 |
+
array (
|
848 |
+
'Type' => 1,
|
849 |
+
'Flag' => 0,
|
850 |
+
'SubtableCount' => 1,
|
851 |
+
'Subtables' =>
|
852 |
+
array (
|
853 |
+
0 => 26238,
|
854 |
+
),
|
855 |
+
'MarkFilteringSet' => '',
|
856 |
+
),
|
857 |
+
22 =>
|
858 |
+
array (
|
859 |
+
'Type' => 1,
|
860 |
+
'Flag' => 0,
|
861 |
+
'SubtableCount' => 1,
|
862 |
+
'Subtables' =>
|
863 |
+
array (
|
864 |
+
0 => 26254,
|
865 |
+
),
|
866 |
+
'MarkFilteringSet' => '',
|
867 |
+
),
|
868 |
+
23 =>
|
869 |
+
array (
|
870 |
+
'Type' => 1,
|
871 |
+
'Flag' => 0,
|
872 |
+
'SubtableCount' => 1,
|
873 |
+
'Subtables' =>
|
874 |
+
array (
|
875 |
+
0 => 26270,
|
876 |
+
),
|
877 |
+
'MarkFilteringSet' => '',
|
878 |
+
),
|
879 |
+
24 =>
|
880 |
+
array (
|
881 |
+
'Type' => 1,
|
882 |
+
'Flag' => 1,
|
883 |
+
'SubtableCount' => 1,
|
884 |
+
'Subtables' =>
|
885 |
+
array (
|
886 |
+
0 => 26296,
|
887 |
+
),
|
888 |
+
'MarkFilteringSet' => '',
|
889 |
+
),
|
890 |
+
);
|
891 |
+
$GPOSScriptLang=array (
|
892 |
+
'DFLT' => 'DFLT ',
|
893 |
+
'arab' => 'DFLT ',
|
894 |
+
'armn' => 'DFLT ',
|
895 |
+
'brai' => 'DFLT ',
|
896 |
+
'cans' => 'DFLT ',
|
897 |
+
'cher' => 'DFLT ',
|
898 |
+
'cyrl' => 'DFLT MKD SRB ',
|
899 |
+
'geor' => 'DFLT ',
|
900 |
+
'grek' => 'DFLT ',
|
901 |
+
'hani' => 'DFLT ',
|
902 |
+
'hebr' => 'DFLT ',
|
903 |
+
'kana' => 'DFLT ',
|
904 |
+
'lao ' => 'DFLT ',
|
905 |
+
'latn' => 'DFLT ISM KSM LSM MOL NSM ROM SKS SSM ',
|
906 |
+
'math' => 'DFLT ',
|
907 |
+
'nko ' => 'DFLT ',
|
908 |
+
'ogam' => 'DFLT ',
|
909 |
+
'runr' => 'DFLT ',
|
910 |
+
'tfng' => 'DFLT ',
|
911 |
+
'thai' => 'DFLT ',
|
912 |
+
);
|
913 |
+
$GPOSFeatures=array (
|
914 |
+
'DFLT' =>
|
915 |
+
array (
|
916 |
+
'DFLT' =>
|
917 |
+
array (
|
918 |
+
'kern' =>
|
919 |
+
array (
|
920 |
+
0 => 10,
|
921 |
+
),
|
922 |
+
),
|
923 |
+
),
|
924 |
+
'arab' =>
|
925 |
+
array (
|
926 |
+
'DFLT' =>
|
927 |
+
array (
|
928 |
+
'mark' =>
|
929 |
+
array (
|
930 |
+
0 => 3,
|
931 |
+
1 => 4,
|
932 |
+
2 => 5,
|
933 |
+
),
|
934 |
+
),
|
935 |
+
),
|
936 |
+
'armn' =>
|
937 |
+
array (
|
938 |
+
'DFLT' =>
|
939 |
+
array (
|
940 |
+
'kern' =>
|
941 |
+
array (
|
942 |
+
0 => 10,
|
943 |
+
),
|
944 |
+
),
|
945 |
+
),
|
946 |
+
'brai' =>
|
947 |
+
array (
|
948 |
+
'DFLT' =>
|
949 |
+
array (
|
950 |
+
'kern' =>
|
951 |
+
array (
|
952 |
+
0 => 10,
|
953 |
+
),
|
954 |
+
),
|
955 |
+
),
|
956 |
+
'cans' =>
|
957 |
+
array (
|
958 |
+
'DFLT' =>
|
959 |
+
array (
|
960 |
+
'kern' =>
|
961 |
+
array (
|
962 |
+
0 => 10,
|
963 |
+
),
|
964 |
+
),
|
965 |
+
),
|
966 |
+
'cher' =>
|
967 |
+
array (
|
968 |
+
'DFLT' =>
|
969 |
+
array (
|
970 |
+
'kern' =>
|
971 |
+
array (
|
972 |
+
0 => 10,
|
973 |
+
),
|
974 |
+
),
|
975 |
+
),
|
976 |
+
'cyrl' =>
|
977 |
+
array (
|
978 |
+
'DFLT' =>
|
979 |
+
array (
|
980 |
+
'mkmk' =>
|
981 |
+
array (
|
982 |
+
0 => 2,
|
983 |
+
),
|
984 |
+
'mark' =>
|
985 |
+
array (
|
986 |
+
0 => 8,
|
987 |
+
),
|
988 |
+
'kern' =>
|
989 |
+
array (
|
990 |
+
0 => 10,
|
991 |
+
),
|
992 |
+
),
|
993 |
+
'MKD ' =>
|
994 |
+
array (
|
995 |
+
'mkmk' =>
|
996 |
+
array (
|
997 |
+
0 => 2,
|
998 |
+
),
|
999 |
+
'mark' =>
|
1000 |
+
array (
|
1001 |
+
0 => 8,
|
1002 |
+
),
|
1003 |
+
'kern' =>
|
1004 |
+
array (
|
1005 |
+
0 => 10,
|
1006 |
+
),
|
1007 |
+
),
|
1008 |
+
'SRB ' =>
|
1009 |
+
array (
|
1010 |
+
'mkmk' =>
|
1011 |
+
array (
|
1012 |
+
0 => 2,
|
1013 |
+
),
|
1014 |
+
'mark' =>
|
1015 |
+
array (
|
1016 |
+
0 => 8,
|
1017 |
+
),
|
1018 |
+
'kern' =>
|
1019 |
+
array (
|
1020 |
+
0 => 10,
|
1021 |
+
),
|
1022 |
+
),
|
1023 |
+
),
|
1024 |
+
'geor' =>
|
1025 |
+
array (
|
1026 |
+
'DFLT' =>
|
1027 |
+
array (
|
1028 |
+
'kern' =>
|
1029 |
+
array (
|
1030 |
+
0 => 10,
|
1031 |
+
),
|
1032 |
+
),
|
1033 |
+
),
|
1034 |
+
'grek' =>
|
1035 |
+
array (
|
1036 |
+
'DFLT' =>
|
1037 |
+
array (
|
1038 |
+
'mkmk' =>
|
1039 |
+
array (
|
1040 |
+
0 => 2,
|
1041 |
+
),
|
1042 |
+
'mark' =>
|
1043 |
+
array (
|
1044 |
+
0 => 8,
|
1045 |
+
),
|
1046 |
+
'kern' =>
|
1047 |
+
array (
|
1048 |
+
0 => 10,
|
1049 |
+
),
|
1050 |
+
),
|
1051 |
+
),
|
1052 |
+
'hani' =>
|
1053 |
+
array (
|
1054 |
+
'DFLT' =>
|
1055 |
+
array (
|
1056 |
+
'kern' =>
|
1057 |
+
array (
|
1058 |
+
0 => 10,
|
1059 |
+
),
|
1060 |
+
),
|
1061 |
+
),
|
1062 |
+
'hebr' =>
|
1063 |
+
array (
|
1064 |
+
'DFLT' =>
|
1065 |
+
array (
|
1066 |
+
'mark' =>
|
1067 |
+
array (
|
1068 |
+
0 => 3,
|
1069 |
+
1 => 4,
|
1070 |
+
2 => 5,
|
1071 |
+
),
|
1072 |
+
'kern' =>
|
1073 |
+
array (
|
1074 |
+
0 => 10,
|
1075 |
+
),
|
1076 |
+
),
|
1077 |
+
),
|
1078 |
+
'lao ' =>
|
1079 |
+
array (
|
1080 |
+
'DFLT' =>
|
1081 |
+
array (
|
1082 |
+
'mkmk' =>
|
1083 |
+
array (
|
1084 |
+
0 => 0,
|
1085 |
+
1 => 1,
|
1086 |
+
),
|
1087 |
+
'mark' =>
|
1088 |
+
array (
|
1089 |
+
0 => 6,
|
1090 |
+
1 => 7,
|
1091 |
+
),
|
1092 |
+
'kern' =>
|
1093 |
+
array (
|
1094 |
+
0 => 10,
|
1095 |
+
),
|
1096 |
+
),
|
1097 |
+
),
|
1098 |
+
'latn' =>
|
1099 |
+
array (
|
1100 |
+
'DFLT' =>
|
1101 |
+
array (
|
1102 |
+
'mkmk' =>
|
1103 |
+
array (
|
1104 |
+
0 => 2,
|
1105 |
+
),
|
1106 |
+
'mark' =>
|
1107 |
+
array (
|
1108 |
+
0 => 8,
|
1109 |
+
),
|
1110 |
+
'kern' =>
|
1111 |
+
array (
|
1112 |
+
0 => 9,
|
1113 |
+
1 => 10,
|
1114 |
+
),
|
1115 |
+
),
|
1116 |
+
'ISM ' =>
|
1117 |
+
array (
|
1118 |
+
'mkmk' =>
|
1119 |
+
array (
|
1120 |
+
0 => 2,
|
1121 |
+
),
|
1122 |
+
'mark' =>
|
1123 |
+
array (
|
1124 |
+
0 => 8,
|
1125 |
+
),
|
1126 |
+
'kern' =>
|
1127 |
+
array (
|
1128 |
+
0 => 9,
|
1129 |
+
1 => 10,
|
1130 |
+
),
|
1131 |
+
),
|
1132 |
+
'KSM ' =>
|
1133 |
+
array (
|
1134 |
+
'mkmk' =>
|
1135 |
+
array (
|
1136 |
+
0 => 2,
|
1137 |
+
),
|
1138 |
+
'mark' =>
|
1139 |
+
array (
|
1140 |
+
0 => 8,
|
1141 |
+
),
|
1142 |
+
'kern' =>
|
1143 |
+
array (
|
1144 |
+
0 => 9,
|
1145 |
+
1 => 10,
|
1146 |
+
),
|
1147 |
+
),
|
1148 |
+
'LSM ' =>
|
1149 |
+
array (
|
1150 |
+
'mkmk' =>
|
1151 |
+
array (
|
1152 |
+
0 => 2,
|
1153 |
+
),
|
1154 |
+
'mark' =>
|
1155 |
+
array (
|
1156 |
+
0 => 8,
|
1157 |
+
),
|
1158 |
+
'kern' =>
|
1159 |
+
array (
|
1160 |
+
0 => 9,
|
1161 |
+
1 => 10,
|
1162 |
+
),
|
1163 |
+
),
|
1164 |
+
'MOL ' =>
|
1165 |
+
array (
|
1166 |
+
'mkmk' =>
|
1167 |
+
array (
|
1168 |
+
0 => 2,
|
1169 |
+
),
|
1170 |
+
'mark' =>
|
1171 |
+
array (
|
1172 |
+
0 => 8,
|
1173 |
+
),
|
1174 |
+
'kern' =>
|
1175 |
+
array (
|
1176 |
+
0 => 9,
|
1177 |
+
1 => 10,
|
1178 |
+
),
|
1179 |
+
),
|
1180 |
+
'NSM ' =>
|
1181 |
+
array (
|
1182 |
+
'mkmk' =>
|
1183 |
+
array (
|
1184 |
+
0 => 2,
|
1185 |
+
),
|
1186 |
+
'mark' =>
|
1187 |
+
array (
|
1188 |
+
0 => 8,
|
1189 |
+
),
|
1190 |
+
'kern' =>
|
1191 |
+
array (
|
1192 |
+
0 => 9,
|
1193 |
+
1 => 10,
|
1194 |
+
),
|
1195 |
+
),
|
1196 |
+
'ROM ' =>
|
1197 |
+
array (
|
1198 |
+
'mkmk' =>
|
1199 |
+
array (
|
1200 |
+
0 => 2,
|
1201 |
+
),
|
1202 |
+
'mark' =>
|
1203 |
+
array (
|
1204 |
+
0 => 8,
|
1205 |
+
),
|
1206 |
+
'kern' =>
|
1207 |
+
array (
|
1208 |
+
0 => 9,
|
1209 |
+
1 => 10,
|
1210 |
+
),
|
1211 |
+
),
|
1212 |
+
'SKS ' =>
|
1213 |
+
array (
|
1214 |
+
'mkmk' =>
|
1215 |
+
array (
|
1216 |
+
0 => 2,
|
1217 |
+
),
|
1218 |
+
'mark' =>
|
1219 |
+
array (
|
1220 |
+
0 => 8,
|
1221 |
+
),
|
1222 |
+
'kern' =>
|
1223 |
+
array (
|
1224 |
+
0 => 9,
|
1225 |
+
1 => 10,
|
1226 |
+
),
|
1227 |
+
),
|
1228 |
+
'SSM ' =>
|
1229 |
+
array (
|
1230 |
+
'mkmk' =>
|
1231 |
+
array (
|
1232 |
+
0 => 2,
|
1233 |
+
),
|
1234 |
+
'mark' =>
|
1235 |
+
array (
|
1236 |
+
0 => 8,
|
1237 |
+
),
|
1238 |
+
'kern' =>
|
1239 |
+
array (
|
1240 |
+
0 => 9,
|
1241 |
+
1 => 10,
|
1242 |
+
),
|
1243 |
+
),
|
1244 |
+
),
|
1245 |
+
'math' =>
|
1246 |
+
array (
|
1247 |
+
'DFLT' =>
|
1248 |
+
array (
|
1249 |
+
'kern' =>
|
1250 |
+
array (
|
1251 |
+
0 => 10,
|
1252 |
+
),
|
1253 |
+
),
|
1254 |
+
),
|
1255 |
+
'nko ' =>
|
1256 |
+
array (
|
1257 |
+
'DFLT' =>
|
1258 |
+
array (
|
1259 |
+
'mark' =>
|
1260 |
+
array (
|
1261 |
+
0 => 3,
|
1262 |
+
1 => 4,
|
1263 |
+
2 => 5,
|
1264 |
+
),
|
1265 |
+
'kern' =>
|
1266 |
+
array (
|
1267 |
+
0 => 10,
|
1268 |
+
),
|
1269 |
+
),
|
1270 |
+
),
|
1271 |
+
'runr' =>
|
1272 |
+
array (
|
1273 |
+
'DFLT' =>
|
1274 |
+
array (
|
1275 |
+
'kern' =>
|
1276 |
+
array (
|
1277 |
+
0 => 10,
|
1278 |
+
),
|
1279 |
+
),
|
1280 |
+
),
|
1281 |
+
'thai' =>
|
1282 |
+
array (
|
1283 |
+
'DFLT' =>
|
1284 |
+
array (
|
1285 |
+
'kern' =>
|
1286 |
+
array (
|
1287 |
+
0 => 10,
|
1288 |
+
),
|
1289 |
+
),
|
1290 |
+
),
|
1291 |
+
);
|
1292 |
+
$GPOSLookups=array (
|
1293 |
+
0 =>
|
1294 |
+
array (
|
1295 |
+
'Type' => 6,
|
1296 |
+
'Flag' => 0,
|
1297 |
+
'SubtableCount' => 1,
|
1298 |
+
'Subtables' =>
|
1299 |
+
array (
|
1300 |
+
0 => 1454,
|
1301 |
+
),
|
1302 |
+
'MarkFilteringSet' => '',
|
1303 |
+
),
|
1304 |
+
1 =>
|
1305 |
+
array (
|
1306 |
+
'Type' => 6,
|
1307 |
+
'Flag' => 0,
|
1308 |
+
'SubtableCount' => 1,
|
1309 |
+
'Subtables' =>
|
1310 |
+
array (
|
1311 |
+
0 => 1512,
|
1312 |
+
),
|
1313 |
+
'MarkFilteringSet' => '',
|
1314 |
+
),
|
1315 |
+
2 =>
|
1316 |
+
array (
|
1317 |
+
'Type' => 6,
|
1318 |
+
'Flag' => 0,
|
1319 |
+
'SubtableCount' => 2,
|
1320 |
+
'Subtables' =>
|
1321 |
+
array (
|
1322 |
+
0 => 1662,
|
1323 |
+
1 => 2068,
|
1324 |
+
),
|
1325 |
+
'MarkFilteringSet' => '',
|
1326 |
+
),
|
1327 |
+
3 =>
|
1328 |
+
array (
|
1329 |
+
'Type' => 4,
|
1330 |
+
'Flag' => 1,
|
1331 |
+
'SubtableCount' => 1,
|
1332 |
+
'Subtables' =>
|
1333 |
+
array (
|
1334 |
+
0 => 3274,
|
1335 |
+
),
|
1336 |
+
'MarkFilteringSet' => '',
|
1337 |
+
),
|
1338 |
+
4 =>
|
1339 |
+
array (
|
1340 |
+
'Type' => 4,
|
1341 |
+
'Flag' => 1,
|
1342 |
+
'SubtableCount' => 1,
|
1343 |
+
'Subtables' =>
|
1344 |
+
array (
|
1345 |
+
0 => 3538,
|
1346 |
+
),
|
1347 |
+
'MarkFilteringSet' => '',
|
1348 |
+
),
|
1349 |
+
5 =>
|
1350 |
+
array (
|
1351 |
+
'Type' => 4,
|
1352 |
+
'Flag' => 1,
|
1353 |
+
'SubtableCount' => 1,
|
1354 |
+
'Subtables' =>
|
1355 |
+
array (
|
1356 |
+
0 => 3956,
|
1357 |
+
),
|
1358 |
+
'MarkFilteringSet' => '',
|
1359 |
+
),
|
1360 |
+
6 =>
|
1361 |
+
array (
|
1362 |
+
'Type' => 4,
|
1363 |
+
'Flag' => 0,
|
1364 |
+
'SubtableCount' => 1,
|
1365 |
+
'Subtables' =>
|
1366 |
+
array (
|
1367 |
+
0 => 4034,
|
1368 |
+
),
|
1369 |
+
'MarkFilteringSet' => '',
|
1370 |
+
),
|
1371 |
+
7 =>
|
1372 |
+
array (
|
1373 |
+
'Type' => 4,
|
1374 |
+
'Flag' => 0,
|
1375 |
+
'SubtableCount' => 1,
|
1376 |
+
'Subtables' =>
|
1377 |
+
array (
|
1378 |
+
0 => 4350,
|
1379 |
+
),
|
1380 |
+
'MarkFilteringSet' => '',
|
1381 |
+
),
|
1382 |
+
8 =>
|
1383 |
+
array (
|
1384 |
+
'Type' => 4,
|
1385 |
+
'Flag' => 0,
|
1386 |
+
'SubtableCount' => 6,
|
1387 |
+
'Subtables' =>
|
1388 |
+
array (
|
1389 |
+
0 => 4776,
|
1390 |
+
1 => 6230,
|
1391 |
+
2 => 6556,
|
1392 |
+
3 => 6704,
|
1393 |
+
4 => 7140,
|
1394 |
+
5 => 11266,
|
1395 |
+
),
|
1396 |
+
'MarkFilteringSet' => '',
|
1397 |
+
),
|
1398 |
+
9 =>
|
1399 |
+
array (
|
1400 |
+
'Type' => 2,
|
1401 |
+
'Flag' => 0,
|
1402 |
+
'SubtableCount' => 1,
|
1403 |
+
'Subtables' =>
|
1404 |
+
array (
|
1405 |
+
0 => 17480,
|
1406 |
+
),
|
1407 |
+
'MarkFilteringSet' => '',
|
1408 |
+
),
|
1409 |
+
10 =>
|
1410 |
+
array (
|
1411 |
+
'Type' => 2,
|
1412 |
+
'Flag' => 0,
|
1413 |
+
'SubtableCount' => 1,
|
1414 |
+
'Subtables' =>
|
1415 |
+
array (
|
1416 |
+
0 => 22668,
|
1417 |
+
),
|
1418 |
+
'MarkFilteringSet' => '',
|
1419 |
+
),
|
1420 |
+
);
|
1421 |
+
$kerninfo=array (
|
1422 |
+
45 =>
|
1423 |
+
array (
|
1424 |
+
84 => -146,
|
1425 |
+
86 => -72,
|
1426 |
+
87 => -44,
|
1427 |
+
88 => -100,
|
1428 |
+
89 => -165,
|
1429 |
+
221 => -165,
|
1430 |
+
356 => -146,
|
1431 |
+
376 => -165,
|
1432 |
+
),
|
1433 |
+
65 =>
|
1434 |
+
array (
|
1435 |
+
44 => 18,
|
1436 |
+
46 => 18,
|
1437 |
+
58 => 18,
|
1438 |
+
59 => 18,
|
1439 |
+
67 => -30,
|
1440 |
+
79 => -30,
|
1441 |
+
84 => -95,
|
1442 |
+
85 => -44,
|
1443 |
+
86 => -67,
|
1444 |
+
87 => -54,
|
1445 |
+
89 => -114,
|
1446 |
+
99 => -30,
|
1447 |
+
100 => -30,
|
1448 |
+
116 => -54,
|
1449 |
+
118 => -54,
|
1450 |
+
119 => -44,
|
1451 |
+
121 => -72,
|
1452 |
+
199 => -30,
|
1453 |
+
210 => -30,
|
1454 |
+
211 => -30,
|
1455 |
+
212 => -30,
|
1456 |
+
213 => -30,
|
1457 |
+
214 => -30,
|
1458 |
+
216 => -30,
|
1459 |
+
217 => -44,
|
1460 |
+
218 => -44,
|
1461 |
+
219 => -44,
|
1462 |
+
220 => -44,
|
1463 |
+
221 => -114,
|
1464 |
+
231 => -30,
|
1465 |
+
253 => -72,
|
1466 |
+
255 => -72,
|
1467 |
+
262 => -30,
|
1468 |
+
263 => -30,
|
1469 |
+
264 => -30,
|
1470 |
+
265 => -30,
|
1471 |
+
266 => -30,
|
1472 |
+
267 => -30,
|
1473 |
+
268 => -30,
|
1474 |
+
269 => -30,
|
1475 |
+
271 => -30,
|
1476 |
+
273 => -30,
|
1477 |
+
332 => -30,
|
1478 |
+
334 => -30,
|
1479 |
+
336 => -30,
|
1480 |
+
338 => -30,
|
1481 |
+
354 => -95,
|
1482 |
+
355 => -54,
|
1483 |
+
356 => -95,
|
1484 |
+
357 => -54,
|
1485 |
+
360 => -44,
|
1486 |
+
362 => -44,
|
1487 |
+
364 => -44,
|
1488 |
+
366 => -44,
|
1489 |
+
368 => -44,
|
1490 |
+
370 => -44,
|
1491 |
+
372 => -54,
|
1492 |
+
373 => -44,
|
1493 |
+
374 => -114,
|
1494 |
+
375 => -72,
|
1495 |
+
376 => -114,
|
1496 |
+
490 => -30,
|
1497 |
+
492 => -30,
|
1498 |
+
538 => -95,
|
1499 |
+
539 => -54,
|
1500 |
+
558 => -30,
|
1501 |
+
562 => -114,
|
1502 |
+
563 => -72,
|
1503 |
+
7808 => -54,
|
1504 |
+
7809 => -44,
|
1505 |
+
7810 => -54,
|
1506 |
+
7811 => -44,
|
1507 |
+
7812 => -54,
|
1508 |
+
7813 => -44,
|
1509 |
+
7922 => -114,
|
1510 |
+
7923 => -72,
|
1511 |
+
8217 => -123,
|
1512 |
+
8218 => 50,
|
1513 |
+
8221 => -123,
|
1514 |
+
8222 => 50,
|
1515 |
+
),
|
1516 |
+
66 =>
|
1517 |
+
array (
|
1518 |
+
86 => -40,
|
1519 |
+
87 => -54,
|
1520 |
+
89 => -54,
|
1521 |
+
221 => -54,
|
1522 |
+
372 => -54,
|
1523 |
+
374 => -54,
|
1524 |
+
376 => -54,
|
1525 |
+
562 => -54,
|
1526 |
+
7808 => -54,
|
1527 |
+
7810 => -54,
|
1528 |
+
7812 => -54,
|
1529 |
+
7922 => -54,
|
1530 |
+
),
|
1531 |
+
67 =>
|
1532 |
+
array (
|
1533 |
+
83 => -35,
|
1534 |
+
346 => -35,
|
1535 |
+
348 => -35,
|
1536 |
+
350 => -35,
|
1537 |
+
352 => -35,
|
1538 |
+
536 => -35,
|
1539 |
+
),
|
1540 |
+
68 =>
|
1541 |
+
array (
|
1542 |
+
45 => 18,
|
1543 |
+
89 => -77,
|
1544 |
+
221 => -77,
|
1545 |
+
374 => -77,
|
1546 |
+
376 => -77,
|
1547 |
+
562 => -77,
|
1548 |
+
7922 => -77,
|
1549 |
+
8218 => -17,
|
1550 |
+
8222 => -17,
|
1551 |
+
),
|
1552 |
+
70 =>
|
1553 |
+
array (
|
1554 |
+
44 => -216,
|
1555 |
+
45 => -49,
|
1556 |
+
46 => -220,
|
1557 |
+
58 => -54,
|
1558 |
+
59 => -54,
|
1559 |
+
65 => -128,
|
1560 |
+
97 => -114,
|
1561 |
+
101 => -77,
|
1562 |
+
111 => -77,
|
1563 |
+
114 => -109,
|
1564 |
+
117 => -95,
|
1565 |
+
121 => -91,
|
1566 |
+
192 => -128,
|
1567 |
+
193 => -128,
|
1568 |
+
194 => -128,
|
1569 |
+
195 => -128,
|
1570 |
+
196 => -128,
|
1571 |
+
224 => -114,
|
1572 |
+
225 => -114,
|
1573 |
+
226 => -114,
|
1574 |
+
227 => -114,
|
1575 |
+
228 => -114,
|
1576 |
+
229 => -114,
|
1577 |
+
230 => -114,
|
1578 |
+
232 => -77,
|
1579 |
+
233 => -77,
|
1580 |
+
234 => -77,
|
1581 |
+
235 => -77,
|
1582 |
+
242 => -77,
|
1583 |
+
243 => -77,
|
1584 |
+
244 => -77,
|
1585 |
+
245 => -77,
|
1586 |
+
246 => -77,
|
1587 |
+
248 => -77,
|
1588 |
+
249 => -95,
|
1589 |
+
250 => -95,
|
1590 |
+
251 => -95,
|
1591 |
+
252 => -95,
|
1592 |
+
253 => -91,
|
1593 |
+
255 => -91,
|
1594 |
+
256 => -128,
|
1595 |
+
257 => -114,
|
1596 |
+
258 => -128,
|
1597 |
+
259 => -114,
|
1598 |
+
260 => -128,
|
1599 |
+
261 => -114,
|
1600 |
+
275 => -77,
|
1601 |
+
277 => -77,
|
1602 |
+
279 => -77,
|
1603 |
+
281 => -77,
|
1604 |
+
283 => -77,
|
1605 |
+
333 => -77,
|
1606 |
+
335 => -77,
|
1607 |
+
337 => -77,
|
1608 |
+
339 => -77,
|
1609 |
+
341 => -109,
|
1610 |
+
343 => -109,
|
1611 |
+
345 => -109,
|
1612 |
+
361 => -95,
|
1613 |
+
363 => -95,
|
1614 |
+
365 => -95,
|
1615 |
+
367 => -95,
|
1616 |
+
369 => -95,
|
1617 |
+
371 => -95,
|
1618 |
+
375 => -91,
|
1619 |
+
483 => -114,
|
1620 |
+
491 => -77,
|
1621 |
+
493 => -77,
|
1622 |
+
559 => -77,
|
1623 |
+
563 => -91,
|
1624 |
+
7923 => -91,
|
1625 |
+
8217 => -17,
|
1626 |
+
8218 => -220,
|
1627 |
+
8222 => -220,
|
1628 |
+
),
|
1629 |
+
71 =>
|
1630 |
+
array (
|
1631 |
+
84 => -17,
|
1632 |
+
89 => -40,
|
1633 |
+
221 => -40,
|
1634 |
+
356 => -17,
|
1635 |
+
376 => -40,
|
1636 |
+
),
|
1637 |
+
75 =>
|
1638 |
+
array (
|
1639 |
+
45 => -123,
|
1640 |
+
67 => -63,
|
1641 |
+
79 => -63,
|
1642 |
+
85 => -35,
|
1643 |
+
87 => -26,
|
1644 |
+
101 => -54,
|
1645 |
+
111 => -54,
|
1646 |
+
117 => -54,
|
1647 |
+
121 => -100,
|
1648 |
+
199 => -63,
|
1649 |
+
210 => -63,
|
1650 |
+
211 => -63,
|
1651 |
+
212 => -63,
|
1652 |
+
213 => -63,
|
1653 |
+
214 => -63,
|
1654 |
+
216 => -26,
|
1655 |
+
217 => -35,
|
1656 |
+
218 => -35,
|
1657 |
+
219 => -35,
|
1658 |
+
220 => -35,
|
1659 |
+
232 => -54,
|
1660 |
+
233 => -54,
|
1661 |
+
234 => -54,
|
1662 |
+
235 => -54,
|
1663 |
+
242 => -54,
|
1664 |
+
243 => -54,
|
1665 |
+
244 => -54,
|
1666 |
+
245 => -54,
|
1667 |
+
246 => -54,
|
1668 |
+
248 => -54,
|
1669 |
+
249 => -54,
|
1670 |
+
250 => -54,
|
1671 |
+
251 => -54,
|
1672 |
+
252 => -54,
|
1673 |
+
253 => -100,
|
1674 |
+
255 => -100,
|
1675 |
+
262 => -63,
|
1676 |
+
268 => -63,
|
1677 |
+
283 => -54,
|
1678 |
+
338 => -86,
|
1679 |
+
339 => -54,
|
1680 |
+
366 => -35,
|
1681 |
+
367 => -54,
|
1682 |
+
8218 => 18,
|
1683 |
+
8222 => 18,
|
1684 |
+
),
|
1685 |
+
76 =>
|
1686 |
+
array (
|
1687 |
+
79 => -35,
|
1688 |
+
84 => -165,
|
1689 |
+
85 => -54,
|
1690 |
+
86 => -137,
|
1691 |
+
87 => -86,
|
1692 |
+
89 => -155,
|
1693 |
+
121 => -123,
|
1694 |
+
210 => -35,
|
1695 |
+
211 => -35,
|
1696 |
+
212 => -35,
|
1697 |
+
213 => -35,
|
1698 |
+
214 => -35,
|
1699 |
+
216 => -35,
|
1700 |
+
217 => -54,
|
1701 |
+
218 => -54,
|
1702 |
+
219 => -54,
|
1703 |
+
220 => -54,
|
1704 |
+
221 => -155,
|
1705 |
+
253 => -123,
|
1706 |
+
255 => -123,
|
1707 |
+
338 => -35,
|
1708 |
+
356 => -165,
|
1709 |
+
366 => -54,
|
1710 |
+
376 => -155,
|
1711 |
+
8217 => -248,
|
1712 |
+
8221 => -257,
|
1713 |
+
),
|
1714 |
+
79 =>
|
1715 |
+
array (
|
1716 |
+
44 => -21,
|
1717 |
+
45 => 18,
|
1718 |
+
46 => -21,
|
1719 |
+
86 => -35,
|
1720 |
+
88 => -35,
|
1721 |
+
89 => -72,
|
1722 |
+
221 => -72,
|
1723 |
+
376 => -72,
|
1724 |
+
),
|
1725 |
+
80 =>
|
1726 |
+
array (
|
1727 |
+
44 => -257,
|
1728 |
+
45 => -17,
|
1729 |
+
46 => -257,
|
1730 |
+
65 => -91,
|
1731 |
+
97 => -63,
|
1732 |
+
101 => -26,
|
1733 |
+
114 => -30,
|
1734 |
+
115 => -35,
|
1735 |
+
117 => -35,
|
1736 |
+
192 => -91,
|
1737 |
+
193 => -91,
|
1738 |
+
194 => -91,
|
1739 |
+
195 => -91,
|
1740 |
+
196 => -91,
|
1741 |
+
224 => -63,
|
1742 |
+
225 => -63,
|
1743 |
+
226 => -63,
|
1744 |
+
227 => -63,
|
1745 |
+
228 => -63,
|
1746 |
+
229 => -63,
|
1747 |
+
230 => -63,
|
1748 |
+
232 => -26,
|
1749 |
+
233 => -26,
|
1750 |
+
234 => -26,
|
1751 |
+
235 => -26,
|
1752 |
+
249 => -35,
|
1753 |
+
250 => -35,
|
1754 |
+
251 => -35,
|
1755 |
+
252 => -35,
|
1756 |
+
283 => -26,
|
1757 |
+
341 => -30,
|
1758 |
+
345 => -30,
|
1759 |
+
351 => -35,
|
1760 |
+
353 => -35,
|
1761 |
+
367 => -35,
|
1762 |
+
8217 => 27,
|
1763 |
+
8218 => -202,
|
1764 |
+
8221 => 18,
|
1765 |
+
8222 => -202,
|
1766 |
+
),
|
1767 |
+
81 =>
|
1768 |
+
array (
|
1769 |
+
45 => 18,
|
1770 |
+
),
|
1771 |
+
82 =>
|
1772 |
+
array (
|
1773 |
+
44 => 18,
|
1774 |
+
46 => 18,
|
1775 |
+
84 => -44,
|
1776 |
+
89 => -91,
|
1777 |
+
101 => -49,
|
1778 |
+
111 => -49,
|
1779 |
+
117 => -54,
|
1780 |
+
121 => -63,
|
1781 |
+
221 => -91,
|
1782 |
+
232 => -49,
|
1783 |
+
233 => -49,
|
1784 |
+
234 => -49,
|
1785 |
+
235 => -49,
|
1786 |
+
242 => -49,
|
1787 |
+
243 => -49,
|
1788 |
+
244 => -49,
|
1789 |
+
245 => -49,
|
1790 |
+
246 => -49,
|
1791 |
+
248 => -49,
|
1792 |
+
249 => -54,
|
1793 |
+
250 => -54,
|
1794 |
+
251 => -54,
|
1795 |
+
252 => -54,
|
1796 |
+
253 => -63,
|
1797 |
+
255 => -63,
|
1798 |
+
283 => -49,
|
1799 |
+
339 => -49,
|
1800 |
+
356 => -44,
|
1801 |
+
367 => -54,
|
1802 |
+
376 => -91,
|
1803 |
+
),
|
1804 |
+
83 =>
|
1805 |
+
array (
|
1806 |
+
83 => -35,
|
1807 |
+
350 => -35,
|
1808 |
+
352 => -35,
|
1809 |
+
),
|
1810 |
+
84 =>
|
1811 |
+
array (
|
1812 |
+
44 => -160,
|
1813 |
+
45 => -146,
|
1814 |
+
46 => -169,
|
1815 |
+
58 => -54,
|
1816 |
+
59 => -54,
|
1817 |
+
65 => -77,
|
1818 |
+
84 => 22,
|
1819 |
+
97 => -118,
|
1820 |
+
99 => -128,
|
1821 |
+
101 => -128,
|
1822 |
+
111 => -128,
|
1823 |
+
114 => -109,
|
1824 |
+
115 => -118,
|
1825 |
+
117 => -128,
|
1826 |
+
119 => -137,
|
1827 |
+
121 => -165,
|
1828 |
+
192 => -77,
|
1829 |
+
193 => -77,
|
1830 |
+
194 => -77,
|
1831 |
+
195 => -77,
|
1832 |
+
196 => -77,
|
1833 |
+
224 => -118,
|
1834 |
+
225 => -118,
|
1835 |
+
226 => -118,
|
1836 |
+
227 => -118,
|
1837 |
+
228 => -118,
|
1838 |
+
229 => -118,
|
1839 |
+
230 => -118,
|
1840 |
+
231 => -128,
|
1841 |
+
232 => -128,
|
1842 |
+
233 => -128,
|
1843 |
+
234 => -128,
|
1844 |
+
235 => -128,
|
1845 |
+
242 => -128,
|
1846 |
+
243 => -128,
|
1847 |
+
244 => -128,
|
1848 |
+
245 => -128,
|
1849 |
+
246 => -128,
|
1850 |
+
248 => -128,
|
1851 |
+
249 => -128,
|
1852 |
+
250 => -128,
|
1853 |
+
251 => -128,
|
1854 |
+
252 => -128,
|
1855 |
+
253 => -165,
|
1856 |
+
255 => -165,
|
1857 |
+
263 => -128,
|
1858 |
+
269 => -128,
|
1859 |
+
283 => -128,
|
1860 |
+
339 => -128,
|
1861 |
+
341 => -109,
|
1862 |
+
345 => -109,
|
1863 |
+
351 => -118,
|
1864 |
+
353 => -118,
|
1865 |
+
356 => 22,
|
1866 |
+
367 => -128,
|
1867 |
+
8218 => -146,
|
1868 |
+
8222 => -146,
|
1869 |
+
),
|
1870 |
+
85 =>
|
1871 |
+
array (
|
1872 |
+
65 => -44,
|
1873 |
+
192 => -44,
|
1874 |
+
193 => -44,
|
1875 |
+
194 => -44,
|
1876 |
+
195 => -44,
|
1877 |
+
196 => -44,
|
1878 |
+
),
|
1879 |
+
86 =>
|
1880 |
+
array (
|
1881 |
+
44 => -155,
|
1882 |
+
45 => -72,
|
1883 |
+
46 => -155,
|
1884 |
+
58 => -44,
|
1885 |
+
59 => -44,
|
1886 |
+
65 => -67,
|
1887 |
+
79 => -17,
|
1888 |
+
97 => -77,
|
1889 |
+
101 => -72,
|
1890 |
+
105 => -17,
|
1891 |
+
111 => -72,
|
1892 |
+
117 => -72,
|
1893 |
+
192 => -67,
|
1894 |
+
193 => -67,
|
1895 |
+
194 => -67,
|
1896 |
+
195 => -67,
|
1897 |
+
196 => -67,
|
1898 |
+
210 => -17,
|
1899 |
+
211 => -17,
|
1900 |
+
212 => -17,
|
1901 |
+
213 => -17,
|
1902 |
+
214 => -17,
|
1903 |
+
216 => -17,
|
1904 |
+
224 => -77,
|
1905 |
+
225 => -77,
|
1906 |
+
226 => -77,
|
1907 |
+
227 => -77,
|
1908 |
+
228 => -77,
|
1909 |
+
229 => -77,
|
1910 |
+
230 => -77,
|
1911 |
+
232 => -72,
|
1912 |
+
233 => -72,
|
1913 |
+
234 => -72,
|
1914 |
+
235 => -72,
|
1915 |
+
242 => -72,
|
1916 |
+
243 => -72,
|
1917 |
+
244 => -72,
|
1918 |
+
245 => -72,
|
1919 |
+
246 => -72,
|
1920 |
+
248 => -72,
|
1921 |
+
249 => -72,
|
1922 |
+
250 => -72,
|
1923 |
+
251 => -72,
|
1924 |
+
252 => -72,
|
1925 |
+
283 => -72,
|
1926 |
+
338 => -21,
|
1927 |
+
339 => -72,
|
1928 |
+
367 => -72,
|
1929 |
+
8218 => -132,
|
1930 |
+
8222 => -132,
|
1931 |
+
),
|
1932 |
+
87 =>
|
1933 |
+
array (
|
1934 |
+
44 => -86,
|
1935 |
+
45 => -44,
|
1936 |
+
46 => -86,
|
1937 |
+
58 => -30,
|
1938 |
+
59 => -30,
|
1939 |
+
65 => -35,
|
1940 |
+
97 => -67,
|
1941 |
+
101 => -63,
|
1942 |
+
111 => -54,
|
1943 |
+
114 => -58,
|
1944 |
+
192 => -35,
|
1945 |
+
193 => -35,
|
1946 |
+
194 => -35,
|
1947 |
+
195 => -35,
|
1948 |
+
196 => -35,
|
1949 |
+
224 => -67,
|
1950 |
+
225 => -67,
|
1951 |
+
226 => -67,
|
1952 |
+
227 => -67,
|
1953 |
+
228 => -67,
|
1954 |
+
229 => -67,
|
1955 |
+
230 => -67,
|
1956 |
+
232 => -63,
|
1957 |
+
233 => -63,
|
1958 |
+
234 => -63,
|
1959 |
+
235 => -63,
|
1960 |
+
242 => -54,
|
1961 |
+
243 => -54,
|
1962 |
+
244 => -54,
|
1963 |
+
245 => -54,
|
1964 |
+
246 => -54,
|
1965 |
+
248 => -54,
|
1966 |
+
283 => -63,
|
1967 |
+
339 => -54,
|
1968 |
+
341 => -58,
|
1969 |
+
345 => -58,
|
1970 |
+
),
|
1971 |
+
88 =>
|
1972 |
+
array (
|
1973 |
+
45 => -118,
|
1974 |
+
67 => -35,
|
1975 |
+
79 => -35,
|
1976 |
+
101 => -63,
|
1977 |
+
199 => -35,
|
1978 |
+
210 => -35,
|
1979 |
+
211 => -35,
|
1980 |
+
212 => -35,
|
1981 |
+
213 => -35,
|
1982 |
+
214 => -35,
|
1983 |
+
216 => -35,
|
1984 |
+
232 => -63,
|
1985 |
+
233 => -63,
|
1986 |
+
234 => -63,
|
1987 |
+
235 => -63,
|
1988 |
+
262 => -35,
|
1989 |
+
268 => -35,
|
1990 |
+
283 => -63,
|
1991 |
+
338 => -54,
|
1992 |
+
),
|
1993 |
+
89 =>
|
1994 |
+
array (
|
1995 |
+
44 => -165,
|
1996 |
+
45 => -146,
|
1997 |
+
46 => -165,
|
1998 |
+
58 => -86,
|
1999 |
+
59 => -86,
|
2000 |
+
65 => -95,
|
2001 |
+
67 => -35,
|
2002 |
+
79 => -35,
|
2003 |
+
97 => -118,
|
2004 |
+
101 => -128,
|
2005 |
+
111 => -128,
|
2006 |
+
117 => -109,
|
2007 |
+
192 => -95,
|
2008 |
+
193 => -95,
|
2009 |
+
194 => -95,
|
2010 |
+
195 => -95,
|
2011 |
+
196 => -95,
|
2012 |
+
199 => -35,
|
2013 |
+
210 => -35,
|
2014 |
+
211 => -35,
|
2015 |
+
212 => -35,
|
2016 |
+
213 => -35,
|
2017 |
+
214 => -35,
|
2018 |
+
216 => -35,
|
2019 |
+
224 => -118,
|
2020 |
+
225 => -118,
|
2021 |
+
226 => -118,
|
2022 |
+
227 => -118,
|
2023 |
+
228 => -118,
|
2024 |
+
229 => -118,
|
2025 |
+
230 => -118,
|
2026 |
+
232 => -128,
|
2027 |
+
233 => -128,
|
2028 |
+
234 => -128,
|
2029 |
+
235 => -128,
|
2030 |
+
242 => -128,
|
2031 |
+
243 => -128,
|
2032 |
+
244 => -128,
|
2033 |
+
245 => -128,
|
2034 |
+
246 => -128,
|
2035 |
+
248 => -128,
|
2036 |
+
249 => -109,
|
2037 |
+
250 => -109,
|
2038 |
+
251 => -109,
|
2039 |
+
252 => -109,
|
2040 |
+
262 => -35,
|
2041 |
+
268 => -35,
|
2042 |
+
283 => -128,
|
2043 |
+
338 => -58,
|
2044 |
+
339 => -128,
|
2045 |
+
367 => -109,
|
2046 |
+
8218 => -183,
|
2047 |
+
8222 => -197,
|
2048 |
+
),
|
2049 |
+
90 =>
|
2050 |
+
array (
|
2051 |
+
45 => -72,
|
2052 |
+
),
|
2053 |
+
97 =>
|
2054 |
+
array (
|
2055 |
+
121 => -30,
|
2056 |
+
253 => -30,
|
2057 |
+
255 => -30,
|
2058 |
+
),
|
2059 |
+
102 =>
|
2060 |
+
array (
|
2061 |
+
44 => -54,
|
2062 |
+
45 => -17,
|
2063 |
+
46 => -54,
|
2064 |
+
8217 => 68,
|
2065 |
+
8221 => 41,
|
2066 |
+
),
|
2067 |
+
107 =>
|
2068 |
+
array (
|
2069 |
+
101 => -35,
|
2070 |
+
111 => -35,
|
2071 |
+
232 => -35,
|
2072 |
+
233 => -35,
|
2073 |
+
234 => -35,
|
2074 |
+
235 => -35,
|
2075 |
+
242 => -35,
|
2076 |
+
243 => -35,
|
2077 |
+
244 => -35,
|
2078 |
+
245 => -35,
|
2079 |
+
246 => -35,
|
2080 |
+
248 => -21,
|
2081 |
+
283 => -35,
|
2082 |
+
339 => -35,
|
2083 |
+
),
|
2084 |
+
114 =>
|
2085 |
+
array (
|
2086 |
+
44 => -146,
|
2087 |
+
46 => -142,
|
2088 |
+
8217 => 41,
|
2089 |
+
8221 => 18,
|
2090 |
+
),
|
2091 |
+
118 =>
|
2092 |
+
array (
|
2093 |
+
44 => -81,
|
2094 |
+
46 => -81,
|
2095 |
+
),
|
2096 |
+
119 =>
|
2097 |
+
array (
|
2098 |
+
44 => -63,
|
2099 |
+
46 => -63,
|
2100 |
+
),
|
2101 |
+
121 =>
|
2102 |
+
array (
|
2103 |
+
44 => -77,
|
2104 |
+
46 => -91,
|
2105 |
+
),
|
2106 |
+
192 =>
|
2107 |
+
array (
|
2108 |
+
44 => 18,
|
2109 |
+
46 => 18,
|
2110 |
+
58 => 18,
|
2111 |
+
59 => 18,
|
2112 |
+
67 => -30,
|
2113 |
+
79 => -30,
|
2114 |
+
84 => -95,
|
2115 |
+
85 => -44,
|
2116 |
+
86 => -67,
|
2117 |
+
87 => -54,
|
2118 |
+
89 => -114,
|
2119 |
+
99 => -30,
|
2120 |
+
100 => -30,
|
2121 |
+
116 => -54,
|
2122 |
+
118 => -54,
|
2123 |
+
119 => -44,
|
2124 |
+
121 => -72,
|
2125 |
+
199 => -30,
|
2126 |
+
210 => -30,
|
2127 |
+
211 => -30,
|
2128 |
+
212 => -30,
|
2129 |
+
213 => -30,
|
2130 |
+
214 => -30,
|
2131 |
+
216 => -30,
|
2132 |
+
217 => -44,
|
2133 |
+
218 => -44,
|
2134 |
+
219 => -44,
|
2135 |
+
220 => -44,
|
2136 |
+
221 => -114,
|
2137 |
+
231 => -30,
|
2138 |
+
253 => -72,
|
2139 |
+
255 => -72,
|
2140 |
+
262 => -30,
|
2141 |
+
263 => -30,
|
2142 |
+
264 => -30,
|
2143 |
+
265 => -30,
|
2144 |
+
266 => -30,
|
2145 |
+
267 => -30,
|
2146 |
+
268 => -30,
|
2147 |
+
269 => -30,
|
2148 |
+
271 => -30,
|
2149 |
+
273 => -30,
|
2150 |
+
332 => -30,
|
2151 |
+
334 => -30,
|
2152 |
+
336 => -30,
|
2153 |
+
338 => -30,
|
2154 |
+
354 => -95,
|
2155 |
+
355 => -54,
|
2156 |
+
356 => -95,
|
2157 |
+
357 => -54,
|
2158 |
+
360 => -44,
|
2159 |
+
362 => -44,
|
2160 |
+
364 => -44,
|
2161 |
+
366 => -44,
|
2162 |
+
368 => -44,
|
2163 |
+
370 => -44,
|
2164 |
+
372 => -54,
|
2165 |
+
373 => -44,
|
2166 |
+
374 => -114,
|
2167 |
+
375 => -72,
|
2168 |
+
376 => -114,
|
2169 |
+
490 => -30,
|
2170 |
+
492 => -30,
|
2171 |
+
538 => -95,
|
2172 |
+
539 => -54,
|
2173 |
+
558 => -30,
|
2174 |
+
562 => -114,
|
2175 |
+
563 => -72,
|
2176 |
+
7808 => -54,
|
2177 |
+
7809 => -44,
|
2178 |
+
7810 => -54,
|
2179 |
+
7811 => -44,
|
2180 |
+
7812 => -54,
|
2181 |
+
7813 => -44,
|
2182 |
+
7922 => -114,
|
2183 |
+
7923 => -72,
|
2184 |
+
8217 => -123,
|
2185 |
+
8218 => 50,
|
2186 |
+
8221 => -123,
|
2187 |
+
8222 => 50,
|
2188 |
+
),
|
2189 |
+
193 =>
|
2190 |
+
array (
|
2191 |
+
44 => 18,
|
2192 |
+
46 => 18,
|
2193 |
+
58 => 18,
|
2194 |
+
59 => 18,
|
2195 |
+
67 => -30,
|
2196 |
+
79 => -30,
|
2197 |
+
84 => -95,
|
2198 |
+
85 => -44,
|
2199 |
+
86 => -67,
|
2200 |
+
87 => -54,
|
2201 |
+
89 => -114,
|
2202 |
+
99 => -30,
|
2203 |
+
100 => -30,
|
2204 |
+
116 => -54,
|
2205 |
+
118 => -54,
|
2206 |
+
119 => -44,
|
2207 |
+
121 => -72,
|
2208 |
+
199 => -30,
|
2209 |
+
210 => -30,
|
2210 |
+
211 => -30,
|
2211 |
+
212 => -30,
|
2212 |
+
213 => -30,
|
2213 |
+
214 => -30,
|
2214 |
+
216 => -30,
|
2215 |
+
217 => -44,
|
2216 |
+
218 => -44,
|
2217 |
+
219 => -44,
|
2218 |
+
220 => -44,
|
2219 |
+
221 => -114,
|
2220 |
+
231 => -30,
|
2221 |
+
253 => -72,
|
2222 |
+
255 => -72,
|
2223 |
+
262 => -30,
|
2224 |
+
263 => -30,
|
2225 |
+
264 => -30,
|
2226 |
+
265 => -30,
|
2227 |
+
266 => -30,
|
2228 |
+
267 => -30,
|
2229 |
+
268 => -30,
|
2230 |
+
269 => -30,
|
2231 |
+
271 => -30,
|
2232 |
+
273 => -30,
|
2233 |
+
332 => -30,
|
2234 |
+
334 => -30,
|
2235 |
+
336 => -30,
|
2236 |
+
338 => -30,
|
2237 |
+
354 => -95,
|
2238 |
+
355 => -54,
|
2239 |
+
356 => -95,
|
2240 |
+
357 => -54,
|
2241 |
+
360 => -44,
|
2242 |
+
362 => -44,
|
2243 |
+
364 => -44,
|
2244 |
+
366 => -44,
|
2245 |
+
368 => -44,
|
2246 |
+
370 => -44,
|
2247 |
+
372 => -54,
|
2248 |
+
373 => -44,
|
2249 |
+
374 => -114,
|
2250 |
+
375 => -72,
|
2251 |
+
376 => -114,
|
2252 |
+
490 => -30,
|
2253 |
+
492 => -30,
|
2254 |
+
538 => -95,
|
2255 |
+
539 => -54,
|
2256 |
+
558 => -30,
|
2257 |
+
562 => -114,
|
2258 |
+
563 => -72,
|
2259 |
+
7808 => -54,
|
2260 |
+
7809 => -44,
|
2261 |
+
7810 => -54,
|
2262 |
+
7811 => -44,
|
2263 |
+
7812 => -54,
|
2264 |
+
7813 => -44,
|
2265 |
+
7922 => -114,
|
2266 |
+
7923 => -72,
|
2267 |
+
8217 => -123,
|
2268 |
+
8218 => 50,
|
2269 |
+
8221 => -123,
|
2270 |
+
8222 => 50,
|
2271 |
+
),
|
2272 |
+
194 =>
|
2273 |
+
array (
|
2274 |
+
44 => 18,
|
2275 |
+
46 => 18,
|
2276 |
+
58 => 18,
|
2277 |
+
59 => 18,
|
2278 |
+
67 => -30,
|
2279 |
+
79 => -30,
|
2280 |
+
84 => -95,
|
2281 |
+
85 => -44,
|
2282 |
+
86 => -67,
|
2283 |
+
87 => -54,
|
2284 |
+
89 => -114,
|
2285 |
+
99 => -30,
|
2286 |
+
100 => -30,
|
2287 |
+
116 => -54,
|
2288 |
+
118 => -54,
|
2289 |
+
119 => -44,
|
2290 |
+
121 => -72,
|
2291 |
+
199 => -30,
|
2292 |
+
210 => -30,
|
2293 |
+
211 => -30,
|
2294 |
+
212 => -30,
|
2295 |
+
213 => -30,
|
2296 |
+
214 => -30,
|
2297 |
+
216 => -30,
|
2298 |
+
217 => -44,
|
2299 |
+
218 => -44,
|
2300 |
+
219 => -44,
|
2301 |
+
220 => -44,
|
2302 |
+
221 => -114,
|
2303 |
+
231 => -30,
|
2304 |
+
253 => -72,
|
2305 |
+
255 => -72,
|
2306 |
+
262 => -30,
|
2307 |
+
263 => -30,
|
2308 |
+
264 => -30,
|
2309 |
+
265 => -30,
|
2310 |
+
266 => -30,
|
2311 |
+
267 => -30,
|
2312 |
+
268 => -30,
|
2313 |
+
269 => -30,
|
2314 |
+
271 => -30,
|
2315 |
+
273 => -30,
|
2316 |
+
332 => -30,
|
2317 |
+
334 => -30,
|
2318 |
+
336 => -30,
|
2319 |
+
338 => -30,
|
2320 |
+
354 => -95,
|
2321 |
+
355 => -54,
|
2322 |
+
356 => -95,
|
2323 |
+
357 => -54,
|
2324 |
+
360 => -44,
|
2325 |
+
362 => -44,
|
2326 |
+
364 => -44,
|
2327 |
+
366 => -44,
|
2328 |
+
368 => -44,
|
2329 |
+
370 => -44,
|
2330 |
+
372 => -54,
|
2331 |
+
373 => -44,
|
2332 |
+
374 => -114,
|
2333 |
+
375 => -72,
|
2334 |
+
376 => -114,
|
2335 |
+
490 => -30,
|
2336 |
+
492 => -30,
|
2337 |
+
538 => -95,
|
2338 |
+
539 => -54,
|
2339 |
+
558 => -30,
|
2340 |
+
562 => -114,
|
2341 |
+
563 => -72,
|
2342 |
+
7808 => -54,
|
2343 |
+
7809 => -44,
|
2344 |
+
7810 => -54,
|
2345 |
+
7811 => -44,
|
2346 |
+
7812 => -54,
|
2347 |
+
7813 => -44,
|
2348 |
+
7922 => -114,
|
2349 |
+
7923 => -72,
|
2350 |
+
8217 => -123,
|
2351 |
+
8218 => 50,
|
2352 |
+
8221 => -123,
|
2353 |
+
8222 => 50,
|
2354 |
+
),
|
2355 |
+
195 =>
|
2356 |
+
array (
|
2357 |
+
44 => 18,
|
2358 |
+
46 => 18,
|
2359 |
+
58 => 18,
|
2360 |
+
59 => 18,
|
2361 |
+
67 => -30,
|
2362 |
+
79 => -30,
|
2363 |
+
84 => -95,
|
2364 |
+
85 => -44,
|
2365 |
+
86 => -67,
|
2366 |
+
87 => -54,
|
2367 |
+
89 => -114,
|
2368 |
+
99 => -30,
|
2369 |
+
100 => -30,
|
2370 |
+
116 => -54,
|
2371 |
+
118 => -54,
|
2372 |
+
119 => -44,
|
2373 |
+
121 => -72,
|
2374 |
+
199 => -30,
|
2375 |
+
210 => -30,
|
2376 |
+
211 => -30,
|
2377 |
+
212 => -30,
|
2378 |
+
213 => -30,
|
2379 |
+
214 => -30,
|
2380 |
+
216 => -30,
|
2381 |
+
217 => -44,
|
2382 |
+
218 => -44,
|
2383 |
+
219 => -44,
|
2384 |
+
220 => -44,
|
2385 |
+
221 => -114,
|
2386 |
+
231 => -30,
|
2387 |
+
253 => -72,
|
2388 |
+
255 => -72,
|
2389 |
+
262 => -30,
|
2390 |
+
263 => -30,
|
2391 |
+
264 => -30,
|
2392 |
+
265 => -30,
|
2393 |
+
266 => -30,
|
2394 |
+
267 => -30,
|
2395 |
+
268 => -30,
|
2396 |
+
269 => -30,
|
2397 |
+
271 => -30,
|
2398 |
+
273 => -30,
|
2399 |
+
332 => -30,
|
2400 |
+
334 => -30,
|
2401 |
+
336 => -30,
|
2402 |
+
338 => -30,
|
2403 |
+
354 => -95,
|
2404 |
+
355 => -54,
|
2405 |
+
356 => -95,
|
2406 |
+
357 => -54,
|
2407 |
+
360 => -44,
|
2408 |
+
362 => -44,
|
2409 |
+
364 => -44,
|
2410 |
+
366 => -44,
|
2411 |
+
368 => -44,
|
2412 |
+
370 => -44,
|
2413 |
+
372 => -54,
|
2414 |
+
373 => -44,
|
2415 |
+
374 => -114,
|
2416 |
+
375 => -72,
|
2417 |
+
376 => -114,
|
2418 |
+
490 => -30,
|
2419 |
+
492 => -30,
|
2420 |
+
538 => -95,
|
2421 |
+
539 => -54,
|
2422 |
+
558 => -30,
|
2423 |
+
562 => -114,
|
2424 |
+
563 => -72,
|
2425 |
+
7808 => -54,
|
2426 |
+
7809 => -44,
|
2427 |
+
7810 => -54,
|
2428 |
+
7811 => -44,
|
2429 |
+
7812 => -54,
|
2430 |
+
7813 => -44,
|
2431 |
+
7922 => -114,
|
2432 |
+
7923 => -72,
|
2433 |
+
8217 => -123,
|
2434 |
+
8218 => 50,
|
2435 |
+
8221 => -123,
|
2436 |
+
8222 => 50,
|
2437 |
+
),
|
2438 |
+
196 =>
|
2439 |
+
array (
|
2440 |
+
44 => 18,
|
2441 |
+
46 => 18,
|
2442 |
+
58 => 18,
|
2443 |
+
59 => 18,
|
2444 |
+
67 => -30,
|
2445 |
+
79 => -30,
|
2446 |
+
84 => -95,
|
2447 |
+
85 => -44,
|
2448 |
+
86 => -67,
|
2449 |
+
87 => -54,
|
2450 |
+
89 => -114,
|
2451 |
+
99 => -30,
|
2452 |
+
100 => -30,
|
2453 |
+
116 => -54,
|
2454 |
+
118 => -54,
|
2455 |
+
119 => -44,
|
2456 |
+
121 => -72,
|
2457 |
+
199 => -30,
|
2458 |
+
210 => -30,
|
2459 |
+
211 => -30,
|
2460 |
+
212 => -30,
|
2461 |
+
213 => -30,
|
2462 |
+
214 => -30,
|
2463 |
+
216 => -30,
|
2464 |
+
217 => -44,
|
2465 |
+
218 => -44,
|
2466 |
+
219 => -44,
|
2467 |
+
220 => -44,
|
2468 |
+
221 => -114,
|
2469 |
+
231 => -30,
|
2470 |
+
253 => -72,
|
2471 |
+
255 => -72,
|
2472 |
+
262 => -30,
|
2473 |
+
263 => -30,
|
2474 |
+
264 => -30,
|
2475 |
+
265 => -30,
|
2476 |
+
266 => -30,
|
2477 |
+
267 => -30,
|
2478 |
+
268 => -30,
|
2479 |
+
269 => -30,
|
2480 |
+
271 => -30,
|
2481 |
+
273 => -30,
|
2482 |
+
332 => -30,
|
2483 |
+
334 => -30,
|
2484 |
+
336 => -30,
|
2485 |
+
338 => -30,
|
2486 |
+
354 => -95,
|
2487 |
+
355 => -54,
|
2488 |
+
356 => -95,
|
2489 |
+
357 => -54,
|
2490 |
+
360 => -44,
|
2491 |
+
362 => -44,
|
2492 |
+
364 => -44,
|
2493 |
+
366 => -44,
|
2494 |
+
368 => -44,
|
2495 |
+
370 => -44,
|
2496 |
+
372 => -54,
|
2497 |
+
373 => -44,
|
2498 |
+
374 => -114,
|
2499 |
+
375 => -72,
|
2500 |
+
376 => -114,
|
2501 |
+
490 => -30,
|
2502 |
+
492 => -30,
|
2503 |
+
538 => -95,
|
2504 |
+
539 => -54,
|
2505 |
+
558 => -30,
|
2506 |
+
562 => -114,
|
2507 |
+
563 => -72,
|
2508 |
+
7808 => -54,
|
2509 |
+
7809 => -44,
|
2510 |
+
7810 => -54,
|
2511 |
+
7811 => -44,
|
2512 |
+
7812 => -54,
|
2513 |
+
7813 => -44,
|
2514 |
+
7922 => -114,
|
2515 |
+
7923 => -72,
|
2516 |
+
8217 => -123,
|
2517 |
+
8218 => 50,
|
2518 |
+
8221 => -123,
|
2519 |
+
8222 => 50,
|
2520 |
+
),
|
2521 |
+
198 =>
|
2522 |
+
array (
|
2523 |
+
45 => -17,
|
2524 |
+
),
|
2525 |
+
199 =>
|
2526 |
+
array (
|
2527 |
+
83 => -35,
|
2528 |
+
346 => -35,
|
2529 |
+
348 => -35,
|
2530 |
+
350 => -35,
|
2531 |
+
352 => -35,
|
2532 |
+
536 => -35,
|
2533 |
+
),
|
2534 |
+
208 =>
|
2535 |
+
array (
|
2536 |
+
45 => 18,
|
2537 |
+
89 => -77,
|
2538 |
+
221 => -77,
|
2539 |
+
374 => -77,
|
2540 |
+
376 => -77,
|
2541 |
+
562 => -77,
|
2542 |
+
7922 => -77,
|
2543 |
+
8218 => -17,
|
2544 |
+
8222 => -17,
|
2545 |
+
),
|
2546 |
+
210 =>
|
2547 |
+
array (
|
2548 |
+
44 => -21,
|
2549 |
+
45 => 18,
|
2550 |
+
46 => -21,
|
2551 |
+
86 => -35,
|
2552 |
+
88 => -35,
|
2553 |
+
89 => -72,
|
2554 |
+
221 => -72,
|
2555 |
+
376 => -72,
|
2556 |
+
),
|
2557 |
+
211 =>
|
2558 |
+
array (
|
2559 |
+
44 => -21,
|
2560 |
+
45 => 18,
|
2561 |
+
46 => -21,
|
2562 |
+
86 => -35,
|
2563 |
+
88 => -35,
|
2564 |
+
89 => -72,
|
2565 |
+
221 => -72,
|
2566 |
+
376 => -72,
|
2567 |
+
),
|
2568 |
+
212 =>
|
2569 |
+
array (
|
2570 |
+
44 => -21,
|
2571 |
+
45 => 18,
|
2572 |
+
46 => -21,
|
2573 |
+
86 => -35,
|
2574 |
+
88 => -35,
|
2575 |
+
89 => -72,
|
2576 |
+
221 => -72,
|
2577 |
+
376 => -72,
|
2578 |
+
),
|
2579 |
+
213 =>
|
2580 |
+
array (
|
2581 |
+
44 => -21,
|
2582 |
+
45 => 18,
|
2583 |
+
46 => -21,
|
2584 |
+
86 => -35,
|
2585 |
+
88 => -35,
|
2586 |
+
89 => -72,
|
2587 |
+
221 => -72,
|
2588 |
+
376 => -72,
|
2589 |
+
),
|
2590 |
+
214 =>
|
2591 |
+
array (
|
2592 |
+
44 => -21,
|
2593 |
+
45 => 18,
|
2594 |
+
46 => -21,
|
2595 |
+
86 => -35,
|
2596 |
+
88 => -35,
|
2597 |
+
89 => -72,
|
2598 |
+
221 => -72,
|
2599 |
+
376 => -72,
|
2600 |
+
),
|
2601 |
+
216 =>
|
2602 |
+
array (
|
2603 |
+
44 => -21,
|
2604 |
+
45 => 18,
|
2605 |
+
46 => -21,
|
2606 |
+
65 => -17,
|
2607 |
+
86 => -17,
|
2608 |
+
88 => -35,
|
2609 |
+
89 => -17,
|
2610 |
+
192 => -17,
|
2611 |
+
193 => -17,
|
2612 |
+
194 => -17,
|
2613 |
+
195 => -17,
|
2614 |
+
196 => -17,
|
2615 |
+
221 => -17,
|
2616 |
+
376 => -17,
|
2617 |
+
),
|
2618 |
+
217 =>
|
2619 |
+
array (
|
2620 |
+
65 => -44,
|
2621 |
+
192 => -44,
|
2622 |
+
193 => -44,
|
2623 |
+
194 => -44,
|
2624 |
+
195 => -44,
|
2625 |
+
196 => -44,
|
2626 |
+
),
|
2627 |
+
218 =>
|
2628 |
+
array (
|
2629 |
+
65 => -44,
|
2630 |
+
192 => -44,
|
2631 |
+
193 => -44,
|
2632 |
+
194 => -44,
|
2633 |
+
195 => -44,
|
2634 |
+
196 => -44,
|
2635 |
+
),
|
2636 |
+
219 =>
|
2637 |
+
array (
|
2638 |
+
65 => -44,
|
2639 |
+
192 => -44,
|
2640 |
+
193 => -44,
|
2641 |
+
194 => -44,
|
2642 |
+
195 => -44,
|
2643 |
+
196 => -44,
|
2644 |
+
),
|
2645 |
+
220 =>
|
2646 |
+
array (
|
2647 |
+
65 => -44,
|
2648 |
+
192 => -44,
|
2649 |
+
193 => -44,
|
2650 |
+
194 => -44,
|
2651 |
+
195 => -44,
|
2652 |
+
196 => -44,
|
2653 |
+
),
|
2654 |
+
221 =>
|
2655 |
+
array (
|
2656 |
+
44 => -165,
|
2657 |
+
45 => -146,
|
2658 |
+
46 => -165,
|
2659 |
+
58 => -86,
|
2660 |
+
59 => -86,
|
2661 |
+
65 => -95,
|
2662 |
+
67 => -35,
|
2663 |
+
79 => -35,
|
2664 |
+
97 => -118,
|
2665 |
+
101 => -128,
|
2666 |
+
111 => -128,
|
2667 |
+
117 => -109,
|
2668 |
+
192 => -95,
|
2669 |
+
193 => -95,
|
2670 |
+
194 => -95,
|
2671 |
+
195 => -95,
|
2672 |
+
196 => -95,
|
2673 |
+
199 => -35,
|
2674 |
+
210 => -35,
|
2675 |
+
211 => -35,
|
2676 |
+
212 => -35,
|
2677 |
+
213 => -35,
|
2678 |
+
214 => -35,
|
2679 |
+
216 => -35,
|
2680 |
+
224 => -118,
|
2681 |
+
225 => -118,
|
2682 |
+
226 => -118,
|
2683 |
+
227 => -118,
|
2684 |
+
228 => -118,
|
2685 |
+
229 => -118,
|
2686 |
+
230 => -118,
|
2687 |
+
232 => -128,
|
2688 |
+
233 => -128,
|
2689 |
+
234 => -128,
|
2690 |
+
235 => -128,
|
2691 |
+
242 => -128,
|
2692 |
+
243 => -128,
|
2693 |
+
244 => -128,
|
2694 |
+
245 => -128,
|
2695 |
+
246 => -128,
|
2696 |
+
248 => -128,
|
2697 |
+
249 => -109,
|
2698 |
+
250 => -109,
|
2699 |
+
251 => -109,
|
2700 |
+
252 => -109,
|
2701 |
+
262 => -35,
|
2702 |
+
268 => -35,
|
2703 |
+
283 => -128,
|
2704 |
+
338 => -58,
|
2705 |
+
339 => -128,
|
2706 |
+
367 => -109,
|
2707 |
+
8218 => -183,
|
2708 |
+
8222 => -197,
|
2709 |
+
),
|
2710 |
+
224 =>
|
2711 |
+
array (
|
2712 |
+
121 => -30,
|
2713 |
+
253 => -30,
|
2714 |
+
255 => -30,
|
2715 |
+
),
|
2716 |
+
225 =>
|
2717 |
+
array (
|
2718 |
+
121 => -30,
|
2719 |
+
253 => -30,
|
2720 |
+
255 => -30,
|
2721 |
+
),
|
2722 |
+
226 =>
|
2723 |
+
array (
|
2724 |
+
121 => -30,
|
2725 |
+
253 => -30,
|
2726 |
+
255 => -30,
|
2727 |
+
),
|
2728 |
+
227 =>
|
2729 |
+
array (
|
2730 |
+
121 => -30,
|
2731 |
+
253 => -30,
|
2732 |
+
255 => -30,
|
2733 |
+
),
|
2734 |
+
228 =>
|
2735 |
+
array (
|
2736 |
+
121 => -30,
|
2737 |
+
253 => -30,
|
2738 |
+
255 => -30,
|
2739 |
+
),
|
2740 |
+
229 =>
|
2741 |
+
array (
|
2742 |
+
121 => -30,
|
2743 |
+
253 => -30,
|
2744 |
+
255 => -30,
|
2745 |
+
),
|
2746 |
+
253 =>
|
2747 |
+
array (
|
2748 |
+
44 => -77,
|
2749 |
+
46 => -91,
|
2750 |
+
),
|
2751 |
+
255 =>
|
2752 |
+
array (
|
2753 |
+
44 => -77,
|
2754 |
+
46 => -91,
|
2755 |
+
),
|
2756 |
+
256 =>
|
2757 |
+
array (
|
2758 |
+
44 => 18,
|
2759 |
+
46 => 18,
|
2760 |
+
58 => 18,
|
2761 |
+
59 => 18,
|
2762 |
+
67 => -30,
|
2763 |
+
79 => -30,
|
2764 |
+
84 => -95,
|
2765 |
+
85 => -44,
|
2766 |
+
86 => -67,
|
2767 |
+
87 => -54,
|
2768 |
+
89 => -114,
|
2769 |
+
99 => -30,
|
2770 |
+
100 => -30,
|
2771 |
+
116 => -54,
|
2772 |
+
118 => -54,
|
2773 |
+
119 => -44,
|
2774 |
+
121 => -72,
|
2775 |
+
199 => -30,
|
2776 |
+
210 => -30,
|
2777 |
+
211 => -30,
|
2778 |
+
212 => -30,
|
2779 |
+
213 => -30,
|
2780 |
+
214 => -30,
|
2781 |
+
216 => -30,
|
2782 |
+
217 => -44,
|
2783 |
+
218 => -44,
|
2784 |
+
219 => -44,
|
2785 |
+
220 => -44,
|
2786 |
+
221 => -114,
|
2787 |
+
231 => -30,
|
2788 |
+
253 => -72,
|
2789 |
+
255 => -72,
|
2790 |
+
262 => -30,
|
2791 |
+
263 => -30,
|
2792 |
+
264 => -30,
|
2793 |
+
265 => -30,
|
2794 |
+
266 => -30,
|
2795 |
+
267 => -30,
|
2796 |
+
268 => -30,
|
2797 |
+
269 => -30,
|
2798 |
+
271 => -30,
|
2799 |
+
273 => -30,
|
2800 |
+
332 => -30,
|
2801 |
+
334 => -30,
|
2802 |
+
336 => -30,
|
2803 |
+
338 => -30,
|
2804 |
+
354 => -95,
|
2805 |
+
355 => -54,
|
2806 |
+
356 => -95,
|
2807 |
+
357 => -54,
|
2808 |
+
360 => -44,
|
2809 |
+
362 => -44,
|
2810 |
+
364 => -44,
|
2811 |
+
366 => -44,
|
2812 |
+
368 => -44,
|
2813 |
+
370 => -44,
|
2814 |
+
372 => -54,
|
2815 |
+
373 => -44,
|
2816 |
+
374 => -114,
|
2817 |
+
375 => -72,
|
2818 |
+
376 => -114,
|
2819 |
+
490 => -30,
|
2820 |
+
492 => -30,
|
2821 |
+
538 => -95,
|
2822 |
+
539 => -54,
|
2823 |
+
558 => -30,
|
2824 |
+
562 => -114,
|
2825 |
+
563 => -72,
|
2826 |
+
7808 => -54,
|
2827 |
+
7809 => -44,
|
2828 |
+
7810 => -54,
|
2829 |
+
7811 => -44,
|
2830 |
+
7812 => -54,
|
2831 |
+
7813 => -44,
|
2832 |
+
7922 => -114,
|
2833 |
+
7923 => -72,
|
2834 |
+
8217 => -123,
|
2835 |
+
8218 => 50,
|
2836 |
+
8221 => -123,
|
2837 |
+
8222 => 50,
|
2838 |
+
),
|
2839 |
+
258 =>
|
2840 |
+
array (
|
2841 |
+
44 => 18,
|
2842 |
+
46 => 18,
|
2843 |
+
58 => 18,
|
2844 |
+
59 => 18,
|
2845 |
+
67 => -30,
|
2846 |
+
79 => -30,
|
2847 |
+
84 => -95,
|
2848 |
+
85 => -44,
|
2849 |
+
86 => -67,
|
2850 |
+
87 => -54,
|
2851 |
+
89 => -114,
|
2852 |
+
99 => -30,
|
2853 |
+
100 => -30,
|
2854 |
+
116 => -54,
|
2855 |
+
118 => -54,
|
2856 |
+
119 => -44,
|
2857 |
+
121 => -72,
|
2858 |
+
199 => -30,
|
2859 |
+
210 => -30,
|
2860 |
+
211 => -30,
|
2861 |
+
212 => -30,
|
2862 |
+
213 => -30,
|
2863 |
+
214 => -30,
|
2864 |
+
216 => -30,
|
2865 |
+
217 => -44,
|
2866 |
+
218 => -44,
|
2867 |
+
219 => -44,
|
2868 |
+
220 => -44,
|
2869 |
+
221 => -114,
|
2870 |
+
231 => -30,
|
2871 |
+
253 => -72,
|
2872 |
+
255 => -72,
|
2873 |
+
262 => -30,
|
2874 |
+
263 => -30,
|
2875 |
+
264 => -30,
|
2876 |
+
265 => -30,
|
2877 |
+
266 => -30,
|
2878 |
+
267 => -30,
|
2879 |
+
268 => -30,
|
2880 |
+
269 => -30,
|
2881 |
+
271 => -30,
|
2882 |
+
273 => -30,
|
2883 |
+
332 => -30,
|
2884 |
+
334 => -30,
|
2885 |
+
336 => -30,
|
2886 |
+
338 => -30,
|
2887 |
+
354 => -95,
|
2888 |
+
355 => -54,
|
2889 |
+
356 => -95,
|
2890 |
+
357 => -54,
|
2891 |
+
360 => -44,
|
2892 |
+
362 => -44,
|
2893 |
+
364 => -44,
|
2894 |
+
366 => -44,
|
2895 |
+
368 => -44,
|
2896 |
+
370 => -44,
|
2897 |
+
372 => -54,
|
2898 |
+
373 => -44,
|
2899 |
+
374 => -114,
|
2900 |
+
375 => -72,
|
2901 |
+
376 => -114,
|
2902 |
+
490 => -30,
|
2903 |
+
492 => -30,
|
2904 |
+
538 => -95,
|
2905 |
+
539 => -54,
|
2906 |
+
558 => -30,
|
2907 |
+
562 => -114,
|
2908 |
+
563 => -72,
|
2909 |
+
7808 => -54,
|
2910 |
+
7809 => -44,
|
2911 |
+
7810 => -54,
|
2912 |
+
7811 => -44,
|
2913 |
+
7812 => -54,
|
2914 |
+
7813 => -44,
|
2915 |
+
7922 => -114,
|
2916 |
+
7923 => -72,
|
2917 |
+
8217 => -123,
|
2918 |
+
8218 => 50,
|
2919 |
+
8221 => -123,
|
2920 |
+
8222 => 50,
|
2921 |
+
),
|
2922 |
+
260 =>
|
2923 |
+
array (
|
2924 |
+
44 => 18,
|
2925 |
+
46 => 18,
|
2926 |
+
58 => 18,
|
2927 |
+
59 => 18,
|
2928 |
+
67 => -30,
|
2929 |
+
79 => -30,
|
2930 |
+
84 => -95,
|
2931 |
+
85 => -44,
|
2932 |
+
86 => -67,
|
2933 |
+
87 => -54,
|
2934 |
+
89 => -114,
|
2935 |
+
99 => -30,
|
2936 |
+
100 => -30,
|
2937 |
+
116 => -54,
|
2938 |
+
118 => -54,
|
2939 |
+
119 => -44,
|
2940 |
+
121 => -72,
|
2941 |
+
199 => -30,
|
2942 |
+
210 => -30,
|
2943 |
+
211 => -30,
|
2944 |
+
212 => -30,
|
2945 |
+
213 => -30,
|
2946 |
+
214 => -30,
|
2947 |
+
216 => -30,
|
2948 |
+
217 => -44,
|
2949 |
+
218 => -44,
|
2950 |
+
219 => -44,
|
2951 |
+
220 => -44,
|
2952 |
+
221 => -114,
|
2953 |
+
231 => -30,
|
2954 |
+
253 => -72,
|
2955 |
+
255 => -72,
|
2956 |
+
262 => -30,
|
2957 |
+
263 => -30,
|
2958 |
+
264 => -30,
|
2959 |
+
265 => -30,
|
2960 |
+
266 => -30,
|
2961 |
+
267 => -30,
|
2962 |
+
268 => -30,
|
2963 |
+
269 => -30,
|
2964 |
+
271 => -30,
|
2965 |
+
273 => -30,
|
2966 |
+
332 => -30,
|
2967 |
+
334 => -30,
|
2968 |
+
336 => -30,
|
2969 |
+
338 => -30,
|
2970 |
+
354 => -95,
|
2971 |
+
355 => -54,
|
2972 |
+
356 => -95,
|
2973 |
+
357 => -54,
|
2974 |
+
360 => -44,
|
2975 |
+
362 => -44,
|
2976 |
+
364 => -44,
|
2977 |
+
366 => -44,
|
2978 |
+
368 => -44,
|
2979 |
+
370 => -44,
|
2980 |
+
372 => -54,
|
2981 |
+
373 => -44,
|
2982 |
+
374 => -114,
|
2983 |
+
375 => -72,
|
2984 |
+
376 => -114,
|
2985 |
+
490 => -30,
|
2986 |
+
492 => -30,
|
2987 |
+
538 => -95,
|
2988 |
+
539 => -54,
|
2989 |
+
558 => -30,
|
2990 |
+
562 => -114,
|
2991 |
+
563 => -72,
|
2992 |
+
7808 => -54,
|
2993 |
+
7809 => -44,
|
2994 |
+
7810 => -54,
|
2995 |
+
7811 => -44,
|
2996 |
+
7812 => -54,
|
2997 |
+
7813 => -44,
|
2998 |
+
7922 => -114,
|
2999 |
+
7923 => -72,
|
3000 |
+
8217 => -123,
|
3001 |
+
8218 => 50,
|
3002 |
+
8221 => -123,
|
3003 |
+
8222 => 50,
|
3004 |
+
),
|
3005 |
+
262 =>
|
3006 |
+
array (
|
3007 |
+
83 => -35,
|
3008 |
+
346 => -35,
|
3009 |
+
348 => -35,
|
3010 |
+
350 => -35,
|
3011 |
+
352 => -35,
|
3012 |
+
536 => -35,
|
3013 |
+
),
|
3014 |
+
264 =>
|
3015 |
+
array (
|
3016 |
+
83 => -35,
|
3017 |
+
346 => -35,
|
3018 |
+
348 => -35,
|
3019 |
+
350 => -35,
|
3020 |
+
352 => -35,
|
3021 |
+
536 => -35,
|
3022 |
+
),
|
3023 |
+
266 =>
|
3024 |
+
array (
|
3025 |
+
83 => -35,
|
3026 |
+
346 => -35,
|
3027 |
+
348 => -35,
|
3028 |
+
350 => -35,
|
3029 |
+
352 => -35,
|
3030 |
+
536 => -35,
|
3031 |
+
),
|
3032 |
+
268 =>
|
3033 |
+
array (
|
3034 |
+
83 => -35,
|
3035 |
+
346 => -35,
|
3036 |
+
348 => -35,
|
3037 |
+
350 => -35,
|
3038 |
+
352 => -35,
|
3039 |
+
536 => -35,
|
3040 |
+
),
|
3041 |
+
270 =>
|
3042 |
+
array (
|
3043 |
+
45 => 18,
|
3044 |
+
89 => -77,
|
3045 |
+
221 => -77,
|
3046 |
+
374 => -77,
|
3047 |
+
376 => -77,
|
3048 |
+
562 => -77,
|
3049 |
+
7922 => -77,
|
3050 |
+
8218 => -17,
|
3051 |
+
8222 => -17,
|
3052 |
+
),
|
3053 |
+
272 =>
|
3054 |
+
array (
|
3055 |
+
45 => 18,
|
3056 |
+
89 => -77,
|
3057 |
+
221 => -77,
|
3058 |
+
374 => -77,
|
3059 |
+
376 => -77,
|
3060 |
+
562 => -77,
|
3061 |
+
7922 => -77,
|
3062 |
+
8218 => -17,
|
3063 |
+
8222 => -17,
|
3064 |
+
),
|
3065 |
+
286 =>
|
3066 |
+
array (
|
3067 |
+
84 => -17,
|
3068 |
+
89 => -40,
|
3069 |
+
221 => -40,
|
3070 |
+
356 => -17,
|
3071 |
+
376 => -40,
|
3072 |
+
),
|
3073 |
+
313 =>
|
3074 |
+
array (
|
3075 |
+
79 => -35,
|
3076 |
+
84 => -165,
|
3077 |
+
85 => -54,
|
3078 |
+
86 => -137,
|
3079 |
+
87 => -86,
|
3080 |
+
89 => -155,
|
3081 |
+
121 => -123,
|
3082 |
+
210 => -35,
|
3083 |
+
211 => -35,
|
3084 |
+
212 => -35,
|
3085 |
+
213 => -35,
|
3086 |
+
214 => -35,
|
3087 |
+
216 => -35,
|
3088 |
+
217 => -54,
|
3089 |
+
218 => -54,
|
3090 |
+
219 => -54,
|
3091 |
+
220 => -54,
|
3092 |
+
221 => -155,
|
3093 |
+
253 => -123,
|
3094 |
+
255 => -123,
|
3095 |
+
338 => -35,
|
3096 |
+
356 => -165,
|
3097 |
+
366 => -54,
|
3098 |
+
376 => -155,
|
3099 |
+
8217 => -248,
|
3100 |
+
8221 => -257,
|
3101 |
+
),
|
3102 |
+
317 =>
|
3103 |
+
array (
|
3104 |
+
79 => -35,
|
3105 |
+
84 => -165,
|
3106 |
+
85 => -54,
|
3107 |
+
86 => -137,
|
3108 |
+
87 => -86,
|
3109 |
+
89 => -155,
|
3110 |
+
121 => -123,
|
3111 |
+
210 => -35,
|
3112 |
+
211 => -35,
|
3113 |
+
212 => -35,
|
3114 |
+
213 => -35,
|
3115 |
+
214 => -35,
|
3116 |
+
216 => -35,
|
3117 |
+
217 => -54,
|
3118 |
+
218 => -54,
|
3119 |
+
219 => -54,
|
3120 |
+
220 => -54,
|
3121 |
+
221 => -155,
|
3122 |
+
253 => -123,
|
3123 |
+
255 => -123,
|
3124 |
+
338 => -35,
|
3125 |
+
356 => -165,
|
3126 |
+
366 => -54,
|
3127 |
+
376 => -155,
|
3128 |
+
8217 => -248,
|
3129 |
+
8221 => -257,
|
3130 |
+
),
|
3131 |
+
320 =>
|
3132 |
+
array (
|
3133 |
+
108 => -3,
|
3134 |
+
),
|
3135 |
+
321 =>
|
3136 |
+
array (
|
3137 |
+
79 => -35,
|
3138 |
+
84 => -165,
|
3139 |
+
85 => -35,
|
3140 |
+
86 => -137,
|
3141 |
+
87 => -77,
|
3142 |
+
89 => -155,
|
3143 |
+
121 => -123,
|
3144 |
+
210 => -35,
|
3145 |
+
211 => -35,
|
3146 |
+
212 => -35,
|
3147 |
+
213 => -35,
|
3148 |
+
214 => -35,
|
3149 |
+
216 => -35,
|
3150 |
+
217 => -35,
|
3151 |
+
218 => -35,
|
3152 |
+
219 => -35,
|
3153 |
+
220 => -35,
|
3154 |
+
221 => -155,
|
3155 |
+
253 => -123,
|
3156 |
+
255 => -123,
|
3157 |
+
338 => -35,
|
3158 |
+
356 => -165,
|
3159 |
+
366 => -35,
|
3160 |
+
376 => -155,
|
3161 |
+
8217 => -128,
|
3162 |
+
8221 => -128,
|
3163 |
+
),
|
3164 |
+
340 =>
|
3165 |
+
array (
|
3166 |
+
44 => 18,
|
3167 |
+
46 => 18,
|
3168 |
+
84 => -44,
|
3169 |
+
89 => -91,
|
3170 |
+
101 => -49,
|
3171 |
+
111 => -49,
|
3172 |
+
117 => -54,
|
3173 |
+
121 => -63,
|
3174 |
+
221 => -91,
|
3175 |
+
232 => -49,
|
3176 |
+
233 => -49,
|
3177 |
+
234 => -49,
|
3178 |
+
235 => -49,
|
3179 |
+
242 => -49,
|
3180 |
+
243 => -49,
|
3181 |
+
244 => -49,
|
3182 |
+
245 => -49,
|
3183 |
+
246 => -49,
|
3184 |
+
248 => -49,
|
3185 |
+
249 => -54,
|
3186 |
+
250 => -54,
|
3187 |
+
251 => -54,
|
3188 |
+
252 => -54,
|
3189 |
+
253 => -63,
|
3190 |
+
255 => -63,
|
3191 |
+
283 => -49,
|
3192 |
+
339 => -49,
|
3193 |
+
356 => -44,
|
3194 |
+
367 => -54,
|
3195 |
+
376 => -91,
|
3196 |
+
),
|
3197 |
+
341 =>
|
3198 |
+
array (
|
3199 |
+
44 => -146,
|
3200 |
+
46 => -142,
|
3201 |
+
8217 => 41,
|
3202 |
+
8221 => 18,
|
3203 |
+
),
|
3204 |
+
344 =>
|
3205 |
+
array (
|
3206 |
+
44 => 18,
|
3207 |
+
46 => 18,
|
3208 |
+
84 => -44,
|
3209 |
+
89 => -91,
|
3210 |
+
101 => -49,
|
3211 |
+
111 => -49,
|
3212 |
+
117 => -54,
|
3213 |
+
121 => -63,
|
3214 |
+
221 => -91,
|
3215 |
+
232 => -49,
|
3216 |
+
233 => -49,
|
3217 |
+
234 => -49,
|
3218 |
+
235 => -49,
|
3219 |
+
242 => -49,
|
3220 |
+
243 => -49,
|
3221 |
+
244 => -49,
|
3222 |
+
245 => -49,
|
3223 |
+
246 => -49,
|
3224 |
+
248 => -49,
|
3225 |
+
249 => -54,
|
3226 |
+
250 => -54,
|
3227 |
+
251 => -54,
|
3228 |
+
252 => -54,
|
3229 |
+
253 => -63,
|
3230 |
+
255 => -63,
|
3231 |
+
283 => -49,
|
3232 |
+
339 => -49,
|
3233 |
+
356 => -44,
|
3234 |
+
367 => -54,
|
3235 |
+
376 => -91,
|
3236 |
+
),
|
3237 |
+
345 =>
|
3238 |
+
array (
|
3239 |
+
44 => -146,
|
3240 |
+
46 => -142,
|
3241 |
+
8217 => 41,
|
3242 |
+
8221 => 18,
|
3243 |
+
),
|
3244 |
+
350 =>
|
3245 |
+
array (
|
3246 |
+
83 => -35,
|
3247 |
+
350 => -35,
|
3248 |
+
352 => -35,
|
3249 |
+
),
|
3250 |
+
352 =>
|
3251 |
+
array (
|
3252 |
+
83 => -35,
|
3253 |
+
350 => -35,
|
3254 |
+
352 => -35,
|
3255 |
+
),
|
3256 |
+
356 =>
|
3257 |
+
array (
|
3258 |
+
44 => -160,
|
3259 |
+
45 => -146,
|
3260 |
+
46 => -169,
|
3261 |
+
58 => -54,
|
3262 |
+
59 => -54,
|
3263 |
+
65 => -77,
|
3264 |
+
84 => 22,
|
3265 |
+
97 => -118,
|
3266 |
+
99 => -128,
|
3267 |
+
101 => -128,
|
3268 |
+
111 => -128,
|
3269 |
+
114 => -109,
|
3270 |
+
115 => -118,
|
3271 |
+
117 => -128,
|
3272 |
+
119 => -137,
|
3273 |
+
121 => -165,
|
3274 |
+
192 => -77,
|
3275 |
+
193 => -77,
|
3276 |
+
194 => -77,
|
3277 |
+
195 => -77,
|
3278 |
+
196 => -77,
|
3279 |
+
224 => -118,
|
3280 |
+
225 => -118,
|
3281 |
+
226 => -118,
|
3282 |
+
227 => -118,
|
3283 |
+
228 => -118,
|
3284 |
+
229 => -118,
|
3285 |
+
230 => -118,
|
3286 |
+
231 => -128,
|
3287 |
+
232 => -128,
|
3288 |
+
233 => -128,
|
3289 |
+
234 => -128,
|
3290 |
+
235 => -128,
|
3291 |
+
242 => -128,
|
3292 |
+
243 => -128,
|
3293 |
+
244 => -128,
|
3294 |
+
245 => -128,
|
3295 |
+
246 => -128,
|
3296 |
+
248 => -128,
|
3297 |
+
249 => -128,
|
3298 |
+
250 => -128,
|
3299 |
+
251 => -128,
|
3300 |
+
252 => -128,
|
3301 |
+
253 => -165,
|
3302 |
+
255 => -165,
|
3303 |
+
263 => -128,
|
3304 |
+
269 => -128,
|
3305 |
+
283 => -128,
|
3306 |
+
339 => -128,
|
3307 |
+
341 => -109,
|
3308 |
+
345 => -109,
|
3309 |
+
351 => -118,
|
3310 |
+
353 => -118,
|
3311 |
+
356 => 22,
|
3312 |
+
367 => -128,
|
3313 |
+
8218 => -146,
|
3314 |
+
8222 => -146,
|
3315 |
+
),
|
3316 |
+
357 =>
|
3317 |
+
array (
|
3318 |
+
356 => -54,
|
3319 |
+
),
|
3320 |
+
366 =>
|
3321 |
+
array (
|
3322 |
+
65 => -44,
|
3323 |
+
192 => -44,
|
3324 |
+
193 => -44,
|
3325 |
+
194 => -44,
|
3326 |
+
195 => -44,
|
3327 |
+
196 => -44,
|
3328 |
+
366 => -44,
|
3329 |
+
),
|
3330 |
+
376 =>
|
3331 |
+
array (
|
3332 |
+
44 => -165,
|
3333 |
+
45 => -146,
|
3334 |
+
46 => -165,
|
3335 |
+
58 => -86,
|
3336 |
+
59 => -86,
|
3337 |
+
65 => -95,
|
3338 |
+
67 => -35,
|
3339 |
+
79 => -35,
|
3340 |
+
97 => -118,
|
3341 |
+
101 => -128,
|
3342 |
+
111 => -128,
|
3343 |
+
117 => -109,
|
3344 |
+
192 => -95,
|
3345 |
+
193 => -95,
|
3346 |
+
194 => -95,
|
3347 |
+
195 => -95,
|
3348 |
+
196 => -95,
|
3349 |
+
199 => -35,
|
3350 |
+
210 => -35,
|
3351 |
+
211 => -35,
|
3352 |
+
212 => -35,
|
3353 |
+
213 => -35,
|
3354 |
+
214 => -35,
|
3355 |
+
216 => -35,
|
3356 |
+
224 => -118,
|
3357 |
+
225 => -118,
|
3358 |
+
226 => -118,
|
3359 |
+
227 => -118,
|
3360 |
+
228 => -118,
|
3361 |
+
229 => -118,
|
3362 |
+
230 => -118,
|
3363 |
+
232 => -128,
|
3364 |
+
233 => -128,
|
3365 |
+
234 => -128,
|
3366 |
+
235 => -128,
|
3367 |
+
242 => -128,
|
3368 |
+
243 => -128,
|
3369 |
+
244 => -128,
|
3370 |
+
245 => -128,
|
3371 |
+
246 => -128,
|
3372 |
+
248 => -128,
|
3373 |
+
249 => -109,
|
3374 |
+
250 => -109,
|
3375 |
+
251 => -109,
|
3376 |
+
252 => -109,
|
3377 |
+
262 => -35,
|
3378 |
+
268 => -35,
|
3379 |
+
283 => -128,
|
3380 |
+
338 => -58,
|
3381 |
+
339 => -128,
|
3382 |
+
367 => -109,
|
3383 |
+
8218 => -183,
|
3384 |
+
8222 => -197,
|
3385 |
+
),
|
3386 |
+
381 =>
|
3387 |
+
array (
|
3388 |
+
45 => -72,
|
3389 |
+
),
|
3390 |
+
699 =>
|
3391 |
+
array (
|
3392 |
+
65 => -132,
|
3393 |
+
74 => -44,
|
3394 |
+
86 => 18,
|
3395 |
+
89 => 36,
|
3396 |
+
192 => -132,
|
3397 |
+
193 => -132,
|
3398 |
+
194 => -132,
|
3399 |
+
195 => -132,
|
3400 |
+
196 => -132,
|
3401 |
+
198 => -128,
|
3402 |
+
221 => 36,
|
3403 |
+
376 => 36,
|
3404 |
+
),
|
3405 |
+
8208 =>
|
3406 |
+
array (
|
3407 |
+
84 => -146,
|
3408 |
+
86 => -72,
|
3409 |
+
87 => -44,
|
3410 |
+
88 => -100,
|
3411 |
+
89 => -165,
|
3412 |
+
221 => -165,
|
3413 |
+
356 => -146,
|
3414 |
+
376 => -165,
|
3415 |
+
),
|
3416 |
+
8216 =>
|
3417 |
+
array (
|
3418 |
+
65 => -132,
|
3419 |
+
74 => -44,
|
3420 |
+
86 => 18,
|
3421 |
+
89 => 36,
|
3422 |
+
192 => -132,
|
3423 |
+
193 => -132,
|
3424 |
+
194 => -132,
|
3425 |
+
195 => -132,
|
3426 |
+
196 => -132,
|
3427 |
+
198 => -128,
|
3428 |
+
221 => 36,
|
3429 |
+
376 => 36,
|
3430 |
+
),
|
3431 |
+
8218 =>
|
3432 |
+
array (
|
3433 |
+
84 => -220,
|
3434 |
+
86 => -165,
|
3435 |
+
87 => -109,
|
3436 |
+
89 => -202,
|
3437 |
+
221 => -202,
|
3438 |
+
356 => -220,
|
3439 |
+
376 => -202,
|
3440 |
+
),
|
3441 |
+
8220 =>
|
3442 |
+
array (
|
3443 |
+
65 => -128,
|
3444 |
+
74 => -44,
|
3445 |
+
89 => 18,
|
3446 |
+
192 => -128,
|
3447 |
+
193 => -128,
|
3448 |
+
194 => -128,
|
3449 |
+
195 => -128,
|
3450 |
+
196 => -128,
|
3451 |
+
198 => -146,
|
3452 |
+
221 => 18,
|
3453 |
+
376 => 18,
|
3454 |
+
),
|
3455 |
+
8222 =>
|
3456 |
+
array (
|
3457 |
+
84 => -220,
|
3458 |
+
86 => -165,
|
3459 |
+
87 => -109,
|
3460 |
+
89 => -202,
|
3461 |
+
221 => -202,
|
3462 |
+
356 => -220,
|
3463 |
+
376 => -202,
|
3464 |
+
),
|
3465 |
+
42788 =>
|
3466 |
+
array (
|
3467 |
+
44 => -160,
|
3468 |
+
45 => -146,
|
3469 |
+
46 => -169,
|
3470 |
+
58 => -54,
|
3471 |
+
59 => -54,
|
3472 |
+
65 => -77,
|
3473 |
+
84 => 22,
|
3474 |
+
97 => -118,
|
3475 |
+
99 => -128,
|
3476 |
+
101 => -128,
|
3477 |
+
111 => -128,
|
3478 |
+
114 => -109,
|
3479 |
+
115 => -118,
|
3480 |
+
117 => -128,
|
3481 |
+
119 => -137,
|
3482 |
+
121 => -165,
|
3483 |
+
192 => -77,
|
3484 |
+
193 => -77,
|
3485 |
+
194 => -77,
|
3486 |
+
195 => -77,
|
3487 |
+
196 => -77,
|
3488 |
+
224 => -118,
|
3489 |
+
225 => -118,
|
3490 |
+
226 => -118,
|
3491 |
+
227 => -118,
|
3492 |
+
228 => -118,
|
3493 |
+
229 => -118,
|
3494 |
+
230 => -118,
|
3495 |
+
231 => -128,
|
3496 |
+
232 => -128,
|
3497 |
+
233 => -128,
|
3498 |
+
234 => -128,
|
3499 |
+
235 => -128,
|
3500 |
+
242 => -128,
|
3501 |
+
243 => -128,
|
3502 |
+
244 => -128,
|
3503 |
+
245 => -128,
|
3504 |
+
246 => -128,
|
3505 |
+
248 => -128,
|
3506 |
+
249 => -128,
|
3507 |
+
250 => -128,
|
3508 |
+
251 => -128,
|
3509 |
+
252 => -128,
|
3510 |
+
253 => -165,
|
3511 |
+
255 => -165,
|
3512 |
+
263 => -128,
|
3513 |
+
269 => -128,
|
3514 |
+
283 => -128,
|
3515 |
+
339 => -128,
|
3516 |
+
341 => -109,
|
3517 |
+
345 => -109,
|
3518 |
+
351 => -118,
|
3519 |
+
353 => -118,
|
3520 |
+
356 => 22,
|
3521 |
+
367 => -128,
|
3522 |
+
8218 => -146,
|
3523 |
+
8222 => -146,
|
3524 |
+
),
|
3525 |
+
42816 =>
|
3526 |
+
array (
|
3527 |
+
45 => -123,
|
3528 |
+
67 => -63,
|
3529 |
+
79 => -63,
|
3530 |
+
85 => -35,
|
3531 |
+
87 => -26,
|
3532 |
+
101 => -54,
|
3533 |
+
111 => -54,
|
3534 |
+
117 => -54,
|
3535 |
+
121 => -100,
|
3536 |
+
199 => -63,
|
3537 |
+
210 => -63,
|
3538 |
+
211 => -63,
|
3539 |
+
212 => -63,
|
3540 |
+
213 => -63,
|
3541 |
+
214 => -63,
|
3542 |
+
216 => -26,
|
3543 |
+
217 => -35,
|
3544 |
+
218 => -35,
|
3545 |
+
219 => -35,
|
3546 |
+
220 => -35,
|
3547 |
+
232 => -54,
|
3548 |
+
233 => -54,
|
3549 |
+
234 => -54,
|
3550 |
+
235 => -54,
|
3551 |
+
242 => -54,
|
3552 |
+
243 => -54,
|
3553 |
+
244 => -54,
|
3554 |
+
245 => -54,
|
3555 |
+
246 => -54,
|
3556 |
+
248 => -54,
|
3557 |
+
249 => -54,
|
3558 |
+
250 => -54,
|
3559 |
+
251 => -54,
|
3560 |
+
252 => -54,
|
3561 |
+
253 => -100,
|
3562 |
+
255 => -100,
|
3563 |
+
262 => -63,
|
3564 |
+
268 => -63,
|
3565 |
+
283 => -54,
|
3566 |
+
338 => -86,
|
3567 |
+
339 => -54,
|
3568 |
+
366 => -35,
|
3569 |
+
367 => -54,
|
3570 |
+
8218 => 18,
|
3571 |
+
8222 => 18,
|
3572 |
+
),
|
3573 |
+
42817 =>
|
3574 |
+
array (
|
3575 |
+
101 => -35,
|
3576 |
+
111 => -35,
|
3577 |
+
232 => -35,
|
3578 |
+
233 => -35,
|
3579 |
+
234 => -35,
|
3580 |
+
235 => -35,
|
3581 |
+
242 => -35,
|
3582 |
+
243 => -35,
|
3583 |
+
244 => -35,
|
3584 |
+
245 => -35,
|
3585 |
+
246 => -35,
|
3586 |
+
248 => -21,
|
3587 |
+
283 => -35,
|
3588 |
+
339 => -35,
|
3589 |
+
),
|
3590 |
+
61185 =>
|
3591 |
+
array (
|
3592 |
+
61209 => -26,
|
3593 |
+
),
|
3594 |
+
61186 =>
|
3595 |
+
array (
|
3596 |
+
61209 => -50,
|
3597 |
+
),
|
3598 |
+
61187 =>
|
3599 |
+
array (
|
3600 |
+
61209 => -61,
|
3601 |
+
),
|
3602 |
+
61188 =>
|
3603 |
+
array (
|
3604 |
+
61209 => -66,
|
3605 |
+
),
|
3606 |
+
61189 =>
|
3607 |
+
array (
|
3608 |
+
61209 => -26,
|
3609 |
+
),
|
3610 |
+
61191 =>
|
3611 |
+
array (
|
3612 |
+
61209 => -26,
|
3613 |
+
),
|
3614 |
+
61192 =>
|
3615 |
+
array (
|
3616 |
+
61209 => -50,
|
3617 |
+
),
|
3618 |
+
61193 =>
|
3619 |
+
array (
|
3620 |
+
61209 => -61,
|
3621 |
+
),
|
3622 |
+
61194 =>
|
3623 |
+
array (
|
3624 |
+
61209 => -50,
|
3625 |
+
),
|
3626 |
+
61195 =>
|
3627 |
+
array (
|
3628 |
+
61209 => -26,
|
3629 |
+
),
|
3630 |
+
61197 =>
|
3631 |
+
array (
|
3632 |
+
61209 => -26,
|
3633 |
+
),
|
3634 |
+
61198 =>
|
3635 |
+
array (
|
3636 |
+
61209 => -50,
|
3637 |
+
),
|
3638 |
+
61199 =>
|
3639 |
+
array (
|
3640 |
+
61209 => -61,
|
3641 |
+
),
|
3642 |
+
61200 =>
|
3643 |
+
array (
|
3644 |
+
61209 => -50,
|
3645 |
+
),
|
3646 |
+
61201 =>
|
3647 |
+
array (
|
3648 |
+
61209 => -26,
|
3649 |
+
),
|
3650 |
+
61203 =>
|
3651 |
+
array (
|
3652 |
+
61209 => -26,
|
3653 |
+
),
|
3654 |
+
61204 =>
|
3655 |
+
array (
|
3656 |
+
61209 => -66,
|
3657 |
+
),
|
3658 |
+
61205 =>
|
3659 |
+
array (
|
3660 |
+
61209 => -61,
|
3661 |
+
),
|
3662 |
+
61206 =>
|
3663 |
+
array (
|
3664 |
+
61209 => -50,
|
3665 |
+
),
|
3666 |
+
61207 =>
|
3667 |
+
array (
|
3668 |
+
61209 => -26,
|
3669 |
+
),
|
3670 |
+
);
|
3671 |
+
?>
|
readme.md
ADDED
@@ -0,0 +1,19 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
# WooCommerce PDF Invoices
|
2 |
+
|
3 |
+
This is the WooCommerce PDF Invoices Github repository. Browse the source code, add your own issues and keep track of development.
|
4 |
+
|
5 |
+
## Support
|
6 |
+
|
7 |
+
Support can take place on the plugins [support forum](https://wordpress.org/support/plugin/woocommerce-pdf-invoices) on WordPress.org, where I will try to respond as soon as possible.
|
8 |
+
|
9 |
+
## Contributing
|
10 |
+
|
11 |
+
Use the [issue tracker](https://github.com/baselbers/woocommerce-pdf-invoices/issues/new) for enhancement requests or report problems with the source code. Have some fancy code? Fork the repository and send a pull request.
|
12 |
+
|
13 |
+
## Translating
|
14 |
+
|
15 |
+
For adding your translation files the code, add your translation and send a pull request. Read the [WordPress Codex](http://codex.wordpress.org/Translating_WordPress) to learn how to translate a plugin.
|
16 |
+
|
17 |
+
## Tip
|
18 |
+
|
19 |
+
The GitHub App for [Mac](https://mac.github.com) and [Windows](https://windows.github.com) helps managing your forked repository.
|
readme.txt
CHANGED
@@ -3,8 +3,8 @@ Contributors: baaaaas
|
|
3 |
Donate link:
|
4 |
Tags: woocommerce pdf invoices, invoice, generate, pdf, woocommerce, attachment, email, completed order, customer invoice, processing order, attach, automatic, vat, rate, sequential, number
|
5 |
Requires at least: 3.5
|
6 |
-
Tested up to: 4.
|
7 |
-
Stable tag: 2.
|
8 |
License: GPLv2 or later
|
9 |
License URI: http://www.gnu.org/licenses/gpl-2.0.html
|
10 |
|
@@ -16,13 +16,14 @@ This WooCommerce plugin creates customizable PDF invoices for WooCommerce orders
|
|
16 |
= Main features =
|
17 |
- Automatic PDF invoice generation and attachment
|
18 |
- Attach PDF invoice to WooCommerce email type of your choice
|
19 |
-
- Attach PDF invoice to New Order WooCommerce email
|
20 |
- Connect with Google Drive, Egnyte, Dropbox or OneDrive
|
21 |
-
- Many PDF invoice template customization options
|
22 |
-
-
|
23 |
-
-
|
24 |
-
-
|
|
|
25 |
- Resend PDF invoices to customer
|
|
|
26 |
- Without annoying advertisements
|
27 |
|
28 |
Install the plugin and try out all the features, it will simply be awesome.
|
@@ -37,16 +38,17 @@ If you want to add code to the source code, report an issue or request an enhanc
|
|
37 |
|
38 |
= Translating =
|
39 |
|
40 |
-
Contribute a translation on [GitHub](https://github.com/baselbers/woocommerce-pdf-invoices).
|
41 |
|
42 |
== Screenshots ==
|
43 |
|
44 |
1. General settings
|
45 |
2. Template settings
|
46 |
-
3. View or Cancel
|
47 |
-
4. Create
|
48 |
-
5. View
|
49 |
-
6.
|
|
|
50 |
|
51 |
== Installation ==
|
52 |
|
@@ -64,6 +66,20 @@ The manual installation method involves downloading our plugin and uploading it
|
|
64 |
|
65 |
== Changelog ==
|
66 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
67 |
= 2.1.0 - April 8, 2015 =
|
68 |
|
69 |
- Added: Variable products attributes on template
|
3 |
Donate link:
|
4 |
Tags: woocommerce pdf invoices, invoice, generate, pdf, woocommerce, attachment, email, completed order, customer invoice, processing order, attach, automatic, vat, rate, sequential, number
|
5 |
Requires at least: 3.5
|
6 |
+
Tested up to: 4.2
|
7 |
+
Stable tag: 2.2.0
|
8 |
License: GPLv2 or later
|
9 |
License URI: http://www.gnu.org/licenses/gpl-2.0.html
|
10 |
|
16 |
= Main features =
|
17 |
- Automatic PDF invoice generation and attachment
|
18 |
- Attach PDF invoice to WooCommerce email type of your choice
|
|
|
19 |
- Connect with Google Drive, Egnyte, Dropbox or OneDrive
|
20 |
+
- Many PDF invoice template customization options like changing color
|
21 |
+
- WooCommerce order numbering or built-in sequential invoice numbering
|
22 |
+
- Many invoice and date format customization options
|
23 |
+
- Advanced items table with refunds, discounts, different item tax rates columns and more
|
24 |
+
- Manually create or delete PDF invoice
|
25 |
- Resend PDF invoices to customer
|
26 |
+
- Let customers download invoice from there account
|
27 |
- Without annoying advertisements
|
28 |
|
29 |
Install the plugin and try out all the features, it will simply be awesome.
|
38 |
|
39 |
= Translating =
|
40 |
|
41 |
+
Contribute a translation on [GitHub](https://github.com/baselbers/woocommerce-pdf-invoices#translating).
|
42 |
|
43 |
== Screenshots ==
|
44 |
|
45 |
1. General settings
|
46 |
2. Template settings
|
47 |
+
3. View or Cancel invoice from the order page.
|
48 |
+
4. Create new invoice from the order page.
|
49 |
+
5. View invoice from the shop order page.
|
50 |
+
6. Download invoice from account.
|
51 |
+
6. Nice and clean template with refunds, different tax rates, the ability to change the color and more!
|
52 |
|
53 |
== Installation ==
|
54 |
|
66 |
|
67 |
== Changelog ==
|
68 |
|
69 |
+
= 2.2.0 - April 8, 2015 =
|
70 |
+
|
71 |
+
- Added: Download invoice button on My account page
|
72 |
+
- Added: Norwegian language files
|
73 |
+
- Added: Settings sections into settings pages
|
74 |
+
- Added: Checkbox to reset invoice number counter
|
75 |
+
- Added: Refunds on invoice template
|
76 |
+
- Added: Item tax and different total taxes on invoice template
|
77 |
+
- Fixed: Updating plugin removed all invoices -- Invoices into uploads dir
|
78 |
+
- Fixed: Order number not formatted
|
79 |
+
- Fixed: Invoice not viewable and removable in IE on Order details page
|
80 |
+
- Improved: Completely refactored code
|
81 |
+
- Improved: Dutch language file
|
82 |
+
|
83 |
= 2.1.0 - April 8, 2015 =
|
84 |
|
85 |
- Added: Variable products attributes on template
|
tmp/.htaccess
CHANGED
@@ -1 +1 @@
|
|
1 |
-
|
1 |
+
deny from all
|
tmp/index.php
ADDED
File without changes
|