/ src / views / elements / RobotssettingsElement.php
<?php
/**
 * SeekQuarry/Yioop --
 * Open Source Pure PHP Search Engine, Crawler, and Indexer
 *
 * Copyright (C) 2009 - 2026  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 chris@pollett.org
 * @license https://www.gnu.org/licenses/ GPL3
 * @link https://www.seekquarry.com/
 * @copyright 2009 - 2026
 * @filesource
 */
namespace seekquarry\yioop\views\elements;

use seekquarry\yioop as B;
use seekquarry\yioop\configs as C;

/**
 * Draws the page used to edit one domain's robots.txt and humans.txt.
 * The top of the page has a close box that returns to Server Settings.
 * A single checkbox keeps all crawlers out; when it is ticked the rest
 * of the robots choices are hidden by page script and only the
 * humans.txt box remains. Otherwise the administrator picks a crawl
 * delay and ticks which kinds of pages crawlers may visit (with extra
 * wiki choices appearing only when wiki pages are allowed), and may add
 * extra robots directives by hand. Save stores the choices, Cancel
 * returns without saving, and Preview opens the robots.txt that would
 * be produced in a new tab.
 *
 * @author Chris Pollett
 */
class RobotssettingsElement extends Element
{
    /**
     * Draws the robots.txt / humans.txt edit form for one domain.
     *
     * @param array $data fields ROBOTS (the saved choices), HUMANS (the
     *      humans.txt text), and ROBOTS_DOMAIN (the domain being
     *      edited) prepared by SystemComponent::servers
     */
    public function render($data)
    {
        $admin_url = htmlentities(B\controllerUrl('admin', true));
        $close_url = $admin_url . "a=servers&" .
            C\p('CSRF_TOKEN') . "=" . $data[C\p('CSRF_TOKEN')];
        $robots = $data['ROBOTS'];
        $delays = [1, 3, 5, 10, 30, 60];
        ?>
        <div class="current-activity"><?php
        $this->view->helper("close")->render($close_url);
        ?>
        <h2><?= tl('robotssettings_element_edit_robots',
            $data['ROBOTS_DOMAIN']) ?></h2>
        <form id="robotsSettingsForm" method="post">
        <input type="hidden" name="c" value="admin" >
        <input type="hidden" name="<?= C\p('CSRF_TOKEN') ?>" value="<?=
            $data[C\p('CSRF_TOKEN')] ?>" >
        <input type="hidden" name="a" value="servers" >
        <input type="hidden" name="arg" value="robots" >
        <input type="hidden" name="domain" value="<?=
            $data['ROBOTS_DOMAIN'] ?>" >
        <div class="top-margin"><label for="disallow-all"><b><?=
            tl('robotssettings_element_disallow_all')
            ?></b></label><input type="checkbox" id="disallow-all"
            name="disallow_all" value="1" <?=
            !empty($robots['disallow_all']) ? 'checked="checked"' : ''
            ?> ></div>
        <div id="robots-inputs">
            <div class="top-margin"><label for="crawl-delay"><b><?=
                tl('robotssettings_element_crawl_delay')
                ?></b></label> <select id="crawl-delay"
                name="crawl_delay"><option value="0" <?=
                    (intval($robots['crawl_delay']) <= 0) ?
                    'selected="selected"' : '' ?>><?=
                    tl('robotssettings_element_crawl_delay_none')
                    ?></option><?php
                foreach ($delays as $delay) {
                    $selected = (intval($robots['crawl_delay']) == $delay)
                        ? 'selected="selected"' : '';
                    ?><option value="<?= $delay ?>" <?= $selected ?>><?=
                        $delay ?></option><?php
                }
                ?></select></div>
            <div class="top-margin"><label for="search-crawlable"><b><?=
                tl('robotssettings_element_search_crawlable')
                ?></b></label><input type="checkbox" id="search-crawlable"
                name="search" value="1" <?=
                !empty($robots['search']) ? 'checked="checked"' : ''
                ?> ></div>
            <div class="top-margin"><label for="feeds-crawlable"><b><?=
                tl('robotssettings_element_feeds_crawlable')
                ?></b></label><input type="checkbox" id="feeds-crawlable"
                name="feeds" value="1" <?=
                !empty($robots['feeds']) ? 'checked="checked"' : ''
                ?> ></div>
            <div class="top-margin"><label for="wiki-crawlable"><b><?=
                tl('robotssettings_element_wiki_crawlable')
                ?></b></label><input type="checkbox" id="wiki-crawlable"
                name="wiki" value="1" <?=
                !empty($robots['wiki']) ? 'checked="checked"' : ''
                ?> ></div>
            <div id="wiki-sub" class="indent">
                <div class="top-margin"><label
                    for="page-source-crawlable"><?=
                    tl('robotssettings_element_page_source_crawlable')
                    ?></label><input type="checkbox"
                    id="page-source-crawlable" name="page_source"
                    value="1" <?= !empty($robots['page_source']) ?
                    'checked="checked"' : '' ?> ></div>
                <div class="top-margin"><label
                    for="page-feed-crawlable"><?=
                    tl('robotssettings_element_page_feed_crawlable')
                    ?></label><input type="checkbox"
                    id="page-feed-crawlable" name="page_feed"
                    value="1" <?= !empty($robots['page_feed']) ?
                    'checked="checked"' : '' ?> ></div>
                <div class="top-margin"><label
                    for="page-list-crawlable"><?=
                    tl('robotssettings_element_page_list_crawlable')
                    ?></label><input type="checkbox"
                    id="page-list-crawlable" name="page_list"
                    value="1" <?= !empty($robots['page_list']) ?
                    'checked="checked"' : '' ?> ></div>
            </div>
            <div class="top-margin"><b><label for="robots-additional"><?=
                tl('robotssettings_element_additional')
                ?></label></b></div>
            <textarea id="robots-additional" class="short-text-area"
                name="additional"><?= $robots['additional'] ?? ''
                ?></textarea>
        </div>
        <div class="top-margin"><b><label for="humans-text"><?=
            tl('robotssettings_element_humans')
            ?></label></b></div>
        <textarea id="humans-text" class="short-text-area"
            name="humans"><?= $data['HUMANS'] ?? '' ?></textarea>
        <div class="top-margin">
            <button class="button-box" type="submit" name="save"
                value="1"><?= tl('robotssettings_element_save')
                ?></button>
            <button class="button-box" type="submit" name="cancel"
                value="1"><?= tl('robotssettings_element_cancel')
                ?></button>
            <button class="button-box" type="submit" name="preview"
                value="1" formtarget="_blank"><?=
                tl('robotssettings_element_preview') ?></button>
        </div>
        </form>
        </div>
        <?php
    }
}
X