Advertisement
Guest User

Untitled

a guest
Nov 26th, 2014
145
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 7.32 KB | None | 0 0
  1. <?php
  2. const GOLD_PERMISSION_SET = 'set gold status';
  3. const GOLD_PERMISSION_VIEW = 'view gold content';
  4.  
  5. /**
  6. * Implements hook_permission().
  7. */
  8. function gold_permission() {
  9. return array(
  10. GOLD_PERMISSION_SET => array(
  11. 'title' => t('Set the gold status to content'),
  12. ),
  13. GOLD_PERMISSION_VIEW => array(
  14. 'title' => t('View content that has gold status'),
  15. ),
  16. );
  17. }
  18.  
  19. /**
  20. * Implements hook_init().
  21. */
  22. /*
  23. function gold_init() {
  24. // Test des permissions
  25. if (user_access('set gold status')) {
  26. drupal_set_message("Je peux affecter du contenu gold");
  27. }
  28. if (user_access('view gold content')) {
  29. drupal_set_message("Je peux voir le contenu gold");
  30. }
  31. }
  32. */
  33.  
  34. /**
  35. * Activer devel generate
  36. * Generer 2 utilisateurs
  37. * Affecter le role premium à l'un d'entre eux
  38. * Config > development > Generate users
  39. * Placer le block masquerade dans le theme bartik
  40. * (activer le module si besoin)
  41. * Structure > Blocks > "Masquerade"
  42. * il apparaitra sur la page d'accueil
  43. * Tester l'affichage des messages avec les deux comptes
  44. */
  45.  
  46. /**
  47. * Implements hook_block_info().
  48. */
  49. function gold_block_info() {
  50. // On retourne la déclaration de notre block dont le delta est 'status'
  51. $blocks['status'] = array(
  52. 'info' => t('Premium status'),
  53. 'cache' => DRUPAL_CACHE_PER_ROLE,
  54. // Facultatif, car DRUPAL_CACHE_PER_ROLE est l'option par défaut
  55. );
  56.  
  57. return $blocks;
  58. }
  59.  
  60. /**
  61. * Implements hook_block_view().
  62. */
  63. function gold_block_view($delta = '') {
  64. global $user;
  65.  
  66. // On retourne en tant que contenu "Vous avez le statut premium" si l'user a
  67. // la permission "view gold content", sinon "Vous n'avez pas le statut premium"
  68. $block = array();
  69. if ($delta == 'status') {
  70. $block['subject'] = "Statut premium";
  71. if (user_access(GOLD_PERMISSION_VIEW)) {
  72. $block['content'] = $user->name . " : Vous avez le statut premium";
  73. }
  74. else {
  75. $block['content'] = array(
  76. '#markup' => "Vous n'avez pas le statut premium",
  77. );
  78. }
  79. }
  80. return $block;
  81. }
  82.  
  83. /**
  84. * Implements hook_menu().
  85. */
  86. function gold_menu() {
  87. $items['gold/users'] = array(
  88. 'title' => 'Gold users',
  89. 'page callback' => 'gold_users_page',
  90. 'file' => 'gold.pages.inc',
  91. 'access callback' => TRUE, // tout le monde a accès à la page
  92. );
  93.  
  94. $items['gold/user/%user'] = array(
  95. 'title' => 'Gold user ?',
  96. 'page callback' => 'gold_user_page',
  97. 'page arguments' => array(2),
  98. 'file' => 'gold.pages.inc',
  99. 'access callback' => TRUE, // tout le monde a accès à la page
  100. );
  101.  
  102. $items['admin/config/gold'] = array(
  103. 'title' => 'Administration de gold',
  104. 'page callback' => 'drupal_get_form',
  105. 'page arguments' => array('gold_admin_form'),
  106. 'file' => 'gold.pages.inc',
  107. //'access callback' => 'user_access', // Facultatif car fonction par défaut pour l'access
  108. 'access arguments' => array('administer site configuration'),
  109. );
  110.  
  111. return $items;
  112. }
  113.  
  114. /**
  115. * Implements hook_image_default_styles().
  116. */
  117. function gold_image_default_styles() {
  118. // Créer un style 'Grey Gold' qui redimensionne (scale & crop) les images
  119. // en 100 x 100 et les désature (desaturate).
  120. $styles = array();
  121.  
  122. $styles['grey_gold'] = array(
  123. 'label' => 'Grey gold',
  124. 'effects' => array(
  125. array(
  126. 'name' => 'image_scale_and_crop',
  127. 'data' => array('width' => 100, 'height' => 100),
  128. 'weight' => 0,
  129. ),
  130. array(
  131. 'name' => 'image_desaturate',
  132. 'data' => array(),
  133. 'weight' => 1,
  134. ),
  135. ),
  136. );
  137.  
  138. return $styles;
  139. }
  140.  
  141. /**
  142. * Implements hook_form_alter().
  143. */
  144. function gold_form_alter(&$form, &$form_state, $form_id) {
  145.  
  146. $types = variable_get('gold_types', array());
  147. $enabled_types = array_filter($types);
  148. if (!empty($form['#bundle']) && in_array($form['#bundle'], $enabled_types) // vérifie qu'on travaille sur bundle activé
  149. && strpos($form_id, '_node_form') !== FALSE // vérifie qu'on travaille sur les bons formulaires
  150. ) {
  151. // récupération du statut courant, s'il existe, dans la base
  152. $form['gold'] = array(
  153. '#type' => 'checkbox',
  154. '#title' => "Marquer comme contenu gold",
  155. '#weight' => $form['title']['#weight'] + .5,
  156. '#default_value' => !empty($form['#node']->gold),
  157. );
  158. }
  159. }
  160.  
  161. /**
  162. * Implements hook_node_insert().
  163. */
  164. function gold_node_insert($node) {
  165. // Ici on travaille sur les nodes qui sont créé
  166. _gold_set_status($node);
  167.  
  168. if (!empty($node->gold)) {
  169. // ici j'envoie un mail à tous les utilisateurs premium
  170.  
  171. $query = db_select('users_roles', 'ur')
  172. ->fields('ur', array('uid'));
  173. $query->rightJoin('role_permission', 'rp', 'rp.rid = ur.rid');
  174. $uids = $query
  175. ->condition('permission', GOLD_PERMISSION_VIEW)
  176. ->execute()
  177. ->fetchCol();
  178. $accounts = user_load_multiple($uids);
  179.  
  180.  
  181. $language_default = language_default();
  182. $params['node'] = $node;
  183. foreach ($accounts as $account) {
  184. $params['account'] = $account;
  185. drupal_mail('gold', 'new_gold_content', $account->mail, $language_default, $params);
  186. }
  187. }
  188. }
  189.  
  190. /**
  191. * Implements hook_node_update().
  192. */
  193. function gold_node_update($node) {
  194. // Ici on travaille sur les nodes qui sont mis à jour
  195. _gold_set_status($node);
  196. }
  197.  
  198. function _gold_set_status($node) {
  199. // ici on va faire notre requête en base de données
  200. db_merge('gold')
  201. ->key(array('nid' => $node->nid))
  202. ->fields(array(
  203. 'nid' => $node->nid,
  204. 'status' => $node->gold,
  205. ))
  206. ->execute(); // <- Insert or update
  207. }
  208.  
  209.  
  210. /**
  211. * Implements hook_node_access().
  212. */
  213. function gold_node_access($node, $op, $account) {
  214. if ($op == 'view' && !user_access(GOLD_PERMISSION_VIEW, $account)) {
  215. // récupération du statut gold pour le noeud.
  216. if ($node->gold) {
  217. return NODE_ACCESS_DENY;
  218. }
  219. }
  220. return NODE_ACCESS_IGNORE;
  221. }
  222.  
  223.  
  224. /**
  225. * Implements hook_node_load().
  226. */
  227. function gold_node_load($nodes, $types) {
  228. // Ne faire des requetes en base que sur les types activés
  229. $types = variable_get('gold_types', array());
  230. $enabled_types = array_filter($types);
  231. $intersect = array_intersect($enabled_types, $types);
  232.  
  233. if (!empty($intersect)) {
  234. // Récupérer les statuts gold de tous les noeuds en train d'etre chargés
  235. $statuses = db_select('gold', 'g')
  236. ->fields('g', array('nid', 'status'))
  237. ->condition('nid', array_keys($nodes))
  238. ->execute()
  239. ->fetchAllKeyed();
  240. foreach ($nodes as &$node) {
  241. $node->gold = !empty($statuses[$node->nid]);
  242. }
  243. }
  244. }
  245.  
  246. /**
  247. * Implements hook_mail().
  248. */
  249. function gold_mail($key, &$message, $params) {
  250. // Traitement du contenu du mail en fonction de la clé
  251. if($key == 'new_gold_content') {
  252. $message['subject'] = token_replace("Nouveau contenu gold sur [site:name]");
  253. $body_text = "Bonjour [user:name],
  254.  
  255. Un nouveau contenu premium a été ajouté sur le site.
  256.  
  257. Il est intitulé [node:title], et est visible à l'url [node:url:absolute].
  258.  
  259. Cordialement,
  260. L'équipe [site:name]";
  261. $message['body'][] = token_replace($body_text, array(
  262. 'user' => $params['account'],
  263. 'node' => $params['node'],
  264. ));
  265. }
  266. }
  267.  
  268. /**
  269. * Implements hook_node_view_alter().
  270. */
  271. function gold_node_view_alter(&$build) {
  272. dsm($build);
  273. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement