WooCommerce PDF Invoices - Version 2.2.0

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 Icon 128x128 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 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
- #company-logo-wrapper {
 
 
 
 
7
  margin-top: 10px;
8
  position: relative;
9
- width: 300px;
10
  padding: 21px 21px 0 0;
11
  }
12
- #company-logo {
13
  position: relative;
14
- width: inherit;
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: 30px;
25
- width: 30px;
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.1.0
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.1.0
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( 'WPI_NAME', 'WooCommerce PDF Invoices' );
26
- define( 'WPI_DIR', plugin_dir_path( __FILE__ ) );
27
- define( 'WPI_URL', plugins_url( '', __FILE__ ) );
28
- define( 'WPI_TEMPLATES_DIR', plugin_dir_path( __FILE__ ) . 'includes/views/templates/' );
29
- define( 'WPI_TMP_DIR', plugin_dir_path( __FILE__ ) . 'tmp/' );
30
- define( 'WPI_LANG_DIR', basename( dirname( __FILE__ ) ) . '/lang' );
31
-
32
- require_once( WPI_DIR . 'admin/classes/woocommerce-pdf-invoices.php' );
33
- require_once( WPI_DIR . 'admin/classes/wpi-settings.php' );
34
- require_once( WPI_DIR . 'admin/classes/wpi-general-settings.php' );
35
- require_once( WPI_DIR . 'admin/classes/wpi-template-settings.php' );
36
- require_once( WPI_DIR . 'includes/classes/wpi-document.php' );
37
- require_once( WPI_DIR . 'includes/classes/wpi-invoice.php' );
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
38
 
39
  if ( class_exists( 'BE_WooCommerce_PDF_Invoices' ) ) {
40
- new BE_WooCommerce_PDF_Invoices(new WPI_General_Settings(), new WPI_Template_Settings());
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->template_settings['color_theme']; ?>;
 
 
 
124
  }
125
  .foot td.border {
126
- border-bottom: 8px solid <?php echo $this->template_settings['color_theme']; ?>;
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->template_settings['company_logo'] ) ) { ?>
141
- <img class="company-logo" src="<?php echo $this->template_settings['company_logo']; ?>"/>
142
  <?php } else { ?>
143
- <h1 class="company-logo"><?php echo $this->template_settings['company_name']; ?></h1>
144
  <?php } ?>
145
  </td>
146
  <td class="info">
147
- <?php echo nl2br( $this->template_settings['company_address'] ); ?>
148
  </td>
149
  </tr>
150
  </tbody>
@@ -152,12 +181,12 @@
152
  <table class="two-column customer">
153
  <tbody>
154
  <tr>
155
- <td>
156
- <b>Invoice to</b><br/>
157
  <?php echo $this->order->get_formatted_billing_address(); ?>
158
  </td>
159
- <td class="address">
160
- <b>Ship to</b><br/>
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->get_formatted_invoice_number(); ?></span><br/>
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->template_settings['color_theme']; ?>">
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->template_settings['intro_text']; ?></p>
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->template_settings['show_sku'] ) {
191
- $colspan = 3;
192
  echo '<th class="align-left">' . __( "SKU", $this->textdomain ) . '</th>';
193
- } else {
194
- $colspan = 2; }
195
  ?>
196
- <th class="align-left"><?php _e( 'Quantity', $this->textdomain ); ?></th>
197
- <th class="align-left"><?php _e( 'Unit price', $this->textdomain ); ?></th>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
- <?php if( $this->template_settings['show_sku'] ) { ?>
247
- <td><?php echo $product->get_sku(); ?></td>
248
- <?php } ?>
249
- <td><?php echo $item['qty']; ?></td>
250
- <td>
251
- <?php echo wc_price( $this->order->get_item_total( $item, false, true ), array( 'currency' => $this->order->get_order_currency() ) ); ?>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
252
  </td>
