├── .editorconfig ├── .eslintignore ├── .github ├── ISSUE_TEMPLATE │ ├── bug_report.md │ └── feature_request.md └── PULL_REQUEST_TEMPLATE.md ├── .gitignore ├── .nvmrc ├── LICENSE ├── README.md ├── admin ├── post-types │ ├── certificate_templates.php │ └── writepanels │ │ ├── writepanel-certificate_data.php │ │ ├── writepanel-certificate_image.php │ │ ├── writepanel-course_data.php │ │ └── writepanels-init.php └── woothemes-sensei-certificate-templates-admin-init.php ├── assets ├── blocks │ ├── index.js │ └── view-certificate-link │ │ ├── block.json │ │ ├── index.js │ │ └── view-certificate-link-edit.js ├── css │ ├── admin.scss │ └── frontend.scss ├── images │ ├── certificate-logo.png │ ├── certificate.png │ ├── certificate_template.png │ └── sensei_certificate_nograde.png └── js │ ├── admin.js │ └── course.js ├── changelog.txt ├── classes ├── background-jobs │ └── class-sensei-certificates-create-certificates.php ├── blocks │ └── class-woothemes-sensei-certificates-view-certificate-link-block.php ├── class-sensei-certificate-data-cleaner.php ├── class-vip-tfpdf.php ├── class-woothemes-sensei-certificate-templates.php ├── class-woothemes-sensei-certificates-data-store.php ├── class-woothemes-sensei-certificates-dependency-checker.php ├── class-woothemes-sensei-certificates-tfpdf.php ├── class-woothemes-sensei-certificates-utils.php ├── class-woothemes-sensei-certificates.php ├── class-woothemes-sensei-pdf-certificate.php └── tools │ ├── class-sensei-certificates-tool-create-certificates.php │ └── class-sensei-certificates-tool-create-default-example-template.php ├── composer.json ├── composer.lock ├── lang ├── sensei-certificates-de_DE.mo ├── sensei-certificates-de_DE.po ├── sensei-certificates-fr_FR.mo ├── sensei-certificates-fr_FR.po ├── sensei-certificates-hu_HU.mo ├── sensei-certificates-hu_HU.po ├── sensei-certificates-ru_RU.mo ├── sensei-certificates-ru_RU.po └── sensei-certificates.pot ├── lib └── tfpdf │ ├── FPDFException.php │ ├── font │ ├── courier.php │ ├── courierb.php │ ├── courierbi.php │ ├── courieri.php │ ├── helvetica.php │ ├── helveticab.php │ ├── helveticabi.php │ ├── helveticai.php │ ├── symbol.php │ ├── times.php │ ├── timesb.php │ ├── timesbi.php │ ├── timesi.php │ ├── unifont │ │ ├── DejaVuSans-Bold.ttf │ │ ├── DejaVuSans-BoldOblique.ttf │ │ ├── DejaVuSans-ExtraLight.ttf │ │ ├── DejaVuSans-Oblique.ttf │ │ ├── DejaVuSans.ttf │ │ ├── DejaVuSansCondensed-Bold.ttf │ │ ├── DejaVuSansCondensed-BoldOblique.ttf │ │ ├── DejaVuSansCondensed-Oblique.ttf │ │ ├── DejaVuSansCondensed.ttf │ │ ├── DejaVuSansMono-Bold.ttf │ │ ├── DejaVuSansMono-BoldOblique.ttf │ │ ├── DejaVuSansMono-Oblique.ttf │ │ ├── DejaVuSansMono.ttf │ │ ├── DejaVuSerif-Bold.ttf │ │ ├── DejaVuSerif-BoldItalic.ttf │ │ ├── DejaVuSerif-Italic.ttf │ │ ├── DejaVuSerif.ttf │ │ ├── DejaVuSerifCondensed-Bold.ttf │ │ ├── DejaVuSerifCondensed-BoldItalic.ttf │ │ ├── DejaVuSerifCondensed-Italic.ttf │ │ ├── DejaVuSerifCondensed.ttf │ │ ├── DejaVu_LICENSE.txt │ │ ├── dejavusans-bold-character-width-127.php │ │ ├── dejavusans-bold-character-widths.dat │ │ ├── dejavusans-bold-font-metrics.php │ │ ├── dejavusans-boldoblique-character-width-127.php │ │ ├── dejavusans-boldoblique-character-widths.dat │ │ ├── dejavusans-boldoblique-font-metrics.php │ │ ├── dejavusans-character-width-127.php │ │ ├── dejavusans-character-widths.dat │ │ ├── dejavusans-extralight-character-width-127.php │ │ ├── dejavusans-extralight-character-widths.dat │ │ ├── dejavusans-extralight-font-metrics.php │ │ ├── dejavusans-font-metrics.php │ │ ├── dejavusans-oblique-character-width-127.php │ │ ├── dejavusans-oblique-character-widths.dat │ │ ├── dejavusans-oblique-font-metrics.php │ │ ├── dejavusanscondensed-bold-character-width-127.php │ │ ├── dejavusanscondensed-bold-character-widths.dat │ │ ├── dejavusanscondensed-bold-font-metrics.php │ │ ├── dejavusanscondensed-boldoblique-character-width-127.php │ │ ├── dejavusanscondensed-boldoblique-character-widths.dat │ │ ├── dejavusanscondensed-boldoblique-font-metrics.php │ │ ├── dejavusanscondensed-character-width-127.php │ │ ├── dejavusanscondensed-character-widths.dat │ │ ├── dejavusanscondensed-font-metrics.php │ │ ├── dejavusanscondensed-oblique-character-width-127.php │ │ ├── dejavusanscondensed-oblique-character-widths.dat │ │ ├── dejavusanscondensed-oblique-font-metrics.php │ │ ├── dejavusansmono-bold-character-width-127.php │ │ ├── dejavusansmono-bold-character-widths.dat │ │ ├── dejavusansmono-bold-font-metrics.php │ │ ├── dejavusansmono-boldoblique-character-width-127.php │ │ ├── dejavusansmono-boldoblique-character-widths.dat │ │ ├── dejavusansmono-boldoblique-font-metrics.php │ │ ├── dejavusansmono-character-width-127.php │ │ ├── dejavusansmono-character-widths.dat │ │ ├── dejavusansmono-font-metrics.php │ │ ├── dejavusansmono-oblique-character-width-127.php │ │ ├── dejavusansmono-oblique-character-widths.dat │ │ ├── dejavusansmono-oblique-font-metrics.php │ │ ├── dejavuserif-bold-character-width-127.php │ │ ├── dejavuserif-bold-character-widths.dat │ │ ├── dejavuserif-bold-font-metrics.php │ │ ├── dejavuserif-bolditalic-character-width-127.php │ │ ├── dejavuserif-bolditalic-character-widths.dat │ │ ├── dejavuserif-bolditalic-font-metrics.php │ │ ├── dejavuserif-character-width-127.php │ │ ├── dejavuserif-character-widths.dat │ │ ├── dejavuserif-font-metrics.php │ │ ├── dejavuserif-italic-character-width-127.php │ │ ├── dejavuserif-italic-character-widths.dat │ │ ├── dejavuserif-italic-font-metrics.php │ │ ├── dejavuserifcondensed-bold-character-width-127.php │ │ ├── dejavuserifcondensed-bold-character-widths.dat │ │ ├── dejavuserifcondensed-bold-font-metrics.php │ │ ├── dejavuserifcondensed-bolditalic-character-width-127.php │ │ ├── dejavuserifcondensed-bolditalic-character-widths.dat │ │ ├── dejavuserifcondensed-bolditalic-font-metrics.php │ │ ├── dejavuserifcondensed-character-width-127.php │ │ ├── dejavuserifcondensed-character-widths.dat │ │ ├── dejavuserifcondensed-font-metrics.php │ │ ├── dejavuserifcondensed-italic-character-width-127.php │ │ ├── dejavuserifcondensed-italic-character-widths.dat │ │ └── dejavuserifcondensed-italic-font-metrics.php │ └── zapfdingbats.php │ └── tFPDF │ ├── PDF.php │ ├── PDFBarcode.php │ ├── ProtectedPDF.php │ └── TTFontFile.php ├── package-lock.json ├── package.json ├── phpcs.xml.dist ├── readme.txt ├── renovate.json ├── sensei-certificates-functions.php ├── templates └── single-certificate_template.php ├── uninstall.php ├── webpack.config.js └── woothemes-sensei-certificates.php /.editorconfig: -------------------------------------------------------------------------------- 1 | # This file is for unifying the coding style for different editors and IDEs 2 | # editorconfig.org 3 | 4 | # WordPress Coding Standards 5 | # https://make.wordpress.org/core/handbook/coding-standards/ 6 | 7 | root = true 8 | 9 | [*] 10 | charset = utf-8 11 | end_of_line = lf 12 | indent_size = 4 13 | tab_width = 4 14 | indent_style = tab 15 | insert_final_newline = true 16 | trim_trailing_whitespace = true 17 | 18 | [*.txt] 19 | trim_trailing_whitespace = false 20 | 21 | [*.{md,json,yml}] 22 | trim_trailing_whitespace = false 23 | indent_style = space 24 | indent_size = 2 25 | 26 | [{*.txt}] 27 | end_of_line = crlf 28 | -------------------------------------------------------------------------------- /.eslintignore: -------------------------------------------------------------------------------- 1 | /build 2 | /assets/dist 3 | /vendor 4 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/bug_report.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: Bug report 3 | about: Create a report to help us improve 4 | title: '' 5 | labels: "[Type] Bug" 6 | assignees: '' 7 | 8 | --- 9 | 10 | 11 | 12 | ### Steps to Reproduce 13 | 1. Go to '...' 14 | 2. Click on '....' 15 | 3. Scroll down to '....' 16 | 4. See error 17 | 18 | ### What I Expected 19 | 20 | 21 | ### What Happened Instead 22 | 23 | 24 | ### PHP / WordPress / Sensei Certificates / Sensei LMS version 25 | 26 | 27 | ### Browser / OS version 28 | 29 | 30 | ### Screenshot / Video 31 | 32 | 33 | ### Context / Source 34 | 35 | 36 | 37 | 38 | 46 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/feature_request.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: Feature request 3 | about: Suggest an idea for this project 4 | title: '' 5 | labels: "[Type] Enhancement" 6 | assignees: '' 7 | 8 | --- 9 | 10 | 11 | 12 | ### Is your feature request related to a problem? Please describe 13 | A clear and concise description of what the problem is. Ex. I'm always frustrated when [...] 14 | 15 | ### Describe the solution you'd like 16 | A clear and concise description of what you want to happen. 17 | 18 | ### Describe alternatives you've considered 19 | A clear and concise description of any alternative solutions or features you've considered. 20 | 21 | ### Additional context 22 | Add any other context or screenshots about the feature request here. 23 | -------------------------------------------------------------------------------- /.github/PULL_REQUEST_TEMPLATE.md: -------------------------------------------------------------------------------- 1 | Fixes # 2 | 3 | ### Changes proposed in this Pull Request 4 | 5 | * 6 | 7 | ### Testing instructions 8 | 9 | * 10 | 11 | 12 | ### New/Updated Hooks 13 | 14 | * 15 | 16 | 17 | ### Deprecated Code 18 | 19 | * 20 | 21 | 25 | ### Screenshot / Video 26 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | .DS_Store 2 | .idea 3 | node_modules 4 | vendor 5 | build 6 | assets/dist 7 | /*.zip 8 | -------------------------------------------------------------------------------- /.nvmrc: -------------------------------------------------------------------------------- 1 | 18 2 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | Sensei LMS Certificates 2 | ======================= 3 | 4 | Award your students with a certificate of completion and a sense of accomplishment after finishing a course. 5 | -------------------------------------------------------------------------------- /admin/post-types/certificate_templates.php: -------------------------------------------------------------------------------- 1 | '; 91 | $columns['name'] = __( 'Name', 'sensei-certificates' ); 92 | $columns['thumb'] = __( 'Image', 'sensei-certificates' ); 93 | 94 | return $columns; 95 | 96 | } // End certificate_template_edit_certificate_columns() 97 | 98 | 99 | /** 100 | * Custom Column values for certificate templates page 101 | * 102 | * @since 1.0.0 103 | * @param string $column column identifier 104 | */ 105 | function certificate_template_custom_certificate_columns( $column ) { 106 | 107 | global $post; 108 | 109 | switch ( $column ) { 110 | case 'thumb': 111 | $edit_link = get_edit_post_link( $post->ID ); 112 | if ( has_post_thumbnail( $post->ID ) ) { 113 | $image = get_the_post_thumbnail( $post->ID, 'thumb' ); 114 | echo '' . wp_kses_post( $image ) . ''; 115 | } // End If Statement 116 | 117 | break; 118 | 119 | case 'name': 120 | $edit_link = get_edit_post_link( $post->ID ); 121 | $title = _draft_or_post_title(); 122 | 123 | $post_type_object = get_post_type_object( $post->post_type ); 124 | $can_edit_post = current_user_can( $post_type_object->cap->edit_post, $post->ID ); 125 | 126 | echo '' . esc_html( $title ) . ''; 127 | 128 | // display post states a little more selectively than _post_states( $post ); 129 | if ( 'draft' == $post->post_status ) { 130 | echo " - " . esc_html__( 'Draft', 'sensei-certificates' ) . ''; 131 | } // End If Statement 132 | 133 | echo ''; 134 | 135 | // Get actions 136 | $actions = array(); 137 | 138 | $actions['id'] = 'ID: ' . $post->ID; 139 | 140 | if ( current_user_can( $post_type_object->cap->delete_post, $post->ID ) ) { 141 | if ( 'trash' == $post->post_status ) { 142 | $actions['untrash'] = "ID ) ), 'untrash-post_' . $post->ID ) . "'>" . __( 'Restore', 'sensei-certificates' ) . ''; 143 | } elseif ( EMPTY_TRASH_DAYS ) { 144 | $actions['trash'] = "" . __( 'Trash', 'sensei-certificates' ) . ''; 145 | } 146 | if ( 'trash' == $post->post_status || ! EMPTY_TRASH_DAYS ) { 147 | $actions['delete'] = "" . __( 'Delete Permanently', 'sensei-certificates' ) . ''; 148 | } 149 | } // End If Statement 150 | 151 | $actions = apply_filters( 'post_row_actions', $actions, $post ); 152 | 153 | echo '
'; 154 | 155 | $i = 0; 156 | $action_count = count( $actions ); 157 | 158 | foreach ( $actions as $action => $link ) { 159 | ( $action_count - 1 == $i ) ? $sep = '' : $sep = ' | '; 160 | echo '' . wp_kses_post( $link . $sep ) . ''; 161 | $i++; 162 | } // End For Loop 163 | echo '
'; 164 | break; 165 | 166 | } // End Switch Statement 167 | 168 | } // End certificate_template_custom_certificate_columns() 169 | -------------------------------------------------------------------------------- /admin/post-types/writepanels/writepanel-certificate_image.php: -------------------------------------------------------------------------------- 1 | ID, '_image_ids', true ); 52 | 53 | if ( is_array( $image_ids ) && count( $image_ids ) > 0 ) { 54 | 55 | if ( is_numeric( $image_ids[0] ) ) { 56 | 57 | $image_id = $image_ids[0]; 58 | $image_src = wp_get_attachment_url( $image_id ); 59 | $attachment = wp_get_attachment_metadata( $image_id ); 60 | 61 | } 62 | } 63 | 64 | ?> 65 |
66 | 67 |
68 | 69 |

70 | 71 | 72 |

