設定画面の項目・グッズメモ アフィリエイト

グッズメモ アフィリエイト・WordPressプラグインのソースコード記事の目次WordPress

AbstractField.php

namespace goodsmemo\option\field;

use goodsmemo\option\field\FieldPrinter;
use goodsmemo\option\field\FieldInfo;

require_once GOODS_MEMO_DIR . "option/field/FieldPrinter.php";
require_once GOODS_MEMO_DIR . "option/field/FieldInfo.php";

/**
 * Description of AbstractField
 *
 * @author Goods Memo
 */
abstract class AbstractField implements FieldPrinter {

    private $optionNameOfDatabase;
    //
    //protected $optionMap;//superを使って、メンバ変数にアクセスできない。$this->optionMap;と書くらしい。
    //parent::set()と書くことにした。
    private $optionMap = array(); //最初に「アフィリエイトの設定」画面を表示した際、OptionExceptionが通知される。その時、空の配列としておく。
    //
    private $fieldInfo;

    public function __construct($optionNameOfDatabase, FieldInfo $fieldInfo) {

	$this->optionNameOfDatabase = $optionNameOfDatabase;
	$this->fieldInfo = $fieldInfo;
    }

    public function getOptionNameOfDatabase() {
	return $this->optionNameOfDatabase;
    }

    public function getOptionMap() {
	return $this->optionMap;
    }

    public function setOptionMap($optionMap) {
	$this->optionMap = $optionMap;
    }

    public function getFieldInfo() {
	return $this->fieldInfo;
    }

}

AbstractTextField.php

namespace goodsmemo\option\field;

use goodsmemo\option\field\AbstractField;
use goodsmemo\option\field\FieldInfo;

require_once GOODS_MEMO_DIR . "option/field/AbstractField.php";
require_once GOODS_MEMO_DIR . "option/field/FieldInfo.php";

/**
 * Description of AbstractTextField
 *
 * @author Goods Memo
 */
abstract class AbstractTextField extends AbstractField {

    public function __construct($optionNameOfDatabase, FieldInfo $fieldInfo) {

	parent::__construct($optionNameOfDatabase, $fieldInfo);
    }

    protected function printInputField($format, $inputFieldID, $defaultValue) {

	$optionMap = parent::getOptionMap();

	$valueOfDatabase;
	$isValidDatabaseValue;
	if (isset($optionMap[$inputFieldID])) {//nullでない
	    $valueOfDatabase = esc_attr($optionMap[$inputFieldID]);
	    if ($valueOfDatabase) {//emptyでない。例えば "-1" も有効となる。
		$isValidDatabaseValue = true; //error_log(var_export($valueOfDatabase, true));
	    } else {//ゼロまたは空文字
		if (is_numeric($valueOfDatabase)) {
		    if (intval($valueOfDatabase) >= 0) {//0を有効とする。
			$isValidDatabaseValue = true;
		    } else {
			$isValidDatabaseValue = false;
		    }
		} else {
		    $isValidDatabaseValue = false; //空文字なので、未入力と判断する。
		}
	    }
	} else {
	    $isValidDatabaseValue = false;
	}

	$outputValue;
	if ($isValidDatabaseValue) {

	    $outputValue = $valueOfDatabase;
	} else {

	    $outputValue = $defaultValue;
	}

	printf($format, $outputValue);
    }

}

CheckboxField.php

namespace goodsmemo\option\field;

use goodsmemo\option\field\AbstractField;
use goodsmemo\option\field\FieldInfo;

require_once GOODS_MEMO_DIR . "option/field/AbstractField.php";
require_once GOODS_MEMO_DIR . "option/field/FieldInfo.php";

/**
 * Description of CheckboxField
 *
 * @author Goods Memo
 */
class CheckboxField extends AbstractField {

    private $checkedValue;
    private $labelForCheckbox;

    public function __construct($optionNameOfDatabase, FieldInfo $fieldInfo, $checkedValue, $labelForCheckbox) {

	parent::__construct($optionNameOfDatabase, $fieldInfo);
	$this->checkedValue = $checkedValue;
	$this->labelForCheckbox = $labelForCheckbox;
    }

    public function printField() {

	$optionMap = parent::getOptionMap(); //var_dump($optionMap);
	$fieldInfo = parent::getFieldInfo();
	$checkboxFieldID = $fieldInfo->getFieldID(); //var_dump($selectFieldID);

	$valueOfDatabase;
	if (isset($optionMap[$checkboxFieldID])) {//nullでない
	    $valueOfDatabase = esc_attr($optionMap[$checkboxFieldID]);
	} else {
	    //参考:チェックボックスがチェックされていなかった場合、
	    //チェックされていない状態を表す値(value=unchecked など)が送信されることはなく、
	    //値はサーバーに全く送信されません。
	    $valueOfDatabase = "";
	}//var_dump($valueOfDatabase);

	$outputValue;
	if ($valueOfDatabase) {//emptyでない。例えば "-1" も有効となる。
	    $outputValue = $valueOfDatabase;
	} else {//ゼロまたは空文字
	    $outputValue = $fieldInfo->getDefaultFieldValue();
	}

	$optionNameOfDatabase = parent::getOptionNameOfDatabase();
	$checkedAttribute = checked($this->checkedValue, $outputValue, false);

	$checkboxTag = <<< EOD
<input type="checkbox" id="{$checkboxFieldID}" name="{$optionNameOfDatabase}[{$checkboxFieldID}]" value="{$this->checkedValue}" {$checkedAttribute} />
<label for="{$checkboxFieldID}">{$this->labelForCheckbox}</label>
EOD;

	print $checkboxTag;
    }

}

FieldInfo.php

namespace goodsmemo\option\field;