253
- <td class="align-right">
254
- <?php echo wc_price( $item['line_total'], array( 'currency' => $this->order->get_order_currency() ) ); ?>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
255
  </td>
256
  </tr>
257
  <?php } ?>
258
  <!-- Space -->
259
  <tr class="space">
260
- <td colspan="<?php echo $colspan; ?>"></td>
261
- <td colspan="2"></td>
262
  </tr>
 
263
  <!-- Discount -->
264
- <?php if( $this->template_settings['show_discount'] && $this->order->get_total_discount != 0 ) { ?>
265
  <tr class="discount after-products">
266
- <td colspan="<?php echo $colspan; ?>"></td>
267
- <td width="25%"><?php _e( 'Discount', $this->textdomain ); ?></td>
268
- <td width="25%" class="align-right"><?php echo wc_price( $this->order->get_total_discount(), array( 'currency' => $this->order->get_order_currency() ) ); ?></td>
269
  </tr>
270
  <?php } ?>
271
  <!-- Shipping -->
272
- <?php if( $this->template_settings['show_shipping'] ) { ?>
273
  <tr class="shipping after-products">
274
- <td colspan="<?php echo $colspan; ?>"></td>
275
- <td width="25%"><?php _e( 'Shipping', $this->textdomain ); ?></td>
276
- <td width="25%" class="align-right"><?php echo wc_price( $this->order->get_total_shipping(), array( 'currency' => $this->order->get_order_currency() ) ); ?></td>
277
  </tr>
278
  <?php } ?>
279
  <!-- Subtotal -->
280
- <?php if( $this->template_settings['show_subtotal'] ) { ?>
281
  <tr class="subtotal after-products">
282
- <td colspan="<?php echo $colspan; ?>"></td>
283
- <td width="25%"><?php _e( 'Subtotal', $this->textdomain ); ?></td>
284
- <td width="25%" class="align-right"><?php echo wc_price( $this->order->get_subtotal(), array( 'currency' => $this->order->get_order_currency() ) ); ?></td>
285
  </tr>
286
  <?php } ?>
287
  <!-- Tax -->
288
- <?php if( $this->template_settings['show_tax'] ) { ?>
289
- <tr class="tax">
290
- <td colspan="<?php echo $colspan; ?>"></td>
291
- <td width="25%"><?php _e( 'Tax', $this->textdomain ); ?></td>
292
- <td width="25%" class="align-right"><?php echo wc_price( $this->order->get_total_tax(), array( 'currency' => $this->order->get_order_currency() ) ); ?></td>
293
- </tr>
 
 
 
 
294
  <?php } ?>
295
  <!-- Total -->
296
- <tr>
297
- <td colspan="<?php echo $colspan; ?>"></td>
298
- <td class="total" width="25%"><?php _e( 'Total', $this->textdomain ); ?></td>
299
- <td class="grand-total align-right" width="25%">
300
- <?php echo wc_price( $this->order->get_total(), array( 'currency' => $this->order->get_order_currency() ) ); ?>
301
- </td>
302
  </tr>
