Changeset 2026454
- Timestamp:
- 02/07/2019 10:32:24 AM (7 years ago)
- Location:
- verge3d/trunk
- Files:
-
- 1 added
- 7 edited
-
app.php (modified) (1 diff)
-
order.php (modified) (16 diffs)
-
readme.txt (modified) (2 diffs)
-
templates/order_admin_form.php (added)
-
templates/order_email_body.php (modified) (5 diffs)
-
templates/order_failed.php (modified) (1 diff)
-
templates/order_form.php (modified) (4 diffs)
-
verge3d.php (modified) (2 diffs)
Legend:
- Unmodified
- Added
- Removed
-
verge3d/trunk/app.php
r1953799 r2026454 185 185 186 186 // process bulk request 187 if (is_array($app)) 187 if (is_array($app)) { 188 188 foreach ($app as $a) 189 189 if (!empty(intval($a))) 190 190 v3d_delete_app(intval($a)); 191 else191 } else { 192 192 if (!empty(intval($app))) 193 193 v3d_delete_app(intval($app)); 194 } 194 195 195 196 v3d_redirect_app_list(); -
verge3d/trunk/order.php
r1943524 r2026454 4 4 require_once(ABSPATH . 'wp-admin/includes/class-wp-list-table.php'); 5 5 } 6 7 // for Captcha8 function start_session() {9 if (!session_id()) {10 session_start();11 }12 }13 add_action('init', 'start_session', 1);14 15 6 16 7 function v3d_order_menu() … … 24 15 25 16 switch ($action) { 17 case 'createform': 18 $order = array(); 19 v3d_display_order($order, -1); 20 break; 26 21 case 'create': 27 $order = array( 28 'title' => '', 29 'content' => '', 30 'price' => '0', 31 'screenshot' => '', 32 'user_name' => '', 33 'user_email' => '', 34 'user_tel' => '', 35 'user_comment' => '', 36 ); 37 v3d_display_order($order, -1); 38 break; 39 case 'createorder': 40 41 $order = array( 42 'title' => (!empty($_REQUEST['title'])) ? 43 sanitize_text_field($_REQUEST['title']) : 'Unknown Order', 44 'content' => (!empty($_REQUEST['content'])) ? 45 sanitize_textarea_field($_REQUEST['content']) : '', 46 'price' => (!empty($_REQUEST['price'])) ? 47 sanitize_text_field($_REQUEST['price']) : '0', 48 'screenshot' => (!empty($_REQUEST['screenshot'])) ? 49 sanitize_text_field($_REQUEST['screenshot']) : '', 50 'user_name' => (!empty($_REQUEST['user_name'])) ? 51 sanitize_text_field($_REQUEST['user_name']) : '', 52 'user_email' => (!empty($_REQUEST['user_email'])) ? 53 sanitize_email($_REQUEST['user_email']) : '', 54 'user_tel' => (!empty($_REQUEST['user_tel'])) ? 55 sanitize_text_field($_REQUEST['user_tel']) : '', 56 'user_comment' => (!empty($_REQUEST['user_comment'])) ? 57 sanitize_textarea_field($_REQUEST['user_comment']) : '', 58 ); 59 60 v3d_create_order($order); 22 v3d_create_order(v3d_request_to_order()); 61 23 v3d_redirect_order_list(); 62 24 break; 63 case 'edit ':25 case 'editform': 64 26 $order_id = intval($_REQUEST['order']); 65 27 … … 69 31 } 70 32 71 $order = array( 72 'title' => get_the_title($order_id), 73 'content' => get_post_field('post_content', $order_id), 74 'price' => get_post_meta($order_id, 'price', true), 75 'screenshot' => get_post_meta($order_id, 'screenshot', true), 76 'user_name' => get_post_meta($order_id, 'user_name', true), 77 'user_email' => get_post_meta($order_id, 'user_email', true), 78 'user_tel' => get_post_meta($order_id, 'user_tel', true), 79 'user_comment' => get_post_meta($order_id, 'user_comment', true), 80 ); 81 33 $order = json_decode(get_post_field('post_content', $order_id), true); 82 34 v3d_display_order($order, $order_id); 83 35 84 36 break; 85 case 'edit order':37 case 'edit': 86 38 if ($_SERVER['REQUEST_METHOD'] == 'POST' && !empty($_REQUEST['order'])) { 87 39 $order_id = intval($_REQUEST['order']); 88 40 89 41 if (!empty($_REQUEST['title']) || !empty($_REQUEST['content'])) { 90 $post_arr = array( 91 'ID' => $order_id, 92 'post_title' => (!empty($_REQUEST['title'])) ? 93 sanitize_text_field($_REQUEST['title']) : '', 94 'post_content' => (!empty($_REQUEST['content'])) ? 95 sanitize_textarea_field($_REQUEST['content']) : '', 96 'post_status' => 'publish', 97 'post_type' => 'v3d_order', 98 'meta_input' => array( 99 'price' => (!empty($_REQUEST['price'])) ? 100 sanitize_text_field($_REQUEST['price']) : '0', 101 'screenshot' => (!empty($_REQUEST['screenshot'])) ? 102 sanitize_text_field($_REQUEST['screenshot']) : '', 103 'user_name' => (!empty($_REQUEST['user_name'])) ? 104 sanitize_text_field($_REQUEST['user_name']) : '', 105 'user_email' => (!empty($_REQUEST['user_email'])) ? 106 sanitize_email($_REQUEST['user_email']) : '', 107 'user_tel' => (!empty($_REQUEST['user_tel'])) ? 108 sanitize_text_field($_REQUEST['user_tel']) : '', 109 'user_comment' => (!empty($_REQUEST['user_comment'])) ? 110 sanitize_textarea_field($_REQUEST['user_comment']) : '', 111 ), 112 ); 113 wp_update_post($post_arr); 42 v3d_update_order($order_id, v3d_request_to_order()); 114 43 } 115 44 … … 127 56 128 57 // process bulk request 129 if (is_array($order)) 58 if (is_array($order)) { 130 59 foreach ($order as $o) 131 60 if (!empty(intval($o))) 132 61 v3d_delete_order(intval($o)); 133 else134 if (!empty(intval($order))) 62 } else { 63 if (!empty(intval($order))) { 135 64 v3d_delete_order($order); 65 } 66 } 136 67 137 68 v3d_redirect_order_list(); … … 145 76 $orderTable = new V3D_Order_List_Table(); 146 77 $orderTable->prepare_items(); 147 78 148 79 ?> 149 80 <div class="wrap"> … … 151 82 152 83 <h1 class='wp-heading-inline'>E-Commerce Orders</h1> 153 <a href="?page=verge3d_order&action=create " class="page-title-action">Add New</a>84 <a href="?page=verge3d_order&action=createform" class="page-title-action">Add New</a> 154 85 155 86 <div class="v3d-hint"> … … 173 104 function v3d_create_order($order) { 174 105 $post_arr = array( 175 'post_title' => $order['title'],176 'post_content' => $order['content'],106 'post_title' => '', 107 'post_content' => json_encode($order, JSON_UNESCAPED_UNICODE), 177 108 'post_status' => 'publish', 178 'post_type' => 'v3d_order', 179 'meta_input' => array( 180 'price' => $order['price'], 181 'screenshot' => $order['screenshot'], 182 'user_name' => $order['user_name'], 183 'user_email' => $order['user_email'], 184 'user_tel' => $order['user_tel'], 185 'user_comment' => $order['user_comment'], 186 ), 109 'post_type' => 'v3d_order' 187 110 ); 188 111 wp_insert_post($post_arr); 189 190 112 191 113 $order_email = get_option('v3d_order_email'); … … 224 146 } 225 147 148 function v3d_update_order($order_id, $order) { 149 $post_arr = array( 150 'ID' => $order_id, 151 'post_title' => '', 152 'post_content' => json_encode($order, JSON_UNESCAPED_UNICODE), 153 'post_status' => 'publish', 154 'post_type' => 'v3d_order' 155 ); 156 157 wp_update_post($post_arr); 158 } 159 160 function v3d_request_to_order() { 161 $order = array(); 162 163 $IGNORED_KEYS = ['page', 'action', 'order']; 164 165 foreach ($_POST as $key => $value) { 166 if (in_array($key, $IGNORED_KEYS, true)) 167 continue; 168 169 // allow multi-dimensional keys, separated by ":" 170 $keys = strpos($key, ':') !== false ? explode(':', $key) : array($key); 171 172 $ptr = &$order; 173 174 foreach ($keys as $k) { 175 if (!isset($ptr[$k])) { 176 $ptr[$k] = array(); 177 } 178 $ptr = &$ptr[$k]; 179 } 180 if (empty($ptr)) { 181 $ptr = $value; 182 } else { 183 $ptr[] = $value; 184 } 185 } 186 187 return $order; 188 } 189 226 190 function v3d_display_order($order, $order_id) { 227 $title = $order['title']; 228 $content = $order['content']; 229 $price = $order['price']; 230 $screenshot = $order['screenshot']; 231 $user_name = $order['user_name']; 232 $user_email = $order['user_email']; 233 $user_tel = $order['user_tel']; 234 $user_comment = $order['user_comment']; 235 236 ?> 237 <div class="wrap"> 238 <h1 class="wp-heading-inline"><?php echo $order_id > -1 ? 'Update Order' : 'Create Order' ?></h1> 239 <form method="post" id="updateorderform"> 240 <input type="hidden" name="page" value="<?php echo sanitize_text_field($_REQUEST['page']) ?>" /> 241 <input type="hidden" name="action" value="<?php echo $order_id > -1 ? 'editorder' : 'createorder' ?>" /> 242 <input type="hidden" name="order" value="<?php echo $order_id ?>" /> 243 <table class="form-table"> 244 <tbody> 245 <tr class="form-field form-required"> 246 <th scope="row"> 247 <label for="title">Title <span class="description">(required)</span></label> 248 </th> 249 <td> 250 <input type="text" name="title" id="title" value="<?php echo $title ?>" required="true" autocapitalize="none" autocorrect="off" maxlength="200"> 251 </td> 252 </tr> 253 <tr class="form-field form-required"> 254 <th scope="row"> 255 <label for="content">Content <span class="description">(required)</span></label> 256 </th> 257 <td> 258 <input type="text" name="content" id="content" value="<?php echo $content ?>" required="true" autocapitalize="none" autocorrect="off" maxlength="200"> 259 </td> 260 </tr> 261 <tr class="form-field form-required"> 262 <th scope="row"> 263 <label for="price">Total Price <span class="description">(required)</span></label> 264 </th> 265 <td> 266 <input type="text" name="price" id="price" value="<?php echo $price ?>" required="true" > 267 </td> 268 </tr> 269 <tr class="form-field form-required"> 270 <th scope="row"> 271 <label for="user_name">Customer Name <span class="description">(required)</span></label> 272 </th> 273 <td> 274 <input type="text" name="user_name" id="user_name" value="<?php echo $user_name ?>" required="true" > 275 </td> 276 </tr> 277 <tr class="form-field form-required"> 278 <th scope="row"> 279 <label for="user_email">Customer E-Mail <span class="description">(required)</span></label> 280 </th> 281 <td> 282 <input type="email" name="user_email" id="user_email" value="<?php echo $user_email ?>" required="true" > 283 </td> 284 </tr> 285 <tr class="form-field form-required"> 286 <th scope="row"> 287 <label for="user_tel">Customer Phone <span class="description">(required)</span></label> 288 </th> 289 <td> 290 <input type="tel" name="user_tel" id="user_tel" value="<?php echo $user_tel ?>" required="true" > 291 </td> 292 </tr> 293 <tr class="form-field"> 294 <th scope="row"> 295 <label for="user_comment">Comments</label> 296 </th> 297 <td> 298 <input type="tel" name="user_comment" id="user_comment" value="<?php echo $user_comment ?>"> 299 </td> 300 </tr> 301 <tr class="form-field"> 302 <th scope="row"> 303 <label for="screenshot">Screenshot</label> 304 </th> 305 <td> 306 <img src="<?php echo $screenshot ?>" id="screenshot" class="v3d-admin-screenshot"> 307 </td> 308 </tr> 309 </tbody> 310 </table> 311 <p class="submit"><input type="submit" class="button button-primary"></p> 312 </form> 313 </div> 314 <?php 191 include v3d_get_template('order_admin_form.php'); 315 192 } 316 193 … … 345 222 function column_default($item, $column_name){ 346 223 switch ($column_name) { 347 case 'content':348 224 case 'price': 349 225 case 'user_name': 350 226 case 'user_email': 351 case 'user_ tel':227 case 'user_phone': 352 228 case 'date': 353 229 return $item[$column_name]; 354 230 default: 355 return print_r($item, true); // Show the whole array for troubleshooting purposes231 return print_r($item, true); // show the whole array for troubleshooting purposes 356 232 } 357 233 } … … 362 238 $actions = array( 363 239 'edit' => sprintf('<a href="?page=%s&action=%s&order=%s">Edit</a>', 364 sanitize_text_field($_REQUEST['page']), 'edit ', $item['ID']),240 sanitize_text_field($_REQUEST['page']), 'editform', $item['ID']), 365 241 'delete' => sprintf('<a href="?page=%s&action=%s&order=%s">Delete</a>', 366 242 sanitize_text_field($_REQUEST['page']), 'delete', $item['ID']), … … 386 262 'cb' => '<input type="checkbox" />', //Render a checkbox instead of text 387 263 'title' => 'Title', 388 'content' => 'Content',389 264 'price' => 'Total Price', 390 265 'user_name' => 'Customer', 391 266 'user_email' => 'Customer Email', 392 'user_ tel' => 'Phone Number',267 'user_phone' => 'Phone Number', 393 268 'date' => 'Date', 394 269 ); … … 402 277 'user_name' => array('user_name', false), 403 278 'user_email' => array('user_email', false), 404 'user_ tel' => array('user_tel', false),279 'user_phone' => array('user_phone', false), 405 280 'date' => array('date', false), 406 281 ); … … 464 339 465 340 foreach ($q_posts as $q_post) { 466 $email = get_post_meta($q_post->ID, 'user_email', true); 341 342 $content = json_decode($q_post->post_content, true); 467 343 468 344 $posts[] = array( 469 345 'ID' => $q_post->ID, 470 'title' => $q_post->post_title, 471 'content' => $q_post->post_content, 472 'price' => get_post_meta($q_post->ID, 'price', true), 473 'user_name' => get_post_meta($q_post->ID, 'user_name', true), 474 'user_email' => '<a href="mailto:'.$email.'">'.$email.'</a>', 475 'user_tel' => get_post_meta($q_post->ID, 'user_tel', true), 346 'title' => (!empty($content['title'])) ? $content['title'] : 'N/A', 347 'price' => (!empty($content['price'])) ? $content['price'] : 'N/A', 348 'user_name' => (!empty($content['user_name'])) ? $content['user_name'] : 'N/A', 349 'user_email' => (!empty($content['user_email'])) ? $content['user_email'] : 'N/A', 350 'user_phone' => (!empty($content['user_phone'])) ? $content['user_phone'] : 'N/A', 476 351 'date' => $q_post->post_date, 477 352 ); … … 508 383 $screenshot = ''; 509 384 if (!empty($_REQUEST['v3d_screenshot'])) { 510 $screenshot = sanitize_text_field($_REQUEST['v3d_screenshot']);511 512 385 if ($action != 'submit') { 513 $screenshot = str_replace('data:image/png;base64,', '', $screenshot); 514 $screenshot = str_replace(' ', '+', $screenshot); 515 516 $upload_dir = v3d_get_upload_dir(); 517 $screenshot_dir = $upload_dir.'screenshots/'; 518 if (!is_dir($screenshot_dir)) { 519 mkdir($screenshot_dir, 0777, true); 520 } 521 522 $data = base64_decode($screenshot); 523 $file = $screenshot_dir.time().'.png'; 524 $success = file_put_contents($file, $data); 525 if ($success) 526 $screenshot = v3d_get_upload_url().'screenshots/'.basename($file); 386 $screenshot = v3d_save_screenshot(sanitize_text_field($_REQUEST['v3d_screenshot'])); 387 } else { 388 $screenshot = sanitize_text_field($_REQUEST['v3d_screenshot']); 527 389 } 528 390 } … … 530 392 $user_name = (!empty($_REQUEST['v3d_user_name'])) ? sanitize_text_field($_REQUEST['v3d_user_name']) : ''; 531 393 $user_email = (!empty($_REQUEST['v3d_user_email'])) ? sanitize_email($_REQUEST['v3d_user_email']) : ''; 532 $user_ tel = (!empty($_REQUEST['v3d_user_tel'])) ? sanitize_text_field($_REQUEST['v3d_user_tel']) : '';394 $user_phone = (!empty($_REQUEST['v3d_user_phone'])) ? sanitize_text_field($_REQUEST['v3d_user_phone']) : ''; 533 395 $user_comment = (!empty($_REQUEST['v3d_user_comment'])) ? sanitize_textarea_field($_REQUEST['v3d_user_comment']) : ''; 534 396 535 397 if ($action == 'submit') { 536 if ($_SESSION['captcha_string'] == sanitize_text_field($_REQUEST["v3d_captcha"])) { 537 v3d_create_order(array( 538 'title' => $title, 539 'content' => $content, 540 'price' => $price, 541 'screenshot' => $screenshot, 542 'user_name' => $user_name, 543 'user_email' => $user_email, 544 'user_tel' => $user_tel, 545 'user_comment' => $user_comment, 546 )); 547 ob_start(); 548 include v3d_get_template('order_success.php'); 549 return ob_get_clean(); 550 } else { 551 ob_start(); 552 include v3d_get_template('order_failed.php'); 553 return ob_get_clean(); 554 } 398 v3d_create_order(array( 399 'title' => $title, 400 'content' => $content, 401 'price' => $price, 402 'screenshot' => $screenshot, 403 'user_name' => $user_name, 404 'user_email' => $user_email, 405 'user_phone' => $user_phone, 406 'user_comment' => $user_comment, 407 )); 408 ob_start(); 409 include v3d_get_template('order_success.php'); 410 return ob_get_clean(); 555 411 } else { 556 $_SESSION['count'] = time();557 v3d_create_captcha();558 $captcha_url = v3d_get_upload_url().'captcha/'.$_SESSION['count'].'.png';559 560 412 ob_start(); 561 413 include v3d_get_template('order_form.php'); 562 414 return ob_get_clean(); 563 415 } 416 } 417 418 function v3d_save_screenshot($data_url) { 419 420 $data_url = str_replace('data:image/png;base64,', '', $data_url); 421 $data_url = str_replace(' ', '+', $data_url); 422 423 $upload_dir = v3d_get_upload_dir(); 424 $screenshot_dir = $upload_dir.'screenshots/'; 425 if (!is_dir($screenshot_dir)) { 426 mkdir($screenshot_dir, 0777, true); 427 } 428 429 $data = base64_decode($data_url); 430 $file = $screenshot_dir.time().'.png'; 431 $success = file_put_contents($file, $data); 432 if ($success) 433 return v3d_get_upload_url().'screenshots/'.basename($file); 434 else 435 return ''; 564 436 } 565 437 … … 578 450 } 579 451 580 function v3d_create_captcha() 581 { 582 global $image; 583 $image = imagecreatetruecolor(150, 40) or die("Cannot Initialize new GD image stream"); 584 $background_color = imagecolorallocate($image, 255, 255, 255); 585 $text_color = imagecolorallocate($image, 0, 255, 255); 586 $line_color = imagecolorallocate($image, 64, 64, 64); 587 $pixel_color = imagecolorallocate($image, 128, 128, 255); 588 imagefilledrectangle($image, 0, 0, 150, 40, $background_color); 589 //for ($i = 0; $i < 3; $i++) { 590 // imageline($image, 0, rand() % 40, 150, rand() % 40, $line_color); 591 //} 592 for ($i = 0; $i < 500; $i++) { 593 imagesetpixel($image, rand() % 150, rand() % 40, $pixel_color); 594 } 595 $letters = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz'; 596 $len = strlen($letters); 597 $letter = $letters[rand(0, $len - 1)]; 598 $text_color = imagecolorallocate($image, 0, 0, 0); 599 $word = ""; 600 for ($i = 0; $i < 6; $i++) { 601 $letter = $letters[rand(0, $len - 1)]; 602 imagestring($image, 5, 20 + ($i * 20), 12, $letter, $text_color); 603 $word .= $letter; 604 } 605 $_SESSION['captcha_string'] = $word; 606 607 $upload_dir = v3d_get_upload_dir(); 608 $captcha_dir = $upload_dir.'captcha/'; 609 610 if (!is_dir($captcha_dir)) { 611 mkdir($captcha_dir, 0777, true); 612 } 613 614 $images = glob($captcha_dir.'*.png'); 615 616 foreach ($images as $image_to_delete) { 617 @unlink($image_to_delete); 618 } 619 imagepng($image, $captcha_dir . $_SESSION['count'] . ".png"); 620 } 621 452 453 function v3d_api_place_order(WP_REST_Request $request) { 454 455 $params = $request->get_json_params(); 456 457 if (!empty($params)) { 458 459 if (!empty($params['screenshot'])) 460 $params['screenshot'] = v3d_save_screenshot($params['screenshot']); 461 462 v3d_create_order($params); 463 464 $response = new WP_REST_Response( 465 array( 466 'order' => 'ok', 467 ) 468 ); 469 } else { 470 471 $response = new WP_Error('wrong_order_params', 'Wrong order params', array('status' => 400)); 472 473 } 474 475 $response->header('Access-Control-Allow-Origin', '*'); 476 return $response; 477 478 } 479 480 add_action('rest_api_init', function () { 481 register_rest_route('verge3d/v1', '/place_order', array( 482 'methods' => 'POST', 483 'callback' => 'v3d_api_place_order', 484 )); 485 }); -
verge3d/trunk/readme.txt
r1953799 r2026454 5 5 Tested up to: 4.9.5 6 6 Requires PHP: 5.6 7 Stable tag: 2. 8.07 Stable tag: 2.10.0 8 8 License: GPLv2 or later 9 9 License URI: http://www.gnu.org/licenses/gpl-2.0.html … … 33 33 == Changelog == 34 34 35 = 2.10 = 36 * Support for JSON API and customized order templates. 37 35 38 = 2.8 = 36 39 * Fixed issue in applications with multiple HTML files -
verge3d/trunk/templates/order_email_body.php
r1943524 r2026454 35 35 </th> 36 36 <td> 37 <?php echo $order['content']?>37 <?php echo esc_html($order['content']) ?> 38 38 </td> 39 39 </tr> … … 43 43 </th> 44 44 <td> 45 <?php echo $order['price']?>45 <?php echo esc_html($order['price']) ?> 46 46 </td> 47 47 </tr> … … 51 51 </th> 52 52 <td> 53 <?php echo $order['user_email']?>53 <?php echo esc_html($order['user_email']) ?> 54 54 </td> 55 55 </tr> … … 59 59 </th> 60 60 <td> 61 <?php echo $order['user_tel']?>61 <?php echo esc_html($order['user_phone']) ?> 62 62 </td> 63 63 </tr> … … 67 67 </th> 68 68 <td> 69 <?php echo $order['user_comment']?>69 <?php echo esc_html($order['user_comment']) ?> 70 70 </td> 71 71 </tr> -
verge3d/trunk/templates/order_failed.php
r1943524 r2026454 1 1 <div class="v3d-order-form"> 2 Wrong order parameters or incorrect captcha. Please come back and try again.2 Wrong order parameters. Please come back and try again. 3 3 </div> -
verge3d/trunk/templates/order_form.php
r1943524 r2026454 44 44 </th> 45 45 <td> 46 <textarea name="textarea" readonly><?php echo $content?></textarea>46 <textarea name="textarea" readonly><?php echo esc_html($content) ?></textarea> 47 47 </td> 48 48 </tr> … … 52 52 </th> 53 53 <td> 54 <input type="text" name="v3d_price" id="v3d_price" value="<?php echo $price?>" required="true" readonly>54 <input type="text" name="v3d_price" id="v3d_price" value="<?php echo esc_html($price) ?>" required="true" readonly> 55 55 </td> 56 56 </tr> … … 73 73 <tr class="form-field form-required"> 74 74 <th scope="row"> 75 <label for="v3d_user_ tel">Your Phone <span class="v3d-asterix">*</span></label>75 <label for="v3d_user_phone">Your Phone <span class="v3d-asterix">*</span></label> 76 76 </th> 77 77 <td> 78 <input type="tel" name="v3d_user_ tel" id="v3d_user_tel" value="" required="true" >78 <input type="tel" name="v3d_user_phone" id="v3d_user_phone" value="" required="true" > 79 79 </td> 80 80 </tr> … … 95 95 </td> 96 96 </tr> 97 <tr class="form-field form-required">98 <th scope="row">99 <img src="<?php echo $captcha_url ?>" style="min-width:150px; vertical-align:top;">100 </th>101 <td>102 <input type="text" name="v3d_captcha" id="v3d_captcha" value="" required="true" >103 </td>104 </tr>105 97 </tbody> 106 98 </table> -
verge3d/trunk/verge3d.php
r1953799 r2026454 4 4 Plugin URI: https://www.soft8soft.com/verge3d 5 5 Description: Verge3D is the most artist-friendly toolkit for creating interactive web-based experiences. It can be used to create product configurators, 3D presentations, online stores, e-learning apps, 3D portfolios, browser games and more. 6 Version: 2. 8.06 Version: 2.10.0 7 7 Author: Soft8Soft LLC 8 8 Author URI: https://www.soft8soft.com … … 267 267 268 268 function v3d_get_template($name) { 269 return plugin_dir_path(__FILE__).'templates/'.$name; 270 } 271 269 270 $v3d_theme_dir = get_stylesheet_directory().'/verge3d/'; 271 272 if (is_file($v3d_theme_dir.$name)) 273 return $v3d_theme_dir.$name; 274 else 275 return plugin_dir_path(__FILE__).'templates/'.$name; 276 } 277
Note: See TracChangeset
for help on using the changeset viewer.