<?php /** * SeekQuarry/Yioop -- * Open Source Pure PHP Search Engine, Crawler, and Indexer * * Copyright (C) 2009 - 2023 Chris Pollett chris@pollett.org * * LICENSE: * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see <https://www.gnu.org/licenses/>. * * END LICENSE * * @author Chris Pollett * @license https://www.gnu.org/licenses/ GPL3 * @link https://www.seekquarry.com/ * @copyright 2009 - 2023 * @filesource */ namespace seekquarry\yioop\views\elements; use seekquarry\yioop as B; use seekquarry\yioop\configs as C; use seekquarry\yioop\library as L; use seekquarry\yioop\library\UrlParser; /** * Element responsible for displaying Ad credits purchase form and * recent transaction table */ class ManagecreditsElement extends Element { /** * Draws create advertisement form and existing campaigns * @param array $data containing field values that have already been * been filled in, data about existing campaigns and the anti-CSRF attack token */ public function render($data) { ?> <div class="current-activity"> <h2><?=tl('managecredits_element_balance', $data['BALANCE']) ?></h2> <?php $data['TABLE_TITLE'] = tl('managecredits_element_transactions'); $data['ACTIVITY'] = 'manageCredits'; if (empty($data['FORM_TYPE'])) { $data['FORM_TYPE'] = "credit-form"; } if (in_array($data['FORM_TYPE'], ['search'])) { $data['DISABLE_ADD_TOGGLE'] = true; } $data['VIEW'] = $this->view; $num_columns = 4; ?> <table class="admin-table"> <tr><td class="no-border" colspan="<?= $num_columns ?>"><?php $this->view->helper( "pagingtable")->render($data); ?> <div id='admin-form-row' class='admin-form-row'><?php if ($data['FORM_TYPE'] == "search") { $this->renderSearchForm($data); } else { $this->renderCreditsForm($data); }?> </div> </td> </tr> <tr> <th><?= tl('managecredits_element_type')?> </th> <th><?= tl('managecredits_element_amount')?> </th> <th><?= tl('managecredits_element_date')?> </th> <th><?= tl('managecredits_element_total')?> </th> </tr> <?php foreach ($data['TRANSACTIONS'] as $tr) { ?> <tr> <td><?=tl($tr['TYPE']) ?></td> <td><?=$tr['AMOUNT'] ?></td> <td><?=date("r", $tr['TIMESTAMP']) ?></td> <td><?=$tr['BALANCE'] ?></td> </tr> <?php } ?> </table> </div> <script> function switchTab(newtab, oldtab, oldtab2) { setDisplay(newtab, true); setDisplay(oldtab, false); setDisplay(oldtab2, false); ntab = elt(newtab + "item"); if (ntab) { ntab.className = 'active'; } otab = elt(oldtab + "item"); if (otab) { otab.className = ''; } otab2 = elt(oldtab2 + "item"); if (otab2) { otab2.className = ''; } function removeElementsAttributes(elt_attribute_map) { for (let elt_name in elt_attribute_map) { let elt_obj = elt(elt_name); if (elt_obj && elt_obj.hasAttribute( elt_attribute_map[elt_name])) { elt_obj.removeAttribute(elt_attribute_map[elt_name]); } } } let remove_attibute_name = []; if (newtab == 'purchasecreditstab') { elt('manage').innerHTML = '<?=tl('managecredits_element_purchase') ?>'; elt('credits-option').value = 'purchaseCredits'; elt('start-button-parent').style.display = 'none'; elt('manage-parent').style.display = 'block'; elt('purchase-card-number').setAttribute('<?= C\CreditConfig::getAttribute('card-number','name')?>', '<?= C\CreditConfig::getAttribute('card-number','value') ?>'); elt('purchase-cvc').setAttribute('<?= C\CreditConfig::getAttribute('cvc','name')?>', '<?= C\CreditConfig::getAttribute('cvc','value')?>'); elt('purchase-exp-month').setAttribute('<?= C\CreditConfig::getAttribute('exp-month','name')?>', '<?= C\CreditConfig::getAttribute('exp-month','value')?>'); elt('purchase-exp-year').setAttribute('<?= C\CreditConfig::getAttribute('exp-year','name')?>', '<?= C\CreditConfig::getAttribute('exp-year','value')?>'); remove_attibute_names = { 'redeem-card-number' : '<?= C\CreditConfig::getAttribute('card-number','name') ?>', 'redeem-cvc' : '<?= C\CreditConfig::getAttribute('cvc','name') ?>', 'redeem-exp-month' : '<?= C\CreditConfig::getAttribute('exp-month','name')?>', 'redeem-exp-year' : '<?= C\CreditConfig::getAttribute('exp-year','name')?>' }; removeElementsAttributes(remove_attibute_names); } else if (newtab == 'redeemcreditstab') { elt('manage').innerHTML = '<?=tl('managecredits_element_redeem') ?>'; elt('credits-option').value = 'redeemCredits'; elt('start-button-parent').style.display = 'none'; elt('manage-parent').style.display = '<?= $data['REDEEM_ENABLED'] && $data['BALANCE'] >= C\CreditConfig::MIN_REDEEMABLE_CREDITS ? 'block' : 'none' ?>'; elt('redeem-card-number').setAttribute('<?= C\CreditConfig::getAttribute('card-number','name')?>', '<?= C\CreditConfig::getAttribute('card-number','value') ?>'); elt('redeem-cvc').setAttribute('<?= C\CreditConfig::getAttribute('cvc','value')?>', '<?=C\CreditConfig::getAttribute('cvc','value')?>'); elt('redeem-exp-month').setAttribute('<?= C\CreditConfig::getAttribute('exp-month','name')?>', '<?= C\CreditConfig::getAttribute('exp-month','value')?>'); elt('redeem-exp-year').setAttribute('<?= C\CreditConfig::getAttribute('exp-year','name')?>', '<?=C\CreditConfig::getAttribute('exp-year','value')?>'); remove_attibute_names = { 'purchase-card-number' : '<?= C\CreditConfig::getAttribute('card-number','name')?>', 'purchase-cvc' : '<?= C\CreditConfig::getAttribute('cvc','name')?>', 'purchase-exp-month' : '<?= C\CreditConfig::getAttribute('exp-month','name')?>', 'purchase-exp-year' : '<?= C\CreditConfig::getAttribute('exp-year','name')?>' }; removeElementsAttributes(remove_attibute_names); } else { elt('start-button').innerHTML = '<?=tl('managecredits_element_start') ?>'; elt('credits-option').value = 'manageCreditsAccount'; elt('start-button-parent').style.display = '<?= $data['CREDITS_SERVICE_ACC_REQS'] == true ? 'block' : 'none' ?>'; elt('manage-parent').style.display = 'none'; } } if (typeof yioop_post_scripts !== 'object') { yioop_post_scripts = {}; } yioop_post_scripts['page-load'] = function() { switchTab('purchasecreditstab', 'redeemcreditstab', 'managedetailstab'); } </script> <?php } /** * Draws the form used to create or edit a keyword * advertisement * @param array $data containing field values that have already been * been filled in and the anti-CSRF attack token */ public function renderCreditsForm($data) { ?> <form id="credit-form" method="post" enctype="multipart/form-data"> <ul class='tab-menu-list'> <li><script> document.write('<a href="javascript:switchTab(' + "'purchasecreditstab', 'redeemcreditstab', 'managedetailstab'" + ');"' + "id='purchasecreditstabitem'>" + '<?= tl('managecredits_element_purchase_credits')?></a>'); </script> <noscript> <a href="#purchasecreditstab" id='purchasecreditstabitem'><?= tl('managecredits_element_purchase_credits')?></a> </noscript> </li> <li><script> document.write('<a href="javascript:switchTab(' + "'redeemcreditstab', 'purchasecreditstab', 'managedetailstab'" + ');" ' +"id='redeemcreditstabitem'>" + '<?= tl('managecredits_element_redeem_credits')?></a>'); </script> <noscript> <a href="#redeemcreditstab" id='redeemcreditstab'><?= tl('managecredits_element_redeem_credits')?></a> </noscript> </li> <li><script> document.write('<a href="javascript:switchTab(' + "'managedetailstab', 'purchasecreditstab', 'redeemcreditstab'" + ');" ' +"id='managedetailstabitem'>" + '<?= tl('managecredits_element_manage_details')?></a>'); </script> <noscript> <a href="#managedetailstab" id='managedetailstab' ><?= tl('managecredits_element_manage_details')?></a> </noscript> </li> </ul> <div class='tab-menu-content'> <input type="hidden" name="c" value="admin" > <input type="hidden" name="<?=C\CSRF_TOKEN ?>" value="<?= $data[C\CSRF_TOKEN] ?>" > <input type="hidden" name="a" value="manageCredits" > <input type="hidden" id="credits-option" name="arg" value=""> <input type="hidden" id="card-token" name="CARD_TOKEN" value="" > <?php $this->renderPurchaseCreditsTab($data) ?> <noscript> <div class="center slight-pad"> <button class="button-box" type="submit"><?= tl('managecredits_element_purchase')?></button> </div> </noscript> <?php $this->renderRedeemCreditsTab($data) ?> <noscript> <div class="center slight-pad"> <button class="button-box" type="submit"><?= tl('managecredits_element_redeem')?></button> </div> </noscript> <?php $this->renderManageDetailsTab($data) ?> <noscript> <div class="center slight-pad"> <button class="button-box" type="submit"><?= tl('managecredits_element_start')?></button> </div> </noscript> <div id='manage-parent' class="center slight-pad"> <button class="button-box" id="manage" type="submit"> </button> </div> <div id='start-button-parent' class="center slight-pad"> <button class="button-box" id="start-button" type="submit"> </button> </div> </form> <?php if (C\CreditConfig::isActive()) { $ad_script_found = false; for ($i = C\DATABASE_VERSION; $i >= C\MIN_AD_VERSION;$i--) { $get_submit_purchase_script = "FN" . md5( UrlParser::getBaseDomain(C\NAME_SERVER) . $i . "getSubmitPurchaseScript"); if (method_exists( C\NS_CONFIGS . "CreditConfig", $get_submit_purchase_script)) { $ad_script_found = true; break; } } if ($ad_script_found) { $data['SCRIPT'] .= e(C\CreditConfig::$get_submit_purchase_script()); } else {?> <br><span class='red'><?= tl('managecredits_element_script_failure') ; ?></span><?php } } } /** * Draws the form fields required to purchase credits * @param array $data containing field values that have already been * been filled in and the anti-CSRF attack token */ public function renderPurchaseCreditsTab($data) { ?> <div id="purchasecreditstab"> <h2><?= tl('managecredits_element_purchase_credits') ?> <?= $this->view->helper("helpbutton")->render( "Purchase Credits", $data[C\CSRF_TOKEN]) ?></h2> <table class='name-table'> <tr><th class="table-label"><label for="num-credits"><?= tl('managecredit_element_num_credits') ?>: </label></th> <td> <?php $this->view->helper('options')->render('num-credits', 'NUM_DOLLARS', $data["AMOUNTS"], 0); ?> </td> </tr> <tr><th class="table-label"><label for="purchase-card-number"><?= tl('managecredit_element_card_number') ?>: </label></th> <td> <input class="narrow-field" id="purchase-card-number" type="text" size="20" <?= C\CreditConfig::getAttribute('card-number','name') ?>="<?= C\CreditConfig::getAttribute('card-number','value') ?>" > </td></tr> <tr><th class="table-label"><label for="purchase-cvc"><?= tl('managecredit_element_cvc') ?>: </label></th> <td> <input class="narrow-field" id="purchase-cvc" type="text" size="4" <?= C\CreditConfig::getAttribute('cvc','name')?>="<?= C\CreditConfig::getAttribute('cvc','value') ?>" > </td></tr> <tr><th class="table-label"><label for="purchase-exp-month"><?= tl('managecredit_element_expiration') ?>: </label></th> <td> <?php $this->view->helper('options')->render('purchase-exp-month', '', $data['MONTHS'], 0, false, [ C\CreditConfig::getAttribute('exp-month','name') => C\CreditConfig::getAttribute('exp-month','value')]); ?> / <?php $this->view->helper('options')->render('purchase-exp-year', '', $data['YEARS'], 0, false, [ C\CreditConfig::getAttribute('exp-year','name') => C\CreditConfig::getAttribute('exp-year','value')]); ?> </td></tr> <tr> <td></td> <td><div class="narrow-field green tiny-font"><?= tl('managecredits_element_charge_warning') ?> <a target="_blank" rel="noopener" href="<?=B\wikiUrl( 'ad_program_terms') ?>"><?= tl('managecredits_element_program_terms') ?></a>.</div></td> </tr> </table> </div> <?php } /** * Draws the form fields required to redeem credits * * @param array $data containing field values that have already been * been filled in and the anti-CSRF attack token */ public function renderRedeemCreditsTab($data) { ?> <div id="redeemcreditstab"> <h2><?= tl('managecredits_element_redeem_credits') ?> <?= $this->view->helper("helpbutton")->render( "Redeem Credits", $data[C\CSRF_TOKEN]) ?></h2><?php if (!isset($data['USER']['AD_CREDITS_SERVICE_ACCOUNT'])) { ?> <span class='red'><?= tl('managecredits_element_account_setup') ?></span><?php } else if (!$data['REDEEM_ENABLED']) { ?> <span class='red'><?= tl('managecredits_element_account_incomplete') ?></span><?php } else if ($data['BALANCE'] < 500) { ?> <span class='red'><?= tl('managecredits_element_insufficient_balance') ?></span><?php } else { ?> <input type="hidden" value="usd" <?= C\CreditConfig::getAttribute('currency','name') ?> ="<?=C\CreditConfig::getAttribute('currency','value') ?>"> <table class='name-table'> <tr> <th class='table-label'> <label for="credits-amount"><?= tl('managecredit_element_num_credits')?>:</label></th> <td><?php $this->view->helper('options')->render('num-credits', 'NUM_CREDITS', $data['USD_AMOUNT'], 0); ?> </td> </tr> <tr><th class="table-label"><label for="redeem-card-number"><?= tl('managecredit_element_debit_card_number') ?>: </label></th> <td> <input class="narrow-field" id="redeem-card-number" type="text" size="20" <?= C\CreditConfig::getAttribute('redeem-card-number','name') ?>="<?= C\CreditConfig::getAttribute('card-number','value') ?>" > </td></tr> <tr><th class="table-label"><label for="redeem-cvc"><?= tl('managecredit_element_cvc') ?>:</label></th> <td> <input class="narrow-field" id="redeem-cvc" type="text" size="4" <?= C\CreditConfig::getAttribute('redeem-cvc','name')?>="<?= C\CreditConfig::getAttribute('cvc','value') ?>" > </td></tr> <tr><th class="table-label"><label for="redeem-exp-month"><?= tl('managecredit_element_expiration') ?>:</label></th> <td> <?php $this->view->helper('options')->render('redeem-exp-month', '', $data['MONTHS'], 0, false, [ C\CreditConfig::getAttribute('exp-month','name') => C\CreditConfig::getAttribute('exp-month','value')]); ?> / <?php $this->view->helper('options')->render('redeem-exp-year', '', $data['YEARS'], 0, false, [ C\CreditConfig::getAttribute('exp-year','name') => C\CreditConfig::getAttribute('exp-year','value')]); ?> </td></tr> <tr> <td></td> <td><div class="narrow-field green tiny-font"><?= tl('managecredits_element_redeem_warning') ?> <a target="_blank" rel="noopener" href="<?=B\wikiUrl( 'ad_program_terms') ?>"><?= tl('managecredits_element_program_terms') ?></a>.</div></td> </tr> </table><?php } ?> </div><?php } /** * Draws the form fields showing the payment agency service account * requirements status * * @param array $data containing field values that have already been * been filled in and the anti-CSRF attack token */ public function renderManageDetailsTab($data) { ?> <div id="managedetailstab"> <h2><?= tl('managecredits_element_manage_details') ?> <?= $this->view->helper("helpbutton")->render( "Manage Details", $data[C\CSRF_TOKEN]) ?></h2><?php if (!isset($data['USER']['AD_CREDITS_SERVICE_ACCOUNT'])) { ?> <div class="red"><?= tl('managecredits_element_credit_service_account')?></div><?php } else if (!$data['CREDITS_SERVICE_ACC_REQS']) { ?> <div class="green"><?= tl('managecredits_element_details_complete')?></div><?php } else { ?> <div class="red"><?= tl('managecredits_element_details_due')?></div><?php } ?> </div><?php } /** * Draws the search for credit transactions forms * * @param array $data consists of values of locale fields set * so far as well as values of the drops downs on the form */ public function renderSearchForm($data) { $controller = "admin"; $activity = "manageCredits"; $view = $this->view; $title = tl('managecredits_element_search'); $fields = [ tl('managecredits_element_type') => ["type", $data['EQUAL_COMPARISON_TYPES']], tl('managecredits_element_amount') => ["amount", $data['BETWEEN_COMPARISON_TYPES']], tl('managecredits_element_date') => ["timestamp", $data['BETWEEN_COMPARISON_TYPES']] ]; $dropdowns = [ 'amount' => "range", 'type' => ['advertisement_init_ledger' => tl('advertisement_init_ledger'), 'advertisement_buy_credits' => tl('advertisement_buy_credits'), 'advertisement_buy_ad' => tl('advertisement_buy_ad'), 'social_component_join_group_fee' => tl('social_component_join_group_fee')], 'timestamp' => "date"]; $view->helper("searchform")->render($data, $controller, $activity, $view, $title, $fields, $dropdowns); } }