303
- <?php /*<tr>
304
- <td colspan="<?php echo $colspan; ?>"></td>
305
- <td class="refunded" width="25%"><?php _e( 'Refunded', $this->textdomain ); ?></td>
306
- <td class="refunded-total align-right" width="25%">
307
- <?php echo wc_price( $this->order->get_total_refunded() ) ?>
308
- </td>
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 '&ndash;';
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-08 22:39+0100\n"
5
- "PO-Revision-Date: 2015-04-08 22:44+0100\n"
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:152
23
  msgid "General"
24
  msgstr "Algemeen"
25
 
26
- #: admin/classes/woocommerce-pdf-invoices.php:153
27
- #: admin/classes/wpi-template-settings.php:105
28
  msgid "Template"
29
  msgstr ""
30
 
31
- #: admin/classes/woocommerce-pdf-invoices.php:167
 
32
  msgid "Invoices"
33
  msgstr "Facturen"
34
 
35
- #: admin/classes/woocommerce-pdf-invoices.php:262
36
  msgid "PDF Invoice"
37
  msgstr "PDF Factuur"
38
 
39
- #: admin/classes/woocommerce-pdf-invoices.php:290
40
  msgid "Invoiced on:"
41
  msgstr "Gefactureerd op:"
42
 
43
- #: admin/classes/woocommerce-pdf-invoices.php:294
44
  msgid "Invoice number:"
45
  msgstr "Factuurnummer:"
46
 
47
- #: admin/classes/woocommerce-pdf-invoices.php:332
48
  msgid "View invoice"
49
  msgstr "Toon factuur"
50
 
51
- #: admin/classes/woocommerce-pdf-invoices.php:332
52
  msgid "View"
53
  msgstr "Bekijk"
54
 
55
- #: admin/classes/woocommerce-pdf-invoices.php:333
56
  msgid "Cancel invoice"
57
  msgstr "Factuur annuleren"
58
 
59
- #: admin/classes/woocommerce-pdf-invoices.php:333
60
  msgid "Cancel"
61
  msgstr "Annuleer"
62
 
63
- #: admin/classes/woocommerce-pdf-invoices.php:333
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:335
68
  msgid "Create invoice"
69
  msgstr "Maak factuur"
70
 
71
- #: admin/classes/woocommerce-pdf-invoices.php:335
72
  msgid "Create"
73
  msgstr "Aanmaken"
74
 
75
- #: admin/classes/wpi-general-settings.php:74
76
- msgid "General Settings"
77
- msgstr "Algemene Opties"
78
 
79
- #: admin/classes/wpi-general-settings.php:75
80
  msgid "Attach to Email"
81
  msgstr "Voeg toe aan Email"
82
 
83
- #: admin/classes/wpi-general-settings.php:79
84
  msgid "Processing order"
85
  msgstr "Bestelling wordt verwerkt"
86
 
87
- #: admin/classes/wpi-general-settings.php:83
88
  msgid "Completed order"
89
  msgstr "Bestelling voltooid"
90
 
91
- #: admin/classes/wpi-general-settings.php:87
92
  msgid "Customer invoice"
93
  msgstr "Klant factuur"
94
 
95
- #: admin/classes/wpi-general-settings.php:91
96
  msgid "Attach to New order Email"
97
  msgstr "Voeg toe aan New order Email"
98
 
99
- #: admin/classes/wpi-general-settings.php:92
100
- msgid "Automatically send invoice to Google Drive, Egnyte, Dropbox or OneDrive"
101
- msgstr "Verzend automatisch naar Google Drive, Egnyte, Dropbox of OneDrive"
102
 
103
- #: admin/classes/wpi-general-settings.php:93
104
  msgid "Email It In account"
105
  msgstr ""
106
 
107
- #: admin/classes/wpi-general-settings.php:133
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 "Enter your %s account."
119
- msgstr "Het %s account."
120
 
121
- #: admin/classes/wpi-general-settings.php:184
122
- msgid "Invalid type of Email."
123
- msgstr "Ongeldig type Email."
124
 
125
- #: admin/classes/wpi-general-settings.php:197
126
- #: admin/classes/wpi-general-settings.php:210
127
- #: admin/classes/wpi-template-settings.php:658
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/wpi-general-settings.php:223
132
- msgid "Invalid Email address."
133
- msgstr "Ongeldig Emailadres."
 
 
 
 
 
134
 
135
- #: admin/classes/wpi-settings.php:92
136
- msgid "Allowed tags: "
137
- msgstr "Toegestane tags: "
138
 
139
- #: admin/classes/wpi-template-settings.php:104
140
- msgid "Template Settings"
141
- msgstr "Template Opties"
142
 
143
- #: admin/classes/wpi-template-settings.php:106
144
  msgid "Color theme"
145
  msgstr "Kleur thema"
146
 
147
- #: admin/classes/wpi-template-settings.php:107
 
 
 
 
 
 
 
 
 
148
  msgid "Company name"
149
  msgstr "Bedrijfsnaam"
150
 
151
- #: admin/classes/wpi-template-settings.php:108
152
  msgid "Company logo"
153
  msgstr "Bedrijfslogo"
154
 
155
- #: admin/classes/wpi-template-settings.php:109
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/wpi-template-settings.php:111
164
  msgid "Company details"
165
  msgstr "Algemene bedrijfsgegevens"
166
 
167
- #: admin/classes/wpi-template-settings.php:112
 
 
 
 
168
  msgid "Terms & conditions, policies etc."
169
  msgstr "Algemene voorwaarden"
170
 
171
- #: admin/classes/wpi-template-settings.php:113
172
- msgid "Invoice number type"
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/wpi-template-settings.php:261
247
  msgid "WooCommerce order number"
248
  msgstr "WooCommerce ordernummer"
249
 
250
- #: admin/classes/wpi-template-settings.php:262
251
  msgid "Sequential number"
252
  msgstr "Volgnummer"
253
 
254
- #: admin/classes/wpi-template-settings.php:354
255
- msgid "Invoice number to use for next invoice."
256
- msgstr "Factuurnummer te gebruiken voor de volgende factuur."
257
 
258
- #: admin/classes/wpi-template-settings.php:370
259
- msgid "Number of zero digits."
260
- msgstr "Aantal nullen."
261
-
262
- #: admin/classes/wpi-template-settings.php:384
263
- msgid "Prefix text for the invoice number. Not required."
264
- msgstr "Voorvoegsel van het factuurnummer is niet verplicht."
 
 
 
265
 
266
- #: admin/classes/wpi-template-settings.php:398
267
- msgid "Suffix text for the invoice number. Not required."
268
- msgstr "Achtervoegsel van het factuurnummer is niet verplicht."
269
 
270
- #: admin/classes/wpi-template-settings.php:412
271
- #, php-format
272
- msgid "Available placeholder are %s %s %s %s and %s. %s is required."
273
- msgstr "Beschikbare aanduidingen zijn %s %s %s %s of %s. %s is verplicht."
274
 
275
- #: admin/classes/wpi-template-settings.php:426
276
- msgid "Reset on the first of January."
277
- msgstr "Reset op de eerste van januari."
278
 
279
- #: admin/classes/wpi-template-settings.php:440
280
- #, php-format
281
- msgid "%sFormat%s of the date. Examples: %s or %s."
282
- msgstr "%sFormat%s van de datum. Bijvoorbeeld: %s of %s."
283
 
284
- #: admin/classes/wpi-template-settings.php:454
285
  #, php-format
286
- msgid "Order date %sformat%s. Examples: %s or %s."
287
- msgstr "Notatie %sbestellingsdatum%s. Voorbeelden: %s of %s."
 
 
 
 
288
 
289
- #: admin/classes/wpi-template-settings.php:501
290
- msgid "Invalid template."
291
- msgstr "Ongeldige template."
292
 
293
- #: admin/classes/wpi-template-settings.php:516
294
- msgid "Invalid color theme code."
295
- msgstr "Ongeldige kleurcode."
296
 
297
- #: admin/classes/wpi-template-settings.php:529
298
- msgid "Invalid company name."
299
- msgstr "Ongeldige bedsrijfsnaam."
300
 
301
- #: admin/classes/wpi-template-settings.php:557
302
- msgid "Invalid input into one of the textarea's."
303
- msgstr "Ongeldige invoer in een van de textarea's."
304
 
305
- #: admin/classes/wpi-template-settings.php:568
306
- msgid "Invalid type of invoice number."
307
- msgstr "Ongeldig type factuurnummer."
308
 
309
- #: admin/classes/wpi-template-settings.php:581
310
- msgid "Invalid (next) invoice number."
311
- msgstr "Ongeldig (eerstvolgend) factuurnummer."
312
 
313
- #: admin/classes/wpi-template-settings.php:602
314
- msgid "Invalid invoice number digits."
315
- msgstr "Ongeldige factuurnummer cijfers."
316
 
317
- #: admin/classes/wpi-template-settings.php:624
318
- msgid "The [number] placeholder is required as invoice number format."
319
- msgstr "De aanduiding [number] is vereist."
320
 
321
- #: admin/classes/wpi-template-settings.php:631
322
- msgid "Invalid invoice number format."
323
- msgstr "Ongeldig factuurnummer format."
324
 
325
- #: admin/classes/wpi-template-settings.php:669
326
- msgid "Invalid date format."
327
- msgstr "Ongeldige datumnotatie."
328
 
329
- #: admin/classes/wpi-template-settings.php:698
330
  msgid "File is invalid and contains either '..' or './'."
331
  msgstr "Bestand is niet valide en bevat ofwel '..' of './'."
332
 
333
- #: admin/classes/wpi-template-settings.php:705
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/wpi-template-settings.php:714
338
- msgid "Please upload image with extension jpg, jpeg or png."
339
- msgstr "Gelieve te uploaden een afbeelding met extensie jpg, jpeg of png."
340
 
341
- #: includes/classes/wpi-invoice.php:213
342
  msgid "Customer note"
343
  msgstr "Opmerking klant"
344
 
345
- #: includes/classes/wpi-invoice.php:226
346
  #, php-format
347
  msgid "%sPayment%s via"
348
  msgstr "%sBetaling%s met"
349
 
350
- #: includes/views/templates/invoice-micro.php:170
 
 
 
 
 
 
 
 
351
  msgid "Invoice"
352
  msgstr "Factuur"
353
 
354
- #: includes/views/templates/invoice-micro.php:173
355
  #, php-format
356
  msgid "Order Number %s"
357
  msgstr "Bestelnummer %s"
358
 
359
- #: includes/views/templates/invoice-micro.php:174
360
  #, php-format
361
  msgid "Order Date %s"
362
  msgstr "Besteldatum: %s"
363
 
364
- #: includes/views/templates/invoice-micro.php:188
365
  msgid "Description"
366
  msgstr "Beschrijving"
367
 
368
- #: includes/views/templates/invoice-micro.php:192
369
  msgid "SKU"
370
  msgstr "Productcode"
371
 
372
- #: includes/views/templates/invoice-micro.php:196
373
- msgid "Quantity"
 
 
 
 
374
  msgstr "Aantal"
375
 
376
- #: includes/views/templates/invoice-micro.php:197
377
- msgid "Unit price"
378
- msgstr "Prijs per stuk"
379
 
380
- #: includes/views/templates/invoice-micro.php:198
381
- #: includes/views/templates/invoice-micro.php:298
382
  msgid "Total"
383
  msgstr "Totaal"
384
 
385
- #: includes/views/templates/invoice-micro.php:267
386
  msgid "Discount"
387
  msgstr "Korting"
388
 
389
- #: includes/views/templates/invoice-micro.php:275
390
  msgid "Shipping"
391
  msgstr "Verzending"
392
 
393
- #: includes/views/templates/invoice-micro.php:283
394
  msgid "Subtotal"
395
  msgstr "Subtotaal"
396
 
397
- #: includes/views/templates/invoice-micro.php:291
398
- msgid "Tax"
399
- msgstr "BTW"
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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.1.1
7
- Stable tag: 2.1.0
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
- - Sequential invoice number system
23
- - Customize invoice number format
24
- - Manually (re)create or delete PDF invoice
 
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 the invoice from the order page.
47
- 4. Create a new invoice from the order page.
48
- 5. View the invoice from the shop order page.
49
- 6. Nice and clean invoice template with the ability to change the color.
 
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
- Deny from all
1
+ deny from all
tmp/index.php ADDED
File without changes