<?php
/**
 * @brief blogroll, a plugin for Dotclear 2
 *
 * @package Dotclear
 * @subpackage Plugins
 *
 * @copyright Olivier Meunier & Association Dotclear
 * @copyright GPL-2.0-only
 */
if (!defined('DC_CONTEXT_ADMIN')) {
    return;
}

$id = html::escapeHTML($_REQUEST['id']);

$rs = null;

try {
    $rs = $blogroll->getLink($id);  // @phpstan-ignore-line
} catch (Exception $e) {
    $core->error->add($e->getMessage());
}

if (!$core->error->flag() && $rs->isEmpty()) {
    $link_title = '';
    $link_href  = '';
    $link_desc  = '';
    $link_lang  = '';
    $link_xfn   = '';
    $core->error->add(__('No such link or title'));
} else {
    $link_title = $rs->link_title;
    $link_href  = $rs->link_href;
    $link_desc  = $rs->link_desc;
    $link_lang  = $rs->link_lang;
    $link_xfn   = $rs->link_xfn;
}

# Update a link
if (isset($rs) && !$rs->is_cat && !empty($_POST['edit_link'])) {
    $link_title = html::escapeHTML($_POST['link_title']);
    $link_href  = html::escapeHTML($_POST['link_href']);
    $link_desc  = html::escapeHTML($_POST['link_desc']);
    $link_lang  = html::escapeHTML($_POST['link_lang']);

    $link_xfn = '';

    if (!empty($_POST['identity'])) {
        $link_xfn .= $_POST['identity'];
    } else {
        if (!empty($_POST['friendship'])) {
            $link_xfn .= ' ' . $_POST['friendship'];
        }
        if (!empty($_POST['physical'])) {
            $link_xfn .= ' met';
        }
        if (!empty($_POST['professional'])) {
            $link_xfn .= ' ' . implode(' ', $_POST['professional']);
        }
        if (!empty($_POST['geographical'])) {
            $link_xfn .= ' ' . $_POST['geographical'];
        }
        if (!empty($_POST['family'])) {
            $link_xfn .= ' ' . $_POST['family'];
        }
        if (!empty($_POST['romantic'])) {
            $link_xfn .= ' ' . implode(' ', $_POST['romantic']);
        }
    }

    try {
        $blogroll->updateLink($id, $link_title, $link_href, $link_desc, $link_lang, trim((string) $link_xfn));   // @phpstan-ignore-line
        dcPage::addSuccessNotice(__('Link has been successfully updated'));
        http::redirect($p_url . '&edit=1&id=' . $id);
    } catch (Exception $e) {
        $core->error->add($e->getMessage());
    }
}

# Update a category
if (isset($rs) && $rs->is_cat && !empty($_POST['edit_cat'])) {
    $link_desc = html::escapeHTML($_POST['link_desc']);

    try {
        $blogroll->updateCategory($id, $link_desc); // @phpstan-ignore-line
        dcPage::addSuccessNotice(__('Category has been successfully updated'));
        http::redirect($p_url . '&edit=1&id=' . $id);
    } catch (Exception $e) {
        $core->error->add($e->getMessage());
    }
}

# Languages combo
$links      = $blogroll->getLangs(['order' => 'asc']);  // @phpstan-ignore-line
$lang_combo = dcAdminCombos::getLangsCombo($links, true);

?>
<html>
<head>
  <title>Blogroll</title>
</head>

<body>
<?php
echo dcPage::breadcrumb(
    [
        html::escapeHTML($core->blog->name) => '',
        __('Blogroll')                      => $p_url,
    ]
) .
dcPage::notices();
?>

<?php echo '<p><a class="back" href="' . $p_url . '">' . __('Return to blogroll') . '</a></p>'; ?>

