Ejemplo n.º 1
0
function _wpr_subscriptionform_form($parameters = array(), $errors = array())
{
    $parameters = (object) $parameters;
    if (!empty($parameters->custom_fields)) {
        $fieldsToSelect = explode(",", $parameters->custom_fields);
    }
    global $wpdb;
    ?>
<div class="wrap">
  <h2>Create Subscription Form</h2>
</div>

<script>
function Autoresponder(id,name)
{
	this.id=id;
	this.name=name;
}
var AutorespondersOfNewsletters=new Array();

<?php 
    $listOfAutorespondersOfNewsletters = _wpr_get_newsletters();
    foreach ($listOfAutorespondersOfNewsletters as $count => $news) {
        ?>
AutorespondersOfNewsletters['<?php 
        echo $news->id;
        ?>
'] = new Array();
	<?php 
        $autoresponders = Autoresponder::getAutorespondersOfNewsletter($news->id);
        foreach ($autoresponders as $autoresponder) {
            $aid = $autoresponder->getId();
            $name = $autoresponder->getName();
            if ($aid == 0 || empty($name)) {
                continue;
            }
            ?>
AutorespondersOfNewsletters['<?php 
            echo $news->id;
            ?>
'].push(new Autoresponder(<?php 
            echo $aid;
            ?>
,"<?php 
            echo $name;
            ?>
"));
		<?php 
        }
    }
    ?>
function autoresponderDropDownBox()
{
	return document.getElementById('autoresponders_list');
}



function updateAutorespondersOption(currentNid)
{
	 if (AutorespondersOfNewsletters[currentNid]!=undefined)
	 {
		 
		 var listOfResponders = AutorespondersOfNewsletters[currentNid];

		 if (listOfResponders.length!=0)
		 {
			 //remove the options in the autoresponder series drop down box.
			 emptyAutoresponderFields();
			 
			 var countOfOptions=0;
			 for (var newopt in listOfResponders)
			 {
				 var theOpt = document.createElement("option");
				 theOpt.setAttribute("value","autoresponder_"+listOfResponders[newopt].id);
				 theOpt.innerHTML = listOfResponders[newopt].name;
				 autoresponderDropDownBox().appendChild(theOpt);
			 }
		 }
		 else
		 {
			 emptyAutoresponderFields();			 		 
		 }
		 
	 }
	 else
	 {
  		 emptyAutoresponderFields();
		 return false;
	 }
}


function _wpr_validate_subform_form_fields()
{
	var titleField =document.getElementById('formnamefield');	
	if (titleField.value.length==0)
	{
		alert("A name is required for this form. Please enter a name.");
		titleField.focus();
		return false;
	}
	
	
	var newsletterField = document.getElementById('newsletterlist');
	if (newsletterField.value=="")
	{
		alert("You must select a newsletter to which this subscription form will add subscribers.");
		newsletterField.focus();
		return false;
	}
	
	var confirmS = document.getElementById('confirms');
	if (jQuery.trim(confirmS.value).length==0)
	{
		alert("You must enter a subject for the confirm subscription e-mail.");
		confirmS.value='';
		confirmS.focus();
		return false;
	}
	
	
	var confirmB = document.getElementById('confirmb');
	if (jQuery.trim(confirmB.value).length==0)
	{
		alert("You must enter a body for the confirm subscription e-mail.");
		confirmB.value='';
		confirmB.focus();
		return false;
	}
	
	var confirmedS = document.getElementById('confirmeds');
	if (jQuery.trim(confirmedS.value).length==0)
	{
		alert("You must enter a subject for the confirmed subscription e-mail.");
		confirmedS.value='';
		confirmedS.focus();
		return false;
	}
	
	var confirmedB = document.getElementById('confirmedb');
	if (jQuery.trim(confirmedB.value).length==0)
	{
		alert("You must enter a body for the confirmed subscription e-mail.");
		confirmedB.value='';
		confirmedB.focus();
		return false;
	}
	
	var returnurlf = document.getElementById('returnurlfield');
	returnurl = returnurlf.value;
	if (jQuery.trim(returnurl).length !=0 && !checkURL(returnurl))
	{
		alert("The value in the return URL field should be a HTTP url. Please correct it or leave the field empty.");
		returnurlf.value='';
		returnurlf.focus();
		return false;	
	}
	
	return true;
	
	
	
	
}


function checkURL(value) 
{
  var urlregex = new RegExp(
        "^(http:\/\/www.|https:\/\/www.|ftp:\/\/www.|www.|http:\/\/){1}([0-9A-Za-z]+\.)");
  if(urlregex.test(value))
  {
    return(true);
  }
  return(false);
}


function emptyAutoresponderFields()
{
        jQuery("#autoresponders_list").children().each( function () 
													{
				jQuery(this).remove();										
														
		});
}

function Field(id,name,type,label,choices)

{

	this.name = name;
	this.id = id;
	this.type = type;
	this.label = label;
	this.choices = choices;

}




var Fields = new Array();

<?php 
    $query = "SELECT * FROM " . $wpdb->prefix . "wpr_custom_fields";
    $customfields = $wpdb->get_results($query);
    $count = 0;
    $newsletterlist = array();
    foreach ($customfields as $field) {
        $newsletterlist[] = $field->nid;
    }
    if (count($newsletterlist)) {
        $newsletterlist = array_unique($newsletterlist);
    }
    ?>
var NewsletterFields = Array();
	<?php 
    foreach ($newsletterlist as $newsletter) {
        ?>
NewsletterFields['<?php 
        echo $newsletter;
        ?>
'] = new Array();
	<?php 
    }
    foreach ($customfields as $field) {
        ?>
		
NewsletterFields['<?php 
        echo $field->nid;
        ?>
'].push(new Field('<?php 
        echo $field->id;
        ?>
','<?php 
        echo addslashes($field->name);
        ?>
','<?php 
        echo addslashes($field->type);
        ?>
','<?php 
        echo addslashes($field->label);
        ?>
','<?php 
        echo addslashes($field->enum);
        ?>
'));
<?php 
    }
    ?>
var customFieldList = new Array();
function showFields(elements)
{
	var fieldsCode;
	if (elements && elements.length > 0)
		document.getElementById('customfields').innerHTML = '';			
	else
		return;
	for (element in elements)
	{
		field = elements[element];
		var element = document.createElement("div");
		customFieldList.push(element);
		element.setAttribute("style","border: 1px solid #ccc; padding: 10px;");



		var formelement;

		    var check = document.createElement("input");

			check.setAttribute("type","checkbox");

			check.setAttribute("name","custom_fields[]");

			check.setAttribute("value",field.id);

			check.setAttribute("id","custom_"+field.id);

			element.appendChild(check);

			element.innerHTML += " "+field.name+"<br />";

			preview = document.createElement("div");

			preview.innerHTML += field.label +":";		

			preview.setAttribute("style","background-color: #ddd; border: 1px solid #eee; padding: 10px;");

			if (field.type == "text")

			{

				element.innerHTML += "Type: One Line Text <br /><strong>Preview: <br />";

				formelement = document.createElement("input");

				formelement.setAttribute("type","text");

			}

			else

			{

				formelement = document.createElement("select");

				

				var choices = field.choices.split(",");

				element.innerHTML += "Type: Multiple Choice<br /><strong>Preview: <br />";

				for (option in choices)

				{

					optionElement = document.createElement("option");

					optionElement.text = choices[option];

					formelement.add(optionElement,null);

				}

			}

			preview.appendChild(formelement);

			element.appendChild(preview);			

			element.innerHTML += "<br>";



		document.getElementById('customfields').appendChild(element);			

	}



}

var autoresponderToBeSelected = '<?php 
    echo @$parameters->followup_type == "postseries" ? "postseries_" : "autoresponder_";
    echo @$parameters->followup_id;
    ?>
';


function setValueOfAutoresponderField()
{
	document.getElementById('followup_field').value=autoresponderToBeSelected;
}
function load(id)
{
	document.getElementById('customfields').innerHTML="<div align=\"center\">--None--</div>";
	showFields(NewsletterFields[id]);
}

var toSelect = new Array(); //custom field ids to select.

<?php 
    if (isset($fieldsToSelect) && count($fieldsToSelect) > 0) {
        ?>
	<?php 
        foreach ($fieldsToSelect as $num => $field) {
            ?>

toSelect[<?php 
            echo $num;
            ?>
] = <?php 
            echo $field;
            ?>
;



<?php 
        }
    }
    function loadFollowUpAutoresponderList()
    {
    }
    ?>
jQuery(document).ready(function() {

    

	var selectedNewsletter = document.getElementById('newsletterlist').options[document.getElementById('newsletterlist').selectedIndex].value;

	showFields(NewsletterFields[selectedNewsletter]);
	updateAutorespondersOption(selectedNewsletter);
	setValueOfAutoresponderField();
	
	//if this form is being used to edit, then select the fields that were saved..
	for (var i in toSelect)
	{
		document.getElementById('custom_'+toSelect[i]).checked=true;
	}

});

</script>
<?php 
    if (count($errors) > 0) {
        ?>
<div class="updated fade">
  <ul>
    <?php 
        foreach ($errors as $error) {
            echo '<li>' . $error . '</li>';
        }
        ?>
  </ul>
</div>
<?php 
    }
    ?>
<div style="display:none">
  <?php 
    $query = sprintf("SELECT id from %swpr_newsletters", $wpdb->prefix);
    $newsletters = $wpdb->get_results($query);
    foreach ($newsletters as $newsletter) {
        $nid = $newsletter->id;
        ?>
  <div id="fields-<?php 
        echo $nid;
        ?>
">
    <?php 
        $query = sprintf("SELECT * FROM %swpr_custom_fields where nid = {$nid}", $wpdb->prefix);
        $customFields = $wpdb->get_results($query);
        foreach ($customFields as $field) {
            ?>
    <div class="field"> Name Of Field: <?php 
            echo $field->name;
            ?>
<br />
      Field Label: <?php 
            echo $field->label;
            ?>
<br />
      <?php 
            switch ($field->type) {
                case 'text':
                    ?>
      Type: One Line Text
      
      Preview:
      <input type="text" size="30" />
      <?php 
                    break;
                case 'enum':
                    $choices = $field->enum;
                    $choices = explode(",", $choices);
                    ?>
      Type: Multiple Choice<br />
      Preview:
      <select>
        <?php 
                    foreach ($choices as $choice) {
                        ?>
        <option><?php 
                        echo $choice;
                        ?>
</option>
        <?php 
                    }
                    ?>
      </select>
      <?php 
                    break;
                case 'hidden':
                    ?>
      Type: Hidden<br />
      Preview: Hidden fields aren't visible on the page.
      <?php 
                    break;
            }
            ?>
    </div>
    <?php 
        }
        ?>
  </div>
  <?php 
    }
    ?>
</div>
<form action="<?php 
    print $_SERVER['REQUEST_URI'];
    ?>
" method="post">
  <table width="700">
    <tr>
      <td><strong>Name:</strong>
        <p><small>This form's settings will be saved. This name will be used to identify the settings.</small></p></td>
      <td><input type="text" id="formnamefield" name="name" size="60" value="<?php 
    echo isset($parameters->name) ? $parameters->name : '';
    ?>
" /></td>
    </tr>
    <tr>
      <td><strong>Newsletter:</strong>
        <p><small>Select the newsletter to which subscribers will be subscribed when filling this form.</small></p></td>
      <td><select name="newsletter" id="newsletterlist" onchange="load(this.options[this.selectedIndex].value);updateAutorespondersOption(this.options[this.selectedIndex].value);">
          <?php 
    $query = "SELECT * FROM " . $wpdb->prefix . "wpr_newsletters";
    $newsletters = $wpdb->get_results($query);
    if (count($newsletters) > 0) {
        ?>
          <option></option>
          <?php 
        foreach ($newsletters as $newsletter) {
            ?>
          <option value="<?php 
            echo $newsletter->id;
            ?>
" <?php 
            if (isset($parameters->nid) && $parameters->nid == $newsletter->id) {
                echo 'selected="selected"';
            }
            ?>
><?php 
            echo $newsletter->name;
            ?>
</option>
          <?php 
        }
    }
    ?>
        </select>
    </tr>
    <tr>
      <td width="300"><strong>Return URL:</strong>
        <p><small> The subscriber is sent to this url after entering their name and email address in the subscription form. </small></p></td>
      <td><input type="text" id="returnurlfield" name="return_url" size="60" value="<?php 
    echo !empty($parameters->return_url) ? $parameters->return_url : '';
    ?>
" /></td>
    </tr>
    <tr>
      <td><strong>Blog Subscription</strong>:
        <p> <small> Specify what kind of blog subscription will those who use this form will have:</small></p></td>
      <td>
      <select name="blogsubscription">
          <option value="none" <?php 
    if (!empty($parameters->blogsubscription_type) && $parameters->blogsubscription_type == "none") {
        echo 'selected="selected"';
    }
    ?>
>None</option>
          <option value="all" <?php 
    if (!empty($parameters->blogsubscription_type) && $parameters->blogsubscription_type == "all") {
        echo 'selected="selected"';
    }
    ?>
>Subscribe to all new posts on
          <?php 
    bloginfo("name");
    ?>
          </option>
          <optgroup label="Particular Blog Category:">
          <?php 
    $args = array('type' => 'post', 'child_of' => 0, 'orderby' => 'name', 'order' => 'ASC', 'hide_empty' => false, 'hierarchical' => 0);
    $categories = get_categories($args);
    foreach ($categories as $category) {
        ?>
          <option value="category_<?php 
        echo $category->term_id;
        ?>
" <?php 
        if (!empty($parameters->blogsubscription_type) && $parameters->blogsubscription_type == "cat" && $parameters->blogsubscription_id == $category->term_id) {
            echo 'selected="selected"';
        }
        ?>
><?php 
        echo $category->name;
        ?>
</option>
          <?php 
    }
    ?>
          </optgroup>
        </select></td>
    </tr>
    <tr>
      <td><strong>Follow Up Subscription:</strong>
        <p> <small>Select what content should follow-up a successful subscription.</small></p></td>
      <?php 
    //construction of options for the followup subscriptions field.
    $types['Autoresponders'] = array();
    $types['Selected'] = null;
    //repeat the same with post series
    $getPostSeriesList = sprintf("SELECT * FROM %swpr_blog_series", $wpdb->prefix);
    $listOfPostSeries = $wpdb->get_results($getPostSeriesList);
    $types['Post Series'] = array();
    foreach ($listOfPostSeries as $post_series) {
        $item = array("name" => $post_series->name, "id" => "postseries_" . $post_series->id);
        $types['Post Series'][] = $item;
        //TODO: remove this code entirely once we can get to the point where we are phasing out post series.
        if (@($parameters->followup_type = "postseries" && @$parameters->followup_id == $post_series->id)) {
            $indexOfThisItem = count($types['Post Series']) - 1;
            $types['Post Series'][$indexOfThisItem]['selected'] = true;
            $types['Selected'] =& $types['Post Series'][$indexOfThisItem];
        }
    }
    $types = apply_filters("_wpr_subscription_form_followup_options", $types);
    $whetherInvalidFollowupSeries = false;
    if (!empty($parameters->followup_id) && $parameters->followup_id != 0 && $types['Selected'] == null) {
        $whetherInvalidFollowupSeries = true;
    }
    ?>
      <td><select name="followup" id="followup_field">
      <?php 
    //if the selected option is a null then set the none option as the selected item
    ?>
      <option value="0" <?php 
    if ($types['Selected'] == null) {
        ?>
 selected="selected" <?php 
    }
    ?>
>None</option>
      <optgroup id="autoresponders_list" label="Autoresponders"></optgroup>
      <?php 
    foreach ($types as $group => $options) {
        if ($group == "Selected" || $group == "Autoresponders") {
            continue;
        }
        ?>
	      <optgroup label="<?php 
        echo $group;
        ?>
">
	      <?php 
        if (count($options)) {
            foreach ($options as $option) {
                ?>
<option <?php 
                if ($types['Selected'] == $option) {
                    ?>
selected="selected" <?php 
                }
                ?>
 value="<?php 
                echo $option['id'];
                ?>
"><?php 
                echo $option['name'];
                ?>
</option>
		      <?php 
            }
        } else {
            ?>
		<option disabled="disabled">None defined</option><?php 
        }
        ?>
	      </optgroup>
	      <?php 
    }
    ?>
        </select></td>
    </tr>
    <tr>
      <td><strong>Submit Button Text:</strong>
      <p>
      <small>The label that will be used for the subscription form submit button</small></p>
      </td>
      <td><input type="text" size="60" name="submit_value" value="<?php 
    echo !empty($parameters->submit_button) ? $parameters->submit_button : "Subscribe";
    ?>
" ></td>
    </tr>
	<?php 
    if (empty($parameters->id)) {
        do_action("_wpr_subscriptionform_form_field", 0);
    } else {
        do_action("_wpr_subscriptionform_form_field", $parameters->id);
    }
    ?>
    <tr>
      <td colspan="2"><div class="wrap">
          <h3>More Form Fields</h3>
          <hr size="1" color="black">
          <p>Select the custom fields that should be added to the in the opt-in form.</p>
        </div>
        <div id="customfields"> </div></td>
    </tr>
    <tr>
      <td><h3> Confirmation E-Mail:</h3>
        <table>
          <tr>
            <td>Subject:</td>
            <td><input type="text" id="confirms" name="confirm_subject" size="70" value="<?php 
    if (empty($parameters->confirm_subject)) {
        $confirm_subject = get_option('wpr_confirm_subject');
        echo $confirm_subject;
    } else {
        echo $parameters->confirm_subject;
    }
    ?>
" /></td>
          </tr>
          <tr>
            <td colspan="2"> Message Body:<br />
              <textarea id="confirmb" name="confirm_body" rows="10" cols="100"><?php 
    if (empty($parameters->confirm_body)) {
        $confirm_email = get_option('wpr_confirm_body');
        echo $confirm_email;
    } else {
        echo $parameters->confirm_body;
    }
    ?>
</textarea></td>
          </tr>
        </table>
        <h3>Subscription Confirmed E-Mail:</h3>
        <table>
          <tr>
            <td>Subject:</td>
            <td><input id="confirmeds" type="text" name="confirmed_subject" value="<?php 
    echo !empty($parameters->confirmed_subject) ? $parameters->confirmed_subject : get_option("wpr_confirmed_subject");
    ?>
" size="60" /></td>
          </tr>
          <tr>
            <td colspan="2"> Message Body:<br />
              <textarea id="confirmedb" name="confirmed_body" rows="10" cols="100"><?php 
    echo !empty($parameters->confirmed_body) ? $parameters->confirmed_body : get_option("wpr_confirmed_body");
    ?>
</textarea></td>
          </tr>
        </table></td>
    </tr>
    <tr>
      <td colspan="2">
<?php 
    if (isset($parameters->id)) {
        ?>
  <input type="hidden" name="fid" value="<?php 
        echo $parameters->id;
        ?>
"/>
<?php 
    }
    ?>


          <input class="button" type="submit" onclick="return _wpr_validate_subform_form_fields()" value="Create Form And Get Code" />
        &nbsp;<a class="button" href="admin.php?page=wpresponder/subscriptionforms.php">Cancel</a></td>
    </tr>
  </table>
</form>
<?php 
}
Ejemplo n.º 2
0
 public function testGettingAutorespondersOfNewsletter()
 {
     $autoresponderDefinitions = array(array("nid" => $this->newsletterId, "name" => "Autoresponder_" . md5(microtime())), array("nid" => $this->newsletterId, "name" => "Autoresponder_" . md5(microtime())), array("nid" => $this->newsletterId, "name" => "Autoresponder_" . md5(microtime())), array("nid" => $this->newsletterId, "name" => "Autoresponder_" . md5(microtime())), array("nid" => $this->newsletterId, "name" => "Autoresponder_" . md5(microtime())), array("nid" => $this->newsletterId, "name" => "Autoresponder_" . md5(microtime())), array("nid" => $this->newsletterId, "name" => "Autoresponder_" . md5(microtime())));
     $newNewsletter = $this->addNewsletter(array("name" => "Autoresponder Second", "fromname" => "Someone", "fromemail" => "*****@*****.**", "reply_to" => "*****@*****.**"));
     $autoresponderDefinitionsOfSecondNewsleter = array(array("nid" => $newNewsletter, "name" => "Autoresponder_" . md5(microtime())), array("nid" => $newNewsletter, "name" => "Autoresponder_" . md5(microtime())), array("nid" => $newNewsletter, "name" => "Autoresponder_" . md5(microtime())), array("nid" => $newNewsletter, "name" => "Autoresponder_" . md5(microtime())), array("nid" => $newNewsletter, "name" => "Autoresponder_" . md5(microtime())), array("nid" => $newNewsletter, "name" => "Autoresponder_" . md5(microtime())), array("nid" => $newNewsletter, "name" => "Autoresponder_" . md5(microtime())));
     foreach ($autoresponderDefinitions as $currentAutoresponder) {
         AutoresponderTestHelper::addAutoresponderAndFetchRow($currentAutoresponder["nid"], $currentAutoresponder["name"]);
     }
     foreach ($autoresponderDefinitionsOfSecondNewsleter as $currentAutoresponder) {
         AutoresponderTestHelper::addAutoresponderAndFetchRow($currentAutoresponder["nid"], $currentAutoresponder["name"]);
     }
     $autoresponders = Autoresponder::getAutorespondersOfNewsletter($this->newsletterId);
     $this->assertEquals(count($autoresponderDefinitions), count($autoresponders));
     $responderNames = array();
     foreach ($autoresponders as $res) {
         $responderNames[] = $res->getName();
     }
     $defNames = array();
     foreach ($autoresponderDefinitions as $def) {
         $defNames[] = $def['name'];
     }
     $difference = array_diff($responderNames, $defNames);
     $this->assertEquals(count($difference), 0);
 }