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

Changeset 10078


Ignore:
Timestamp:
Jan 11, 2009, 12:12:06 AM (11 years ago)
Author:
ebihara
Message:

#3308:added ability to search members by their nickname and their profiles to the pc_backend application

Location:
OpenPNE3/trunk
Files:
9 added
15 edited

Legend:

Unmodified
Added
Removed
  • OpenPNE3/trunk/apps/pc_backend/config/factories.yml

    r9199 r10078  
    2929#    class: sfFrontWebController
    3030#
    31 #  request:
    32 #    class: sfWebRequest
    33 #    param:
    34 #      formats:
    35 #        txt:  text/plain
    36 #        js:   [application/javascript, application/x-javascript, text/javascript]
    37 #        css:  text/css
    38 #        json: [application/json, application/x-json]
    39 #        xml:  [text/xml, application/xml, application/x-xml]
    40 #        rdf:  application/rdf+xml
    41 #        atom: application/atom+xml
     31  request:
     32    class: sfOpenPNEWebRequest
     33    param:
     34      formats:
     35        txt:  text/plain
     36        js:   [application/javascript, application/x-javascript, text/javascript]
     37        css:  text/css
     38        json: [application/json, application/x-json]
     39        xml:  [text/xml, application/xml, application/x-xml]
     40        rdf:  application/rdf+xml
     41        atom: application/atom+xml
    4242#
    4343#  response:
  • OpenPNE3/trunk/apps/pc_backend/modules/profile/actions/actions.class.php

    r10003 r10078  
    2626  public function executeList($request)
    2727  {
    28     $criteria = new Criteria();
    29     $criteria->addAscendingOrderByColumn(ProfilePeer::SORT_ORDER);
    30     $this->profiles = ProfilePeer::doSelect($criteria);
     28    $this->profiles = ProfilePeer::retrievesAll();
    3129    $this->option_form = array();
    3230
  • OpenPNE3/trunk/apps/pc_backend/templates/layout.php

    r10027 r10078  
    1919<ul>
    2020<li><?php echo link_to(__('管理画面トップ'), 'default/top'); ?></li>
     21<li><?php echo link_to(__('メンバー管理'), 'member/index'); ?></li>
    2122<li><?php echo link_to(__('SNS設定'), 'sns/config'); ?></li>
    2223<li><?php echo link_to(__('デザイン設定'), 'design/index'); ?></li>
  • OpenPNE3/trunk/data/fixtures/001_import_profile.yml

    r9503 r10078  
    5555    sort_order: 1
    5656
     57  profile_option_birthday_year:
     58    profile_id: profile_birthday
     59    sort_order: 0
     60
     61  profile_option_birthday_month:
     62    profile_id: profile_birthday
     63    sort_order: 1
     64
     65  profile_option_birthday_day:
     66    profile_id: profile_birthday
     67    sort_order: 2
     68
    5769ProfileOptionI18n:
    5870  profile_option_sex_man:
  • OpenPNE3/trunk/data/fixtures/002_import_first_member.yml

    r9503 r10078  
    1515  first_member_profile_birthday:
    1616    lft_key: 1
    17     rht_key: 2
     17    rht_key: 8
     18    tree_key: 2
    1819    member_id: first_member
    1920    profile_id: profile_birthday
    20     value: "1988-04-23"
     21
     22  first_member_profile_birthday_year:
     23    lft_key: 2
     24    rht_key: 3
     25    tree_key: 2
     26    member_id: first_member
     27    profile_id: profile_birthday
     28    profile_option_id: profile_option_birthday_year
     29    value: "1988"
     30
     31  first_member_profile_birthday_month:
     32    lft_key: 4
     33    rht_key: 5
     34    tree_key: 2
     35    member_id: first_member
     36    profile_id: profile_birthday
     37    profile_option_id: profile_option_birthday_month
     38    value: "4"
     39
     40  first_member_profile_birthday_day:
     41    lft_key: 6
     42    rht_key: 7
     43    tree_key: 2
     44    member_id: first_member
     45    profile_id: profile_birthday
     46    profile_option_id: profile_option_birthday_day
     47    value: "23"
    2148
    2249  first_member_profile_self_intro:
  • OpenPNE3/trunk/lib/form/MemberProfileForm.class.php

    r10003 r10078  
    1212 * MemberProfile form.
    1313 *
    14  * @package    form
    15  * @subpackage member_profile
     14 * @package    OpenPNE
     15 * @subpackage form
    1616 * @author     Kousuke Ebihara <ebihara@tejimaya.com>
    17  * @version    SVN: $Id: sfPropelFormTemplate.php 6174 2007-11-27 06:22:40Z fabien $
    1817 */
    1918class MemberProfileForm extends OpenPNEFormAutoGenerate
     
    2322    parent::__construct(array(), $options, $CSRFSecret);
    2423
    25     foreach ($profileMember as $profile) {
     24    foreach ($profileMember as $profile)
     25    {
    2626      $this->setDefault($profile->getName(), $profile->getValue());
    2727    }
     
    4949      $memberProfile = MemberProfilePeer::retrieveByMemberIdAndProfileId($memberId, $profile->getId());
    5050
    51       if ($formType == 'checkbox')
     51      if ($formType === 'checkbox')
    5252      {
    5353        if ($memberProfile)
     
    5757          MemberProfilePeer::doDelete($c);
    5858        }
    59         if (!is_array($value))
    60         {
    61           continue;
    62         }
    63 
    6459        $memberProfile = new MemberProfile();
    6560        $memberProfile->makeRoot();
     
    6964        $memberProfile->setScopeIdValue($memberProfile->getId());
    7065        $memberProfile->save();
     66
     67        if (!is_array($value))
     68        {
     69          continue;
     70        }
    7171
    7272        foreach ($value as $v)
     
    8080        }
    8181      }
     82      elseif ($formType === 'date')
     83      {
     84        $pieces = explode('-', $value);
     85
     86        if ($memberProfile)
     87        {
     88          $c = new Criteria();
     89          $c->add(MemberProfilePeer::TREE_KEY, $memberProfile->getTreeKey());
     90          MemberProfilePeer::doDelete($c);
     91        }
     92        $memberProfile = new MemberProfile();
     93        $memberProfile->makeRoot();
     94        $memberProfile->setMemberId($memberId);
     95        $memberProfile->setProfileId($profile->getId());
     96        $memberProfile->save();
     97        $memberProfile->setScopeIdValue($memberProfile->getId());
     98        $memberProfile->save();
     99
     100        $c = new Criteria();
     101        $c->addAscendingOrderByColumn(ProfileOptionPeer::SORT_ORDER);
     102        $options = $profile->getProfileOptions($c);
     103        foreach ($options as $i => $option)
     104        {
     105          $_value = null;
     106          if (isset($pieces[$i]))
     107          {
     108            $_value = (int)$pieces[$i];
     109          }
     110          $childProfile = new MemberProfile();
     111          $childProfile->setMemberId($memberId);
     112          $childProfile->setProfileId($profile->getId());
     113          $childProfile->setProfileOptionId($option->getId());
     114          $childProfile->setValue($_value);
     115          $childProfile->insertAsLastChildOf($memberProfile);
     116          $childProfile->save();
     117        }
     118      }
    82119      else
    83120      {
     
    90127        $memberProfile->setMemberId($memberId);
    91128        $memberProfile->setProfileId($profile->getId());
    92         if ($formType == 'select' || $formType == 'radio')
     129        if ($formType === 'select' || $formType === 'radio')
    93130        {
    94131          $memberProfile->setProfileOptionId($value);
     
    123160  }
    124161
     162  public function setAllWidgets()
     163  {
     164    $profiles = ProfilePeer::retrievesAll();
     165    $this->setProfileWidgets($profiles);
     166  }
     167
    125168  protected function setProfileWidgets($profiles)
    126169  {
    127     foreach ($profiles as $profile) {
     170    foreach ($profiles as $profile)
     171    {
    128172      $profile_i18n = $profile->getProfileI18ns();
    129173      $profileWithI18n = $profile->toArray() + $profile_i18n[0]->toArray();
     
    138182    $options = ProfileOptionPeer::retrieveByProfileId($profileId);
    139183
    140     foreach ($options as $option) {
     184    foreach ($options as $option)
     185    {
    141186      $result[] = $option->getId();
    142187    }
     
    150195    $options = ProfileOptionPeer::retrieveByProfileId($profileId);
    151196
    152     foreach ($options as $option) {
     197    foreach ($options as $option)
     198    {
    153199      $result[$option->getId()] = $option->getValue();
    154200    }
  • OpenPNE3/trunk/lib/helper/opUtilHelper.php

    r10003 r10078  
    2525 * @return string  A navigation for paginated list.
    2626 */
    27 function pager_navigation($pager, $link_to, $is_total = true)
     27function pager_navigation($pager, $link_to, $is_total = true, $query_string = '')
    2828{
    2929  $navigation = '';
     
    3131  if ($pager->haveToPaginate()) {
    3232    if ($pager->getPreviousPage() != $pager->getPage()) {
    33       $navigation .= link_to('&lt;前', sprintf($link_to, $pager->getPreviousPage())) . '&nbsp;';
     33      $navigation .= link_to('&lt;前', sprintf($link_to, $pager->getPreviousPage()), array('query_string' => $query_string)) . '&nbsp;';
    3434    }
    3535  }
     
    4141  if ($pager->haveToPaginate()) {
    4242    if ($pager->getNextPage() != $pager->getPage()) {
    43       $navigation .= '&nbsp;' . link_to('次&gt;', sprintf($link_to, $pager->getNextPage()));
     43      $navigation .= '&nbsp;' . link_to('次&gt;', sprintf($link_to, $pager->getNextPage()), array('query_string' => $query_string));
    4444    }
    4545  }
  • OpenPNE3/trunk/lib/model/MemberPeer.php

    r10003 r10078  
    99 */
    1010
    11 /**
    12  * Subclass for performing query and update operations on the 'member' table.
    13  *
    14  *
    15  *
    16  * @package lib.model
    17  */
    1811class MemberPeer extends BaseMemberPeer
    1912{
     
    2619    return $member;
    2720  }
     21
     22  public static function searchMemberIds($member = array(), $ids = null)
     23  {
     24    // the searchable field of the member table is only "name"
     25    if (!empty($member['name']))
     26    {
     27      $_result = array();
     28
     29      $c = new Criteria();
     30      $c->clearSelectColumns()->addSelectColumn(self::ID);
     31      $c->setIgnoreCase(false);
     32      $c->add(self::NAME, '%'.$member['name'].'%', Criteria::LIKE);
     33      $stmt = self::doSelectStmt($c);
     34      while ($raw = $stmt->fetch(PDO::FETCH_NUM))
     35      {
     36        $_result[] = $raw[0];
     37      }
     38
     39      if (is_array($ids))
     40      {
     41        $ids = array_values(array_intersect($ids, $_result));
     42      }
     43      else
     44      {
     45        $ids = array_values($_result);
     46      }
     47    }
     48
     49    return $ids;
     50  }
    2851}
  • OpenPNE3/trunk/lib/model/MemberProfile.php

    r10003 r10078  
    99 */
    1010
    11 /**
    12  * Subclass for representing a row from the 'member_profile' table.
    13  *
    14  *
    15  *
    16  * @package lib.model
    17  */
    1811class MemberProfile extends BaseMemberProfileNestedSet
    1912{
     
    2316  public function __toString()
    2417  {
     18    if ($this->getProfile()->getFormType() === 'date')
     19    {
     20      return (string)$this->getValue();
     21    }
    2522
    26     if ($this->getRhtKey() != 2) {
    27       $string = "";
     23    if ($this->getRhtKey() != 2)
     24    {
     25      $pieces = array();
    2826      $children = $this->getChildren();
    2927
    30       foreach ($children as $child) {
    31         if ($child->getProfileOptionId()) {
     28      foreach ($children as $child)
     29      {
     30        if ($child->getProfileOptionId())
     31        {
    3232          $option = ProfileOptionPeer::retrieveByPk($child->getProfileOptionId());
    33           if (!empty($string)) {
    34             $string .= ", ";
    35           }
    36           $string .= $option->getValue();
     33          $pieces[] = $option->getValue();
    3734        }
    3835      }
    3936
    40       return $string;
     37      return implode(', ', $pieces);
    4138    }
    4239
    43     if ($this->getProfileOptionId()) {
     40    if ($this->getProfileOptionId())
     41    {
    4442      $option = ProfileOptionPeer::retrieveByPk($this->getProfileOptionId());
    4543      return (string)$option->getValue();
     
    5149  public function getValue()
    5250  {
    53     if ($this->getRhtKey() != 2) {
     51    if ($this->getProfile()->getFormType() === 'date' && !$this->isRoot())
     52    {
     53      return parent::getValue();
     54    }
     55
     56    if ($this->getRhtKey() != 2)
     57    {
    5458      $children = $this->getChildren();
    5559      $value = array();
    56       foreach ($children as $child) {
    57         $value[] = $child->getProfileOptionId();
     60      foreach ($children as $child)
     61      {
     62        if ($child->getProfile()->getFormType() === 'date')
     63        {
     64          $value[] = $child->getValue();
     65        }
     66        elseif ($child->getProfileOptionId())
     67        {
     68          $option = ProfileOptionPeer::retrieveByPk($child->getProfileOptionId());
     69          $value[] = $option->getValue();
     70        }
    5871      }
     72
     73      if ($this->getProfile()->getFormType() === 'date' && $this->isRoot())
     74      {
     75        $obj = new DateTime();
     76        $obj->setDate($value[0], $value[1], $value[2]);
     77        return $obj->format('Y-m-d');
     78      }
     79
    5980      return $value;
    6081    }
    61     if ($this->getProfileOptionId()) {
     82    if ($this->getProfileOptionId())
     83    {
    6284      return $this->getProfileOptionId();
    6385    }
  • OpenPNE3/trunk/lib/model/MemberProfilePeer.php

    r10003 r10078  
    1010
    1111/**
    12  * Subclass for performing query and update operations on the 'member_profile' table.
     12 * MemberProfilePeer
    1313 *
    14  *
    15  *
    16  * @package lib.model
    17  */ 
     14 * @package    OpenPNE
     15 * @subpackage model
     16 * @author     Kousuke Ebihara <ebihara@tejimaya.com>
     17 */
    1818class MemberProfilePeer extends BaseMemberProfileNestedSetPeer
    1919{
     
    3636
    3737    $stmt = self::doSelectStmt($c);
    38     while ($row = $stmt->fetch(PDO::FETCH_NUM)) {
     38    while ($row = $stmt->fetch(PDO::FETCH_NUM))
     39    {
    3940      $obj = new MemberProfile();
    4041      $obj->hydrateProfiles($row);
     
    6364    return MemberProfilePeer::doSelectOne($c);
    6465  }
     66
     67  public static function searchMemberIds($profile = array(), $ids = array())
     68  {
     69    foreach ($profile as $key => $value)
     70    {
     71      $item = ProfilePeer::retrieveByName($key);
     72      $_result = array();
     73      $column = self::VALUE;
     74      if ($item->getFormType() === 'date')
     75      {
     76        $options = $item->getProfileOptions();
     77        foreach ($value as $k => $v)
     78        {
     79          $option = array_shift($options);
     80          if ($v)
     81          {
     82            $ids = self::filterMemberIdByProfileOption($ids, $column, $v, $option, array());
     83          }
     84        }
     85        continue;
     86      }
     87      elseif (is_array($value))
     88      {
     89        $column = self::PROFILE_OPTION_ID;
     90      }
     91
     92      $ids = self::filterMemberIdByProfile($ids, $column, $value, $item, array());
     93    }
     94
     95    return $ids;
     96  }
     97
     98  public static function filterMemberIdByProfile($ids, $column, $value, Profile $item, $choices)
     99  {
     100    $c = opFormItemGenerator::filterSearchCriteria(null, $column, $value, $item->toArray(), array());
     101    $c->clearSelectColumns()->addSelectColumn(self::MEMBER_ID);
     102    $c->setIgnoreCase(false);
     103    $c->add(self::PROFILE_ID, $item->getId());
     104    $stmt = self::doSelectStmt($c);
     105    while ($raw = $stmt->fetch(PDO::FETCH_NUM))
     106    {
     107      $_result[] = $raw[0];
     108    }
     109
     110    if (is_array($ids))
     111    {
     112      $ids = array_values(array_intersect($ids, $_result));
     113    }
     114    else
     115    {
     116      $ids = array_values($_result);
     117    }
     118
     119    return $ids;
     120  }
     121
     122  public static function filterMemberIdByProfileOption($ids, $column, $value, ProfileOption $item, $choices)
     123  {
     124    $_result = array();
     125    $c = new Criteria();
     126    $c->add($column, $value);
     127    $c->clearSelectColumns()->addSelectColumn(self::MEMBER_ID);
     128    $c->setIgnoreCase(false);
     129    $c->add(self::PROFILE_OPTION_ID, $item->getId());
     130    $stmt = self::doSelectStmt($c);
     131    while ($raw = $stmt->fetch(PDO::FETCH_NUM))
     132    {
     133      $_result[] = $raw[0];
     134    }
     135
     136    if (is_array($ids))
     137    {
     138      $ids = array_values(array_intersect($ids, $_result));
     139    }
     140    else
     141    {
     142      $ids = array_values($_result);
     143    }
     144
     145    return $ids;
     146  }
    65147}
  • OpenPNE3/trunk/lib/model/Profile.php

    r10003 r10078  
    1818class Profile extends BaseProfile
    1919{
    20         public function hydrate($row, $startcol = 0, $rehydrate = false)
     20  public function getOptionsArray()
     21  {
     22    $result = array();
     23
     24    $options = $this->getProfileOptions();
     25
     26    foreach ($options as $option)
     27    {
     28      $result[$option->getId()] = $option->getValue();
     29    }
     30
     31    return $result;
     32  }
     33
     34  public function toArray($keyType = BasePeer::TYPE_PHPNAME, $includeLazyLoadColumns = true)
     35  {
     36    $result = parent::toArray($keyType, $includeLazyLoadColumns);
     37    $result = $result + $this->getCurrentProfileI18n()->toArray($keyType, $includeLazyLoadColumns);
     38    return $result;
     39  }
     40
     41  public function hydrate($row, $startcol = 0, $rehydrate = false)
    2142  {
    2243    $this->setCulture(sfContext::getInstance()->getUser()->getCulture());
  • OpenPNE3/trunk/lib/model/ProfilePeer.php

    r10003 r10078  
    1818class ProfilePeer extends BaseProfilePeer
    1919{
     20  public static function retrievesAll()
     21  {
     22    $c = new Criteria();
     23    $c->addAscendingOrderByColumn(ProfilePeer::SORT_ORDER);
     24    return self::doSelect($c);
     25  }
     26
    2027  public static function retrieveByIsDispRegist()
    2128  {
  • OpenPNE3/trunk/lib/request/sfOpenPNEWebRequest.class.php

    r10003 r10078  
    120120    return true;
    121121  }
     122
     123  public function getCurrentQueryString()
     124  {
     125    return http_build_query($this->getGetParameters());
     126  }
    122127}
  • OpenPNE3/trunk/lib/util/opFormItemGenerator.class.php

    r10054 r10078  
    1818class opFormItemGenerator
    1919{
     20  public static function generateWidgetParams($field, $choices = array())
     21  {
     22    $params = array();
     23
     24    if ($field['Caption'])
     25    {
     26      $params['label'] = $field['Caption'];
     27    }
     28
     29    if ($choices)
     30    {
     31      $params['choices'] = $choices;
     32    }
     33    elseif (!empty($field['Choices']))
     34    {
     35      $params['choices'] = $field['Choices'];
     36    }
     37
     38    if (!empty($field['Default']))
     39    {
     40      $params['default'] = $field['Default'];
     41    }
     42
     43    return $params;
     44  }
     45
    2046  public static function generateWidget($field, $choices = array())
    2147  {
    22     $params = array();
    23 
    24     if ($field['Caption'])
    25     {
    26       $params['label'] = $field['Caption'];
    27     }
    28 
    29     if ($choices)
    30     {
    31       $params['choices'] = $choices;
    32     }
    33     elseif (!empty($field['Choices']))
    34     {
    35       $params['choices'] = $field['Choices'];
    36     }
    37 
    38     if (!empty($field['Default']))
    39     {
    40       $params['default'] = $field['Default'];
    41     }
    42 
    43     switch ($field['FormType']) {
     48    $params = self::generateWidgetParams($field, $choices);
     49
     50    switch ($field['FormType'])
     51    {
    4452      case 'checkbox':
    4553        $obj = new sfWidgetFormSelectCheckbox($params);
     
    6573        break;
    6674      case 'date':
     75        unset($params['choices']);
    6776        $params['culture'] = sfContext::getInstance()->getUser()->getCulture();
    6877        $params['month_format'] = 'number';
     
    160169    return $obj;
    161170  }
     171
     172  public static function generateSearchWidget($field, $choices = array())
     173  {
     174    $params = self::generateWidgetParams($field, $choices);
     175
     176    switch ($field['FormType'])
     177    {
     178      // selection
     179      case 'checkbox':
     180      case 'select':
     181      case 'radio':
     182        $obj = new sfWidgetFormSelectCheckbox($params);
     183        break;
     184      // doesn't allow searching
     185      case 'increased_input':
     186      case 'password':
     187        $obj = null;
     188        break;
     189      // date
     190      case 'date':
     191        unset($params['choices']);
     192        $params['culture'] = sfContext::getInstance()->getUser()->getCulture();
     193        $params['month_format'] = 'number';
     194        $params['can_be_empty'] = true;
     195        $obj = new opWidgetFormDate($params);
     196        break;
     197      // text and something else
     198      default:
     199        $obj = new sfWidgetFormInput($params);
     200    }
     201
     202    return $obj;
     203  }
     204
     205  public static function filterSearchCriteria($c, $column, $value, $field, $choices = array())
     206  {
     207    if (!$c)
     208    {
     209      $c = new Criteria();
     210    }
     211
     212    if (empty($value))
     213    {
     214      return $c;
     215    }
     216
     217    switch ($field['FormType'])
     218    {
     219      // selection
     220      case 'checkbox':
     221      case 'select':
     222      case 'radio':
     223        if (count($value) == 1)
     224        {
     225          $c->add($column, array_shift($value));
     226        }
     227        else
     228        {
     229          foreach ($value as $item)
     230          {
     231            $c->addOr($column, $item);
     232          }
     233        }
     234        break;
     235      // doesn't allow searching
     236      case 'increased_input':
     237      case 'password':
     238        // pass
     239        break;
     240      // text and something else
     241      default:
     242        $c->add($column, '%'.$value.'%', Criteria::LIKE);
     243    }
     244
     245    return $c;
     246  }
    162247}
  • OpenPNE3/trunk/lib/widget/opWidgetFormDate.class.php

    r10003 r10078  
    1818class opWidgetFormDate extends sfWidgetFormI18nDate
    1919{
     20  protected function configure($options = array(), $attributes = array())
     21  {
     22    parent::configure($options, $attributes);
     23    $this->setOption('can_be_empty', false);
     24  }
     25
    2026 /**
    2127  * @see sfWidgetFormI18nDate
     
    4349    }
    4450
     51    $emptyValues = $this->getOption('empty_values');
     52
     53    $days = $this->getOption('days');
     54    $months = $this->getOption('months');
     55
     56    $dayDefault = $dateTime->format('j');
     57    $monthDefault = $dateTime->format('n');
     58    $year = $dateTime->format('Y');
     59    if ($this->getOption('can_be_empty'))
     60    {
     61      $days = array('' => $emptyValues['day']) + $days;
     62      $months = array('' => $emptyValues['month']) + $months;
     63
     64      $dayDefault = $emptyValues['day'];
     65      $monthDefault = $emptyValues['month'];
     66      $year = $emptyValues['year'];
     67    }
     68
    4569    // days
    46     $widget = new sfWidgetFormSelect(array('choices' => $this->getOption('days')), array_merge($this->attributes, $attributes));
    47     $date['%day%'] = $widget->render($name.'[day]', $dateTime->format('j'));
     70    $widget = new sfWidgetFormSelect(array('choices' => $days), array_merge($this->attributes, $attributes));
     71    $date['%day%'] = $widget->render($name.'[day]', $dayDefault);
    4872
    4973    // months
    50     $widget = new sfWidgetFormSelect(array('choices' => $this->getOption('months')), array_merge($this->attributes, $attributes));
    51     $date['%month%'] = $widget->render($name.'[month]', $dateTime->format('n'));
     74    $widget = new sfWidgetFormSelect(array('choices' => $months), array_merge($this->attributes, $attributes));
     75    $date['%month%'] = $widget->render($name.'[month]', $monthDefault);
    5276
    5377    // years
    5478    $attributes['size'] = '5';
    5579    $widget = new sfWidgetFormInput(array(), array_merge($this->attributes, $attributes));
    56     $date['%input_year%'] = $widget->render($name.'[year]', $dateTime->format('Y'));
     80    $date['%input_year%'] = $widget->render($name.'[year]', $year);
    5781
    5882    return strtr($this->getOption('format'), $date);
    59 
    6083  }
    6184}
Note: See TracChangeset for help on using the changeset viewer.