73 | $image_id ) { 101 | 102 | if ( 0 == $i || $image_id ) { 103 | $image_ids[] = $image_id !== 0 ? $image_id : ''; 104 | } 105 | } 106 | 107 | update_post_meta( $post_id, '_image_ids', $image_ids ); 108 | 109 | if ( $image_ids[0] ) { 110 | set_post_thumbnail( $post_id, $image_ids[0] ); 111 | } else { 112 | delete_post_thumbnail( $post_id ); 113 | } 114 | } 115 | -------------------------------------------------------------------------------- /admin/post-types/writepanels/writepanel-course_data.php: -------------------------------------------------------------------------------- 1 | ID, '_course_certificate_template', true ); 52 | 53 | $post_args = array( 54 | 'post_type' => 'certificate_template', 55 | 'post_status' => 'private', 56 | 'numberposts' => -1, 57 | 'orderby' => 'title', 58 | 'order' => 'DESC', 59 | 'exclude' => $post->ID, 60 | 'suppress_filters' => 0, 61 | ); 62 | $posts_array = get_posts( $post_args ); 63 | 64 | $html = ''; 65 | 66 | $html .= ''; 67 | 68 | if ( count( $posts_array ) > 0 ) { 69 | $html .= '' . "\n"; 75 | } else { 76 | if ( ! empty( $select_certificate_template ) ) { 77 | $html .= ''; 78 | } 79 | $html .= '

' . esc_html( __( 'No certificate template exist yet. Please add some first.', 'sensei-certificates' ) ) . '

'; 80 | } 81 | 82 | $allowed_html = [ 83 | 'input' => [ 84 | 'type' => [], 85 | 'name' => [], 86 | 'id' => [], 87 | 'value' => [], 88 | ], 89 | 'select' => [ 90 | 'id' => [], 91 | 'name' => [], 92 | 'class' => [], 93 | ], 94 | 'option' => [ 95 | 'value' => [], 96 | 'selected' => [], 97 | ], 98 | 'p' => [], 99 | ]; 100 | 101 | echo wp_kses( $html, $allowed_html ); 102 | 103 | } 104 | 105 | 106 | /** 107 | * Course Certificate Template Data Save. 108 | * 109 | * Function for processing and storing all course certificate data. 110 | * 111 | * @since 1.0.0 112 | * @param int $post_id The certificate id. 113 | * @param object $post The certificate post object. 114 | */ 115 | function course_certificate_templates_process_meta( $post_id ) { 116 | 117 | global $woothemes_sensei_certificate_templates; 118 | 119 | if ( ( get_post_type() != 'course' ) ) { 120 | return $post_id; 121 | } 122 | 123 | $woothemes_sensei_certificate_templates->save_post_meta( 'course_certificate_template', $post_id ); 124 | 125 | } 126 | -------------------------------------------------------------------------------- /assets/blocks/index.js: -------------------------------------------------------------------------------- 1 | /** 2 | * WordPress dependencies 3 | */ 4 | import { __ } from '@wordpress/i18n'; 5 | import { addFilter } from '@wordpress/hooks'; 6 | import { registerBlockVariation, registerBlockType } from '@wordpress/blocks'; 7 | 8 | /** 9 | * Internal dependencies. 10 | */ 11 | import ViewCertificateLinkBlock from './view-certificate-link'; 12 | 13 | // Register the View Certificate Link block. 14 | registerBlockType( ViewCertificateLinkBlock.name, ViewCertificateLinkBlock ); 15 | 16 | const attributes = { 17 | className: 'view-certificate', 18 | text: __( 'View Certificate', 'sensei-certificates' ), 19 | }; 20 | 21 | registerBlockVariation( 'core/button', { 22 | name: 'sensei-certificates/view-certificate-button', 23 | title: __( 'View Certificate', 'sensei-certificates' ), 24 | description: __( 25 | 'Enable students to view their course certificate.', 26 | 'sensei-certificates' 27 | ), 28 | keywords: [ __( 'Certificates', 'sensei-lms' ) ], 29 | category: 'sensei-lms', 30 | attributes, 31 | isActive: ( blockAttributes, variationAttributes ) => 32 | blockAttributes.className?.match( variationAttributes.className ), 33 | } ); 34 | 35 | const addBlockToTemplate = ( blocks ) => [ 36 | ...blocks, 37 | [ 'core/button', attributes ], 38 | ]; 39 | 40 | // Add this block to the Course Completed Actions block. 41 | addFilter( 42 | 'sensei-lms.Course.completedActions', 43 | 'sensei-certificates', 44 | addBlockToTemplate 45 | ); 46 | 47 | registerBlockVariation( 'core/buttons', { 48 | name: 'sensei-certificates/view-certificate-buttons', 49 | title: __( 'View Certificate', 'sensei-certificates' ), 50 | description: __( 51 | 'A Buttons block with a View Certificate button.', 52 | 'sensei-certificates' 53 | ), 54 | category: 'sensei-lms', 55 | keywords: [ 56 | __( 'Certificate', 'sensei-certificates' ), 57 | __( 'View Certificate', 'sensei-certificates' ), 58 | ], 59 | innerBlocks: [ [ 'core/button', attributes ] ], 60 | } ); 61 | -------------------------------------------------------------------------------- /assets/blocks/view-certificate-link/block.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "https://schemas.wp.org/trunk/block.json", 3 | "apiVersion": 2, 4 | "name": "sensei-certificates/view-certificate-link", 5 | "title": "View Certificate", 6 | "category": "sensei-lms", 7 | "description": "Displays a link to the certificate.", 8 | "textdomain": "sensei-certificates", 9 | "ancestor": [ "sensei-lms/course-list" ], 10 | "usesContext": [ "postType" ], 11 | "example": {} 12 | } 13 | -------------------------------------------------------------------------------- /assets/blocks/view-certificate-link/index.js: -------------------------------------------------------------------------------- 1 | /** 2 | * WordPress dependencies 3 | */ 4 | import { link as icon } from '@wordpress/icons'; 5 | 6 | /** 7 | * Internal dependencies 8 | */ 9 | import edit from './view-certificate-link-edit'; 10 | import metadata from './block.json'; 11 | 12 | export default { 13 | ...metadata, 14 | metadata, 15 | icon, 16 | edit, 17 | }; 18 | -------------------------------------------------------------------------------- /assets/blocks/view-certificate-link/view-certificate-link-edit.js: -------------------------------------------------------------------------------- 1 | /** 2 | * WordPress dependencies 3 | */ 4 | import { useBlockProps, Warning } from '@wordpress/block-editor'; 5 | import { __ } from '@wordpress/i18n'; 6 | 7 | /** 8 | * View Certificate Link block edit component. 9 | * 10 | * @param {Object} props 11 | * @param {Object} props.context Block context. 12 | * @param {Object} props.context.postType Post type. 13 | */ 14 | const ViewCertificateLinkEdit = ( { context: { postType } } ) => { 15 | const blockProps = useBlockProps(); 16 | 17 | if ( ! [ 'course', 'lesson' ].includes( postType ) ) { 18 | return ( 19 |
20 | 21 | { __( 22 | 'The View Certificate Link block can only be used inside the Course List block.', 23 | 'sensei-certificates' 24 | ) } 25 | 26 |
27 | ); 28 | } 29 | 30 | return ( 31 |
32 | { /* eslint-disable-next-line jsx-a11y/anchor-is-valid */ } 33 | { __( 'View Certificate', 'sensei-certificates' ) } 34 |
35 | ); 36 | }; 37 | 38 | export default ViewCertificateLinkEdit; 39 | -------------------------------------------------------------------------------- /assets/css/admin.scss: -------------------------------------------------------------------------------- 1 | #certificate_image_wrapper .certificate_field { 2 | background-color: #CCCCCC; 3 | border: 1px dashed #888888; 4 | opacity: 0.5; 5 | position: absolute; 6 | text-align: center; 7 | } 8 | 9 | .colorpick-form-field { 10 | position:relative; 11 | } 12 | 13 | .certificate_templates_options_panel, .panel { 14 | padding: 9px 9px 9px 9px; 15 | color: #555; 16 | } 17 | 18 | .certificate_templates_options_panel p { 19 | margin: 0 0 9px; 20 | font-size: 12px; 21 | padding: 5px 9px; 22 | line-height: 24px; 23 | clear: both; 24 | } 25 | 26 | 27 | .certificate_templates_options_panel .checkbox { 28 | vertical-align: middle; 29 | margin: 7px 0; 30 | width: auto; 31 | } 32 | .certificate_templates_options_panel p { 33 | margin: 9px 0 9px; 34 | } 35 | 36 | .certificate_templates_options_panel label, legend { 37 | float: left; 38 | width: 150px; 39 | padding: 0; 40 | } 41 | .certificate_templates_options_panel label.req, legend.req { 42 | font-weight: bold; 43 | font-style: normal; 44 | color: red; 45 | } 46 | .certificate_templates_options_panel .description { 47 | padding: 0; 48 | margin: 0 0 0 7px; 49 | } 50 | .certificate_templates_options_panel .description-block { 51 | margin-left: 0; 52 | display: block; 53 | } 54 | .certificate_templates_options_panel textarea, input, select { 55 | margin: 0; 56 | } 57 | .certificate_templates_options_panel textarea { 58 | vertical-align: top; 59 | height: 10.5em; 60 | line-height: 1.5em; 61 | } 62 | .certificate_templates_options_panel input { 63 | width: 50%; 64 | float: left; 65 | } 66 | .certificate_templates_options_panel input.button { 67 | width: auto; 68 | margin-left: 8px; 69 | } 70 | .certificate_templates_options_panel select { 71 | float: left; 72 | } 73 | .certificate_templates_options_panel .short { 74 | width: 20%; 75 | } 76 | .certificate_templates_options_panel .form-field input.medium, .certificate_templates_options_panel .form-field textarea.medium { 77 | width: 40%; 78 | } 79 | .certificate_templates_options_panel .threequarter { 80 | width: 70%; 81 | } 82 | .certificate_templates_options_panel .sized { 83 | width: auto !important; 84 | margin-right: 6px; 85 | } 86 | .certificate_templates_options_panel .options_group { 87 | border-top: 1px solid white; 88 | border-bottom: 1px solid #DFDFDF; 89 | } 90 | .certificate_templates_options_panel .options_group:first-child { 91 | border-top: 0; 92 | } 93 | .certificate_templates_options_panel .options_group:last-child { 94 | border-bottom: 0; 95 | } 96 | .certificate_templates_options_panel .options_group fieldset { 97 | margin: 9px 0; 98 | font-size: 12px; 99 | padding: 5px 9px; 100 | line-height: 24px; 101 | } 102 | .certificate_templates_options_panel .options_group fieldset label { 103 | width: auto; 104 | float: none; 105 | } 106 | .certificate_templates_options_panel .options_group fieldset ul { 107 | float: left; 108 | width: 50%; 109 | margin: 0; 110 | padding: 0; 111 | } 112 | .certificate_templates_options_panel .options_group fieldset ul li { 113 | margin: 0; 114 | width: auto; 115 | } 116 | .certificate_templates_options_panel .options_group fieldset ul li input { 117 | width: auto; 118 | float: none; 119 | margin-right: 4px; 120 | } 121 | 122 | .certificate_templates_options_panel .dimensions_field .wrap input { 123 | margin-right: .2%; 124 | width: 6.6%; 125 | } 126 | .certificate_templates_options_panel .dimensions_field .wrap .last { 127 | margin-right: 0; 128 | } 129 | 130 | 131 | .certificate_templates_options_panel .upload_file_button { 132 | padding-left: 20px; 133 | background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAgAAAAICAYAAADED76LAAAAQ0lEQVQYV3WPUQoAMAhC1+E6tYdrFBgiW185X7biSAGolpkZfN6GJg1CA7ip0CYo+FzxBTqeE/7J1qGAXsTEAdxQfQHJTymZe4oqiAAAAABJRU5ErkJggg==) !important; 134 | background-color: #FEFEFE !important; 135 | background-repeat: no-repeat !important; 136 | background-position: 8px 7px !important; 137 | } 138 | -------------------------------------------------------------------------------- /assets/css/frontend.scss: -------------------------------------------------------------------------------- 1 | .sensei-certificate-link { 2 | float: right; 3 | } 4 | -------------------------------------------------------------------------------- /assets/images/certificate-logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/woocommerce/sensei-certificates/cb1bc6f927de5498af2cbe179754263edb3cff50/assets/images/certificate-logo.png -------------------------------------------------------------------------------- /assets/images/certificate.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/woocommerce/sensei-certificates/cb1bc6f927de5498af2cbe179754263edb3cff50/assets/images/certificate.png -------------------------------------------------------------------------------- /assets/images/certificate_template.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/woocommerce/sensei-certificates/cb1bc6f927de5498af2cbe179754263edb3cff50/assets/images/certificate_template.png -------------------------------------------------------------------------------- /assets/images/sensei_certificate_nograde.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/woocommerce/sensei-certificates/cb1bc6f927de5498af2cbe179754263edb3cff50/assets/images/sensei_certificate_nograde.png -------------------------------------------------------------------------------- /assets/js/admin.js: -------------------------------------------------------------------------------- 1 | jQuery( function ( $ ) { 2 | 'use strict'; 3 | 4 | /** Handler code for the certificate primary image certificate_image_meta_box() **/ 5 | 6 | // save the default WP media browser callback 7 | window.send_to_editor_default = window.send_to_editor; 8 | 9 | // Uploading files 10 | var file_frame; 11 | var el; 12 | 13 | // original image dimensions 14 | var imageWidth = sensei_certificate_templates_params.primary_image_width; 15 | var imageHeight = sensei_certificate_templates_params.primary_image_height; 16 | 17 | $( document ).on( 'click', '#set-certificate-image', function ( event ) { 18 | event.preventDefault(); 19 | 20 | // save the element that was clicked on so we can set the image 21 | el = $( this ); 22 | 23 | // If the media frame already exists, reopen it. 24 | if ( file_frame ) { 25 | file_frame.open(); 26 | return; 27 | } 28 | 29 | // Create the media frame. 30 | file_frame = wp.media.frames.file_frame = wp.media( { 31 | title: 'Select an Image', 32 | button: { 33 | text: 'Set Image', 34 | }, 35 | multiple: false, 36 | } ); 37 | 38 | // When an image is selected, run a callback. 39 | file_frame.on( 'select', function () { 40 | // We set multiple to false so only get one image from the uploader 41 | var attachment = file_frame 42 | .state() 43 | .get( 'selection' ) 44 | .first() 45 | .toJSON(); 46 | 47 | // grab the original image height/width for the image area select 48 | imageWidth = attachment.width; 49 | imageHeight = attachment.height; 50 | 51 | if ( 'set-certificate-image' == el.attr( 'id' ) ) { 52 | // primary (first page) certificate image 53 | $( '#upload_image_id_0' ).val( attachment.id ); 54 | $( '#remove-certificate-image' ).show(); 55 | $( 'img#certificate_image_0' ).attr( 'src', attachment.url ); 56 | } 57 | } ); 58 | 59 | // Finally, open the modal 60 | file_frame.open(); 61 | } ); 62 | 63 | // remove the Certificate Background Image 64 | $( '#remove-certificate-image' ).click( function () { 65 | $( '#upload_image_id_0' ).val( '' ); 66 | $( 'img#certificate_image_0' ).attr( 'src', '' ); 67 | $( this ).hide(); 68 | 69 | return false; 70 | } ); 71 | 72 | // redraw the positioned certificate fields on the primary image as the browser is scaled 73 | $( window ).resize( function () { 74 | redrawCertificateFieldPlaceholders(); 75 | } ); 76 | 77 | // draw any positioned Certificate fields on the primary image 78 | function redrawCertificateFieldPlaceholders() { 79 | $( '.field_pos' ).each( function ( index, el ) { 80 | el = $( el ); 81 | 82 | var id = el.attr( 'id' ); 83 | var field = $( '#field' + id ); 84 | var image = $( '#certificate_image_0' ); 85 | 86 | // if the image is removed, hide all fields 87 | if ( '' == image.attr( 'src' ) ) { 88 | if ( field ) field.hide(); 89 | return; 90 | } 91 | 92 | // is the image resized due to the browser being shrunk? 93 | var scale = 1; 94 | if ( imageWidth != image.width() ) { 95 | scale = image.width() / imageWidth; 96 | } 97 | 98 | // get the scaled field position 99 | var position = el.val() 100 | ? el 101 | .val() 102 | .split( ',' ) 103 | .map( function ( n ) { 104 | return parseInt( n ) * scale; 105 | } ) 106 | : null; 107 | 108 | // create the field element if needed 109 | if ( 0 === field.length ) { 110 | $( '#certificate_image_wrapper' ).append( 111 | '' 116 | ); 117 | 118 | // clicking on the fields allows them to be edited 119 | $( '#field' + id ).click( function ( el ) { 120 | certificate_field_area_select( el.target.id.substr( 6 ) ); // remove the leading 'field_' to create the field name 121 | } ); 122 | 123 | field = $( '#field' + id ); 124 | } 125 | 126 | if ( position ) { 127 | field.css( { 128 | left: position[ 0 ] + 'px', 129 | top: position[ 1 ] + 'px', 130 | width: position[ 2 ] + 'px', 131 | height: position[ 3 ] + 'px', 132 | } ); 133 | field.show(); 134 | } else { 135 | field.hide(); 136 | } 137 | } ); 138 | } 139 | 140 | // initial setup of the field placeholders 141 | redrawCertificateFieldPlaceholders(); 142 | 143 | /** Handler code for the certificate data fields certificate_data_meta_box() **/ 144 | 145 | // Note on the image area select: I have to be very brute force 146 | // with this thing unfortunately and create/remove it with every 147 | // selection start, because otherwise I can't get the thing to 148 | // update the selection position, or to resize properly if the 149 | // browser window is resized. 150 | // And it still doesn't resize the selection box as the image is 151 | // resized due to the browser window shrinking/growing, but oh well 152 | // can't have it all 153 | 154 | var ias; 155 | 156 | // a coordinate field gained focus, enable the image area select overlay on the certificate main image and scroll it into the viewport if needed 157 | $( 'input.set_position' ).click( function () { 158 | certificate_field_area_select( this.id ); 159 | } ); 160 | 161 | // display the imgAreaSelect tool on top of the Certificate Background Image so that the field_name position can be defined 162 | // field_name: ie 'product_name_post' 163 | function certificate_field_area_select( field_name ) { 164 | // no certificate image 165 | if ( ! $( 'img#certificate_image_0' ).attr( 'src' ) ) return; 166 | 167 | // always clear the image select area, if any 168 | removeImgAreaSelect(); 169 | 170 | // clicked 'done', return the button to normal and remove the area select overlay 171 | if ( 172 | $( '#' + field_name ).val() == 173 | sensei_certificate_templates_params.done_label 174 | ) { 175 | $( '#' + field_name ).val( 176 | sensei_certificate_templates_params.set_position_label 177 | ); 178 | return; 179 | } 180 | 181 | // make sure the certificate field placeholder for this field is hidden 182 | $( '#field_' + field_name ).hide(); 183 | 184 | var coords = $( '#_' + field_name ).val() 185 | ? $( '#_' + field_name ) 186 | .val() 187 | .split( ',' ) 188 | .map( function ( n ) { 189 | return parseInt( n ); 190 | } ) 191 | : [ null, null, null, null ]; 192 | 193 | // reset all position set buttons and set the current 194 | $( 'input.set_position' ).val( 195 | sensei_certificate_templates_params.set_position_label 196 | ); 197 | $( '#' + field_name ).val( 198 | sensei_certificate_templates_params.done_label 199 | ); 200 | 201 | // create the image area select element 202 | ias = $( 'img#certificate_image_0' ).imgAreaSelect( { 203 | show: true, 204 | handles: true, 205 | instance: true, 206 | imageWidth: imageWidth, 207 | imageHeight: imageHeight, 208 | x1: coords[ 0 ], 209 | y1: coords[ 1 ], 210 | x2: coords[ 0 ] + coords[ 2 ], 211 | y2: coords[ 1 ] + coords[ 3 ], 212 | onSelectEnd: function ( img, selection ) { 213 | areaSelect( selection, field_name ); 214 | }, 215 | } ); 216 | 217 | // scroll into viewport if needed 218 | if ( 219 | $( document ).scrollTop() > 220 | $( 'img#certificate_image_0' ).offset().top + 221 | $( 'img#certificate_image_0' ).height() * ( 2 / 3 ) 222 | ) { 223 | $( 'html, body' ).animate( 224 | { 225 | scrollTop: $( '#title' ).offset().top, 226 | }, 227 | 500 228 | ); 229 | } 230 | } 231 | 232 | // disable the img area select overlay 233 | function removeImgAreaSelect() { 234 | $( 'img#certificate_image_0' ).imgAreaSelect( { remove: true } ); 235 | redrawCertificateFieldPlaceholders(); 236 | } 237 | 238 | // certificate image selection made, save it to the coordinate field and show the 'remove' button 239 | function areaSelect( selection, field_name ) { 240 | // Element is being drawn if width and height are not 0. 241 | if ( selection && selection.width !== 0 && selection.height !== 0 ) { 242 | $( '#_' + field_name ).val( 243 | selection.x1 + 244 | ',' + 245 | selection.y1 + 246 | ',' + 247 | selection.width + 248 | ',' + 249 | selection.height 250 | ); 251 | } else { 252 | // Otherwise, the user has clicked somewhere on the image. 253 | certificate_field_area_select( field_name ); 254 | } 255 | 256 | $( '#remove_' + field_name ).show(); 257 | } 258 | 259 | // position remove button clicked 260 | $( 'input.remove_position' ).click( function () { 261 | $( this ).hide(); 262 | $( '#_' + this.id.substr( 7 ) ).val( '' ); // remove the coordinates 263 | $( '#' + this.id.substr( 7 ) ).val( 264 | sensei_certificate_templates_params.set_position_label 265 | ); 266 | removeImgAreaSelect(); // make sure the overlay is gone 267 | return; 268 | } ); 269 | 270 | if ( typeof jQuery.fn.hasParent !== 'function' ) { 271 | jQuery.extend( jQuery.fn, { 272 | // Name of our method & one argument (the parent selector) 273 | hasParent: function ( p ) { 274 | // Returns a subset of items using jQuery.filter 275 | return this.filter( function () { 276 | // Return truthy/falsey based on presence in parent 277 | return $( p ).find( this ).length; 278 | } ); 279 | }, 280 | } ); 281 | } 282 | 283 | // Activate colorpick. 284 | const $colorpick = $( '.colorpick' ); 285 | if ( 286 | typeof jQuery.fn.wpColorPicker === 'function' && 287 | $colorpick.length > 0 288 | ) { 289 | $colorpick.wpColorPicker(); 290 | 291 | $( document ).mousedown( function ( e ) { 292 | if ( $( e.target ).hasParent( '.wp-picker-holder' ) ) return; 293 | if ( $( e.target ).hasParent( 'mark' ) ) return; 294 | $( '.wp-picker-holder' ).each( function () { 295 | $( this ).fadeOut(); 296 | } ); 297 | } ); 298 | } 299 | } ); 300 | 301 | // Polyfill 302 | -------------------------------------------------------------------------------- /assets/js/course.js: -------------------------------------------------------------------------------- 1 | jQuery( document ).ready( function ( $ ) { 2 | // Course Write Panel 3 | if ( jQuery( '#course-certificate-template-options' ) ) { 4 | jQuery( '#course-certificate-template-options' ).select2( { 5 | width: '100%', 6 | } ); 7 | } 8 | } ); 9 | -------------------------------------------------------------------------------- /changelog.txt: -------------------------------------------------------------------------------- 1 | *** Changelog *** 2 | 3 | 2024.11.14 - version 2.5.3 4 | * Fix: Adjust the template check for the Certificate Template preview - #362 5 | 6 | 2024.08.08 - version 2.5.2 7 | * New: Add certificate data field hooks - #292 8 | * Fix: Allow certificates to be removed from a course - #353 9 | * Fix: Certificates not rendering on PHP 8.2 - #354 10 | 11 | 2023.09.19 - version 2.5.1 12 | Fix: Missing "View Certificate" link for `sensei_user_courses` shortcode - #348 13 | 14 | 2023.08.24 - version 2.5.0 15 | * New: Display View Certificate button on public learner profile - #341 16 | * Fix: Deprecation notice for creation of dynamic property - #343 17 | 18 | 2023.06.01 - version 2.4.0 19 | * New: Add "View Certificate" link to Course List templates - #327 20 | * New: Bump minimum PHP version to 7.2 21 | * Fix: Error on the certificate page for WP VIP users - #335 22 | * Fix: Report links on the certificates listing - #298 23 | * Fix: Deprecated function warning - #336 24 | 25 | 2022.07.11 - version 2.3.0 26 | * New: Add View Certificate block - #302 27 | * New: Bump minimum PHP version to 7.0 - #293 28 | * New: Add setting to delete data on uninstall - #291 29 | * Fix: Redirect to login when viewing a certificate as a guest - #289 30 | * Fix: Fix warning when accessing certificate - #299 31 | 32 | 2021.08.27 - version 2.2.1 33 | * Tweak: Add View Certificate button to the Course Completed page automatically - #280 34 | * Fix: Don't display View Certificate button if course has no certificate template - #277 35 | 36 | 2021.08.12 - version 2.2.0 37 | * New: Add "View Certificate" button to Course Completed Actions block - #271 38 | 39 | 2021.03.02 - version 2.1.0 40 | * New: Introduce new tools to replace data updates - #254 41 | * Tweak: Update tFPDF version - #149, #256 42 | 43 | 2020.10.27 - version 2.0.7 44 | * Tweak: Remove JS code that references non-existent selectors - #247 45 | * Tweak: Switch to webpack via wordpress-scripts and simplify build - #241 46 | * Tweak: Add missing translator comments - #248 47 | * Fix: Don't encode course title for HTML display in PDF generation - #243 48 | 49 | 2020.08.21 - version 2.0.6 50 | * Fix: Allow line breaks in certificate templates - #239 51 | * Fix: Fix certificate template image functionality - #238 52 | 53 | 2020.07.20 - version 2.0.5 54 | * New: Add German translation - #214 55 | * Fix: Fix dropdown in Certificate Template meta box - #225 56 | 57 | 2020.04.27 - version 2.0.4 58 | * Fix: Fix issues reported by PHPCS - #219 59 | 60 | 2020.04.16 - version 2.0.3 61 | * New: Prepare the plugin to be distributed through WordPress.org - #215 62 | 63 | 2020.03.20 - version 2.0.2 64 | * Fix: Certificate display issue when using non-Latin characters - #211 65 | 66 | 2020.03.12 - version 2.0.1 67 | * New: Rename plugin to Sensei LMS Certificates - #195 68 | * Tweak: Remove certificates and templates from public search queries - #183 69 | * Tweak: Retrieve absolute image path via get_attached_file - #199 70 | * Tweak: Only load CSS on pages that require it - #205 71 | * Tweak: Replace use of deprecated course_query function - #207 72 | * Fix: Ensure font files can be accessed when plugin is copied to another site - #193 73 | * Fix: Localize placeholder text when editing certificate template - #206 74 | * Fix: Don't hide template positioning box when clicking off it - #204 75 | 76 | 2019.04.25 - version 2.0.0 77 | * New: Add dependency check for minimum Sensei (1.11.0) and PHP (5.6) versions - #171 78 | * New: Add certificate link to course completion emails - #174 79 | * New: Add Hungarian translation (@amroland) - #170, #177 80 | * Tweak: Check dependencies and perform the majority of plugin loading tasks after other plugins have loaded - #175 81 | * Tweak: Use Woo header for plugin updates - #172 82 | * Fix: Disable viewing of certificates for courses without a certificate template - #173 83 | 84 | 2018.12.06 - version 1.1.1 85 | * Fixes JavaScript error when editing a certificate template 86 | * Adds additional string escaping throughout the plugin 87 | * Fixes minor issue with restoring trashed certificate templates 88 | * Add translations for Russian and French 89 | 90 | 2018.07.23 - version 1.1.0 91 | * Make date formatting for certificates follow the WP date format by default 92 | * Fix certificates menu position for Teacher users 93 | 94 | 2017.11.01 - version 1.0.17 95 | * Fix fatal on plugin activation 96 | * Remove unnecessary .pot file 97 | * Make placeholders translatable in post_type_setup 98 | 99 | 2017.05.03 - version 1.0.16 100 | * Fix fatal when activating certificates for the first time 101 | 102 | 2017.04.28 - version 1.0.15 103 | * Admin: Allow only teachers and administrators to view admin areas 104 | * Never bundle generated ttf specs from tfpdf 105 | 106 | 2017.04.25 - version 1.0.14 107 | * Fix certificate data update 108 | * Add the Display Name to the admin list table for certificates enhancement 109 | * Fix Errors when previewing a certificate template bug 110 | * Fix the selected admin menu item when editing a certificate template 111 | * Fix Permissions error on certificate learner and course links bug 112 | * Fix PHP 7 Errors/Notices on tfpdf 113 | 114 | 2016.04.29 - version 1.0.13 115 | * Fix - Fixed a deprecated function notice 116 | * Fix - Ensures the certificate background image displays after saving template 117 | 118 | 2016.02.02 - version 1.0.12 119 | * Fix - Ensures certificates can be viewed when set to public 120 | * Fix - Fixed a notice on certificates where background image id was not found 121 | * Fix - Fixed a display issue with the certificate template dropdown 122 | * Tweak - Ensure compatibility with Sensei 1.9 123 | 124 | 2015.06.18 - version 1.0.11 125 | * Fix - Ensure that the certificate view setting can only be seen by the current logged in user 126 | * Tweak - Moved the certificates menu items to their own top level menu 127 | 128 | 2015.06.11 - version 1.0.10 129 | * Fix - Fix the certificate error that occurred when doing manual grading 130 | 131 | 2015.02.10 - version 1.0.9 132 | * Fix - Fixing certificate generation 133 | 134 | 2015.02.01 - version 1.0.8 135 | * Tweak - Updating code for Sensei 1.7 compatibility 136 | 137 | 2014.09.23 - version 1.0.7 138 | * Fix - Visit plugin site link in admin dashboard 404. 139 | * Fix - Fixed certificate orientation if background image is portrait. 140 | * Fix - Fixed a form display issue in the template editor. 141 | * Fix - Removing erroneous Select2 reference. 142 | * Tweak - If first and last name are added, they will be displayed on the certificate instead of the display name. 143 | 144 | 2014.09.16 - version 1.0.6 145 | * Fix - Ensures sensei_certificate_date_format filter applies to all certificates, not just previews. 146 | * Fix - Fixed coding standards warnings. 147 | 148 | 2014.06.23 - version 1.0.5 149 | * Fix - Localizes completion date string to use correct language for month names. 150 | * Fix - Fixes PHP warning when a certificate template has no styles selected. 151 | * Fix - Ensures certificate link displays even if the course has no quizzes (requires Sensei v1.6) 152 | 153 | 2014.04.28 - version 1.0.4 154 | * Update - Adding support for user-defined custom fonts 155 | * Fix - Switching to tFPDF library for PDF generation to handle multibyte character sets (Greek, Arabic, etc.) 156 | * Fix - Making 'View Certificate' link text available for localization 157 | * Fix - Hiding 'View Certificate' link if no certificate template is selected for the course 158 | 159 | 2014.03.04 - version 1.0.3 160 | * Fix - Switching background image to use path instead of URL 161 | /classes/class-woothemes-sensei-certificates.php 162 | 163 | 2014.01.14 - version 1.0.2 164 | * Fix - Removes unnecessary rewrite endpoints, in favour of template_redirect. 165 | /classes/class-woothemes-sensei-certificates.php 166 | 167 | * Fix - Optimise the functionality to control access to, and to generate the certificate. 168 | /classes/class-woothemes-sensei-certificates.php 169 | 170 | * Fix - Ensure the extension doesn't break if a WooCommerce extension is activated. 171 | /woo-includes/woo-functions.php 172 | /woo-includes/class-wc-dependencies.php 173 | 174 | 2013.12.12 - version 1.0.1 175 | * /classes/class-woothemes-sensei-certificate-templates.php - Localization fix 176 | * /classes/class-woothemes-sensei-certificates.php - Localization fix 177 | * /woothemes-sensei-certificates.php - Localization fix 178 | 179 | 2013.12.12 - version 1.0.0 180 | * First release 181 | -------------------------------------------------------------------------------- /classes/background-jobs/class-sensei-certificates-create-certificates.php: -------------------------------------------------------------------------------- 1 | get_offset(); 76 | 77 | if ( ! sensei_update_users_certificate_data( self::BATCH_SIZE, $offset ) ) { 78 | $this->set_offset( $offset + self::BATCH_SIZE ); 79 | } else { 80 | $this->end(); 81 | } 82 | } 83 | 84 | /** 85 | * After the job runs, check to see if it needs to be re-queued for the next batch. 86 | * 87 | * @return bool 88 | */ 89 | public function is_complete() { 90 | return $this->is_complete; 91 | } 92 | 93 | /** 94 | * Set up the job. 95 | */ 96 | public function setup() { 97 | $this->set_offset( 0 ); 98 | } 99 | 100 | /** 101 | * Clean up when a job is finished or has been cancelled. 102 | */ 103 | public function end() { 104 | $this->delete_state(); 105 | $this->is_complete = true; 106 | } 107 | 108 | /** 109 | * Get the progress of the job. 110 | * 111 | * @return false|float 112 | */ 113 | public function get_progress() { 114 | if ( ! $this->has_state() ) { 115 | return false; 116 | } 117 | 118 | $user_count = count_users(); 119 | $total_users = $user_count['total_users']; 120 | $done = min( $this->get_offset(), $user_count ); 121 | 122 | return round( ( $done / $total_users ) * 100 ); 123 | } 124 | 125 | /** 126 | * Is the job currently running? 127 | * 128 | * @return bool True if job is running. 129 | */ 130 | public function is_running() { 131 | return false !== $this->has_state(); 132 | } 133 | 134 | /** 135 | * Set the offset. 136 | * 137 | * @param int $offset Offset for job. 138 | */ 139 | private function set_offset( $offset ) { 140 | $state = $this->get_state(); 141 | $state['offset'] = (int) $offset; 142 | 143 | $this->save_state( $state ); 144 | } 145 | 146 | /** 147 | * Get the offset. 148 | * 149 | * @return int 150 | */ 151 | private function get_offset() { 152 | $state = $this->get_state(); 153 | 154 | return (int) $state['offset']; 155 | } 156 | 157 | /** 158 | * Get the state of the job. 159 | */ 160 | private function get_state() { 161 | $state = get_transient( self::STATE_TRANSIENT ); 162 | 163 | $default_state = array( 164 | 'offset' => 0, 165 | ); 166 | 167 | if ( $state ) { 168 | return array_merge( $default_state, (array) $state ); 169 | } 170 | 171 | return $default_state; 172 | } 173 | 174 | /** 175 | * Set the state for the job. 176 | * 177 | * @param array $state State to set. 178 | */ 179 | private function save_state( $state ) { 180 | set_transient( self::STATE_TRANSIENT, $state, HOUR_IN_SECONDS ); 181 | } 182 | 183 | /** 184 | * Delete the state and end the job. 185 | */ 186 | private function delete_state() { 187 | delete_transient( self::STATE_TRANSIENT ); 188 | } 189 | 190 | /** 191 | * Check if the job has been started and state is set. 192 | */ 193 | private function has_state() { 194 | $state = get_transient( self::STATE_TRANSIENT ); 195 | 196 | return false !== $state; 197 | } 198 | } 199 | -------------------------------------------------------------------------------- /classes/blocks/class-woothemes-sensei-certificates-view-certificate-link-block.php: -------------------------------------------------------------------------------- 1 | [ $this, 'render' ], 25 | ], 26 | WooThemes_Sensei_Certificates::instance()->assets->src_path( 'blocks/view-certificate-link' ) 27 | ); 28 | } 29 | 30 | /** 31 | * Renders View Certificate Link block on the frontend. 32 | * 33 | * @param array $attributes Block attributes. 34 | * @param string $content Inner block content. 35 | * 36 | * @return string HTML of the block. 37 | */ 38 | public function render( array $attributes, string $content ): string { 39 | $course_id = \Sensei_Utils::get_current_course(); 40 | 41 | // Check that the user has completed the course and it has a certificate 42 | // template. 43 | if ( 44 | ! $course_id 45 | || ! get_current_user_id() 46 | || 'course' !== get_post_type( $course_id ) 47 | || ! get_post_meta( $course_id, '_course_certificate_template', true ) 48 | || ! Sensei_Utils::user_completed_course( $course_id, get_current_user_id() ) 49 | ) { 50 | return ''; 51 | } 52 | 53 | $certificate_url = WooThemes_Sensei_Certificates::instance()->get_certificate_url( 54 | $course_id, 55 | get_current_user_id() 56 | ); 57 | 58 | // Ensure the certificate URL exists. 59 | if ( ! $certificate_url ) { 60 | return ''; 61 | } 62 | 63 | $wrapper_attributes = get_block_wrapper_attributes(); 64 | 65 | return sprintf( 66 | '
%3$s
', 67 | $wrapper_attributes, 68 | $certificate_url, 69 | __( 'View Certificate', 'sensei-certificates' ) 70 | ); 71 | } 72 | } 73 | -------------------------------------------------------------------------------- /classes/class-sensei-certificate-data-cleaner.php: -------------------------------------------------------------------------------- 1 | $post_type, 155 | 'post_status' => 'any', 156 | 'numberposts' => -1, 157 | 'fields' => 'ids', 158 | ) 159 | ); 160 | 161 | foreach ( $items as $item ) { 162 | wp_trash_post( $item ); 163 | } 164 | } 165 | } 166 | 167 | /** 168 | * Cleanup data for attachments. 169 | */ 170 | private static function cleanup_attachments() { 171 | global $wpdb; 172 | 173 | foreach ( self::$attachment_guids as $attachment_guid ) { 174 | $attachments = $wpdb->get_results( 175 | $wpdb->prepare( 176 | "SELECT ID FROM $wpdb->posts 177 | WHERE post_type = 'attachment' 178 | AND guid RLIKE %s", 179 | $attachment_guid 180 | ) 181 | ); 182 | 183 | foreach ( $attachments as $attachment ) { 184 | wp_delete_attachment( $attachment->ID ); 185 | } 186 | } 187 | } 188 | 189 | /** 190 | * Cleanup Sensei settings. 191 | */ 192 | private static function cleanup_settings() { 193 | $settings = get_option( 'sensei-settings' ); 194 | 195 | if ( ! $settings ) { 196 | return; 197 | } 198 | 199 | $settings_fields = WooThemes_Sensei_Certificates::instance()->certificates_settings_fields( [] ); 200 | foreach ( $settings_fields as $field_key => $field_data ) { 201 | unset( $settings[ $field_key ] ); 202 | } 203 | 204 | delete_option( 'sensei-settings' ); 205 | update_option( 'sensei-settings', $settings ); 206 | } 207 | 208 | /** 209 | * Cleanup data for options. 210 | */ 211 | private static function cleanup_options() { 212 | foreach ( self::$options as $option ) { 213 | delete_option( $option ); 214 | } 215 | } 216 | 217 | /** 218 | * Cleanup data for user/role capabilities. 219 | */ 220 | private static function cleanup_capabilities() { 221 | global $wp_roles; 222 | 223 | // Remove caps from roles. 224 | $role_names = array_keys( $wp_roles->roles ); 225 | foreach ( $role_names as $role_name ) { 226 | $role = get_role( $role_name ); 227 | self::remove_capabilities( $role ); 228 | } 229 | 230 | // Remove caps from users. 231 | $users = get_users( array() ); 232 | foreach ( $users as $user ) { 233 | self::remove_capabilities( $user ); 234 | } 235 | } 236 | 237 | /** 238 | * Helper method to remove capabilities from a user or role object. 239 | * 240 | * @param (WP_User|WP_Role) $object the user or role object. 241 | */ 242 | private static function remove_capabilities( $object ) { 243 | foreach ( self::$caps as $cap ) { 244 | $object->remove_cap( $cap ); 245 | } 246 | } 247 | 248 | /** 249 | * Cleanup transients from the database. 250 | */ 251 | private static function cleanup_transients() { 252 | global $wpdb; 253 | 254 | foreach ( array( '_transient_', '_transient_timeout_' ) as $prefix ) { 255 | foreach ( self::$transients as $transient ) { 256 | $wpdb->query( 257 | $wpdb->prepare( 258 | "DELETE FROM $wpdb->options WHERE option_name RLIKE %s", 259 | $prefix . $transient 260 | ) 261 | ); 262 | } 263 | } 264 | } 265 | 266 | /** 267 | * Cleanup Sensei user meta from the database. 268 | */ 269 | private static function cleanup_user_meta() { 270 | global $wpdb; 271 | 272 | foreach ( self::$user_meta_keys as $meta_key ) { 273 | $meta_key = str_replace( '%BLOG_PREFIX%', preg_quote( $wpdb->get_blog_prefix(), null ), $meta_key ); 274 | 275 | $wpdb->query( 276 | $wpdb->prepare( 277 | "DELETE FROM $wpdb->usermeta WHERE meta_key RLIKE %s", 278 | $meta_key 279 | ) 280 | ); 281 | } 282 | } 283 | 284 | /** 285 | * Cleanup post meta that doesn't get deleted automatically. 286 | */ 287 | private static function cleanup_post_meta() { 288 | global $wpdb; 289 | 290 | foreach ( self::$post_meta as $post_meta ) { 291 | $wpdb->delete( $wpdb->postmeta, array( 'meta_key' => $post_meta ) ); 292 | } 293 | } 294 | } 295 | -------------------------------------------------------------------------------- /classes/class-vip-tfpdf.php: -------------------------------------------------------------------------------- 1 | init_wp_filesystem(); 17 | } 18 | 19 | private function init_wp_filesystem() { 20 | global $wp_filesystem; 21 | 22 | if ( ! is_a( $wp_filesystem, 'WP_Filesystem_Base' ) ) { 23 | ob_start(); 24 | $creds = request_filesystem_credentials( site_url() ); 25 | ob_end_clean(); 26 | 27 | if ( false === $creds ) { 28 | return new WP_Error( 'fs-init-error', "Couldn't initialize Filesystem" ); 29 | } else { 30 | return wp_filesystem( $creds ); 31 | } 32 | } 33 | 34 | return true; 35 | } 36 | 37 | /** 38 | * This is a thin wrapper around tFPDF's Image method. 39 | * In certain cases direct access to the uploads folder is prohibited, 40 | * or uploaded file might not be physically present (when using WP_Filesystem_SSH2, WP_Filesystem_ftpsockets, etc) 41 | * We get around that by creating the in the system's temporary folder, performing the necessary operations on that file, and then deleting it. 42 | * 43 | * @param string $file full path to the file 44 | * @param [type] $x 45 | * @param [type] $y 46 | * @param integer $w 47 | * @param integer $h 48 | * @param string $type 49 | * @param string $link 50 | * @return void 51 | */ 52 | public function Image( $file = '', $x = null, $y = null, $w = 0, $h = 0, $type = '', $link = '' ) { 53 | global $wp_filesystem; 54 | if ( ! is_writable( sys_get_temp_dir() ) ) { 55 | $this->Error( 'Unable to access the file system' ); 56 | } 57 | 58 | $filestring = $wp_filesystem->get_contents( $file ); 59 | 60 | $file = sys_get_temp_dir() . DIRECTORY_SEPARATOR . basename( $file ); 61 | $fhandle = fopen( $file, 'wb' ); 62 | fwrite( $fhandle, $filestring ); 63 | fclose( $fhandle ); 64 | parent::Image( $file, $x, $y, $w, $h, $type, $link ); 65 | unlink( $file ); 66 | } 67 | 68 | /** 69 | * Throws error. 70 | * 71 | * @param string $str_message 72 | * 73 | * @throws \RuntimeException On error. 74 | */ 75 | private function Error( $str_message ) { 76 | // Fatal error. 77 | throw new \RuntimeException( 'FPDF Error: ' . $str_message ); 78 | } 79 | } 80 | -------------------------------------------------------------------------------- /classes/class-woothemes-sensei-certificates-data-store.php: -------------------------------------------------------------------------------- 1 | 'certificate', 26 | 'post_status' => 'any', 27 | 'posts_per_page' => 1, 28 | 'title' => $certificate_hash, 29 | ) 30 | ); 31 | if ( $certificate_query->have_posts() ) { 32 | return new WP_Error( 'sensei_certificates_duplicate' ); 33 | } 34 | 35 | // Insert custom post type 36 | $cert_args = array( 37 | 'post_author' => intval( $user_id ), 38 | 'post_title' => $certificate_hash, 39 | 'post_name' => $certificate_hash, 40 | 'post_type' => 'certificate', 41 | 'post_status' => 'publish', 42 | ); 43 | $post_id = wp_insert_post( $cert_args, $wp_error = false ); 44 | 45 | if ( ! is_wp_error( $post_id ) ) { 46 | add_post_meta( $post_id, 'course_id', absint( $course_id ) ); 47 | add_post_meta( $post_id, 'learner_id', absint( $user_id ) ); 48 | add_post_meta( $post_id, 'certificate_hash', $certificate_hash ); 49 | } // End If Statement 50 | return $post_id; 51 | } 52 | } 53 | -------------------------------------------------------------------------------- /classes/class-woothemes-sensei-certificates-dependency-checker.php: -------------------------------------------------------------------------------- 1 | =' ); 54 | } 55 | 56 | /** 57 | * Deactivate self. 58 | */ 59 | public static function deactivate_self() { 60 | deactivate_plugins( SENSEI_CERTIFICATES_PLUGIN_BASENAME ); 61 | } 62 | 63 | /** 64 | * Checks for our Sensei dependency. 65 | * 66 | * @return bool 67 | */ 68 | private static function check_sensei() { 69 | if ( ! class_exists( 'Sensei_Main' ) ) { 70 | return false; 71 | } 72 | 73 | // As long as we support 1.x, we need to also check this option. 74 | $legacy_version = get_option( 'woothemes-sensei-version' ); 75 | return version_compare( self::MINIMUM_SENSEI_VERSION, get_option( 'sensei-version', $legacy_version ), '<=' ); 76 | } 77 | 78 | /** 79 | * Adds notice in WP Admin that minimum version of PHP is not met. 80 | * 81 | * @access private 82 | */ 83 | public static function add_php_notice() { 84 | $screen = get_current_screen(); 85 | $valid_screens = array( 'dashboard', 'plugins' ); 86 | 87 | if ( ! current_user_can( 'activate_plugins' ) || ! in_array( $screen->id, $valid_screens, true ) ) { 88 | return; 89 | } 90 | 91 | // translators: %1$s is version of PHP that this plugin requires; %2$s is the version of PHP WordPress is running on. 92 | $message = sprintf( __( 'Sensei LMS Certificates requires a minimum PHP version of %1$s, but you are running %2$s.', 'sensei-certificates' ), self::MINIMUM_PHP_VERSION, phpversion() ); 93 | echo '

'; 94 | echo wp_kses( $message, array( 'strong' => array() ) ); 95 | $php_update_url = 'https://wordpress.org/support/update-php/'; 96 | if ( function_exists( 'wp_get_update_php_url' ) ) { 97 | $php_update_url = wp_get_update_php_url(); 98 | } 99 | printf( 100 | '

%2$s %3$s

', 101 | esc_url( $php_update_url ), 102 | esc_html__( 'Learn more about updating PHP', 'sensei-certificates' ), 103 | /* translators: accessibility text */ 104 | esc_html__( '(opens in a new tab)', 'sensei-certificates' ) 105 | ); 106 | echo '

'; 107 | } 108 | 109 | /** 110 | * Adds the notice in WP Admin that Sensei is required. 111 | * 112 | * @access private 113 | */ 114 | public static function add_sensei_notice() { 115 | $screen = get_current_screen(); 116 | $valid_screens = array( 'dashboard', 'plugins' ); 117 | 118 | if ( ! current_user_can( 'activate_plugins' ) || ! in_array( $screen->id, $valid_screens, true ) ) { 119 | return; 120 | } 121 | 122 | // translators: %1$s is the minimum version number of Sensei that is required. 123 | $message = sprintf( __( 'Sensei LMS Certificates requires that the plugin Sensei (minimum version: %1$s) is installed and activated.', 'sensei-certificates' ), self::MINIMUM_SENSEI_VERSION ); 124 | echo '

'; 125 | echo wp_kses( $message, array( 'strong' => array() ) ); 126 | echo '

'; 127 | } 128 | } 129 | -------------------------------------------------------------------------------- /classes/class-woothemes-sensei-certificates-tfpdf.php: -------------------------------------------------------------------------------- 1 | output(); 48 | } 49 | } 50 | -------------------------------------------------------------------------------- /classes/class-woothemes-sensei-certificates-utils.php: -------------------------------------------------------------------------------- 1 | job = Sensei_Certificates_Create_Certificates::instance(); 31 | 32 | add_action( 'sensei_tools_listing_after_' . $this->get_id(), array( $this, 'add_status_notice' ) ); 33 | } 34 | 35 | /** 36 | * Get the ID of the tool. 37 | * 38 | * @return string 39 | */ 40 | public function get_id() { 41 | return 'sensei-certificates-create-certificates'; 42 | } 43 | 44 | /** 45 | * Get the name of the tool. 46 | * 47 | * @return string 48 | */ 49 | public function get_name() { 50 | return __( 'Create certificates', 'sensei-certificates' ); 51 | } 52 | 53 | /** 54 | * Get the description of the tool. 55 | * 56 | * @return string 57 | */ 58 | public function get_description() { 59 | return __( 'Creates certificates for learners who have already completed Courses.', 'sensei-certificates' ); 60 | } 61 | 62 | /** 63 | * Run the tool. 64 | */ 65 | public function process() { 66 | $this->job->setup(); 67 | 68 | Sensei_Scheduler::instance()->schedule_job( $this->job ); 69 | Sensei_Tools::instance()->add_user_message( __( 'Certificate records will be created in the background.', 'sensei-certificates' ) ); 70 | } 71 | 72 | /** 73 | * Is the tool currently available? 74 | * 75 | * @return bool True if tool is available. 76 | */ 77 | public function is_available() { 78 | return ! $this->job->is_running(); 79 | } 80 | 81 | /** 82 | * Add the status notice when running. 83 | */ 84 | public function add_status_notice() { 85 | if ( ! $this->job->is_running() ) { 86 | return; 87 | } 88 | 89 | echo '

'; 90 | // translators: Placeholder %d is the percentage complete. 91 | echo esc_html( sprintf( __( 'This task is running in the background and is %d%% complete.', 'sensei-certificates' ), $this->job->get_progress() ) ); 92 | echo '

'; 93 | } 94 | } 95 | -------------------------------------------------------------------------------- /classes/tools/class-sensei-certificates-tool-create-default-example-template.php: -------------------------------------------------------------------------------- 1 | add_user_message( __( 'Example certificate template has been created and all courses have been set to use it.', 'sensei-certificates' ) ); 53 | } 54 | 55 | /** 56 | * Is the tool currently available? 57 | * 58 | * @return bool True if tool is available. 59 | */ 60 | public function is_available() { 61 | return true; 62 | } 63 | } 64 | -------------------------------------------------------------------------------- /composer.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "automattic/sensei-certificates", 3 | "description": "Sensei LMS Certificates", 4 | "require-dev": { 5 | "php": "^7 || ^8", 6 | "dealerdirect/phpcodesniffer-composer-installer": "0.7.1", 7 | "phpcompatibility/phpcompatibility-wp": "2.1.1", 8 | "squizlabs/php_codesniffer": "3.5.8", 9 | "wp-coding-standards/wpcs": "2.3.0" 10 | }, 11 | "archive": { 12 | "exclude": [ 13 | "/*", 14 | "!/admin", 15 | "!/assets/dist", 16 | "/assets/dist/css/*.js", 17 | "!/assets/images", 18 | "!/classes", 19 | "!/lang", 20 | "!/lib/tfpdf/tFPDF/*.php", 21 | "!/lib/tfpdf/font/*.php", 22 | "!/lib/tfpdf/font/unifont/*.php", 23 | "!/lib/tfpdf/font/unifont/*.ttf", 24 | "!/lib/tfpdf/font/unifont/*.dat", 25 | "!/templates", 26 | "!/changelog.txt", 27 | "!/LICENSE", 28 | "!/readme.txt", 29 | "!/widgets", 30 | "!/sensei-certificates-functions.php", 31 | "!/woothemes-sensei-certificates.php", 32 | ".DS_Store", 33 | ".*", 34 | "*.test.js" 35 | ] 36 | }, 37 | "config": { 38 | "allow-plugins": { 39 | "dealerdirect/phpcodesniffer-composer-installer": true 40 | } 41 | } 42 | } 43 | -------------------------------------------------------------------------------- /lang/sensei-certificates-de_DE.mo: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/woocommerce/sensei-certificates/cb1bc6f927de5498af2cbe179754263edb3cff50/lang/sensei-certificates-de_DE.mo -------------------------------------------------------------------------------- /lang/sensei-certificates-fr_FR.mo: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/woocommerce/sensei-certificates/cb1bc6f927de5498af2cbe179754263edb3cff50/lang/sensei-certificates-fr_FR.mo -------------------------------------------------------------------------------- /lang/sensei-certificates-hu_HU.mo: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/woocommerce/sensei-certificates/cb1bc6f927de5498af2cbe179754263edb3cff50/lang/sensei-certificates-hu_HU.mo -------------------------------------------------------------------------------- /lang/sensei-certificates-ru_RU.mo: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/woocommerce/sensei-certificates/cb1bc6f927de5498af2cbe179754263edb3cff50/lang/sensei-certificates-ru_RU.mo -------------------------------------------------------------------------------- /lib/tfpdf/FPDFException.php: -------------------------------------------------------------------------------- 1 | 278,chr(1)=>278,chr(2)=>278,chr(3)=>278,chr(4)=>278,chr(5)=>278,chr(6)=>278,chr(7)=>278,chr(8)=>278,chr(9)=>278,chr(10)=>278,chr(11)=>278,chr(12)=>278,chr(13)=>278,chr(14)=>278,chr(15)=>278,chr(16)=>278,chr(17)=>278,chr(18)=>278,chr(19)=>278,chr(20)=>278,chr(21)=>278, 8 | chr(22)=>278,chr(23)=>278,chr(24)=>278,chr(25)=>278,chr(26)=>278,chr(27)=>278,chr(28)=>278,chr(29)=>278,chr(30)=>278,chr(31)=>278,' '=>278,'!'=>278,'"'=>355,'#'=>556,'$'=>556,'%'=>889,'&'=>667,'\''=>191,'('=>333,')'=>333,'*'=>389,'+'=>584, 9 | ','=>278,'-'=>333,'.'=>278,'/'=>278,'0'=>556,'1'=>556,'2'=>556,'3'=>556,'4'=>556,'5'=>556,'6'=>556,'7'=>556,'8'=>556,'9'=>556,':'=>278,';'=>278,'<'=>584,'='=>584,'>'=>584,'?'=>556,'@'=>1015,'A'=>667, 10 | 'B'=>667,'C'=>722,'D'=>722,'E'=>667,'F'=>611,'G'=>778,'H'=>722,'I'=>278,'J'=>500,'K'=>667,'L'=>556,'M'=>833,'N'=>722,'O'=>778,'P'=>667,'Q'=>778,'R'=>722,'S'=>667,'T'=>611,'U'=>722,'V'=>667,'W'=>944, 11 | 'X'=>667,'Y'=>667,'Z'=>611,'['=>278,'\\'=>278,']'=>278,'^'=>469,'_'=>556,'`'=>333,'a'=>556,'b'=>556,'c'=>500,'d'=>556,'e'=>556,'f'=>278,'g'=>556,'h'=>556,'i'=>222,'j'=>222,'k'=>500,'l'=>222,'m'=>833, 12 | 'n'=>556,'o'=>556,'p'=>556,'q'=>556,'r'=>333,'s'=>500,'t'=>278,'u'=>556,'v'=>500,'w'=>722,'x'=>500,'y'=>500,'z'=>500,'{'=>334,'|'=>260,'}'=>334,'~'=>584,chr(127)=>350,chr(128)=>556,chr(129)=>350,chr(130)=>222,chr(131)=>556, 13 | chr(132)=>333,chr(133)=>1000,chr(134)=>556,chr(135)=>556,chr(136)=>333,chr(137)=>1000,chr(138)=>667,chr(139)=>333,chr(140)=>1000,chr(141)=>350,chr(142)=>611,chr(143)=>350,chr(144)=>350,chr(145)=>222,chr(146)=>222,chr(147)=>333,chr(148)=>333,chr(149)=>350,chr(150)=>556,chr(151)=>1000,chr(152)=>333,chr(153)=>1000, 14 | chr(154)=>500,chr(155)=>333,chr(156)=>944,chr(157)=>350,chr(158)=>500,chr(159)=>667,chr(160)=>278,chr(161)=>333,chr(162)=>556,chr(163)=>556,chr(164)=>556,chr(165)=>556,chr(166)=>260,chr(167)=>556,chr(168)=>333,chr(169)=>737,chr(170)=>370,chr(171)=>556,chr(172)=>584,chr(173)=>333,chr(174)=>737,chr(175)=>333, 15 | chr(176)=>400,chr(177)=>584,chr(178)=>333,chr(179)=>333,chr(180)=>333,chr(181)=>556,chr(182)=>537,chr(183)=>278,chr(184)=>333,chr(185)=>333,chr(186)=>365,chr(187)=>556,chr(188)=>834,chr(189)=>834,chr(190)=>834,chr(191)=>611,chr(192)=>667,chr(193)=>667,chr(194)=>667,chr(195)=>667,chr(196)=>667,chr(197)=>667, 16 | chr(198)=>1000,chr(199)=>722,chr(200)=>667,chr(201)=>667,chr(202)=>667,chr(203)=>667,chr(204)=>278,chr(205)=>278,chr(206)=>278,chr(207)=>278,chr(208)=>722,chr(209)=>722,chr(210)=>778,chr(211)=>778,chr(212)=>778,chr(213)=>778,chr(214)=>778,chr(215)=>584,chr(216)=>778,chr(217)=>722,chr(218)=>722,chr(219)=>722, 17 | chr(220)=>722,chr(221)=>667,chr(222)=>667,chr(223)=>611,chr(224)=>556,chr(225)=>556,chr(226)=>556,chr(227)=>556,chr(228)=>556,chr(229)=>556,chr(230)=>889,chr(231)=>500,chr(232)=>556,chr(233)=>556,chr(234)=>556,chr(235)=>556,chr(236)=>278,chr(237)=>278,chr(238)=>278,chr(239)=>278,chr(240)=>556,chr(241)=>556, 18 | chr(242)=>556,chr(243)=>556,chr(244)=>556,chr(245)=>556,chr(246)=>556,chr(247)=>584,chr(248)=>611,chr(249)=>556,chr(250)=>556,chr(251)=>556,chr(252)=>556,chr(253)=>500,chr(254)=>556,chr(255)=>500); 19 | -------------------------------------------------------------------------------- /lib/tfpdf/font/helveticab.php: -------------------------------------------------------------------------------- 1 | 278,chr(1)=>278,chr(2)=>278,chr(3)=>278,chr(4)=>278,chr(5)=>278,chr(6)=>278,chr(7)=>278,chr(8)=>278,chr(9)=>278,chr(10)=>278,chr(11)=>278,chr(12)=>278,chr(13)=>278,chr(14)=>278,chr(15)=>278,chr(16)=>278,chr(17)=>278,chr(18)=>278,chr(19)=>278,chr(20)=>278,chr(21)=>278, 8 | chr(22)=>278,chr(23)=>278,chr(24)=>278,chr(25)=>278,chr(26)=>278,chr(27)=>278,chr(28)=>278,chr(29)=>278,chr(30)=>278,chr(31)=>278,' '=>278,'!'=>333,'"'=>474,'#'=>556,'$'=>556,'%'=>889,'&'=>722,'\''=>238,'('=>333,')'=>333,'*'=>389,'+'=>584, 9 | ','=>278,'-'=>333,'.'=>278,'/'=>278,'0'=>556,'1'=>556,'2'=>556,'3'=>556,'4'=>556,'5'=>556,'6'=>556,'7'=>556,'8'=>556,'9'=>556,':'=>333,';'=>333,'<'=>584,'='=>584,'>'=>584,'?'=>611,'@'=>975,'A'=>722, 10 | 'B'=>722,'C'=>722,'D'=>722,'E'=>667,'F'=>611,'G'=>778,'H'=>722,'I'=>278,'J'=>556,'K'=>722,'L'=>611,'M'=>833,'N'=>722,'O'=>778,'P'=>667,'Q'=>778,'R'=>722,'S'=>667,'T'=>611,'U'=>722,'V'=>667,'W'=>944, 11 | 'X'=>667,'Y'=>667,'Z'=>611,'['=>333,'\\'=>278,']'=>333,'^'=>584,'_'=>556,'`'=>333,'a'=>556,'b'=>611,'c'=>556,'d'=>611,'e'=>556,'f'=>333,'g'=>611,'h'=>611,'i'=>278,'j'=>278,'k'=>556,'l'=>278,'m'=>889, 12 | 'n'=>611,'o'=>611,'p'=>611,'q'=>611,'r'=>389,'s'=>556,'t'=>333,'u'=>611,'v'=>556,'w'=>778,'x'=>556,'y'=>556,'z'=>500,'{'=>389,'|'=>280,'}'=>389,'~'=>584,chr(127)=>350,chr(128)=>556,chr(129)=>350,chr(130)=>278,chr(131)=>556, 13 | chr(132)=>500,chr(133)=>1000,chr(134)=>556,chr(135)=>556,chr(136)=>333,chr(137)=>1000,chr(138)=>667,chr(139)=>333,chr(140)=>1000,chr(141)=>350,chr(142)=>611,chr(143)=>350,chr(144)=>350,chr(145)=>278,chr(146)=>278,chr(147)=>500,chr(148)=>500,chr(149)=>350,chr(150)=>556,chr(151)=>1000,chr(152)=>333,chr(153)=>1000, 14 | chr(154)=>556,chr(155)=>333,chr(156)=>944,chr(157)=>350,chr(158)=>500,chr(159)=>667,chr(160)=>278,chr(161)=>333,chr(162)=>556,chr(163)=>556,chr(164)=>556,chr(165)=>556,chr(166)=>280,chr(167)=>556,chr(168)=>333,chr(169)=>737,chr(170)=>370,chr(171)=>556,chr(172)=>584,chr(173)=>333,chr(174)=>737,chr(175)=>333, 15 | chr(176)=>400,chr(177)=>584,chr(178)=>333,chr(179)=>333,chr(180)=>333,chr(181)=>611,chr(182)=>556,chr(183)=>278,chr(184)=>333,chr(185)=>333,chr(186)=>365,chr(187)=>556,chr(188)=>834,chr(189)=>834,chr(190)=>834,chr(191)=>611,chr(192)=>722,chr(193)=>722,chr(194)=>722,chr(195)=>722,chr(196)=>722,chr(197)=>722, 16 | chr(198)=>1000,chr(199)=>722,chr(200)=>667,chr(201)=>667,chr(202)=>667,chr(203)=>667,chr(204)=>278,chr(205)=>278,chr(206)=>278,chr(207)=>278,chr(208)=>722,chr(209)=>722,chr(210)=>778,chr(211)=>778,chr(212)=>778,chr(213)=>778,chr(214)=>778,chr(215)=>584,chr(216)=>778,chr(217)=>722,chr(218)=>722,chr(219)=>722, 17 | chr(220)=>722,chr(221)=>667,chr(222)=>667,chr(223)=>611,chr(224)=>556,chr(225)=>556,chr(226)=>556,chr(227)=>556,chr(228)=>556,chr(229)=>556,chr(230)=>889,chr(231)=>556,chr(232)=>556,chr(233)=>556,chr(234)=>556,chr(235)=>556,chr(236)=>278,chr(237)=>278,chr(238)=>278,chr(239)=>278,chr(240)=>611,chr(241)=>611, 18 | chr(242)=>611,chr(243)=>611,chr(244)=>611,chr(245)=>611,chr(246)=>611,chr(247)=>584,chr(248)=>611,chr(249)=>611,chr(250)=>611,chr(251)=>611,chr(252)=>611,chr(253)=>556,chr(254)=>611,chr(255)=>556); 19 | -------------------------------------------------------------------------------- /lib/tfpdf/font/helveticabi.php: -------------------------------------------------------------------------------- 1 | 278,chr(1)=>278,chr(2)=>278,chr(3)=>278,chr(4)=>278,chr(5)=>278,chr(6)=>278,chr(7)=>278,chr(8)=>278,chr(9)=>278,chr(10)=>278,chr(11)=>278,chr(12)=>278,chr(13)=>278,chr(14)=>278,chr(15)=>278,chr(16)=>278,chr(17)=>278,chr(18)=>278,chr(19)=>278,chr(20)=>278,chr(21)=>278, 8 | chr(22)=>278,chr(23)=>278,chr(24)=>278,chr(25)=>278,chr(26)=>278,chr(27)=>278,chr(28)=>278,chr(29)=>278,chr(30)=>278,chr(31)=>278,' '=>278,'!'=>333,'"'=>474,'#'=>556,'$'=>556,'%'=>889,'&'=>722,'\''=>238,'('=>333,')'=>333,'*'=>389,'+'=>584, 9 | ','=>278,'-'=>333,'.'=>278,'/'=>278,'0'=>556,'1'=>556,'2'=>556,'3'=>556,'4'=>556,'5'=>556,'6'=>556,'7'=>556,'8'=>556,'9'=>556,':'=>333,';'=>333,'<'=>584,'='=>584,'>'=>584,'?'=>611,'@'=>975,'A'=>722, 10 | 'B'=>722,'C'=>722,'D'=>722,'E'=>667,'F'=>611,'G'=>778,'H'=>722,'I'=>278,'J'=>556,'K'=>722,'L'=>611,'M'=>833,'N'=>722,'O'=>778,'P'=>667,'Q'=>778,'R'=>722,'S'=>667,'T'=>611,'U'=>722,'V'=>667,'W'=>944, 11 | 'X'=>667,'Y'=>667,'Z'=>611,'['=>333,'\\'=>278,']'=>333,'^'=>584,'_'=>556,'`'=>333,'a'=>556,'b'=>611,'c'=>556,'d'=>611,'e'=>556,'f'=>333,'g'=>611,'h'=>611,'i'=>278,'j'=>278,'k'=>556,'l'=>278,'m'=>889, 12 | 'n'=>611,'o'=>611,'p'=>611,'q'=>611,'r'=>389,'s'=>556,'t'=>333,'u'=>611,'v'=>556,'w'=>778,'x'=>556,'y'=>556,'z'=>500,'{'=>389,'|'=>280,'}'=>389,'~'=>584,chr(127)=>350,chr(128)=>556,chr(129)=>350,chr(130)=>278,chr(131)=>556, 13 | chr(132)=>500,chr(133)=>1000,chr(134)=>556,chr(135)=>556,chr(136)=>333,chr(137)=>1000,chr(138)=>667,chr(139)=>333,chr(140)=>1000,chr(141)=>350,chr(142)=>611,chr(143)=>350,chr(144)=>350,chr(145)=>278,chr(146)=>278,chr(147)=>500,chr(148)=>500,chr(149)=>350,chr(150)=>556,chr(151)=>1000,chr(152)=>333,chr(153)=>1000, 14 | chr(154)=>556,chr(155)=>333,chr(156)=>944,chr(157)=>350,chr(158)=>500,chr(159)=>667,chr(160)=>278,chr(161)=>333,chr(162)=>556,chr(163)=>556,chr(164)=>556,chr(165)=>556,chr(166)=>280,chr(167)=>556,chr(168)=>333,chr(169)=>737,chr(170)=>370,chr(171)=>556,chr(172)=>584,chr(173)=>333,chr(174)=>737,chr(175)=>333, 15 | chr(176)=>400,chr(177)=>584,chr(178)=>333,chr(179)=>333,chr(180)=>333,chr(181)=>611,chr(182)=>556,chr(183)=>278,chr(184)=>333,chr(185)=>333,chr(186)=>365,chr(187)=>556,chr(188)=>834,chr(189)=>834,chr(190)=>834,chr(191)=>611,chr(192)=>722,chr(193)=>722,chr(194)=>722,chr(195)=>722,chr(196)=>722,chr(197)=>722, 16 | chr(198)=>1000,chr(199)=>722,chr(200)=>667,chr(201)=>667,chr(202)=>667,chr(203)=>667,chr(204)=>278,chr(205)=>278,chr(206)=>278,chr(207)=>278,chr(208)=>722,chr(209)=>722,chr(210)=>778,chr(211)=>778,chr(212)=>778,chr(213)=>778,chr(214)=>778,chr(215)=>584,chr(216)=>778,chr(217)=>722,chr(218)=>722,chr(219)=>722, 17 | chr(220)=>722,chr(221)=>667,chr(222)=>667,chr(223)=>611,chr(224)=>556,chr(225)=>556,chr(226)=>556,chr(227)=>556,chr(228)=>556,chr(229)=>556,chr(230)=>889,chr(231)=>556,chr(232)=>556,chr(233)=>556,chr(234)=>556,chr(235)=>556,chr(236)=>278,chr(237)=>278,chr(238)=>278,chr(239)=>278,chr(240)=>611,chr(241)=>611, 18 | chr(242)=>611,chr(243)=>611,chr(244)=>611,chr(245)=>611,chr(246)=>611,chr(247)=>584,chr(248)=>611,chr(249)=>611,chr(250)=>611,chr(251)=>611,chr(252)=>611,chr(253)=>556,chr(254)=>611,chr(255)=>556); 19 | -------------------------------------------------------------------------------- /lib/tfpdf/font/helveticai.php: -------------------------------------------------------------------------------- 1 | 278,chr(1)=>278,chr(2)=>278,chr(3)=>278,chr(4)=>278,chr(5)=>278,chr(6)=>278,chr(7)=>278,chr(8)=>278,chr(9)=>278,chr(10)=>278,chr(11)=>278,chr(12)=>278,chr(13)=>278,chr(14)=>278,chr(15)=>278,chr(16)=>278,chr(17)=>278,chr(18)=>278,chr(19)=>278,chr(20)=>278,chr(21)=>278, 8 | chr(22)=>278,chr(23)=>278,chr(24)=>278,chr(25)=>278,chr(26)=>278,chr(27)=>278,chr(28)=>278,chr(29)=>278,chr(30)=>278,chr(31)=>278,' '=>278,'!'=>278,'"'=>355,'#'=>556,'$'=>556,'%'=>889,'&'=>667,'\''=>191,'('=>333,')'=>333,'*'=>389,'+'=>584, 9 | ','=>278,'-'=>333,'.'=>278,'/'=>278,'0'=>556,'1'=>556,'2'=>556,'3'=>556,'4'=>556,'5'=>556,'6'=>556,'7'=>556,'8'=>556,'9'=>556,':'=>278,';'=>278,'<'=>584,'='=>584,'>'=>584,'?'=>556,'@'=>1015,'A'=>667, 10 | 'B'=>667,'C'=>722,'D'=>722,'E'=>667,'F'=>611,'G'=>778,'H'=>722,'I'=>278,'J'=>500,'K'=>667,'L'=>556,'M'=>833,'N'=>722,'O'=>778,'P'=>667,'Q'=>778,'R'=>722,'S'=>667,'T'=>611,'U'=>722,'V'=>667,'W'=>944, 11 | 'X'=>667,'Y'=>667,'Z'=>611,'['=>278,'\\'=>278,']'=>278,'^'=>469,'_'=>556,'`'=>333,'a'=>556,'b'=>556,'c'=>500,'d'=>556,'e'=>556,'f'=>278,'g'=>556,'h'=>556,'i'=>222,'j'=>222,'k'=>500,'l'=>222,'m'=>833, 12 | 'n'=>556,'o'=>556,'p'=>556,'q'=>556,'r'=>333,'s'=>500,'t'=>278,'u'=>556,'v'=>500,'w'=>722,'x'=>500,'y'=>500,'z'=>500,'{'=>334,'|'=>260,'}'=>334,'~'=>584,chr(127)=>350,chr(128)=>556,chr(129)=>350,chr(130)=>222,chr(131)=>556, 13 | chr(132)=>333,chr(133)=>1000,chr(134)=>556,chr(135)=>556,chr(136)=>333,chr(137)=>1000,chr(138)=>667,chr(139)=>333,chr(140)=>1000,chr(141)=>350,chr(142)=>611,chr(143)=>350,chr(144)=>350,chr(145)=>222,chr(146)=>222,chr(147)=>333,chr(148)=>333,chr(149)=>350,chr(150)=>556,chr(151)=>1000,chr(152)=>333,chr(153)=>1000, 14 | chr(154)=>500,chr(155)=>333,chr(156)=>944,chr(157)=>350,chr(158)=>500,chr(159)=>667,chr(160)=>278,chr(161)=>333,chr(162)=>556,chr(163)=>556,chr(164)=>556,chr(165)=>556,chr(166)=>260,chr(167)=>556,chr(168)=>333,chr(169)=>737,chr(170)=>370,chr(171)=>556,chr(172)=>584,chr(173)=>333,chr(174)=>737,chr(175)=>333, 15 | chr(176)=>400,chr(177)=>584,chr(178)=>333,chr(179)=>333,chr(180)=>333,chr(181)=>556,chr(182)=>537,chr(183)=>278,chr(184)=>333,chr(185)=>333,chr(186)=>365,chr(187)=>556,chr(188)=>834,chr(189)=>834,chr(190)=>834,chr(191)=>611,chr(192)=>667,chr(193)=>667,chr(194)=>667,chr(195)=>667,chr(196)=>667,chr(197)=>667, 16 | chr(198)=>1000,chr(199)=>722,chr(200)=>667,chr(201)=>667,chr(202)=>667,chr(203)=>667,chr(204)=>278,chr(205)=>278,chr(206)=>278,chr(207)=>278,chr(208)=>722,chr(209)=>722,chr(210)=>778,chr(211)=>778,chr(212)=>778,chr(213)=>778,chr(214)=>778,chr(215)=>584,chr(216)=>778,chr(217)=>722,chr(218)=>722,chr(219)=>722, 17 | chr(220)=>722,chr(221)=>667,chr(222)=>667,chr(223)=>611,chr(224)=>556,chr(225)=>556,chr(226)=>556,chr(227)=>556,chr(228)=>556,chr(229)=>556,chr(230)=>889,chr(231)=>500,chr(232)=>556,chr(233)=>556,chr(234)=>556,chr(235)=>556,chr(236)=>278,chr(237)=>278,chr(238)=>278,chr(239)=>278,chr(240)=>556,chr(241)=>556, 18 | chr(242)=>556,chr(243)=>556,chr(244)=>556,chr(245)=>556,chr(246)=>556,chr(247)=>584,chr(248)=>611,chr(249)=>556,chr(250)=>556,chr(251)=>556,chr(252)=>556,chr(253)=>500,chr(254)=>556,chr(255)=>500); 19 | -------------------------------------------------------------------------------- /lib/tfpdf/font/symbol.php: -------------------------------------------------------------------------------- 1 | 250,chr(1)=>250,chr(2)=>250,chr(3)=>250,chr(4)=>250,chr(5)=>250,chr(6)=>250,chr(7)=>250,chr(8)=>250,chr(9)=>250,chr(10)=>250,chr(11)=>250,chr(12)=>250,chr(13)=>250,chr(14)=>250,chr(15)=>250,chr(16)=>250,chr(17)=>250,chr(18)=>250,chr(19)=>250,chr(20)=>250,chr(21)=>250, 8 | chr(22)=>250,chr(23)=>250,chr(24)=>250,chr(25)=>250,chr(26)=>250,chr(27)=>250,chr(28)=>250,chr(29)=>250,chr(30)=>250,chr(31)=>250,' '=>250,'!'=>333,'"'=>713,'#'=>500,'$'=>549,'%'=>833,'&'=>778,'\''=>439,'('=>333,')'=>333,'*'=>500,'+'=>549, 9 | ','=>250,'-'=>549,'.'=>250,'/'=>278,'0'=>500,'1'=>500,'2'=>500,'3'=>500,'4'=>500,'5'=>500,'6'=>500,'7'=>500,'8'=>500,'9'=>500,':'=>278,';'=>278,'<'=>549,'='=>549,'>'=>549,'?'=>444,'@'=>549,'A'=>722, 10 | 'B'=>667,'C'=>722,'D'=>612,'E'=>611,'F'=>763,'G'=>603,'H'=>722,'I'=>333,'J'=>631,'K'=>722,'L'=>686,'M'=>889,'N'=>722,'O'=>722,'P'=>768,'Q'=>741,'R'=>556,'S'=>592,'T'=>611,'U'=>690,'V'=>439,'W'=>768, 11 | 'X'=>645,'Y'=>795,'Z'=>611,'['=>333,'\\'=>863,']'=>333,'^'=>658,'_'=>500,'`'=>500,'a'=>631,'b'=>549,'c'=>549,'d'=>494,'e'=>439,'f'=>521,'g'=>411,'h'=>603,'i'=>329,'j'=>603,'k'=>549,'l'=>549,'m'=>576, 12 | 'n'=>521,'o'=>549,'p'=>549,'q'=>521,'r'=>549,'s'=>603,'t'=>439,'u'=>576,'v'=>713,'w'=>686,'x'=>493,'y'=>686,'z'=>494,'{'=>480,'|'=>200,'}'=>480,'~'=>549,chr(127)=>0,chr(128)=>0,chr(129)=>0,chr(130)=>0,chr(131)=>0, 13 | chr(132)=>0,chr(133)=>0,chr(134)=>0,chr(135)=>0,chr(136)=>0,chr(137)=>0,chr(138)=>0,chr(139)=>0,chr(140)=>0,chr(141)=>0,chr(142)=>0,chr(143)=>0,chr(144)=>0,chr(145)=>0,chr(146)=>0,chr(147)=>0,chr(148)=>0,chr(149)=>0,chr(150)=>0,chr(151)=>0,chr(152)=>0,chr(153)=>0, 14 | chr(154)=>0,chr(155)=>0,chr(156)=>0,chr(157)=>0,chr(158)=>0,chr(159)=>0,chr(160)=>750,chr(161)=>620,chr(162)=>247,chr(163)=>549,chr(164)=>167,chr(165)=>713,chr(166)=>500,chr(167)=>753,chr(168)=>753,chr(169)=>753,chr(170)=>753,chr(171)=>1042,chr(172)=>987,chr(173)=>603,chr(174)=>987,chr(175)=>603, 15 | chr(176)=>400,chr(177)=>549,chr(178)=>411,chr(179)=>549,chr(180)=>549,chr(181)=>713,chr(182)=>494,chr(183)=>460,chr(184)=>549,chr(185)=>549,chr(186)=>549,chr(187)=>549,chr(188)=>1000,chr(189)=>603,chr(190)=>1000,chr(191)=>658,chr(192)=>823,chr(193)=>686,chr(194)=>795,chr(195)=>987,chr(196)=>768,chr(197)=>768, 16 | chr(198)=>823,chr(199)=>768,chr(200)=>768,chr(201)=>713,chr(202)=>713,chr(203)=>713,chr(204)=>713,chr(205)=>713,chr(206)=>713,chr(207)=>713,chr(208)=>768,chr(209)=>713,chr(210)=>790,chr(211)=>790,chr(212)=>890,chr(213)=>823,chr(214)=>549,chr(215)=>250,chr(216)=>713,chr(217)=>603,chr(218)=>603,chr(219)=>1042, 17 | chr(220)=>987,chr(221)=>603,chr(222)=>987,chr(223)=>603,chr(224)=>494,chr(225)=>329,chr(226)=>790,chr(227)=>790,chr(228)=>786,chr(229)=>713,chr(230)=>384,chr(231)=>384,chr(232)=>384,chr(233)=>384,chr(234)=>384,chr(235)=>384,chr(236)=>494,chr(237)=>494,chr(238)=>494,chr(239)=>494,chr(240)=>0,chr(241)=>329, 18 | chr(242)=>274,chr(243)=>686,chr(244)=>686,chr(245)=>686,chr(246)=>384,chr(247)=>384,chr(248)=>384,chr(249)=>384,chr(250)=>384,chr(251)=>384,chr(252)=>494,chr(253)=>494,chr(254)=>494,chr(255)=>0); 19 | -------------------------------------------------------------------------------- /lib/tfpdf/font/times.php: -------------------------------------------------------------------------------- 1 | 250,chr(1)=>250,chr(2)=>250,chr(3)=>250,chr(4)=>250,chr(5)=>250,chr(6)=>250,chr(7)=>250,chr(8)=>250,chr(9)=>250,chr(10)=>250,chr(11)=>250,chr(12)=>250,chr(13)=>250,chr(14)=>250,chr(15)=>250,chr(16)=>250,chr(17)=>250,chr(18)=>250,chr(19)=>250,chr(20)=>250,chr(21)=>250, 8 | chr(22)=>250,chr(23)=>250,chr(24)=>250,chr(25)=>250,chr(26)=>250,chr(27)=>250,chr(28)=>250,chr(29)=>250,chr(30)=>250,chr(31)=>250,' '=>250,'!'=>333,'"'=>408,'#'=>500,'$'=>500,'%'=>833,'&'=>778,'\''=>180,'('=>333,')'=>333,'*'=>500,'+'=>564, 9 | ','=>250,'-'=>333,'.'=>250,'/'=>278,'0'=>500,'1'=>500,'2'=>500,'3'=>500,'4'=>500,'5'=>500,'6'=>500,'7'=>500,'8'=>500,'9'=>500,':'=>278,';'=>278,'<'=>564,'='=>564,'>'=>564,'?'=>444,'@'=>921,'A'=>722, 10 | 'B'=>667,'C'=>667,'D'=>722,'E'=>611,'F'=>556,'G'=>722,'H'=>722,'I'=>333,'J'=>389,'K'=>722,'L'=>611,'M'=>889,'N'=>722,'O'=>722,'P'=>556,'Q'=>722,'R'=>667,'S'=>556,'T'=>611,'U'=>722,'V'=>722,'W'=>944, 11 | 'X'=>722,'Y'=>722,'Z'=>611,'['=>333,'\\'=>278,']'=>333,'^'=>469,'_'=>500,'`'=>333,'a'=>444,'b'=>500,'c'=>444,'d'=>500,'e'=>444,'f'=>333,'g'=>500,'h'=>500,'i'=>278,'j'=>278,'k'=>500,'l'=>278,'m'=>778, 12 | 'n'=>500,'o'=>500,'p'=>500,'q'=>500,'r'=>333,'s'=>389,'t'=>278,'u'=>500,'v'=>500,'w'=>722,'x'=>500,'y'=>500,'z'=>444,'{'=>480,'|'=>200,'}'=>480,'~'=>541,chr(127)=>350,chr(128)=>500,chr(129)=>350,chr(130)=>333,chr(131)=>500, 13 | chr(132)=>444,chr(133)=>1000,chr(134)=>500,chr(135)=>500,chr(136)=>333,chr(137)=>1000,chr(138)=>556,chr(139)=>333,chr(140)=>889,chr(141)=>350,chr(142)=>611,chr(143)=>350,chr(144)=>350,chr(145)=>333,chr(146)=>333,chr(147)=>444,chr(148)=>444,chr(149)=>350,chr(150)=>500,chr(151)=>1000,chr(152)=>333,chr(153)=>980, 14 | chr(154)=>389,chr(155)=>333,chr(156)=>722,chr(157)=>350,chr(158)=>444,chr(159)=>722,chr(160)=>250,chr(161)=>333,chr(162)=>500,chr(163)=>500,chr(164)=>500,chr(165)=>500,chr(166)=>200,chr(167)=>500,chr(168)=>333,chr(169)=>760,chr(170)=>276,chr(171)=>500,chr(172)=>564,chr(173)=>333,chr(174)=>760,chr(175)=>333, 15 | chr(176)=>400,chr(177)=>564,chr(178)=>300,chr(179)=>300,chr(180)=>333,chr(181)=>500,chr(182)=>453,chr(183)=>250,chr(184)=>333,chr(185)=>300,chr(186)=>310,chr(187)=>500,chr(188)=>750,chr(189)=>750,chr(190)=>750,chr(191)=>444,chr(192)=>722,chr(193)=>722,chr(194)=>722,chr(195)=>722,chr(196)=>722,chr(197)=>722, 16 | chr(198)=>889,chr(199)=>667,chr(200)=>611,chr(201)=>611,chr(202)=>611,chr(203)=>611,chr(204)=>333,chr(205)=>333,chr(206)=>333,chr(207)=>333,chr(208)=>722,chr(209)=>722,chr(210)=>722,chr(211)=>722,chr(212)=>722,chr(213)=>722,chr(214)=>722,chr(215)=>564,chr(216)=>722,chr(217)=>722,chr(218)=>722,chr(219)=>722, 17 | chr(220)=>722,chr(221)=>722,chr(222)=>556,chr(223)=>500,chr(224)=>444,chr(225)=>444,chr(226)=>444,chr(227)=>444,chr(228)=>444,chr(229)=>444,chr(230)=>667,chr(231)=>444,chr(232)=>444,chr(233)=>444,chr(234)=>444,chr(235)=>444,chr(236)=>278,chr(237)=>278,chr(238)=>278,chr(239)=>278,chr(240)=>500,chr(241)=>500, 18 | chr(242)=>500,chr(243)=>500,chr(244)=>500,chr(245)=>500,chr(246)=>500,chr(247)=>564,chr(248)=>500,chr(249)=>500,chr(250)=>500,chr(251)=>500,chr(252)=>500,chr(253)=>500,chr(254)=>500,chr(255)=>500); 19 | -------------------------------------------------------------------------------- /lib/tfpdf/font/timesb.php: -------------------------------------------------------------------------------- 1 | 250,chr(1)=>250,chr(2)=>250,chr(3)=>250,chr(4)=>250,chr(5)=>250,chr(6)=>250,chr(7)=>250,chr(8)=>250,chr(9)=>250,chr(10)=>250,chr(11)=>250,chr(12)=>250,chr(13)=>250,chr(14)=>250,chr(15)=>250,chr(16)=>250,chr(17)=>250,chr(18)=>250,chr(19)=>250,chr(20)=>250,chr(21)=>250, 8 | chr(22)=>250,chr(23)=>250,chr(24)=>250,chr(25)=>250,chr(26)=>250,chr(27)=>250,chr(28)=>250,chr(29)=>250,chr(30)=>250,chr(31)=>250,' '=>250,'!'=>333,'"'=>555,'#'=>500,'$'=>500,'%'=>1000,'&'=>833,'\''=>278,'('=>333,')'=>333,'*'=>500,'+'=>570, 9 | ','=>250,'-'=>333,'.'=>250,'/'=>278,'0'=>500,'1'=>500,'2'=>500,'3'=>500,'4'=>500,'5'=>500,'6'=>500,'7'=>500,'8'=>500,'9'=>500,':'=>333,';'=>333,'<'=>570,'='=>570,'>'=>570,'?'=>500,'@'=>930,'A'=>722, 10 | 'B'=>667,'C'=>722,'D'=>722,'E'=>667,'F'=>611,'G'=>778,'H'=>778,'I'=>389,'J'=>500,'K'=>778,'L'=>667,'M'=>944,'N'=>722,'O'=>778,'P'=>611,'Q'=>778,'R'=>722,'S'=>556,'T'=>667,'U'=>722,'V'=>722,'W'=>1000, 11 | 'X'=>722,'Y'=>722,'Z'=>667,'['=>333,'\\'=>278,']'=>333,'^'=>581,'_'=>500,'`'=>333,'a'=>500,'b'=>556,'c'=>444,'d'=>556,'e'=>444,'f'=>333,'g'=>500,'h'=>556,'i'=>278,'j'=>333,'k'=>556,'l'=>278,'m'=>833, 12 | 'n'=>556,'o'=>500,'p'=>556,'q'=>556,'r'=>444,'s'=>389,'t'=>333,'u'=>556,'v'=>500,'w'=>722,'x'=>500,'y'=>500,'z'=>444,'{'=>394,'|'=>220,'}'=>394,'~'=>520,chr(127)=>350,chr(128)=>500,chr(129)=>350,chr(130)=>333,chr(131)=>500, 13 | chr(132)=>500,chr(133)=>1000,chr(134)=>500,chr(135)=>500,chr(136)=>333,chr(137)=>1000,chr(138)=>556,chr(139)=>333,chr(140)=>1000,chr(141)=>350,chr(142)=>667,chr(143)=>350,chr(144)=>350,chr(145)=>333,chr(146)=>333,chr(147)=>500,chr(148)=>500,chr(149)=>350,chr(150)=>500,chr(151)=>1000,chr(152)=>333,chr(153)=>1000, 14 | chr(154)=>389,chr(155)=>333,chr(156)=>722,chr(157)=>350,chr(158)=>444,chr(159)=>722,chr(160)=>250,chr(161)=>333,chr(162)=>500,chr(163)=>500,chr(164)=>500,chr(165)=>500,chr(166)=>220,chr(167)=>500,chr(168)=>333,chr(169)=>747,chr(170)=>300,chr(171)=>500,chr(172)=>570,chr(173)=>333,chr(174)=>747,chr(175)=>333, 15 | chr(176)=>400,chr(177)=>570,chr(178)=>300,chr(179)=>300,chr(180)=>333,chr(181)=>556,chr(182)=>540,chr(183)=>250,chr(184)=>333,chr(185)=>300,chr(186)=>330,chr(187)=>500,chr(188)=>750,chr(189)=>750,chr(190)=>750,chr(191)=>500,chr(192)=>722,chr(193)=>722,chr(194)=>722,chr(195)=>722,chr(196)=>722,chr(197)=>722, 16 | chr(198)=>1000,chr(199)=>722,chr(200)=>667,chr(201)=>667,chr(202)=>667,chr(203)=>667,chr(204)=>389,chr(205)=>389,chr(206)=>389,chr(207)=>389,chr(208)=>722,chr(209)=>722,chr(210)=>778,chr(211)=>778,chr(212)=>778,chr(213)=>778,chr(214)=>778,chr(215)=>570,chr(216)=>778,chr(217)=>722,chr(218)=>722,chr(219)=>722, 17 | chr(220)=>722,chr(221)=>722,chr(222)=>611,chr(223)=>556,chr(224)=>500,chr(225)=>500,chr(226)=>500,chr(227)=>500,chr(228)=>500,chr(229)=>500,chr(230)=>722,chr(231)=>444,chr(232)=>444,chr(233)=>444,chr(234)=>444,chr(235)=>444,chr(236)=>278,chr(237)=>278,chr(238)=>278,chr(239)=>278,chr(240)=>500,chr(241)=>556, 18 | chr(242)=>500,chr(243)=>500,chr(244)=>500,chr(245)=>500,chr(246)=>500,chr(247)=>570,chr(248)=>500,chr(249)=>556,chr(250)=>556,chr(251)=>556,chr(252)=>556,chr(253)=>500,chr(254)=>556,chr(255)=>500); 19 | -------------------------------------------------------------------------------- /lib/tfpdf/font/timesbi.php: -------------------------------------------------------------------------------- 1 | 250,chr(1)=>250,chr(2)=>250,chr(3)=>250,chr(4)=>250,chr(5)=>250,chr(6)=>250,chr(7)=>250,chr(8)=>250,chr(9)=>250,chr(10)=>250,chr(11)=>250,chr(12)=>250,chr(13)=>250,chr(14)=>250,chr(15)=>250,chr(16)=>250,chr(17)=>250,chr(18)=>250,chr(19)=>250,chr(20)=>250,chr(21)=>250, 8 | chr(22)=>250,chr(23)=>250,chr(24)=>250,chr(25)=>250,chr(26)=>250,chr(27)=>250,chr(28)=>250,chr(29)=>250,chr(30)=>250,chr(31)=>250,' '=>250,'!'=>389,'"'=>555,'#'=>500,'$'=>500,'%'=>833,'&'=>778,'\''=>278,'('=>333,')'=>333,'*'=>500,'+'=>570, 9 | ','=>250,'-'=>333,'.'=>250,'/'=>278,'0'=>500,'1'=>500,'2'=>500,'3'=>500,'4'=>500,'5'=>500,'6'=>500,'7'=>500,'8'=>500,'9'=>500,':'=>333,';'=>333,'<'=>570,'='=>570,'>'=>570,'?'=>500,'@'=>832,'A'=>667, 10 | 'B'=>667,'C'=>667,'D'=>722,'E'=>667,'F'=>667,'G'=>722,'H'=>778,'I'=>389,'J'=>500,'K'=>667,'L'=>611,'M'=>889,'N'=>722,'O'=>722,'P'=>611,'Q'=>722,'R'=>667,'S'=>556,'T'=>611,'U'=>722,'V'=>667,'W'=>889, 11 | 'X'=>667,'Y'=>611,'Z'=>611,'['=>333,'\\'=>278,']'=>333,'^'=>570,'_'=>500,'`'=>333,'a'=>500,'b'=>500,'c'=>444,'d'=>500,'e'=>444,'f'=>333,'g'=>500,'h'=>556,'i'=>278,'j'=>278,'k'=>500,'l'=>278,'m'=>778, 12 | 'n'=>556,'o'=>500,'p'=>500,'q'=>500,'r'=>389,'s'=>389,'t'=>278,'u'=>556,'v'=>444,'w'=>667,'x'=>500,'y'=>444,'z'=>389,'{'=>348,'|'=>220,'}'=>348,'~'=>570,chr(127)=>350,chr(128)=>500,chr(129)=>350,chr(130)=>333,chr(131)=>500, 13 | chr(132)=>500,chr(133)=>1000,chr(134)=>500,chr(135)=>500,chr(136)=>333,chr(137)=>1000,chr(138)=>556,chr(139)=>333,chr(140)=>944,chr(141)=>350,chr(142)=>611,chr(143)=>350,chr(144)=>350,chr(145)=>333,chr(146)=>333,chr(147)=>500,chr(148)=>500,chr(149)=>350,chr(150)=>500,chr(151)=>1000,chr(152)=>333,chr(153)=>1000, 14 | chr(154)=>389,chr(155)=>333,chr(156)=>722,chr(157)=>350,chr(158)=>389,chr(159)=>611,chr(160)=>250,chr(161)=>389,chr(162)=>500,chr(163)=>500,chr(164)=>500,chr(165)=>500,chr(166)=>220,chr(167)=>500,chr(168)=>333,chr(169)=>747,chr(170)=>266,chr(171)=>500,chr(172)=>606,chr(173)=>333,chr(174)=>747,chr(175)=>333, 15 | chr(176)=>400,chr(177)=>570,chr(178)=>300,chr(179)=>300,chr(180)=>333,chr(181)=>576,chr(182)=>500,chr(183)=>250,chr(184)=>333,chr(185)=>300,chr(186)=>300,chr(187)=>500,chr(188)=>750,chr(189)=>750,chr(190)=>750,chr(191)=>500,chr(192)=>667,chr(193)=>667,chr(194)=>667,chr(195)=>667,chr(196)=>667,chr(197)=>667, 16 | chr(198)=>944,chr(199)=>667,chr(200)=>667,chr(201)=>667,chr(202)=>667,chr(203)=>667,chr(204)=>389,chr(205)=>389,chr(206)=>389,chr(207)=>389,chr(208)=>722,chr(209)=>722,chr(210)=>722,chr(211)=>722,chr(212)=>722,chr(213)=>722,chr(214)=>722,chr(215)=>570,chr(216)=>722,chr(217)=>722,chr(218)=>722,chr(219)=>722, 17 | chr(220)=>722,chr(221)=>611,chr(222)=>611,chr(223)=>500,chr(224)=>500,chr(225)=>500,chr(226)=>500,chr(227)=>500,chr(228)=>500,chr(229)=>500,chr(230)=>722,chr(231)=>444,chr(232)=>444,chr(233)=>444,chr(234)=>444,chr(235)=>444,chr(236)=>278,chr(237)=>278,chr(238)=>278,chr(239)=>278,chr(240)=>500,chr(241)=>556, 18 | chr(242)=>500,chr(243)=>500,chr(244)=>500,chr(245)=>500,chr(246)=>500,chr(247)=>570,chr(248)=>500,chr(249)=>556,chr(250)=>556,chr(251)=>556,chr(252)=>556,chr(253)=>444,chr(254)=>500,chr(255)=>444); 19 | -------------------------------------------------------------------------------- /lib/tfpdf/font/timesi.php: -------------------------------------------------------------------------------- 1 | 250,chr(1)=>250,chr(2)=>250,chr(3)=>250,chr(4)=>250,chr(5)=>250,chr(6)=>250,chr(7)=>250,chr(8)=>250,chr(9)=>250,chr(10)=>250,chr(11)=>250,chr(12)=>250,chr(13)=>250,chr(14)=>250,chr(15)=>250,chr(16)=>250,chr(17)=>250,chr(18)=>250,chr(19)=>250,chr(20)=>250,chr(21)=>250, 8 | chr(22)=>250,chr(23)=>250,chr(24)=>250,chr(25)=>250,chr(26)=>250,chr(27)=>250,chr(28)=>250,chr(29)=>250,chr(30)=>250,chr(31)=>250,' '=>250,'!'=>333,'"'=>420,'#'=>500,'$'=>500,'%'=>833,'&'=>778,'\''=>214,'('=>333,')'=>333,'*'=>500,'+'=>675, 9 | ','=>250,'-'=>333,'.'=>250,'/'=>278,'0'=>500,'1'=>500,'2'=>500,'3'=>500,'4'=>500,'5'=>500,'6'=>500,'7'=>500,'8'=>500,'9'=>500,':'=>333,';'=>333,'<'=>675,'='=>675,'>'=>675,'?'=>500,'@'=>920,'A'=>611, 10 | 'B'=>611,'C'=>667,'D'=>722,'E'=>611,'F'=>611,'G'=>722,'H'=>722,'I'=>333,'J'=>444,'K'=>667,'L'=>556,'M'=>833,'N'=>667,'O'=>722,'P'=>611,'Q'=>722,'R'=>611,'S'=>500,'T'=>556,'U'=>722,'V'=>611,'W'=>833, 11 | 'X'=>611,'Y'=>556,'Z'=>556,'['=>389,'\\'=>278,']'=>389,'^'=>422,'_'=>500,'`'=>333,'a'=>500,'b'=>500,'c'=>444,'d'=>500,'e'=>444,'f'=>278,'g'=>500,'h'=>500,'i'=>278,'j'=>278,'k'=>444,'l'=>278,'m'=>722, 12 | 'n'=>500,'o'=>500,'p'=>500,'q'=>500,'r'=>389,'s'=>389,'t'=>278,'u'=>500,'v'=>444,'w'=>667,'x'=>444,'y'=>444,'z'=>389,'{'=>400,'|'=>275,'}'=>400,'~'=>541,chr(127)=>350,chr(128)=>500,chr(129)=>350,chr(130)=>333,chr(131)=>500, 13 | chr(132)=>556,chr(133)=>889,chr(134)=>500,chr(135)=>500,chr(136)=>333,chr(137)=>1000,chr(138)=>500,chr(139)=>333,chr(140)=>944,chr(141)=>350,chr(142)=>556,chr(143)=>350,chr(144)=>350,chr(145)=>333,chr(146)=>333,chr(147)=>556,chr(148)=>556,chr(149)=>350,chr(150)=>500,chr(151)=>889,chr(152)=>333,chr(153)=>980, 14 | chr(154)=>389,chr(155)=>333,chr(156)=>667,chr(157)=>350,chr(158)=>389,chr(159)=>556,chr(160)=>250,chr(161)=>389,chr(162)=>500,chr(163)=>500,chr(164)=>500,chr(165)=>500,chr(166)=>275,chr(167)=>500,chr(168)=>333,chr(169)=>760,chr(170)=>276,chr(171)=>500,chr(172)=>675,chr(173)=>333,chr(174)=>760,chr(175)=>333, 15 | chr(176)=>400,chr(177)=>675,chr(178)=>300,chr(179)=>300,chr(180)=>333,chr(181)=>500,chr(182)=>523,chr(183)=>250,chr(184)=>333,chr(185)=>300,chr(186)=>310,chr(187)=>500,chr(188)=>750,chr(189)=>750,chr(190)=>750,chr(191)=>500,chr(192)=>611,chr(193)=>611,chr(194)=>611,chr(195)=>611,chr(196)=>611,chr(197)=>611, 16 | chr(198)=>889,chr(199)=>667,chr(200)=>611,chr(201)=>611,chr(202)=>611,chr(203)=>611,chr(204)=>333,chr(205)=>333,chr(206)=>333,chr(207)=>333,chr(208)=>722,chr(209)=>667,chr(210)=>722,chr(211)=>722,chr(212)=>722,chr(213)=>722,chr(214)=>722,chr(215)=>675,chr(216)=>722,chr(217)=>722,chr(218)=>722,chr(219)=>722, 17 | chr(220)=>722,chr(221)=>556,chr(222)=>611,chr(223)=>500,chr(224)=>500,chr(225)=>500,chr(226)=>500,chr(227)=>500,chr(228)=>500,chr(229)=>500,chr(230)=>667,chr(231)=>444,chr(232)=>444,chr(233)=>444,chr(234)=>444,chr(235)=>444,chr(236)=>278,chr(237)=>278,chr(238)=>278,chr(239)=>278,chr(240)=>500,chr(241)=>500, 18 | chr(242)=>500,chr(243)=>500,chr(244)=>500,chr(245)=>500,chr(246)=>500,chr(247)=>675,chr(248)=>500,chr(249)=>500,chr(250)=>500,chr(251)=>500,chr(252)=>500,chr(253)=>444,chr(254)=>500,chr(255)=>444); 19 | -------------------------------------------------------------------------------- /lib/tfpdf/font/unifont/DejaVuSans-Bold.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/woocommerce/sensei-certificates/cb1bc6f927de5498af2cbe179754263edb3cff50/lib/tfpdf/font/unifont/DejaVuSans-Bold.ttf -------------------------------------------------------------------------------- /lib/tfpdf/font/unifont/DejaVuSans-BoldOblique.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/woocommerce/sensei-certificates/cb1bc6f927de5498af2cbe179754263edb3cff50/lib/tfpdf/font/unifont/DejaVuSans-BoldOblique.ttf -------------------------------------------------------------------------------- /lib/tfpdf/font/unifont/DejaVuSans-ExtraLight.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/woocommerce/sensei-certificates/cb1bc6f927de5498af2cbe179754263edb3cff50/lib/tfpdf/font/unifont/DejaVuSans-ExtraLight.ttf -------------------------------------------------------------------------------- /lib/tfpdf/font/unifont/DejaVuSans-Oblique.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/woocommerce/sensei-certificates/cb1bc6f927de5498af2cbe179754263edb3cff50/lib/tfpdf/font/unifont/DejaVuSans-Oblique.ttf -------------------------------------------------------------------------------- /lib/tfpdf/font/unifont/DejaVuSans.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/woocommerce/sensei-certificates/cb1bc6f927de5498af2cbe179754263edb3cff50/lib/tfpdf/font/unifont/DejaVuSans.ttf -------------------------------------------------------------------------------- /lib/tfpdf/font/unifont/DejaVuSansCondensed-Bold.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/woocommerce/sensei-certificates/cb1bc6f927de5498af2cbe179754263edb3cff50/lib/tfpdf/font/unifont/DejaVuSansCondensed-Bold.ttf -------------------------------------------------------------------------------- /lib/tfpdf/font/unifont/DejaVuSansCondensed-BoldOblique.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/woocommerce/sensei-certificates/cb1bc6f927de5498af2cbe179754263edb3cff50/lib/tfpdf/font/unifont/DejaVuSansCondensed-BoldOblique.ttf -------------------------------------------------------------------------------- /lib/tfpdf/font/unifont/DejaVuSansCondensed-Oblique.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/woocommerce/sensei-certificates/cb1bc6f927de5498af2cbe179754263edb3cff50/lib/tfpdf/font/unifont/DejaVuSansCondensed-Oblique.ttf -------------------------------------------------------------------------------- /lib/tfpdf/font/unifont/DejaVuSansCondensed.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/woocommerce/sensei-certificates/cb1bc6f927de5498af2cbe179754263edb3cff50/lib/tfpdf/font/unifont/DejaVuSansCondensed.ttf -------------------------------------------------------------------------------- /lib/tfpdf/font/unifont/DejaVuSansMono-Bold.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/woocommerce/sensei-certificates/cb1bc6f927de5498af2cbe179754263edb3cff50/lib/tfpdf/font/unifont/DejaVuSansMono-Bold.ttf -------------------------------------------------------------------------------- /lib/tfpdf/font/unifont/DejaVuSansMono-BoldOblique.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/woocommerce/sensei-certificates/cb1bc6f927de5498af2cbe179754263edb3cff50/lib/tfpdf/font/unifont/DejaVuSansMono-BoldOblique.ttf -------------------------------------------------------------------------------- /lib/tfpdf/font/unifont/DejaVuSansMono-Oblique.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/woocommerce/sensei-certificates/cb1bc6f927de5498af2cbe179754263edb3cff50/lib/tfpdf/font/unifont/DejaVuSansMono-Oblique.ttf -------------------------------------------------------------------------------- /lib/tfpdf/font/unifont/DejaVuSansMono.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/woocommerce/sensei-certificates/cb1bc6f927de5498af2cbe179754263edb3cff50/lib/tfpdf/font/unifont/DejaVuSansMono.ttf -------------------------------------------------------------------------------- /lib/tfpdf/font/unifont/DejaVuSerif-Bold.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/woocommerce/sensei-certificates/cb1bc6f927de5498af2cbe179754263edb3cff50/lib/tfpdf/font/unifont/DejaVuSerif-Bold.ttf -------------------------------------------------------------------------------- /lib/tfpdf/font/unifont/DejaVuSerif-BoldItalic.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/woocommerce/sensei-certificates/cb1bc6f927de5498af2cbe179754263edb3cff50/lib/tfpdf/font/unifont/DejaVuSerif-BoldItalic.ttf -------------------------------------------------------------------------------- /lib/tfpdf/font/unifont/DejaVuSerif-Italic.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/woocommerce/sensei-certificates/cb1bc6f927de5498af2cbe179754263edb3cff50/lib/tfpdf/font/unifont/DejaVuSerif-Italic.ttf -------------------------------------------------------------------------------- /lib/tfpdf/font/unifont/DejaVuSerif.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/woocommerce/sensei-certificates/cb1bc6f927de5498af2cbe179754263edb3cff50/lib/tfpdf/font/unifont/DejaVuSerif.ttf -------------------------------------------------------------------------------- /lib/tfpdf/font/unifont/DejaVuSerifCondensed-Bold.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/woocommerce/sensei-certificates/cb1bc6f927de5498af2cbe179754263edb3cff50/lib/tfpdf/font/unifont/DejaVuSerifCondensed-Bold.ttf -------------------------------------------------------------------------------- /lib/tfpdf/font/unifont/DejaVuSerifCondensed-BoldItalic.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/woocommerce/sensei-certificates/cb1bc6f927de5498af2cbe179754263edb3cff50/lib/tfpdf/font/unifont/DejaVuSerifCondensed-BoldItalic.ttf -------------------------------------------------------------------------------- /lib/tfpdf/font/unifont/DejaVuSerifCondensed-Italic.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/woocommerce/sensei-certificates/cb1bc6f927de5498af2cbe179754263edb3cff50/lib/tfpdf/font/unifont/DejaVuSerifCondensed-Italic.ttf -------------------------------------------------------------------------------- /lib/tfpdf/font/unifont/DejaVuSerifCondensed.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/woocommerce/sensei-certificates/cb1bc6f927de5498af2cbe179754263edb3cff50/lib/tfpdf/font/unifont/DejaVuSerifCondensed.ttf -------------------------------------------------------------------------------- /lib/tfpdf/font/unifont/DejaVu_LICENSE.txt: -------------------------------------------------------------------------------- 1 | Fonts are (c) Bitstream (see below). DejaVu changes are in public domain. 2 | Glyphs imported from Arev fonts are (c) Tavmjong Bah (see below) 3 | 4 | Bitstream Vera Fonts Copyright 5 | ------------------------------ 6 | 7 | Copyright (c) 2003 by Bitstream, Inc. All Rights Reserved. Bitstream Vera is 8 | a trademark of Bitstream, Inc. 9 | 10 | Permission is hereby granted, free of charge, to any person obtaining a copy 11 | of the fonts accompanying this license ("Fonts") and associated 12 | documentation files (the "Font Software"), to reproduce and distribute the 13 | Font Software, including without limitation the rights to use, copy, merge, 14 | publish, distribute, and/or sell copies of the Font Software, and to permit 15 | persons to whom the Font Software is furnished to do so, subject to the 16 | following conditions: 17 | 18 | The above copyright and trademark notices and this permission notice shall 19 | be included in all copies of one or more of the Font Software typefaces. 20 | 21 | The Font Software may be modified, altered, or added to, and in particular 22 | the designs of glyphs or characters in the Fonts may be modified and 23 | additional glyphs or characters may be added to the Fonts, only if the fonts 24 | are renamed to names not containing either the words "Bitstream" or the word 25 | "Vera". 26 | 27 | This License becomes null and void to the extent applicable to Fonts or Font 28 | Software that has been modified and is distributed under the "Bitstream 29 | Vera" names. 30 | 31 | The Font Software may be sold as part of a larger software package but no 32 | copy of one or more of the Font Software typefaces may be sold by itself. 33 | 34 | THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS 35 | OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF MERCHANTABILITY, 36 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF COPYRIGHT, PATENT, 37 | TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL BITSTREAM OR THE GNOME 38 | FOUNDATION BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, INCLUDING 39 | ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL DAMAGES, 40 | WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF 41 | THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM OTHER DEALINGS IN THE 42 | FONT SOFTWARE. 43 | 44 | Except as contained in this notice, the names of Gnome, the Gnome 45 | Foundation, and Bitstream Inc., shall not be used in advertising or 46 | otherwise to promote the sale, use or other dealings in this Font Software 47 | without prior written authorization from the Gnome Foundation or Bitstream 48 | Inc., respectively. For further information, contact: fonts at gnome dot 49 | org. 50 | 51 | Arev Fonts Copyright 52 | ------------------------------ 53 | 54 | Copyright (c) 2006 by Tavmjong Bah. All Rights Reserved. 55 | 56 | Permission is hereby granted, free of charge, to any person obtaining 57 | a copy of the fonts accompanying this license ("Fonts") and 58 | associated documentation files (the "Font Software"), to reproduce 59 | and distribute the modifications to the Bitstream Vera Font Software, 60 | including without limitation the rights to use, copy, merge, publish, 61 | distribute, and/or sell copies of the Font Software, and to permit 62 | persons to whom the Font Software is furnished to do so, subject to 63 | the following conditions: 64 | 65 | The above copyright and trademark notices and this permission notice 66 | shall be included in all copies of one or more of the Font Software 67 | typefaces. 68 | 69 | The Font Software may be modified, altered, or added to, and in 70 | particular the designs of glyphs or characters in the Fonts may be 71 | modified and additional glyphs or characters may be added to the 72 | Fonts, only if the fonts are renamed to names not containing either 73 | the words "Tavmjong Bah" or the word "Arev". 74 | 75 | This License becomes null and void to the extent applicable to Fonts 76 | or Font Software that has been modified and is distributed under the 77 | "Tavmjong Bah Arev" names. 78 | 79 | The Font Software may be sold as part of a larger software package but 80 | no copy of one or more of the Font Software typefaces may be sold by 81 | itself. 82 | 83 | THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, 84 | EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF 85 | MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT 86 | OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL 87 | TAVMJONG BAH BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, 88 | INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL 89 | DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 90 | FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM 91 | OTHER DEALINGS IN THE FONT SOFTWARE. 92 | 93 | Except as contained in this notice, the name of Tavmjong Bah shall not 94 | be used in advertising or otherwise to promote the sale, use or other 95 | dealings in this Font Software without prior written authorization 96 | from Tavmjong Bah. For further information, contact: tavmjong @ free 97 | . fr. 98 | 99 | $Id: LICENSE 2133 2007-11-28 02:46:28Z lechimp $ 100 | -------------------------------------------------------------------------------- /lib/tfpdf/font/unifont/dejavusans-bold-character-width-127.php: -------------------------------------------------------------------------------- 1 | 8 | array ( 9 | 0 => 348, 10 | 1 => 456, 11 | 2 => 521, 12 | 3 => 838, 13 | 4 => 696, 14 | 5 => 1002, 15 | 6 => 872, 16 | 7 => 306, 17 | ), 18 | 40 => 19 | array ( 20 | 0 => 457, 21 | 1 => 457, 22 | 'interval' => true, 23 | ), 24 | 42 => 25 | array ( 26 | 0 => 523, 27 | 1 => 838, 28 | 2 => 380, 29 | 3 => 415, 30 | 4 => 380, 31 | 5 => 365, 32 | ), 33 | 48 => 34 | array ( 35 | 0 => 696, 36 | 1 => 696, 37 | 'interval' => true, 38 | 2 => 696, 39 | 3 => 696, 40 | 4 => 696, 41 | 5 => 696, 42 | 6 => 696, 43 | 7 => 696, 44 | 8 => 696, 45 | 9 => 696, 46 | ), 47 | 58 => 48 | array ( 49 | 0 => 400, 50 | 1 => 400, 51 | 'interval' => true, 52 | ), 53 | 60 => 54 | array ( 55 | 0 => 838, 56 | 1 => 838, 57 | 'interval' => true, 58 | 2 => 838, 59 | ), 60 | 63 => 61 | array ( 62 | 0 => 580, 63 | 1 => 1000, 64 | 2 => 774, 65 | 3 => 762, 66 | 4 => 734, 67 | 5 => 830, 68 | ), 69 | 69 => 70 | array ( 71 | 0 => 683, 72 | 1 => 683, 73 | 'interval' => true, 74 | ), 75 | 71 => 76 | array ( 77 | 0 => 821, 78 | 1 => 837, 79 | ), 80 | 73 => 81 | array ( 82 | 0 => 372, 83 | 1 => 372, 84 | 'interval' => true, 85 | ), 86 | 75 => 87 | array ( 88 | 0 => 775, 89 | 1 => 637, 90 | 2 => 995, 91 | 3 => 837, 92 | 4 => 850, 93 | 5 => 733, 94 | 6 => 850, 95 | 7 => 770, 96 | 8 => 720, 97 | 9 => 682, 98 | 10 => 812, 99 | 11 => 774, 100 | 12 => 1103, 101 | 13 => 771, 102 | 14 => 724, 103 | 15 => 725, 104 | 16 => 457, 105 | 17 => 365, 106 | 18 => 457, 107 | 19 => 838, 108 | ), 109 | 95 => 110 | array ( 111 | 0 => 500, 112 | 1 => 500, 113 | 'interval' => true, 114 | ), 115 | 97 => 116 | array ( 117 | 0 => 675, 118 | 1 => 716, 119 | 2 => 593, 120 | 3 => 716, 121 | 4 => 678, 122 | 5 => 435, 123 | 6 => 716, 124 | 7 => 712, 125 | ), 126 | 105 => 127 | array ( 128 | 0 => 343, 129 | 1 => 343, 130 | 'interval' => true, 131 | ), 132 | 107 => 133 | array ( 134 | 0 => 665, 135 | 1 => 343, 136 | 2 => 1042, 137 | 3 => 712, 138 | 4 => 687, 139 | ), 140 | 112 => 141 | array ( 142 | 0 => 716, 143 | 1 => 716, 144 | 'interval' => true, 145 | ), 146 | 114 => 147 | array ( 148 | 0 => 493, 149 | 1 => 595, 150 | 2 => 478, 151 | 3 => 712, 152 | 4 => 652, 153 | 5 => 924, 154 | 6 => 645, 155 | 7 => 652, 156 | 8 => 582, 157 | 9 => 712, 158 | 10 => 365, 159 | 11 => 712, 160 | 12 => 838, 161 | ), 162 | ); 163 | -------------------------------------------------------------------------------- /lib/tfpdf/font/unifont/dejavusans-bold-character-widths.dat: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/woocommerce/sensei-certificates/cb1bc6f927de5498af2cbe179754263edb3cff50/lib/tfpdf/font/unifont/dejavusans-bold-character-widths.dat -------------------------------------------------------------------------------- /lib/tfpdf/font/unifont/dejavusans-bold-font-metrics.php: -------------------------------------------------------------------------------- 1 | 928.0, 6 | 'Descent' => -236.0, 7 | 'CapHeight' => 928.0, 8 | 'Flags' => 262148, 9 | 'FontBBox' => '[-1069 -415 1975 1174]', 10 | 'ItalicAngle' => 0.0, 11 | 'StemV' => 165.0, 12 | 'MissingWidth' => 600.0, 13 | ); 14 | $flt_underline_pos=-63; 15 | $flt_underline_thickness=44; 16 | $ttffile='../font/unifont/DejaVuSans-Bold.ttf'; 17 | $originalsize=672300; 18 | $fontkey='dejavusansB'; 19 | -------------------------------------------------------------------------------- /lib/tfpdf/font/unifont/dejavusans-boldoblique-character-width-127.php: -------------------------------------------------------------------------------- 1 | 8 | array ( 9 | 0 => 348, 10 | 1 => 456, 11 | 2 => 521, 12 | ), 13 | 35 => 14 | array ( 15 | 0 => 696, 16 | 1 => 696, 17 | 'interval' => true, 18 | ), 19 | 37 => 20 | array ( 21 | 0 => 1002, 22 | 1 => 872, 23 | 2 => 306, 24 | ), 25 | 40 => 26 | array ( 27 | 0 => 457, 28 | 1 => 457, 29 | 'interval' => true, 30 | ), 31 | 42 => 32 | array ( 33 | 0 => 523, 34 | 1 => 838, 35 | 2 => 380, 36 | 3 => 415, 37 | 4 => 380, 38 | 5 => 365, 39 | ), 40 | 48 => 41 | array ( 42 | 0 => 696, 43 | 1 => 696, 44 | 'interval' => true, 45 | 2 => 696, 46 | 3 => 696, 47 | 4 => 696, 48 | 5 => 696, 49 | 6 => 696, 50 | 7 => 696, 51 | 8 => 696, 52 | 9 => 696, 53 | ), 54 | 58 => 55 | array ( 56 | 0 => 400, 57 | 1 => 400, 58 | 'interval' => true, 59 | ), 60 | 60 => 61 | array ( 62 | 0 => 838, 63 | 1 => 838, 64 | 'interval' => true, 65 | 2 => 838, 66 | ), 67 | 63 => 68 | array ( 69 | 0 => 580, 70 | 1 => 1000, 71 | 2 => 774, 72 | 3 => 762, 73 | 4 => 734, 74 | 5 => 830, 75 | ), 76 | 69 => 77 | array ( 78 | 0 => 683, 79 | 1 => 683, 80 | 'interval' => true, 81 | ), 82 | 71 => 83 | array ( 84 | 0 => 821, 85 | 1 => 837, 86 | ), 87 | 73 => 88 | array ( 89 | 0 => 372, 90 | 1 => 372, 91 | 'interval' => true, 92 | ), 93 | 75 => 94 | array ( 95 | 0 => 775, 96 | 1 => 637, 97 | 2 => 995, 98 | 3 => 837, 99 | 4 => 850, 100 | 5 => 733, 101 | 6 => 850, 102 | 7 => 770, 103 | 8 => 720, 104 | 9 => 682, 105 | 10 => 812, 106 | 11 => 774, 107 | 12 => 1103, 108 | 13 => 771, 109 | 14 => 724, 110 | 15 => 725, 111 | 16 => 457, 112 | 17 => 365, 113 | 18 => 457, 114 | 19 => 838, 115 | ), 116 | 95 => 117 | array ( 118 | 0 => 500, 119 | 1 => 500, 120 | 'interval' => true, 121 | ), 122 | 97 => 123 | array ( 124 | 0 => 675, 125 | 1 => 716, 126 | 2 => 593, 127 | 3 => 716, 128 | 4 => 678, 129 | 5 => 435, 130 | 6 => 716, 131 | 7 => 712, 132 | ), 133 | 105 => 134 | array ( 135 | 0 => 343, 136 | 1 => 343, 137 | 'interval' => true, 138 | ), 139 | 107 => 140 | array ( 141 | 0 => 665, 142 | 1 => 343, 143 | 2 => 1042, 144 | 3 => 712, 145 | 4 => 687, 146 | ), 147 | 112 => 148 | array ( 149 | 0 => 716, 150 | 1 => 716, 151 | 'interval' => true, 152 | ), 153 | 114 => 154 | array ( 155 | 0 => 493, 156 | 1 => 595, 157 | 2 => 478, 158 | 3 => 712, 159 | 4 => 652, 160 | 5 => 924, 161 | 6 => 645, 162 | 7 => 652, 163 | 8 => 582, 164 | 9 => 712, 165 | 10 => 365, 166 | 11 => 712, 167 | 12 => 838, 168 | ), 169 | ); 170 | -------------------------------------------------------------------------------- /lib/tfpdf/font/unifont/dejavusans-boldoblique-character-widths.dat: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/woocommerce/sensei-certificates/cb1bc6f927de5498af2cbe179754263edb3cff50/lib/tfpdf/font/unifont/dejavusans-boldoblique-character-widths.dat -------------------------------------------------------------------------------- /lib/tfpdf/font/unifont/dejavusans-boldoblique-font-metrics.php: -------------------------------------------------------------------------------- 1 | 928.0, 6 | 'Descent' => -236.0, 7 | 'CapHeight' => 928.0, 8 | 'Flags' => 262212, 9 | 'FontBBox' => '[-1067 -385 1999 1121]', 10 | 'ItalicAngle' => -11.0, 11 | 'StemV' => 165.0, 12 | 'MissingWidth' => 600.0, 13 | ); 14 | $flt_underline_pos=-63; 15 | $flt_underline_thickness=44; 16 | $ttffile='../font/unifont/DejaVuSans-BoldOblique.ttf'; 17 | $originalsize=611212; 18 | $fontkey='dejavusansBI'; 19 | -------------------------------------------------------------------------------- /lib/tfpdf/font/unifont/dejavusans-character-width-127.php: -------------------------------------------------------------------------------- 1 | 8 | array ( 9 | 0 => 318, 10 | 1 => 401, 11 | 2 => 460, 12 | 3 => 838, 13 | 4 => 636, 14 | 5 => 950, 15 | 6 => 780, 16 | 7 => 275, 17 | ), 18 | 40 => 19 | array ( 20 | 0 => 390, 21 | 1 => 390, 22 | 'interval' => true, 23 | ), 24 | 42 => 25 | array ( 26 | 0 => 500, 27 | 1 => 838, 28 | 2 => 318, 29 | 3 => 361, 30 | 4 => 318, 31 | 5 => 337, 32 | ), 33 | 48 => 34 | array ( 35 | 0 => 636, 36 | 1 => 636, 37 | 'interval' => true, 38 | 2 => 636, 39 | 3 => 636, 40 | 4 => 636, 41 | 5 => 636, 42 | 6 => 636, 43 | 7 => 636, 44 | 8 => 636, 45 | 9 => 636, 46 | ), 47 | 58 => 48 | array ( 49 | 0 => 337, 50 | 1 => 337, 51 | 'interval' => true, 52 | ), 53 | 60 => 54 | array ( 55 | 0 => 838, 56 | 1 => 838, 57 | 'interval' => true, 58 | 2 => 838, 59 | ), 60 | 63 => 61 | array ( 62 | 0 => 531, 63 | 1 => 1000, 64 | 2 => 684, 65 | 3 => 686, 66 | 4 => 698, 67 | 5 => 770, 68 | 6 => 632, 69 | 7 => 575, 70 | 8 => 775, 71 | 9 => 752, 72 | ), 73 | 73 => 74 | array ( 75 | 0 => 295, 76 | 1 => 295, 77 | 'interval' => true, 78 | ), 79 | 75 => 80 | array ( 81 | 0 => 656, 82 | 1 => 557, 83 | 2 => 863, 84 | 3 => 748, 85 | 4 => 787, 86 | 5 => 603, 87 | 6 => 787, 88 | 7 => 695, 89 | 8 => 635, 90 | 9 => 611, 91 | 10 => 732, 92 | 11 => 684, 93 | 12 => 989, 94 | 13 => 685, 95 | 14 => 611, 96 | 15 => 685, 97 | 16 => 390, 98 | 17 => 337, 99 | 18 => 390, 100 | 19 => 838, 101 | ), 102 | 95 => 103 | array ( 104 | 0 => 500, 105 | 1 => 500, 106 | 'interval' => true, 107 | ), 108 | 97 => 109 | array ( 110 | 0 => 613, 111 | 1 => 635, 112 | 2 => 550, 113 | 3 => 635, 114 | 4 => 615, 115 | 5 => 352, 116 | 6 => 635, 117 | 7 => 634, 118 | ), 119 | 105 => 120 | array ( 121 | 0 => 278, 122 | 1 => 278, 123 | 'interval' => true, 124 | ), 125 | 107 => 126 | array ( 127 | 0 => 579, 128 | 1 => 278, 129 | 2 => 974, 130 | 3 => 634, 131 | 4 => 612, 132 | ), 133 | 112 => 134 | array ( 135 | 0 => 635, 136 | 1 => 635, 137 | 'interval' => true, 138 | ), 139 | 114 => 140 | array ( 141 | 0 => 411, 142 | 1 => 521, 143 | 2 => 392, 144 | 3 => 634, 145 | 4 => 592, 146 | 5 => 818, 147 | ), 148 | 120 => 149 | array ( 150 | 0 => 592, 151 | 1 => 592, 152 | 'interval' => true, 153 | ), 154 | 122 => 155 | array ( 156 | 0 => 525, 157 | 1 => 636, 158 | 2 => 337, 159 | 3 => 636, 160 | 4 => 838, 161 | ), 162 | ); 163 | -------------------------------------------------------------------------------- /lib/tfpdf/font/unifont/dejavusans-character-widths.dat: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/woocommerce/sensei-certificates/cb1bc6f927de5498af2cbe179754263edb3cff50/lib/tfpdf/font/unifont/dejavusans-character-widths.dat -------------------------------------------------------------------------------- /lib/tfpdf/font/unifont/dejavusans-extralight-character-width-127.php: -------------------------------------------------------------------------------- 1 | 8 | array ( 9 | 0 => 318, 10 | 1 => 401, 11 | 2 => 460, 12 | 3 => 838, 13 | 4 => 636, 14 | 5 => 950, 15 | 6 => 780, 16 | 7 => 275, 17 | ), 18 | 40 => 19 | array ( 20 | 0 => 390, 21 | 1 => 390, 22 | 'interval' => true, 23 | ), 24 | 42 => 25 | array ( 26 | 0 => 500, 27 | 1 => 838, 28 | 2 => 318, 29 | 3 => 361, 30 | 4 => 318, 31 | 5 => 337, 32 | ), 33 | 48 => 34 | array ( 35 | 0 => 636, 36 | 1 => 636, 37 | 'interval' => true, 38 | 2 => 636, 39 | 3 => 636, 40 | 4 => 636, 41 | 5 => 636, 42 | 6 => 636, 43 | 7 => 636, 44 | 8 => 636, 45 | 9 => 636, 46 | ), 47 | 58 => 48 | array ( 49 | 0 => 337, 50 | 1 => 337, 51 | 'interval' => true, 52 | ), 53 | 60 => 54 | array ( 55 | 0 => 838, 56 | 1 => 838, 57 | 'interval' => true, 58 | 2 => 838, 59 | ), 60 | 63 => 61 | array ( 62 | 0 => 531, 63 | 1 => 1000, 64 | 2 => 684, 65 | 3 => 655, 66 | 4 => 698, 67 | 5 => 770, 68 | 6 => 632, 69 | 7 => 575, 70 | 8 => 775, 71 | 9 => 752, 72 | ), 73 | 73 => 74 | array ( 75 | 0 => 295, 76 | 1 => 295, 77 | 'interval' => true, 78 | ), 79 | 75 => 80 | array ( 81 | 0 => 656, 82 | 1 => 557, 83 | 2 => 863, 84 | 3 => 748, 85 | 4 => 787, 86 | 5 => 603, 87 | 6 => 787, 88 | 7 => 695, 89 | 8 => 635, 90 | 9 => 611, 91 | 10 => 732, 92 | 11 => 684, 93 | 12 => 989, 94 | 13 => 685, 95 | 14 => 611, 96 | 15 => 685, 97 | 16 => 390, 98 | 17 => 337, 99 | 18 => 390, 100 | 19 => 838, 101 | ), 102 | 95 => 103 | array ( 104 | 0 => 500, 105 | 1 => 500, 106 | 'interval' => true, 107 | ), 108 | 97 => 109 | array ( 110 | 0 => 613, 111 | 1 => 635, 112 | 2 => 550, 113 | 3 => 635, 114 | 4 => 615, 115 | 5 => 352, 116 | 6 => 600, 117 | 7 => 634, 118 | ), 119 | 105 => 120 | array ( 121 | 0 => 278, 122 | 1 => 278, 123 | 'interval' => true, 124 | ), 125 | 107 => 126 | array ( 127 | 0 => 579, 128 | 1 => 278, 129 | 2 => 974, 130 | 3 => 634, 131 | 4 => 612, 132 | ), 133 | 112 => 134 | array ( 135 | 0 => 635, 136 | 1 => 635, 137 | 'interval' => true, 138 | ), 139 | 114 => 140 | array ( 141 | 0 => 411, 142 | 1 => 521, 143 | 2 => 392, 144 | 3 => 634, 145 | 4 => 592, 146 | 5 => 818, 147 | ), 148 | 120 => 149 | array ( 150 | 0 => 592, 151 | 1 => 592, 152 | 'interval' => true, 153 | ), 154 | 122 => 155 | array ( 156 | 0 => 525, 157 | 1 => 636, 158 | 2 => 337, 159 | 3 => 636, 160 | 4 => 838, 161 | ), 162 | ); 163 | -------------------------------------------------------------------------------- /lib/tfpdf/font/unifont/dejavusans-extralight-character-widths.dat: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/woocommerce/sensei-certificates/cb1bc6f927de5498af2cbe179754263edb3cff50/lib/tfpdf/font/unifont/dejavusans-extralight-character-widths.dat -------------------------------------------------------------------------------- /lib/tfpdf/font/unifont/dejavusans-extralight-font-metrics.php: -------------------------------------------------------------------------------- 1 | 928.0, 6 | 'Descent' => -236.0, 7 | 'CapHeight' => 928.0, 8 | 'Flags' => 4, 9 | 'FontBBox' => '[-733 -269 1659 1104]', 10 | 'ItalicAngle' => 0.0, 11 | 'StemV' => 59.0, 12 | 'MissingWidth' => 600.0, 13 | ); 14 | $flt_underline_pos=-63; 15 | $flt_underline_thickness=44; 16 | $ttffile='../font/unifont/DejaVuSans-ExtraLight.ttf'; 17 | $originalsize=345208; 18 | $fontkey='dejavusans'; 19 | -------------------------------------------------------------------------------- /lib/tfpdf/font/unifont/dejavusans-font-metrics.php: -------------------------------------------------------------------------------- 1 | 928.0, 6 | 'Descent' => -236.0, 7 | 'CapHeight' => 928.0, 8 | 'Flags' => 4, 9 | 'FontBBox' => '[-1021 -415 1681 1167]', 10 | 'ItalicAngle' => 0.0, 11 | 'StemV' => 87.0, 12 | 'MissingWidth' => 600.0, 13 | ); 14 | $flt_underline_pos=-63; 15 | $flt_underline_thickness=44; 16 | $ttffile='../font/unifont/DejaVuSans.ttf'; 17 | $originalsize=720012; 18 | $fontkey='dejavusans'; 19 | -------------------------------------------------------------------------------- /lib/tfpdf/font/unifont/dejavusans-oblique-character-width-127.php: -------------------------------------------------------------------------------- 1 | 8 | array ( 9 | 0 => 318, 10 | 1 => 401, 11 | 2 => 460, 12 | 3 => 838, 13 | 4 => 636, 14 | 5 => 950, 15 | 6 => 780, 16 | 7 => 275, 17 | ), 18 | 40 => 19 | array ( 20 | 0 => 390, 21 | 1 => 390, 22 | 'interval' => true, 23 | ), 24 | 42 => 25 | array ( 26 | 0 => 500, 27 | 1 => 838, 28 | 2 => 318, 29 | 3 => 361, 30 | 4 => 318, 31 | 5 => 337, 32 | ), 33 | 48 => 34 | array ( 35 | 0 => 636, 36 | 1 => 636, 37 | 'interval' => true, 38 | 2 => 636, 39 | 3 => 636, 40 | 4 => 636, 41 | 5 => 636, 42 | 6 => 636, 43 | 7 => 636, 44 | 8 => 636, 45 | 9 => 636, 46 | ), 47 | 58 => 48 | array ( 49 | 0 => 337, 50 | 1 => 337, 51 | 'interval' => true, 52 | ), 53 | 60 => 54 | array ( 55 | 0 => 838, 56 | 1 => 838, 57 | 'interval' => true, 58 | 2 => 838, 59 | ), 60 | 63 => 61 | array ( 62 | 0 => 531, 63 | 1 => 1000, 64 | 2 => 684, 65 | 3 => 686, 66 | 4 => 698, 67 | 5 => 770, 68 | 6 => 632, 69 | 7 => 575, 70 | 8 => 775, 71 | 9 => 752, 72 | ), 73 | 73 => 74 | array ( 75 | 0 => 295, 76 | 1 => 295, 77 | 'interval' => true, 78 | ), 79 | 75 => 80 | array ( 81 | 0 => 656, 82 | 1 => 557, 83 | 2 => 863, 84 | 3 => 748, 85 | 4 => 787, 86 | 5 => 603, 87 | 6 => 787, 88 | 7 => 695, 89 | 8 => 635, 90 | 9 => 611, 91 | 10 => 732, 92 | 11 => 684, 93 | 12 => 989, 94 | 13 => 685, 95 | 14 => 611, 96 | 15 => 685, 97 | 16 => 390, 98 | 17 => 337, 99 | 18 => 390, 100 | 19 => 838, 101 | ), 102 | 95 => 103 | array ( 104 | 0 => 500, 105 | 1 => 500, 106 | 'interval' => true, 107 | ), 108 | 97 => 109 | array ( 110 | 0 => 613, 111 | 1 => 635, 112 | 2 => 550, 113 | 3 => 635, 114 | 4 => 615, 115 | 5 => 352, 116 | 6 => 635, 117 | 7 => 634, 118 | ), 119 | 105 => 120 | array ( 121 | 0 => 278, 122 | 1 => 278, 123 | 'interval' => true, 124 | ), 125 | 107 => 126 | array ( 127 | 0 => 579, 128 | 1 => 278, 129 | 2 => 974, 130 | 3 => 634, 131 | 4 => 612, 132 | ), 133 | 112 => 134 | array ( 135 | 0 => 635, 136 | 1 => 635, 137 | 'interval' => true, 138 | ), 139 | 114 => 140 | array ( 141 | 0 => 411, 142 | 1 => 521, 143 | 2 => 392, 144 | 3 => 634, 145 | 4 => 592, 146 | 5 => 818, 147 | ), 148 | 120 => 149 | array ( 150 | 0 => 592, 151 | 1 => 592, 152 | 'interval' => true, 153 | ), 154 | 122 => 155 | array ( 156 | 0 => 525, 157 | 1 => 636, 158 | 2 => 337, 159 | 3 => 636, 160 | 4 => 838, 161 | ), 162 | ); 163 | -------------------------------------------------------------------------------- /lib/tfpdf/font/unifont/dejavusans-oblique-character-widths.dat: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/woocommerce/sensei-certificates/cb1bc6f927de5498af2cbe179754263edb3cff50/lib/tfpdf/font/unifont/dejavusans-oblique-character-widths.dat -------------------------------------------------------------------------------- /lib/tfpdf/font/unifont/dejavusans-oblique-font-metrics.php: -------------------------------------------------------------------------------- 1 | 928.0, 6 | 'Descent' => -236.0, 7 | 'CapHeight' => 928.0, 8 | 'Flags' => 68, 9 | 'FontBBox' => '[-1016 -350 1659 1068]', 10 | 'ItalicAngle' => -11.0, 11 | 'StemV' => 87.0, 12 | 'MissingWidth' => 600.0, 13 | ); 14 | $flt_underline_pos=-63; 15 | $flt_underline_thickness=44; 16 | $ttffile='../font/unifont/DejaVuSans-Oblique.ttf'; 17 | $originalsize=611556; 18 | $fontkey='dejavusansI'; 19 | -------------------------------------------------------------------------------- /lib/tfpdf/font/unifont/dejavusanscondensed-bold-character-width-127.php: -------------------------------------------------------------------------------- 1 | 8 | array ( 9 | 0 => 313, 10 | 1 => 410, 11 | 2 => 469, 12 | 3 => 754, 13 | 4 => 626, 14 | 5 => 901, 15 | 6 => 785, 16 | 7 => 275, 17 | ), 18 | 40 => 19 | array ( 20 | 0 => 411, 21 | 1 => 411, 22 | 'interval' => true, 23 | ), 24 | 42 => 25 | array ( 26 | 0 => 470, 27 | 1 => 754, 28 | 2 => 342, 29 | 3 => 374, 30 | 4 => 342, 31 | 5 => 329, 32 | ), 33 | 48 => 34 | array ( 35 | 0 => 626, 36 | 1 => 626, 37 | 'interval' => true, 38 | 2 => 626, 39 | 3 => 626, 40 | 4 => 626, 41 | 5 => 626, 42 | 6 => 626, 43 | 7 => 626, 44 | 8 => 626, 45 | 9 => 626, 46 | ), 47 | 58 => 48 | array ( 49 | 0 => 360, 50 | 1 => 360, 51 | 'interval' => true, 52 | ), 53 | 60 => 54 | array ( 55 | 0 => 754, 56 | 1 => 754, 57 | 'interval' => true, 58 | 2 => 754, 59 | ), 60 | 63 => 61 | array ( 62 | 0 => 522, 63 | 1 => 900, 64 | 2 => 696, 65 | 3 => 686, 66 | 4 => 660, 67 | 5 => 747, 68 | ), 69 | 69 => 70 | array ( 71 | 0 => 615, 72 | 1 => 615, 73 | 'interval' => true, 74 | ), 75 | 71 => 76 | array ( 77 | 0 => 738, 78 | 1 => 753, 79 | ), 80 | 73 => 81 | array ( 82 | 0 => 334, 83 | 1 => 334, 84 | 'interval' => true, 85 | ), 86 | 75 => 87 | array ( 88 | 0 => 697, 89 | 1 => 573, 90 | 2 => 896, 91 | 3 => 753, 92 | 4 => 765, 93 | 5 => 659, 94 | 6 => 765, 95 | 7 => 693, 96 | 8 => 648, 97 | 9 => 614, 98 | 10 => 730, 99 | 11 => 696, 100 | 12 => 993, 101 | 13 => 694, 102 | 14 => 651, 103 | 15 => 652, 104 | 16 => 411, 105 | 17 => 329, 106 | 18 => 411, 107 | 19 => 754, 108 | ), 109 | 95 => 110 | array ( 111 | 0 => 450, 112 | 1 => 450, 113 | 'interval' => true, 114 | ), 115 | 97 => 116 | array ( 117 | 0 => 607, 118 | 1 => 644, 119 | 2 => 533, 120 | 3 => 644, 121 | 4 => 610, 122 | 5 => 391, 123 | 6 => 644, 124 | 7 => 641, 125 | ), 126 | 105 => 127 | array ( 128 | 0 => 308, 129 | 1 => 308, 130 | 'interval' => true, 131 | ), 132 | 107 => 133 | array ( 134 | 0 => 598, 135 | 1 => 308, 136 | 2 => 938, 137 | 3 => 641, 138 | 4 => 618, 139 | ), 140 | 112 => 141 | array ( 142 | 0 => 644, 143 | 1 => 644, 144 | 'interval' => true, 145 | ), 146 | 114 => 147 | array ( 148 | 0 => 444, 149 | 1 => 536, 150 | 2 => 430, 151 | 3 => 641, 152 | 4 => 586, 153 | 5 => 831, 154 | 6 => 580, 155 | 7 => 586, 156 | 8 => 523, 157 | 9 => 641, 158 | 10 => 329, 159 | 11 => 641, 160 | 12 => 754, 161 | ), 162 | ); 163 | -------------------------------------------------------------------------------- /lib/tfpdf/font/unifont/dejavusanscondensed-bold-character-widths.dat: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/woocommerce/sensei-certificates/cb1bc6f927de5498af2cbe179754263edb3cff50/lib/tfpdf/font/unifont/dejavusanscondensed-bold-character-widths.dat -------------------------------------------------------------------------------- /lib/tfpdf/font/unifont/dejavusanscondensed-bold-font-metrics.php: -------------------------------------------------------------------------------- 1 | 928.0, 6 | 'Descent' => -236.0, 7 | 'CapHeight' => 928.0, 8 | 'Flags' => 262148, 9 | 'FontBBox' => '[-962 -415 1778 1174]', 10 | 'ItalicAngle' => 0.0, 11 | 'StemV' => 165.0, 12 | 'MissingWidth' => 540.0, 13 | ); 14 | $flt_underline_pos=-63; 15 | $flt_underline_thickness=44; 16 | $ttffile='../font/unifont/DejaVuSansCondensed-Bold.ttf'; 17 | $originalsize=631992; 18 | $fontkey='dejavusanscondensedB'; 19 | -------------------------------------------------------------------------------- /lib/tfpdf/font/unifont/dejavusanscondensed-boldoblique-character-width-127.php: -------------------------------------------------------------------------------- 1 | 8 | array ( 9 | 0 => 313, 10 | 1 => 410, 11 | 2 => 469, 12 | ), 13 | 35 => 14 | array ( 15 | 0 => 626, 16 | 1 => 626, 17 | 'interval' => true, 18 | ), 19 | 37 => 20 | array ( 21 | 0 => 901, 22 | 1 => 785, 23 | 2 => 275, 24 | ), 25 | 40 => 26 | array ( 27 | 0 => 411, 28 | 1 => 411, 29 | 'interval' => true, 30 | ), 31 | 42 => 32 | array ( 33 | 0 => 470, 34 | 1 => 754, 35 | 2 => 342, 36 | 3 => 374, 37 | 4 => 342, 38 | 5 => 329, 39 | ), 40 | 48 => 41 | array ( 42 | 0 => 626, 43 | 1 => 626, 44 | 'interval' => true, 45 | 2 => 626, 46 | 3 => 626, 47 | 4 => 626, 48 | 5 => 626, 49 | 6 => 626, 50 | 7 => 626, 51 | 8 => 626, 52 | 9 => 626, 53 | ), 54 | 58 => 55 | array ( 56 | 0 => 360, 57 | 1 => 360, 58 | 'interval' => true, 59 | ), 60 | 60 => 61 | array ( 62 | 0 => 754, 63 | 1 => 754, 64 | 'interval' => true, 65 | 2 => 754, 66 | ), 67 | 63 => 68 | array ( 69 | 0 => 522, 70 | 1 => 900, 71 | 2 => 696, 72 | 3 => 686, 73 | 4 => 660, 74 | 5 => 747, 75 | ), 76 | 69 => 77 | array ( 78 | 0 => 615, 79 | 1 => 615, 80 | 'interval' => true, 81 | ), 82 | 71 => 83 | array ( 84 | 0 => 738, 85 | 1 => 753, 86 | ), 87 | 73 => 88 | array ( 89 | 0 => 334, 90 | 1 => 334, 91 | 'interval' => true, 92 | ), 93 | 75 => 94 | array ( 95 | 0 => 697, 96 | 1 => 573, 97 | 2 => 896, 98 | 3 => 753, 99 | 4 => 765, 100 | 5 => 659, 101 | 6 => 765, 102 | 7 => 693, 103 | 8 => 648, 104 | 9 => 614, 105 | 10 => 730, 106 | 11 => 696, 107 | 12 => 993, 108 | 13 => 694, 109 | 14 => 651, 110 | 15 => 652, 111 | 16 => 411, 112 | 17 => 329, 113 | 18 => 411, 114 | 19 => 754, 115 | ), 116 | 95 => 117 | array ( 118 | 0 => 450, 119 | 1 => 450, 120 | 'interval' => true, 121 | ), 122 | 97 => 123 | array ( 124 | 0 => 607, 125 | 1 => 644, 126 | 2 => 533, 127 | 3 => 644, 128 | 4 => 610, 129 | 5 => 391, 130 | 6 => 644, 131 | 7 => 641, 132 | ), 133 | 105 => 134 | array ( 135 | 0 => 308, 136 | 1 => 308, 137 | 'interval' => true, 138 | ), 139 | 107 => 140 | array ( 141 | 0 => 598, 142 | 1 => 308, 143 | 2 => 938, 144 | 3 => 641, 145 | 4 => 618, 146 | ), 147 | 112 => 148 | array ( 149 | 0 => 644, 150 | 1 => 644, 151 | 'interval' => true, 152 | ), 153 | 114 => 154 | array ( 155 | 0 => 444, 156 | 1 => 536, 157 | 2 => 430, 158 | 3 => 641, 159 | 4 => 586, 160 | 5 => 831, 161 | 6 => 580, 162 | 7 => 586, 163 | 8 => 523, 164 | 9 => 641, 165 | 10 => 329, 166 | 11 => 641, 167 | 12 => 754, 168 | ), 169 | ); 170 | -------------------------------------------------------------------------------- /lib/tfpdf/font/unifont/dejavusanscondensed-boldoblique-character-widths.dat: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/woocommerce/sensei-certificates/cb1bc6f927de5498af2cbe179754263edb3cff50/lib/tfpdf/font/unifont/dejavusanscondensed-boldoblique-character-widths.dat -------------------------------------------------------------------------------- /lib/tfpdf/font/unifont/dejavusanscondensed-boldoblique-font-metrics.php: -------------------------------------------------------------------------------- 1 | 928.0, 6 | 'Descent' => -236.0, 7 | 'CapHeight' => 928.0, 8 | 'Flags' => 262212, 9 | 'FontBBox' => '[-960 -385 1799 1121]', 10 | 'ItalicAngle' => -11.0, 11 | 'StemV' => 165.0, 12 | 'MissingWidth' => 540.0, 13 | ); 14 | $flt_underline_pos=-63; 15 | $flt_underline_thickness=44; 16 | $ttffile='../font/unifont/DejaVuSansCondensed-BoldOblique.ttf'; 17 | $originalsize=580168; 18 | $fontkey='dejavusanscondensedBI'; 19 | -------------------------------------------------------------------------------- /lib/tfpdf/font/unifont/dejavusanscondensed-character-width-127.php: -------------------------------------------------------------------------------- 1 | 8 | array ( 9 | 0 => 286, 10 | 1 => 360, 11 | 2 => 414, 12 | 3 => 754, 13 | 4 => 572, 14 | 5 => 855, 15 | 6 => 702, 16 | 7 => 247, 17 | ), 18 | 40 => 19 | array ( 20 | 0 => 351, 21 | 1 => 351, 22 | 'interval' => true, 23 | ), 24 | 42 => 25 | array ( 26 | 0 => 450, 27 | 1 => 754, 28 | 2 => 286, 29 | 3 => 325, 30 | 4 => 286, 31 | 5 => 303, 32 | ), 33 | 48 => 34 | array ( 35 | 0 => 572, 36 | 1 => 572, 37 | 'interval' => true, 38 | 2 => 572, 39 | 3 => 572, 40 | 4 => 572, 41 | 5 => 572, 42 | 6 => 572, 43 | 7 => 572, 44 | 8 => 572, 45 | 9 => 572, 46 | ), 47 | 58 => 48 | array ( 49 | 0 => 303, 50 | 1 => 303, 51 | 'interval' => true, 52 | ), 53 | 60 => 54 | array ( 55 | 0 => 754, 56 | 1 => 754, 57 | 'interval' => true, 58 | 2 => 754, 59 | ), 60 | 63 => 61 | array ( 62 | 0 => 478, 63 | 1 => 900, 64 | 2 => 615, 65 | 3 => 617, 66 | 4 => 628, 67 | 5 => 693, 68 | 6 => 568, 69 | 7 => 518, 70 | 8 => 697, 71 | 9 => 677, 72 | ), 73 | 73 => 74 | array ( 75 | 0 => 265, 76 | 1 => 265, 77 | 'interval' => true, 78 | ), 79 | 75 => 80 | array ( 81 | 0 => 590, 82 | 1 => 501, 83 | 2 => 776, 84 | 3 => 673, 85 | 4 => 708, 86 | 5 => 542, 87 | 6 => 708, 88 | 7 => 625, 89 | 8 => 571, 90 | 9 => 549, 91 | 10 => 659, 92 | 11 => 615, 93 | 12 => 890, 94 | 13 => 616, 95 | 14 => 549, 96 | 15 => 616, 97 | 16 => 351, 98 | 17 => 303, 99 | 18 => 351, 100 | 19 => 754, 101 | ), 102 | 95 => 103 | array ( 104 | 0 => 450, 105 | 1 => 450, 106 | 'interval' => true, 107 | ), 108 | 97 => 109 | array ( 110 | 0 => 551, 111 | 1 => 571, 112 | 2 => 495, 113 | 3 => 571, 114 | 4 => 554, 115 | 5 => 316, 116 | 6 => 571, 117 | 7 => 570, 118 | ), 119 | 105 => 120 | array ( 121 | 0 => 250, 122 | 1 => 250, 123 | 'interval' => true, 124 | ), 125 | 107 => 126 | array ( 127 | 0 => 521, 128 | 1 => 250, 129 | 2 => 876, 130 | 3 => 570, 131 | 4 => 550, 132 | ), 133 | 112 => 134 | array ( 135 | 0 => 571, 136 | 1 => 571, 137 | 'interval' => true, 138 | ), 139 | 114 => 140 | array ( 141 | 0 => 370, 142 | 1 => 469, 143 | 2 => 353, 144 | 3 => 570, 145 | 4 => 532, 146 | 5 => 736, 147 | ), 148 | 120 => 149 | array ( 150 | 0 => 532, 151 | 1 => 532, 152 | 'interval' => true, 153 | ), 154 | 122 => 155 | array ( 156 | 0 => 472, 157 | 1 => 572, 158 | 2 => 303, 159 | 3 => 572, 160 | 4 => 754, 161 | ), 162 | ); 163 | -------------------------------------------------------------------------------- /lib/tfpdf/font/unifont/dejavusanscondensed-character-widths.dat: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/woocommerce/sensei-certificates/cb1bc6f927de5498af2cbe179754263edb3cff50/lib/tfpdf/font/unifont/dejavusanscondensed-character-widths.dat -------------------------------------------------------------------------------- /lib/tfpdf/font/unifont/dejavusanscondensed-font-metrics.php: -------------------------------------------------------------------------------- 1 | 928.0, 6 | 'Descent' => -236.0, 7 | 'CapHeight' => 928.0, 8 | 'Flags' => 4, 9 | 'FontBBox' => '[-918 -415 1513 1167]', 10 | 'ItalicAngle' => 0.0, 11 | 'StemV' => 87.0, 12 | 'MissingWidth' => 540.0, 13 | ); 14 | $flt_underline_pos=-63; 15 | $flt_underline_thickness=44; 16 | $ttffile='../font/unifont/DejaVuSansCondensed.ttf'; 17 | $originalsize=643852; 18 | $fontkey='dejavusanscondensed'; 19 | -------------------------------------------------------------------------------- /lib/tfpdf/font/unifont/dejavusanscondensed-oblique-character-width-127.php: -------------------------------------------------------------------------------- 1 | 8 | array ( 9 | 0 => 286, 10 | 1 => 360, 11 | 2 => 414, 12 | 3 => 754, 13 | 4 => 572, 14 | 5 => 855, 15 | 6 => 702, 16 | 7 => 247, 17 | ), 18 | 40 => 19 | array ( 20 | 0 => 351, 21 | 1 => 351, 22 | 'interval' => true, 23 | ), 24 | 42 => 25 | array ( 26 | 0 => 450, 27 | 1 => 754, 28 | 2 => 286, 29 | 3 => 325, 30 | 4 => 286, 31 | 5 => 303, 32 | ), 33 | 48 => 34 | array ( 35 | 0 => 572, 36 | 1 => 572, 37 | 'interval' => true, 38 | 2 => 572, 39 | 3 => 572, 40 | 4 => 572, 41 | 5 => 572, 42 | 6 => 572, 43 | 7 => 572, 44 | 8 => 572, 45 | 9 => 572, 46 | ), 47 | 58 => 48 | array ( 49 | 0 => 303, 50 | 1 => 303, 51 | 'interval' => true, 52 | ), 53 | 60 => 54 | array ( 55 | 0 => 754, 56 | 1 => 754, 57 | 'interval' => true, 58 | 2 => 754, 59 | ), 60 | 63 => 61 | array ( 62 | 0 => 478, 63 | 1 => 900, 64 | 2 => 615, 65 | 3 => 617, 66 | 4 => 628, 67 | 5 => 693, 68 | 6 => 568, 69 | 7 => 518, 70 | 8 => 697, 71 | 9 => 677, 72 | ), 73 | 73 => 74 | array ( 75 | 0 => 265, 76 | 1 => 265, 77 | 'interval' => true, 78 | ), 79 | 75 => 80 | array ( 81 | 0 => 590, 82 | 1 => 501, 83 | 2 => 776, 84 | 3 => 673, 85 | 4 => 708, 86 | 5 => 542, 87 | 6 => 708, 88 | 7 => 625, 89 | 8 => 571, 90 | 9 => 549, 91 | 10 => 659, 92 | 11 => 615, 93 | 12 => 890, 94 | 13 => 616, 95 | 14 => 549, 96 | 15 => 616, 97 | 16 => 351, 98 | 17 => 303, 99 | 18 => 351, 100 | 19 => 754, 101 | ), 102 | 95 => 103 | array ( 104 | 0 => 450, 105 | 1 => 450, 106 | 'interval' => true, 107 | ), 108 | 97 => 109 | array ( 110 | 0 => 551, 111 | 1 => 571, 112 | 2 => 495, 113 | 3 => 571, 114 | 4 => 554, 115 | 5 => 316, 116 | 6 => 571, 117 | 7 => 570, 118 | ), 119 | 105 => 120 | array ( 121 | 0 => 250, 122 | 1 => 250, 123 | 'interval' => true, 124 | ), 125 | 107 => 126 | array ( 127 | 0 => 521, 128 | 1 => 250, 129 | 2 => 876, 130 | 3 => 570, 131 | 4 => 550, 132 | ), 133 | 112 => 134 | array ( 135 | 0 => 571, 136 | 1 => 571, 137 | 'interval' => true, 138 | ), 139 | 114 => 140 | array ( 141 | 0 => 370, 142 | 1 => 469, 143 | 2 => 353, 144 | 3 => 570, 145 | 4 => 532, 146 | 5 => 736, 147 | ), 148 | 120 => 149 | array ( 150 | 0 => 532, 151 | 1 => 532, 152 | 'interval' => true, 153 | ), 154 | 122 => 155 | array ( 156 | 0 => 472, 157 | 1 => 572, 158 | 2 => 303, 159 | 3 => 572, 160 | 4 => 754, 161 | ), 162 | ); 163 | -------------------------------------------------------------------------------- /lib/tfpdf/font/unifont/dejavusanscondensed-oblique-character-widths.dat: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/woocommerce/sensei-certificates/cb1bc6f927de5498af2cbe179754263edb3cff50/lib/tfpdf/font/unifont/dejavusanscondensed-oblique-character-widths.dat -------------------------------------------------------------------------------- /lib/tfpdf/font/unifont/dejavusanscondensed-oblique-font-metrics.php: -------------------------------------------------------------------------------- 1 | 928.0, 6 | 'Descent' => -236.0, 7 | 'CapHeight' => 928.0, 8 | 'Flags' => 68, 9 | 'FontBBox' => '[-914 -350 1493 1068]', 10 | 'ItalicAngle' => -11.0, 11 | 'StemV' => 87.0, 12 | 'MissingWidth' => 540.0, 13 | ); 14 | $flt_underline_pos=-63; 15 | $flt_underline_thickness=44; 16 | $ttffile='../font/unifont/DejaVuSansCondensed-Oblique.ttf'; 17 | $originalsize=576004; 18 | $fontkey='dejavusanscondensedI'; 19 | -------------------------------------------------------------------------------- /lib/tfpdf/font/unifont/dejavusansmono-bold-character-width-127.php: -------------------------------------------------------------------------------- 1 | 8 | array ( 9 | 0 => 602, 10 | 1 => 602, 11 | 'interval' => true, 12 | 2 => 602, 13 | 3 => 602, 14 | 4 => 602, 15 | 5 => 602, 16 | 6 => 602, 17 | 7 => 602, 18 | 8 => 602, 19 | 9 => 602, 20 | 10 => 602, 21 | 11 => 602, 22 | 12 => 602, 23 | 13 => 602, 24 | 14 => 602, 25 | 15 => 602, 26 | 16 => 602, 27 | 17 => 602, 28 | 18 => 602, 29 | 19 => 602, 30 | 20 => 602, 31 | 21 => 602, 32 | 22 => 602, 33 | 23 => 602, 34 | 24 => 602, 35 | 25 => 602, 36 | 26 => 602, 37 | 27 => 602, 38 | 28 => 602, 39 | 29 => 602, 40 | 30 => 602, 41 | 31 => 602, 42 | 32 => 602, 43 | 33 => 602, 44 | 34 => 602, 45 | 35 => 602, 46 | 36 => 602, 47 | 37 => 602, 48 | 38 => 602, 49 | 39 => 602, 50 | 40 => 602, 51 | 41 => 602, 52 | 42 => 602, 53 | 43 => 602, 54 | 44 => 602, 55 | 45 => 602, 56 | 46 => 602, 57 | 47 => 602, 58 | 48 => 602, 59 | 49 => 602, 60 | 50 => 602, 61 | 51 => 602, 62 | 52 => 602, 63 | 53 => 602, 64 | 54 => 602, 65 | 55 => 602, 66 | 56 => 602, 67 | 57 => 602, 68 | 58 => 602, 69 | 59 => 602, 70 | 60 => 602, 71 | 61 => 602, 72 | 62 => 602, 73 | 63 => 602, 74 | 64 => 602, 75 | 65 => 602, 76 | 66 => 602, 77 | 67 => 602, 78 | 68 => 602, 79 | 69 => 602, 80 | 70 => 602, 81 | 71 => 602, 82 | 72 => 602, 83 | 73 => 602, 84 | 74 => 602, 85 | 75 => 602, 86 | 76 => 602, 87 | 77 => 602, 88 | 78 => 602, 89 | 79 => 602, 90 | 80 => 602, 91 | 81 => 602, 92 | 82 => 602, 93 | 83 => 602, 94 | 84 => 602, 95 | 85 => 602, 96 | 86 => 602, 97 | 87 => 602, 98 | 88 => 602, 99 | 89 => 602, 100 | 90 => 602, 101 | 91 => 602, 102 | 92 => 602, 103 | 93 => 602, 104 | 94 => 602, 105 | ), 106 | ); 107 | -------------------------------------------------------------------------------- /lib/tfpdf/font/unifont/dejavusansmono-bold-character-widths.dat: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/woocommerce/sensei-certificates/cb1bc6f927de5498af2cbe179754263edb3cff50/lib/tfpdf/font/unifont/dejavusansmono-bold-character-widths.dat -------------------------------------------------------------------------------- /lib/tfpdf/font/unifont/dejavusansmono-bold-font-metrics.php: -------------------------------------------------------------------------------- 1 | 928.0, 6 | 'Descent' => -236.0, 7 | 'CapHeight' => 928.0, 8 | 'Flags' => 262149, 9 | 'FontBBox' => '[-447 -394 731 1052]', 10 | 'ItalicAngle' => 0.0, 11 | 'StemV' => 165.0, 12 | 'MissingWidth' => 602.0, 13 | ); 14 | $flt_underline_pos=-63; 15 | $flt_underline_thickness=44; 16 | $ttffile='../font/unifont/DejaVuSansMono-Bold.ttf'; 17 | $originalsize=313856; 18 | $fontkey='dejavusansmonoB'; 19 | -------------------------------------------------------------------------------- /lib/tfpdf/font/unifont/dejavusansmono-boldoblique-character-width-127.php: -------------------------------------------------------------------------------- 1 | 8 | array ( 9 | 0 => 602, 10 | 1 => 602, 11 | 'interval' => true, 12 | 2 => 602, 13 | 3 => 602, 14 | 4 => 602, 15 | 5 => 602, 16 | 6 => 602, 17 | 7 => 602, 18 | 8 => 602, 19 | 9 => 602, 20 | 10 => 602, 21 | 11 => 602, 22 | 12 => 602, 23 | 13 => 602, 24 | 14 => 602, 25 | 15 => 602, 26 | 16 => 602, 27 | 17 => 602, 28 | 18 => 602, 29 | 19 => 602, 30 | 20 => 602, 31 | 21 => 602, 32 | 22 => 602, 33 | 23 => 602, 34 | 24 => 602, 35 | 25 => 602, 36 | 26 => 602, 37 | 27 => 602, 38 | 28 => 602, 39 | 29 => 602, 40 | 30 => 602, 41 | 31 => 602, 42 | 32 => 602, 43 | 33 => 602, 44 | 34 => 602, 45 | 35 => 602, 46 | 36 => 602, 47 | 37 => 602, 48 | 38 => 602, 49 | 39 => 602, 50 | 40 => 602, 51 | 41 => 602, 52 | 42 => 602, 53 | 43 => 602, 54 | 44 => 602, 55 | 45 => 602, 56 | 46 => 602, 57 | 47 => 602, 58 | 48 => 602, 59 | 49 => 602, 60 | 50 => 602, 61 | 51 => 602, 62 | 52 => 602, 63 | 53 => 602, 64 | 54 => 602, 65 | 55 => 602, 66 | 56 => 602, 67 | 57 => 602, 68 | 58 => 602, 69 | 59 => 602, 70 | 60 => 602, 71 | 61 => 602, 72 | 62 => 602, 73 | 63 => 602, 74 | 64 => 602, 75 | 65 => 602, 76 | 66 => 602, 77 | 67 => 602, 78 | 68 => 602, 79 | 69 => 602, 80 | 70 => 602, 81 | 71 => 602, 82 | 72 => 602, 83 | 73 => 602, 84 | 74 => 602, 85 | 75 => 602, 86 | 76 => 602, 87 | 77 => 602, 88 | 78 => 602, 89 | 79 => 602, 90 | 80 => 602, 91 | 81 => 602, 92 | 82 => 602, 93 | 83 => 602, 94 | 84 => 602, 95 | 85 => 602, 96 | 86 => 602, 97 | 87 => 602, 98 | 88 => 602, 99 | 89 => 602, 100 | 90 => 602, 101 | 91 => 602, 102 | 92 => 602, 103 | 93 => 602, 104 | 94 => 602, 105 | ), 106 | ); 107 | -------------------------------------------------------------------------------- /lib/tfpdf/font/unifont/dejavusansmono-boldoblique-character-widths.dat: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/woocommerce/sensei-certificates/cb1bc6f927de5498af2cbe179754263edb3cff50/lib/tfpdf/font/unifont/dejavusansmono-boldoblique-character-widths.dat -------------------------------------------------------------------------------- /lib/tfpdf/font/unifont/dejavusansmono-boldoblique-font-metrics.php: -------------------------------------------------------------------------------- 1 | 928.0, 6 | 'Descent' => -236.0, 7 | 'CapHeight' => 928.0, 8 | 'Flags' => 262213, 9 | 'FontBBox' => '[-425 -394 808 1053]', 10 | 'ItalicAngle' => -11.0, 11 | 'StemV' => 165.0, 12 | 'MissingWidth' => 602.0, 13 | ); 14 | $flt_underline_pos=-63; 15 | $flt_underline_thickness=44; 16 | $ttffile='../font/unifont/DejaVuSansMono-BoldOblique.ttf'; 17 | $originalsize=235848; 18 | $fontkey='dejavusansmonoBI'; 19 | -------------------------------------------------------------------------------- /lib/tfpdf/font/unifont/dejavusansmono-character-width-127.php: -------------------------------------------------------------------------------- 1 | 8 | array ( 9 | 0 => 602, 10 | 1 => 602, 11 | 'interval' => true, 12 | 2 => 602, 13 | 3 => 602, 14 | 4 => 602, 15 | 5 => 602, 16 | 6 => 602, 17 | 7 => 602, 18 | 8 => 602, 19 | 9 => 602, 20 | 10 => 602, 21 | 11 => 602, 22 | 12 => 602, 23 | 13 => 602, 24 | 14 => 602, 25 | 15 => 602, 26 | 16 => 602, 27 | 17 => 602, 28 | 18 => 602, 29 | 19 => 602, 30 | 20 => 602, 31 | 21 => 602, 32 | 22 => 602, 33 | 23 => 602, 34 | 24 => 602, 35 | 25 => 602, 36 | 26 => 602, 37 | 27 => 602, 38 | 28 => 602, 39 | 29 => 602, 40 | 30 => 602, 41 | 31 => 602, 42 | 32 => 602, 43 | 33 => 602, 44 | 34 => 602, 45 | 35 => 602, 46 | 36 => 602, 47 | 37 => 602, 48 | 38 => 602, 49 | 39 => 602, 50 | 40 => 602, 51 | 41 => 602, 52 | 42 => 602, 53 | 43 => 602, 54 | 44 => 602, 55 | 45 => 602, 56 | 46 => 602, 57 | 47 => 602, 58 | 48 => 602, 59 | 49 => 602, 60 | 50 => 602, 61 | 51 => 602, 62 | 52 => 602, 63 | 53 => 602, 64 | 54 => 602, 65 | 55 => 602, 66 | 56 => 602, 67 | 57 => 602, 68 | 58 => 602, 69 | 59 => 602, 70 | 60 => 602, 71 | 61 => 602, 72 | 62 => 602, 73 | 63 => 602, 74 | 64 => 602, 75 | 65 => 602, 76 | 66 => 602, 77 | 67 => 602, 78 | 68 => 602, 79 | 69 => 602, 80 | 70 => 602, 81 | 71 => 602, 82 | 72 => 602, 83 | 73 => 602, 84 | 74 => 602, 85 | 75 => 602, 86 | 76 => 602, 87 | 77 => 602, 88 | 78 => 602, 89 | 79 => 602, 90 | 80 => 602, 91 | 81 => 602, 92 | 82 => 602, 93 | 83 => 602, 94 | 84 => 602, 95 | 85 => 602, 96 | 86 => 602, 97 | 87 => 602, 98 | 88 => 602, 99 | 89 => 602, 100 | 90 => 602, 101 | 91 => 602, 102 | 92 => 602, 103 | 93 => 602, 104 | 94 => 602, 105 | ), 106 | ); 107 | -------------------------------------------------------------------------------- /lib/tfpdf/font/unifont/dejavusansmono-font-metrics.php: -------------------------------------------------------------------------------- 1 | 928.0, 6 | 'Descent' => -236.0, 7 | 'CapHeight' => 928.0, 8 | 'Flags' => 5, 9 | 'FontBBox' => '[-558 -375 718 1042]', 10 | 'ItalicAngle' => 0.0, 11 | 'StemV' => 87.0, 12 | 'MissingWidth' => 602.0, 13 | ); 14 | $flt_underline_pos=-63; 15 | $flt_underline_thickness=44; 16 | $ttffile='../font/unifont/DejaVuSansMono.ttf'; 17 | $originalsize=333636; 18 | $fontkey='dejavusansmono'; 19 | -------------------------------------------------------------------------------- /lib/tfpdf/font/unifont/dejavusansmono-oblique-character-width-127.php: -------------------------------------------------------------------------------- 1 | 8 | array ( 9 | 0 => 602, 10 | 1 => 602, 11 | 'interval' => true, 12 | 2 => 602, 13 | 3 => 602, 14 | 4 => 602, 15 | 5 => 602, 16 | 6 => 602, 17 | 7 => 602, 18 | 8 => 602, 19 | 9 => 602, 20 | 10 => 602, 21 | 11 => 602, 22 | 12 => 602, 23 | 13 => 602, 24 | 14 => 602, 25 | 15 => 602, 26 | 16 => 602, 27 | 17 => 602, 28 | 18 => 602, 29 | 19 => 602, 30 | 20 => 602, 31 | 21 => 602, 32 | 22 => 602, 33 | 23 => 602, 34 | 24 => 602, 35 | 25 => 602, 36 | 26 => 602, 37 | 27 => 602, 38 | 28 => 602, 39 | 29 => 602, 40 | 30 => 602, 41 | 31 => 602, 42 | 32 => 602, 43 | 33 => 602, 44 | 34 => 602, 45 | 35 => 602, 46 | 36 => 602, 47 | 37 => 602, 48 | 38 => 602, 49 | 39 => 602, 50 | 40 => 602, 51 | 41 => 602, 52 | 42 => 602, 53 | 43 => 602, 54 | 44 => 602, 55 | 45 => 602, 56 | 46 => 602, 57 | 47 => 602, 58 | 48 => 602, 59 | 49 => 602, 60 | 50 => 602, 61 | 51 => 602, 62 | 52 => 602, 63 | 53 => 602, 64 | 54 => 602, 65 | 55 => 602, 66 | 56 => 602, 67 | 57 => 602, 68 | 58 => 602, 69 | 59 => 602, 70 | 60 => 602, 71 | 61 => 602, 72 | 62 => 602, 73 | 63 => 602, 74 | 64 => 602, 75 | 65 => 602, 76 | 66 => 602, 77 | 67 => 602, 78 | 68 => 602, 79 | 69 => 602, 80 | 70 => 602, 81 | 71 => 602, 82 | 72 => 602, 83 | 73 => 602, 84 | 74 => 602, 85 | 75 => 602, 86 | 76 => 602, 87 | 77 => 602, 88 | 78 => 602, 89 | 79 => 602, 90 | 80 => 602, 91 | 81 => 602, 92 | 82 => 602, 93 | 83 => 602, 94 | 84 => 602, 95 | 85 => 602, 96 | 86 => 602, 97 | 87 => 602, 98 | 88 => 602, 99 | 89 => 602, 100 | 90 => 602, 101 | 91 => 602, 102 | 92 => 602, 103 | 93 => 602, 104 | 94 => 602, 105 | ), 106 | ); 107 | -------------------------------------------------------------------------------- /lib/tfpdf/font/unifont/dejavusansmono-oblique-font-metrics.php: -------------------------------------------------------------------------------- 1 | 928.0, 6 | 'Descent' => -236.0, 7 | 'CapHeight' => 928.0, 8 | 'Flags' => 69, 9 | 'FontBBox' => '[-403 -375 746 1028]', 10 | 'ItalicAngle' => -11.0, 11 | 'StemV' => 87.0, 12 | 'MissingWidth' => 602.0, 13 | ); 14 | $flt_underline_pos=-63; 15 | $flt_underline_thickness=44; 16 | $ttffile='../font/unifont/DejaVuSansMono-Oblique.ttf'; 17 | $originalsize=241972; 18 | $fontkey='dejavusansmonoI'; 19 | -------------------------------------------------------------------------------- /lib/tfpdf/font/unifont/dejavuserif-bold-character-width-127.php: -------------------------------------------------------------------------------- 1 | 8 | array ( 9 | 0 => 348, 10 | 1 => 439, 11 | 2 => 521, 12 | 3 => 838, 13 | 4 => 696, 14 | 5 => 950, 15 | 6 => 903, 16 | 7 => 306, 17 | ), 18 | 40 => 19 | array ( 20 | 0 => 473, 21 | 1 => 473, 22 | 'interval' => true, 23 | ), 24 | 42 => 25 | array ( 26 | 0 => 523, 27 | 1 => 838, 28 | 2 => 348, 29 | 3 => 415, 30 | 4 => 348, 31 | 5 => 365, 32 | ), 33 | 48 => 34 | array ( 35 | 0 => 696, 36 | 1 => 696, 37 | 'interval' => true, 38 | 2 => 696, 39 | 3 => 696, 40 | 4 => 696, 41 | 5 => 696, 42 | 6 => 696, 43 | 7 => 696, 44 | 8 => 696, 45 | 9 => 696, 46 | ), 47 | 58 => 48 | array ( 49 | 0 => 369, 50 | 1 => 369, 51 | 'interval' => true, 52 | ), 53 | 60 => 54 | array ( 55 | 0 => 838, 56 | 1 => 838, 57 | 'interval' => true, 58 | 2 => 838, 59 | ), 60 | 63 => 61 | array ( 62 | 0 => 586, 63 | 1 => 1000, 64 | 2 => 776, 65 | 3 => 845, 66 | 4 => 796, 67 | 5 => 867, 68 | 6 => 762, 69 | 7 => 710, 70 | 8 => 854, 71 | 9 => 945, 72 | 10 => 468, 73 | 11 => 473, 74 | 12 => 869, 75 | 13 => 703, 76 | 14 => 1107, 77 | 15 => 914, 78 | 16 => 871, 79 | 17 => 752, 80 | 18 => 871, 81 | 19 => 831, 82 | 20 => 722, 83 | 21 => 744, 84 | 22 => 872, 85 | 23 => 776, 86 | 24 => 1123, 87 | 25 => 776, 88 | 26 => 714, 89 | 27 => 730, 90 | 28 => 473, 91 | 29 => 365, 92 | 30 => 473, 93 | 31 => 838, 94 | ), 95 | 95 => 96 | array ( 97 | 0 => 500, 98 | 1 => 500, 99 | 'interval' => true, 100 | ), 101 | 97 => 102 | array ( 103 | 0 => 648, 104 | 1 => 699, 105 | 2 => 609, 106 | 3 => 699, 107 | 4 => 636, 108 | 5 => 430, 109 | 6 => 699, 110 | 7 => 727, 111 | 8 => 380, 112 | 9 => 362, 113 | 10 => 693, 114 | 11 => 380, 115 | 12 => 1058, 116 | 13 => 727, 117 | 14 => 667, 118 | ), 119 | 112 => 120 | array ( 121 | 0 => 699, 122 | 1 => 699, 123 | 'interval' => true, 124 | ), 125 | 114 => 126 | array ( 127 | 0 => 527, 128 | 1 => 563, 129 | 2 => 462, 130 | 3 => 727, 131 | 4 => 581, 132 | 5 => 861, 133 | 6 => 596, 134 | 7 => 581, 135 | 8 => 568, 136 | 9 => 643, 137 | 10 => 364, 138 | 11 => 643, 139 | 12 => 838, 140 | ), 141 | ); 142 | -------------------------------------------------------------------------------- /lib/tfpdf/font/unifont/dejavuserif-bold-character-widths.dat: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/woocommerce/sensei-certificates/cb1bc6f927de5498af2cbe179754263edb3cff50/lib/tfpdf/font/unifont/dejavuserif-bold-character-widths.dat -------------------------------------------------------------------------------- /lib/tfpdf/font/unifont/dejavuserif-bold-font-metrics.php: -------------------------------------------------------------------------------- 1 | 939.0, 6 | 'Descent' => -236.0, 7 | 'CapHeight' => 939.0, 8 | 'Flags' => 262148, 9 | 'FontBBox' => '[-836 -389 1796 1145]', 10 | 'ItalicAngle' => 0.0, 11 | 'StemV' => 165.0, 12 | 'MissingWidth' => 600.0, 13 | ); 14 | $flt_underline_pos=-63; 15 | $flt_underline_thickness=44; 16 | $ttffile='../font/unifont/DejaVuSerif-Bold.ttf'; 17 | $originalsize=341072; 18 | $fontkey='dejavuserifB'; 19 | -------------------------------------------------------------------------------- /lib/tfpdf/font/unifont/dejavuserif-bolditalic-character-width-127.php: -------------------------------------------------------------------------------- 1 | 8 | array ( 9 | 0 => 348, 10 | 1 => 439, 11 | 2 => 521, 12 | 3 => 838, 13 | 4 => 696, 14 | 5 => 950, 15 | 6 => 903, 16 | 7 => 306, 17 | ), 18 | 40 => 19 | array ( 20 | 0 => 473, 21 | 1 => 473, 22 | 'interval' => true, 23 | ), 24 | 42 => 25 | array ( 26 | 0 => 523, 27 | 1 => 838, 28 | 2 => 348, 29 | 3 => 415, 30 | 4 => 348, 31 | 5 => 365, 32 | ), 33 | 48 => 34 | array ( 35 | 0 => 696, 36 | 1 => 696, 37 | 'interval' => true, 38 | 2 => 696, 39 | 3 => 696, 40 | 4 => 696, 41 | 5 => 696, 42 | 6 => 696, 43 | 7 => 696, 44 | 8 => 696, 45 | 9 => 696, 46 | ), 47 | 58 => 48 | array ( 49 | 0 => 369, 50 | 1 => 369, 51 | 'interval' => true, 52 | ), 53 | 60 => 54 | array ( 55 | 0 => 838, 56 | 1 => 838, 57 | 'interval' => true, 58 | 2 => 838, 59 | ), 60 | 63 => 61 | array ( 62 | 0 => 586, 63 | 1 => 1000, 64 | 2 => 776, 65 | 3 => 845, 66 | 4 => 796, 67 | 5 => 867, 68 | 6 => 762, 69 | 7 => 710, 70 | 8 => 854, 71 | 9 => 945, 72 | 10 => 468, 73 | 11 => 473, 74 | 12 => 869, 75 | 13 => 703, 76 | 14 => 1107, 77 | 15 => 914, 78 | 16 => 871, 79 | 17 => 752, 80 | 18 => 871, 81 | 19 => 831, 82 | 20 => 722, 83 | 21 => 744, 84 | 22 => 872, 85 | 23 => 776, 86 | 24 => 1123, 87 | 25 => 776, 88 | 26 => 714, 89 | 27 => 730, 90 | 28 => 473, 91 | 29 => 365, 92 | 30 => 473, 93 | 31 => 838, 94 | ), 95 | 95 => 96 | array ( 97 | 0 => 500, 98 | 1 => 500, 99 | 'interval' => true, 100 | ), 101 | 97 => 102 | array ( 103 | 0 => 648, 104 | 1 => 699, 105 | 2 => 609, 106 | 3 => 699, 107 | 4 => 636, 108 | 5 => 430, 109 | 6 => 699, 110 | 7 => 727, 111 | 8 => 380, 112 | 9 => 362, 113 | 10 => 693, 114 | 11 => 380, 115 | 12 => 1058, 116 | 13 => 727, 117 | 14 => 667, 118 | ), 119 | 112 => 120 | array ( 121 | 0 => 699, 122 | 1 => 699, 123 | 'interval' => true, 124 | ), 125 | 114 => 126 | array ( 127 | 0 => 527, 128 | 1 => 563, 129 | 2 => 462, 130 | 3 => 727, 131 | 4 => 581, 132 | 5 => 861, 133 | 6 => 596, 134 | 7 => 581, 135 | 8 => 568, 136 | 9 => 643, 137 | 10 => 364, 138 | 11 => 643, 139 | 12 => 838, 140 | ), 141 | ); 142 | -------------------------------------------------------------------------------- /lib/tfpdf/font/unifont/dejavuserif-bolditalic-character-widths.dat: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/woocommerce/sensei-certificates/cb1bc6f927de5498af2cbe179754263edb3cff50/lib/tfpdf/font/unifont/dejavuserif-bolditalic-character-widths.dat -------------------------------------------------------------------------------- /lib/tfpdf/font/unifont/dejavuserif-bolditalic-font-metrics.php: -------------------------------------------------------------------------------- 1 | 939.0, 6 | 'Descent' => -236.0, 7 | 'CapHeight' => 939.0, 8 | 'Flags' => 262212, 9 | 'FontBBox' => '[-906 -389 1754 1145]', 10 | 'ItalicAngle' => -11.0, 11 | 'StemV' => 165.0, 12 | 'MissingWidth' => 600.0, 13 | ); 14 | $flt_underline_pos=-63; 15 | $flt_underline_thickness=44; 16 | $ttffile='../font/unifont/DejaVuSerif-BoldItalic.ttf'; 17 | $originalsize=332036; 18 | $fontkey='dejavuserifBI'; 19 | -------------------------------------------------------------------------------- /lib/tfpdf/font/unifont/dejavuserif-character-width-127.php: -------------------------------------------------------------------------------- 1 | 8 | array ( 9 | 0 => 318, 10 | 1 => 402, 11 | 2 => 460, 12 | 3 => 838, 13 | 4 => 636, 14 | 5 => 950, 15 | 6 => 890, 16 | 7 => 275, 17 | ), 18 | 40 => 19 | array ( 20 | 0 => 390, 21 | 1 => 390, 22 | 'interval' => true, 23 | ), 24 | 42 => 25 | array ( 26 | 0 => 500, 27 | 1 => 838, 28 | 2 => 318, 29 | 3 => 338, 30 | 4 => 318, 31 | 5 => 337, 32 | ), 33 | 48 => 34 | array ( 35 | 0 => 636, 36 | 1 => 636, 37 | 'interval' => true, 38 | 2 => 636, 39 | 3 => 636, 40 | 4 => 636, 41 | 5 => 636, 42 | 6 => 636, 43 | 7 => 636, 44 | 8 => 636, 45 | 9 => 636, 46 | ), 47 | 58 => 48 | array ( 49 | 0 => 337, 50 | 1 => 337, 51 | 'interval' => true, 52 | ), 53 | 60 => 54 | array ( 55 | 0 => 838, 56 | 1 => 838, 57 | 'interval' => true, 58 | 2 => 838, 59 | ), 60 | 63 => 61 | array ( 62 | 0 => 536, 63 | 1 => 1000, 64 | 2 => 722, 65 | 3 => 735, 66 | 4 => 765, 67 | 5 => 802, 68 | 6 => 730, 69 | 7 => 694, 70 | 8 => 799, 71 | 9 => 872, 72 | 10 => 395, 73 | 11 => 401, 74 | 12 => 747, 75 | 13 => 664, 76 | 14 => 1024, 77 | 15 => 875, 78 | 16 => 820, 79 | 17 => 673, 80 | 18 => 820, 81 | 19 => 753, 82 | 20 => 685, 83 | 21 => 667, 84 | 22 => 843, 85 | 23 => 722, 86 | 24 => 1028, 87 | 25 => 712, 88 | 26 => 660, 89 | 27 => 695, 90 | 28 => 390, 91 | 29 => 337, 92 | 30 => 390, 93 | 31 => 838, 94 | ), 95 | 95 => 96 | array ( 97 | 0 => 500, 98 | 1 => 500, 99 | 'interval' => true, 100 | ), 101 | 97 => 102 | array ( 103 | 0 => 596, 104 | 1 => 640, 105 | 2 => 560, 106 | 3 => 640, 107 | 4 => 592, 108 | 5 => 370, 109 | 6 => 640, 110 | 7 => 644, 111 | 8 => 320, 112 | 9 => 310, 113 | 10 => 606, 114 | 11 => 320, 115 | 12 => 948, 116 | 13 => 644, 117 | 14 => 602, 118 | ), 119 | 112 => 120 | array ( 121 | 0 => 640, 122 | 1 => 640, 123 | 'interval' => true, 124 | ), 125 | 114 => 126 | array ( 127 | 0 => 478, 128 | 1 => 513, 129 | 2 => 402, 130 | 3 => 644, 131 | 4 => 565, 132 | 5 => 856, 133 | 6 => 564, 134 | 7 => 565, 135 | 8 => 527, 136 | 9 => 636, 137 | 10 => 337, 138 | 11 => 636, 139 | 12 => 838, 140 | ), 141 | ); 142 | -------------------------------------------------------------------------------- /lib/tfpdf/font/unifont/dejavuserif-character-widths.dat: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/woocommerce/sensei-certificates/cb1bc6f927de5498af2cbe179754263edb3cff50/lib/tfpdf/font/unifont/dejavuserif-character-widths.dat -------------------------------------------------------------------------------- /lib/tfpdf/font/unifont/dejavuserif-font-metrics.php: -------------------------------------------------------------------------------- 1 | 928.0, 6 | 'Descent' => -236.0, 7 | 'CapHeight' => 928.0, 8 | 'Flags' => 4, 9 | 'FontBBox' => '[-770 -347 1679 1109]', 10 | 'ItalicAngle' => 0.0, 11 | 'StemV' => 87.0, 12 | 'MissingWidth' => 600.0, 13 | ); 14 | $flt_underline_pos=-63; 15 | $flt_underline_thickness=44; 16 | $ttffile='../font/unifont/DejaVuSerif.ttf'; 17 | $originalsize=363200; 18 | $fontkey='dejavuserif'; 19 | -------------------------------------------------------------------------------- /lib/tfpdf/font/unifont/dejavuserif-italic-character-width-127.php: -------------------------------------------------------------------------------- 1 | 8 | array ( 9 | 0 => 318, 10 | 1 => 402, 11 | 2 => 460, 12 | 3 => 838, 13 | 4 => 636, 14 | 5 => 950, 15 | 6 => 890, 16 | 7 => 275, 17 | ), 18 | 40 => 19 | array ( 20 | 0 => 390, 21 | 1 => 390, 22 | 'interval' => true, 23 | ), 24 | 42 => 25 | array ( 26 | 0 => 500, 27 | 1 => 838, 28 | 2 => 318, 29 | 3 => 338, 30 | 4 => 318, 31 | 5 => 337, 32 | ), 33 | 48 => 34 | array ( 35 | 0 => 636, 36 | 1 => 636, 37 | 'interval' => true, 38 | 2 => 636, 39 | 3 => 636, 40 | 4 => 636, 41 | 5 => 636, 42 | 6 => 636, 43 | 7 => 636, 44 | 8 => 636, 45 | 9 => 636, 46 | ), 47 | 58 => 48 | array ( 49 | 0 => 337, 50 | 1 => 337, 51 | 'interval' => true, 52 | ), 53 | 60 => 54 | array ( 55 | 0 => 838, 56 | 1 => 838, 57 | 'interval' => true, 58 | 2 => 838, 59 | ), 60 | 63 => 61 | array ( 62 | 0 => 536, 63 | 1 => 1000, 64 | 2 => 722, 65 | 3 => 735, 66 | 4 => 765, 67 | 5 => 802, 68 | 6 => 730, 69 | 7 => 694, 70 | 8 => 799, 71 | 9 => 872, 72 | 10 => 395, 73 | 11 => 401, 74 | 12 => 747, 75 | 13 => 664, 76 | 14 => 1024, 77 | 15 => 875, 78 | 16 => 820, 79 | 17 => 673, 80 | 18 => 820, 81 | 19 => 753, 82 | 20 => 685, 83 | 21 => 667, 84 | 22 => 843, 85 | 23 => 722, 86 | 24 => 1028, 87 | 25 => 712, 88 | 26 => 660, 89 | 27 => 695, 90 | 28 => 390, 91 | 29 => 337, 92 | 30 => 390, 93 | 31 => 838, 94 | ), 95 | 95 => 96 | array ( 97 | 0 => 500, 98 | 1 => 500, 99 | 'interval' => true, 100 | ), 101 | 97 => 102 | array ( 103 | 0 => 596, 104 | 1 => 640, 105 | 2 => 560, 106 | 3 => 640, 107 | 4 => 592, 108 | 5 => 370, 109 | 6 => 640, 110 | 7 => 644, 111 | 8 => 320, 112 | 9 => 310, 113 | 10 => 606, 114 | 11 => 320, 115 | 12 => 948, 116 | 13 => 644, 117 | 14 => 602, 118 | ), 119 | 112 => 120 | array ( 121 | 0 => 640, 122 | 1 => 640, 123 | 'interval' => true, 124 | ), 125 | 114 => 126 | array ( 127 | 0 => 478, 128 | 1 => 513, 129 | 2 => 402, 130 | 3 => 644, 131 | 4 => 565, 132 | 5 => 856, 133 | 6 => 564, 134 | 7 => 565, 135 | 8 => 527, 136 | 9 => 636, 137 | 10 => 337, 138 | 11 => 636, 139 | 12 => 838, 140 | ), 141 | ); 142 | -------------------------------------------------------------------------------- /lib/tfpdf/font/unifont/dejavuserif-italic-character-widths.dat: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/woocommerce/sensei-certificates/cb1bc6f927de5498af2cbe179754263edb3cff50/lib/tfpdf/font/unifont/dejavuserif-italic-character-widths.dat -------------------------------------------------------------------------------- /lib/tfpdf/font/unifont/dejavuserif-italic-font-metrics.php: -------------------------------------------------------------------------------- 1 | 928.0, 6 | 'Descent' => -236.0, 7 | 'CapHeight' => 928.0, 8 | 'Flags' => 68, 9 | 'FontBBox' => '[-839 -347 1645 1109]', 10 | 'ItalicAngle' => -11.0, 11 | 'StemV' => 87.0, 12 | 'MissingWidth' => 600.0, 13 | ); 14 | $flt_underline_pos=-63; 15 | $flt_underline_thickness=44; 16 | $ttffile='../font/unifont/DejaVuSerif-Italic.ttf'; 17 | $originalsize=338776; 18 | $fontkey='dejavuserifI'; 19 | -------------------------------------------------------------------------------- /lib/tfpdf/font/unifont/dejavuserifcondensed-bold-character-width-127.php: -------------------------------------------------------------------------------- 1 | 8 | array ( 9 | 0 => 313, 10 | 1 => 395, 11 | 2 => 469, 12 | 3 => 754, 13 | 4 => 626, 14 | 5 => 855, 15 | 6 => 813, 16 | 7 => 275, 17 | ), 18 | 40 => 19 | array ( 20 | 0 => 426, 21 | 1 => 426, 22 | 'interval' => true, 23 | ), 24 | 42 => 25 | array ( 26 | 0 => 470, 27 | 1 => 754, 28 | 2 => 313, 29 | 3 => 374, 30 | 4 => 313, 31 | 5 => 329, 32 | ), 33 | 48 => 34 | array ( 35 | 0 => 626, 36 | 1 => 626, 37 | 'interval' => true, 38 | 2 => 626, 39 | 3 => 626, 40 | 4 => 626, 41 | 5 => 626, 42 | 6 => 626, 43 | 7 => 626, 44 | 8 => 626, 45 | 9 => 626, 46 | ), 47 | 58 => 48 | array ( 49 | 0 => 332, 50 | 1 => 332, 51 | 'interval' => true, 52 | ), 53 | 60 => 54 | array ( 55 | 0 => 754, 56 | 1 => 754, 57 | 'interval' => true, 58 | 2 => 754, 59 | ), 60 | 63 => 61 | array ( 62 | 0 => 527, 63 | 1 => 900, 64 | 2 => 698, 65 | 3 => 760, 66 | 4 => 716, 67 | 5 => 780, 68 | 6 => 686, 69 | 7 => 639, 70 | 8 => 769, 71 | 9 => 850, 72 | 10 => 421, 73 | 11 => 426, 74 | 12 => 782, 75 | 13 => 633, 76 | 14 => 996, 77 | 15 => 822, 78 | 16 => 784, 79 | 17 => 677, 80 | 18 => 784, 81 | 19 => 748, 82 | 20 => 650, 83 | 21 => 669, 84 | 22 => 785, 85 | 23 => 698, 86 | 24 => 1011, 87 | 25 => 698, 88 | 26 => 642, 89 | 27 => 657, 90 | 28 => 426, 91 | 29 => 329, 92 | 30 => 426, 93 | 31 => 754, 94 | ), 95 | 95 => 96 | array ( 97 | 0 => 450, 98 | 1 => 450, 99 | 'interval' => true, 100 | ), 101 | 97 => 102 | array ( 103 | 0 => 583, 104 | 1 => 629, 105 | 2 => 548, 106 | 3 => 629, 107 | 4 => 572, 108 | 5 => 387, 109 | 6 => 629, 110 | 7 => 654, 111 | 8 => 342, 112 | 9 => 325, 113 | 10 => 624, 114 | 11 => 342, 115 | 12 => 952, 116 | 13 => 654, 117 | 14 => 600, 118 | ), 119 | 112 => 120 | array ( 121 | 0 => 629, 122 | 1 => 629, 123 | 'interval' => true, 124 | ), 125 | 114 => 126 | array ( 127 | 0 => 474, 128 | 1 => 506, 129 | 2 => 416, 130 | 3 => 654, 131 | 4 => 523, 132 | 5 => 774, 133 | 6 => 536, 134 | 7 => 523, 135 | 8 => 511, 136 | 9 => 579, 137 | 10 => 327, 138 | 11 => 579, 139 | 12 => 754, 140 | ), 141 | ); 142 | -------------------------------------------------------------------------------- /lib/tfpdf/font/unifont/dejavuserifcondensed-bold-character-widths.dat: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/woocommerce/sensei-certificates/cb1bc6f927de5498af2cbe179754263edb3cff50/lib/tfpdf/font/unifont/dejavuserifcondensed-bold-character-widths.dat -------------------------------------------------------------------------------- /lib/tfpdf/font/unifont/dejavuserifcondensed-bold-font-metrics.php: -------------------------------------------------------------------------------- 1 | 939.0, 6 | 'Descent' => -236.0, 7 | 'CapHeight' => 939.0, 8 | 'Flags' => 262148, 9 | 'FontBBox' => '[-752 -389 1617 1145]', 10 | 'ItalicAngle' => 0.0, 11 | 'StemV' => 165.0, 12 | 'MissingWidth' => 540.0, 13 | ); 14 | $flt_underline_pos=-63; 15 | $flt_underline_thickness=44; 16 | $ttffile='../font/unifont/DejaVuSerifCondensed-Bold.ttf'; 17 | $originalsize=316440; 18 | $fontkey='dejavuserifcondensedB'; 19 | -------------------------------------------------------------------------------- /lib/tfpdf/font/unifont/dejavuserifcondensed-bolditalic-character-width-127.php: -------------------------------------------------------------------------------- 1 | 8 | array ( 9 | 0 => 313, 10 | 1 => 395, 11 | 2 => 469, 12 | 3 => 754, 13 | 4 => 626, 14 | 5 => 855, 15 | 6 => 813, 16 | 7 => 275, 17 | ), 18 | 40 => 19 | array ( 20 | 0 => 426, 21 | 1 => 426, 22 | 'interval' => true, 23 | ), 24 | 42 => 25 | array ( 26 | 0 => 470, 27 | 1 => 754, 28 | 2 => 313, 29 | 3 => 374, 30 | 4 => 313, 31 | 5 => 329, 32 | ), 33 | 48 => 34 | array ( 35 | 0 => 626, 36 | 1 => 626, 37 | 'interval' => true, 38 | 2 => 626, 39 | 3 => 626, 40 | 4 => 626, 41 | 5 => 626, 42 | 6 => 626, 43 | 7 => 626, 44 | 8 => 626, 45 | 9 => 626, 46 | ), 47 | 58 => 48 | array ( 49 | 0 => 332, 50 | 1 => 332, 51 | 'interval' => true, 52 | ), 53 | 60 => 54 | array ( 55 | 0 => 754, 56 | 1 => 754, 57 | 'interval' => true, 58 | 2 => 754, 59 | ), 60 | 63 => 61 | array ( 62 | 0 => 527, 63 | 1 => 900, 64 | 2 => 698, 65 | 3 => 760, 66 | 4 => 716, 67 | 5 => 780, 68 | 6 => 686, 69 | 7 => 639, 70 | 8 => 769, 71 | 9 => 850, 72 | 10 => 421, 73 | 11 => 426, 74 | 12 => 782, 75 | 13 => 633, 76 | 14 => 996, 77 | 15 => 822, 78 | 16 => 784, 79 | 17 => 677, 80 | 18 => 784, 81 | 19 => 748, 82 | 20 => 650, 83 | 21 => 669, 84 | 22 => 785, 85 | 23 => 698, 86 | 24 => 1011, 87 | 25 => 698, 88 | 26 => 642, 89 | 27 => 657, 90 | 28 => 426, 91 | 29 => 329, 92 | 30 => 426, 93 | 31 => 754, 94 | ), 95 | 95 => 96 | array ( 97 | 0 => 450, 98 | 1 => 450, 99 | 'interval' => true, 100 | ), 101 | 97 => 102 | array ( 103 | 0 => 583, 104 | 1 => 629, 105 | 2 => 548, 106 | 3 => 629, 107 | 4 => 572, 108 | 5 => 387, 109 | 6 => 629, 110 | 7 => 654, 111 | 8 => 342, 112 | 9 => 325, 113 | 10 => 624, 114 | 11 => 342, 115 | 12 => 952, 116 | 13 => 654, 117 | 14 => 600, 118 | ), 119 | 112 => 120 | array ( 121 | 0 => 629, 122 | 1 => 629, 123 | 'interval' => true, 124 | ), 125 | 114 => 126 | array ( 127 | 0 => 474, 128 | 1 => 506, 129 | 2 => 416, 130 | 3 => 654, 131 | 4 => 523, 132 | 5 => 774, 133 | 6 => 536, 134 | 7 => 523, 135 | 8 => 511, 136 | 9 => 579, 137 | 10 => 327, 138 | 11 => 579, 139 | 12 => 754, 140 | ), 141 | ); 142 | -------------------------------------------------------------------------------- /lib/tfpdf/font/unifont/dejavuserifcondensed-bolditalic-character-widths.dat: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/woocommerce/sensei-certificates/cb1bc6f927de5498af2cbe179754263edb3cff50/lib/tfpdf/font/unifont/dejavuserifcondensed-bolditalic-character-widths.dat -------------------------------------------------------------------------------- /lib/tfpdf/font/unifont/dejavuserifcondensed-bolditalic-font-metrics.php: -------------------------------------------------------------------------------- 1 | 939.0, 6 | 'Descent' => -236.0, 7 | 'CapHeight' => 939.0, 8 | 'Flags' => 262212, 9 | 'FontBBox' => '[-815 -389 1579 1145]', 10 | 'ItalicAngle' => -11.0, 11 | 'StemV' => 165.0, 12 | 'MissingWidth' => 540.0, 13 | ); 14 | $flt_underline_pos=-63; 15 | $flt_underline_thickness=44; 16 | $ttffile='../font/unifont/DejaVuSerifCondensed-BoldItalic.ttf'; 17 | $originalsize=331128; 18 | $fontkey='dejavuserifcondensedBI'; 19 | -------------------------------------------------------------------------------- /lib/tfpdf/font/unifont/dejavuserifcondensed-character-width-127.php: -------------------------------------------------------------------------------- 1 | 8 | array ( 9 | 0 => 286, 10 | 1 => 361, 11 | 2 => 414, 12 | 3 => 754, 13 | 4 => 572, 14 | 5 => 855, 15 | 6 => 801, 16 | 7 => 247, 17 | ), 18 | 40 => 19 | array ( 20 | 0 => 351, 21 | 1 => 351, 22 | 'interval' => true, 23 | ), 24 | 42 => 25 | array ( 26 | 0 => 450, 27 | 1 => 754, 28 | 2 => 286, 29 | 3 => 304, 30 | 4 => 286, 31 | 5 => 303, 32 | ), 33 | 48 => 34 | array ( 35 | 0 => 572, 36 | 1 => 572, 37 | 'interval' => true, 38 | 2 => 572, 39 | 3 => 572, 40 | 4 => 572, 41 | 5 => 572, 42 | 6 => 572, 43 | 7 => 572, 44 | 8 => 572, 45 | 9 => 572, 46 | ), 47 | 58 => 48 | array ( 49 | 0 => 303, 50 | 1 => 303, 51 | 'interval' => true, 52 | ), 53 | 60 => 54 | array ( 55 | 0 => 754, 56 | 1 => 754, 57 | 'interval' => true, 58 | 2 => 754, 59 | ), 60 | 63 => 61 | array ( 62 | 0 => 482, 63 | 1 => 900, 64 | 2 => 650, 65 | 3 => 661, 66 | 4 => 688, 67 | 5 => 721, 68 | 6 => 657, 69 | 7 => 624, 70 | 8 => 719, 71 | 9 => 785, 72 | 10 => 355, 73 | 11 => 360, 74 | 12 => 672, 75 | 13 => 598, 76 | 14 => 921, 77 | 15 => 787, 78 | 16 => 738, 79 | 17 => 605, 80 | 18 => 738, 81 | 19 => 677, 82 | 20 => 616, 83 | 21 => 600, 84 | 22 => 758, 85 | 23 => 650, 86 | 24 => 925, 87 | 25 => 641, 88 | 26 => 594, 89 | 27 => 625, 90 | 28 => 351, 91 | 29 => 303, 92 | 30 => 351, 93 | 31 => 754, 94 | ), 95 | 95 => 96 | array ( 97 | 0 => 450, 98 | 1 => 450, 99 | 'interval' => true, 100 | ), 101 | 97 => 102 | array ( 103 | 0 => 536, 104 | 1 => 576, 105 | 2 => 504, 106 | 3 => 576, 107 | 4 => 532, 108 | 5 => 333, 109 | 6 => 576, 110 | 7 => 580, 111 | 8 => 288, 112 | 9 => 279, 113 | 10 => 545, 114 | 11 => 288, 115 | 12 => 853, 116 | 13 => 580, 117 | 14 => 542, 118 | ), 119 | 112 => 120 | array ( 121 | 0 => 576, 122 | 1 => 576, 123 | 'interval' => true, 124 | ), 125 | 114 => 126 | array ( 127 | 0 => 430, 128 | 1 => 461, 129 | 2 => 361, 130 | 3 => 580, 131 | 4 => 508, 132 | 5 => 770, 133 | 6 => 507, 134 | 7 => 508, 135 | 8 => 474, 136 | 9 => 572, 137 | 10 => 303, 138 | 11 => 572, 139 | 12 => 754, 140 | ), 141 | ); 142 | -------------------------------------------------------------------------------- /lib/tfpdf/font/unifont/dejavuserifcondensed-character-widths.dat: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/woocommerce/sensei-certificates/cb1bc6f927de5498af2cbe179754263edb3cff50/lib/tfpdf/font/unifont/dejavuserifcondensed-character-widths.dat -------------------------------------------------------------------------------- /lib/tfpdf/font/unifont/dejavuserifcondensed-font-metrics.php: -------------------------------------------------------------------------------- 1 | 928.0, 6 | 'Descent' => -236.0, 7 | 'CapHeight' => 928.0, 8 | 'Flags' => 4, 9 | 'FontBBox' => '[-693 -347 1512 1109]', 10 | 'ItalicAngle' => 0.0, 11 | 'StemV' => 87.0, 12 | 'MissingWidth' => 540.0, 13 | ); 14 | $flt_underline_pos=-63; 15 | $flt_underline_thickness=44; 16 | $ttffile='../font/unifont/DejaVuSerifCondensed.ttf'; 17 | $originalsize=330012; 18 | $fontkey='dejavuserifcondensed'; 19 | -------------------------------------------------------------------------------- /lib/tfpdf/font/unifont/dejavuserifcondensed-italic-character-width-127.php: -------------------------------------------------------------------------------- 1 | 8 | array ( 9 | 0 => 286, 10 | 1 => 361, 11 | 2 => 414, 12 | 3 => 754, 13 | 4 => 572, 14 | 5 => 855, 15 | 6 => 801, 16 | 7 => 247, 17 | ), 18 | 40 => 19 | array ( 20 | 0 => 351, 21 | 1 => 351, 22 | 'interval' => true, 23 | ), 24 | 42 => 25 | array ( 26 | 0 => 450, 27 | 1 => 754, 28 | 2 => 286, 29 | 3 => 304, 30 | 4 => 286, 31 | 5 => 303, 32 | ), 33 | 48 => 34 | array ( 35 | 0 => 572, 36 | 1 => 572, 37 | 'interval' => true, 38 | 2 => 572, 39 | 3 => 572, 40 | 4 => 572, 41 | 5 => 572, 42 | 6 => 572, 43 | 7 => 572, 44 | 8 => 572, 45 | 9 => 572, 46 | ), 47 | 58 => 48 | array ( 49 | 0 => 303, 50 | 1 => 303, 51 | 'interval' => true, 52 | ), 53 | 60 => 54 | array ( 55 | 0 => 754, 56 | 1 => 754, 57 | 'interval' => true, 58 | 2 => 754, 59 | ), 60 | 63 => 61 | array ( 62 | 0 => 482, 63 | 1 => 900, 64 | 2 => 650, 65 | 3 => 661, 66 | 4 => 688, 67 | 5 => 721, 68 | 6 => 657, 69 | 7 => 624, 70 | 8 => 719, 71 | 9 => 785, 72 | 10 => 355, 73 | 11 => 360, 74 | 12 => 672, 75 | 13 => 598, 76 | 14 => 921, 77 | 15 => 787, 78 | 16 => 738, 79 | 17 => 605, 80 | 18 => 738, 81 | 19 => 677, 82 | 20 => 616, 83 | 21 => 600, 84 | 22 => 758, 85 | 23 => 650, 86 | 24 => 925, 87 | 25 => 641, 88 | 26 => 594, 89 | 27 => 625, 90 | 28 => 351, 91 | 29 => 303, 92 | 30 => 351, 93 | 31 => 754, 94 | ), 95 | 95 => 96 | array ( 97 | 0 => 450, 98 | 1 => 450, 99 | 'interval' => true, 100 | ), 101 | 97 => 102 | array ( 103 | 0 => 536, 104 | 1 => 576, 105 | 2 => 504, 106 | 3 => 576, 107 | 4 => 532, 108 | 5 => 333, 109 | 6 => 576, 110 | 7 => 580, 111 | 8 => 288, 112 | 9 => 279, 113 | 10 => 545, 114 | 11 => 288, 115 | 12 => 853, 116 | 13 => 580, 117 | 14 => 542, 118 | ), 119 | 112 => 120 | array ( 121 | 0 => 576, 122 | 1 => 576, 123 | 'interval' => true, 124 | ), 125 | 114 => 126 | array ( 127 | 0 => 430, 128 | 1 => 461, 129 | 2 => 361, 130 | 3 => 580, 131 | 4 => 508, 132 | 5 => 770, 133 | 6 => 507, 134 | 7 => 508, 135 | 8 => 474, 136 | 9 => 572, 137 | 10 => 303, 138 | 11 => 572, 139 | 12 => 754, 140 | ), 141 | ); 142 | -------------------------------------------------------------------------------- /lib/tfpdf/font/unifont/dejavuserifcondensed-italic-character-widths.dat: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/woocommerce/sensei-certificates/cb1bc6f927de5498af2cbe179754263edb3cff50/lib/tfpdf/font/unifont/dejavuserifcondensed-italic-character-widths.dat -------------------------------------------------------------------------------- /lib/tfpdf/font/unifont/dejavuserifcondensed-italic-font-metrics.php: -------------------------------------------------------------------------------- 1 | 928.0, 6 | 'Descent' => -236.0, 7 | 'CapHeight' => 928.0, 8 | 'Flags' => 68, 9 | 'FontBBox' => '[-755 -347 1480 1109]', 10 | 'ItalicAngle' => -11.0, 11 | 'StemV' => 87.0, 12 | 'MissingWidth' => 540.0, 13 | ); 14 | $flt_underline_pos=-63; 15 | $flt_underline_thickness=44; 16 | $ttffile='../font/unifont/DejaVuSerifCondensed-Italic.ttf'; 17 | $originalsize=338140; 18 | $fontkey='dejavuserifcondensedI'; 19 | -------------------------------------------------------------------------------- /lib/tfpdf/font/zapfdingbats.php: -------------------------------------------------------------------------------- 1 | 0,chr(1)=>0,chr(2)=>0,chr(3)=>0,chr(4)=>0,chr(5)=>0,chr(6)=>0,chr(7)=>0,chr(8)=>0,chr(9)=>0,chr(10)=>0,chr(11)=>0,chr(12)=>0,chr(13)=>0,chr(14)=>0,chr(15)=>0,chr(16)=>0,chr(17)=>0,chr(18)=>0,chr(19)=>0,chr(20)=>0,chr(21)=>0, 8 | chr(22)=>0,chr(23)=>0,chr(24)=>0,chr(25)=>0,chr(26)=>0,chr(27)=>0,chr(28)=>0,chr(29)=>0,chr(30)=>0,chr(31)=>0,' '=>278,'!'=>974,'"'=>961,'#'=>974,'$'=>980,'%'=>719,'&'=>789,'\''=>790,'('=>791,')'=>690,'*'=>960,'+'=>939, 9 | ','=>549,'-'=>855,'.'=>911,'/'=>933,'0'=>911,'1'=>945,'2'=>974,'3'=>755,'4'=>846,'5'=>762,'6'=>761,'7'=>571,'8'=>677,'9'=>763,':'=>760,';'=>759,'<'=>754,'='=>494,'>'=>552,'?'=>537,'@'=>577,'A'=>692, 10 | 'B'=>786,'C'=>788,'D'=>788,'E'=>790,'F'=>793,'G'=>794,'H'=>816,'I'=>823,'J'=>789,'K'=>841,'L'=>823,'M'=>833,'N'=>816,'O'=>831,'P'=>923,'Q'=>744,'R'=>723,'S'=>749,'T'=>790,'U'=>792,'V'=>695,'W'=>776, 11 | 'X'=>768,'Y'=>792,'Z'=>759,'['=>707,'\\'=>708,']'=>682,'^'=>701,'_'=>826,'`'=>815,'a'=>789,'b'=>789,'c'=>707,'d'=>687,'e'=>696,'f'=>689,'g'=>786,'h'=>787,'i'=>713,'j'=>791,'k'=>785,'l'=>791,'m'=>873, 12 | 'n'=>761,'o'=>762,'p'=>762,'q'=>759,'r'=>759,'s'=>892,'t'=>892,'u'=>788,'v'=>784,'w'=>438,'x'=>138,'y'=>277,'z'=>415,'{'=>392,'|'=>392,'}'=>668,'~'=>668,chr(127)=>0,chr(128)=>390,chr(129)=>390,chr(130)=>317,chr(131)=>317, 13 | chr(132)=>276,chr(133)=>276,chr(134)=>509,chr(135)=>509,chr(136)=>410,chr(137)=>410,chr(138)=>234,chr(139)=>234,chr(140)=>334,chr(141)=>334,chr(142)=>0,chr(143)=>0,chr(144)=>0,chr(145)=>0,chr(146)=>0,chr(147)=>0,chr(148)=>0,chr(149)=>0,chr(150)=>0,chr(151)=>0,chr(152)=>0,chr(153)=>0, 14 | chr(154)=>0,chr(155)=>0,chr(156)=>0,chr(157)=>0,chr(158)=>0,chr(159)=>0,chr(160)=>0,chr(161)=>732,chr(162)=>544,chr(163)=>544,chr(164)=>910,chr(165)=>667,chr(166)=>760,chr(167)=>760,chr(168)=>776,chr(169)=>595,chr(170)=>694,chr(171)=>626,chr(172)=>788,chr(173)=>788,chr(174)=>788,chr(175)=>788, 15 | chr(176)=>788,chr(177)=>788,chr(178)=>788,chr(179)=>788,chr(180)=>788,chr(181)=>788,chr(182)=>788,chr(183)=>788,chr(184)=>788,chr(185)=>788,chr(186)=>788,chr(187)=>788,chr(188)=>788,chr(189)=>788,chr(190)=>788,chr(191)=>788,chr(192)=>788,chr(193)=>788,chr(194)=>788,chr(195)=>788,chr(196)=>788,chr(197)=>788, 16 | chr(198)=>788,chr(199)=>788,chr(200)=>788,chr(201)=>788,chr(202)=>788,chr(203)=>788,chr(204)=>788,chr(205)=>788,chr(206)=>788,chr(207)=>788,chr(208)=>788,chr(209)=>788,chr(210)=>788,chr(211)=>788,chr(212)=>894,chr(213)=>838,chr(214)=>1016,chr(215)=>458,chr(216)=>748,chr(217)=>924,chr(218)=>748,chr(219)=>918, 17 | chr(220)=>927,chr(221)=>928,chr(222)=>928,chr(223)=>834,chr(224)=>873,chr(225)=>828,chr(226)=>924,chr(227)=>924,chr(228)=>917,chr(229)=>930,chr(230)=>931,chr(231)=>463,chr(232)=>883,chr(233)=>836,chr(234)=>836,chr(235)=>867,chr(236)=>867,chr(237)=>696,chr(238)=>696,chr(239)=>874,chr(240)=>0,chr(241)=>874, 18 | chr(242)=>760,chr(243)=>946,chr(244)=>771,chr(245)=>865,chr(246)=>771,chr(247)=>888,chr(248)=>967,chr(249)=>888,chr(250)=>831,chr(251)=>873,chr(252)=>927,chr(253)=>970,chr(254)=>918,chr(255)=>0); 19 | -------------------------------------------------------------------------------- /lib/tfpdf/tFPDF/ProtectedPDF.php: -------------------------------------------------------------------------------- 1 | bol_encrypted) { 58 | // Encrypt text 59 | $s = self::RC4($this->ObjectKey($this->int_current_object), $s); 60 | } 61 | 62 | return parent::TextString($s); 63 | } 64 | 65 | /** {@inheritdoc} */ 66 | protected function PutStream($str_data) 67 | { 68 | if ($this->bol_encrypted) { 69 | // Encrypt content 70 | $str_data = self::RC4($this->ObjectKey($this->int_current_object), $str_data); 71 | } 72 | 73 | parent::PutStream($str_data); 74 | } 75 | 76 | /** {@inheritdoc} */ 77 | public function PutResources() 78 | { 79 | parent::PutResources(); 80 | 81 | if ($this->bol_encrypted) { 82 | $this->NewObject(); 83 | $this->int_encryption_object_id = $this->int_current_object; 84 | $this->Out('<<'); 85 | $this->PutEncryption(); 86 | $this->Out('>>'); 87 | $this->Out('endobj'); 88 | } 89 | } 90 | 91 | /** {@inheritdoc} */ 92 | public function PutTrailer() 93 | { 94 | parent::PutTrailer(); 95 | 96 | if ($this->bol_encrypted) { 97 | $this->Out('/Encrypt ' . $this->int_encryption_object_id . ' 0 R'); 98 | $this->Out('/ID [()()]'); 99 | } 100 | } 101 | 102 | /** 103 | * Write encryption metadata to the document 104 | */ 105 | public function PutEncryption() 106 | { 107 | $this->Out('/Filter /Standard'); 108 | $this->Out('/V 1'); 109 | $this->Out('/R 2'); 110 | 111 | $this->Out('/O ('.$this->EscapeString($this->str_o_value).')'); 112 | $this->Out('/U ('.$this->EscapeString($this->str_u_value).')'); 113 | $this->Out('/P '.$this->int_p_value); 114 | } 115 | 116 | /** 117 | * @param array|null $permissions An array of ::PERMISSION_* 118 | * @param string $user_password The password for restricted access to the document (obeying $permissions) 119 | * @param string|null $owner_password The password for unrestricted access to the document (ignoring $permissions) 120 | */ 121 | public function SetProtection(array $permissions = null, $user_password = '', $owner_password = null) 122 | { 123 | $protection = self::PROTECTION_BASE; 124 | foreach((array)$permissions as $permission){ 125 | // Test for duplicate permissions 126 | if (($protection & $permission) === 0) { 127 | $protection += $permission; 128 | } 129 | } 130 | 131 | if (strlen($user_password) > self::PASSWORD_MAX_LENGTH || strlen((string)$owner_password) > self::PASSWORD_MAX_LENGTH) { 132 | throw new \InvalidArgumentException('Passwords must be no greater than '.self::PASSWORD_MAX_LENGTH.' chars'); 133 | } 134 | 135 | if ($owner_password === null) { 136 | // Generate random ownerpassword 137 | $owner_password = substr(uniqid(mt_rand(), true).uniqid(mt_rand(), true), 0, self::PASSWORD_MAX_LENGTH); 138 | } 139 | 140 | $this->InitializeEncryption($user_password, $owner_password, $protection); 141 | 142 | $this->bol_encrypted = true; 143 | } 144 | 145 | /** 146 | * Compute encryption key 147 | */ 148 | private function InitializeEncryption($user_password, $owner_password, $protection) 149 | { 150 | // Pad passwords 151 | $user_password = self::FormatEncryptionPassword($user_password); 152 | $owner_password = self::FormatEncryptionPassword($owner_password); 153 | 154 | // Compute values 155 | $this->str_o_value = $this->GenerateOvalue($user_password, $owner_password); 156 | $this->str_encryption_key = $this->GenerateEncryptionKey($user_password, $this->str_o_value, $protection); 157 | $this->str_u_value = $this->GenerateUvalue($this->str_encryption_key); 158 | $this->int_p_value = $this->GeneratePvalue($protection); 159 | } 160 | 161 | /** 162 | * @param string $object_index 163 | * @return string The key for the specified object 164 | */ 165 | private function ObjectKey($object_index) 166 | { 167 | return substr($this->MD5to16($this->str_encryption_key.pack('VXxx', $object_index)), 0, 10); 168 | } 169 | 170 | /** 171 | * Get MD5 as binary string 172 | */ 173 | private static function MD5to16($string) 174 | { 175 | return pack('H*', md5($string)); 176 | } 177 | 178 | /** 179 | * @param string $user_password 180 | * @param string $owner_password 181 | * 182 | * @return string 183 | */ 184 | private static function GenerateOvalue($user_password, $owner_password) 185 | { 186 | $tmp = self::MD5to16($owner_password); 187 | $owner_rc4_key = substr($tmp, 0, 5); 188 | return self::RC4($owner_rc4_key, $user_password); 189 | } 190 | 191 | /** 192 | * @param string $str_encryption_key 193 | * @return string 194 | */ 195 | private static function GenerateUvalue($str_encryption_key) 196 | { 197 | return self::RC4($str_encryption_key, self::ENCRYPTION_PADDING); 198 | } 199 | 200 | /** 201 | * @param int $protection 202 | * @return int 203 | */ 204 | private static function GeneratePvalue($protection) 205 | { 206 | return -(($protection ^ 255) + 1); 207 | } 208 | 209 | /** 210 | * @param string $user_password The padded user password 211 | * @param string $str_o_value 212 | * @param int $protection The protection flags integer value 213 | * 214 | * @return string 215 | */ 216 | private static function GenerateEncryptionKey($user_password, $str_o_value, $protection) 217 | { 218 | $tmp = self::MD5to16($user_password.$str_o_value.chr($protection)."\xFF\xFF\xFF"); 219 | return substr($tmp, 0, 5); 220 | } 221 | 222 | /** 223 | * @param string $password The raw password 224 | * @return string The password suitable for generating encryption values, padded with data if necessary 225 | */ 226 | private static function FormatEncryptionPassword($password) 227 | { 228 | return substr($password.self::ENCRYPTION_PADDING, 0, self::PASSWORD_MAX_LENGTH); 229 | } 230 | 231 | /** 232 | * @param string $key The encryption key 233 | * @param string $data Data to encrypt 234 | * @return string The encrypted data 235 | */ 236 | private static function RC4($key, $data) 237 | { 238 | static $last_key; 239 | static $last_state; 240 | 241 | if ($key === $last_key) { 242 | // Same key - use same state 243 | $state = $last_state; 244 | } else { 245 | // Calculate new state 246 | $k = str_repeat($key, 256 / strlen($key) + 1); 247 | $state = range(0, 255); 248 | $j = 0; 249 | for ($i = 0; $i < 256; $i++) { 250 | $t = $state[$i]; 251 | $j = ($j + $t + ord($k[$i])) % 256; 252 | $state[$i] = $state[$j]; 253 | $state[$j] = $t; 254 | } 255 | $last_key = $key; 256 | $last_state = $state; 257 | } 258 | 259 | $len = strlen($data); 260 | $a = 0; 261 | $b = 0; 262 | $out = ''; 263 | for ($i = 0; $i < $len; $i++) { 264 | $a = ($a + 1) % 256; 265 | $t = $state[$a]; 266 | $b = ($b + $t) % 256; 267 | $state[$a] = $state[$b]; 268 | $state[$b] = $t; 269 | $k = $state[($state[$a] + $state[$b]) % 256]; 270 | $out .= chr(ord($data[$i]) ^ $k); 271 | } 272 | 273 | return $out; 274 | } 275 | 276 | } 277 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "sensei-certificates", 3 | "version": "2.5.3", 4 | "description": "Sensei LMS Certificates", 5 | "author": "Automattic", 6 | "license": "GPL-2.0-or-later", 7 | "keywords": [ 8 | "wordpress-plugin" 9 | ], 10 | "homepage": "https://woocommerce.com/products/sensei-certificates/", 11 | "repository": { 12 | "type": "git", 13 | "url": "git+https://github.com/woocommerce/sensei-certificates.git" 14 | }, 15 | "bugs": { 16 | "url": "https://github.com/woocommerce/sensei-certificates/issues" 17 | }, 18 | "devDependencies": { 19 | "@wordpress/scripts": "wp-6.0" 20 | }, 21 | "scripts": { 22 | "build": "npm run build:assets && npm run archive", 23 | "build:assets": "wp-scripts build", 24 | "archive": "composer archive --file=$npm_package_name --format=zip", 25 | "postarchive": "rm -rf $npm_package_name && unzip $npm_package_name.zip -d $npm_package_name && rm $npm_package_name.zip && zip -r $npm_package_name.zip $npm_package_name && rm -rf $npm_package_name", 26 | "check-engines": "wp-scripts check-engines", 27 | "check-licenses": "wp-scripts check-licenses", 28 | "format:js": "wp-scripts format-js", 29 | "lint:css": "wp-scripts lint-style assets/css", 30 | "lint:js": "wp-scripts lint-js assets/js", 31 | "lint:pkg-json": "wp-scripts lint-pkg-json", 32 | "packages-update": "wp-scripts packages-update", 33 | "start": "wp-scripts start", 34 | "i18n:build": "npm run i18n:php", 35 | "i18n:php": "wp i18n make-pot --exclude=lib,vendor,node_modules --skip-js --headers='{\"Last-Translator\":null,\"Language-Team\":null,\"Report-Msgid-Bugs-To\":\"https://wordpress.org/support/plugin/sensei-certificates\"}' . lang/sensei-certificates.pot" 36 | }, 37 | "config": { 38 | "wp_org_slug": "sensei-certificates" 39 | }, 40 | "dependencies": { 41 | "@wordpress/icons": "wp-6.0" 42 | } 43 | } 44 | -------------------------------------------------------------------------------- /phpcs.xml.dist: -------------------------------------------------------------------------------- 1 | 2 | 3 | A custom set of code standard rules to check for WordPress themes and plugins. 4 | 5 | 6 | 7 | 8 | . 9 | ^node_modules/* 10 | ^vendor/* 11 | ^build/* 12 | ^lib/* 13 | tests/ 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | -------------------------------------------------------------------------------- /readme.txt: -------------------------------------------------------------------------------- 1 | === Sensei LMS Certificates === 2 | Contributors: automattic, alexsanford1, donnapep, jakeom, gikaragia, renathoc, yscik, m1r0, aaronfc 3 | Tags: certificates, course certificate, sensei lms 4 | Requires at least: 6.5 5 | Tested up to: 6.7 6 | Requires PHP: 7.4 7 | Stable tag: 2.5.3 8 | License: GPLv2+ 9 | License URI: http://www.gnu.org/licenses/gpl-2.0.html 10 | 11 | Award your students with a certificate of completion and a sense of accomplishment after finishing a course. 12 | 13 | == Description == 14 | 15 | = Award your students with a certificate of completion for their completed courses. = 16 | 17 | There’s no feeling quite like it. You’ve studied hard, taken your test and passed (with flying colours, I’m sure)! After all that effort, you’re finally at the end of the course. You want to share this accolade with everyone. Print out your certificate! 18 | 19 | With Sensei LMS Certificates, your students are awarded a certificate for each course they complete through your online school. These certificates can be downloaded, printed and framed on their office wall, or stuck up on the fridge for the entire family to enjoy. If you’d like to make certificates public for all to view, that’s available as well. 20 | 21 | = Customise the certificate design = 22 | 23 | Sensei LMS Certificates includes an advanced certificate design system. Through this system, you can upload your own background image, place and style the size, typeface and colour of the various pieces of text on the certificate and truly create a unique design best suited to your online school. 24 | 25 | If you don’t fancy yourself as a designer, or would prefer to get up and running in not much time, Sensei LMS Certificates includes a stylish default certificate design, suited to any genre of online school. 26 | 27 | = We already have many students who have completed courses! Can they get certificates as well? = 28 | 29 | They certainly can! When activating Sensei LMS Certificates, you will be prompted to generate certificates for each student who has already completed a course. Thankfully, this can be done, for all students, with the click of a button. 30 | 31 | = Increase student retention = 32 | 33 | We all enjoy receiving rewards. If your students complete a single course, and receive their certificate for the hard work they’ve done, they will be statistically more likely to continue on to a further course, in order to re-live the rewarding experience of receiving a certificate for their efforts. 34 | 35 | We look forward to seeing your students light up with excitement when they receive their certificates for all the hard work they’ve done in completing your courses. 36 | 37 | = Key Features = 38 | 39 | * Easily-customised certificate design 40 | * Lean code, to ensure a pleasant experience 41 | * Intuitive integration with Sensei LMS 42 | 43 | == Installation == 44 | 45 | = Automatic installation = 46 | 47 | 1. Log into your WordPress admin panel and go to *Plugins* > *Add New*. 48 | 2. Enter "Sensei LMS Certificates" into the search field. 49 | 3. Once you've located the plugin, click *Install Now*. 50 | 4. Click *Activate*. 51 | 52 | = Manual installation = 53 | 54 | 1. Download the plugin file to your computer and unzip it. 55 | 2. Using an FTP program, or your hosting control panel, upload the unzipped plugin folder to your WordPress installation's `wp-content/plugins/` directory on the server. 56 | 3. Log into your WordPress admin panel and activate the plugin from the *Plugins* menu. 57 | 58 | == Screenshots == 59 | 1. Certificate of completion 60 | 2. Customise the certificate design 61 | 62 | == Changelog == 63 | [See changelog for all versions](https://raw.githubusercontent.com/woocommerce/sensei-certificates/trunk/changelog.txt). 64 | -------------------------------------------------------------------------------- /renovate.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": [ 3 | "config:base" 4 | ], 5 | "labels": ["[Type] Maintenance"], 6 | "packageRules": [ 7 | { 8 | "depTypeList": ["devDependencies"], 9 | "extends": ["schedule:monthly"], 10 | "groupName": "devDependencies" 11 | }, 12 | { 13 | "depTypeList": ["dependencies"], 14 | "extends": ["schedule:monthly"] 15 | }, 16 | { 17 | "depTypeList": ["require-dev"], 18 | "extends": ["schedule:monthly"], 19 | "groupName": "require-dev" 20 | } 21 | ] 22 | } -------------------------------------------------------------------------------- /templates/single-certificate_template.php: -------------------------------------------------------------------------------- 1 | get_image_id() ) { 29 | // stream the example certificate pdf 30 | $woothemes_sensei_certificate_templates->generate_pdf(); 31 | exit; 32 | } else { 33 | wp_die( esc_html__( 'You must set a certificate_template primary image before you can preview', 'sensei-certificates' ) ); 34 | } 35 | -------------------------------------------------------------------------------- /uninstall.php: -------------------------------------------------------------------------------- 1 | get_col( "SELECT blog_id FROM $wpdb->blogs" ); 37 | $original_blog_id = get_current_blog_id(); 38 | 39 | foreach ( $blog_ids as $_blog_id ) { 40 | switch_to_blog( $_blog_id ); 41 | 42 | if ( Sensei_Certificate_Data_Cleaner::should_do_cleanup() ) { 43 | Sensei_Certificate_Data_Cleaner::cleanup_all(); 44 | } 45 | } 46 | 47 | switch_to_blog( $original_blog_id ); 48 | } 49 | -------------------------------------------------------------------------------- /webpack.config.js: -------------------------------------------------------------------------------- 1 | const defaultConfig = require( '@wordpress/scripts/config/webpack.config' ); 2 | const path = require( 'path' ); 3 | 4 | const files = { 5 | 'js/admin': 'js/admin.js', 6 | 'js/course': 'js/course.js', 7 | 'css/admin': 'css/admin.scss', 8 | 'css/frontend': 'css/frontend.scss', 9 | 'blocks/index': 'blocks/index.js', 10 | }; 11 | 12 | const baseDist = 'assets/dist/'; 13 | 14 | Object.keys( files ).forEach( function ( key ) { 15 | files[ key ] = path.resolve( './assets', files[ key ] ); 16 | } ); 17 | 18 | module.exports = { 19 | ...defaultConfig, 20 | entry: files, 21 | output: { 22 | path: path.resolve( '.', baseDist ), 23 | }, 24 | }; 25 | -------------------------------------------------------------------------------- /woothemes-sensei-certificates.php: -------------------------------------------------------------------------------- 1 |