👁 查看:MemberProfileForm.class.php
路径:/virtual/bigbrother/sns/lib/form/MemberProfileForm.class.php
大小:4.83 KB · 修改:2010-08-10 13:59:42 · 权限:0644 · 可写
<?php

/**
 * This file is part of the OpenPNE package.
 * (c) OpenPNE Project (http://www.openpne.jp/)
 *
 * For the full copyright and license information, please view the LICENSE
 * file and the NOTICE file that were distributed with this source code.
 */

/**
 * MemberProfile form.
 *
 * @package    OpenPNE
 * @subpackage form
 * @author     Kousuke Ebihara <ebihara@tejimaya.com>
 */
class MemberProfileForm extends sfForm
{
  public function __construct($profileMember = array(), $options = array(), $CSRFSecret = null)
  {
    parent::__construct(array(), $options, $CSRFSecret);

    $profiles = ProfilePeer::doSelect(new Criteria());

    foreach ($profileMember as $profile)
    {
      $this->setDefault($profile->getName(), array(
        'value' => $profile->getValue(),
        'public_flag' => $profile->getPublicFlag()
      ));
    }
  }

  public function configure()
  {
    $this->widgetSchema->setNameFormat('profile[%s]');
  }

  public function save($memberId)
  {
    $values = $this->getValues();

    foreach ($values as $key => $value)
    {
      $profile = ProfilePeer::retrieveByName($key);
      if (!$profile)
      {
        continue;
      }

      $formType = $profile->getFormType();

      $memberProfile = MemberProfilePeer::retrieveByMemberIdAndProfileId($memberId, $profile->getId());
      if ($memberProfile)
      {
        $memberProfile->clearChildren();
      }
      $memberProfile = MemberProfilePeer::makeRoot($memberId, $profile->getId());

      if ($profile->isMultipleSelect())
      {
        $ids = array();
        $_values = array();
        if ('date' === $formType)
        {
          $_values = explode('-', $value['value']);
          $c = new Criteria();
          $c->addAscendingOrderByColumn(ProfileOptionPeer::SORT_ORDER);
          $options = $profile->getProfileOptions($c);
          foreach ($options as $option)
          {
            $ids[] = $option->getId();
          }
        }
        else
        {
          $ids = $value['value'];
        }
        MemberProfilePeer::createChild($memberProfile, $memberId, $profile->getId(), $ids, $_values);
      }
      else
      {
        if ($value['value'])
        {
          $memberProfile->setValue($value['value']);
        }
      }
      
      $memberProfile->setPublicFlag($memberProfile->getProfile()->getDefaultPublicFlag());
      if (isset($value['public_flag']))
      {
        $memberProfile->setPublicFlag($value['public_flag']);
      }

      $memberProfile->save();
    }

    return true;
  }

  public function setRegisterWidgets()
  {
    $profiles = ProfilePeer::retrieveByIsDispRegist();
    $this->setProfileWidgets($profiles);
  }

  public function setConfigWidgets()
  {
    $profiles = ProfilePeer::retrieveByIsDispConfig();
    $this->setProfileWidgets($profiles);
  }

  public function setSearchWidgets()
  {
    $profiles = ProfilePeer::retrieveByIsDispSearch();
    $this->setProfileWidgets($profiles);
  }

  public function setAllWidgets()
  {
    $profiles = ProfilePeer::retrievesAll();
    $this->setProfileWidgets($profiles);
  }

  protected function setProfileWidgets($profiles)
  {
    foreach ($profiles as $profile)
    {
      $profile_i18n = $profile->getProfileI18ns();
      $profileWithI18n = $profile->toArray() + $profile_i18n[0]->toArray();

      $widgetOptions = array(
        'widget' => opFormItemGenerator::generateWidget($profileWithI18n, $this->getFormOptionsValue($profile->getId())),
      );
      $validatorOptions = array(
        'validator' => opFormItemGenerator::generateValidator($profileWithI18n, $this->getFormOptions($profile->getId())),
      );

      if ($profile->getIsEditPublicFlag())
      {
        $widgetOptions['is_edit_public_flag'] = $validatorOptions['is_edit_public_flag'] = true;
        if (!$this->getDefault($profile->getName()))
        {
          $this->setDefault($profile->getName(), array('public_flag' => $profile->getDefaultPublicFlag()));
        }
      }

      $this->widgetSchema[$profile->getName()] = new opWidgetFormProfile($widgetOptions);
      $this->validatorSchema[$profile->getName()] = new opValidatorProfile($validatorOptions);

      $this->widgetSchema->setHelp($profile->getName(), $profileWithI18n['Info']);
    }
  }

  private function getFormOptions($profileId)
  {
    $result = array();
    $options = ProfileOptionPeer::retrieveByProfileId($profileId);

    foreach ($options as $option)
    {
      $result[] = $option->getId();
    }

    return $result;
  }

  private function getFormOptionsValue($profileId)
  {
    $result = array();
    $options = ProfileOptionPeer::retrieveByProfileId($profileId);

    foreach ($options as $option)
    {
      $result[$option->getId()] = $option->getValue();
    }

    return $result;
  }

  private function updateDefaultsFromObject($obj)
  {
    $this->setDefaults(array_merge($this->getDefaults(), $obj->toArray(BasePeer::TYPE_FIELDNAME)));
  }
}
ページが見つかりませんでした – Lumiere Shop
ここを指しているリンクに誤りがあったようです。検索してみるのはいかがですか ?
お買い物カゴ