/library/XenForo/Model/LinkForum.php
PHP | 74 lines | 41 code | 8 blank | 25 comment | 1 complexity | d2622c3b818666d9030058652c030ced MD5 | raw file
Possible License(s): LGPL-2.1, GPL-2.0, BSD-3-Clause
- <?php
- class XenForo_Model_LinkForum extends XenForo_Model
- {
- /**
- * Fetches the combined node-link record for the specified node id
- *
- * @param integer $id Node ID
- *
- * @return array
- */
- public function getLinkForumById($id, array $fetchOptions = array())
- {
- $joinOptions = $this->prepareLinkForumJoinOptions($fetchOptions);
- return $this->_getDb()->fetchRow('
- SELECT node.*, link_forum.*
- ' . $joinOptions['selectFields'] . '
- FROM xf_link_forum AS link_forum
- INNER JOIN xf_node AS node ON (node.node_id = link_forum.node_id)
- ' . $joinOptions['joinTables'] . '
- WHERE node.node_id = ?
- ', $id);
- }
- /**
- * Checks the 'join' key of the incoming array for the presence of the FETCH_x bitfields in this class
- * and returns SQL snippets to join the specified tables if required
- *
- * @param array $fetchOptions Array containing a 'join' integer key build from this class's FETCH_x bitfields and other keys
- *
- * @return array Containing 'selectFields' and 'joinTables' keys. Example: selectFields = ', user.*, foo.title'; joinTables = ' INNER JOIN foo ON (foo.id = other.id) '
- */
- public function prepareLinkForumJoinOptions(array $fetchOptions)
- {
- $selectFields = '';
- $joinTables = '';
- $db = $this->_getDb();
- if (!empty($fetchOptions['permissionCombinationId']))
- {
- $selectFields .= ',
- permission.cache_value AS node_permission_cache';
- $joinTables .= '
- LEFT JOIN xf_permission_cache_content AS permission
- ON (permission.permission_combination_id = ' . $db->quote($fetchOptions['permissionCombinationId']) . '
- AND permission.content_type = \'node\'
- AND permission.content_id = link_forum.node_id)';
- }
- return array(
- 'selectFields' => $selectFields,
- 'joinTables' => $joinTables
- );
- }
- /**
- * Determines if the specified link forum can be viewed with the given permissions.
- *
- * @param array $linkForum Info about the link forum
- * @param string $errorPhraseKey Returned phrase key for a specific error
- * @param array|null $nodePermissions List of permissions for this page; if not provided, use visitor's permissions
- * @param array|null $viewingUser
- *
- * @return boolean
- */
- public function canViewLinkForum(array $linkForum, &$errorPhraseKey = '', array $nodePermissions = null, array $viewingUser = null)
- {
- $this->standardizeViewingUserReferenceForNode($linkForum['node_id'], $viewingUser, $nodePermissions);
- return XenForo_Permission::hasContentPermission($nodePermissions, 'view');
- }
- }