Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- <?php
- const GOLD_PERMISSION_SET = 'set gold status';
- const GOLD_PERMISSION_VIEW = 'view gold content';
- /**
- * Implements hook_permission().
- */
- function gold_permission() {
- return array(
- GOLD_PERMISSION_SET => array(
- 'title' => t('Set the gold status to content'),
- ),
- GOLD_PERMISSION_VIEW => array(
- 'title' => t('View content that has gold status'),
- ),
- );
- }
- /**
- * Implements hook_init().
- */
- /*
- function gold_init() {
- // Test des permissions
- if (user_access('set gold status')) {
- drupal_set_message("Je peux affecter du contenu gold");
- }
- if (user_access('view gold content')) {
- drupal_set_message("Je peux voir le contenu gold");
- }
- }
- */
- /**
- * Activer devel generate
- * Generer 2 utilisateurs
- * Affecter le role premium à l'un d'entre eux
- * Config > development > Generate users
- * Placer le block masquerade dans le theme bartik
- * (activer le module si besoin)
- * Structure > Blocks > "Masquerade"
- * il apparaitra sur la page d'accueil
- * Tester l'affichage des messages avec les deux comptes
- */
- /**
- * Implements hook_block_info().
- */
- function gold_block_info() {
- // On retourne la déclaration de notre block dont le delta est 'status'
- $blocks['status'] = array(
- 'info' => t('Premium status'),
- 'cache' => DRUPAL_CACHE_PER_ROLE,
- // Facultatif, car DRUPAL_CACHE_PER_ROLE est l'option par défaut
- );
- return $blocks;
- }
- /**
- * Implements hook_block_view().
- */
- function gold_block_view($delta = '') {
- global $user;
- // On retourne en tant que contenu "Vous avez le statut premium" si l'user a
- // la permission "view gold content", sinon "Vous n'avez pas le statut premium"
- $block = array();
- if ($delta == 'status') {
- $block['subject'] = "Statut premium";
- if (user_access(GOLD_PERMISSION_VIEW)) {
- $block['content'] = $user->name . " : Vous avez le statut premium";
- }
- else {
- $block['content'] = array(
- '#markup' => "Vous n'avez pas le statut premium",
- );
- }
- }
- return $block;
- }
- /**
- * Implements hook_menu().
- */
- function gold_menu() {
- $items['gold/users'] = array(
- 'title' => 'Gold users',
- 'page callback' => 'gold_users_page',
- 'file' => 'gold.pages.inc',
- 'access callback' => TRUE, // tout le monde a accès à la page
- );
- $items['gold/user/%user'] = array(
- 'title' => 'Gold user ?',
- 'page callback' => 'gold_user_page',
- 'page arguments' => array(2),
- 'file' => 'gold.pages.inc',
- 'access callback' => TRUE, // tout le monde a accès à la page
- );
- $items['admin/config/gold'] = array(
- 'title' => 'Administration de gold',
- 'page callback' => 'drupal_get_form',
- 'page arguments' => array('gold_admin_form'),
- 'file' => 'gold.pages.inc',
- //'access callback' => 'user_access', // Facultatif car fonction par défaut pour l'access
- 'access arguments' => array('administer site configuration'),
- );
- return $items;
- }
- /**
- * Implements hook_image_default_styles().
- */
- function gold_image_default_styles() {
- // Créer un style 'Grey Gold' qui redimensionne (scale & crop) les images
- // en 100 x 100 et les désature (desaturate).
- $styles = array();
- $styles['grey_gold'] = array(
- 'label' => 'Grey gold',
- 'effects' => array(
- array(
- 'name' => 'image_scale_and_crop',
- 'data' => array('width' => 100, 'height' => 100),
- 'weight' => 0,
- ),
- array(
- 'name' => 'image_desaturate',
- 'data' => array(),
- 'weight' => 1,
- ),
- ),
- );
- return $styles;
- }
- /**
- * Implements hook_form_alter().
- */
- function gold_form_alter(&$form, &$form_state, $form_id) {
- $types = variable_get('gold_types', array());
- $enabled_types = array_filter($types);
- if (!empty($form['#bundle']) && in_array($form['#bundle'], $enabled_types) // vérifie qu'on travaille sur bundle activé
- && strpos($form_id, '_node_form') !== FALSE // vérifie qu'on travaille sur les bons formulaires
- ) {
- // récupération du statut courant, s'il existe, dans la base
- $form['gold'] = array(
- '#type' => 'checkbox',
- '#title' => "Marquer comme contenu gold",
- '#weight' => $form['title']['#weight'] + .5,
- '#default_value' => !empty($form['#node']->gold),
- );
- }
- }
- /**
- * Implements hook_node_insert().
- */
- function gold_node_insert($node) {
- // Ici on travaille sur les nodes qui sont créé
- _gold_set_status($node);
- if (!empty($node->gold)) {
- // ici j'envoie un mail à tous les utilisateurs premium
- $query = db_select('users_roles', 'ur')
- ->fields('ur', array('uid'));
- $query->rightJoin('role_permission', 'rp', 'rp.rid = ur.rid');
- $uids = $query
- ->condition('permission', GOLD_PERMISSION_VIEW)
- ->execute()
- ->fetchCol();
- $accounts = user_load_multiple($uids);
- $language_default = language_default();
- $params['node'] = $node;
- foreach ($accounts as $account) {
- $params['account'] = $account;
- drupal_mail('gold', 'new_gold_content', $account->mail, $language_default, $params);
- }
- }
- }
- /**
- * Implements hook_node_update().
- */
- function gold_node_update($node) {
- // Ici on travaille sur les nodes qui sont mis à jour
- _gold_set_status($node);
- }
- function _gold_set_status($node) {
- // ici on va faire notre requête en base de données
- db_merge('gold')
- ->key(array('nid' => $node->nid))
- ->fields(array(
- 'nid' => $node->nid,
- 'status' => $node->gold,
- ))
- ->execute(); // <- Insert or update
- }
- /**
- * Implements hook_node_access().
- */
- function gold_node_access($node, $op, $account) {
- if ($op == 'view' && !user_access(GOLD_PERMISSION_VIEW, $account)) {
- // récupération du statut gold pour le noeud.
- if ($node->gold) {
- return NODE_ACCESS_DENY;
- }
- }
- return NODE_ACCESS_IGNORE;
- }
- /**
- * Implements hook_node_load().
- */
- function gold_node_load($nodes, $types) {
- // Ne faire des requetes en base que sur les types activés
- $types = variable_get('gold_types', array());
- $enabled_types = array_filter($types);
- $intersect = array_intersect($enabled_types, $types);
- if (!empty($intersect)) {
- // Récupérer les statuts gold de tous les noeuds en train d'etre chargés
- $statuses = db_select('gold', 'g')
- ->fields('g', array('nid', 'status'))
- ->condition('nid', array_keys($nodes))
- ->execute()
- ->fetchAllKeyed();
- foreach ($nodes as &$node) {
- $node->gold = !empty($statuses[$node->nid]);
- }
- }
- }
- /**
- * Implements hook_mail().
- */
- function gold_mail($key, &$message, $params) {
- // Traitement du contenu du mail en fonction de la clé
- if($key == 'new_gold_content') {
- $message['subject'] = token_replace("Nouveau contenu gold sur [site:name]");
- $body_text = "Bonjour [user:name],
- Un nouveau contenu premium a été ajouté sur le site.
- Il est intitulé [node:title], et est visible à l'url [node:url:absolute].
- Cordialement,
- L'équipe [site:name]";
- $message['body'][] = token_replace($body_text, array(
- 'user' => $params['account'],
- 'node' => $params['node'],
- ));
- }
- }
- /**
- * Implements hook_node_view_alter().
- */
- function gold_node_view_alter(&$build) {
- dsm($build);
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement