Seditio Source
Root |
./othercms/xenForo 2.2.8/src/XF/Import/DataHelper/BookmarkLabel.php
<?php

namespace XF\Import\DataHelper;

class
BookmarkLabel extends AbstractHelper
{
    public function
importLabel($labelText, $bookmarkId, $userId, array $labelUseExtra = [], array $labelExtra = [])
    {
       
$labelId = $this->createLabel($labelText, $userId, $labelExtra);
        if (
$labelId)
        {
            return
$this->associateLabel($labelId, $bookmarkId, $labelUseExtra);
        }
        else
        {
            return
false;
        }
    }

   
/**
     * @param string $labelText
     * @param array  $extra
     *
     * @return null|int
     */
   
public function createLabel($labelText, $userId, array $extra = [])
    {
       
$extra = array_replace([
           
'label_url' => null
       
], $extra);

       
$label = $this->em()->create('XF:BookmarkLabel');
       
$label->label = $this->dataManager->convertToUtf8($labelText);
        if (
$extra['label_url'])
        {
           
$label->label_url = $extra['label_url'];
        }

       
$label->user_id = $userId;

       
$label->preSave();

        if (
$label->hasErrors())
        {
           
$label = $this->em()->getFinder('XF:BookmarkLabel')
                ->
where('label', $labelText)
                ->
where('user_id', $userId)
                ->
fetchOne();
            return
$label ? $label->label_id : false;
        }

       
$label->save();

        return
$label->label_id;
    }

    public function
associateLabel($labelId, $bookmarkId, array $extra = [])
    {
       
$extra = array_replace([
           
'use_date' => \XF::$time
       
], $extra);

       
$rows = $this->db()->insert('xf_bookmark_label_use', [
           
'bookmark_id' => $bookmarkId,
           
'label_id' => $labelId,
           
'use_date' => $extra['use_date']
        ],
false, false, 'IGNORE');

        if (!
$rows)
        {
            return
false;
        }

       
$this->db()->query("
            UPDATE xf_bookmark_label
            SET use_count = use_count + 1,
                last_use_date = ?
            WHERE label_id = ?
        "
, [$extra['use_date'], $labelId]);

       
/** @var \XF\Repository\Bookmark $repo */
       
$repo = $this->em()->getRepository('XF:Bookmark');
       
$repo->rebuildBookmarkLabelCache($bookmarkId);

        return
true;
    }
}