<?php
if (isset($rs) && $rs->is_cat) {
    echo
    '<form action="' . $p_url . '" method="post">' .
    '<h3>' . __('Edit category') . '</h3>' .

    '<p><label for="link_desc" class="required classic"><abbr title="' . __('Required field') . '">*</abbr> ' . __('Title:') . '</label> ' .
    form::field('link_desc', 30, 255, [
        'default'    => html::escapeHTML($link_desc),
        'extra_html' => 'required placeholder="' . __('Title') . '" lang="' . $core->auth->getInfo('user_lang') . '" spellcheck="true"',
    ]) .

    form::hidden('edit', 1) .
    form::hidden('id', $id) .
    $core->formNonce() .
    '<input type="submit" name="edit_cat" value="' . __('Save') . '"/></p>' .
        '</form>';
}
if (isset($rs) && !$rs->is_cat) {
    echo
    '<form action="' . $core->adminurl->get('admin.plugin') . '" method="post" class="two-cols fieldset">' .

    '<div class="col30 first-col">' .
    '<h3>' . __('Edit link') . '</h3>' .

    '<p><label for="link_title" class="required"><abbr title="' . __('Required field') . '">*</abbr> ' . __('Title:') . '</label> ' .
    form::field('link_title', 30, 255, [
        'default'    => html::escapeHTML($link_title),
        'extra_html' => 'required placeholder="' . __('Title') . '" lang="' . $core->auth->getInfo('user_lang') . '" spellcheck="true"',
    ]) .
    '</p>' .

    '<p><label for="link_href" class="required"><abbr title="' . __('Required field') . '">*</abbr> ' . __('URL:') . '</label> ' .
    form::url('link_href', [
        'size'       => 30,
        'default'    => html::escapeHTML($link_href),
        'extra_html' => 'required placeholder="' . __('URL') . '"',
    ]) .
    '</p>' .

    '<p><label for="link_desc">' . __('Description:') . '</label> ' .
    form::field(
        'link_desc',
        30,
        255,
        [
            'default'    => html::escapeHTML($link_desc),
            'extra_html' => 'lang="' . $core->auth->getInfo('user_lang') . '" spellcheck="true"',
        ]
    ) . '</p>' .

    '<p><label for="link_lang">' . __('Language:') . '</label> ' .
    form::combo('link_lang', $lang_combo, $link_lang) .
    '</p>' .

    '</div>' .

    # XFN nightmare
    '<div class="col70 last-col">' .
    '<h3>' . __('XFN information') . '</h3>' .
    '<p class="clear form-note">' . __('More information on <a href="https://en.wikipedia.org/wiki/XHTML_Friends_Network">Wikipedia</a> website') . '</p>' .

    '<div class="table-outer">' .
    '<table class="noborder">' .

    '<tr class="line">' .
    '<th>' . __('_xfn_Me') . '</th>' .
    '<td><p>' . '<label class="classic">' .
    form::checkbox(['identity'], 'me', ($link_xfn == 'me')) . ' ' .
    __('_xfn_Another link for myself') . '</label></p></td>' .
    '</tr>' .

    '<tr class="line">' .
    '<th>' . __('_xfn_Friendship') . '</th>' .
    '<td><p>' .
    '<label class="classic">' . form::radio(
        ['friendship'],
        'contact',
        strpos($link_xfn, 'contact') !== false
    ) . __('_xfn_Contact') . '</label> ' .
    '<label class="classic">' . form::radio(
        ['friendship'],
        'acquaintance',
        strpos($link_xfn, 'acquaintance') !== false
    ) . __('_xfn_Acquaintance') . '</label> ' .
    '<label class="classic">' . form::radio(
        ['friendship'],
        'friend',
        strpos($link_xfn, 'friend') !== false
    ) . __('_xfn_Friend') . '</label> ' .
    '<label class="classic">' . form::radio(['friendship'], '') . __('None') . '</label>' .
    '</p></td>' .
    '</tr>' .

    '<tr class="line">' .
    '<th>' . __('_xfn_Physical') . '</th>' .
    '<td><p>' .
    '<label class="classic">' . form::checkbox(
        ['physical'],
        'met',
        strpos($link_xfn, 'met') !== false
    ) . __('_xfn_Met') . '</label>' .
    '</p></td>' .
    '</tr>' .

    '<tr class="line">' .
    '<th>' . __('_xfn_Professional') . '</th>' .
    '<td><p>' .
    '<label class="classic">' . form::checkbox(
        ['professional[]'],
        'co-worker',
        strpos($link_xfn, 'co-worker') !== false
    ) . __('_xfn_Co-worker') . '</label> ' .
    '<label class="classic">' . form::checkbox(
        ['professional[]'],
        'colleague',
        strpos($link_xfn, 'colleague') !== false
    ) . __('_xfn_Colleague') . '</label>' .
    '</p></td>' .
    '</tr>' .

    '<tr class="line">' .
    '<th>' . __('_xfn_Geographical') . '</th>' .
    '<td><p>' .
    '<label class="classic">' . form::radio(
        ['geographical'],
        'co-resident',
        strpos($link_xfn, 'co-resident') !== false
    ) . __('_xfn_Co-resident') . '</label> ' .
    '<label class="classic">' . form::radio(
        ['geographical'],
        'neighbor',
        strpos($link_xfn, 'neighbor') !== false
    ) . __('_xfn_Neighbor') . '</label> ' .
    '<label class="classic">' . form::radio(['geographical'], '') . __('None') . '</label>' .
    '</p></td>' .
    '</tr>' .

    '<tr class="line">' .
    '<th>' . __('_xfn_Family') . '</th>' .
    '<td><p>' .
    '<label class="classic">' . form::radio(
        ['family'],
        'child',
        strpos($link_xfn, 'child') !== false
    ) . __('_xfn_Child') . '</label> ' .
    '<label class="classic">' . form::radio(
        ['family'],
        'parent',
        strpos($link_xfn, 'parent') !== false
    ) . __('_xfn_Parent') . '</label> ' .
    '<label class="classic">' . form::radio(
        ['family'],
        'sibling',
        strpos($link_xfn, 'sibling') !== false
    ) . __('_xfn_Sibling') . '</label> ' .
    '<label class="classic">' . form::radio(
        ['family'],
        'spouse',
        strpos($link_xfn, 'spouse') !== false
    ) . __('_xfn_Spouse') . '</label> ' .
    '<label class="classic">' . form::radio(
        ['family'],
        'kin',
        strpos($link_xfn, 'kin') !== false
    ) . __('_xfn_Kin') . '</label> ' .
    '<label class="classic">' . form::radio(['family'], '') . __('None') . '</label>' .
    '</p></td>' .
    '</tr>' .

    '<tr class="line">' .
    '<th>' . __('_xfn_Romantic') . '</th>' .
    '<td><p>' .
    '<label class="classic">' . form::checkbox(
        ['romantic[]'],
        'muse',
        strpos($link_xfn, 'muse') !== false
    ) . __('_xfn_Muse') . '</label> ' .
    '<label class="classic">' . form::checkbox(
        ['romantic[]'],
        'crush',
        strpos($link_xfn, 'crush') !== false
    ) . __('_xfn_Crush') . '</label> ' .
    '<label class="classic">' . form::checkbox(
        ['romantic[]'],
        'date',
        strpos($link_xfn, 'date') !== false
    ) . __('_xfn_Date') . '</label> ' .
    '<label class="classic">' . form::checkbox(
        ['romantic[]'],
        'sweetheart',
        strpos($link_xfn, 'sweetheart') !== false
    ) . __('_xfn_Sweetheart') . '</label> ' .
    '</p></td>' .
    '</tr>' .
    '</table></div>' .

    '</div>' .
    '<p class="clear">' . form::hidden('p', 'blogroll') .
    form::hidden('edit', 1) .
    form::hidden('id', $id) .
    $core->formNonce() .
    '<input type="submit" name="edit_link" value="' . __('Save') . '"/></p>' .

        '</form>';
}
?>
</body>
</html>
