From 95735999abd88de7a33caa42d647ea1a4e4c2fe0 Mon Sep 17 00:00:00 2001 From: bcweaver <brianweaver@gmail.com> Date: Tue, 23 Oct 2018 17:33:26 -0400 Subject: [PATCH] Removing unused 'eva' module --- composer.json | 1 - composer.lock | 65 +--- vendor/composer/installed.json | 65 ---- web/modules/eva/LICENSE.txt | 339 ------------------ web/modules/eva/README.txt | 53 --- web/modules/eva/composer.json | 5 - web/modules/eva/eva.info.yml | 13 - web/modules/eva/eva.module | 212 ----------- .../eva/src/Plugin/views/display/Eva.php | 297 --------------- .../eva-display-entity-view.html.twig | 80 ----- 10 files changed, 1 insertion(+), 1129 deletions(-) delete mode 100644 web/modules/eva/LICENSE.txt delete mode 100644 web/modules/eva/README.txt delete mode 100644 web/modules/eva/composer.json delete mode 100644 web/modules/eva/eva.info.yml delete mode 100644 web/modules/eva/eva.module delete mode 100644 web/modules/eva/src/Plugin/views/display/Eva.php delete mode 100644 web/modules/eva/templates/eva-display-entity-view.html.twig diff --git a/composer.json b/composer.json index 81ef4207ef..51805c6963 100644 --- a/composer.json +++ b/composer.json @@ -97,7 +97,6 @@ "drupal/entity_browser": "1.4", "drupal/entity_embed": "1.0-beta2", "drupal/entity_reference_revisions": "1.3", - "drupal/eva": "1.1", "drupal/externalauth": "1.0", "drupal/features": "3.8", "drupal/field_group": "1.0-rc6", diff --git a/composer.lock b/composer.lock index f904ad081f..7ebb18b27d 100644 --- a/composer.lock +++ b/composer.lock @@ -4,7 +4,7 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#composer-lock-the-lock-file", "This file is @generated automatically" ], - "content-hash": "f32369d0ccb26271c95d1232f56efce9", + "content-hash": "202dec5eb6d642a92aca8f90148e17d2", "packages": [ { "name": "alchemy/zippy", @@ -3514,69 +3514,6 @@ "source": "http://cgit.drupalcode.org/entity_reference_revisions" } }, - { - "name": "drupal/eva", - "version": "1.1.0", - "source": { - "type": "git", - "url": "https://git.drupal.org/project/eva", - "reference": "8.x-1.1" - }, - "dist": { - "type": "zip", - "url": "https://ftp.drupal.org/files/projects/eva-8.x-1.1.zip", - "reference": "8.x-1.1", - "shasum": "4f5a51144c547c15c6a7f226c4a9e316947309e7" - }, - "require": { - "drupal/core": "*" - }, - "type": "drupal-module", - "extra": { - "branch-alias": { - "dev-1.x": "1.x-dev" - }, - "drupal": { - "version": "8.x-1.1", - "datestamp": "1503938043", - "security-coverage": { - "status": "covered", - "message": "Covered by Drupal's security advisory policy" - } - } - }, - "notification-url": "https://packages.drupal.org/8/downloads", - "license": [ - "GPL-2.0-or-later" - ], - "authors": [ - { - "name": "Crell", - "homepage": "https://www.drupal.org/user/26398" - }, - { - "name": "ahebrank", - "homepage": "https://www.drupal.org/user/3190515" - }, - { - "name": "axel.rutz", - "homepage": "https://www.drupal.org/user/229048" - }, - { - "name": "eaton", - "homepage": "https://www.drupal.org/user/16496" - }, - { - "name": "mkadin", - "homepage": "https://www.drupal.org/user/1093166" - } - ], - "description": "Attach a view to an entity", - "homepage": "https://www.drupal.org/project/eva", - "support": { - "source": "http://cgit.drupalcode.org/eva" - } - }, { "name": "drupal/externalauth", "version": "1.0.0", diff --git a/vendor/composer/installed.json b/vendor/composer/installed.json index be0f51ed36..852a05ec99 100644 --- a/vendor/composer/installed.json +++ b/vendor/composer/installed.json @@ -3619,71 +3619,6 @@ "source": "http://cgit.drupalcode.org/entity_reference_revisions" } }, - { - "name": "drupal/eva", - "version": "1.1.0", - "version_normalized": "1.1.0.0", - "source": { - "type": "git", - "url": "https://git.drupal.org/project/eva", - "reference": "8.x-1.1" - }, - "dist": { - "type": "zip", - "url": "https://ftp.drupal.org/files/projects/eva-8.x-1.1.zip", - "reference": "8.x-1.1", - "shasum": "4f5a51144c547c15c6a7f226c4a9e316947309e7" - }, - "require": { - "drupal/core": "*" - }, - "type": "drupal-module", - "extra": { - "branch-alias": { - "dev-1.x": "1.x-dev" - }, - "drupal": { - "version": "8.x-1.1", - "datestamp": "1503938043", - "security-coverage": { - "status": "covered", - "message": "Covered by Drupal's security advisory policy" - } - } - }, - "installation-source": "dist", - "notification-url": "https://packages.drupal.org/8/downloads", - "license": [ - "GPL-2.0-or-later" - ], - "authors": [ - { - "name": "Crell", - "homepage": "https://www.drupal.org/user/26398" - }, - { - "name": "ahebrank", - "homepage": "https://www.drupal.org/user/3190515" - }, - { - "name": "axel.rutz", - "homepage": "https://www.drupal.org/user/229048" - }, - { - "name": "eaton", - "homepage": "https://www.drupal.org/user/16496" - }, - { - "name": "mkadin", - "homepage": "https://www.drupal.org/user/1093166" - } - ], - "description": "Attach a view to an entity", - "homepage": "https://www.drupal.org/project/eva", - "support": { - "source": "http://cgit.drupalcode.org/eva" - } - }, { "name": "drupal/externalauth", "version": "1.0.0", diff --git a/web/modules/eva/LICENSE.txt b/web/modules/eva/LICENSE.txt deleted file mode 100644 index d159169d10..0000000000 --- a/web/modules/eva/LICENSE.txt +++ /dev/null @@ -1,339 +0,0 @@ - GNU GENERAL PUBLIC LICENSE - Version 2, June 1991 - - Copyright (C) 1989, 1991 Free Software Foundation, Inc., - 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - Everyone is permitted to copy and distribute verbatim copies - of this license document, but changing it is not allowed. - - Preamble - - The licenses for most software are designed to take away your -freedom to share and change it. By contrast, the GNU General Public -License is intended to guarantee your freedom to share and change free -software--to make sure the software is free for all its users. This -General Public License applies to most of the Free Software -Foundation's software and to any other program whose authors commit to -using it. (Some other Free Software Foundation software is covered by -the GNU Lesser General Public License instead.) You can apply it to -your programs, too. - - When we speak of free software, we are referring to freedom, not -price. Our General Public Licenses are designed to make sure that you -have the freedom to distribute copies of free software (and charge for -this service if you wish), that you receive source code or can get it -if you want it, that you can change the software or use pieces of it -in new free programs; and that you know you can do these things. - - To protect your rights, we need to make restrictions that forbid -anyone to deny you these rights or to ask you to surrender the rights. -These restrictions translate to certain responsibilities for you if you -distribute copies of the software, or if you modify it. - - For example, if you distribute copies of such a program, whether -gratis or for a fee, you must give the recipients all the rights that -you have. You must make sure that they, too, receive or can get the -source code. And you must show them these terms so they know their -rights. - - We protect your rights with two steps: (1) copyright the software, and -(2) offer you this license which gives you legal permission to copy, -distribute and/or modify the software. - - Also, for each author's protection and ours, we want to make certain -that everyone understands that there is no warranty for this free -software. If the software is modified by someone else and passed on, we -want its recipients to know that what they have is not the original, so -that any problems introduced by others will not reflect on the original -authors' reputations. - - Finally, any free program is threatened constantly by software -patents. We wish to avoid the danger that redistributors of a free -program will individually obtain patent licenses, in effect making the -program proprietary. To prevent this, we have made it clear that any -patent must be licensed for everyone's free use or not licensed at all. - - The precise terms and conditions for copying, distribution and -modification follow. - - GNU GENERAL PUBLIC LICENSE - TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION - - 0. This License applies to any program or other work which contains -a notice placed by the copyright holder saying it may be distributed -under the terms of this General Public License. The "Program", below, -refers to any such program or work, and a "work based on the Program" -means either the Program or any derivative work under copyright law: -that is to say, a work containing the Program or a portion of it, -either verbatim or with modifications and/or translated into another -language. (Hereinafter, translation is included without limitation in -the term "modification".) Each licensee is addressed as "you". - -Activities other than copying, distribution and modification are not -covered by this License; they are outside its scope. The act of -running the Program is not restricted, and the output from the Program -is covered only if its contents constitute a work based on the -Program (independent of having been made by running the Program). -Whether that is true depends on what the Program does. - - 1. You may copy and distribute verbatim copies of the Program's -source code as you receive it, in any medium, provided that you -conspicuously and appropriately publish on each copy an appropriate -copyright notice and disclaimer of warranty; keep intact all the -notices that refer to this License and to the absence of any warranty; -and give any other recipients of the Program a copy of this License -along with the Program. - -You may charge a fee for the physical act of transferring a copy, and -you may at your option offer warranty protection in exchange for a fee. - - 2. You may modify your copy or copies of the Program or any portion -of it, thus forming a work based on the Program, and copy and -distribute such modifications or work under the terms of Section 1 -above, provided that you also meet all of these conditions: - - a) You must cause the modified files to carry prominent notices - stating that you changed the files and the date of any change. - - b) You must cause any work that you distribute or publish, that in - whole or in part contains or is derived from the Program or any - part thereof, to be licensed as a whole at no charge to all third - parties under the terms of this License. - - c) If the modified program normally reads commands interactively - when run, you must cause it, when started running for such - interactive use in the most ordinary way, to print or display an - announcement including an appropriate copyright notice and a - notice that there is no warranty (or else, saying that you provide - a warranty) and that users may redistribute the program under - these conditions, and telling the user how to view a copy of this - License. (Exception: if the Program itself is interactive but - does not normally print such an announcement, your work based on - the Program is not required to print an announcement.) - -These requirements apply to the modified work as a whole. If -identifiable sections of that work are not derived from the Program, -and can be reasonably considered independent and separate works in -themselves, then this License, and its terms, do not apply to those -sections when you distribute them as separate works. But when you -distribute the same sections as part of a whole which is a work based -on the Program, the distribution of the whole must be on the terms of -this License, whose permissions for other licensees extend to the -entire whole, and thus to each and every part regardless of who wrote it. - -Thus, it is not the intent of this section to claim rights or contest -your rights to work written entirely by you; rather, the intent is to -exercise the right to control the distribution of derivative or -collective works based on the Program. - -In addition, mere aggregation of another work not based on the Program -with the Program (or with a work based on the Program) on a volume of -a storage or distribution medium does not bring the other work under -the scope of this License. - - 3. You may copy and distribute the Program (or a work based on it, -under Section 2) in object code or executable form under the terms of -Sections 1 and 2 above provided that you also do one of the following: - - a) Accompany it with the complete corresponding machine-readable - source code, which must be distributed under the terms of Sections - 1 and 2 above on a medium customarily used for software interchange; or, - - b) Accompany it with a written offer, valid for at least three - years, to give any third party, for a charge no more than your - cost of physically performing source distribution, a complete - machine-readable copy of the corresponding source code, to be - distributed under the terms of Sections 1 and 2 above on a medium - customarily used for software interchange; or, - - c) Accompany it with the information you received as to the offer - to distribute corresponding source code. (This alternative is - allowed only for noncommercial distribution and only if you - received the program in object code or executable form with such - an offer, in accord with Subsection b above.) - -The source code for a work means the preferred form of the work for -making modifications to it. For an executable work, complete source -code means all the source code for all modules it contains, plus any -associated interface definition files, plus the scripts used to -control compilation and installation of the executable. However, as a -special exception, the source code distributed need not include -anything that is normally distributed (in either source or binary -form) with the major components (compiler, kernel, and so on) of the -operating system on which the executable runs, unless that component -itself accompanies the executable. - -If distribution of executable or object code is made by offering -access to copy from a designated place, then offering equivalent -access to copy the source code from the same place counts as -distribution of the source code, even though third parties are not -compelled to copy the source along with the object code. - - 4. You may not copy, modify, sublicense, or distribute the Program -except as expressly provided under this License. Any attempt -otherwise to copy, modify, sublicense or distribute the Program is -void, and will automatically terminate your rights under this License. -However, parties who have received copies, or rights, from you under -this License will not have their licenses terminated so long as such -parties remain in full compliance. - - 5. You are not required to accept this License, since you have not -signed it. However, nothing else grants you permission to modify or -distribute the Program or its derivative works. These actions are -prohibited by law if you do not accept this License. Therefore, by -modifying or distributing the Program (or any work based on the -Program), you indicate your acceptance of this License to do so, and -all its terms and conditions for copying, distributing or modifying -the Program or works based on it. - - 6. Each time you redistribute the Program (or any work based on the -Program), the recipient automatically receives a license from the -original licensor to copy, distribute or modify the Program subject to -these terms and conditions. You may not impose any further -restrictions on the recipients' exercise of the rights granted herein. -You are not responsible for enforcing compliance by third parties to -this License. - - 7. If, as a consequence of a court judgment or allegation of patent -infringement or for any other reason (not limited to patent issues), -conditions are imposed on you (whether by court order, agreement or -otherwise) that contradict the conditions of this License, they do not -excuse you from the conditions of this License. If you cannot -distribute so as to satisfy simultaneously your obligations under this -License and any other pertinent obligations, then as a consequence you -may not distribute the Program at all. For example, if a patent -license would not permit royalty-free redistribution of the Program by -all those who receive copies directly or indirectly through you, then -the only way you could satisfy both it and this License would be to -refrain entirely from distribution of the Program. - -If any portion of this section is held invalid or unenforceable under -any particular circumstance, the balance of the section is intended to -apply and the section as a whole is intended to apply in other -circumstances. - -It is not the purpose of this section to induce you to infringe any -patents or other property right claims or to contest validity of any -such claims; this section has the sole purpose of protecting the -integrity of the free software distribution system, which is -implemented by public license practices. Many people have made -generous contributions to the wide range of software distributed -through that system in reliance on consistent application of that -system; it is up to the author/donor to decide if he or she is willing -to distribute software through any other system and a licensee cannot -impose that choice. - -This section is intended to make thoroughly clear what is believed to -be a consequence of the rest of this License. - - 8. If the distribution and/or use of the Program is restricted in -certain countries either by patents or by copyrighted interfaces, the -original copyright holder who places the Program under this License -may add an explicit geographical distribution limitation excluding -those countries, so that distribution is permitted only in or among -countries not thus excluded. In such case, this License incorporates -the limitation as if written in the body of this License. - - 9. The Free Software Foundation may publish revised and/or new versions -of the General Public License from time to time. Such new versions will -be similar in spirit to the present version, but may differ in detail to -address new problems or concerns. - -Each version is given a distinguishing version number. If the Program -specifies a version number of this License which applies to it and "any -later version", you have the option of following the terms and conditions -either of that version or of any later version published by the Free -Software Foundation. If the Program does not specify a version number of -this License, you may choose any version ever published by the Free Software -Foundation. - - 10. If you wish to incorporate parts of the Program into other free -programs whose distribution conditions are different, write to the author -to ask for permission. For software which is copyrighted by the Free -Software Foundation, write to the Free Software Foundation; we sometimes -make exceptions for this. Our decision will be guided by the two goals -of preserving the free status of all derivatives of our free software and -of promoting the sharing and reuse of software generally. - - NO WARRANTY - - 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY -FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN -OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES -PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED -OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF -MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS -TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE -PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, -REPAIR OR CORRECTION. - - 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING -WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR -REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, -INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING -OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED -TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY -YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER -PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE -POSSIBILITY OF SUCH DAMAGES. - - END OF TERMS AND CONDITIONS - - How to Apply These Terms to Your New Programs - - If you develop a new program, and you want it to be of the greatest -possible use to the public, the best way to achieve this is to make it -free software which everyone can redistribute and change under these terms. - - To do so, attach the following notices to the program. It is safest -to attach them to the start of each source file to most effectively -convey the exclusion of warranty; and each file should have at least -the "copyright" line and a pointer to where the full notice is found. - - <one line to give the program's name and a brief idea of what it does.> - Copyright (C) <year> <name of author> - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License along - with this program; if not, write to the Free Software Foundation, Inc., - 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. - -Also add information on how to contact you by electronic and paper mail. - -If the program is interactive, make it output a short notice like this -when it starts in an interactive mode: - - Gnomovision version 69, Copyright (C) year name of author - Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. - This is free software, and you are welcome to redistribute it - under certain conditions; type `show c' for details. - -The hypothetical commands `show w' and `show c' should show the appropriate -parts of the General Public License. Of course, the commands you use may -be called something other than `show w' and `show c'; they could even be -mouse-clicks or menu items--whatever suits your program. - -You should also get your employer (if you work as a programmer) or your -school, if any, to sign a "copyright disclaimer" for the program, if -necessary. Here is a sample; alter the names: - - Yoyodyne, Inc., hereby disclaims all copyright interest in the program - `Gnomovision' (which makes passes at compilers) written by James Hacker. - - <signature of Ty Coon>, 1 April 1989 - Ty Coon, President of Vice - -This General Public License does not permit incorporating your program into -proprietary programs. If your program is a subroutine library, you may -consider it more useful to permit linking proprietary applications with the -library. If this is what you want to do, use the GNU Lesser General -Public License instead of this License. diff --git a/web/modules/eva/README.txt b/web/modules/eva/README.txt deleted file mode 100644 index 2b9b14a304..0000000000 --- a/web/modules/eva/README.txt +++ /dev/null @@ -1,53 +0,0 @@ -ABOUT - -"Eva" is short for "Entity Views Attachment;" it provides a Views display -plugin that allows the output of a View to be attached to the content of any -Drupal entity. The body of a node or comment, the profile of a user account, -or the listing page for a Taxonomy term are all examples of entity content. - -The placement of the view in the entity's content can be reordered on the -"Field Display" administration page for that entity, like other fields added -using the Field UI module. - -In addition, the unique ID of the entity the view is attached to -- as well as -any tokens generated from that entity -- can be passed in as arguments to the -view. For example, you might make a View that displays posts with an 'Author -ID' argument, then use Eva to attach the view to the User entity type. When a -user profile is displayed, the User's ID will be passed in as the argument to -the view magically. - -That's right: magically. - -Eva is powered by witchcraft. - -HISTORY - -Eva was originally developed by Jeff Eaton but never released. Larry Garfield -later cleaned it up and added the CCK integration, then released it under the -name 'Views Attach.' Endless confusion followed, as everyone thought it would -allow them to attach things to Views. Then Jeff Eaton refactored it for Drupal -7. Then they renamed it again, because they didn't want to write an upgrade -path. - -Why *isn't* there an upgrade path? This version is built on top of Drupal 7's -Entity API as a single unified Views Display, while the D6 version juggled -NodeAPI and hook_user. While there's definitely feature parity, enough has -changed that cleanly upgrading a view from Views Attach 6.x-2.0 is essentially -impossible. They feel bad about it, and would accept patches that implemented -a well-tested upgrade path, but don't have the bandwidth to implement it -ourselves. - -REQUIREMENTS - -- Drupal 8 - -AUTHOR AND CREDIT - -Original development: Jeff Eaton "eaton" (http://drupal.org/user/16496) - -Actual D6 release, and version 2.0: Larry Garfield "Crell" -(http://drupal.org/user/26398) - -D7 port and tomfoolery: Jeff Eaton "eaton" (http://drupal.org/user/16496) - -D8 port started by Mike Kadin "mkadin" (https://www.drupal.org/u/mkadin) and rounded out by Andy Hebrank "ahebrank" (https://www.drupal.org/u/ahebrank) diff --git a/web/modules/eva/composer.json b/web/modules/eva/composer.json deleted file mode 100644 index 8bb6230eff..0000000000 --- a/web/modules/eva/composer.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "name": "drupal/eva", - "type": "drupal-module", - "description": "Attach a view to an entity" -} diff --git a/web/modules/eva/eva.info.yml b/web/modules/eva/eva.info.yml deleted file mode 100644 index be3f0daee7..0000000000 --- a/web/modules/eva/eva.info.yml +++ /dev/null @@ -1,13 +0,0 @@ -name: Eva -description: Provides a Views display type that can be attached to entities. -# core: 8.x -type: module -dependencies: - - views -package: Views - -# Information added by Drupal.org packaging script on 2017-03-25 -version: '8.x-1.1' -core: '8.x' -project: 'eva' -datestamp: 1490483285 diff --git a/web/modules/eva/eva.module b/web/modules/eva/eva.module deleted file mode 100644 index ca95237f2e..0000000000 --- a/web/modules/eva/eva.module +++ /dev/null @@ -1,212 +0,0 @@ -<?php - -/** - * @file - * Module implementing EVA extra field and views display - */ - -use Drupal\views\Views; -use Drupal\Core\Entity\EntityInterface; -use Drupal\Core\Entity\Display\EntityViewDisplayInterface; -use Drupal\Component\Utility\Xss; -use Drupal\Component\Utility\Html; - -/** - * Implements hook_entity_extra_field_info() to add the view fields to relevant entities - */ -function eva_entity_extra_field_info() { - $extra = array(); - $views = eva_get_views(); - - foreach ($views as $entity => $data) { - foreach ($data as $view) { - // if no bundles are set, apply to all bundles - // per current 7.x behavior (http://cgit.drupalcode.org/eva/tree/eva.module#n25) - $bundles = !empty($view['bundles'])? $view['bundles'] : array_keys(\Drupal::service('entity_type.bundle.info')->getBundleInfo($entity)); - foreach ($bundles as $bundle) { - $extra[$entity][$bundle]['display'][$view['name'] . '_' . $view['display']] = array( - 'label' => (empty($view['title'])) ? $view['name'] : $view['title'], - 'description' => $view['title'], - 'weight' => 10, - ); - // Provide a separate extra field for the exposed form if there is any. - if ($view['uses exposed']) { - $extra[$entity][$bundle]['display'][$view['name'] . '_' . $view['display'] . '_' . 'form'] = array( - 'label' => ((empty($view['title'])) ? $view['name'] : $view['title']) . ' (' . t('Exposed form') . ')', - 'description' => t('The exposed filter form of the view.'), - 'weight' => 9, - ); - } - } - } - } - - return $extra; -} - - -/** - * Get a list of views and displays attached to speficic entities. - * - * This function will cache its results into the views cache, so it gets - * cleared by Views appropriately. - * - * @param $type - * The entity type we want to retrieve views for. If NULL is - * specified, views for all entity types will be returned. - * @param $reset - * Force a rebuild of the data. - * @return - * An array of view name/display name values, or an empty array(). - */ -function eva_get_views($type = NULL, $reset = FALSE) { - // Build and cache the data, both in the DB and statically. - $views = Views::getApplicableViews('uses_hook_entity_view'); - - $used_views = array(); - foreach ($views as $data) { - list($view_name, $display_id) = $data; - $view = Views::getView($view_name); - - // Initialize handlers, to determine if the view uses exposed filters. - $view->setDisplay($display_id); - $view->initHandlers(); - $display = $view->display_handler; - - $view_entity = $display->getOption('entity_type'); - $used_views[$view_entity][] = array( - 'name' => $view_name, - 'id' => $view->storage->get('id'), - 'title' => 'EVA: ' . $view->storage->get('label') . ' - ' . $view->storage->getDisplay($display_id)['display_title'], - 'display' => $display_id, - 'bundles' => $display->getOption('bundles'), - 'uses exposed' => $display->usesExposed(), - ); - $view->destroy(); - } - - if (!is_null($type)) { - return isset($used_views[$type]) ? $used_views[$type] : array(); - } - return $used_views; -} - -/** - * Implements hook_entity_view() - */ -function eva_entity_view(array &$build, EntityInterface $entity, EntityViewDisplayInterface $display, $view_mode) { - $type = $entity->getEntityTypeId(); - $views = eva_get_views($type); - - foreach ($views as $info) { - $longname = $info['name'] .'_'. $info['display']; - - if ($display->getComponent($longname)) { - if ($view = Views::getView($info['name'])) { - $view->setDisplay($info['display']); - if ($view->access($info['display'])) { - // no parent for current_entity; it's used by the display's preExecute - $view->current_entity = $entity; - - // exposed form - if ($info['uses exposed']) { - $view->initHandlers(); - $exposed_form = $view->display_handler->getPlugin('exposed_form'); - $build[$longname . '_form'] = $exposed_form->renderExposedForm(TRUE); - } - - $element = $view->buildRenderable($info['display']); - - if (!empty($element)) { - $build[$longname][] = $element; - } - } - } - } - } -} - - -/** - * Get view arguments array from string that contains tokens - * - * @param $string - * The token string defined by the view. - * @param $type - * The token type. - * @param $object - * The object being used for replacement data (typically a node). - * @return - * An array of argument values. - */ -function eva_get_arguments_from_token_string($string, $type, $object) { - $args = trim($string); - if (empty($args)) { - return array(); - } - $args = \Drupal::token()->replace($args, array($type => $object), array('sanitize' => FALSE)); - return explode('/', $args); -} - -/** - * Implements hook_modules_enabled(). - */ -function eva_modules_enabled($modules) { - _eva_reset(); -} - -/** - * Implements hook_modules_disabled(). - */ -function eva_modules_disabled($modules) { - _eva_reset(); -} - -/** - * Cache clearing helper function - * Reset the static cache in case any of the disabled modules - * implemented an eva view - */ -function _eva_reset() { - drupal_static_reset('eva_get_views'); - \Drupal::cache('render')->deleteAll(); -} - -/** - * Clear the field cache when view cache clears - * this is intended to fire when a View is saved - * hopefully it won't kick off an endless cache clearing loop - */ -function eva_views_invalidate_cache() { - // see https://www.drupal.org/node/2281897 - \Drupal::entityManager()->clearCachedFieldDefinitions(); -} - -/** - * templating preprocessing - * figure out the title and whether there's an exposed form - */ -function template_preprocess_eva_display_entity_view(&$variables) { - $view = $variables['view']; - $display = $view->display_handler; - $variables['title'] = $display->getOption('show_title') ? Xss::filterAdmin($view->getTitle()) : ''; - $variables['exposed_form_as_field'] = $display->getOption('exposed_form_as_field'); - - $id = $view->storage->id(); - $variables['css_name'] = Html::cleanCssIdentifier($id); - $variables['id'] = $id; - $variables['display_id'] = $view->current_display; - $variables['dom_id'] = $view->dom_id; - - // pull in the display class - $css_class = $view->display_handler->getOption('css_class'); - if (!empty($css_class)) { - $variables['css_class'] = preg_replace('/[^a-zA-Z0-9- ]/', '-', $css_class); - $variables['attributes']['class'][] = $variables['css_class']; - } - - $variables['view_array']['#view_id'] = $view->storage->id(); - $variables['view_array']['#view_display_show_admin_links'] = $view->getShowAdminLinks(); - $variables['view_array']['#view_display_plugin_id'] = $display->getPluginId(); - views_add_contextual_links($variables['view_array'], 'view', $display->getLinkDisplay()); -} diff --git a/web/modules/eva/src/Plugin/views/display/Eva.php b/web/modules/eva/src/Plugin/views/display/Eva.php deleted file mode 100644 index 1b43fa9e41..0000000000 --- a/web/modules/eva/src/Plugin/views/display/Eva.php +++ /dev/null @@ -1,297 +0,0 @@ -<?php - -namespace Drupal\eva\Plugin\views\display; - -use Drupal\views\Plugin\views\display\DisplayPluginBase; -use Drupal\Core\Form\FormStateInterface; -use Drupal\Component\Utility\SafeMarkup; -use Drupal\Component\Utility\Html; -use Drupal\Core\Url; - -/** - * The plugin that handles an EVA display in views. - * - * - * @ingroup views_display_plugins - * - * @ViewsDisplay( - * id = "entity_view", - * title = @Translation("EVA"), - * admin = @Translation("EVA"), - * help = @Translation("Attach a view to an entity"), - * theme = "eva_display_entity_view", - * uses_menu_links = FALSE, - * uses_hook_entity_view = TRUE, - * ) - */ - -class Eva extends DisplayPluginBase { - - /** - * Overrides \Drupal\views\Plugin\views\display\PathPluginBase::defineOptions(). - */ - protected function defineOptions() { - $options = parent::defineOptions(); - - $options['entity_type']['default'] = ''; - $options['bundles']['default'] = array(); - $options['argument_mode']['default'] = 'id'; - $options['default_argument']['default'] = ''; - - - $options['title']['default'] = ''; - $options['defaults']['default']['title'] = FALSE; - - return $options; - } - - /** - * Overrides \Drupal\views\Plugin\views\display\DisplayPluginBase::optionsSummary(). - */ - public function optionsSummary(&$categories, &$options) { - parent::optionsSummary($categories, $options); - - $categories['entity_view'] = array( - 'title' => $this->t('Entity content settings'), - 'column' => 'second', - 'build' => array( - '#weight' => -10, - ), - ); - - if ($entity_type = $this->getOption('entity_type')) { - $entity_info = \Drupal::entityManager()->getDefinition($entity_type); - $type_name = $entity_info->get('label'); - - $bundle_names = array(); - $bundle_info = \Drupal::entityManager()->getBundleInfo($entity_type); - foreach ($this->getOption('bundles') as $bundle) { - $bundle_names[] = $bundle_info[$bundle]['label']; - } - } - - $options['entity_type'] = array( - 'category' => 'entity_view', - 'title' => $this->t('Entity type'), - 'value' => empty($type_name) ? $this->t('None') : $type_name, - ); - - $options['bundles'] = array( - 'category' => 'entity_view', - 'title' => $this->t('Bundles'), - 'value' => empty($bundle_names) ? $this->t('All') : implode(', ', $bundle_names), - ); - - $argument_mode = $this->getOption('argument_mode'); - $options['arguments'] = array( - 'category' => 'entity_view', - 'title' => $this->t('Arguments'), - 'value' => empty($argument_mode) ? $this->t('None') : SafeMarkup::checkPlain($argument_mode), - ); - - $options['show_title'] = array( - 'category' => 'entity_view', - 'title' => $this->t('Show title'), - 'value' => $this->getOption('show_title') ? $this->t('Yes') : $this->t('No'), - ); - } - - /** - * Overrides \Drupal\views\Plugin\views\display\callbackPluginBase::buildOptionsForm(). - */ - public function buildOptionsForm(&$form, FormStateInterface $form_state) { - parent::buildOptionsForm($form, $form_state); - - $entity_info = \Drupal::entityManager()->getDefinitions(); - $entity_type = $this->getOption('entity_type'); - - switch ($form_state->get('section')) { - case 'entity_type': - foreach ($entity_info as $type => $info) { - // is this a content/front-facing entity? - if ($info instanceof \Drupal\Core\Entity\ContentEntityType) { - $entity_names[$type] = $info->get('label'); - } - } - - $form['#title'] .= $this->t('Entity type'); - $form['entity_type'] = array( - '#type' => 'radios', - '#required' => TRUE, - '#validated' => TRUE, - '#title' => $this->t('Attach this display to the following entity type'), - '#options' => $entity_names, - '#default_value' => $this->getOption('entity_type'), - ); - break; - - case 'bundles': - $options = array(); - foreach (\Drupal::entityManager()->getBundleInfo($entity_type) as $bundle => $info) { - $options[$bundle] = $info['label']; - } - $form['#title'] .= $this->t('Bundles'); - $form['bundles'] = array( - '#type' => 'checkboxes', - '#title' => $this->t('Attach this display to the following bundles. If no bundles are selected, the display will be attached to all.'), - '#options' => $options, - '#default_value' => $this->getOption('bundles'), - ); - break; - - case 'arguments': - $form['#title'] .= $this->t('Arguments'); - $default = $this->getOption('argument_mode'); - $options = array( - 'None' => $this->t("No special handling"), - 'id' => $this->t("Use the ID of the entity the view is attached to"), - 'token' => $this->t("Use tokens from the entity the view is attached to"), - ); - - $form['argument_mode'] = array( - '#type' => 'radios', - '#title' => $this->t("How should this display populate the view's arguments?"), - '#options' => $options, - '#default_value' => $default, - ); - - $form['token'] = array( - '#type' => 'fieldset', - '#title' => $this->t('Token replacement'), - '#collapsible' => TRUE, - '#states' => array( - 'visible' => array( - ':input[name=argument_mode]' => array('value' => 'token'), - ), - ), - ); - - $form['token']['default_argument'] = array( - '#title' => $this->t('Arguments'), - '#type' => 'textfield', - '#default_value' => $this->getOption('default_argument'), - '#description' => $this->t('You may use token replacement to provide arguments based on the current entity. Separate arguments with "/".'), - ); - break; - - case 'show_title': - $form['#title'] .= $this->t('Show title'); - $form['show_title'] = array( - '#type' => 'checkbox', - '#title' => $this->t('Show the title of the view above the attached view.'), - '#default_value' => $this->getOption('show_title'), - ); - break; - } - } - - public function validateOptionsForm(&$form, FormStateInterface $form_state) { - switch ($form_state->get('section')) { - case 'entity_type': - if (empty($form_state->getValue('entity_type'))) { - $form_state->setError($form['entity_type'], $this->t('Must select an entity')); - } - break; - } - } - - public function validate() { - $errors = array(); - if (empty($this->getOption('entity_type'))) { - $errors[] = $this->t('Display "@display" must be attached to an entity.', array('@display' => $this->display['display_title'])); - } - return $errors; - } - - public function submitOptionsForm(&$form, FormStateInterface $form_state) { - parent::submitOptionsForm($form, $form_state); - - switch ($form_state->get('section')) { - case 'entity_type': - $new_entity = $form_state->getValue('entity_type'); - $old_entity = $this->getOption('entity_type'); - $this->setOption('entity_type', $new_entity); - - if ($new_entity != $old_entity) { - // Each entity has its own list of bundles and view modes. If there's - // only one on the new type, we can select it automatically. Otherwise - // we need to wipe the options and start over. - $new_entity_info = \Drupal::entityManager()->getDefinition($new_entity); - $new_bundles_keys = \Drupal::entityManager()->getBundleInfo($new_entity); - $new_bundles = array(); - if (count($new_bundles_keys) == 1) { - $new_bundles[] = $new_bundles_keys[0]; - } - $this->setOption('bundles', $new_bundles); - } - break; - case 'bundles': - $this->setOption('bundles', array_values(array_filter($form_state->getValue('bundles')))); - break; - case 'arguments': - $this->setOption('argument_mode', $form_state->getValue('argument_mode')); - if ($form_state->getValue('argument_mode') == 'token') { - $this->setOption('default_argument', $form_state->getValue('default_argument')); - } - else { - $this->setOption('default_argument', NULL); - } - break; - case 'show_title': - $this->setOption('show_title', $form_state->getValue('show_title')); - break; - } - } - - public function preExecute() { - parent::preExecute(); - - if (isset($this->view->current_entity)) { - $entity = $this->view->current_entity; - $entity_type = $this->view->display_handler->getOption('entity_type'); - $entity_info = \Drupal::entityManager()->getDefinition($entity_type); - - $arg_mode = $this->view->display_handler->getOption('argument_mode'); - if ($arg_mode == 'token') { - if ($token_string = $this->view->display_handler->getOption('default_argument')) { - // Now do the token replacement. - $token_values = eva_get_arguments_from_token_string($token_string, $entity_type, $entity); - $new_args = array(); - // We have to be careful to only replace arguments that have tokens. - foreach ($token_values as $key => $value) { - $new_args[Html::escape($key)] = Html::escape($value); - } - - $this->view->args = $new_args; - } - } - elseif ($arg_mode == 'id') { - $this->view->args = array($entity->id()); - } - } - } - - public function getPath() { - if (isset($this->view->current_entity)) { - $uri = $this->view->current_entity->url(); - if ($uri) { - $uri['options']['absolute'] = TRUE; - return url($uri['path'], $uri['options']); - } - } - return parent::getPath(); - } - - function execute() { - // Prior to this being called, the $view should already be set to this - // display, and arguments should be set on the view. - if (!isset($this->view->override_path)) { - $this->view->override_path = \Drupal::service('path.current')->getPath(); - } - - $element = $this->view->render(); - if (!empty($this->view->result) || $this->getOption('empty') || !empty($this->view->style_plugin->definition['even empty'])) { - return $element; - } - } -} diff --git a/web/modules/eva/templates/eva-display-entity-view.html.twig b/web/modules/eva/templates/eva-display-entity-view.html.twig deleted file mode 100644 index d9a0da9f5f..0000000000 --- a/web/modules/eva/templates/eva-display-entity-view.html.twig +++ /dev/null @@ -1,80 +0,0 @@ -{# -/** - * @file - * eva theme implementation for main view template. - * - * the main difference between this and the canonical template - * is the exposed form is removed (because it is displayed as - * a separate field) - * - * Available variables: - * - attributes: Remaining HTML attributes for the element. - * - css_name: A css-safe version of the view name. - * - css_class: The user-specified classes names, if any. - * - header: The optional header. - * - footer: The optional footer. - * - rows: The results of the view query, if any. - * - empty: The content to display if there are no rows. - * - pager: The optional pager next/prev links to display. - * - exposed: Exposed widget form/info to display. - * - feed_icons: Optional feed icons to display. - * - more: An optional link to the next page of results. - * - title: Title of the view, only used when displaying in the admin preview. - * - title_prefix: Additional output populated by modules, intended to be - * displayed in front of the view title. - * - title_suffix: Additional output populated by modules, intended to be - * displayed after the view title. - * - attachment_before: An optional attachment view to be displayed before the - * view content. - * - attachment_after: An optional attachment view to be displayed after the - * view content. - * - dom_id: Unique id for every view being printed to give unique class for - * Javascript. - * - * @see template_preprocess_views_view() - * - * @ingroup themeable - */ -#} -{% - set classes = [ - 'view', - 'view-eva', - 'view-' ~ id|clean_class, - 'view-id-' ~ id, - 'view-display-id-' ~ display_id, - dom_id ? 'js-view-dom-id-' ~ dom_id, - ] -%} -<div{{ attributes.addClass(classes) }}> - {{ title_prefix }} - {% if title %} - {{ title }} - {% endif %} - {{ title_suffix }} - - {% if header %} - <header> - {{ header }} - </header> - {% endif %} - - {{ attachment_before }} - - {{ rows }} - {{ empty }} - {{ pager }} - - {{ attachment_after }} - {{ more }} - - {% if footer %} - <footer> - {{ footer }} - </footer> - {% endif %} - - {% if feed_icons %} - {{ feed_icons }} - {% endif %} -</div> -- GitLab