Changeset 3147546
- Timestamp:
- 09/06/2024 12:05:29 PM (19 months ago)
- Location:
- ai-wp-writer
- Files:
-
- 24 added
- 7 edited
-
tags/3.8.3 (added)
-
tags/3.8.3/assets (added)
-
tags/3.8.3/assets/css (added)
-
tags/3.8.3/assets/css/style.css (added)
-
tags/3.8.3/assets/images (added)
-
tags/3.8.3/assets/images/arrow.jpg (added)
-
tags/3.8.3/assets/images/cryptocloud.png (added)
-
tags/3.8.3/assets/images/doc.png (added)
-
tags/3.8.3/assets/images/logo.png (added)
-
tags/3.8.3/assets/images/robokassa.png (added)
-
tags/3.8.3/assets/js (added)
-
tags/3.8.3/assets/js/app.js (added)
-
tags/3.8.3/assets/js/button.js (added)
-
tags/3.8.3/assets/js/cron.js (added)
-
tags/3.8.3/assets/js/image-block.js (added)
-
tags/3.8.3/assets/js/image-tiny-mce.js (added)
-
tags/3.8.3/assets/libs (added)
-
tags/3.8.3/assets/libs/charts.js (added)
-
tags/3.8.3/class.assistant.php (added)
-
tags/3.8.3/index.php (added)
-
tags/3.8.3/readme.txt (added)
-
tags/3.8.3/tpl (added)
-
tags/3.8.3/tpl/options.php (added)
-
tags/3.8.3/tpl/workspace.php (added)
-
trunk/assets/css/style.css (modified) (2 diffs)
-
trunk/assets/js/app.js (modified) (4 diffs)
-
trunk/assets/js/button.js (modified) (1 diff)
-
trunk/class.assistant.php (modified) (5 diffs)
-
trunk/index.php (modified) (1 diff)
-
trunk/readme.txt (modified) (1 diff)
-
trunk/tpl/options.php (modified) (1 diff)
Legend:
- Unmodified
- Added
- Removed
-
ai-wp-writer/trunk/assets/css/style.css
r3138784 r3147546 1520 1520 /* promocode start */ 1521 1521 1522 .aiassist-promocode{ 1523 1522 #aiassist-promocode{ 1523 font-size: 14pt; 1524 background: #fff; 1525 padding: 3px 10px; 1526 border-radius: 3px; 1527 display: block; 1528 width: fit-content; 1529 margin: 10px 0px 0px 0px; 1524 1530 } 1525 1531 … … 1564 1570 } 1565 1571 1572 .aiassist-bonus-item{ 1573 margin: 20px; 1574 } 1575 1576 .aiassist-bonus-item input, 1577 .aiassist-bonus-item select{ 1578 width: 350px; 1579 height: 40px; 1580 outline: none; 1581 padding: 6px; 1582 border-radius: 3px; 1583 border: solid 1px #ccc; 1584 } 1585 1586 .aiassist-button{ 1587 width: 350px; 1588 height: 40px; 1589 border: none; 1590 cursor: pointer; 1591 font-size: 25px; 1592 border-radius: 3px; 1593 font-family: "Roboto"; 1594 color: rgb( 255, 255, 255 ); 1595 background-color: rgb( 66, 179, 213 ); 1596 } 1597 1598 .aiassist-copy{ 1599 cursor: pointer; 1600 transition: .2s; 1601 } 1602 1603 .aiassist-copy.active{ 1604 color: #fffc3f; 1605 } 1606 1566 1607 /* promocode end */ -
ai-wp-writer/trunk/assets/js/app.js
r3138784 r3147546 86 86 if( $('.wpai-warning-limits').length && $('.aiassist-tab[data-tab="rates"]').length ) 87 87 $('.aiassist-tab[data-tab="rates"]').click(); 88 89 if( ! aiassist.token ) 90 $('.aiassist-tab[data-tab="settings"]').click(); 88 91 89 92 if( imgModel = app.getCookie('image-model') ){ … … 112 115 113 116 $(document).on('click', '.pay-method', app.setPayMethod); 117 $(document).on('click', '.aiassist-copy', app.copy); 118 $(document).on('submit', '#aiassist-get-bonus', app.getBonus); 114 119 115 120 … … 117 122 $('html, body').animate( { scrollTop: $('#ai_assistant').offset().top }, 1000); 118 123 124 }, 125 126 getBonus: async function(event){ 127 event.preventDefault(); 128 129 let e = $(this); 130 e.find('button').before('<div>Запрос на выплату отправлен</div>').addClass('disabled'); 131 let args = app.getFormData( e ); 132 e[0].reset(); 133 await app.request( Object.assign( args, { action: 'getBonus', nonce: aiassist.nonce } ) ); 134 }, 135 136 copy: function(){ 137 let e = $(this); 138 139 e.addClass('active').delay(200).queue( next => { 140 e.removeClass('active'); 141 next(); 142 }) 143 144 app.buffer( e.text() ); 119 145 }, 120 146 … … 1531 1557 }, 1532 1558 1559 buffer: ( data ) => { 1560 let temp = $('<textarea>'); 1561 $('body').append( temp ); 1562 temp.val( data ).select(); 1563 document.execCommand('copy'); 1564 temp.remove(); 1565 }, 1566 1533 1567 setCookie: ( key, value ) => { 1534 1568 const expires = new Date(); -
ai-wp-writer/trunk/assets/js/button.js
r3120177 r3147546 1 const $ = jQuery; 1 ( ($) => { 2 3 const button = { 4 5 getTask: ( task_id ) => { 6 return new Promise( async resolve => { 7 while( true ){ 8 try{ 9 data = await button.request( { token: aiassist.token, gptkey: aiassist.gptkey, action: 'getTask', id: task_id }, aiassist.apiurl ); 10 11 if( data.content ){ 12 if( data.limit && $('#tokens-left').length ) 13 $('#tokens-left').text( data.limit ); 14 15 if( data.symbols && $('#aiassist-article-symbols').length ){ 16 let spent = $('#aiassist-article-symbols').text(); 17 spent = spent.replace(/[^0-9]/, ''); 18 spent = parseInt( spent ); 19 20 if( isNaN( spent ) ) 21 spent = 0; 22 23 spent = spent + parseInt( data.symbols ); 24 25 $('#aiassist-article-symbols').text( spent ); 26 button.setCookie( 'spent', spent ); 27 } 28 29 resolve( data ) 30 break; 31 } 32 } catch {} 33 34 await button.sleep(5); 35 } 36 }) 37 }, 38 39 setCookie: ( key, value ) => { 40 const expires = new Date(); 41 expires.setTime( expires.getTime() + (999 * 24 * 60 * 60 * 1000) ); 42 document.cookie = `${key}=${value};expires=${expires.toUTCString()};path=/`; 43 }, 44 45 loader: ( e = false, info = '' ) => { 46 if( $('#aiassist-loader-wrap').length ){ 47 $('#aiasist').removeClass('disabled'); 48 $('#aiassist-loader-wrap').remove(); 49 } 50 51 if( e ){ 52 $('#aiasist').addClass('disabled'); 53 $('#aiasist').after('<div id="aiassist-loader-wrap"><div id="aiassist-loader-info">'+ info +'</div><div id="aiassist-loader"></div><div id="aiassist-step-stop">Отмена</div></div>'); 54 } 55 }, 56 57 sleep: ( s ) => { 58 return new Promise( resolve => setTimeout( () => resolve(true), s * 1000) ); 59 }, 60 61 request: ( args = {}, url = false ) => { 62 return new Promise( resolve => $.ajax({ url: url || aiassist.ajaxurl, type: 'POST', data: args, timeout: 120000, dataType: 'json', success: data => resolve( data ), error: error => resolve( true ) }) ) 63 } 2 64 3 const button = {4 5 getTask: ( task_id ) => {6 return new Promise( async resolve => {7 while( true ){8 try{9 data = await button.request( { token: aiassist.token, gptkey: aiassist.gptkey, action: 'getTask', id: task_id }, aiassist.apiurl );10 11 if( data.content ){12 if( data.limit && $('#tokens-left').length )13 $('#tokens-left').text( data.limit );14 15 if( data.symbols && $('#aiassist-article-symbols').length ){16 let spent = $('#aiassist-article-symbols').text();17 spent = spent.replace(/[^0-9]/, '');18 spent = parseInt( spent );19 20 if( isNaN( spent ) )21 spent = 0;22 23 spent = spent + parseInt( data.symbols );24 25 $('#aiassist-article-symbols').text( spent );26 button.setCookie( 'spent', spent );27 }28 29 resolve( data )30 break;31 }32 } catch {}33 34 await button.sleep(5);35 }36 })37 },38 39 setCookie: ( key, value ) => {40 const expires = new Date();41 expires.setTime( expires.getTime() + (999 * 24 * 60 * 60 * 1000) );42 document.cookie = `${key}=${value};expires=${expires.toUTCString()};path=/`;43 },44 45 loader: ( e = false, info = '' ) => {46 if( $('#aiassist-loader-wrap').length ){47 $('#aiasist').removeClass('disabled');48 $('#aiassist-loader-wrap').remove();49 }50 51 if( e ){52 $('#aiasist').addClass('disabled');53 $('#aiasist').after('<div id="aiassist-loader-wrap"><div id="aiassist-loader-info">'+ info +'</div><div id="aiassist-loader"></div><div id="aiassist-step-stop">Отмена</div></div>');54 }55 },56 57 sleep: ( s ) => {58 return new Promise( resolve => setTimeout( () => resolve(true), s * 1000) );59 },60 61 request: ( args = {}, url = false ) => {62 return new Promise( resolve => $.ajax({ url: url || aiassist.ajaxurl, type: 'POST', data: args, timeout: 120000, dataType: 'json', success: data => resolve( data ), error: error => resolve( true ) }) )63 65 } 64 66 65 } 66 67 tinymce.create('tinymce.plugins.key', { 68 init: ( ed, url ) => { 69 // if( ed.id != 'AIASSIST' ) 70 // return; 67 tinymce.create('tinymce.plugins.key', { 68 init: ( ed, url ) => { 69 // if( ed.id != 'AIASSIST' ) 70 // return; 71 72 ed.addButton('AIASSIST', { 73 title : 'Перегенерация выделенного фрагмента текста', 74 text: 'AI assist', 75 icon: false, 76 onclick: () => { 77 $('#aiassist-regenerate-wrap').show(); 78 $('#aiassist-prom-regenerate').focus().blur(); 79 } 80 }); 81 82 $(document).on('click', '#aiassist-regenerate', async () => { 83 button.loader( true ); 84 85 $('#aiassist-regenerate-close').click(); 86 $('#aiassist-prom-regenerate').val(); 87 let task = await button.request( { content: ed.selection.getContent(), prom: $('#aiassist-prom-regenerate').val(), lang_id: parseInt( $('.aiassist-lang-promts-regenerate:first').val() ), token: aiassist.token, gptkey: aiassist.gptkey, action: 'reGenerateContent' }, aiassist.apiurl ); 88 89 data = await button.getTask( task.task_id ); 90 91 if( data.content ) 92 ed.selection.setContent( data.content ); 93 94 button.loader(); 95 }) 96 97 $(document).on('click', '#aiassist-regenerate-close', () => $('#aiassist-regenerate-wrap').hide() ); 98 }, 99 100 createControl: (n, cm) => { 101 return null; 102 }, 103 104 }); 105 tinymce.PluginManager.add('button', tinymce.plugins.key); 71 106 72 ed.addButton('AIASSIST', { 73 title : 'Перегенерация выделенного фрагмента текста', 74 text: 'AI assist', 75 icon: false, 76 onclick: () => { 77 $('#aiassist-regenerate-wrap').show(); 78 $('#aiassist-prom-regenerate').focus().blur(); 79 } 80 }); 81 82 $(document).on('click', '#aiassist-regenerate', async () => { 83 button.loader( true ); 84 85 $('#aiassist-regenerate-close').click(); 86 $('#aiassist-prom-regenerate').val(); 87 let task = await button.request( { content: ed.selection.getContent(), prom: $('#aiassist-prom-regenerate').val(), lang_id: parseInt( $('.aiassist-lang-promts-regenerate:first').val() ), token: aiassist.token, gptkey: aiassist.gptkey, action: 'reGenerateContent' }, aiassist.apiurl ); 88 89 data = await button.getTask( task.task_id ); 90 91 if( data.content ) 92 ed.selection.setContent( data.content ); 93 94 button.loader(); 95 }) 96 97 $(document).on('click', '#aiassist-regenerate-close', () => $('#aiassist-regenerate-wrap').hide() ); 98 }, 99 100 createControl: (n, cm) => { 101 return null; 102 }, 103 104 }); 105 tinymce.PluginManager.add('button', tinymce.plugins.key); 107 } )( jQuery ) -
ai-wp-writer/trunk/class.assistant.php
r3138784 r3147546 16 16 $this->steps = get_option('_aiassist_generator'); 17 17 18 if( ! is_array( @$this->steps['promts'] ) && @$this->info->promts)18 if( isset( $this->info->promts ) && ! is_array( $this->steps['promts'] ?? null ) ) 19 19 $this->steps['promts'] = (array) $this->info->promts; 20 20 21 21 if( @$this->info->promts ){ 22 22 foreach( $this->info->promts as $key => $promts ){ … … 52 52 add_action('wp_ajax_loadImage', [$this, 'loadImage']); 53 53 add_action('wp_ajax_saveKey', [$this, 'saveKey']); 54 add_action('wp_ajax_getBonus', [$this, 'getBonus']); 54 55 55 56 add_action('wp_ajax_rewriteOptions', [$this, 'rewriteOptions']); … … 105 106 $this->options = new stdClass(); 106 107 107 if( isset( $_POST['token'] ) && preg_match('/^[A-Za-z0-9]{64}$/i', $_POST['token']) ) 108 if( isset( $_POST['token'] ) && preg_match('/^[A-Za-z0-9]{64}$/i', $_POST['token']) ){ 108 109 $this->options->token = sanitize_text_field( $_POST['token'] ); 110 $this->info = $this->getInfo(); 111 } 109 112 110 113 update_option('_ai_assistant', $this->options ); … … 138 141 private function activation( $token ){ 139 142 $this->wpcurl( $this->api, [ 'host' => $this->getHost(), 'action' => 'activation', 'token' => sanitize_text_field( $token ) ] ); 143 } 144 145 public function getBonus(){ 146 if( ! $this->checkNonce() || ! current_user_can('manage_options') ) 147 return; 148 149 wp_die( $this->wpcurl( $this->api, [ 'method' => sanitize_text_field( $_POST['method'] ), 'wallet' => sanitize_text_field( $_POST['wallet'] ), 'info' => sanitize_text_field( $_POST['info'] ), 'token' => sanitize_text_field( $this->options->token ), 'action' => 'requestBonus' ] ) ); 140 150 } 141 151 … … 891 901 'gptkey' => get_option('aiassist_gpt_key'), 892 902 'info' => $this->info, 893 'promts' => $this->steps['promts'],903 'promts' => @$this->steps['promts'], 894 904 ] ); 895 905 } -
ai-wp-writer/trunk/index.php
r3138784 r3147546 1 1 <?php 2 2 /* 3 Version: 3.8. 2.33 Version: 3.8.3 4 4 Plugin Name: AI WP Writer 5 5 Description: Плагин для генерации статей с картинками в wordpress через модели GPT-4 и сгенерированными изображениями лучших нейросетей. -
ai-wp-writer/trunk/readme.txt
r3138784 r3147546 5 5 Tested up to: 6.6.1 6 6 Requires PHP: 5.6.0 7 Stable tag: 3.8. 2.37 Stable tag: 3.8.3 8 8 License: GPLv3 9 9 License URI: https://www.gnu.org/licenses/gpl-3.0.html -
ai-wp-writer/trunk/tpl/options.php
r3138784 r3147546 32 32 <div class="aiassist-tab" data-tab="rewrite">Рерайт</div> 33 33 <div class="aiassist-tab" data-tab="guide">Генерация в редакторе</div> 34 <div class="aiassist-tab" data-tab="referrals">Партнерская программа</div> 34 35 </div> 36 37 <form id="aiassist-get-bonus" class="aiassist-tab-data" data-tab="referrals"> 38 39 <div class="aiassist-white-bg"> 40 Привлекайте в плагин новых пользователей и зарабатывайте на этом!<br /> 41 Новые пользователи которые введут реферальный код, получат скидку 10% при первом депозите, <br /> 42 а вам будет начисляться выплата 10% с первого и последующих депозитов вебмастера. <br /> 43 Чем больше привлечете активных пользователей, тем больше будет ваш заработок. <br /> 44 Выплата осуществляется по запросу, в течение суток, на кошелек USDT trc20. <br /> 45 При выплате удерживается комиссия сети в размере 1.4 usdt. <br /> 46 Участвуя в реферальной программе вы соглашаетесь с <a href="https://aiwpwriter.com/user-agreement/">правилами</a>. 47 </div> 48 <br /><br /> 49 50 <div class="aiassist-bonus-item"> 51 <b>Реферальный код:</b> <span id="aiassist-promocode"><?php echo esc_html( @$this->info->referral )?></span> 52 </div> 53 54 <div class="aiassist-bonus-item"> 55 <b>Ваш баланс:</b> <?php echo (float) @$this->info->bonus->amount ?> р. (<?php echo (float) @$this->info->bonus->amount_usdt ?>$) 56 </div> 57 58 <div class="aiassist-bonus-item"> 59 <b>Привлеченных рефералов:</b> <?php echo (int) @$this->info->bonus->count ?> 60 </div> 61 62 <div class="aiassist-bonus-item"> 63 <b>Способ для получения выплаты:</b> 64 <div> 65 <select name="method" required> 66 <option value="usdt">USDT trc-20</option> 67 </select> 68 </div> 69 </div> 70 71 <div class="aiassist-bonus-item"> 72 <b>Укажите номер кошелька для получения платежа</b> 73 <div> 74 <input name="wallet" required /> 75 </div> 76 </div> 77 78 <div class="aiassist-bonus-item"> 79 <b>Укажите Telegram или email для связи, мы свяжемся если возникнут дополнительные вопросы.</b> 80 <div> 81 <input name="info" required /> 82 </div> 83 </div> 84 85 86 <div class="aiassist-bonus-item"> 87 88 <?php if( isset( $this->info->bonus->payment_request ) ){ ?> 89 <div>Запрос на выплату принят: <?php echo date( 'd.m.Y H:i', $this->info->bonus->payment_request ) ?></div> 90 <?php } ?> 91 92 <?php if( (int) @$this->info->bonus->min_payment > (int) @$this->info->bonus->amount ){ ?> 93 <div>Минимальный порог выплаты: <?php echo (int) @$this->info->bonus->min_payment ?> р</div> 94 <?php } ?> 95 96 <button class="aiassist-button <?php echo isset( $this->info->bonus->payment_request ) || $this->info->bonus->min_payment > (int) @$this->info->bonus->amount ? 'disabled' :'' ?>">Запросить выплату</button> 97 </div> 98 99 </form> 35 100 36 101 <div class="aiassist-tab-data" data-tab="guide">
Note: See TracChangeset
for help on using the changeset viewer.