ここの情報は古いです。ご理解頂いた上でお取り扱いください。

source: OpenPNE3/trunk/lib/form/MemberConfigForm.class.php @ 9802

Last change on this file since 9802 was 9802, checked in by ebihara, 12 years ago

#3241:changed the base of authentication to restore an authentication mode to register

File size: 4.7 KB
Line 
1<?php
2
3/**
4 * MemberConfig form.
5 *
6 * @package    form
7 * @subpackage member_config
8 * @author     Kousuke Ebihara <ebihara@tejimaya.com>
9 */
10class MemberConfigForm extends OpenPNEFormAutoGenerate
11{
12  protected $memberConfigSettings = array();
13  protected $category = '';
14  protected $member;
15  protected $isNew = false;
16  protected $isAutoGenerate = true;
17
18  public function __construct(Member $member = null, $options = array(), $CSRFSecret = null)
19  {
20    $this->setMemberConfigSettings();
21
22    $this->member = $member;
23    if (is_null($this->member)) {
24      $this->isNew = true;
25      $this->member = new Member();
26      $this->member->setIsActive(false);
27    } elseif (!$this->member->getIsActive()) {
28      $this->isNew = true;
29    }
30
31    parent::__construct(array(), $options, $CSRFSecret);
32
33    if ($this->isAutoGenerate) {
34      $this->generateConfigWidgets();
35    }
36
37    $this->widgetSchema->setNameFormat('member_config[%s]');
38  }
39
40  public function generateConfigWidgets()
41  {
42    foreach ($this->memberConfigSettings as $key => $value) {
43      if ($this->isNew && $value['IsRegist'] || !$this->isNew && $value['IsConfig']) {
44        $this->setMemberConfigWidget($key);
45      }
46    }
47  }
48
49  public function setMemberConfigSettings()
50  {
51    $categories = sfConfig::get('openpne_member_category');
52    $configs = sfConfig::get('openpne_member_config');
53
54    if (!$this->category) {
55      $this->memberConfigSettings = $configs;
56      return true;
57    }
58
59    foreach ($categories[$this->category] as $value)
60    {
61      $this->memberConfigSettings[$value] = $configs[$value];
62    }
63  }
64
65  public function setMemberConfigWidget($name)
66  {
67    $config = $this->memberConfigSettings[$name];
68    $this->widgetSchema[$name] = $this->generateWidget($config);
69    $this->widgetSchema->setLabel($name, $config['Caption']);
70    $memberConfig = MemberConfigPeer::retrieveByNameAndMemberId($name, $this->member->getId());
71    if ($memberConfig) {
72      $this->setDefault($name, $memberConfig->getValue());
73    }
74    $this->validatorSchema[$name] = $this->generateValidator($config);
75
76    if (!empty($config['IsConfirm'])) {
77      $this->validatorSchema[$name.'_confirm'] = $this->validatorSchema[$name];
78      $this->widgetSchema[$name.'_confirm'] = $this->widgetSchema[$name];
79      $this->widgetSchema->setLabel($name.'_confirm', $config['Caption'].'(確認)');
80
81      $this->mergePostValidator(new sfValidatorSchemaCompare($name, '==', $name.'_confirm'));
82    }
83
84    if (!empty($config['IsUnique'])) {
85      $this->mergePostValidator(new sfValidatorCallback(array(
86        'callback' => array($this, 'isUnique'),
87        'arguments' => array('name' => $name),
88      )));
89    }
90  }
91
92  public function isUnique($validator, $value, $arguments = array())
93  {
94    if (empty($arguments['name'])) {
95      throw new InvalidArgumentException('Invalid argument');
96    }
97
98    $name = $arguments['name'];
99    $data = MemberConfigPeer::retrieveByNameAndValue($name, $value[$name]);
100    if (!$data || !$data->getMember()->getIsActive() || $data->getMember()->getId() == $this->member->getId()) {
101      return $value;
102    }
103
104    throw new sfValidatorError($validator, 'This '.$name.' address already exists.');
105  }
106
107  public function isValid()
108  {
109    opActivateBehavior::disable();
110
111    foreach ($this->getValues() as $key => $value)
112    {
113      if (!empty($this->memberConfigSettings[$key]['IsUnique']))
114      {
115        $memberConfig = MemberConfigPeer::retrieveByNameAndValue($key.'_pre', $value);
116        if ($memberConfig)
117        {
118          $member = $memberConfig->getMember();
119          if (!$member->getIsActive())
120          {
121            $this->member = $member;
122          }
123        }
124      }
125    }
126
127    opActivateBehavior::enable();
128    return parent::isValid();
129  }
130
131  public function save()
132  {
133    foreach ($this->getValues() as $key => $value)
134    {
135      if (strrpos($key, '_confirm'))
136      {
137        continue;
138      }
139
140      $this->saveConfig($key, $value);
141    }
142
143    return true;
144  }
145
146  public function saveConfig($name, $value)
147  {
148    $memberConfig = MemberConfigPeer::retrieveByNameAndMemberId($name, $this->member->getId());
149    if (!$memberConfig) {
150      $memberConfig = new MemberConfig();
151      $memberConfig->setName($name);
152      $memberConfig->setMember($this->member);
153    }
154    $memberConfig->setValue($value);
155
156    $memberConfig->save();
157  }
158
159  public function savePreConfig($name, $value)
160  {
161    $memberConfig = MemberConfigPeer::retrieveByNameAndMemberId($name.'_pre', $this->member->getId());
162    if (!$memberConfig) {
163      $memberConfig = new MemberConfig();
164      $memberConfig->setName($name);
165      $memberConfig->setMember($this->member);
166    }
167
168    $memberConfig->setValue($value);
169    $memberConfig->savePre();
170    $memberConfig->saveToken();
171  }
172}
Note: See TracBrowser for help on using the repository browser.