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

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

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

#3221:changed treat the SNSRegisterBegin credential of the authentication system. This change is for authentication method registers a member on login process that is like OpenID

File size: 4.6 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    foreach ($this->getValues() as $key => $value)
110    {
111      if (!empty($this->memberConfigSettings[$key]['IsUnique']))
112      {
113        $memberConfig = MemberConfigPeer::retrieveByNameAndValue($key.'_pre', $value);
114        if ($memberConfig)
115        {
116          $member = $memberConfig->getMember();
117          if (!$member->getIsActive())
118          {
119            $this->member = $member;
120          }
121        }
122      }
123    }
124
125    return parent::isValid();
126  }
127
128  public function save()
129  {
130    foreach ($this->getValues() as $key => $value)
131    {
132      if (strrpos($key, '_confirm'))
133      {
134        continue;
135      }
136
137      $this->saveConfig($key, $value);
138    }
139
140    return true;
141  }
142
143  public function saveConfig($name, $value)
144  {
145    $memberConfig = MemberConfigPeer::retrieveByNameAndMemberId($name, $this->member->getId());
146    if (!$memberConfig) {
147      $memberConfig = new MemberConfig();
148      $memberConfig->setName($name);
149      $memberConfig->setMember($this->member);
150    }
151    $memberConfig->setValue($value);
152
153    $memberConfig->save();
154  }
155
156  public function savePreConfig($name, $value)
157  {
158    $memberConfig = MemberConfigPeer::retrieveByNameAndMemberId($name.'_pre', $this->member->getId());
159    if (!$memberConfig) {
160      $memberConfig = new MemberConfig();
161      $memberConfig->setName($name);
162      $memberConfig->setMember($this->member);
163    }
164
165    $memberConfig->setValue($value);
166    $memberConfig->savePre();
167    $memberConfig->saveToken();
168  }
169}
Note: See TracBrowser for help on using the repository browser.