From: Chanel W. <Cha...@ya...> - 2013-02-26 21:15:30
|
Hi, I'm extending VuFind/ILS/Logic/Holds. I don't see anything in the VuFind module.config.php that I should add/customize for my local module. The reason this is of particular concern is because VuFind isn't picking up my local Holds.php with the extended class (I even tried putting gibberish in it and VuFind isn't barfing). I've deleted the cached Objects directory and restarted VuFind. What else do I need to do? Thanks, chanel Chanel Wheeler Library Network Programmer/Analyst Yavapai Library Network 1120 Commerce Dr. Prescott, AZ 86305 Phone: (928) 442-5741 cha...@ya...<mailto:cha...@ya...> Open a help desk ticket<mailto:he...@yl...> |
From: Demian K. <dem...@vi...> - 2013-02-26 21:52:09
|
Right now, there's no extension point for the hold logic code. There are a couple of approaches: 1.) We could define the hold logic as a service in one of the configured plugin managers, and then have everything that uses it pull it from there; then you would be able to configure a custom hold logic class just like other things. 2.) We could add setters to classes that rely on the hold logic -- so, for example, the SolrMarc record driver could have setHoldLogic/getHoldLogic methods, with getHoldLogic constructing a default \VuFind\ILS\Logic\Holds object if no override was set. Then using an alternative class would be a matter of creating a custom factory for the SolrMarc class that injects a different Holds logic object. Does that make sense? I think #1 might be a bit less work for you to deal with, but it makes our huge configuration yet another notch larger. Option #2 requires less default configuration, but it makes the custom configuration a little less convenient. Let me know if you have thoughts/preferences, and I can help create the infrastructure you need to plug in your custom class if that would be useful. (Hopefully I'll have a few minutes tomorrow). - Demian ________________________________ From: Chanel Wheeler [Cha...@ya...] Sent: Tuesday, February 26, 2013 4:14 PM To: vufind-tech (vuf...@li...) Subject: [VuFind-Tech] VuFind 2 - extending class from file not in module.config.php Hi, I’m extending VuFind/ILS/Logic/Holds. I don’t see anything in the VuFind module.config.php that I should add/customize for my local module. The reason this is of particular concern is because VuFind isn’t picking up my local Holds.php with the extended class (I even tried putting gibberish in it and VuFind isn’t barfing). I’ve deleted the cached Objects directory and restarted VuFind. What else do I need to do? Thanks, chanel Chanel Wheeler Library Network Programmer/Analyst Yavapai Library Network 1120 Commerce Dr. Prescott, AZ 86305 Phone: (928) 442-5741 cha...@ya...<mailto:cha...@ya...> Open a help desk ticket<mailto:he...@yl...> |
From: Chanel W. <Cha...@ya...> - 2013-02-26 22:30:28
|
I only understand the options you're offering at a high level so I can't comprehend what the full set of ramifications would be for either choice. I'll answer in this fashion: the solution should offer the most versatility in affecting how/when/what hold-related links appear. For example, we don't do recalls - patrons place holds on anything that's holdable and wait their turn. Generally we offer title holds, but we switch to copy holds for volume-/issue- based items (title holds and copy holds are mutually exclusive). So does one of the options achieve maximum versatility better than the other? (If you go with option #2, I can definitely say I'm going to need some help with the infrastructure. :) ) chanel From: Demian Katz [mailto:dem...@vi...] Sent: Tuesday, February 26, 2013 2:51 PM To: Chanel Wheeler; vufind-tech (vuf...@li...) Subject: RE: [VuFind-Tech] VuFind 2 - extending class from file not in module.config.php Right now, there's no extension point for the hold logic code. There are a couple of approaches: 1.) We could define the hold logic as a service in one of the configured plugin managers, and then have everything that uses it pull it from there; then you would be able to configure a custom hold logic class just like other things. 2.) We could add setters to classes that rely on the hold logic -- so, for example, the SolrMarc record driver could have setHoldLogic/getHoldLogic methods, with getHoldLogic constructing a default \VuFind\ILS\Logic\Holds object if no override was set. Then using an alternative class would be a matter of creating a custom factory for the SolrMarc class that injects a different Holds logic object. Does that make sense? I think #1 might be a bit less work for you to deal with, but it makes our huge configuration yet another notch larger. Option #2 requires less default configuration, but it makes the custom configuration a little less convenient. Let me know if you have thoughts/preferences, and I can help create the infrastructure you need to plug in your custom class if that would be useful. (Hopefully I'll have a few minutes tomorrow). - Demian ________________________________ From: Chanel Wheeler [Cha...@ya...] Sent: Tuesday, February 26, 2013 4:14 PM To: vufind-tech (vuf...@li...<mailto:vuf...@li...>) Subject: [VuFind-Tech] VuFind 2 - extending class from file not in module.config.php Hi, I'm extending VuFind/ILS/Logic/Holds. I don't see anything in the VuFind module.config.php that I should add/customize for my local module. The reason this is of particular concern is because VuFind isn't picking up my local Holds.php with the extended class (I even tried putting gibberish in it and VuFind isn't barfing). I've deleted the cached Objects directory and restarted VuFind. What else do I need to do? Thanks, chanel Chanel Wheeler Library Network Programmer/Analyst Yavapai Library Network 1120 Commerce Dr. Prescott, AZ 86305 Phone: (928) 442-5741 cha...@ya...<mailto:cha...@ya...> Open a help desk ticket<mailto:he...@yl...> |
From: Demian K. <dem...@vi...> - 2013-02-27 00:29:43
|
I suspect that option #1 is probably the right way to go -- it gives you one clear place to plug in replacement logic and have it just work. Neither solution is really more versatile than the other, but #2 seems more potentially error-prone. I'll look into implementing this tomorrow. - Demian ________________________________ From: Chanel Wheeler [Cha...@ya...] Sent: Tuesday, February 26, 2013 5:29 PM To: vufind-tech (vuf...@li...) Subject: Re: [VuFind-Tech] VuFind 2 - extending class from file not in module.config.php I only understand the options you’re offering at a high level so I can’t comprehend what the full set of ramifications would be for either choice. I’ll answer in this fashion: the solution should offer the most versatility in affecting how/when/what hold-related links appear. For example, we don’t do recalls – patrons place holds on anything that’s holdable and wait their turn. Generally we offer title holds, but we switch to copy holds for volume-/issue- based items (title holds and copy holds are mutually exclusive). So does one of the options achieve maximum versatility better than the other? (If you go with option #2, I can definitely say I’m going to need some help with the infrastructure. :) ) chanel From: Demian Katz [mailto:dem...@vi...] Sent: Tuesday, February 26, 2013 2:51 PM To: Chanel Wheeler; vufind-tech (vuf...@li...) Subject: RE: [VuFind-Tech] VuFind 2 - extending class from file not in module.config.php Right now, there's no extension point for the hold logic code. There are a couple of approaches: 1.) We could define the hold logic as a service in one of the configured plugin managers, and then have everything that uses it pull it from there; then you would be able to configure a custom hold logic class just like other things. 2.) We could add setters to classes that rely on the hold logic -- so, for example, the SolrMarc record driver could have setHoldLogic/getHoldLogic methods, with getHoldLogic constructing a default \VuFind\ILS\Logic\Holds object if no override was set. Then using an alternative class would be a matter of creating a custom factory for the SolrMarc class that injects a different Holds logic object. Does that make sense? I think #1 might be a bit less work for you to deal with, but it makes our huge configuration yet another notch larger. Option #2 requires less default configuration, but it makes the custom configuration a little less convenient. Let me know if you have thoughts/preferences, and I can help create the infrastructure you need to plug in your custom class if that would be useful. (Hopefully I'll have a few minutes tomorrow). - Demian ________________________________ From: Chanel Wheeler [Cha...@ya...] Sent: Tuesday, February 26, 2013 4:14 PM To: vufind-tech (vuf...@li...<mailto:vuf...@li...>) Subject: [VuFind-Tech] VuFind 2 - extending class from file not in module.config.php Hi, I’m extending VuFind/ILS/Logic/Holds. I don’t see anything in the VuFind module.config.php that I should add/customize for my local module. The reason this is of particular concern is because VuFind isn’t picking up my local Holds.php with the extended class (I even tried putting gibberish in it and VuFind isn’t barfing). I’ve deleted the cached Objects directory and restarted VuFind. What else do I need to do? Thanks, chanel Chanel Wheeler Library Network Programmer/Analyst Yavapai Library Network 1120 Commerce Dr. Prescott, AZ 86305 Phone: (928) 442-5741 cha...@ya...<mailto:cha...@ya...> Open a help desk ticket<mailto:he...@yl...> |
From: Demian K. <dem...@vi...> - 2013-02-27 16:42:32
|
Okay, after some frantic refactoring this morning, I've got services set up for the hold logic: http://vufind.git.sourceforge.net/git/gitweb.cgi?p=vufind/vufind;a=commitdiff;h=8eeca0c5f15ec00ba7cdf13de85beaa6de4002ed You can now override the 'VuFind\ILSHoldLogic' and/or 'VuFind\ILSTitleHoldLogic' services to inject custom behavior. Let me know if you have any questions/problems... and apologies in advance if it's a bit painful merging up to the current master. There are a lot of parts in motion right now. - Demian From: Chanel Wheeler [mailto:Cha...@ya...] Sent: Tuesday, February 26, 2013 5:29 PM To: vufind-tech (vuf...@li...) Subject: Re: [VuFind-Tech] VuFind 2 - extending class from file not in module.config.php I only understand the options you're offering at a high level so I can't comprehend what the full set of ramifications would be for either choice. I'll answer in this fashion: the solution should offer the most versatility in affecting how/when/what hold-related links appear. For example, we don't do recalls - patrons place holds on anything that's holdable and wait their turn. Generally we offer title holds, but we switch to copy holds for volume-/issue- based items (title holds and copy holds are mutually exclusive). So does one of the options achieve maximum versatility better than the other? (If you go with option #2, I can definitely say I'm going to need some help with the infrastructure. :) ) chanel From: Demian Katz [mailto:dem...@vi...] Sent: Tuesday, February 26, 2013 2:51 PM To: Chanel Wheeler; vufind-tech (vuf...@li...) Subject: RE: [VuFind-Tech] VuFind 2 - extending class from file not in module.config.php Right now, there's no extension point for the hold logic code. There are a couple of approaches: 1.) We could define the hold logic as a service in one of the configured plugin managers, and then have everything that uses it pull it from there; then you would be able to configure a custom hold logic class just like other things. 2.) We could add setters to classes that rely on the hold logic -- so, for example, the SolrMarc record driver could have setHoldLogic/getHoldLogic methods, with getHoldLogic constructing a default \VuFind\ILS\Logic\Holds object if no override was set. Then using an alternative class would be a matter of creating a custom factory for the SolrMarc class that injects a different Holds logic object. Does that make sense? I think #1 might be a bit less work for you to deal with, but it makes our huge configuration yet another notch larger. Option #2 requires less default configuration, but it makes the custom configuration a little less convenient. Let me know if you have thoughts/preferences, and I can help create the infrastructure you need to plug in your custom class if that would be useful. (Hopefully I'll have a few minutes tomorrow). - Demian ________________________________ From: Chanel Wheeler [Cha...@ya...] Sent: Tuesday, February 26, 2013 4:14 PM To: vufind-tech (vuf...@li...<mailto:vuf...@li...>) Subject: [VuFind-Tech] VuFind 2 - extending class from file not in module.config.php Hi, I'm extending VuFind/ILS/Logic/Holds. I don't see anything in the VuFind module.config.php that I should add/customize for my local module. The reason this is of particular concern is because VuFind isn't picking up my local Holds.php with the extended class (I even tried putting gibberish in it and VuFind isn't barfing). I've deleted the cached Objects directory and restarted VuFind. What else do I need to do? Thanks, chanel Chanel Wheeler Library Network Programmer/Analyst Yavapai Library Network 1120 Commerce Dr. Prescott, AZ 86305 Phone: (928) 442-5741 cha...@ya...<mailto:cha...@ya...> Open a help desk ticket<mailto:he...@yl...> |
From: Chanel W. <Cha...@ya...> - 2013-03-04 17:10:40
|
I haven't been able to test the hold logic (soon, I hope). Once I got the VuFind base code up to date, I ceased to able to log in when I tried to place a hold. Web Services successfully logs me in from the ILS's perspective but module/VuFind/src/VuFind/Auth/Manager.php is throwing a 'authentication_error_technical' in the login function. My auth method is set to ILS in config.ini. Any idea what might be going on? Thanks, chanel From: Demian Katz [mailto:dem...@vi...] Sent: Wednesday, February 27, 2013 9:42 AM To: Chanel Wheeler; vufind-tech (vuf...@li...) Subject: RE: [VuFind-Tech] VuFind 2 - extending class from file not in module.config.php Okay, after some frantic refactoring this morning, I've got services set up for the hold logic: http://vufind.git.sourceforge.net/git/gitweb.cgi?p=vufind/vufind;a=commitdiff;h=8eeca0c5f15ec00ba7cdf13de85beaa6de4002ed You can now override the 'VuFind\ILSHoldLogic' and/or 'VuFind\ILSTitleHoldLogic' services to inject custom behavior. Let me know if you have any questions/problems... and apologies in advance if it's a bit painful merging up to the current master. There are a lot of parts in motion right now. - Demian From: Chanel Wheeler [mailto:Cha...@ya...] Sent: Tuesday, February 26, 2013 5:29 PM To: vufind-tech (vuf...@li...<mailto:vuf...@li...>) Subject: Re: [VuFind-Tech] VuFind 2 - extending class from file not in module.config.php I only understand the options you're offering at a high level so I can't comprehend what the full set of ramifications would be for either choice. I'll answer in this fashion: the solution should offer the most versatility in affecting how/when/what hold-related links appear. For example, we don't do recalls - patrons place holds on anything that's holdable and wait their turn. Generally we offer title holds, but we switch to copy holds for volume-/issue- based items (title holds and copy holds are mutually exclusive). So does one of the options achieve maximum versatility better than the other? (If you go with option #2, I can definitely say I'm going to need some help with the infrastructure. :) ) chanel From: Demian Katz [mailto:dem...@vi...] Sent: Tuesday, February 26, 2013 2:51 PM To: Chanel Wheeler; vufind-tech (vuf...@li...<mailto:vuf...@li...>) Subject: RE: [VuFind-Tech] VuFind 2 - extending class from file not in module.config.php Right now, there's no extension point for the hold logic code. There are a couple of approaches: 1.) We could define the hold logic as a service in one of the configured plugin managers, and then have everything that uses it pull it from there; then you would be able to configure a custom hold logic class just like other things. 2.) We could add setters to classes that rely on the hold logic -- so, for example, the SolrMarc record driver could have setHoldLogic/getHoldLogic methods, with getHoldLogic constructing a default \VuFind\ILS\Logic\Holds object if no override was set. Then using an alternative class would be a matter of creating a custom factory for the SolrMarc class that injects a different Holds logic object. Does that make sense? I think #1 might be a bit less work for you to deal with, but it makes our huge configuration yet another notch larger. Option #2 requires less default configuration, but it makes the custom configuration a little less convenient. Let me know if you have thoughts/preferences, and I can help create the infrastructure you need to plug in your custom class if that would be useful. (Hopefully I'll have a few minutes tomorrow). - Demian ________________________________ From: Chanel Wheeler [Cha...@ya...] Sent: Tuesday, February 26, 2013 4:14 PM To: vufind-tech (vuf...@li...<mailto:vuf...@li...>) Subject: [VuFind-Tech] VuFind 2 - extending class from file not in module.config.php Hi, I'm extending VuFind/ILS/Logic/Holds. I don't see anything in the VuFind module.config.php that I should add/customize for my local module. The reason this is of particular concern is because VuFind isn't picking up my local Holds.php with the extended class (I even tried putting gibberish in it and VuFind isn't barfing). I've deleted the cached Objects directory and restarted VuFind. What else do I need to do? Thanks, chanel Chanel Wheeler Library Network Programmer/Analyst Yavapai Library Network 1120 Commerce Dr. Prescott, AZ 86305 Phone: (928) 442-5741 cha...@ya...<mailto:cha...@ya...> Open a help desk ticket<mailto:he...@yl...> |
From: Demian K. <dem...@vi...> - 2013-03-04 17:53:58
|
Can you share the backtrace from the exception? That might offer some clues. If you're not seeing backtraces, you need to set the VUFIND_ENV environment variable in httpd-vufind.conf to "development" in order to get more information. - Demian From: Chanel Wheeler [mailto:Cha...@ya...] Sent: Monday, March 04, 2013 11:58 AM To: vufind-tech (vuf...@li...) Subject: Re: [VuFind-Tech] VuFind 2 - extending class from file not in module.config.php I haven't been able to test the hold logic (soon, I hope). Once I got the VuFind base code up to date, I ceased to able to log in when I tried to place a hold. Web Services successfully logs me in from the ILS's perspective but module/VuFind/src/VuFind/Auth/Manager.php is throwing a 'authentication_error_technical' in the login function. My auth method is set to ILS in config.ini. Any idea what might be going on? Thanks, chanel From: Demian Katz [mailto:dem...@vi...] Sent: Wednesday, February 27, 2013 9:42 AM To: Chanel Wheeler; vufind-tech (vuf...@li...) Subject: RE: [VuFind-Tech] VuFind 2 - extending class from file not in module.config.php Okay, after some frantic refactoring this morning, I've got services set up for the hold logic: http://vufind.git.sourceforge.net/git/gitweb.cgi?p=vufind/vufind;a=commitdiff;h=8eeca0c5f15ec00ba7cdf13de85beaa6de4002ed You can now override the 'VuFind\ILSHoldLogic' and/or 'VuFind\ILSTitleHoldLogic' services to inject custom behavior. Let me know if you have any questions/problems... and apologies in advance if it's a bit painful merging up to the current master. There are a lot of parts in motion right now. - Demian From: Chanel Wheeler [mailto:Cha...@ya...] Sent: Tuesday, February 26, 2013 5:29 PM To: vufind-tech (vuf...@li...<mailto:vuf...@li...>) Subject: Re: [VuFind-Tech] VuFind 2 - extending class from file not in module.config.php I only understand the options you're offering at a high level so I can't comprehend what the full set of ramifications would be for either choice. I'll answer in this fashion: the solution should offer the most versatility in affecting how/when/what hold-related links appear. For example, we don't do recalls - patrons place holds on anything that's holdable and wait their turn. Generally we offer title holds, but we switch to copy holds for volume-/issue- based items (title holds and copy holds are mutually exclusive). So does one of the options achieve maximum versatility better than the other? (If you go with option #2, I can definitely say I'm going to need some help with the infrastructure. :) ) chanel From: Demian Katz [mailto:dem...@vi...] Sent: Tuesday, February 26, 2013 2:51 PM To: Chanel Wheeler; vufind-tech (vuf...@li...<mailto:vuf...@li...>) Subject: RE: [VuFind-Tech] VuFind 2 - extending class from file not in module.config.php Right now, there's no extension point for the hold logic code. There are a couple of approaches: 1.) We could define the hold logic as a service in one of the configured plugin managers, and then have everything that uses it pull it from there; then you would be able to configure a custom hold logic class just like other things. 2.) We could add setters to classes that rely on the hold logic -- so, for example, the SolrMarc record driver could have setHoldLogic/getHoldLogic methods, with getHoldLogic constructing a default \VuFind\ILS\Logic\Holds object if no override was set. Then using an alternative class would be a matter of creating a custom factory for the SolrMarc class that injects a different Holds logic object. Does that make sense? I think #1 might be a bit less work for you to deal with, but it makes our huge configuration yet another notch larger. Option #2 requires less default configuration, but it makes the custom configuration a little less convenient. Let me know if you have thoughts/preferences, and I can help create the infrastructure you need to plug in your custom class if that would be useful. (Hopefully I'll have a few minutes tomorrow). - Demian ________________________________ From: Chanel Wheeler [Cha...@ya...] Sent: Tuesday, February 26, 2013 4:14 PM To: vufind-tech (vuf...@li...<mailto:vuf...@li...>) Subject: [VuFind-Tech] VuFind 2 - extending class from file not in module.config.php Hi, I'm extending VuFind/ILS/Logic/Holds. I don't see anything in the VuFind module.config.php that I should add/customize for my local module. The reason this is of particular concern is because VuFind isn't picking up my local Holds.php with the extended class (I even tried putting gibberish in it and VuFind isn't barfing). I've deleted the cached Objects directory and restarted VuFind. What else do I need to do? Thanks, chanel Chanel Wheeler Library Network Programmer/Analyst Yavapai Library Network 1120 Commerce Dr. Prescott, AZ 86305 Phone: (928) 442-5741 cha...@ya...<mailto:cha...@ya...> Open a help desk ticket<mailto:he...@yl...> |
From: Chanel W. <Cha...@ya...> - 2013-03-04 18:39:36
|
I'm in "development" mode but it's not giving me a backtrace for this. I'm only getting a backtrace when something goes so wrong it can't load the page contents. chanel From: Demian Katz [mailto:dem...@vi...] Sent: Monday, March 04, 2013 10:54 AM To: Chanel Wheeler; vufind-tech (vuf...@li...) Subject: RE: [VuFind-Tech] VuFind 2 - extending class from file not in module.config.php Can you share the backtrace from the exception? That might offer some clues. If you're not seeing backtraces, you need to set the VUFIND_ENV environment variable in httpd-vufind.conf to "development" in order to get more information. - Demian From: Chanel Wheeler [mailto:Cha...@ya...] Sent: Monday, March 04, 2013 11:58 AM To: vufind-tech (vuf...@li...<mailto:vuf...@li...>) Subject: Re: [VuFind-Tech] VuFind 2 - extending class from file not in module.config.php I haven't been able to test the hold logic (soon, I hope). Once I got the VuFind base code up to date, I ceased to able to log in when I tried to place a hold. Web Services successfully logs me in from the ILS's perspective but module/VuFind/src/VuFind/Auth/Manager.php is throwing a 'authentication_error_technical' in the login function. My auth method is set to ILS in config.ini. Any idea what might be going on? Thanks, chanel From: Demian Katz [mailto:dem...@vi...] Sent: Wednesday, February 27, 2013 9:42 AM To: Chanel Wheeler; vufind-tech (vuf...@li...<mailto:vuf...@li...>) Subject: RE: [VuFind-Tech] VuFind 2 - extending class from file not in module.config.php Okay, after some frantic refactoring this morning, I've got services set up for the hold logic: http://vufind.git.sourceforge.net/git/gitweb.cgi?p=vufind/vufind;a=commitdiff;h=8eeca0c5f15ec00ba7cdf13de85beaa6de4002ed You can now override the 'VuFind\ILSHoldLogic' and/or 'VuFind\ILSTitleHoldLogic' services to inject custom behavior. Let me know if you have any questions/problems... and apologies in advance if it's a bit painful merging up to the current master. There are a lot of parts in motion right now. - Demian From: Chanel Wheeler [mailto:Cha...@ya...] Sent: Tuesday, February 26, 2013 5:29 PM To: vufind-tech (vuf...@li...<mailto:vuf...@li...>) Subject: Re: [VuFind-Tech] VuFind 2 - extending class from file not in module.config.php I only understand the options you're offering at a high level so I can't comprehend what the full set of ramifications would be for either choice. I'll answer in this fashion: the solution should offer the most versatility in affecting how/when/what hold-related links appear. For example, we don't do recalls - patrons place holds on anything that's holdable and wait their turn. Generally we offer title holds, but we switch to copy holds for volume-/issue- based items (title holds and copy holds are mutually exclusive). So does one of the options achieve maximum versatility better than the other? (If you go with option #2, I can definitely say I'm going to need some help with the infrastructure. :) ) chanel From: Demian Katz [mailto:dem...@vi...] Sent: Tuesday, February 26, 2013 2:51 PM To: Chanel Wheeler; vufind-tech (vuf...@li...<mailto:vuf...@li...>) Subject: RE: [VuFind-Tech] VuFind 2 - extending class from file not in module.config.php Right now, there's no extension point for the hold logic code. There are a couple of approaches: 1.) We could define the hold logic as a service in one of the configured plugin managers, and then have everything that uses it pull it from there; then you would be able to configure a custom hold logic class just like other things. 2.) We could add setters to classes that rely on the hold logic -- so, for example, the SolrMarc record driver could have setHoldLogic/getHoldLogic methods, with getHoldLogic constructing a default \VuFind\ILS\Logic\Holds object if no override was set. Then using an alternative class would be a matter of creating a custom factory for the SolrMarc class that injects a different Holds logic object. Does that make sense? I think #1 might be a bit less work for you to deal with, but it makes our huge configuration yet another notch larger. Option #2 requires less default configuration, but it makes the custom configuration a little less convenient. Let me know if you have thoughts/preferences, and I can help create the infrastructure you need to plug in your custom class if that would be useful. (Hopefully I'll have a few minutes tomorrow). - Demian ________________________________ From: Chanel Wheeler [Cha...@ya...] Sent: Tuesday, February 26, 2013 4:14 PM To: vufind-tech (vuf...@li...<mailto:vuf...@li...>) Subject: [VuFind-Tech] VuFind 2 - extending class from file not in module.config.php Hi, I'm extending VuFind/ILS/Logic/Holds. I don't see anything in the VuFind module.config.php that I should add/customize for my local module. The reason this is of particular concern is because VuFind isn't picking up my local Holds.php with the extended class (I even tried putting gibberish in it and VuFind isn't barfing). I've deleted the cached Objects directory and restarted VuFind. What else do I need to do? Thanks, chanel Chanel Wheeler Library Network Programmer/Analyst Yavapai Library Network 1120 Commerce Dr. Prescott, AZ 86305 Phone: (928) 442-5741 cha...@ya...<mailto:cha...@ya...> Open a help desk ticket<mailto:he...@yl...> |
From: Demian K. <dem...@vi...> - 2013-03-04 18:55:46
|
Hmm. Well, there are only two places in \VuFind\Auth\ILS that throw that exception. Might be worth tweaking the exception messages temporarily to see which one is the culprit - either the patronLogin() method is throwing an exception (you could get more details by var_dumping it inside the catch block), or else the ILS response is missing the username field. - Demian From: Chanel Wheeler [mailto:Cha...@ya...] Sent: Monday, March 04, 2013 1:39 PM To: vufind-tech (vuf...@li...) Subject: Re: [VuFind-Tech] VuFind 2 - extending class from file not in module.config.php I'm in "development" mode but it's not giving me a backtrace for this. I'm only getting a backtrace when something goes so wrong it can't load the page contents. chanel From: Demian Katz [mailto:dem...@vi...] Sent: Monday, March 04, 2013 10:54 AM To: Chanel Wheeler; vufind-tech (vuf...@li...) Subject: RE: [VuFind-Tech] VuFind 2 - extending class from file not in module.config.php Can you share the backtrace from the exception? That might offer some clues. If you're not seeing backtraces, you need to set the VUFIND_ENV environment variable in httpd-vufind.conf to "development" in order to get more information. - Demian From: Chanel Wheeler [mailto:Cha...@ya...] Sent: Monday, March 04, 2013 11:58 AM To: vufind-tech (vuf...@li...<mailto:vuf...@li...>) Subject: Re: [VuFind-Tech] VuFind 2 - extending class from file not in module.config.php I haven't been able to test the hold logic (soon, I hope). Once I got the VuFind base code up to date, I ceased to able to log in when I tried to place a hold. Web Services successfully logs me in from the ILS's perspective but module/VuFind/src/VuFind/Auth/Manager.php is throwing a 'authentication_error_technical' in the login function. My auth method is set to ILS in config.ini. Any idea what might be going on? Thanks, chanel From: Demian Katz [mailto:dem...@vi...] Sent: Wednesday, February 27, 2013 9:42 AM To: Chanel Wheeler; vufind-tech (vuf...@li...<mailto:vuf...@li...>) Subject: RE: [VuFind-Tech] VuFind 2 - extending class from file not in module.config.php Okay, after some frantic refactoring this morning, I've got services set up for the hold logic: http://vufind.git.sourceforge.net/git/gitweb.cgi?p=vufind/vufind;a=commitdiff;h=8eeca0c5f15ec00ba7cdf13de85beaa6de4002ed You can now override the 'VuFind\ILSHoldLogic' and/or 'VuFind\ILSTitleHoldLogic' services to inject custom behavior. Let me know if you have any questions/problems... and apologies in advance if it's a bit painful merging up to the current master. There are a lot of parts in motion right now. - Demian From: Chanel Wheeler [mailto:Cha...@ya...] Sent: Tuesday, February 26, 2013 5:29 PM To: vufind-tech (vuf...@li...<mailto:vuf...@li...>) Subject: Re: [VuFind-Tech] VuFind 2 - extending class from file not in module.config.php I only understand the options you're offering at a high level so I can't comprehend what the full set of ramifications would be for either choice. I'll answer in this fashion: the solution should offer the most versatility in affecting how/when/what hold-related links appear. For example, we don't do recalls - patrons place holds on anything that's holdable and wait their turn. Generally we offer title holds, but we switch to copy holds for volume-/issue- based items (title holds and copy holds are mutually exclusive). So does one of the options achieve maximum versatility better than the other? (If you go with option #2, I can definitely say I'm going to need some help with the infrastructure. :) ) chanel From: Demian Katz [mailto:dem...@vi...] Sent: Tuesday, February 26, 2013 2:51 PM To: Chanel Wheeler; vufind-tech (vuf...@li...<mailto:vuf...@li...>) Subject: RE: [VuFind-Tech] VuFind 2 - extending class from file not in module.config.php Right now, there's no extension point for the hold logic code. There are a couple of approaches: 1.) We could define the hold logic as a service in one of the configured plugin managers, and then have everything that uses it pull it from there; then you would be able to configure a custom hold logic class just like other things. 2.) We could add setters to classes that rely on the hold logic -- so, for example, the SolrMarc record driver could have setHoldLogic/getHoldLogic methods, with getHoldLogic constructing a default \VuFind\ILS\Logic\Holds object if no override was set. Then using an alternative class would be a matter of creating a custom factory for the SolrMarc class that injects a different Holds logic object. Does that make sense? I think #1 might be a bit less work for you to deal with, but it makes our huge configuration yet another notch larger. Option #2 requires less default configuration, but it makes the custom configuration a little less convenient. Let me know if you have thoughts/preferences, and I can help create the infrastructure you need to plug in your custom class if that would be useful. (Hopefully I'll have a few minutes tomorrow). - Demian ________________________________ From: Chanel Wheeler [Cha...@ya...] Sent: Tuesday, February 26, 2013 4:14 PM To: vufind-tech (vuf...@li...<mailto:vuf...@li...>) Subject: [VuFind-Tech] VuFind 2 - extending class from file not in module.config.php Hi, I'm extending VuFind/ILS/Logic/Holds. I don't see anything in the VuFind module.config.php that I should add/customize for my local module. The reason this is of particular concern is because VuFind isn't picking up my local Holds.php with the extended class (I even tried putting gibberish in it and VuFind isn't barfing). I've deleted the cached Objects directory and restarted VuFind. What else do I need to do? Thanks, chanel Chanel Wheeler Library Network Programmer/Analyst Yavapai Library Network 1120 Commerce Dr. Prescott, AZ 86305 Phone: (928) 442-5741 cha...@ya...<mailto:cha...@ya...> Open a help desk ticket<mailto:he...@yl...> |
From: Chanel W. <Cha...@ya...> - 2013-03-04 19:56:37
|
Neither place in \VuFind\Auth\ILS is throwing an exception. patronLogin works just fine -returns everything it should. The username isn't missing anywhere. It's the login function in Manager.php that's throwing the exception. What I did find is this: In Manager.php, the getAuth function, $this->auth is a ridiculously huge object that when dumped to the browser eventually overwhelms it and the page errors out . This is a just a very small portion of it: bool(false) object(VuFind\Auth\ILS)#656 (4) { ["catalog":protected]=> object(VuFind\ILS\Connection)#658 (6) { ["driverInitialized":protected]=> bool(true) ["driver":protected]=> object(VuFind\ILS\Driver\Symphony)#660 (4) { ["policyCache":protected]=> bool(false) ["policies":protected]=> NULL ["serviceLocator":protected]=> object(VuFind\ILS\Driver\PluginManager)#659 (18) { ["allowOverride":protected]=> bool(true) ["autoAddInvokableClass":protected]=> bool(true) ["creationOptions":protected]=> NULL ["serviceLocator":protected]=> object(Zend\ServiceManager\ServiceManager)#2 (15) { ["canonicalNames":protected]=> array(191) { ["SharedEventManager"]=> string(18) "sharedeventmanager" ["EventManager"]=> string(12) "eventmanager" ["ModuleManager"]=> string(13) "modulemanager" ["Zend\EventManager\EventManagerInterface"]=> string(37) "zendeventmanagereventmanagerinterface" ["ServiceManager"]=> string(14) "servicemanager" ["servicemanager"]=> string(14) "servicemanager" ["Zend\ServiceManager\ServiceLocatorInterface"]=> string(41) "zendservicemanagerservicelocatorinterface" ["Zend\ServiceManager\ServiceManager"]=> string(32) "zendservicemanagerservicemanager" ["ApplicationConfig"]=> string(17) "applicationconfig" ["applicationconfig"]=> string(17) "applicationconfig" ["modulemanager"]=> string(13) "modulemanager" ["ServiceListener"]=> string(15) "servicelistener" ["servicelistener"]=> string(15) "servicelistener" ["ServiceListenerInterface"]=> string(24) "servicelistenerinterface" ["eventmanager"]=> string(12) "eventmanager" ["sharedeventmanager"]=> string(18) "sharedeventmanager" ["Application"]=> string(11) "application" ["Config"]=> string(6) "config" ["ControllerLoader"]=> string(16) "controllerloader" ["ControllerPluginManager"]=> string(23) "controllerpluginmanager" ["ConsoleAdapter"]=> string(14) "consoleadapter" ["ConsoleRouter"]=> string(13) "consolerouter" ["DependencyInjector"]=> string(18) "dependencyinjector" ["DiAbstractServiceFactory"]=> string(24) "diabstractservicefactory" ["DiServiceInitializer"]=> string(20) "diserviceinitializer" ["DiStrictAbstractServiceFactory"]=> string(30) "districtabstractservicefactory" ["FilterManager"]=> string(13) "filtermanager" ["FormElementManager"]=> string(18) "formelementmanager" ["HttpRouter"]=> string(10) "httprouter" ["PaginatorPluginManager"]=> string(22) "paginatorpluginmanager" ["Request"]=> string(7) "request" ["Response"]=> string(8) "response" ["Router"]=> string(6) "router" ["RoutePluginManager"]=> string(18) "routepluginmanager" ["ValidatorManager"]=> string(16) "validatormanager" ["ViewHelperManager"]=> string(17) "viewhelpermanager" ["ViewFeedRenderer"]=> string(16) "viewfeedrenderer" ["ViewFeedStrategy"]=> string(16) "viewfeedstrategy" ["ViewJsonRenderer"]=> string(16) "viewjsonrenderer" ["ViewJsonStrategy"]=> string(16) "viewjsonstrategy" ["ViewManager"]=> string(11) "viewmanager" ["ViewResolver"]=> string(12) "viewresolver" ["ViewTemplateMapResolver"]=> string(23) "viewtemplatemapresolver" ["ViewTemplatePathStack"]=> string(21) "viewtemplatepathstack" ["VuFind\Http"]=> string(10) "vufindhttp" ["VuFindTheme\ThemeInfo"]=> string(20) "vufindthemethemeinfo" ["VuFind\AuthManager"]=> string(17) "vufindauthmanager" ["VuFind\CacheManager"]=> string(18) "vufindcachemanager" ["VuFind\Cart"]=> string(10) "vufindcart" ["VuFind\DateConverter"]=> string(19) "vufinddateconverter" ["VuFind\DbAdapter"]=> string(15) "vufinddbadapter" ["VuFind\DbAdapterFactory"]=> string(22) "vufinddbadapterfactory" ["VuFind\Export"]=> string(12) "vufindexport" ["VuFind\HMAC"]=> string(10) "vufindhmac" ["VuFind\ILSConnection"]=> string(19) "vufindilsconnection" ["VuFind\ILSHoldLogic"]=> string(18) "vufindilsholdlogic" ["VuFind\ILSHoldSettings"]=> string(21) "vufindilsholdsettings" ["VuFind\ILSTitleHoldLogic"]=> string(23) "vufindilstitleholdlogic" ["VuFind\Logger"]=> string(12) "vufindlogger" ["VuFind\Mailer"]=> string(12) "vufindmailer" ["VuFind\RecordRouter"]=> string(18) "vufindrecordrouter" ["VuFind\RecordStats"]=> string(17) "vufindrecordstats" ["VuFind\SearchSpecsReader"]=> string(23) "vufindsearchspecsreader" ["VuFind\SearchStats"]=> string(17) "vufindsearchstats" ["VuFind\SMS"]=> string(9) "vufindsms" ["VuFind\Translator"]=> string(16) "vufindtranslator" ["VuFind\WorldCatConnection"]=> string(24) "vufindworldcatconnection" ["VuFind\WorldCatUtils"]=> string(19) "vufindworldcatutils" ["DispatchListener"]=> string(16) "dispatchlistener" ["RouteListener"]=> string(13) "routelistener" ["SendResponseListener"]=> string(20) "sendresponselistener" ["VuFindTheme\Mobile"]=> string(17) "vufindthememobile" ["VuFindTheme\ResourceContainer"]=> string(28) "vufindthemeresourcecontainer" ["VuFind\RecordLoader"]=> string(18) "vufindrecordloader" ["VuFind\SessionManager"]=> string(20) "vufindsessionmanager" ["Configuration"]=> string(13) "configuration" ["Console"]=> string(7) "console" ["Di"]=> string(2) "di" ["Zend\Di\LocatorInterface"]=> string(22) "zenddilocatorinterface" ["Zend\Mvc\Controller\PluginManager"]=> string(30) "zendmvccontrollerpluginmanager" ["Zend\View\Resolver\TemplateMapResolver"]=> string(35) "zendviewresolvertemplatemapresolver" ["Zend\View\Resolver\TemplatePathStack"]=> string(33) "zendviewresolvertemplatepathstack" ["Zend\View\Resolver\AggregateResolver"]=> string(33) "zendviewresolveraggregateresolver" ["Zend\View\Resolver\ResolverInterface"]=> string(33) "zendviewresolverresolverinterface" ["translator"]=> string(10) "translator" ["controllerloader"]=> string(16) "controllerloader" ["config"]=> string(6) "config" ["browse"]=> string(6) "browse" ["collection"]=> string(10) "collection" ["collections"]=> string(11) "collections" ["record"]=> string(6) "record" ["admin"]=> string(5) "admin" ["ajax"]=> string(4) "ajax" ["alphabrowse"]=> string(11) "alphabrowse" ["author"]=> string(6) "author" ["authority"]=> string(9) "authority" ["cart"]=> string(4) "cart" ["cover"]=> string(5) "cover" ["error"]=> string(5) "error" ["help"]=> string(4) "help" ["hierarchy"]=> string(9) "hierarchy" ["index"]=> string(5) "index" ["install"]=> string(7) "install" ["missingrecord"]=> string(13) "missingrecord" ["my-research"]=> string(10) "myresearch" ["oai"]=> string(3) "oai" ["records"]=> string(7) "records" ["search"]=> string(6) "search" ["summon"]=> string(6) "summon" ["summonrecord"]=> string(12) "summonrecord" ["tag"]=> string(3) "tag" ["upgrade"]=> string(7) "upgrade" ["vudl"]=> string(4) "vudl" ["worldcat"]=> string(8) "worldcat" ["worldcatrecord"]=> string(14) "worldcatrecord" ["devtools"]=> string(8) "devtools" ["controllerpluginmanager"]=> string(23) "controllerpluginmanager" ["viewhelpermanager"]=> string(17) "viewhelpermanager" ["validatormanager"]=> string(16) "validatormanager" ["filtermanager"]=> string(13) "filtermanager" ["formelementmanager"]=> string(18) "formelementmanager" ["routepluginmanager"]=> string(18) "routepluginmanager" ["application"]=> string(11) "application" ["request"]=> string(7) "request" ["response"]=> string(8) "response" ["routelistener"]=> string(13) "routelistener" ["dispatchlistener"]=> string(16) "dispatchlistener" ["viewmanager"]=> string(11) "viewmanager" ["sendresponselistener"]=> string(20) "sendresponselistener" ["router"]=> string(6) "router" ["RouteNotFoundStrategy"]=> string(21) "routenotfoundstrategy" ["routenotfoundstrategy"]=> string(21) "routenotfoundstrategy" ["Zend\Mvc\View\RouteNotFoundStrategy"]=> string(32) "zendmvcviewroutenotfoundstrategy" ["Zend\Mvc\View\Http\RouteNotFoundStrategy"]=> string(36) "zendmvcviewhttproutenotfoundstrategy" ["404Strategy"]=> string(11) "404strategy" ["ExceptionStrategy"]=> string(17) "exceptionstrategy" ["exceptionstrategy"]=> string(17) "exceptionstrategy" ["Zend\Mvc\View\ExceptionStrategy"]=> string(28) "zendmvcviewexceptionstrategy" ["Zend\Mvc\View\Http\ExceptionStrategy"]=> string(32) "zendmvcviewhttpexceptionstrategy" ["viewresolver"]=> string(12) "viewresolver" ["viewtemplatemapresolver"]=> string(23) "viewtemplatemapresolver" ["viewtemplatepathstack"]=> string(21) "viewtemplatepathstack" ["ViewRenderer"]=> string(12) "viewrenderer" ["viewrenderer"]=> string(12) "viewrenderer" ["Zend\View\Renderer\PhpRenderer"]=> string(27) From: Demian Katz [mailto:dem...@vi...] Sent: Monday, March 04, 2013 11:56 AM To: Chanel Wheeler; vufind-tech (vuf...@li...) Subject: RE: [VuFind-Tech] VuFind 2 - extending class from file not in module.config.php Hmm. Well, there are only two places in \VuFind\Auth\ILS that throw that exception. Might be worth tweaking the exception messages temporarily to see which one is the culprit - either the patronLogin() method is throwing an exception (you could get more details by var_dumping it inside the catch block), or else the ILS response is missing the username field. - Demian From: Chanel Wheeler [mailto:Cha...@ya...] Sent: Monday, March 04, 2013 1:39 PM To: vufind-tech (vuf...@li...<mailto:vuf...@li...>) Subject: Re: [VuFind-Tech] VuFind 2 - extending class from file not in module.config.php I'm in "development" mode but it's not giving me a backtrace for this. I'm only getting a backtrace when something goes so wrong it can't load the page contents. chanel From: Demian Katz [mailto:dem...@vi...] Sent: Monday, March 04, 2013 10:54 AM To: Chanel Wheeler; vufind-tech (vuf...@li...<mailto:vuf...@li...>) Subject: RE: [VuFind-Tech] VuFind 2 - extending class from file not in module.config.php Can you share the backtrace from the exception? That might offer some clues. If you're not seeing backtraces, you need to set the VUFIND_ENV environment variable in httpd-vufind.conf to "development" in order to get more information. - Demian From: Chanel Wheeler [mailto:Cha...@ya...] Sent: Monday, March 04, 2013 11:58 AM To: vufind-tech (vuf...@li...<mailto:vuf...@li...>) Subject: Re: [VuFind-Tech] VuFind 2 - extending class from file not in module.config.php I haven't been able to test the hold logic (soon, I hope). Once I got the VuFind base code up to date, I ceased to able to log in when I tried to place a hold. Web Services successfully logs me in from the ILS's perspective but module/VuFind/src/VuFind/Auth/Manager.php is throwing a 'authentication_error_technical' in the login function. My auth method is set to ILS in config.ini. Any idea what might be going on? Thanks, chanel From: Demian Katz [mailto:dem...@vi...] Sent: Wednesday, February 27, 2013 9:42 AM To: Chanel Wheeler; vufind-tech (vuf...@li...<mailto:vuf...@li...>) Subject: RE: [VuFind-Tech] VuFind 2 - extending class from file not in module.config.php Okay, after some frantic refactoring this morning, I've got services set up for the hold logic: http://vufind.git.sourceforge.net/git/gitweb.cgi?p=vufind/vufind;a=commitdiff;h=8eeca0c5f15ec00ba7cdf13de85beaa6de4002ed You can now override the 'VuFind\ILSHoldLogic' and/or 'VuFind\ILSTitleHoldLogic' services to inject custom behavior. Let me know if you have any questions/problems... and apologies in advance if it's a bit painful merging up to the current master. There are a lot of parts in motion right now. - Demian From: Chanel Wheeler [mailto:Cha...@ya...] Sent: Tuesday, February 26, 2013 5:29 PM To: vufind-tech (vuf...@li...<mailto:vuf...@li...>) Subject: Re: [VuFind-Tech] VuFind 2 - extending class from file not in module.config.php I only understand the options you're offering at a high level so I can't comprehend what the full set of ramifications would be for either choice. I'll answer in this fashion: the solution should offer the most versatility in affecting how/when/what hold-related links appear. For example, we don't do recalls - patrons place holds on anything that's holdable and wait their turn. Generally we offer title holds, but we switch to copy holds for volume-/issue- based items (title holds and copy holds are mutually exclusive). So does one of the options achieve maximum versatility better than the other? (If you go with option #2, I can definitely say I'm going to need some help with the infrastructure. :) ) chanel From: Demian Katz [mailto:dem...@vi...] Sent: Tuesday, February 26, 2013 2:51 PM To: Chanel Wheeler; vufind-tech (vuf...@li...<mailto:vuf...@li...>) Subject: RE: [VuFind-Tech] VuFind 2 - extending class from file not in module.config.php Right now, there's no extension point for the hold logic code. There are a couple of approaches: 1.) We could define the hold logic as a service in one of the configured plugin managers, and then have everything that uses it pull it from there; then you would be able to configure a custom hold logic class just like other things. 2.) We could add setters to classes that rely on the hold logic -- so, for example, the SolrMarc record driver could have setHoldLogic/getHoldLogic methods, with getHoldLogic constructing a default \VuFind\ILS\Logic\Holds object if no override was set. Then using an alternative class would be a matter of creating a custom factory for the SolrMarc class that injects a different Holds logic object. Does that make sense? I think #1 might be a bit less work for you to deal with, but it makes our huge configuration yet another notch larger. Option #2 requires less default configuration, but it makes the custom configuration a little less convenient. Let me know if you have thoughts/preferences, and I can help create the infrastructure you need to plug in your custom class if that would be useful. (Hopefully I'll have a few minutes tomorrow). - Demian ________________________________ From: Chanel Wheeler [Cha...@ya...] Sent: Tuesday, February 26, 2013 4:14 PM To: vufind-tech (vuf...@li...<mailto:vuf...@li...>) Subject: [VuFind-Tech] VuFind 2 - extending class from file not in module.config.php Hi, I'm extending VuFind/ILS/Logic/Holds. I don't see anything in the VuFind module.config.php that I should add/customize for my local module. The reason this is of particular concern is because VuFind isn't picking up my local Holds.php with the extended class (I even tried putting gibberish in it and VuFind isn't barfing). I've deleted the cached Objects directory and restarted VuFind. What else do I need to do? Thanks, chanel Chanel Wheeler Library Network Programmer/Analyst Yavapai Library Network 1120 Commerce Dr. Prescott, AZ 86305 Phone: (928) 442-5741 cha...@ya...<mailto:cha...@ya...> Open a help desk ticket<mailto:he...@yl...> |
From: Demian K. <dem...@vi...> - 2013-03-05 00:43:28
|
Ahh, okay, so that means that some other type of exception is getting thrown, and the Manager is transforming it into a generic technical error. Try var_dump($e) or var_dump($e->getMessage()) around line 293 of Manager.php -- that should give more information. And you're right about the huge var_dump -- one drawback to ZF2's "service manager" approach to dependency management is that there's a gigantic object attached to many resources, and it can make these types of debug dumps painful. I haven't found a great workaround, though it might help to use XDebug, since I think that includes some controls for limiting the depth of var_dumps. - Demian ________________________________ From: Chanel Wheeler [Cha...@ya...] Sent: Monday, March 04, 2013 2:56 PM To: vufind-tech (vuf...@li...) Subject: Re: [VuFind-Tech] VuFind 2 - extending class from file not in module.config.php Neither place in \VuFind\Auth\ILS is throwing an exception. patronLogin works just fine –returns everything it should. The username isn’t missing anywhere. It’s the login function in Manager.php that’s throwing the exception. What I did find is this: In Manager.php, the getAuth function, $this->auth is a ridiculously huge object that when dumped to the browser eventually overwhelms it and the page errors out . This is a just a very small portion of it: bool(false) object(VuFind\Auth\ILS)#656 (4) { ["catalog":protected]=> object(VuFind\ILS\Connection)#658 (6) { ["driverInitialized":protected]=> bool(true) ["driver":protected]=> object(VuFind\ILS\Driver\Symphony)#660 (4) { ["policyCache":protected]=> bool(false) ["policies":protected]=> NULL ["serviceLocator":protected]=> object(VuFind\ILS\Driver\PluginManager)#659 (18) { ["allowOverride":protected]=> bool(true) ["autoAddInvokableClass":protected]=> bool(true) ["creationOptions":protected]=> NULL ["serviceLocator":protected]=> object(Zend\ServiceManager\ServiceManager)#2 (15) { ["canonicalNames":protected]=> array(191) { ["SharedEventManager"]=> string(18) "sharedeventmanager" ["EventManager"]=> string(12) "eventmanager" ["ModuleManager"]=> string(13) "modulemanager" ["Zend\EventManager\EventManagerInterface"]=> string(37) "zendeventmanagereventmanagerinterface" ["ServiceManager"]=> string(14) "servicemanager" ["servicemanager"]=> string(14) "servicemanager" ["Zend\ServiceManager\ServiceLocatorInterface"]=> string(41) "zendservicemanagerservicelocatorinterface" ["Zend\ServiceManager\ServiceManager"]=> string(32) "zendservicemanagerservicemanager" ["ApplicationConfig"]=> string(17) "applicationconfig" ["applicationconfig"]=> string(17) "applicationconfig" ["modulemanager"]=> string(13) "modulemanager" ["ServiceListener"]=> string(15) "servicelistener" ["servicelistener"]=> string(15) "servicelistener" ["ServiceListenerInterface"]=> string(24) "servicelistenerinterface" ["eventmanager"]=> string(12) "eventmanager" ["sharedeventmanager"]=> string(18) "sharedeventmanager" ["Application"]=> string(11) "application" ["Config"]=> string(6) "config" ["ControllerLoader"]=> string(16) "controllerloader" ["ControllerPluginManager"]=> string(23) "controllerpluginmanager" ["ConsoleAdapter"]=> string(14) "consoleadapter" ["ConsoleRouter"]=> string(13) "consolerouter" ["DependencyInjector"]=> string(18) "dependencyinjector" ["DiAbstractServiceFactory"]=> string(24) "diabstractservicefactory" ["DiServiceInitializer"]=> string(20) "diserviceinitializer" ["DiStrictAbstractServiceFactory"]=> string(30) "districtabstractservicefactory" ["FilterManager"]=> string(13) "filtermanager" ["FormElementManager"]=> string(18) "formelementmanager" ["HttpRouter"]=> string(10) "httprouter" ["PaginatorPluginManager"]=> string(22) "paginatorpluginmanager" ["Request"]=> string(7) "request" ["Response"]=> string(8) "response" ["Router"]=> string(6) "router" ["RoutePluginManager"]=> string(18) "routepluginmanager" ["ValidatorManager"]=> string(16) "validatormanager" ["ViewHelperManager"]=> string(17) "viewhelpermanager" ["ViewFeedRenderer"]=> string(16) "viewfeedrenderer" ["ViewFeedStrategy"]=> string(16) "viewfeedstrategy" ["ViewJsonRenderer"]=> string(16) "viewjsonrenderer" ["ViewJsonStrategy"]=> string(16) "viewjsonstrategy" ["ViewManager"]=> string(11) "viewmanager" ["ViewResolver"]=> string(12) "viewresolver" ["ViewTemplateMapResolver"]=> string(23) "viewtemplatemapresolver" ["ViewTemplatePathStack"]=> string(21) "viewtemplatepathstack" ["VuFind\Http"]=> string(10) "vufindhttp" ["VuFindTheme\ThemeInfo"]=> string(20) "vufindthemethemeinfo" ["VuFind\AuthManager"]=> string(17) "vufindauthmanager" ["VuFind\CacheManager"]=> string(18) "vufindcachemanager" ["VuFind\Cart"]=> string(10) "vufindcart" ["VuFind\DateConverter"]=> string(19) "vufinddateconverter" ["VuFind\DbAdapter"]=> string(15) "vufinddbadapter" ["VuFind\DbAdapterFactory"]=> string(22) "vufinddbadapterfactory" ["VuFind\Export"]=> string(12) "vufindexport" ["VuFind\HMAC"]=> string(10) "vufindhmac" ["VuFind\ILSConnection"]=> string(19) "vufindilsconnection" ["VuFind\ILSHoldLogic"]=> string(18) "vufindilsholdlogic" ["VuFind\ILSHoldSettings"]=> string(21) "vufindilsholdsettings" ["VuFind\ILSTitleHoldLogic"]=> string(23) "vufindilstitleholdlogic" ["VuFind\Logger"]=> string(12) "vufindlogger" ["VuFind\Mailer"]=> string(12) "vufindmailer" ["VuFind\RecordRouter"]=> string(18) "vufindrecordrouter" ["VuFind\RecordStats"]=> string(17) "vufindrecordstats" ["VuFind\SearchSpecsReader"]=> string(23) "vufindsearchspecsreader" ["VuFind\SearchStats"]=> string(17) "vufindsearchstats" ["VuFind\SMS"]=> string(9) "vufindsms" ["VuFind\Translator"]=> string(16) "vufindtranslator" ["VuFind\WorldCatConnection"]=> string(24) "vufindworldcatconnection" ["VuFind\WorldCatUtils"]=> string(19) "vufindworldcatutils" ["DispatchListener"]=> string(16) "dispatchlistener" ["RouteListener"]=> string(13) "routelistener" ["SendResponseListener"]=> string(20) "sendresponselistener" ["VuFindTheme\Mobile"]=> string(17) "vufindthememobile" ["VuFindTheme\ResourceContainer"]=> string(28) "vufindthemeresourcecontainer" ["VuFind\RecordLoader"]=> string(18) "vufindrecordloader" ["VuFind\SessionManager"]=> string(20) "vufindsessionmanager" ["Configuration"]=> string(13) "configuration" ["Console"]=> string(7) "console" ["Di"]=> string(2) "di" ["Zend\Di\LocatorInterface"]=> string(22) "zenddilocatorinterface" ["Zend\Mvc\Controller\PluginManager"]=> string(30) "zendmvccontrollerpluginmanager" ["Zend\View\Resolver\TemplateMapResolver"]=> string(35) "zendviewresolvertemplatemapresolver" ["Zend\View\Resolver\TemplatePathStack"]=> string(33) "zendviewresolvertemplatepathstack" ["Zend\View\Resolver\AggregateResolver"]=> string(33) "zendviewresolveraggregateresolver" ["Zend\View\Resolver\ResolverInterface"]=> string(33) "zendviewresolverresolverinterface" ["translator"]=> string(10) "translator" ["controllerloader"]=> string(16) "controllerloader" ["config"]=> string(6) "config" ["browse"]=> string(6) "browse" ["collection"]=> string(10) "collection" ["collections"]=> string(11) "collections" ["record"]=> string(6) "record" ["admin"]=> string(5) "admin" ["ajax"]=> string(4) "ajax" ["alphabrowse"]=> string(11) "alphabrowse" ["author"]=> string(6) "author" ["authority"]=> string(9) "authority" ["cart"]=> string(4) "cart" ["cover"]=> string(5) "cover" ["error"]=> string(5) "error" ["help"]=> string(4) "help" ["hierarchy"]=> string(9) "hierarchy" ["index"]=> string(5) "index" ["install"]=> string(7) "install" ["missingrecord"]=> string(13) "missingrecord" ["my-research"]=> string(10) "myresearch" ["oai"]=> string(3) "oai" ["records"]=> string(7) "records" ["search"]=> string(6) "search" ["summon"]=> string(6) "summon" ["summonrecord"]=> string(12) "summonrecord" ["tag"]=> string(3) "tag" ["upgrade"]=> string(7) "upgrade" ["vudl"]=> string(4) "vudl" ["worldcat"]=> string(8) "worldcat" ["worldcatrecord"]=> string(14) "worldcatrecord" ["devtools"]=> string(8) "devtools" ["controllerpluginmanager"]=> string(23) "controllerpluginmanager" ["viewhelpermanager"]=> string(17) "viewhelpermanager" ["validatormanager"]=> string(16) "validatormanager" ["filtermanager"]=> string(13) "filtermanager" ["formelementmanager"]=> string(18) "formelementmanager" ["routepluginmanager"]=> string(18) "routepluginmanager" ["application"]=> string(11) "application" ["request"]=> string(7) "request" ["response"]=> string(8) "response" ["routelistener"]=> string(13) "routelistener" ["dispatchlistener"]=> string(16) "dispatchlistener" ["viewmanager"]=> string(11) "viewmanager" ["sendresponselistener"]=> string(20) "sendresponselistener" ["router"]=> string(6) "router" ["RouteNotFoundStrategy"]=> string(21) "routenotfoundstrategy" ["routenotfoundstrategy"]=> string(21) "routenotfoundstrategy" ["Zend\Mvc\View\RouteNotFoundStrategy"]=> string(32) "zendmvcviewroutenotfoundstrategy" ["Zend\Mvc\View\Http\RouteNotFoundStrategy"]=> string(36) "zendmvcviewhttproutenotfoundstrategy" ["404Strategy"]=> string(11) "404strategy" ["ExceptionStrategy"]=> string(17) "exceptionstrategy" ["exceptionstrategy"]=> string(17) "exceptionstrategy" ["Zend\Mvc\View\ExceptionStrategy"]=> string(28) "zendmvcviewexceptionstrategy" ["Zend\Mvc\View\Http\ExceptionStrategy"]=> string(32) "zendmvcviewhttpexceptionstrategy" ["viewresolver"]=> string(12) "viewresolver" ["viewtemplatemapresolver"]=> string(23) "viewtemplatemapresolver" ["viewtemplatepathstack"]=> string(21) "viewtemplatepathstack" ["ViewRenderer"]=> string(12) "viewrenderer" ["viewrenderer"]=> string(12) "viewrenderer" ["Zend\View\Renderer\PhpRenderer"]=> string(27) From: Demian Katz [mailto:dem...@vi...] Sent: Monday, March 04, 2013 11:56 AM To: Chanel Wheeler; vufind-tech (vuf...@li...) Subject: RE: [VuFind-Tech] VuFind 2 - extending class from file not in module.config.php Hmm. Well, there are only two places in \VuFind\Auth\ILS that throw that exception. Might be worth tweaking the exception messages temporarily to see which one is the culprit – either the patronLogin() method is throwing an exception (you could get more details by var_dumping it inside the catch block), or else the ILS response is missing the username field. - Demian From: Chanel Wheeler [mailto:Cha...@ya...] Sent: Monday, March 04, 2013 1:39 PM To: vufind-tech (vuf...@li...<mailto:vuf...@li...>) Subject: Re: [VuFind-Tech] VuFind 2 - extending class from file not in module.config.php I’m in “development” mode but it’s not giving me a backtrace for this. I’m only getting a backtrace when something goes so wrong it can’t load the page contents. chanel From: Demian Katz [mailto:dem...@vi...] Sent: Monday, March 04, 2013 10:54 AM To: Chanel Wheeler; vufind-tech (vuf...@li...<mailto:vuf...@li...>) Subject: RE: [VuFind-Tech] VuFind 2 - extending class from file not in module.config.php Can you share the backtrace from the exception? That might offer some clues. If you’re not seeing backtraces, you need to set the VUFIND_ENV environment variable in httpd-vufind.conf to “development” in order to get more information. - Demian From: Chanel Wheeler [mailto:Cha...@ya...] Sent: Monday, March 04, 2013 11:58 AM To: vufind-tech (vuf...@li...<mailto:vuf...@li...>) Subject: Re: [VuFind-Tech] VuFind 2 - extending class from file not in module.config.php I haven’t been able to test the hold logic (soon, I hope). Once I got the VuFind base code up to date, I ceased to able to log in when I tried to place a hold. Web Services successfully logs me in from the ILS’s perspective but module/VuFind/src/VuFind/Auth/Manager.php is throwing a ‘authentication_error_technical’ in the login function. My auth method is set to ILS in config.ini. Any idea what might be going on? Thanks, chanel From: Demian Katz [mailto:dem...@vi...] Sent: Wednesday, February 27, 2013 9:42 AM To: Chanel Wheeler; vufind-tech (vuf...@li...<mailto:vuf...@li...>) Subject: RE: [VuFind-Tech] VuFind 2 - extending class from file not in module.config.php Okay, after some frantic refactoring this morning, I’ve got services set up for the hold logic: http://vufind.git.sourceforge.net/git/gitweb.cgi?p=vufind/vufind;a=commitdiff;h=8eeca0c5f15ec00ba7cdf13de85beaa6de4002ed You can now override the 'VuFind\ILSHoldLogic' and/or 'VuFind\ILSTitleHoldLogic' services to inject custom behavior. Let me know if you have any questions/problems… and apologies in advance if it’s a bit painful merging up to the current master. There are a lot of parts in motion right now. - Demian From: Chanel Wheeler [mailto:Cha...@ya...] Sent: Tuesday, February 26, 2013 5:29 PM To: vufind-tech (vuf...@li...<mailto:vuf...@li...>) Subject: Re: [VuFind-Tech] VuFind 2 - extending class from file not in module.config.php I only understand the options you’re offering at a high level so I can’t comprehend what the full set of ramifications would be for either choice. I’ll answer in this fashion: the solution should offer the most versatility in affecting how/when/what hold-related links appear. For example, we don’t do recalls – patrons place holds on anything that’s holdable and wait their turn. Generally we offer title holds, but we switch to copy holds for volume-/issue- based items (title holds and copy holds are mutually exclusive). So does one of the options achieve maximum versatility better than the other? (If you go with option #2, I can definitely say I’m going to need some help with the infrastructure. :) ) chanel From: Demian Katz [mailto:dem...@vi...] Sent: Tuesday, February 26, 2013 2:51 PM To: Chanel Wheeler; vufind-tech (vuf...@li...<mailto:vuf...@li...>) Subject: RE: [VuFind-Tech] VuFind 2 - extending class from file not in module.config.php Right now, there's no extension point for the hold logic code. There are a couple of approaches: 1.) We could define the hold logic as a service in one of the configured plugin managers, and then have everything that uses it pull it from there; then you would be able to configure a custom hold logic class just like other things. 2.) We could add setters to classes that rely on the hold logic -- so, for example, the SolrMarc record driver could have setHoldLogic/getHoldLogic methods, with getHoldLogic constructing a default \VuFind\ILS\Logic\Holds object if no override was set. Then using an alternative class would be a matter of creating a custom factory for the SolrMarc class that injects a different Holds logic object. Does that make sense? I think #1 might be a bit less work for you to deal with, but it makes our huge configuration yet another notch larger. Option #2 requires less default configuration, but it makes the custom configuration a little less convenient. Let me know if you have thoughts/preferences, and I can help create the infrastructure you need to plug in your custom class if that would be useful. (Hopefully I'll have a few minutes tomorrow). - Demian ________________________________ From: Chanel Wheeler [Cha...@ya...] Sent: Tuesday, February 26, 2013 4:14 PM To: vufind-tech (vuf...@li...<mailto:vuf...@li...>) Subject: [VuFind-Tech] VuFind 2 - extending class from file not in module.config.php Hi, I’m extending VuFind/ILS/Logic/Holds. I don’t see anything in the VuFind module.config.php that I should add/customize for my local module. The reason this is of particular concern is because VuFind isn’t picking up my local Holds.php with the extended class (I even tried putting gibberish in it and VuFind isn’t barfing). I’ve deleted the cached Objects directory and restarted VuFind. What else do I need to do? Thanks, chanel Chanel Wheeler Library Network Programmer/Analyst Yavapai Library Network 1120 Commerce Dr. Prescott, AZ 86305 Phone: (928) 442-5741 cha...@ya...<mailto:cha...@ya...> Open a help desk ticket<mailto:he...@yl...> |
From: Chanel W. <Cha...@ya...> - 2013-03-05 19:12:26
|
The var_dump outputs: string(273) "Statement couldn't be produced with sql: UPDATE `user` SET `username` = ?, `password` = ?, `firstname` = ?, `lastname` = ?, `email` = ?, `cat_username` = ?, `cat_password` = ?, `college` = ?, `major` = ?, `home_library` = ?, `created` = ?, `cat_pass_enc` = ? WHERE `id` = ?" But, but, but... those values are coming back from Symphony (well most of them...we don't have college or major). The login function called authenticate() in ILS.php calls processILSUser(). Coming into processILSuser(), $info has a value of (with my password redacted): Array ( [cat_username] => 21929000243365 [cat_password] => xxxx [id] => 21929000243365 [library] => PVPL [firstname] => CHANEL [lastname] => WHEELER ) It's when processILSUser() sets $user that things get wonky (at least that's how it looks to me). $info[$usernameField] is passing the patron barcode properly. But I need to eat something before I dig into getByUsername(). :) chanel From: Demian Katz [mailto:dem...@vi...] Sent: Monday, March 04, 2013 5:43 PM To: Chanel Wheeler; vufind-tech (vuf...@li...) Subject: RE: [VuFind-Tech] VuFind 2 - extending class from file not in module.config.php Ahh, okay, so that means that some other type of exception is getting thrown, and the Manager is transforming it into a generic technical error. Try var_dump($e) or var_dump($e->getMessage()) around line 293 of Manager.php -- that should give more information. And you're right about the huge var_dump -- one drawback to ZF2's "service manager" approach to dependency management is that there's a gigantic object attached to many resources, and it can make these types of debug dumps painful. I haven't found a great workaround, though it might help to use XDebug, since I think that includes some controls for limiting the depth of var_dumps. - Demian ________________________________ From: Chanel Wheeler [Cha...@ya...] Sent: Monday, March 04, 2013 2:56 PM To: vufind-tech (vuf...@li...<mailto:vuf...@li...>) Subject: Re: [VuFind-Tech] VuFind 2 - extending class from file not in module.config.php Neither place in \VuFind\Auth\ILS is throwing an exception. patronLogin works just fine -returns everything it should. The username isn't missing anywhere. It's the login function in Manager.php that's throwing the exception. What I did find is this: In Manager.php, the getAuth function, $this->auth is a ridiculously huge object that when dumped to the browser eventually overwhelms it and the page errors out . This is a just a very small portion of it: bool(false) object(VuFind\Auth\ILS)#656 (4) { ["catalog":protected]=> object(VuFind\ILS\Connection)#658 (6) { ["driverInitialized":protected]=> bool(true) ["driver":protected]=> object(VuFind\ILS\Driver\Symphony)#660 (4) { ["policyCache":protected]=> bool(false) ["policies":protected]=> NULL ["serviceLocator":protected]=> object(VuFind\ILS\Driver\PluginManager)#659 (18) { ["allowOverride":protected]=> bool(true) ["autoAddInvokableClass":protected]=> bool(true) ["creationOptions":protected]=> NULL ["serviceLocator":protected]=> object(Zend\ServiceManager\ServiceManager)#2 (15) { ["canonicalNames":protected]=> array(191) { ["SharedEventManager"]=> string(18) "sharedeventmanager" ["EventManager"]=> string(12) "eventmanager" ["ModuleManager"]=> string(13) "modulemanager" ["Zend\EventManager\EventManagerInterface"]=> string(37) "zendeventmanagereventmanagerinterface" ["ServiceManager"]=> string(14) "servicemanager" ["servicemanager"]=> string(14) "servicemanager" ["Zend\ServiceManager\ServiceLocatorInterface"]=> string(41) "zendservicemanagerservicelocatorinterface" ["Zend\ServiceManager\ServiceManager"]=> string(32) "zendservicemanagerservicemanager" ["ApplicationConfig"]=> string(17) "applicationconfig" ["applicationconfig"]=> string(17) "applicationconfig" ["modulemanager"]=> string(13) "modulemanager" ["ServiceListener"]=> string(15) "servicelistener" ["servicelistener"]=> string(15) "servicelistener" ["ServiceListenerInterface"]=> string(24) "servicelistenerinterface" ["eventmanager"]=> string(12) "eventmanager" ["sharedeventmanager"]=> string(18) "sharedeventmanager" ["Application"]=> string(11) "application" ["Config"]=> string(6) "config" ["ControllerLoader"]=> string(16) "controllerloader" ["ControllerPluginManager"]=> string(23) "controllerpluginmanager" ["ConsoleAdapter"]=> string(14) "consoleadapter" ["ConsoleRouter"]=> string(13) "consolerouter" ["DependencyInjector"]=> string(18) "dependencyinjector" ["DiAbstractServiceFactory"]=> string(24) "diabstractservicefactory" ["DiServiceInitializer"]=> string(20) "diserviceinitializer" ["DiStrictAbstractServiceFactory"]=> string(30) "districtabstractservicefactory" ["FilterManager"]=> string(13) "filtermanager" ["FormElementManager"]=> string(18) "formelementmanager" ["HttpRouter"]=> string(10) "httprouter" ["PaginatorPluginManager"]=> string(22) "paginatorpluginmanager" ["Request"]=> string(7) "request" ["Response"]=> string(8) "response" ["Router"]=> string(6) "router" ["RoutePluginManager"]=> string(18) "routepluginmanager" ["ValidatorManager"]=> string(16) "validatormanager" ["ViewHelperManager"]=> string(17) "viewhelpermanager" ["ViewFeedRenderer"]=> string(16) "viewfeedrenderer" ["ViewFeedStrategy"]=> string(16) "viewfeedstrategy" ["ViewJsonRenderer"]=> string(16) "viewjsonrenderer" ["ViewJsonStrategy"]=> string(16) "viewjsonstrategy" ["ViewManager"]=> string(11) "viewmanager" ["ViewResolver"]=> string(12) "viewresolver" ["ViewTemplateMapResolver"]=> string(23) "viewtemplatemapresolver" ["ViewTemplatePathStack"]=> string(21) "viewtemplatepathstack" ["VuFind\Http"]=> string(10) "vufindhttp" ["VuFindTheme\ThemeInfo"]=> string(20) "vufindthemethemeinfo" ["VuFind\AuthManager"]=> string(17) "vufindauthmanager" ["VuFind\CacheManager"]=> string(18) "vufindcachemanager" ["VuFind\Cart"]=> string(10) "vufindcart" ["VuFind\DateConverter"]=> string(19) "vufinddateconverter" ["VuFind\DbAdapter"]=> string(15) "vufinddbadapter" ["VuFind\DbAdapterFactory"]=> string(22) "vufinddbadapterfactory" ["VuFind\Export"]=> string(12) "vufindexport" ["VuFind\HMAC"]=> string(10) "vufindhmac" ["VuFind\ILSConnection"]=> string(19) "vufindilsconnection" ["VuFind\ILSHoldLogic"]=> string(18) "vufindilsholdlogic" ["VuFind\ILSHoldSettings"]=> string(21) "vufindilsholdsettings" ["VuFind\ILSTitleHoldLogic"]=> string(23) "vufindilstitleholdlogic" ["VuFind\Logger"]=> string(12) "vufindlogger" ["VuFind\Mailer"]=> string(12) "vufindmailer" ["VuFind\RecordRouter"]=> string(18) "vufindrecordrouter" ["VuFind\RecordStats"]=> string(17) "vufindrecordstats" ["VuFind\SearchSpecsReader"]=> string(23) "vufindsearchspecsreader" ["VuFind\SearchStats"]=> string(17) "vufindsearchstats" ["VuFind\SMS"]=> string(9) "vufindsms" ["VuFind\Translator"]=> string(16) "vufindtranslator" ["VuFind\WorldCatConnection"]=> string(24) "vufindworldcatconnection" ["VuFind\WorldCatUtils"]=> string(19) "vufindworldcatutils" ["DispatchListener"]=> string(16) "dispatchlistener" ["RouteListener"]=> string(13) "routelistener" ["SendResponseListener"]=> string(20) "sendresponselistener" ["VuFindTheme\Mobile"]=> string(17) "vufindthememobile" ["VuFindTheme\ResourceContainer"]=> string(28) "vufindthemeresourcecontainer" ["VuFind\RecordLoader"]=> string(18) "vufindrecordloader" ["VuFind\SessionManager"]=> string(20) "vufindsessionmanager" ["Configuration"]=> string(13) "configuration" ["Console"]=> string(7) "console" ["Di"]=> string(2) "di" ["Zend\Di\LocatorInterface"]=> string(22) "zenddilocatorinterface" ["Zend\Mvc\Controller\PluginManager"]=> string(30) "zendmvccontrollerpluginmanager" ["Zend\View\Resolver\TemplateMapResolver"]=> string(35) "zendviewresolvertemplatemapresolver" ["Zend\View\Resolver\TemplatePathStack"]=> string(33) "zendviewresolvertemplatepathstack" ["Zend\View\Resolver\AggregateResolver"]=> string(33) "zendviewresolveraggregateresolver" ["Zend\View\Resolver\ResolverInterface"]=> string(33) "zendviewresolverresolverinterface" ["translator"]=> string(10) "translator" ["controllerloader"]=> string(16) "controllerloader" ["config"]=> string(6) "config" ["browse"]=> string(6) "browse" ["collection"]=> string(10) "collection" ["collections"]=> string(11) "collections" ["record"]=> string(6) "record" ["admin"]=> string(5) "admin" ["ajax"]=> string(4) "ajax" ["alphabrowse"]=> string(11) "alphabrowse" ["author"]=> string(6) "author" ["authority"]=> string(9) "authority" ["cart"]=> string(4) "cart" ["cover"]=> string(5) "cover" ["error"]=> string(5) "error" ["help"]=> string(4) "help" ["hierarchy"]=> string(9) "hierarchy" ["index"]=> string(5) "index" ["install"]=> string(7) "install" ["missingrecord"]=> string(13) "missingrecord" ["my-research"]=> string(10) "myresearch" ["oai"]=> string(3) "oai" ["records"]=> string(7) "records" ["search"]=> string(6) "search" ["summon"]=> string(6) "summon" ["summonrecord"]=> string(12) "summonrecord" ["tag"]=> string(3) "tag" ["upgrade"]=> string(7) "upgrade" ["vudl"]=> string(4) "vudl" ["worldcat"]=> string(8) "worldcat" ["worldcatrecord"]=> string(14) "worldcatrecord" ["devtools"]=> string(8) "devtools" ["controllerpluginmanager"]=> string(23) "controllerpluginmanager" ["viewhelpermanager"]=> string(17) "viewhelpermanager" ["validatormanager"]=> string(16) "validatormanager" ["filtermanager"]=> string(13) "filtermanager" ["formelementmanager"]=> string(18) "formelementmanager" ["routepluginmanager"]=> string(18) "routepluginmanager" ["application"]=> string(11) "application" ["request"]=> string(7) "request" ["response"]=> string(8) "response" ["routelistener"]=> string(13) "routelistener" ["dispatchlistener"]=> string(16) "dispatchlistener" ["viewmanager"]=> string(11) "viewmanager" ["sendresponselistener"]=> string(20) "sendresponselistener" ["router"]=> string(6) "router" ["RouteNotFoundStrategy"]=> string(21) "routenotfoundstrategy" ["routenotfoundstrategy"]=> string(21) "routenotfoundstrategy" ["Zend\Mvc\View\RouteNotFoundStrategy"]=> string(32) "zendmvcviewroutenotfoundstrategy" ["Zend\Mvc\View\Http\RouteNotFoundStrategy"]=> string(36) "zendmvcviewhttproutenotfoundstrategy" ["404Strategy"]=> string(11) "404strategy" ["ExceptionStrategy"]=> string(17) "exceptionstrategy" ["exceptionstrategy"]=> string(17) "exceptionstrategy" ["Zend\Mvc\View\ExceptionStrategy"]=> string(28) "zendmvcviewexceptionstrategy" ["Zend\Mvc\View\Http\ExceptionStrategy"]=> string(32) "zendmvcviewhttpexceptionstrategy" ["viewresolver"]=> string(12) "viewresolver" ["viewtemplatemapresolver"]=> string(23) "viewtemplatemapresolver" ["viewtemplatepathstack"]=> string(21) "viewtemplatepathstack" ["ViewRenderer"]=> string(12) "viewrenderer" ["viewrenderer"]=> string(12) "viewrenderer" ["Zend\View\Renderer\PhpRenderer"]=> string(27) From: Demian Katz [mailto:dem...@vi...] Sent: Monday, March 04, 2013 11:56 AM To: Chanel Wheeler; vufind-tech (vuf...@li...<mailto:vuf...@li...>) Subject: RE: [VuFind-Tech] VuFind 2 - extending class from file not in module.config.php Hmm. Well, there are only two places in \VuFind\Auth\ILS that throw that exception. Might be worth tweaking the exception messages temporarily to see which one is the culprit - either the patronLogin() method is throwing an exception (you could get more details by var_dumping it inside the catch block), or else the ILS response is missing the username field. - Demian From: Chanel Wheeler [mailto:Cha...@ya...] Sent: Monday, March 04, 2013 1:39 PM To: vufind-tech (vuf...@li...<mailto:vuf...@li...>) Subject: Re: [VuFind-Tech] VuFind 2 - extending class from file not in module.config.php I'm in "development" mode but it's not giving me a backtrace for this. I'm only getting a backtrace when something goes so wrong it can't load the page contents. chanel From: Demian Katz [mailto:dem...@vi...] Sent: Monday, March 04, 2013 10:54 AM To: Chanel Wheeler; vufind-tech (vuf...@li...<mailto:vuf...@li...>) Subject: RE: [VuFind-Tech] VuFind 2 - extending class from file not in module.config.php Can you share the backtrace from the exception? That might offer some clues. If you're not seeing backtraces, you need to set the VUFIND_ENV environment variable in httpd-vufind.conf to "development" in order to get more information. - Demian From: Chanel Wheeler [mailto:Cha...@ya...] Sent: Monday, March 04, 2013 11:58 AM To: vufind-tech (vuf...@li...<mailto:vuf...@li...>) Subject: Re: [VuFind-Tech] VuFind 2 - extending class from file not in module.config.php I haven't been able to test the hold logic (soon, I hope). Once I got the VuFind base code up to date, I ceased to able to log in when I tried to place a hold. Web Services successfully logs me in from the ILS's perspective but module/VuFind/src/VuFind/Auth/Manager.php is throwing a 'authentication_error_technical' in the login function. My auth method is set to ILS in config.ini. Any idea what might be going on? Thanks, chanel From: Demian Katz [mailto:dem...@vi...] Sent: Wednesday, February 27, 2013 9:42 AM To: Chanel Wheeler; vufind-tech (vuf...@li...<mailto:vuf...@li...>) Subject: RE: [VuFind-Tech] VuFind 2 - extending class from file not in module.config.php Okay, after some frantic refactoring this morning, I've got services set up for the hold logic: http://vufind.git.sourceforge.net/git/gitweb.cgi?p=vufind/vufind;a=commitdiff;h=8eeca0c5f15ec00ba7cdf13de85beaa6de4002ed You can now override the 'VuFind\ILSHoldLogic' and/or 'VuFind\ILSTitleHoldLogic' services to inject custom behavior. Let me know if you have any questions/problems... and apologies in advance if it's a bit painful merging up to the current master. There are a lot of parts in motion right now. - Demian From: Chanel Wheeler [mailto:Cha...@ya...] Sent: Tuesday, February 26, 2013 5:29 PM To: vufind-tech (vuf...@li...<mailto:vuf...@li...>) Subject: Re: [VuFind-Tech] VuFind 2 - extending class from file not in module.config.php I only understand the options you're offering at a high level so I can't comprehend what the full set of ramifications would be for either choice. I'll answer in this fashion: the solution should offer the most versatility in affecting how/when/what hold-related links appear. For example, we don't do recalls - patrons place holds on anything that's holdable and wait their turn. Generally we offer title holds, but we switch to copy holds for volume-/issue- based items (title holds and copy holds are mutually exclusive). So does one of the options achieve maximum versatility better than the other? (If you go with option #2, I can definitely say I'm going to need some help with the infrastructure. :) ) chanel From: Demian Katz [mailto:dem...@vi...] Sent: Tuesday, February 26, 2013 2:51 PM To: Chanel Wheeler; vufind-tech (vuf...@li...<mailto:vuf...@li...>) Subject: RE: [VuFind-Tech] VuFind 2 - extending class from file not in module.config.php Right now, there's no extension point for the hold logic code. There are a couple of approaches: 1.) We could define the hold logic as a service in one of the configured plugin managers, and then have everything that uses it pull it from there; then you would be able to configure a custom hold logic class just like other things. 2.) We could add setters to classes that rely on the hold logic -- so, for example, the SolrMarc record driver could have setHoldLogic/getHoldLogic methods, with getHoldLogic constructing a default \VuFind\ILS\Logic\Holds object if no override was set. Then using an alternative class would be a matter of creating a custom factory for the SolrMarc class that injects a different Holds logic object. Does that make sense? I think #1 might be a bit less work for you to deal with, but it makes our huge configuration yet another notch larger. Option #2 requires less default configuration, but it makes the custom configuration a little less convenient. Let me know if you have thoughts/preferences, and I can help create the infrastructure you need to plug in your custom class if that would be useful. (Hopefully I'll have a few minutes tomorrow). - Demian ________________________________ From: Chanel Wheeler [Cha...@ya...] Sent: Tuesday, February 26, 2013 4:14 PM To: vufind-tech (vuf...@li...<mailto:vuf...@li...>) Subject: [VuFind-Tech] VuFind 2 - extending class from file not in module.config.php Hi, I'm extending VuFind/ILS/Logic/Holds. I don't see anything in the VuFind module.config.php that I should add/customize for my local module. The reason this is of particular concern is because VuFind isn't picking up my local Holds.php with the extended class (I even tried putting gibberish in it and VuFind isn't barfing). I've deleted the cached Objects directory and restarted VuFind. What else do I need to do? Thanks, chanel Chanel Wheeler Library Network Programmer/Analyst Yavapai Library Network 1120 Commerce Dr. Prescott, AZ 86305 Phone: (928) 442-5741 cha...@ya...<mailto:cha...@ya...> Open a help desk ticket<mailto:he...@yl...> |
From: Demian K. <dem...@vi...> - 2013-03-05 19:46:36
|
Ahh, I have a theory - the error is happening when VuFind tries to save a User object. It is possible that some new columns have been added to the User table since you originally created your VuFind database (some recent work involving password encryption added cat_pass_enc and others). This error could be caused by trying to write data to columns that do not exist. You should be able to use the VuFind upgrade script to fix this - just go to http://your-server/vufind/Upgrade/FixDatabase You should be prompted for MySQL root credentials if the script finds missing columns - provide them and it will fix the structure for you. Note that this can be a somewhat slow process - don't be alarmed if it takes a while to complete. Also, by accessing the FixDatabase action directly instead of going through the whole upgrade process, you may not get good on-screen feedback. But it should do what is necessary! (You can always use PHPMyAdmin or another tool to watch what is going on in the database itself - i.e. look at the User table and keep refreshing until new columns appear). - Demian From: Chanel Wheeler [mailto:Cha...@ya...] Sent: Tuesday, March 05, 2013 2:12 PM To: vufind-tech (vuf...@li...) Subject: Re: [VuFind-Tech] VuFind 2 - extending class from file not in module.config.php The var_dump outputs: string(273) "Statement couldn't be produced with sql: UPDATE `user` SET `username` = ?, `password` = ?, `firstname` = ?, `lastname` = ?, `email` = ?, `cat_username` = ?, `cat_password` = ?, `college` = ?, `major` = ?, `home_library` = ?, `created` = ?, `cat_pass_enc` = ? WHERE `id` = ?" But, but, but... those values are coming back from Symphony (well most of them...we don't have college or major). The login function called authenticate() in ILS.php calls processILSUser(). Coming into processILSuser(), $info has a value of (with my password redacted): Array ( [cat_username] => 21929000243365 [cat_password] => xxxx [id] => 21929000243365 [library] => PVPL [firstname] => CHANEL [lastname] => WHEELER ) It's when processILSUser() sets $user that things get wonky (at least that's how it looks to me). $info[$usernameField] is passing the patron barcode properly. But I need to eat something before I dig into getByUsername(). :) chanel From: Demian Katz [mailto:dem...@vi...] Sent: Monday, March 04, 2013 5:43 PM To: Chanel Wheeler; vufind-tech (vuf...@li...) Subject: RE: [VuFind-Tech] VuFind 2 - extending class from file not in module.config.php Ahh, okay, so that means that some other type of exception is getting thrown, and the Manager is transforming it into a generic technical error. Try var_dump($e) or var_dump($e->getMessage()) around line 293 of Manager.php -- that should give more information. And you're right about the huge var_dump -- one drawback to ZF2's "service manager" approach to dependency management is that there's a gigantic object attached to many resources, and it can make these types of debug dumps painful. I haven't found a great workaround, though it might help to use XDebug, since I think that includes some controls for limiting the depth of var_dumps. - Demian ________________________________ From: Chanel Wheeler [Cha...@ya...] Sent: Monday, March 04, 2013 2:56 PM To: vufind-tech (vuf...@li...<mailto:vuf...@li...>) Subject: Re: [VuFind-Tech] VuFind 2 - extending class from file not in module.config.php Neither place in \VuFind\Auth\ILS is throwing an exception. patronLogin works just fine -returns everything it should. The username isn't missing anywhere. It's the login function in Manager.php that's throwing the exception. What I did find is this: In Manager.php, the getAuth function, $this->auth is a ridiculously huge object that when dumped to the browser eventually overwhelms it and the page errors out . This is a just a very small portion of it: bool(false) object(VuFind\Auth\ILS)#656 (4) { ["catalog":protected]=> object(VuFind\ILS\Connection)#658 (6) { ["driverInitialized":protected]=> bool(true) ["driver":protected]=> object(VuFind\ILS\Driver\Symphony)#660 (4) { ["policyCache":protected]=> bool(false) ["policies":protected]=> NULL ["serviceLocator":protected]=> object(VuFind\ILS\Driver\PluginManager)#659 (18) { ["allowOverride":protected]=> bool(true) ["autoAddInvokableClass":protected]=> bool(true) ["creationOptions":protected]=> NULL ["serviceLocator":protected]=> object(Zend\ServiceManager\ServiceManager)#2 (15) { ["canonicalNames":protected]=> array(191) { ["SharedEventManager"]=> string(18) "sharedeventmanager" ["EventManager"]=> string(12) "eventmanager" ["ModuleManager"]=> string(13) "modulemanager" ["Zend\EventManager\EventManagerInterface"]=> string(37) "zendeventmanagereventmanagerinterface" ["ServiceManager"]=> string(14) "servicemanager" ["servicemanager"]=> string(14) "servicemanager" ["Zend\ServiceManager\ServiceLocatorInterface"]=> string(41) "zendservicemanagerservicelocatorinterface" ["Zend\ServiceManager\ServiceManager"]=> string(32) "zendservicemanagerservicemanager" ["ApplicationConfig"]=> string(17) "applicationconfig" ["applicationconfig"]=> string(17) "applicationconfig" ["modulemanager"]=> string(13) "modulemanager" ["ServiceListener"]=> string(15) "servicelistener" ["servicelistener"]=> string(15) "servicelistener" ["ServiceListenerInterface"]=> string(24) "servicelistenerinterface" ["eventmanager"]=> string(12) "eventmanager" ["sharedeventmanager"]=> string(18) "sharedeventmanager" ["Application"]=> string(11) "application" ["Config"]=> string(6) "config" ["ControllerLoader"]=> string(16) "controllerloader" ["ControllerPluginManager"]=> string(23) "controllerpluginmanager" ["ConsoleAdapter"]=> string(14) "consoleadapter" ["ConsoleRouter"]=> string(13) "consolerouter" ["DependencyInjector"]=> string(18) "dependencyinjector" ["DiAbstractServiceFactory"]=> string(24) "diabstractservicefactory" ["DiServiceInitializer"]=> string(20) "diserviceinitializer" ["DiStrictAbstractServiceFactory"]=> string(30) "districtabstractservicefactory" ["FilterManager"]=> string(13) "filtermanager" ["FormElementManager"]=> string(18) "formelementmanager" ["HttpRouter"]=> string(10) "httprouter" ["PaginatorPluginManager"]=> string(22) "paginatorpluginmanager" ["Request"]=> string(7) "request" ["Response"]=> string(8) "response" ["Router"]=> string(6) "router" ["RoutePluginManager"]=> string(18) "routepluginmanager" ["ValidatorManager"]=> string(16) "validatormanager" ["ViewHelperManager"]=> string(17) "viewhelpermanager" ["ViewFeedRenderer"]=> string(16) "viewfeedrenderer" ["ViewFeedStrategy"]=> string(16) "viewfeedstrategy" ["ViewJsonRenderer"]=> string(16) "viewjsonrenderer" ["ViewJsonStrategy"]=> string(16) "viewjsonstrategy" ["ViewManager"]=> string(11) "viewmanager" ["ViewResolver"]=> string(12) "viewresolver" ["ViewTemplateMapResolver"]=> string(23) "viewtemplatemapresolver" ["ViewTemplatePathStack"]=> string(21) "viewtemplatepathstack" ["VuFind\Http"]=> string(10) "vufindhttp" ["VuFindTheme\ThemeInfo"]=> string(20) "vufindthemethemeinfo" ["VuFind\AuthManager"]=> string(17) "vufindauthmanager" ["VuFind\CacheManager"]=> string(18) "vufindcachemanager" ["VuFind\Cart"]=> string(10) "vufindcart" ["VuFind\DateConverter"]=> string(19) "vufinddateconverter" ["VuFind\DbAdapter"]=> string(15) "vufinddbadapter" ["VuFind\DbAdapterFactory"]=> string(22) "vufinddbadapterfactory" ["VuFind\Export"]=> string(12) "vufindexport" ["VuFind\HMAC"]=> string(10) "vufindhmac" ["VuFind\ILSConnection"]=> string(19) "vufindilsconnection" ["VuFind\ILSHoldLogic"]=> string(18) "vufindilsholdlogic" ["VuFind\ILSHoldSettings"]=> string(21) "vufindilsholdsettings" ["VuFind\ILSTitleHoldLogic"]=> string(23) "vufindilstitleholdlogic" ["VuFind\Logger"]=> string(12) "vufindlogger" ["VuFind\Mailer"]=> string(12) "vufindmailer" ["VuFind\RecordRouter"]=> string(18) "vufindrecordrouter" ["VuFind\RecordStats"]=> string(17) "vufindrecordstats" ["VuFind\SearchSpecsReader"]=> string(23) "vufindsearchspecsreader" ["VuFind\SearchStats"]=> string(17) "vufindsearchstats" ["VuFind\SMS"]=> string(9) "vufindsms" ["VuFind\Translator"]=> string(16) "vufindtranslator" ["VuFind\WorldCatConnection"]=> string(24) "vufindworldcatconnection" ["VuFind\WorldCatUtils"]=> string(19) "vufindworldcatutils" ["DispatchListener"]=> string(16) "dispatchlistener" ["RouteListener"]=> string(13) "routelistener" ["SendResponseListener"]=> string(20) "sendresponselistener" ["VuFindTheme\Mobile"]=> string(17) "vufindthememobile" ["VuFindTheme\ResourceContainer"]=> string(28) "vufindthemeresourcecontainer" ["VuFind\RecordLoader"]=> string(18) "vufindrecordloader" ["VuFind\SessionManager"]=> string(20) "vufindsessionmanager" ["Configuration"]=> string(13) "configuration" ["Console"]=> string(7) "console" ["Di"]=> string(2) "di" ["Zend\Di\LocatorInterface"]=> string(22) "zenddilocatorinterface" ["Zend\Mvc\Controller\PluginManager"]=> string(30) "zendmvccontrollerpluginmanager" ["Zend\View\Resolver\TemplateMapResolver"]=> string(35) "zendviewresolvertemplatemapresolver" ["Zend\View\Resolver\TemplatePathStack"]=> string(33) "zendviewresolvertemplatepathstack" ["Zend\View\Resolver\AggregateResolver"]=> string(33) "zendviewresolveraggregateresolver" ["Zend\View\Resolver\ResolverInterface"]=> string(33) "zendviewresolverresolverinterface" ["translator"]=> string(10) "translator" ["controllerloader"]=> string(16) "controllerloader" ["config"]=> string(6) "config" ["browse"]=> string(6) "browse" ["collection"]=> string(10) "collection" ["collections"]=> string(11) "collections" ["record"]=> string(6) "record" ["admin"]=> string(5) "admin" ["ajax"]=> string(4) "ajax" ["alphabrowse"]=> string(11) "alphabrowse" ["author"]=> string(6) "author" ["authority"]=> string(9) "authority" ["cart"]=> string(4) "cart" ["cover"]=> string(5) "cover" ["error"]=> string(5) "error" ["help"]=> string(4) "help" ["hierarchy"]=> string(9) "hierarchy" ["index"]=> string(5) "index" ["install"]=> string(7) "install" ["missingrecord"]=> string(13) "missingrecord" ["my-research"]=> string(10) "myresearch" ["oai"]=> string(3) "oai" ["records"]=> string(7) "records" ["search"]=> string(6) "search" ["summon"]=> string(6) "summon" ["summonrecord"]=> string(12) "summonrecord" ["tag"]=> string(3) "tag" ["upgrade"]=> string(7) "upgrade" ["vudl"]=> string(4) "vudl" ["worldcat"]=> string(8) "worldcat" ["worldcatrecord"]=> string(14) "worldcatrecord" ["devtools"]=> string(8) "devtools" ["controllerpluginmanager"]=> string(23) "controllerpluginmanager" ["viewhelpermanager"]=> string(17) "viewhelpermanager" ["validatormanager"]=> string(16) "validatormanager" ["filtermanager"]=> string(13) "filtermanager" ["formelementmanager"]=> string(18) "formelementmanager" ["routepluginmanager"]=> string(18) "routepluginmanager" ["application"]=> string(11) "application" ["request"]=> string(7) "request" ["response"]=> string(8) "response" ["routelistener"]=> string(13) "routelistener" ["dispatchlistener"]=> string(16) "dispatchlistener" ["viewmanager"]=> string(11) "viewmanager" ["sendresponselistener"]=> string(20) "sendresponselistener" ["router"]=> string(6) "router" ["RouteNotFoundStrategy"]=> string(21) "routenotfoundstrategy" ["routenotfoundstrategy"]=> string(21) "routenotfoundstrategy" ["Zend\Mvc\View\RouteNotFoundStrategy"]=> string(32) "zendmvcviewroutenotfoundstrategy" ["Zend\Mvc\View\Http\RouteNotFoundStrategy"]=> string(36) "zendmvcviewhttproutenotfoundstrategy" ["404Strategy"]=> string(11) "404strategy" ["ExceptionStrategy"]=> string(17) "exceptionstrategy" ["exceptionstrategy"]=> string(17) "exceptionstrategy" ["Zend\Mvc\View\ExceptionStrategy"]=> string(28) "zendmvcviewexceptionstrategy" ["Zend\Mvc\View\Http\ExceptionStrategy"]=> string(32) "zendmvcviewhttpexceptionstrategy" ["viewresolver"]=> string(12) "viewresolver" ["viewtemplatemapresolver"]=> string(23) "viewtemplatemapresolver" ["viewtemplatepathstack"]=> string(21) "viewtemplatepathstack" ["ViewRenderer"]=> string(12) "viewrenderer" ["viewrenderer"]=> string(12) "viewrenderer" ["Zend\View\Renderer\PhpRenderer"]=> string(27) From: Demian Katz [mailto:dem...@vi...] Sent: Monday, March 04, 2013 11:56 AM To: Chanel Wheeler; vufind-tech (vuf...@li...<mailto:vuf...@li...>) Subject: RE: [VuFind-Tech] VuFind 2 - extending class from file not in module.config.php Hmm. Well, there are only two places in \VuFind\Auth\ILS that throw that exception. Might be worth tweaking the exception messages temporarily to see which one is the culprit - either the patronLogin() method is throwing an exception (you could get more details by var_dumping it inside the catch block), or else the ILS response is missing the username field. - Demian From: Chanel Wheeler [mailto:Cha...@ya...] Sent: Monday, March 04, 2013 1:39 PM To: vufind-tech (vuf...@li...<mailto:vuf...@li...>) Subject: Re: [VuFind-Tech] VuFind 2 - extending class from file not in module.config.php I'm in "development" mode but it's not giving me a backtrace for this. I'm only getting a backtrace when something goes so wrong it can't load the page contents. chanel From: Demian Katz [mailto:dem...@vi...] Sent: Monday, March 04, 2013 10:54 AM To: Chanel Wheeler; vufind-tech (vuf...@li...<mailto:vuf...@li...>) Subject: RE: [VuFind-Tech] VuFind 2 - extending class from file not in module.config.php Can you share the backtrace from the exception? That might offer some clues. If you're not seeing backtraces, you need to set the VUFIND_ENV environment variable in httpd-vufind.conf to "development" in order to get more information. - Demian From: Chanel Wheeler [mailto:Cha...@ya...] Sent: Monday, March 04, 2013 11:58 AM To: vufind-tech (vuf...@li...<mailto:vuf...@li...>) Subject: Re: [VuFind-Tech] VuFind 2 - extending class from file not in module.config.php I haven't been able to test the hold logic (soon, I hope). Once I got the VuFind base code up to date, I ceased to able to log in when I tried to place a hold. Web Services successfully logs me in from the ILS's perspective but module/VuFind/src/VuFind/Auth/Manager.php is throwing a 'authentication_error_technical' in the login function. My auth method is set to ILS in config.ini. Any idea what might be going on? Thanks, chanel From: Demian Katz [mailto:dem...@vi...] Sent: Wednesday, February 27, 2013 9:42 AM To: Chanel Wheeler; vufind-tech (vuf...@li...<mailto:vuf...@li...>) Subject: RE: [VuFind-Tech] VuFind 2 - extending class from file not in module.config.php Okay, after some frantic refactoring this morning, I've got services set up for the hold logic: http://vufind.git.sourceforge.net/git/gitweb.cgi?p=vufind/vufind;a=commitdiff;h=8eeca0c5f15ec00ba7cdf13de85beaa6de4002ed You can now override the 'VuFind\ILSHoldLogic' and/or 'VuFind\ILSTitleHoldLogic' services to inject custom behavior. Let me know if you have any questions/problems... and apologies in advance if it's a bit painful merging up to the current master. There are a lot of parts in motion right now. - Demian From: Chanel Wheeler [mailto:Cha...@ya...] Sent: Tuesday, February 26, 2013 5:29 PM To: vufind-tech (vuf...@li...<mailto:vuf...@li...>) Subject: Re: [VuFind-Tech] VuFind 2 - extending class from file not in module.config.php I only understand the options you're offering at a high level so I can't comprehend what the full set of ramifications would be for either choice. I'll answer in this fashion: the solution should offer the most versatility in affecting how/when/what hold-related links appear. For example, we don't do recalls - patrons place holds on anything that's holdable and wait their turn. Generally we offer title holds, but we switch to copy holds for volume-/issue- based items (title holds and copy holds are mutually exclusive). So does one of the options achieve maximum versatility better than the other? (If you go with option #2, I can definitely say I'm going to need some help with the infrastructure. :) ) chanel From: Demian Katz [mailto:dem...@vi...] Sent: Tuesday, February 26, 2013 2:51 PM To: Chanel Wheeler; vufind-tech (vuf...@li...<mailto:vuf...@li...>) Subject: RE: [VuFind-Tech] VuFind 2 - extending class from file not in module.config.php Right now, there's no extension point for the hold logic code. There are a couple of approaches: 1.) We could define the hold logic as a service in one of the configured plugin managers, and then have everything that uses it pull it from there; then you would be able to configure a custom hold logic class just like other things. 2.) We could add setters to classes that rely on the hold logic -- so, for example, the SolrMarc record driver could have setHoldLogic/getHoldLogic methods, with getHoldLogic constructing a default \VuFind\ILS\Logic\Holds object if no override was set. Then using an alternative class would be a matter of creating a custom factory for the SolrMarc class that injects a different Holds logic object. Does that make sense? I think #1 might be a bit less work for you to deal with, but it makes our huge configuration yet another notch larger. Option #2 requires less default configuration, but it makes the custom configuration a little less convenient. Let me know if you have thoughts/preferences, and I can help create the infrastructure you need to plug in your custom class if that would be useful. (Hopefully I'll have a few minutes tomorrow). - Demian ________________________________ From: Chanel Wheeler [Cha...@ya...] Sent: Tuesday, February 26, 2013 4:14 PM To: vufind-tech (vuf...@li...<mailto:vuf...@li...>) Subject: [VuFind-Tech] VuFind 2 - extending class from file not in module.config.php Hi, I'm extending VuFind/ILS/Logic/Holds. I don't see anything in the VuFind module.config.php that I should add/customize for my local module. The reason this is of particular concern is because VuFind isn't picking up my local Holds.php with the extended class (I even tried putting gibberish in it and VuFind isn't barfing). I've deleted the cached Objects directory and restarted VuFind. What else do I need to do? Thanks, chanel Chanel Wheeler Library Network Programmer/Analyst Yavapai Library Network 1120 Commerce Dr. Prescott, AZ 86305 Phone: (928) 442-5741 cha...@ya...<mailto:cha...@ya...> Open a help desk ticket<mailto:he...@yl...> |
From: Chanel W. <Cha...@ya...> - 2013-03-05 20:01:26
|
Whew, that fixed it. Going forward I'll run the upgrade script regularly. Thanks! chanel From: Demian Katz [mailto:dem...@vi...] Sent: Tuesday, March 05, 2013 12:46 PM To: Chanel Wheeler; vufind-tech (vuf...@li...) Subject: RE: [VuFind-Tech] VuFind 2 - extending class from file not in module.config.php Ahh, I have a theory - the error is happening when VuFind tries to save a User object. It is possible that some new columns have been added to the User table since you originally created your VuFind database (some recent work involving password encryption added cat_pass_enc and others). This error could be caused by trying to write data to columns that do not exist. You should be able to use the VuFind upgrade script to fix this - just go to http://your-server/vufind/Upgrade/FixDatabase You should be prompted for MySQL root credentials if the script finds missing columns - provide them and it will fix the structure for you. Note that this can be a somewhat slow process - don't be alarmed if it takes a while to complete. Also, by accessing the FixDatabase action directly instead of going through the whole upgrade process, you may not get good on-screen feedback. But it should do what is necessary! (You can always use PHPMyAdmin or another tool to watch what is going on in the database itself - i.e. look at the User table and keep refreshing until new columns appear). - Demian From: Chanel Wheeler [mailto:Cha...@ya...] Sent: Tuesday, March 05, 2013 2:12 PM To: vufind-tech (vuf...@li...<mailto:vuf...@li...>) Subject: Re: [VuFind-Tech] VuFind 2 - extending class from file not in module.config.php The var_dump outputs: string(273) "Statement couldn't be produced with sql: UPDATE `user` SET `username` = ?, `password` = ?, `firstname` = ?, `lastname` = ?, `email` = ?, `cat_username` = ?, `cat_password` = ?, `college` = ?, `major` = ?, `home_library` = ?, `created` = ?, `cat_pass_enc` = ? WHERE `id` = ?" But, but, but... those values are coming back from Symphony (well most of them...we don't have college or major). The login function called authenticate() in ILS.php calls processILSUser(). Coming into processILSuser(), $info has a value of (with my password redacted): Array ( [cat_username] => 21929000243365 [cat_password] => xxxx [id] => 21929000243365 [library] => PVPL [firstname] => CHANEL [lastname] => WHEELER ) It's when processILSUser() sets $user that things get wonky (at least that's how it looks to me). $info[$usernameField] is passing the patron barcode properly. But I need to eat something before I dig into getByUsername(). :) chanel From: Demian Katz [mailto:dem...@vi...] Sent: Monday, March 04, 2013 5:43 PM To: Chanel Wheeler; vufind-tech (vuf...@li...<mailto:vuf...@li...>) Subject: RE: [VuFind-Tech] VuFind 2 - extending class from file not in module.config.php Ahh, okay, so that means that some other type of exception is getting thrown, and the Manager is transforming it into a generic technical error. Try var_dump($e) or var_dump($e->getMessage()) around line 293 of Manager.php -- that should give more information. And you're right about the huge var_dump -- one drawback to ZF2's "service manager" approach to dependency management is that there's a gigantic object attached to many resources, and it can make these types of debug dumps painful. I haven't found a great workaround, though it might help to use XDebug, since I think that includes some controls for limiting the depth of var_dumps. - Demian ________________________________ From: Chanel Wheeler [Cha...@ya...] Sent: Monday, March 04, 2013 2:56 PM To: vufind-tech (vuf...@li...<mailto:vuf...@li...>) Subject: Re: [VuFind-Tech] VuFind 2 - extending class from file not in module.config.php Neither place in \VuFind\Auth\ILS is throwing an exception. patronLogin works just fine -returns everything it should. The username isn't missing anywhere. It's the login function in Manager.php that's throwing the exception. What I did find is this: In Manager.php, the getAuth function, $this->auth is a ridiculously huge object that when dumped to the browser eventually overwhelms it and the page errors out . This is a just a very small portion of it: bool(false) object(VuFind\Auth\ILS)#656 (4) { ["catalog":protected]=> object(VuFind\ILS\Connection)#658 (6) { ["driverInitialized":protected]=> bool(true) ["driver":protected]=> object(VuFind\ILS\Driver\Symphony)#660 (4) { ["policyCache":protected]=> bool(false) ["policies":protected]=> NULL ["serviceLocator":protected]=> object(VuFind\ILS\Driver\PluginManager)#659 (18) { ["allowOverride":protected]=> bool(true) ["autoAddInvokableClass":protected]=> bool(true) ["creationOptions":protected]=> NULL ["serviceLocator":protected]=> object(Zend\ServiceManager\ServiceManager)#2 (15) { ["canonicalNames":protected]=> array(191) { ["SharedEventManager"]=> string(18) "sharedeventmanager" ["EventManager"]=> string(12) "eventmanager" ["ModuleManager"]=> string(13) "modulemanager" ["Zend\EventManager\EventManagerInterface"]=> string(37) "zendeventmanagereventmanagerinterface" ["ServiceManager"]=> string(14) "servicemanager" ["servicemanager"]=> string(14) "servicemanager" ["Zend\ServiceManager\ServiceLocatorInterface"]=> string(41) "zendservicemanagerservicelocatorinterface" ["Zend\ServiceManager\ServiceManager"]=> string(32) "zendservicemanagerservicemanager" ["ApplicationConfig"]=> string(17) "applicationconfig" ["applicationconfig"]=> string(17) "applicationconfig" ["modulemanager"]=> string(13) "modulemanager" ["ServiceListener"]=> string(15) "servicelistener" ["servicelistener"]=> string(15) "servicelistener" ["ServiceListenerInterface"]=> string(24) "servicelistenerinterface" ["eventmanager"]=> string(12) "eventmanager" ["sharedeventmanager"]=> string(18) "sharedeventmanager" ["Application"]=> string(11) "application" ["Config"]=> string(6) "config" ["ControllerLoader"]=> string(16) "controllerloader" ["ControllerPluginManager"]=> string(23) "controllerpluginmanager" ["ConsoleAdapter"]=> string(14) "consoleadapter" ["ConsoleRouter"]=> string(13) "consolerouter" ["DependencyInjector"]=> string(18) "dependencyinjector" ["DiAbstractServiceFactory"]=> string(24) "diabstractservicefactory" ["DiServiceInitializer"]=> string(20) "diserviceinitializer" ["DiStrictAbstractServiceFactory"]=> string(30) "districtabstractservicefactory" ["FilterManager"]=> string(13) "filtermanager" ["FormElementManager"]=> string(18) "formelementmanager" ["HttpRouter"]=> string(10) "httprouter" ["PaginatorPluginManager"]=> string(22) "paginatorpluginmanager" ["Request"]=> string(7) "request" ["Response"]=> string(8) "response" ["Router"]=> string(6) "router" ["RoutePluginManager"]=> string(18) "routepluginmanager" ["ValidatorManager"]=> string(16) "validatormanager" ["ViewHelperManager"]=> string(17) "viewhelpermanager" ["ViewFeedRenderer"]=> string(16) "viewfeedrenderer" ["ViewFeedStrategy"]=> string(16) "viewfeedstrategy" ["ViewJsonRenderer"]=> string(16) "viewjsonrenderer" ["ViewJsonStrategy"]=> string(16) "viewjsonstrategy" ["ViewManager"]=> string(11) "viewmanager" ["ViewResolver"]=> string(12) "viewresolver" ["ViewTemplateMapResolver"]=> string(23) "viewtemplatemapresolver" ["ViewTemplatePathStack"]=> string(21) "viewtemplatepathstack" ["VuFind\Http"]=> string(10) "vufindhttp" ["VuFindTheme\ThemeInfo"]=> string(20) "vufindthemethemeinfo" ["VuFind\AuthManager"]=> string(17) "vufindauthmanager" ["VuFind\CacheManager"]=> string(18) "vufindcachemanager" ["VuFind\Cart"]=> string(10) "vufindcart" ["VuFind\DateConverter"]=> string(19) "vufinddateconverter" ["VuFind\DbAdapter"]=> string(15) "vufinddbadapter" ["VuFind\DbAdapterFactory"]=> string(22) "vufinddbadapterfactory" ["VuFind\Export"]=> string(12) "vufindexport" ["VuFind\HMAC"]=> string(10) "vufindhmac" ["VuFind\ILSConnection"]=> string(19) "vufindilsconnection" ["VuFind\ILSHoldLogic"]=> string(18) "vufindilsholdlogic" ["VuFind\ILSHoldSettings"]=> string(21) "vufindilsholdsettings" ["VuFind\ILSTitleHoldLogic"]=> string(23) "vufindilstitleholdlogic" ["VuFind\Logger"]=> string(12) "vufindlogger" ["VuFind\Mailer"]=> string(12) "vufindmailer" ["VuFind\RecordRouter"]=> string(18) "vufindrecordrouter" ["VuFind\RecordStats"]=> string(17) "vufindrecordstats" ["VuFind\SearchSpecsReader"]=> string(23) "vufindsearchspecsreader" ["VuFind\SearchStats"]=> string(17) "vufindsearchstats" ["VuFind\SMS"]=> string(9) "vufindsms" ["VuFind\Translator"]=> string(16) "vufindtranslator" ["VuFind\WorldCatConnection"]=> string(24) "vufindworldcatconnection" ["VuFind\WorldCatUtils"]=> string(19) "vufindworldcatutils" ["DispatchListener"]=> string(16) "dispatchlistener" ["RouteListener"]=> string(13) "routelistener" ["SendResponseListener"]=> string(20) "sendresponselistener" ["VuFindTheme\Mobile"]=> string(17) "vufindthememobile" ["VuFindTheme\ResourceContainer"]=> string(28) "vufindthemeresourcecontainer" ["VuFind\RecordLoader"]=> string(18) "vufindrecordloader" ["VuFind\SessionManager"]=> string(20) "vufindsessionmanager" ["Configuration"]=> string(13) "configuration" ["Console"]=> string(7) "console" ["Di"]=> string(2) "di" ["Zend\Di\LocatorInterface"]=> string(22) "zenddilocatorinterface" ["Zend\Mvc\Controller\PluginManager"]=> string(30) "zendmvccontrollerpluginmanager" ["Zend\View\Resolver\TemplateMapResolver"]=> string(35) "zendviewresolvertemplatemapresolver" ["Zend\View\Resolver\TemplatePathStack"]=> string(33) "zendviewresolvertemplatepathstack" ["Zend\View\Resolver\AggregateResolver"]=> string(33) "zendviewresolveraggregateresolver" ["Zend\View\Resolver\ResolverInterface"]=> string(33) "zendviewresolverresolverinterface" ["translator"]=> string(10) "translator" ["controllerloader"]=> string(16) "controllerloader" ["config"]=> string(6) "config" ["browse"]=> string(6) "browse" ["collection"]=> string(10) "collection" ["collections"]=> string(11) "collections" ["record"]=> string(6) "record" ["admin"]=> string(5) "admin" ["ajax"]=> string(4) "ajax" ["alphabrowse"]=> string(11) "alphabrowse" ["author"]=> string(6) "author" ["authority"]=> string(9) "authority" ["cart"]=> string(4) "cart" ["cover"]=> string(5) "cover" ["error"]=> string(5) "error" ["help"]=> string(4) "help" ["hierarchy"]=> string(9) "hierarchy" ["index"]=> string(5) "index" ["install"]=> string(7) "install" ["missingrecord"]=> string(13) "missingrecord" ["my-research"]=> string(10) "myresearch" ["oai"]=> string(3) "oai" ["records"]=> string(7) "records" ["search"]=> string(6) "search" ["summon"]=> string(6) "summon" ["summonrecord"]=> string(12) "summonrecord" ["tag"]=> string(3) "tag" ["upgrade"]=> string(7) "upgrade" ["vudl"]=> string(4) "vudl" ["worldcat"]=> string(8) "worldcat" ["worldcatrecord"]=> string(14) "worldcatrecord" ["devtools"]=> string(8) "devtools" ["controllerpluginmanager"]=> string(23) "controllerpluginmanager" ["viewhelpermanager"]=> string(17) "viewhelpermanager" ["validatormanager"]=> string(16) "validatormanager" ["filtermanager"]=> string(13) "filtermanager" ["formelementmanager"]=> string(18) "formelementmanager" ["routepluginmanager"]=> string(18) "routepluginmanager" ["application"]=> string(11) "application" ["request"]=> string(7) "request" ["response"]=> string(8) "response" ["routelistener"]=> string(13) "routelistener" ["dispatchlistener"]=> string(16) "dispatchlistener" ["viewmanager"]=> string(11) "viewmanager" ["sendresponselistener"]=> string(20) "sendresponselistener" ["router"]=> string(6) "router" ["RouteNotFoundStrategy"]=> string(21) "routenotfoundstrategy" ["routenotfoundstrategy"]=> string(21) "routenotfoundstrategy" ["Zend\Mvc\View\RouteNotFoundStrategy"]=> string(32) "zendmvcviewroutenotfoundstrategy" ["Zend\Mvc\View\Http\RouteNotFoundStrategy"]=> string(36) "zendmvcviewhttproutenotfoundstrategy" ["404Strategy"]=> string(11) "404strategy" ["ExceptionStrategy"]=> string(17) "exceptionstrategy" ["exceptionstrategy"]=> string(17) "exceptionstrategy" ["Zend\Mvc\View\ExceptionStrategy"]=> string(28) "zendmvcviewexceptionstrategy" ["Zend\Mvc\View\Http\ExceptionStrategy"]=> string(32) "zendmvcviewhttpexceptionstrategy" ["viewresolver"]=> string(12) "viewresolver" ["viewtemplatemapresolver"]=> string(23) "viewtemplatemapresolver" ["viewtemplatepathstack"]=> string(21) "viewtemplatepathstack" ["ViewRenderer"]=> string(12) "viewrenderer" ["viewrenderer"]=> string(12) "viewrenderer" ["Zend\View\Renderer\PhpRenderer"]=> string(27) From: Demian Katz [mailto:dem...@vi...] Sent: Monday, March 04, 2013 11:56 AM To: Chanel Wheeler; vufind-tech (vuf...@li...<mailto:vuf...@li...>) Subject: RE: [VuFind-Tech] VuFind 2 - extending class from file not in module.config.php Hmm. Well, there are only two places in \VuFind\Auth\ILS that throw that exception. Might be worth tweaking the exception messages temporarily to see which one is the culprit - either the patronLogin() method is throwing an exception (you could get more details by var_dumping it inside the catch block), or else the ILS response is missing the username field. - Demian From: Chanel Wheeler [mailto:Cha...@ya...] Sent: Monday, March 04, 2013 1:39 PM To: vufind-tech (vuf...@li...<mailto:vuf...@li...>) Subject: Re: [VuFind-Tech] VuFind 2 - extending class from file not in module.config.php I'm in "development" mode but it's not giving me a backtrace for this. I'm only getting a backtrace when something goes so wrong it can't load the page contents. chanel From: Demian Katz [mailto:dem...@vi...] Sent: Monday, March 04, 2013 10:54 AM To: Chanel Wheeler; vufind-tech (vuf...@li...<mailto:vuf...@li...>) Subject: RE: [VuFind-Tech] VuFind 2 - extending class from file not in module.config.php Can you share the backtrace from the exception? That might offer some clues. If you're not seeing backtraces, you need to set the VUFIND_ENV environment variable in httpd-vufind.conf to "development" in order to get more information. - Demian From: Chanel Wheeler [mailto:Cha...@ya...] Sent: Monday, March 04, 2013 11:58 AM To: vufind-tech (vuf...@li...<mailto:vuf...@li...>) Subject: Re: [VuFind-Tech] VuFind 2 - extending class from file not in module.config.php I haven't been able to test the hold logic (soon, I hope). Once I got the VuFind base code up to date, I ceased to able to log in when I tried to place a hold. Web Services successfully logs me in from the ILS's perspective but module/VuFind/src/VuFind/Auth/Manager.php is throwing a 'authentication_error_technical' in the login function. My auth method is set to ILS in config.ini. Any idea what might be going on? Thanks, chanel From: Demian Katz [mailto:dem...@vi...] Sent: Wednesday, February 27, 2013 9:42 AM To: Chanel Wheeler; vufind-tech (vuf...@li...<mailto:vuf...@li...>) Subject: RE: [VuFind-Tech] VuFind 2 - extending class from file not in module.config.php Okay, after some frantic refactoring this morning, I've got services set up for the hold logic: http://vufind.git.sourceforge.net/git/gitweb.cgi?p=vufind/vufind;a=commitdiff;h=8eeca0c5f15ec00ba7cdf13de85beaa6de4002ed You can now override the 'VuFind\ILSHoldLogic' and/or 'VuFind\ILSTitleHoldLogic' services to inject custom behavior. Let me know if you have any questions/problems... and apologies in advance if it's a bit painful merging up to the current master. There are a lot of parts in motion right now. - Demian From: Chanel Wheeler [mailto:Cha...@ya...] Sent: Tuesday, February 26, 2013 5:29 PM To: vufind-tech (vuf...@li...<mailto:vuf...@li...>) Subject: Re: [VuFind-Tech] VuFind 2 - extending class from file not in module.config.php I only understand the options you're offering at a high level so I can't comprehend what the full set of ramifications would be for either choice. I'll answer in this fashion: the solution should offer the most versatility in affecting how/when/what hold-related links appear. For example, we don't do recalls - patrons place holds on anything that's holdable and wait their turn. Generally we offer title holds, but we switch to copy holds for volume-/issue- based items (title holds and copy holds are mutually exclusive). So does one of the options achieve maximum versatility better than the other? (If you go with option #2, I can definitely say I'm going to need some help with the infrastructure. :) ) chanel From: Demian Katz [mailto:dem...@vi...] Sent: Tuesday, February 26, 2013 2:51 PM To: Chanel Wheeler; vufind-tech (vuf...@li...<mailto:vuf...@li...>) Subject: RE: [VuFind-Tech] VuFind 2 - extending class from file not in module.config.php Right now, there's no extension point for the hold logic code. There are a couple of approaches: 1.) We could define the hold logic as a service in one of the configured plugin managers, and then have everything that uses it pull it from there; then you would be able to configure a custom hold logic class just like other things. 2.) We could add setters to classes that rely on the hold logic -- so, for example, the SolrMarc record driver could have setHoldLogic/getHoldLogic methods, with getHoldLogic constructing a default \VuFind\ILS\Logic\Holds object if no override was set. Then using an alternative class would be a matter of creating a custom factory for the SolrMarc class that injects a different Holds logic object. Does that make sense? I think #1 might be a bit less work for you to deal with, but it makes our huge configuration yet another notch larger. Option #2 requires less default configuration, but it makes the custom configuration a little less convenient. Let me know if you have thoughts/preferences, and I can help create the infrastructure you need to plug in your custom class if that would be useful. (Hopefully I'll have a few minutes tomorrow). - Demian ________________________________ From: Chanel Wheeler [Cha...@ya...] Sent: Tuesday, February 26, 2013 4:14 PM To: vufind-tech (vuf...@li...<mailto:vuf...@li...>) Subject: [VuFind-Tech] VuFind 2 - extending class from file not in module.config.php Hi, I'm extending VuFind/ILS/Logic/Holds. I don't see anything in the VuFind module.config.php that I should add/customize for my local module. The reason this is of particular concern is because VuFind isn't picking up my local Holds.php with the extended class (I even tried putting gibberish in it and VuFind isn't barfing). I've deleted the cached Objects directory and restarted VuFind. What else do I need to do? Thanks, chanel Chanel Wheeler Library Network Programmer/Analyst Yavapai Library Network 1120 Commerce Dr. Prescott, AZ 86305 Phone: (928) 442-5741 cha...@ya...<mailto:cha...@ya...> Open a help desk ticket<mailto:he...@yl...> |
From: Chanel W. <Cha...@ya...> - 2013-03-05 22:09:11
|
Here's confirmation that overriding the holds logic works. Thanks! chanel From: Demian Katz [mailto:dem...@vi...] Sent: Wednesday, February 27, 2013 9:42 AM To: Chanel Wheeler; vufind-tech (vuf...@li...) Subject: RE: [VuFind-Tech] VuFind 2 - extending class from file not in module.config.php Okay, after some frantic refactoring this morning, I've got services set up for the hold logic: http://vufind.git.sourceforge.net/git/gitweb.cgi?p=vufind/vufind;a=commitdiff;h=8eeca0c5f15ec00ba7cdf13de85beaa6de4002ed You can now override the 'VuFind\ILSHoldLogic' and/or 'VuFind\ILSTitleHoldLogic' services to inject custom behavior. Let me know if you have any questions/problems... and apologies in advance if it's a bit painful merging up to the current master. There are a lot of parts in motion right now. - Demian From: Chanel Wheeler [mailto:Cha...@ya...] Sent: Tuesday, February 26, 2013 5:29 PM To: vufind-tech (vuf...@li...<mailto:vuf...@li...>) Subject: Re: [VuFind-Tech] VuFind 2 - extending class from file not in module.config.php I only understand the options you're offering at a high level so I can't comprehend what the full set of ramifications would be for either choice. I'll answer in this fashion: the solution should offer the most versatility in affecting how/when/what hold-related links appear. For example, we don't do recalls - patrons place holds on anything that's holdable and wait their turn. Generally we offer title holds, but we switch to copy holds for volume-/issue- based items (title holds and copy holds are mutually exclusive). So does one of the options achieve maximum versatility better than the other? (If you go with option #2, I can definitely say I'm going to need some help with the infrastructure. :) ) chanel From: Demian Katz [mailto:dem...@vi...] Sent: Tuesday, February 26, 2013 2:51 PM To: Chanel Wheeler; vufind-tech (vuf...@li...<mailto:vuf...@li...>) Subject: RE: [VuFind-Tech] VuFind 2 - extending class from file not in module.config.php Right now, there's no extension point for the hold logic code. There are a couple of approaches: 1.) We could define the hold logic as a service in one of the configured plugin managers, and then have everything that uses it pull it from there; then you would be able to configure a custom hold logic class just like other things. 2.) We could add setters to classes that rely on the hold logic -- so, for example, the SolrMarc record driver could have setHoldLogic/getHoldLogic methods, with getHoldLogic constructing a default \VuFind\ILS\Logic\Holds object if no override was set. Then using an alternative class would be a matter of creating a custom factory for the SolrMarc class that injects a different Holds logic object. Does that make sense? I think #1 might be a bit less work for you to deal with, but it makes our huge configuration yet another notch larger. Option #2 requires less default configuration, but it makes the custom configuration a little less convenient. Let me know if you have thoughts/preferences, and I can help create the infrastructure you need to plug in your custom class if that would be useful. (Hopefully I'll have a few minutes tomorrow). - Demian ________________________________ From: Chanel Wheeler [Cha...@ya...] Sent: Tuesday, February 26, 2013 4:14 PM To: vufind-tech (vuf...@li...<mailto:vuf...@li...>) Subject: [VuFind-Tech] VuFind 2 - extending class from file not in module.config.php Hi, I'm extending VuFind/ILS/Logic/Holds. I don't see anything in the VuFind module.config.php that I should add/customize for my local module. The reason this is of particular concern is because VuFind isn't picking up my local Holds.php with the extended class (I even tried putting gibberish in it and VuFind isn't barfing). I've deleted the cached Objects directory and restarted VuFind. What else do I need to do? Thanks, chanel Chanel Wheeler Library Network Programmer/Analyst Yavapai Library Network 1120 Commerce Dr. Prescott, AZ 86305 Phone: (928) 442-5741 cha...@ya...<mailto:cha...@ya...> Open a help desk ticket<mailto:he...@yl...> |
From: Demian K. <dem...@vi...> - 2013-03-06 12:24:13
|
Fantastic! And hopefully if you've survived this particular challenge, you'll be able to handle just about anything! - Demian ________________________________ From: Chanel Wheeler [Cha...@ya...] Sent: Tuesday, March 05, 2013 5:08 PM To: vufind-tech (vuf...@li...) Subject: Re: [VuFind-Tech] VuFind 2 - extending class from file not in module.config.php Here’s confirmation that overriding the holds logic works. Thanks! chanel From: Demian Katz [mailto:dem...@vi...] Sent: Wednesday, February 27, 2013 9:42 AM To: Chanel Wheeler; vufind-tech (vuf...@li...) Subject: RE: [VuFind-Tech] VuFind 2 - extending class from file not in module.config.php Okay, after some frantic refactoring this morning, I’ve got services set up for the hold logic: http://vufind.git.sourceforge.net/git/gitweb.cgi?p=vufind/vufind;a=commitdiff;h=8eeca0c5f15ec00ba7cdf13de85beaa6de4002ed You can now override the 'VuFind\ILSHoldLogic' and/or 'VuFind\ILSTitleHoldLogic' services to inject custom behavior. Let me know if you have any questions/problems… and apologies in advance if it’s a bit painful merging up to the current master. There are a lot of parts in motion right now. - Demian From: Chanel Wheeler [mailto:Cha...@ya...] Sent: Tuesday, February 26, 2013 5:29 PM To: vufind-tech (vuf...@li...<mailto:vuf...@li...>) Subject: Re: [VuFind-Tech] VuFind 2 - extending class from file not in module.config.php I only understand the options you’re offering at a high level so I can’t comprehend what the full set of ramifications would be for either choice. I’ll answer in this fashion: the solution should offer the most versatility in affecting how/when/what hold-related links appear. For example, we don’t do recalls – patrons place holds on anything that’s holdable and wait their turn. Generally we offer title holds, but we switch to copy holds for volume-/issue- based items (title holds and copy holds are mutually exclusive). So does one of the options achieve maximum versatility better than the other? (If you go with option #2, I can definitely say I’m going to need some help with the infrastructure. :) ) chanel From: Demian Katz [mailto:dem...@vi...] Sent: Tuesday, February 26, 2013 2:51 PM To: Chanel Wheeler; vufind-tech (vuf...@li...<mailto:vuf...@li...>) Subject: RE: [VuFind-Tech] VuFind 2 - extending class from file not in module.config.php Right now, there's no extension point for the hold logic code. There are a couple of approaches: 1.) We could define the hold logic as a service in one of the configured plugin managers, and then have everything that uses it pull it from there; then you would be able to configure a custom hold logic class just like other things. 2.) We could add setters to classes that rely on the hold logic -- so, for example, the SolrMarc record driver could have setHoldLogic/getHoldLogic methods, with getHoldLogic constructing a default \VuFind\ILS\Logic\Holds object if no override was set. Then using an alternative class would be a matter of creating a custom factory for the SolrMarc class that injects a different Holds logic object. Does that make sense? I think #1 might be a bit less work for you to deal with, but it makes our huge configuration yet another notch larger. Option #2 requires less default configuration, but it makes the custom configuration a little less convenient. Let me know if you have thoughts/preferences, and I can help create the infrastructure you need to plug in your custom class if that would be useful. (Hopefully I'll have a few minutes tomorrow). - Demian ________________________________ From: Chanel Wheeler [Cha...@ya...] Sent: Tuesday, February 26, 2013 4:14 PM To: vufind-tech (vuf...@li...<mailto:vuf...@li...>) Subject: [VuFind-Tech] VuFind 2 - extending class from file not in module.config.php Hi, I’m extending VuFind/ILS/Logic/Holds. I don’t see anything in the VuFind module.config.php that I should add/customize for my local module. The reason this is of particular concern is because VuFind isn’t picking up my local Holds.php with the extended class (I even tried putting gibberish in it and VuFind isn’t barfing). I’ve deleted the cached Objects directory and restarted VuFind. What else do I need to do? Thanks, chanel Chanel Wheeler Library Network Programmer/Analyst Yavapai Library Network 1120 Commerce Dr. Prescott, AZ 86305 Phone: (928) 442-5741 cha...@ya...<mailto:cha...@ya...> Open a help desk ticket<mailto:he...@yl...> |