Jump to:

17452 Posts in 4473 Topics by 1971 members

Archive

SilverStripe Forums » Archive » 'Specific newsletters' option in 'newsletter subscription form' page type does not work

Our old forums are still available as a read-only archive.

Moderators: martimiz, Sean, biapar, Willr, Ingo, simon_w

Page: 1 2
Go to End
Author Topic: 6553 Views
  • elijahlofgren
    Avatar
    Google Summer of Code Hacker
    222 Posts

    'Specific newsletters' option in 'newsletter subscription form' page type does not work Link to this post

    I found a bug last night when trying to help Tatey set up a 'newsletter subscription form' page.

    First off, the checkboxes for each Newsletter do not show up under the 'Specific newsletters' option in 'newsletter subscription form' page type.

    Instead I get this error:

    Notice: Undefined variable: nlCheckboxes in /var/www/silverstripe-gsoc/cms/code/Newsletter/SubscribeForm.php on line 92

    I was able to fix that error and make the option show up by changing this line in cms/code/Newsletter/SubscribeForm.php from:
    if($newsletterTypes && is_array($newsletterTypes)) {
    to:
    if($newsletterTypes && is_object($newsletterTypes)) {

    The next problem I found was that none of the checkbox selections under the "Specific newsletters" option would be saved unless I made the following change (changing $data['CustomNewsletters'] to $_REQUEST['CustomNewsletters']):
    http://www.elijahlofgren.com/silverstripe/diffs/Make-Specific-newsletters-option-work-in-Admin-Panel-only-cms-gsoc-r37164.diff

    Then, the checkbox selections were saved in the Admin Panel. I did start getting these errors though:

    Error in Ajax evaluator on line 974: invalid flag after regular expression
    Notice: Undefined offset: 0 in /var/www/silverstripe-gsoc/cms/code/Newsletter/SubscribeForm.php on line 132

    Notice: Undefined variable: has in /var/www/silverstripe-gsoc/sapphire/core/model/ComponentSet.php on line 94

    Notice: Undefined variable: has in /var/www/silverstripe-gsoc/sapphire/core/model/ComponentSet.php on line 99

    Notice: Undefined variable: has in /var/www/silverstripe-gsoc/sapphire/core/model/ComponentSet.php on line 99

    Notice: Undefined variable: has in /var/www/silverstripe-gsoc/sapphire/core/model/ComponentSet.php on line 99

    Notice: Undefined variable: removeList in /var/www/silverstripe-gsoc/sapphire/core/model/ComponentSet.php on line 105

    Then I tried the frontend, and I got these errors:

    Notice: Undefined variable: defaultOption in /var/www/silverstripe-gsoc/sapphire/forms/EditableRadioField.php on line 135

    Fatal error: Call to a member function getRecord() on a non-object in /var/www/silverstripe-gsoc/sapphire/forms/CheckboxSetField.php on line 20

    I was able to fix that fatal error with this change (adding a if ( is_object($this->form) ) statement):
    http://www.elijahlofgren.com/silverstripe/diffs/Fix-CheckboxSetField-getRecord-FATAL-error-sapphire-gsoc-r37164.diff

    MAIN ISSUE: However, I was unable to fix a major bug where the "Subscribe to lists" option always shows 1 less Newsletter checkbox than is selected under the "Specific newsletters" option on the backend. I tried for a long time to fix this last night, but was unable to.

    Hopefully you will have more success fixing this than I did. ;)

    My details:
    browser, operating system: Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.8.1.4) Gecko/20061201 Firefox/2.0.0.4 (Ubuntu-feisty)
    web server software, PHP version: Apache/2.2.3 (Ubuntu) PHP/5.2.1
    SilverStripe version: gsoc branch revision 37164

    Hope this helps,

    Elijah Lofgren

  • msantang
    Avatar
    Community Member
    41 Posts

    Re: 'Specific newsletters' option in 'newsletter subscription form' page type does not work Link to this post

    Thanks i just was having that problem.

    but only changing
    if($newsletterTypes && is_array($newsletterTypes)) {
    to:
    if($newsletterTypes && is_object($newsletterTypes)) {

    works for me

    About the missing Newsletter in the list:

    in sapphire/forms/CheckboxSetField.php too

    if(is_array($source)){
       //unset($source[0]); <- comment this line
       unset($source['']);
    }

    Martin

  • elijahlofgren
    Avatar
    Google Summer of Code Hacker
    222 Posts

    Re: 'Specific newsletters' option in 'newsletter subscription form' page type does not work Link to this post

    Thanks for your help msantang!

    I have applied the following changes to the gsoc branches of cms and sapphire:
    http://www.elijahlofgren.com/silverstripe/patches/Fix-bug-Specific-newsletters-option-in-newsletter-subscription-form-page-type-does-not-work-cms-sapphire-gsoc-r37301.patch

    Here is an explanation of the changes:

    ------------------------------------------------------------------------
    r37304 | elofgren | 2007-06-22 12:46:37 -0500 (Fri, 22 Jun 2007) | 1 line

    BUGFIX: Add an is_object($this->form) check to fix 'Fatal error: Call to a member function getRecord() on a non-object' error encountered when viewing a 'newsletter subscription form' page on the frontend. Comment out unset($source[0]) call in order to make all the newsletters selected show up under 'Subscribe to lists'. Thanks to msantang for this fix\! More info: http://www.silverstripe.com/bugs/flat/1675
    ------------------------------------------------------------------------
    r37303 | elofgren | 2007-06-22 12:40:01 -0500 (Fri, 22 Jun 2007) | 1 line

    BUGFIX: Change is_array($newsletterTypes) to is_object($newsletterTypes) in order to make the list of newsletters show up under the 'Specific newsletters' option in 'newsletter subscription form' pages and change data['CustomNewsletters'] to _REQUEST['CustomNewsletters'] so that the options will be saved. More info: http://www.silverstripe.com/bugs/reply/1675
    ------------------------------------------------------------------------

    Thanks again,

    Elijah

  • msantang
    Avatar
    Community Member
    41 Posts

    Re: 'Specific newsletters' option in 'newsletter subscription form' page type does not work Link to this post

    I still have problems, in suscription form:

    - In CMS if i select 'allNewsletters' and save when i see the form again 'specific newletters' is selected (but in DB 'allnewsletters' = 1)

    - if is selected 'allNewsletters' or 'specific newletters' show the newletters checkbox in the form in both case.

    - Email type field do not show me the options in form

    - if i fill the form and click submit button i get:

    Debug (Debug::showError() in line 133 of Debug.php)
    msg =
    Couldn't run query: SELECT `Group`.*, `Group`.ID, if(`Group`.ClassName,`Group`.ClassName,'Group') AS RecordClassName FROM `Group` WHERE (`ID` IN ()) | You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '))' at line 1
    errorLevel =
    256

  • elijahlofgren
    Avatar
    Google Summer of Code Hacker
    222 Posts

    Re: 'Specific newsletters' option in 'newsletter subscription form' page type does not work Link to this post

    > - In CMS if i select 'allNewsletters' and save when i see the form again 'specific newletters' is selected (but in DB 'allnewsletters' = 1)

    I was able to fix that bug with this simple change:
    http://www.elijahlofgren.com/silverstripe/patches/Fix-bug-AllNewsletters-value-not-being-passed-to-OptionsetField-cms-gsoc-r37360.patch

    I've also committed that change to the gsoc branch of cms:
    ------------------------------------------------------------------------
    r37360 | elofgren | 2007-06-25 12:04:10 -0500 (Mon, 25 Jun 2007) | 1 line

    BUGFIX: Make value of 'SubscribeForm->AllNewsletters' be passed to 'All newsletters' and 'Specific newsletters' OptionsetField so that 'Specific newsletters' is not always shown as checked even if 'All newsletters' was chosen. Reported here: http://www.silverstripe.com/bugs/flat/1675?showPost=1741#post1741
    ------------------------------------------------------------------------

    - if is selected 'allNewsletters' or 'specific newletters' show the newletters checkbox in the form in both case.

    It does not appear that this is a bug. Rather it seems to be a missing feature.

    It does seem to make sense that the Newsletter checkboxes shouldn't be shown if "All Newsletters" is checked or just one Newsletter is chosen.
    Looking at SubscribeForm_Controller->Form() in cms/code/Newsletter/SubscribeForm.php it seems like the checkboxes will always be shown.

    > - Email type field do not show me the options in form

    It looks like these need to be added manually yourself. While editing the Form, click the "More options" icon to the right of "Mail format" and you can type an option and click the green "Add option to field" icon.

    - if i fill the form and click submit button i get:

    Debug (Debug::showError() in line 133 of Debug.php)
    msg =
    Couldn't run query: SELECT `Group`.*, `Group`.ID, if(`Group`.ClassName,`Group`.ClassName,'Group') AS RecordClassName FROM `Group` WHERE (`ID` IN ()) | You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '))' at line 1
    errorLevel =
    256

    I don't know what version of SilverStripe you are running, but that same type of error happened in the gsoc branch of SilverStripe for a while before it was fixed.

    Do you get that same type of error if you go to /admin/security/ and try to add a member to a group?

    What version of SilverStripe are you running?

    Hope this helps,

    Elijah

  • elijahlofgren
    Avatar
    Google Summer of Code Hacker
    222 Posts

    Re: 'Specific newsletters' option in 'newsletter subscription form' page type does not work Link to this post

    == I caused that SQL error. Sorry! ==

    In the case of the problem with the gsoc branch, I made this change in r36670 to fix an error notice in sapphire/security/Member.php
    - if($collatedGroups) {
    + if(isset($collatedGroups)) {

    That change caused a SQL error which was fixed by mlanthaler who made this change:
    -      if(isset($collatedGroups)) {
    +      if(count($collatedGroups) > 0) {

    Here was his log message:
    ------------------------------------------------------------------------
    r36789 | mlanthaler | 2007-06-13 05:14:47 -0500 (Wed, 13 Jun 2007) | 1 line

    Bugfix: The added isset() caused a bug when adding a new member because it produces an invalid SQL statement ("... WHERE (`ID` IN ())").
    ------------------------------------------------------------------------

    So what I would do is open sapphire/security/Member.php and try making this change:

    replace this line (if it exists):

    if(isset($collatedGroups)) {

    with this:

    if(count($collatedGroups) > 0) {

    This error got into the daily builds by patch posted here:
    http://www.silverstripe.com/contributions/flat/1371

  • elijahlofgren
    Avatar
    Google Summer of Code Hacker
    222 Posts

    Re: 'Specific newsletters' option in 'newsletter subscription form' page type does not work Link to this post

    The latest daily build (silverstripe.2.0.DailyBuild.2007-06-25) does not seem to contain this bug: http://www.silverstripe.com/contributions/flat/1371?showPost=1746#post1746

    Cheers,

    Elijah

  • msantang
    Avatar
    Community Member
    41 Posts
    6553 Views
Page: 1 2
Go to Top

Want to know more about the company that brought you SilverStripe? Then check out SilverStripe.com

Comments on this website? Please give feedback.