Created
August 11, 2010 10:14
-
-
Save co3k/518783 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
diff --git a/apps/mobile_frontend/modules/community/templates/_cautionAboutCommunityMemberPre.php b/apps/mobile_frontend/modules/community/templates/_cautionAboutCommunityMemberPre.php | |
index 8cd9c40..dc9d5e1 100644 | |
--- a/apps/mobile_frontend/modules/community/templates/_cautionAboutCommunityMemberPre.php | |
+++ b/apps/mobile_frontend/modules/community/templates/_cautionAboutCommunityMemberPre.php | |
@@ -1,3 +1,4 @@ | |
+<?php $form = new sfForm() ?> | |
<?php foreach ($communityMembers as $communityMember) : ?> | |
<font color="red"> | |
<?php echo __('%1% send request for participation to %2%.', array( | |
@@ -6,6 +7,7 @@ | |
)) ?> | |
| |
<?php $param = 'id='.$communityMember->getCommunityId().'&member_id='.$communityMember->getMemberId(); ?> | |
+<?php $param .= '&'.$form->getCSRFFieldName().'='.$form->getCSRFToken() ?> | |
<?php echo link_to(__('Accept'), 'community/joinAccept?'.$param) ?> | |
| |
<?php echo link_to(__('Reject'), 'community/joinReject?'.$param) ?> | |
diff --git a/apps/mobile_frontend/modules/community/templates/deleteSuccess.php b/apps/mobile_frontend/modules/community/templates/deleteSuccess.php | |
index 227d3d2..1d96653 100644 | |
--- a/apps/mobile_frontend/modules/community/templates/deleteSuccess.php | |
+++ b/apps/mobile_frontend/modules/community/templates/deleteSuccess.php | |
@@ -1,8 +1,10 @@ | |
<?php op_mobile_page_title(__('Delete this community'), $community->getName()) ?> | |
<?php | |
+$form = new sfForm(); | |
op_include_parts('yesNo', 'deleteConfirmForm', array( | |
'body' => __('Do you delete this community?'), | |
- 'yes_form' => '<input type="hidden" name="is_delete">', | |
+ 'yes_form' => '<input type="hidden" name="is_delete">' | |
+ . '<input type="hidden" name="'.$form->getCSRFFieldName().'" value="'.$form->getCSRFToken().'">', | |
'button' => __('Delete'), | |
)) | |
?> | |
diff --git a/apps/mobile_frontend/modules/friend/templates/_cautionAboutFriendPre.php b/apps/mobile_frontend/modules/friend/templates/_cautionAboutFriendPre.php | |
index 36b784f..8f51fda 100644 | |
--- a/apps/mobile_frontend/modules/friend/templates/_cautionAboutFriendPre.php | |
+++ b/apps/mobile_frontend/modules/friend/templates/_cautionAboutFriendPre.php | |
@@ -1,10 +1,13 @@ | |
+<?php $form = new sfForm() ?> | |
<?php foreach ($sf_user->getMember()->getFriendPreTo() as $key => $value) : ?> | |
<font color="red"> | |
<?php $member = $value->getMemberRelatedByMemberIdFrom(); ?> | |
<?php echo __('Received from the friend link message from %1%!', array('%1%' => link_to(sprintf('%s', $member->getName()), 'member/profile?id='.$member->getId()))) ?> | |
| |
-<?php echo link_to(__('Accept'), 'friend/linkAccept?id='.$member->getId()) ?> | |
+<?php $param = 'id='.$member->getId() ?> | |
+<?php $param .= '&'.$form->getCSRFFieldName().'='.$form->getCSRFToken() ?> | |
+<?php echo link_to(__('Accept'), 'friend/linkAccept?'.$param) ?> | |
| |
-<?php echo link_to(__('Reject'), 'friend/linkReject?id='.$member->getId()) ?> | |
+<?php echo link_to(__('Reject'), 'friend/linkReject?'.$param) ?> | |
</font><br> | |
<?php endforeach; ?> | |
diff --git a/apps/mobile_frontend/modules/member/templates/configImageSuccess.php b/apps/mobile_frontend/modules/member/templates/configImageSuccess.php | |
index b526d80..f0c2bcd 100644 | |
--- a/apps/mobile_frontend/modules/member/templates/configImageSuccess.php | |
+++ b/apps/mobile_frontend/modules/member/templates/configImageSuccess.php | |
@@ -1,5 +1,7 @@ | |
<?php op_mobile_page_title(__('Settings'), __('Edit Photo')) ?> | |
<center> | |
+<?php $form = new sfForm() ?> | |
+<?php $csrfToken = '&'.$form->getCSRFFieldName().'='.$form->getCSRFToken() ?> | |
<?php $_member = $sf_user->getMember() ?> | |
<?php $images = $_member->getMemberImages() ?> | |
<?php for ($i = 0; $i < 3 && $i < count($images); $i++) : ?> | |
@@ -13,7 +15,7 @@ if ($image->getIsPrimary()) | |
} | |
else | |
{ | |
- $main = link_to(__('Main Photo'), 'member/changeMainImage?member_image_id='.$image->getId()); | |
+ $main = link_to(__('Main Photo'), 'member/changeMainImage?member_image_id='.$image->getId().$csrfToken); | |
} | |
?> | |
<?php echo sprintf('[%s|%s]', link_to(__('Delete'), 'member/deleteImage?member_image_id='.$image->getId()), $main) ?> | |
diff --git a/apps/pc_backend/modules/community/actions/actions.class.php b/apps/pc_backend/modules/community/actions/actions.class.php | |
index 720d306..b28fd03 100644 | |
--- a/apps/pc_backend/modules/community/actions/actions.class.php | |
+++ b/apps/pc_backend/modules/community/actions/actions.class.php | |
@@ -59,6 +59,7 @@ class communityActions extends sfActions | |
if ($request->isMethod(sfRequest::POST)) | |
{ | |
+ $request->checkCSRFProtection(); | |
$this->community->delete(); | |
$this->getUser()->setFlash('notice', 'Deleted.'); | |
$this->redirect('community/list'); | |
@@ -97,6 +98,8 @@ class communityActions extends sfActions | |
*/ | |
public function executeRemoveDefaultCommunity(sfWebRequest $request) | |
{ | |
+ $request->checkCSRFProtection(); | |
+ | |
$communityConfig = CommunityConfigPeer::retrieveByNameAndCommunityId('is_default', $request->getParameter('id')); | |
$this->forward404Unless($communityConfig); | |
diff --git a/apps/pc_backend/modules/community/templates/defaultCommunityListSuccess.php b/apps/pc_backend/modules/community/templates/defaultCommunityListSuccess.php | |
index 4a7ef3f..9cc4e2c 100644 | |
--- a/apps/pc_backend/modules/community/templates/defaultCommunityListSuccess.php | |
+++ b/apps/pc_backend/modules/community/templates/defaultCommunityListSuccess.php | |
@@ -22,12 +22,16 @@ | |
<th>管理者名</th> | |
<th>操作</th> | |
</tr> | |
+<?php | |
+$form = new sfForm(); | |
+$csrfToken = '&'.$form->getCSRFFieldName().'='.$form->getCSRFToken(); | |
+?> | |
<?php foreach ($communities as $community): ?> | |
<tr> | |
<td><?php echo $community->getId() ?></td> | |
<td><?php echo $community->getName() ?></td> | |
<td><?php echo $community->getAdminMember()->getName() ?></td> | |
-<td><?php echo link_to('削除', 'community/removeDefaultCommunity?id='.$community->getId()) ?></td> | |
+<td><?php echo link_to('削除', 'community/removeDefaultCommunity?id='.$community->getId().$csrfToken) ?></td> | |
</tr> | |
<?php endforeach; ?> | |
</table> | |
diff --git a/apps/pc_backend/modules/community/templates/deleteSuccess.php b/apps/pc_backend/modules/community/templates/deleteSuccess.php | |
index 4db0a16..1f15518 100644 | |
--- a/apps/pc_backend/modules/community/templates/deleteSuccess.php | |
+++ b/apps/pc_backend/modules/community/templates/deleteSuccess.php | |
@@ -6,10 +6,15 @@ | |
<p><?php echo __('本当にこのコミュニティを削除してもよろしいですか?') ?></p> | |
+<?php | |
+$form = new sfForm(); | |
+$csrfToken = '<input type="hidden" name="'.$form->getCSRFFieldName().'" value="'.$form->getCSRFToken().'"/>'; | |
+?> | |
+ | |
<form action="<?php url_for('community/delete?id='.$community->getId()) ?>" method="post"> | |
<?php include_partial('community/communityInfo', array( | |
'community' => $community, | |
- 'moreInfo' => array('<input type="submit" value="削除" />') | |
+ 'moreInfo' => array($csrfToken.'<input type="submit" value="削除" />') | |
)); ?> | |
</form> | |
diff --git a/apps/pc_backend/modules/default/actions/csrfErrorAction.class.php b/apps/pc_backend/modules/default/actions/csrfErrorAction.class.php | |
new file mode 100644 | |
index 0000000..73dc29b | |
--- /dev/null | |
+++ b/apps/pc_backend/modules/default/actions/csrfErrorAction.class.php | |
@@ -0,0 +1,23 @@ | |
+<?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. | |
+ */ | |
+ | |
+ /** | |
+ * csrfError action. | |
+ * | |
+ * @package OpenPNE | |
+ * @subpackage default | |
+ * @author Kousuke Ebihara <[email protected]> | |
+ */ | |
+class csrfErrorAction extends sfAction | |
+{ | |
+ public function execute($request) | |
+ { | |
+ } | |
+} | |
diff --git a/apps/pc_backend/modules/default/templates/csrfErrorSuccess.php b/apps/pc_backend/modules/default/templates/csrfErrorSuccess.php | |
new file mode 100644 | |
index 0000000..20bc4b7 | |
--- /dev/null | |
+++ b/apps/pc_backend/modules/default/templates/csrfErrorSuccess.php | |
@@ -0,0 +1 @@ | |
+<?php echo __('CSRF attack detected.'); ?> | |
diff --git a/apps/pc_backend/modules/design/actions/actions.class.php b/apps/pc_backend/modules/design/actions/actions.class.php | |
index e5a8e8a..a47f3bf 100644 | |
--- a/apps/pc_backend/modules/design/actions/actions.class.php | |
+++ b/apps/pc_backend/modules/design/actions/actions.class.php | |
@@ -268,6 +268,8 @@ class designActions extends sfActions | |
$isMobile = (bool)('mobile' === $this->app); | |
$this->list = array(); | |
+ $this->deleteForm = new sfForm(); | |
+ $this->sortForm = new sfForm(); | |
$types = NavigationPeer::retrieveTypes($isMobile); | |
@@ -317,6 +319,8 @@ class designActions extends sfActions | |
if ($request->isMethod('post')) | |
{ | |
+ $request->checkCSRFProtection(); | |
+ | |
$model = NavigationPeer::retrieveByPk($request->getParameter('id')); | |
$this->forward404Unless($model); | |
$model->delete(); | |
@@ -337,6 +341,8 @@ class designActions extends sfActions | |
$this->forward404(); | |
} | |
+ $request->checkCSRFProtection(); | |
+ | |
$parameters = $request->getParameterHolder(); | |
$keys = $parameters->getNames(); | |
foreach ($keys as $key) | |
@@ -438,13 +444,6 @@ class designActions extends sfActions | |
$this->form->save(); | |
$this->redirect('design/banner'); | |
} | |
- if (!isset($params['file'])) | |
- { | |
- $banner->setName($params['name']); | |
- $banner->setUrl($params['url']); | |
- $banner->save(); | |
- $this->redirect('design/banner'); | |
- } | |
} | |
} | |
@@ -463,6 +462,7 @@ class designActions extends sfActions | |
if ($request->isMethod(sfWebRequest::POST)) | |
{ | |
+ $request->checkCSRFProtection(); | |
$banner->delete(); | |
$this->redirect('design/banner'); | |
} | |
diff --git a/apps/pc_backend/modules/design/templates/bannerdeleteSuccess.php b/apps/pc_backend/modules/design/templates/bannerdeleteSuccess.php | |
index af2759e..86acd23 100644 | |
--- a/apps/pc_backend/modules/design/templates/bannerdeleteSuccess.php | |
+++ b/apps/pc_backend/modules/design/templates/bannerdeleteSuccess.php | |
@@ -2,8 +2,12 @@ | |
<?php include_partial('submenu'); ?> | |
<?php end_slot() ?> | |
+<?php $form = new sfForm() ?> | |
<h2><?php echo __('Delete a banner image') ?></h2> | |
<p><?php echo __('Delete truly this banner image?') ?></p> | |
<form action="" method="post"> | |
-<td colspan="2"><input type="submit" value="<?php echo __('Delete') ?>" /></td> | |
+<td colspan="2"> | |
+<input type="hidden" name="<?php echo $form->getCSRFFieldName() ?>" value="<?php echo $form->getCSRFToken() ?>" /> | |
+<input type="submit" value="<?php echo __('Delete') ?>" /> | |
+</td> | |
</form> | |
diff --git a/apps/pc_backend/modules/design/templates/navigationSuccess.php b/apps/pc_backend/modules/design/templates/navigationSuccess.php | |
index 18c8685..4f4e0bf 100644 | |
--- a/apps/pc_backend/modules/design/templates/navigationSuccess.php | |
+++ b/apps/pc_backend/modules/design/templates/navigationSuccess.php | |
@@ -27,7 +27,12 @@ | |
<?php else : ?> | |
<td><?php echo $form['id']->render() ?> | |
<input type="submit" value="<?php echo __('編集') ?>" /></form></td> | |
-<td><form action="<?php echo url_for('design/navigationDelete?id=' . $form->getObject()->getId()) ?>" method="post" /><input type="submit" value="<?php echo __('削除') ?>" /></form></td> | |
+<td> | |
+<form action="<?php echo url_for('design/navigationDelete?id=' . $form->getObject()->getId()) ?>" method="post"> | |
+<?php echo $deleteForm ?> | |
+<input type="submit" value="<?php echo __('削除') ?>" /> | |
+</form> | |
+</td> | |
<?php endif; ?> | |
</tr> | |
</tbody> | |
@@ -37,7 +42,8 @@ | |
<?php echo sortable_element('type_'.str_replace(' ', '_', $type), array( | |
'tag' => 'tbody', | |
'only' => 'sortable', | |
- 'url' => 'design/navigationSort' | |
+ 'url' => 'design/navigationSort', | |
+ 'with' => 'Sortable.serialize("type_'.str_replace(' ', '_', $type).'")+"&'.urlencode($sortForm->getCSRFFieldName()).'='.urlencode($sortForm->getCSRFToken()).'"', | |
)) ?> | |
<?php endforeach; ?> | |
diff --git a/apps/pc_backend/modules/member/actions/actions.class.php b/apps/pc_backend/modules/member/actions/actions.class.php | |
index 1962507..5ac5ba0 100644 | |
--- a/apps/pc_backend/modules/member/actions/actions.class.php | |
+++ b/apps/pc_backend/modules/member/actions/actions.class.php | |
@@ -71,6 +71,7 @@ class memberActions extends sfActions | |
$this->form = new sfForm(); | |
if ($request->isMethod('post')) | |
{ | |
+ $request->checkCSRFProtection(); | |
$this->member->delete(); | |
$this->getUser()->setFlash('notice', '退会が完了しました'); | |
$this->redirect('member/list'); | |
diff --git a/apps/pc_backend/modules/profile/actions/actions.class.php b/apps/pc_backend/modules/profile/actions/actions.class.php | |
index edf2be2..0b05360 100644 | |
--- a/apps/pc_backend/modules/profile/actions/actions.class.php | |
+++ b/apps/pc_backend/modules/profile/actions/actions.class.php | |
@@ -39,6 +39,8 @@ class profileActions extends sfActions | |
$newProfileOption->setProfileId($value->getId()); | |
$this->option_form[$value->getId()][] = new ProfileOptionForm($newProfileOption); | |
} | |
+ | |
+ $this->tokenForm = new sfForm(); | |
} | |
/** | |
@@ -100,7 +102,9 @@ class profileActions extends sfActions | |
$this->profile = ProfilePeer::retrieveByPk($request->getParameter('id')); | |
$this->forward404Unless($this->profile); | |
- if ($request->isMethod('post')) { | |
+ if ($request->isMethod('post')) | |
+ { | |
+ $request->checkCSRFProtection(); | |
$this->profile->delete(); | |
$this->redirect('profile/list'); | |
} | |
@@ -116,7 +120,9 @@ class profileActions extends sfActions | |
$this->profileOption = ProfileOptionPeer::retrieveByPk($request->getParameter('id')); | |
$this->forward404Unless($this->profileOption); | |
- if ($request->isMethod('post')) { | |
+ if ($request->isMethod('post')) | |
+ { | |
+ $request->checkCSRFProtection(); | |
$this->profileOption->delete(); | |
} | |
$this->redirect('profile/list'); | |
@@ -131,6 +137,7 @@ class profileActions extends sfActions | |
{ | |
if ($request->isXmlHttpRequest()) | |
{ | |
+ $request->checkCSRFProtection(); | |
$order = $request->getParameter('profiles'); | |
for ($i = 0; $i < count($order); $i++) | |
{ | |
@@ -154,6 +161,7 @@ class profileActions extends sfActions | |
{ | |
if ($request->isXmlHttpRequest()) | |
{ | |
+ $request->checkCSRFProtection(); | |
$parameters = $request->getParameterHolder(); | |
$keys = $parameters->getNames(); | |
foreach ($keys as $key) | |
diff --git a/apps/pc_backend/modules/profile/templates/deleteSuccess.php b/apps/pc_backend/modules/profile/templates/deleteSuccess.php | |
index 94fd037..e10ec5e 100644 | |
--- a/apps/pc_backend/modules/profile/templates/deleteSuccess.php | |
+++ b/apps/pc_backend/modules/profile/templates/deleteSuccess.php | |
@@ -1,6 +1,7 @@ | |
<h2>プロフィール項目削除</h2> | |
<p>本当に削除してもよろしいですか?</p> | |
<p>※この項目に対するメンバーの入力値も失われます。</p> | |
-<form action="<?php echo url_for('profile/delete?id=' . $profile->getId()) ?>" method="post"> | |
+<form action="<?php echo url_for('profile/delete?id='.$profile->getId()) ?>" method="post"> | |
+<?php $formCSRF = new sfForm(); ?><input type="hidden" name="<?php echo $formCSRF->getCSRFFieldName() ?>" value="<?php echo $formCSRF->getCSRFToken() ?>" /> | |
<input type="submit" value="削除する" /> | |
</form> | |
diff --git a/apps/pc_backend/modules/profile/templates/listSuccess.php b/apps/pc_backend/modules/profile/templates/listSuccess.php | |
index d0960ff..99736ef 100644 | |
--- a/apps/pc_backend/modules/profile/templates/listSuccess.php | |
+++ b/apps/pc_backend/modules/profile/templates/listSuccess.php | |
@@ -47,8 +47,9 @@ | |
<?php endforeach; ?> | |
</table> | |
<?php echo sortable_element('profiles',array( | |
- 'tag' => 'tbody', | |
- 'url' => 'profile/sortProfile' | |
+ 'tag' => 'tbody', | |
+ 'url' => 'profile/sortProfile', | |
+ 'with' => 'Sortable.serialize("profiles")+"&'.urlencode($tokenForm->getCSRFFieldName()).'='.urlencode($tokenForm->getCSRFToken()).'"' | |
)) ?> | |
<h3>プロフィール選択肢一覧</h3> | |
@@ -68,8 +69,8 @@ | |
<?php else: ?> | |
<tbody> | |
<?php endif; ?> | |
-<form action="<?php echo url_for('profile/editOption?id=' . $form->getObject()->getId()) ?>" method="post"> | |
<tr> | |
+<form action="<?php echo url_for('profile/editOption?id='.$form->getObject()->getId()) ?>" method="post"> | |
<td><?php echo ($form->getObject()->isNew() ? '-' : $form->getObject()->getId()) ?></td> | |
<td> | |
<?php echo $form['ja_JP']['value']->render() ?> | |
@@ -87,9 +88,10 @@ | |
</td> | |
</form> | |
<td> | |
-<?php echo $form['id']->render() ?> | |
-<?php echo $form['profile_id']->render() ?> | |
-<form action="<?php echo url_for('profile/deleteOption?id=' . $form->getObject()->getId()) ?>" method="post"> | |
+<form action="<?php echo url_for('profile/deleteOption?id='.$form->getObject()->getId()) ?>" method="post"> | |
+<?php echo $form['id']->render(), "\n" ?> | |
+<?php echo $form['profile_id']->render(), "\n" ?> | |
+<?php $formCSRF = new sfForm(); ?><input type="hidden" name="<?php echo $formCSRF->getCSRFFieldName() ?>" value="<?php echo $formCSRF->getCSRFToken() ?>" /> | |
<input type="submit" value="削除" /> | |
</form> | |
</td> | |
@@ -101,7 +103,8 @@ | |
<?php echo sortable_element('profile_options_'.$value->getId(),array( | |
'tag' => 'tbody', | |
'only' => 'sortable', | |
- 'url' => 'profile/sortProfileOption' | |
+ 'url' => 'profile/sortProfileOption', | |
+ 'with' => 'Sortable.serialize("profile_options_'.$value->getId().'")+"&'.urlencode($tokenForm->getCSRFFieldName()).'='.urlencode($tokenForm->getCSRFToken()).'"' | |
)) ?> | |
<?php endif; ?> | |
<?php endforeach; ?> | |
diff --git a/apps/pc_frontend/modules/community/templates/_cautionAboutCommunityMemberPre.php b/apps/pc_frontend/modules/community/templates/_cautionAboutCommunityMemberPre.php | |
index f9764a6..dd79766 100644 | |
--- a/apps/pc_frontend/modules/community/templates/_cautionAboutCommunityMemberPre.php | |
+++ b/apps/pc_frontend/modules/community/templates/_cautionAboutCommunityMemberPre.php | |
@@ -1,3 +1,4 @@ | |
+<?php $form = new sfForm() ?> | |
<?php foreach ($communityMembers as $communityMember) : ?> | |
<p class="caution"> | |
<?php echo __('%1% send request for participation to %2%.', array( | |
@@ -6,6 +7,7 @@ | |
)) ?> | |
| |
<?php $param = 'id='.$communityMember->getCommunityId().'&member_id='.$communityMember->getMemberId(); ?> | |
+<?php $param .= '&'.$form->getCSRFFieldName().'='.$form->getCSRFToken() ?> | |
<?php echo link_to(__('Permits'), 'community/joinAccept?'.$param) ?> | |
| |
<?php echo link_to(__('Refuses'), 'community/joinReject?'.$param) ?> | |
diff --git a/apps/pc_frontend/modules/community/templates/deleteSuccess.php b/apps/pc_frontend/modules/community/templates/deleteSuccess.php | |
index 151aff1..dbf0a7d 100644 | |
--- a/apps/pc_frontend/modules/community/templates/deleteSuccess.php | |
+++ b/apps/pc_frontend/modules/community/templates/deleteSuccess.php | |
@@ -1,7 +1,9 @@ | |
<?php | |
+$form = new sfForm(); | |
op_include_parts('yesNo', 'deleteConfirmForm', array( | |
'title' => __('Do you delete this community?'), | |
- 'yes_form' => '<input type="hidden" name="is_delete">', | |
+ 'yes_form' => '<input type="hidden" name="is_delete"/>' | |
+ . '<input type="hidden" name="'.$form->getCSRFFieldName().'" value="'.$form->getCSRFToken().'"/>', | |
'button' => __('Delete'), | |
)) | |
?> | |
diff --git a/apps/pc_frontend/modules/friend/templates/_cautionAboutFriendPre.php b/apps/pc_frontend/modules/friend/templates/_cautionAboutFriendPre.php | |
index cef9f3b..d2f20b9 100644 | |
--- a/apps/pc_frontend/modules/friend/templates/_cautionAboutFriendPre.php | |
+++ b/apps/pc_frontend/modules/friend/templates/_cautionAboutFriendPre.php | |
@@ -1,11 +1,14 @@ | |
+<?php $form = new sfForm() ?> | |
<?php foreach ($sf_user->getMember()->getFriendPreTo() as $key => $value) : ?> | |
<p class="caution"> | |
<?php | |
$member = $value->getMemberRelatedByMemberIdFrom(); | |
echo __('%1% sent my friends request to you!', array('%1%' => link_to($member->getName(), 'member/profile?id='.$member->getId()))) ?> | |
| |
-<?php echo link_to(__('Permits'), 'friend/linkAccept?id='.$member->getId()) ?> | |
+<?php $param = 'id='.$member->getId() ?> | |
+<?php $param .= '&'.$form->getCSRFFieldName().'='.$form->getCSRFToken() ?> | |
+<?php echo link_to(__('Permits'), 'friend/linkAccept?'.$param) ?> | |
| |
-<?php echo link_to(__('Refuses'), 'friend/linkReject?id='.$member->getId()) ?> | |
+<?php echo link_to(__('Refuses'), 'friend/linkReject?'.$param) ?> | |
</p> | |
<?php endforeach; ?> | |
diff --git a/apps/pc_frontend/templates/_partsMemberImagesBox.php b/apps/pc_frontend/templates/_partsMemberImagesBox.php | |
index e172966..f476bcd 100644 | |
--- a/apps/pc_frontend/templates/_partsMemberImagesBox.php | |
+++ b/apps/pc_frontend/templates/_partsMemberImagesBox.php | |
@@ -1,5 +1,7 @@ | |
<table> | |
<tr> | |
+<?php $form = new sfForm() ?> | |
+<?php $csrfToken = '&'.$form->getCSRFFieldName().'='.$form->getCSRFToken() ?> | |
<?php for ($i = 0; $i < 3; $i++) : ?> | |
<td> | |
<?php if (isset($options['images'][$i])) : ?> | |
@@ -7,11 +9,11 @@ | |
<?php echo image_tag_sf_image($image->getFile(), array('size' => '180x180')) ?><br /> | |
<?php if (isset($options['form'])) : ?> | |
[ | |
-<?php echo link_to(__('Delete'), 'member/deleteImage?member_image_id='.$image->getId()) ?> | | |
+<?php echo link_to(__('Delete'), 'member/deleteImage?member_image_id='.$image->getId().$csrfToken) ?> | | |
<?php if ($image->getIsPrimary()) : ?> | |
<?php echo(__('Main Photo')) ?> | |
<?php else: ?> | |
-<?php echo link_to(__('Main Photo'), 'member/changeMainImage?member_image_id='.$image->getId()) ?> | |
+<?php echo link_to(__('Main Photo'), 'member/changeMainImage?member_image_id='.$image->getId().$csrfToken) ?> | |
<?php endif; ?> | |
] | |
<?php endif; ?> | |
diff --git a/data/version.php b/data/version.php | |
index abf024b..30b5ff5 100644 | |
--- a/data/version.php | |
+++ b/data/version.php | |
@@ -10,5 +10,5 @@ | |
if (!defined('OPENPNE_VERSION')) | |
{ | |
- define('OPENPNE_VERSION', '3.0.8'); | |
+ define('OPENPNE_VERSION', '3.0.8.1'); | |
} | |
diff --git a/lib/action/sfOpenPNECommunityAction.class.php b/lib/action/sfOpenPNECommunityAction.class.php | |
index 23a2d9e..b4bc6e3 100644 | |
--- a/lib/action/sfOpenPNECommunityAction.class.php | |
+++ b/lib/action/sfOpenPNECommunityAction.class.php | |
@@ -112,8 +112,9 @@ abstract class sfOpenPNECommunityAction extends sfActions | |
if ($request->isMethod('post')) | |
{ | |
- if($request->hasParameter('is_delete')) | |
+ if ($request->hasParameter('is_delete')) | |
{ | |
+ $request->checkCSRFProtection(); | |
$community = CommunityPeer::retrieveByPk($this->id); | |
if ($community) | |
{ | |
@@ -231,6 +232,7 @@ abstract class sfOpenPNECommunityAction extends sfActions | |
*/ | |
public function executeJoinAccept($request) | |
{ | |
+ $request->checkCSRFProtection(); | |
$this->redirectUnless($this->isAdmin, '@error'); | |
$communityMember = CommunityMemberPeer::retrieveByMemberIdAndCommunityId($request->getParameter('member_id'), $this->id); | |
@@ -252,8 +254,9 @@ abstract class sfOpenPNECommunityAction extends sfActions | |
*/ | |
public function executeJoinReject($request) | |
{ | |
+ $request->checkCSRFProtection(); | |
$this->forward404Unless($this->isAdmin); | |
- | |
+ | |
$communityMember = CommunityMemberPeer::retrieveByMemberIdAndCommunityId($request->getParameter('member_id'), $this->id); | |
$this->forward404Unless($communityMember); | |
diff --git a/lib/action/sfOpenPNEFriendAction.class.php b/lib/action/sfOpenPNEFriendAction.class.php | |
index d29dce4..9ef4278 100644 | |
--- a/lib/action/sfOpenPNEFriendAction.class.php | |
+++ b/lib/action/sfOpenPNEFriendAction.class.php | |
@@ -103,6 +103,7 @@ abstract class sfOpenPNEFriendAction extends sfActions | |
*/ | |
public function executeLinkAccept($request) | |
{ | |
+ $request->checkCSRFProtection(); | |
$this->forward404Unless($this->relation->isFriendPreTo()); | |
$this->redirectToHomeIfIdIsNotValid(); | |
@@ -119,6 +120,7 @@ abstract class sfOpenPNEFriendAction extends sfActions | |
*/ | |
public function executeLinkReject($request) | |
{ | |
+ $request->checkCSRFProtection(); | |
$this->forward404Unless($this->relation->isFriendPreTo()); | |
$this->redirectToHomeIfIdIsNotValid(); | |
diff --git a/lib/action/sfOpenPNEMemberAction.class.php b/lib/action/sfOpenPNEMemberAction.class.php | |
index 571382e..187c729 100644 | |
--- a/lib/action/sfOpenPNEMemberAction.class.php | |
+++ b/lib/action/sfOpenPNEMemberAction.class.php | |
@@ -356,6 +356,7 @@ abstract class sfOpenPNEMemberAction extends sfActions | |
public function executeDeleteImage($request) | |
{ | |
+ $request->checkCSRFProtection(); | |
$image = MemberImagePeer::retrieveByPk($request->getParameter('member_image_id')); | |
$this->forward404Unless($image); | |
$this->forward404Unless($image->getMemberId() == $this->getUser()->getMemberId()); | |
@@ -367,6 +368,7 @@ abstract class sfOpenPNEMemberAction extends sfActions | |
public function executeChangeMainImage($request) | |
{ | |
+ $request->checkCSRFProtection(); | |
$image = MemberImagePeer::retrieveByPk($request->getParameter('member_image_id')); | |
$this->forward404Unless($image); | |
$this->forward404Unless($image->getMemberId() == $this->getUser()->getMemberId()); | |
diff --git a/lib/form/BannerImageForm.class.php b/lib/form/BannerImageForm.class.php | |
index b091bbc..68a1c67 100644 | |
--- a/lib/form/BannerImageForm.class.php | |
+++ b/lib/form/BannerImageForm.class.php | |
@@ -24,7 +24,7 @@ class BannerImageForm extends BaseBannerImageForm | |
$this->setWidget('url', new sfWidgetFormInput(array(), array('size' => 40))); | |
$this->setWidget('name', new sfWidgetFormInput()); | |
$this->setValidators(array( | |
- 'file' => new opValidatorImageFile(), | |
+ 'file' => new opValidatorImageFile(array('required' => $this->isNew())), | |
'url' => new sfValidatorPass(), | |
'name' => new sfValidatorPass(), | |
)); | |
@@ -38,10 +38,6 @@ class BannerImageForm extends BaseBannerImageForm | |
public function save() | |
{ | |
- $file = new File(); | |
- $file->setFromValidatedFile($this->getValue('file')); | |
- $file->setName('b_'.$file->getName()); | |
- | |
if ($this->isNew()) | |
{ | |
$bannerImage = new BannerImage(); | |
@@ -50,7 +46,15 @@ class BannerImageForm extends BaseBannerImageForm | |
{ | |
$bannerImage = $this->getObject(); | |
} | |
- $bannerImage->setFile($file); | |
+ | |
+ if ($this->getValue('file')) | |
+ { | |
+ $file = new File(); | |
+ $file->setFromValidatedFile($this->getValue('file')); | |
+ $file->setName('b_'.$file->getName()); | |
+ $bannerImage->setFile($file); | |
+ } | |
+ | |
$bannerImage->setUrl($this->getValue('url')); | |
$bannerImage->setName($this->getValue('name')); |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
diff --git a/apps/mobile_frontend/modules/community/templates/deleteSuccess.php b/apps/mobile_frontend/modules/community/templates/deleteSuccess.php | |
index 016760a..acea753 100644 | |
--- a/apps/mobile_frontend/modules/community/templates/deleteSuccess.php | |
+++ b/apps/mobile_frontend/modules/community/templates/deleteSuccess.php | |
@@ -1,8 +1,10 @@ | |
<?php op_mobile_page_title(__('Delete this %community%'), $community->getName()) ?> | |
<?php | |
+$form = new sfForm(); | |
op_include_parts('yesNo', 'deleteConfirmForm', array( | |
'body' => __('Do you delete this %community%?'), | |
- 'yes_form' => '<input type="hidden" name="is_delete">', | |
+ 'yes_form' => '<input type="hidden" name="is_delete">' | |
+ . '<input type="hidden" name="'.$form->getCSRFFieldName().'" value="'.$form->getCSRFToken().'">', | |
'button' => __('Delete'), | |
)) | |
?> | |
diff --git a/apps/mobile_frontend/modules/member/templates/configImageSuccess.php b/apps/mobile_frontend/modules/member/templates/configImageSuccess.php | |
index bf4e27a..837010d 100644 | |
--- a/apps/mobile_frontend/modules/member/templates/configImageSuccess.php | |
+++ b/apps/mobile_frontend/modules/member/templates/configImageSuccess.php | |
@@ -3,6 +3,8 @@ | |
<?php $_member = $sf_user->getMember() ?> | |
<?php $images = $_member->getMemberImage() ?> | |
<?php if ($images->count()): ?> | |
+<?php $form = new sfForm() ?> | |
+<?php $csrfToken = '&'.$form->getCSRFFieldName().'='.$form->getCSRFToken() ?> | |
<?php foreach ($images as $image) : ?> | |
<?php echo image_tag_sf_image($image->getFile(), array('size' => '120x120', 'format' => 'jpg')) ?><br> | |
<?php echo sprintf('[%s]',link_to(__('Expansion'), sf_image_path($image->getFile(), array('size' => '320x320', 'format' => 'jpg')))) ?><br> | |
@@ -13,7 +15,7 @@ if ($image->getIsPrimary()) | |
} | |
else | |
{ | |
- $main = link_to(__('Main Photo'), 'member/changeMainImage?member_image_id='.$image->getId()); | |
+ $main = link_to(__('Main Photo'), 'member/changeMainImage?member_image_id='.$image->getId().$csrfToken); | |
} | |
?> | |
<?php echo sprintf('[%s|%s]', link_to(__('Delete'), 'member/deleteImage?member_image_id='.$image->getId()), $main) ?> | |
diff --git a/apps/pc_backend/modules/community/actions/actions.class.php b/apps/pc_backend/modules/community/actions/actions.class.php | |
index d95a8bf..398436b 100644 | |
--- a/apps/pc_backend/modules/community/actions/actions.class.php | |
+++ b/apps/pc_backend/modules/community/actions/actions.class.php | |
@@ -59,6 +59,7 @@ class communityActions extends sfActions | |
if ($request->isMethod(sfRequest::POST)) | |
{ | |
+ $request->checkCSRFProtection(); | |
$this->community->delete(); | |
$this->getUser()->setFlash('notice', 'Deleted.'); | |
$this->redirect('community/list'); | |
@@ -96,6 +97,8 @@ class communityActions extends sfActions | |
*/ | |
public function executeRemoveDefaultCommunity(sfWebRequest $request) | |
{ | |
+ $request->checkCSRFProtection(); | |
+ | |
$communityConfig = Doctrine::getTable('CommunityConfig')->retrieveByNameAndCommunityId('is_default', $request->getParameter('id')); | |
$this->forward404Unless($communityConfig); | |
diff --git a/apps/pc_backend/modules/community/templates/defaultCommunityListSuccess.php b/apps/pc_backend/modules/community/templates/defaultCommunityListSuccess.php | |
index 2a67979..32acdfe 100644 | |
--- a/apps/pc_backend/modules/community/templates/defaultCommunityListSuccess.php | |
+++ b/apps/pc_backend/modules/community/templates/defaultCommunityListSuccess.php | |
@@ -22,12 +22,16 @@ | |
<th>管理者名</th> | |
<th>操作</th> | |
</tr> | |
+<?php | |
+$form = new sfForm(); | |
+$csrfToken = '&'.$form->getCSRFFieldName().'='.$form->getCSRFToken(); | |
+?> | |
<?php foreach ($communities as $community): ?> | |
<tr> | |
<td><?php echo $community->getId() ?></td> | |
<td><?php echo $community->getName() ?></td> | |
<td><?php echo $community->getAdminMember()->getName() ?></td> | |
-<td><?php echo link_to('削除', 'community/removeDefaultCommunity?id='.$community->getId()) ?></td> | |
+<td><?php echo link_to('削除', 'community/removeDefaultCommunity?id='.$community->getId().$csrfToken) ?></td> | |
</tr> | |
<?php endforeach; ?> | |
</table> | |
diff --git a/apps/pc_backend/modules/community/templates/deleteSuccess.php b/apps/pc_backend/modules/community/templates/deleteSuccess.php | |
index 4db0a16..1f15518 100644 | |
--- a/apps/pc_backend/modules/community/templates/deleteSuccess.php | |
+++ b/apps/pc_backend/modules/community/templates/deleteSuccess.php | |
@@ -6,10 +6,15 @@ | |
<p><?php echo __('本当にこのコミュニティを削除してもよろしいですか?') ?></p> | |
+<?php | |
+$form = new sfForm(); | |
+$csrfToken = '<input type="hidden" name="'.$form->getCSRFFieldName().'" value="'.$form->getCSRFToken().'"/>'; | |
+?> | |
+ | |
<form action="<?php url_for('community/delete?id='.$community->getId()) ?>" method="post"> | |
<?php include_partial('community/communityInfo', array( | |
'community' => $community, | |
- 'moreInfo' => array('<input type="submit" value="削除" />') | |
+ 'moreInfo' => array($csrfToken.'<input type="submit" value="削除" />') | |
)); ?> | |
</form> | |
diff --git a/apps/pc_backend/modules/default/actions/csrfErrorAction.class.php b/apps/pc_backend/modules/default/actions/csrfErrorAction.class.php | |
new file mode 100644 | |
index 0000000..73dc29b | |
--- /dev/null | |
+++ b/apps/pc_backend/modules/default/actions/csrfErrorAction.class.php | |
@@ -0,0 +1,23 @@ | |
+<?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. | |
+ */ | |
+ | |
+ /** | |
+ * csrfError action. | |
+ * | |
+ * @package OpenPNE | |
+ * @subpackage default | |
+ * @author Kousuke Ebihara <[email protected]> | |
+ */ | |
+class csrfErrorAction extends sfAction | |
+{ | |
+ public function execute($request) | |
+ { | |
+ } | |
+} | |
diff --git a/apps/pc_backend/modules/default/templates/csrfErrorSuccess.php b/apps/pc_backend/modules/default/templates/csrfErrorSuccess.php | |
new file mode 100644 | |
index 0000000..20bc4b7 | |
--- /dev/null | |
+++ b/apps/pc_backend/modules/default/templates/csrfErrorSuccess.php | |
@@ -0,0 +1 @@ | |
+<?php echo __('CSRF attack detected.'); ?> | |
diff --git a/apps/pc_backend/modules/design/actions/actions.class.php b/apps/pc_backend/modules/design/actions/actions.class.php | |
index 733ed1a..2066e28 100644 | |
--- a/apps/pc_backend/modules/design/actions/actions.class.php | |
+++ b/apps/pc_backend/modules/design/actions/actions.class.php | |
@@ -381,13 +381,6 @@ class designActions extends sfActions | |
$this->form->save(); | |
$this->redirect('design/banner'); | |
} | |
- if (!isset($params['file'])) | |
- { | |
- $banner->setName($params['name']); | |
- $banner->setUrl($params['url']); | |
- $banner->save(); | |
- $this->redirect('design/banner'); | |
- } | |
} | |
} | |
@@ -406,6 +399,7 @@ class designActions extends sfActions | |
if ($request->isMethod(sfWebRequest::POST)) | |
{ | |
+ $request->checkCSRFProtection(); | |
$banner->delete(); | |
$this->redirect('design/banner'); | |
} | |
diff --git a/apps/pc_backend/modules/design/templates/bannerdeleteSuccess.php b/apps/pc_backend/modules/design/templates/bannerdeleteSuccess.php | |
index af2759e..86acd23 100644 | |
--- a/apps/pc_backend/modules/design/templates/bannerdeleteSuccess.php | |
+++ b/apps/pc_backend/modules/design/templates/bannerdeleteSuccess.php | |
@@ -2,8 +2,12 @@ | |
<?php include_partial('submenu'); ?> | |
<?php end_slot() ?> | |
+<?php $form = new sfForm() ?> | |
<h2><?php echo __('Delete a banner image') ?></h2> | |
<p><?php echo __('Delete truly this banner image?') ?></p> | |
<form action="" method="post"> | |
-<td colspan="2"><input type="submit" value="<?php echo __('Delete') ?>" /></td> | |
+<td colspan="2"> | |
+<input type="hidden" name="<?php echo $form->getCSRFFieldName() ?>" value="<?php echo $form->getCSRFToken() ?>" /> | |
+<input type="submit" value="<?php echo __('Delete') ?>" /> | |
+</td> | |
</form> | |
diff --git a/apps/pc_backend/modules/member/actions/actions.class.php b/apps/pc_backend/modules/member/actions/actions.class.php | |
index fadf249..15e2e13 100644 | |
--- a/apps/pc_backend/modules/member/actions/actions.class.php | |
+++ b/apps/pc_backend/modules/member/actions/actions.class.php | |
@@ -72,6 +72,7 @@ class memberActions extends sfActions | |
$this->form = new sfForm(); | |
if ($request->isMethod('post')) | |
{ | |
+ $request->checkCSRFProtection(); | |
$this->member->delete(); | |
$this->getUser()->setFlash('notice', '退会が完了しました'); | |
$this->redirect('member/list'); | |
diff --git a/apps/pc_backend/modules/navigation/actions/actions.class.php b/apps/pc_backend/modules/navigation/actions/actions.class.php | |
index 11a94ac..b8e2e6c 100644 | |
--- a/apps/pc_backend/modules/navigation/actions/actions.class.php | |
+++ b/apps/pc_backend/modules/navigation/actions/actions.class.php | |
@@ -36,6 +36,8 @@ class navigationActions extends sfActions | |
public function executeList(sfWebRequest $request) | |
{ | |
$this->list = array(); | |
+ $this->deleteForm = new sfForm(); | |
+ $this->sortForm = new sfForm(); | |
$types = Doctrine::getTable('Navigation')->getTypesByAppName($request->getParameter('app', 'pc')); | |
@@ -117,6 +119,8 @@ class navigationActions extends sfActions | |
{ | |
if ($request->isMethod(sfWebRequest::POST)) | |
{ | |
+ $request->checkCSRFProtection(); | |
+ | |
$model = Doctrine::getTable('Navigation')->find($request->getParameter('id')); | |
$this->forward404Unless($model); | |
$types = Doctrine::getTable('Navigation')->getTypesByAppName($request->getParameter('app', 'pc')); | |
@@ -140,6 +144,8 @@ class navigationActions extends sfActions | |
$this->forward404(); | |
} | |
+ $request->checkCSRFProtection(); | |
+ | |
$parameters = $request->getParameterHolder(); | |
$keys = $parameters->getNames(); | |
foreach ($keys as $key) | |
diff --git a/apps/pc_backend/modules/navigation/templates/listSuccess.php b/apps/pc_backend/modules/navigation/templates/listSuccess.php | |
index aadb66e..0973784 100644 | |
--- a/apps/pc_backend/modules/navigation/templates/listSuccess.php | |
+++ b/apps/pc_backend/modules/navigation/templates/listSuccess.php | |
@@ -39,7 +39,11 @@ | |
<?php else : ?> | |
<td><input type="submit" value="<?php echo __('Edit') ?>" /></td> | |
</form> | |
-<td><form action="<?php echo url_for('navigation/delete?app='.$sf_request->getParameter('app', 'pc').'&id='.$form->getObject()->getId()) ?>" method="post" /><input type="submit" value="<?php echo __('Delete') ?>" /></form></td> | |
+<td> | |
+<form action="<?php echo url_for('navigation/delete?app='.$sf_request->getParameter('app', 'pc').'&id='.$form->getObject()->getId()) ?>" method="post"> | |
+<?php echo $deleteForm ?> | |
+<input type="submit" value="<?php echo __('Delete') ?>" /> | |
+</td> | |
<?php endif; ?> | |
</tr> | |
</tbody> | |
@@ -49,7 +53,8 @@ | |
<?php echo sortable_element('type_'.str_replace(' ', '_', $type), array( | |
'tag' => 'tbody', | |
'only' => 'sortable', | |
- 'url' => 'navigation/sort' | |
+ 'url' => 'navigation/sort', | |
+ 'with' => 'Sortable.serialize("type_'.str_replace(' ', '_', $type).'")+"&'.urlencode($sortForm->getCSRFFieldName()).'='.urlencode($sortForm->getCSRFToken()).'"', | |
)) ?> | |
<?php endforeach; ?> | |
diff --git a/apps/pc_backend/modules/profile/actions/actions.class.php b/apps/pc_backend/modules/profile/actions/actions.class.php | |
index de2bd45..f545849 100644 | |
--- a/apps/pc_backend/modules/profile/actions/actions.class.php | |
+++ b/apps/pc_backend/modules/profile/actions/actions.class.php | |
@@ -50,6 +50,8 @@ class profileActions extends sfActions | |
$this->option_form[$profileId][$profileOptionId]->bind($parameter); | |
} | |
} | |
+ | |
+ $this->tokenForm = new sfForm(); | |
} | |
/** | |
@@ -141,7 +143,9 @@ class profileActions extends sfActions | |
$this->profile = Doctrine::getTable('Profile')->find($request->getParameter('id')); | |
$this->forward404Unless($this->profile); | |
- if ($request->isMethod('post')) { | |
+ if ($request->isMethod('post')) | |
+ { | |
+ $request->checkCSRFProtection(); | |
$this->profile->delete(); | |
$this->redirect('profile/list'); | |
} | |
@@ -157,7 +161,9 @@ class profileActions extends sfActions | |
$this->profileOption = Doctrine::getTable('ProfileOption')->find($request->getParameter('id')); | |
$this->forward404Unless($this->profileOption); | |
- if ($request->isMethod('post')) { | |
+ if ($request->isMethod('post')) | |
+ { | |
+ $request->checkCSRFProtection(); | |
$this->profileOption->delete(); | |
} | |
$this->redirect('profile/list'); | |
@@ -172,6 +178,7 @@ class profileActions extends sfActions | |
{ | |
if ($request->isXmlHttpRequest()) | |
{ | |
+ $request->checkCSRFProtection(); | |
$order = $request->getParameter('profiles'); | |
for ($i = 0; $i < count($order); $i++) | |
{ | |
@@ -195,6 +202,7 @@ class profileActions extends sfActions | |
{ | |
if ($request->isXmlHttpRequest()) | |
{ | |
+ $request->checkCSRFProtection(); | |
$parameters = $request->getParameterHolder(); | |
$keys = $parameters->getNames(); | |
foreach ($keys as $key) | |
diff --git a/apps/pc_backend/modules/profile/templates/deleteSuccess.php b/apps/pc_backend/modules/profile/templates/deleteSuccess.php | |
index 9771339..e4ba40f 100644 | |
--- a/apps/pc_backend/modules/profile/templates/deleteSuccess.php | |
+++ b/apps/pc_backend/modules/profile/templates/deleteSuccess.php | |
@@ -1,6 +1,7 @@ | |
-<h2><?php echo __('Delete profile entry')?></h2> | |
-<p><?php echo __('Do you want to delete this anyway?')?></p> | |
-<p><?php echo __('※All the member\'s data in this entry will be lost.')?></p> | |
-<form action="<?php echo url_for('profile/delete?id=' . $profile->getId()) ?>" method="post"> | |
-<input type="submit" value=<?php echo __('Delete')?> /> | |
+<h2><?php echo __('Delete profile entry') ?></h2> | |
+<p><?php echo __('Do you want to delete this anyway?') ?></p> | |
+<p><?php echo __('※All the member\'s data in this entry will be lost.') ?></p> | |
+<form action="<?php echo url_for('profile/delete?id='.$profile->getId()) ?>" method="post"> | |
+<?php $formCSRF = new sfForm(); ?><input type="hidden" name="<?php echo $formCSRF->getCSRFFieldName() ?>" value="<?php echo $formCSRF->getCSRFToken() ?>" /> | |
+<input type="submit" value="<?php echo __('Delete')?>" /> | |
</form> | |
diff --git a/apps/pc_backend/modules/profile/templates/listSuccess.php b/apps/pc_backend/modules/profile/templates/listSuccess.php | |
index 330203d..b637f7f 100644 | |
--- a/apps/pc_backend/modules/profile/templates/listSuccess.php | |
+++ b/apps/pc_backend/modules/profile/templates/listSuccess.php | |
@@ -52,8 +52,9 @@ | |
<?php endforeach; ?> | |
</table> | |
<?php echo sortable_element('profiles',array( | |
- 'tag' => 'tbody', | |
- 'url' => 'profile/sortProfile' | |
+ 'tag' => 'tbody', | |
+ 'url' => 'profile/sortProfile', | |
+ 'with' => 'Sortable.serialize("profiles")+"&'.urlencode($tokenForm->getCSRFFieldName()).'='.urlencode($tokenForm->getCSRFToken()).'"' | |
)) ?> | |
<h3><?php echo __('Option list')?></h3> | |
@@ -78,33 +79,34 @@ | |
<tbody> | |
<?php endif; ?> | |
<tr> | |
-<form action="<?php echo url_for('profile/editOption?id=' . $form->getObject()->getId()) ?>" method="post"> | |
+<form action="<?php echo url_for('profile/editOption?id='.$form->getObject()->getId()) ?>" method="post"> | |
<td><?php echo ($form->getObject()->isNew() ? '-' : $form->getObject()->getId()) ?></td> | |
<?php foreach ($languages as $language): ?> | |
<td> | |
-<?php echo $form[$language]['value']->renderError() ?> | |
-<?php echo $form[$language]['value']->render() ?> | |
+<?php echo $form[$language]['value']->renderError(), "\n" ?> | |
+<?php echo $form[$language]['value']->render(), "\n" ?> | |
</td> | |
<?php endforeach; ?> | |
-<?php if ($form->getObject()->isNew()) : ?> | |
-<td colspan="2"> | |
-<?php echo $form->renderHiddenFields() ?> | |
-<input type="submit" value="<?php echo __('Add new option')?>" /> | |
-</td> | |
-</form> | |
-<?php else : ?> | |
+<?php if (!$form->getObject()->isNew()): ?> | |
<td> | |
-<?php echo $form->renderHiddenFields() ?> | |
+<?php echo $form->renderHiddenFields(), "\n" ?> | |
<input type="submit" value="<?php echo __('Save')?>" /> | |
</td> | |
</form> | |
<td> | |
-<form action="<?php echo url_for('profile/deleteOption?id=' . $form->getObject()->getId()) ?>" method="post"> | |
+<form action="<?php echo url_for('profile/deleteOption?id='.$form->getObject()->getId()) ?>" method="post"> | |
<?php echo $form['id']->render(), "\n" ?> | |
<?php echo $form['profile_id']->render(), "\n" ?> | |
+<?php $formCSRF = new sfForm(); ?><input type="hidden" name="<?php echo $formCSRF->getCSRFFieldName() ?>" value="<?php echo $formCSRF->getCSRFToken() ?>" /> | |
<input type="submit" value="<?php echo __('Delete') ?>" /> | |
</form> | |
</td> | |
+<?php else: ?> | |
+<td colspan="2"> | |
+<?php echo $form->renderHiddenFields() ?> | |
+<input type="submit" value="<?php echo __('Add new option')?>" /> | |
+</td> | |
+</form> | |
<?php endif; ?> | |
</tr> | |
</tbody> | |
@@ -113,7 +115,8 @@ | |
<?php echo sortable_element('profile_options_'.$value->getId(),array( | |
'tag' => 'tbody', | |
'only' => 'sortable', | |
- 'url' => 'profile/sortProfileOption' | |
+ 'url' => 'profile/sortProfileOption', | |
+ 'with' => 'Sortable.serialize("profile_options_'.$value->getId().'")+"&'.urlencode($tokenForm->getCSRFFieldName()).'='.urlencode($tokenForm->getCSRFToken()).'"' | |
)) ?> | |
<?php endif; ?> | |
<?php endforeach; ?> | |
diff --git a/apps/pc_backend/modules/sns/actions/actions.class.php b/apps/pc_backend/modules/sns/actions/actions.class.php | |
index 980c521..dcb523d 100644 | |
--- a/apps/pc_backend/modules/sns/actions/actions.class.php | |
+++ b/apps/pc_backend/modules/sns/actions/actions.class.php | |
@@ -112,6 +112,7 @@ class snsActions extends sfActions | |
public function executeRichTextarea(sfWebRequest $request) | |
{ | |
+ $this->sortForm = new sfForm(); | |
$this->configForm = new opRichTextareaOpenPNEConfigForm(); | |
$this->buttonConfigForm = new opRichTextareaOpenPNEButtonConfigForm(); | |
$this->buttonConfig = opWidgetFormRichTextareaOpenPNE::getAllButtons(); | |
@@ -131,6 +132,8 @@ class snsActions extends sfActions | |
{ | |
if ($request->isXmlHttpRequest()) | |
{ | |
+ $request->checkCSRFProtection(); | |
+ | |
$buttons = $request->getParameter('button'); | |
Doctrine::getTable('SnsConfig')->set('richtextarea_buttons_sort_order', serialize($buttons)); | |
} | |
diff --git a/apps/pc_backend/modules/sns/templates/richTextareaSuccess.php b/apps/pc_backend/modules/sns/templates/richTextareaSuccess.php | |
index 1167358..fcd91d2 100644 | |
--- a/apps/pc_backend/modules/sns/templates/richTextareaSuccess.php | |
+++ b/apps/pc_backend/modules/sns/templates/richTextareaSuccess.php | |
@@ -38,5 +38,6 @@ | |
'tag' => 'tbody', | |
'only' => 'sortable', | |
'format' => '/^button_(.*)$/', | |
- 'url' => 'sns/changeRichTextareaButtonOrder' | |
+ 'url' => 'sns/changeRichTextareaButtonOrder', | |
+ 'with' => 'Sortable.serialize("button")+"&'.urlencode($sortForm->getCSRFFieldName()).'='.urlencode($sortForm->getCSRFToken()).'"', | |
)) ?> | |
diff --git a/apps/pc_frontend/modules/community/templates/deleteSuccess.php b/apps/pc_frontend/modules/community/templates/deleteSuccess.php | |
index 1e92533..6aa3e3d 100644 | |
--- a/apps/pc_frontend/modules/community/templates/deleteSuccess.php | |
+++ b/apps/pc_frontend/modules/community/templates/deleteSuccess.php | |
@@ -1,7 +1,9 @@ | |
<?php | |
+$form = new sfForm(); | |
op_include_parts('yesNo', 'deleteConfirmForm', array( | |
'title' => __('Do you delete this %community%?'), | |
- 'yes_form' => '<input type="hidden" name="is_delete">', | |
+ 'yes_form' => '<input type="hidden" name="is_delete"/>' | |
+ . '<input type="hidden" name="'.$form->getCSRFFieldName().'" value="'.$form->getCSRFToken().'"/>', | |
'button' => __('Delete'), | |
)) | |
?> | |
diff --git a/apps/pc_frontend/modules/googlemaps/actions/actions.class.php b/apps/pc_frontend/modules/googlemaps/actions/actions.class.php | |
index 911c6a2..86378c7 100644 | |
--- a/apps/pc_frontend/modules/googlemaps/actions/actions.class.php | |
+++ b/apps/pc_frontend/modules/googlemaps/actions/actions.class.php | |
@@ -17,11 +17,6 @@ class googlemapsActions extends sfActions | |
*/ | |
public function executeIndex(sfWebRequest $request) | |
{ | |
- $this->x = $request->getParameter('x'); | |
- $this->y = $request->getParameter('y'); | |
- $this->z = $request->getParameter('z'); | |
- $this->q = $request->getParameter('q'); | |
- | |
$this->mapType = 'G_NORMAL_MAP'; | |
switch ($request->getParameter('t')) | |
{ | |
diff --git a/apps/pc_frontend/modules/googlemaps/templates/indexSuccess.php b/apps/pc_frontend/modules/googlemaps/templates/indexSuccess.php | |
index 3faf61b..558334b 100644 | |
--- a/apps/pc_frontend/modules/googlemaps/templates/indexSuccess.php | |
+++ b/apps/pc_frontend/modules/googlemaps/templates/indexSuccess.php | |
@@ -11,16 +11,34 @@ | |
<?php use_javascript('http://maps.google.co.jp/maps?file=api&v=2.x&key='.$op_config['google_maps_api_key']) ?> | |
<?php | |
$googlemaps_script = <<<EOM | |
+// parse request parameters | |
+var request = { | |
+ x: "", y: "", z: "", q: "" | |
+}; | |
+var params = window.location.search.substr(1).split('&'); | |
+for (var i = 0; i < params.length; i++) { | |
+ var parts = params[i].split('='); | |
+ | |
+ var n = parts[0]; | |
+ var v = decodeURIComponent(parts[1]); | |
+ if ("z" == n) | |
+ { | |
+ v = parseInt(v); | |
+ } | |
+ request[n] = v; | |
+} | |
+var MapType = %s; // It is not user-inputed values | |
+ | |
var gls; | |
var gMap; | |
function OnLocalSearch() { | |
if (!gls.results) return; | |
var first = gls.results[0]; | |
var point = new GLatLng(parseFloat(first.lat), parseFloat(first.lng)); | |
- var zoom = (%s); | |
+ var zoom = request.z; | |
gMap.addControl(new GSmallMapControl()); | |
gMap.addControl(new GMapTypeControl()); | |
- gMap.setMapType((%s)); | |
+ gMap.setMapType(MapType); | |
gMap.setCenter(point, zoom); | |
var marker = new GMarker(point); | |
gMap.addOverlay(marker); | |
@@ -28,7 +46,7 @@ function OnLocalSearch() { | |
} | |
function load() { | |
if (GBrowserIsCompatible()) { | |
- if (((%s) == 0) && ((%s) == 0)){ | |
+ if ((request.x == 0) && (request.y == 0)){ | |
gMap = new GMap2(document.getElementById('map')); | |
gMap.addControl(new GSmallMapControl()); | |
gMap.addControl(new GMapTypeControl()); | |
@@ -36,16 +54,16 @@ function load() { | |
gls = new GlocalSearch(); | |
gls.setCenterPoint(gMap); | |
gls.setSearchCompleteCallback(null, OnLocalSearch); | |
- var q = '(%s)'; | |
+ var q = request.q; | |
gls.execute(q); | |
} else { | |
- var point = new GLatLng((%s), (%s)); | |
- var zoom = (%s); | |
+ var point = new GLatLng(request.x, request.y); | |
+ var zoom = request.z; | |
gMap = new GMap2(document.getElementById('map')); | |
gMap.addControl(new GSmallMapControl()); | |
gMap.addControl(new GMapTypeControl()); | |
gMap.setCenter(point, zoom); | |
- gMap.setMapType((%s)); | |
+ gMap.setMapType(MapType); | |
var marker = new GMarker(point); | |
gMap.addOverlay(marker); | |
geocoder = new GClientGeocoder(); | |
@@ -53,7 +71,7 @@ function load() { | |
} | |
} | |
EOM; | |
-echo javascript_tag(sprintf($googlemaps_script, $z, $mapType, $x, $y, $q, $x, $y, $z, $mapType)); ?> | |
+echo javascript_tag(sprintf($googlemaps_script, $mapType)); ?> | |
<?php endif; ?> | |
<?php include_stylesheets() ?> | |
<?php include_javascripts() ?> | |
diff --git a/apps/pc_frontend/templates/_partsMemberImagesBox.php b/apps/pc_frontend/templates/_partsMemberImagesBox.php | |
index e172966..f476bcd 100644 | |
--- a/apps/pc_frontend/templates/_partsMemberImagesBox.php | |
+++ b/apps/pc_frontend/templates/_partsMemberImagesBox.php | |
@@ -1,5 +1,7 @@ | |
<table> | |
<tr> | |
+<?php $form = new sfForm() ?> | |
+<?php $csrfToken = '&'.$form->getCSRFFieldName().'='.$form->getCSRFToken() ?> | |
<?php for ($i = 0; $i < 3; $i++) : ?> | |
<td> | |
<?php if (isset($options['images'][$i])) : ?> | |
@@ -7,11 +9,11 @@ | |
<?php echo image_tag_sf_image($image->getFile(), array('size' => '180x180')) ?><br /> | |
<?php if (isset($options['form'])) : ?> | |
[ | |
-<?php echo link_to(__('Delete'), 'member/deleteImage?member_image_id='.$image->getId()) ?> | | |
+<?php echo link_to(__('Delete'), 'member/deleteImage?member_image_id='.$image->getId().$csrfToken) ?> | | |
<?php if ($image->getIsPrimary()) : ?> | |
<?php echo(__('Main Photo')) ?> | |
<?php else: ?> | |
-<?php echo link_to(__('Main Photo'), 'member/changeMainImage?member_image_id='.$image->getId()) ?> | |
+<?php echo link_to(__('Main Photo'), 'member/changeMainImage?member_image_id='.$image->getId().$csrfToken) ?> | |
<?php endif; ?> | |
] | |
<?php endif; ?> | |
diff --git a/data/version.php b/data/version.php | |
index 5466766..f50847e 100644 | |
--- a/data/version.php | |
+++ b/data/version.php | |
@@ -10,5 +10,5 @@ | |
if (!defined('OPENPNE_VERSION')) | |
{ | |
- define('OPENPNE_VERSION', '3.2.7'); | |
+ define('OPENPNE_VERSION', '3.2.7.1'); | |
} | |
diff --git a/lib/action/sfOpenPNECommunityAction.class.php b/lib/action/sfOpenPNECommunityAction.class.php | |
index 0e07fce..f2efc0d 100644 | |
--- a/lib/action/sfOpenPNECommunityAction.class.php | |
+++ b/lib/action/sfOpenPNECommunityAction.class.php | |
@@ -140,6 +140,7 @@ abstract class sfOpenPNECommunityAction extends sfActions | |
{ | |
if($request->hasParameter('is_delete')) | |
{ | |
+ $request->checkCSRFProtection(); | |
$community = Doctrine::getTable('Community')->find($this->id); | |
if ($community) | |
{ | |
diff --git a/lib/action/sfOpenPNEMemberAction.class.php b/lib/action/sfOpenPNEMemberAction.class.php | |
index 3c660d5..60e4b65 100644 | |
--- a/lib/action/sfOpenPNEMemberAction.class.php | |
+++ b/lib/action/sfOpenPNEMemberAction.class.php | |
@@ -369,6 +369,7 @@ abstract class sfOpenPNEMemberAction extends sfActions | |
public function executeDeleteImage($request) | |
{ | |
+ $request->checkCSRFProtection(); | |
$image = Doctrine::getTable('MemberImage')->find($request->getParameter('member_image_id')); | |
$this->forward404Unless($image); | |
$this->forward404Unless($image->getMemberId() == $this->getUser()->getMemberId()); | |
@@ -380,6 +381,7 @@ abstract class sfOpenPNEMemberAction extends sfActions | |
public function executeChangeMainImage($request) | |
{ | |
+ $request->checkCSRFProtection(); | |
$image = Doctrine::getTable('MemberImage')->find($request->getParameter('member_image_id')); | |
$this->forward404Unless($image); | |
$this->forward404Unless($image->getMemberId() == $this->getUser()->getMemberId()); | |
diff --git a/lib/form/doctrine/BannerImageForm.class.php b/lib/form/doctrine/BannerImageForm.class.php | |
index 0853d32..ae64c77 100644 | |
--- a/lib/form/doctrine/BannerImageForm.class.php | |
+++ b/lib/form/doctrine/BannerImageForm.class.php | |
@@ -24,7 +24,7 @@ class BannerImageForm extends BaseBannerImageForm | |
$this->setWidget('url', new sfWidgetFormInput(array(), array('size' => 40))); | |
$this->setWidget('name', new sfWidgetFormInput()); | |
$this->setValidators(array( | |
- 'file' => new opValidatorImageFile(), | |
+ 'file' => new opValidatorImageFile(array('required' => $this->isNew())), | |
'url' => new sfValidatorPass(), | |
'name' => new sfValidatorPass(), | |
)); | |
@@ -38,10 +38,6 @@ class BannerImageForm extends BaseBannerImageForm | |
public function save() | |
{ | |
- $file = new File(); | |
- $file->setFromValidatedFile($this->getValue('file')); | |
- $file->setName('b_'.$file->getName()); | |
- | |
if ($this->isNew()) | |
{ | |
$bannerImage = new BannerImage(); | |
@@ -50,7 +46,15 @@ class BannerImageForm extends BaseBannerImageForm | |
{ | |
$bannerImage = $this->getObject(); | |
} | |
- $bannerImage->setFile($file); | |
+ | |
+ if ($this->getValue('file')) | |
+ { | |
+ $file = new File(); | |
+ $file->setFromValidatedFile($this->getValue('file')); | |
+ $file->setName('b_'.$file->getName()); | |
+ $bannerImage->setFile($file); | |
+ } | |
+ | |
$bannerImage->setUrl($this->getValue('url')); | |
$bannerImage->setName($this->getValue('name')); | |
diff --git a/lib/widget/opWidgetFormRichTextareaOpenPNE.class.php b/lib/widget/opWidgetFormRichTextareaOpenPNE.class.php | |
index 5baaee7..edecc8f 100644 | |
--- a/lib/widget/opWidgetFormRichTextareaOpenPNE.class.php | |
+++ b/lib/widget/opWidgetFormRichTextareaOpenPNE.class.php | |
@@ -406,14 +406,20 @@ class opWidgetFormRichTextareaOpenPNE extends opWidgetFormRichTextarea | |
static public function opColorToHtml($isEndtag, $tagname, $attributes, $isUseStylesheet) | |
{ | |
$options = array(); | |
+ $code = isset($attributes['code']) ? $attributes['code'] : ''; | |
+ if (!($code && preg_match('/^#[0-9a-fA-F]{6}$/', $code))) | |
+ { | |
+ $code = ''; | |
+ } | |
+ | |
if ($isUseStylesheet) | |
{ | |
if ($isEndtag) { | |
return '</span>'; | |
} | |
$options['class'] = strtr($tagname, ':', '_'); | |
- if (isset($attributes['code'])) { | |
- $options['style'] = 'color:'.$attributes['code']; | |
+ if ($code) { | |
+ $options['style'] = 'color:'.$code; | |
} | |
return tag('span', $options, true); | |
@@ -424,8 +430,8 @@ class opWidgetFormRichTextareaOpenPNE extends opWidgetFormRichTextarea | |
{ | |
return '</font>'; | |
} | |
- if (isset($attributes['code'])) { | |
- $options['color'] = $attributes['code']; | |
+ if ($code) { | |
+ $options['color'] = $code; | |
} | |
return tag('font', $options, true); | |
@@ -435,6 +441,13 @@ class opWidgetFormRichTextareaOpenPNE extends opWidgetFormRichTextarea | |
static public function opFontToHtml($isEndtag, $tagname, $attributes, $isUseStylesheet) | |
{ | |
$options = array(); | |
+ | |
+ $color = isset($attributes['color']) ? $attributes['color'] : ''; | |
+ if (!($color && preg_match('/^#[0-9a-fA-F]{6}$/', $color))) | |
+ { | |
+ $color = ''; | |
+ } | |
+ | |
if ($isUseStylesheet) | |
{ | |
if ($isEndtag) { | |
@@ -442,8 +455,8 @@ class opWidgetFormRichTextareaOpenPNE extends opWidgetFormRichTextarea | |
} | |
$options['class'] = 'op_font'; | |
$options['style'] = ''; | |
- if (isset($attributes['color'])) { | |
- $options['style'] .= 'color:'.$attributes['color'].';'; | |
+ if ($color) { | |
+ $options['style'] .= 'color:'.$color.';'; | |
} | |
$size = isset($attributes['size']) ? (int)$attributes['size'] : 0; | |
$fontSizeMap = array( | |
@@ -456,7 +469,6 @@ class opWidgetFormRichTextareaOpenPNE extends opWidgetFormRichTextarea | |
7 => 'xx-large' | |
); | |
if (isset($fontSizeMap[$size])) { | |
- | |
$options['style'] .= 'font-size:'.$fontSizeMap[$size]; | |
} | |
@@ -468,8 +480,8 @@ class opWidgetFormRichTextareaOpenPNE extends opWidgetFormRichTextarea | |
{ | |
return '</font>'; | |
} | |
- if (isset($attributes['color'])) { | |
- $options['color'] = $attributes['color']; | |
+ if ($color) { | |
+ $options['color'] = $color; | |
} | |
$size = isset($attributes['size']) ? (int)$attributes['size'] : 0; | |
if ($size >= 1 && $size <= 7) | |
diff --git a/web/js/tiny_mce/plugins/openpne/editor_plugin.js b/web/js/tiny_mce/plugins/openpne/editor_plugin.js | |
index de83742..8014cc8 100644 | |
--- a/web/js/tiny_mce/plugins/openpne/editor_plugin.js | |
+++ b/web/js/tiny_mce/plugins/openpne/editor_plugin.js | |
@@ -51,9 +51,9 @@ return result;};rep(/</gi,"<");rep(/>/gi,">");rep(/\n/gi,"<br />");rep(/&l | |
if(isEndTag){return"</"+tagname+">";} | |
if(org_tagname=="font"){if(attributes["size"]){if(fontSizeMap[attributes["size"]-1]){fontsize=fontSizeMap[attributes["size"]-1];} | |
style+='font-size:'+fontsize+';';} | |
-if(attributes["color"]){style+='color:'+attributes["color"]+';';} | |
+if(attributes["color"]&&attributes["color"].match(/^#[0-9a-fA-F]{6}$/)){style+='color:'+attributes["color"]+';';} | |
opt=' style="'+style+'"';} | |
-if(org_tagname=="color"&&attributes["code"]){opt=' style="color:'+attributes["code"]+';"';} | |
+if(org_tagname=="color"&&attributes["code"]&&attributes["code"].match(/^#[0-9a-fA-F]{6}$/)){opt=' style="color:'+attributes["code"]+';"';} | |
if(org_tagname=="large"){opt=' style="font-size:large"';} | |
if(org_tagname=="small"){opt=' style="font-size:xx-small"';} | |
return"<"+tagname+opt+">";});return s;}});tinymce.PluginManager.add('openpne',tinymce.plugins.OpenPNEPlugin);})(); | |
\ No newline at end of file | |
diff --git a/web/js/tiny_mce/plugins/openpne/editor_plugin.js.src b/web/js/tiny_mce/plugins/openpne/editor_plugin.js.src | |
index 5a08ea4..ec3dfa0 100644 | |
--- a/web/js/tiny_mce/plugins/openpne/editor_plugin.js.src | |
+++ b/web/js/tiny_mce/plugins/openpne/editor_plugin.js.src | |
@@ -590,14 +590,14 @@ | |
style += 'font-size:' + fontsize + ';'; | |
} | |
- if (attributes["color"]) { | |
+ if (attributes["color"] && attributes["color"].match(/^#[0-9a-fA-F]{6}$/)) { | |
style += 'color:' + attributes["color"] + ';'; | |
} | |
opt = ' style="' + style + '"'; | |
} | |
// old style | |
- if (org_tagname == "color" && attributes["code"]) { | |
+ if (org_tagname == "color" && attributes["code"] && attributes["code"].match(/^#[0-9a-fA-F]{6}$/)) { | |
opt = ' style="color:' + attributes["code"] + ';"'; | |
} |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
diff --git a/apps/mobile_frontend/modules/community/templates/deleteSuccess.php b/apps/mobile_frontend/modules/community/templates/deleteSuccess.php | |
index 016760a..fe94160 100644 | |
--- a/apps/mobile_frontend/modules/community/templates/deleteSuccess.php | |
+++ b/apps/mobile_frontend/modules/community/templates/deleteSuccess.php | |
@@ -1,8 +1,10 @@ | |
<?php op_mobile_page_title(__('Delete this %community%'), $community->getName()) ?> | |
<?php | |
+$form = new BaseForm(); | |
op_include_parts('yesNo', 'deleteConfirmForm', array( | |
'body' => __('Do you delete this %community%?'), | |
- 'yes_form' => '<input type="hidden" name="is_delete">', | |
+ 'yes_form' => '<input type="hidden" name="is_delete">' | |
+ . '<input type="hidden" name="'.$form->getCSRFFieldName().'" value="'.$form->getCSRFToken().'">', | |
'button' => __('Delete'), | |
)) | |
?> | |
diff --git a/apps/mobile_frontend/modules/member/templates/configImageSuccess.php b/apps/mobile_frontend/modules/member/templates/configImageSuccess.php | |
index bf4e27a..837010d 100644 | |
--- a/apps/mobile_frontend/modules/member/templates/configImageSuccess.php | |
+++ b/apps/mobile_frontend/modules/member/templates/configImageSuccess.php | |
@@ -3,6 +3,8 @@ | |
<?php $_member = $sf_user->getMember() ?> | |
<?php $images = $_member->getMemberImage() ?> | |
<?php if ($images->count()): ?> | |
+<?php $form = new sfForm() ?> | |
+<?php $csrfToken = '&'.$form->getCSRFFieldName().'='.$form->getCSRFToken() ?> | |
<?php foreach ($images as $image) : ?> | |
<?php echo image_tag_sf_image($image->getFile(), array('size' => '120x120', 'format' => 'jpg')) ?><br> | |
<?php echo sprintf('[%s]',link_to(__('Expansion'), sf_image_path($image->getFile(), array('size' => '320x320', 'format' => 'jpg')))) ?><br> | |
@@ -13,7 +15,7 @@ if ($image->getIsPrimary()) | |
} | |
else | |
{ | |
- $main = link_to(__('Main Photo'), 'member/changeMainImage?member_image_id='.$image->getId()); | |
+ $main = link_to(__('Main Photo'), 'member/changeMainImage?member_image_id='.$image->getId().$csrfToken); | |
} | |
?> | |
<?php echo sprintf('[%s|%s]', link_to(__('Delete'), 'member/deleteImage?member_image_id='.$image->getId()), $main) ?> | |
diff --git a/apps/pc_backend/modules/community/actions/actions.class.php b/apps/pc_backend/modules/community/actions/actions.class.php | |
index eca1a63..4d69acc 100644 | |
--- a/apps/pc_backend/modules/community/actions/actions.class.php | |
+++ b/apps/pc_backend/modules/community/actions/actions.class.php | |
@@ -59,6 +59,7 @@ class communityActions extends sfActions | |
if ($request->isMethod(sfRequest::POST)) | |
{ | |
+ $request->checkCSRFProtection(); | |
$this->community->delete(); | |
$this->getUser()->setFlash('notice', 'Deleted.'); | |
$this->redirect('community/list'); | |
@@ -96,6 +97,8 @@ class communityActions extends sfActions | |
*/ | |
public function executeRemoveDefaultCommunity(sfWebRequest $request) | |
{ | |
+ $request->checkCSRFProtection(); | |
+ | |
$communityConfig = Doctrine::getTable('CommunityConfig')->retrieveByNameAndCommunityId('is_default', $request->getParameter('id')); | |
$this->forward404Unless($communityConfig); | |
diff --git a/apps/pc_backend/modules/community/templates/defaultCommunityListSuccess.php b/apps/pc_backend/modules/community/templates/defaultCommunityListSuccess.php | |
index 2a67979..b375ec9 100644 | |
--- a/apps/pc_backend/modules/community/templates/defaultCommunityListSuccess.php | |
+++ b/apps/pc_backend/modules/community/templates/defaultCommunityListSuccess.php | |
@@ -22,12 +22,16 @@ | |
<th>管理者名</th> | |
<th>操作</th> | |
</tr> | |
+<?php | |
+$form = new BaseForm(); | |
+$csrfToken = '&'.$form->getCSRFFieldName().'='.$form->getCSRFToken(); | |
+?> | |
<?php foreach ($communities as $community): ?> | |
<tr> | |
<td><?php echo $community->getId() ?></td> | |
<td><?php echo $community->getName() ?></td> | |
<td><?php echo $community->getAdminMember()->getName() ?></td> | |
-<td><?php echo link_to('削除', 'community/removeDefaultCommunity?id='.$community->getId()) ?></td> | |
+<td><?php echo link_to('削除', 'community/removeDefaultCommunity?id='.$community->getId().$csrfToken) ?></td> | |
</tr> | |
<?php endforeach; ?> | |
</table> | |
diff --git a/apps/pc_backend/modules/community/templates/deleteSuccess.php b/apps/pc_backend/modules/community/templates/deleteSuccess.php | |
index 4db0a16..aaad11d 100644 | |
--- a/apps/pc_backend/modules/community/templates/deleteSuccess.php | |
+++ b/apps/pc_backend/modules/community/templates/deleteSuccess.php | |
@@ -6,10 +6,15 @@ | |
<p><?php echo __('本当にこのコミュニティを削除してもよろしいですか?') ?></p> | |
+<?php | |
+$form = new BaseForm(); | |
+$csrfToken = '<input type="hidden" name="'.$form->getCSRFFieldName().'" value="'.$form->getCSRFToken().'"/>'; | |
+?> | |
+ | |
<form action="<?php url_for('community/delete?id='.$community->getId()) ?>" method="post"> | |
<?php include_partial('community/communityInfo', array( | |
'community' => $community, | |
- 'moreInfo' => array('<input type="submit" value="削除" />') | |
+ 'moreInfo' => array($csrfToken.'<input type="submit" value="削除" />') | |
)); ?> | |
</form> | |
diff --git a/apps/pc_backend/modules/default/actions/csrfErrorAction.class.php b/apps/pc_backend/modules/default/actions/csrfErrorAction.class.php | |
new file mode 100644 | |
index 0000000..73dc29b | |
--- /dev/null | |
+++ b/apps/pc_backend/modules/default/actions/csrfErrorAction.class.php | |
@@ -0,0 +1,23 @@ | |
+<?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. | |
+ */ | |
+ | |
+ /** | |
+ * csrfError action. | |
+ * | |
+ * @package OpenPNE | |
+ * @subpackage default | |
+ * @author Kousuke Ebihara <[email protected]> | |
+ */ | |
+class csrfErrorAction extends sfAction | |
+{ | |
+ public function execute($request) | |
+ { | |
+ } | |
+} | |
diff --git a/apps/pc_backend/modules/default/templates/csrfErrorSuccess.php b/apps/pc_backend/modules/default/templates/csrfErrorSuccess.php | |
new file mode 100644 | |
index 0000000..20bc4b7 | |
--- /dev/null | |
+++ b/apps/pc_backend/modules/default/templates/csrfErrorSuccess.php | |
@@ -0,0 +1 @@ | |
+<?php echo __('CSRF attack detected.'); ?> | |
diff --git a/apps/pc_backend/modules/design/actions/actions.class.php b/apps/pc_backend/modules/design/actions/actions.class.php | |
index be93882..1b63abb 100644 | |
--- a/apps/pc_backend/modules/design/actions/actions.class.php | |
+++ b/apps/pc_backend/modules/design/actions/actions.class.php | |
@@ -381,13 +381,6 @@ class designActions extends sfActions | |
$this->form->save(); | |
$this->redirect('design/banner'); | |
} | |
- if (!isset($params['file'])) | |
- { | |
- $banner->setName($params['name']); | |
- $banner->setUrl($params['url']); | |
- $banner->save(); | |
- $this->redirect('design/banner'); | |
- } | |
} | |
} | |
@@ -406,6 +399,7 @@ class designActions extends sfActions | |
if ($request->isMethod(sfWebRequest::POST)) | |
{ | |
+ $request->checkCSRFProtection(); | |
$banner->delete(); | |
$this->redirect('design/banner'); | |
} | |
diff --git a/apps/pc_backend/modules/design/templates/bannerdeleteSuccess.php b/apps/pc_backend/modules/design/templates/bannerdeleteSuccess.php | |
index af2759e..324fb51 100644 | |
--- a/apps/pc_backend/modules/design/templates/bannerdeleteSuccess.php | |
+++ b/apps/pc_backend/modules/design/templates/bannerdeleteSuccess.php | |
@@ -2,8 +2,12 @@ | |
<?php include_partial('submenu'); ?> | |
<?php end_slot() ?> | |
+<?php $form = new BaseForm() ?> | |
<h2><?php echo __('Delete a banner image') ?></h2> | |
<p><?php echo __('Delete truly this banner image?') ?></p> | |
<form action="" method="post"> | |
-<td colspan="2"><input type="submit" value="<?php echo __('Delete') ?>" /></td> | |
+<td colspan="2"> | |
+<input type="hidden" name="<?php echo $form->getCSRFFieldName() ?>" value="<?php echo $form->getCSRFToken() ?>" /> | |
+<input type="submit" value="<?php echo __('Delete') ?>" /> | |
+</td> | |
</form> | |
diff --git a/apps/pc_backend/modules/member/actions/actions.class.php b/apps/pc_backend/modules/member/actions/actions.class.php | |
index fadf249..15e2e13 100644 | |
--- a/apps/pc_backend/modules/member/actions/actions.class.php | |
+++ b/apps/pc_backend/modules/member/actions/actions.class.php | |
@@ -72,6 +72,7 @@ class memberActions extends sfActions | |
$this->form = new sfForm(); | |
if ($request->isMethod('post')) | |
{ | |
+ $request->checkCSRFProtection(); | |
$this->member->delete(); | |
$this->getUser()->setFlash('notice', '退会が完了しました'); | |
$this->redirect('member/list'); | |
diff --git a/apps/pc_backend/modules/navigation/actions/actions.class.php b/apps/pc_backend/modules/navigation/actions/actions.class.php | |
index 1204649..9e94220 100644 | |
--- a/apps/pc_backend/modules/navigation/actions/actions.class.php | |
+++ b/apps/pc_backend/modules/navigation/actions/actions.class.php | |
@@ -36,6 +36,8 @@ class navigationActions extends sfActions | |
public function executeList(sfWebRequest $request) | |
{ | |
$this->list = array(); | |
+ $this->deleteForm = new BaseForm(); | |
+ $this->sortForm = new BaseForm(); | |
$types = Doctrine::getTable('Navigation')->getTypesByAppName($request->getParameter('app', 'pc')); | |
@@ -95,6 +97,8 @@ class navigationActions extends sfActions | |
if ($request->isMethod(sfWebRequest::POST)) | |
{ | |
+ $request->checkCSRFProtection(); | |
+ | |
$model = Doctrine::getTable('Navigation')->find($request->getParameter('id')); | |
$this->forward404Unless($model); | |
$types = Doctrine::getTable('Navigation')->getTypesByAppName($app); | |
@@ -123,6 +127,8 @@ class navigationActions extends sfActions | |
$this->forward404(); | |
} | |
+ $request->checkCSRFProtection(); | |
+ | |
$parameters = $request->getParameterHolder(); | |
$keys = $parameters->getNames(); | |
foreach ($keys as $key) | |
diff --git a/apps/pc_backend/modules/navigation/templates/listSuccess.php b/apps/pc_backend/modules/navigation/templates/listSuccess.php | |
index d3114f7..201a1b4 100644 | |
--- a/apps/pc_backend/modules/navigation/templates/listSuccess.php | |
+++ b/apps/pc_backend/modules/navigation/templates/listSuccess.php | |
@@ -29,7 +29,11 @@ | |
<?php else : ?> | |
<td><input type="submit" value="<?php echo __('編集') ?>" /></td> | |
</form> | |
-<td><form action="<?php echo url_for('navigation/delete?app='.$sf_request->getParameter('app', 'pc').'&id='.$form->getObject()->getId()) ?>" method="post" /><input type="submit" value="<?php echo __('削除') ?>" /></form></td> | |
+<td> | |
+<form action="<?php echo url_for('navigation/delete?app='.$sf_request->getParameter('app', 'pc').'&id='.$form->getObject()->getId()) ?>" method="post"> | |
+<?php echo $deleteForm ?> | |
+<input type="submit" value="<?php echo __('削除') ?>" /> | |
+</td> | |
<?php endif; ?> | |
</tr> | |
</tbody> | |
@@ -39,7 +43,8 @@ | |
<?php echo sortable_element('type_'.str_replace(' ', '_', $type), array( | |
'tag' => 'tbody', | |
'only' => 'sortable', | |
- 'url' => 'navigation/sort' | |
+ 'url' => 'navigation/sort', | |
+ 'with' => 'Sortable.serialize("type_'.str_replace(' ', '_', $type).'")+"&'.urlencode($sortForm->getCSRFFieldName()).'='.urlencode($sortForm->getCSRFToken()).'"', | |
)) ?> | |
<?php endforeach; ?> | |
diff --git a/apps/pc_backend/modules/profile/actions/actions.class.php b/apps/pc_backend/modules/profile/actions/actions.class.php | |
index de2bd45..f1f0003 100644 | |
--- a/apps/pc_backend/modules/profile/actions/actions.class.php | |
+++ b/apps/pc_backend/modules/profile/actions/actions.class.php | |
@@ -50,6 +50,8 @@ class profileActions extends sfActions | |
$this->option_form[$profileId][$profileOptionId]->bind($parameter); | |
} | |
} | |
+ | |
+ $this->tokenForm = new BaseForm(); | |
} | |
/** | |
@@ -141,7 +143,9 @@ class profileActions extends sfActions | |
$this->profile = Doctrine::getTable('Profile')->find($request->getParameter('id')); | |
$this->forward404Unless($this->profile); | |
- if ($request->isMethod('post')) { | |
+ if ($request->isMethod('post')) | |
+ { | |
+ $request->checkCSRFProtection(); | |
$this->profile->delete(); | |
$this->redirect('profile/list'); | |
} | |
@@ -157,7 +161,9 @@ class profileActions extends sfActions | |
$this->profileOption = Doctrine::getTable('ProfileOption')->find($request->getParameter('id')); | |
$this->forward404Unless($this->profileOption); | |
- if ($request->isMethod('post')) { | |
+ if ($request->isMethod('post')) | |
+ { | |
+ $request->checkCSRFProtection(); | |
$this->profileOption->delete(); | |
} | |
$this->redirect('profile/list'); | |
@@ -172,6 +178,7 @@ class profileActions extends sfActions | |
{ | |
if ($request->isXmlHttpRequest()) | |
{ | |
+ $request->checkCSRFProtection(); | |
$order = $request->getParameter('profiles'); | |
for ($i = 0; $i < count($order); $i++) | |
{ | |
@@ -195,6 +202,7 @@ class profileActions extends sfActions | |
{ | |
if ($request->isXmlHttpRequest()) | |
{ | |
+ $request->checkCSRFProtection(); | |
$parameters = $request->getParameterHolder(); | |
$keys = $parameters->getNames(); | |
foreach ($keys as $key) | |
diff --git a/apps/pc_backend/modules/profile/templates/deleteSuccess.php b/apps/pc_backend/modules/profile/templates/deleteSuccess.php | |
index 94fd037..e10ec5e 100644 | |
--- a/apps/pc_backend/modules/profile/templates/deleteSuccess.php | |
+++ b/apps/pc_backend/modules/profile/templates/deleteSuccess.php | |
@@ -1,6 +1,7 @@ | |
<h2>プロフィール項目削除</h2> | |
<p>本当に削除してもよろしいですか?</p> | |
<p>※この項目に対するメンバーの入力値も失われます。</p> | |
-<form action="<?php echo url_for('profile/delete?id=' . $profile->getId()) ?>" method="post"> | |
+<form action="<?php echo url_for('profile/delete?id='.$profile->getId()) ?>" method="post"> | |
+<?php $formCSRF = new sfForm(); ?><input type="hidden" name="<?php echo $formCSRF->getCSRFFieldName() ?>" value="<?php echo $formCSRF->getCSRFToken() ?>" /> | |
<input type="submit" value="削除する" /> | |
</form> | |
diff --git a/apps/pc_backend/modules/profile/templates/listSuccess.php b/apps/pc_backend/modules/profile/templates/listSuccess.php | |
index 97fa7f1..bb53e3d 100644 | |
--- a/apps/pc_backend/modules/profile/templates/listSuccess.php | |
+++ b/apps/pc_backend/modules/profile/templates/listSuccess.php | |
@@ -52,8 +52,9 @@ | |
<?php endforeach; ?> | |
</table> | |
<?php echo sortable_element('profiles',array( | |
- 'tag' => 'tbody', | |
- 'url' => 'profile/sortProfile' | |
+ 'tag' => 'tbody', | |
+ 'url' => 'profile/sortProfile', | |
+ 'with' => 'Sortable.serialize("profiles")+"&'.urlencode($tokenForm->getCSRFFieldName()).'='.urlencode($tokenForm->getCSRFToken()).'"' | |
)) ?> | |
<h3>プロフィール選択肢一覧</h3> | |
@@ -74,32 +75,33 @@ | |
<?php else: ?> | |
<tbody> | |
<?php endif; ?> | |
-<form action="<?php echo url_for('profile/editOption?id=' . $form->getObject()->getId()) ?>" method="post"> | |
<tr> | |
+<form action="<?php echo url_for('profile/editOption?id='.$form->getObject()->getId()) ?>" method="post"> | |
<td><?php echo ($form->getObject()->isNew() ? '-' : $form->getObject()->getId()) ?></td> | |
<td> | |
-<?php echo $form['ja_JP']['value']->renderError() ?> | |
-<?php echo $form['ja_JP']['value']->render() ?> | |
+<?php echo $form['ja_JP']['value']->renderError(), "\n" ?> | |
+<?php echo $form['ja_JP']['value']->render(), "\n" ?> | |
</td> | |
-<?php if ($form->getObject()->isNew()) : ?> | |
-<td colspan="2"> | |
-<?php echo $form->renderHiddenFields() ?> | |
-<input type="submit" value="項目追加" /> | |
-</td> | |
-</form> | |
-<?php else : ?> | |
+<?php if (!$form->getObject()->isNew()): ?> | |
<td> | |
-<?php echo $form->renderHiddenFields() ?> | |
+<?php echo $form->renderHiddenFields(), "\n" ?> | |
<input type="submit" value="変更" /> | |
</td> | |
</form> | |
<td> | |
-<?php echo $form['id']->render() ?> | |
-<?php echo $form['profile_id']->render() ?> | |
-<form action="<?php echo url_for('profile/deleteOption?id=' . $form->getObject()->getId()) ?>" method="post"> | |
+<form action="<?php echo url_for('profile/deleteOption?id='.$form->getObject()->getId()) ?>" method="post"> | |
+<?php echo $form['id']->render(), "\n" ?> | |
+<?php echo $form['profile_id']->render(), "\n" ?> | |
+<?php $formCSRF = new sfForm(); ?><input type="hidden" name="<?php echo $formCSRF->getCSRFFieldName() ?>" value="<?php echo $formCSRF->getCSRFToken() ?>" /> | |
<input type="submit" value="削除" /> | |
</form> | |
</td> | |
+<?php else: ?> | |
+<td colspan="2"> | |
+<?php echo $form->renderHiddenFields() ?> | |
+<input type="submit" value="項目追加" /> | |
+</td> | |
+</form> | |
<?php endif; ?> | |
</tr> | |
</tbody> | |
@@ -108,7 +110,8 @@ | |
<?php echo sortable_element('profile_options_'.$value->getId(),array( | |
'tag' => 'tbody', | |
'only' => 'sortable', | |
- 'url' => 'profile/sortProfileOption' | |
+ 'url' => 'profile/sortProfileOption', | |
+ 'with' => 'Sortable.serialize("profile_options_'.$value->getId().'")+"&'.urlencode($tokenForm->getCSRFFieldName()).'='.urlencode($tokenForm->getCSRFToken()).'"' | |
)) ?> | |
<?php endif; ?> | |
<?php endforeach; ?> | |
diff --git a/apps/pc_backend/modules/sns/actions/actions.class.php b/apps/pc_backend/modules/sns/actions/actions.class.php | |
index b269176..13562c7 100644 | |
--- a/apps/pc_backend/modules/sns/actions/actions.class.php | |
+++ b/apps/pc_backend/modules/sns/actions/actions.class.php | |
@@ -115,6 +115,7 @@ class snsActions extends sfActions | |
public function executeRichTextarea(sfWebRequest $request) | |
{ | |
+ $this->sortForm = new BaseForm(); | |
$this->configForm = new opRichTextareaOpenPNEConfigForm(); | |
$this->buttonConfigForm = new opRichTextareaOpenPNEButtonConfigForm(); | |
$this->buttonConfig = opWidgetFormRichTextareaOpenPNE::getAllButtons(); | |
@@ -134,6 +135,8 @@ class snsActions extends sfActions | |
{ | |
if ($request->isXmlHttpRequest()) | |
{ | |
+ $request->checkCSRFProtection(); | |
+ | |
$buttons = $request->getParameter('button'); | |
Doctrine::getTable('SnsConfig')->set('richtextarea_buttons_sort_order', serialize($buttons)); | |
} | |
diff --git a/apps/pc_backend/modules/sns/templates/richTextareaSuccess.php b/apps/pc_backend/modules/sns/templates/richTextareaSuccess.php | |
index 1167358..fcd91d2 100644 | |
--- a/apps/pc_backend/modules/sns/templates/richTextareaSuccess.php | |
+++ b/apps/pc_backend/modules/sns/templates/richTextareaSuccess.php | |
@@ -38,5 +38,6 @@ | |
'tag' => 'tbody', | |
'only' => 'sortable', | |
'format' => '/^button_(.*)$/', | |
- 'url' => 'sns/changeRichTextareaButtonOrder' | |
+ 'url' => 'sns/changeRichTextareaButtonOrder', | |
+ 'with' => 'Sortable.serialize("button")+"&'.urlencode($sortForm->getCSRFFieldName()).'='.urlencode($sortForm->getCSRFToken()).'"', | |
)) ?> | |
diff --git a/apps/pc_frontend/modules/community/templates/deleteSuccess.php b/apps/pc_frontend/modules/community/templates/deleteSuccess.php | |
index 1e92533..3d9e0de 100644 | |
--- a/apps/pc_frontend/modules/community/templates/deleteSuccess.php | |
+++ b/apps/pc_frontend/modules/community/templates/deleteSuccess.php | |
@@ -1,7 +1,9 @@ | |
<?php | |
+$form = new BaseForm(); | |
op_include_parts('yesNo', 'deleteConfirmForm', array( | |
'title' => __('Do you delete this %community%?'), | |
- 'yes_form' => '<input type="hidden" name="is_delete">', | |
+ 'yes_form' => '<input type="hidden" name="is_delete"/>' | |
+ . '<input type="hidden" name="'.$form->getCSRFFieldName().'" value="'.$form->getCSRFToken().'"/>', | |
'button' => __('Delete'), | |
)) | |
?> | |
diff --git a/apps/pc_frontend/modules/googlemaps/actions/actions.class.php b/apps/pc_frontend/modules/googlemaps/actions/actions.class.php | |
index 911c6a2..86378c7 100644 | |
--- a/apps/pc_frontend/modules/googlemaps/actions/actions.class.php | |
+++ b/apps/pc_frontend/modules/googlemaps/actions/actions.class.php | |
@@ -17,11 +17,6 @@ class googlemapsActions extends sfActions | |
*/ | |
public function executeIndex(sfWebRequest $request) | |
{ | |
- $this->x = $request->getParameter('x'); | |
- $this->y = $request->getParameter('y'); | |
- $this->z = $request->getParameter('z'); | |
- $this->q = $request->getParameter('q'); | |
- | |
$this->mapType = 'G_NORMAL_MAP'; | |
switch ($request->getParameter('t')) | |
{ | |
diff --git a/apps/pc_frontend/modules/googlemaps/templates/indexSuccess.php b/apps/pc_frontend/modules/googlemaps/templates/indexSuccess.php | |
index 3faf61b..558334b 100644 | |
--- a/apps/pc_frontend/modules/googlemaps/templates/indexSuccess.php | |
+++ b/apps/pc_frontend/modules/googlemaps/templates/indexSuccess.php | |
@@ -11,16 +11,34 @@ | |
<?php use_javascript('http://maps.google.co.jp/maps?file=api&v=2.x&key='.$op_config['google_maps_api_key']) ?> | |
<?php | |
$googlemaps_script = <<<EOM | |
+// parse request parameters | |
+var request = { | |
+ x: "", y: "", z: "", q: "" | |
+}; | |
+var params = window.location.search.substr(1).split('&'); | |
+for (var i = 0; i < params.length; i++) { | |
+ var parts = params[i].split('='); | |
+ | |
+ var n = parts[0]; | |
+ var v = decodeURIComponent(parts[1]); | |
+ if ("z" == n) | |
+ { | |
+ v = parseInt(v); | |
+ } | |
+ request[n] = v; | |
+} | |
+var MapType = %s; // It is not user-inputed values | |
+ | |
var gls; | |
var gMap; | |
function OnLocalSearch() { | |
if (!gls.results) return; | |
var first = gls.results[0]; | |
var point = new GLatLng(parseFloat(first.lat), parseFloat(first.lng)); | |
- var zoom = (%s); | |
+ var zoom = request.z; | |
gMap.addControl(new GSmallMapControl()); | |
gMap.addControl(new GMapTypeControl()); | |
- gMap.setMapType((%s)); | |
+ gMap.setMapType(MapType); | |
gMap.setCenter(point, zoom); | |
var marker = new GMarker(point); | |
gMap.addOverlay(marker); | |
@@ -28,7 +46,7 @@ function OnLocalSearch() { | |
} | |
function load() { | |
if (GBrowserIsCompatible()) { | |
- if (((%s) == 0) && ((%s) == 0)){ | |
+ if ((request.x == 0) && (request.y == 0)){ | |
gMap = new GMap2(document.getElementById('map')); | |
gMap.addControl(new GSmallMapControl()); | |
gMap.addControl(new GMapTypeControl()); | |
@@ -36,16 +54,16 @@ function load() { | |
gls = new GlocalSearch(); | |
gls.setCenterPoint(gMap); | |
gls.setSearchCompleteCallback(null, OnLocalSearch); | |
- var q = '(%s)'; | |
+ var q = request.q; | |
gls.execute(q); | |
} else { | |
- var point = new GLatLng((%s), (%s)); | |
- var zoom = (%s); | |
+ var point = new GLatLng(request.x, request.y); | |
+ var zoom = request.z; | |
gMap = new GMap2(document.getElementById('map')); | |
gMap.addControl(new GSmallMapControl()); | |
gMap.addControl(new GMapTypeControl()); | |
gMap.setCenter(point, zoom); | |
- gMap.setMapType((%s)); | |
+ gMap.setMapType(MapType); | |
var marker = new GMarker(point); | |
gMap.addOverlay(marker); | |
geocoder = new GClientGeocoder(); | |
@@ -53,7 +71,7 @@ function load() { | |
} | |
} | |
EOM; | |
-echo javascript_tag(sprintf($googlemaps_script, $z, $mapType, $x, $y, $q, $x, $y, $z, $mapType)); ?> | |
+echo javascript_tag(sprintf($googlemaps_script, $mapType)); ?> | |
<?php endif; ?> | |
<?php include_stylesheets() ?> | |
<?php include_javascripts() ?> | |
diff --git a/apps/pc_frontend/templates/_partsMemberImagesBox.php b/apps/pc_frontend/templates/_partsMemberImagesBox.php | |
index e172966..f476bcd 100644 | |
--- a/apps/pc_frontend/templates/_partsMemberImagesBox.php | |
+++ b/apps/pc_frontend/templates/_partsMemberImagesBox.php | |
@@ -1,5 +1,7 @@ | |
<table> | |
<tr> | |
+<?php $form = new sfForm() ?> | |
+<?php $csrfToken = '&'.$form->getCSRFFieldName().'='.$form->getCSRFToken() ?> | |
<?php for ($i = 0; $i < 3; $i++) : ?> | |
<td> | |
<?php if (isset($options['images'][$i])) : ?> | |
@@ -7,11 +9,11 @@ | |
<?php echo image_tag_sf_image($image->getFile(), array('size' => '180x180')) ?><br /> | |
<?php if (isset($options['form'])) : ?> | |
[ | |
-<?php echo link_to(__('Delete'), 'member/deleteImage?member_image_id='.$image->getId()) ?> | | |
+<?php echo link_to(__('Delete'), 'member/deleteImage?member_image_id='.$image->getId().$csrfToken) ?> | | |
<?php if ($image->getIsPrimary()) : ?> | |
<?php echo(__('Main Photo')) ?> | |
<?php else: ?> | |
-<?php echo link_to(__('Main Photo'), 'member/changeMainImage?member_image_id='.$image->getId()) ?> | |
+<?php echo link_to(__('Main Photo'), 'member/changeMainImage?member_image_id='.$image->getId().$csrfToken) ?> | |
<?php endif; ?> | |
] | |
<?php endif; ?> | |
diff --git a/data/version.php b/data/version.php | |
index 58464e8..f495ee6 100644 | |
--- a/data/version.php | |
+++ b/data/version.php | |
@@ -10,5 +10,5 @@ | |
if (!defined('OPENPNE_VERSION')) | |
{ | |
- define('OPENPNE_VERSION', '3.4.6'); | |
+ define('OPENPNE_VERSION', '3.4.6.1'); | |
} | |
diff --git a/lib/action/sfOpenPNECommunityAction.class.php b/lib/action/sfOpenPNECommunityAction.class.php | |
index 6838cf9..38402db 100644 | |
--- a/lib/action/sfOpenPNECommunityAction.class.php | |
+++ b/lib/action/sfOpenPNECommunityAction.class.php | |
@@ -137,6 +137,7 @@ abstract class sfOpenPNECommunityAction extends sfActions | |
{ | |
if($request->hasParameter('is_delete')) | |
{ | |
+ $request->checkCSRFProtection(); | |
$community = Doctrine::getTable('Community')->find($this->id); | |
if ($community) | |
{ | |
diff --git a/lib/action/sfOpenPNEMemberAction.class.php b/lib/action/sfOpenPNEMemberAction.class.php | |
index 5cbd715..a2d105a 100644 | |
--- a/lib/action/sfOpenPNEMemberAction.class.php | |
+++ b/lib/action/sfOpenPNEMemberAction.class.php | |
@@ -415,6 +415,7 @@ abstract class sfOpenPNEMemberAction extends sfActions | |
public function executeDeleteImage($request) | |
{ | |
+ $request->checkCSRFProtection(); | |
$image = Doctrine::getTable('MemberImage')->find($request->getParameter('member_image_id')); | |
$this->forward404Unless($image); | |
$this->forward404Unless($image->getMemberId() == $this->getUser()->getMemberId()); | |
@@ -426,6 +427,7 @@ abstract class sfOpenPNEMemberAction extends sfActions | |
public function executeChangeMainImage($request) | |
{ | |
+ $request->checkCSRFProtection(); | |
$image = Doctrine::getTable('MemberImage')->find($request->getParameter('member_image_id')); | |
$this->forward404Unless($image); | |
$this->forward404Unless($image->getMemberId() == $this->getUser()->getMemberId()); | |
diff --git a/lib/form/doctrine/BannerImageForm.class.php b/lib/form/doctrine/BannerImageForm.class.php | |
index 1d17c4b..c69e6b4 100644 | |
--- a/lib/form/doctrine/BannerImageForm.class.php | |
+++ b/lib/form/doctrine/BannerImageForm.class.php | |
@@ -24,7 +24,7 @@ class BannerImageForm extends BaseBannerImageForm | |
$this->setWidget('url', new sfWidgetFormInputText(array(), array('size' => 40))); | |
$this->setWidget('name', new sfWidgetFormInputText()); | |
$this->setValidators(array( | |
- 'file' => new opValidatorImageFile(), | |
+ 'file' => new opValidatorImageFile(array('required' => $this->isNew())), | |
'url' => new sfValidatorPass(), | |
'name' => new sfValidatorPass(), | |
)); | |
@@ -38,10 +38,6 @@ class BannerImageForm extends BaseBannerImageForm | |
public function save() | |
{ | |
- $file = new File(); | |
- $file->setFromValidatedFile($this->getValue('file')); | |
- $file->setName('b_'.$file->getName()); | |
- | |
if ($this->isNew()) | |
{ | |
$bannerImage = new BannerImage(); | |
@@ -50,7 +46,15 @@ class BannerImageForm extends BaseBannerImageForm | |
{ | |
$bannerImage = $this->getObject(); | |
} | |
- $bannerImage->setFile($file); | |
+ | |
+ if ($this->getValue('file')) | |
+ { | |
+ $file = new File(); | |
+ $file->setFromValidatedFile($this->getValue('file')); | |
+ $file->setName('b_'.$file->getName()); | |
+ $bannerImage->setFile($file); | |
+ } | |
+ | |
$bannerImage->setUrl($this->getValue('url')); | |
$bannerImage->setName($this->getValue('name')); | |
diff --git a/lib/widget/opWidgetFormRichTextareaOpenPNE.class.php b/lib/widget/opWidgetFormRichTextareaOpenPNE.class.php | |
index 3a87013..12c25fa 100644 | |
--- a/lib/widget/opWidgetFormRichTextareaOpenPNE.class.php | |
+++ b/lib/widget/opWidgetFormRichTextareaOpenPNE.class.php | |
@@ -361,14 +361,20 @@ class opWidgetFormRichTextareaOpenPNE extends opWidgetFormRichTextarea | |
static public function opColorToHtml($isEndtag, $tagname, $attributes, $isUseStylesheet) | |
{ | |
$options = array(); | |
+ $code = isset($attributes['code']) ? $attributes['code'] : ''; | |
+ if (!($code && preg_match('/^#[0-9a-fA-F]{6}$/', $code))) | |
+ { | |
+ $code = ''; | |
+ } | |
+ | |
if ($isUseStylesheet) | |
{ | |
if ($isEndtag) { | |
return '</span>'; | |
} | |
$options['class'] = strtr($tagname, ':', '_'); | |
- if (isset($attributes['code'])) { | |
- $options['style'] = 'color:'.$attributes['code']; | |
+ if ($code) { | |
+ $options['style'] = 'color:'.$code; | |
} | |
return tag('span', $options, true); | |
@@ -379,8 +385,8 @@ class opWidgetFormRichTextareaOpenPNE extends opWidgetFormRichTextarea | |
{ | |
return '</font>'; | |
} | |
- if (isset($attributes['code'])) { | |
- $options['color'] = $attributes['code']; | |
+ if ($code) { | |
+ $options['color'] = $code; | |
} | |
return tag('font', $options, true); | |
@@ -390,6 +396,13 @@ class opWidgetFormRichTextareaOpenPNE extends opWidgetFormRichTextarea | |
static public function opFontToHtml($isEndtag, $tagname, $attributes, $isUseStylesheet) | |
{ | |
$options = array(); | |
+ | |
+ $color = isset($attributes['color']) ? $attributes['color'] : ''; | |
+ if (!($color && preg_match('/^#[0-9a-fA-F]{6}$/', $color))) | |
+ { | |
+ $color = ''; | |
+ } | |
+ | |
if ($isUseStylesheet) | |
{ | |
if ($isEndtag) { | |
@@ -397,8 +410,8 @@ class opWidgetFormRichTextareaOpenPNE extends opWidgetFormRichTextarea | |
} | |
$options['class'] = 'op_font'; | |
$options['style'] = ''; | |
- if (isset($attributes['color'])) { | |
- $options['style'] .= 'color:'.$attributes['color'].';'; | |
+ if ($color) { | |
+ $options['style'] .= 'color:'.$color.';'; | |
} | |
$size = isset($attributes['size']) ? (int)$attributes['size'] : 0; | |
$fontSizeMap = array( | |
@@ -411,7 +424,6 @@ class opWidgetFormRichTextareaOpenPNE extends opWidgetFormRichTextarea | |
7 => 'xx-large' | |
); | |
if (isset($fontSizeMap[$size])) { | |
- | |
$options['style'] .= 'font-size:'.$fontSizeMap[$size]; | |
} | |
@@ -423,8 +435,8 @@ class opWidgetFormRichTextareaOpenPNE extends opWidgetFormRichTextarea | |
{ | |
return '</font>'; | |
} | |
- if (isset($attributes['color'])) { | |
- $options['color'] = $attributes['color']; | |
+ if ($color) { | |
+ $options['color'] = $color; | |
} | |
$size = isset($attributes['size']) ? (int)$attributes['size'] : 0; | |
if ($size >= 1 && $size <= 7) | |
diff --git a/web/js/tiny_mce/plugins/openpne/editor_plugin.js b/web/js/tiny_mce/plugins/openpne/editor_plugin.js | |
index de83742..8014cc8 100644 | |
--- a/web/js/tiny_mce/plugins/openpne/editor_plugin.js | |
+++ b/web/js/tiny_mce/plugins/openpne/editor_plugin.js | |
@@ -51,9 +51,9 @@ return result;};rep(/</gi,"<");rep(/>/gi,">");rep(/\n/gi,"<br />");rep(/&l | |
if(isEndTag){return"</"+tagname+">";} | |
if(org_tagname=="font"){if(attributes["size"]){if(fontSizeMap[attributes["size"]-1]){fontsize=fontSizeMap[attributes["size"]-1];} | |
style+='font-size:'+fontsize+';';} | |
-if(attributes["color"]){style+='color:'+attributes["color"]+';';} | |
+if(attributes["color"]&&attributes["color"].match(/^#[0-9a-fA-F]{6}$/)){style+='color:'+attributes["color"]+';';} | |
opt=' style="'+style+'"';} | |
-if(org_tagname=="color"&&attributes["code"]){opt=' style="color:'+attributes["code"]+';"';} | |
+if(org_tagname=="color"&&attributes["code"]&&attributes["code"].match(/^#[0-9a-fA-F]{6}$/)){opt=' style="color:'+attributes["code"]+';"';} | |
if(org_tagname=="large"){opt=' style="font-size:large"';} | |
if(org_tagname=="small"){opt=' style="font-size:xx-small"';} | |
return"<"+tagname+opt+">";});return s;}});tinymce.PluginManager.add('openpne',tinymce.plugins.OpenPNEPlugin);})(); | |
\ No newline at end of file | |
diff --git a/web/js/tiny_mce/plugins/openpne/editor_plugin.js.src b/web/js/tiny_mce/plugins/openpne/editor_plugin.js.src | |
index 5a08ea4..ec3dfa0 100644 | |
--- a/web/js/tiny_mce/plugins/openpne/editor_plugin.js.src | |
+++ b/web/js/tiny_mce/plugins/openpne/editor_plugin.js.src | |
@@ -590,14 +590,14 @@ | |
style += 'font-size:' + fontsize + ';'; | |
} | |
- if (attributes["color"]) { | |
+ if (attributes["color"] && attributes["color"].match(/^#[0-9a-fA-F]{6}$/)) { | |
style += 'color:' + attributes["color"] + ';'; | |
} | |
opt = ' style="' + style + '"'; | |
} | |
// old style | |
- if (org_tagname == "color" && attributes["code"]) { | |
+ if (org_tagname == "color" && attributes["code"] && attributes["code"].match(/^#[0-9a-fA-F]{6}$/)) { | |
opt = ' style="color:' + attributes["code"] + ';"'; | |
} |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
diff --git a/apps/mobile_frontend/modules/community/templates/deleteSuccess.php b/apps/mobile_frontend/modules/community/templates/deleteSuccess.php | |
index 016760a..fe94160 100644 | |
--- a/apps/mobile_frontend/modules/community/templates/deleteSuccess.php | |
+++ b/apps/mobile_frontend/modules/community/templates/deleteSuccess.php | |
@@ -1,8 +1,10 @@ | |
<?php op_mobile_page_title(__('Delete this %community%'), $community->getName()) ?> | |
<?php | |
+$form = new BaseForm(); | |
op_include_parts('yesNo', 'deleteConfirmForm', array( | |
'body' => __('Do you delete this %community%?'), | |
- 'yes_form' => '<input type="hidden" name="is_delete">', | |
+ 'yes_form' => '<input type="hidden" name="is_delete">' | |
+ . '<input type="hidden" name="'.$form->getCSRFFieldName().'" value="'.$form->getCSRFToken().'">', | |
'button' => __('Delete'), | |
)) | |
?> | |
diff --git a/apps/mobile_frontend/modules/member/templates/configImageSuccess.php b/apps/mobile_frontend/modules/member/templates/configImageSuccess.php | |
index e19d635..a2c05ca 100644 | |
--- a/apps/mobile_frontend/modules/member/templates/configImageSuccess.php | |
+++ b/apps/mobile_frontend/modules/member/templates/configImageSuccess.php | |
@@ -3,6 +3,8 @@ | |
<?php $_member = $sf_user->getMember() ?> | |
<?php $images = $_member->getMemberImage() ?> | |
<?php if ($images->count()): ?> | |
+<?php $form = new sfForm() ?> | |
+<?php $csrfToken = '&'.$form->getCSRFFieldName().'='.$form->getCSRFToken() ?> | |
<?php foreach ($images as $image) : ?> | |
<?php echo op_image_tag_sf_image($image->getFile(), array('size' => '120x120', 'format' => 'jpg')) ?><br> | |
<?php echo sprintf('[%s]',link_to(__('Expansion'), sf_image_path($image->getFile(), array('size' => '320x320', 'format' => 'jpg')))) ?><br> | |
@@ -13,7 +15,7 @@ if ($image->getIsPrimary()) | |
} | |
else | |
{ | |
- $main = link_to(__('Main Photo'), 'member/changeMainImage?member_image_id='.$image->getId()); | |
+ $main = link_to(__('Main Photo'), 'member/changeMainImage?member_image_id='.$image->getId().$csrfToken); | |
} | |
?> | |
<?php echo sprintf('[%s|%s]', link_to(__('Delete'), 'member/deleteImage?member_image_id='.$image->getId()), $main) ?> | |
diff --git a/apps/pc_backend/modules/community/actions/actions.class.php b/apps/pc_backend/modules/community/actions/actions.class.php | |
index 56794d1..5238b37 100644 | |
--- a/apps/pc_backend/modules/community/actions/actions.class.php | |
+++ b/apps/pc_backend/modules/community/actions/actions.class.php | |
@@ -59,6 +59,7 @@ class communityActions extends sfActions | |
if ($request->isMethod(sfRequest::POST)) | |
{ | |
+ $request->checkCSRFProtection(); | |
$this->community->delete(); | |
$this->getUser()->setFlash('notice', 'Deleted.'); | |
$this->redirect('community/list'); | |
diff --git a/apps/pc_backend/modules/community/templates/deleteSuccess.php b/apps/pc_backend/modules/community/templates/deleteSuccess.php | |
index 4db0a16..aaad11d 100644 | |
--- a/apps/pc_backend/modules/community/templates/deleteSuccess.php | |
+++ b/apps/pc_backend/modules/community/templates/deleteSuccess.php | |
@@ -6,10 +6,15 @@ | |
<p><?php echo __('本当にこのコミュニティを削除してもよろしいですか?') ?></p> | |
+<?php | |
+$form = new BaseForm(); | |
+$csrfToken = '<input type="hidden" name="'.$form->getCSRFFieldName().'" value="'.$form->getCSRFToken().'"/>'; | |
+?> | |
+ | |
<form action="<?php url_for('community/delete?id='.$community->getId()) ?>" method="post"> | |
<?php include_partial('community/communityInfo', array( | |
'community' => $community, | |
- 'moreInfo' => array('<input type="submit" value="削除" />') | |
+ 'moreInfo' => array($csrfToken.'<input type="submit" value="削除" />') | |
)); ?> | |
</form> | |
diff --git a/apps/pc_backend/modules/default/actions/csrfErrorAction.class.php b/apps/pc_backend/modules/default/actions/csrfErrorAction.class.php | |
new file mode 100644 | |
index 0000000..73dc29b | |
--- /dev/null | |
+++ b/apps/pc_backend/modules/default/actions/csrfErrorAction.class.php | |
@@ -0,0 +1,23 @@ | |
+<?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. | |
+ */ | |
+ | |
+ /** | |
+ * csrfError action. | |
+ * | |
+ * @package OpenPNE | |
+ * @subpackage default | |
+ * @author Kousuke Ebihara <[email protected]> | |
+ */ | |
+class csrfErrorAction extends sfAction | |
+{ | |
+ public function execute($request) | |
+ { | |
+ } | |
+} | |
diff --git a/apps/pc_backend/modules/default/templates/csrfErrorSuccess.php b/apps/pc_backend/modules/default/templates/csrfErrorSuccess.php | |
new file mode 100644 | |
index 0000000..20bc4b7 | |
--- /dev/null | |
+++ b/apps/pc_backend/modules/default/templates/csrfErrorSuccess.php | |
@@ -0,0 +1 @@ | |
+<?php echo __('CSRF attack detected.'); ?> | |
diff --git a/apps/pc_backend/modules/design/actions/actions.class.php b/apps/pc_backend/modules/design/actions/actions.class.php | |
index c5c7141..58dcf3d 100644 | |
--- a/apps/pc_backend/modules/design/actions/actions.class.php | |
+++ b/apps/pc_backend/modules/design/actions/actions.class.php | |
@@ -249,13 +249,6 @@ class designActions extends sfActions | |
$this->form->save(); | |
$this->redirect('design/banner'); | |
} | |
- if (!isset($params['file'])) | |
- { | |
- $banner->setName($params['name']); | |
- $banner->setUrl($params['url']); | |
- $banner->save(); | |
- $this->redirect('design/banner'); | |
- } | |
} | |
} | |
@@ -274,6 +267,7 @@ class designActions extends sfActions | |
if ($request->isMethod(sfWebRequest::POST)) | |
{ | |
+ $request->checkCSRFProtection(); | |
$banner->delete(); | |
$this->redirect('design/banner'); | |
} | |
diff --git a/apps/pc_backend/modules/design/templates/bannerdeleteSuccess.php b/apps/pc_backend/modules/design/templates/bannerdeleteSuccess.php | |
index af2759e..324fb51 100644 | |
--- a/apps/pc_backend/modules/design/templates/bannerdeleteSuccess.php | |
+++ b/apps/pc_backend/modules/design/templates/bannerdeleteSuccess.php | |
@@ -2,8 +2,12 @@ | |
<?php include_partial('submenu'); ?> | |
<?php end_slot() ?> | |
+<?php $form = new BaseForm() ?> | |
<h2><?php echo __('Delete a banner image') ?></h2> | |
<p><?php echo __('Delete truly this banner image?') ?></p> | |
<form action="" method="post"> | |
-<td colspan="2"><input type="submit" value="<?php echo __('Delete') ?>" /></td> | |
+<td colspan="2"> | |
+<input type="hidden" name="<?php echo $form->getCSRFFieldName() ?>" value="<?php echo $form->getCSRFToken() ?>" /> | |
+<input type="submit" value="<?php echo __('Delete') ?>" /> | |
+</td> | |
</form> | |
diff --git a/apps/pc_backend/modules/member/actions/actions.class.php b/apps/pc_backend/modules/member/actions/actions.class.php | |
index ac7eccd..aacd982 100644 | |
--- a/apps/pc_backend/modules/member/actions/actions.class.php | |
+++ b/apps/pc_backend/modules/member/actions/actions.class.php | |
@@ -72,6 +72,7 @@ class memberActions extends sfActions | |
$this->form = new sfForm(); | |
if ($request->isMethod('post')) | |
{ | |
+ $request->checkCSRFProtection(); | |
$this->member->delete(); | |
$this->getUser()->setFlash('notice', sfContext::getInstance()->getI18N()->__('The member has been unsubscribed')); | |
$this->redirect('member/list'); | |
diff --git a/apps/pc_backend/modules/navigation/actions/actions.class.php b/apps/pc_backend/modules/navigation/actions/actions.class.php | |
index 1204649..9e94220 100644 | |
--- a/apps/pc_backend/modules/navigation/actions/actions.class.php | |
+++ b/apps/pc_backend/modules/navigation/actions/actions.class.php | |
@@ -36,6 +36,8 @@ class navigationActions extends sfActions | |
public function executeList(sfWebRequest $request) | |
{ | |
$this->list = array(); | |
+ $this->deleteForm = new BaseForm(); | |
+ $this->sortForm = new BaseForm(); | |
$types = Doctrine::getTable('Navigation')->getTypesByAppName($request->getParameter('app', 'pc')); | |
@@ -95,6 +97,8 @@ class navigationActions extends sfActions | |
if ($request->isMethod(sfWebRequest::POST)) | |
{ | |
+ $request->checkCSRFProtection(); | |
+ | |
$model = Doctrine::getTable('Navigation')->find($request->getParameter('id')); | |
$this->forward404Unless($model); | |
$types = Doctrine::getTable('Navigation')->getTypesByAppName($app); | |
@@ -123,6 +127,8 @@ class navigationActions extends sfActions | |
$this->forward404(); | |
} | |
+ $request->checkCSRFProtection(); | |
+ | |
$parameters = $request->getParameterHolder(); | |
$keys = $parameters->getNames(); | |
foreach ($keys as $key) | |
diff --git a/apps/pc_backend/modules/navigation/templates/listSuccess.php b/apps/pc_backend/modules/navigation/templates/listSuccess.php | |
index ff35449..28d47f5 100644 | |
--- a/apps/pc_backend/modules/navigation/templates/listSuccess.php | |
+++ b/apps/pc_backend/modules/navigation/templates/listSuccess.php | |
@@ -34,7 +34,12 @@ | |
<?php else : ?> | |
<td><input type="submit" value="<?php echo __('Edit') ?>" /></td> | |
</form> | |
-<td><form action="<?php echo url_for('navigation/delete?app='.$sf_request->getParameter('app', 'pc').'&id='.$form->getObject()->getId()) ?>" method="post" /><input type="submit" value="<?php echo __('Delete') ?>" /></form></td> | |
+<td> | |
+<form action="<?php echo url_for('navigation/delete?app='.$sf_request->getParameter('app', 'pc').'&id='.$form->getObject()->getId()) ?>" method="post"> | |
+<?php echo $deleteForm ?> | |
+<input type="submit" value="<?php echo __('Delete') ?>" /> | |
+</form> | |
+</td> | |
<?php endif; ?> | |
</tr> | |
</tbody> | |
@@ -44,7 +49,8 @@ | |
<?php echo sortable_element('type_'.str_replace(' ', '_', $type), array( | |
'tag' => 'tbody', | |
'only' => 'sortable', | |
- 'url' => 'navigation/sort' | |
+ 'url' => 'navigation/sort', | |
+ 'with' => 'Sortable.serialize("type_'.str_replace(' ', '_', $type).'")+"&'.urlencode($sortForm->getCSRFFieldName()).'='.urlencode($sortForm->getCSRFToken()).'"', | |
)) ?> | |
<?php endforeach; ?> | |
diff --git a/apps/pc_backend/modules/profile/actions/actions.class.php b/apps/pc_backend/modules/profile/actions/actions.class.php | |
index de2bd45..f1f0003 100644 | |
--- a/apps/pc_backend/modules/profile/actions/actions.class.php | |
+++ b/apps/pc_backend/modules/profile/actions/actions.class.php | |
@@ -50,6 +50,8 @@ class profileActions extends sfActions | |
$this->option_form[$profileId][$profileOptionId]->bind($parameter); | |
} | |
} | |
+ | |
+ $this->tokenForm = new BaseForm(); | |
} | |
/** | |
@@ -141,7 +143,9 @@ class profileActions extends sfActions | |
$this->profile = Doctrine::getTable('Profile')->find($request->getParameter('id')); | |
$this->forward404Unless($this->profile); | |
- if ($request->isMethod('post')) { | |
+ if ($request->isMethod('post')) | |
+ { | |
+ $request->checkCSRFProtection(); | |
$this->profile->delete(); | |
$this->redirect('profile/list'); | |
} | |
@@ -157,7 +161,9 @@ class profileActions extends sfActions | |
$this->profileOption = Doctrine::getTable('ProfileOption')->find($request->getParameter('id')); | |
$this->forward404Unless($this->profileOption); | |
- if ($request->isMethod('post')) { | |
+ if ($request->isMethod('post')) | |
+ { | |
+ $request->checkCSRFProtection(); | |
$this->profileOption->delete(); | |
} | |
$this->redirect('profile/list'); | |
@@ -172,6 +178,7 @@ class profileActions extends sfActions | |
{ | |
if ($request->isXmlHttpRequest()) | |
{ | |
+ $request->checkCSRFProtection(); | |
$order = $request->getParameter('profiles'); | |
for ($i = 0; $i < count($order); $i++) | |
{ | |
@@ -195,6 +202,7 @@ class profileActions extends sfActions | |
{ | |
if ($request->isXmlHttpRequest()) | |
{ | |
+ $request->checkCSRFProtection(); | |
$parameters = $request->getParameterHolder(); | |
$keys = $parameters->getNames(); | |
foreach ($keys as $key) | |
diff --git a/apps/pc_backend/modules/profile/templates/deleteSuccess.php b/apps/pc_backend/modules/profile/templates/deleteSuccess.php | |
index 9771339..529a26d 100644 | |
--- a/apps/pc_backend/modules/profile/templates/deleteSuccess.php | |
+++ b/apps/pc_backend/modules/profile/templates/deleteSuccess.php | |
@@ -1,6 +1,7 @@ | |
-<h2><?php echo __('Delete profile entry')?></h2> | |
-<p><?php echo __('Do you want to delete this anyway?')?></p> | |
-<p><?php echo __('※All the member\'s data in this entry will be lost.')?></p> | |
-<form action="<?php echo url_for('profile/delete?id=' . $profile->getId()) ?>" method="post"> | |
-<input type="submit" value=<?php echo __('Delete')?> /> | |
+<h2><?php echo __('Delete profile entry') ?></h2> | |
+<p><?php echo __('Do you want to delete this anyway?') ?></p> | |
+<p><?php echo __('※All the member\'s data in this entry will be lost.') ?></p> | |
+<form action="<?php echo url_for('profile/delete?id='.$profile->getId()) ?>" method="post"> | |
+<?php $formCSRF = new sfForm(); ?><input type="hidden" name="<?php echo $formCSRF->getCSRFFieldName() ?>" value="<?php echo $formCSRF->getCSRFToken() ?>" /> | |
+<input type="submit" value="<?php echo __('Delete') ?>" /> | |
</form> | |
diff --git a/apps/pc_backend/modules/profile/templates/listSuccess.php b/apps/pc_backend/modules/profile/templates/listSuccess.php | |
index 330203d..b637f7f 100644 | |
--- a/apps/pc_backend/modules/profile/templates/listSuccess.php | |
+++ b/apps/pc_backend/modules/profile/templates/listSuccess.php | |
@@ -52,8 +52,9 @@ | |
<?php endforeach; ?> | |
</table> | |
<?php echo sortable_element('profiles',array( | |
- 'tag' => 'tbody', | |
- 'url' => 'profile/sortProfile' | |
+ 'tag' => 'tbody', | |
+ 'url' => 'profile/sortProfile', | |
+ 'with' => 'Sortable.serialize("profiles")+"&'.urlencode($tokenForm->getCSRFFieldName()).'='.urlencode($tokenForm->getCSRFToken()).'"' | |
)) ?> | |
<h3><?php echo __('Option list')?></h3> | |
@@ -78,33 +79,34 @@ | |
<tbody> | |
<?php endif; ?> | |
<tr> | |
-<form action="<?php echo url_for('profile/editOption?id=' . $form->getObject()->getId()) ?>" method="post"> | |
+<form action="<?php echo url_for('profile/editOption?id='.$form->getObject()->getId()) ?>" method="post"> | |
<td><?php echo ($form->getObject()->isNew() ? '-' : $form->getObject()->getId()) ?></td> | |
<?php foreach ($languages as $language): ?> | |
<td> | |
-<?php echo $form[$language]['value']->renderError() ?> | |
-<?php echo $form[$language]['value']->render() ?> | |
+<?php echo $form[$language]['value']->renderError(), "\n" ?> | |
+<?php echo $form[$language]['value']->render(), "\n" ?> | |
</td> | |
<?php endforeach; ?> | |
-<?php if ($form->getObject()->isNew()) : ?> | |
-<td colspan="2"> | |
-<?php echo $form->renderHiddenFields() ?> | |
-<input type="submit" value="<?php echo __('Add new option')?>" /> | |
-</td> | |
-</form> | |
-<?php else : ?> | |
+<?php if (!$form->getObject()->isNew()): ?> | |
<td> | |
-<?php echo $form->renderHiddenFields() ?> | |
+<?php echo $form->renderHiddenFields(), "\n" ?> | |
<input type="submit" value="<?php echo __('Save')?>" /> | |
</td> | |
</form> | |
<td> | |
-<form action="<?php echo url_for('profile/deleteOption?id=' . $form->getObject()->getId()) ?>" method="post"> | |
+<form action="<?php echo url_for('profile/deleteOption?id='.$form->getObject()->getId()) ?>" method="post"> | |
<?php echo $form['id']->render(), "\n" ?> | |
<?php echo $form['profile_id']->render(), "\n" ?> | |
+<?php $formCSRF = new sfForm(); ?><input type="hidden" name="<?php echo $formCSRF->getCSRFFieldName() ?>" value="<?php echo $formCSRF->getCSRFToken() ?>" /> | |
<input type="submit" value="<?php echo __('Delete') ?>" /> | |
</form> | |
</td> | |
+<?php else: ?> | |
+<td colspan="2"> | |
+<?php echo $form->renderHiddenFields() ?> | |
+<input type="submit" value="<?php echo __('Add new option')?>" /> | |
+</td> | |
+</form> | |
<?php endif; ?> | |
</tr> | |
</tbody> | |
@@ -113,7 +115,8 @@ | |
<?php echo sortable_element('profile_options_'.$value->getId(),array( | |
'tag' => 'tbody', | |
'only' => 'sortable', | |
- 'url' => 'profile/sortProfileOption' | |
+ 'url' => 'profile/sortProfileOption', | |
+ 'with' => 'Sortable.serialize("profile_options_'.$value->getId().'")+"&'.urlencode($tokenForm->getCSRFFieldName()).'='.urlencode($tokenForm->getCSRFToken()).'"' | |
)) ?> | |
<?php endif; ?> | |
<?php endforeach; ?> | |
diff --git a/apps/pc_backend/modules/sns/actions/actions.class.php b/apps/pc_backend/modules/sns/actions/actions.class.php | |
index b269176..13562c7 100644 | |
--- a/apps/pc_backend/modules/sns/actions/actions.class.php | |
+++ b/apps/pc_backend/modules/sns/actions/actions.class.php | |
@@ -115,6 +115,7 @@ class snsActions extends sfActions | |
public function executeRichTextarea(sfWebRequest $request) | |
{ | |
+ $this->sortForm = new BaseForm(); | |
$this->configForm = new opRichTextareaOpenPNEConfigForm(); | |
$this->buttonConfigForm = new opRichTextareaOpenPNEButtonConfigForm(); | |
$this->buttonConfig = opWidgetFormRichTextareaOpenPNE::getAllButtons(); | |
@@ -134,6 +135,8 @@ class snsActions extends sfActions | |
{ | |
if ($request->isXmlHttpRequest()) | |
{ | |
+ $request->checkCSRFProtection(); | |
+ | |
$buttons = $request->getParameter('button'); | |
Doctrine::getTable('SnsConfig')->set('richtextarea_buttons_sort_order', serialize($buttons)); | |
} | |
diff --git a/apps/pc_backend/modules/sns/templates/richTextareaSuccess.php b/apps/pc_backend/modules/sns/templates/richTextareaSuccess.php | |
index 1167358..fcd91d2 100644 | |
--- a/apps/pc_backend/modules/sns/templates/richTextareaSuccess.php | |
+++ b/apps/pc_backend/modules/sns/templates/richTextareaSuccess.php | |
@@ -38,5 +38,6 @@ | |
'tag' => 'tbody', | |
'only' => 'sortable', | |
'format' => '/^button_(.*)$/', | |
- 'url' => 'sns/changeRichTextareaButtonOrder' | |
+ 'url' => 'sns/changeRichTextareaButtonOrder', | |
+ 'with' => 'Sortable.serialize("button")+"&'.urlencode($sortForm->getCSRFFieldName()).'='.urlencode($sortForm->getCSRFToken()).'"', | |
)) ?> | |
diff --git a/apps/pc_frontend/modules/community/templates/deleteSuccess.php b/apps/pc_frontend/modules/community/templates/deleteSuccess.php | |
index 1e92533..3d9e0de 100644 | |
--- a/apps/pc_frontend/modules/community/templates/deleteSuccess.php | |
+++ b/apps/pc_frontend/modules/community/templates/deleteSuccess.php | |
@@ -1,7 +1,9 @@ | |
<?php | |
+$form = new BaseForm(); | |
op_include_parts('yesNo', 'deleteConfirmForm', array( | |
'title' => __('Do you delete this %community%?'), | |
- 'yes_form' => '<input type="hidden" name="is_delete">', | |
+ 'yes_form' => '<input type="hidden" name="is_delete"/>' | |
+ . '<input type="hidden" name="'.$form->getCSRFFieldName().'" value="'.$form->getCSRFToken().'"/>', | |
'button' => __('Delete'), | |
)) | |
?> | |
diff --git a/apps/pc_frontend/modules/googlemaps/actions/actions.class.php b/apps/pc_frontend/modules/googlemaps/actions/actions.class.php | |
index 911c6a2..86378c7 100644 | |
--- a/apps/pc_frontend/modules/googlemaps/actions/actions.class.php | |
+++ b/apps/pc_frontend/modules/googlemaps/actions/actions.class.php | |
@@ -17,11 +17,6 @@ class googlemapsActions extends sfActions | |
*/ | |
public function executeIndex(sfWebRequest $request) | |
{ | |
- $this->x = $request->getParameter('x'); | |
- $this->y = $request->getParameter('y'); | |
- $this->z = $request->getParameter('z'); | |
- $this->q = $request->getParameter('q'); | |
- | |
$this->mapType = 'G_NORMAL_MAP'; | |
switch ($request->getParameter('t')) | |
{ | |
diff --git a/apps/pc_frontend/modules/googlemaps/templates/indexSuccess.php b/apps/pc_frontend/modules/googlemaps/templates/indexSuccess.php | |
index 3faf61b..558334b 100644 | |
--- a/apps/pc_frontend/modules/googlemaps/templates/indexSuccess.php | |
+++ b/apps/pc_frontend/modules/googlemaps/templates/indexSuccess.php | |
@@ -11,16 +11,34 @@ | |
<?php use_javascript('http://maps.google.co.jp/maps?file=api&v=2.x&key='.$op_config['google_maps_api_key']) ?> | |
<?php | |
$googlemaps_script = <<<EOM | |
+// parse request parameters | |
+var request = { | |
+ x: "", y: "", z: "", q: "" | |
+}; | |
+var params = window.location.search.substr(1).split('&'); | |
+for (var i = 0; i < params.length; i++) { | |
+ var parts = params[i].split('='); | |
+ | |
+ var n = parts[0]; | |
+ var v = decodeURIComponent(parts[1]); | |
+ if ("z" == n) | |
+ { | |
+ v = parseInt(v); | |
+ } | |
+ request[n] = v; | |
+} | |
+var MapType = %s; // It is not user-inputed values | |
+ | |
var gls; | |
var gMap; | |
function OnLocalSearch() { | |
if (!gls.results) return; | |
var first = gls.results[0]; | |
var point = new GLatLng(parseFloat(first.lat), parseFloat(first.lng)); | |
- var zoom = (%s); | |
+ var zoom = request.z; | |
gMap.addControl(new GSmallMapControl()); | |
gMap.addControl(new GMapTypeControl()); | |
- gMap.setMapType((%s)); | |
+ gMap.setMapType(MapType); | |
gMap.setCenter(point, zoom); | |
var marker = new GMarker(point); | |
gMap.addOverlay(marker); | |
@@ -28,7 +46,7 @@ function OnLocalSearch() { | |
} | |
function load() { | |
if (GBrowserIsCompatible()) { | |
- if (((%s) == 0) && ((%s) == 0)){ | |
+ if ((request.x == 0) && (request.y == 0)){ | |
gMap = new GMap2(document.getElementById('map')); | |
gMap.addControl(new GSmallMapControl()); | |
gMap.addControl(new GMapTypeControl()); | |
@@ -36,16 +54,16 @@ function load() { | |
gls = new GlocalSearch(); | |
gls.setCenterPoint(gMap); | |
gls.setSearchCompleteCallback(null, OnLocalSearch); | |
- var q = '(%s)'; | |
+ var q = request.q; | |
gls.execute(q); | |
} else { | |
- var point = new GLatLng((%s), (%s)); | |
- var zoom = (%s); | |
+ var point = new GLatLng(request.x, request.y); | |
+ var zoom = request.z; | |
gMap = new GMap2(document.getElementById('map')); | |
gMap.addControl(new GSmallMapControl()); | |
gMap.addControl(new GMapTypeControl()); | |
gMap.setCenter(point, zoom); | |
- gMap.setMapType((%s)); | |
+ gMap.setMapType(MapType); | |
var marker = new GMarker(point); | |
gMap.addOverlay(marker); | |
geocoder = new GClientGeocoder(); | |
@@ -53,7 +71,7 @@ function load() { | |
} | |
} | |
EOM; | |
-echo javascript_tag(sprintf($googlemaps_script, $z, $mapType, $x, $y, $q, $x, $y, $z, $mapType)); ?> | |
+echo javascript_tag(sprintf($googlemaps_script, $mapType)); ?> | |
<?php endif; ?> | |
<?php include_stylesheets() ?> | |
<?php include_javascripts() ?> | |
diff --git a/apps/pc_frontend/templates/_partsMemberImagesBox.php b/apps/pc_frontend/templates/_partsMemberImagesBox.php | |
index 6afb988..a789282 100644 | |
--- a/apps/pc_frontend/templates/_partsMemberImagesBox.php | |
+++ b/apps/pc_frontend/templates/_partsMemberImagesBox.php | |
@@ -1,5 +1,7 @@ | |
<table> | |
<tr> | |
+<?php $form = new sfForm() ?> | |
+<?php $csrfToken = '&'.$form->getCSRFFieldName().'='.$form->getCSRFToken() ?> | |
<?php for ($i = 0; $i < 3; $i++) : ?> | |
<td> | |
<?php if (isset($options['images'][$i])) : ?> | |
@@ -7,11 +9,11 @@ | |
<?php echo op_image_tag_sf_image($image->getFile(), array('size' => '180x180')) ?><br /> | |
<?php if (isset($options['form'])) : ?> | |
[ | |
-<?php echo link_to(__('Delete'), 'member/deleteImage?member_image_id='.$image->getId()) ?> | | |
+<?php echo link_to(__('Delete'), 'member/deleteImage?member_image_id='.$image->getId().$csrfToken) ?> | | |
<?php if ($image->getIsPrimary()) : ?> | |
<?php echo(__('Main Photo')) ?> | |
<?php else: ?> | |
-<?php echo link_to(__('Main Photo'), 'member/changeMainImage?member_image_id='.$image->getId()) ?> | |
+<?php echo link_to(__('Main Photo'), 'member/changeMainImage?member_image_id='.$image->getId().$csrfToken) ?> | |
<?php endif; ?> | |
] | |
<?php endif; ?> | |
diff --git a/data/version.php b/data/version.php | |
index d91aa32..80345a0 100644 | |
--- a/data/version.php | |
+++ b/data/version.php | |
@@ -10,5 +10,5 @@ | |
if (!defined('OPENPNE_VERSION')) | |
{ | |
- define('OPENPNE_VERSION', '3.6beta1'); | |
+ define('OPENPNE_VERSION', '3.6beta2'); | |
} | |
diff --git a/lib/action/opCommunityAction.class.php b/lib/action/opCommunityAction.class.php | |
index 51b8e88..3aa1143 100644 | |
--- a/lib/action/opCommunityAction.class.php | |
+++ b/lib/action/opCommunityAction.class.php | |
@@ -137,6 +137,7 @@ abstract class opCommunityAction extends sfActions | |
{ | |
if($request->hasParameter('is_delete')) | |
{ | |
+ $request->checkCSRFProtection(); | |
$community = Doctrine::getTable('Community')->find($this->id); | |
if ($community) | |
{ | |
diff --git a/lib/action/opMemberAction.class.php b/lib/action/opMemberAction.class.php | |
index 6f79b64..6b80572 100644 | |
--- a/lib/action/opMemberAction.class.php | |
+++ b/lib/action/opMemberAction.class.php | |
@@ -373,6 +373,7 @@ abstract class opMemberAction extends sfActions | |
public function executeDeleteImage($request) | |
{ | |
+ $request->checkCSRFProtection(); | |
$image = Doctrine::getTable('MemberImage')->find($request->getParameter('member_image_id')); | |
$this->forward404Unless($image); | |
$this->forward404Unless($image->getMemberId() == $this->getUser()->getMemberId()); | |
@@ -384,6 +385,7 @@ abstract class opMemberAction extends sfActions | |
public function executeChangeMainImage($request) | |
{ | |
+ $request->checkCSRFProtection(); | |
$image = Doctrine::getTable('MemberImage')->find($request->getParameter('member_image_id')); | |
$this->forward404Unless($image); | |
$this->forward404Unless($image->getMemberId() == $this->getUser()->getMemberId()); | |
diff --git a/lib/form/doctrine/BannerImageForm.class.php b/lib/form/doctrine/BannerImageForm.class.php | |
index 1d17c4b..c69e6b4 100644 | |
--- a/lib/form/doctrine/BannerImageForm.class.php | |
+++ b/lib/form/doctrine/BannerImageForm.class.php | |
@@ -24,7 +24,7 @@ class BannerImageForm extends BaseBannerImageForm | |
$this->setWidget('url', new sfWidgetFormInputText(array(), array('size' => 40))); | |
$this->setWidget('name', new sfWidgetFormInputText()); | |
$this->setValidators(array( | |
- 'file' => new opValidatorImageFile(), | |
+ 'file' => new opValidatorImageFile(array('required' => $this->isNew())), | |
'url' => new sfValidatorPass(), | |
'name' => new sfValidatorPass(), | |
)); | |
@@ -38,10 +38,6 @@ class BannerImageForm extends BaseBannerImageForm | |
public function save() | |
{ | |
- $file = new File(); | |
- $file->setFromValidatedFile($this->getValue('file')); | |
- $file->setName('b_'.$file->getName()); | |
- | |
if ($this->isNew()) | |
{ | |
$bannerImage = new BannerImage(); | |
@@ -50,7 +46,15 @@ class BannerImageForm extends BaseBannerImageForm | |
{ | |
$bannerImage = $this->getObject(); | |
} | |
- $bannerImage->setFile($file); | |
+ | |
+ if ($this->getValue('file')) | |
+ { | |
+ $file = new File(); | |
+ $file->setFromValidatedFile($this->getValue('file')); | |
+ $file->setName('b_'.$file->getName()); | |
+ $bannerImage->setFile($file); | |
+ } | |
+ | |
$bannerImage->setUrl($this->getValue('url')); | |
$bannerImage->setName($this->getValue('name')); | |
diff --git a/lib/widget/opWidgetFormRichTextareaOpenPNE.class.php b/lib/widget/opWidgetFormRichTextareaOpenPNE.class.php | |
index 8188877..ccd3c09 100644 | |
--- a/lib/widget/opWidgetFormRichTextareaOpenPNE.class.php | |
+++ b/lib/widget/opWidgetFormRichTextareaOpenPNE.class.php | |
@@ -406,14 +406,20 @@ class opWidgetFormRichTextareaOpenPNE extends opWidgetFormRichTextarea | |
static public function opColorToHtml($isEndtag, $tagname, $attributes, $isUseStylesheet) | |
{ | |
$options = array(); | |
+ $code = isset($attributes['code']) ? $attributes['code'] : ''; | |
+ if (!($code && preg_match('/^#[0-9a-fA-F]{6}$/', $code))) | |
+ { | |
+ $code = ''; | |
+ } | |
+ | |
if ($isUseStylesheet) | |
{ | |
if ($isEndtag) { | |
return '</span>'; | |
} | |
$options['class'] = strtr($tagname, ':', '_'); | |
- if (isset($attributes['code'])) { | |
- $options['style'] = 'color:'.$attributes['code']; | |
+ if ($code) { | |
+ $options['style'] = 'color:'.$code; | |
} | |
return tag('span', $options, true); | |
@@ -424,8 +430,8 @@ class opWidgetFormRichTextareaOpenPNE extends opWidgetFormRichTextarea | |
{ | |
return '</font>'; | |
} | |
- if (isset($attributes['code'])) { | |
- $options['color'] = $attributes['code']; | |
+ if ($code) { | |
+ $options['color'] = $code; | |
} | |
return tag('font', $options, true); | |
@@ -435,6 +441,13 @@ class opWidgetFormRichTextareaOpenPNE extends opWidgetFormRichTextarea | |
static public function opFontToHtml($isEndtag, $tagname, $attributes, $isUseStylesheet) | |
{ | |
$options = array(); | |
+ | |
+ $color = isset($attributes['color']) ? $attributes['color'] : ''; | |
+ if (!($color && preg_match('/^#[0-9a-fA-F]{6}$/', $color))) | |
+ { | |
+ $color = ''; | |
+ } | |
+ | |
if ($isUseStylesheet) | |
{ | |
if ($isEndtag) { | |
@@ -442,8 +455,8 @@ class opWidgetFormRichTextareaOpenPNE extends opWidgetFormRichTextarea | |
} | |
$options['class'] = 'op_font'; | |
$options['style'] = ''; | |
- if (isset($attributes['color'])) { | |
- $options['style'] .= 'color:'.$attributes['color'].';'; | |
+ if ($color) { | |
+ $options['style'] .= 'color:'.$color.';'; | |
} | |
$size = isset($attributes['size']) ? (int)$attributes['size'] : 0; | |
$fontSizeMap = array( | |
@@ -456,7 +469,6 @@ class opWidgetFormRichTextareaOpenPNE extends opWidgetFormRichTextarea | |
7 => 'xx-large' | |
); | |
if (isset($fontSizeMap[$size])) { | |
- | |
$options['style'] .= 'font-size:'.$fontSizeMap[$size]; | |
} | |
@@ -468,8 +480,8 @@ class opWidgetFormRichTextareaOpenPNE extends opWidgetFormRichTextarea | |
{ | |
return '</font>'; | |
} | |
- if (isset($attributes['color'])) { | |
- $options['color'] = $attributes['color']; | |
+ if ($color) { | |
+ $options['color'] = $color; | |
} | |
$size = isset($attributes['size']) ? (int)$attributes['size'] : 0; | |
if ($size >= 1 && $size <= 7) | |
diff --git a/web/js/tiny_mce/plugins/openpne/editor_plugin.js b/web/js/tiny_mce/plugins/openpne/editor_plugin.js | |
index de83742..8014cc8 100644 | |
--- a/web/js/tiny_mce/plugins/openpne/editor_plugin.js | |
+++ b/web/js/tiny_mce/plugins/openpne/editor_plugin.js | |
@@ -51,9 +51,9 @@ return result;};rep(/</gi,"<");rep(/>/gi,">");rep(/\n/gi,"<br />");rep(/&l | |
if(isEndTag){return"</"+tagname+">";} | |
if(org_tagname=="font"){if(attributes["size"]){if(fontSizeMap[attributes["size"]-1]){fontsize=fontSizeMap[attributes["size"]-1];} | |
style+='font-size:'+fontsize+';';} | |
-if(attributes["color"]){style+='color:'+attributes["color"]+';';} | |
+if(attributes["color"]&&attributes["color"].match(/^#[0-9a-fA-F]{6}$/)){style+='color:'+attributes["color"]+';';} | |
opt=' style="'+style+'"';} | |
-if(org_tagname=="color"&&attributes["code"]){opt=' style="color:'+attributes["code"]+';"';} | |
+if(org_tagname=="color"&&attributes["code"]&&attributes["code"].match(/^#[0-9a-fA-F]{6}$/)){opt=' style="color:'+attributes["code"]+';"';} | |
if(org_tagname=="large"){opt=' style="font-size:large"';} | |
if(org_tagname=="small"){opt=' style="font-size:xx-small"';} | |
return"<"+tagname+opt+">";});return s;}});tinymce.PluginManager.add('openpne',tinymce.plugins.OpenPNEPlugin);})(); | |
\ No newline at end of file | |
diff --git a/web/js/tiny_mce/plugins/openpne/editor_plugin.js.src b/web/js/tiny_mce/plugins/openpne/editor_plugin.js.src | |
index 5a08ea4..ec3dfa0 100644 | |
--- a/web/js/tiny_mce/plugins/openpne/editor_plugin.js.src | |
+++ b/web/js/tiny_mce/plugins/openpne/editor_plugin.js.src | |
@@ -590,14 +590,14 @@ | |
style += 'font-size:' + fontsize + ';'; | |
} | |
- if (attributes["color"]) { | |
+ if (attributes["color"] && attributes["color"].match(/^#[0-9a-fA-F]{6}$/)) { | |
style += 'color:' + attributes["color"] + ';'; | |
} | |
opt = ' style="' + style + '"'; | |
} | |
// old style | |
- if (org_tagname == "color" && attributes["code"]) { | |
+ if (org_tagname == "color" && attributes["code"] && attributes["code"].match(/^#[0-9a-fA-F]{6}$/)) { | |
opt = ' style="color:' + attributes["code"] + ';"'; | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment