Вход Регистрация
Файл: library/XenForo/Model/ThreadRedirect.php
Строк: 130
<?php

/**
 * Model for thread redirect behaviors.
 *
 * @package XenForo_Thread
 */
class XenForo_Model_ThreadRedirect extends XenForo_Model
{
    
/**
     * Gets thread redirect information by the thread ID.
     *
     * @param integer $threadId
     *
     * @return array|false
     */
    
public function getThreadRedirectById($threadId)
    {
        return 
$this->_getDb()->fetchRow('
            SELECT *
            FROM xf_thread_redirect
            WHERE thread_id = ?
        '
$threadId);
    }

    
/**
     * Gets thread redirects that have been expired.
     *
     * @param integer $expiredDate Last expiration date
     *
     * @return array [thread id] => info
     */
    
public function getExpiredThreadRedirects($expiredDate)
    {
        return 
$this->fetchAllKeyed('
            SELECT *
            FROM xf_thread_redirect
            WHERE expiry_date > 0 AND expiry_date < ?
        '
'thread_id'$expiredDate);
    }

    
/**
     * Gets all thread redirects that share a particular key (or key pattern). Usually, this will
     * be no more than one, but that is not guaranteed.
     *
     * @param string $redirectKey
     * @param boolean $likeMatch If true, finds keys that match a LIKE pattern (% for wildcard, _ for single character)
     *
     * @return array [thread id] => info
     */
    
public function getThreadRedirectsByKey($redirectKey$likeMatch false)
    {
        if (
$likeMatch)
        {
            return 
$this->fetchAllKeyed('
                SELECT *
                FROM xf_thread_redirect
                WHERE redirect_key LIKE ' 
$this->_getDb()->quote($redirectKey) . '
            '
'thread_id');
        }
        else
        {
            return 
$this->fetchAllKeyed('
                SELECT *
                FROM xf_thread_redirect
                WHERE redirect_key = ?
            '
'thread_id'$redirectKey);
        }
    }

    
/**
     * Creates a thread that redirects to the target URL.
     *
     * @param string $targetUrl Target URL. May be relative or absolute.
     * @param array $newThread Information about a thread. State must be visible or not specified
     * @param string $redirectKey A unique key for relating this redirect to something else.
     *         For example, when redirecting to another thread, this is used to relate the redirect record
     *         to the thread it points to. If that thread is moved, we may need to remove the redirect.
     * @param integer $expiryDate Timestamp for expiry. 0 means never expires
     *
     * @return false|integer If successful, the ID of the redirect's thread
     */
    
public function createRedirectThread($targetUrl, array $newThread$redirectKey ''$expiryDate 0)
    {
        unset(
$newThread['thread_id']);

        if (empty(
$newThread['discussion_state']))
        {
            
$newThread['discussion_state'] = 'visible';
        }
        else if (
$newThread['discussion_state'] != 'visible')
        {
            return 
false;
        }

        
$newThread['discussion_type'] = 'redirect';
        
$newThread['first_post_id'] = 0// remove any potential preview

        
XenForo_Db::beginTransaction();

        
$threadDw XenForo_DataWriter::create('XenForo_DataWriter_Discussion_Thread'XenForo_DataWriter::ERROR_SILENT);
        
$threadDw->setOption(XenForo_DataWriter_Discussion::OPTION_REQUIRE_INSERT_FIRST_MESSAGEfalse);
        
$threadDw->bulkSet($newThread, array('ignoreInvalidFields' => true));
        if (!
$threadDw->save())
        {
            
XenForo_Db::rollback();
            return 
false;
        }

        
$newThreadId $threadDw->get('thread_id');

        
$this->insertThreadRedirect($newThreadId$targetUrl$redirectKey$expiryDate);

        
XenForo_Db::commit();

        return 
$newThreadId;
    }

    
/**
     * Inserts a raw thread redirect record.
     *
     * @param integer $threadId ID of redirect thread
     * @param string $targetUrl Target URL. May be relative or absolute.
     * @param string $redirectKey A unique key for relating this redirect to something else.
     *         For example, when redirecting to another thread, this is used to relate the redirect record
     *         to the thread it points to. If that thread is moved, we may need to remove the redirect.
     * @param integer $expiryDate Timestamp for expiry. 0 means never expires
     */
    
public function insertThreadRedirect($threadId$targetUrl$redirectKey ''$expiryDate 0)
    {
        
$this->_getDb()->insert('xf_thread_redirect', array(
            
'thread_id' => $threadId,
            
'target_url' => $targetUrl,
            
'redirect_key' => $redirectKey,
            
'expiry_date' => ($expiryDate 4294967295 $expiryDate)
        ));
    }

    
/**
     * Deletes the specified thread redirects.
     *
     * @param array $threadIds
     */
    
public function deleteThreadRedirects(array $threadIds)
    {
        if (!
$threadIds)
        {
            return;
        }

        
$db $this->_getDb();

        
XenForo_Db::beginTransaction($db);

        
$db->delete('xf_thread_redirect''thread_id IN (' $db->quote($threadIds) . ')');

        foreach (
$threadIds AS $threadId)
        {
            
$dw XenForo_DataWriter::create('XenForo_DataWriter_Discussion_Thread'XenForo_DataWriter::ERROR_SILENT);
            
$dw->setExistingData($threadId);
            
$dw->delete();
        }

        
XenForo_Db::commit($db);
    }

    
/**
     * Updates the specified thread redirect.
     *
     * @param integer $threadId
     * @param array $update Fields to update
     */
    
public function updateThreadRedirect($threadId, array $update)
    {
        
$db $this->_getDb();
        
$db->update('xf_thread_redirect'$update'thread_id = ' $db->quote($threadId));
    }
}
Онлайн: 3
Реклама