| [ Index ] |
PHP Cross Reference of Drupal 6 (gatewave) |
[Summary view] [Print] [Text view]
1 <?php 2 // $Id: project_release.views.inc,v 1.13 2009/12/01 09:19:32 dww Exp $ 3 4 /** 5 * @file 6 * Provide views data and handlers for project_release.module. 7 */ 8 9 /** 10 * Implementation of hook_views_data(). 11 * 12 * Exposes all fields to the views system. 13 */ 14 function project_release_views_data() { 15 $data = array(); 16 // ---------------------------------------------------------------- 17 // project_projectss table 18 19 // Define the base group of this table. Fields that don't 20 // have a group defined will go into this field by default. 21 $data['project_release_nodes']['table']['group'] = t('Project release'); 22 23 $data['project_release_nodes']['table']['join'] = array( 24 'node' => array( 25 'left_field' => 'nid', 26 'field' => 'nid', 27 ), 28 ); 29 30 // nid 31 $data['project_release_nodes']['nid'] = array( 32 'title' => t('Release node'), 33 'help' => t('The node ID of the release node.'), 34 'relationship' => array( 35 'help' => t('Add a relationship to gain access to more node data for releases.'), 36 'base' => 'node', 37 'handler' => 'views_handler_relationship', 38 'label' => t('Release node'), 39 ), 40 ); 41 42 // pid 43 $data['project_release_nodes']['pid'] = array( 44 'title' => t('Pid'), 45 'help' => t('The node ID of the project node a release is tied to.'), 46 'field' => array( 47 'handler' => 'views_handler_field_node', 48 'click sortable' => TRUE, 49 ), 50 // Information for accepting a pid as an argument 51 'argument' => array( 52 'handler' => 'views_handler_argument_node_nid', 53 'name field' => 'title', 54 'numeric' => TRUE, 55 'validate type' => 'nid', 56 ), 57 // Information for accepting a pid as a filter 58 'filter' => array( 59 'handler' => 'views_handler_filter_numeric', 60 ), 61 'relationship' => array( 62 'base' => 'node', 63 'handler' => 'views_handler_relationship', 64 'label' => t('Project node'), 65 ), 66 ); 67 // Add a relationship for information and filters about supported releases. 68 $data['project_release_nodes']['supported_releases_rel'] = array( 69 'title' => t('Supported releases'), 70 'help' => t('Create a relationship to more information about supported releases.'), 71 'real field' => 'pid', 72 'relationship' => array( 73 'base' => 'project_release_supported_versions', 74 'relationship field' => 'pid', 75 'handler' => 'project_release_handler_relationship_supported_versions', 76 'label' => t('supported versions'), 77 ), 78 ); 79 80 // version 81 $data['project_release_nodes']['version'] = array( 82 'title' => t('Version string'), 83 'help' => t('The full version string of a release.'), 84 'field' => array( 85 'handler' => 'views_handler_field_node', 86 'click sortable' => TRUE, 87 ), 88 'sort' => array( 89 'handler' => 'views_handler_sort', 90 ), 91 'filter' => array( 92 'handler' => 'views_handler_filter_string', 93 ), 94 'argument' => array( 95 'handler' => 'views_handler_argument_string', 96 ), 97 ); 98 99 // tag 100 $data['project_release_nodes']['tag'] = array( 101 'title' => t('Tag'), 102 'help' => t('The tag associated with a release.'), 103 'field' => array( 104 'handler' => 'views_handler_field_node', 105 'click sortable' => TRUE, 106 ), 107 'sort' => array( 108 'handler' => 'views_handler_sort', 109 ), 110 'filter' => array( 111 'handler' => 'views_handler_filter_string', 112 ), 113 'argument' => array( 114 'handler' => 'views_handler_argument_string', 115 ), 116 ); 117 118 // Custom field for a list of files attached to a release. 119 $data['project_release_nodes']['files'] = array( 120 'title' => t('Project release files'), 121 'help' => t('All files attached to a release node.'), 122 'real field' => 'nid', 123 'field' => array( 124 'handler' => 'project_release_handler_field_files', 125 ), 126 // @TODO: filter 127 'relationship' => array( 128 'title' => t('Release files'), 129 'help' => t('Add a relationship to gain access to more file data for files attached to release nodes. Note that this relationship will cause duplicate nodes if there are multiple files attached to the release.'), 130 'relationship table' => 'project_release_file', 131 'relationship field' => 'fid', 132 'base' => 'files', 133 'field' => 'fid', 134 'handler' => 'views_handler_relationship', 135 'label' => t('Release files'), 136 ), 137 ); 138 139 // Custom field for aggregate file timestamp 140 $data['project_release_nodes']['file_timestamp'] = array( 141 'title' => t('File timestamp'), 142 'help' => t('The maximum or minimum timestamp for any files attached to this release.'), 143 'real field' => 'nid', 144 'field' => array( 145 'handler' => 'project_release_handler_field_release_file_timestamp', 146 'click sortable' => FALSE, 147 ), 148 ); 149 150 // rebuild 151 $data['project_release_nodes']['rebuild'] = array( 152 'title' => t('Development snapshot'), 153 'help' => t('Is this release a development snapshot (rebuilds automatically).'), 154 'field' => array( 155 'handler' => 'views_handler_field_boolean', 156 'click sortable' => TRUE, 157 ), 158 'filter' => array( 159 'handler' => 'views_handler_filter_boolean_operator', 160 'type' => 'yes-no', 161 ), 162 'sort' => array( 163 'handler' => 'views_handler_sort', 164 ), 165 'argument' => array( 166 'handler' => 'views_handler_argument_numeric', 167 ), 168 ); 169 170 // verison_major 171 $data['project_release_nodes']['version_major'] = array( 172 'title' => t('Major version'), 173 'help' => t('The major version number for this release.'), 174 'field' => array( 175 'handler' => 'views_handler_field_numeric', 176 'click sortable' => TRUE, 177 ), 178 'filter' => array( 179 'handler' => 'views_handler_filter_numeric', 180 ), 181 'sort' => array( 182 'handler' => 'views_handler_sort', 183 ), 184 'argument' => array( 185 'handler' => 'views_handler_argument_numeric', 186 ), 187 ); 188 189 // verison_minor 190 $data['project_release_nodes']['version_minor'] = array( 191 'title' => t('Minor version'), 192 'help' => t('The minor version number for this release.'), 193 'field' => array( 194 'handler' => 'views_handler_field_numeric', 195 'click sortable' => TRUE, 196 ), 197 'filter' => array( 198 'handler' => 'views_handler_filter_numeric', 199 ), 200 'sort' => array( 201 'handler' => 'views_handler_sort', 202 ), 203 'argument' => array( 204 'handler' => 'views_handler_argument_numeric', 205 ), 206 ); 207 208 // verison_patch 209 $data['project_release_nodes']['version_patch'] = array( 210 'title' => t('Patch version'), 211 'help' => t('The patch version number for this release.'), 212 'field' => array( 213 'handler' => 'views_handler_field_numeric', 214 'click sortable' => TRUE, 215 ), 216 'filter' => array( 217 'handler' => 'views_handler_filter_numeric', 218 ), 219 'sort' => array( 220 'handler' => 'views_handler_sort', 221 ), 222 'argument' => array( 223 'handler' => 'views_handler_argument_numeric', 224 ), 225 ); 226 227 // version_extra 228 $data['project_release_nodes']['version_extra'] = array( 229 'title' => t('Extra version info'), 230 'help' => t("The 'extra' version information for this release (e.g. 'alpha1', 'beta3', etc."), 231 'field' => array( 232 'handler' => 'views_handler_field', 233 'click sortable' => TRUE, 234 ), 235 'filter' => array( 236 'handler' => 'views_handler_filter_string', 237 ), 238 'sort' => array( 239 'handler' => 'views_handler_sort', 240 ), 241 'argument' => array( 242 'handler' => 'views_handler_argument_string', 243 ), 244 ); 245 246 // version_extra_weight 247 $data['project_release_nodes']['version_extra_weight'] = array( 248 'title' => t('Extra version weight code'), 249 'help' => t('The weight sorting number for the extra version information for this release.'), 250 'field' => array( 251 'handler' => 'views_handler_field_numeric', 252 'click sortable' => TRUE, 253 ), 254 'filter' => array( 255 'handler' => 'views_handler_filter_numeric', 256 ), 257 'sort' => array( 258 'handler' => 'views_handler_sort', 259 ), 260 'argument' => array( 261 'handler' => 'views_handler_argument_numeric', 262 ), 263 ); 264 265 // version_api_tid 266 if (module_exists('taxonomy')) { 267 $vocabulary = taxonomy_vocabulary_load(_project_release_get_api_vid()); 268 $data['project_release_nodes']['version_api_tid'] = array( 269 // We don't want to use the vocabulary name in the title here, since 270 // that will show up in the labels of exported views and get confusing. 271 'title' => t('API compatibility term'), 272 'help' => t('The term from the %vocabulary vocabulary for this release.', array('%vocabulary' => $vocabulary->name)), 273 'field' => array( 274 'handler' => 'project_release_handler_field_version_api_tid', 275 'click sortable' => TRUE, 276 ), 277 'filter' => array( 278 'handler' => 'project_release_handler_filter_version_api_tid', 279 ), 280 'sort' => array( 281 // TODO: Add a custom handler that can sort by taxonomy weight? 282 'handler' => 'views_handler_sort', 283 ), 284 'argument' => array( 285 'handler' => 'views_handler_argument_numeric', 286 ), 287 'relationship' => array( 288 'base' => 'term_data', 289 'field' => 'tid', 290 // Again, dynamic labels here make exported views yucky. 291 'label' => t('API compatibility term'), 292 ), 293 ); 294 } 295 296 // security_update 297 $data['project_release_nodes']['security_update'] = array( 298 'title' => t('Security update'), 299 'help' => t('Is this release a security update.'), 300 'field' => array( 301 'handler' => 'views_handler_field_boolean', 302 'click sortable' => TRUE, 303 ), 304 'filter' => array( 305 'handler' => 'views_handler_filter_boolean_operator', 306 'type' => 'yes-no', 307 ), 308 'sort' => array( 309 'handler' => 'views_handler_sort', 310 ), 311 'argument' => array( 312 'handler' => 'views_handler_argument_numeric', 313 ), 314 ); 315 316 // update_status 317 $data['project_release_nodes']['update_status'] = array( 318 'title' => t('Update status'), 319 'help' => t('The status of this release for updates.'), 320 'field' => array( 321 'handler' => 'project_release_handler_field_release_update_status', 322 'click sortable' => TRUE, 323 ), 324 'sort' => array( 325 'handler' => 'views_handler_sort', 326 ), 327 'filter' => array( 328 'handler' => 'project_release_handler_filter_release_update_status', 329 ), 330 'argument' => array( 331 'handler' => 'views_handler_argument_numeric', 332 ), 333 ); 334 335 $data['project_release_file']['table']['group'] = t('Project release'); 336 $data['project_release_file']['table']['join'] = array( 337 'node' => array( 338 'left_field' => 'nid', 339 'field' => 'nid', 340 ), 341 'files' => array( 342 'left_field' => 'fid', 343 'field' => 'fid', 344 ), 345 ); 346 $data['project_release_file']['fid'] = array( 347 'title' => t('Release file ID'), 348 'relationship' => array( 349 'base' => 'files', 350 'handler' => 'views_handler_relationship', 351 'label' => t('Release file'), 352 'help' => t('Add a relationship to gain access to file data for the files attached to releases.'), 353 ), 354 ); 355 $data['project_release_file']['file_name'] = array( 356 'real field' => 'fid', 357 'title' => t('Release file name'), 358 'help' => t('The name of a file attached to a release node.'), 359 'field' => array( 360 'handler' => 'project_release_handler_field_release_file_name', 361 'click sortable' => TRUE, 362 ), 363 ); 364 $data['project_release_file']['nid'] = array( 365 'title' => t('Release node ID'), 366 'relationship' => array( 367 'base' => 'node', 368 'handler' => 'views_handler_relationship', 369 'label' => t('Release node'), 370 'help' => t('Add a relationship to gain access to node data for the releases that files are attached to.'), 371 ), 372 ); 373 $data['project_release_file']['filehash'] = array( 374 'title' => t('Release file hash'), 375 'help' => t('The file hash (e.g. md5) of a file attached to a release node.'), 376 'field' => array( 377 'handler' => 'views_handler_field', 378 'click sortable' => TRUE, 379 ), 380 'filter' => array( 381 'handler' => 'views_handler_filter_string', 382 ), 383 'sort' => array( 384 'handler' => 'views_handler_sort', 385 ), 386 'argument' => array( 387 'handler' => 'views_handler_argument_string', 388 ), 389 ); 390 391 $data['project_release_supported_versions']['table']['group'] = t('Project release'); 392 // We only want to JOIN on this table via explicit relationships. 393 394 $data['project_release_supported_versions']['nid'] = array( 395 'title' => t('Project ID'), 396 'help' => t('Project node ID of the supported version information.'), 397 'field' => array( 398 'handler' => 'views_handler_field_node', 399 'click sortable' => TRUE, 400 ), 401 'argument' => array( 402 'handler' => 'views_handler_argument_node_nid', 403 'name field' => 'title', 404 'numeric' => TRUE, 405 'validate type' => 'nid', 406 ), 407 'relationship' => array( 408 'base' => 'node', 409 'handler' => 'views_handler_relationship', 410 'label' => t('Project node'), 411 ), 412 ); 413 $data['project_release_supported_versions']['supported'] = array( 414 'title' => t('Supported'), 415 'help' => t('Is the specific branch supported by a given project.'), 416 'field' => array( 417 'handler' => 'views_handler_field_boolean', 418 'click sortable' => TRUE, 419 ), 420 'filter' => array( 421 'handler' => 'views_handler_filter_boolean_operator', 422 'type' => 'yes-no', 423 ), 424 ); 425 $data['project_release_supported_versions']['recommended'] = array( 426 'title' => t('Recommended branch'), 427 'help' => t('Is the specific branch the recommended branch for a given project.'), 428 'field' => array( 429 'handler' => 'views_handler_field_boolean', 430 'click sortable' => TRUE, 431 ), 432 'filter' => array( 433 'handler' => 'views_handler_filter_boolean_operator', 434 'type' => 'yes-no', 435 ), 436 ); 437 $data['project_release_supported_versions']['snapshot'] = array( 438 'title' => t('Show snapshot'), 439 'help' => t('Show development snapshot releases from a branch.'), 440 'field' => array( 441 'handler' => 'views_handler_field_boolean', 442 'click sortable' => TRUE, 443 ), 444 'filter' => array( 445 'handler' => 'views_handler_filter_boolean_operator', 446 'type' => 'yes-no', 447 ), 448 ); 449 $data['project_release_supported_versions']['recommended_release'] = array( 450 'title' => t('Recommended release'), 451 'help' => t('The recommended release from a specific branch of a project.'), 452 'field' => array( 453 'handler' => 'views_handler_field_node', 454 'click sortable' => TRUE, 455 ), 456 'argument' => array( 457 'handler' => 'views_handler_argument_node_nid', 458 'name field' => 'title', 459 'numeric' => TRUE, 460 'validate type' => 'nid', 461 ), 462 'relationship' => array( 463 'base' => 'node', 464 'handler' => 'views_handler_relationship', 465 'label' => t('Recommended release node'), 466 ), 467 ); 468 $data['project_release_supported_versions']['latest_release'] = array( 469 'title' => t('Latest release'), 470 'help' => t('The latest release from a specific branch of a project.'), 471 'field' => array( 472 'handler' => 'views_handler_field_node', 473 'click sortable' => TRUE, 474 ), 475 'argument' => array( 476 'handler' => 'views_handler_argument_node_nid', 477 'name field' => 'title', 478 'numeric' => TRUE, 479 'validate type' => 'nid', 480 ), 481 'relationship' => array( 482 'base' => 'node', 483 'handler' => 'views_handler_relationship', 484 'label' => t('Latest release node'), 485 ), 486 ); 487 $data['project_release_supported_versions']['latest_security_release'] = array( 488 'title' => t('Latest security release'), 489 'help' => t('The latest security release from a specific branch of a project (if any).'), 490 'field' => array( 491 'handler' => 'views_handler_field_node', 492 'click sortable' => TRUE, 493 ), 494 'argument' => array( 495 'handler' => 'views_handler_argument_node_nid', 496 'name field' => 'title', 497 'numeric' => TRUE, 498 'validate type' => 'nid', 499 ), 500 'relationship' => array( 501 'base' => 'node', 502 'handler' => 'views_handler_relationship', 503 'label' => t('Latest security release node'), 504 ), 505 ); 506 $data['project_release_supported_versions']['release_type'] = array( 507 'title' => t('Latest or recommended release'), 508 'help' => t('Filter based on the latest or recommended release from a specific branch of a project.'), 509 'filter' => array( 510 'handler' => 'project_release_handler_filter_release_node_nid', 511 ), 512 ); 513 514 return $data; 515 } 516 517 /** 518 * Implementation of hook_views_data_alter(). 519 */ 520 function project_release_views_data_alter(&$data) { 521 // Project release version relationship. 522 $data['node']['project_release_version'] = array( 523 'group' => t('Project release'), 524 'title' => t('Version'), 525 'help' => t('Create a relationship from a project node to a project release node.'), 526 'real field' => 'nid', 527 'relationship' => array( 528 'handler' => 'project_release_handler_relationship_project_project_release_node', 529 'base' => 'node', 530 'field' => 'nid', 531 'label' => t('release'), 532 ), 533 ); 534 535 // Add a relationship for releases associated with a given project. 536 $data['node']['project_release_rel'] = array( 537 'group' => t('Project'), 538 'title' => t('Releases'), 539 'help' => t('Create a relationship to more information about all releases for a project.'), 540 'real field' => 'nid', 541 'relationship' => array( 542 'base' => 'project_release_nodes', 543 'base field' => 'pid', 544 'relationship field' => 'nid', 545 'handler' => 'views_handler_relationship', 546 'label' => t('releases'), 547 ), 548 ); 549 550 // Add a relationship for information and filters about supported releases. 551 $data['project_projects']['supported_releases_rel'] = array( 552 'group' => t('Project'), 553 'title' => t('Supported releases'), 554 'help' => t('Create a relationship to more information about supported releases.'), 555 'real field' => 'nid', 556 'relationship' => array( 557 'base' => 'project_release_supported_versions', 558 'base field' => 'nid', 559 'relationship field' => 'nid', 560 'handler' => 'views_handler_relationship', 561 'label' => t('supported versions'), 562 ), 563 ); 564 565 /** 566 * Special fields 567 * 568 * These fields are not not stored in the tables created by project_release 569 * and are provided as a way to provide information that would be unavailable 570 * using other fields provided by this module or by views itself. 571 */ 572 // changed field 573 $data['node']['project_release_most_recent_release'] = array( 574 'group' => t('Project release'), 575 'title' => t('Most recent release changed time'), 576 'help' => t('The date the most recent project release node associated with a project was last updated.'), 577 'real field' => 'changed', 578 'field' => array( 579 'handler' => 'project_release_handler_field_most_recent_release', 580 'click sortable' => TRUE, 581 ), 582 'sort' => array( 583 'handler' => 'project_release_handler_sort_most_recent_release', 584 ), 585 'filter' => array( 586 'handler' => 'views_handler_filter_date', // @TODO 587 ), 588 ); 589 590 // API version compatability term field. 591 // We could just use the Taxonomy: Term ID in taxonomy.views.inc except 592 // that we want to only display terms the admin has indicated as being 593 // active on the Project release module settings page. 594 $data['term_node']['project_release_api_version'] = array( 595 'group' => t('Project release'), 596 'title' => t('API compatability term'), 597 'help' => t('The project release API compatability term (version).'), 598 'field' => array( 599 'title' => t('All terms'), 600 'help' => t('Display all taxonomy terms associated with a node.'), 601 'handler' => 'views_handler_field_term_node_tid', 602 ), 603 'argument' => array( 604 'handler' => 'views_handler_argument_term_node_tid', 605 'name table' => 'term_data', 606 'name field' => 'name', 607 'empty name field' => t('Uncategorized'), 608 'numeric' => TRUE, 609 ), 610 'filter' => array( 611 'field' => 'tid', 612 'handler' => 'project_release_handler_filter_project_release_api_version', 613 'hierarchy table' => 'term_hierarchy', 614 'numeric' => TRUE, 615 ), 616 ); 617 618 // Project download table field 619 $data['node']['download_table'] = array( 620 'group' => t('Project release'), 621 'field' => array( 622 'title' => t('Download table'), 623 'help' => t('A project release download table for the project.'), 624 'handler' => 'project_release_handler_field_download_table', 625 'format' => 'format', 626 ), 627 ); 628 } 629 630 /** 631 * Implementation of hook_views_handlers(). 632 */ 633 function project_release_views_handlers() { 634 return array( 635 'info' => array( 636 'path' => drupal_get_path('module', 'project_release') .'/views/handlers', 637 ), 638 'handlers' => array( 639 'project_release_handler_field_download_table' => array( 640 'parent' => 'views_handler_field', 641 ), 642 'project_release_handler_field_files' => array( 643 'parent' => 'views_handler_field_prerender_list', 644 ), 645 'project_release_handler_field_most_recent_release' => array( 646 'parent' => 'views_handler_field_date', 647 ), 648 'project_release_handler_field_release_file_name' => array( 649 'parent' => 'views_handler_field_file', 650 ), 651 'project_release_handler_field_release_file_timestamp' => array( 652 'parent' => 'views_handler_field_date', 653 ), 654 'project_release_handler_field_release_update_status' => array( 655 'parent' => 'views_handler_field', 656 ), 657 'project_release_handler_field_version_api_tid' => array( 658 'parent' => 'views_handler_field', 659 ), 660 'project_release_handler_filter_project_release_api_version' => array( 661 'parent' => 'views_handler_filter_term_node_tid', 662 ), 663 'project_release_handler_filter_release_node_nid' => array( 664 'parent' => 'views_handler_filter', 665 ), 666 'project_release_handler_filter_release_update_status' => array( 667 'parent' => 'views_handler_filter_in_operator', 668 ), 669 'project_release_handler_filter_version_api_tid' => array( 670 'parent' => 'views_handler_filter_in_operator', 671 ), 672 'project_release_handler_relationship_project_project_release_node' => array( 673 'parent' => 'views_handler_relationship', 674 ), 675 'project_release_handler_relationship_supported_versions' => array( 676 'parent' => 'views_handler_relationship', 677 ), 678 'project_release_handler_sort_most_recent_release' => array( 679 'parent' => 'views_handler_sort_date', 680 ), 681 ), 682 ); 683 } 684 685 /** 686 * Implement hook_views_plugins(). 687 */ 688 function project_release_views_plugins() { 689 $path = drupal_get_path('module', 'project_release') . '/views/plugins'; 690 $views_path = drupal_get_path('module', 'views'); 691 return array( 692 'style' => array( 693 'project_release_table' => array( 694 'title' => t('Project release table'), 695 'help' => t('Table with colored rows depending on release update status.'), 696 'handler' => 'project_release_table_plugin_style', 697 'parent' => 'table', 698 'path' => $path, 699 'theme' => 'views_view_table', 700 'theme file' => 'theme.inc', 701 'theme path' => "$views_path/theme", 702 'uses row plugin' => FALSE, 703 'uses fields' => TRUE, 704 'uses options' => TRUE, 705 'type' => 'normal', 706 ), 707 ), 708 ); 709 } 710
title
Description
Body
title
Description
Body
title
Description
Body
title
Body
| Generated: Thu Mar 24 11:18:33 2011 | Cross-referenced by PHPXref 0.7 |