<?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 Pushkar Umaranikar * @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; /** * Element responsible for displaying advertisements information * that someone can create, view, and modify for their own * SeekQuarry/Yioop account. * * @author Pushkar Umaranikar */ class ManageadvertisementsElement extends Element { /** * Draws create advertisement form and existing campaigns * @param array $data */ public function render($data) { ?> <div class="current-activity"> <?php $data['TABLE_TITLE'] = tl('manageadvertisements_element_list'); $data['ACTIVITY'] = 'manageAdvertisements'; $data['VIEW'] = $this->view; $num_columns = $_SERVER["MOBILE"] ? 4 : 8; if (!empty($data['HAS_ADMIN_ROLE'])) { $num_columns++; } $admin_url = htmlentities(B\controllerUrl('admin', true)) . C\CSRF_TOKEN . "=" . $data[C\CSRF_TOKEN]; $context = ""; if (!empty($data['context']) && $data['context'] == 'search'|| $data['FORM_TYPE'] == 'search') { $context = 'context=search&'; } $base_url = $admin_url . "&$context" . "a=manageAdvertisements"; $user_url = $admin_url . "&a=manageUsers&arg=edituser". "&user_name="; if ($data['FORM_TYPE'] == 'editadvertisement') { $this->view->helper("close")->render($base_url); $this->renderAdvertisementForm($data); return; } if (in_array($data['FORM_TYPE'], ['search'])) { $data['DISABLE_ADD_TOGGLE'] = true; } ?> <table class="admin-table"> <tr><td class="no-border" colspan="<?= $num_columns ?>"><?php $this->view->helper( "pagingtable")->render($data); if ($data['FORM_TYPE'] != "editadvertisement") { ?> <div id='admin-form-row' class='admin-form-row'><?php if ($data['FORM_TYPE'] == "search") { $this->renderSearchForm($data); } else { $this->renderAdvertisementForm($data); }?> </div><?php } ?></td> </tr> <tr> <th><?= tl('manageadvertisements_element_adname')?> </th> <?php if (!$_SERVER["MOBILE"]) { if (!empty($data['HAS_ADMIN_ROLE'])) { ?> <th><?=tl('manageadvertisements_element_username') ?></th><?php } ?> <th><?=tl('manageadvertisements_element_keywords') ?></th> <th><?=tl('manageadvertisements_element_budget')?></th> <th><?=tl('manageadvertisements_element_dates')?></th> <th><?=tl('manageadvertisements_element_viewclicks') ?></th><?php } ?> <th><?=tl('manageadvertisements_element_status') ?></th> <th colspan='2'><?= tl('manageadvertisements_element_actions')?></th> </tr> <?php if (isset($data['START_ROW'])) { $base_url .= "&start_row=" . $data['START_ROW'] . "&end_row=" . $data['END_ROW'] . "&num_show=" . $data['NUM_SHOW']; } $status_url = $base_url . "&arg=changestatus&"; $edit_url = $base_url . "&arg=editadvertisement&"; $mobile_columns = ['NAME', 'STATUS']; $skip_columns = ["DESTINATION"]; $stretch = ($_SERVER["MOBILE"]) ? 1 : 2; $icon_helper = $this->view->helper('iconlink'); foreach ($data['ADVERTISEMENTS'] as $ad) { $is_active = ($ad['STATUS'] == C\ADVERTISEMENT_ACTIVE_STATUS && $ad['USER_ID']==$_SESSION['USER_ID']) ? true : false; $is_active_admin = ($ad['STATUS'] == C\ADVERTISEMENT_ACTIVE_STATUS && $data['HAS_ADMIN_ROLE']) ? true : false; $time = strtotime(date(C\AD_DATE_FORMAT, time())); $time_okay = $time <= strtotime($ad['END_DATE']); $ad_trans = [ C\ADVERTISEMENT_ACTIVE_STATUS => tl('manageadvertisements_element_active'), C\ADVERTISEMENT_DEACTIVATED_STATUS => tl('manageadvertisements_element_deactivated'), C\ADVERTISEMENT_SUSPENDED_STATUS => tl('manageadvertisements_element_suspended'), C\ADVERTISEMENT_COMPLETED_STATUS => tl('manageadvertisements_element_completed'), ]; $ad['STATUS'] = ($ad['STATUS'] == C\ADVERTISEMENT_ACTIVE_STATUS && !$time_okay) ? C\ADVERTISEMENT_COMPLETED_STATUS : $ad['STATUS']; ?> <tr> <td><a href='<?=$ad['DESTINATION'] ?>'><?= $ad['NAME'] ?></a></td><?php if (!$_SERVER["MOBILE"]) { if ($data['HAS_ADMIN_ROLE']) { ?> <td><a href="<?= $user_url . $ad['USER_NAME']?>"><?= $ad['USER_NAME'] ?></a></td><?php } ?> <td><?=$ad['KEYWORDS'] ?></td> <td><?=$ad['BUDGET'] ?></td> <td><?=$ad['START_DATE'] ?> / <?= $ad['END_DATE']?></td> <td><?=$ad['IMPRESSIONS'] ?> / <?= $ad['CLICKS']?></td> <?php } ?> <td><?=$ad_trans[$ad['STATUS']] ?></td> <?php if (($is_active || $is_active_admin) && $time_okay) {?> <td><?=$icon_helper->renderLink($edit_url . 'id=' . $ad['ID'], "edit", "", false, "large-padding"); ?> </td><?php } else {?> <td><?= $icon_helper->renderLink("javascript:return false;", "edit", "", false, "large-padding disabled");?></td> <?php }?> <td><?php if ($time_okay) { if ($is_active) { ?> <a onclick='return confirm("<?= tl('manageadvertisements_element_deconfirm') ?>");' href="<?= $status_url . 'id=' . $ad['ID'].'&'. "status=" . C\ADVERTISEMENT_DEACTIVATED_STATUS ?>" ><?= tl('manageadvertisements_element_deactivate') ?></a><?php } else if ($is_active_admin) { ?> <a onclick='return confirm("<?= tl('manageadvertisements_element_deconfirm') ?>");' href="<?= $status_url . 'id=' . $ad['ID'].'&'. "status=" . C\ADVERTISEMENT_SUSPENDED_STATUS ?>" ><?= tl('manageadvertisements_element_suspend') ?></a><?php } else if ($data['HAS_ADMIN_ROLE'] || $ad['STATUS'] != C\ADVERTISEMENT_SUSPENDED_STATUS) { ?> <a onclick='return confirm("<?= tl('manageadvertisements_element_reconfirm') ?>");' href="<?=$status_url . 'id=' . $ad['ID'] . '&'. 'status=' . C\ADVERTISEMENT_ACTIVE_STATUS ?>"><?= tl('manageadvertisements_element_reactivate') ?></a><?php } else { ?> <span class='gray'><?= $ad_trans[$ad['STATUS']] ?></span><?php } } else { ?> <span class='gray'><?=$ad_trans[$ad['STATUS']] ?></span> <?php } ?> </td> </tr><?php } ?> </table> </div><?php } /** * Draws the form that let's a user create an ad * * @param array $data previous values for the form as wells as other * data to render the view */ public function renderAdvertisementForm($data) { $admin_url = htmlentities(B\controllerUrl('admin', true)) . C\CSRF_TOKEN . "=" .$data[C\CSRF_TOKEN]; $base_url = $admin_url . "&a=manageAdvertisements"; $user_url = $admin_url . "&a=manageUsers&arg=edituser". "&user_name="; $paging = ""; if (isset($data['START_ROW'])) { $paging = "&start_row=".$data['START_ROW']. "&end_row=".$data['END_ROW']. "&num_show=".$data['NUM_SHOW']; $base_url .= $paging; } $edit_advertisement = $data['FORM_TYPE'] == "editadvertisement"; $preview_script = (!$_SERVER["MOBILE"]) ? 'onkeyup="preview(this);"' : ""; $preview_script2 = (!$_SERVER["MOBILE"]) ? 'onkeyup="preview(this,'. "'ad-name'". ');"' : ""; if ($edit_advertisement) { e("<h2>".tl('manageadvertisements_element_ad_info')); e(" ".$this->view->helper("helpbutton")->render( "Manage Advertisements", $data[C\CSRF_TOKEN]). "</h2>"); } else { e("<h2>".tl('manageadvertisements_element_purchase_ad')); e(" ".$this->view->helper("helpbutton")->render( "Manage Advertisements", $data[C\CSRF_TOKEN]). "</h2>"); } ?> <form id="admin-form" method="post" > <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="manageAdvertisements" > <input type="hidden" name="arg" value="<?=$data['FORM_TYPE']?>" > <?php if (!empty($data['context']) && $data['context'] == 'search') { ?> <input type="hidden" name="context" value="search" > <?php } ?> <table class='name-table'> <?php if ($edit_advertisement && $data['HAS_ADMIN_ROLE']) { ?> <tr> <th class="table-label"> <label for="ad-name"><?= tl('manageadvertisements_element_ad_user') ?>: </label> </th> <td>[<a href="<?=$user_url . $data['AD_USER_NAME']?>"><?= $data['AD_USER_NAME'] ?></a>] </td> </tr> <?php } ?> <tr> <th class="table-label"> <label for="ad-name"><?= tl('manageadvertisements_element_displayname') ?>: </label> </th> <td> <input type="text" id="ad-name" name="NAME" maxlength="<?= C\ADVERTISEMENT_NAME_LEN ?>" onkeypress="updateCharCountdown('ad-name', 'ad-name-count')" onblur="toggleDisplay('ad-name-count', 'none')" onfocus="toggleDisplay('ad-name-count', 'inline')" value="<?= isset($data['NAME']) ? $data['NAME'] : ""?>" class="narrow-field" <?= $preview_script ?> <?php if (isset($data['AD_MIN_BID'])) { e(' readonly="readonly"'); } ?> ><span class="gray smaller-font" id="ad-name-count" ></span> </td> </tr> <tr><th class="table-label"><label for="ad-description"><?= tl('manageadvertisements_element_text') ?> </label>:</th> <td> <textarea id="ad-description" name="DESCRIPTION" class="short-text-area-three narrow-field" maxlength="<?= C\ADVERTISEMENT_TEXT_LEN ?>" onkeypress="updateCharCountdown('ad-description', 'ad-desc-count')" onblur="toggleDisplay('ad-desc-count', 'none')" onfocus="toggleDisplay('ad-desc-count', 'inline')" <?php e($preview_script); if (isset($data['AD_MIN_BID'])) { e(' readonly="readonly"'); } ?>><?=(empty($data['DESCRIPTION'])) ? "" : $data['DESCRIPTION'] ?></textarea> <span class="gray smaller-font" id="ad-desc-count" ></small> </td></tr> <tr> <th class="table-label"><label for="ad-destination"><?= tl('manageadvertisements_element_ad_url') ?></label>: </th> <td> <input type="text" id="ad-destination" name="DESTINATION" maxlength="<?= C\MAX_URL_LEN ?>" onkeypress="updateCharCountdown('ad-destination', 'ad-dest-count')" onblur="toggleDisplay('ad-dest-count', 'none')" onfocus="toggleDisplay('ad-dest-count', 'inline')" value="<?php if (isset($data['DESTINATION'])) { e($data['DESTINATION']); } ?>" class="narrow-field" <?php e($preview_script2); if (isset($data['AD_MIN_BID'])) { e(' readonly="readonly"'); } ?> > <span class="gray smaller-font" id="ad-dest-count" ></span> </td></tr> <tr><th class="table-label"><label for="ad-duration"><?= tl('manageeadvertisement_element_ad_duration') ?>: </label> </th> <td> <?php $attributes = []; if ($edit_advertisement || isset($data['AD_MIN_BID'])) { $attributes['disabled'] ="disabled"; ?> <input type="hidden" name="DURATION" value="<?= $data["DURATION"] ?>" > <?php } $this->view->helper('options')->render('ad-duration', 'DURATION', $data['DURATIONS'], $data['DURATION'], false, $attributes); ?></td></tr> <tr> <td></td><td> <span class="small green" style="position:relative; top:-7px;"><?= tl('manageeadvertisement_element_start_day') ?></span> </td></tr> <tr><th class="table-label"> <label for="ad-keywords"><?= tl('manageeadvertisement_element_keywords') ?>: </label></th> <td> <textarea class="short-text-area-two narrow-field" id="ad-keywords" name="KEYWORDS" placeholder="<?= tl('manageadvertisements_element_keyword_help')?>" <?php if ($edit_advertisement || isset($data['AD_MIN_BID'])) { e(' readonly="readonly"'); }?> ><?php if (isset($data['KEYWORDS'])) { e($data['KEYWORDS']); } ?></textarea> </td> </tr> <?php if (isset($data['AD_MIN_BID'])) { ?><tr><th class="table-label"><label for="ad-min-bid"><?= tl('manageadvertisements_element_keyword_bid_amount') ?>:</label></th><td> <input type="text" id='ad-min-bid' name="AD_MIN_BID" value="<?= isset($data['AD_MIN_BID']) ? $data['AD_MIN_BID']: "" ?>" class="narrow-field" disabled="disabled" ></td></tr> <tr><th class="table-label"><label for="expensive-word"><?= tl('manageadvertisements_element_expensive_word') ?> </label></th> <td> <input type="text" id="expensive-word" name="EXPENSIVE_WORD" value="<?=isset($data['EXPENSIVE_KEYWORD']) ? $data['EXPENSIVE_KEYWORD']: "" ?>" class="narrow-field" disabled="disabled" > </td></tr> <?php } if (!$edit_advertisement && !isset($data['AD_MIN_BID'])) { ?> <tr><td></td> <td> <div class="narrow-field center"> <input class="button-box" name="CALCULATE" value="<?= tl('manageadvertisements_element_calculate_bid') ?>" type="submit" ></div></td></tr> <?php } if ($edit_advertisement) { ?> <tr> <td></td> <td class="center"> <input class="button-box" name="save" value="<?= tl('manageadvertisements_element_update') ?>" <?php if ($data['FORM_TYPE'] == 'editadvertisement') { e("id='focus-button'"); }?> type="submit" > </td> </tr> <?php } if (isset($data['AD_MIN_BID']) && !$edit_advertisement) { ?> <tr><th class="table-label"><label for="ad-budget"><?= tl('manageadvertisements_element_budget') ?>: </label></th> <td> <input type="text" id="ad-budget" name="BUDGET" value="<?= isset($data['BUDGET']) ? $data['BUDGET']:"";?>" class="narrow-field" <?php if ($edit_advertisement) { e('disabled="disabled"'); } ?> > </td></tr> <tr> <td></td> <td><div class="narrow-field green small"><?= tl('manageadvertisements_element_buy_info', $data['BALANCE']) ?> <a href="<?=B\controllerUrl('admin', true) . C\CSRF_TOKEN . "=" . $data[C\CSRF_TOKEN]. "&a=manageCredits" ?>"><?= tl('manageadvertisements_element_buy_credits') ?></a>.</div></td> </tr> <tr> <td></td> <td> <input class="button-box" name="EDIT_AD" value="<?= tl('manageadvertisements_element_edit_ad') ?>" <?php if ($data['FORM_TYPE'] == 'editadvertisement') { e("id='focus-button'"); }?> type="submit" > <input class="button-box" id="purchase" name="PURCHASE" value="<?= tl('manageadvertisements_element_purchase') ?>" type="submit" > </td> </tr> <?php } ?> </table> <?php if ($_SERVER["MOBILE"]) { ?> <div class="clear"> </div> <?php } ?> </form> <?php if (!$_SERVER["MOBILE"]){ ?> <div class="ad-preview"> <p><b><?=tl('manageadvertisements_element_preview') ?>:</b></p> <p class='start-ad'><img alt="" src="<?= C\AD_LOGO ?>" > <a id="ad-name-preview" href="./" class="ad-preview-anchor" target="_blank" rel="noopener"> </a> <span id="ad-description-preview"></span> </p> </div> <?php } ?> <script> function preview(obj) { var preview_str = "-preview"; if (arguments.length > 1) { var preview_id = arguments[1].concat(preview_str); var prefix = 'http'; var protocol = (obj.value.substr(0, prefix.length) !="http") ? "http://" : ""; elt(preview_id).href = protocol + obj.value ; } else { var preview_id = obj.id.concat(preview_str); elt(preview_id).innerHTML = obj.value; } } </script> <?php } /** * Draws search advertisement form * @param array $data anti-CSRF token */ public function renderSearchForm($data) { $controller = "admin"; $activity = "manageAdvertisements"; $view = $this->view; $title = tl('manageadvertisements_element_search_advertisement'); $fields = [ tl('manageadvertisements_element_adname') => "name", tl('manageadvertisements_element_description') => "description", tl('manageadvertisements_element_destination_url') => "destination", tl('manageadvertisements_element_keywords') => "keywords", tl('manageadvertisements_element_budget') => ["budget", $data['BETWEEN_COMPARISON_TYPES']], tl('manageadvertisements_element_start_date') => ["start_date", $data['BETWEEN_COMPARISON_TYPES']], tl('manageadvertisements_element_end_date') => ["end_date", $data['BETWEEN_COMPARISON_TYPES']], ]; $dropdowns = ['budget' => "range", "start_date" => "date", "end_date" => "date", ]; $view->helper("searchform")->render($data, $controller, $activity, $view, $title, $fields, $dropdowns); } }