2008-11-25 02:37:33 +00:00
< ? php
2014-02-07 07:23:07 +00:00
use Drupal\node\NodeInterface ;
2015-08-26 10:34:29 +00:00
use Drupal\Component\Utility\Html ;
2013-09-27 15:34:47 +00:00
use Drupal\Component\Utility\Xss ;
2014-09-17 14:39:29 +00:00
use Drupal\Core\Access\AccessResult ;
2012-06-15 16:43:34 +00:00
2008-11-25 02:37:33 +00:00
/**
* @ file
2014-07-11 12:04:53 +00:00
* Hooks specific to the Node module .
2010-02-10 10:34:50 +00:00
*/
2008-11-25 02:37:33 +00:00
/**
* @ addtogroup hooks
* @ {
*/
/**
* Inform the node access system what permissions the user has .
*
2009-10-24 11:49:52 +00:00
* This hook is for implementation by node access modules . In this hook ,
* the module grants a user different " grant IDs " within one or more
* " realms " . In hook_node_access_records (), the realms and grant IDs are
* associated with permission to view , edit , and delete individual nodes .
2008-11-25 02:37:33 +00:00
*
2009-10-24 11:49:52 +00:00
* The realms and grant IDs can be arbitrarily defined by your node access
2012-11-10 15:25:19 +00:00
* module ; it is common to use role IDs as grant IDs , but that is not required .
* Your module could instead maintain its own list of users , where each list has
* an ID . In that case , the return value of this hook would be an array of the
* list IDs that this user is a member of .
2008-11-25 02:37:33 +00:00
*
2012-11-10 15:25:19 +00:00
* A node access module may implement as many realms as necessary to properly
* define the access privileges for the nodes . Note that the system makes no
* distinction between published and unpublished nodes . It is the module ' s
* responsibility to provide appropriate realms to limit access to unpublished
* content .
2008-11-25 02:37:33 +00:00
*
2010-11-20 04:33:56 +00:00
* Node access records are stored in the { node_access } table and define which
* grants are required to access a node . There is a special case for the view
* operation -- a record with node ID 0 corresponds to a " view all " grant for
* the realm and grant ID of that record . If there are no node access modules
* enabled , the core node module adds a node ID 0 record for realm 'all' . Node
* access modules can also grant " view all " permission on their custom realms ;
* for example , a module could create a record in { node_access } with :
* @ code
* $record = array (
* 'nid' => 0 ,
* 'gid' => 888 ,
* 'realm' => 'example_realm' ,
* 'grant_view' => 1 ,
* 'grant_update' => 0 ,
* 'grant_delete' => 0 ,
* );
2014-03-10 11:17:13 +00:00
* db_insert ( 'node_access' ) -> fields ( $record ) -> execute ();
2010-11-20 04:33:56 +00:00
* @ endcode
* And then in its hook_node_grants () implementation , it would need to return :
* @ code
* if ( $op == 'view' ) {
* $grants [ 'example_realm' ] = array ( 888 );
* }
* @ endcode
* If you decide to do this , be aware that the node_access_rebuild () function
* will erase any node ID 0 entry when it is called , so you will need to make
* sure to restore your { node_access } record after node_access_rebuild () is
* called .
*
2014-04-15 16:47:12 +00:00
* @ param \Drupal\Core\Session\AccountInterface $account
2015-04-02 10:59:11 +00:00
* The account object whose grants are requested .
2014-04-15 16:47:12 +00:00
* @ param string $op
2012-11-10 15:25:19 +00:00
* The node operation to be performed , such as 'view' , 'update' , or 'delete' .
2009-10-24 11:49:52 +00:00
*
2014-04-15 16:47:12 +00:00
* @ return array
2009-10-24 11:49:52 +00:00
* An array whose keys are " realms " of grants , and whose values are arrays of
* the grant IDs within this realm that this user is being granted .
2008-11-25 02:37:33 +00:00
*
* For a detailed example , see node_access_example . module .
*
2011-11-28 11:44:25 +00:00
* @ see node_access_view_all_nodes ()
* @ see node_access_rebuild ()
2008-11-25 02:37:33 +00:00
* @ ingroup node_access
*/
2014-04-15 16:47:12 +00:00
function hook_node_grants ( \Drupal\Core\Session\AccountInterface $account , $op ) {
Issue #2061977 by InternetDevels, kim.pepper, ianthomas_uk, herom, rhm50, naveenvalecha, andypost, mandar.harkare, sergeypavlenko, sidharthap, SIz, tkuldeep17: Replace user_access() calls with ->hasPermission() in all core modules except user.
2014-07-12 06:55:56 +00:00
if ( $account -> hasPermission ( 'access private content' )) {
2008-11-25 02:37:33 +00:00
$grants [ 'example' ] = array ( 1 );
}
2014-12-23 09:37:57 +00:00
if ( $account -> id ()) {
$grants [ 'example_author' ] = array ( $account -> id ());
}
2008-11-25 02:37:33 +00:00
return $grants ;
}
/**
* Set permissions for a node to be written to the database .
*
2009-10-24 11:49:52 +00:00
* When a node is saved , a module implementing hook_node_access_records () will
* be asked if it is interested in the access permissions for a node . If it is
* interested , it must respond with an array of permissions arrays for that
2008-11-25 02:37:33 +00:00
* node .
*
2010-09-29 14:08:54 +00:00
* Node access grants apply regardless of the published or unpublished status
* of the node . Implementations must make sure not to grant access to
* unpublished nodes if they don ' t want to change the standard access control
* behavior . Your module may need to create a separate access realm to handle
* access to unpublished nodes .
*
2010-02-05 22:24:12 +00:00
* Note that the grant values in the return value from your hook must be
* integers and not boolean TRUE and FALSE .
*
2009-10-24 11:49:52 +00:00
* Each permissions item in the array is an array with the following elements :
* - 'realm' : The name of a realm that the module has defined in
* hook_node_grants () .
* - 'gid' : A 'grant ID' from hook_node_grants () .
2010-02-05 22:24:12 +00:00
* - 'grant_view' : If set to 1 a user that has been identified as a member
2010-09-29 14:08:54 +00:00
* of this gid within this realm can view this node . This should usually be
2013-08-16 17:13:11 +00:00
* set to $node -> isPublished () . Failure to do so may expose unpublished content
2010-09-29 14:08:54 +00:00
* to some users .
2010-02-05 22:24:12 +00:00
* - 'grant_update' : If set to 1 a user that has been identified as a member
2009-10-24 11:49:52 +00:00
* of this gid within this realm can edit this node .
2010-02-05 22:24:12 +00:00
* - 'grant_delete' : If set to 1 a user that has been identified as a member
2009-10-24 11:49:52 +00:00
* of this gid within this realm can delete this node .
2013-03-27 18:23:49 +00:00
* - langcode : ( optional ) The language code of a specific translation of the
* node , if any . Modules may add this key to grant different access to
* different translations of a node , such that ( e . g . ) a particular group is
* granted access to edit the Catalan version of the node , but not the
* Hungarian version . If no value is provided , the langcode is set
* automatically from the $node parameter and the node ' s original language ( if
* specified ) is used as a fallback . Only specify multiple grant records with
* different languages for a node if the site has those languages configured .
2008-11-25 02:37:33 +00:00
*
2013-03-27 18:23:49 +00:00
* A " deny all " grant may be used to deny all access to a particular node or
* node translation :
2010-09-29 14:08:54 +00:00
* @ code
* $grants [] = array (
* 'realm' => 'all' ,
* 'gid' => 0 ,
* 'grant_view' => 0 ,
* 'grant_update' => 0 ,
* 'grant_delete' => 0 ,
2013-03-27 18:23:49 +00:00
* 'langcode' => 'ca' ,
2010-09-29 14:08:54 +00:00
* );
* @ endcode
2013-03-27 18:23:49 +00:00
* Note that another module node access module could override this by granting
* access to one or more nodes , since grants are additive . To enforce that
* access is denied in a particular case , use hook_node_access_records_alter () .
* Also note that a deny all is not written to the database ; denies are
* implicit .
2010-09-29 14:08:54 +00:00
*
2014-02-07 07:23:07 +00:00
* @ param \Drupal\node\NodeInterface $node
2010-09-29 14:08:54 +00:00
* The node that has just been saved .
*
* @ return
* An array of grants as defined above .
*
2012-11-10 15:25:19 +00:00
* @ see hook_node_access_records_alter ()
2008-11-25 02:37:33 +00:00
* @ ingroup node_access
*/
2013-08-16 17:13:11 +00:00
function hook_node_access_records ( \Drupal\node\NodeInterface $node ) {
2009-01-27 00:22:27 +00:00
// We only care about the node if it has been marked private. If not, it is
2008-11-25 02:37:33 +00:00
// treated just like any other node and we completely ignore it.
2013-08-27 10:36:16 +00:00
if ( $node -> private -> value ) {
2008-11-25 02:37:33 +00:00
$grants = array ();
2013-03-27 18:23:49 +00:00
// Only published Catalan translations of private nodes should be viewable
2013-08-16 17:13:11 +00:00
// to all users. If we fail to check $node->isPublished(), all users would be able
2013-03-27 18:23:49 +00:00
// to view an unpublished node.
2013-08-16 17:13:11 +00:00
if ( $node -> isPublished ()) {
2010-09-29 14:08:54 +00:00
$grants [] = array (
'realm' => 'example' ,
'gid' => 1 ,
'grant_view' => 1 ,
'grant_update' => 0 ,
'grant_delete' => 0 ,
2013-03-27 18:23:49 +00:00
'langcode' => 'ca'
2010-09-29 14:08:54 +00:00
);
}
2008-11-25 02:37:33 +00:00
// For the example_author array, the GID is equivalent to a UID, which
2010-09-29 14:08:54 +00:00
// means there are many groups of just 1 user.
// Note that an author can always view his or her nodes, even if they
// have status unpublished.
2014-12-23 09:37:57 +00:00
if ( $node -> getOwnerId ()) {
$grants [] = array (
'realm' => 'example_author' ,
'gid' => $node -> getOwnerId (),
'grant_view' => 1 ,
'grant_update' => 1 ,
'grant_delete' => 1 ,
'langcode' => 'ca'
);
}
2010-09-29 14:08:54 +00:00
2008-11-25 02:37:33 +00:00
return $grants ;
}
}
2009-05-27 02:01:54 +00:00
/**
* Alter permissions for a node before it is written to the database .
*
* Node access modules establish rules for user access to content . Node access
* records are stored in the { node_access } table and define which permissions
* are required to access a node . This hook is invoked after node access modules
* returned their requirements via hook_node_access_records (); doing so allows
* modules to modify the $grants array by reference before it is stored , so
* custom or advanced business logic can be applied .
*
* Upon viewing , editing or deleting a node , hook_node_grants () builds a
* permissions array that is compared against the stored access records . The
* user must have one or more matching permissions in order to complete the
* requested operation .
*
2010-09-29 14:08:54 +00:00
* A module may deny all access to a node by setting $grants to an empty array .
*
2015-05-26 13:18:47 +00:00
* @ param array $grants
2009-05-27 02:01:54 +00:00
* The $grants array returned by hook_node_access_records () .
2014-02-07 07:23:07 +00:00
* @ param \Drupal\node\NodeInterface $node
2009-05-27 02:01:54 +00:00
* The node for which the grants were acquired .
*
* The preferred use of this hook is in a module that bridges multiple node
2010-01-13 06:10:43 +00:00
* access modules with a configurable behavior , as shown in the example with the
* 'is_preview' field .
2009-05-27 02:01:54 +00:00
*
2011-11-28 11:44:25 +00:00
* @ see hook_node_access_records ()
* @ see hook_node_grants ()
* @ see hook_node_grants_alter ()
2009-05-27 02:01:54 +00:00
* @ ingroup node_access
*/
2014-02-07 07:23:07 +00:00
function hook_node_access_records_alter ( & $grants , Drupal\node\NodeInterface $node ) {
2010-01-13 06:10:43 +00:00
// Our module allows editors to mark specific articles with the 'is_preview'
// field. If the node being saved has a TRUE value for that field, then only
// our grants are retained, and other grants are removed. Doing so ensures
// that our rules are enforced no matter what priority other grants are given.
if ( $node -> is_preview ) {
// Our module grants are set in $grants['example'].
$temp = $grants [ 'example' ];
// Now remove all module grants but our own.
$grants = array ( 'example' => $temp );
2009-05-27 02:01:54 +00:00
}
}
/**
* Alter user access rules when trying to view , edit or delete a node .
*
* Node access modules establish rules for user access to content .
2012-11-10 15:25:19 +00:00
* hook_node_grants () defines permissions for a user to view , edit or delete
* nodes by building a $grants array that indicates the permissions assigned to
* the user by each node access module . This hook is called to allow modules to
* modify the $grants array by reference , so the interaction of multiple node
* access modules can be altered or advanced business logic can be applied .
2009-05-27 02:01:54 +00:00
*
* The resulting grants are then checked against the records stored in the
* { node_access } table to determine if the operation may be completed .
*
2010-09-29 14:08:54 +00:00
* A module may deny all access to a user by setting $grants to an empty array .
*
2012-11-10 15:25:19 +00:00
* Developers may use this hook to either add additional grants to a user or to
* remove existing grants . These rules are typically based on either the
2011-11-28 11:44:25 +00:00
* permissions assigned to a user role , or specific attributes of a user
* account .
2009-05-27 02:01:54 +00:00
*
2014-04-15 16:47:12 +00:00
* @ param array $grants
2009-05-27 02:01:54 +00:00
* The $grants array returned by hook_node_grants () .
2014-04-15 16:47:12 +00:00
* @ param \Drupal\Core\Session\AccountInterface $account
* The account requesting access to content .
* @ param string $op
2009-05-27 02:01:54 +00:00
* The operation being performed , 'view' , 'update' or 'delete' .
*
2011-11-28 11:44:25 +00:00
* @ see hook_node_grants ()
* @ see hook_node_access_records ()
* @ see hook_node_access_records_alter ()
2009-05-27 02:01:54 +00:00
* @ ingroup node_access
*/
2014-04-15 16:47:12 +00:00
function hook_node_grants_alter ( & $grants , \Drupal\Core\Session\AccountInterface $account , $op ) {
2009-05-27 02:01:54 +00:00
// Our sample module never allows certain roles to edit or delete
// content. Since some other node access modules might allow this
// permission, we expressly remove it by returning an empty $grants
// array for roles specified in our variable setting.
// Get our list of banned roles.
2013-10-26 04:53:38 +00:00
$restricted = \Drupal :: config ( 'example.settings' ) -> get ( 'restricted_roles' );
2009-06-12 08:39:40 +00:00
2009-05-27 02:01:54 +00:00
if ( $op != 'view' && ! empty ( $restricted )) {
// Now check the roles for this account against the restrictions.
2013-07-24 19:40:03 +00:00
foreach ( $account -> getRoles () as $rid ) {
2013-06-06 10:20:38 +00:00
if ( in_array ( $rid , $restricted )) {
2009-05-27 02:01:54 +00:00
$grants = array ();
}
}
}
}
2009-08-20 09:47:04 +00:00
/**
2011-11-28 11:44:25 +00:00
* Controls access to a node .
2009-08-20 09:47:04 +00:00
*
* Modules may implement this hook if they want to have a say in whether or not
* a given user has access to perform a given operation on a node .
*
2012-11-10 15:25:19 +00:00
* The administrative account ( user ID #1) always passes any access check, so
* this hook is not called in that case . Users with the " bypass node access "
2009-08-20 09:47:04 +00:00
* permission may always view and edit content through the administrative
* interface .
*
2012-11-10 15:25:19 +00:00
* Note that not all modules will want to influence access on all node types . If
2014-09-17 14:39:29 +00:00
* your module does not want to explicitly allow or forbid access , return an
* AccessResultInterface object with neither isAllowed () nor isForbidden ()
* equaling TRUE . Blindly returning an object with isForbidden () equaling TRUE
* will break other node access modules .
2009-08-20 09:47:04 +00:00
*
2011-12-28 05:44:49 +00:00
* Also note that this function isn ' t called for node listings ( e . g . , RSS feeds ,
* the default home page at path 'node' , a recent content block , etc . ) See
* @ link node_access Node access rights @ endlink for a full explanation .
*
2014-02-07 07:23:07 +00:00
* @ param \Drupal\node\NodeInterface | string $node
2012-04-26 16:44:37 +00:00
* Either a node entity or the machine name of the content type on which to
2011-10-17 16:10:06 +00:00
* perform the access check .
2011-10-16 08:50:06 +00:00
* @ param string $op
2009-08-20 09:47:04 +00:00
* The operation to be performed . Possible values :
* - " create "
* - " delete "
* - " update "
* - " view "
Issue #2061977 by InternetDevels, kim.pepper, ianthomas_uk, herom, rhm50, naveenvalecha, andypost, mandar.harkare, sergeypavlenko, sidharthap, SIz, tkuldeep17: Replace user_access() calls with ->hasPermission() in all core modules except user.
2014-07-12 06:55:56 +00:00
* @ param \Drupal\Core\Session\AccountInterface $account
2011-10-20 06:56:11 +00:00
* The user object to perform the access check operation on .
2009-11-15 02:11:51 +00:00
*
2014-09-17 14:39:29 +00:00
* @ return \Drupal\Core\Access\AccessResultInterface
* The access result .
2011-10-16 08:50:06 +00:00
*
* @ ingroup node_access
2009-08-20 09:47:04 +00:00
*/
2015-10-07 19:30:24 +00:00
function hook_node_access ( \Drupal\node\NodeInterface $node , $op , \Drupal\Core\Session\AccountInterface $account ) {
2014-09-17 14:39:29 +00:00
$type = $node -> bundle ();
2009-08-20 09:47:04 +00:00
2014-09-17 14:39:29 +00:00
switch ( $op ) {
case 'create' :
return AccessResult :: allowedIfHasPermission ( $account , 'create ' . $type . ' content' );
2009-08-20 09:47:04 +00:00
2014-09-17 14:39:29 +00:00
case 'update' :
if ( $account -> hasPermission ( 'edit any ' . $type . ' content' , $account )) {
2015-03-26 09:41:35 +00:00
return AccessResult :: allowed () -> cachePerPermissions ();
2014-09-17 14:39:29 +00:00
}
else {
2015-03-26 09:41:35 +00:00
return AccessResult :: allowedIf ( $account -> hasPermission ( 'edit own ' . $type . ' content' , $account ) && ( $account -> id () == $node -> getOwnerId ())) -> cachePerPermissions () -> cachePerUser () -> cacheUntilEntityChanges ( $node );
2014-09-17 14:39:29 +00:00
}
2009-08-20 09:47:04 +00:00
2014-09-17 14:39:29 +00:00
case 'delete' :
if ( $account -> hasPermission ( 'delete any ' . $type . ' content' , $account )) {
2015-03-26 09:41:35 +00:00
return AccessResult :: allowed () -> cachePerPermissions ();
2014-09-17 14:39:29 +00:00
}
else {
2015-03-26 09:41:35 +00:00
return AccessResult :: allowedIf ( $account -> hasPermission ( 'delete own ' . $type . ' content' , $account ) && ( $account -> id () == $node -> getOwnerId ())) -> cachePerPermissions () -> cachePerUser () -> cacheUntilEntityChanges ( $node );
2014-09-17 14:39:29 +00:00
}
2009-08-20 09:47:04 +00:00
2014-09-17 14:39:29 +00:00
default :
// No opinion.
2014-09-22 21:08:27 +00:00
return AccessResult :: neutral ();
2014-09-17 14:39:29 +00:00
}
2009-08-20 09:47:04 +00:00
}
2008-12-09 11:30:25 +00:00
/**
2009-11-15 02:11:51 +00:00
* Act on a node being displayed as a search result .
2008-12-09 11:30:25 +00:00
*
2013-09-06 08:26:26 +00:00
* This hook is invoked from the node search plugin during search execution ,
* after loading and rendering the node .
2008-12-09 11:30:25 +00:00
*
2014-02-07 07:23:07 +00:00
* @ param \Drupal\node\NodeInterface $node
2009-11-15 02:11:51 +00:00
* The node being displayed in a search result .
*
2011-06-27 06:11:44 +00:00
* @ return array
* Extra information to be displayed with search result . This information
2012-11-10 15:25:19 +00:00
* should be presented as an associative array . It will be concatenated with
* the post information ( last updated , author ) in the default search result
* theming .
2011-06-27 06:11:44 +00:00
*
* @ see template_preprocess_search_result ()
2013-10-03 20:55:34 +00:00
* @ see search - result . html . twig
2010-02-10 10:34:50 +00:00
*
2014-07-11 12:04:53 +00:00
* @ ingroup entity_crud
2008-12-09 11:30:25 +00:00
*/
2015-10-05 23:33:05 +00:00
function hook_node_search_result ( \Drupal\node\NodeInterface $node ) {
2013-09-27 15:34:47 +00:00
$rating = db_query ( 'SELECT SUM(points) FROM {my_rating} WHERE nid = :nid' , array ( 'nid' => $node -> id ())) -> fetchField ();
2015-01-10 13:56:47 +00:00
return array ( 'rating' => \Drupal :: translation () -> formatPlural ( $rating , '1 point' , '@count points' ));
2008-12-09 11:30:25 +00:00
}
/**
2009-11-15 02:11:51 +00:00
* Act on a node being indexed for searching .
2008-12-09 11:30:25 +00:00
*
2013-09-06 08:26:26 +00:00
* This hook is invoked during search indexing , after loading , and after the
* result of rendering is added as $node -> rendered to the node object .
2008-12-09 11:30:25 +00:00
*
2014-02-07 07:23:07 +00:00
* @ param \Drupal\node\NodeInterface $node
2009-11-15 02:11:51 +00:00
* The node being indexed .
*
2012-03-13 19:08:05 +00:00
* @ return string
* Additional node information to be indexed .
2010-02-10 10:34:50 +00:00
*
2014-07-11 12:04:53 +00:00
* @ ingroup entity_crud
2008-12-09 11:30:25 +00:00
*/
2015-10-05 23:33:05 +00:00
function hook_node_update_index ( \Drupal\node\NodeInterface $node ) {
2008-12-09 11:30:25 +00:00
$text = '' ;
2013-09-27 15:34:47 +00:00
$ratings = db_query ( 'SELECT title, description FROM {my_ratings} WHERE nid = :nid' , array ( ':nid' => $node -> id ()));
foreach ( $ratings as $rating ) {
2015-08-26 10:34:29 +00:00
$text .= '<h2>' . Html :: escape ( $rating -> title ) . '</h2>' . Xss :: filter ( $rating -> description );
2008-12-09 11:30:25 +00:00
}
return $text ;
}
2009-08-05 14:58:40 +00:00
/**
* Provide additional methods of scoring for core search results for nodes .
*
* A node ' s search score is used to rank it among other nodes matched by the
* search , with the highest - ranked nodes appearing first in the search listing .
*
* For example , a module allowing users to vote on content could expose an
* option to allow search results ' rankings to be influenced by the average
* voting score of a node .
*
* All scoring mechanisms are provided as options to site administrators , and
* may be tweaked based on individual sites or disabled altogether if they do
* not make sense . Individual scoring mechanisms , if enabled , are assigned a
* weight from 1 to 10. The weight represents the factor of magnification of
* the ranking mechanism , with higher - weighted ranking mechanisms having more
* influence . In order for the weight system to work , each scoring mechanism
* must return a value between 0 and 1 for every node . That value is then
* multiplied by the administrator - assigned weight for the ranking mechanism ,
* and then the weighted scores from all ranking mechanisms are added , which
* brings about the same result as a weighted average .
*
2015-05-26 13:18:47 +00:00
* @ return array
2009-08-05 14:58:40 +00:00
* An associative array of ranking data . The keys should be strings ,
* corresponding to the internal name of the ranking mechanism , such as
* 'recent' , or 'comments' . The values should be arrays themselves , with the
* following keys available :
2012-11-10 15:25:19 +00:00
* - title : ( required ) The human readable name of the ranking mechanism .
2014-12-05 14:51:35 +00:00
* - join : ( optional ) An array with information to join any additional
2012-11-10 15:25:19 +00:00
* necessary table . This is not necessary if the table required is already
* joined to by the base query , such as for the { node } table . Other tables
* should use the full table name as an alias to avoid naming collisions .
* - score : ( required ) The part of a query string to calculate the score for
* the ranking mechanism based on values in the database . This does not need
* to be wrapped in parentheses , as it will be done automatically ; it also
* does not need to take the weighted system into account , as it will be
* done automatically . It does , however , need to calculate a decimal between
2009-08-05 14:58:40 +00:00
* 0 and 1 ; be careful not to cast the entire score to an integer by
2012-11-10 15:25:19 +00:00
* inadvertently introducing a variable argument .
* - arguments : ( optional ) If any arguments are required for the score , they
* can be specified in an array here .
2010-02-10 10:34:50 +00:00
*
2014-07-11 12:04:53 +00:00
* @ ingroup entity_crud
2009-08-05 14:58:40 +00:00
*/
function hook_ranking () {
// If voting is disabled, we can avoid returning the array, no hard feelings.
2013-10-26 04:53:38 +00:00
if ( \Drupal :: config ( 'vote.settings' ) -> get ( 'node_enabled' )) {
2009-08-05 14:58:40 +00:00
return array (
'vote_average' => array (
'title' => t ( 'Average vote' ),
// Note that we use i.sid, the search index's search item id, rather than
// n.nid.
2014-12-05 14:51:35 +00:00
'join' => array (
'type' => 'LEFT' ,
'table' => 'vote_node_data' ,
'alias' => 'vote_node_data' ,
'on' => 'vote_node_data.nid = i.sid' ,
),
2009-08-05 14:58:40 +00:00
// The highest possible score should be 1, and the lowest possible score,
// always 0, should be 0.
'score' => 'vote_node_data.average / CAST(%f AS DECIMAL)' ,
// Pass in the highest possible voting score as a decimal argument.
2014-04-15 21:24:47 +00:00
'arguments' => array ( \Drupal :: config ( 'vote.settings' ) -> get ( 'score_max' )),
2009-08-05 14:58:40 +00:00
),
);
}
}
2013-12-10 16:40:21 +00:00
/**
* Alter the links of a node .
*
* @ param array & $links
* A renderable array representing the node links .
* @ param \Drupal\node\NodeInterface $entity
* The node being rendered .
* @ param array & $context
* Various aspects of the context in which the node links are going to be
* displayed , with the following keys :
2015-05-26 13:18:47 +00:00
* - 'view_mode' : the view mode in which the node is being viewed
* - 'langcode' : the language in which the node is being viewed
2013-12-10 16:40:21 +00:00
*
* @ see \Drupal\node\NodeViewBuilder :: renderLinks ()
* @ see \Drupal\node\NodeViewBuilder :: buildLinks ()
2014-07-11 12:04:53 +00:00
* @ see entity_crud
2013-12-10 16:40:21 +00:00
*/
function hook_node_links_alter ( array & $links , NodeInterface $entity , array & $context ) {
$links [ 'mymodule' ] = array (
'#theme' => 'links__node__mymodule' ,
'#attributes' => array ( 'class' => array ( 'links' , 'inline' )),
'#links' => array (
'node-report' => array (
'title' => t ( 'Report' ),
'href' => " node/ { $entity -> id () } /report " ,
'query' => array ( 'token' => \Drupal :: getContainer () -> get ( 'csrf_token' ) -> get ( " node/ { $entity -> id () } /report " )),
),
),
);
}
2008-11-25 02:37:33 +00:00
/**
* @ } End of " addtogroup hooks " .
*/