user.views.inc 17 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608
  1. <?php
  2. /**
  3. * @file
  4. * Provide views data and handlers for user.module.
  5. *
  6. * @ingroup views_module_handlers
  7. */
  8. /**
  9. * Implements hook_views_data().
  10. */
  11. function user_views_data() {
  12. // ----------------------------------------------------------------
  13. // 'users' table.
  14. // Define the base group of this table. Fields that don't have a group
  15. // defined will go into this field by default.
  16. $data['users']['table']['group'] = t('User');
  17. $data['users']['table']['base'] = array(
  18. 'field' => 'uid',
  19. 'title' => t('User'),
  20. 'help' => t('Users who have created accounts on your site.'),
  21. 'access query tag' => 'user_access',
  22. );
  23. $data['users']['table']['entity type'] = 'user';
  24. $data['users']['table']['default_relationship'] = array(
  25. 'node' => array(
  26. 'table' => 'node',
  27. 'field' => 'uid',
  28. ),
  29. 'node_revision' => array(
  30. 'table' => 'node_revision',
  31. 'field' => 'uid',
  32. ),
  33. 'file' => array(
  34. 'table' => 'file',
  35. 'field' => 'uid',
  36. ),
  37. );
  38. // User ID / 'uid'.
  39. $data['users']['uid'] = array(
  40. // The item it appears as on the UI,
  41. 'title' => t('Uid'),
  42. // The help that appears on the UI,
  43. 'help' => t('The user ID'),
  44. 'field' => array(
  45. 'handler' => 'views_handler_field_user',
  46. 'click sortable' => TRUE,
  47. ),
  48. 'argument' => array(
  49. 'handler' => 'views_handler_argument_user_uid',
  50. // Display this field in the summary.
  51. 'name field' => 'name',
  52. ),
  53. 'filter' => array(
  54. 'title' => t('Name'),
  55. 'handler' => 'views_handler_filter_user_name',
  56. ),
  57. 'sort' => array(
  58. 'handler' => 'views_handler_sort',
  59. ),
  60. 'relationship' => array(
  61. 'title' => t('Content authored'),
  62. 'help' => t('Relate content to the user who created it. This relationship will create one record for each content item created by the user.'),
  63. 'handler' => 'views_handler_relationship',
  64. 'base' => 'node',
  65. 'base field' => 'uid',
  66. 'field' => 'uid',
  67. 'label' => t('nodes'),
  68. ),
  69. );
  70. // The raw user ID / 'uid_raw'.
  71. $data['users']['uid_raw'] = array(
  72. 'help' => t('The raw numeric user ID.'),
  73. 'real field' => 'uid',
  74. 'filter' => array(
  75. 'title' => t('The user ID'),
  76. 'handler' => 'views_handler_filter_numeric',
  77. ),
  78. );
  79. // Representative node for the user.
  80. $data['users']['uid_representative'] = array(
  81. 'relationship' => array(
  82. 'title' => t('Representative node'),
  83. 'label' => t('Representative node'),
  84. 'help' => t('Obtains a single representative node for each user, according to a chosen sort criterion.'),
  85. 'handler' => 'views_handler_relationship_groupwise_max',
  86. 'relationship field' => 'uid',
  87. 'outer field' => 'users.uid',
  88. 'argument table' => 'users',
  89. 'argument field' => 'uid',
  90. 'base' => 'node',
  91. 'field' => 'nid',
  92. ),
  93. );
  94. // Current user's ID / 'uid'.
  95. $data['users']['uid_current'] = array(
  96. 'real field' => 'uid',
  97. 'title' => t('Current'),
  98. 'help' => t('Filter the view to the currently logged in user.'),
  99. 'filter' => array(
  100. 'handler' => 'views_handler_filter_user_current',
  101. 'type' => 'yes-no',
  102. ),
  103. );
  104. // Comments authored.
  105. $data['users']['uid_comment'] = array(
  106. 'relationship' => array(
  107. 'title' => t('Comments authored'),
  108. 'help' => t('Relate comments to the user who created it. This relationship will create one record for each comment created by the user.'),
  109. 'handler' => 'views_handler_relationship',
  110. 'base' => 'comment',
  111. 'base field' => 'uid',
  112. 'field' => 'uid',
  113. 'label' => t('comments'),
  114. ),
  115. );
  116. // User name.
  117. $data['users']['name'] = array(
  118. // The item it appears as on the UI,
  119. 'title' => t('Name'),
  120. // The help that appears on the UI,
  121. 'help' => t('The user or author name.'),
  122. 'field' => array(
  123. 'handler' => 'views_handler_field_user_name',
  124. 'click sortable' => TRUE,
  125. ),
  126. 'sort' => array(
  127. 'handler' => 'views_handler_sort',
  128. ),
  129. 'argument' => array(
  130. 'handler' => 'views_handler_argument_string',
  131. ),
  132. 'filter' => array(
  133. 'handler' => 'views_handler_filter_string',
  134. 'title' => t('Name (raw)'),
  135. 'help' => t('The user or author name. This filter does not check if the user exists and allows partial matching. Does not utilize autocomplete.'),
  136. ),
  137. );
  138. // Email address.
  139. // Note that this field implements field level access control.
  140. $data['users']['mail'] = array(
  141. // The item it appears as on the UI,
  142. 'title' => t('E-mail'),
  143. // The help that appears on the UI,
  144. 'help' => t('E-mail address for a given user. This field is normally not shown to users, so be cautious when using it.'),
  145. 'field' => array(
  146. 'handler' => 'views_handler_field_user_mail',
  147. 'click sortable' => TRUE,
  148. ),
  149. 'sort' => array(
  150. 'handler' => 'views_handler_sort',
  151. ),
  152. 'filter' => array(
  153. 'handler' => 'views_handler_filter_string',
  154. ),
  155. 'argument' => array(
  156. 'handler' => 'views_handler_argument_string',
  157. ),
  158. );
  159. // Language.
  160. $data['users']['language'] = array(
  161. // The item it appears as on the UI,
  162. 'title' => t('Language'),
  163. 'help' => t('Language of the user'),
  164. 'field' => array(
  165. 'handler' => 'views_handler_field_user_language',
  166. 'click sortable' => TRUE,
  167. ),
  168. 'sort' => array(
  169. 'handler' => 'views_handler_sort',
  170. ),
  171. 'filter' => array(
  172. 'handler' => 'views_handler_filter_node_language',
  173. ),
  174. 'argument' => array(
  175. 'handler' => 'views_handler_argument_node_language',
  176. ),
  177. );
  178. // Picture.
  179. $data['users']['picture_fid']['moved to'] = array('users', 'picture');
  180. $data['users']['picture'] = array(
  181. // The item it appears as on the UI,
  182. 'title' => t('Picture'),
  183. // The help that appears on the UI,
  184. 'help' => t("The user's picture, if allowed."),
  185. // Information for displaying the uid.
  186. 'field' => array(
  187. 'handler' => 'views_handler_field_user_picture',
  188. 'click sortable' => TRUE,
  189. ),
  190. 'sort' => array(
  191. 'handler' => 'views_handler_sort',
  192. ),
  193. 'filter' => array(
  194. 'handler' => 'views_handler_filter_boolean_operator',
  195. 'label' => t('Has Avatar'),
  196. 'type' => 'yes-no',
  197. ),
  198. );
  199. // Link.
  200. $data['users']['view_user'] = array(
  201. 'field' => array(
  202. 'title' => t('Link to user'),
  203. 'help' => t('Provide a simple link to the user.'),
  204. 'handler' => 'views_handler_field_user_link',
  205. ),
  206. );
  207. // Created field.
  208. $data['users']['created'] = array(
  209. // The item it appears as on the UI,
  210. 'title' => t('Created date'),
  211. // The help that appears on the UI,
  212. 'help' => t('The date the user was created.'),
  213. 'field' => array(
  214. 'handler' => 'views_handler_field_date',
  215. 'click sortable' => TRUE,
  216. ),
  217. 'sort' => array(
  218. 'handler' => 'views_handler_sort_date',
  219. ),
  220. 'filter' => array(
  221. 'handler' => 'views_handler_filter_date',
  222. ),
  223. );
  224. $data['users']['created_fulldate'] = array(
  225. 'title' => t('Created date'),
  226. 'help' => t('Date in the form of CCYYMMDD.'),
  227. 'argument' => array(
  228. 'field' => 'created',
  229. 'handler' => 'views_handler_argument_node_created_fulldate',
  230. ),
  231. );
  232. $data['users']['created_year_month'] = array(
  233. 'title' => t('Created year + month'),
  234. 'help' => t('Date in the form of YYYYMM.'),
  235. 'argument' => array(
  236. 'field' => 'created',
  237. 'handler' => 'views_handler_argument_node_created_year_month',
  238. ),
  239. );
  240. $data['users']['timestamp_year']['moved to'] = array('users', 'created_year');
  241. $data['users']['created_year'] = array(
  242. 'title' => t('Created year'),
  243. 'help' => t('Date in the form of YYYY.'),
  244. 'argument' => array(
  245. 'field' => 'created',
  246. 'handler' => 'views_handler_argument_node_created_year',
  247. ),
  248. );
  249. $data['users']['created_month'] = array(
  250. 'title' => t('Created month'),
  251. 'help' => t('Date in the form of MM (01 - 12).'),
  252. 'argument' => array(
  253. 'field' => 'created',
  254. 'handler' => 'views_handler_argument_node_created_month',
  255. ),
  256. );
  257. $data['users']['created_day'] = array(
  258. 'title' => t('Created day'),
  259. 'help' => t('Date in the form of DD (01 - 31).'),
  260. 'argument' => array(
  261. 'field' => 'created',
  262. 'handler' => 'views_handler_argument_node_created_day',
  263. ),
  264. );
  265. $data['users']['created_week'] = array(
  266. 'title' => t('Created week'),
  267. 'help' => t('Date in the form of WW (01 - 53).'),
  268. 'argument' => array(
  269. 'field' => 'created',
  270. 'handler' => 'views_handler_argument_node_created_week',
  271. ),
  272. );
  273. // Access field.
  274. $data['users']['access'] = array(
  275. // The item it appears as on the UI,
  276. 'title' => t('Last access'),
  277. // The help that appears on the UI,
  278. 'help' => t("The user's last access date."),
  279. 'field' => array(
  280. 'handler' => 'views_handler_field_date',
  281. 'click sortable' => TRUE,
  282. ),
  283. 'sort' => array(
  284. 'handler' => 'views_handler_sort_date',
  285. ),
  286. 'filter' => array(
  287. 'handler' => 'views_handler_filter_date',
  288. ),
  289. );
  290. // Login field.
  291. $data['users']['login'] = array(
  292. // The item it appears as on the UI,
  293. 'title' => t('Last login'),
  294. // The help that appears on the UI,
  295. 'help' => t("The user's last login date."),
  296. 'field' => array(
  297. 'handler' => 'views_handler_field_date',
  298. 'click sortable' => TRUE,
  299. ),
  300. 'sort' => array(
  301. 'handler' => 'views_handler_sort_date',
  302. ),
  303. 'filter' => array(
  304. 'handler' => 'views_handler_filter_date',
  305. ),
  306. );
  307. // Active status.
  308. $data['users']['status'] = array(
  309. // The item it appears as on the UI,
  310. 'title' => t('Active status'),
  311. // The help that appears on the UI,
  312. 'help' => t('Whether a user is active or blocked.'),
  313. // Information for displaying a title as a field.
  314. 'field' => array(
  315. 'handler' => 'views_handler_field_boolean',
  316. 'click sortable' => TRUE,
  317. 'output formats' => array(
  318. 'active-blocked' => array(t('Active'), t('Blocked')),
  319. ),
  320. ),
  321. 'filter' => array(
  322. 'handler' => 'views_handler_filter_boolean_operator',
  323. 'label' => t('Active'),
  324. 'type' => 'yes-no',
  325. ),
  326. 'sort' => array(
  327. 'handler' => 'views_handler_sort',
  328. ),
  329. );
  330. // Log field.
  331. $data['users']['signature'] = array(
  332. // The item it appears as on the UI,
  333. 'title' => t('Signature'),
  334. // The help that appears on the UI,
  335. 'help' => t("The user's signature."),
  336. // Information for displaying a title as a field.
  337. 'field' => array(
  338. 'handler' => 'views_handler_field_markup',
  339. 'format' => filter_fallback_format(),
  340. ),
  341. 'filter' => array(
  342. 'handler' => 'views_handler_filter_string',
  343. ),
  344. );
  345. $data['users']['edit_node'] = array(
  346. 'field' => array(
  347. 'title' => t('Link to edit user'),
  348. 'help' => t('Provide a simple link to edit the user.'),
  349. 'handler' => 'views_handler_field_user_link_edit',
  350. ),
  351. );
  352. $data['users']['cancel_node'] = array(
  353. 'field' => array(
  354. 'title' => t('Link to cancel user'),
  355. 'help' => t('Provide a simple link to cancel the user.'),
  356. 'handler' => 'views_handler_field_user_link_cancel',
  357. ),
  358. );
  359. $data['users']['data'] = array(
  360. 'title' => t('Data'),
  361. 'help' => t('Provide serialized data of the user'),
  362. 'field' => array(
  363. 'handler' => 'views_handler_field_serialized',
  364. ),
  365. );
  366. // ----------------------------------------------------------------------
  367. // 'users_roles' table.
  368. $data['users_roles']['table']['group'] = t('User');
  369. // Explain how this table joins to others.
  370. $data['users_roles']['table']['join'] = array(
  371. // Directly links to users table.
  372. 'users' => array(
  373. 'left_field' => 'uid',
  374. 'field' => 'uid',
  375. ),
  376. );
  377. $data['users_roles']['table']['default_relationship'] = array(
  378. 'node' => array(
  379. 'table' => 'node',
  380. 'field' => 'uid',
  381. ),
  382. 'node_revision' => array(
  383. 'table' => 'node_revision',
  384. 'field' => 'uid',
  385. ),
  386. );
  387. $data['users_roles']['rid'] = array(
  388. 'title' => t('Roles'),
  389. 'help' => t('Roles that a user belongs to.'),
  390. 'field' => array(
  391. 'handler' => 'views_handler_field_user_roles',
  392. 'no group by' => TRUE,
  393. ),
  394. 'filter' => array(
  395. 'handler' => 'views_handler_filter_user_roles',
  396. 'numeric' => TRUE,
  397. 'allow empty' => TRUE,
  398. ),
  399. 'argument' => array(
  400. 'handler' => 'views_handler_argument_users_roles_rid',
  401. 'name table' => 'role',
  402. 'name field' => 'name',
  403. 'empty field name' => t('No role'),
  404. 'zero is null' => TRUE,
  405. 'numeric' => TRUE,
  406. ),
  407. );
  408. // ----------------------------------------------------------------------
  409. // 'role' table.
  410. $data['role']['table']['join'] = array(
  411. // Directly links to users table.
  412. 'users' => array(
  413. 'left_table' => 'users_roles',
  414. 'left_field' => 'rid',
  415. 'field' => 'rid',
  416. ),
  417. // Needed for many to one helper sometimes.
  418. 'users_roles' => array(
  419. 'left_field' => 'rid',
  420. 'field' => 'rid',
  421. ),
  422. );
  423. $data['role']['table']['default_relationship'] = array(
  424. 'node' => array(
  425. 'table' => 'node',
  426. 'field' => 'uid',
  427. ),
  428. 'node_revision' => array(
  429. 'table' => 'node_revision',
  430. 'field' => 'uid',
  431. ),
  432. );
  433. // 'permission' table.
  434. $data['role_permission']['table']['group'] = t('User');
  435. $data['role_permission']['table']['join'] = array(
  436. // Directly links to users table.
  437. 'users' => array(
  438. 'left_table' => 'users_roles',
  439. 'left_field' => 'rid',
  440. 'field' => 'rid',
  441. ),
  442. );
  443. $data['role_permission']['permission'] = array(
  444. 'title' => t('Permission'),
  445. 'help' => t('The user permissions.'),
  446. 'field' => array(
  447. 'handler' => 'views_handler_field_user_permissions',
  448. 'no group by' => TRUE,
  449. ),
  450. 'filter' => array(
  451. 'handler' => 'views_handler_filter_user_permissions',
  452. ),
  453. );
  454. // ----------------------------------------------------------------------
  455. // 'authmap' table.
  456. $data['authmap']['table']['group'] = t('User');
  457. $data['authmap']['table']['join'] = array(
  458. // Directly links to users table.
  459. 'users' => array(
  460. 'left_field' => 'uid',
  461. 'field' => 'uid',
  462. ),
  463. );
  464. $data['authmap']['table']['default_relationship'] = array(
  465. 'node' => array(
  466. 'table' => 'node',
  467. 'field' => 'uid',
  468. ),
  469. 'node_revision' => array(
  470. 'table' => 'node_revision',
  471. 'field' => 'uid',
  472. ),
  473. );
  474. $data['authmap']['aid'] = array(
  475. 'title' => t('Authmap ID'),
  476. 'help' => t('The Authmap ID.'),
  477. 'field' => array(
  478. 'handler' => 'views_handler_field_numeric',
  479. ),
  480. 'filter' => array(
  481. 'handler' => 'views_handler_filter_numeric',
  482. 'numeric' => TRUE,
  483. ),
  484. 'argument' => array(
  485. 'handler' => 'views_handler_argument_numeric',
  486. 'numeric' => TRUE,
  487. ),
  488. );
  489. $data['authmap']['authname'] = array(
  490. 'title' => t('Authentication name'),
  491. 'help' => t('The unique authentication name.'),
  492. 'field' => array(
  493. 'handler' => 'views_handler_field',
  494. ),
  495. 'filter' => array(
  496. 'handler' => 'views_handler_filter_string',
  497. ),
  498. 'argument' => array(
  499. 'handler' => 'views_handler_argument_string',
  500. ),
  501. );
  502. $data['authmap']['module'] = array(
  503. 'title' => t('Authentication module'),
  504. 'help' => t('The name of the module managing the authentication entry.'),
  505. 'field' => array(
  506. 'handler' => 'views_handler_field',
  507. ),
  508. 'filter' => array(
  509. 'handler' => 'views_handler_filter_string',
  510. ),
  511. 'argument' => array(
  512. 'handler' => 'views_handler_argument_string',
  513. ),
  514. );
  515. return $data;
  516. }
  517. /**
  518. * Implements hook_views_plugins().
  519. */
  520. function user_views_plugins() {
  521. return array(
  522. // This just tells our themes are elsewhere.
  523. 'module' => 'views',
  524. 'row' => array(
  525. 'user' => array(
  526. 'title' => t('User'),
  527. 'help' => t('Display the user with standard user view.'),
  528. 'handler' => 'views_plugin_row_user_view',
  529. // Only works with 'users' as base.
  530. 'base' => array('users'),
  531. 'uses options' => TRUE,
  532. 'type' => 'normal',
  533. 'help topic' => 'style-users',
  534. ),
  535. ),
  536. 'argument default' => array(
  537. 'user' => array(
  538. 'title' => t('User ID from URL'),
  539. 'handler' => 'views_plugin_argument_default_user',
  540. // Not necessary for most modules.
  541. 'path' => drupal_get_path('module', 'views') . '/modules/user',
  542. ),
  543. 'current_user' => array(
  544. 'title' => t('User ID from logged in user'),
  545. 'handler' => 'views_plugin_argument_default_current_user',
  546. // Not necessary for most modules.
  547. 'path' => drupal_get_path('module', 'views') . '/modules/user',
  548. ),
  549. ),
  550. 'argument validator' => array(
  551. 'user' => array(
  552. 'title' => t('User'),
  553. 'handler' => 'views_plugin_argument_validate_user',
  554. // Not necessary for most modules.
  555. 'path' => drupal_get_path('module', 'views') . '/modules/user',
  556. ),
  557. ),
  558. );
  559. }
  560. /**
  561. * Allow replacement of current userid so we can cache these queries.
  562. */
  563. function user_views_query_substitutions($view) {
  564. global $user;
  565. return array('***CURRENT_USER***' => intval($user->uid));
  566. }