/**
 * Description of FieldInfo
 *
 * @author Goods Memo
 */
class FieldInfo {

    private $fieldID;
    private $fieldLabel;
    private $defaultFieldValue = "";
    //
    private $numericalVerificationEnabled = false;

    public function getFieldID() {
	return $this->fieldID;
    }

    public function getFieldLabel() {
	return $this->fieldLabel;
    }

    public function getDefaultFieldValue() {
	return $this->defaultFieldValue;
    }

    public function setFieldID($fieldID) {
	$this->fieldID = $fieldID;
    }

    public function setFieldLabel($fieldLabel) {
	$this->fieldLabel = $fieldLabel;
    }

    public function setDefaultFieldValue($defaultFieldValue) {
	$this->defaultFieldValue = $defaultFieldValue;
    }

    public function getNumericalVerificationEnabled(): bool {
	return $this->numericalVerificationEnabled;
    }

    public function setNumericalVerificationEnabled(bool $numericalVerificationEnabled) {
	$this->numericalVerificationEnabled = $numericalVerificationEnabled;
    }

}

FieldPrinter.php

namespace goodsmemo\option\field;

/**
 *
 * @author Goods Memo
 */
interface FieldPrinter {

    public function printField();

    const PRINT_FIELD_METHOD_NAME = "printField";

}

SelectField.php

namespace goodsmemo\option\field;

use goodsmemo\option\field\AbstractField;
use goodsmemo\option\field\FieldInfo;

require_once GOODS_MEMO_DIR . "option/field/AbstractField.php";
require_once GOODS_MEMO_DIR . "option/field/FieldInfo.php";

/**
 * Description of SelectField
 *
 * @author Goods Memo
 */
class SelectField extends AbstractField {

    private $valueTitleMap;

    public function __construct($optionNameOfDatabase, FieldInfo $fieldInfo, $valueTitleMap) {

	parent::__construct($optionNameOfDatabase, $fieldInfo);
	$this->valueTitleMap = $valueTitleMap;
    }

    public function printField() {

	$optionMap = parent::getOptionMap(); //var_dump($optionMap);
	$fieldInfo = parent::getFieldInfo();
	$selectFieldID = $fieldInfo->getFieldID(); //var_dump($selectFieldID);

	$valueOfDatabase;
	if (isset($optionMap[$selectFieldID])) {//nullでない
	    $valueOfDatabase = esc_attr($optionMap[$selectFieldID]);
	} else {
	    $valueOfDatabase = "";
	}

	$outputValue;
	if ($valueOfDatabase) {//emptyでない。例えば "-1" も有効となる。
	    $outputValue = $valueOfDatabase;
	} else {//ゼロまたは空文字
	    $outputValue = $fieldInfo->getDefaultFieldValue();
	}

	$optionNameOfDatabase = parent::getOptionNameOfDatabase();

	$startTag = <<< EOD
<select id="{$selectFieldID}" name="{$optionNameOfDatabase}[{$selectFieldID}]" >
EOD;

	$optionsTag = "";
	foreach ($this->valueTitleMap as $value => $title) {

	    $selectedAttribute = selected($value, $outputValue, false);
	    $oneOptionTag = <<< EOD
<option value="{$value}" {$selectedAttribute} >{$title}</option>
EOD;
	    $optionsTag .= $oneOptionTag;
	}

	$endTag = "</select>";

	print $startTag . $optionsTag . $endTag;
    }

}

TextareaField.php

namespace goodsmemo\option\field;

use goodsmemo\option\field\AbstractTextField;
use goodsmemo\option\field\FieldInfo;

require_once GOODS_MEMO_DIR . "option/field/AbstractTextField.php";
require_once GOODS_MEMO_DIR . "option/field/FieldInfo.php";

/**
 * Description of TextareaField
 *
 * @author Goods Memo
 */
class TextareaField extends AbstractTextField {

    public function __construct($optionNameOfDatabase, FieldInfo $fieldInfo) {

	parent::__construct($optionNameOfDatabase, $fieldInfo);
    }

    public function printField() {

	$optionNameOfDatabase = parent::getOptionNameOfDatabase();
	$fieldInfo = parent::getFieldInfo();

	$textareaID = $fieldInfo->getFieldID();
	$defaultValue = $fieldInfo->getDefaultFieldValue();

	$format = <<< EOD
<textarea id="{$textareaID}" name="{$optionNameOfDatabase}[{$textareaID}]" rows="3" cols="50" maxlength="1050">%s</textarea>
EOD;

	parent::printInputField($format, $textareaID, $defaultValue);
    }

}

TextField.php

namespace goodsmemo\option\field;

use goodsmemo\option\field\AbstractTextField;
use goodsmemo\option\field\FieldInfo;

require_once GOODS_MEMO_DIR . "option/field/AbstractTextField.php";
require_once GOODS_MEMO_DIR . "option/field/FieldInfo.php";

/**
 * Description of TextField
 *
 * @author Goods Memo
 */
class TextField extends AbstractTextField {

    public function __construct($optionNameOfDatabase, FieldInfo $fieldInfo) {

	parent::__construct($optionNameOfDatabase, $fieldInfo);
    }

    public function printField() {

	$optionNameOfDatabase = parent::getOptionNameOfDatabase();
	$fieldInfo = parent::getFieldInfo();

	$textFieldID = $fieldInfo->getFieldID();
	$defaultValue = $fieldInfo->getDefaultFieldValue();

	$format = <<< EOD
<input type="text" id="{$textFieldID}" name="{$optionNameOfDatabase}[{$textFieldID}]" size="50" maxlength="50" value="%s" />
EOD;

	parent::printInputField($format, $textFieldID, $defaultValue);
    }

}